@aotter/mantle 0.2.0-alpha.6 → 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 +24 -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 -106
- 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 -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-extensions.md +12 -183
- package/docs/handbook/guides/admin-ui.md +5 -164
- 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 -31
- 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 -79
- package/docs/handbook/reference/features.md +45 -53
- package/docs/handbook/reference/manifest.md +6 -69
- package/docs/handbook/reference/procedure.md +9 -118
- package/docs/handbook/reference/schema.md +75 -185
- package/docs/handbook/reference/site-config.md +5 -65
- package/docs/handbook/reference/surface.md +279 -97
- package/docs/handbook/reference/trigger.md +24 -93
- package/docs/handbook/reference/view.md +32 -160
- package/docs/handbook/releases/index.md +48 -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 +34 -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 +14 -3
- package/docs/skills/provision/SKILL.md +25 -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 +96 -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 -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.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/examples/{reference-service → app-shell}/.dev.vars.example +0 -0
|
@@ -1,170 +1,11 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: What Admin serves in 0.2.0, how manifests and uiSchema become Admin's collections, reports and operations, and how to verify a change.
|
|
3
|
-
---
|
|
4
1
|
# Customize Admin from manifests
|
|
5
2
|
|
|
6
|
-
`
|
|
7
|
-
Every route reads and writes through `runtime.store.as(caller)` and
|
|
8
|
-
`invokeProcedure`, so Admin sees exactly what the signed-in staff member may
|
|
9
|
-
see. What Admin shows is derived from the compiled plan: labels, forms, list
|
|
10
|
-
columns, reports and operations are manifest edits.
|
|
3
|
+
Select `--admin` and mount [native Admin](native-admin.md) from `@aotter/mantle-admin`. The app serves its assets and owns authentication. UI and SDK are separate packages.
|
|
11
4
|
|
|
12
|
-
|
|
13
|
-
prebuilt SPA in `@aotter/mantle-ui/admin`, at `/admin`: `wrangler.jsonc` binds
|
|
14
|
-
`node_modules/@aotter/mantle-ui/dist/admin` as the Worker's `ASSETS`
|
|
15
|
-
(`run_worker_first`), and `src/service.ts` passes `createAdminSurface` an
|
|
16
|
-
`assets` function that reads from it. `mantle generate` warns when `admin` is
|
|
17
|
-
selected and `wrangler.jsonc` binds no `ASSETS`. The Bun preset reads the
|
|
18
|
-
same files with `bunAdminAssets` from `@aotter/mantle/bun`. Sign in at
|
|
19
|
-
`/admin/sign-in`.
|
|
5
|
+
Schema `uiSchema` selects fields, widgets, list columns, enum tabs and child navigation. The compiler derives sortable fields from indexed required/non-null fields; it emits selected system/statistics indexes in initial DDL. Apply those indexes through an explicit migration on existing databases.
|
|
20
6
|
|
|
21
|
-
|
|
7
|
+
Admin Views provide custom read lists; their SELECT outputs, column lineage and `uiSchema.list` define display/search/filter metadata. Procedures and MCP admin Triggers define operations with declared authorization, input checks and optional row targets. A hidden button never authorizes an operation.
|
|
22
8
|
|
|
23
|
-
|
|
24
|
-
|---|---|---|
|
|
25
|
-
| Rename a collection or explain a field | Schema `title` / `description`, property `title` / `description` (a string or a locale map) | Labels and help. Stored names do not change |
|
|
26
|
-
| Required fields and option lists | JSON Schema `required`, `enum`, `type` | Data contracts, checked on every write, not styling |
|
|
27
|
-
| Option labels | a string property's `oneOf: [{ const: open, title: { en: Open, zh-TW: 處理中 } }, …]` instead of `enum` | Selects, filter tabs and list cells show the `title` |
|
|
28
|
-
| A multiline string | Schema or Procedure `uiSchema.fields.<name>.widget: textarea` | `textarea` is the only built-in explicit widget |
|
|
29
|
-
| Your own control, list cell or record panel | `uiSchema.fields.<name>.widget: <extension>/<contribution>`, `uiSchema.list.cells`, `uiSchema.panels` | Contributions of the project's Admin extensions; see [Extend Admin](admin-extensions.md) |
|
|
30
|
-
| Markdown or HTML | property `x-mcp-hint: markdown` or `html` | A rich editor |
|
|
31
|
-
| A timestamp, a date or money | `format: date-time`, `format: date`; `x-mcp-hint: money-minor` on an integer | Date controls; money in minor units, with a sibling `currency` when present |
|
|
32
|
-
| Columns of an operational list | Schema `uiSchema.list.primaryField`, `.columns` | `primaryField` is a scalar data field; `columns` may name native columns (`createdAt`, `updatedAt`) |
|
|
33
|
-
| Business-state tabs | Schema `uiSchema.list.filterField` | Operational Schemas only; a string enum that leads an index |
|
|
34
|
-
| Search | Schema `searchableFields` | Full-text search over those string fields, plus `id` |
|
|
35
|
-
| Related records | a required property with `x-mantle-ref` | Children fold under their parent |
|
|
36
|
-
| A folded child in navigation too | Schema `uiSchema.nav.standalone: true`, optional `parentField` | Its own list with a parent filter |
|
|
37
|
-
| A read-only report with CSV | a View with `surface: staff`, `title`, `uiSchema.list` | `columns`, `searchFields` and `filterFields` name the View's outputs; the search box and filters become `LIKE` and `=` on them. `GET /admin/api/views/<name>/export` returns every matching row |
|
|
38
|
-
| An operation | a Procedure bound by a Trigger with `source: { kind: mcp, surface: staff }` | Listed at `/admin/api/operations` for staff its `requires` admits, and run with `POST /admin/api/operations/<name>` |
|
|
39
|
-
| A row operation | that Procedure's `target` (declared or inferred from `WHERE id = … AND version = …`) | Bound to the row's `id`, and its version when the target names one |
|
|
40
|
-
| A list-level operation | Procedure `uiSchema.collectionAction: <schema>` | Shown on that collection |
|
|
41
|
-
| No generic edits | Schema root `schema.readOnly: true` | Admin's entry routes refuse writes (`CONFLICT`); declared Procedures still run |
|
|
9
|
+
Generic publishing edits apply to drafts; publishing transitions retain their atomic guards and OCC. Read-only collections refuse generic edits while declared Procedures can still run. Ref operations receive the caller/transaction-bound Store.
|
|
42
10
|
|
|
43
|
-
|
|
44
|
-
`lifecycle: operational`. Publishing Schemas keep the draft, publish and
|
|
45
|
-
archive workflow (`POST /admin/api/entries/{id}/publish` and `/unpublish`).
|
|
46
|
-
|
|
47
|
-
## Example: an operational inbox
|
|
48
|
-
|
|
49
|
-
```yaml
|
|
50
|
-
apiVersion: cms.mantle.aotter.net/v2
|
|
51
|
-
kind: Schema
|
|
52
|
-
metadata: { name: support-tickets }
|
|
53
|
-
spec:
|
|
54
|
-
title: { en: Support tickets, zh-TW: 客服工單 }
|
|
55
|
-
lifecycle: operational
|
|
56
|
-
indexes: [[ticketState]]
|
|
57
|
-
searchableFields: [subject, details]
|
|
58
|
-
uiSchema:
|
|
59
|
-
fields:
|
|
60
|
-
details: { widget: textarea }
|
|
61
|
-
list:
|
|
62
|
-
primaryField: subject
|
|
63
|
-
columns: [ticketState, createdAt]
|
|
64
|
-
filterField: ticketState
|
|
65
|
-
schema:
|
|
66
|
-
type: object
|
|
67
|
-
additionalProperties: false
|
|
68
|
-
required: [subject, ticketState]
|
|
69
|
-
properties:
|
|
70
|
-
subject: { type: string, title: Subject }
|
|
71
|
-
details: { type: string, description: Include the steps to reproduce. }
|
|
72
|
-
ticketState: { type: string, enum: [open, waiting, closed] }
|
|
73
|
-
---
|
|
74
|
-
apiVersion: cms.mantle.aotter.net/v2
|
|
75
|
-
kind: View
|
|
76
|
-
metadata: { name: support-report }
|
|
77
|
-
spec:
|
|
78
|
-
title: Support report
|
|
79
|
-
surface: staff
|
|
80
|
-
requires: { auth: { all: [{ ctx.staff: [owner, editor] }] } }
|
|
81
|
-
uiSchema:
|
|
82
|
-
list:
|
|
83
|
-
columns: [subject, ticketState, created_at]
|
|
84
|
-
searchFields: [subject]
|
|
85
|
-
filterFields: [ticketState]
|
|
86
|
-
sql: SELECT id, subject, ticketState, created_at FROM "support-tickets" ORDER BY created_at DESC
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
Schema `uiSchema.list` and View `uiSchema.list` are different contracts; do
|
|
90
|
-
not copy keys between them. The report's search box matches `subject`
|
|
91
|
-
(`LIKE`), its filter is `ticketState` (`=`), and a declared `input` would add
|
|
92
|
-
a form above them; all of them keep cursor paging.
|
|
93
|
-
|
|
94
|
-
## Developer console
|
|
95
|
-
|
|
96
|
-
The Developer console's Procedure overview projects the sealed SQL AST into
|
|
97
|
-
a static execution diagram: authorization, validated input, guard, applicable
|
|
98
|
-
lifecycle hooks, ordered atomic statements, commit or rollback, and output
|
|
99
|
-
validation. Statement cards show read/write dependencies, row versus set
|
|
100
|
-
semantics, RETURNING and ordered CASE assignments. CASE chooses a field value;
|
|
101
|
-
WHERE filters rows. A set operation can affect zero rows and still continue.
|
|
102
|
-
Output validation and after-hook failures do not roll back an existing commit.
|
|
103
|
-
Unsupported expression shapes remain explicitly opaque beside authored SQL;
|
|
104
|
-
code handlers' effects and actual run history are not inferred.
|
|
105
|
-
|
|
106
|
-
The inline business flow uses Schema/property titles and titled enum options
|
|
107
|
-
from the developer snapshot; generic verbs and operators are UI translations.
|
|
108
|
-
It expands direct `UPDATE SET field = CASE … END` assignments only. CASE
|
|
109
|
-
inside arithmetic, casts, functions, SELECT or INSERT remains in the SQL
|
|
110
|
-
detail tree, rather than pretending its intermediate result is the assigned
|
|
111
|
-
value. SQL identifiers match manifest names case-insensitively. The existing
|
|
112
|
-
`money-minor` display convention uses hundredths and a single-valued sibling
|
|
113
|
-
`currency` enum; if numeric conversion or currency formatting would round a
|
|
114
|
-
threshold, the flow shows its exact SQL literal marked as a raw SQL value.
|
|
115
|
-
These display hints do not establish or validate business units.
|
|
116
|
-
|
|
117
|
-
## Roles
|
|
118
|
-
|
|
119
|
-
Admin's gate admits any staff role. Inside it, each route names the least role
|
|
120
|
-
it needs: `contributor` reads and edits drafts, `editor` publishes, deletes
|
|
121
|
-
and manages media, `owner` manages staff, site settings and the developer
|
|
122
|
-
console. Operations and staff Views are further limited by their own
|
|
123
|
-
`requires`.
|
|
124
|
-
|
|
125
|
-
Those atom predicates do not restrict generic Schema entry routes. A root
|
|
126
|
-
Schema `readOnly: true` blocks generic writes, not reads. In a service where
|
|
127
|
-
only owner/editor reviewers may read an unscoped table, restrict the Admin
|
|
128
|
-
surface in the application-owned `src/service.ts`:
|
|
129
|
-
|
|
130
|
-
```ts
|
|
131
|
-
// Replace the preset's Admin composition, keeping its existing options.
|
|
132
|
-
const adminSurface = createAdminSurface(runtime, { /* existing Admin options */ });
|
|
133
|
-
const admin = withCaller(resolver, async (request, caller) => {
|
|
134
|
-
if (new URL(request.url).pathname.startsWith("/admin/api/") &&
|
|
135
|
-
caller.kind === "user" && caller.role === "contributor") {
|
|
136
|
-
return Response.json({ error: {
|
|
137
|
-
code: "AUTH_DENIED", message: "Admin access requires an owner or editor role.",
|
|
138
|
-
} }, { status: 403 });
|
|
139
|
-
}
|
|
140
|
-
return adminSurface(request, caller);
|
|
141
|
-
});
|
|
142
|
-
```
|
|
143
|
-
|
|
144
|
-
The preset already imports `withCaller` from `@aotter/mantle`. Reuse its
|
|
145
|
-
resolver so credential validation and the session origin guard run once;
|
|
146
|
-
Admin retains its own gates for members and anonymous callers. Contributors
|
|
147
|
-
can use an application-owned page over an owner-filtered public View. Keep
|
|
148
|
-
sign-in, OAuth consent and UI assets reachable; restricting the whole `/admin`
|
|
149
|
-
prefix would also block member MCP consent at `/admin/oauth/consent`. This is
|
|
150
|
-
host surface composition, not a Procedure `ref` handler or a new Manifest
|
|
151
|
-
permission key. Exercise generic entry reads, reports and operations with
|
|
152
|
-
each role, including after revoking a role in an existing session.
|
|
153
|
-
|
|
154
|
-
## Verify a change
|
|
155
|
-
|
|
156
|
-
1. Run `mantle generate`, then `mantle generate --check`.
|
|
157
|
-
2. Restart `wrangler dev` (or the Bun process) so the runtime loads the new plan.
|
|
158
|
-
3. Open `/admin` with a staff session and check the affected list, form,
|
|
159
|
-
report or operation. `GET /admin/api/bootstrap` carries the collections,
|
|
160
|
-
Views, operations and site the console renders.
|
|
161
|
-
|
|
162
|
-
`uiSchema` keys are closed. Schema takes `fields`, `list` and `nav`;
|
|
163
|
-
Procedure takes `collectionAction` and `fields`; a staff View takes `list`. No
|
|
164
|
-
layout, CSS, component or permission keys exist; build those in your own UI
|
|
165
|
-
over Admin's API or your own surfaces.
|
|
166
|
-
|
|
167
|
-
## Source
|
|
168
|
-
|
|
169
|
-
- [Schema](../reference/schema.md#uischema), [View](../reference/view.md) and [Procedure](../reference/procedure.md) references
|
|
170
|
-
- [HTTP, MCP, CLI and packages](../reference/surface.md): every Admin route
|
|
11
|
+
Use [extensions](admin-extensions.md) for app-owned pages, actions, panels or field renderers. Keep exact conflict/uncertain-outcome handling in the shared UI controller.
|
|
@@ -10,8 +10,8 @@ carries.
|
|
|
10
10
|
|
|
11
11
|
## 1. Install the `mantle` skill
|
|
12
12
|
|
|
13
|
-
The Mantle plugin carries one skill, `mantle`,
|
|
14
|
-
|
|
13
|
+
The Mantle plugin carries one OSS authoring skill, `mantle`, and local
|
|
14
|
+
acceptance references. It does not configure a hosted-service connection.
|
|
15
15
|
|
|
16
16
|
```bash
|
|
17
17
|
# Claude Code: two separate prompts
|
|
@@ -30,8 +30,7 @@ Without a plugin host, install the skill alone:
|
|
|
30
30
|
npx skills add aotter/mantle
|
|
31
31
|
```
|
|
32
32
|
|
|
33
|
-
|
|
34
|
-
it. Either way, read the path the installer prints (for project-local Codex,
|
|
33
|
+
Read the path the installer prints (for project-local Codex,
|
|
35
34
|
`.agents/skills/mantle/SKILL.md`). The skill installs no SDK, creates no
|
|
36
35
|
project and copies no handbook.
|
|
37
36
|
|
|
@@ -65,18 +64,6 @@ An agent reads these files from `node_modules` when the task calls for them.
|
|
|
65
64
|
|
|
66
65
|
## 3. Verify the application
|
|
67
66
|
|
|
68
|
-
|
|
67
|
+
Run the app's exact generation command with `--check`, typecheck, implement every printed handler and typecheck again. Test actual routes and persisted state. With selected Admin, mount `entries(bindings.schemas, bindings.adapter)` and serve assets separately. Verify member/admin OTP, row visibility and OCC. Installing a skill proves none of these flows.
|
|
69
68
|
|
|
70
|
-
|
|
71
|
-
2. The project typechecks against `.mantle/generated/mantle.ts`.
|
|
72
|
-
3. `wrangler dev` (or, on Bun, `bun src/index.ts`) starts, and the routes you depend on answer: a REST View, an
|
|
73
|
-
HTTP Trigger, `/mcp` `tools/list`, and with identity `mantle` a sign-in and
|
|
74
|
-
`GET /admin/api/me`.
|
|
75
|
-
|
|
76
|
-
| Symptom | Cause and next step |
|
|
77
|
-
|---|---|
|
|
78
|
-
| `docs/...` is missing after installing the skill | The skill carries no docs. Install the SDK and read `node_modules/@aotter/mantle/docs/`. |
|
|
79
|
-
| `mantle` is not found | Install `@aotter/mantle` locally and run it through the package manager (`pnpm exec mantle`). |
|
|
80
|
-
| `mantle skills` is unknown | It is 0.1.x. Follow the installed 0.2.x docs. |
|
|
81
|
-
| A v1 manifest or a `version: 1` config fails | The project is on 0.1.x. Follow `docs/upgrade-0.1-to-0.2.md`. |
|
|
82
|
-
| A documented feature is missing | The installed version is older than the docs you read. Read its own docs, or upgrade deliberately. |
|
|
69
|
+
If packaged docs are missing, reinstall the SDK version pinned by the app. If a feature differs from an online page, read the installed docs rather than assuming compatibility.
|
|
@@ -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`.
|