@aotter/mantle 0.2.0-alpha.6 → 0.2.0-alpha.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/README.md +157 -45
- package/dist/auth/adapter.d.ts +32 -0
- package/dist/auth/adapter.js +285 -0
- package/dist/auth/admin.d.ts +3 -0
- package/dist/auth/admin.js +21 -0
- package/dist/auth/caller.d.ts +86 -0
- package/dist/auth/caller.js +155 -0
- package/dist/auth/hardening.d.ts +24 -0
- package/dist/auth/hardening.js +40 -0
- package/dist/auth/identity.d.ts +121 -0
- package/dist/auth/identity.js +203 -0
- package/dist/auth/oauth.d.ts +63 -0
- package/dist/auth/oauth.js +217 -0
- package/dist/auth/resource-seeds.js +10 -0
- package/dist/auth/routes.d.ts +32 -0
- package/dist/auth/routes.js +225 -0
- package/dist/build/compiler.d.ts +712 -0
- package/dist/build/compiler.js +6896 -0
- package/dist/{spec → build/spec}/domain/model/ManifestGrammar.d.ts +30 -47
- package/dist/{spec → build/spec}/domain/model/RuntimePlan.d.ts +77 -3
- package/dist/{spec → build/spec}/domain/model/SqlIr.d.ts +37 -6
- package/dist/build/spec/domain/model/UserFields.d.ts +20 -0
- package/dist/{spec → build/spec}/domain/service/PlanFingerprint.d.ts +4 -1
- package/dist/{spec → build/spec}/kernel/diagnostic.d.ts +1 -30
- package/dist/bun/assets.d.ts +2 -0
- package/dist/bun/assets.js +24 -0
- package/dist/domain/adminOrder.js +24 -0
- package/dist/domain/columns.js +55 -0
- package/dist/domain/describe/chunk-ZVXBGP7Y.js +424 -0
- package/dist/domain/describe/index.d.ts +58 -0
- package/dist/domain/describe/index.js +115 -0
- package/dist/domain/describe/target-hash.d.ts +8 -0
- package/dist/domain/describe/target-hash.js +12 -0
- package/dist/domain/describe/targets.d.ts +40 -0
- package/dist/domain/entry.js +33 -0
- package/dist/domain/generated-tools.js +19 -0
- package/dist/domain/generation.d.ts +16 -0
- package/dist/domain/generation.js +1 -0
- package/dist/domain/input.js +17 -0
- package/dist/domain/model.js +1 -0
- package/dist/domain/paging.js +230 -0
- package/dist/domain/recipes.js +19 -0
- package/dist/domain/userReferences.js +5 -0
- package/dist/domain/wireScalars.js +47 -0
- package/dist/infrastructure/adminEntries.js +153 -0
- package/dist/infrastructure/adminPaging.js +72 -0
- package/dist/infrastructure/artifacts.js +71 -0
- package/dist/infrastructure/authSchema.js +83 -0
- package/dist/infrastructure/bundle.js +174 -0
- package/dist/infrastructure/cli.js +97 -0
- package/dist/infrastructure/generate.d.ts +12 -0
- package/dist/infrastructure/generate.js +174 -0
- package/dist/infrastructure/generateAuth.d.ts +8 -0
- package/dist/infrastructure/generateAuth.js +23 -0
- package/dist/infrastructure/inputs.js +41 -0
- package/dist/infrastructure/wrangler.js +94 -0
- package/dist/kernel/authorization.d.ts +4 -0
- package/dist/kernel/authorization.js +16 -0
- package/dist/kernel/binds.d.ts +51 -0
- package/dist/kernel/binds.js +45 -0
- package/dist/kernel/caller-identity.d.ts +24 -0
- package/dist/kernel/caller-identity.js +22 -0
- package/dist/kernel/contract-error.d.ts +12 -0
- package/dist/kernel/contract-error.js +14 -0
- package/dist/kernel/contracts.d.ts +139 -0
- package/dist/kernel/contracts.js +92 -0
- package/dist/{spec/domain/service/CloudflareCron.d.ts → kernel/cron.d.ts} +0 -1
- package/dist/{spec/domain/service/CloudflareCron.js → kernel/cron.js} +1 -6
- package/dist/kernel/dialect/common.d.ts +39 -0
- package/dist/kernel/dialect/common.js +6 -0
- package/dist/kernel/dialect/postgres.d.ts +16 -0
- package/dist/kernel/dialect/postgres.js +18 -0
- package/dist/kernel/dialect/sqlite.d.ts +20 -0
- package/dist/kernel/dialect/sqlite.js +34 -0
- package/dist/kernel/drain.d.ts +5 -0
- package/dist/kernel/drain.js +35 -0
- package/dist/kernel/driver/bun-sqlite.d.ts +19 -0
- package/dist/kernel/driver/bun-sqlite.js +77 -0
- package/dist/kernel/driver/d1.d.ts +24 -0
- package/dist/kernel/driver/d1.js +22 -0
- package/dist/kernel/driver/postgres.d.ts +25 -0
- package/dist/kernel/driver/postgres.js +98 -0
- package/dist/kernel/driver/transaction-context.d.ts +10 -0
- package/dist/kernel/driver/transaction-context.js +29 -0
- package/dist/kernel/email.d.ts +28 -0
- package/dist/{auth/emailTemplates.js → kernel/email.js} +13 -2
- package/dist/kernel/host-access.d.ts +10 -0
- package/dist/kernel/host-access.js +65 -0
- package/dist/kernel/host-caller.d.ts +39 -0
- package/dist/kernel/host-caller.js +56 -0
- package/dist/kernel/json-body.d.ts +4 -0
- package/dist/kernel/json-body.js +44 -0
- package/dist/kernel/mcp-apps.d.ts +69 -0
- package/dist/kernel/mcp-apps.js +40 -0
- package/dist/kernel/mcp-call.d.ts +5 -0
- package/dist/kernel/mcp-call.js +25 -0
- package/dist/kernel/mcp-handler.js +371 -0
- package/dist/kernel/mcp.d.ts +106 -0
- package/dist/kernel/mcp.js +49 -0
- package/dist/kernel/media.d.ts +27 -0
- package/dist/kernel/media.js +216 -0
- package/dist/kernel/paging.d.ts +55 -0
- package/dist/kernel/paging.js +95 -0
- package/dist/kernel/publishing.d.ts +4 -0
- package/dist/kernel/publishing.js +16 -0
- package/dist/{cloudflare/r2Media.d.ts → kernel/r2-media.d.ts} +4 -5
- package/dist/kernel/r2-media.js +78 -0
- package/dist/kernel/rest-dispatch.js +38 -0
- package/dist/kernel/rest-router.js +64 -0
- package/dist/kernel/rest.d.ts +58 -0
- package/dist/kernel/rest.js +41 -0
- package/dist/kernel/scalars.d.ts +6 -0
- package/dist/kernel/scalars.js +43 -0
- package/dist/kernel/search.js +5 -0
- package/dist/{core/site.d.ts → kernel/site-types.d.ts} +38 -9
- package/dist/kernel/site-types.js +1 -0
- package/dist/kernel/site.d.ts +39 -0
- package/dist/kernel/site.js +32 -0
- package/dist/kernel/store.d.ts +165 -0
- package/dist/kernel/store.js +257 -0
- package/dist/kernel/surface.d.ts +10 -0
- package/dist/kernel/surface.js +19 -0
- package/dist/kernel/sweep.d.ts +17 -0
- package/dist/kernel/sweep.js +27 -0
- package/dist/kernel/translations.d.ts +1 -0
- package/dist/kernel/translations.js +13 -0
- package/dist/kernel/user-caller.d.ts +31 -0
- package/dist/kernel/user-caller.js +67 -0
- package/dist/kernel/user-field-name.js +3 -0
- package/dist/kernel/user-fields.d.ts +34 -0
- package/dist/kernel/user-fields.js +71 -0
- package/dist/kernel/validation.d.ts +15 -0
- package/dist/kernel/validation.js +54 -0
- package/dist/kernel/web-gateway.js +68 -0
- package/dist/kernel/web-head.js +15 -0
- package/dist/kernel/web-response.js +8 -0
- package/dist/kernel/web.d.ts +77 -0
- package/dist/kernel/web.js +158 -0
- package/dist/kernel/where.js +27 -0
- package/dist/testing/index.d.ts +1 -37
- package/dist/testing/index.js +1 -43
- package/dist/usecase/adminBindings.js +141 -0
- package/dist/usecase/adminClient.js +87 -0
- package/dist/usecase/adminDescriptors.js +107 -0
- package/dist/usecase/generate.js +165 -0
- package/dist/usecase/handlers.js +21 -0
- package/dist/usecase/mcp-media.js +17 -0
- package/dist/usecase/mcp.js +100 -0
- package/dist/usecase/paging.js +71 -0
- package/dist/usecase/publishing.js +63 -0
- package/dist/usecase/refusals.js +27 -0
- package/dist/usecase/rest.js +54 -0
- package/dist/usecase/search.js +7 -0
- package/dist/usecase/site.js +40 -0
- package/dist/usecase/stores.js +62 -0
- package/dist/usecase/tool-version.js +9 -0
- package/dist/usecase/translations.js +78 -0
- package/dist/usecase/ttl.js +20 -0
- package/dist/usecase/validation.js +233 -0
- package/dist/usecase/web.js +23 -0
- package/docs/examples/README.md +31 -16
- package/docs/examples/app-shell/README.md +86 -0
- package/docs/examples/app-shell/package.json +42 -0
- package/docs/examples/app-shell/pnpm-workspace.yaml +8 -0
- package/docs/examples/app-shell/smoke-kit.mjs +154 -0
- package/docs/examples/app-shell/src/auth.ts +57 -0
- package/docs/examples/app-shell/src/handlers.ts +5 -0
- package/docs/examples/app-shell/src/index.ts +4 -0
- package/docs/examples/app-shell/src/routes.ts +13 -0
- package/docs/examples/app-shell/src/schedule.ts +8 -0
- package/docs/examples/app-shell/src/service.ts +70 -0
- package/docs/examples/app-shell/src/sign-in.ts +41 -0
- package/docs/examples/app-shell/src/signup.ts +8 -0
- package/docs/examples/{reference-service → app-shell}/tsconfig.json +6 -2
- package/docs/examples/app-shell/worker-configuration.d.ts +22 -0
- package/docs/examples/app-shell/wrangler.jsonc +62 -0
- package/docs/examples/club-events/README.md +60 -0
- package/docs/examples/club-events/manifests/club-events.yaml +225 -0
- package/docs/examples/club-events/smoke.mjs +121 -0
- package/docs/examples/club-events/src/handlers.ts +25 -0
- package/docs/examples/club-events/src/signup.ts +9 -0
- package/docs/examples/generated-web/README.md +78 -0
- package/docs/examples/generated-web/posts.yaml +38 -0
- package/docs/examples/generated-web/seed.sql +6 -0
- package/docs/examples/generated-web/src/worker.ts +43 -0
- package/docs/examples/generated-web/tsconfig.json +8 -0
- package/docs/examples/generated-web/wrangler.jsonc +8 -0
- package/docs/examples/purchasing/.dev.vars.example +6 -0
- package/docs/examples/purchasing/README.md +90 -0
- package/docs/examples/purchasing/manifests/purchasing.yaml +341 -0
- package/docs/examples/purchasing/seed.sql +4 -0
- package/docs/examples/purchasing/smoke.mjs +177 -0
- package/docs/examples/purchasing/src/admin.tsx +13 -0
- package/docs/examples/purchasing/src/handlers.ts +33 -0
- package/docs/examples/purchasing/src/notify.ts +29 -0
- package/docs/examples/purchasing/src/requests-page.ts +57 -0
- package/docs/examples/purchasing/src/routes.ts +53 -0
- package/docs/examples/purchasing/src/schedule.ts +31 -0
- package/docs/examples/purchasing/src/signup.ts +5 -0
- package/docs/examples/purchasing/src/supplier.ts +32 -0
- package/docs/examples/purchasing/wrangler.jsonc +69 -0
- package/docs/examples/recipes/README.md +58 -0
- package/docs/examples/recipes/manifests/recipes.yaml +75 -0
- package/docs/examples/recipes/smoke.mjs +102 -0
- package/docs/examples/recipes/src/media.ts +13 -0
- package/docs/examples/recipes/src/pages.ts +99 -0
- package/docs/examples/recipes/src/routes.ts +71 -0
- package/docs/examples/recipes/src/site-config.ts +12 -0
- package/docs/examples/recipes/wrangler.jsonc +74 -0
- package/docs/handbook/cloudflare/authentication.md +164 -214
- package/docs/handbook/cloudflare/chatgpt-sites.md +4 -113
- package/docs/handbook/cloudflare/deploy-and-operate.md +38 -103
- package/docs/handbook/cloudflare/media-r2.md +62 -133
- package/docs/handbook/cloudflare/service-entry.md +210 -119
- package/docs/handbook/concepts/authorization.md +10 -123
- package/docs/handbook/concepts/four-atoms.md +9 -92
- package/docs/handbook/concepts/lifecycle-and-locales.md +9 -80
- package/docs/handbook/concepts/mcp-and-agents.md +24 -136
- package/docs/handbook/concepts/procedures-and-triggers.md +5 -162
- package/docs/handbook/concepts/runtime-and-adapters.md +15 -224
- package/docs/handbook/concepts/views.md +10 -109
- package/docs/handbook/examples/hub.md +2 -18
- package/docs/handbook/guides/adapter-guide.md +11 -0
- package/docs/handbook/guides/admin-ui.md +111 -164
- package/docs/handbook/guides/agent-setup.md +32 -27
- package/docs/handbook/guides/email.md +86 -0
- package/docs/handbook/guides/mcp-apps.md +483 -0
- package/docs/handbook/guides/native-admin.md +543 -0
- package/docs/handbook/guides/native-execution.md +132 -0
- package/docs/handbook/guides/oauth.md +161 -0
- package/docs/handbook/guides/postgres-adapters.md +56 -0
- package/docs/handbook/guides/public-pages.md +53 -0
- package/docs/handbook/guides/size-and-startup.md +9 -0
- package/docs/handbook/guides/typed-queries.md +39 -102
- package/docs/handbook/navigation.json +160 -31
- package/docs/handbook/reference/admin-descriptors.md +53 -0
- package/docs/handbook/reference/authorization.md +44 -52
- package/docs/handbook/reference/describe.md +56 -0
- package/docs/handbook/reference/diagnostics.md +15 -79
- package/docs/handbook/reference/features.md +45 -53
- package/docs/handbook/reference/manifest.md +6 -69
- package/docs/handbook/reference/procedure.md +11 -116
- package/docs/handbook/reference/schema.md +85 -185
- package/docs/handbook/reference/site-config.md +5 -65
- package/docs/handbook/reference/surface.md +389 -97
- package/docs/handbook/reference/trigger.md +54 -90
- package/docs/handbook/reference/view.md +32 -160
- package/docs/handbook/releases/index.md +120 -13
- package/docs/handbook/start/overview.md +9 -56
- package/docs/handbook/start/project-and-cli.md +40 -149
- package/docs/handbook/start/quickstart-worker.md +38 -116
- package/docs/skills/develop/SKILL.md +35 -123
- package/docs/skills/develop/mcp-app.md +37 -77
- package/docs/skills/integrate/SKILL.md +42 -84
- package/docs/skills/media-gc/SKILL.md +21 -8
- package/docs/skills/provision/SKILL.md +28 -91
- package/docs/skills/update/SKILL.md +19 -43
- package/docs/source/scripts/postgres-adapter.ts +101 -0
- package/docs/upgrade-0.1-to-0.2.md +25 -9
- package/package.json +97 -112
- package/skills/.keep +0 -0
- package/skills/README.md +67 -0
- package/skills/mantle/SKILL.md +135 -0
- package/skills/mantle/references/local-testing.md +15 -0
- package/skills/mantle/references/web.md +41 -0
- package/skills/mantle/references/website.md +49 -0
- package/dist/admin/consent.d.ts +0 -17
- package/dist/admin/consent.d.ts.map +0 -1
- package/dist/admin/consent.js +0 -17
- package/dist/admin/consent.js.map +0 -1
- package/dist/admin/createAdminSurface.d.ts +0 -25
- package/dist/admin/createAdminSurface.d.ts.map +0 -1
- package/dist/admin/createAdminSurface.js +0 -635
- package/dist/admin/createAdminSurface.js.map +0 -1
- package/dist/admin/design.d.ts +0 -7
- package/dist/admin/design.d.ts.map +0 -1
- package/dist/admin/design.js +0 -18
- package/dist/admin/design.js.map +0 -1
- package/dist/admin/developerConsole.d.ts +0 -267
- package/dist/admin/developerConsole.d.ts.map +0 -1
- package/dist/admin/developerConsole.js +0 -136
- package/dist/admin/developerConsole.js.map +0 -1
- package/dist/admin/extensions.d.ts +0 -290
- package/dist/admin/extensions.d.ts.map +0 -1
- package/dist/admin/extensions.js +0 -532
- package/dist/admin/extensions.js.map +0 -1
- package/dist/admin/identity.d.ts +0 -62
- package/dist/admin/identity.d.ts.map +0 -1
- package/dist/admin/identity.js +0 -7
- package/dist/admin/identity.js.map +0 -1
- package/dist/admin/index.d.ts +0 -7
- package/dist/admin/index.d.ts.map +0 -1
- package/dist/admin/index.js +0 -7
- package/dist/admin/index.js.map +0 -1
- package/dist/admin/procedureFlow.d.ts +0 -38
- package/dist/admin/procedureFlow.d.ts.map +0 -1
- package/dist/admin/procedureFlow.js +0 -188
- package/dist/admin/procedureFlow.js.map +0 -1
- package/dist/auth/ConsoleEmailSender.d.ts +0 -15
- package/dist/auth/ConsoleEmailSender.d.ts.map +0 -1
- package/dist/auth/ConsoleEmailSender.js +0 -19
- package/dist/auth/ConsoleEmailSender.js.map +0 -1
- package/dist/auth/appleClientSecret.d.ts +0 -75
- package/dist/auth/appleClientSecret.d.ts.map +0 -1
- package/dist/auth/appleClientSecret.js +0 -116
- package/dist/auth/appleClientSecret.js.map +0 -1
- package/dist/auth/buildAuth.d.ts +0 -4568
- package/dist/auth/buildAuth.d.ts.map +0 -1
- package/dist/auth/buildAuth.js +0 -312
- package/dist/auth/buildAuth.js.map +0 -1
- package/dist/auth/callerResolver.d.ts +0 -52
- package/dist/auth/callerResolver.d.ts.map +0 -1
- package/dist/auth/callerResolver.js +0 -52
- package/dist/auth/callerResolver.js.map +0 -1
- package/dist/auth/createAuthRoutes.d.ts +0 -22
- package/dist/auth/createAuthRoutes.d.ts.map +0 -1
- package/dist/auth/createAuthRoutes.js +0 -129
- package/dist/auth/createAuthRoutes.js.map +0 -1
- package/dist/auth/createMantleAuth.d.ts +0 -3
- package/dist/auth/createMantleAuth.d.ts.map +0 -1
- package/dist/auth/createMantleAuth.js +0 -504
- package/dist/auth/createMantleAuth.js.map +0 -1
- package/dist/auth/db.d.ts +0 -18
- package/dist/auth/db.d.ts.map +0 -1
- package/dist/auth/db.js +0 -27
- package/dist/auth/db.js.map +0 -1
- package/dist/auth/emailTemplates.d.ts +0 -7
- package/dist/auth/emailTemplates.d.ts.map +0 -1
- package/dist/auth/emailTemplates.js.map +0 -1
- package/dist/auth/index.d.ts +0 -9
- package/dist/auth/index.d.ts.map +0 -1
- package/dist/auth/index.js +0 -7
- package/dist/auth/index.js.map +0 -1
- package/dist/auth/methods.d.ts +0 -717
- package/dist/auth/methods.d.ts.map +0 -1
- package/dist/auth/methods.js +0 -321
- package/dist/auth/methods.js.map +0 -1
- package/dist/auth/oauthTokens.d.ts +0 -24
- package/dist/auth/oauthTokens.d.ts.map +0 -1
- package/dist/auth/oauthTokens.js +0 -146
- package/dist/auth/oauthTokens.js.map +0 -1
- package/dist/auth/setupIncomplete.d.ts +0 -16
- package/dist/auth/setupIncomplete.d.ts.map +0 -1
- package/dist/auth/setupIncomplete.js +0 -50
- package/dist/auth/setupIncomplete.js.map +0 -1
- package/dist/auth/types.d.ts +0 -440
- package/dist/auth/types.d.ts.map +0 -1
- package/dist/auth/types.js +0 -10
- package/dist/auth/types.js.map +0 -1
- package/dist/bun/index.d.ts +0 -21
- package/dist/bun/index.d.ts.map +0 -1
- package/dist/bun/index.js +0 -46
- package/dist/bun/index.js.map +0 -1
- package/dist/cli/emitModule.d.ts +0 -7
- package/dist/cli/emitModule.d.ts.map +0 -1
- package/dist/cli/emitModule.js +0 -127
- package/dist/cli/emitModule.js.map +0 -1
- package/dist/cli/generate.d.ts +0 -8
- package/dist/cli/generate.d.ts.map +0 -1
- package/dist/cli/generate.js +0 -391
- package/dist/cli/generate.js.map +0 -1
- package/dist/cli/main.d.ts +0 -3
- package/dist/cli/main.d.ts.map +0 -1
- package/dist/cli/main.js +0 -21
- package/dist/cli/main.js.map +0 -1
- package/dist/cli/preset.d.ts +0 -18
- package/dist/cli/preset.d.ts.map +0 -1
- package/dist/cli/preset.js +0 -405
- package/dist/cli/preset.js.map +0 -1
- package/dist/cloudflare/index.d.ts +0 -25
- package/dist/cloudflare/index.d.ts.map +0 -1
- package/dist/cloudflare/index.js +0 -16
- package/dist/cloudflare/index.js.map +0 -1
- package/dist/cloudflare/r2Media.d.ts.map +0 -1
- package/dist/cloudflare/r2Media.js +0 -69
- package/dist/cloudflare/r2Media.js.map +0 -1
- package/dist/core/caller.d.ts +0 -35
- package/dist/core/caller.d.ts.map +0 -1
- package/dist/core/caller.js +0 -3
- package/dist/core/caller.js.map +0 -1
- package/dist/core/createMantle.d.ts +0 -22
- package/dist/core/createMantle.d.ts.map +0 -1
- package/dist/core/createMantle.js +0 -117
- package/dist/core/createMantle.js.map +0 -1
- package/dist/core/dialect.d.ts +0 -53
- package/dist/core/dialect.d.ts.map +0 -1
- package/dist/core/dialect.js +0 -7
- package/dist/core/dialect.js.map +0 -1
- package/dist/core/driver.d.ts +0 -24
- package/dist/core/driver.d.ts.map +0 -1
- package/dist/core/driver.js +0 -2
- package/dist/core/driver.js.map +0 -1
- package/dist/core/email.d.ts +0 -17
- package/dist/core/email.d.ts.map +0 -1
- package/dist/core/email.js +0 -2
- package/dist/core/email.js.map +0 -1
- package/dist/core/index.d.ts +0 -16
- package/dist/core/index.d.ts.map +0 -1
- package/dist/core/index.js +0 -16
- package/dist/core/index.js.map +0 -1
- package/dist/core/invocation.d.ts +0 -66
- package/dist/core/invocation.d.ts.map +0 -1
- package/dist/core/invocation.js +0 -3
- package/dist/core/invocation.js.map +0 -1
- package/dist/core/observation.d.ts +0 -3
- package/dist/core/observation.d.ts.map +0 -1
- package/dist/core/observation.js +0 -10
- package/dist/core/observation.js.map +0 -1
- package/dist/core/runtime/auth.d.ts +0 -9
- package/dist/core/runtime/auth.d.ts.map +0 -1
- package/dist/core/runtime/auth.js +0 -39
- package/dist/core/runtime/auth.js.map +0 -1
- package/dist/core/runtime/createRuntime.d.ts +0 -23
- package/dist/core/runtime/createRuntime.d.ts.map +0 -1
- package/dist/core/runtime/createRuntime.js +0 -214
- package/dist/core/runtime/createRuntime.js.map +0 -1
- package/dist/core/runtime/verifyPlan.d.ts +0 -34
- package/dist/core/runtime/verifyPlan.d.ts.map +0 -1
- package/dist/core/runtime/verifyPlan.js +0 -301
- package/dist/core/runtime/verifyPlan.js.map +0 -1
- package/dist/core/service.d.ts +0 -45
- package/dist/core/service.d.ts.map +0 -1
- package/dist/core/service.js +0 -2
- package/dist/core/service.js.map +0 -1
- package/dist/core/sessionUser.d.ts +0 -14
- package/dist/core/sessionUser.d.ts.map +0 -1
- package/dist/core/sessionUser.js +0 -4
- package/dist/core/sessionUser.js.map +0 -1
- package/dist/core/site.d.ts.map +0 -1
- package/dist/core/site.js +0 -2
- package/dist/core/site.js.map +0 -1
- package/dist/core/siteConfig.d.ts +0 -5
- package/dist/core/siteConfig.d.ts.map +0 -1
- package/dist/core/siteConfig.js +0 -24
- package/dist/core/siteConfig.js.map +0 -1
- package/dist/core/sql/allowlist.d.ts +0 -67
- package/dist/core/sql/allowlist.d.ts.map +0 -1
- package/dist/core/sql/allowlist.js +0 -737
- package/dist/core/sql/allowlist.js.map +0 -1
- package/dist/core/sql/ast.d.ts +0 -24
- package/dist/core/sql/ast.d.ts.map +0 -1
- package/dist/core/sql/ast.js +0 -32
- package/dist/core/sql/ast.js.map +0 -1
- package/dist/core/sql/compile.d.ts +0 -50
- package/dist/core/sql/compile.d.ts.map +0 -1
- package/dist/core/sql/compile.js +0 -48
- package/dist/core/sql/compile.js.map +0 -1
- package/dist/core/sql/policy.d.ts +0 -123
- package/dist/core/sql/policy.d.ts.map +0 -1
- package/dist/core/sql/policy.js +0 -398
- package/dist/core/sql/policy.js.map +0 -1
- package/dist/core/sql/positions.d.ts +0 -30
- package/dist/core/sql/positions.d.ts.map +0 -1
- package/dist/core/sql/positions.js +0 -22
- package/dist/core/sql/positions.js.map +0 -1
- package/dist/core/sql/run.d.ts +0 -68
- package/dist/core/sql/run.d.ts.map +0 -1
- package/dist/core/sql/run.js +0 -384
- package/dist/core/sql/run.js.map +0 -1
- package/dist/core/store/createStore.d.ts +0 -49
- package/dist/core/store/createStore.d.ts.map +0 -1
- package/dist/core/store/createStore.js +0 -227
- package/dist/core/store/createStore.js.map +0 -1
- package/dist/core/store/cursor.d.ts +0 -4
- package/dist/core/store/cursor.d.ts.map +0 -1
- package/dist/core/store/cursor.js +0 -22
- package/dist/core/store/cursor.js.map +0 -1
- package/dist/core/store/json.d.ts +0 -80
- package/dist/core/store/json.d.ts.map +0 -1
- package/dist/core/store/json.js +0 -342
- package/dist/core/store/json.js.map +0 -1
- package/dist/core/store.d.ts +0 -160
- package/dist/core/store.d.ts.map +0 -1
- package/dist/core/store.js +0 -2
- package/dist/core/store.js.map +0 -1
- package/dist/core/wire.d.ts +0 -20
- package/dist/core/wire.d.ts.map +0 -1
- package/dist/core/wire.js +0 -84
- package/dist/core/wire.js.map +0 -1
- package/dist/core/withCaller.d.ts +0 -24
- package/dist/core/withCaller.d.ts.map +0 -1
- package/dist/core/withCaller.js +0 -35
- package/dist/core/withCaller.js.map +0 -1
- package/dist/d1/adapter.d.ts +0 -12
- package/dist/d1/adapter.d.ts.map +0 -1
- package/dist/d1/adapter.js +0 -23
- package/dist/d1/adapter.js.map +0 -1
- package/dist/d1/codec.d.ts +0 -14
- package/dist/d1/codec.d.ts.map +0 -1
- package/dist/d1/codec.js +0 -136
- package/dist/d1/codec.js.map +0 -1
- package/dist/d1/compile/index.d.ts +0 -9
- package/dist/d1/compile/index.d.ts.map +0 -1
- package/dist/d1/compile/index.js +0 -9
- package/dist/d1/compile/index.js.map +0 -1
- package/dist/d1/dialect.d.ts +0 -4
- package/dist/d1/dialect.d.ts.map +0 -1
- package/dist/d1/dialect.js +0 -13
- package/dist/d1/dialect.js.map +0 -1
- package/dist/d1/executor.d.ts +0 -15
- package/dist/d1/executor.d.ts.map +0 -1
- package/dist/d1/executor.js +0 -96
- package/dist/d1/executor.js.map +0 -1
- package/dist/d1/index.d.ts +0 -6
- package/dist/d1/index.d.ts.map +0 -1
- package/dist/d1/index.js +0 -6
- package/dist/d1/index.js.map +0 -1
- package/dist/d1/lower.d.ts +0 -8
- package/dist/d1/lower.d.ts.map +0 -1
- package/dist/d1/lower.js +0 -167
- package/dist/d1/lower.js.map +0 -1
- package/dist/d1/media.d.ts +0 -5
- package/dist/d1/media.d.ts.map +0 -1
- package/dist/d1/media.js +0 -157
- package/dist/d1/media.js.map +0 -1
- package/dist/d1/migrations.d.ts +0 -12
- package/dist/d1/migrations.d.ts.map +0 -1
- package/dist/d1/migrations.js +0 -111
- package/dist/d1/migrations.js.map +0 -1
- package/dist/d1/print.d.ts +0 -28
- package/dist/d1/print.d.ts.map +0 -1
- package/dist/d1/print.js +0 -54
- package/dist/d1/print.js.map +0 -1
- package/dist/d1/site.d.ts +0 -17
- package/dist/d1/site.d.ts.map +0 -1
- package/dist/d1/site.js +0 -63
- package/dist/d1/site.js.map +0 -1
- package/dist/d1/storage.d.ts +0 -34
- package/dist/d1/storage.d.ts.map +0 -1
- package/dist/d1/storage.js +0 -288
- package/dist/d1/storage.js.map +0 -1
- package/dist/d1/tz.d.ts +0 -21
- package/dist/d1/tz.d.ts.map +0 -1
- package/dist/d1/tz.js +0 -54
- package/dist/d1/tz.js.map +0 -1
- package/dist/d1/validator.d.ts +0 -10
- package/dist/d1/validator.d.ts.map +0 -1
- package/dist/d1/validator.js +0 -33
- package/dist/d1/validator.js.map +0 -1
- package/dist/mcp/apps.d.ts +0 -43
- package/dist/mcp/apps.d.ts.map +0 -1
- package/dist/mcp/apps.js +0 -57
- package/dist/mcp/apps.js.map +0 -1
- package/dist/mcp/catalog.d.ts +0 -55
- package/dist/mcp/catalog.d.ts.map +0 -1
- package/dist/mcp/catalog.js +0 -81
- package/dist/mcp/catalog.js.map +0 -1
- package/dist/mcp/createMcpSurface.d.ts +0 -60
- package/dist/mcp/createMcpSurface.d.ts.map +0 -1
- package/dist/mcp/createMcpSurface.js +0 -182
- package/dist/mcp/createMcpSurface.js.map +0 -1
- package/dist/mcp/index.d.ts +0 -4
- package/dist/mcp/index.d.ts.map +0 -1
- package/dist/mcp/index.js +0 -4
- package/dist/mcp/index.js.map +0 -1
- package/dist/mcp/media.d.ts +0 -9
- package/dist/mcp/media.d.ts.map +0 -1
- package/dist/mcp/media.js +0 -33
- package/dist/mcp/media.js.map +0 -1
- package/dist/postgres/adapter.d.ts +0 -23
- package/dist/postgres/adapter.d.ts.map +0 -1
- package/dist/postgres/adapter.js +0 -50
- package/dist/postgres/adapter.js.map +0 -1
- package/dist/postgres/codec.d.ts +0 -13
- package/dist/postgres/codec.d.ts.map +0 -1
- package/dist/postgres/codec.js +0 -110
- package/dist/postgres/codec.js.map +0 -1
- package/dist/postgres/compile/index.d.ts +0 -9
- package/dist/postgres/compile/index.d.ts.map +0 -1
- package/dist/postgres/compile/index.js +0 -9
- package/dist/postgres/compile/index.js.map +0 -1
- package/dist/postgres/driver.d.ts +0 -109
- package/dist/postgres/driver.d.ts.map +0 -1
- package/dist/postgres/driver.js +0 -186
- package/dist/postgres/driver.js.map +0 -1
- package/dist/postgres/executor.d.ts +0 -28
- package/dist/postgres/executor.d.ts.map +0 -1
- package/dist/postgres/executor.js +0 -96
- package/dist/postgres/executor.js.map +0 -1
- package/dist/postgres/index.d.ts +0 -8
- package/dist/postgres/index.d.ts.map +0 -1
- package/dist/postgres/index.js +0 -8
- package/dist/postgres/index.js.map +0 -1
- package/dist/postgres/lower.d.ts +0 -6
- package/dist/postgres/lower.d.ts.map +0 -1
- package/dist/postgres/lower.js +0 -152
- package/dist/postgres/lower.js.map +0 -1
- package/dist/postgres/print.d.ts +0 -11
- package/dist/postgres/print.d.ts.map +0 -1
- package/dist/postgres/print.js +0 -108
- package/dist/postgres/print.js.map +0 -1
- package/dist/postgres/session.d.ts +0 -9
- package/dist/postgres/session.d.ts.map +0 -1
- package/dist/postgres/session.js +0 -111
- package/dist/postgres/session.js.map +0 -1
- package/dist/postgres/storage.d.ts +0 -32
- package/dist/postgres/storage.d.ts.map +0 -1
- package/dist/postgres/storage.js +0 -283
- package/dist/postgres/storage.js.map +0 -1
- package/dist/postgres/validator.d.ts +0 -13
- package/dist/postgres/validator.d.ts.map +0 -1
- package/dist/postgres/validator.js +0 -53
- package/dist/postgres/validator.js.map +0 -1
- package/dist/spec/domain/index.d.ts +0 -3
- package/dist/spec/domain/index.d.ts.map +0 -1
- package/dist/spec/domain/index.js +0 -3
- package/dist/spec/domain/index.js.map +0 -1
- package/dist/spec/domain/model/ContentState.d.ts +0 -8
- package/dist/spec/domain/model/ContentState.d.ts.map +0 -1
- package/dist/spec/domain/model/ContentState.js +0 -7
- package/dist/spec/domain/model/ContentState.js.map +0 -1
- package/dist/spec/domain/model/Entry.d.ts +0 -29
- package/dist/spec/domain/model/Entry.d.ts.map +0 -1
- package/dist/spec/domain/model/Entry.js +0 -16
- package/dist/spec/domain/model/Entry.js.map +0 -1
- package/dist/spec/domain/model/Locale.d.ts +0 -30
- package/dist/spec/domain/model/Locale.d.ts.map +0 -1
- package/dist/spec/domain/model/Locale.js +0 -33
- package/dist/spec/domain/model/Locale.js.map +0 -1
- package/dist/spec/domain/model/ManifestGrammar.d.ts.map +0 -1
- package/dist/spec/domain/model/ManifestGrammar.js +0 -153
- package/dist/spec/domain/model/ManifestGrammar.js.map +0 -1
- package/dist/spec/domain/model/MediaMimeAccept.d.ts +0 -55
- package/dist/spec/domain/model/MediaMimeAccept.d.ts.map +0 -1
- package/dist/spec/domain/model/MediaMimeAccept.js +0 -90
- package/dist/spec/domain/model/MediaMimeAccept.js.map +0 -1
- package/dist/spec/domain/model/RuntimePlan.d.ts.map +0 -1
- package/dist/spec/domain/model/RuntimePlan.js +0 -4
- package/dist/spec/domain/model/RuntimePlan.js.map +0 -1
- package/dist/spec/domain/model/SiteConfig.d.ts +0 -173
- package/dist/spec/domain/model/SiteConfig.d.ts.map +0 -1
- package/dist/spec/domain/model/SiteConfig.js +0 -13
- package/dist/spec/domain/model/SiteConfig.js.map +0 -1
- package/dist/spec/domain/model/SqlIr.d.ts.map +0 -1
- package/dist/spec/domain/model/SqlIr.js +0 -95
- package/dist/spec/domain/model/SqlIr.js.map +0 -1
- package/dist/spec/domain/model/index.d.ts +0 -14
- package/dist/spec/domain/model/index.d.ts.map +0 -1
- package/dist/spec/domain/model/index.js +0 -14
- package/dist/spec/domain/model/index.js.map +0 -1
- package/dist/spec/domain/service/CloudflareCron.d.ts.map +0 -1
- package/dist/spec/domain/service/CloudflareCron.js.map +0 -1
- package/dist/spec/domain/service/CrossSchemaChecker.d.ts +0 -34
- package/dist/spec/domain/service/CrossSchemaChecker.d.ts.map +0 -1
- package/dist/spec/domain/service/CrossSchemaChecker.js +0 -114
- package/dist/spec/domain/service/CrossSchemaChecker.js.map +0 -1
- package/dist/spec/domain/service/EntryDataValidator.d.ts +0 -56
- package/dist/spec/domain/service/EntryDataValidator.d.ts.map +0 -1
- package/dist/spec/domain/service/EntryDataValidator.js +0 -88
- package/dist/spec/domain/service/EntryDataValidator.js.map +0 -1
- package/dist/spec/domain/service/JsonSchemaToZod.d.ts +0 -29
- package/dist/spec/domain/service/JsonSchemaToZod.d.ts.map +0 -1
- package/dist/spec/domain/service/JsonSchemaToZod.js +0 -156
- package/dist/spec/domain/service/JsonSchemaToZod.js.map +0 -1
- package/dist/spec/domain/service/LifecycleStateMachine.d.ts +0 -75
- package/dist/spec/domain/service/LifecycleStateMachine.d.ts.map +0 -1
- package/dist/spec/domain/service/LifecycleStateMachine.js +0 -76
- package/dist/spec/domain/service/LifecycleStateMachine.js.map +0 -1
- package/dist/spec/domain/service/LocaleCanonicalizer.d.ts +0 -29
- package/dist/spec/domain/service/LocaleCanonicalizer.d.ts.map +0 -1
- package/dist/spec/domain/service/LocaleCanonicalizer.js +0 -96
- package/dist/spec/domain/service/LocaleCanonicalizer.js.map +0 -1
- package/dist/spec/domain/service/ManifestFieldChecks.d.ts +0 -60
- package/dist/spec/domain/service/ManifestFieldChecks.d.ts.map +0 -1
- package/dist/spec/domain/service/ManifestFieldChecks.js +0 -116
- package/dist/spec/domain/service/ManifestFieldChecks.js.map +0 -1
- package/dist/spec/domain/service/ManifestGraphValidator.d.ts +0 -15
- package/dist/spec/domain/service/ManifestGraphValidator.d.ts.map +0 -1
- package/dist/spec/domain/service/ManifestGraphValidator.js +0 -225
- package/dist/spec/domain/service/ManifestGraphValidator.js.map +0 -1
- package/dist/spec/domain/service/ManifestLinker.d.ts +0 -45
- package/dist/spec/domain/service/ManifestLinker.d.ts.map +0 -1
- package/dist/spec/domain/service/ManifestLinker.js +0 -92
- package/dist/spec/domain/service/ManifestLinker.js.map +0 -1
- package/dist/spec/domain/service/ManifestLocaleTrimmer.d.ts +0 -16
- package/dist/spec/domain/service/ManifestLocaleTrimmer.d.ts.map +0 -1
- package/dist/spec/domain/service/ManifestLocaleTrimmer.js +0 -76
- package/dist/spec/domain/service/ManifestLocaleTrimmer.js.map +0 -1
- package/dist/spec/domain/service/ManifestParser.d.ts +0 -49
- package/dist/spec/domain/service/ManifestParser.d.ts.map +0 -1
- package/dist/spec/domain/service/ManifestParser.js +0 -203
- package/dist/spec/domain/service/ManifestParser.js.map +0 -1
- package/dist/spec/domain/service/ManifestPartition.d.ts +0 -9
- package/dist/spec/domain/service/ManifestPartition.d.ts.map +0 -1
- package/dist/spec/domain/service/ManifestPartition.js +0 -19
- package/dist/spec/domain/service/ManifestPartition.js.map +0 -1
- package/dist/spec/domain/service/ManifestPathDiagnoser.d.ts +0 -33
- package/dist/spec/domain/service/ManifestPathDiagnoser.d.ts.map +0 -1
- package/dist/spec/domain/service/ManifestPathDiagnoser.js +0 -43
- package/dist/spec/domain/service/ManifestPathDiagnoser.js.map +0 -1
- package/dist/spec/domain/service/ManifestSourceSpans.d.ts +0 -10
- package/dist/spec/domain/service/ManifestSourceSpans.d.ts.map +0 -1
- package/dist/spec/domain/service/ManifestSourceSpans.js +0 -76
- package/dist/spec/domain/service/ManifestSourceSpans.js.map +0 -1
- package/dist/spec/domain/service/McpToolNaming.d.ts +0 -25
- package/dist/spec/domain/service/McpToolNaming.d.ts.map +0 -1
- package/dist/spec/domain/service/McpToolNaming.js +0 -50
- package/dist/spec/domain/service/McpToolNaming.js.map +0 -1
- package/dist/spec/domain/service/PlanFingerprint.d.ts.map +0 -1
- package/dist/spec/domain/service/PlanFingerprint.js +0 -14
- package/dist/spec/domain/service/PlanFingerprint.js.map +0 -1
- package/dist/spec/domain/service/ProcedureViewSpecChecks.d.ts +0 -4
- package/dist/spec/domain/service/ProcedureViewSpecChecks.d.ts.map +0 -1
- package/dist/spec/domain/service/ProcedureViewSpecChecks.js +0 -211
- package/dist/spec/domain/service/ProcedureViewSpecChecks.js.map +0 -1
- package/dist/spec/domain/service/SchemaAdminUiChecker.d.ts +0 -44
- package/dist/spec/domain/service/SchemaAdminUiChecker.d.ts.map +0 -1
- package/dist/spec/domain/service/SchemaAdminUiChecker.js +0 -333
- package/dist/spec/domain/service/SchemaAdminUiChecker.js.map +0 -1
- package/dist/spec/domain/service/SchemaIndexChecker.d.ts +0 -33
- package/dist/spec/domain/service/SchemaIndexChecker.d.ts.map +0 -1
- package/dist/spec/domain/service/SchemaIndexChecker.js +0 -256
- package/dist/spec/domain/service/SchemaIndexChecker.js.map +0 -1
- package/dist/spec/domain/service/SchemaSearchChecker.d.ts +0 -11
- package/dist/spec/domain/service/SchemaSearchChecker.d.ts.map +0 -1
- package/dist/spec/domain/service/SchemaSearchChecker.js +0 -78
- package/dist/spec/domain/service/SchemaSearchChecker.js.map +0 -1
- package/dist/spec/domain/service/SchemaSpecChecks.d.ts +0 -31
- package/dist/spec/domain/service/SchemaSpecChecks.d.ts.map +0 -1
- package/dist/spec/domain/service/SchemaSpecChecks.js +0 -445
- package/dist/spec/domain/service/SchemaSpecChecks.js.map +0 -1
- package/dist/spec/domain/service/SiteDefaultsValidator.d.ts +0 -39
- package/dist/spec/domain/service/SiteDefaultsValidator.d.ts.map +0 -1
- package/dist/spec/domain/service/SiteDefaultsValidator.js +0 -194
- package/dist/spec/domain/service/SiteDefaultsValidator.js.map +0 -1
- package/dist/spec/domain/service/SqlClassify.d.ts +0 -19
- package/dist/spec/domain/service/SqlClassify.d.ts.map +0 -1
- package/dist/spec/domain/service/SqlClassify.js +0 -42
- package/dist/spec/domain/service/SqlClassify.js.map +0 -1
- package/dist/spec/domain/service/SqlRefusal.d.ts +0 -16
- package/dist/spec/domain/service/SqlRefusal.d.ts.map +0 -1
- package/dist/spec/domain/service/SqlRefusal.js +0 -20
- package/dist/spec/domain/service/SqlRefusal.js.map +0 -1
- package/dist/spec/domain/service/SqlTypes.d.ts +0 -40
- package/dist/spec/domain/service/SqlTypes.d.ts.map +0 -1
- package/dist/spec/domain/service/SqlTypes.js +0 -110
- package/dist/spec/domain/service/SqlTypes.js.map +0 -1
- package/dist/spec/domain/service/StaffRoleHierarchy.d.ts +0 -3
- package/dist/spec/domain/service/StaffRoleHierarchy.d.ts.map +0 -1
- package/dist/spec/domain/service/StaffRoleHierarchy.js +0 -19
- package/dist/spec/domain/service/StaffRoleHierarchy.js.map +0 -1
- package/dist/spec/domain/service/TriggerGraphChecks.d.ts +0 -16
- package/dist/spec/domain/service/TriggerGraphChecks.d.ts.map +0 -1
- package/dist/spec/domain/service/TriggerGraphChecks.js +0 -337
- package/dist/spec/domain/service/TriggerGraphChecks.js.map +0 -1
- package/dist/spec/domain/service/TriggerSpecChecks.d.ts +0 -4
- package/dist/spec/domain/service/TriggerSpecChecks.d.ts.map +0 -1
- package/dist/spec/domain/service/TriggerSpecChecks.js +0 -89
- package/dist/spec/domain/service/TriggerSpecChecks.js.map +0 -1
- package/dist/spec/domain/service/ValidatedAdminUiProjection.d.ts +0 -11
- package/dist/spec/domain/service/ValidatedAdminUiProjection.d.ts.map +0 -1
- package/dist/spec/domain/service/ValidatedAdminUiProjection.js +0 -26
- package/dist/spec/domain/service/ValidatedAdminUiProjection.js.map +0 -1
- package/dist/spec/domain/service/ViewAdminUiChecker.d.ts +0 -14
- package/dist/spec/domain/service/ViewAdminUiChecker.d.ts.map +0 -1
- package/dist/spec/domain/service/ViewAdminUiChecker.js +0 -58
- package/dist/spec/domain/service/ViewAdminUiChecker.js.map +0 -1
- package/dist/spec/domain/service/index.d.ts +0 -24
- package/dist/spec/domain/service/index.d.ts.map +0 -1
- package/dist/spec/domain/service/index.js +0 -24
- package/dist/spec/domain/service/index.js.map +0 -1
- package/dist/spec/index.d.ts +0 -10
- package/dist/spec/index.d.ts.map +0 -1
- package/dist/spec/index.js +0 -12
- package/dist/spec/index.js.map +0 -1
- package/dist/spec/infrastructure/cli/parseArgsError.d.ts +0 -16
- package/dist/spec/infrastructure/cli/parseArgsError.d.ts.map +0 -1
- package/dist/spec/infrastructure/cli/parseArgsError.js +0 -34
- package/dist/spec/infrastructure/cli/parseArgsError.js.map +0 -1
- package/dist/spec/infrastructure/index.d.ts +0 -2
- package/dist/spec/infrastructure/index.d.ts.map +0 -1
- package/dist/spec/infrastructure/index.js +0 -2
- package/dist/spec/infrastructure/index.js.map +0 -1
- package/dist/spec/infrastructure/sql/PgQueryParser.d.ts +0 -18
- package/dist/spec/infrastructure/sql/PgQueryParser.d.ts.map +0 -1
- package/dist/spec/infrastructure/sql/PgQueryParser.js +0 -17
- package/dist/spec/infrastructure/sql/PgQueryParser.js.map +0 -1
- package/dist/spec/infrastructure/sql/compilePlan.d.ts +0 -37
- package/dist/spec/infrastructure/sql/compilePlan.d.ts.map +0 -1
- package/dist/spec/infrastructure/sql/compilePlan.js +0 -287
- package/dist/spec/infrastructure/sql/compilePlan.js.map +0 -1
- package/dist/spec/infrastructure/sql/compileSql.d.ts +0 -35
- package/dist/spec/infrastructure/sql/compileSql.d.ts.map +0 -1
- package/dist/spec/infrastructure/sql/compileSql.js +0 -92
- package/dist/spec/infrastructure/sql/compileSql.js.map +0 -1
- package/dist/spec/infrastructure/sql/frontEnd.d.ts +0 -8
- package/dist/spec/infrastructure/sql/frontEnd.d.ts.map +0 -1
- package/dist/spec/infrastructure/sql/frontEnd.js +0 -100
- package/dist/spec/infrastructure/sql/frontEnd.js.map +0 -1
- package/dist/spec/infrastructure/sql/index.d.ts +0 -4
- package/dist/spec/infrastructure/sql/index.d.ts.map +0 -1
- package/dist/spec/infrastructure/sql/index.js +0 -4
- package/dist/spec/infrastructure/sql/index.js.map +0 -1
- package/dist/spec/kernel/diagnostic.d.ts.map +0 -1
- package/dist/spec/kernel/diagnostic.js +0 -301
- package/dist/spec/kernel/diagnostic.js.map +0 -1
- package/dist/spec/kernel/index.d.ts +0 -8
- package/dist/spec/kernel/index.d.ts.map +0 -1
- package/dist/spec/kernel/index.js +0 -8
- package/dist/spec/kernel/index.js.map +0 -1
- package/dist/spec/usecase/EmitTypes.d.ts +0 -22
- package/dist/spec/usecase/EmitTypes.d.ts.map +0 -1
- package/dist/spec/usecase/EmitTypes.js +0 -182
- package/dist/spec/usecase/EmitTypes.js.map +0 -1
- package/dist/spec/usecase/ValidateManifestsUseCase.d.ts +0 -8
- package/dist/spec/usecase/ValidateManifestsUseCase.d.ts.map +0 -1
- package/dist/spec/usecase/ValidateManifestsUseCase.js +0 -101
- package/dist/spec/usecase/ValidateManifestsUseCase.js.map +0 -1
- package/dist/spec/usecase/dto/ValidateManifestsRequest.d.ts +0 -27
- package/dist/spec/usecase/dto/ValidateManifestsRequest.d.ts.map +0 -1
- package/dist/spec/usecase/dto/ValidateManifestsRequest.js +0 -2
- package/dist/spec/usecase/dto/ValidateManifestsRequest.js.map +0 -1
- package/dist/spec/usecase/dto/ValidateManifestsResponse.d.ts +0 -14
- package/dist/spec/usecase/dto/ValidateManifestsResponse.d.ts.map +0 -1
- package/dist/spec/usecase/dto/ValidateManifestsResponse.js +0 -2
- package/dist/spec/usecase/dto/ValidateManifestsResponse.js.map +0 -1
- package/dist/spec/usecase/dto/index.d.ts +0 -3
- package/dist/spec/usecase/dto/index.d.ts.map +0 -1
- package/dist/spec/usecase/dto/index.js +0 -3
- package/dist/spec/usecase/dto/index.js.map +0 -1
- package/dist/spec/usecase/index.d.ts +0 -10
- package/dist/spec/usecase/index.d.ts.map +0 -1
- package/dist/spec/usecase/index.js +0 -10
- package/dist/spec/usecase/index.js.map +0 -1
- package/dist/testing/cases/before-hook.d.ts +0 -4
- package/dist/testing/cases/before-hook.d.ts.map +0 -1
- package/dist/testing/cases/before-hook.js +0 -71
- package/dist/testing/cases/before-hook.js.map +0 -1
- package/dist/testing/cases/corpus.d.ts +0 -14
- package/dist/testing/cases/corpus.d.ts.map +0 -1
- package/dist/testing/cases/corpus.js +0 -93
- package/dist/testing/cases/corpus.js.map +0 -1
- package/dist/testing/cases/policy.d.ts +0 -87
- package/dist/testing/cases/policy.d.ts.map +0 -1
- package/dist/testing/cases/policy.js +0 -143
- package/dist/testing/cases/policy.js.map +0 -1
- package/dist/testing/cases/printer.d.ts +0 -4
- package/dist/testing/cases/printer.d.ts.map +0 -1
- package/dist/testing/cases/printer.js +0 -34
- package/dist/testing/cases/printer.js.map +0 -1
- package/dist/testing/cases/report-view.d.ts +0 -5
- package/dist/testing/cases/report-view.d.ts.map +0 -1
- package/dist/testing/cases/report-view.js +0 -51
- package/dist/testing/cases/report-view.js.map +0 -1
- package/dist/testing/cases/requisition.d.ts +0 -4
- package/dist/testing/cases/requisition.d.ts.map +0 -1
- package/dist/testing/cases/requisition.js +0 -38
- package/dist/testing/cases/requisition.js.map +0 -1
- package/dist/testing/cases/search-places.d.ts +0 -4
- package/dist/testing/cases/search-places.d.ts.map +0 -1
- package/dist/testing/cases/search-places.js +0 -60
- package/dist/testing/cases/search-places.js.map +0 -1
- package/dist/testing/cases/stock.d.ts +0 -4
- package/dist/testing/cases/stock.d.ts.map +0 -1
- package/dist/testing/cases/stock.js +0 -35
- package/dist/testing/cases/stock.js.map +0 -1
- package/dist/testing/cases/store.d.ts +0 -4
- package/dist/testing/cases/store.d.ts.map +0 -1
- package/dist/testing/cases/store.js +0 -100
- package/dist/testing/cases/store.js.map +0 -1
- package/dist/testing/harness.d.ts +0 -94
- package/dist/testing/harness.d.ts.map +0 -1
- package/dist/testing/harness.js +0 -168
- package/dist/testing/harness.js.map +0 -1
- package/dist/testing/index.d.ts.map +0 -1
- package/dist/testing/index.js.map +0 -1
- package/dist/testing/report.d.ts +0 -15
- package/dist/testing/report.d.ts.map +0 -1
- package/dist/testing/report.js +0 -22
- package/dist/testing/report.js.map +0 -1
- package/dist/web/createRestSurface.d.ts +0 -7
- package/dist/web/createRestSurface.d.ts.map +0 -1
- package/dist/web/createRestSurface.js +0 -41
- package/dist/web/createRestSurface.js.map +0 -1
- package/dist/web/index.d.ts +0 -2
- package/dist/web/index.d.ts.map +0 -1
- package/dist/web/index.js +0 -2
- package/dist/web/index.js.map +0 -1
- package/docs/adr/0001-four-atom-manifest-model.md +0 -440
- package/docs/adr/0002-closed-enums-for-bindings.md +0 -253
- package/docs/adr/0007-ai-as-primary-author.md +0 -473
- package/docs/adr/0008-structured-diagnostic-shape.md +0 -338
- package/docs/adr/0009-consumer-supplied-manifests.md +0 -149
- package/docs/adr/0010-locale-and-translates.md +0 -453
- package/docs/adr/0011-adapter-port-spec.md +0 -281
- package/docs/adr/0012-views-as-public-rest.md +0 -161
- package/docs/adr/0013-agent-provisioned-consumer-projects.md +0 -154
- package/docs/adr/0014-auth-better-auth-and-multi-tenant-mcp.md +0 -939
- package/docs/adr/0016-site-semantic-layer.md +0 -70
- package/docs/adr/0017-media-multi-variant-agent-side-optimization.md +0 -181
- package/docs/adr/0018-core-starters-repository-boundary.md +0 -179
- package/docs/adr/0019-sealed-manifest-runtime-pipeline.md +0 -244
- package/docs/adr/0020-builtin-handler-contracts-and-matched-upsert.md +0 -199
- package/docs/adr/0021-retire-starter-scaffolding.md +0 -30
- package/docs/adr/0022-caller-observed-version-occ.md +0 -212
- package/docs/adr/0023-port-failure-contract.md +0 -69
- package/docs/adr/0024-manifest-native-schema-tables.md +0 -264
- package/docs/adr/0025-reserved-native-columns-and-published-only-public-views.md +0 -105
- package/docs/adr/0026-progressive-generate.md +0 -36
- package/docs/adr/0027-scheduled-procedure-triggers.md +0 -31
- package/docs/adr/0028-schema-ttl-expiry.md +0 -33
- package/docs/adr/0029-mcp-apps-interaction-contracts.md +0 -324
- package/docs/adr/0030-store.md +0 -40
- package/docs/adr/0031-host-cloud-core-contract.md +0 -102
- package/docs/adr/0032-store-centric-core-and-service-contract.md +0 -384
- package/docs/adr/0033-storage-converges-to-the-plan.md +0 -92
- package/docs/adr/0034-store-is-authored-as-sql.md +0 -192
- package/docs/adr/0035-sql-dialects.md +0 -154
- package/docs/adr/0036-host-and-dialect.md +0 -65
- package/docs/adr/0037-postgresql-is-the-reference-dialect.md +0 -125
- package/docs/adr/0038-bun-native-host.md +0 -63
- package/docs/adr/0039-postgresql-is-native.md +0 -130
- package/docs/adr/README.md +0 -98
- package/docs/adr/adr-lite-1376-admin-extensions.md +0 -330
- package/docs/adr/adr-lite-803-request-diagnostics.md +0 -38
- package/docs/adr/adr-lite-808-route-readiness.md +0 -47
- package/docs/adr/adr-lite-809-bounded-public-content.md +0 -71
- package/docs/adr/adr-lite-812-native-parity.md +0 -150
- package/docs/adr/adr-lite-823-home-statistics.md +0 -64
- package/docs/adr/adr-lite-842-mcp-authoring.md +0 -30
- package/docs/adr/adr-lite-845-frontend-client.md +0 -38
- package/docs/adr/adr-lite-861-admin-webmcp.md +0 -48
- package/docs/adr/adr-lite-909-admin-ui-kit.md +0 -37
- package/docs/examples/commerce-inventory.md +0 -498
- package/docs/examples/commerce.md +0 -254
- package/docs/examples/guarded-api.md +0 -238
- package/docs/examples/intake-hooks.md +0 -237
- package/docs/examples/intake.md +0 -127
- package/docs/examples/legal-documents.md +0 -218
- package/docs/examples/procurement.md +0 -226
- package/docs/examples/publication.md +0 -211
- package/docs/examples/reference-service/.mantle/generated/mantle.ts +0 -174
- package/docs/examples/reference-service/.mantle/generated/plan.json +0 -1936
- package/docs/examples/reference-service/README.md +0 -33
- package/docs/examples/reference-service/manifests/catalog.yaml +0 -103
- package/docs/examples/reference-service/manifests/orders.yaml +0 -120
- package/docs/examples/reference-service/mantle.config.json +0 -1
- package/docs/examples/reference-service/package.json +0 -27
- package/docs/examples/reference-service/smoke.mjs +0 -160
- package/docs/examples/reference-service/src/handlers.ts +0 -36
- package/docs/examples/reference-service/src/index.ts +0 -33
- package/docs/examples/reference-service/src/service.ts +0 -78
- package/docs/examples/reference-service/wrangler.jsonc +0 -26
- package/docs/examples/reservation.md +0 -142
- package/docs/handbook/guides/admin-extensions.md +0 -191
- /package/docs/examples/{reference-service → app-shell}/.dev.vars.example +0 -0
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { checkConflict, conflict, ContractError } from "../contracts.js";
|
|
2
|
+
import { context, guard } from "./transaction-context.js";
|
|
3
|
+
const transactions = new WeakSet();
|
|
4
|
+
const ISOLATION = ["serializable", "repeatable read", "read committed", "read uncommitted"];
|
|
5
|
+
export const read = (db, sql, binds) => { guard(db); return db.unsafe(sql, binds); };
|
|
6
|
+
export async function run(db, sql, binds) {
|
|
7
|
+
const rows = await read(db, sql, binds);
|
|
8
|
+
return { rows, changes: Number(rows.count ?? 0) };
|
|
9
|
+
}
|
|
10
|
+
/** SQLSTATE of a server error: `errno` on Bun.SQL, `code` on postgres.js. */
|
|
11
|
+
const sqlstate = (error) => { const e = error; return typeof e?.errno === "string" ? e.errno : e?.code; };
|
|
12
|
+
/** A structured server ErrorResponse proves rollback; missing evidence is uncertain. */
|
|
13
|
+
export function definitive(error) {
|
|
14
|
+
if (error instanceof ContractError)
|
|
15
|
+
return error.code === "CONFLICT";
|
|
16
|
+
const state = sqlstate(error);
|
|
17
|
+
return typeof state === "string" && /^[0-9A-Z]{5}$/.test(state) && typeof error?.severity === "string" && !/^(08|28|53|57|58|XX)/.test(state);
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* The error to throw when a PostgreSQL write fails where it may already have committed (autocommit, or COMMIT).
|
|
21
|
+
* A server ErrorResponse (SQLSTATE + severity) outside connection/resource classes rolled back; anything else, such as a
|
|
22
|
+
* lost socket, is OUTCOME_UNKNOWN.
|
|
23
|
+
*/
|
|
24
|
+
export function postgresOutcome(error, path) {
|
|
25
|
+
if (definitive(error))
|
|
26
|
+
return error;
|
|
27
|
+
return new ContractError("OUTCOME_UNKNOWN", "The write outcome is unknown; reconcile before retrying.", path, { cause: error });
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* One statement is atomic on its own (a row statement touches at most one row, so a failed count check changes nothing)
|
|
31
|
+
* and runs in autocommit. Several run in `begin(serializable)`: a failure before the callback returns was rolled back;
|
|
32
|
+
* only a failed COMMIT can leave the outcome unknown.
|
|
33
|
+
*/
|
|
34
|
+
export async function procedure(db, steps, path) {
|
|
35
|
+
const execute = async (handle) => {
|
|
36
|
+
const results = [];
|
|
37
|
+
for (const s of steps) {
|
|
38
|
+
const { rows, changes } = await run(handle, s.sql, s.binds).catch(error => { throw sqlstate(error) === "23505" ? conflict(path, true, error) : checkConflict(path, error, sqlstate(error) === "23514") ?? error; });
|
|
39
|
+
if (s.row && changes !== 1)
|
|
40
|
+
throw conflict(path, false);
|
|
41
|
+
results.push(rows);
|
|
42
|
+
}
|
|
43
|
+
return results;
|
|
44
|
+
};
|
|
45
|
+
if (transactions.has(db))
|
|
46
|
+
return execute(db);
|
|
47
|
+
if (steps.length === 1) {
|
|
48
|
+
try {
|
|
49
|
+
return await execute(db);
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
throw error instanceof ContractError ? error : postgresOutcome(error, path);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return transaction(db, execute, undefined, path);
|
|
56
|
+
}
|
|
57
|
+
/** Shared BEGIN/COMMIT outcome handling for Procedures and interactive Store transactions. */
|
|
58
|
+
export async function transaction(db, fn, options = {}, path = "store/transaction") {
|
|
59
|
+
guard(db);
|
|
60
|
+
if (transactions.has(db))
|
|
61
|
+
throw new Error("Nested transactions are not supported.");
|
|
62
|
+
// a transaction handle the app opened (postgres.js types it without `begin`) only suits reads and single statements
|
|
63
|
+
if (typeof db.begin !== "function")
|
|
64
|
+
throw new Error("This PostgreSQL handle is a transaction the app opened and cannot begin another: open the transaction with store(pool, caller).transaction and call Procedures through its tx.");
|
|
65
|
+
let committing = false;
|
|
66
|
+
const state = { outer: db };
|
|
67
|
+
try {
|
|
68
|
+
// printed into BEGIN, so only PostgreSQL's own four levels: a handler may pass request input here
|
|
69
|
+
const level = options.isolation ?? "serializable";
|
|
70
|
+
if (!ISOLATION.includes(level))
|
|
71
|
+
throw new ContractError("INPUT_VALIDATION_FAILED", `isolation '${level}' is not a PostgreSQL isolation level`, path);
|
|
72
|
+
return await db.begin(`isolation level ${level}`, async (handle) => {
|
|
73
|
+
let active = true;
|
|
74
|
+
const tx = { unsafe: (sql, values) => {
|
|
75
|
+
if (!active)
|
|
76
|
+
throw new Error("Transaction has ended.");
|
|
77
|
+
return handle.unsafe(sql, values);
|
|
78
|
+
}, begin: async () => { throw new Error("Nested transactions are not supported."); } };
|
|
79
|
+
transactions.add(tx);
|
|
80
|
+
state.handle = tx;
|
|
81
|
+
try {
|
|
82
|
+
const result = await context.run(state, () => fn(tx));
|
|
83
|
+
committing = true;
|
|
84
|
+
return result;
|
|
85
|
+
}
|
|
86
|
+
finally {
|
|
87
|
+
active = false;
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
throw error instanceof ContractError || !committing ? error : postgresOutcome(error, path);
|
|
93
|
+
}
|
|
94
|
+
finally {
|
|
95
|
+
state.outer = undefined;
|
|
96
|
+
state.handle = undefined;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { AsyncLocalStorage } from "node:async_hooks";
|
|
2
|
+
export declare const context: AsyncLocalStorage<{
|
|
3
|
+
outer?: object;
|
|
4
|
+
handle?: object;
|
|
5
|
+
changes?: Map<string, number>;
|
|
6
|
+
parents?: Map<string, number>;
|
|
7
|
+
}>;
|
|
8
|
+
export declare function guard(db: object): void;
|
|
9
|
+
/** One atomic write cannot publish a translation and change its parent's status. */
|
|
10
|
+
export declare function translationWrite(db: object, schema: string, parent?: string): () => void;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { AsyncLocalStorage } from "node:async_hooks";
|
|
2
|
+
import { ContractError } from "../contracts.js";
|
|
3
|
+
export const context = new AsyncLocalStorage();
|
|
4
|
+
export function guard(db) {
|
|
5
|
+
if (context.getStore()?.outer === db)
|
|
6
|
+
throw new ContractError("INPUT_VALIDATION_FAILED", "Inside store.transaction use tx, not the outer store or handle.", "store/transaction");
|
|
7
|
+
}
|
|
8
|
+
/** One atomic write cannot publish a translation and change its parent's status. */
|
|
9
|
+
export function translationWrite(db, schema, parent) {
|
|
10
|
+
const state = context.getStore();
|
|
11
|
+
if (!state || state.handle !== db)
|
|
12
|
+
return () => { };
|
|
13
|
+
schema = schema.toLowerCase();
|
|
14
|
+
parent = parent?.toLowerCase();
|
|
15
|
+
if (state.parents?.has(schema) || parent && state.changes?.has(parent))
|
|
16
|
+
throw new ContractError("INPUT_VALIDATION_FAILED", "Publish the translation and change its parent status in separate writes.", "translations");
|
|
17
|
+
const changes = state.changes ??= new Map(), parents = state.parents ??= new Map();
|
|
18
|
+
changes.set(schema, (changes.get(schema) ?? 0) + 1);
|
|
19
|
+
if (parent)
|
|
20
|
+
parents.set(parent, (parents.get(parent) ?? 0) + 1);
|
|
21
|
+
return () => { for (const [map, key] of [[changes, schema], [parents, parent]])
|
|
22
|
+
if (key) {
|
|
23
|
+
const count = map.get(key) - 1;
|
|
24
|
+
if (count)
|
|
25
|
+
map.set(key, count);
|
|
26
|
+
else
|
|
27
|
+
map.delete(key);
|
|
28
|
+
} };
|
|
29
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/** The transactional-email port (Better Auth email OTP and magic link, admin invitations). The sender decides how to branch on `locale`; `category` names the template lane. */
|
|
2
|
+
export interface EmailSender {
|
|
3
|
+
send(args: EmailSendArgs): Promise<void>;
|
|
4
|
+
}
|
|
5
|
+
export interface EmailSendArgs {
|
|
6
|
+
readonly to: string;
|
|
7
|
+
readonly subject: string;
|
|
8
|
+
/** Plain-text body — always required so non-HTML clients work. */
|
|
9
|
+
readonly text: string;
|
|
10
|
+
/** Optional HTML body. */
|
|
11
|
+
readonly html?: string;
|
|
12
|
+
/** BCP 47 locale the recipient is expected to read. */
|
|
13
|
+
readonly locale: string;
|
|
14
|
+
/** Optional categorization for templating / deliverability segmentation. */
|
|
15
|
+
readonly category?: string;
|
|
16
|
+
}
|
|
17
|
+
type EmailContent = Pick<EmailSendArgs, "subject" | "text">;
|
|
18
|
+
export declare function signInCodeEmail(code: string): EmailContent;
|
|
19
|
+
export declare function signInLinkEmail(url: string): EmailContent;
|
|
20
|
+
export declare function adminInvitationEmail(role: string, signInUrl: string): EmailContent;
|
|
21
|
+
/**
|
|
22
|
+
* Local development only: logs recipients and sign-in secrets, sends nothing.
|
|
23
|
+
* Select at the application's environment boundary; never use in production.
|
|
24
|
+
*/
|
|
25
|
+
export declare class ConsoleEmailSender implements EmailSender {
|
|
26
|
+
send(args: EmailSendArgs): Promise<void>;
|
|
27
|
+
}
|
|
28
|
+
export {};
|
|
@@ -17,11 +17,22 @@ export function signInLinkEmail(url) {
|
|
|
17
17
|
"The link expires shortly.",
|
|
18
18
|
]);
|
|
19
19
|
}
|
|
20
|
-
export function
|
|
20
|
+
export function adminInvitationEmail(role, signInUrl) {
|
|
21
21
|
return englishEmail("You have been invited to Mantle", [
|
|
22
22
|
`You now have ${role} access to Mantle.`,
|
|
23
23
|
"Sign in with this email address to accept the invitation:",
|
|
24
24
|
signInUrl,
|
|
25
25
|
]);
|
|
26
26
|
}
|
|
27
|
-
|
|
27
|
+
/**
|
|
28
|
+
* Local development only: logs recipients and sign-in secrets, sends nothing.
|
|
29
|
+
* Select at the application's environment boundary; never use in production.
|
|
30
|
+
*/
|
|
31
|
+
export class ConsoleEmailSender {
|
|
32
|
+
async send(args) {
|
|
33
|
+
const { to, subject, text, locale, category } = args;
|
|
34
|
+
console.log(`[ConsoleEmailSender] ${category ?? "email"} → ${to} (${locale})\n` +
|
|
35
|
+
` subject: ${subject}\n` +
|
|
36
|
+
` body: ${text}`);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/** Request-only gateway decisions and observation; no database or compiler dependencies. */
|
|
2
|
+
import { type AccessEvent, type Caller, type GatewayOptions, type RequestContext } from "./contracts.js";
|
|
3
|
+
export declare function accessRequest(ctx: RequestContext | undefined, options: GatewayOptions): {
|
|
4
|
+
readonly dryRun: boolean;
|
|
5
|
+
select(target: string, resolved?: Caller): Promise<void>;
|
|
6
|
+
check(readOnly: boolean, variant?: string): Promise<void>;
|
|
7
|
+
finish(error?: unknown): AccessEvent;
|
|
8
|
+
finishResponse(response: Response): Promise<AccessEvent>;
|
|
9
|
+
response(): Response;
|
|
10
|
+
};
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/** Request-only gateway decisions and observation; no database or compiler dependencies. */
|
|
2
|
+
import { forwarded, ContractError, wire } from "./contracts.js";
|
|
3
|
+
import { isHostCaller, checkFresh } from "./caller-identity.js";
|
|
4
|
+
const logged = new WeakSet();
|
|
5
|
+
export function accessRequest(ctx, options) {
|
|
6
|
+
const present = forwarded(ctx);
|
|
7
|
+
const props = ctx?.props?.mantle;
|
|
8
|
+
let caller, id = "", meta, finished;
|
|
9
|
+
let targets;
|
|
10
|
+
const fail = (code, status, field) => { throw new ContractError(code, code, id, { status, fields: field ? { field } : undefined }); };
|
|
11
|
+
return {
|
|
12
|
+
get dryRun() { return !!caller && isHostCaller(caller) && "dryRun" in caller && caller.dryRun === true; },
|
|
13
|
+
async select(target, resolved) {
|
|
14
|
+
id = target;
|
|
15
|
+
caller = resolved;
|
|
16
|
+
const all = await (targets ??= options.accessTargets?.());
|
|
17
|
+
meta = all && Object.hasOwn(all, id) ? all[id] : undefined;
|
|
18
|
+
},
|
|
19
|
+
async check(readOnly, variant) {
|
|
20
|
+
if (!caller || !isHostCaller(caller))
|
|
21
|
+
return;
|
|
22
|
+
const c = caller;
|
|
23
|
+
if (c.target !== undefined && c.target !== id)
|
|
24
|
+
fail("TARGET_MISMATCH", 412);
|
|
25
|
+
if (c.targetHash !== undefined && (!meta || c.targetHash !== meta.targetHash))
|
|
26
|
+
fail("TARGET_HASH_MISMATCH", 412);
|
|
27
|
+
checkFresh(caller, readOnly, id);
|
|
28
|
+
const policy = variant ? meta?.variants?.find(v => v.id === variant) ?? meta : meta;
|
|
29
|
+
if (this.dryRun && (!policy || policy.opaque || policy.guard))
|
|
30
|
+
fail("DRY_RUN_UNSUPPORTED", 412);
|
|
31
|
+
},
|
|
32
|
+
finish(error) {
|
|
33
|
+
if (finished)
|
|
34
|
+
return finished;
|
|
35
|
+
const failure = error === undefined ? undefined : wire(error);
|
|
36
|
+
finished = { v: 1, requestId: caller && "requestId" in caller ? caller.requestId ?? "" : typeof props?.requestId === "string" ? props.requestId : "", target: id, targetHash: meta?.targetHash ?? "",
|
|
37
|
+
caller: { kind: caller?.kind ?? (props?.layer === "member" ? "user" : "host"), subject: caller && "subject" in caller ? caller.subject : typeof props?.user === "object" && props.user && typeof props.user.id === "string" ? (props.layer === "admin" ? "host:" : "") + props.user.id : "", layer: caller && isHostCaller(caller) ? caller.kind === "host" ? "admin" : "member" : props?.layer === "member" ? "member" : "admin" },
|
|
38
|
+
outcome: failure ? [401, 403].includes(failure.status) ? "deny" : "error" : "allow", ...(failure ? { reason: failure.status === 401 ? "AUTH_DENIED" : failure.error.code, ...(typeof failure.error.field === "string" ? { field: failure.error.field } : {}) } : {}), dryRun: caller && isHostCaller(caller) ? this.dryRun : props?.dryRun === true };
|
|
39
|
+
finished = Object.freeze({ ...finished, caller: Object.freeze(finished.caller) });
|
|
40
|
+
if (present && options.onAccess) {
|
|
41
|
+
const listener = options.onAccess;
|
|
42
|
+
const log = () => { if (!logged.has(listener)) {
|
|
43
|
+
logged.add(listener);
|
|
44
|
+
console.error("[mantle onAccess] listener failed");
|
|
45
|
+
} };
|
|
46
|
+
// Schedule observation after the decision without awaiting its promise.
|
|
47
|
+
queueMicrotask(() => { try {
|
|
48
|
+
void Promise.resolve(listener(finished)).catch(log);
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
log();
|
|
52
|
+
} });
|
|
53
|
+
}
|
|
54
|
+
return finished;
|
|
55
|
+
},
|
|
56
|
+
async finishResponse(response) {
|
|
57
|
+
if (response.status < 400)
|
|
58
|
+
return this.finish();
|
|
59
|
+
const payload = await response.clone().json().catch(() => null);
|
|
60
|
+
const code = typeof payload?.error?.code === "string" ? payload.error.code : [401, 403].includes(response.status) ? "AUTH_DENIED" : response.status < 500 ? "INPUT_VALIDATION_FAILED" : "INTERNAL_ERROR";
|
|
61
|
+
return this.finish(new ContractError(code, "", id, { status: response.status, fields: payload?.error?.field ? { field: payload.error.field } : undefined }));
|
|
62
|
+
},
|
|
63
|
+
response() { return Response.json({ dryRun: true, event: this.finish() }, { headers: { "cache-control": "private, no-store" } }); },
|
|
64
|
+
};
|
|
65
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/** Request-only host contract validation. */
|
|
2
|
+
export { draining } from "./drain.js";
|
|
3
|
+
import { type Caller, type Gateway, type RequestContext } from "./contracts.js";
|
|
4
|
+
import type { UserFields, UserValue } from "./user-fields.js";
|
|
5
|
+
/** The complete JSON supplied as ctx.props.mantle by a trusted gateway. */
|
|
6
|
+
export interface HostProps {
|
|
7
|
+
readonly v: 1;
|
|
8
|
+
readonly tenant: string;
|
|
9
|
+
readonly layer: "admin" | "member";
|
|
10
|
+
readonly user: Readonly<Record<string, UserValue>> & {
|
|
11
|
+
readonly id: string;
|
|
12
|
+
readonly role?: string;
|
|
13
|
+
};
|
|
14
|
+
readonly authenticatedAs: "snapshot" | "fresh";
|
|
15
|
+
readonly credential: "session" | "oauth";
|
|
16
|
+
readonly requestId: string;
|
|
17
|
+
/** Forwarded target pinning. */
|
|
18
|
+
readonly target?: string;
|
|
19
|
+
readonly targetHash?: string;
|
|
20
|
+
readonly dryRun?: boolean;
|
|
21
|
+
}
|
|
22
|
+
export type HostCaller = Extract<Caller, {
|
|
23
|
+
kind: "user" | "host";
|
|
24
|
+
}> & {
|
|
25
|
+
readonly authenticatedAs: HostProps["authenticatedAs"];
|
|
26
|
+
readonly credential: HostProps["credential"];
|
|
27
|
+
readonly requestId: string;
|
|
28
|
+
};
|
|
29
|
+
/** Validate the forwarding contract and reuse the ordinary user validation and brand. */
|
|
30
|
+
export declare function hostCaller(props: unknown, options: {
|
|
31
|
+
readonly tenant: string;
|
|
32
|
+
readonly fields?: UserFields;
|
|
33
|
+
}): HostCaller;
|
|
34
|
+
/** Resolve only forwarded props, or trip on an entry that did not opt in. */
|
|
35
|
+
export declare function gatewayCaller(ctx: RequestContext | undefined, gateway: Gateway | undefined, fields?: UserFields): Caller;
|
|
36
|
+
/** Host errors are machine-readable and never challenge for application credentials. */
|
|
37
|
+
export declare function hostFailure(error: unknown, caller?: Caller, where?: string, challenge?: string): Response;
|
|
38
|
+
export { isHostCaller } from "./caller-identity.js";
|
|
39
|
+
export { checkFresh } from "./caller-identity.js";
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/** Request-only host contract validation. */
|
|
2
|
+
export { draining } from "./drain.js";
|
|
3
|
+
import { forwarded, ContractError, surfaceError, surfaceFailure } from "./contracts.js";
|
|
4
|
+
import { userCaller } from "./user-caller.js";
|
|
5
|
+
import { identities, isHostCaller } from "./caller-identity.js";
|
|
6
|
+
const hostContract = (message, field) => { throw new ContractError("HOST_CONTRACT", message, "", { status: 412, fields: field ? { field } : undefined }); };
|
|
7
|
+
/** Validate the forwarding contract and reuse the ordinary user validation and brand. */
|
|
8
|
+
export function hostCaller(props, options) {
|
|
9
|
+
const record = (v) => !!v && typeof v === "object" && !Array.isArray(v) && (Object.getPrototypeOf(v) === Object.prototype || Object.getPrototypeOf(v) === null);
|
|
10
|
+
const text = (v) => typeof v === "string" && v.length > 0 && !v.includes("\0") && v.isWellFormed();
|
|
11
|
+
if (!record(props))
|
|
12
|
+
return hostContract("Expected host contract v1.");
|
|
13
|
+
const keys = "v tenant layer user authenticatedAs credential requestId target targetHash dryRun".split(" ");
|
|
14
|
+
if (Object.keys(props).some(key => !keys.includes(key)) || props.v !== 1 || !text(props.tenant) || props.tenant !== options.tenant || !["admin", "member"].includes(props.layer) || !["snapshot", "fresh"].includes(props.authenticatedAs) || !["session", "oauth"].includes(props.credential) || !text(props.requestId) || !record(props.user))
|
|
15
|
+
return hostContract("Malformed host contract or tenant mismatch.");
|
|
16
|
+
for (const key of ["target", "targetHash"])
|
|
17
|
+
if (Object.hasOwn(props, key) && !text(props[key]))
|
|
18
|
+
return hostContract(`Invalid '${key}'.`, key);
|
|
19
|
+
if (Object.hasOwn(props, "dryRun") && typeof props.dryRun !== "boolean")
|
|
20
|
+
return hostContract("Invalid 'dryRun'.", "dryRun");
|
|
21
|
+
for (const key of ["target", "targetHash"])
|
|
22
|
+
if (props.layer === "admin" && !text(props[key]))
|
|
23
|
+
return hostContract(`Admin callers require '${key}'.`, key);
|
|
24
|
+
const user = props.user;
|
|
25
|
+
if (!text(user.id))
|
|
26
|
+
return hostContract("Invalid user id.", "id");
|
|
27
|
+
let base;
|
|
28
|
+
try {
|
|
29
|
+
base = userCaller(user, { fields: options.fields, adminRoles: [], credential: props.credential });
|
|
30
|
+
}
|
|
31
|
+
catch (error) {
|
|
32
|
+
return hostContract(error.message);
|
|
33
|
+
}
|
|
34
|
+
const caller = Object.freeze({ ...base, kind: props.layer === "admin" ? "host" : "user", subject: props.layer === "admin" ? "host:" + base.subject : base.subject, admin: props.layer === "admin", authenticatedAs: props.authenticatedAs, credential: props.credential, requestId: props.requestId, target: props.target, targetHash: props.targetHash, dryRun: props.dryRun === true });
|
|
35
|
+
identities.set(caller, Object.freeze({ ...identities.get(base), admin: caller.admin, host: true }));
|
|
36
|
+
return caller;
|
|
37
|
+
}
|
|
38
|
+
/** Resolve only forwarded props, or trip on an entry that did not opt in. */
|
|
39
|
+
export function gatewayCaller(ctx, gateway, fields) {
|
|
40
|
+
const present = forwarded(ctx);
|
|
41
|
+
if (!gateway)
|
|
42
|
+
throw new ContractError('HOST_CONTRACT', 'Host props require gateway mode.', '', { status: 412 });
|
|
43
|
+
if (!present)
|
|
44
|
+
return { kind: 'anonymous' };
|
|
45
|
+
return hostCaller(ctx.props.mantle, { tenant: gateway.tenant, fields });
|
|
46
|
+
}
|
|
47
|
+
/** Host errors are machine-readable and never challenge for application credentials. */
|
|
48
|
+
export function hostFailure(error, caller, where, challenge) {
|
|
49
|
+
if ((!caller || !isHostCaller(caller)) && !(error instanceof ContractError && error.code === 'HOST_CONTRACT'))
|
|
50
|
+
return surfaceFailure(error, challenge, where);
|
|
51
|
+
const result = surfaceError(error, where);
|
|
52
|
+
const code = result.status === 401 ? 'AUTH_DENIED' : result.error.code;
|
|
53
|
+
return Response.json({ error: { code, ...(typeof result.error.field === 'string' ? { field: result.error.field } : {}), ...(result.error.path ? { target: result.error.path } : {}) } }, { status: result.status === 401 ? 403 : result.status, headers: { 'cache-control': 'private, no-store' } });
|
|
54
|
+
}
|
|
55
|
+
export { isHostCaller } from "./caller-identity.js";
|
|
56
|
+
export { checkFresh } from "./caller-identity.js";
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/** Request-only JSON reader: bound bytes before copying or parsing, independent of UTF-8 chunk boundaries. */
|
|
2
|
+
/** Bound raw bytes before decoding a request body. */
|
|
3
|
+
export declare function bytes(request: Request, limit: number, fail: (message: string) => never): Promise<Uint8Array>;
|
|
4
|
+
export declare function body(request: Request, limit: number, fail: (message: string) => never): Promise<Record<string, unknown>>;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/** Request-only JSON reader: bound bytes before copying or parsing, independent of UTF-8 chunk boundaries. */
|
|
2
|
+
/** Bound raw bytes before decoding a request body. */
|
|
3
|
+
export async function bytes(request, limit, fail) {
|
|
4
|
+
if (!Number.isSafeInteger(limit) || limit < 1)
|
|
5
|
+
fail("Body limit must be a positive safe integer.");
|
|
6
|
+
const reader = request.body?.getReader();
|
|
7
|
+
let bytes = new Uint8Array(0), length = 0;
|
|
8
|
+
try {
|
|
9
|
+
while (reader) {
|
|
10
|
+
const { done, value } = await reader.read();
|
|
11
|
+
if (done)
|
|
12
|
+
break;
|
|
13
|
+
const end = length + value.byteLength;
|
|
14
|
+
if (end > limit) {
|
|
15
|
+
await reader.cancel().catch(() => { });
|
|
16
|
+
fail(`Request body exceeds ${limit} bytes.`);
|
|
17
|
+
}
|
|
18
|
+
if (end > bytes.length) {
|
|
19
|
+
const grown = new Uint8Array(Math.max(end, Math.min(limit, Math.max(1024, bytes.length * 2))));
|
|
20
|
+
grown.set(bytes);
|
|
21
|
+
bytes = grown;
|
|
22
|
+
}
|
|
23
|
+
bytes.set(value, length);
|
|
24
|
+
length = end;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
finally {
|
|
28
|
+
reader?.releaseLock();
|
|
29
|
+
}
|
|
30
|
+
return bytes.subarray(0, length);
|
|
31
|
+
}
|
|
32
|
+
export async function body(request, limit, fail) {
|
|
33
|
+
const raw = await bytes(request, limit, fail);
|
|
34
|
+
let value;
|
|
35
|
+
try {
|
|
36
|
+
value = JSON.parse(new TextDecoder().decode(raw).trim() || "{}");
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
fail("Expected a JSON body.");
|
|
40
|
+
}
|
|
41
|
+
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
42
|
+
fail("Expected a JSON object.");
|
|
43
|
+
return value;
|
|
44
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/** MCP Apps (ADR-0029 D7): UI resources served beside the tools that render in them. */
|
|
2
|
+
export declare const RESOURCE_MIME_TYPE = "text/html;profile=mcp-app";
|
|
3
|
+
/** What `resources/read` passes an HTML loader. */
|
|
4
|
+
export interface McpAppRender {
|
|
5
|
+
/** The tools this caller's `tools/list` shows on the endpoint, so the HTML names none it cannot see. */
|
|
6
|
+
readonly tools: ReadonlySet<string>;
|
|
7
|
+
/** The request's environment as the handler received it: Worker bindings such as `ASSETS`, or whatever a Bun host passes. */
|
|
8
|
+
readonly env: unknown;
|
|
9
|
+
/** The `resources/read` request, for its origin. */
|
|
10
|
+
readonly request: Request;
|
|
11
|
+
}
|
|
12
|
+
/** The CSP a resource asks its host for, as `_meta.ui.csp`. */
|
|
13
|
+
export type McpAppCsp = {
|
|
14
|
+
readonly connectDomains?: readonly string[];
|
|
15
|
+
readonly resourceDomains?: readonly string[];
|
|
16
|
+
readonly frameDomains?: readonly string[];
|
|
17
|
+
readonly baseUriDomains?: readonly string[];
|
|
18
|
+
};
|
|
19
|
+
/** What a loader may return beside a plain string: the HTML and a CSP known only when it is read. It is sent on `resources/read` and replaces the resource's static `csp` (lists are not merged). */
|
|
20
|
+
export interface McpAppPage {
|
|
21
|
+
readonly html: string;
|
|
22
|
+
readonly csp?: McpAppCsp;
|
|
23
|
+
}
|
|
24
|
+
/** One `ui://` resource. The HTML is a reusable asset and never carries caller data: that travels in tool results. */
|
|
25
|
+
export interface McpAppResource {
|
|
26
|
+
readonly uri: string;
|
|
27
|
+
readonly name: string;
|
|
28
|
+
readonly title?: string;
|
|
29
|
+
readonly description?: string;
|
|
30
|
+
readonly html: string | ((render: McpAppRender) => string | McpAppPage | Promise<string | McpAppPage>);
|
|
31
|
+
readonly csp?: McpAppCsp;
|
|
32
|
+
readonly permissions?: {
|
|
33
|
+
readonly camera?: Record<string, never>;
|
|
34
|
+
readonly microphone?: Record<string, never>;
|
|
35
|
+
readonly geolocation?: Record<string, never>;
|
|
36
|
+
readonly clipboardWrite?: Record<string, never>;
|
|
37
|
+
};
|
|
38
|
+
readonly prefersBorder?: boolean;
|
|
39
|
+
/** `_meta.ui.domain`: the dedicated sandbox origin a host should serve this App from, in the form that host documents. */
|
|
40
|
+
readonly domain?: string;
|
|
41
|
+
/** Tool names whose results this resource renders. */
|
|
42
|
+
readonly renders?: readonly string[];
|
|
43
|
+
/** Views only this App may call (`visibility: ["app"]`); a client without MCP Apps does not see them. A Procedure cannot be hidden from the model. */
|
|
44
|
+
readonly appOnly?: readonly string[];
|
|
45
|
+
}
|
|
46
|
+
export interface McpApps {
|
|
47
|
+
readonly resources: readonly McpAppResource[];
|
|
48
|
+
}
|
|
49
|
+
/** An application-owned contributor resolved after the endpoint's caller gate. */
|
|
50
|
+
export type McpAppsSource = McpApps | ((context: Pick<McpAppRender, "env" | "request">) => McpApps | Promise<McpApps>);
|
|
51
|
+
/** Flatten contributors; `mcp(...)` reads static resources getters once at construction. */
|
|
52
|
+
export declare const resourcesOf: (apps: McpApps | readonly McpApps[]) => McpApps;
|
|
53
|
+
/** Static contributors are checked at construction; resolved factories are checked per request. A request-bound tool table defers tool-link checks until its first request. */
|
|
54
|
+
export declare function linkApps(apps: McpApps | readonly McpApps[], tools?: ReadonlySet<string>, views?: ReadonlySet<string>): {
|
|
55
|
+
resources: McpAppResource[];
|
|
56
|
+
renders: Map<string, string>;
|
|
57
|
+
appOnly: Set<string>;
|
|
58
|
+
};
|
|
59
|
+
/** One endpoint's Apps bound to its tool table; `previous` is reused while the table's names are unchanged. */
|
|
60
|
+
export declare function linkSurface(apps: McpApps | readonly McpApps[], selected: readonly {
|
|
61
|
+
name: string;
|
|
62
|
+
page?: unknown;
|
|
63
|
+
}[], previous?: {
|
|
64
|
+
key: string;
|
|
65
|
+
links: ReturnType<typeof linkApps>;
|
|
66
|
+
}): {
|
|
67
|
+
key: string;
|
|
68
|
+
links: ReturnType<typeof linkApps>;
|
|
69
|
+
};
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { ContractError } from "./contracts.js";
|
|
2
|
+
/** MCP Apps (ADR-0029 D7): UI resources served beside the tools that render in them. */
|
|
3
|
+
export const RESOURCE_MIME_TYPE = "text/html;profile=mcp-app";
|
|
4
|
+
/** Flatten contributors; `mcp(...)` reads static resources getters once at construction. */
|
|
5
|
+
export const resourcesOf = (apps) => ({ resources: (Array.isArray(apps) ? apps : [apps]).flatMap(app => app.resources) });
|
|
6
|
+
/** Static contributors are checked at construction; resolved factories are checked per request. A request-bound tool table defers tool-link checks until its first request. */
|
|
7
|
+
export function linkApps(apps, tools, views) {
|
|
8
|
+
const resources = resourcesOf(apps).resources;
|
|
9
|
+
const uris = new Set(), names = new Set(), renders = new Map(), appOnly = new Set();
|
|
10
|
+
const refuse = (message) => { throw new ContractError("MCP_APP_CONFLICT", message, "mcp:apps", { status: 500 }); };
|
|
11
|
+
for (const resource of resources) {
|
|
12
|
+
if (!resource.uri.startsWith("ui://"))
|
|
13
|
+
refuse(`MCP App resource '${resource.name}' must use a ui:// URI.`);
|
|
14
|
+
if (uris.has(resource.uri))
|
|
15
|
+
refuse(`MCP App resource URI '${resource.uri}' is registered twice.`);
|
|
16
|
+
if (names.has(resource.name))
|
|
17
|
+
refuse(`MCP App resource name '${resource.name}' is registered twice.`);
|
|
18
|
+
uris.add(resource.uri);
|
|
19
|
+
names.add(resource.name);
|
|
20
|
+
for (const tool of [...resource.renders ?? [], ...resource.appOnly ?? []]) {
|
|
21
|
+
if (tools && !tools.has(tool))
|
|
22
|
+
refuse(`MCP App resource '${resource.name}' names tool '${tool}', which this endpoint does not serve.`);
|
|
23
|
+
if (renders.has(tool) && renders.get(tool) !== resource.uri)
|
|
24
|
+
refuse(`Tool '${tool}' is claimed by two MCP App resources.`);
|
|
25
|
+
renders.set(tool, resource.uri);
|
|
26
|
+
}
|
|
27
|
+
// an App acts for the user without the model seeing the call, so only a read may be hidden from the model
|
|
28
|
+
for (const tool of resource.appOnly ?? []) {
|
|
29
|
+
if (views && !views.has(tool))
|
|
30
|
+
refuse(`App-only tool '${tool}' must be a View this endpoint serves.`);
|
|
31
|
+
appOnly.add(tool);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return { resources, renders, appOnly };
|
|
35
|
+
}
|
|
36
|
+
/** One endpoint's Apps bound to its tool table; `previous` is reused while the table's names are unchanged. */
|
|
37
|
+
export function linkSurface(apps, selected, previous) {
|
|
38
|
+
const key = JSON.stringify(selected.map(tool => tool.name).sort());
|
|
39
|
+
return previous?.key === key ? previous : { key, links: linkApps(apps, new Set(selected.map(tool => tool.name)), new Set(selected.filter(tool => tool.page).map(tool => tool.name))) };
|
|
40
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Caller } from "./contracts.js";
|
|
2
|
+
import type { Tool } from "./mcp.js";
|
|
3
|
+
export declare function callTool<Database, Handlers>(tool: Tool<Database, Handlers>, raw: Record<string, unknown>, db: Database, caller: Caller, handlers: Handlers): Promise<unknown>;
|
|
4
|
+
/** Transport input is checked before acquiring an application-owned native handle. */
|
|
5
|
+
export declare function callToolLazy<Database, Handlers>(tool: Tool<Database, Handlers>, raw: Record<string, unknown>, getDb: () => Database, caller: Caller, handlers: Handlers, dryRun?: () => unknown): Promise<unknown>;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { convert, invalid } from "./surface.js";
|
|
2
|
+
import { checkPageLimit } from "./paging.js";
|
|
3
|
+
export async function callTool(tool, raw, db, caller, handlers) {
|
|
4
|
+
return callToolLazy(tool, raw, () => db, caller, handlers);
|
|
5
|
+
}
|
|
6
|
+
/** Transport input is checked before acquiring an application-owned native handle. */
|
|
7
|
+
export async function callToolLazy(tool, raw, getDb, caller, handlers, dryRun) {
|
|
8
|
+
if (tool.page) {
|
|
9
|
+
const { limit, cursor, ...input } = raw;
|
|
10
|
+
if (limit !== undefined)
|
|
11
|
+
checkPageLimit(limit, tool.path);
|
|
12
|
+
if (cursor !== undefined && typeof cursor !== "string")
|
|
13
|
+
invalid("Invalid paging options.", tool.path);
|
|
14
|
+
await tool.validate(input);
|
|
15
|
+
convert(input, tool.convert);
|
|
16
|
+
if (dryRun)
|
|
17
|
+
return dryRun();
|
|
18
|
+
return tool.page(getDb(), caller, input, { limit: limit, cursor: cursor });
|
|
19
|
+
}
|
|
20
|
+
const input = await tool.validate(raw);
|
|
21
|
+
convert(input, tool.convert);
|
|
22
|
+
if (dryRun)
|
|
23
|
+
return dryRun();
|
|
24
|
+
return tool.run(getDb(), caller, input, handlers);
|
|
25
|
+
}
|