okengine 0.2.5 → 0.2.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +24 -23
- package/README.md +52 -346
- package/docs/spec/console.md +165 -142
- package/docs/spec/example.md +490 -312
- package/docs/spec/four-applications.md +495 -314
- package/docs/spec/unified-theory.md +184 -175
- package/package.json +46 -38
- package/spec/manifest.v1.schema.json +40 -9
- package/src/auth/api-keys.ts +2 -5
- package/src/auth/attenuation.ts +2 -6
- package/src/auth/auth.test.ts +53 -31
- package/src/auth/invoke-as.ts +1 -3
- package/src/auth/operator.ts +8 -26
- package/src/auth/planes.ts +2 -7
- package/src/auth/plugin.ts +4 -7
- package/src/auth/roles.ts +1 -5
- package/src/auth/sessions.ts +10 -39
- package/src/cli/args.ts +1 -5
- package/src/cli/ask-dev-mode.ts +40 -0
- package/src/cli/build.ts +1 -2
- package/src/cli/client-add.test.ts +8 -15
- package/src/cli/client-add.ts +5 -14
- package/src/cli/completion.test.ts +1 -5
- package/src/cli/completion.ts +4 -17
- package/src/cli/db-auto-push.test.ts +64 -0
- package/src/cli/db-auto-push.ts +72 -0
- package/src/cli/db.test.ts +189 -0
- package/src/cli/db.ts +386 -0
- package/src/cli/dev-app-runner.ts +2 -8
- package/src/cli/dev-db-push.test.ts +163 -0
- package/src/cli/dev-mode.test.ts +45 -0
- package/src/cli/dev-mode.ts +78 -0
- package/src/cli/dev.test.ts +148 -21
- package/src/cli/dev.ts +208 -134
- package/src/cli/doc-drift.test.ts +3 -2
- package/src/cli/doc-drift.ts +21 -50
- package/src/cli/doc-staleness.test.ts +69 -0
- package/src/cli/docker-cli.test.ts +7 -8
- package/src/cli/docker.ts +1 -3
- package/src/cli/doctor-diff-examples.ts +1 -3
- package/src/cli/doctor-diff.test.ts +1 -5
- package/src/cli/doctor-diff.ts +17 -46
- package/src/cli/doctor-pii.ts +2 -7
- package/src/cli/doctor.test.ts +26 -4
- package/src/cli/doctor.ts +35 -11
- package/src/cli/eval.ts +4 -14
- package/src/cli/gates-list.ts +1 -4
- package/src/cli/hero-meta.test.ts +17 -19
- package/src/cli/hero-meta.ts +20 -30
- package/src/cli/images.ts +3 -8
- package/src/cli/index.ts +11 -2
- package/src/cli/load-config.images.test.ts +14 -14
- package/src/cli/load-config.ts +41 -47
- package/src/cli/mcp-from-console.ts +1 -4
- package/src/cli/mode.ts +45 -0
- package/src/cli/ports.test.ts +4 -13
- package/src/cli/ports.ts +1 -3
- package/src/cli/privacy-erase.ts +1 -3
- package/src/cli/registry.ts +75 -25
- package/src/cli/schema.ts +3 -10
- package/src/cli/stack.ts +2 -7
- package/src/cli/start.ts +4 -15
- package/src/cli/upgrade.ts +1 -4
- package/src/client/budget-entry.ts +1 -6
- package/src/client/create.test.ts +6 -12
- package/src/client/create.ts +2 -8
- package/src/client/errors.ts +1 -4
- package/src/client/index.ts +1 -6
- package/src/client/notes-contract.test.ts +4 -13
- package/src/client/transport.ts +9 -30
- package/src/client/types.ts +8 -29
- package/src/compiler/aot.test.ts +2 -9
- package/src/compiler/aot.ts +1 -4
- package/src/compiler/differential.test.ts +3 -11
- package/src/compiler/dynamic.ts +1 -4
- package/src/compiler/effects-infer.ts +8 -34
- package/src/compiler/emit.ts +1 -3
- package/src/compiler/extract.test.ts +96 -30
- package/src/compiler/extract.ts +362 -156
- package/src/compiler/fixtures/skyport/oke.config.ts +1 -1
- package/src/compiler/fixtures/skyport/src/flows/bookings/index.ts +7 -3
- package/src/compiler/fixtures/skyport/src/flows/payments/index.ts +1 -3
- package/src/compiler/fixtures/skyport/src/flows/support/index.ts +4 -1
- package/src/compiler/fixtures/skyport.expected.json +24 -83
- package/src/compiler/fixtures/triggers/five-triggers.ts +1 -2
- package/src/compiler/http-parse.ts +2 -9
- package/src/compiler/index.ts +1 -5
- package/src/compiler/response.ts +4 -7
- package/src/compiler/sucrose.ts +11 -31
- package/src/config/define-config.test.ts +57 -34
- package/src/config/index.ts +181 -37
- package/src/config/resolve-driver.test.ts +28 -17
- package/src/console/budget.test.ts +1 -4
- package/src/console/index.ts +1 -4
- package/src/console/server/access.test.ts +15 -43
- package/src/console/server/access.ts +19 -49
- package/src/console/server/ai.test.ts +3 -11
- package/src/console/server/ai.ts +23 -46
- package/src/console/server/app.ts +14 -45
- package/src/console/server/auth-rate.test.ts +4 -12
- package/src/console/server/bind.ts +1 -5
- package/src/console/server/channels.test.ts +2 -6
- package/src/console/server/channels.ts +10 -35
- package/src/console/server/claim.ts +2 -8
- package/src/console/server/clock.test.ts +2 -6
- package/src/console/server/clock.ts +8 -26
- package/src/console/server/console.test.ts +1 -3
- package/src/console/server/diff.test.ts +5 -17
- package/src/console/server/diff.ts +10 -31
- package/src/console/server/dry-run.audit.test.ts +2 -8
- package/src/console/server/flows.ts +64 -233
- package/src/console/server/gates.test.ts +14 -50
- package/src/console/server/gates.ts +13 -48
- package/src/console/server/index.ts +2 -9
- package/src/console/server/live.ts +3 -12
- package/src/console/server/operator-db.test.ts +4 -15
- package/src/console/server/operator-db.ts +13 -32
- package/src/console/server/plugin.ts +50 -53
- package/src/console/server/plugins.test.ts +2 -6
- package/src/console/server/plugins.ts +17 -56
- package/src/console/server/runs-pii.ts +2 -7
- package/src/console/server/security.gate.test.ts +18 -40
- package/src/console/server/serve.ts +10 -25
- package/src/console/server/signals.test.ts +1 -3
- package/src/console/server/signals.ts +17 -40
- package/src/console/server/state.ts +21 -59
- package/src/console/server/store.test.ts +20 -22
- package/src/console/server/store.ts +31 -76
- package/src/console/server/vault.test.ts +12 -29
- package/src/console/server/vault.ts +23 -60
- package/src/console/ui/access/AccessA11yView.tsx +6 -21
- package/src/console/ui/access/a11y.test.tsx +3 -12
- package/src/console/ui/access/acknowledgement.test.ts +1 -4
- package/src/console/ui/access/acknowledgement.ts +1 -3
- package/src/console/ui/access/blast-radius.ts +1 -3
- package/src/console/ui/access/confirmation.test.ts +1 -5
- package/src/console/ui/access/confirmation.ts +1 -4
- package/src/console/ui/access/fixture.ts +1 -5
- package/src/console/ui/access/grantable.test.ts +1 -3
- package/src/console/ui/access/grantable.ts +2 -7
- package/src/console/ui/access/index.ts +2 -9
- package/src/console/ui/access/provenance.test.ts +1 -3
- package/src/console/ui/access/provenance.ts +2 -6
- package/src/console/ui/access/search.test.ts +1 -5
- package/src/console/ui/access/search.ts +2 -6
- package/src/console/ui/ai/AiA11yView.tsx +6 -17
- package/src/console/ui/ai/a11y.test.tsx +2 -5
- package/src/console/ui/ai/fixture.ts +2 -7
- package/src/console/ui/ai/format.ts +1 -3
- package/src/console/ui/ai/group.test.ts +1 -3
- package/src/console/ui/ai/group.ts +4 -12
- package/src/console/ui/ai/index.ts +2 -9
- package/src/console/ui/ai/promotion.test.ts +2 -7
- package/src/console/ui/ai/promotion.ts +4 -13
- package/src/console/ui/ai/search.test.ts +2 -11
- package/src/console/ui/ai/search.ts +3 -13
- package/src/console/ui/ai/types.ts +1 -8
- package/src/console/ui/architecture/ArchitectureA11yView.tsx +8 -29
- package/src/console/ui/architecture/a11y.test.tsx +1 -2
- package/src/console/ui/architecture/declared.ts +1 -5
- package/src/console/ui/architecture/index.ts +7 -35
- package/src/console/ui/architecture/layout.ts +1 -3
- package/src/console/ui/architecture/pathologies.ts +10 -19
- package/src/console/ui/architecture/search.ts +6 -15
- package/src/console/ui/architecture/traffic.ts +4 -14
- package/src/console/ui/architecture/types.ts +2 -10
- package/src/console/ui/architecture/view.test.ts +7 -19
- package/src/console/ui/architecture/view.ts +9 -36
- package/src/console/ui/channels/ChannelsA11yView.tsx +4 -13
- package/src/console/ui/channels/a11y.test.tsx +1 -2
- package/src/console/ui/channels/confirmation.test.ts +1 -4
- package/src/console/ui/channels/confirmation.ts +1 -4
- package/src/console/ui/channels/findings.ts +1 -5
- package/src/console/ui/channels/index.ts +2 -8
- package/src/console/ui/channels/locale.test.ts +1 -3
- package/src/console/ui/channels/locale.ts +2 -8
- package/src/console/ui/channels/search.ts +4 -13
- package/src/console/ui/channels/taxonomy.ts +1 -3
- package/src/console/ui/clock/ClockA11yView.tsx +9 -26
- package/src/console/ui/clock/a11y.test.tsx +2 -5
- package/src/console/ui/clock/confirmation.test.ts +1 -3
- package/src/console/ui/clock/confirmation.ts +1 -4
- package/src/console/ui/clock/findings.ts +1 -4
- package/src/console/ui/clock/health.ts +2 -7
- package/src/console/ui/clock/index.ts +2 -10
- package/src/console/ui/clock/search.test.ts +1 -3
- package/src/console/ui/clock/search.ts +2 -6
- package/src/console/ui/clock/timeline.test.ts +1 -3
- package/src/console/ui/clock/waiting-on.test.ts +1 -5
- package/src/console/ui/clock/waiting-on.ts +2 -7
- package/src/console/ui/diff/DiffA11yView.tsx +8 -17
- package/src/console/ui/diff/a11y.test.tsx +2 -5
- package/src/console/ui/diff/group.test.ts +3 -13
- package/src/console/ui/diff/group.ts +2 -8
- package/src/console/ui/diff/index.ts +2 -8
- package/src/console/ui/diff/search.test.ts +1 -5
- package/src/console/ui/diff/search.ts +4 -16
- package/src/console/ui/diff/summary.ts +1 -2
- package/src/console/ui/dist/assets/{index-Dy4jht9P.js → index-BWo8R7NR.js} +2 -2
- package/src/console/ui/dist/assets/{panel-access-Dd37LU2c.js → panel-access-C0J2D-a2.js} +1 -1
- package/src/console/ui/dist/assets/{panel-ai-CC7LR6-J.js → panel-ai-D_m6WQI8.js} +1 -1
- package/src/console/ui/dist/assets/{panel-architecture-B5b3iKCz.js → panel-architecture-CKnXFyUx.js} +1 -1
- package/src/console/ui/dist/assets/{panel-channels-CeNjTKXp.js → panel-channels-BOmQ-onL.js} +1 -1
- package/src/console/ui/dist/assets/{panel-clock-DgFTLoHV.js → panel-clock-giAq0Ccv.js} +1 -1
- package/src/console/ui/dist/assets/{panel-diff-DxehccqB.js → panel-diff-cdonmH8c.js} +1 -1
- package/src/console/ui/dist/assets/{panel-flows-BtrVn-Eg.js → panel-flows-DlCU5zjA.js} +2 -2
- package/src/console/ui/dist/assets/{panel-gates-Z9MKRGdH.js → panel-gates-XclZxWD5.js} +1 -1
- package/src/console/ui/dist/assets/{panel-overview-Dt_AeXgd.js → panel-overview-BznEOTnb.js} +1 -1
- package/src/console/ui/dist/assets/{panel-plugins-DWd0TowH.js → panel-plugins-CcGM1g64.js} +1 -1
- package/src/console/ui/dist/assets/{panel-runs-DGstFHeq.js → panel-runs-CGWNHLR4.js} +1 -1
- package/src/console/ui/dist/assets/{panel-signals-DzEa2Fnt.js → panel-signals-CNywkdak.js} +1 -1
- package/src/console/ui/dist/assets/{panel-store-BJkbNgxx.js → panel-store-KmTbFHMH.js} +1 -1
- package/src/console/ui/dist/assets/{panel-traces-BaRVO3gM.js → panel-traces-DBLx2ilD.js} +1 -1
- package/src/console/ui/dist/assets/panel-vault-CEnFc0dk.js +1 -0
- package/src/console/ui/dist/index.html +1 -1
- package/src/console/ui/flows/FlowsA11yView.tsx +7 -22
- package/src/console/ui/flows/a11y.test.tsx +2 -8
- package/src/console/ui/flows/buffer.test.ts +3 -11
- package/src/console/ui/flows/buffer.ts +4 -11
- package/src/console/ui/flows/confirmation.ts +1 -3
- package/src/console/ui/flows/contract.test.ts +3 -7
- package/src/console/ui/flows/contract.ts +12 -36
- package/src/console/ui/flows/graph.test.ts +3 -11
- package/src/console/ui/flows/graph.ts +5 -15
- package/src/console/ui/flows/index.ts +1 -6
- package/src/console/ui/flows/save-as-test.ts +1 -3
- package/src/console/ui/flows/search.ts +8 -25
- package/src/console/ui/flows/tiers.ts +2 -9
- package/src/console/ui/gates/GatesA11yView.tsx +4 -13
- package/src/console/ui/gates/a11y.test.tsx +2 -5
- package/src/console/ui/gates/audit.ts +1 -3
- package/src/console/ui/gates/denial.test.ts +1 -3
- package/src/console/ui/gates/denial.ts +4 -12
- package/src/console/ui/gates/findings.ts +1 -3
- package/src/console/ui/gates/group.test.ts +3 -3
- package/src/console/ui/gates/group.ts +3 -11
- package/src/console/ui/gates/index.ts +2 -10
- package/src/console/ui/gates/search.ts +3 -10
- package/src/console/ui/overview/OverviewA11yView.tsx +9 -27
- package/src/console/ui/overview/a11y.test.tsx +1 -2
- package/src/console/ui/overview/busiest.ts +1 -3
- package/src/console/ui/overview/compose.ts +1 -13
- package/src/console/ui/overview/cost.ts +34 -38
- package/src/console/ui/overview/fixture.ts +21 -26
- package/src/console/ui/overview/golden.ts +4 -14
- package/src/console/ui/overview/index.ts +2 -9
- package/src/console/ui/overview/rank.test.ts +3 -10
- package/src/console/ui/overview/rank.ts +2 -7
- package/src/console/ui/overview/slo.test.ts +5 -9
- package/src/console/ui/overview/slo.ts +6 -23
- package/src/console/ui/overview/verdict.ts +3 -10
- package/src/console/ui/plugins/PluginsA11yView.tsx +8 -18
- package/src/console/ui/plugins/a11y.test.tsx +1 -2
- package/src/console/ui/plugins/fixture.ts +2 -4
- package/src/console/ui/plugins/group.test.ts +1 -3
- package/src/console/ui/plugins/group.ts +1 -6
- package/src/console/ui/plugins/index.ts +3 -13
- package/src/console/ui/plugins/search.ts +7 -19
- package/src/console/ui/runs/RunsA11yView.tsx +5 -20
- package/src/console/ui/runs/a11y.test.tsx +2 -5
- package/src/console/ui/runs/explain.ts +2 -6
- package/src/console/ui/runs/group.ts +3 -12
- package/src/console/ui/runs/histogram.test.ts +2 -11
- package/src/console/ui/runs/histogram.ts +1 -4
- package/src/console/ui/runs/index.ts +4 -18
- package/src/console/ui/runs/project.ts +2 -6
- package/src/console/ui/runs/query.test.ts +1 -3
- package/src/console/ui/runs/query.ts +12 -35
- package/src/console/ui/runs/search.ts +5 -19
- package/src/console/ui/runs/trace-link.test.ts +2 -6
- package/src/console/ui/runs/trace-link.ts +4 -16
- package/src/console/ui/runs/types.ts +1 -3
- package/src/console/ui/shell/App.tsx +2 -10
- package/src/console/ui/shell/client.ts +22 -115
- package/src/console/ui/shell/components/ui.tsx +1 -4
- package/src/console/ui/shell/layout/Shell.tsx +2 -4
- package/src/console/ui/shell/main.tsx +31 -96
- package/src/console/ui/shell/panels/access/AccessPanel.tsx +34 -98
- package/src/console/ui/shell/panels/ai/AiPanel.tsx +35 -106
- package/src/console/ui/shell/panels/architecture/ArchitecturePanel.tsx +18 -66
- package/src/console/ui/shell/panels/channels/ChannelsPanel.tsx +20 -57
- package/src/console/ui/shell/panels/clock/ClockPanel.tsx +22 -54
- package/src/console/ui/shell/panels/diff/DiffPanel.tsx +20 -61
- package/src/console/ui/shell/panels/flows/ContractEditor.tsx +6 -23
- package/src/console/ui/shell/panels/flows/FlowDrawer.tsx +13 -28
- package/src/console/ui/shell/panels/flows/FlowsPanel.tsx +9 -29
- package/src/console/ui/shell/panels/gates/GatesPanel.tsx +24 -80
- package/src/console/ui/shell/panels/overview/OverviewPanel.tsx +20 -58
- package/src/console/ui/shell/panels/plugins/PluginsPanel.tsx +16 -41
- package/src/console/ui/shell/panels/runs/RunsPanel.tsx +31 -99
- package/src/console/ui/shell/panels/signals/SignalsPanel.tsx +38 -101
- package/src/console/ui/shell/panels/store/StorePanel.tsx +27 -66
- package/src/console/ui/shell/panels/traces/TracesPanel.tsx +28 -89
- package/src/console/ui/shell/panels/vault/VaultPanel.tsx +22 -53
- package/src/console/ui/shell/setup/Wizard.tsx +3 -5
- package/src/console/ui/shell/styles.css +1 -2
- package/src/console/ui/signals/SignalsA11yView.tsx +9 -33
- package/src/console/ui/signals/a11y.test.tsx +2 -5
- package/src/console/ui/signals/confirmation.test.ts +1 -5
- package/src/console/ui/signals/confirmation.ts +2 -6
- package/src/console/ui/signals/dry-run.ts +1 -3
- package/src/console/ui/signals/durable.ts +1 -3
- package/src/console/ui/signals/findings.ts +1 -3
- package/src/console/ui/signals/group.test.ts +2 -8
- package/src/console/ui/signals/group.ts +2 -10
- package/src/console/ui/signals/index.ts +1 -4
- package/src/console/ui/signals/monitor.ts +2 -7
- package/src/console/ui/signals/schema-form.test.ts +3 -14
- package/src/console/ui/signals/schema-form.ts +1 -4
- package/src/console/ui/signals/search.ts +4 -13
- package/src/console/ui/store/StoreA11yView.tsx +3 -9
- package/src/console/ui/store/a11y.test.tsx +2 -5
- package/src/console/ui/store/confirmation.test.ts +1 -3
- package/src/console/ui/store/confirmation.ts +1 -4
- package/src/console/ui/store/dry-run.ts +2 -5
- package/src/console/ui/store/fixture.ts +1 -2
- package/src/console/ui/store/group.test.ts +1 -6
- package/src/console/ui/store/group.ts +1 -4
- package/src/console/ui/store/index.ts +1 -5
- package/src/console/ui/store/search.ts +2 -6
- package/src/console/ui/store/will-not-fire.ts +1 -2
- package/src/console/ui/traces/TracesA11yView.tsx +10 -29
- package/src/console/ui/traces/a11y.test.tsx +1 -2
- package/src/console/ui/traces/chain.test.ts +5 -19
- package/src/console/ui/traces/chain.ts +1 -3
- package/src/console/ui/traces/critical-path.test.ts +1 -3
- package/src/console/ui/traces/critical-path.ts +2 -6
- package/src/console/ui/traces/filter.test.ts +2 -6
- package/src/console/ui/traces/filter.ts +5 -13
- package/src/console/ui/traces/fold.test.ts +4 -12
- package/src/console/ui/traces/fold.ts +1 -3
- package/src/console/ui/traces/mini.ts +1 -3
- package/src/console/ui/traces/replay.test.ts +1 -3
- package/src/console/ui/traces/replay.ts +1 -3
- package/src/console/ui/traces/sampling.ts +1 -4
- package/src/console/ui/traces/search.ts +4 -17
- package/src/console/ui/traces/tier.ts +1 -3
- package/src/console/ui/vault/VaultA11yView.tsx +5 -17
- package/src/console/ui/vault/a11y.test.tsx +1 -2
- package/src/console/ui/vault/blast-radius.ts +1 -3
- package/src/console/ui/vault/confirmation.test.ts +1 -5
- package/src/console/ui/vault/confirmation.ts +1 -4
- package/src/console/ui/vault/dormant.test.ts +1 -4
- package/src/console/ui/vault/export-safe.test.ts +1 -5
- package/src/console/ui/vault/export-safe.ts +1 -4
- package/src/console/ui/vault/fixture.ts +3 -3
- package/src/console/ui/vault/group.ts +1 -2
- package/src/console/ui/vault/index.ts +2 -10
- package/src/console/ui/vault/search.ts +2 -6
- package/src/console/ui/vault/types.ts +1 -1
- package/src/console/xss.gate.test.ts +1 -3
- package/src/docker/compose.ts +112 -20
- package/src/docker/derive.ts +5 -19
- package/src/docker/docker.test.ts +15 -15
- package/src/docker/dockerfile.integration.test.ts +12 -21
- package/src/docker/helpers.ts +5 -4
- package/src/docker/index.ts +4 -11
- package/src/docker/pin.ts +1 -9
- package/src/docker/recipes/index.ts +5 -6
- package/src/docker/recipes/mailpit.ts +22 -0
- package/src/docker/recipes/postgres.ts +17 -6
- package/src/docker/recipes/redis.ts +6 -1
- package/src/docker/recipes/rustfs.ts +33 -0
- package/src/docker/stack-id.test.ts +33 -0
- package/src/docker/stack-id.ts +25 -13
- package/src/docker/stack.integration.test.ts +6 -21
- package/src/docker/types.ts +13 -4
- package/src/drivers/ai-anthropic.ts +5 -14
- package/src/drivers/ai-mock.ts +2 -5
- package/src/drivers/ai-openai-compatible.ts +4 -10
- package/src/drivers/ai-providers.test.ts +6 -13
- package/src/drivers/bun-native-completeness.test.ts +6 -15
- package/src/drivers/channel-console.ts +6 -7
- package/src/drivers/channel-fcm.ts +20 -30
- package/src/drivers/channel-resend.ts +1 -3
- package/src/drivers/channel-smtp.ts +2 -6
- package/src/drivers/channel-types.ts +2 -12
- package/src/drivers/channel-unifonic.ts +2 -6
- package/src/drivers/channel-wa-cloud.ts +2 -6
- package/src/drivers/channel-webpush.ts +21 -60
- package/src/drivers/conformance.test.ts +2 -10
- package/src/drivers/conformance.ts +8 -21
- package/src/drivers/fs.ts +2 -8
- package/src/drivers/index.ts +12 -56
- package/src/drivers/memory.ts +14 -41
- package/src/drivers/pgvector.ts +7 -11
- package/src/drivers/postgres.ts +7 -13
- package/src/drivers/redis.ts +13 -37
- package/src/drivers/s3.ts +5 -17
- package/src/drivers/signal-engine.ts +12 -49
- package/src/drivers/signal-memory.ts +2 -8
- package/src/drivers/signal-nats.ts +4 -9
- package/src/drivers/signal-postgres.ts +62 -129
- package/src/drivers/signal-redis.ts +7 -21
- package/src/drivers/signal-types.ts +1 -4
- package/src/drivers/sqlite.ts +3 -12
- package/src/drivers/types.ts +4 -23
- package/src/drivers/vault-env.ts +2 -6
- package/src/drivers/vault-infisical.ts +1 -5
- package/src/drivers/vault-managed.ts +1 -5
- package/src/drivers/vault-memory.ts +1 -5
- package/src/drivers/vault-openbao.ts +1 -5
- package/src/drivers/vault-sops.ts +10 -35
- package/src/drivers/vault-types.ts +1 -7
- package/src/elements/ai/declare.ts +4 -14
- package/src/elements/ai/eval.ts +2 -6
- package/src/elements/ai/pii.ts +1 -3
- package/src/elements/ai/runtime.ts +12 -50
- package/src/elements/ai/schema.ts +4 -15
- package/src/elements/ai.test.ts +13 -24
- package/src/elements/ai.ts +1 -5
- package/src/elements/channel/consent.ts +3 -12
- package/src/elements/channel/costs.ts +4 -15
- package/src/elements/channel/declare.ts +1 -4
- package/src/elements/channel/email-auth.ts +1 -4
- package/src/elements/channel/locale.ts +2 -10
- package/src/elements/channel/mask.ts +1 -3
- package/src/elements/channel/mime.ts +2 -12
- package/src/elements/channel/outcomes.test.ts +1 -5
- package/src/elements/channel/outcomes.ts +5 -15
- package/src/elements/channel/receipts.ts +2 -7
- package/src/elements/channel/runtime.ts +28 -74
- package/src/elements/channel/suppression.ts +8 -14
- package/src/elements/channel.test.ts +8 -31
- package/src/elements/channel.ts +3 -14
- package/src/elements/clock/actions.ts +6 -18
- package/src/elements/clock/declare.ts +1 -3
- package/src/elements/clock/dst.ts +1 -5
- package/src/elements/clock/durable.ts +4 -16
- package/src/elements/clock/health.ts +2 -7
- package/src/elements/clock/leader.ts +2 -9
- package/src/elements/clock/reconcile.ts +4 -15
- package/src/elements/clock/runtime.ts +2 -5
- package/src/elements/clock/schedule.ts +4 -20
- package/src/elements/clock.test.ts +2 -7
- package/src/elements/clock.ts +5 -23
- package/src/elements/gate/permissions.ts +1 -4
- package/src/elements/gate/runtime.ts +7 -28
- package/src/elements/gate.ts +1 -5
- package/src/elements/index.ts +9 -7
- package/src/elements/signal/declare.ts +2 -7
- package/src/elements/signal/reconcile.test.ts +1 -4
- package/src/elements/signal/runtime.ts +1 -3
- package/src/elements/signal.test.ts +3 -15
- package/src/elements/signal.ts +2 -8
- package/src/elements/store/cache.test.ts +46 -0
- package/src/elements/store/cache.ts +3 -11
- package/src/elements/store/classify.ts +5 -22
- package/src/elements/store/declare.ts +8 -17
- package/src/elements/store/domain-ddl.test.ts +86 -0
- package/src/elements/store/emit-drizzle.ts +363 -0
- package/src/elements/store/files-policy.test.ts +1 -5
- package/src/elements/store/files-policy.ts +4 -12
- package/src/elements/store/load-plugin-tables.ts +103 -0
- package/src/elements/store/missing-relation.test.ts +83 -0
- package/src/elements/store/missing-relation.ts +38 -0
- package/src/elements/store/replica.ts +1 -4
- package/src/elements/store/runtime.ts +25 -28
- package/src/elements/store/schema-decl.test.ts +227 -0
- package/src/elements/store/schema-decl.ts +516 -0
- package/src/elements/store/sql-condition.ts +11 -21
- package/src/elements/store/sql-session.test.ts +50 -0
- package/src/elements/store/sql-session.ts +60 -63
- package/src/elements/store/table.ts +35 -19
- package/src/elements/store.test.ts +17 -39
- package/src/elements/store.ts +37 -31
- package/src/elements/vault/chain.ts +34 -0
- package/src/elements/vault/declare.ts +22 -32
- package/src/elements/vault/fingerprint.ts +2 -7
- package/src/elements/vault/redact.ts +2 -6
- package/src/elements/vault/runtime.ts +18 -32
- package/src/elements/vault.test.ts +12 -28
- package/src/elements/vault.ts +8 -12
- package/src/index.ts +5 -2
- package/src/kernel/adopt-routes.ts +15 -29
- package/src/kernel/app.ts +34 -94
- package/src/kernel/auth-resolve.ts +2 -9
- package/src/kernel/boot-bind/ai.ts +1 -4
- package/src/kernel/boot-bind/channel.ts +2 -8
- package/src/kernel/boot-bind/clock.ts +2 -6
- package/src/kernel/boot-bind/gate.ts +2 -8
- package/src/kernel/boot-bind/runs.ts +1 -3
- package/src/kernel/boot-bind/signal.ts +3 -10
- package/src/kernel/boot-bind/store.test.ts +17 -17
- package/src/kernel/boot-bind/store.ts +44 -50
- package/src/kernel/boot-bind/vault.ts +2 -8
- package/src/kernel/boot.test.ts +4 -9
- package/src/kernel/boot.ts +29 -76
- package/src/kernel/budget.test.ts +1 -3
- package/src/kernel/capability.ts +3 -10
- package/src/kernel/dry-run.test.ts +1 -4
- package/src/kernel/dry-run.ts +3 -11
- package/src/kernel/effects.test.ts +1 -5
- package/src/kernel/effects.ts +4 -11
- package/src/kernel/errors.registry.test.ts +2 -8
- package/src/kernel/errors.ts +23 -32
- package/src/kernel/flow.test.ts +12 -25
- package/src/kernel/flow.ts +5 -25
- package/src/kernel/fx.test.ts +15 -44
- package/src/kernel/fx.ts +27 -79
- package/src/kernel/hook-timing.test.ts +3 -6
- package/src/kernel/hook-timing.ts +5 -14
- package/src/kernel/hooks.test.ts +10 -10
- package/src/kernel/hooks.ts +3 -12
- package/src/kernel/index.ts +4 -17
- package/src/kernel/journal.ts +7 -31
- package/src/kernel/on.ts +1 -6
- package/src/kernel/pipeline.test.ts +10 -19
- package/src/kernel/pipeline.ts +5 -17
- package/src/kernel/plug.ts +4 -11
- package/src/kernel/plugin/conflicts.test.ts +13 -25
- package/src/kernel/plugin/decorate.test.ts +8 -13
- package/src/kernel/plugin/scoping.test.ts +4 -11
- package/src/kernel/plugin.ts +48 -24
- package/src/kernel/registry.ts +80 -29
- package/src/kernel/router.test.ts +15 -13
- package/src/kernel/router.ts +9 -29
- package/src/kernel/routing-budget.test.ts +1 -3
- package/src/kernel/run-telemetry.ts +1 -3
- package/src/kernel/triggers.ts +4 -21
- package/src/manifest/diff.test.ts +26 -91
- package/src/manifest/diff.ts +95 -225
- package/src/manifest/index.ts +2 -9
- package/src/manifest/types.ts +29 -5
- package/src/manifest/undeclared.test.ts +4 -12
- package/src/manifest/undeclared.ts +1 -2
- package/src/manifest/validate.test.ts +2 -6
- package/src/manifest/validate.ts +4 -14
- package/src/mcp/authorization.ts +8 -27
- package/src/mcp/confirmation.ts +3 -10
- package/src/mcp/data.ts +2 -6
- package/src/mcp/docs-index.ts +4 -7
- package/src/mcp/docs-mcp.test.ts +3 -12
- package/src/mcp/docs-server.ts +7 -27
- package/src/mcp/docs-tools.ts +2 -6
- package/src/mcp/index.ts +1 -6
- package/src/mcp/injection.gate.test.ts +4 -18
- package/src/mcp/mcp.test.ts +18 -49
- package/src/mcp/protocol.ts +3 -10
- package/src/mcp/server.ts +11 -52
- package/src/mcp/session.ts +4 -14
- package/src/mcp/tools.ts +14 -50
- package/src/plugins/catalogue.test.ts +3 -7
- package/src/plugins/catalogue.ts +1 -3
- package/src/plugins/node-import-scan.ts +2 -5
- package/src/plugins/supply-chain.ts +5 -17
- package/src/release/exports.ts +3 -8
- package/src/release/measure.exports.test.ts +1 -3
- package/src/release/measure.ts +15 -43
- package/src/runs/bench.test.ts +1 -3
- package/src/runs/collect.ts +8 -25
- package/src/runs/drivers/clickhouse.ts +2 -9
- package/src/runs/drivers/files.ts +9 -31
- package/src/runs/drivers/memory.ts +5 -22
- package/src/runs/drivers/postgres.ts +8 -20
- package/src/runs/duckdb.ts +2 -8
- package/src/runs/index.ts +3 -14
- package/src/runs/outlier.ts +3 -10
- package/src/runs/parquet.ts +8 -26
- package/src/runs/privacy.ts +2 -8
- package/src/runs/runs.test.ts +3 -9
- package/src/runs/runtime.ts +7 -32
- package/src/runs/shred.ts +10 -29
- package/src/runs/types.ts +1 -4
- package/src/runtime/bun.ts +4 -15
- package/src/runtime/cold-start.bench.ts +1 -3
- package/src/runtime/dev-request-log.test.ts +1 -4
- package/src/runtime/dev-request-log.ts +1 -4
- package/src/runtime/index.ts +1 -6
- package/src/runtime/primitives.ts +5 -4
- package/src/runtime/security.ts +3 -13
- package/src/runtime/serve.test.ts +4 -7
- package/src/runtime/types.ts +1 -4
- package/src/runtime/web-standard.ts +3 -15
- package/src/term.test.ts +4 -6
- package/src/term.ts +49 -98
- package/src/test/create-test-app.test.ts +4 -14
- package/src/test/create-test-app.ts +13 -31
- package/src/test/provisions.integration.test.ts +3 -11
- package/src/upgrade/codemods.test.ts +25 -6
- package/src/upgrade/codemods.ts +116 -3
- package/src/validation/standard-schema.test.ts +2 -5
- package/src/validation/standard-schema.ts +13 -33
- package/src/console/ui/dist/assets/panel-vault-BbfWdox0.js +0 -1
package/src/kernel/app.ts
CHANGED
|
@@ -32,10 +32,7 @@ import {
|
|
|
32
32
|
type CreateAppAuthBindingOptions,
|
|
33
33
|
} from "./auth-resolve.ts";
|
|
34
34
|
import { runDurable } from "../elements/clock/durable.ts";
|
|
35
|
-
import {
|
|
36
|
-
isFlow,
|
|
37
|
-
type AnyFlowDef,
|
|
38
|
-
} from "./flow.ts";
|
|
35
|
+
import { isFlow, type AnyFlowDef } from "./flow.ts";
|
|
39
36
|
import {
|
|
40
37
|
createFxContext,
|
|
41
38
|
resolveName,
|
|
@@ -80,16 +77,8 @@ import {
|
|
|
80
77
|
type AccumulateDecorations,
|
|
81
78
|
} from "./plug.ts";
|
|
82
79
|
import type { PluginCapabilities, PluginDef } from "./plugin.ts";
|
|
83
|
-
import {
|
|
84
|
-
|
|
85
|
-
type PluginRegistry,
|
|
86
|
-
} from "./registry.ts";
|
|
87
|
-
import {
|
|
88
|
-
createRouter,
|
|
89
|
-
type Router,
|
|
90
|
-
type RouterPreset,
|
|
91
|
-
type SmartRouter,
|
|
92
|
-
} from "./router.ts";
|
|
80
|
+
import { createPluginRegistry, type PluginRegistry } from "./registry.ts";
|
|
81
|
+
import { createRouter, type Router, type RouterPreset, type SmartRouter } from "./router.ts";
|
|
93
82
|
import type {
|
|
94
83
|
CdcTrigger,
|
|
95
84
|
EveryTrigger,
|
|
@@ -129,13 +118,13 @@ export interface OkeOptions {
|
|
|
129
118
|
* subject key.
|
|
130
119
|
*/
|
|
131
120
|
readonly archiveInputFields?: readonly string[];
|
|
132
|
-
/** Active environment for {@link OkeApp.boot} (defaults to `
|
|
121
|
+
/** Active environment for {@link OkeApp.boot} (defaults to `local`). */
|
|
133
122
|
readonly env?: BootOptions["env"];
|
|
134
123
|
/**
|
|
135
|
-
*
|
|
124
|
+
* Docker mode (`oke dev -d` / `OKE_DOCKER=1`) — force the `docker`
|
|
136
125
|
* driver profile at boot.
|
|
137
126
|
*/
|
|
138
|
-
readonly
|
|
127
|
+
readonly docker?: BootOptions["docker"];
|
|
139
128
|
/** Optional `oke.config.ts` document consumed at boot. */
|
|
140
129
|
readonly config?: BootOptions["config"];
|
|
141
130
|
/** Pre-built element runtimes (skip construction at boot when present). */
|
|
@@ -209,9 +198,7 @@ export interface UnitHooks<D extends Record<string, unknown> = {}> {
|
|
|
209
198
|
*
|
|
210
199
|
* @param pluginDef - Plugin from {@link plugin}
|
|
211
200
|
*/
|
|
212
|
-
plug<P extends PluginDef>(
|
|
213
|
-
pluginDef: P,
|
|
214
|
-
): UnitHooks<AccumulateDecorations<D, P>>;
|
|
201
|
+
plug<P extends PluginDef>(pluginDef: P): UnitHooks<AccumulateDecorations<D, P>>;
|
|
215
202
|
}
|
|
216
203
|
|
|
217
204
|
/**
|
|
@@ -220,10 +207,7 @@ export interface UnitHooks<D extends Record<string, unknown> = {}> {
|
|
|
220
207
|
* @typeParam D - Accumulated decoration types from app `.plug()`
|
|
221
208
|
* @typeParam R - Accumulated client route map from `.adopt({ unit })`
|
|
222
209
|
*/
|
|
223
|
-
export interface OkeApp<
|
|
224
|
-
D extends Record<string, unknown> = {},
|
|
225
|
-
R extends AppRouteMap = {},
|
|
226
|
-
> {
|
|
210
|
+
export interface OkeApp<D extends Record<string, unknown> = {}, R extends AppRouteMap = {}> {
|
|
227
211
|
/** App name. */
|
|
228
212
|
readonly name: string;
|
|
229
213
|
/** Whether AoT compilation is enabled. */
|
|
@@ -269,9 +253,7 @@ export interface OkeApp<
|
|
|
269
253
|
*
|
|
270
254
|
* @param pluginDef - Plugin from {@link plugin}
|
|
271
255
|
*/
|
|
272
|
-
plug<P extends PluginDef>(
|
|
273
|
-
pluginDef: P,
|
|
274
|
-
): OkeApp<AccumulateDecorations<D, P>, R>;
|
|
256
|
+
plug<P extends PluginDef>(pluginDef: P): OkeApp<AccumulateDecorations<D, P>, R>;
|
|
275
257
|
/**
|
|
276
258
|
* Captured plugin capabilities for the Manifest.
|
|
277
259
|
*/
|
|
@@ -357,10 +339,7 @@ export interface OkeApp<
|
|
|
357
339
|
* @param signal - Signal name or handle
|
|
358
340
|
* @param payload - Payload
|
|
359
341
|
*/
|
|
360
|
-
dispatchSignal(
|
|
361
|
-
signal: NamedRef,
|
|
362
|
-
payload?: unknown,
|
|
363
|
-
): Promise<ExecuteResult[]>;
|
|
342
|
+
dispatchSignal(signal: NamedRef, payload?: unknown): Promise<ExecuteResult[]>;
|
|
364
343
|
/**
|
|
365
344
|
* Invoke all flows bound to an `every` interval.
|
|
366
345
|
*
|
|
@@ -374,11 +353,7 @@ export interface OkeApp<
|
|
|
374
353
|
* @param payload - before/after
|
|
375
354
|
* @param column - Optional column filter
|
|
376
355
|
*/
|
|
377
|
-
dispatchCdc(
|
|
378
|
-
tableName: string,
|
|
379
|
-
payload: CdcPayload,
|
|
380
|
-
column?: string,
|
|
381
|
-
): Promise<ExecuteResult[]>;
|
|
356
|
+
dispatchCdc(tableName: string, payload: CdcPayload, column?: string): Promise<ExecuteResult[]>;
|
|
382
357
|
/**
|
|
383
358
|
* Call a flow by name/handle (same path as `fx.call`).
|
|
384
359
|
*
|
|
@@ -408,10 +383,7 @@ export interface OkeApp<
|
|
|
408
383
|
*/
|
|
409
384
|
export function oke(options: OkeOptions): OkeApp {
|
|
410
385
|
const aot = options.aot !== false;
|
|
411
|
-
const adopted: Binding[] = [
|
|
412
|
-
...listBindings(),
|
|
413
|
-
...(options.bindings ?? []),
|
|
414
|
-
];
|
|
386
|
+
const adopted: Binding[] = [...listBindings(), ...(options.bindings ?? [])];
|
|
415
387
|
/** Retained for test harness / boot merges. */
|
|
416
388
|
const $options = options;
|
|
417
389
|
|
|
@@ -459,7 +431,7 @@ export function oke(options: OkeOptions): OkeApp {
|
|
|
459
431
|
// --- boot (vault → store → signal → clock → channel → AI → runs → caps) ---
|
|
460
432
|
let bootResult: BootResult | undefined;
|
|
461
433
|
let bootPromise: Promise<BootResult> | undefined;
|
|
462
|
-
let bootEnv: BootOptions["env"] = options.env ?? "
|
|
434
|
+
let bootEnv: BootOptions["env"] = options.env ?? "local";
|
|
463
435
|
let authBinding: AppAuthBinding | undefined =
|
|
464
436
|
options.auth !== undefined
|
|
465
437
|
? createAppAuthBinding({
|
|
@@ -490,10 +462,10 @@ export function oke(options: OkeOptions): OkeApp {
|
|
|
490
462
|
|
|
491
463
|
async function doBoot(overrides?: Partial<BootOptions>): Promise<BootResult> {
|
|
492
464
|
const { bootApplication } = await import("./boot.ts");
|
|
493
|
-
bootEnv = overrides?.env ?? options.env ?? "
|
|
465
|
+
bootEnv = overrides?.env ?? options.env ?? "local";
|
|
494
466
|
const merged: BootOptions = {
|
|
495
467
|
env: bootEnv,
|
|
496
|
-
|
|
468
|
+
docker: overrides?.docker ?? options.docker,
|
|
497
469
|
config: overrides?.config ?? options.config,
|
|
498
470
|
elements: overrides?.elements ?? options.elements,
|
|
499
471
|
secrets: overrides?.secrets ?? options.secrets,
|
|
@@ -508,8 +480,7 @@ export function oke(options: OkeOptions): OkeApp {
|
|
|
508
480
|
now: overrides?.now ?? options.fx?.now,
|
|
509
481
|
instanceId: overrides?.instanceId,
|
|
510
482
|
startScheduler: overrides?.startScheduler ?? options.startScheduler,
|
|
511
|
-
schedulerIntervalMs:
|
|
512
|
-
overrides?.schedulerIntervalMs ?? options.schedulerIntervalMs,
|
|
483
|
+
schedulerIntervalMs: overrides?.schedulerIntervalMs ?? options.schedulerIntervalMs,
|
|
513
484
|
bindings: adopted,
|
|
514
485
|
flows: [...flowsByName.values()],
|
|
515
486
|
onCronFire: overrides?.onCronFire ?? handleCronFire,
|
|
@@ -542,9 +513,7 @@ export function oke(options: OkeOptions): OkeApp {
|
|
|
542
513
|
return bootPromise;
|
|
543
514
|
}
|
|
544
515
|
|
|
545
|
-
function isRunsRuntimeLike(
|
|
546
|
-
value: OkeOptions["runs"],
|
|
547
|
-
): value is RunsRuntime {
|
|
516
|
+
function isRunsRuntimeLike(value: OkeOptions["runs"]): value is RunsRuntime {
|
|
548
517
|
return (
|
|
549
518
|
typeof value === "object" &&
|
|
550
519
|
value !== null &&
|
|
@@ -570,20 +539,11 @@ export function oke(options: OkeOptions): OkeApp {
|
|
|
570
539
|
|
|
571
540
|
const booted = await ensureBoot();
|
|
572
541
|
|
|
573
|
-
const unitBag =
|
|
574
|
-
flowDef.unit !== undefined ? unitHooks.get(flowDef.unit) : undefined;
|
|
542
|
+
const unitBag = flowDef.unit !== undefined ? unitHooks.get(flowDef.unit) : undefined;
|
|
575
543
|
// app (hooks + plugs) → unit (hooks + plugs) → flow (hooks + plugs)
|
|
576
544
|
const composedHooks = mergeHooks(
|
|
577
|
-
mergeHooks(
|
|
578
|
-
|
|
579
|
-
pluginRegistry.hooksAt("app", flowDef.unit, flowDef.name),
|
|
580
|
-
undefined,
|
|
581
|
-
),
|
|
582
|
-
mergeHooks(
|
|
583
|
-
unitBag,
|
|
584
|
-
pluginRegistry.hooksAt("unit", flowDef.unit, flowDef.name),
|
|
585
|
-
undefined,
|
|
586
|
-
),
|
|
545
|
+
mergeHooks(appHooks, pluginRegistry.hooksAt("app", flowDef.unit, flowDef.name), undefined),
|
|
546
|
+
mergeHooks(unitBag, pluginRegistry.hooksAt("unit", flowDef.unit, flowDef.name), undefined),
|
|
587
547
|
mergeHooks(
|
|
588
548
|
flowDef.hooks as HookMap,
|
|
589
549
|
pluginRegistry.hooksAt("flow", flowDef.unit, flowDef.name),
|
|
@@ -591,10 +551,7 @@ export function oke(options: OkeOptions): OkeApp {
|
|
|
591
551
|
),
|
|
592
552
|
);
|
|
593
553
|
|
|
594
|
-
const decorations = pluginRegistry.decorationsFor(
|
|
595
|
-
flowDef.unit,
|
|
596
|
-
flowDef.name,
|
|
597
|
-
);
|
|
554
|
+
const decorations = pluginRegistry.decorationsFor(flowDef.unit, flowDef.name);
|
|
598
555
|
|
|
599
556
|
const ctx: InvocationContext = {
|
|
600
557
|
trigger,
|
|
@@ -631,10 +588,7 @@ export function oke(options: OkeOptions): OkeApp {
|
|
|
631
588
|
// a real HTTP request in production mode.
|
|
632
589
|
const testMode = bootEnv === "test";
|
|
633
590
|
if (testMode) {
|
|
634
|
-
applyPrincipal(
|
|
635
|
-
principals,
|
|
636
|
-
extras?.auth as ResolvedPrincipal | undefined,
|
|
637
|
-
);
|
|
591
|
+
applyPrincipal(principals, extras?.auth as ResolvedPrincipal | undefined);
|
|
638
592
|
applyPrincipal(principals, extras?.principal);
|
|
639
593
|
if (extras?.operator) principals.operator.id = extras.operator.id;
|
|
640
594
|
}
|
|
@@ -645,9 +599,7 @@ export function oke(options: OkeOptions): OkeApp {
|
|
|
645
599
|
principals,
|
|
646
600
|
telemetry,
|
|
647
601
|
allowTestPrincipals: testMode,
|
|
648
|
-
verifyBearer: binding
|
|
649
|
-
? (token) => verifyBearerToken(binding, token)
|
|
650
|
-
: undefined,
|
|
602
|
+
verifyBearer: binding ? (token) => verifyBearerToken(binding, token) : undefined,
|
|
651
603
|
});
|
|
652
604
|
|
|
653
605
|
// Element hooks run first in the app-level onAuth/beforeHandle chain —
|
|
@@ -675,9 +627,7 @@ export function oke(options: OkeOptions): OkeApp {
|
|
|
675
627
|
effects: flowDef.effects,
|
|
676
628
|
runTelemetry: telemetry,
|
|
677
629
|
now,
|
|
678
|
-
...(principals
|
|
679
|
-
? { auth: principals.auth as FxAuth, operator: principals.operator }
|
|
680
|
-
: {}),
|
|
630
|
+
...(principals ? { auth: principals.auth as FxAuth, operator: principals.operator } : {}),
|
|
681
631
|
...(capability ? { capability } : {}),
|
|
682
632
|
...(booted
|
|
683
633
|
? {
|
|
@@ -750,13 +700,9 @@ export function oke(options: OkeOptions): OkeApp {
|
|
|
750
700
|
}
|
|
751
701
|
|
|
752
702
|
const runsRuntime =
|
|
753
|
-
booted?.runs ??
|
|
754
|
-
(isRunsRuntimeLike(options.runs) ? options.runs : undefined);
|
|
703
|
+
booted?.runs ?? (isRunsRuntimeLike(options.runs) ? options.runs : undefined);
|
|
755
704
|
if (runsRuntime) {
|
|
756
|
-
const archiveCleartext = archiveFromInput(
|
|
757
|
-
ctx.input,
|
|
758
|
-
options.archiveInputFields,
|
|
759
|
-
);
|
|
705
|
+
const archiveCleartext = archiveFromInput(ctx.input, options.archiveInputFields);
|
|
760
706
|
await runsRuntime.record(
|
|
761
707
|
{
|
|
762
708
|
flow: flowDef,
|
|
@@ -936,8 +882,7 @@ export function oke(options: OkeOptions): OkeApp {
|
|
|
936
882
|
if (parts.length >= 2) {
|
|
937
883
|
const [unit, ...flowParts] = parts;
|
|
938
884
|
const flowName = flowParts.join("/");
|
|
939
|
-
const target =
|
|
940
|
-
flowsByName.get(`${unit}.${flowName}`) ?? flowsByName.get(flowName);
|
|
885
|
+
const target = flowsByName.get(`${unit}.${flowName}`) ?? flowsByName.get(flowName);
|
|
941
886
|
if (!target) {
|
|
942
887
|
return respond(new Response("Not Found", { status: 404 }));
|
|
943
888
|
}
|
|
@@ -986,12 +931,11 @@ export function oke(options: OkeOptions): OkeApp {
|
|
|
986
931
|
input = undefined;
|
|
987
932
|
}
|
|
988
933
|
|
|
989
|
-
const result = await execute(
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
);
|
|
934
|
+
const result = await execute(binding.flow, input, binding.trigger, {
|
|
935
|
+
request,
|
|
936
|
+
params,
|
|
937
|
+
validated,
|
|
938
|
+
});
|
|
995
939
|
|
|
996
940
|
return respond(encodeExecuteResult(result));
|
|
997
941
|
},
|
|
@@ -1000,9 +944,7 @@ export function oke(options: OkeOptions): OkeApp {
|
|
|
1000
944
|
const results: ExecuteResult[] = [];
|
|
1001
945
|
for (const b of adopted) {
|
|
1002
946
|
if (b.trigger.kind === "signal" && b.trigger.name === name) {
|
|
1003
|
-
results.push(
|
|
1004
|
-
await execute(b.flow, payload, b.trigger as SignalAsTrigger),
|
|
1005
|
-
);
|
|
947
|
+
results.push(await execute(b.flow, payload, b.trigger as SignalAsTrigger));
|
|
1006
948
|
}
|
|
1007
949
|
}
|
|
1008
950
|
return results;
|
|
@@ -1011,9 +953,7 @@ export function oke(options: OkeOptions): OkeApp {
|
|
|
1011
953
|
const results: ExecuteResult[] = [];
|
|
1012
954
|
for (const b of adopted) {
|
|
1013
955
|
if (b.trigger.kind === "every" && b.trigger.interval === interval) {
|
|
1014
|
-
results.push(
|
|
1015
|
-
await execute(b.flow, undefined, b.trigger as EveryTrigger),
|
|
1016
|
-
);
|
|
956
|
+
results.push(await execute(b.flow, undefined, b.trigger as EveryTrigger));
|
|
1017
957
|
}
|
|
1018
958
|
}
|
|
1019
959
|
return results;
|
|
@@ -36,9 +36,7 @@ export interface CreateAppAuthBindingOptions {
|
|
|
36
36
|
*
|
|
37
37
|
* @param options - Secret + optional session store / clock
|
|
38
38
|
*/
|
|
39
|
-
export function createAppAuthBinding(
|
|
40
|
-
options: CreateAppAuthBindingOptions,
|
|
41
|
-
): AppAuthBinding {
|
|
39
|
+
export function createAppAuthBinding(options: CreateAppAuthBindingOptions): AppAuthBinding {
|
|
42
40
|
return {
|
|
43
41
|
secret: options.secret,
|
|
44
42
|
sessions: options.sessions ?? createSessionStore(),
|
|
@@ -57,12 +55,7 @@ export async function verifyBearerToken(
|
|
|
57
55
|
auth: AppAuthBinding,
|
|
58
56
|
token: string,
|
|
59
57
|
): Promise<ResolvedPrincipal> {
|
|
60
|
-
const claims = await verifyAccess(
|
|
61
|
-
auth.sessions,
|
|
62
|
-
auth.secret,
|
|
63
|
-
token,
|
|
64
|
-
auth.now,
|
|
65
|
-
);
|
|
58
|
+
const claims = await verifyAccess(auth.sessions, auth.secret, token, auth.now);
|
|
66
59
|
return claimsToPrincipal(claims);
|
|
67
60
|
}
|
|
68
61
|
|
|
@@ -3,10 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
5
|
import { mockAiDriver } from "../../drivers/ai-mock.ts";
|
|
6
|
-
import {
|
|
7
|
-
createAiRuntime,
|
|
8
|
-
type AiRuntime,
|
|
9
|
-
} from "../../elements/ai.ts";
|
|
6
|
+
import { createAiRuntime, type AiRuntime } from "../../elements/ai.ts";
|
|
10
7
|
import type { GateRuntime } from "../../elements/gate.ts";
|
|
11
8
|
import type { BootOptions } from "../boot.ts";
|
|
12
9
|
|
|
@@ -3,10 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
5
|
import { openConsoleChannel } from "../../drivers/channel-console.ts";
|
|
6
|
-
import {
|
|
7
|
-
createChannelRuntime,
|
|
8
|
-
type ChannelRuntime,
|
|
9
|
-
} from "../../elements/channel.ts";
|
|
6
|
+
import { createChannelRuntime, type ChannelRuntime } from "../../elements/channel.ts";
|
|
10
7
|
import type { BootOptions } from "../boot.ts";
|
|
11
8
|
|
|
12
9
|
/**
|
|
@@ -15,10 +12,7 @@ import type { BootOptions } from "../boot.ts";
|
|
|
15
12
|
* @param options - Boot options
|
|
16
13
|
* @param now - Clock
|
|
17
14
|
*/
|
|
18
|
-
export function bindChannel(
|
|
19
|
-
options: BootOptions,
|
|
20
|
-
now: () => number,
|
|
21
|
-
): ChannelRuntime {
|
|
15
|
+
export function bindChannel(options: BootOptions, now: () => number): ChannelRuntime {
|
|
22
16
|
return createChannelRuntime({
|
|
23
17
|
...(options.channel ?? {}),
|
|
24
18
|
drivers: options.channel?.drivers ?? [openConsoleChannel()],
|
|
@@ -9,10 +9,7 @@ import {
|
|
|
9
9
|
type ClockDecl,
|
|
10
10
|
type ClockRuntime,
|
|
11
11
|
} from "../../elements/clock.ts";
|
|
12
|
-
import {
|
|
13
|
-
resolveDriverId,
|
|
14
|
-
type ConfigEnv,
|
|
15
|
-
} from "../../config/index.ts";
|
|
12
|
+
import { resolveDriverId, type ConfigEnv } from "../../config/index.ts";
|
|
16
13
|
import type { BootOptions } from "../boot.ts";
|
|
17
14
|
|
|
18
15
|
/** Result of binding a clock runtime. */
|
|
@@ -36,8 +33,7 @@ export async function bindClock(
|
|
|
36
33
|
prebuilt?: ClockRuntime,
|
|
37
34
|
): Promise<BindClockResult> {
|
|
38
35
|
const clockDriver =
|
|
39
|
-
resolveDriverId(options.config?.drivers?.clock, env) ??
|
|
40
|
-
(env === "test" ? "frozen" : "memory");
|
|
36
|
+
resolveDriverId(options.config?.drivers?.clock, env) ?? (env === "test" ? "frozen" : "memory");
|
|
41
37
|
const clock =
|
|
42
38
|
prebuilt ??
|
|
43
39
|
(clockDriver === "frozen" || env === "test"
|
|
@@ -3,10 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
5
|
import { memoryDrivers } from "../../drivers/memory.ts";
|
|
6
|
-
import {
|
|
7
|
-
createGateRuntime,
|
|
8
|
-
type GateRuntime,
|
|
9
|
-
} from "../../elements/gate.ts";
|
|
6
|
+
import { createGateRuntime, type GateRuntime } from "../../elements/gate.ts";
|
|
10
7
|
import type { BootOptions } from "../boot.ts";
|
|
11
8
|
|
|
12
9
|
/**
|
|
@@ -15,10 +12,7 @@ import type { BootOptions } from "../boot.ts";
|
|
|
15
12
|
* @param options - Boot options
|
|
16
13
|
* @param now - Clock
|
|
17
14
|
*/
|
|
18
|
-
export async function bindGate(
|
|
19
|
-
options: BootOptions,
|
|
20
|
-
now: () => number,
|
|
21
|
-
): Promise<GateRuntime> {
|
|
15
|
+
export async function bindGate(options: BootOptions, now: () => number): Promise<GateRuntime> {
|
|
22
16
|
const kvNs = await memoryDrivers.kv.open({ name: "oke:gates" });
|
|
23
17
|
return createGateRuntime({
|
|
24
18
|
gates: options.gates ?? [],
|
|
@@ -14,9 +14,7 @@ import {
|
|
|
14
14
|
*
|
|
15
15
|
* @param options - Create options (when not already a runtime)
|
|
16
16
|
*/
|
|
17
|
-
export async function bindRuns(
|
|
18
|
-
options?: CreateRunsRuntimeOptions,
|
|
19
|
-
): Promise<RunsRuntime> {
|
|
17
|
+
export async function bindRuns(options?: CreateRunsRuntimeOptions): Promise<RunsRuntime> {
|
|
20
18
|
const runs = createRunsRuntime({
|
|
21
19
|
driver: options?.driver ?? memoryRunsDriver,
|
|
22
20
|
...(options ?? {}),
|
|
@@ -3,14 +3,8 @@
|
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
5
|
import { memorySignalDriver } from "../../drivers/signal-memory.ts";
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
type SignalRuntime,
|
|
9
|
-
} from "../../elements/signal.ts";
|
|
10
|
-
import {
|
|
11
|
-
resolveDriverId,
|
|
12
|
-
type ConfigEnv,
|
|
13
|
-
} from "../../config/index.ts";
|
|
6
|
+
import { createSignalRuntime, type SignalRuntime } from "../../elements/signal.ts";
|
|
7
|
+
import { resolveDriverId, type ConfigEnv } from "../../config/index.ts";
|
|
14
8
|
import type { BootOptions } from "../boot.ts";
|
|
15
9
|
|
|
16
10
|
/**
|
|
@@ -25,8 +19,7 @@ export async function bindSignal(
|
|
|
25
19
|
env: ConfigEnv,
|
|
26
20
|
now: () => number,
|
|
27
21
|
): Promise<SignalRuntime> {
|
|
28
|
-
const signalId =
|
|
29
|
-
resolveDriverId(options.config?.drivers?.signal, env) ?? "memory";
|
|
22
|
+
const signalId = resolveDriverId(options.config?.drivers?.signal, env) ?? "memory";
|
|
30
23
|
void signalId;
|
|
31
24
|
const signal = createSignalRuntime({
|
|
32
25
|
driver: memorySignalDriver,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Store binder —
|
|
2
|
+
* Store binder — docker profile (+ env overrides).
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
5
|
import { afterEach, describe, expect, test } from "bun:test";
|
|
@@ -7,54 +7,54 @@ import { resolveKvDriverId, resolveSqlDriverId } from "./store.ts";
|
|
|
7
7
|
|
|
8
8
|
describe("bindStore driver resolution", () => {
|
|
9
9
|
const prev = {
|
|
10
|
-
|
|
10
|
+
docker: process.env.OKE_DOCKER,
|
|
11
11
|
sql: process.env.OKE_SQL_DRIVER,
|
|
12
12
|
kv: process.env.OKE_KV_DRIVER,
|
|
13
13
|
};
|
|
14
14
|
|
|
15
15
|
afterEach(() => {
|
|
16
|
-
if (prev.
|
|
17
|
-
else process.env.
|
|
16
|
+
if (prev.docker === undefined) delete process.env.OKE_DOCKER;
|
|
17
|
+
else process.env.OKE_DOCKER = prev.docker;
|
|
18
18
|
if (prev.sql === undefined) delete process.env.OKE_SQL_DRIVER;
|
|
19
19
|
else process.env.OKE_SQL_DRIVER = prev.sql;
|
|
20
20
|
if (prev.kv === undefined) delete process.env.OKE_KV_DRIVER;
|
|
21
21
|
else process.env.OKE_KV_DRIVER = prev.kv;
|
|
22
22
|
});
|
|
23
23
|
|
|
24
|
-
test("
|
|
24
|
+
test("local env keeps sqlite / memory from config", () => {
|
|
25
25
|
const options = {
|
|
26
26
|
config: {
|
|
27
27
|
drivers: {
|
|
28
28
|
store: {
|
|
29
|
-
sql: {
|
|
30
|
-
kv: {
|
|
29
|
+
sql: { local: "sqlite", docker: "postgres", prod: "postgres" },
|
|
30
|
+
kv: { local: "memory", docker: "redis", prod: "redis" },
|
|
31
31
|
},
|
|
32
32
|
},
|
|
33
33
|
},
|
|
34
34
|
};
|
|
35
|
-
expect(resolveSqlDriverId(options, "
|
|
36
|
-
expect(resolveKvDriverId(options, "
|
|
35
|
+
expect(resolveSqlDriverId(options, "local", false)).toBe("sqlite");
|
|
36
|
+
expect(resolveKvDriverId(options, "local", false)).toBe("memory");
|
|
37
37
|
});
|
|
38
38
|
|
|
39
|
-
test("
|
|
39
|
+
test("docker env uses docker profile (falls back to prod)", () => {
|
|
40
40
|
const options = {
|
|
41
41
|
config: {
|
|
42
42
|
drivers: {
|
|
43
43
|
store: {
|
|
44
|
-
sql: {
|
|
45
|
-
kv: {
|
|
44
|
+
sql: { local: "sqlite", docker: "postgres", prod: "postgres" },
|
|
45
|
+
kv: { local: "memory", prod: "redis" },
|
|
46
46
|
},
|
|
47
47
|
},
|
|
48
48
|
},
|
|
49
49
|
};
|
|
50
|
-
expect(resolveSqlDriverId(options, "
|
|
51
|
-
expect(resolveKvDriverId(options, "
|
|
50
|
+
expect(resolveSqlDriverId(options, "docker", true)).toBe("postgres");
|
|
51
|
+
expect(resolveKvDriverId(options, "docker", true)).toBe("redis");
|
|
52
52
|
});
|
|
53
53
|
|
|
54
|
-
test("
|
|
54
|
+
test("docker mode honours OKE_*_DRIVER overrides", () => {
|
|
55
55
|
process.env.OKE_SQL_DRIVER = "postgres";
|
|
56
56
|
process.env.OKE_KV_DRIVER = "redis";
|
|
57
|
-
expect(resolveSqlDriverId({}, "
|
|
58
|
-
expect(resolveKvDriverId({}, "
|
|
57
|
+
expect(resolveSqlDriverId({}, "docker", true)).toBe("postgres");
|
|
58
|
+
expect(resolveKvDriverId({}, "docker", true)).toBe("redis");
|
|
59
59
|
});
|
|
60
60
|
});
|