Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 0 additions & 5 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,6 @@ dist/test: dist/app
gren_packages: gren.json
gren package install

.PHONY: db
db:
# TODO: get db url from env
ws4sql --quick-db=db/local.db

.PHONY: server
server: dist/app
node dist/app
Expand Down
5 changes: 2 additions & 3 deletions devbox.json
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
{
"$schema": "https://raw.githubusercontent.com/jetify-com/devbox/0.13.6/.schema/devbox.schema.json",
"packages": [
"nodejs@20",
"gren@0.6.3",
"nodejs@24",
"gren@0.6.5",
"curl@latest",
"jq@latest",
"github:blaix/ws4sql-nix/0.17dev7",
"sqlite@latest"
],
"shell": {
Expand Down
76 changes: 44 additions & 32 deletions devbox.lock
Original file line number Diff line number Diff line change
Expand Up @@ -128,55 +128,51 @@
"github:NixOS/nixpkgs/nixpkgs-unstable": {
"resolved": "github:NixOS/nixpkgs/3549532663732bfd89993204d40543e9edaec4f2?lastModified=1742272065&narHash=sha256-ud8vcSzJsZ%2FCK%2Br8%2Fv0lyf4yUntVmDq6Z0A41ODfWbE%3D"
},
"github:blaix/ws4sql-nix/0.17dev7": {
"last_modified": "2026-03-11T20:58:00Z",
"resolved": "github:blaix/ws4sql-nix/4837de181c857cdb9fa015f7fb9a018cceec8532?lastModified=1773262680&narHash=sha256-mOBI%2BWUDHjd6xf3JhlC%2BMkt2Nk8BzN20J0dZfQetHbc%3D"
},
"gren@0.6.3": {
"last_modified": "2025-09-18T16:33:27Z",
"resolved": "github:NixOS/nixpkgs/f4b140d5b253f5e2a1ff4e5506edbf8267724bde#gren",
"gren@0.6.5": {
"last_modified": "2026-04-16T08:46:55Z",
"resolved": "github:NixOS/nixpkgs/b86751bc4085f48661017fa226dee99fab6c651b#gren",
"source": "devbox-search",
"version": "0.6.3",
"version": "0.6.5",
"systems": {
"aarch64-darwin": {
"outputs": [
{
"name": "out",
"path": "/nix/store/clr249d9d9rlqs3fsgj2lb4m97ph2hms-gren-0.6.3",
"path": "/nix/store/kijfkwvkxkfp8vpzj630q99k5cymdgx2-gren-0.6.5",
"default": true
}
],
"store_path": "/nix/store/clr249d9d9rlqs3fsgj2lb4m97ph2hms-gren-0.6.3"
"store_path": "/nix/store/kijfkwvkxkfp8vpzj630q99k5cymdgx2-gren-0.6.5"
},
"aarch64-linux": {
"outputs": [
{
"name": "out",
"path": "/nix/store/zgx86f6s63l0ckj78psmkdkwqfxr3770-gren-0.6.3",
"path": "/nix/store/a2za3hav09hg1amcj225b913dyfjs2wp-gren-0.6.5",
"default": true
}
],
"store_path": "/nix/store/zgx86f6s63l0ckj78psmkdkwqfxr3770-gren-0.6.3"
"store_path": "/nix/store/a2za3hav09hg1amcj225b913dyfjs2wp-gren-0.6.5"
},
"x86_64-darwin": {
"outputs": [
{
"name": "out",
"path": "/nix/store/1gdj8kkrb5d945rklcxwqzl8s55kjpyx-gren-0.6.3",
"path": "/nix/store/0mrp2wghqzmlcqc6nrfpv9l7s1p3kmcg-gren-0.6.5",
"default": true
}
],
"store_path": "/nix/store/1gdj8kkrb5d945rklcxwqzl8s55kjpyx-gren-0.6.3"
"store_path": "/nix/store/0mrp2wghqzmlcqc6nrfpv9l7s1p3kmcg-gren-0.6.5"
},
"x86_64-linux": {
"outputs": [
{
"name": "out",
"path": "/nix/store/xhc5c5vl8jxxm0jrr8vap34agz3f6yfi-gren-0.6.3",
"path": "/nix/store/3bc06xrds99f1cdhymrfyv8nwi43q8bp-gren-0.6.5",
"default": true
}
],
"store_path": "/nix/store/xhc5c5vl8jxxm0jrr8vap34agz3f6yfi-gren-0.6.3"
"store_path": "/nix/store/3bc06xrds99f1cdhymrfyv8nwi43q8bp-gren-0.6.5"
}
}
},
Expand Down Expand Up @@ -296,68 +292,84 @@
}
}
},
"nodejs@20": {
"last_modified": "2025-02-12T00:10:52Z",
"nodejs@24": {
"last_modified": "2025-12-29T16:45:58Z",
"plugin_version": "0.0.2",
"resolved": "github:NixOS/nixpkgs/83a2581c81ff5b06f7c1a4e7cc736a455dfcf7b4#nodejs_20",
"resolved": "github:NixOS/nixpkgs/346dd96ad74dc4457a9db9de4f4f57dab2e5731d#nodejs_24",
"source": "devbox-search",
"version": "20.18.3",
"version": "24.12.0",
"systems": {
"aarch64-darwin": {
"outputs": [
{
"name": "out",
"path": "/nix/store/pba611q472k53hjk8kai3mqg5nqa0q4v-nodejs-20.18.3",
"path": "/nix/store/b1h0af3yb3z9jz048phclcqw6ihiww67-nodejs-24.12.0",
"default": true
},
{
"name": "dev",
"path": "/nix/store/ksn4nj0nbp0ikmh4scy9x4biqqdswwhy-nodejs-24.12.0-dev"
},
{
"name": "libv8",
"path": "/nix/store/giz92jzgk5j5x4rr87qfhh7h23vxw02s-nodejs-20.18.3-libv8"
"path": "/nix/store/3x72bm7l30ib7l7cximrp0sklcq8jqwy-nodejs-24.12.0-libv8"
}
],
"store_path": "/nix/store/pba611q472k53hjk8kai3mqg5nqa0q4v-nodejs-20.18.3"
"store_path": "/nix/store/b1h0af3yb3z9jz048phclcqw6ihiww67-nodejs-24.12.0"
},
"aarch64-linux": {
"outputs": [
{
"name": "out",
"path": "/nix/store/958yayymdnm342x6vldlfbjah51dy0d4-nodejs-20.18.3",
"path": "/nix/store/9jfsyhcr9c6rpm94lrkibv75jkggvwss-nodejs-24.12.0",
"default": true
},
{
"name": "dev",
"path": "/nix/store/7izhv9x1yvsmyrhmmyps6bxjjclajm80-nodejs-24.12.0-dev"
},
{
"name": "libv8",
"path": "/nix/store/wxl92b7ld4dfhskvmgvf9r7q9h86q2s6-nodejs-20.18.3-libv8"
"path": "/nix/store/8hl74pnc1qyz68rg10ixw7fz32hcxqkk-nodejs-24.12.0-libv8"
}
],
"store_path": "/nix/store/958yayymdnm342x6vldlfbjah51dy0d4-nodejs-20.18.3"
"store_path": "/nix/store/9jfsyhcr9c6rpm94lrkibv75jkggvwss-nodejs-24.12.0"
},
"x86_64-darwin": {
"outputs": [
{
"name": "out",
"path": "/nix/store/3wrrj4ddsc8mrim3xnqwws8w2b3an4jv-nodejs-20.18.3",
"path": "/nix/store/cj1243xswxvnwgifyiyg8axhn0r2vl48-nodejs-24.12.0",
"default": true
},
{
"name": "dev",
"path": "/nix/store/kzia3rkaf9vwpn3py23q9v49jpjm6zx7-nodejs-24.12.0-dev"
},
{
"name": "libv8",
"path": "/nix/store/bw62bzsr6rgrygpk5g4vjpbbqwffn8sg-nodejs-20.18.3-libv8"
"path": "/nix/store/xszji81xj7ghjhz7jk0jkhb84nfwyd8f-nodejs-24.12.0-libv8"
}
],
"store_path": "/nix/store/3wrrj4ddsc8mrim3xnqwws8w2b3an4jv-nodejs-20.18.3"
"store_path": "/nix/store/cj1243xswxvnwgifyiyg8axhn0r2vl48-nodejs-24.12.0"
},
"x86_64-linux": {
"outputs": [
{
"name": "out",
"path": "/nix/store/1bmfcixbhs5fxv2zzyc45grx3xgc90j9-nodejs-20.18.3",
"path": "/nix/store/9z1v3wyrxp6fpyzw21lcakd5w7aknzyc-nodejs-24.12.0",
"default": true
},
{
"name": "libv8",
"path": "/nix/store/03gwhdryzihhv729133pfmri9qjhnbr5-nodejs-20.18.3-libv8"
"path": "/nix/store/5yvx909wlis13qd2y1ahwl7ij21ma69a-nodejs-24.12.0-libv8"
},
{
"name": "dev",
"path": "/nix/store/7ll99p08gmpg0n048669p80zjibl5akr-nodejs-24.12.0-dev"
}
],
"store_path": "/nix/store/1bmfcixbhs5fxv2zzyc45grx3xgc90j9-nodejs-20.18.3"
"store_path": "/nix/store/9z1v3wyrxp6fpyzw21lcakd5w7aknzyc-nodejs-24.12.0"
}
}
},
Expand Down
5 changes: 2 additions & 3 deletions gren.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,12 @@
"source-directories": [
"src"
],
"gren-version": "0.6.3",
"gren-version": "0.6.5",
"dependencies": {
"direct": {
"blaix/gren-effectful-tests": "6.0.0",
"blaix/gren-ws4sql": "4.0.0",
"gren-lang/core": "7.0.0",
"gren-lang/node": "6.0.0",
"gren-lang/node": "local:../node",
"gren-lang/test": "5.0.0",
"gren-lang/url": "6.0.0"
},
Expand Down
Binary file removed gren_packages/blaix_gren_ws4sql__4_0_0.pkg.gz
Binary file not shown.
Binary file removed gren_packages/gren_lang_node__6_0_0.pkg.gz
Binary file not shown.
6 changes: 0 additions & 6 deletions process-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,5 @@
version: "0.5"

processes:
db:
command: make db
ready_log_line: "Web Service listening"
server:
command: make server
depends_on:
db:
condition: process_log_ready
47 changes: 30 additions & 17 deletions src/Main.gren
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ module Main exposing (main)

import Bytes exposing (Bytes)
import Crypto
import Db
import Sqlite
import Dict
import Db.Encode
import FileSystem
import HttpClient
import HttpServer exposing (Request, ServerError(..), Method(..))
import HttpServer.Response as Response exposing (Response)
Expand All @@ -18,8 +18,9 @@ import Route.Error
import Route.PublishingIdentity
import Route.Session
import Stream
import Sqlite
import Sqlite.Encode
import Task exposing (Task)
import Test.E2E.Helper as Helper
import Time
import Url
import User exposing (User)
Expand Down Expand Up @@ -48,7 +49,7 @@ type alias Model =
{ stdout : Stream.Writable Bytes
, stderr : Stream.Writable Bytes
, server : Maybe HttpServer.Server
, db : Db.Connection
, db : Maybe Sqlite.Database
, postmark : Maybe Postmark.Configuration
, secureContext : Maybe Crypto.SecureContext
}
Expand All @@ -58,11 +59,9 @@ init : Environment -> Init.Task { model : Model, command : Cmd Msg }
init env =
Init.await HttpServer.initialize <| \serverPermission ->
Init.await HttpClient.initialize <| \httpPerm ->
Init.await FileSystem.initialize <| \fsPerm ->
Init.awaitTask Node.getEnvironmentVariables <| \envVars ->
let
db =
Helper.initDb httpPerm

postmark =
envVars
|> Dict.get "POSTMARK_SERVER_TOKEN"
Expand All @@ -78,14 +77,23 @@ init env =
{ stdout = env.stdout
, stderr = env.stderr
, server = Nothing
, db = db
, db = Nothing
, secureContext = Nothing
, postmark = postmark
}
, command =
let
initDb =
Registry.Db.open fsPerm
|> Task.andThen
(\db ->
Registry.Db.migrate db
|> Task.map (\_ -> db)
)
|> Task.attempt DbMigrationResult
in
Cmd.batch
[ Registry.Db.migrate db
|> Task.attempt DbMigrationResult
[ initDb
, HttpServer.createServer serverPermission serverConfig
|> Task.attempt CreateServerResult
, Crypto.getSecureContext
Expand All @@ -99,7 +107,7 @@ init env =

type Msg
= CreateServerResult (Result HttpServer.ServerError HttpServer.Server)
| DbMigrationResult (Result Db.Error (Array Int))
| DbMigrationResult (Result Sqlite.Error Sqlite.Database)
| SecureContextResult (Result {} Crypto.SecureContext)
| GotRequest { request : HttpServer.Request, response : Response }
| ResponseReady Route.Response
Expand Down Expand Up @@ -128,8 +136,8 @@ update msg model =

DbMigrationResult result ->
when result is
Ok numChanges ->
{ model = model
Ok db ->
{ model = { model | db = Just db }
, command = Cmd.none
}

Expand Down Expand Up @@ -214,10 +222,12 @@ route model request response =
config :
{ secureContext : Maybe Crypto.SecureContext
, postmark : Maybe Postmark.Configuration
, db : Maybe Sqlite.Database
}
config =
{ secureContext = model.secureContext
, postmark = model.postmark
, db = model.db
}
in
when config is
Expand All @@ -232,7 +242,10 @@ route model request response =
{ postmark = Nothing } ->
Route.Error.serverError response "Missing postmark config."

{ postmark = Just postmark, secureContext = Just secureContext } ->
{ db = Nothing } ->
Route.Error.serverError response "DB failed to initialize."

{ postmark = Just postmark, secureContext = Just secureContext, db = Just db } ->
when { method = request.method, path = path } is


Expand All @@ -241,7 +254,7 @@ route model request response =

{ method = POST, path = [ "session" ] } ->
Route.Session.create
{ db = model.db
{ db = db
, postmark = postmark
, secureContext = secureContext
, body = request.body
Expand All @@ -250,7 +263,7 @@ route model request response =

{ method = POST, path = [ "session", "fetch" ] } ->
Route.Session.fetch
{ db = model.db
{ db = db
, secureContext = secureContext
, body = request.body
, response = response
Expand All @@ -262,7 +275,7 @@ route model request response =

{ method = POST, path = [ "publishing-identity" ] } ->
Route.PublishingIdentity.create
{ db = model.db
{ db = db
, body = request.body
, response = response
}
Expand Down
Loading
Loading