@aotter/mantle 0.2.0-alpha.5 → 0.2.0-alpha.7
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 +152 -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 +154 -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 +31 -0
- package/dist/auth/oauth.js +124 -0
- package/dist/auth/resource-seeds.js +10 -0
- package/dist/auth/routes.d.ts +32 -0
- package/dist/auth/{createAuthRoutes.js → routes.js} +130 -35
- package/dist/build/compiler.d.ts +790 -0
- package/dist/build/compiler.js +6971 -0
- package/dist/{spec → build/spec}/domain/model/ManifestGrammar.d.ts +28 -42
- package/dist/{spec → build/spec}/domain/model/RuntimePlan.d.ts +77 -3
- package/dist/{spec → build/spec}/domain/model/SqlIr.d.ts +35 -6
- package/dist/build/spec/domain/model/UserFields.d.ts +20 -0
- package/dist/{spec → build/spec}/domain/service/PlanFingerprint.d.ts +2 -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-ZIQVLA7X.js +363 -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 +17 -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 +204 -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 +84 -0
- package/dist/infrastructure/cli.js +101 -0
- package/dist/infrastructure/generate.d.ts +14 -0
- package/dist/infrastructure/generate.js +174 -0
- package/dist/infrastructure/generateAuth.d.ts +8 -0
- package/dist/infrastructure/generateAuth.js +17 -0
- package/dist/infrastructure/inputs.js +36 -0
- package/dist/infrastructure/wrangler.js +71 -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/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 +95 -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 +38 -0
- package/dist/kernel/host-caller.js +55 -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 +49 -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 +288 -0
- package/dist/kernel/mcp.d.ts +101 -0
- package/dist/kernel/mcp.js +25 -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 +63 -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 +41 -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 +75 -0
- package/dist/kernel/web.js +155 -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 +142 -0
- package/dist/usecase/adminDescriptors.js +153 -0
- package/dist/usecase/generate.js +164 -0
- package/dist/usecase/handlers.js +21 -0
- package/dist/usecase/mcp-media.js +17 -0
- package/dist/usecase/mcp.js +96 -0
- package/dist/usecase/paging.js +72 -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/translations.js +78 -0
- package/dist/usecase/ttl.js +20 -0
- package/dist/usecase/validation.js +132 -0
- package/dist/usecase/web.js +22 -0
- package/docs/examples/README.md +31 -16
- package/docs/examples/app-shell/README.md +48 -0
- package/docs/examples/app-shell/package.json +34 -0
- package/docs/examples/app-shell/pnpm-workspace.yaml +8 -0
- package/docs/examples/app-shell/smoke-kit.mjs +100 -0
- package/docs/examples/app-shell/src/admin.ts +10 -0
- package/docs/examples/app-shell/src/auth.ts +55 -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 +2 -1
- package/docs/examples/app-shell/worker-configuration.d.ts +22 -0
- package/docs/examples/app-shell/wrangler.jsonc +61 -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 +74 -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 +7 -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 +171 -0
- package/docs/examples/purchasing/src/admin.ts +12 -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 +68 -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 +73 -0
- package/docs/handbook/cloudflare/authentication.md +142 -212
- package/docs/handbook/cloudflare/chatgpt-sites.md +4 -113
- package/docs/handbook/cloudflare/deploy-and-operate.md +20 -103
- package/docs/handbook/cloudflare/media-r2.md +62 -133
- package/docs/handbook/cloudflare/service-entry.md +180 -116
- 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 +10 -141
- package/docs/handbook/concepts/procedures-and-triggers.md +5 -162
- package/docs/handbook/concepts/runtime-and-adapters.md +15 -183
- 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-extensions.md +20 -0
- package/docs/handbook/guides/admin-ui.md +5 -163
- package/docs/handbook/guides/agent-setup.md +5 -18
- package/docs/handbook/guides/email.md +86 -0
- package/docs/handbook/guides/mcp-apps.md +44 -0
- package/docs/handbook/guides/native-admin.md +298 -0
- package/docs/handbook/guides/native-execution.md +132 -0
- package/docs/handbook/guides/oauth.md +105 -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 +164 -30
- package/docs/handbook/reference/admin-descriptors.md +88 -0
- package/docs/handbook/reference/authorization.md +44 -52
- package/docs/handbook/reference/describe.md +56 -0
- package/docs/handbook/reference/diagnostics.md +15 -78
- package/docs/handbook/reference/features.md +45 -53
- package/docs/handbook/reference/manifest.md +6 -69
- package/docs/handbook/reference/procedure.md +9 -117
- package/docs/handbook/reference/schema.md +65 -172
- package/docs/handbook/reference/site-config.md +5 -65
- package/docs/handbook/reference/surface.md +279 -93
- package/docs/handbook/reference/trigger.md +24 -93
- package/docs/handbook/reference/view.md +32 -158
- package/docs/handbook/releases/index.md +124 -15
- package/docs/handbook/start/overview.md +9 -56
- package/docs/handbook/start/project-and-cli.md +40 -141
- package/docs/handbook/start/quickstart-worker.md +38 -116
- package/docs/skills/develop/SKILL.md +34 -117
- package/docs/skills/develop/mcp-app.md +37 -77
- package/docs/skills/integrate/SKILL.md +42 -84
- package/docs/skills/media-gc/SKILL.md +14 -3
- package/docs/skills/provision/SKILL.md +25 -88
- package/docs/skills/update/SKILL.md +19 -40
- package/docs/source/scripts/postgres-adapter.ts +101 -0
- package/docs/upgrade-0.1-to-0.2.md +26 -10
- package/package.json +97 -112
- package/skills/.keep +0 -0
- package/skills/README.md +72 -0
- package/skills/mantle/SKILL.md +135 -0
- package/skills/mantle/references/local-testing.md +11 -0
- package/skills/mantle/references/web.md +41 -0
- package/skills/mantle/references/website.md +47 -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 -22
- package/dist/admin/createAdminSurface.d.ts.map +0 -1
- package/dist/admin/createAdminSurface.js +0 -592
- 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/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 -6
- package/dist/admin/index.d.ts.map +0 -1
- package/dist/admin/index.js +0 -6
- 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 -4566
- package/dist/auth/buildAuth.d.ts.map +0 -1
- package/dist/auth/buildAuth.js +0 -311
- package/dist/auth/buildAuth.js.map +0 -1
- package/dist/auth/callerResolver.d.ts +0 -48
- package/dist/auth/callerResolver.d.ts.map +0 -1
- package/dist/auth/callerResolver.js +0 -49
- 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.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 -503
- package/dist/auth/createMantleAuth.js.map +0 -1
- package/dist/auth/db.d.ts +0 -17
- package/dist/auth/db.d.ts.map +0 -1
- package/dist/auth/db.js +0 -24
- 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 -65
- package/dist/bun/index.d.ts.map +0 -1
- package/dist/bun/index.js +0 -130
- 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 -353
- package/dist/cli/preset.js.map +0 -1
- package/dist/cloudflare/index.d.ts +0 -21
- package/dist/cloudflare/index.d.ts.map +0 -1
- package/dist/cloudflare/index.js +0 -14
- 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 -41
- 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 -17
- 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/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 -65
- package/dist/core/sql/allowlist.d.ts.map +0 -1
- package/dist/core/sql/allowlist.js +0 -705
- 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 -121
- package/dist/core/sql/policy.d.ts.map +0 -1
- package/dist/core/sql/policy.js +0 -379
- 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 -76
- package/dist/core/sql/run.d.ts.map +0 -1
- package/dist/core/sql/run.js +0 -267
- 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 -13
- package/dist/d1/executor.d.ts.map +0 -1
- package/dist/d1/executor.js +0 -91
- 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 -20
- package/dist/postgres/adapter.d.ts.map +0 -1
- package/dist/postgres/adapter.js +0 -44
- 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 -92
- package/dist/postgres/driver.d.ts.map +0 -1
- package/dist/postgres/driver.js +0 -110
- package/dist/postgres/driver.js.map +0 -1
- package/dist/postgres/executor.d.ts +0 -20
- package/dist/postgres/executor.d.ts.map +0 -1
- package/dist/postgres/executor.js +0 -69
- package/dist/postgres/executor.js.map +0 -1
- package/dist/postgres/index.d.ts +0 -7
- package/dist/postgres/index.d.ts.map +0 -1
- package/dist/postgres/index.js +0 -7
- 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 -157
- 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 -121
- package/dist/postgres/print.js.map +0 -1
- package/dist/postgres/storage.d.ts +0 -19
- package/dist/postgres/storage.d.ts.map +0 -1
- package/dist/postgres/storage.js +0 -201
- package/dist/postgres/storage.js.map +0 -1
- package/dist/postgres/textRows.d.ts +0 -10
- package/dist/postgres/textRows.d.ts.map +0 -1
- package/dist/postgres/textRows.js +0 -44
- package/dist/postgres/textRows.js.map +0 -1
- package/dist/postgres/validator.d.ts +0 -12
- package/dist/postgres/validator.d.ts.map +0 -1
- package/dist/postgres/validator.js +0 -46
- 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 -149
- 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 -42
- package/dist/spec/domain/service/SchemaAdminUiChecker.d.ts.map +0 -1
- package/dist/spec/domain/service/SchemaAdminUiChecker.js +0 -289
- 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 -53
- 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 -282
- 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 -296
- 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 -12
- package/dist/testing/cases/corpus.d.ts.map +0 -1
- package/dist/testing/cases/corpus.js +0 -91
- package/dist/testing/cases/corpus.js.map +0 -1
- package/dist/testing/cases/policy.d.ts +0 -74
- package/dist/testing/cases/policy.d.ts.map +0 -1
- package/dist/testing/cases/policy.js +0 -142
- 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 -32
- 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 -33
- 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 -124
- package/docs/adr/0038-bun-native-host.md +0 -63
- package/docs/adr/README.md +0 -96
- 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 -481
- 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/examples/{reference-service → app-shell}/.dev.vars.example +0 -0
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# Transactional email
|
|
2
|
+
|
|
3
|
+
Import the optional email port from `@aotter/mantle/email`. Mantle supplies
|
|
4
|
+
`EmailSender`, `EmailSendArgs`, English `signInCodeEmail`, `signInLinkEmail`
|
|
5
|
+
and `adminInvitationEmail` templates, and `ConsoleEmailSender` for local
|
|
6
|
+
development. Applications select and configure their sender and Better Auth
|
|
7
|
+
plugins.
|
|
8
|
+
|
|
9
|
+
`send({ to, subject, text, html?, locale, category? })` returns `Promise<void>`.
|
|
10
|
+
The templates return `{ subject, text }`, with the same English text as 0.2;
|
|
11
|
+
they do not translate or consume `locale`. Pass the recipient's locale through
|
|
12
|
+
to the sender, which can select localized templates. Existing categories are
|
|
13
|
+
`auth.email-otp.<type>`, `auth.magic-link.sign-in` and `auth.admin-invitation`.
|
|
14
|
+
|
|
15
|
+
## Application wiring
|
|
16
|
+
|
|
17
|
+
```ts
|
|
18
|
+
import { emailOTP } from "better-auth/plugins";
|
|
19
|
+
import { hashEmailOtp } from "@aotter/mantle/auth/hardening";
|
|
20
|
+
import { signInCodeEmail, adminInvitationEmail, type EmailSender } from "@aotter/mantle/email";
|
|
21
|
+
|
|
22
|
+
const locale = (request?: Request) =>
|
|
23
|
+
request?.headers.get("accept-language")?.split(",")[0]?.split(";")[0]?.trim() || "en";
|
|
24
|
+
|
|
25
|
+
// Include this plugin in the app's Better Auth options.
|
|
26
|
+
export const emailPlugin = (sender: EmailSender, secret: string) => emailOTP({
|
|
27
|
+
storeOTP: { hash: otp => hashEmailOtp(secret, otp) },
|
|
28
|
+
sendVerificationOTP: ({ email, otp, type }, ctx) => sender.send({
|
|
29
|
+
to: email, ...signInCodeEmail(otp), locale: locale(ctx?.request),
|
|
30
|
+
category: `auth.email-otp.${type}`,
|
|
31
|
+
}),
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
// Use the configured, trusted application origin, never an incoming Host or
|
|
35
|
+
// Origin header. The application grants the OSS "admin" role before sending.
|
|
36
|
+
export const inviteEmail = (sender: EmailSender, origin: string, to: string, language: string) =>
|
|
37
|
+
sender.send({
|
|
38
|
+
to, ...adminInvitationEmail("admin", new URL("/admin/sign-in", origin).href),
|
|
39
|
+
locale: language, category: "auth.admin-invitation",
|
|
40
|
+
});
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
For magic links, pass Better Auth's generated URL to `signInLinkEmail(url)`;
|
|
44
|
+
configure Better Auth's `baseURL` and `trustedOrigins` to prevent untrusted
|
|
45
|
+
callback destinations. Templates preserve their input as plain text and never
|
|
46
|
+
interpret it as HTML. If a sender supplies `html`, it owns escaping untrusted
|
|
47
|
+
text and attributes and validating link destinations. Pass structured fields
|
|
48
|
+
to the provider; do not interpolate them into raw MIME headers.
|
|
49
|
+
|
|
50
|
+
Use `new ConsoleEmailSender()` only in explicitly selected local development.
|
|
51
|
+
It logs recipients, codes and links and sends nothing; never select it in
|
|
52
|
+
production or log live messages in a production sender. Provider failures
|
|
53
|
+
reject the promise; the application owns error handling and retry policy.
|
|
54
|
+
|
|
55
|
+
**Never let the response wait for the send.** Better Auth calls
|
|
56
|
+
`sendVerificationOTP` for `email-verification` and `forget-password` only when
|
|
57
|
+
the user exists, so a response that waits for the provider reveals whether an
|
|
58
|
+
account exists. Configure Better Auth's `advanced.backgroundTasks.handler` (on
|
|
59
|
+
Workers, `ctx.waitUntil`) so the send runs after the response, as 0.2 did; the
|
|
60
|
+
app-owned auth template wires it.
|
|
61
|
+
|
|
62
|
+
## Cloudflare Email Service binding
|
|
63
|
+
|
|
64
|
+
Use a verified sender and a Cloudflare Email Service `send_email` binding.
|
|
65
|
+
The binding composes the message natively; no mail SDK or MIME builder is needed.
|
|
66
|
+
|
|
67
|
+
```jsonc
|
|
68
|
+
{ "send_email": [{ "name": "EMAIL" }] }
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
```ts
|
|
72
|
+
import type { SendEmail } from "@cloudflare/workers-types";
|
|
73
|
+
import type { EmailSender } from "@aotter/mantle/email";
|
|
74
|
+
|
|
75
|
+
interface Env { EMAIL: SendEmail; EMAIL_FROM: string }
|
|
76
|
+
export const emailSender = (env: Env): EmailSender => ({
|
|
77
|
+
async send({ to, subject, text, html }) {
|
|
78
|
+
await env.EMAIL.send({ from: env.EMAIL_FROM, to, subject, text, html });
|
|
79
|
+
},
|
|
80
|
+
});
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
The English example ignores `locale` and `category`; a localized provider may
|
|
84
|
+
use both. The binding's verified sender and recipient restrictions still apply.
|
|
85
|
+
This example does not provision a sender, enable an auth method or send mail
|
|
86
|
+
without application wiring.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# MCP Apps
|
|
2
|
+
|
|
3
|
+
Generated `mcp()` accepts app-owned UI resources on either endpoint. Each
|
|
4
|
+
endpoint accepts one contributor or an array; Admin uses the same public hook:
|
|
5
|
+
|
|
6
|
+
```ts
|
|
7
|
+
import type { McpApps } from '@aotter/mantle/mcp';
|
|
8
|
+
import { adminMcpApps } from '@aotter/mantle-admin/mcp';
|
|
9
|
+
import { mcp } from './generated/mcp.js';
|
|
10
|
+
|
|
11
|
+
const app: McpApps = { resources: [{
|
|
12
|
+
uri: 'ui://my-app/records', name: 'my-app-records',
|
|
13
|
+
html: () => loadAppHtml(), renders: ['records'],
|
|
14
|
+
}] };
|
|
15
|
+
const handler = mcp({ db, caller, apps: {
|
|
16
|
+
public: app, admin: [adminMcpApps(adminOptions), adminApp],
|
|
17
|
+
} });
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Use your own `ui://<app>/…` prefix. `ui://mantle-admin/…` is reserved for Admin.
|
|
21
|
+
HTML is reusable static content; caller-specific data comes from tool results.
|
|
22
|
+
Build the front end with the official `@modelcontextprotocol/ext-apps` client.
|
|
23
|
+
`renders` links tools to `_meta.ui.resourceUri`; `appOnly` adds
|
|
24
|
+
`visibility: ["app"]`. Both name tools actually exposed on that endpoint.
|
|
25
|
+
Resources may supply CSP, permissions and `prefersBorder`.
|
|
26
|
+
|
|
27
|
+
For static tool tables, construction checks contributors. Request-bound tool tables check on the first matching request and recheck changed tool names. Duplicate
|
|
28
|
+
resource URIs or names, conflicting tool ownership, and absent or foreign-endpoint
|
|
29
|
+
tools throw `ContractError` with code `MCP_APP_CONFLICT`. HTML loaders never run during import or handler construction. Treat descriptors as
|
|
30
|
+
immutable after construction. HTML loads only on `resources/read`; failures
|
|
31
|
+
return a redacted internal error.
|
|
32
|
+
|
|
33
|
+
Generated media-enabled handlers keep the same cache while resolving their tool
|
|
34
|
+
table against each request's environment. Database handles, storage and Caller
|
|
35
|
+
are never retained in that cache. The low-level SDK also accepts an async
|
|
36
|
+
`(request, env) => tools` resolver; its names must match the endpoint's App
|
|
37
|
+
catalogue. If its tool names change, those links are checked again, and a call
|
|
38
|
+
always uses the current request's tool table.
|
|
39
|
+
|
|
40
|
+
Clients advertise `io.modelcontextprotocol/ui` and MIME type
|
|
41
|
+
`text/html;profile=mcp-app` in initialization capabilities or, for stateless
|
|
42
|
+
requests, in `params._meta["io.modelcontextprotocol/clientCapabilities"]`.
|
|
43
|
+
An explicit capability declaration without UI support receives no UI resources, UI tool metadata or App-only tools. A stateless request with no capability declaration is treated as unknown and retains App support. Other tools retain their existing validation,
|
|
44
|
+
authorization, caller, origin and database behavior.
|
|
@@ -0,0 +1,298 @@
|
|
|
1
|
+
# Native Admin
|
|
2
|
+
|
|
3
|
+
Select Admin explicitly; use the exact installed SDK/Admin versions.
|
|
4
|
+
|
|
5
|
+
## Packages and generation
|
|
6
|
+
|
|
7
|
+
There are three packages, pinned to matching versions:
|
|
8
|
+
|
|
9
|
+
| Package | Owns |
|
|
10
|
+
| --- | --- |
|
|
11
|
+
| `@aotter/mantle` | One native Core SDK: compiler, generator, query kernel and optional auth/surface primitives. |
|
|
12
|
+
| `@aotter/mantle-admin` | Optional Admin server, SPA, extensions, design preview and Admin MCP App. |
|
|
13
|
+
| `@aotter/mantle-ui` | Shared UI kit and generic interaction controller. |
|
|
14
|
+
|
|
15
|
+
The SDK does not import Admin or its assets. Selecting Admin emits application
|
|
16
|
+
code that imports its small public server helpers. The SPA retains all 22
|
|
17
|
+
languages, rich editors and the developer workspace; language, editor and
|
|
18
|
+
workspace chunks load on demand. It is not part of the SDK query bundle.
|
|
19
|
+
|
|
20
|
+
Select Admin explicitly:
|
|
21
|
+
|
|
22
|
+
```sh
|
|
23
|
+
pnpm exec mantle generate cloudflare-d1 generated manifests/*.yaml --admin
|
|
24
|
+
pnpm exec tsc --noEmit
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Targets are `bun-sqlite`, `bun-postgres`, `cloudflare-d1` and
|
|
28
|
+
`cloudflare-postgres`. Programmatic generation accepts `admin: true` with the
|
|
29
|
+
same target/source options. Optional `--auth`, `--site` and `--admin-extensions`
|
|
30
|
+
modules follow their [generation contracts](../cloudflare/service-entry.md).
|
|
31
|
+
Generate, typecheck, implement every printed `Handlers` key, then typecheck
|
|
32
|
+
again. Commit generated TypeScript, SQL and Wrangler edits. Never edit the
|
|
33
|
+
output by hand; regenerate after merging authored inputs. Use the matching
|
|
34
|
+
CLI's `--check` with the same selected options in CI.
|
|
35
|
+
|
|
36
|
+
Apply initial `schema.sql` and selected auth/site DDL only during explicit
|
|
37
|
+
setup of a new database. Existing data needs reviewed migrations. Imports and
|
|
38
|
+
metadata factories do no storage work. Requests run no DDL or storage checks;
|
|
39
|
+
the only request-time write outside app operations is the configured OAuth
|
|
40
|
+
resource row (see [OAuth](oauth.md)).
|
|
41
|
+
|
|
42
|
+
## Mount the API and console
|
|
43
|
+
|
|
44
|
+
```ts
|
|
45
|
+
import { admin } from '@aotter/mantle-admin/server';
|
|
46
|
+
import { entries } from '@aotter/mantle-admin/server/entries';
|
|
47
|
+
import { adminBindings } from './generated/admin-bindings.js';
|
|
48
|
+
import { handlers } from './handlers.js';
|
|
49
|
+
import { resolveRequestCaller } from './identity.js'; // application-owned
|
|
50
|
+
|
|
51
|
+
const bindings = adminBindings({ handlers });
|
|
52
|
+
const api = admin(bindings.metadata, bindings.views, bindings.operations, {
|
|
53
|
+
db: (env: Env) => env.DB,
|
|
54
|
+
caller: resolveRequestCaller,
|
|
55
|
+
routes: entries(bindings.schemas, bindings.adapter),
|
|
56
|
+
developerViews: bindings.developerViews,
|
|
57
|
+
});
|
|
58
|
+
// In app-owned fetch: await api(request, env); undefined means fall through.
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Ref operations run with the handlers given to `adminBindings({ handlers })`; `admin()` needs no second copy. Without ref Procedures, omit `handlers` and use `adminBindings()`. The app's
|
|
62
|
+
resolver verifies the caller; Admin accepts an admin cookie session classified from
|
|
63
|
+
Better Auth’s admin plugin `adminRoles` (default `["admin"]`), and cookie writes
|
|
64
|
+
retain the shared same-origin check. Comma-separated roles are supported.
|
|
65
|
+
Do not manufacture an admin/system Caller from request input. Views and operations
|
|
66
|
+
also retain their own generated `requires` checks. Share one request-local
|
|
67
|
+
resolver with auth, consent, MCP and REST; preserve its response cookie headers.
|
|
68
|
+
|
|
69
|
+
The API handles `/admin/api/*`. The app separately serves
|
|
70
|
+
`@aotter/mantle-admin/admin/index.html` and its directory at `/admin`, including
|
|
71
|
+
client routes such as `/admin/sign-in`; missing assets stay 404. Do not serve
|
|
72
|
+
that directory bare: `adminShell(request, assets)` from
|
|
73
|
+
`@aotter/mantle-admin/server` returns the shell for every `/admin` page with
|
|
74
|
+
`frame-ancestors 'none'`, `X-Frame-Options: DENY`, `no-store` and `nosniff`, and
|
|
75
|
+
refuses traversal, encoded separators and NUL (`assets` fetches one built file
|
|
76
|
+
by path; a 404 means missing; it returns `undefined` for other requests). Read the
|
|
77
|
+
installed Admin README for asset bindings, CSP/import-map hashes and preview
|
|
78
|
+
framing. `@aotter/mantle-ui` continues to supply the shared kit. See
|
|
79
|
+
[service composition](../cloudflare/service-entry.md) for the complete Fetch/Bun wiring.
|
|
80
|
+
|
|
81
|
+
## HTTP routes
|
|
82
|
+
|
|
83
|
+
All paths below start with `/admin/api` and require an admin session; mutations
|
|
84
|
+
also require the shared same-origin check. Mount `entries(...)` for collection
|
|
85
|
+
routes. Send JSON with `Content-Type: application/json`.
|
|
86
|
+
|
|
87
|
+
| Method and path | Request / response |
|
|
88
|
+
| --- | --- |
|
|
89
|
+
| `POST /entries` | Body `{ collection, data }`; creates an entry. |
|
|
90
|
+
| `GET /entries/{id}?collection=<schema>` | Reads an entry and its current `entry.version`. |
|
|
91
|
+
| `PATCH /entries/{id}?collection=<schema>` | Body `{ data, expectedVersion }`; sends the observed version, not the next one. Publishing entries must be drafts. |
|
|
92
|
+
| `POST /entries/{id}/publish?collection=<schema>` | Body `{ expectedVersion }`; validates required data before publishing. |
|
|
93
|
+
| `POST /entries/{id}/unpublish?collection=<schema>` | Body `{ expectedVersion }`; returns the entry to draft. |
|
|
94
|
+
| `POST /operations/{name}` | Body is the Procedure's input; runs an Admin operation (a Procedure with `requires: ctx.admin` or a `target`). |
|
|
95
|
+
| `GET /views/{name}` | Generated admin View query parameters plus `limit`/`cursor`; returns `{ rows, nextCursor? }`. |
|
|
96
|
+
| `GET /me` | Returns `{ userId, role, admin, login, image }` for the signed-in caller. |
|
|
97
|
+
|
|
98
|
+
Entry create/read/patch/transitions return
|
|
99
|
+
`{ collection, entry, parentEntryId, parentEntryTitle, related }`; the entry has
|
|
100
|
+
`{ id, collection, locale, status, version, data, created_at, updated_at }`.
|
|
101
|
+
Transitions accept `{}` to use the current version; tests should send the
|
|
102
|
+
observed `expectedVersion` to catch stale writes. Generic writes reject native
|
|
103
|
+
columns inside `data`. See [publishing](../concepts/lifecycle-and-locales.md).
|
|
104
|
+
|
|
105
|
+
## Generated reads and writes
|
|
106
|
+
|
|
107
|
+
`adminBindings()` returns static metadata, schemas, views, operations and the
|
|
108
|
+
selected native adapter. Metadata-only endpoints add no storage read of their
|
|
109
|
+
own; authentication, optional user enrichment or site loading may still query.
|
|
110
|
+
The shared get/page/statistics functions select quoted tables and columns only
|
|
111
|
+
from generated whitelists. Search/filter/cursor/range values are binds, never
|
|
112
|
+
SQL identifiers. Core compiles scope, TTL, publishing and parent predicates;
|
|
113
|
+
there is no request-time manifest/schema/SQL AST interpreter.
|
|
114
|
+
|
|
115
|
+
Scoped rows remain private even from other admin. Translation reads merge at
|
|
116
|
+
most one visible parent with the matching join key; scoped parents correlate
|
|
117
|
+
scope in every mode, including trusted reads. Child declarations win over parent
|
|
118
|
+
fields, and a parent's public same-named field cannot replace a child's private
|
|
119
|
+
scope. Unrelated scoped Schemas cannot hide an ordinary public field. Scope and
|
|
120
|
+
storage-only fields are absent from entry data and generated CSV export fields.
|
|
121
|
+
Geo remains experimental: existing native outputs are readable, not generically
|
|
122
|
+
editable. Metadata derives child relationships from `allCollections`.
|
|
123
|
+
|
|
124
|
+
Entry queries validate indexed sort fields, directions, filters and limits
|
|
125
|
+
1–500. `filter_field` and JSON `filter_values` are paired; each batch has at most
|
|
126
|
+
50 scalar values. Search reuses native SQLite/D1 FTS and PostgreSQL behavior.
|
|
127
|
+
Pages keep native NULL ordering, id ties, microsecond timestamp keys and an
|
|
128
|
+
opaque cursor bound to caller, input, filters and ordering. Malformed/foreign
|
|
129
|
+
cursors and unknown selectors fail before acquiring the route's DB handle;
|
|
130
|
+
the app's authentication may already have used its own database. Admin manifest
|
|
131
|
+
Views retain their complete proved key tuple, not a two-key approximation.
|
|
132
|
+
|
|
133
|
+
Generated full/partial input checks validate creates, edits, operations and
|
|
134
|
+
filters. Plain titled string `oneOf` choices use the same enum checks; general
|
|
135
|
+
or constrained alternatives remain refused. Draft creates can be incomplete;
|
|
136
|
+
publish checks required data. Publishing edits apply only to drafts. Read-only
|
|
137
|
+
collections refuse generic edits while their declared Procedures can still run.
|
|
138
|
+
|
|
139
|
+
Writes use compiler-printed native Procedure frames, bind recipes and only the
|
|
140
|
+
supplied field fragments. They do not update omitted columns or run a schema
|
|
141
|
+
interpreter. PATCH retains its visible-row read and exact OCC check; the mutation
|
|
142
|
+
returns its row. Missing/excluded rows are 404; stale locks or failed state guards
|
|
143
|
+
are 409. Safe versions are numbers; exact native int64 strings can be bound
|
|
144
|
+
without rounding, while unsafe numbers are rejected. The console keeps versions
|
|
145
|
+
outside its supported safe range read-only rather than casting them to numbers.
|
|
146
|
+
Full cross-target int64 output parity remains incomplete; bare driver values
|
|
147
|
+
are unchanged.
|
|
148
|
+
|
|
149
|
+
Publishing/custom Admin operations load existing generated Procedure modules
|
|
150
|
+
when invoked. Ref handlers retain the original typed `{ caller, db, store }`
|
|
151
|
+
context and authorization. Ordinary SDK/REST/MCP emission and the synchronous
|
|
152
|
+
public Store API are unchanged. Selected JSON boundaries preserve declared JSON/boolean conversions and safe
|
|
153
|
+
cross-target integer normalization from SQL text; exact unsafe values are not rounded. Bare
|
|
154
|
+
Views, Store and SQL Procedures keep their driver-native contract. Native
|
|
155
|
+
unique/OCC errors and uncertain transaction outcomes keep their contracts. A 503 outcome may mean a write committed: do not
|
|
156
|
+
retry automatically or turn it into a success by reading afterward. Core
|
|
157
|
+
`statusOf` maps core codes only. App media/site/partial errors use `mediaError`
|
|
158
|
+
from `@aotter/mantle/media`; other custom ContractErrors must carry an explicit
|
|
159
|
+
status, otherwise the boundary returns a redacted 500. Do not leak native
|
|
160
|
+
error messages, tokens or credentials to clients.
|
|
161
|
+
|
|
162
|
+
## Statistics and extensions
|
|
163
|
+
|
|
164
|
+
`GET /admin/api/collections/{name}/statistics?range=7d` supports primary or
|
|
165
|
+
standalone collections; folded children/translations are not primary routes.
|
|
166
|
+
Ranges are `1h`, `24h`, `7d` (default) and `20d`. It returns
|
|
167
|
+
`{ total, buckets, from, to, bucketMs }` in one native aggregate query. `total`
|
|
168
|
+
counts currently caller-visible retained rows, including rows outside the
|
|
169
|
+
requested window; expired rows are excluded. Buckets use `[from, to)` and the
|
|
170
|
+
same generated scope/TTL/parent policy. The shared native function accepts at
|
|
171
|
+
most 20 days and 480 buckets, with safe microsecond arithmetic. Temporal enum
|
|
172
|
+
subtypes return original metadata keys; equivalent offset spellings count once
|
|
173
|
+
under the first key, and separate microseconds remain distinct.
|
|
174
|
+
|
|
175
|
+
Site/media/identity, extensions, WebMCP, design preview and MCP Apps are selected
|
|
176
|
+
through the public Admin modules, not added to the SDK kernel. Extension
|
|
177
|
+
contribution declarations go to `--admin-extensions`; executable handlers and
|
|
178
|
+
sources stay in app-owned server configuration. Raw extension handlers receive
|
|
179
|
+
the original Request without pre-reading, cloning or rebuilding it. Custom
|
|
180
|
+
`bodyLimit` checks Content-Length before DB access; the app must bound reads of
|
|
181
|
+
unknown-length raw streams. Built-in JSON routes use the shared bounded reader
|
|
182
|
+
(default 1,000,000 bytes) after caller/origin checks and before DB acquisition.
|
|
183
|
+
The API advertises capabilities for actually mounted routes, including statistics.
|
|
184
|
+
|
|
185
|
+
## Acceptance
|
|
186
|
+
|
|
187
|
+
Use a disposable database for native tests, then exercise actual OTP sign-in,
|
|
188
|
+
the Admin console and member frontend. Check invalid input, another tenant's
|
|
189
|
+
rows, expired rows, publishing transitions, related/translated entries, paging,
|
|
190
|
+
statistics, CSV, operations/ref effects, stale OCC and persisted state after a
|
|
191
|
+
restart. Recheck extensions, previews, all supported UI languages and the
|
|
192
|
+
complete developer workspace. A generated file, typecheck or HTTP 200 alone
|
|
193
|
+
does not verify these flows.
|
|
194
|
+
|
|
195
|
+
Native adapter evidence covers all four targets; local D1 uses real workerd.
|
|
196
|
+
Initial Admin module imports perform no DB work. Startup graphs, uploaded total,
|
|
197
|
+
SDK package bytes and query/write/cold timing are separate checks. Extra selected
|
|
198
|
+
Admin indexes add write/storage maintenance; an indexed SELECT plan does not
|
|
199
|
+
prove unchanged write latency. Report remaining gates honestly; this guide does not promise measured performance.
|
|
200
|
+
|
|
201
|
+
## Extension declarations
|
|
202
|
+
|
|
203
|
+
Pass full declarations to `--admin-extensions`. Generation emits
|
|
204
|
+
`extensionMetadata` in `admin-descriptors.ts` and compiled settings checks plus
|
|
205
|
+
`extensionBindings` in `admin-extensions.ts`. Bind the same runtime definitions
|
|
206
|
+
(including handlers) with `extensionBindings(adminExtensions)`, and merge the
|
|
207
|
+
returned `extensions` and `routes` into `admin()` options. Declaration drift is
|
|
208
|
+
refused before any handler runs. The older descriptor `extensionBindings` export
|
|
209
|
+
contains manifest UI references only; it is not the runtime binding function.
|
|
210
|
+
|
|
211
|
+
Native Admin does not serve `source` modules or modify shell import maps. Serve
|
|
212
|
+
an extension's `module` at a same-origin absolute path and install its `integrity`
|
|
213
|
+
in the host shell import map. Selecting `source` fails generation with that
|
|
214
|
+
instruction. This differs from historical 0.2's automatic source-module route.
|
|
215
|
+
|
|
216
|
+
Entry lists and editor reads/writes return translation badges and related
|
|
217
|
+
sections in one authorized HTTP response. `/bootstrap?collection=...` can include
|
|
218
|
+
the first requested list page. CSV exports use `/entries/export` and
|
|
219
|
+
`/views/{name}/export`; native browser downloads stream paged server output.
|
|
220
|
+
A failure after headers aborts the stream, so a download can fail after partial
|
|
221
|
+
bytes have arrived. Existing databases need an app-owned migration for the
|
|
222
|
+
Admin-selected `created_at` statistics indexes emitted in initial `schema.sql`.
|
|
223
|
+
|
|
224
|
+
## Collection list template today
|
|
225
|
+
|
|
226
|
+
The compiler derives display/filter metadata from Schema `uiSchema`, searchable fields from `searchableFields`, and sortable fields from indexes plus required/non-null fields and selected system columns. It emits per-collection quoted fragments, row policies and bind recipes; Admin uses one shared `nativeEntryPage` implementation, not Store `find`, `search` or `count` for these lists.
|
|
227
|
+
|
|
228
|
+
Requests select only generated fields and append only supplied predicates. Absent filters are omitted, rather than expressed as `(? IS NULL OR …)`. Sorts and scalar values are checked before the route acquires its DB handle. In 0.2.0 there is no generated Cartesian set of filter variants or variant cap: runtime SQL shapes depend on selected filters, bounded IN lists, search, cursor and order. Only sortable fields are checked for indexes; there is no per-filter-combination index proof. Inspect EXPLAIN for the actual workload.
|
|
229
|
+
|
|
230
|
+
Store keeps `find({ search })`, `first({ search })` and `count(where?)`. See [Store search and count costs](typed-queries.md#store-reads-and-writes): Admin shares the dialect search, and a View does not make PostgreSQL ILIKE faster.
|
|
231
|
+
|
|
232
|
+
## Collection navigation and operation placement
|
|
233
|
+
|
|
234
|
+
A Schema with a required `x-mantle-ref` folds under its parent collection: it
|
|
235
|
+
opens from the parent entry's workbench and stays out of the sidebar, while
|
|
236
|
+
`/admin/c/<schema>` still lists it; translation children remain on language
|
|
237
|
+
tabs. Set `Schema.spec.uiSchema.nav.standalone: true` to put a required-ref child
|
|
238
|
+
at the top level instead. With multiple eligible references, set
|
|
239
|
+
`nav.parentField` to the chosen reference field.
|
|
240
|
+
|
|
241
|
+
### Sidebar
|
|
242
|
+
|
|
243
|
+
By default the sidebar lists publishing Schemas under Content, operational Schemas under Records (`operations`),
|
|
244
|
+
admin Views under Reports and Admin's own pages under More, each in name order. A project arranges it for how its
|
|
245
|
+
staff work, in the same manifest change that adds a Schema or View. Placement is presentation only: permissions,
|
|
246
|
+
REST, MCP and storage are unchanged, entries a caller cannot see stay hidden, and an empty group is not shown.
|
|
247
|
+
|
|
248
|
+
- `Schema.spec.uiSchema.nav` and admin `View.spec.uiSchema.nav` take `group` (a group id), `order` (an integer;
|
|
249
|
+
ascending, entries without one follow in name order) and `hidden: true` (out of the sidebar, still at its URL).
|
|
250
|
+
- Built-in groups need no declaration: `content`, `operations`, `reports`, `more`. Project groups are declared once
|
|
251
|
+
as `navGroups` in the `--admin-extensions` module, with a title (text or `{ locale: text }`) and an `order` among
|
|
252
|
+
the built-in groups' content 10, operations 20 and reports 30 (default 50); More always stays last.
|
|
253
|
+
- Extension pages use the same ids: `pages[].nav: { group, order }` (`more` and `settings` keep their places).
|
|
254
|
+
|
|
255
|
+
```ts
|
|
256
|
+
// src/admin.ts, passed as --admin-extensions src/admin.ts (the app shell already does)
|
|
257
|
+
import type { AdminExtension, AdminNavGroup } from "@aotter/mantle-admin/server/extensions";
|
|
258
|
+
export const navGroups: AdminNavGroup[] = [{ id: "approvals", title: { en: "Approvals", "zh-TW": "簽核" }, order: 5 }];
|
|
259
|
+
export const adminExtensions: AdminExtension[] = [];
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
```yaml
|
|
263
|
+
# a Schema or an admin View
|
|
264
|
+
uiSchema: { nav: { group: approvals, order: 1 } }
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
`mantle generate` refuses an undeclared group, a duplicate or built-in `navGroups` id and a non-integer `order`.
|
|
268
|
+
The purchasing example puts its approval queue and requests in an Approvals group.
|
|
269
|
+
|
|
270
|
+
Operational collections have no generic create or draft: officers add records through a Procedure placed with `collectionAction` (the list header shows its button and input form), so every write is a declared, validated program. For a user-field scoped Schema, SQL INSERT is system-only, so that Procedure is a ref handler that inserts through `ctx.store` ([procedure.md](../reference/procedure.md)).
|
|
271
|
+
|
|
272
|
+
Admin operations are Procedures exposed by an admin MCP Trigger. Declare
|
|
273
|
+
`Procedure.spec.uiSchema.collectionAction: <schema-name>` to show the operation
|
|
274
|
+
in that collection's list header. Row operations are chosen by the Procedure's
|
|
275
|
+
explicit `target: { schema, id, version? }`: `id` names the input bound to the
|
|
276
|
+
row id, and optional `version` names the input bound to its reviewed OCC version.
|
|
277
|
+
Names such as `approve` never determine placement. An operation without a row
|
|
278
|
+
target or collection action appears on the Operations page, whose sidebar link
|
|
279
|
+
appears whenever such operations exist.
|
|
280
|
+
|
|
281
|
+
Generated row metadata includes simple AND-ed equality/IN literal conditions
|
|
282
|
+
from the target-row UPDATE/DELETE WHERE. The menu hides known mismatches; missing
|
|
283
|
+
preview values and unsupported predicates leave actions available. These are
|
|
284
|
+
presentation hints: the Procedure still enforces its WHERE and authorization.
|
|
285
|
+
Conflicts show a localized refresh message with the technical diagnostic in
|
|
286
|
+
Details. Successful actions show a short summary and changes, with raw output
|
|
287
|
+
in a collapsed Details disclosure. CSV exports retain UTC wire timestamps.
|
|
288
|
+
|
|
289
|
+
Developer Model and Logic pages share an object sidebar on wide containers
|
|
290
|
+
and an object-list drawer on narrow containers.
|
|
291
|
+
Schema Live data previews use collection routes even for folded children.
|
|
292
|
+
Pass `bindings.developerViews` as the Admin `developerViews` option for
|
|
293
|
+
public and admin View previews; ordinary Admin View routes and exports use
|
|
294
|
+
only `bindings.views` (admin Views). View previews use the read-only `/admin/api/developer/views/<view>` route,
|
|
295
|
+
with the signed-in admin caller and the same authorization, scope, TTL and
|
|
296
|
+
publishing policy as REST. Public Views retain public visibility; internal or
|
|
297
|
+
disallowed Views show an unavailable explanation. Previews never use a system
|
|
298
|
+
caller or bypass a View's `requires`.
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
# Generated native execution
|
|
2
|
+
|
|
3
|
+
Views and SQL Procedures execute compiled SQL through the selected native driver. The compiler stays build-time only. The app owns native handles, pools, verified Caller, boundary validation and resources. Import direct operation entries to omit unused operations.
|
|
4
|
+
|
|
5
|
+
Supported targets are Bun SQLite/PostgreSQL and Cloudflare D1/PostgreSQL. The [driver boundary is open; dialects are closed](../concepts/runtime-and-adapters.md#drivers-and-dialects). Generation emits initial SQL; [the runtime runs no DDL or schema checks](../concepts/runtime-and-adapters.md#schema-installation-and-migrations).
|
|
6
|
+
|
|
7
|
+
## Query inputs, values and outcomes
|
|
8
|
+
|
|
9
|
+
The default typed query accepts application-validated parameters and a verified
|
|
10
|
+
Caller, binds literal SQL using the official driver, and returns that target's
|
|
11
|
+
native result types. Generated TypeScript is a compile-time contract, not a
|
|
12
|
+
validator for untrusted data. The application must validate external input before
|
|
13
|
+
calling it. Generate-time schema/SQL diagnostics remain mandatory.
|
|
14
|
+
|
|
15
|
+
The bare query must not recursively scan JSON, construct validators, revalidate
|
|
16
|
+
known database rows, normalize errors across databases, or require universal row
|
|
17
|
+
decoding. Direct in-process values are owned by their application caller; input
|
|
18
|
+
bounds, JSON defaults and computed result types are handled explicitly by the
|
|
19
|
+
application boundary rather than assumed from TypeScript.
|
|
20
|
+
|
|
21
|
+
Driver-native PostgreSQL types and SQLite/D1 types need not match, except for
|
|
22
|
+
declared date-time and date outputs (below), which the SQL formats. That does not
|
|
23
|
+
justify overriding every PG type parser or adding a generic decoder to the bare
|
|
24
|
+
query. Authored output names should be emitted into SQL where valid, avoiding
|
|
25
|
+
an extra per-row projection merely to repair names already known at generation.
|
|
26
|
+
|
|
27
|
+
Selected REST/MCP/Admin boundaries use static generated column lineage. Declared
|
|
28
|
+
integers (including aliased system versions) are `number | string | null` on every
|
|
29
|
+
target: safe integers become numbers; unsafe integers remain exact decimal text.
|
|
30
|
+
Selected SQL projections cast integers and hidden integer cursor keys to text
|
|
31
|
+
before the driver reads them, preserving stored int64 values on SQLite/D1 and
|
|
32
|
+
PostgreSQL. Values already rounded when written
|
|
33
|
+
(e.g. by a JavaScript number) cannot be recovered.
|
|
34
|
+
`views/<name>.ts` exports both driver-native `Row` and `WireRow` (declared wire fields agree across targets);
|
|
35
|
+
`paged/views/<name>.ts` keeps native `Row` rows; REST/MCP use separate
|
|
36
|
+
`paged/wire/views/<name>.ts` SQL and convert at their boundary. SQLite/D1 declared JSON
|
|
37
|
+
and boolean columns become JSON values and booleans, preserving aliases and nulls;
|
|
38
|
+
PostgreSQL already returns those native values.
|
|
39
|
+
Declared real/float outputs remain numbers. Computed outputs without proved lineage,
|
|
40
|
+
SQL Procedures and app-owned ref results retain native values and types.
|
|
41
|
+
Bare Views/Procedures, the Store, web pages and internal paged Views stay
|
|
42
|
+
driver-native; bare queries and the Store receive no integer SQL projection,
|
|
43
|
+
transport conversion or runtime schema interpreter.
|
|
44
|
+
|
|
45
|
+
Declared authorization, ownership/TTL SQL policy, explicit OCC and atomic writes
|
|
46
|
+
remain required. Generate them as the native application would implement them.
|
|
47
|
+
Transaction rollback and uncertain COMMIT handling must still preserve data-loss
|
|
48
|
+
protection and client disposal responsibility; native errors are rethrown (one exception, below), and
|
|
49
|
+
redaction before they reach HTTP users belongs to the application boundary through `wire` / `surfaceFailure`. Removing generic error
|
|
50
|
+
normalization does not authorize dropping transaction outcome evidence.
|
|
51
|
+
|
|
52
|
+
**Single-statement writes:** a Procedure with one statement is atomic on its own
|
|
53
|
+
and runs in autocommit, with no BEGIN/COMMIT on PG or native transaction on Bun
|
|
54
|
+
SQLite. A row-classified statement touches at most one row (one-row INSERT or
|
|
55
|
+
unique `id =`), so a failed count check after autocommit has changed nothing.
|
|
56
|
+
On PG it runs at the server's default isolation, not SERIALIZABLE: a concurrent
|
|
57
|
+
OCC loser re-evaluates its `version =` predicate, matches zero rows and returns
|
|
58
|
+
`CONFLICT` instead of SQLSTATE 40001. A server ErrorResponse (SQLSTATE and
|
|
59
|
+
severity) is a known rollback and is rethrown natively, except a unique violation (23505, SQLite's `UNIQUE constraint failed`), which, in a generated Procedure or a Store write, is `ContractError("CONFLICT")` with the native error as `cause` on every target, and except connection,
|
|
60
|
+
resource and shutdown classes (08, 28, 53, 57, 58, XX), which, like any failure
|
|
61
|
+
without a server response (lost socket), are `OUTCOME_UNKNOWN`. SQLSTATE is
|
|
62
|
+
`errno` on Bun.SQL and `code` on postgres.js. Multi-statement Procedures run in
|
|
63
|
+
`begin("isolation level serializable", ...)`: a failure before the callback
|
|
64
|
+
returns was rolled back by `begin`; only a failed COMMIT is classified as above.
|
|
65
|
+
|
|
66
|
+
**Date-time wire form:** a View output that is a declared `date-time` column
|
|
67
|
+
(including `created_at`/`updated_at`) returns the handbook's wire form, an ISO
|
|
68
|
+
string in UTC with six fractional digits; a declared `date` returns `YYYY-MM-DD`.
|
|
69
|
+
The generator wraps those SELECT items before the dialect's own printer prints them
|
|
70
|
+
(`to_char` on PostgreSQL, `strftime`/`date` with floor arithmetic on SQLite), so the
|
|
71
|
+
database formats them and no row decoder runs. Bun.SQL's `Date` would drop
|
|
72
|
+
microseconds. A write's `RETURNING` of such a column gets the same form. Inputs bound to a declared date-time take the same ISO text (or a
|
|
73
|
+
valid `Date`), and a declared date takes `YYYY-MM-DD` text, on every target: a
|
|
74
|
+
timestamp needs `Z` or an offset and hours 00-23, a day that does not exist is refused with `SQL_TYPE` before the write, and SQLite receives
|
|
75
|
+
microseconds and days while PostgreSQL receives the canonical text. Computed values
|
|
76
|
+
(`now()`, `date_trunc`, `CAST`) carry no declared type and stay driver-native; on
|
|
77
|
+
PostgreSQL through Bun.SQL that is a `Date`, which drops microseconds. Other
|
|
78
|
+
declared scalars are driver-native.
|
|
79
|
+
|
|
80
|
+
Driver-ready JSON parameters are text on every target (a JavaScript array would otherwise be bound as a PostgreSQL array), so the application serializes them. Bare PG SQL declares each JSON parameter as text
|
|
81
|
+
(`CAST(CAST($n AS text) AS jsonb)`), so Bun.SQL sends the text verbatim instead of
|
|
82
|
+
JSON-encoding it again; generation refuses a JSON parameter used any other way. SQLite bool/date/timestamp/numeric parameters use their declared
|
|
83
|
+
storage representations. Bound optional fields become explicit required values,
|
|
84
|
+
with null representing absence; D1 cannot bind undefined. Native output keys are
|
|
85
|
+
SQL names rather than a post-query camel-case projection. PG uses the driver's
|
|
86
|
+
default type parsers (including Date and int8 strings); custom application parser
|
|
87
|
+
configuration changes application-owned behavior. Procedures expose raw
|
|
88
|
+
`{ results }`, not a claim of validated authored output.
|
|
89
|
+
|
|
90
|
+
The application resolves a verified Caller once at its entry, using its selected
|
|
91
|
+
auth module or identity. Bare queries accept that application-supplied Caller and
|
|
92
|
+
do not verify credentials. SQL binds the caller subject directly; a system
|
|
93
|
+
caller is application-owned and never wire input.
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
## PostgreSQL settings
|
|
97
|
+
|
|
98
|
+
The app owns role/database configuration, statement timeouts, pool lifetime and retries. Configure persistent session settings there rather than issuing request-time SETs; Hyperdrive does not retain them. UTC is useful for application-owned timestamp expressions; generated declared timestamp outputs are formatted explicitly. Requests neither set nor validate role settings.
|
|
99
|
+
|
|
100
|
+
## Ref Procedures
|
|
101
|
+
|
|
102
|
+
Generation emits a `Handlers` interface. Pass implementations at `store(db, caller, { handlers })` and to selected surfaces. `requires` is checked before the ref handler receives `(ctx, input)`; `ctx` contains `{ caller, db, store }` bound to the actual Caller and transaction. Missing implementations fail typechecking; a missing runtime key is `HANDLER_NOT_REGISTERED`. Handler failures propagate unchanged. Handlers own business rules, side effects and explicit transaction boundaries.
|
|
103
|
+
|
|
104
|
+
Lifecycle and schedule Triggers and dynamic authorization guards are rejected by generation. Use app-owned handlers and scheduling. HTTP/MCP Triggers expose declared Procedures.
|
|
105
|
+
|
|
106
|
+
## TTL maintenance
|
|
107
|
+
|
|
108
|
+
A TTL Schema generates `<schema>.sweepExpired(db, caller, { limit?, cursor?, delete? })`
|
|
109
|
+
in `procedures/<schema>.sweepExpired.ts`. Only an application-created system caller
|
|
110
|
+
with a non-empty reason may invoke it; HTTP/OAuth callers cannot become system
|
|
111
|
+
callers. The app owns scheduling. Schedule/lifecycle Triggers remain refused.
|
|
112
|
+
|
|
113
|
+
The sweep returns `{ scanned, removed, nextCursor? }`, defaults to 500 candidates,
|
|
114
|
+
and accepts limits 1..500. `delete: false` scans without deleting. Cursors belong
|
|
115
|
+
to that Schema's sweep. NULL and future TTL values survive; a timestamp exactly
|
|
116
|
+
at the shared dialect cutoff expires. Maintenance deliberately ignores scope and
|
|
117
|
+
publishing visibility, deleting expired rows across tenants. Candidate selection
|
|
118
|
+
and deletion run atomically through the native driver with its existing uncertain
|
|
119
|
+
transaction outcome handling. Native triggers may suppress deletes, so scanned
|
|
120
|
+
and removed counts can differ; the cursor advances over selected candidates.
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
Keep the sweep import in the scheduled entry; apps selecting unrelated operations
|
|
124
|
+
exclude maintenance code. Set `triggers.crons` in Wrangler yourself. The SDK's
|
|
125
|
+
`toCloudflareCron` helper (the `cron` subpath) converts five-field POSIX schedules
|
|
126
|
+
(weekday 0=Sunday) to Cloudflare weekdays (1=Sunday); it refuses ambiguous schedules
|
|
127
|
+
that restrict both day-of-month and weekday. This is conversion only, no dispatcher.
|
|
128
|
+
Bound scheduled work to your host's execution budget; keep the returned cursor
|
|
129
|
+
when continuing a larger sweep in a later invocation.
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
See [publishing and translations](../concepts/lifecycle-and-locales.md), [Store](typed-queries.md), [surfaces](../reference/surface.md) and [Admin](native-admin.md) for selected capabilities.
|