okengine 0.18.4 → 0.19.0
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 +18 -10
- package/README.md +2 -2
- package/package.json +51 -50
- package/site/content/docs/ai/index.mdx +25 -6
- package/site/content/docs/ai/llms-txt.mdx +1 -1
- package/site/content/docs/ai/meta.json +1 -1
- package/site/content/docs/ai/skills.mdx +4 -1
- package/site/content/docs/ai/try-it.mdx +58 -0
- package/site/content/docs/client/auth.mdx +208 -0
- package/site/content/docs/client/calling.mdx +451 -0
- package/site/content/docs/client/index.mdx +209 -0
- package/site/content/docs/client/live.mdx +234 -0
- package/site/content/docs/client/meta.json +5 -0
- package/site/content/docs/client/react.mdx +249 -0
- package/site/content/docs/elements/ai/agents.mdx +232 -0
- package/site/content/docs/elements/ai/index.mdx +341 -0
- package/site/content/docs/elements/ai/mcp.mdx +275 -0
- package/site/content/docs/elements/ai/meta.json +5 -0
- package/site/content/docs/elements/ai/models.mdx +283 -0
- package/site/content/docs/elements/ai/prompts.mdx +256 -0
- package/site/content/docs/elements/channel/email.mdx +266 -0
- package/site/content/docs/elements/channel/index.mdx +344 -0
- package/site/content/docs/elements/channel/meta.json +5 -0
- package/site/content/docs/elements/channel/push.mdx +218 -0
- package/site/content/docs/elements/channel/receipts.mdx +206 -0
- package/site/content/docs/elements/channel/sms.mdx +264 -0
- package/site/content/docs/elements/channel/whatsapp.mdx +220 -0
- package/site/content/docs/elements/clock/index.mdx +300 -0
- package/site/content/docs/elements/clock/meta.json +5 -0
- package/site/content/docs/elements/clock/schedules.mdx +508 -0
- package/site/content/docs/elements/clock/sleep.mdx +445 -0
- package/site/content/docs/elements/flow/consumers.mdx +707 -0
- package/site/content/docs/elements/flow/http.mdx +1080 -0
- package/site/content/docs/elements/flow/index.mdx +618 -0
- package/site/content/docs/elements/flow/meta.json +5 -0
- package/site/content/docs/elements/flow/routing.mdx +559 -0
- package/site/content/docs/elements/flow/workflows.mdx +640 -0
- package/site/content/docs/elements/gate/auth.mdx +371 -0
- package/site/content/docs/elements/gate/authorization.mdx +298 -0
- package/site/content/docs/elements/gate/index.mdx +418 -0
- package/site/content/docs/elements/gate/meta.json +5 -0
- package/site/content/docs/elements/gate/rate-limits.mdx +365 -0
- package/site/content/docs/elements/gate/rls.mdx +303 -0
- package/site/content/docs/elements/gate/tenancy.mdx +372 -0
- package/site/content/docs/elements/index.mdx +52 -11
- package/site/content/docs/elements/signal/broadcast.mdx +517 -0
- package/site/content/docs/elements/signal/index.mdx +352 -0
- package/site/content/docs/elements/signal/live.mdx +590 -0
- package/site/content/docs/elements/signal/meta.json +5 -0
- package/site/content/docs/elements/signal/once.mdx +596 -0
- package/site/content/docs/elements/store/files.mdx +659 -0
- package/site/content/docs/elements/store/index.mdx +310 -0
- package/site/content/docs/elements/store/kv.mdx +629 -0
- package/site/content/docs/elements/store/meta.json +5 -0
- package/site/content/docs/elements/store/search.mdx +946 -0
- package/site/content/docs/elements/store/sql.mdx +937 -0
- package/site/content/docs/elements/vault/config.mdx +256 -0
- package/site/content/docs/elements/vault/index.mdx +356 -0
- package/site/content/docs/elements/vault/meta.json +5 -0
- package/site/content/docs/elements/vault/rotation.mdx +273 -0
- package/site/content/docs/elements/vault/secrets.mdx +285 -0
- package/site/content/docs/index.mdx +78 -30
- package/site/content/docs/meta.json +11 -8
- package/site/content/docs/plugins/cors.mdx +2 -1
- package/site/content/docs/plugins/csrf.mdx +4 -1
- package/site/content/docs/plugins/headers.mdx +2 -1
- package/site/content/docs/plugins/ip-allowlist.mdx +2 -1
- package/site/content/docs/plugins/magic-link.mdx +6 -0
- package/site/content/docs/plugins/maintenance-mode.mdx +2 -1
- package/site/content/docs/plugins/oauth.mdx +1 -1
- package/site/content/docs/plugins/otp.mdx +12 -1
- package/site/content/docs/plugins/passkey.mdx +39 -15
- package/site/content/docs/plugins/two-factor.mdx +91 -34
- package/site/content/docs/plugins/username.mdx +1 -1
- package/site/content/docs/recipes/caddy.mdx +3 -3
- package/site/content/docs/recipes/index.mdx +18 -28
- package/site/content/docs/recipes/mailpit.mdx +1 -1
- package/site/content/docs/recipes/meilisearch.mdx +3 -3
- package/site/content/docs/recipes/meta.json +1 -4
- package/site/content/docs/recipes/nginx.mdx +2 -2
- package/site/content/docs/recipes/openrouter.mdx +283 -0
- package/site/content/docs/recipes/pgdog.mdx +3 -3
- package/site/content/docs/recipes/postgres.mdx +1 -2
- package/site/content/docs/recipes/rustfs.mdx +2 -2
- package/site/content/docs/recipes/traefik.mdx +3 -3
- package/site/content/docs/reference/cli.mdx +231 -0
- package/site/content/docs/reference/configuration.mdx +30 -10
- package/site/content/docs/reference/environment-variables.mdx +93 -20
- package/site/content/docs/reference/errors.mdx +132 -29
- package/site/content/docs/reference/fx.mdx +137 -73
- package/site/content/docs/reference/index.mdx +13 -21
- package/site/content/docs/reference/meta.json +4 -5
- package/site/content/docs/reference/okid.mdx +42 -17
- package/site/content/docs/reference/plugins.mdx +4 -3
- package/site/content/docs/reference/security.mdx +197 -0
- package/site/content/docs/understand/meta.json +5 -0
- package/site/content/docs/understand/the-anatomy.mdx +132 -0
- package/site/content/docs/understand/the-model.mdx +32 -0
- package/site/content/docs/understand/the-problem.mdx +74 -0
- package/site/content/docs/understand/the-vocabulary.mdx +26 -0
- package/src/auth/api-keys.ts +2 -1
- package/src/auth/bindings.ts +64 -16
- package/src/auth/gate-auth.test.ts +6 -1
- package/src/auth/identity.ts +152 -5
- package/src/auth/index.ts +29 -0
- package/src/auth/invites.ts +2 -1
- package/src/auth/method-context.ts +41 -0
- package/src/auth/oauth-as/crypto.ts +2 -1
- package/src/auth/oauth-as/stores.ts +2 -1
- package/src/auth/operator.ts +2 -1
- package/src/auth/sessions-jwt.test.ts +77 -0
- package/src/auth/sessions.ts +20 -4
- package/src/auth/tenants.ts +3 -2
- package/src/auth/two-factor-challenge.test.ts +61 -0
- package/src/auth/two-factor-challenge.ts +284 -0
- package/src/auth/verification.ts +5 -0
- package/src/bench/REPORT.md +49 -0
- package/src/bench/g03-signal-once.bench.ts +1 -1
- package/src/bench/g10-observability-contention.bench.ts +1 -1
- package/src/bench/g17-hybrid-search.bench.ts +572 -0
- package/src/bench/load-app.ts +2 -10
- package/src/cli/ai-setup/ai-setup.test.ts +331 -42
- package/src/cli/ai-setup/apply.ts +294 -52
- package/src/cli/ai-setup/catalog.ts +238 -1342
- package/src/cli/ai-setup/index.ts +14 -99
- package/src/cli/ai-setup/prompts.ts +60 -443
- package/src/cli/ask-seed.test.ts +96 -0
- package/src/cli/ask-seed.ts +82 -0
- package/src/cli/ask-vault-gaps.test.ts +84 -0
- package/src/cli/ask-vault-gaps.ts +146 -0
- package/src/cli/build.ts +2 -2
- package/src/cli/client-add.test.ts +26 -1
- package/src/cli/client-add.ts +106 -27
- package/src/cli/competitor-mention-removal.test.ts +1 -1
- package/src/cli/db-seed.ts +2 -0
- package/src/cli/db.ts +150 -11
- package/src/cli/dev.ts +119 -211
- package/src/cli/docker-clean.ts +2 -2
- package/src/cli/docker-cli.test.ts +1 -1
- package/src/cli/doctor-diff.ts +4 -2
- package/src/cli/doctor-pii.test.ts +1 -1
- package/src/cli/doctor.ts +14 -1
- package/src/cli/hero-meta.test.ts +4 -2
- package/src/cli/load-config.images.test.ts +8 -10
- package/src/cli/load-config.ts +1 -1
- package/src/cli/registry.ts +22 -10
- package/src/cli/replay.ts +3 -1
- package/src/cli/start.ts +1 -1
- package/src/cli/tui/keys.ts +2 -3
- package/src/client/auth/cookies.ts +74 -0
- package/src/client/auth/create-auth-client.ts +636 -0
- package/src/client/auth/denials.ts +99 -0
- package/src/client/auth/session.ts +283 -0
- package/src/client/auth.test.ts +251 -0
- package/src/client/auth.ts +39 -114
- package/src/client/create-with-session.ts +245 -0
- package/src/client/create.ts +51 -5
- package/src/client/index.ts +11 -1
- package/src/client/live.ts +11 -79
- package/src/client/notes-contract.test.ts +5 -10
- package/src/client/sse.ts +137 -0
- package/src/client/stream.ts +147 -0
- package/src/client/transport.test.ts +32 -0
- package/src/client/transport.ts +123 -26
- package/src/client/types.ts +118 -14
- package/src/client-react/index.ts +185 -24
- package/src/client-react/use-live-query.ts +13 -3
- package/src/compiler/aot.test.ts +7 -4
- package/src/compiler/effects-embed.test.ts +56 -0
- package/src/compiler/effects-fetch.test.ts +43 -0
- package/src/compiler/effects-infer.ts +58 -2
- package/src/compiler/extract.test.ts +258 -44
- package/src/compiler/extract.ts +566 -48
- package/src/compiler/fixtures/skyport/src/flows/bookings/index.ts +7 -4
- package/src/compiler/fixtures/skyport/src/flows/bookings/signals.ts +2 -8
- package/src/compiler/fixtures/skyport.expected.json +4 -4
- package/src/compiler/fixtures/triggers/five-triggers.ts +14 -10
- package/src/compiler/response.ts +2 -2
- package/src/compiler/search-writer-isolation.test.ts +40 -0
- package/src/config/index.ts +11 -0
- package/src/console/server/app.ts +17 -23
- package/src/console/server/bind.ts +4 -0
- package/src/console/server/console.test.ts +2 -2
- package/src/console/server/flows-invoke.test.ts +50 -34
- package/src/console/server/flows.ts +436 -255
- package/src/console/server/runs-ingest.test.ts +6 -3
- package/src/console/server/serve.ts +1 -1
- package/src/console/server/signals.test.ts +1 -5
- package/src/console/server/signals.ts +8 -6
- package/src/console/server/state.ts +6 -1
- package/src/console/server/store.ts +1 -1
- package/src/console/ui-next/dist/assets/FileExportIcon-Ck-5od4R.js +1 -0
- package/src/console/ui-next/dist/assets/MoreHorizontalCircle01Icon-gMNGsE37.js +1 -0
- package/src/console/ui-next/dist/assets/PlusSignIcon-CwG3nxfu.js +1 -0
- package/src/console/ui-next/dist/assets/UnavailableIcon-D9cvHVPr.js +1 -0
- package/src/console/ui-next/dist/assets/UserIcon-DaE2PB5_.js +1 -0
- package/src/console/ui-next/dist/assets/access-page-DFeymU07.js +4 -0
- package/src/console/ui-next/dist/assets/agent-disclosure-U1rdfblp.js +1 -0
- package/src/console/ui-next/dist/assets/cache-glyph-BeFJeqBG.js +1 -0
- package/src/console/ui-next/dist/assets/call-pii-button-CVAONPii.js +1 -0
- package/src/console/ui-next/dist/assets/collapsible-D2A6NJ-3.js +1 -0
- package/src/console/ui-next/dist/assets/copy-inline-button-CAYD18cr.js +1 -0
- package/src/console/ui-next/dist/assets/dagre.esm-B1_XeuLP.js +1 -0
- package/src/console/ui-next/dist/assets/detail-header-DVWNjWjg.js +1 -0
- package/src/console/ui-next/dist/assets/dropdown-menu-4h2LOVXM.js +1 -0
- package/src/console/ui-next/dist/assets/duration-tone-Cgk_h5ja.js +9 -0
- package/src/console/ui-next/dist/assets/element-icons-BI8cJgdh.js +1 -0
- package/src/console/ui-next/dist/assets/explorer-empty-CJs5A-wm.js +1 -0
- package/src/console/ui-next/dist/assets/flows-page-Dss7941e.js +1 -0
- package/src/console/ui-next/dist/assets/highlighted-json-MYZQtRnw.js +154 -0
- package/src/console/ui-next/dist/assets/http-method-Jrh39p7A.js +1 -0
- package/src/console/ui-next/dist/assets/index-D0zS5rKO.css +2 -0
- package/src/console/ui-next/dist/assets/index-DXP2dBIF.js +63 -0
- package/src/console/ui-next/dist/assets/observability-page-HvolXxTI.js +4 -0
- package/src/console/ui-next/dist/assets/react-dom-Ddte4I-Q.js +9 -0
- package/src/console/ui-next/dist/assets/replica-lag-CSh2dzrb.js +18 -0
- package/src/console/ui-next/dist/assets/request-meta-BatF8KrK.js +1 -0
- package/src/console/ui-next/dist/assets/shortcut-keys-3ILd8oGn.js +1 -0
- package/src/console/ui-next/dist/assets/{sql-BskegiFM.js → sql-BsFa4tDR.js} +1 -1
- package/src/console/ui-next/dist/assets/store-page-eiKiHnNe.js +41 -0
- package/src/console/ui-next/dist/assets/trace-detail-sheet-CZkMeKS-.js +2 -0
- package/src/console/ui-next/dist/assets/tree-expand-toggle-CW8y5A2h.js +55 -0
- package/src/console/ui-next/dist/assets/units-page-B_RWJrEO.js +1 -0
- package/src/console/ui-next/dist/assets/{use-vault-list-uk4WVboC.js → use-vault-list-CT4-gajj.js} +1 -1
- package/src/console/ui-next/dist/assets/vault-page-CWrg-A68.js +2 -0
- package/src/console/ui-next/dist/assets/xyflow-CSyC6ryz.css +1 -0
- package/src/console/ui-next/dist/assets/xyflow-yApv7D4e.js +7 -0
- package/src/console/ui-next/dist/index.html +6 -13
- package/src/console/ui-next/seed-invoke-host.ts +21 -18
- package/src/console/ui-next/src/client.ts +7 -2
- package/src/console/ui-next/src/features/flows/graph/element-map.ts +2 -0
- package/src/console/ui-next/src/features/flows/traces/effect-kind.ts +12 -2
- package/src/console/ui-next/src/features/flows/traces/effect-summary.ts +4 -0
- package/src/console/ui-next/src/features/flows/traces/trace-detail-sheet.tsx +8 -0
- package/src/console/ui-next/src/features/flows/traces/waterfall-bars.ts +4 -0
- package/src/console/ui-next/src/features/flows/traces/waterfall-tooltip.ts +9 -3
- package/src/console/ui-next/src/features/store/detail/reveal-cell.tsx +7 -11
- package/src/console/ui-next/src/features/store/detail/store-row-detail-sheet.tsx +2 -2
- package/src/console/ui-next/src/features/store/lib/fields-from-table.ts +2 -0
- package/src/console/ui-next/src/features/store/lib/grid-model.test.ts +25 -1
- package/src/console/ui-next/src/features/store/lib/grid-model.ts +36 -1
- package/src/console/ui-next/src/features/store/query/query-results.tsx +3 -3
- package/src/console/ui-next/src/features/units/detail/effects-summary.tsx +2 -0
- package/src/console/ui-next/src/features/units/lib/call-read-safe.ts +3 -1
- package/src/console/ui-next/src/features/units/lib/fields-from-schema.ts +6 -0
- package/src/docker/ai-model-status.test.ts +1 -12
- package/src/docker/ai-model-status.ts +10 -38
- package/src/docker/compose-up.test.ts +100 -0
- package/src/docker/compose-up.ts +292 -0
- package/src/docker/compose.ts +4 -14
- package/src/docker/derive.ts +9 -34
- package/src/docker/docker.test.ts +16 -261
- package/src/docker/images-config.test.ts +13 -25
- package/src/docker/index.ts +1 -24
- package/src/docker/recipes/index.ts +0 -23
- package/src/docker/recipes/pgdog.ts +6 -4
- package/src/docker/stack-id.test.ts +2 -2
- package/src/docker/stack-id.ts +0 -1
- package/src/docker/types.ts +2 -2
- package/src/drivers/ai-anthropic.ts +10 -0
- package/src/drivers/ai-openai-compatible.ts +34 -7
- package/src/drivers/ai-providers.test.ts +0 -107
- package/src/drivers/ai-stream.test.ts +0 -34
- package/src/drivers/ai-types.ts +17 -8
- package/src/drivers/channel-fcm.ts +6 -1
- package/src/drivers/channel-msegat.ts +6 -1
- package/src/drivers/channel-resend.ts +5 -1
- package/src/drivers/channel-smtp.ts +5 -1
- package/src/drivers/channel-sndr.ts +10 -1
- package/src/drivers/channel-taqnyat-mail.ts +5 -1
- package/src/drivers/channel-taqnyat-whatsapp.ts +6 -1
- package/src/drivers/channel-taqnyat.ts +6 -1
- package/src/drivers/channel-types.ts +10 -0
- package/src/drivers/channel-unifonic.ts +6 -1
- package/src/drivers/channel-wa-cloud.ts +6 -1
- package/src/drivers/channel-webpush.ts +6 -1
- package/src/drivers/external.ts +33 -0
- package/src/drivers/index.ts +0 -10
- package/src/drivers/meilisearch.ts +6 -0
- package/src/drivers/oauth-types.ts +4 -0
- package/src/drivers/postgres.test.ts +74 -3
- package/src/drivers/postgres.ts +175 -6
- package/src/drivers/signal-types.ts +5 -5
- package/src/drivers/types.ts +7 -0
- package/src/drivers/vault-types.ts +5 -0
- package/src/elements/ai/declare.ts +17 -4
- package/src/elements/ai/eval.ts +1 -1
- package/src/elements/ai/mcp-http.ts +1 -1
- package/src/elements/ai/pii.ts +1 -1
- package/src/elements/ai/providers.test.ts +289 -0
- package/src/elements/ai/providers.ts +169 -0
- package/src/elements/ai/runtime.ts +68 -5
- package/src/elements/ai/schema.ts +2 -2
- package/src/elements/ai.test.ts +7 -7
- package/src/elements/ai.ts +17 -1
- package/src/elements/channel/runtime.ts +105 -12
- package/src/elements/clock/cron-fields.test.ts +144 -0
- package/src/elements/clock/cron-fields.ts +185 -0
- package/src/elements/clock/declare.ts +247 -3
- package/src/elements/clock.ts +21 -1
- package/src/elements/index.ts +15 -0
- package/src/elements/signal/chaos-child.ts +1 -2
- package/src/elements/signal/declare.ts +65 -37
- package/src/elements/signal/delivery-modes.test.ts +11 -31
- package/src/elements/signal/dry-run-replay.test.ts +1 -7
- package/src/elements/signal/dry-run-write-isolation.test.ts +1 -7
- package/src/elements/signal/key-ordering.test.ts +6 -26
- package/src/elements/signal/lease-reclaim.test.ts +2 -6
- package/src/elements/signal/optional-emit.test.ts +6 -9
- package/src/elements/signal/order-lifecycle.test.ts +4 -17
- package/src/elements/signal/orphan-messages.test.ts +4 -15
- package/src/elements/signal/reconcile.test.ts +2 -2
- package/src/elements/signal/runtime.ts +1 -1
- package/src/elements/signal/schema-emit.test.ts +4 -8
- package/src/elements/signal.test.ts +24 -49
- package/src/elements/signal.ts +9 -2
- package/src/elements/store/domain-ddl.test.ts +1 -1
- package/src/elements/store/live-http.test.ts +9 -4
- package/src/elements/store/prepare-row.test.ts +123 -0
- package/src/elements/store/resource.ts +43 -12
- package/src/elements/store/schema-decl.ts +117 -0
- package/src/elements/store/search-backfill.ts +205 -0
- package/src/elements/store/search-bind.ts +66 -0
- package/src/elements/store/search-bm25.ts +78 -0
- package/src/elements/store/search-ddl.ts +156 -0
- package/src/elements/store/search-embed-flow.ts +141 -0
- package/src/elements/store/search-errors.ts +34 -0
- package/src/elements/store/search-fusion.ts +112 -0
- package/src/elements/store/search-lsh.ts +179 -0
- package/src/elements/store/search-runtime.ts +300 -0
- package/src/elements/store/search.test.ts +144 -0
- package/src/elements/store/sql-session.test.ts +1 -0
- package/src/elements/store/sql-session.ts +83 -3
- package/src/elements/store/table.ts +23 -2
- package/src/elements/store/upsert-app.test.ts +1 -3
- package/src/elements/store.ts +50 -0
- package/src/full.ts +4 -2
- package/src/http.ts +4 -1
- package/src/i18n/catalogs/ar.ts +14 -6
- package/src/i18n/catalogs/en.ts +14 -6
- package/src/index.ts +6 -1
- package/src/kernel/adopt-barrel-fresh.test.ts +7 -7
- package/src/kernel/adopt-routes.ts +9 -1
- package/src/kernel/app-auth.ts +5 -0
- package/src/kernel/app.ts +102 -9
- package/src/kernel/auto-cache.test.ts +6 -12
- package/src/kernel/auto-registry.test.ts +3 -3
- package/src/kernel/boot-bind/ai.test.ts +22 -19
- package/src/kernel/boot-bind/ai.ts +5 -43
- package/src/kernel/boot-bind/clock.ts +23 -5
- package/src/kernel/boot-bind/honor-config.test.ts +4 -4
- package/src/kernel/boot.test.ts +11 -6
- package/src/kernel/boot.ts +66 -16
- package/src/kernel/boundary-contract.ts +93 -0
- package/src/kernel/budget.test.ts +1 -1
- package/src/kernel/call.ts +89 -0
- package/src/kernel/capability.ts +6 -0
- package/src/kernel/client-descriptor.ts +123 -0
- package/src/kernel/clock-timezone.test.ts +80 -0
- package/src/kernel/correlation.test.ts +1 -1
- package/src/kernel/dry-run.ts +11 -8
- package/src/kernel/effects-stamping.test.ts +42 -9
- package/src/kernel/effects.test.ts +4 -2
- package/src/kernel/effects.ts +51 -9
- package/src/kernel/errors-channel.ts +17 -0
- package/src/kernel/errors-live-resume.ts +3 -2
- package/src/kernel/errors-tenant.ts +7 -4
- package/src/kernel/errors.registry-helpers.ts +96 -0
- package/src/kernel/errors.registry.test.ts +139 -25
- package/src/kernel/errors.ts +102 -23
- package/src/kernel/external-effects.test.ts +196 -0
- package/src/kernel/flow.test.ts +13 -4
- package/src/kernel/flow.ts +69 -71
- package/src/kernel/fx-ask-telemetry.test.ts +2 -2
- package/src/kernel/fx-dead-letters.test.ts +3 -3
- package/src/kernel/fx-fetch.ts +55 -0
- package/src/kernel/fx-live-stream.ts +2 -2
- package/src/kernel/fx-live.test.ts +8 -8
- package/src/kernel/fx.test.ts +17 -11
- package/src/kernel/fx.ts +180 -57
- package/src/kernel/horizontal-child.ts +1 -1
- package/src/kernel/http-query.test.ts +3 -6
- package/src/kernel/index.ts +13 -3
- package/src/kernel/instance-id.ts +1 -1
- package/src/kernel/instances.test.ts +40 -0
- package/src/kernel/instances.ts +47 -9
- package/src/kernel/live-http.test.ts +6 -7
- package/src/kernel/live-http.ts +6 -2
- package/src/kernel/live-resume.test.ts +1 -1
- package/src/kernel/mcp-tool.test.ts +3 -3
- package/src/kernel/on.ts +98 -4
- package/src/kernel/pipeline.test.ts +12 -15
- package/src/kernel/plugin-elements.test.ts +1 -1
- package/src/kernel/stamp-http.test.ts +3 -3
- package/src/kernel/triggers.ts +210 -95
- package/src/kernel-entry.ts +0 -1
- package/src/manifest/diff.ts +11 -1
- package/src/manifest/fixtures/skyport.excerpt.json +1 -1
- package/src/manifest/types.ts +46 -2
- package/src/mcp/docs-index.ts +3 -3
- package/src/mcp/docs-mcp.test.ts +2 -2
- package/src/mcp/docs-tools.ts +1 -1
- package/src/okid.test.ts +56 -0
- package/src/okid.ts +55 -11
- package/src/plugins/anonymous.ts +8 -4
- package/src/plugins/auth/shared.ts +27 -3
- package/src/plugins/auth-delivery.mailpit.integration.test.ts +1 -1
- package/src/plugins/auth-methods.security.test.ts +561 -23
- package/src/plugins/config-source.ts +1 -1
- package/src/plugins/csrf.test.ts +65 -0
- package/src/plugins/index.ts +2 -0
- package/src/plugins/magic-link.ts +36 -16
- package/src/plugins/oauth/shared.ts +3 -1
- package/src/plugins/oauth.ts +22 -14
- package/src/plugins/otp.ts +37 -21
- package/src/plugins/passkey-webauthn.ts +9 -6
- package/src/plugins/passkey.ts +98 -26
- package/src/plugins/pre-account-hijack.test.ts +223 -0
- package/src/plugins/two-factor.ts +466 -37
- package/src/plugins/username.ts +19 -7
- package/src/release/build-lib.ts +1 -0
- package/src/release/limits.ts +2 -2
- package/src/release/measure.ts +1 -1
- package/src/runs/collect.test.ts +0 -2
- package/src/runtime/json-code-block.test.ts +250 -20
- package/src/runtime/json-code-block.ts +1261 -41
- package/src/term.test.ts +1 -1
- package/src/test/create-test-app.test.ts +12 -12
- package/src/test/live-signals.test.ts +6 -6
- package/src/test/provisions.integration.test.ts +10 -14
- package/src/test/reset-element-registries.ts +1 -1
- package/src/test/tenant-isolation.test.ts +12 -6
- package/site/content/docs/deployment/docker-swarm.mdx +0 -164
- package/site/content/docs/deployment/docker.mdx +0 -227
- package/site/content/docs/deployment/index.mdx +0 -83
- package/site/content/docs/deployment/kubernetes.mdx +0 -176
- package/site/content/docs/deployment/meta.json +0 -5
- package/site/content/docs/deployment/reverse-proxy.mdx +0 -234
- package/site/content/docs/elements/ai.mdx +0 -385
- package/site/content/docs/elements/channel.mdx +0 -346
- package/site/content/docs/elements/clock.mdx +0 -244
- package/site/content/docs/elements/flow.mdx +0 -420
- package/site/content/docs/elements/gate.mdx +0 -436
- package/site/content/docs/elements/signal.mdx +0 -380
- package/site/content/docs/elements/store.mdx +0 -1099
- package/site/content/docs/elements/vault.mdx +0 -405
- package/site/content/docs/get-started/basic-usage.mdx +0 -173
- package/site/content/docs/get-started/index.mdx +0 -43
- package/site/content/docs/get-started/installation.mdx +0 -220
- package/site/content/docs/get-started/introduction.mdx +0 -132
- package/site/content/docs/get-started/meta.json +0 -13
- package/site/content/docs/get-started/project-structure.mdx +0 -925
- package/site/content/docs/get-started/testing.mdx +0 -328
- package/site/content/docs/get-started/why.mdx +0 -162
- package/site/content/docs/recipes/llama-cpp.mdx +0 -151
- package/site/content/docs/recipes/ollama.mdx +0 -142
- package/site/content/docs/recipes/sglang.mdx +0 -105
- package/site/content/docs/recipes/vllm.mdx +0 -106
- package/site/content/docs/reference/cli.md +0 -232
- package/site/content/docs/reference/client.mdx +0 -469
- package/site/content/docs/reference/security.md +0 -74
- package/src/cli/ai-setup/detect-ollama.ts +0 -213
- package/src/cli/ai-setup/recommend.test.ts +0 -225
- package/src/cli/ai-setup/recommend.ts +0 -225
- package/src/cli/dev-controls.test.ts +0 -122
- package/src/cli/dev-controls.ts +0 -164
- package/src/cli/tui/DevLive.tsx +0 -126
- package/src/console/ui-next/dist/assets/access-page-De7Lc2JC.js +0 -4
- package/src/console/ui-next/dist/assets/agent-disclosure-BP0Y0Sux.js +0 -1
- package/src/console/ui-next/dist/assets/cache-glyph-B5X-NM0-.js +0 -1
- package/src/console/ui-next/dist/assets/call-pii-button-ChAUiLo9.js +0 -1
- package/src/console/ui-next/dist/assets/collapsible-DGnOM2ph.js +0 -1
- package/src/console/ui-next/dist/assets/copy-inline-button-DBHhgHKP.js +0 -1
- package/src/console/ui-next/dist/assets/dagre.esm-ZwcdTuZZ.js +0 -1
- package/src/console/ui-next/dist/assets/detail-header-DhHM1iaZ.js +0 -1
- package/src/console/ui-next/dist/assets/dropdown-menu-_NjTEo5_.js +0 -1
- package/src/console/ui-next/dist/assets/duration-tone-sC3lGABz.js +0 -9
- package/src/console/ui-next/dist/assets/element-icons-BVXtRyd3.js +0 -1
- package/src/console/ui-next/dist/assets/explorer-empty-2uIhBu0_.js +0 -1
- package/src/console/ui-next/dist/assets/flows-page-RGy7VEA_.js +0 -1
- package/src/console/ui-next/dist/assets/highlighted-json-Awq7gYdu.js +0 -154
- package/src/console/ui-next/dist/assets/http-method-_UHM2ODJ.js +0 -1
- package/src/console/ui-next/dist/assets/index-Ck88Jmv8.css +0 -2
- package/src/console/ui-next/dist/assets/index-_rgpdVzo.js +0 -66
- package/src/console/ui-next/dist/assets/link-BX6Vqztd.js +0 -1
- package/src/console/ui-next/dist/assets/observability-page-Ds6pcnh-.js +0 -4
- package/src/console/ui-next/dist/assets/preload-helper-oH4irX4C.js +0 -1
- package/src/console/ui-next/dist/assets/react-D8E3mtu1.js +0 -1
- package/src/console/ui-next/dist/assets/react-dom-Bph1y7z7.js +0 -9
- package/src/console/ui-next/dist/assets/replica-lag-DKRrbvdo.js +0 -18
- package/src/console/ui-next/dist/assets/request-meta-DV0ywz7t.js +0 -1
- package/src/console/ui-next/dist/assets/shortcut-JQIZlWfm.js +0 -1
- package/src/console/ui-next/dist/assets/shortcut-keys-DKxNTe_m.js +0 -1
- package/src/console/ui-next/dist/assets/skeleton-D-czQJT6.js +0 -1
- package/src/console/ui-next/dist/assets/store-page-02xOiqIK.js +0 -41
- package/src/console/ui-next/dist/assets/trace-detail-sheet-B09O8rA6.js +0 -2
- package/src/console/ui-next/dist/assets/tree-expand-toggle-BtyhmWb4.js +0 -55
- package/src/console/ui-next/dist/assets/units-page-4rHOePuE.js +0 -1
- package/src/console/ui-next/dist/assets/useMutation-B8EO02Ej.js +0 -1
- package/src/console/ui-next/dist/assets/useRender-BE2A9BWC.js +0 -1
- package/src/console/ui-next/dist/assets/vault-page-DISPgxLM.js +0 -2
- package/src/console/ui-next/dist/assets/xyflow-D7n4g6go.js +0 -7
- package/src/console/ui-next/dist/assets/xyflow-DZ0Ws1xk.css +0 -1
- package/src/docker/ollama-pull.ts +0 -232
- package/src/docker/recipes/llama-cpp.ts +0 -298
- package/src/docker/recipes/ollama.ts +0 -44
- package/src/docker/recipes/sglang.ts +0 -55
- package/src/docker/recipes/vllm.ts +0 -44
- package/src/drivers/ai-ollama-tools.integration.test.ts +0 -109
- package/src/drivers/ai-ollama.integration.test.ts +0 -184
- package/src/drivers/ai-ollama.ts +0 -389
- package/src/drivers/ollama.ts +0 -14
|
@@ -92,11 +92,18 @@ const ManifestOut = z.object({
|
|
|
92
92
|
});
|
|
93
93
|
|
|
94
94
|
const EffectEntryOut = z.object({
|
|
95
|
-
kind: z.enum(["read", "write", "emit", "send", "ask", "secret", "call"]),
|
|
95
|
+
kind: z.enum(["read", "write", "emit", "send", "ask", "embed", "secret", "call", "fetch"]),
|
|
96
96
|
resource: z.string(),
|
|
97
97
|
timestamp: z.number(),
|
|
98
98
|
duration: z.number(),
|
|
99
99
|
reversibility: z.enum(["none", "reversible", "deferred", "irreversible", "capability", "portal"]),
|
|
100
|
+
external: z
|
|
101
|
+
.object({
|
|
102
|
+
host: z.string(),
|
|
103
|
+
provider: z.string().optional(),
|
|
104
|
+
kind: z.enum(["third-party", "infrastructure"]).optional(),
|
|
105
|
+
})
|
|
106
|
+
.optional(),
|
|
100
107
|
});
|
|
101
108
|
|
|
102
109
|
const LogLineOut = z.object({
|
|
@@ -259,7 +266,7 @@ const SignalsReplayOut = z.object({
|
|
|
259
266
|
),
|
|
260
267
|
wouldHaveFired: z.array(
|
|
261
268
|
z.object({
|
|
262
|
-
kind: z.enum(["send", "ask"]),
|
|
269
|
+
kind: z.enum(["send", "ask", "embed", "fetch"]),
|
|
263
270
|
resource: z.string(),
|
|
264
271
|
messageId: z.string().optional(),
|
|
265
272
|
}),
|
|
@@ -893,7 +900,17 @@ const AiListOut = z.object({
|
|
|
893
900
|
status: z.enum(["ok", "denied"]),
|
|
894
901
|
effects: z.array(
|
|
895
902
|
z.object({
|
|
896
|
-
kind: z.enum([
|
|
903
|
+
kind: z.enum([
|
|
904
|
+
"read",
|
|
905
|
+
"write",
|
|
906
|
+
"emit",
|
|
907
|
+
"send",
|
|
908
|
+
"ask",
|
|
909
|
+
"embed",
|
|
910
|
+
"secret",
|
|
911
|
+
"call",
|
|
912
|
+
"fetch",
|
|
913
|
+
]),
|
|
897
914
|
resource: z.string(),
|
|
898
915
|
}),
|
|
899
916
|
),
|
|
@@ -1541,7 +1558,7 @@ const StoreEditOut = z.object({
|
|
|
1541
1558
|
willNotFire: WillNotFireOut,
|
|
1542
1559
|
wouldHaveFired: z.array(
|
|
1543
1560
|
z.object({
|
|
1544
|
-
kind: z.enum(["send", "ask"]),
|
|
1561
|
+
kind: z.enum(["send", "ask", "embed", "fetch"]),
|
|
1545
1562
|
resource: z.string(),
|
|
1546
1563
|
}),
|
|
1547
1564
|
),
|
|
@@ -1754,7 +1771,7 @@ const StorePreviewOut = z.object({
|
|
|
1754
1771
|
willNotFire: WillNotFireOut,
|
|
1755
1772
|
wouldHaveFired: z.array(
|
|
1756
1773
|
z.object({
|
|
1757
|
-
kind: z.enum(["send", "ask"]),
|
|
1774
|
+
kind: z.enum(["send", "ask", "embed", "fetch"]),
|
|
1758
1775
|
resource: z.string(),
|
|
1759
1776
|
}),
|
|
1760
1777
|
),
|
|
@@ -1926,67 +1943,419 @@ export function createConsoleBindings(state: ConsoleState): {
|
|
|
1926
1943
|
const channelSendTest = createChannelSendTest(state);
|
|
1927
1944
|
|
|
1928
1945
|
const bindings: Binding[] = [
|
|
1929
|
-
bindHttp(http.get("/console/setup/status"), setupStatus),
|
|
1930
|
-
bindHttp(
|
|
1931
|
-
|
|
1932
|
-
|
|
1933
|
-
|
|
1934
|
-
|
|
1935
|
-
|
|
1936
|
-
|
|
1937
|
-
|
|
1938
|
-
bindHttp(
|
|
1939
|
-
|
|
1940
|
-
|
|
1941
|
-
|
|
1942
|
-
|
|
1943
|
-
|
|
1944
|
-
|
|
1945
|
-
|
|
1946
|
-
bindHttp(http.get("/console/
|
|
1947
|
-
bindHttp(
|
|
1948
|
-
|
|
1949
|
-
|
|
1950
|
-
|
|
1951
|
-
bindHttp(
|
|
1952
|
-
|
|
1953
|
-
|
|
1954
|
-
|
|
1955
|
-
bindHttp(http.
|
|
1956
|
-
bindHttp(
|
|
1957
|
-
|
|
1958
|
-
|
|
1959
|
-
|
|
1960
|
-
|
|
1961
|
-
|
|
1962
|
-
|
|
1963
|
-
|
|
1964
|
-
bindHttp(
|
|
1965
|
-
|
|
1966
|
-
|
|
1967
|
-
|
|
1968
|
-
|
|
1969
|
-
|
|
1970
|
-
|
|
1971
|
-
|
|
1972
|
-
bindHttp(
|
|
1973
|
-
|
|
1974
|
-
|
|
1975
|
-
|
|
1976
|
-
|
|
1977
|
-
|
|
1978
|
-
|
|
1979
|
-
|
|
1980
|
-
bindHttp(
|
|
1981
|
-
|
|
1982
|
-
|
|
1983
|
-
|
|
1984
|
-
bindHttp(
|
|
1985
|
-
|
|
1986
|
-
|
|
1987
|
-
|
|
1988
|
-
|
|
1989
|
-
|
|
1946
|
+
bindHttp(http.get("/console/setup/status", { out: SetupStatusOut }), setupStatus),
|
|
1947
|
+
bindHttp(
|
|
1948
|
+
http.post("/console/setup/claim", {
|
|
1949
|
+
in: ClaimIn,
|
|
1950
|
+
out: SessionOut,
|
|
1951
|
+
errors: { SetupClosed, ClaimFailed },
|
|
1952
|
+
}),
|
|
1953
|
+
setupClaim,
|
|
1954
|
+
),
|
|
1955
|
+
bindHttp(
|
|
1956
|
+
http.post("/console/session/login", {
|
|
1957
|
+
in: LoginIn,
|
|
1958
|
+
out: SessionOut,
|
|
1959
|
+
errors: { AuthFailed, AuthRateLimited },
|
|
1960
|
+
}),
|
|
1961
|
+
sessionLogin,
|
|
1962
|
+
),
|
|
1963
|
+
bindHttp(http.get("/console/session/me", { out: MeOut, errors: { AuthFailed } }), sessionMe),
|
|
1964
|
+
bindHttp(
|
|
1965
|
+
http.post("/console/session/logout", { out: z.object({ ok: z.literal(true) }) }),
|
|
1966
|
+
sessionLogout,
|
|
1967
|
+
),
|
|
1968
|
+
bindHttp(
|
|
1969
|
+
http.get("/console/manifest", { out: ManifestOut, errors: { AuthFailed } }),
|
|
1970
|
+
manifestGet,
|
|
1971
|
+
),
|
|
1972
|
+
bindHttp(http.get("/console/runs", { out: RunsListOut, errors: { AuthFailed } }), runsList),
|
|
1973
|
+
bindHttp(
|
|
1974
|
+
http.post("/console/runs/query", {
|
|
1975
|
+
in: RunsQueryIn,
|
|
1976
|
+
out: RunsQueryOut,
|
|
1977
|
+
errors: { AuthFailed, QueryRejected, QueryTimeout, QueryFailed },
|
|
1978
|
+
}),
|
|
1979
|
+
runsQuery,
|
|
1980
|
+
),
|
|
1981
|
+
bindHttp(
|
|
1982
|
+
http.post("/console/action/ping", {
|
|
1983
|
+
in: ActionPingIn,
|
|
1984
|
+
out: ActionPingOut,
|
|
1985
|
+
errors: { AuthFailed },
|
|
1986
|
+
}),
|
|
1987
|
+
actionPing,
|
|
1988
|
+
),
|
|
1989
|
+
bindHttp(
|
|
1990
|
+
http.post("/console/structural/propose", {
|
|
1991
|
+
in: StructuralIn,
|
|
1992
|
+
out: StructuralOut,
|
|
1993
|
+
errors: { AuthFailed },
|
|
1994
|
+
}),
|
|
1995
|
+
structuralPropose,
|
|
1996
|
+
),
|
|
1997
|
+
bindHttp(
|
|
1998
|
+
http.get("/console/flows/identities", { out: IdentitiesOut, errors: { AuthFailed } }),
|
|
1999
|
+
flowsIdentities,
|
|
2000
|
+
),
|
|
2001
|
+
bindHttp(
|
|
2002
|
+
http.post("/console/flows/invoke", {
|
|
2003
|
+
in: InvokeIn,
|
|
2004
|
+
out: InvokeOut,
|
|
2005
|
+
errors: { AuthFailed, NotFound, InvokeDenied, ConfirmRequired },
|
|
2006
|
+
}),
|
|
2007
|
+
flowsInvoke,
|
|
2008
|
+
),
|
|
2009
|
+
bindHttp(
|
|
2010
|
+
http.post("/console/traces/replay", {
|
|
2011
|
+
in: TracesReplayIn,
|
|
2012
|
+
out: TracesReplayOut,
|
|
2013
|
+
errors: { AuthFailed, NotFound, ReplayUnavailable, ReplayFailed },
|
|
2014
|
+
}),
|
|
2015
|
+
tracesReplay,
|
|
2016
|
+
),
|
|
2017
|
+
bindHttp(
|
|
2018
|
+
http.get("/console/signals", { out: SignalsListOut, errors: { AuthFailed } }),
|
|
2019
|
+
signalsList,
|
|
2020
|
+
),
|
|
2021
|
+
bindHttp(
|
|
2022
|
+
http.post("/console/signals/replay", {
|
|
2023
|
+
in: SignalsReplayIn,
|
|
2024
|
+
out: SignalsReplayOut,
|
|
2025
|
+
errors: { AuthFailed, SignalNotFound, ConfirmRequired },
|
|
2026
|
+
}),
|
|
2027
|
+
signalsReplay,
|
|
2028
|
+
),
|
|
2029
|
+
bindHttp(
|
|
2030
|
+
http.post("/console/signals/dry-run-replay", {
|
|
2031
|
+
in: SignalsReplayIn.omit({ dryRun: true }),
|
|
2032
|
+
out: SignalsReplayOut,
|
|
2033
|
+
errors: { AuthFailed, SignalNotFound, DryRunUnsafe },
|
|
2034
|
+
}),
|
|
2035
|
+
signalsDryRunReplay,
|
|
2036
|
+
),
|
|
2037
|
+
bindHttp(
|
|
2038
|
+
http.post("/console/signals/discard", {
|
|
2039
|
+
in: SignalsDiscardIn,
|
|
2040
|
+
out: SignalsDiscardOut,
|
|
2041
|
+
errors: { AuthFailed, SignalNotFound, ConfirmRequired },
|
|
2042
|
+
}),
|
|
2043
|
+
signalsDiscard,
|
|
2044
|
+
),
|
|
2045
|
+
bindHttp(http.get("/console/store", { out: StoreListOut, errors: { AuthFailed } }), storeList),
|
|
2046
|
+
bindHttp(
|
|
2047
|
+
http.query("/console/store/query", {
|
|
2048
|
+
in: StoreQueryIn,
|
|
2049
|
+
out: StoreQueryOut,
|
|
2050
|
+
errors: { AuthFailed, TenantRequired, StoreNotFound },
|
|
2051
|
+
}),
|
|
2052
|
+
storeQuery,
|
|
2053
|
+
),
|
|
2054
|
+
bindHttp(
|
|
2055
|
+
http.post("/console/store/reveal", {
|
|
2056
|
+
in: StoreRevealIn,
|
|
2057
|
+
out: StoreRevealOut,
|
|
2058
|
+
errors: { AuthFailed, TenantRequired, StoreNotFound },
|
|
2059
|
+
}),
|
|
2060
|
+
storeReveal,
|
|
2061
|
+
),
|
|
2062
|
+
bindHttp(
|
|
2063
|
+
http.post("/console/store/object", {
|
|
2064
|
+
in: StoreFileGetIn,
|
|
2065
|
+
out: StoreFileGetOut,
|
|
2066
|
+
errors: { AuthFailed, TenantRequired, StoreNotFound },
|
|
2067
|
+
}),
|
|
2068
|
+
storeObject,
|
|
2069
|
+
),
|
|
2070
|
+
bindHttp(
|
|
2071
|
+
http.post("/console/store/edit", {
|
|
2072
|
+
in: StoreEditIn,
|
|
2073
|
+
out: StoreEditOut,
|
|
2074
|
+
errors: { AuthFailed, TenantRequired, ConfirmRequired, StoreNotFound },
|
|
2075
|
+
}),
|
|
2076
|
+
storeEdit,
|
|
2077
|
+
),
|
|
2078
|
+
bindHttp(
|
|
2079
|
+
http.post("/console/store/delete", {
|
|
2080
|
+
in: StoreDeleteIn,
|
|
2081
|
+
out: StoreDeleteOut,
|
|
2082
|
+
errors: { AuthFailed, TenantRequired, ConfirmRequired },
|
|
2083
|
+
}),
|
|
2084
|
+
storeDelete,
|
|
2085
|
+
),
|
|
2086
|
+
bindHttp(
|
|
2087
|
+
http.post("/console/store/purge-cache", {
|
|
2088
|
+
in: StorePurgeIn,
|
|
2089
|
+
out: StorePurgeOut,
|
|
2090
|
+
errors: { AuthFailed, ConfirmRequired },
|
|
2091
|
+
}),
|
|
2092
|
+
storePurgeCache,
|
|
2093
|
+
),
|
|
2094
|
+
bindHttp(
|
|
2095
|
+
http.post("/console/store/sql", {
|
|
2096
|
+
in: StoreSqlIn,
|
|
2097
|
+
out: StoreSqlOut,
|
|
2098
|
+
errors: { AuthFailed, TenantRequired, StoreNotFound },
|
|
2099
|
+
}),
|
|
2100
|
+
storeSql,
|
|
2101
|
+
),
|
|
2102
|
+
bindHttp(
|
|
2103
|
+
http.post("/console/store/preview", {
|
|
2104
|
+
in: StorePreviewIn,
|
|
2105
|
+
out: StorePreviewOut,
|
|
2106
|
+
errors: { AuthFailed, TenantRequired, DryRunUnsafe },
|
|
2107
|
+
}),
|
|
2108
|
+
storePreview,
|
|
2109
|
+
),
|
|
2110
|
+
bindHttp(
|
|
2111
|
+
http.query("/console/store/sql/stats", {
|
|
2112
|
+
in: StoreSqlStatsIn,
|
|
2113
|
+
out: StoreSqlStatsOut,
|
|
2114
|
+
errors: {
|
|
2115
|
+
AuthFailed,
|
|
2116
|
+
TenantRequired,
|
|
2117
|
+
StoreNotFound,
|
|
2118
|
+
PgStatStatementsNotPreloaded,
|
|
2119
|
+
PgStatStatementsUnsupported,
|
|
2120
|
+
PgStatStatementsNotCreated,
|
|
2121
|
+
},
|
|
2122
|
+
}),
|
|
2123
|
+
storeStats,
|
|
2124
|
+
),
|
|
2125
|
+
bindHttp(
|
|
2126
|
+
http.query("/console/store/sql/locks", {
|
|
2127
|
+
in: StoreSqlLocksIn,
|
|
2128
|
+
out: StoreSqlLocksOut,
|
|
2129
|
+
errors: {
|
|
2130
|
+
AuthFailed,
|
|
2131
|
+
TenantRequired,
|
|
2132
|
+
StoreNotFound,
|
|
2133
|
+
PgStatStatementsNotPreloaded,
|
|
2134
|
+
PgStatStatementsUnsupported,
|
|
2135
|
+
PgStatStatementsNotCreated,
|
|
2136
|
+
},
|
|
2137
|
+
}),
|
|
2138
|
+
storeLocks,
|
|
2139
|
+
),
|
|
2140
|
+
bindHttp(
|
|
2141
|
+
http.query("/console/store/kv/stats", {
|
|
2142
|
+
in: StoreKvStatsIn,
|
|
2143
|
+
out: StoreKvStatsOut,
|
|
2144
|
+
errors: { AuthFailed, TenantRequired, StoreNotFound, KvStatsUnsupported },
|
|
2145
|
+
}),
|
|
2146
|
+
storeKvStats,
|
|
2147
|
+
),
|
|
2148
|
+
bindHttp(
|
|
2149
|
+
http.post("/console/store/sql/advise", {
|
|
2150
|
+
in: StoreSqlAdviseIn,
|
|
2151
|
+
out: StoreSqlAdviseOut,
|
|
2152
|
+
errors: {
|
|
2153
|
+
AuthFailed,
|
|
2154
|
+
TenantRequired,
|
|
2155
|
+
StoreNotFound,
|
|
2156
|
+
PgStatStatementsNotPreloaded,
|
|
2157
|
+
PgStatStatementsUnsupported,
|
|
2158
|
+
PgStatStatementsNotCreated,
|
|
2159
|
+
},
|
|
2160
|
+
}),
|
|
2161
|
+
storeAdvise,
|
|
2162
|
+
),
|
|
2163
|
+
bindHttp(http.get("/console/vault", { out: VaultListOut, errors: { AuthFailed } }), vaultList),
|
|
2164
|
+
bindHttp(
|
|
2165
|
+
http.post("/console/vault/set", {
|
|
2166
|
+
in: VaultWriteIn,
|
|
2167
|
+
out: VaultWriteOut,
|
|
2168
|
+
errors: { AuthFailed, VaultNotFound },
|
|
2169
|
+
}),
|
|
2170
|
+
vaultSet,
|
|
2171
|
+
),
|
|
2172
|
+
bindHttp(
|
|
2173
|
+
http.post("/console/vault/create", {
|
|
2174
|
+
in: VaultCreateIn,
|
|
2175
|
+
out: VaultWriteOut,
|
|
2176
|
+
errors: { AuthFailed, VaultExists, VaultNotFound },
|
|
2177
|
+
}),
|
|
2178
|
+
vaultCreate,
|
|
2179
|
+
),
|
|
2180
|
+
bindHttp(
|
|
2181
|
+
http.post("/console/vault/rotate", {
|
|
2182
|
+
in: VaultWriteIn,
|
|
2183
|
+
out: VaultWriteOut,
|
|
2184
|
+
errors: { AuthFailed, VaultNotFound },
|
|
2185
|
+
}),
|
|
2186
|
+
vaultRotate,
|
|
2187
|
+
),
|
|
2188
|
+
bindHttp(
|
|
2189
|
+
http.post("/console/vault/rotate-master", {
|
|
2190
|
+
in: VaultRotateMasterIn,
|
|
2191
|
+
out: VaultRotateMasterOut,
|
|
2192
|
+
errors: { AuthFailed, ConfirmRequired, VaultSealed, VaultRotateBusy, VaultUnsupported },
|
|
2193
|
+
}),
|
|
2194
|
+
vaultRotateMaster,
|
|
2195
|
+
),
|
|
2196
|
+
bindHttp(
|
|
2197
|
+
http.get("/console/vault/audit/verify", {
|
|
2198
|
+
out: VaultAuditVerifyOut,
|
|
2199
|
+
errors: { AuthFailed, VaultUnsupported },
|
|
2200
|
+
}),
|
|
2201
|
+
vaultAuditVerify,
|
|
2202
|
+
),
|
|
2203
|
+
bindHttp(http.get("/console/ai", { out: AiListOut, errors: { AuthFailed } }), aiList),
|
|
2204
|
+
bindHttp(http.get("/console/gates", { out: GatesListOut, errors: { AuthFailed } }), gatesList),
|
|
2205
|
+
bindHttp(
|
|
2206
|
+
http.query("/console/gates/simulate", {
|
|
2207
|
+
in: GatesSimulateIn,
|
|
2208
|
+
out: GatesSimulateOut,
|
|
2209
|
+
errors: { AuthFailed },
|
|
2210
|
+
}),
|
|
2211
|
+
gatesSimulate,
|
|
2212
|
+
),
|
|
2213
|
+
bindHttp(
|
|
2214
|
+
http.query("/console/gates/powers", {
|
|
2215
|
+
in: GatesPowersIn,
|
|
2216
|
+
out: GatesPowersOut,
|
|
2217
|
+
errors: { AuthFailed },
|
|
2218
|
+
}),
|
|
2219
|
+
gatesPowers,
|
|
2220
|
+
),
|
|
2221
|
+
bindHttp(
|
|
2222
|
+
http.get("/console/access", { out: AccessListOut, errors: { AuthFailed } }),
|
|
2223
|
+
accessList,
|
|
2224
|
+
),
|
|
2225
|
+
bindHttp(
|
|
2226
|
+
http.query("/console/access/effective", {
|
|
2227
|
+
in: AccessEffectiveIn,
|
|
2228
|
+
out: AccessEffectiveOut,
|
|
2229
|
+
errors: { AuthFailed, NotFound },
|
|
2230
|
+
}),
|
|
2231
|
+
accessEffective,
|
|
2232
|
+
),
|
|
2233
|
+
bindHttp(
|
|
2234
|
+
http.post("/console/access/key-blast", {
|
|
2235
|
+
in: AccessKeyBlastIn,
|
|
2236
|
+
out: AccessKeyBlastOut,
|
|
2237
|
+
errors: { AuthFailed, AccessKeyNotFound },
|
|
2238
|
+
}),
|
|
2239
|
+
accessKeyBlast,
|
|
2240
|
+
),
|
|
2241
|
+
bindHttp(
|
|
2242
|
+
http.post("/console/access/keys", {
|
|
2243
|
+
in: AccessCreateKeyIn,
|
|
2244
|
+
out: AccessCreateKeyOut,
|
|
2245
|
+
errors: { AuthFailed, AccessGrantDenied },
|
|
2246
|
+
}),
|
|
2247
|
+
accessCreateKeyFlow,
|
|
2248
|
+
),
|
|
2249
|
+
bindHttp(
|
|
2250
|
+
http.post("/console/access/keys/revoke", {
|
|
2251
|
+
in: AccessRevokeKeyIn,
|
|
2252
|
+
out: AccessRevokeKeyOut,
|
|
2253
|
+
errors: { AuthFailed, AccessKeyNotFound, ConfirmRequired },
|
|
2254
|
+
}),
|
|
2255
|
+
accessRevokeKeyFlow,
|
|
2256
|
+
),
|
|
2257
|
+
bindHttp(
|
|
2258
|
+
http.post("/console/access/keys/rotate", {
|
|
2259
|
+
in: AccessRotateKeyIn,
|
|
2260
|
+
out: AccessRotateKeyOut,
|
|
2261
|
+
errors: { AuthFailed, AccessKeyNotFound, ConfirmRequired },
|
|
2262
|
+
}),
|
|
2263
|
+
accessRotateKeyFlow,
|
|
2264
|
+
),
|
|
2265
|
+
bindHttp(
|
|
2266
|
+
http.post("/console/access/keys/update", {
|
|
2267
|
+
in: AccessUpdateKeyIn,
|
|
2268
|
+
out: AccessUpdateKeyOut,
|
|
2269
|
+
errors: { AuthFailed, AccessKeyNotFound, AccessGrantDenied },
|
|
2270
|
+
}),
|
|
2271
|
+
accessUpdateKeyFlow,
|
|
2272
|
+
),
|
|
2273
|
+
bindHttp(
|
|
2274
|
+
http.post("/console/access/roles/grants", {
|
|
2275
|
+
in: AccessSetRoleGrantsIn,
|
|
2276
|
+
out: AccessSetRoleGrantsOut,
|
|
2277
|
+
errors: { AuthFailed, AccessGrantDenied },
|
|
2278
|
+
}),
|
|
2279
|
+
accessSetRoleGrantsFlow,
|
|
2280
|
+
),
|
|
2281
|
+
bindHttp(http.get("/console/diff", { out: DiffListOut, errors: { AuthFailed } }), diffList),
|
|
2282
|
+
bindHttp(
|
|
2283
|
+
http.get("/console/plugins", { out: PluginsListOut, errors: { AuthFailed } }),
|
|
2284
|
+
pluginsList,
|
|
2285
|
+
),
|
|
2286
|
+
bindHttp(http.get("/console/clock", { out: ClockListOut, errors: { AuthFailed } }), clockList),
|
|
2287
|
+
bindHttp(
|
|
2288
|
+
http.get("/console/instances", { out: InstancesListOut, errors: { AuthFailed } }),
|
|
2289
|
+
instancesList,
|
|
2290
|
+
),
|
|
2291
|
+
bindHttp(
|
|
2292
|
+
http.post("/console/clock/run-now", {
|
|
2293
|
+
in: ClockRunNowIn,
|
|
2294
|
+
out: ClockRunNowOut,
|
|
2295
|
+
errors: { AuthFailed, ClockNotFound, ConfirmRequired },
|
|
2296
|
+
}),
|
|
2297
|
+
clockRunNow,
|
|
2298
|
+
),
|
|
2299
|
+
bindHttp(
|
|
2300
|
+
http.post("/console/clock/pause", {
|
|
2301
|
+
in: ClockPauseIn,
|
|
2302
|
+
out: ClockPauseOut,
|
|
2303
|
+
errors: { AuthFailed, ClockNotFound },
|
|
2304
|
+
}),
|
|
2305
|
+
clockPause,
|
|
2306
|
+
),
|
|
2307
|
+
bindHttp(
|
|
2308
|
+
http.post("/console/clock/edit-schedule", {
|
|
2309
|
+
in: ClockEditIn,
|
|
2310
|
+
out: ClockEditOut,
|
|
2311
|
+
errors: { AuthFailed, ClockNotFound, ScheduleNotOverridable },
|
|
2312
|
+
}),
|
|
2313
|
+
clockEditSchedule,
|
|
2314
|
+
),
|
|
2315
|
+
bindHttp(
|
|
2316
|
+
http.post("/console/clock/wake-early", {
|
|
2317
|
+
in: ClockWakeEarlyIn,
|
|
2318
|
+
out: ClockWakeEarlyOut,
|
|
2319
|
+
errors: { AuthFailed, ClockNotFound },
|
|
2320
|
+
}),
|
|
2321
|
+
clockWakeEarly,
|
|
2322
|
+
),
|
|
2323
|
+
bindHttp(
|
|
2324
|
+
http.get("/console/channels", { out: ChannelsListOut, errors: { AuthFailed } }),
|
|
2325
|
+
channelsList,
|
|
2326
|
+
),
|
|
2327
|
+
bindHttp(
|
|
2328
|
+
http.query("/console/channels/preview", {
|
|
2329
|
+
in: ChannelPreviewIn,
|
|
2330
|
+
out: ChannelPreviewOut,
|
|
2331
|
+
errors: { AuthFailed, ChannelNotFound },
|
|
2332
|
+
}),
|
|
2333
|
+
channelPreview,
|
|
2334
|
+
),
|
|
2335
|
+
bindHttp(
|
|
2336
|
+
http.post("/console/channels/verify-auth", {
|
|
2337
|
+
in: ChannelVerifyAuthIn,
|
|
2338
|
+
out: ChannelVerifyAuthOut,
|
|
2339
|
+
errors: { AuthFailed },
|
|
2340
|
+
}),
|
|
2341
|
+
channelVerifyAuth,
|
|
2342
|
+
),
|
|
2343
|
+
bindHttp(
|
|
2344
|
+
http.post("/console/channels/reveal", {
|
|
2345
|
+
in: ChannelRevealIn,
|
|
2346
|
+
out: ChannelRevealOut,
|
|
2347
|
+
errors: { AuthFailed, ChannelNotFound },
|
|
2348
|
+
}),
|
|
2349
|
+
channelReveal,
|
|
2350
|
+
),
|
|
2351
|
+
bindHttp(
|
|
2352
|
+
http.post("/console/channels/send-test", {
|
|
2353
|
+
in: ChannelSendTestIn,
|
|
2354
|
+
out: ChannelSendTestOut,
|
|
2355
|
+
errors: { AuthFailed, ChannelNotFound, ConfirmRequired },
|
|
2356
|
+
}),
|
|
2357
|
+
channelSendTest,
|
|
2358
|
+
),
|
|
1990
2359
|
];
|
|
1991
2360
|
|
|
1992
2361
|
return {
|
|
@@ -2069,7 +2438,6 @@ export function createConsoleBindings(state: ConsoleState): {
|
|
|
2069
2438
|
function createSetupStatus(state: ConsoleState) {
|
|
2070
2439
|
return flow("console.setup.status", {
|
|
2071
2440
|
plane: "operator",
|
|
2072
|
-
out: SetupStatusOut,
|
|
2073
2441
|
do: () => ({
|
|
2074
2442
|
setupClosed: state.setupClosed,
|
|
2075
2443
|
claimRequired: !state.setupClosed,
|
|
@@ -2080,9 +2448,6 @@ function createSetupStatus(state: ConsoleState) {
|
|
|
2080
2448
|
function createSetupClaim(state: ConsoleState) {
|
|
2081
2449
|
return flow("console.setup.claim", {
|
|
2082
2450
|
plane: "operator",
|
|
2083
|
-
in: ClaimIn,
|
|
2084
|
-
out: SessionOut,
|
|
2085
|
-
errors: { SetupClosed, ClaimFailed },
|
|
2086
2451
|
do: async (input: z.infer<typeof ClaimIn>, fx) => {
|
|
2087
2452
|
if (state.setupClosed) {
|
|
2088
2453
|
const data = { reason: "first_operator_exists" };
|
|
@@ -2131,9 +2496,6 @@ function createSetupClaim(state: ConsoleState) {
|
|
|
2131
2496
|
function createSessionLogin(state: ConsoleState) {
|
|
2132
2497
|
return flow("console.session.login", {
|
|
2133
2498
|
plane: "operator",
|
|
2134
|
-
in: LoginIn,
|
|
2135
|
-
out: SessionOut,
|
|
2136
|
-
errors: { AuthFailed, AuthRateLimited },
|
|
2137
2499
|
do: async (input: z.infer<typeof LoginIn>, fx) => {
|
|
2138
2500
|
if (touchLoginRateLimit(state.loginAttempts, input.email, state.now()) === "rate_limited") {
|
|
2139
2501
|
return fail("AuthRateLimited", {
|
|
@@ -2152,8 +2514,6 @@ function createSessionLogin(state: ConsoleState) {
|
|
|
2152
2514
|
function createSessionMe(state: ConsoleState) {
|
|
2153
2515
|
return flow("console.session.me", {
|
|
2154
2516
|
plane: "operator",
|
|
2155
|
-
out: MeOut,
|
|
2156
|
-
errors: { AuthFailed },
|
|
2157
2517
|
do: (_input, fx) => {
|
|
2158
2518
|
const id = fx.operator.id;
|
|
2159
2519
|
if (!id) return fail("AuthFailed", {});
|
|
@@ -2172,7 +2532,6 @@ function createSessionMe(state: ConsoleState) {
|
|
|
2172
2532
|
function createSessionLogout() {
|
|
2173
2533
|
return flow("console.session.logout", {
|
|
2174
2534
|
plane: "operator",
|
|
2175
|
-
out: z.object({ ok: z.literal(true) }),
|
|
2176
2535
|
do: (_input, fx) => {
|
|
2177
2536
|
fx.log.info("console.session.logout", {
|
|
2178
2537
|
operatorId: fx.operator.id,
|
|
@@ -2185,8 +2544,6 @@ function createSessionLogout() {
|
|
|
2185
2544
|
function createManifestGet(state: ConsoleState) {
|
|
2186
2545
|
return flow("console.manifest.get", {
|
|
2187
2546
|
plane: "operator",
|
|
2188
|
-
out: ManifestOut,
|
|
2189
|
-
errors: { AuthFailed },
|
|
2190
2547
|
do: (_input, fx) => {
|
|
2191
2548
|
if (!fx.operator.id) return fail("AuthFailed", {});
|
|
2192
2549
|
return { manifest: state.manifest };
|
|
@@ -2197,9 +2554,6 @@ function createManifestGet(state: ConsoleState) {
|
|
|
2197
2554
|
function createRunsQuery(state: ConsoleState) {
|
|
2198
2555
|
return flow("console.runs.query", {
|
|
2199
2556
|
plane: "operator",
|
|
2200
|
-
in: RunsQueryIn,
|
|
2201
|
-
out: RunsQueryOut,
|
|
2202
|
-
errors: { AuthFailed, QueryRejected, QueryTimeout, QueryFailed },
|
|
2203
2557
|
do: async (input: z.infer<typeof RunsQueryIn>, fx) => {
|
|
2204
2558
|
if (!fx.operator.id) return fail("AuthFailed", {});
|
|
2205
2559
|
if (input.revealPii === true) {
|
|
@@ -2241,8 +2595,6 @@ function createRunsQuery(state: ConsoleState) {
|
|
|
2241
2595
|
function createRunsList(state: ConsoleState) {
|
|
2242
2596
|
return flow("console.runs.list", {
|
|
2243
2597
|
plane: "operator",
|
|
2244
|
-
out: RunsListOut,
|
|
2245
|
-
errors: { AuthFailed },
|
|
2246
2598
|
do: async (_input, fx) => {
|
|
2247
2599
|
if (!fx.operator.id) return fail("AuthFailed", {});
|
|
2248
2600
|
const all = await state.listRuns();
|
|
@@ -2304,6 +2656,7 @@ export function projectRun(r: WideEvent, piiFields: ReadonlySet<string> = new Se
|
|
|
2304
2656
|
timestamp: e.timestamp,
|
|
2305
2657
|
duration: e.duration,
|
|
2306
2658
|
reversibility: e.reversibility,
|
|
2659
|
+
...(e.external !== undefined ? { external: e.external } : {}),
|
|
2307
2660
|
})),
|
|
2308
2661
|
logs: masked.logs.map((line) => ({
|
|
2309
2662
|
level: line.level,
|
|
@@ -2320,9 +2673,6 @@ export function projectRun(r: WideEvent, piiFields: ReadonlySet<string> = new Se
|
|
|
2320
2673
|
function createTracesReplay(state: ConsoleState) {
|
|
2321
2674
|
return flow("console.traces.replay", {
|
|
2322
2675
|
plane: "operator",
|
|
2323
|
-
in: TracesReplayIn,
|
|
2324
|
-
out: TracesReplayOut,
|
|
2325
|
-
errors: { AuthFailed, NotFound, ReplayUnavailable, ReplayFailed },
|
|
2326
2676
|
do: async (input: z.infer<typeof TracesReplayIn>, fx) => {
|
|
2327
2677
|
if (!fx.operator.id) return fail("AuthFailed", {});
|
|
2328
2678
|
const all = await state.listRuns();
|
|
@@ -2385,8 +2735,6 @@ function createTracesReplay(state: ConsoleState) {
|
|
|
2385
2735
|
function createSignalsList(state: ConsoleState) {
|
|
2386
2736
|
return flow("console.signals.list", {
|
|
2387
2737
|
plane: "operator",
|
|
2388
|
-
out: SignalsListOut,
|
|
2389
|
-
errors: { AuthFailed },
|
|
2390
2738
|
do: async (_input, fx) => {
|
|
2391
2739
|
if (!fx.operator.id) return fail("AuthFailed", {});
|
|
2392
2740
|
const signals = await state.listSignals();
|
|
@@ -2398,9 +2746,6 @@ function createSignalsList(state: ConsoleState) {
|
|
|
2398
2746
|
function createSignalsReplay(state: ConsoleState) {
|
|
2399
2747
|
return flow("console.signals.replay", {
|
|
2400
2748
|
plane: "operator",
|
|
2401
|
-
in: SignalsReplayIn,
|
|
2402
|
-
out: SignalsReplayOut,
|
|
2403
|
-
errors: { AuthFailed, SignalNotFound, ConfirmRequired },
|
|
2404
2749
|
do: async (input: z.infer<typeof SignalsReplayIn>, fx) => {
|
|
2405
2750
|
if (!fx.operator.id) return fail("AuthFailed", {});
|
|
2406
2751
|
return runSignalReplay(state, fx, { ...input, dryRun: false });
|
|
@@ -2411,9 +2756,6 @@ function createSignalsReplay(state: ConsoleState) {
|
|
|
2411
2756
|
function createSignalsDryRunReplay(state: ConsoleState) {
|
|
2412
2757
|
return flow("console.signals.dryRunReplay", {
|
|
2413
2758
|
plane: "operator",
|
|
2414
|
-
in: SignalsReplayIn.omit({ dryRun: true }),
|
|
2415
|
-
out: SignalsReplayOut,
|
|
2416
|
-
errors: { AuthFailed, SignalNotFound, DryRunUnsafe },
|
|
2417
2759
|
do: async (input: Omit<z.infer<typeof SignalsReplayIn>, "dryRun">, fx) => {
|
|
2418
2760
|
if (!fx.operator.id) return fail("AuthFailed", {});
|
|
2419
2761
|
return runSignalReplay(state, fx, { ...input, dryRun: true });
|
|
@@ -2424,9 +2766,6 @@ function createSignalsDryRunReplay(state: ConsoleState) {
|
|
|
2424
2766
|
function createSignalsDiscard(state: ConsoleState) {
|
|
2425
2767
|
return flow("console.signals.discard", {
|
|
2426
2768
|
plane: "operator",
|
|
2427
|
-
in: SignalsDiscardIn,
|
|
2428
|
-
out: SignalsDiscardOut,
|
|
2429
|
-
errors: { AuthFailed, SignalNotFound, ConfirmRequired },
|
|
2430
2769
|
do: async (input: z.infer<typeof SignalsDiscardIn>, fx) => {
|
|
2431
2770
|
if (!fx.operator.id) return fail("AuthFailed", {});
|
|
2432
2771
|
const rows = await state.listSignals();
|
|
@@ -2566,9 +2905,6 @@ function dryRunSafety(row: {
|
|
|
2566
2905
|
function createActionPing(state: ConsoleState) {
|
|
2567
2906
|
return flow("console.action.ping", {
|
|
2568
2907
|
plane: "operator",
|
|
2569
|
-
in: ActionPingIn,
|
|
2570
|
-
out: ActionPingOut,
|
|
2571
|
-
errors: { AuthFailed },
|
|
2572
2908
|
do: (input: z.infer<typeof ActionPingIn>, fx) => {
|
|
2573
2909
|
if (!fx.operator.id) return fail("AuthFailed", {});
|
|
2574
2910
|
fx.log.info("console.action.ping", {
|
|
@@ -2583,9 +2919,6 @@ function createActionPing(state: ConsoleState) {
|
|
|
2583
2919
|
function createStructuralPropose(state: ConsoleState) {
|
|
2584
2920
|
return flow("console.structural.propose", {
|
|
2585
2921
|
plane: "operator",
|
|
2586
|
-
in: StructuralIn,
|
|
2587
|
-
out: StructuralOut,
|
|
2588
|
-
errors: { AuthFailed },
|
|
2589
2922
|
do: async (input: z.infer<typeof StructuralIn>, fx) => {
|
|
2590
2923
|
if (!fx.operator.id) return fail("AuthFailed", {});
|
|
2591
2924
|
const proposal = await emitStructuralDiff({
|
|
@@ -2609,8 +2942,6 @@ function createStructuralPropose(state: ConsoleState) {
|
|
|
2609
2942
|
function createFlowsIdentities(state: ConsoleState) {
|
|
2610
2943
|
return flow("console.flows.identities", {
|
|
2611
2944
|
plane: "operator",
|
|
2612
|
-
out: IdentitiesOut,
|
|
2613
|
-
errors: { AuthFailed },
|
|
2614
2945
|
do: (_input, fx) => {
|
|
2615
2946
|
if (!fx.operator.id) return fail("AuthFailed", {});
|
|
2616
2947
|
return {
|
|
@@ -2629,9 +2960,6 @@ function createFlowsIdentities(state: ConsoleState) {
|
|
|
2629
2960
|
function createFlowsInvoke(state: ConsoleState) {
|
|
2630
2961
|
return flow("console.flows.invoke", {
|
|
2631
2962
|
plane: "operator",
|
|
2632
|
-
in: InvokeIn,
|
|
2633
|
-
out: InvokeOut,
|
|
2634
|
-
errors: { AuthFailed, NotFound, InvokeDenied, ConfirmRequired },
|
|
2635
2963
|
do: async (input: z.infer<typeof InvokeIn>, fx) => {
|
|
2636
2964
|
if (!fx.operator.id) return fail("AuthFailed", {});
|
|
2637
2965
|
const manifest = state.manifest;
|
|
@@ -2816,8 +3144,6 @@ function requireTenantIfDeclared(
|
|
|
2816
3144
|
function createStoreList(state: ConsoleState) {
|
|
2817
3145
|
return flow("console.store.list", {
|
|
2818
3146
|
plane: "operator",
|
|
2819
|
-
out: StoreListOut,
|
|
2820
|
-
errors: { AuthFailed },
|
|
2821
3147
|
do: async (_input, fx) => {
|
|
2822
3148
|
if (!fx.operator.id) return fail("AuthFailed", {});
|
|
2823
3149
|
return state.listStores();
|
|
@@ -2854,9 +3180,6 @@ function consoleStoreRls(
|
|
|
2854
3180
|
function createStoreQuery(state: ConsoleState) {
|
|
2855
3181
|
return flow("console.store.query", {
|
|
2856
3182
|
plane: "operator",
|
|
2857
|
-
in: StoreQueryIn,
|
|
2858
|
-
out: StoreQueryOut,
|
|
2859
|
-
errors: { AuthFailed, TenantRequired, StoreNotFound },
|
|
2860
3183
|
do: async (input: z.infer<typeof StoreQueryIn>, fx) => {
|
|
2861
3184
|
if (!fx.operator.id) return fail("AuthFailed", {});
|
|
2862
3185
|
const tenantFail = requireTenantIfDeclared(state, input.tenant);
|
|
@@ -2892,9 +3215,6 @@ function createStoreQuery(state: ConsoleState) {
|
|
|
2892
3215
|
function createStoreReveal(state: ConsoleState) {
|
|
2893
3216
|
return flow("console.store.reveal", {
|
|
2894
3217
|
plane: "operator",
|
|
2895
|
-
in: StoreRevealIn,
|
|
2896
|
-
out: StoreRevealOut,
|
|
2897
|
-
errors: { AuthFailed, TenantRequired, StoreNotFound },
|
|
2898
3218
|
do: async (input: z.infer<typeof StoreRevealIn>, fx) => {
|
|
2899
3219
|
if (!fx.operator.id) return fail("AuthFailed", {});
|
|
2900
3220
|
const tenantFail = requireTenantIfDeclared(state, input.tenant);
|
|
@@ -2928,9 +3248,6 @@ function createStoreReveal(state: ConsoleState) {
|
|
|
2928
3248
|
function createStoreObject(state: ConsoleState) {
|
|
2929
3249
|
return flow("console.store.object", {
|
|
2930
3250
|
plane: "operator",
|
|
2931
|
-
in: StoreFileGetIn,
|
|
2932
|
-
out: StoreFileGetOut,
|
|
2933
|
-
errors: { AuthFailed, TenantRequired, StoreNotFound },
|
|
2934
3251
|
do: async (input: z.infer<typeof StoreFileGetIn>, fx) => {
|
|
2935
3252
|
if (!fx.operator.id) return fail("AuthFailed", {});
|
|
2936
3253
|
const tenantFail = requireTenantIfDeclared(state, input.tenant);
|
|
@@ -2964,9 +3281,6 @@ function createStoreObject(state: ConsoleState) {
|
|
|
2964
3281
|
function createStoreEdit(state: ConsoleState) {
|
|
2965
3282
|
return flow("console.store.edit", {
|
|
2966
3283
|
plane: "operator",
|
|
2967
|
-
in: StoreEditIn,
|
|
2968
|
-
out: StoreEditOut,
|
|
2969
|
-
errors: { AuthFailed, TenantRequired, ConfirmRequired, StoreNotFound },
|
|
2970
3284
|
do: async (input: z.infer<typeof StoreEditIn>, fx) => {
|
|
2971
3285
|
if (!fx.operator.id) return fail("AuthFailed", {});
|
|
2972
3286
|
const tenantFail = requireTenantIfDeclared(state, input.tenant);
|
|
@@ -3049,9 +3363,6 @@ function createStoreEdit(state: ConsoleState) {
|
|
|
3049
3363
|
function createStoreDelete(state: ConsoleState) {
|
|
3050
3364
|
return flow("console.store.delete", {
|
|
3051
3365
|
plane: "operator",
|
|
3052
|
-
in: StoreDeleteIn,
|
|
3053
|
-
out: StoreDeleteOut,
|
|
3054
|
-
errors: { AuthFailed, TenantRequired, ConfirmRequired },
|
|
3055
3366
|
do: async (input: z.infer<typeof StoreDeleteIn>, fx) => {
|
|
3056
3367
|
if (!fx.operator.id) return fail("AuthFailed", {});
|
|
3057
3368
|
const tenantFail = requireTenantIfDeclared(state, input.tenant);
|
|
@@ -3089,9 +3400,6 @@ function createStoreDelete(state: ConsoleState) {
|
|
|
3089
3400
|
function createStorePurgeCache(state: ConsoleState) {
|
|
3090
3401
|
return flow("console.store.purgeCache", {
|
|
3091
3402
|
plane: "operator",
|
|
3092
|
-
in: StorePurgeIn,
|
|
3093
|
-
out: StorePurgeOut,
|
|
3094
|
-
errors: { AuthFailed, ConfirmRequired },
|
|
3095
3403
|
do: async (input: z.infer<typeof StorePurgeIn>, fx) => {
|
|
3096
3404
|
if (!fx.operator.id) return fail("AuthFailed", {});
|
|
3097
3405
|
if (state.production) {
|
|
@@ -3121,9 +3429,6 @@ function createStorePurgeCache(state: ConsoleState) {
|
|
|
3121
3429
|
function createStoreSql(state: ConsoleState) {
|
|
3122
3430
|
return flow("console.store.sql", {
|
|
3123
3431
|
plane: "operator",
|
|
3124
|
-
in: StoreSqlIn,
|
|
3125
|
-
out: StoreSqlOut,
|
|
3126
|
-
errors: { AuthFailed, TenantRequired, StoreNotFound },
|
|
3127
3432
|
do: async (input: z.infer<typeof StoreSqlIn>, fx) => {
|
|
3128
3433
|
if (!fx.operator.id) return fail("AuthFailed", {});
|
|
3129
3434
|
const tenantFail = requireTenantIfDeclared(state, input.tenant);
|
|
@@ -3191,16 +3496,6 @@ function failStoreSqlStats(err: unknown) {
|
|
|
3191
3496
|
function createStoreSqlStats(state: ConsoleState) {
|
|
3192
3497
|
return flow("console.store.sql.stats", {
|
|
3193
3498
|
plane: "operator",
|
|
3194
|
-
in: StoreSqlStatsIn,
|
|
3195
|
-
out: StoreSqlStatsOut,
|
|
3196
|
-
errors: {
|
|
3197
|
-
AuthFailed,
|
|
3198
|
-
TenantRequired,
|
|
3199
|
-
StoreNotFound,
|
|
3200
|
-
PgStatStatementsNotPreloaded,
|
|
3201
|
-
PgStatStatementsUnsupported,
|
|
3202
|
-
PgStatStatementsNotCreated,
|
|
3203
|
-
},
|
|
3204
3499
|
do: async (input: z.infer<typeof StoreSqlStatsIn>, fx) => {
|
|
3205
3500
|
if (!fx.operator.id) return fail("AuthFailed", {});
|
|
3206
3501
|
const tenantFail = requireTenantIfDeclared(state, input.tenant);
|
|
@@ -3223,16 +3518,6 @@ function createStoreSqlStats(state: ConsoleState) {
|
|
|
3223
3518
|
function createStoreSqlLocks(state: ConsoleState) {
|
|
3224
3519
|
return flow("console.store.sql.locks", {
|
|
3225
3520
|
plane: "operator",
|
|
3226
|
-
in: StoreSqlLocksIn,
|
|
3227
|
-
out: StoreSqlLocksOut,
|
|
3228
|
-
errors: {
|
|
3229
|
-
AuthFailed,
|
|
3230
|
-
TenantRequired,
|
|
3231
|
-
StoreNotFound,
|
|
3232
|
-
PgStatStatementsNotPreloaded,
|
|
3233
|
-
PgStatStatementsUnsupported,
|
|
3234
|
-
PgStatStatementsNotCreated,
|
|
3235
|
-
},
|
|
3236
3521
|
do: async (input: z.infer<typeof StoreSqlLocksIn>, fx) => {
|
|
3237
3522
|
if (!fx.operator.id) return fail("AuthFailed", {});
|
|
3238
3523
|
const tenantFail = requireTenantIfDeclared(state, input.tenant);
|
|
@@ -3265,16 +3550,6 @@ function createStoreSqlLocks(state: ConsoleState) {
|
|
|
3265
3550
|
function createStoreSqlAdvise(state: ConsoleState) {
|
|
3266
3551
|
return flow("console.store.sql.advise", {
|
|
3267
3552
|
plane: "operator",
|
|
3268
|
-
in: StoreSqlAdviseIn,
|
|
3269
|
-
out: StoreSqlAdviseOut,
|
|
3270
|
-
errors: {
|
|
3271
|
-
AuthFailed,
|
|
3272
|
-
TenantRequired,
|
|
3273
|
-
StoreNotFound,
|
|
3274
|
-
PgStatStatementsNotPreloaded,
|
|
3275
|
-
PgStatStatementsUnsupported,
|
|
3276
|
-
PgStatStatementsNotCreated,
|
|
3277
|
-
},
|
|
3278
3553
|
do: async (input: z.infer<typeof StoreSqlAdviseIn>, fx) => {
|
|
3279
3554
|
if (!fx.operator.id) return fail("AuthFailed", {});
|
|
3280
3555
|
const tenantFail = requireTenantIfDeclared(state, input.tenant);
|
|
@@ -3306,14 +3581,6 @@ function failStoreKvStats(err: unknown) {
|
|
|
3306
3581
|
function createStoreKvStats(state: ConsoleState) {
|
|
3307
3582
|
return flow("console.store.kv.stats", {
|
|
3308
3583
|
plane: "operator",
|
|
3309
|
-
in: StoreKvStatsIn,
|
|
3310
|
-
out: StoreKvStatsOut,
|
|
3311
|
-
errors: {
|
|
3312
|
-
AuthFailed,
|
|
3313
|
-
TenantRequired,
|
|
3314
|
-
StoreNotFound,
|
|
3315
|
-
KvStatsUnsupported,
|
|
3316
|
-
},
|
|
3317
3584
|
do: async (input: z.infer<typeof StoreKvStatsIn>, fx) => {
|
|
3318
3585
|
if (!fx.operator.id) return fail("AuthFailed", {});
|
|
3319
3586
|
const tenantFail = requireTenantIfDeclared(state, input.tenant);
|
|
@@ -3347,9 +3614,6 @@ function createStoreKvStats(state: ConsoleState) {
|
|
|
3347
3614
|
function createStorePreview(state: ConsoleState) {
|
|
3348
3615
|
return flow("console.store.preview", {
|
|
3349
3616
|
plane: "operator",
|
|
3350
|
-
in: StorePreviewIn,
|
|
3351
|
-
out: StorePreviewOut,
|
|
3352
|
-
errors: { AuthFailed, TenantRequired, DryRunUnsafe },
|
|
3353
3617
|
do: async (input: z.infer<typeof StorePreviewIn>, fx) => {
|
|
3354
3618
|
if (!fx.operator.id) return fail("AuthFailed", {});
|
|
3355
3619
|
const tenantFail = requireTenantIfDeclared(state, input.tenant);
|
|
@@ -3397,8 +3661,6 @@ function createStorePreview(state: ConsoleState) {
|
|
|
3397
3661
|
function createVaultList(state: ConsoleState) {
|
|
3398
3662
|
return flow("console.vault.list", {
|
|
3399
3663
|
plane: "operator",
|
|
3400
|
-
out: VaultListOut,
|
|
3401
|
-
errors: { AuthFailed },
|
|
3402
3664
|
do: async (_input, fx) => {
|
|
3403
3665
|
if (!fx.operator.id) return fail("AuthFailed", {});
|
|
3404
3666
|
return state.listVault();
|
|
@@ -3409,9 +3671,6 @@ function createVaultList(state: ConsoleState) {
|
|
|
3409
3671
|
function createVaultCreate(state: ConsoleState) {
|
|
3410
3672
|
return flow("console.vault.create", {
|
|
3411
3673
|
plane: "operator",
|
|
3412
|
-
in: VaultCreateIn,
|
|
3413
|
-
out: VaultWriteOut,
|
|
3414
|
-
errors: { AuthFailed, VaultExists, VaultNotFound },
|
|
3415
3674
|
do: async (input: z.infer<typeof VaultCreateIn>, fx) => {
|
|
3416
3675
|
if (!fx.operator.id) return fail("AuthFailed", {});
|
|
3417
3676
|
try {
|
|
@@ -3448,9 +3707,6 @@ function createVaultCreate(state: ConsoleState) {
|
|
|
3448
3707
|
function createVaultSet(state: ConsoleState) {
|
|
3449
3708
|
return flow("console.vault.set", {
|
|
3450
3709
|
plane: "operator",
|
|
3451
|
-
in: VaultWriteIn,
|
|
3452
|
-
out: VaultWriteOut,
|
|
3453
|
-
errors: { AuthFailed, VaultNotFound },
|
|
3454
3710
|
do: async (input: z.infer<typeof VaultWriteIn>, fx) => {
|
|
3455
3711
|
if (!fx.operator.id) return fail("AuthFailed", {});
|
|
3456
3712
|
if (!(await vaultNameKnown(state, input.name))) {
|
|
@@ -3487,9 +3743,6 @@ function createVaultSet(state: ConsoleState) {
|
|
|
3487
3743
|
function createVaultRotate(state: ConsoleState) {
|
|
3488
3744
|
return flow("console.vault.rotate", {
|
|
3489
3745
|
plane: "operator",
|
|
3490
|
-
in: VaultWriteIn,
|
|
3491
|
-
out: VaultWriteOut,
|
|
3492
|
-
errors: { AuthFailed, VaultNotFound },
|
|
3493
3746
|
do: async (input: z.infer<typeof VaultWriteIn>, fx) => {
|
|
3494
3747
|
if (!fx.operator.id) return fail("AuthFailed", {});
|
|
3495
3748
|
if (!(await vaultNameKnown(state, input.name))) {
|
|
@@ -3531,9 +3784,6 @@ function createVaultRotate(state: ConsoleState) {
|
|
|
3531
3784
|
function createVaultRotateMaster(state: ConsoleState) {
|
|
3532
3785
|
return flow("console.vault.rotateMaster", {
|
|
3533
3786
|
plane: "operator",
|
|
3534
|
-
in: VaultRotateMasterIn,
|
|
3535
|
-
out: VaultRotateMasterOut,
|
|
3536
|
-
errors: { AuthFailed, ConfirmRequired, VaultSealed, VaultRotateBusy, VaultUnsupported },
|
|
3537
3787
|
do: async (input: z.infer<typeof VaultRotateMasterIn>, fx) => {
|
|
3538
3788
|
if (!fx.operator.id) return fail("AuthFailed", {});
|
|
3539
3789
|
if (input.confirmation !== "ROTATE_MASTER" || !input.reason || input.reason.length < 3) {
|
|
@@ -3568,8 +3818,6 @@ function createVaultRotateMaster(state: ConsoleState) {
|
|
|
3568
3818
|
function createVaultAuditVerify(state: ConsoleState) {
|
|
3569
3819
|
return flow("console.vault.auditVerify", {
|
|
3570
3820
|
plane: "operator",
|
|
3571
|
-
out: VaultAuditVerifyOut,
|
|
3572
|
-
errors: { AuthFailed, VaultUnsupported },
|
|
3573
3821
|
do: async (_input, fx) => {
|
|
3574
3822
|
if (!fx.operator.id) return fail("AuthFailed", {});
|
|
3575
3823
|
try {
|
|
@@ -3612,8 +3860,6 @@ async function vaultNameKnown(state: ConsoleState, name: string): Promise<boolea
|
|
|
3612
3860
|
function createAiList(state: ConsoleState) {
|
|
3613
3861
|
return flow("console.ai.list", {
|
|
3614
3862
|
plane: "operator",
|
|
3615
|
-
out: AiListOut,
|
|
3616
|
-
errors: { AuthFailed },
|
|
3617
3863
|
do: async (_input, fx) => {
|
|
3618
3864
|
if (!fx.operator.id) return fail("AuthFailed", {});
|
|
3619
3865
|
const projection = await state.listAi();
|
|
@@ -3668,8 +3914,6 @@ function createAiList(state: ConsoleState) {
|
|
|
3668
3914
|
function createGatesList(state: ConsoleState) {
|
|
3669
3915
|
return flow("console.gates.list", {
|
|
3670
3916
|
plane: "operator",
|
|
3671
|
-
out: GatesListOut,
|
|
3672
|
-
errors: { AuthFailed },
|
|
3673
3917
|
do: async (_input, fx) => {
|
|
3674
3918
|
if (!fx.operator.id) return fail("AuthFailed", {});
|
|
3675
3919
|
const projection = await state.listGates();
|
|
@@ -3732,8 +3976,6 @@ function createGatesList(state: ConsoleState) {
|
|
|
3732
3976
|
function createDiffList(state: ConsoleState) {
|
|
3733
3977
|
return flow("console.diff.list", {
|
|
3734
3978
|
plane: "operator",
|
|
3735
|
-
out: DiffListOut,
|
|
3736
|
-
errors: { AuthFailed },
|
|
3737
3979
|
do: async (_input, fx) => {
|
|
3738
3980
|
if (!fx.operator.id) return fail("AuthFailed", {});
|
|
3739
3981
|
const projection = await state.listDiff();
|
|
@@ -3764,8 +4006,6 @@ function createDiffList(state: ConsoleState) {
|
|
|
3764
4006
|
function createPluginsList(state: ConsoleState) {
|
|
3765
4007
|
return flow("console.plugin.list", {
|
|
3766
4008
|
plane: "operator",
|
|
3767
|
-
out: PluginsListOut,
|
|
3768
|
-
errors: { AuthFailed },
|
|
3769
4009
|
do: async (_input, fx) => {
|
|
3770
4010
|
if (!fx.operator.id) return fail("AuthFailed", {});
|
|
3771
4011
|
return state.listPlugins();
|
|
@@ -3776,9 +4016,6 @@ function createPluginsList(state: ConsoleState) {
|
|
|
3776
4016
|
function createGatesSimulate(state: ConsoleState) {
|
|
3777
4017
|
return flow("console.gates.simulate", {
|
|
3778
4018
|
plane: "operator",
|
|
3779
|
-
in: GatesSimulateIn,
|
|
3780
|
-
out: GatesSimulateOut,
|
|
3781
|
-
errors: { AuthFailed },
|
|
3782
4019
|
do: async (input: z.infer<typeof GatesSimulateIn>, fx) => {
|
|
3783
4020
|
if (!fx.operator.id) return fail("AuthFailed", {});
|
|
3784
4021
|
const result = await state.simulateGates(input);
|
|
@@ -3810,9 +4047,6 @@ function createGatesSimulate(state: ConsoleState) {
|
|
|
3810
4047
|
function createGatesPowers(state: ConsoleState) {
|
|
3811
4048
|
return flow("console.gates.powers", {
|
|
3812
4049
|
plane: "operator",
|
|
3813
|
-
in: GatesPowersIn,
|
|
3814
|
-
out: GatesPowersOut,
|
|
3815
|
-
errors: { AuthFailed },
|
|
3816
4050
|
do: async (input: z.infer<typeof GatesPowersIn>, fx) => {
|
|
3817
4051
|
if (!fx.operator.id) return fail("AuthFailed", {});
|
|
3818
4052
|
const result = await state.powersForPrincipal(input);
|
|
@@ -3881,8 +4115,6 @@ export function resolveAccessKeyIssuer(
|
|
|
3881
4115
|
function createAccessList(state: ConsoleState) {
|
|
3882
4116
|
return flow("console.access.list", {
|
|
3883
4117
|
plane: "operator",
|
|
3884
|
-
out: AccessListOut,
|
|
3885
|
-
errors: { AuthFailed },
|
|
3886
4118
|
do: async (_input, fx) => {
|
|
3887
4119
|
if (!fx.operator.id) return fail("AuthFailed", {});
|
|
3888
4120
|
return state.listAccess(actorScopesOf(state, fx.operator.id));
|
|
@@ -3893,9 +4125,6 @@ function createAccessList(state: ConsoleState) {
|
|
|
3893
4125
|
function createAccessEffective(state: ConsoleState) {
|
|
3894
4126
|
return flow("console.access.effective", {
|
|
3895
4127
|
plane: "operator",
|
|
3896
|
-
in: AccessEffectiveIn,
|
|
3897
|
-
out: AccessEffectiveOut,
|
|
3898
|
-
errors: { AuthFailed, NotFound },
|
|
3899
4128
|
do: async (input: z.infer<typeof AccessEffectiveIn>, fx) => {
|
|
3900
4129
|
if (!fx.operator.id) return fail("AuthFailed", {});
|
|
3901
4130
|
const result = await state.accessEffective(input);
|
|
@@ -3918,9 +4147,6 @@ function createAccessEffective(state: ConsoleState) {
|
|
|
3918
4147
|
function createAccessKeyBlast(state: ConsoleState) {
|
|
3919
4148
|
return flow("console.access.keyBlast", {
|
|
3920
4149
|
plane: "operator",
|
|
3921
|
-
in: AccessKeyBlastIn,
|
|
3922
|
-
out: AccessKeyBlastOut,
|
|
3923
|
-
errors: { AuthFailed, AccessKeyNotFound },
|
|
3924
4150
|
do: async (input: z.infer<typeof AccessKeyBlastIn>, fx) => {
|
|
3925
4151
|
if (!fx.operator.id) return fail("AuthFailed", {});
|
|
3926
4152
|
if (!state.apiKeys.keys.has(input.keyId)) {
|
|
@@ -3934,9 +4160,6 @@ function createAccessKeyBlast(state: ConsoleState) {
|
|
|
3934
4160
|
function createAccessCreateKey(state: ConsoleState) {
|
|
3935
4161
|
return flow("console.access.createKey", {
|
|
3936
4162
|
plane: "operator",
|
|
3937
|
-
in: AccessCreateKeyIn,
|
|
3938
|
-
out: AccessCreateKeyOut,
|
|
3939
|
-
errors: { AuthFailed, AccessGrantDenied },
|
|
3940
4163
|
do: async (input: z.infer<typeof AccessCreateKeyIn>, fx) => {
|
|
3941
4164
|
if (!fx.operator.id) return fail("AuthFailed", {});
|
|
3942
4165
|
try {
|
|
@@ -3972,9 +4195,6 @@ function createAccessCreateKey(state: ConsoleState) {
|
|
|
3972
4195
|
function createAccessRevokeKey(state: ConsoleState) {
|
|
3973
4196
|
return flow("console.access.revokeKey", {
|
|
3974
4197
|
plane: "operator",
|
|
3975
|
-
in: AccessRevokeKeyIn,
|
|
3976
|
-
out: AccessRevokeKeyOut,
|
|
3977
|
-
errors: { AuthFailed, AccessKeyNotFound, ConfirmRequired },
|
|
3978
4198
|
do: async (input: z.infer<typeof AccessRevokeKeyIn>, fx) => {
|
|
3979
4199
|
if (!fx.operator.id) return fail("AuthFailed", {});
|
|
3980
4200
|
if (input.confirmation !== "REVOKE" || (input.reason?.trim().length ?? 0) < 3) {
|
|
@@ -4002,9 +4222,6 @@ function createAccessRevokeKey(state: ConsoleState) {
|
|
|
4002
4222
|
function createAccessRotateKey(state: ConsoleState) {
|
|
4003
4223
|
return flow("console.access.rotateKey", {
|
|
4004
4224
|
plane: "operator",
|
|
4005
|
-
in: AccessRotateKeyIn,
|
|
4006
|
-
out: AccessRotateKeyOut,
|
|
4007
|
-
errors: { AuthFailed, AccessKeyNotFound, ConfirmRequired },
|
|
4008
4225
|
do: async (input: z.infer<typeof AccessRotateKeyIn>, fx) => {
|
|
4009
4226
|
if (!fx.operator.id) return fail("AuthFailed", {});
|
|
4010
4227
|
if (input.confirmation !== "ROTATE" || (input.reason?.trim().length ?? 0) < 3) {
|
|
@@ -4035,9 +4252,6 @@ function createAccessRotateKey(state: ConsoleState) {
|
|
|
4035
4252
|
function createAccessUpdateKey(state: ConsoleState) {
|
|
4036
4253
|
return flow("console.access.updateKey", {
|
|
4037
4254
|
plane: "operator",
|
|
4038
|
-
in: AccessUpdateKeyIn,
|
|
4039
|
-
out: AccessUpdateKeyOut,
|
|
4040
|
-
errors: { AuthFailed, AccessKeyNotFound, AccessGrantDenied },
|
|
4041
4255
|
do: async (input: z.infer<typeof AccessUpdateKeyIn>, fx) => {
|
|
4042
4256
|
if (!fx.operator.id) return fail("AuthFailed", {});
|
|
4043
4257
|
try {
|
|
@@ -4062,9 +4276,6 @@ function createAccessUpdateKey(state: ConsoleState) {
|
|
|
4062
4276
|
function createAccessSetRoleGrants(state: ConsoleState) {
|
|
4063
4277
|
return flow("console.access.setRoleGrants", {
|
|
4064
4278
|
plane: "operator",
|
|
4065
|
-
in: AccessSetRoleGrantsIn,
|
|
4066
|
-
out: AccessSetRoleGrantsOut,
|
|
4067
|
-
errors: { AuthFailed, AccessGrantDenied },
|
|
4068
4279
|
do: async (input: z.infer<typeof AccessSetRoleGrantsIn>, fx) => {
|
|
4069
4280
|
if (!fx.operator.id) return fail("AuthFailed", {});
|
|
4070
4281
|
try {
|
|
@@ -4091,8 +4302,6 @@ function createAccessSetRoleGrants(state: ConsoleState) {
|
|
|
4091
4302
|
function createClockList(state: ConsoleState) {
|
|
4092
4303
|
return flow("console.clock.list", {
|
|
4093
4304
|
plane: "operator",
|
|
4094
|
-
out: ClockListOut,
|
|
4095
|
-
errors: { AuthFailed },
|
|
4096
4305
|
do: async (_input, fx) => {
|
|
4097
4306
|
if (!fx.operator.id) return fail("AuthFailed", {});
|
|
4098
4307
|
return state.listClocks();
|
|
@@ -4103,8 +4312,6 @@ function createClockList(state: ConsoleState) {
|
|
|
4103
4312
|
function createInstancesList(state: ConsoleState) {
|
|
4104
4313
|
return flow("console.instances.list", {
|
|
4105
4314
|
plane: "operator",
|
|
4106
|
-
out: InstancesListOut,
|
|
4107
|
-
errors: { AuthFailed },
|
|
4108
4315
|
do: async (_input, fx) => {
|
|
4109
4316
|
if (!fx.operator.id) return fail("AuthFailed", {});
|
|
4110
4317
|
return state.listInstances();
|
|
@@ -4115,9 +4322,6 @@ function createInstancesList(state: ConsoleState) {
|
|
|
4115
4322
|
function createClockRunNow(state: ConsoleState) {
|
|
4116
4323
|
return flow("console.clock.runNow", {
|
|
4117
4324
|
plane: "operator",
|
|
4118
|
-
in: ClockRunNowIn,
|
|
4119
|
-
out: ClockRunNowOut,
|
|
4120
|
-
errors: { AuthFailed, ClockNotFound, ConfirmRequired },
|
|
4121
4325
|
do: async (input: z.infer<typeof ClockRunNowIn>, fx) => {
|
|
4122
4326
|
if (!fx.operator.id) return fail("AuthFailed", {});
|
|
4123
4327
|
const list = await state.listClocks();
|
|
@@ -4160,9 +4364,6 @@ function createClockRunNow(state: ConsoleState) {
|
|
|
4160
4364
|
function createClockPause(state: ConsoleState) {
|
|
4161
4365
|
return flow("console.clock.pause", {
|
|
4162
4366
|
plane: "operator",
|
|
4163
|
-
in: ClockPauseIn,
|
|
4164
|
-
out: ClockPauseOut,
|
|
4165
|
-
errors: { AuthFailed, ClockNotFound },
|
|
4166
4367
|
do: async (input: z.infer<typeof ClockPauseIn>, fx) => {
|
|
4167
4368
|
if (!fx.operator.id) return fail("AuthFailed", {});
|
|
4168
4369
|
try {
|
|
@@ -4190,9 +4391,6 @@ function createClockPause(state: ConsoleState) {
|
|
|
4190
4391
|
function createClockEditSchedule(state: ConsoleState) {
|
|
4191
4392
|
return flow("console.clock.editSchedule", {
|
|
4192
4393
|
plane: "operator",
|
|
4193
|
-
in: ClockEditIn,
|
|
4194
|
-
out: ClockEditOut,
|
|
4195
|
-
errors: { AuthFailed, ClockNotFound, ScheduleNotOverridable },
|
|
4196
4394
|
do: async (input: z.infer<typeof ClockEditIn>, fx) => {
|
|
4197
4395
|
if (!fx.operator.id) return fail("AuthFailed", {});
|
|
4198
4396
|
try {
|
|
@@ -4228,9 +4426,6 @@ function createClockEditSchedule(state: ConsoleState) {
|
|
|
4228
4426
|
function createClockWakeEarly(state: ConsoleState) {
|
|
4229
4427
|
return flow("console.clock.wakeEarly", {
|
|
4230
4428
|
plane: "operator",
|
|
4231
|
-
in: ClockWakeEarlyIn,
|
|
4232
|
-
out: ClockWakeEarlyOut,
|
|
4233
|
-
errors: { AuthFailed, ClockNotFound },
|
|
4234
4429
|
do: async (input: z.infer<typeof ClockWakeEarlyIn>, fx) => {
|
|
4235
4430
|
if (!fx.operator.id) return fail("AuthFailed", {});
|
|
4236
4431
|
try {
|
|
@@ -4260,8 +4455,6 @@ function createClockWakeEarly(state: ConsoleState) {
|
|
|
4260
4455
|
function createChannelsList(state: ConsoleState) {
|
|
4261
4456
|
return flow("console.channel.list", {
|
|
4262
4457
|
plane: "operator",
|
|
4263
|
-
out: ChannelsListOut,
|
|
4264
|
-
errors: { AuthFailed },
|
|
4265
4458
|
do: async (_input, fx) => {
|
|
4266
4459
|
if (!fx.operator.id) return fail("AuthFailed", {});
|
|
4267
4460
|
return state.listChannels();
|
|
@@ -4272,9 +4465,6 @@ function createChannelsList(state: ConsoleState) {
|
|
|
4272
4465
|
function createChannelPreview(state: ConsoleState) {
|
|
4273
4466
|
return flow("console.channel.preview", {
|
|
4274
4467
|
plane: "operator",
|
|
4275
|
-
in: ChannelPreviewIn,
|
|
4276
|
-
out: ChannelPreviewOut,
|
|
4277
|
-
errors: { AuthFailed, ChannelNotFound },
|
|
4278
4468
|
do: async (input: z.infer<typeof ChannelPreviewIn>, fx) => {
|
|
4279
4469
|
if (!fx.operator.id) return fail("AuthFailed", {});
|
|
4280
4470
|
if (
|
|
@@ -4292,9 +4482,6 @@ function createChannelPreview(state: ConsoleState) {
|
|
|
4292
4482
|
function createChannelVerifyAuth(state: ConsoleState) {
|
|
4293
4483
|
return flow("console.channel.verifyAuth", {
|
|
4294
4484
|
plane: "operator",
|
|
4295
|
-
in: ChannelVerifyAuthIn,
|
|
4296
|
-
out: ChannelVerifyAuthOut,
|
|
4297
|
-
errors: { AuthFailed },
|
|
4298
4485
|
do: async (input: z.infer<typeof ChannelVerifyAuthIn>, fx) => {
|
|
4299
4486
|
if (!fx.operator.id) return fail("AuthFailed", {});
|
|
4300
4487
|
return state.verifyChannelAuth(input.from);
|
|
@@ -4305,9 +4492,6 @@ function createChannelVerifyAuth(state: ConsoleState) {
|
|
|
4305
4492
|
function createChannelReveal(state: ConsoleState) {
|
|
4306
4493
|
return flow("console.channel.reveal", {
|
|
4307
4494
|
plane: "operator",
|
|
4308
|
-
in: ChannelRevealIn,
|
|
4309
|
-
out: ChannelRevealOut,
|
|
4310
|
-
errors: { AuthFailed, ChannelNotFound },
|
|
4311
4495
|
do: async (input: z.infer<typeof ChannelRevealIn>, fx) => {
|
|
4312
4496
|
if (!fx.operator.id) return fail("AuthFailed", {});
|
|
4313
4497
|
const revealed = await state.revealChannel(input.id);
|
|
@@ -4331,9 +4515,6 @@ function createChannelReveal(state: ConsoleState) {
|
|
|
4331
4515
|
function createChannelSendTest(state: ConsoleState) {
|
|
4332
4516
|
return flow("console.channel.sendTest", {
|
|
4333
4517
|
plane: "operator",
|
|
4334
|
-
in: ChannelSendTestIn,
|
|
4335
|
-
out: ChannelSendTestOut,
|
|
4336
|
-
errors: { AuthFailed, ChannelNotFound, ConfirmRequired },
|
|
4337
4518
|
do: async (input: z.infer<typeof ChannelSendTestIn>, fx) => {
|
|
4338
4519
|
if (!fx.operator.id) return fail("AuthFailed", {});
|
|
4339
4520
|
if (state.production) {
|