@aotter/mantle 0.1.4 → 0.2.0-alpha.1
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 +39 -306
- package/dist/admin/consent.d.ts +17 -0
- package/dist/admin/consent.d.ts.map +1 -0
- package/dist/admin/consent.js +17 -0
- package/dist/admin/consent.js.map +1 -0
- package/dist/admin/createAdminSurface.d.ts +22 -0
- package/dist/admin/createAdminSurface.d.ts.map +1 -0
- package/dist/admin/createAdminSurface.js +589 -0
- package/dist/admin/createAdminSurface.js.map +1 -0
- package/dist/admin/developerConsole.d.ts +264 -0
- package/dist/admin/developerConsole.d.ts.map +1 -0
- package/dist/admin/developerConsole.js +136 -0
- package/dist/admin/developerConsole.js.map +1 -0
- package/dist/admin/identity.d.ts +62 -0
- package/dist/admin/identity.d.ts.map +1 -0
- package/dist/admin/identity.js +7 -0
- package/dist/admin/identity.js.map +1 -0
- package/dist/admin/index.d.ts +4 -0
- package/dist/admin/index.d.ts.map +1 -0
- package/dist/admin/index.js +4 -0
- package/dist/admin/index.js.map +1 -0
- package/dist/admin/procedureFlow.d.ts +25 -0
- package/dist/admin/procedureFlow.d.ts.map +1 -0
- package/dist/admin/procedureFlow.js +154 -0
- package/dist/admin/procedureFlow.js.map +1 -0
- package/dist/auth/ConsoleEmailSender.d.ts +15 -0
- package/dist/auth/ConsoleEmailSender.d.ts.map +1 -0
- package/dist/auth/ConsoleEmailSender.js +19 -0
- package/dist/auth/ConsoleEmailSender.js.map +1 -0
- package/dist/auth/appleClientSecret.d.ts +75 -0
- package/dist/auth/appleClientSecret.d.ts.map +1 -0
- package/dist/auth/appleClientSecret.js +116 -0
- package/dist/auth/appleClientSecret.js.map +1 -0
- package/dist/auth/buildAuth.d.ts +4565 -0
- package/dist/auth/buildAuth.d.ts.map +1 -0
- package/dist/auth/buildAuth.js +307 -0
- package/dist/auth/buildAuth.js.map +1 -0
- package/dist/auth/callerResolver.d.ts +48 -0
- package/dist/auth/callerResolver.d.ts.map +1 -0
- package/dist/auth/callerResolver.js +49 -0
- package/dist/auth/callerResolver.js.map +1 -0
- package/dist/auth/createAuthRoutes.d.ts +22 -0
- package/dist/auth/createAuthRoutes.d.ts.map +1 -0
- package/dist/auth/createAuthRoutes.js +128 -0
- package/dist/auth/createAuthRoutes.js.map +1 -0
- package/dist/auth/createMantleAuth.d.ts +3 -0
- package/dist/auth/createMantleAuth.d.ts.map +1 -0
- package/dist/auth/createMantleAuth.js +483 -0
- package/dist/auth/createMantleAuth.js.map +1 -0
- package/dist/auth/db.d.ts +17 -0
- package/dist/auth/db.d.ts.map +1 -0
- package/dist/auth/db.js +24 -0
- package/dist/auth/db.js.map +1 -0
- package/dist/auth/emailTemplates.d.ts +7 -0
- package/dist/auth/emailTemplates.d.ts.map +1 -0
- package/dist/auth/emailTemplates.js +27 -0
- package/dist/auth/emailTemplates.js.map +1 -0
- package/dist/auth/index.d.ts +9 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +7 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/methods.d.ts +717 -0
- package/dist/auth/methods.d.ts.map +1 -0
- package/dist/auth/methods.js +321 -0
- package/dist/auth/methods.js.map +1 -0
- package/dist/auth/oauthTokens.d.ts +24 -0
- package/dist/auth/oauthTokens.d.ts.map +1 -0
- package/dist/auth/oauthTokens.js +146 -0
- package/dist/auth/oauthTokens.js.map +1 -0
- package/dist/auth/setupIncomplete.d.ts +16 -0
- package/dist/auth/setupIncomplete.d.ts.map +1 -0
- package/dist/auth/setupIncomplete.js +50 -0
- package/dist/auth/setupIncomplete.js.map +1 -0
- package/dist/auth/types.d.ts +440 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +10 -0
- package/dist/auth/types.js.map +1 -0
- package/dist/bun/index.d.ts +65 -0
- package/dist/bun/index.d.ts.map +1 -0
- package/dist/bun/index.js +130 -0
- package/dist/bun/index.js.map +1 -0
- package/dist/cli/emitModule.d.ts +7 -0
- package/dist/cli/emitModule.d.ts.map +1 -0
- package/dist/cli/emitModule.js +127 -0
- package/dist/cli/emitModule.js.map +1 -0
- package/dist/cli/generate.d.ts +4 -16
- package/dist/cli/generate.d.ts.map +1 -1
- package/dist/cli/generate.js +332 -165
- package/dist/cli/generate.js.map +1 -1
- package/dist/cli/main.d.ts +1 -1
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +15 -71
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/preset.d.ts +18 -0
- package/dist/cli/preset.d.ts.map +1 -0
- package/dist/cli/preset.js +352 -0
- package/dist/cli/preset.js.map +1 -0
- package/dist/cloudflare/index.d.ts +21 -0
- package/dist/cloudflare/index.d.ts.map +1 -0
- package/dist/cloudflare/index.js +14 -0
- package/dist/cloudflare/index.js.map +1 -0
- package/dist/cloudflare/r2Media.d.ts +43 -0
- package/dist/cloudflare/r2Media.d.ts.map +1 -0
- package/dist/cloudflare/r2Media.js +69 -0
- package/dist/cloudflare/r2Media.js.map +1 -0
- package/dist/core/caller.d.ts +35 -0
- package/dist/core/caller.d.ts.map +1 -0
- package/dist/core/caller.js +3 -0
- package/dist/core/caller.js.map +1 -0
- package/dist/core/createMantle.d.ts +22 -0
- package/dist/core/createMantle.d.ts.map +1 -0
- package/dist/core/createMantle.js +117 -0
- package/dist/core/createMantle.js.map +1 -0
- package/dist/core/dialect.d.ts +41 -0
- package/dist/core/dialect.d.ts.map +1 -0
- package/dist/core/dialect.js +7 -0
- package/dist/core/dialect.js.map +1 -0
- package/dist/core/driver.d.ts +17 -0
- package/dist/core/driver.d.ts.map +1 -0
- package/dist/core/driver.js +2 -0
- package/dist/core/driver.js.map +1 -0
- package/dist/core/email.d.ts +17 -0
- package/dist/core/email.d.ts.map +1 -0
- package/dist/core/email.js +2 -0
- package/dist/core/email.js.map +1 -0
- package/dist/core/index.d.ts +16 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +16 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/invocation.d.ts +66 -0
- package/dist/core/invocation.d.ts.map +1 -0
- package/dist/core/invocation.js +3 -0
- package/dist/core/invocation.js.map +1 -0
- package/dist/core/runtime/auth.d.ts +9 -0
- package/dist/core/runtime/auth.d.ts.map +1 -0
- package/dist/core/runtime/auth.js +39 -0
- package/dist/core/runtime/auth.js.map +1 -0
- package/dist/core/runtime/createRuntime.d.ts +23 -0
- package/dist/core/runtime/createRuntime.d.ts.map +1 -0
- package/dist/core/runtime/createRuntime.js +214 -0
- package/dist/core/runtime/createRuntime.js.map +1 -0
- package/dist/core/runtime/verifyPlan.d.ts +34 -0
- package/dist/core/runtime/verifyPlan.d.ts.map +1 -0
- package/dist/core/runtime/verifyPlan.js +301 -0
- package/dist/core/runtime/verifyPlan.js.map +1 -0
- package/dist/core/service.d.ts +45 -0
- package/dist/core/service.d.ts.map +1 -0
- package/dist/core/service.js +2 -0
- package/dist/core/service.js.map +1 -0
- package/dist/core/site.d.ts +117 -0
- package/dist/core/site.d.ts.map +1 -0
- package/dist/core/site.js +2 -0
- package/dist/core/site.js.map +1 -0
- package/dist/core/siteConfig.d.ts +5 -0
- package/dist/core/siteConfig.d.ts.map +1 -0
- package/dist/core/siteConfig.js +24 -0
- package/dist/core/siteConfig.js.map +1 -0
- package/dist/core/sql/allowlist.d.ts +65 -0
- package/dist/core/sql/allowlist.d.ts.map +1 -0
- package/dist/core/sql/allowlist.js +705 -0
- package/dist/core/sql/allowlist.js.map +1 -0
- package/dist/core/sql/ast.d.ts +24 -0
- package/dist/core/sql/ast.d.ts.map +1 -0
- package/dist/core/sql/ast.js +32 -0
- package/dist/core/sql/ast.js.map +1 -0
- package/dist/core/sql/compile.d.ts +50 -0
- package/dist/core/sql/compile.d.ts.map +1 -0
- package/dist/core/sql/compile.js +48 -0
- package/dist/core/sql/compile.js.map +1 -0
- package/dist/core/sql/policy.d.ts +121 -0
- package/dist/core/sql/policy.d.ts.map +1 -0
- package/dist/core/sql/policy.js +379 -0
- package/dist/core/sql/policy.js.map +1 -0
- package/dist/core/sql/positions.d.ts +30 -0
- package/dist/core/sql/positions.d.ts.map +1 -0
- package/dist/core/sql/positions.js +22 -0
- package/dist/core/sql/positions.js.map +1 -0
- package/dist/core/sql/run.d.ts +76 -0
- package/dist/core/sql/run.d.ts.map +1 -0
- package/dist/core/sql/run.js +267 -0
- package/dist/core/sql/run.js.map +1 -0
- package/dist/core/store/createStore.d.ts +49 -0
- package/dist/core/store/createStore.d.ts.map +1 -0
- package/dist/core/store/createStore.js +227 -0
- package/dist/core/store/createStore.js.map +1 -0
- package/dist/core/store/cursor.d.ts +4 -0
- package/dist/core/store/cursor.d.ts.map +1 -0
- package/dist/core/store/cursor.js +22 -0
- package/dist/core/store/cursor.js.map +1 -0
- package/dist/core/store/json.d.ts +80 -0
- package/dist/core/store/json.d.ts.map +1 -0
- package/dist/core/store/json.js +342 -0
- package/dist/core/store/json.js.map +1 -0
- package/dist/core/store.d.ts +160 -0
- package/dist/core/store.d.ts.map +1 -0
- package/dist/core/store.js +2 -0
- package/dist/core/store.js.map +1 -0
- package/dist/core/wire.d.ts +20 -0
- package/dist/core/wire.d.ts.map +1 -0
- package/dist/core/wire.js +84 -0
- package/dist/core/wire.js.map +1 -0
- package/dist/core/withCaller.d.ts +16 -0
- package/dist/core/withCaller.d.ts.map +1 -0
- package/dist/core/withCaller.js +29 -0
- package/dist/core/withCaller.js.map +1 -0
- package/dist/d1/adapter.d.ts +12 -0
- package/dist/d1/adapter.d.ts.map +1 -0
- package/dist/d1/adapter.js +23 -0
- package/dist/d1/adapter.js.map +1 -0
- package/dist/d1/codec.d.ts +14 -0
- package/dist/d1/codec.d.ts.map +1 -0
- package/dist/d1/codec.js +136 -0
- package/dist/d1/codec.js.map +1 -0
- package/dist/d1/compile/index.d.ts +9 -0
- package/dist/d1/compile/index.d.ts.map +1 -0
- package/dist/d1/compile/index.js +9 -0
- package/dist/d1/compile/index.js.map +1 -0
- package/dist/d1/dialect.d.ts +4 -0
- package/dist/d1/dialect.d.ts.map +1 -0
- package/dist/d1/dialect.js +13 -0
- package/dist/d1/dialect.js.map +1 -0
- package/dist/d1/executor.d.ts +13 -0
- package/dist/d1/executor.d.ts.map +1 -0
- package/dist/d1/executor.js +91 -0
- package/dist/d1/executor.js.map +1 -0
- package/dist/d1/index.d.ts +6 -0
- package/dist/d1/index.d.ts.map +1 -0
- package/dist/d1/index.js +6 -0
- package/dist/d1/index.js.map +1 -0
- package/dist/d1/lower.d.ts +8 -0
- package/dist/d1/lower.d.ts.map +1 -0
- package/dist/d1/lower.js +167 -0
- package/dist/d1/lower.js.map +1 -0
- package/dist/d1/media.d.ts +5 -0
- package/dist/d1/media.d.ts.map +1 -0
- package/dist/d1/media.js +157 -0
- package/dist/d1/media.js.map +1 -0
- package/dist/d1/migrations.d.ts +12 -0
- package/dist/d1/migrations.d.ts.map +1 -0
- package/dist/d1/migrations.js +111 -0
- package/dist/d1/migrations.js.map +1 -0
- package/dist/d1/print.d.ts +28 -0
- package/dist/d1/print.d.ts.map +1 -0
- package/dist/d1/print.js +54 -0
- package/dist/d1/print.js.map +1 -0
- package/dist/d1/site.d.ts +17 -0
- package/dist/d1/site.d.ts.map +1 -0
- package/dist/d1/site.js +63 -0
- package/dist/d1/site.js.map +1 -0
- package/dist/d1/storage.d.ts +34 -0
- package/dist/d1/storage.d.ts.map +1 -0
- package/dist/d1/storage.js +288 -0
- package/dist/d1/storage.js.map +1 -0
- package/dist/d1/tz.d.ts +21 -0
- package/dist/d1/tz.d.ts.map +1 -0
- package/dist/d1/tz.js +54 -0
- package/dist/d1/tz.js.map +1 -0
- package/dist/d1/validator.d.ts +10 -0
- package/dist/d1/validator.d.ts.map +1 -0
- package/dist/d1/validator.js +33 -0
- package/dist/d1/validator.js.map +1 -0
- package/dist/mcp/apps.d.ts +43 -0
- package/dist/mcp/apps.d.ts.map +1 -0
- package/dist/mcp/apps.js +57 -0
- package/dist/mcp/apps.js.map +1 -0
- package/dist/mcp/catalog.d.ts +55 -0
- package/dist/mcp/catalog.d.ts.map +1 -0
- package/dist/mcp/catalog.js +81 -0
- package/dist/mcp/catalog.js.map +1 -0
- package/dist/mcp/createMcpSurface.d.ts +34 -0
- package/dist/mcp/createMcpSurface.d.ts.map +1 -0
- package/dist/mcp/createMcpSurface.js +150 -0
- package/dist/mcp/createMcpSurface.js.map +1 -0
- package/dist/mcp/index.d.ts +4 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +4 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/postgres/adapter.d.ts +20 -0
- package/dist/postgres/adapter.d.ts.map +1 -0
- package/dist/postgres/adapter.js +44 -0
- package/dist/postgres/adapter.js.map +1 -0
- package/dist/postgres/codec.d.ts +13 -0
- package/dist/postgres/codec.d.ts.map +1 -0
- package/dist/postgres/codec.js +110 -0
- package/dist/postgres/codec.js.map +1 -0
- package/dist/postgres/compile/index.d.ts +9 -0
- package/dist/postgres/compile/index.d.ts.map +1 -0
- package/dist/postgres/compile/index.js +9 -0
- package/dist/postgres/compile/index.js.map +1 -0
- package/dist/postgres/driver.d.ts +92 -0
- package/dist/postgres/driver.d.ts.map +1 -0
- package/dist/postgres/driver.js +110 -0
- package/dist/postgres/driver.js.map +1 -0
- package/dist/postgres/executor.d.ts +20 -0
- package/dist/postgres/executor.d.ts.map +1 -0
- package/dist/postgres/executor.js +69 -0
- package/dist/postgres/executor.js.map +1 -0
- package/dist/postgres/index.d.ts +7 -0
- package/dist/postgres/index.d.ts.map +1 -0
- package/dist/postgres/index.js +7 -0
- package/dist/postgres/index.js.map +1 -0
- package/dist/postgres/lower.d.ts +6 -0
- package/dist/postgres/lower.d.ts.map +1 -0
- package/dist/postgres/lower.js +157 -0
- package/dist/postgres/lower.js.map +1 -0
- package/dist/postgres/print.d.ts +11 -0
- package/dist/postgres/print.d.ts.map +1 -0
- package/dist/postgres/print.js +121 -0
- package/dist/postgres/print.js.map +1 -0
- package/dist/postgres/storage.d.ts +19 -0
- package/dist/postgres/storage.d.ts.map +1 -0
- package/dist/postgres/storage.js +201 -0
- package/dist/postgres/storage.js.map +1 -0
- package/dist/postgres/textRows.d.ts +10 -0
- package/dist/postgres/textRows.d.ts.map +1 -0
- package/dist/postgres/textRows.js +44 -0
- package/dist/postgres/textRows.js.map +1 -0
- package/dist/postgres/validator.d.ts +12 -0
- package/dist/postgres/validator.d.ts.map +1 -0
- package/dist/postgres/validator.js +46 -0
- package/dist/postgres/validator.js.map +1 -0
- package/dist/spec/domain/index.d.ts +3 -0
- package/dist/spec/domain/index.d.ts.map +1 -0
- package/dist/spec/domain/index.js +3 -0
- package/dist/spec/domain/index.js.map +1 -0
- package/dist/spec/domain/model/ContentState.d.ts +8 -0
- package/dist/spec/domain/model/ContentState.d.ts.map +1 -0
- package/dist/spec/domain/model/ContentState.js +7 -0
- package/dist/spec/domain/model/ContentState.js.map +1 -0
- package/dist/spec/domain/model/Entry.d.ts +29 -0
- package/dist/spec/domain/model/Entry.d.ts.map +1 -0
- package/dist/spec/domain/model/Entry.js +16 -0
- package/dist/spec/domain/model/Entry.js.map +1 -0
- package/dist/spec/domain/model/Locale.d.ts +30 -0
- package/dist/spec/domain/model/Locale.d.ts.map +1 -0
- package/dist/spec/domain/model/Locale.js +33 -0
- package/dist/spec/domain/model/Locale.js.map +1 -0
- package/dist/spec/domain/model/ManifestGrammar.d.ts +452 -0
- package/dist/spec/domain/model/ManifestGrammar.d.ts.map +1 -0
- package/dist/spec/domain/model/ManifestGrammar.js +149 -0
- package/dist/spec/domain/model/ManifestGrammar.js.map +1 -0
- package/dist/spec/domain/model/MediaMimeAccept.d.ts +55 -0
- package/dist/spec/domain/model/MediaMimeAccept.d.ts.map +1 -0
- package/dist/spec/domain/model/MediaMimeAccept.js +90 -0
- package/dist/spec/domain/model/MediaMimeAccept.js.map +1 -0
- package/dist/spec/domain/model/RuntimePlan.d.ts +94 -0
- package/dist/spec/domain/model/RuntimePlan.d.ts.map +1 -0
- package/dist/spec/domain/model/RuntimePlan.js +4 -0
- package/dist/spec/domain/model/RuntimePlan.js.map +1 -0
- package/dist/spec/domain/model/SiteConfig.d.ts +173 -0
- package/dist/spec/domain/model/SiteConfig.d.ts.map +1 -0
- package/dist/spec/domain/model/SiteConfig.js +13 -0
- package/dist/spec/domain/model/SiteConfig.js.map +1 -0
- package/dist/spec/domain/model/SqlIr.d.ts +96 -0
- package/dist/spec/domain/model/SqlIr.d.ts.map +1 -0
- package/dist/spec/domain/model/SqlIr.js +95 -0
- package/dist/spec/domain/model/SqlIr.js.map +1 -0
- package/dist/spec/domain/model/index.d.ts +14 -0
- package/dist/spec/domain/model/index.d.ts.map +1 -0
- package/dist/spec/domain/model/index.js +14 -0
- package/dist/spec/domain/model/index.js.map +1 -0
- package/dist/spec/domain/service/CloudflareCron.d.ts +2 -0
- package/dist/spec/domain/service/CloudflareCron.d.ts.map +1 -0
- package/dist/spec/domain/service/CloudflareCron.js +63 -0
- package/dist/spec/domain/service/CloudflareCron.js.map +1 -0
- package/dist/spec/domain/service/CrossSchemaChecker.d.ts +34 -0
- package/dist/spec/domain/service/CrossSchemaChecker.d.ts.map +1 -0
- package/dist/spec/domain/service/CrossSchemaChecker.js +114 -0
- package/dist/spec/domain/service/CrossSchemaChecker.js.map +1 -0
- package/dist/spec/domain/service/EntryDataValidator.d.ts +56 -0
- package/dist/spec/domain/service/EntryDataValidator.d.ts.map +1 -0
- package/dist/spec/domain/service/EntryDataValidator.js +88 -0
- package/dist/spec/domain/service/EntryDataValidator.js.map +1 -0
- package/dist/spec/domain/service/JsonSchemaToZod.d.ts +29 -0
- package/dist/spec/domain/service/JsonSchemaToZod.d.ts.map +1 -0
- package/dist/spec/domain/service/JsonSchemaToZod.js +156 -0
- package/dist/spec/domain/service/JsonSchemaToZod.js.map +1 -0
- package/dist/spec/domain/service/LifecycleStateMachine.d.ts +75 -0
- package/dist/spec/domain/service/LifecycleStateMachine.d.ts.map +1 -0
- package/dist/spec/domain/service/LifecycleStateMachine.js +76 -0
- package/dist/spec/domain/service/LifecycleStateMachine.js.map +1 -0
- package/dist/spec/domain/service/LocaleCanonicalizer.d.ts +29 -0
- package/dist/spec/domain/service/LocaleCanonicalizer.d.ts.map +1 -0
- package/dist/spec/domain/service/LocaleCanonicalizer.js +96 -0
- package/dist/spec/domain/service/LocaleCanonicalizer.js.map +1 -0
- package/dist/spec/domain/service/ManifestFieldChecks.d.ts +60 -0
- package/dist/spec/domain/service/ManifestFieldChecks.d.ts.map +1 -0
- package/dist/spec/domain/service/ManifestFieldChecks.js +116 -0
- package/dist/spec/domain/service/ManifestFieldChecks.js.map +1 -0
- package/dist/spec/domain/service/ManifestGraphValidator.d.ts +15 -0
- package/dist/spec/domain/service/ManifestGraphValidator.d.ts.map +1 -0
- package/dist/spec/domain/service/ManifestGraphValidator.js +225 -0
- package/dist/spec/domain/service/ManifestGraphValidator.js.map +1 -0
- package/dist/spec/domain/service/ManifestLinker.d.ts +45 -0
- package/dist/spec/domain/service/ManifestLinker.d.ts.map +1 -0
- package/dist/spec/domain/service/ManifestLinker.js +92 -0
- package/dist/spec/domain/service/ManifestLinker.js.map +1 -0
- package/dist/spec/domain/service/ManifestLocaleTrimmer.d.ts +16 -0
- package/dist/spec/domain/service/ManifestLocaleTrimmer.d.ts.map +1 -0
- package/dist/spec/domain/service/ManifestLocaleTrimmer.js +76 -0
- package/dist/spec/domain/service/ManifestLocaleTrimmer.js.map +1 -0
- package/dist/spec/domain/service/ManifestParser.d.ts +49 -0
- package/dist/spec/domain/service/ManifestParser.d.ts.map +1 -0
- package/dist/spec/domain/service/ManifestParser.js +203 -0
- package/dist/spec/domain/service/ManifestParser.js.map +1 -0
- package/dist/spec/domain/service/ManifestPartition.d.ts +9 -0
- package/dist/spec/domain/service/ManifestPartition.d.ts.map +1 -0
- package/dist/spec/domain/service/ManifestPartition.js +19 -0
- package/dist/spec/domain/service/ManifestPartition.js.map +1 -0
- package/dist/spec/domain/service/ManifestPathDiagnoser.d.ts +33 -0
- package/dist/spec/domain/service/ManifestPathDiagnoser.d.ts.map +1 -0
- package/dist/spec/domain/service/ManifestPathDiagnoser.js +43 -0
- package/dist/spec/domain/service/ManifestPathDiagnoser.js.map +1 -0
- package/dist/spec/domain/service/ManifestSourceSpans.d.ts +10 -0
- package/dist/spec/domain/service/ManifestSourceSpans.d.ts.map +1 -0
- package/dist/spec/domain/service/ManifestSourceSpans.js +76 -0
- package/dist/spec/domain/service/ManifestSourceSpans.js.map +1 -0
- package/dist/spec/domain/service/McpToolNaming.d.ts +25 -0
- package/dist/spec/domain/service/McpToolNaming.d.ts.map +1 -0
- package/dist/spec/domain/service/McpToolNaming.js +50 -0
- package/dist/spec/domain/service/McpToolNaming.js.map +1 -0
- package/dist/spec/domain/service/PlanFingerprint.d.ts +4 -0
- package/dist/spec/domain/service/PlanFingerprint.d.ts.map +1 -0
- package/dist/spec/domain/service/PlanFingerprint.js +14 -0
- package/dist/spec/domain/service/PlanFingerprint.js.map +1 -0
- package/dist/spec/domain/service/ProcedureViewSpecChecks.d.ts +4 -0
- package/dist/spec/domain/service/ProcedureViewSpecChecks.d.ts.map +1 -0
- package/dist/spec/domain/service/ProcedureViewSpecChecks.js +211 -0
- package/dist/spec/domain/service/ProcedureViewSpecChecks.js.map +1 -0
- package/dist/spec/domain/service/SchemaAdminUiChecker.d.ts +42 -0
- package/dist/spec/domain/service/SchemaAdminUiChecker.d.ts.map +1 -0
- package/dist/spec/domain/service/SchemaAdminUiChecker.js +289 -0
- package/dist/spec/domain/service/SchemaAdminUiChecker.js.map +1 -0
- package/dist/spec/domain/service/SchemaIndexChecker.d.ts +33 -0
- package/dist/spec/domain/service/SchemaIndexChecker.d.ts.map +1 -0
- package/dist/spec/domain/service/SchemaIndexChecker.js +256 -0
- package/dist/spec/domain/service/SchemaIndexChecker.js.map +1 -0
- package/dist/spec/domain/service/SchemaSearchChecker.d.ts +11 -0
- package/dist/spec/domain/service/SchemaSearchChecker.d.ts.map +1 -0
- package/dist/spec/domain/service/SchemaSearchChecker.js +78 -0
- package/dist/spec/domain/service/SchemaSearchChecker.js.map +1 -0
- package/dist/spec/domain/service/SchemaSpecChecks.d.ts +31 -0
- package/dist/spec/domain/service/SchemaSpecChecks.d.ts.map +1 -0
- package/dist/spec/domain/service/SchemaSpecChecks.js +445 -0
- package/dist/spec/domain/service/SchemaSpecChecks.js.map +1 -0
- package/dist/spec/domain/service/SiteDefaultsValidator.d.ts +39 -0
- package/dist/spec/domain/service/SiteDefaultsValidator.d.ts.map +1 -0
- package/dist/spec/domain/service/SiteDefaultsValidator.js +194 -0
- package/dist/spec/domain/service/SiteDefaultsValidator.js.map +1 -0
- package/dist/spec/domain/service/SqlClassify.d.ts +19 -0
- package/dist/spec/domain/service/SqlClassify.d.ts.map +1 -0
- package/dist/spec/domain/service/SqlClassify.js +42 -0
- package/dist/spec/domain/service/SqlClassify.js.map +1 -0
- package/dist/spec/domain/service/SqlRefusal.d.ts +16 -0
- package/dist/spec/domain/service/SqlRefusal.d.ts.map +1 -0
- package/dist/spec/domain/service/SqlRefusal.js +20 -0
- package/dist/spec/domain/service/SqlRefusal.js.map +1 -0
- package/dist/spec/domain/service/SqlTypes.d.ts +40 -0
- package/dist/spec/domain/service/SqlTypes.d.ts.map +1 -0
- package/dist/spec/domain/service/SqlTypes.js +110 -0
- package/dist/spec/domain/service/SqlTypes.js.map +1 -0
- package/dist/spec/domain/service/StaffRoleHierarchy.d.ts +3 -0
- package/dist/spec/domain/service/StaffRoleHierarchy.d.ts.map +1 -0
- package/dist/spec/domain/service/StaffRoleHierarchy.js +19 -0
- package/dist/spec/domain/service/StaffRoleHierarchy.js.map +1 -0
- package/dist/spec/domain/service/TriggerGraphChecks.d.ts +16 -0
- package/dist/spec/domain/service/TriggerGraphChecks.d.ts.map +1 -0
- package/dist/spec/domain/service/TriggerGraphChecks.js +337 -0
- package/dist/spec/domain/service/TriggerGraphChecks.js.map +1 -0
- package/dist/spec/domain/service/TriggerSpecChecks.d.ts +4 -0
- package/dist/spec/domain/service/TriggerSpecChecks.d.ts.map +1 -0
- package/dist/spec/domain/service/TriggerSpecChecks.js +89 -0
- package/dist/spec/domain/service/TriggerSpecChecks.js.map +1 -0
- package/dist/spec/domain/service/ValidatedAdminUiProjection.d.ts +11 -0
- package/dist/spec/domain/service/ValidatedAdminUiProjection.d.ts.map +1 -0
- package/dist/spec/domain/service/ValidatedAdminUiProjection.js +26 -0
- package/dist/spec/domain/service/ValidatedAdminUiProjection.js.map +1 -0
- package/dist/spec/domain/service/ViewAdminUiChecker.d.ts +14 -0
- package/dist/spec/domain/service/ViewAdminUiChecker.d.ts.map +1 -0
- package/dist/spec/domain/service/ViewAdminUiChecker.js +53 -0
- package/dist/spec/domain/service/ViewAdminUiChecker.js.map +1 -0
- package/dist/spec/domain/service/index.d.ts +24 -0
- package/dist/spec/domain/service/index.d.ts.map +1 -0
- package/dist/spec/domain/service/index.js +24 -0
- package/dist/spec/domain/service/index.js.map +1 -0
- package/dist/spec/index.d.ts +10 -0
- package/dist/spec/index.d.ts.map +1 -0
- package/dist/spec/index.js +12 -0
- package/dist/spec/index.js.map +1 -0
- package/dist/spec/infrastructure/cli/parseArgsError.d.ts +16 -0
- package/dist/spec/infrastructure/cli/parseArgsError.d.ts.map +1 -0
- package/dist/spec/infrastructure/cli/parseArgsError.js +34 -0
- package/dist/spec/infrastructure/cli/parseArgsError.js.map +1 -0
- package/dist/spec/infrastructure/index.d.ts +2 -0
- package/dist/spec/infrastructure/index.d.ts.map +1 -0
- package/dist/spec/infrastructure/index.js +2 -0
- package/dist/spec/infrastructure/index.js.map +1 -0
- package/dist/spec/infrastructure/sql/PgQueryParser.d.ts +18 -0
- package/dist/spec/infrastructure/sql/PgQueryParser.d.ts.map +1 -0
- package/dist/spec/infrastructure/sql/PgQueryParser.js +17 -0
- package/dist/spec/infrastructure/sql/PgQueryParser.js.map +1 -0
- package/dist/spec/infrastructure/sql/compilePlan.d.ts +37 -0
- package/dist/spec/infrastructure/sql/compilePlan.d.ts.map +1 -0
- package/dist/spec/infrastructure/sql/compilePlan.js +282 -0
- package/dist/spec/infrastructure/sql/compilePlan.js.map +1 -0
- package/dist/spec/infrastructure/sql/compileSql.d.ts +35 -0
- package/dist/spec/infrastructure/sql/compileSql.d.ts.map +1 -0
- package/dist/spec/infrastructure/sql/compileSql.js +92 -0
- package/dist/spec/infrastructure/sql/compileSql.js.map +1 -0
- package/dist/spec/infrastructure/sql/frontEnd.d.ts +8 -0
- package/dist/spec/infrastructure/sql/frontEnd.d.ts.map +1 -0
- package/dist/spec/infrastructure/sql/frontEnd.js +100 -0
- package/dist/spec/infrastructure/sql/frontEnd.js.map +1 -0
- package/dist/spec/infrastructure/sql/index.d.ts +4 -0
- package/dist/spec/infrastructure/sql/index.d.ts.map +1 -0
- package/dist/spec/infrastructure/sql/index.js +4 -0
- package/dist/spec/infrastructure/sql/index.js.map +1 -0
- package/dist/spec/kernel/diagnostic.d.ts +137 -0
- package/dist/spec/kernel/diagnostic.d.ts.map +1 -0
- package/dist/spec/kernel/diagnostic.js +296 -0
- package/dist/spec/kernel/diagnostic.js.map +1 -0
- package/dist/spec/kernel/index.d.ts +8 -0
- package/dist/spec/kernel/index.d.ts.map +1 -0
- package/dist/spec/kernel/index.js +8 -0
- package/dist/spec/kernel/index.js.map +1 -0
- package/dist/spec/usecase/EmitTypes.d.ts +22 -0
- package/dist/spec/usecase/EmitTypes.d.ts.map +1 -0
- package/dist/spec/usecase/EmitTypes.js +182 -0
- package/dist/spec/usecase/EmitTypes.js.map +1 -0
- package/dist/spec/usecase/ValidateManifestsUseCase.d.ts +8 -0
- package/dist/spec/usecase/ValidateManifestsUseCase.d.ts.map +1 -0
- package/dist/spec/usecase/ValidateManifestsUseCase.js +101 -0
- package/dist/spec/usecase/ValidateManifestsUseCase.js.map +1 -0
- package/dist/spec/usecase/dto/ValidateManifestsRequest.d.ts +27 -0
- package/dist/spec/usecase/dto/ValidateManifestsRequest.d.ts.map +1 -0
- package/dist/spec/usecase/dto/ValidateManifestsRequest.js +2 -0
- package/dist/spec/usecase/dto/ValidateManifestsRequest.js.map +1 -0
- package/dist/spec/usecase/dto/ValidateManifestsResponse.d.ts +14 -0
- package/dist/spec/usecase/dto/ValidateManifestsResponse.d.ts.map +1 -0
- package/dist/spec/usecase/dto/ValidateManifestsResponse.js +2 -0
- package/dist/spec/usecase/dto/ValidateManifestsResponse.js.map +1 -0
- package/dist/spec/usecase/dto/index.d.ts +3 -0
- package/dist/spec/usecase/dto/index.d.ts.map +1 -0
- package/dist/spec/usecase/dto/index.js +3 -0
- package/dist/spec/usecase/dto/index.js.map +1 -0
- package/dist/spec/usecase/index.d.ts +10 -0
- package/dist/spec/usecase/index.d.ts.map +1 -0
- package/dist/spec/usecase/index.js +10 -0
- package/dist/spec/usecase/index.js.map +1 -0
- package/dist/testing/cases/before-hook.d.ts +4 -0
- package/dist/testing/cases/before-hook.d.ts.map +1 -0
- package/dist/testing/cases/before-hook.js +71 -0
- package/dist/testing/cases/before-hook.js.map +1 -0
- package/dist/testing/cases/corpus.d.ts +12 -0
- package/dist/testing/cases/corpus.d.ts.map +1 -0
- package/dist/testing/cases/corpus.js +91 -0
- package/dist/testing/cases/corpus.js.map +1 -0
- package/dist/testing/cases/policy.d.ts +74 -0
- package/dist/testing/cases/policy.d.ts.map +1 -0
- package/dist/testing/cases/policy.js +142 -0
- package/dist/testing/cases/policy.js.map +1 -0
- package/dist/testing/cases/printer.d.ts +4 -0
- package/dist/testing/cases/printer.d.ts.map +1 -0
- package/dist/testing/cases/printer.js +32 -0
- package/dist/testing/cases/printer.js.map +1 -0
- package/dist/testing/cases/report-view.d.ts +5 -0
- package/dist/testing/cases/report-view.d.ts.map +1 -0
- package/dist/testing/cases/report-view.js +33 -0
- package/dist/testing/cases/report-view.js.map +1 -0
- package/dist/testing/cases/requisition.d.ts +4 -0
- package/dist/testing/cases/requisition.d.ts.map +1 -0
- package/dist/testing/cases/requisition.js +38 -0
- package/dist/testing/cases/requisition.js.map +1 -0
- package/dist/testing/cases/search-places.d.ts +4 -0
- package/dist/testing/cases/search-places.d.ts.map +1 -0
- package/dist/testing/cases/search-places.js +60 -0
- package/dist/testing/cases/search-places.js.map +1 -0
- package/dist/testing/cases/stock.d.ts +4 -0
- package/dist/testing/cases/stock.d.ts.map +1 -0
- package/dist/testing/cases/stock.js +35 -0
- package/dist/testing/cases/stock.js.map +1 -0
- package/dist/testing/cases/store.d.ts +4 -0
- package/dist/testing/cases/store.d.ts.map +1 -0
- package/dist/testing/cases/store.js +100 -0
- package/dist/testing/cases/store.js.map +1 -0
- package/dist/testing/harness.d.ts +94 -0
- package/dist/testing/harness.d.ts.map +1 -0
- package/dist/testing/harness.js +168 -0
- package/dist/testing/harness.js.map +1 -0
- package/dist/testing/index.d.ts +37 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +43 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/report.d.ts +15 -0
- package/dist/testing/report.d.ts.map +1 -0
- package/dist/testing/report.js +22 -0
- package/dist/testing/report.js.map +1 -0
- package/dist/web/createRestSurface.d.ts +7 -0
- package/dist/web/createRestSurface.d.ts.map +1 -0
- package/dist/web/createRestSurface.js +39 -0
- package/dist/web/createRestSurface.js.map +1 -0
- package/dist/web/index.d.ts +2 -0
- package/dist/web/index.d.ts.map +1 -0
- package/dist/web/index.js +2 -0
- package/dist/web/index.js.map +1 -0
- package/docs/adr/0008-structured-diagnostic-shape.md +2 -2
- package/docs/adr/0011-adapter-port-spec.md +2 -2
- package/docs/adr/0014-auth-better-auth-and-multi-tenant-mcp.md +21 -2
- package/docs/adr/0019-sealed-manifest-runtime-pipeline.md +5 -1
- package/docs/adr/0021-retire-starter-scaffolding.md +1 -1
- package/docs/adr/0022-caller-observed-version-occ.md +1 -1
- package/docs/adr/0024-manifest-native-schema-tables.md +2 -2
- package/docs/adr/0026-progressive-generate.md +36 -0
- package/docs/adr/0027-scheduled-procedure-triggers.md +31 -0
- package/docs/adr/0028-schema-ttl-expiry.md +33 -0
- package/docs/adr/0029-mcp-apps-interaction-contracts.md +324 -0
- package/docs/adr/0030-store.md +40 -0
- package/docs/adr/0031-host-cloud-core-contract.md +25 -0
- package/docs/adr/0032-store-centric-core-and-service-contract.md +361 -0
- package/docs/adr/0033-storage-converges-to-the-plan.md +92 -0
- package/docs/adr/0034-store-is-authored-as-sql.md +192 -0
- package/docs/adr/0035-sql-dialects.md +154 -0
- package/docs/adr/0036-host-and-dialect.md +65 -0
- package/docs/adr/0037-postgresql-is-the-reference-dialect.md +124 -0
- package/docs/adr/0038-bun-native-host.md +63 -0
- package/docs/adr/README.md +26 -8
- package/docs/adr/adr-lite-861-admin-webmcp.md +6 -0
- package/docs/adr/adr-lite-909-admin-ui-kit.md +1 -1
- package/docs/examples/README.md +16 -18
- package/docs/examples/commerce-inventory.md +481 -0
- package/docs/examples/commerce.md +254 -0
- package/docs/examples/guarded-api.md +238 -0
- package/docs/examples/intake-hooks.md +237 -0
- package/docs/examples/intake.md +127 -0
- package/docs/examples/legal-documents.md +218 -0
- package/docs/examples/procurement.md +215 -0
- package/docs/examples/publication.md +211 -0
- package/docs/examples/reference-service/.dev.vars.example +4 -0
- package/docs/examples/reference-service/.mantle/generated/mantle.ts +174 -0
- package/docs/examples/reference-service/.mantle/generated/plan.json +1936 -0
- package/docs/examples/reference-service/README.md +33 -0
- package/docs/examples/reference-service/manifests/catalog.yaml +103 -0
- package/docs/examples/reference-service/manifests/orders.yaml +120 -0
- package/docs/examples/reference-service/mantle.config.json +1 -0
- package/docs/examples/reference-service/package.json +27 -0
- package/docs/examples/reference-service/smoke.mjs +156 -0
- package/docs/examples/reference-service/src/handlers.ts +36 -0
- package/docs/examples/reference-service/src/index.ts +33 -0
- package/docs/examples/reference-service/src/service.ts +78 -0
- package/docs/examples/{host-minimal-worker → reference-service}/tsconfig.json +7 -2
- package/docs/examples/reference-service/wrangler.jsonc +26 -0
- package/docs/examples/reservation.md +142 -0
- package/docs/handbook/cloudflare/authentication.md +96 -299
- package/docs/handbook/cloudflare/chatgpt-sites.md +104 -15
- package/docs/handbook/cloudflare/deploy-and-operate.md +77 -71
- package/docs/handbook/cloudflare/media-r2.md +64 -187
- package/docs/handbook/cloudflare/service-entry.md +138 -0
- package/docs/handbook/concepts/authorization.md +104 -94
- package/docs/handbook/concepts/four-atoms.md +68 -144
- package/docs/handbook/concepts/lifecycle-and-locales.md +62 -114
- package/docs/handbook/concepts/mcp-and-agents.md +112 -117
- package/docs/handbook/concepts/procedures-and-triggers.md +126 -181
- package/docs/handbook/concepts/runtime-and-adapters.md +177 -156
- package/docs/handbook/concepts/views.md +97 -173
- package/docs/handbook/examples/hub.md +17 -6
- package/docs/handbook/guides/admin-ui.md +101 -96
- package/docs/handbook/guides/agent-setup.md +56 -71
- package/docs/handbook/guides/typed-queries.md +105 -111
- package/docs/handbook/navigation.json +8 -32
- package/docs/handbook/reference/authorization.md +52 -271
- package/docs/handbook/reference/diagnostics.md +69 -173
- package/docs/handbook/reference/features.md +48 -50
- package/docs/handbook/reference/manifest.md +56 -116
- package/docs/handbook/reference/procedure.md +92 -229
- package/docs/handbook/reference/schema.md +156 -215
- package/docs/handbook/reference/site-config.md +58 -211
- package/docs/handbook/reference/surface.md +69 -181
- package/docs/handbook/reference/trigger.md +73 -162
- package/docs/handbook/reference/view.md +140 -241
- package/docs/handbook/releases/index.md +58 -22
- package/docs/handbook/start/overview.md +59 -48
- package/docs/handbook/start/project-and-cli.md +127 -116
- package/docs/handbook/start/quickstart-worker.md +102 -151
- package/docs/skills/develop/SKILL.md +114 -232
- package/docs/skills/develop/mcp-app.md +79 -0
- package/docs/skills/integrate/SKILL.md +96 -0
- package/docs/skills/media-gc/SKILL.md +21 -10
- package/docs/skills/provision/SKILL.md +68 -162
- package/docs/skills/update/SKILL.md +33 -34
- package/docs/upgrade-0.1-to-0.2.md +211 -0
- package/package.json +87 -105
- package/dist/admin-ui.d.ts +0 -2
- package/dist/admin-ui.d.ts.map +0 -1
- package/dist/admin-ui.js +0 -2
- package/dist/admin-ui.js.map +0 -1
- package/dist/admin.d.ts +0 -2
- package/dist/admin.d.ts.map +0 -1
- package/dist/admin.js +0 -2
- package/dist/admin.js.map +0 -1
- package/dist/auth.d.ts +0 -2
- package/dist/auth.d.ts.map +0 -1
- package/dist/auth.js +0 -2
- package/dist/auth.js.map +0 -1
- package/dist/bun.d.ts +0 -2
- package/dist/bun.d.ts.map +0 -1
- package/dist/bun.js +0 -2
- package/dist/bun.js.map +0 -1
- package/dist/cli/harness.d.ts +0 -3
- package/dist/cli/harness.d.ts.map +0 -1
- package/dist/cli/harness.js +0 -214
- package/dist/cli/harness.js.map +0 -1
- package/dist/cli/skills.d.ts +0 -3
- package/dist/cli/skills.d.ts.map +0 -1
- package/dist/cli/skills.js +0 -128
- package/dist/cli/skills.js.map +0 -1
- package/dist/cloudflare.d.ts +0 -2
- package/dist/cloudflare.d.ts.map +0 -1
- package/dist/cloudflare.js +0 -2
- package/dist/cloudflare.js.map +0 -1
- package/dist/codegen/emitMantleModule.d.ts +0 -22
- package/dist/codegen/emitMantleModule.d.ts.map +0 -1
- package/dist/codegen/emitMantleModule.js +0 -291
- package/dist/codegen/emitMantleModule.js.map +0 -1
- package/dist/codegen.d.ts +0 -2
- package/dist/codegen.d.ts.map +0 -1
- package/dist/codegen.js +0 -2
- package/dist/codegen.js.map +0 -1
- package/dist/runtime-testing.d.ts +0 -2
- package/dist/runtime-testing.d.ts.map +0 -1
- package/dist/runtime-testing.js +0 -2
- package/dist/runtime-testing.js.map +0 -1
- package/dist/runtime.d.ts +0 -2
- package/dist/runtime.d.ts.map +0 -1
- package/dist/runtime.js +0 -2
- package/dist/runtime.js.map +0 -1
- package/dist/spec.d.ts +0 -2
- package/dist/spec.d.ts.map +0 -1
- package/dist/spec.js +0 -2
- package/dist/spec.js.map +0 -1
- package/dist/vercel-libsql.d.ts +0 -2
- package/dist/vercel-libsql.d.ts.map +0 -1
- package/dist/vercel-libsql.js +0 -2
- package/dist/vercel-libsql.js.map +0 -1
- package/dist/vercel.d.ts +0 -2
- package/dist/vercel.d.ts.map +0 -1
- package/dist/vercel.js +0 -2
- package/dist/vercel.js.map +0 -1
- package/dist/web.d.ts +0 -2
- package/dist/web.d.ts.map +0 -1
- package/dist/web.js +0 -2
- package/dist/web.js.map +0 -1
- package/docs/adapter-guide.md +0 -222
- package/docs/agent-prompts.md +0 -102
- package/docs/api-mcp-authorization.md +0 -5
- package/docs/assets/mantle-admin-developer.png +0 -0
- package/docs/assets/mantle-admin-operations.png +0 -0
- package/docs/assets/mantle-hero.jpg +0 -0
- package/docs/auth-hosting-model.md +0 -166
- package/docs/cloudflare-low-level-composition.md +0 -5
- package/docs/consumer-onboarding-audit.md +0 -65
- package/docs/deferred-lifecycle-queues.md +0 -5
- package/docs/design-atoms.md +0 -16
- package/docs/design-references/editorial-blog-2026-05-05.md +0 -218
- package/docs/direct-authoring.md +0 -5
- package/docs/examples/builtin-commerce.md +0 -269
- package/docs/examples/builtin-intake.md +0 -143
- package/docs/examples/builtin-legal-documents.md +0 -189
- package/docs/examples/builtin-procurement.md +0 -241
- package/docs/examples/builtin-publication.md +0 -241
- package/docs/examples/builtin-reservation.md +0 -149
- package/docs/examples/cf-primitives-commerce-inventory.md +0 -809
- package/docs/examples/cf-primitives-guarded-api.md +0 -429
- package/docs/examples/cf-primitives-intake-hooks.md +0 -319
- package/docs/examples/host-chatgpt-sites/.openai/hosting.json +0 -1
- package/docs/examples/host-chatgpt-sites/README.md +0 -70
- package/docs/examples/host-chatgpt-sites/drizzle/0000_sites_users.sql +0 -8
- package/docs/examples/host-chatgpt-sites/drizzle/0001_mantle.sql +0 -294
- package/docs/examples/host-chatgpt-sites/drizzle/0002_article_cover.sql +0 -5
- package/docs/examples/host-chatgpt-sites/drizzle/0003_store_instance_id.sql +0 -1
- package/docs/examples/host-chatgpt-sites/drizzle/meta/_journal.json +0 -1
- package/docs/examples/host-chatgpt-sites/manifests/site.yaml +0 -27
- package/docs/examples/host-chatgpt-sites/package.json +0 -1
- package/docs/examples/host-chatgpt-sites/public/site.css +0 -1
- package/docs/examples/host-chatgpt-sites/scripts/build.mjs +0 -13
- package/docs/examples/host-chatgpt-sites/scripts/check.mjs +0 -101
- package/docs/examples/host-chatgpt-sites/scripts/migration.mjs +0 -9
- package/docs/examples/host-chatgpt-sites/src/chatgpt-auth.ts +0 -63
- package/docs/examples/host-chatgpt-sites/src/index.ts +0 -46
- package/docs/examples/host-chatgpt-sites/src/mcp.ts +0 -49
- package/docs/examples/host-chatgpt-sites/src/media.ts +0 -109
- package/docs/examples/host-chatgpt-sites/src/r2-lab.ts +0 -38
- package/docs/examples/host-chatgpt-sites/src/storage-fingerprint.json +0 -1
- package/docs/examples/host-chatgpt-sites/src/web.ts +0 -35
- package/docs/examples/host-chatgpt-sites/tsconfig.json +0 -1
- package/docs/examples/host-chatgpt-sites/wrangler.jsonc +0 -10
- package/docs/examples/host-local-admin-otp/.dev.vars.example +0 -3
- package/docs/examples/host-local-admin-otp/README.md +0 -80
- package/docs/examples/host-local-admin-otp/ensure-dev-vars.mjs +0 -5
- package/docs/examples/host-local-admin-otp/manifests/site.yaml +0 -25
- package/docs/examples/host-local-admin-otp/package.json +0 -29
- package/docs/examples/host-local-admin-otp/public/.gitkeep +0 -1
- package/docs/examples/host-local-admin-otp/smoke.mjs +0 -141
- package/docs/examples/host-local-admin-otp/src/index.ts +0 -54
- package/docs/examples/host-local-admin-otp/tsconfig.json +0 -17
- package/docs/examples/host-local-admin-otp/wrangler.jsonc +0 -23
- package/docs/examples/host-minimal-worker/README.md +0 -41
- package/docs/examples/host-minimal-worker/manifests/site.yaml +0 -25
- package/docs/examples/host-minimal-worker/package.json +0 -26
- package/docs/examples/host-minimal-worker/smoke.mjs +0 -23
- package/docs/examples/host-minimal-worker/src/index.ts +0 -4
- package/docs/examples/host-minimal-worker/wrangler.jsonc +0 -22
- package/docs/handbook/chatgpt-sites/equipment-checkout.md +0 -231
- package/docs/handbook/chatgpt-sites/host-reference.md +0 -113
- package/docs/handbook/chatgpt-sites/index.md +0 -123
- package/docs/handbook/cloudflare/bindings.md +0 -298
- package/docs/handbook/cloudflare/conventional-worker.md +0 -162
- package/docs/handbook/cloudflare/deferred-hooks-queues.md +0 -170
- package/docs/handbook/cloudflare/low-level-composition.md +0 -169
- package/docs/handbook/cloudflare/public-web.md +0 -144
- package/docs/handbook/cloudflare/site-chrome.md +0 -75
- package/docs/handbook/examples/commerce-transaction.md +0 -11
- package/docs/handbook/examples/commerce.md +0 -11
- package/docs/handbook/examples/guarded-api.md +0 -10
- package/docs/handbook/examples/intake-form.md +0 -12
- package/docs/handbook/examples/intake-hooks.md +0 -11
- package/docs/handbook/examples/legal-documents.md +0 -10
- package/docs/handbook/examples/procurement-approvals.md +0 -10
- package/docs/handbook/examples/publication.md +0 -10
- package/docs/handbook/examples/reservation.md +0 -10
- package/docs/handbook/start/quickstart-admin.md +0 -50
- package/docs/labels.md +0 -71
- package/docs/media-uploads.md +0 -5
- package/docs/migration-0.1.2.md +0 -13
- package/docs/performance-harness.md +0 -228
- package/docs/release-process.md +0 -244
- package/docs/schema-indexes.md +0 -5
- package/docs/sealed-pipeline-ownership.md +0 -101
- package/docs/skills/plugin/SKILL.md +0 -132
- package/docs/skills/theme/SKILL.md +0 -77
- package/docs/spec-only-host-adoption.md +0 -157
- package/docs/transaction-patterns.md +0 -5
- package/skills/README.md +0 -125
- package/skills/develop/SKILL.md +0 -250
- package/skills/install/SKILL.md +0 -149
- package/skills/media-gc/SKILL.md +0 -85
- package/skills/plugin/SKILL.md +0 -132
- package/skills/provision/SKILL.md +0 -194
- package/skills/theme/SKILL.md +0 -77
- package/skills/update/SKILL.md +0 -51
|
@@ -1,294 +0,0 @@
|
|
|
1
|
-
CREATE TABLE IF NOT EXISTS site_config (
|
|
2
|
-
key TEXT PRIMARY KEY,
|
|
3
|
-
value TEXT NOT NULL
|
|
4
|
-
);
|
|
5
|
-
--> statement-breakpoint
|
|
6
|
-
CREATE TABLE IF NOT EXISTS user (
|
|
7
|
-
id TEXT PRIMARY KEY NOT NULL,
|
|
8
|
-
name TEXT NOT NULL,
|
|
9
|
-
email TEXT NOT NULL UNIQUE,
|
|
10
|
-
emailVerified INTEGER NOT NULL DEFAULT 0,
|
|
11
|
-
image TEXT,
|
|
12
|
-
createdAt TEXT NOT NULL,
|
|
13
|
-
updatedAt TEXT NOT NULL,
|
|
14
|
-
role TEXT,
|
|
15
|
-
banned INTEGER DEFAULT 0,
|
|
16
|
-
banReason TEXT,
|
|
17
|
-
banExpires TEXT,
|
|
18
|
-
githubLogin TEXT
|
|
19
|
-
);
|
|
20
|
-
--> statement-breakpoint
|
|
21
|
-
-- Partial index keeps ensureBootstrapOwner's role-IN scan off
|
|
22
|
-
-- the pile of role=NULL rows.
|
|
23
|
-
CREATE INDEX IF NOT EXISTS user_role_idx ON user (role) WHERE role IS NOT NULL;
|
|
24
|
-
--> statement-breakpoint
|
|
25
|
-
CREATE TABLE IF NOT EXISTS session (
|
|
26
|
-
id TEXT PRIMARY KEY NOT NULL,
|
|
27
|
-
expiresAt TEXT NOT NULL,
|
|
28
|
-
token TEXT NOT NULL UNIQUE,
|
|
29
|
-
createdAt TEXT NOT NULL,
|
|
30
|
-
updatedAt TEXT NOT NULL,
|
|
31
|
-
ipAddress TEXT,
|
|
32
|
-
userAgent TEXT,
|
|
33
|
-
userId TEXT NOT NULL REFERENCES user(id) ON DELETE CASCADE,
|
|
34
|
-
impersonatedBy TEXT
|
|
35
|
-
);
|
|
36
|
-
--> statement-breakpoint
|
|
37
|
-
CREATE INDEX IF NOT EXISTS session_userId_idx ON session (userId);
|
|
38
|
-
--> statement-breakpoint
|
|
39
|
-
CREATE TABLE IF NOT EXISTS account (
|
|
40
|
-
id TEXT PRIMARY KEY NOT NULL,
|
|
41
|
-
issuer TEXT NOT NULL,
|
|
42
|
-
accountId TEXT NOT NULL,
|
|
43
|
-
providerId TEXT NOT NULL,
|
|
44
|
-
userId TEXT NOT NULL REFERENCES user(id) ON DELETE CASCADE,
|
|
45
|
-
accessToken TEXT,
|
|
46
|
-
refreshToken TEXT,
|
|
47
|
-
idToken TEXT,
|
|
48
|
-
accessTokenExpiresAt TEXT,
|
|
49
|
-
refreshTokenExpiresAt TEXT,
|
|
50
|
-
scope TEXT,
|
|
51
|
-
password TEXT,
|
|
52
|
-
createdAt TEXT NOT NULL,
|
|
53
|
-
updatedAt TEXT NOT NULL,
|
|
54
|
-
UNIQUE (issuer, accountId)
|
|
55
|
-
);
|
|
56
|
-
--> statement-breakpoint
|
|
57
|
-
CREATE INDEX IF NOT EXISTS account_userId_idx ON account (userId);
|
|
58
|
-
--> statement-breakpoint
|
|
59
|
-
CREATE TABLE IF NOT EXISTS verification (
|
|
60
|
-
id TEXT PRIMARY KEY NOT NULL,
|
|
61
|
-
identifier TEXT NOT NULL,
|
|
62
|
-
value TEXT NOT NULL,
|
|
63
|
-
expiresAt TEXT NOT NULL,
|
|
64
|
-
createdAt TEXT NOT NULL,
|
|
65
|
-
updatedAt TEXT NOT NULL
|
|
66
|
-
);
|
|
67
|
-
--> statement-breakpoint
|
|
68
|
-
CREATE INDEX IF NOT EXISTS verification_identifier_idx ON verification (identifier);
|
|
69
|
-
--> statement-breakpoint
|
|
70
|
-
CREATE TABLE IF NOT EXISTS jwks (
|
|
71
|
-
id TEXT PRIMARY KEY NOT NULL,
|
|
72
|
-
publicKey TEXT NOT NULL,
|
|
73
|
-
privateKey TEXT NOT NULL,
|
|
74
|
-
createdAt TEXT NOT NULL,
|
|
75
|
-
expiresAt TEXT,
|
|
76
|
-
alg TEXT,
|
|
77
|
-
crv TEXT
|
|
78
|
-
);
|
|
79
|
-
--> statement-breakpoint
|
|
80
|
-
CREATE TABLE IF NOT EXISTS oauthClient (
|
|
81
|
-
id TEXT PRIMARY KEY NOT NULL,
|
|
82
|
-
clientId TEXT NOT NULL UNIQUE,
|
|
83
|
-
clientSecret TEXT,
|
|
84
|
-
clientDiscoveryId TEXT,
|
|
85
|
-
disabled INTEGER DEFAULT 0,
|
|
86
|
-
skipConsent INTEGER,
|
|
87
|
-
enableEndSession INTEGER,
|
|
88
|
-
subjectType TEXT,
|
|
89
|
-
scopes TEXT,
|
|
90
|
-
clientCredentialsScopes TEXT DEFAULT '[]',
|
|
91
|
-
userId TEXT REFERENCES user(id) ON DELETE CASCADE,
|
|
92
|
-
createdAt TEXT,
|
|
93
|
-
updatedAt TEXT,
|
|
94
|
-
name TEXT,
|
|
95
|
-
uri TEXT,
|
|
96
|
-
icon TEXT,
|
|
97
|
-
contacts TEXT,
|
|
98
|
-
tos TEXT,
|
|
99
|
-
policy TEXT,
|
|
100
|
-
softwareId TEXT,
|
|
101
|
-
softwareVersion TEXT,
|
|
102
|
-
softwareStatement TEXT,
|
|
103
|
-
redirectUris TEXT NOT NULL,
|
|
104
|
-
postLogoutRedirectUris TEXT,
|
|
105
|
-
backchannelLogoutUri TEXT,
|
|
106
|
-
backchannelLogoutSessionRequired INTEGER,
|
|
107
|
-
tokenEndpointAuthMethod TEXT,
|
|
108
|
-
applicationType TEXT,
|
|
109
|
-
jwks TEXT,
|
|
110
|
-
jwksUri TEXT,
|
|
111
|
-
grantTypes TEXT,
|
|
112
|
-
responseTypes TEXT,
|
|
113
|
-
requirePKCE INTEGER,
|
|
114
|
-
dpopBoundAccessTokens INTEGER DEFAULT 0,
|
|
115
|
-
referenceId TEXT,
|
|
116
|
-
metadata TEXT
|
|
117
|
-
);
|
|
118
|
-
--> statement-breakpoint
|
|
119
|
-
CREATE INDEX IF NOT EXISTS oauthClient_userId_idx ON oauthClient (userId);
|
|
120
|
-
--> statement-breakpoint
|
|
121
|
-
CREATE TABLE IF NOT EXISTS oauthResource (
|
|
122
|
-
id TEXT PRIMARY KEY NOT NULL,
|
|
123
|
-
identifier TEXT NOT NULL UNIQUE,
|
|
124
|
-
name TEXT NOT NULL,
|
|
125
|
-
accessTokenTtl INTEGER,
|
|
126
|
-
refreshTokenTtl INTEGER,
|
|
127
|
-
signingAlgorithm TEXT,
|
|
128
|
-
signingKeyId TEXT,
|
|
129
|
-
allowedScopes TEXT,
|
|
130
|
-
customClaims TEXT,
|
|
131
|
-
dpopBoundAccessTokensRequired INTEGER DEFAULT 0,
|
|
132
|
-
disabled INTEGER DEFAULT 0,
|
|
133
|
-
createdAt TEXT,
|
|
134
|
-
updatedAt TEXT,
|
|
135
|
-
policyVersion INTEGER DEFAULT 1,
|
|
136
|
-
metadata TEXT
|
|
137
|
-
);
|
|
138
|
-
--> statement-breakpoint
|
|
139
|
-
CREATE TABLE IF NOT EXISTS oauthClientResource (
|
|
140
|
-
id TEXT PRIMARY KEY NOT NULL,
|
|
141
|
-
clientId TEXT NOT NULL REFERENCES oauthClient(clientId) ON DELETE CASCADE,
|
|
142
|
-
resourceId TEXT NOT NULL REFERENCES oauthResource(identifier) ON DELETE CASCADE,
|
|
143
|
-
metadata TEXT,
|
|
144
|
-
createdAt TEXT,
|
|
145
|
-
UNIQUE (clientId, resourceId)
|
|
146
|
-
);
|
|
147
|
-
--> statement-breakpoint
|
|
148
|
-
CREATE INDEX IF NOT EXISTS oauthClientResource_clientId_idx
|
|
149
|
-
ON oauthClientResource (clientId);
|
|
150
|
-
--> statement-breakpoint
|
|
151
|
-
CREATE INDEX IF NOT EXISTS oauthClientResource_resourceId_idx
|
|
152
|
-
ON oauthClientResource (resourceId);
|
|
153
|
-
--> statement-breakpoint
|
|
154
|
-
CREATE TABLE IF NOT EXISTS oauthRefreshToken (
|
|
155
|
-
id TEXT PRIMARY KEY NOT NULL,
|
|
156
|
-
token TEXT NOT NULL UNIQUE,
|
|
157
|
-
clientId TEXT NOT NULL REFERENCES oauthClient(clientId) ON DELETE CASCADE,
|
|
158
|
-
sessionId TEXT REFERENCES session(id) ON DELETE SET NULL,
|
|
159
|
-
userId TEXT NOT NULL REFERENCES user(id) ON DELETE CASCADE,
|
|
160
|
-
referenceId TEXT,
|
|
161
|
-
authorizationCodeId TEXT,
|
|
162
|
-
resources TEXT,
|
|
163
|
-
requestedUserInfoClaims TEXT,
|
|
164
|
-
expiresAt TEXT NOT NULL,
|
|
165
|
-
createdAt TEXT NOT NULL,
|
|
166
|
-
revoked TEXT,
|
|
167
|
-
rotatedAt TEXT,
|
|
168
|
-
rotationReplayResponse TEXT,
|
|
169
|
-
rotationReplayExpiresAt TEXT,
|
|
170
|
-
authTime TEXT,
|
|
171
|
-
confirmation TEXT,
|
|
172
|
-
scopes TEXT NOT NULL
|
|
173
|
-
);
|
|
174
|
-
--> statement-breakpoint
|
|
175
|
-
CREATE INDEX IF NOT EXISTS oauthRefreshToken_clientId_idx ON oauthRefreshToken (clientId);
|
|
176
|
-
--> statement-breakpoint
|
|
177
|
-
CREATE INDEX IF NOT EXISTS oauthRefreshToken_sessionId_idx ON oauthRefreshToken (sessionId);
|
|
178
|
-
--> statement-breakpoint
|
|
179
|
-
CREATE INDEX IF NOT EXISTS oauthRefreshToken_userId_idx ON oauthRefreshToken (userId);
|
|
180
|
-
--> statement-breakpoint
|
|
181
|
-
CREATE INDEX IF NOT EXISTS oauthRefreshToken_authorizationCodeId_idx
|
|
182
|
-
ON oauthRefreshToken (authorizationCodeId);
|
|
183
|
-
--> statement-breakpoint
|
|
184
|
-
CREATE TABLE IF NOT EXISTS oauthAccessToken (
|
|
185
|
-
id TEXT PRIMARY KEY NOT NULL,
|
|
186
|
-
token TEXT NOT NULL UNIQUE,
|
|
187
|
-
clientId TEXT NOT NULL REFERENCES oauthClient(clientId) ON DELETE CASCADE,
|
|
188
|
-
sessionId TEXT REFERENCES session(id) ON DELETE SET NULL,
|
|
189
|
-
userId TEXT REFERENCES user(id) ON DELETE CASCADE,
|
|
190
|
-
referenceId TEXT,
|
|
191
|
-
authorizationCodeId TEXT,
|
|
192
|
-
resources TEXT,
|
|
193
|
-
requestedUserInfoClaims TEXT,
|
|
194
|
-
refreshId TEXT REFERENCES oauthRefreshToken(id) ON DELETE CASCADE,
|
|
195
|
-
expiresAt TEXT NOT NULL,
|
|
196
|
-
createdAt TEXT NOT NULL,
|
|
197
|
-
revoked TEXT,
|
|
198
|
-
confirmation TEXT,
|
|
199
|
-
scopes TEXT NOT NULL
|
|
200
|
-
);
|
|
201
|
-
--> statement-breakpoint
|
|
202
|
-
CREATE INDEX IF NOT EXISTS oauthAccessToken_clientId_idx ON oauthAccessToken (clientId);
|
|
203
|
-
--> statement-breakpoint
|
|
204
|
-
CREATE INDEX IF NOT EXISTS oauthAccessToken_sessionId_idx ON oauthAccessToken (sessionId);
|
|
205
|
-
--> statement-breakpoint
|
|
206
|
-
CREATE INDEX IF NOT EXISTS oauthAccessToken_userId_idx ON oauthAccessToken (userId);
|
|
207
|
-
--> statement-breakpoint
|
|
208
|
-
CREATE INDEX IF NOT EXISTS oauthAccessToken_refreshId_idx ON oauthAccessToken (refreshId);
|
|
209
|
-
--> statement-breakpoint
|
|
210
|
-
CREATE INDEX IF NOT EXISTS oauthAccessToken_authorizationCodeId_idx
|
|
211
|
-
ON oauthAccessToken (authorizationCodeId);
|
|
212
|
-
--> statement-breakpoint
|
|
213
|
-
CREATE TABLE IF NOT EXISTS oauthConsent (
|
|
214
|
-
id TEXT PRIMARY KEY NOT NULL,
|
|
215
|
-
clientId TEXT NOT NULL REFERENCES oauthClient(clientId) ON DELETE CASCADE,
|
|
216
|
-
userId TEXT REFERENCES user(id) ON DELETE CASCADE,
|
|
217
|
-
referenceId TEXT,
|
|
218
|
-
resources TEXT,
|
|
219
|
-
requestedUserInfoClaims TEXT,
|
|
220
|
-
scopes TEXT NOT NULL,
|
|
221
|
-
createdAt TEXT NOT NULL,
|
|
222
|
-
updatedAt TEXT NOT NULL
|
|
223
|
-
);
|
|
224
|
-
--> statement-breakpoint
|
|
225
|
-
CREATE INDEX IF NOT EXISTS oauthConsent_clientId_idx ON oauthConsent (clientId);
|
|
226
|
-
--> statement-breakpoint
|
|
227
|
-
CREATE INDEX IF NOT EXISTS oauthConsent_userId_idx ON oauthConsent (userId);
|
|
228
|
-
--> statement-breakpoint
|
|
229
|
-
CREATE TABLE IF NOT EXISTS oauthClientAssertion (
|
|
230
|
-
id TEXT PRIMARY KEY NOT NULL,
|
|
231
|
-
expiresAt TEXT NOT NULL
|
|
232
|
-
);
|
|
233
|
-
--> statement-breakpoint
|
|
234
|
-
CREATE TABLE IF NOT EXISTS media_assets (
|
|
235
|
-
id TEXT PRIMARY KEY,
|
|
236
|
-
created_at INTEGER NOT NULL,
|
|
237
|
-
owner_id TEXT,
|
|
238
|
-
alt TEXT,
|
|
239
|
-
caption TEXT,
|
|
240
|
-
variants TEXT NOT NULL,
|
|
241
|
-
metadata TEXT
|
|
242
|
-
);
|
|
243
|
-
--> statement-breakpoint
|
|
244
|
-
CREATE INDEX IF NOT EXISTS media_assets_by_owner_created
|
|
245
|
-
ON media_assets (owner_id, created_at DESC);
|
|
246
|
-
--> statement-breakpoint
|
|
247
|
-
CREATE TABLE IF NOT EXISTS pending_media_uploads (
|
|
248
|
-
id TEXT PRIMARY KEY,
|
|
249
|
-
record TEXT NOT NULL,
|
|
250
|
-
expires_at INTEGER NOT NULL
|
|
251
|
-
);
|
|
252
|
-
--> statement-breakpoint
|
|
253
|
-
CREATE INDEX IF NOT EXISTS pending_media_uploads_expires_at
|
|
254
|
-
ON pending_media_uploads (expires_at);
|
|
255
|
-
--> statement-breakpoint
|
|
256
|
-
CREATE TABLE IF NOT EXISTS _mantle_boot_state (
|
|
257
|
-
id TEXT PRIMARY KEY NOT NULL,
|
|
258
|
-
fingerprint TEXT NOT NULL
|
|
259
|
-
);
|
|
260
|
-
--> statement-breakpoint
|
|
261
|
-
CREATE TABLE IF NOT EXISTS _mantle_schema_tables (
|
|
262
|
-
name TEXT PRIMARY KEY NOT NULL,
|
|
263
|
-
projection TEXT NOT NULL
|
|
264
|
-
);
|
|
265
|
-
--> statement-breakpoint
|
|
266
|
-
CREATE TABLE IF NOT EXISTS _mantle_storage_state (
|
|
267
|
-
id INTEGER PRIMARY KEY CHECK (id = 1),
|
|
268
|
-
fingerprint TEXT NOT NULL
|
|
269
|
-
);
|
|
270
|
-
--> statement-breakpoint
|
|
271
|
-
CREATE TABLE IF NOT EXISTS "articles" (
|
|
272
|
-
"_mantle_id" TEXT PRIMARY KEY,
|
|
273
|
-
"_mantle_status" TEXT NOT NULL,
|
|
274
|
-
"_mantle_version" INTEGER NOT NULL DEFAULT 1,
|
|
275
|
-
"_mantle_author_id" TEXT,
|
|
276
|
-
"_mantle_created_at" INTEGER NOT NULL,
|
|
277
|
-
"_mantle_updated_at" INTEGER NOT NULL
|
|
278
|
-
);
|
|
279
|
-
--> statement-breakpoint
|
|
280
|
-
ALTER TABLE "articles" ADD COLUMN "body" TEXT;
|
|
281
|
-
--> statement-breakpoint
|
|
282
|
-
ALTER TABLE "articles" ADD COLUMN "summary" TEXT;
|
|
283
|
-
--> statement-breakpoint
|
|
284
|
-
ALTER TABLE "articles" ADD COLUMN "title" TEXT;
|
|
285
|
-
--> statement-breakpoint
|
|
286
|
-
CREATE INDEX IF NOT EXISTS "m_61727469636c6573_updated" ON "articles"("_mantle_updated_at" DESC, "_mantle_id" DESC);
|
|
287
|
-
--> statement-breakpoint
|
|
288
|
-
CREATE INDEX IF NOT EXISTS "m_61727469636c6573_status_updated" ON "articles"("_mantle_status", "_mantle_updated_at" DESC, "_mantle_id" DESC);
|
|
289
|
-
--> statement-breakpoint
|
|
290
|
-
CREATE INDEX IF NOT EXISTS "m_61727469636c6573_created" ON "articles"("_mantle_created_at");
|
|
291
|
-
--> statement-breakpoint
|
|
292
|
-
INSERT INTO _mantle_schema_tables(name,projection) VALUES ('articles','{"columns":[["body","TEXT","string",false],["summary","TEXT","string",false],["title","TEXT","string",false]],"indexes":[]}');
|
|
293
|
-
--> statement-breakpoint
|
|
294
|
-
INSERT INTO _mantle_storage_state(id,fingerprint) VALUES (1,'e3cdedf91dbe27db4b9af7ff7e3512e81ae0b0bd69e5a90bd1c9e0526d86ba6b');
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
ALTER TABLE "articles" ADD COLUMN "coverAssetId" TEXT;
|
|
2
|
-
--> statement-breakpoint
|
|
3
|
-
UPDATE _mantle_schema_tables SET projection='{"columns":[["body","TEXT","string",false],["coverAssetId","TEXT","string",false],["summary","TEXT","string",false],["title","TEXT","string",false]],"indexes":[]}' WHERE name='articles';
|
|
4
|
-
--> statement-breakpoint
|
|
5
|
-
UPDATE _mantle_storage_state SET fingerprint='9ef85f9933e22328140e924045820af6be2a6985ed8ecc19b63a4f2a37826618' WHERE id=1 AND fingerprint='e3cdedf91dbe27db4b9af7ff7e3512e81ae0b0bd69e5a90bd1c9e0526d86ba6b';
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
ALTER TABLE _mantle_boot_state ADD COLUMN store_instance_id TEXT;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":"7","dialect":"sqlite","entries":[{"idx":0,"version":"6","when":1790000000000,"tag":"0000_sites_users","breakpoints":true},{"idx":1,"version":"6","when":1790000000001,"tag":"0001_mantle","breakpoints":true},{"idx":2,"version":"6","when":1790000000002,"tag":"0002_article_cover","breakpoints":true},{"idx":3,"version":"6","when":1790000000003,"tag":"0003_store_instance_id","breakpoints":true}]}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
apiVersion: cms.mantle.aotter.net/v1
|
|
2
|
-
kind: Schema
|
|
3
|
-
metadata:
|
|
4
|
-
name: articles
|
|
5
|
-
spec:
|
|
6
|
-
title: 文章
|
|
7
|
-
schema:
|
|
8
|
-
type: object
|
|
9
|
-
required: [title]
|
|
10
|
-
properties:
|
|
11
|
-
title: { type: string, title: 標題, maxLength: 160 }
|
|
12
|
-
summary: { type: string, title: 摘要, maxLength: 1000 }
|
|
13
|
-
body: { type: string, title: 內容, x-mcp-hint: markdown }
|
|
14
|
-
coverAssetId: { type: string, title: 封面圖片, x-mantle-ref: media_assets, x-mcp-hint: media-image }
|
|
15
|
-
lifecycle: publishing
|
|
16
|
-
---
|
|
17
|
-
apiVersion: cms.mantle.aotter.net/v1
|
|
18
|
-
kind: View
|
|
19
|
-
metadata:
|
|
20
|
-
name: published-articles
|
|
21
|
-
spec:
|
|
22
|
-
surface: public
|
|
23
|
-
from: articles
|
|
24
|
-
fields: [id, title, summary]
|
|
25
|
-
filter:
|
|
26
|
-
eq: { field: status, value: published }
|
|
27
|
-
limit: 20
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"name":"mantle-sites-reference","version":"0.0.1","private":true,"type":"module","scripts":{"build":"node scripts/build.mjs","dev":"wrangler dev","generate":"mantle generate","check":"tsc --noEmit","test":"node --experimental-strip-types scripts/check.mjs"},"dependencies":{"@aotter/mantle":"latest","@aotter/mantle-admin":"latest","@aotter/mantle-admin-ui":"latest","@aotter/mantle-cloudflare":"latest","@aotter/mantle-web":"latest","hono":"^4.9.0","micromark":"4.0.2","zod":"^4.0.0"},"devDependencies":{"@cloudflare/workers-types":"*","esbuild":"^0.28.0","typescript":"^5.9.0","wrangler":"^4.0.0"}}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
:root{font-family:Inter,"Noto Sans TC",ui-sans-serif,system-ui,sans-serif;color:#172320;background:#f7f8f4;font-synthesis:none}*{box-sizing:border-box}body{margin:0}a{color:inherit;text-decoration:none}a:hover{text-decoration:underline}.topbar{height:78px;max-width:1440px;margin:auto;padding:0 clamp(24px,5vw,80px);display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid #d9dfd8}.brand{display:flex;align-items:center;gap:12px;font-size:18px;font-weight:760;letter-spacing:-.04em}.brand em{color:#95aa8c;font-style:normal}.mark{width:37px;height:37px;border-radius:11px;background:#183c30;color:#d9eadb;display:grid;place-items:center;font-size:19px;font-family:Georgia,serif}.topbar nav{display:flex;gap:28px;font-size:14px;color:#43564e}.hero{max-width:1440px;margin:auto;padding:100px clamp(24px,8vw,128px) 116px}.hero.small{padding-bottom:75px}.eyebrow,.feature-index{font-size:11px;letter-spacing:.19em;font-weight:750;color:#68806f}.hero h1,.article-page h1{font-family:Georgia,"Noto Serif TC",serif;font-weight:500;letter-spacing:-.055em;line-height:1.09;margin:26px 0 28px;font-size:clamp(48px,6.1vw,94px)}.dot{color:#a2b888}.hero-copy{max-width:620px;color:#52665a;font-size:18px;line-height:1.8}.actions{display:flex;align-items:center;gap:30px;margin-top:38px}.button{display:inline-flex;justify-content:space-between;gap:44px;min-width:184px;padding:17px 19px;border-radius:7px;color:#fff;background:#214f3c;font-size:14px;font-weight:650}.button:hover{background:#173c2d;text-decoration:none}.text-link{font-size:14px;color:#315640}.feature-grid{max-width:1440px;margin:auto;padding:0 clamp(24px,8vw,128px) 110px;display:grid;grid-template-columns:repeat(3,1fr);gap:18px}.feature-grid>div{border-top:1px solid #bfcac0;padding-top:24px}.feature-grid h2{font-family:Georgia,"Noto Serif TC",serif;font-size:29px;font-weight:500;margin:29px 0 10px}.feature-grid p{font-size:14px;line-height:1.75;color:#597064;max-width:270px}.content-wrap{max-width:1184px;margin:0 auto;padding:0 24px 100px}.article-row{padding:25px 0;border-top:1px solid #cbd5ca;display:grid;grid-template-columns:160px 1fr 36px;gap:24px;align-items:start}.article-row:last-child{border-bottom:1px solid #cbd5ca}.article-number{font-size:12px;color:#708477;margin-top:11px}.article-row h2{font-family:Georgia,"Noto Serif TC",serif;font-size:clamp(24px,3vw,35px);font-weight:500;letter-spacing:-.035em;margin:0 0 8px}.article-row p{font-size:14px;color:#617468;line-height:1.65;margin:0}.article-row>span{color:#739279;font-size:25px}.empty{min-height:220px;padding:52px 0}.empty h2{font-size:27px;font-family:Georgia,"Noto Serif TC",serif;font-weight:500}.empty p{color:#66796c}.pagination{margin:26px 0}.article-page{max-width:900px;padding:75px 30px 140px;margin:auto}.back{font-size:13px;color:#5c7768}.article-page article{margin-top:75px}.article-page h1{font-size:clamp(44px,5vw,75px)}.lede{font-size:21px;line-height:1.75;color:#52685a}.prose{border-top:1px solid #cbd5ca;margin-top:45px;padding-top:28px;line-height:1.95;font-size:17px;color:#33473c}.prose p{margin:0 0 1.2em}footer{border-top:1px solid #d5ddd3;max-width:1440px;margin:auto;padding:28px clamp(24px,5vw,80px);display:flex;justify-content:space-between;font-size:12px;color:#788b7d}@media(max-width:700px){.topbar{height:68px}.topbar nav{gap:16px;font-size:12px}.hero{padding-top:74px;padding-bottom:70px}.hero-copy{font-size:16px}.feature-grid{grid-template-columns:1fr;gap:26px}.article-row{grid-template-columns:1fr 26px;gap:10px}.article-number{grid-column:1/-1;margin:0}.article-page{padding-top:55px}.article-page article{margin-top:50px}footer{gap:20px}}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { build } from 'esbuild';
|
|
2
|
-
import { cp, mkdir, rm } from 'node:fs/promises';
|
|
3
|
-
import { execFileSync } from 'node:child_process';
|
|
4
|
-
await rm('dist',{recursive:true,force:true});
|
|
5
|
-
execFileSync('node',['node_modules/@aotter/mantle/dist/cli/main.js','generate'],{stdio:'inherit'});
|
|
6
|
-
// Reject older published SDKs that cannot advertise the mounted MCP endpoints.
|
|
7
|
-
execFileSync('node',['node_modules/typescript/bin/tsc','--noEmit'],{stdio:'inherit'});
|
|
8
|
-
await mkdir('dist/server',{recursive:true});
|
|
9
|
-
await build({entryPoints:['src/index.ts'],outfile:'dist/server/index.js',bundle:true,format:'esm',platform:'browser',conditions:['workerd'],target:'es2022',external:['cloudflare:*','node:*'],minify:true});
|
|
10
|
-
await cp('public','dist/client',{recursive:true});
|
|
11
|
-
await mkdir('dist/.openai',{recursive:true});
|
|
12
|
-
await cp('.openai/hosting.json','dist/.openai/hosting.json');
|
|
13
|
-
await cp('drizzle','dist/.openai/drizzle',{recursive:true});
|
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
import assert from 'node:assert/strict';
|
|
2
|
-
// Only localhost: these headers simulate Sites' trusted dispatcher, never real SIWC.
|
|
3
|
-
const base=process.env.MANTLE_TEST_ORIGIN??'http://localhost:4174';
|
|
4
|
-
assert.ok(['localhost','127.0.0.1'].includes(new URL(base).hostname),'Smoke identity headers are local-only');
|
|
5
|
-
const owner={'oai-authenticated-user-id':'local-owner','oai-authenticated-user-email':'owner@example.test'};
|
|
6
|
-
const member={'oai-authenticated-user-id':`test-${Date.now()}`,'oai-authenticated-user-email':`test-${Date.now()}@example.test`};
|
|
7
|
-
const call=(path,headers={},method='GET',body)=>fetch(base+path,{redirect:'manual',method,headers:{...headers,...(body?{'content-type':'application/json',origin:base}:{})},body:body?JSON.stringify(body):undefined});
|
|
8
|
-
assert.equal((await call('/health')).status,200);
|
|
9
|
-
const mcp=(method,params)=>fetch(base+'/api/mcp',{method:'POST',headers:{'content-type':'application/json','mcp-protocol-version':'2025-11-25'},body:JSON.stringify({jsonrpc:'2.0',id:1,method,...(params?{params}:{})})});
|
|
10
|
-
const staffMcp=(headers,method,params)=>fetch(base+'/api/mcp/staff',{method:'POST',headers:{...headers,'content-type':'application/json','mcp-protocol-version':'2025-11-25'},body:JSON.stringify({jsonrpc:'2.0',id:2,method,...(params?{params}:{})})});
|
|
11
|
-
let mcpResponse=await mcp('initialize');assert.equal(mcpResponse.status,200,await mcpResponse.clone().text());
|
|
12
|
-
assert.equal((await mcpResponse.json()).result.serverInfo.name,'aotter.mantle.public');
|
|
13
|
-
mcpResponse=await mcp('tools/list');assert.equal(mcpResponse.status,200,await mcpResponse.clone().text());
|
|
14
|
-
const publicTools=(await mcpResponse.json()).result.tools.map(tool=>tool.name);
|
|
15
|
-
assert.deepEqual(publicTools,['query_view_published_articles']);
|
|
16
|
-
assert.equal((await call('/api/mcp')).status,405);
|
|
17
|
-
assert.equal((await call('/admin/api/me')).status,401);
|
|
18
|
-
assert.equal((await call('/admin/api/me',{'oai-authenticated-user-email':'owner@example.test'})).status,401);
|
|
19
|
-
assert.equal((await call('/admin/api/me',member)).status,403);
|
|
20
|
-
assert.equal((await (await call('/admin/api/me',owner)).json()).role,'owner');
|
|
21
|
-
const siteResponse=await call('/admin/api/site',owner);
|
|
22
|
-
assert.equal(siteResponse.status,200);
|
|
23
|
-
const site=await siteResponse.json();
|
|
24
|
-
assert.deepEqual(site.mcpEndpoints,{public:base+'/api/mcp',staff:base+'/api/mcp/staff'});
|
|
25
|
-
assert.equal(site.mcpUrl,base+'/api/mcp/staff');
|
|
26
|
-
assert.equal((await staffMcp({},'initialize')).status,401);
|
|
27
|
-
assert.equal((await staffMcp(member,'initialize')).status,403);
|
|
28
|
-
let staffResponse=await staffMcp(owner,'initialize');assert.equal(staffResponse.status,200,await staffResponse.clone().text());
|
|
29
|
-
assert.equal((await staffResponse.json()).result.serverInfo.name,'aotter.mantle.staff');
|
|
30
|
-
staffResponse=await staffMcp(owner,'tools/list');assert.equal(staffResponse.status,200,await staffResponse.clone().text());
|
|
31
|
-
assert.ok((await staffResponse.json()).result.tools.some(tool=>tool.name==='create_draft_articles'));
|
|
32
|
-
for(const path of ['/mcp','/mcp/staff'])assert.equal((await call(path,{},'POST',{jsonrpc:'2.0',id:1,method:'initialize'})).status,404);
|
|
33
|
-
assert.equal((await call('/admin/sign-in')).headers.get('location'),'/signin-with-chatgpt?return_to=%2Fadmin');
|
|
34
|
-
assert.equal((await call('/admin',owner)).status,200);
|
|
35
|
-
assert.equal((await call('/admin/lab/r2',member,'POST',{})).status,403);
|
|
36
|
-
assert.equal((await call('/admin/lab/r2',{},'POST',{})).status,401);
|
|
37
|
-
const probe=await call('/admin/lab/r2',owner,'POST',{});assert.equal(probe.status,200);
|
|
38
|
-
const probeId=(await probe.json()).id;
|
|
39
|
-
assert.equal((await (await call('/admin/lab/r2/'+probeId,owner)).json()).matches,true);
|
|
40
|
-
assert.equal((await (await call('/admin/lab/r2/'+probeId,owner,'DELETE',{})).json()).deleted,true);
|
|
41
|
-
assert.equal((await call('/admin/lab/r2/'+probeId,owner)).status,404);
|
|
42
|
-
const png=Buffer.from('iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8/x8AAwMCAO+/lXcAAAAASUVORK5CYII=','base64');
|
|
43
|
-
const short=await call('/admin/api/media/uploads',owner,'POST',{filename:'short.png',purpose:'content',variants:[{mimeType:'image/png',byteSize:1,role:'primary'}]});
|
|
44
|
-
assert.equal(short.status,200);
|
|
45
|
-
const shortUpload=(await short.json()).capabilities[0].uploadUrl;
|
|
46
|
-
assert.equal((await fetch(shortUpload,{method:'PUT',headers:{...owner,origin:base,'content-type':'image/png'},body:png})).status,413);
|
|
47
|
-
let media=await call('/admin/api/media/uploads',owner,'POST',{filename:'test.png',purpose:'content',variants:[{mimeType:'image/png',byteSize:png.length,role:'primary'}]});
|
|
48
|
-
assert.equal(media.status,200,await media.clone().text());
|
|
49
|
-
const upload=await media.json();
|
|
50
|
-
const putUrl=upload.capabilities[0].uploadUrl;
|
|
51
|
-
assert.equal((await fetch(putUrl,{method:'PUT',headers:{origin:base,'content-type':'image/png'},body:png})).status,401);
|
|
52
|
-
assert.equal((await fetch(putUrl,{method:'PUT',headers:{...owner,origin:'https://evil.example','content-type':'image/png'},body:png})).status,403);
|
|
53
|
-
media=await fetch(putUrl,{method:'PUT',headers:{...owner,origin:base,'content-type':'image/png'},body:png});
|
|
54
|
-
assert.equal(media.status,204,await media.clone().text());
|
|
55
|
-
const mediaUrl=`/media/content/${upload.uploadGroupId}/primary.png`;
|
|
56
|
-
assert.equal((await call(mediaUrl)).status,404);
|
|
57
|
-
media=await call(`/admin/api/media/uploads/${upload.uploadGroupId}/commit`,owner,'POST',{});
|
|
58
|
-
assert.equal(media.status,200,await media.clone().text());
|
|
59
|
-
assert.deepEqual(Buffer.from(await (await call(mediaUrl)).arrayBuffer()),png);
|
|
60
|
-
assert.equal((await call('/admin/api/media',owner)).status,200);
|
|
61
|
-
let r=await call('/admin/api/entries',owner,'POST',{collection:'articles',data:{title:'Smoke test',summary:'D1 persistence',body:'## Published body from Mantle\n\n[unsafe](javascript:alert(1))',coverAssetId:upload.uploadGroupId}});
|
|
62
|
-
assert.equal(r.status,200,await r.clone().text());
|
|
63
|
-
const {entry}=await r.json();
|
|
64
|
-
const path=`/admin/api/entries/${entry.id}?collection=articles`;
|
|
65
|
-
assert.equal((await call(`/articles/${entry.id}`)).status,404);
|
|
66
|
-
assert.equal((await call(`/articles/${entry.id}.md`)).status,404);
|
|
67
|
-
r=await call(path,owner);assert.equal((await r.json()).entry.data.title,'Smoke test');
|
|
68
|
-
const current=(await (await call(path,owner)).json()).entry;
|
|
69
|
-
const writes=await Promise.all(['A','B'].map(title=>call(path,owner,'PATCH',{expectedVersion:current.version,data:{title}})));
|
|
70
|
-
assert.deepEqual(writes.map(x=>x.status).sort(),[200,409]);
|
|
71
|
-
r=await call(`/admin/api/entries/${entry.id}/publish?collection=articles`,owner,'POST',{});assert.equal(r.status,200,await r.clone().text());
|
|
72
|
-
const publicPage=await (await call(`/articles/${entry.id}`)).text();
|
|
73
|
-
assert.match(publicPage,/Published body from Mantle/);
|
|
74
|
-
assert.match(publicPage,/<h2>Published body from Mantle<\/h2>/);
|
|
75
|
-
assert.match(publicPage,new RegExp(mediaUrl));
|
|
76
|
-
assert.doesNotMatch(publicPage,/href="javascript:/);
|
|
77
|
-
assert.match(publicPage,/<meta property="og:image"/);
|
|
78
|
-
assert.match(publicPage,/<link rel="canonical"/);
|
|
79
|
-
assert.match(publicPage,/<link rel="alternate" type="text\/markdown"/);
|
|
80
|
-
assert.doesNotMatch(publicPage,/<a\b[^>]*href="[^"]+\.md(?:[?#][^"]*)?"/);
|
|
81
|
-
assert.match(publicPage,/application\/ld\+json/);
|
|
82
|
-
assert.match(await (await call(`/articles/${entry.id}.md`)).text(),/Published body from Mantle/);
|
|
83
|
-
assert.match(await (await call('/articles')).text(),new RegExp(entry.id));
|
|
84
|
-
assert.match(await (await call('/llms.txt')).text(),new RegExp(entry.id));
|
|
85
|
-
assert.match(await (await call('/sitemap.xml')).text(),new RegExp(entry.id));
|
|
86
|
-
mcpResponse=await mcp('tools/call',{name:'query_view_published_articles',arguments:{}});assert.equal(mcpResponse.status,200,await mcpResponse.clone().text());
|
|
87
|
-
assert.match(JSON.stringify(await mcpResponse.json()),new RegExp(entry.id));
|
|
88
|
-
r=await fetch(base+'/admin/api/entries',{method:'POST',headers:{...owner,origin:'https://evil.example','content-type':'application/json'},body:'{}'});assert.equal(r.status,403);
|
|
89
|
-
r=await call(`/admin/api/staff/${encodeURIComponent('chatgpt:'+member['oai-authenticated-user-id'])}/role`,owner,'PATCH',{role:'editor'});assert.equal(r.status,200);
|
|
90
|
-
assert.equal((await call('/admin/api/me',member)).status,200);
|
|
91
|
-
r=await call(`/admin/api/staff/${encodeURIComponent('chatgpt:'+member['oai-authenticated-user-id'])}/role`,owner,'PATCH',{role:null});assert.equal(r.status,200);
|
|
92
|
-
assert.equal((await call('/admin/api/me',member)).status,403);
|
|
93
|
-
r=await call('/api/auth/sign-out',owner,'POST',{});assert.equal(r.status,200);
|
|
94
|
-
const cookie=r.headers.get('set-cookie').split(';')[0];
|
|
95
|
-
r=await call('/admin/sign-in',{...owner,cookie});assert.equal(r.headers.get('location'),'/signout-with-chatgpt?return_to=%2F');
|
|
96
|
-
assert.equal((await call(`/admin/api/entries/${entry.id}/unpublish?collection=articles`,owner,'POST',{})).status,200);
|
|
97
|
-
assert.equal((await call(`/articles/${entry.id}`)).status,404);
|
|
98
|
-
assert.equal((await call(path,owner,'DELETE',{})).status,200);
|
|
99
|
-
assert.equal((await call(`/admin/api/media/${upload.uploadGroupId}`,owner,'DELETE',{})).status,200);
|
|
100
|
-
assert.equal((await call(mediaUrl)).status,404);
|
|
101
|
-
console.log('PASS: D1 boot, R2/media upload and cleanup, identity and roles, CRUD/version conflict, CSRF, sign-out, public and Sites-session staff MCP, published article HTML/Markdown/SEO/llms/sitemap.');
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
// One-time, reviewable initial migration from Mantle's public migration planner.
|
|
2
|
-
import { buildSqliteMigrationArtifact, splitSqlStatements } from '@aotter/mantle/runtime';
|
|
3
|
-
import { plan } from '../.mantle/generated/mantle.ts';
|
|
4
|
-
import { writeFile } from 'node:fs/promises';
|
|
5
|
-
const artifact=await buildSqliteMigrationArtifact([],Object.values(plan.schemas).map(s=>s.manifest));
|
|
6
|
-
const quote=value=>`'${value.replaceAll("'","''")}'`;
|
|
7
|
-
const sql=[...artifact.migrations.flatMap(m=>splitSqlStatements(m.sql).map(s=>s+';')),...artifact.projections.map(p=>`INSERT INTO _mantle_schema_tables(name,projection) VALUES (${quote(p.name)},${quote(p.projection)});`),`INSERT INTO _mantle_storage_state(id,fingerprint) VALUES (1,${quote(artifact.targetFingerprint)});`].join('\n--> statement-breakpoint\n');
|
|
8
|
-
await writeFile('drizzle/0001_mantle.sql',sql);
|
|
9
|
-
await writeFile('src/storage-fingerprint.json',JSON.stringify(artifact.targetFingerprint)+'\n');
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
import type { AdminAuth, AdminStaffUser, StaffRole } from '@aotter/mantle/admin';
|
|
2
|
-
|
|
3
|
-
export interface Env { DB: D1Database; MEDIA_BUCKET: R2Bucket; ASSETS: Fetcher; PUBLIC_ORIGIN: string; OWNER_EMAIL: string }
|
|
4
|
-
type UserRow = { id: string; email: string; name: string; role: StaffRole | null; created_at: string; signed_in: number };
|
|
5
|
-
const project = (row: UserRow): AdminStaffUser => ({ id:row.id,email:row.email,name:row.name,role:row.role,githubLogin:null,emailVerified:!!row.signed_in,createdAt:new Date(row.created_at) });
|
|
6
|
-
|
|
7
|
-
// This adapter must only receive requests through Sites' identity-stripping dispatcher.
|
|
8
|
-
// Never expose the Worker independently with caller-controlled oai-* headers.
|
|
9
|
-
export function readIdentity(request: Request) {
|
|
10
|
-
const sub=request.headers.get('oai-authenticated-user-id');
|
|
11
|
-
const email=request.headers.get('oai-authenticated-user-email')?.trim().toLowerCase();
|
|
12
|
-
if(!sub || !email || sub.length>512 || email.length>320) return null;
|
|
13
|
-
let name=email;
|
|
14
|
-
if(request.headers.get('oai-authenticated-user-full-name-encoding')==='percent-encoded-utf-8') {
|
|
15
|
-
try { name=decodeURIComponent(request.headers.get('oai-authenticated-user-full-name')||'')||email; } catch {}
|
|
16
|
-
}
|
|
17
|
-
return {id:`chatgpt:${sub}`,email,name};
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
export function createChatGPTAuth(env: Env): AdminAuth {
|
|
21
|
-
const db=env.DB;
|
|
22
|
-
const roleFor=async(id:string)=>(await db.prepare('SELECT role FROM sites_users WHERE id = ?').bind(id).first<{role:StaffRole|null}>())?.role??null;
|
|
23
|
-
const auth: AdminAuth = {
|
|
24
|
-
basePath:'/api/auth', methods:[],
|
|
25
|
-
async getSession(request) {
|
|
26
|
-
const who=readIdentity(request); if(!who)return null;
|
|
27
|
-
// Only the configured owner can bootstrap privilege; a later role revocation persists.
|
|
28
|
-
await db.prepare('INSERT OR IGNORE INTO sites_users (id,email,name,role,signed_in) VALUES (?,?,?,?,1)')
|
|
29
|
-
.bind(who.id,who.email,who.name,who.email===env.OWNER_EMAIL?.trim().toLowerCase()?'owner':null).run();
|
|
30
|
-
await db.prepare('UPDATE sites_users SET id=?,name=?,signed_in=1 WHERE email=? AND signed_in=0').bind(who.id,who.name,who.email).run();
|
|
31
|
-
const row=await db.prepare('SELECT * FROM sites_users WHERE id=?').bind(who.id).first<UserRow>();
|
|
32
|
-
if(!row)return null;
|
|
33
|
-
return {session:{id:`sites:${who.id}`},user:{...who,role:row.role,roleCurrent:true}};
|
|
34
|
-
},
|
|
35
|
-
getUserRole:roleFor,
|
|
36
|
-
async handler(request) {
|
|
37
|
-
const path=new URL(request.url).pathname;
|
|
38
|
-
if(path==='/api/auth/get-session' && request.method==='GET') return Response.json(await auth.getSession(request));
|
|
39
|
-
if(path==='/api/auth/sign-out' && request.method==='POST') {
|
|
40
|
-
if(request.headers.get('origin')!==env.PUBLIC_ORIGIN)return new Response('Forbidden',{status:403});
|
|
41
|
-
// The shipped Admin UI navigates here after its POST; the next top-level request signs out at Sites.
|
|
42
|
-
return Response.json({success:true},{headers:{'set-cookie':'mantle-sites-signout=1; Path=/admin/sign-in; HttpOnly; SameSite=Strict; Max-Age=60'+(env.PUBLIC_ORIGIN.startsWith('https:')?'; Secure':'')}});
|
|
43
|
-
}
|
|
44
|
-
return Response.json({error:'unsupported_auth_route'},{status:404});
|
|
45
|
-
},
|
|
46
|
-
async listUsers(){const r=await db.prepare('SELECT * FROM sites_users WHERE role IS NOT NULL ORDER BY created_at,id').all<UserRow>();return r.results.map(project);},
|
|
47
|
-
async listMembers(args){
|
|
48
|
-
// ponytail: one bounded page for this integration lab; add cursor pagination before a large member rollout.
|
|
49
|
-
const r=await db.prepare('SELECT * FROM sites_users WHERE role IS NULL AND (email LIKE ? OR name LIKE ?) ORDER BY created_at,id LIMIT ?').bind(`%${args.search||''}%`,`%${args.search||''}%`,Math.min(args.limit,100)).all<UserRow>();
|
|
50
|
-
return {items:r.results.map(project),previousCursor:null,nextCursor:null};
|
|
51
|
-
},
|
|
52
|
-
async setUserRole(id,role){if(role!==null&&!['owner','editor','contributor'].includes(role))throw new Error('Invalid role');return !!(await db.prepare('UPDATE sites_users SET role=? WHERE id=?').bind(role,id).run()).meta.changes;},
|
|
53
|
-
async inviteUser(email,role){
|
|
54
|
-
const normalized=email.trim().toLowerCase();const id=`invite:${crypto.randomUUID()}`;
|
|
55
|
-
const r=await db.prepare('INSERT OR IGNORE INTO sites_users (id,email,name,role,signed_in) VALUES (?,?,?,?,0)').bind(id,normalized,normalized,role).run();
|
|
56
|
-
if(r.meta.changes)return {kind:'created',id};
|
|
57
|
-
const existing=await db.prepare('SELECT id FROM sites_users WHERE email=?').bind(normalized).first<{id:string}>();
|
|
58
|
-
if(!existing)throw new Error('Invitation could not be saved');return {kind:'exists',id:existing.id};
|
|
59
|
-
},
|
|
60
|
-
async revokeInvite(id){return !!(await db.prepare('DELETE FROM sites_users WHERE id=? AND signed_in=0').bind(id).run()).meta.changes;},
|
|
61
|
-
};
|
|
62
|
-
return auth;
|
|
63
|
-
}
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import { Hono } from 'hono';
|
|
2
|
-
import { bootMantleRuntime, SqliteMantleStorageAdapter } from '@aotter/mantle/runtime';
|
|
3
|
-
import { D1DatabaseDriver, AssetsAssetServer } from '@aotter/mantle/cloudflare';
|
|
4
|
-
import { mountMantleAdmin, type MantleAdminRuntime } from '@aotter/mantle/admin';
|
|
5
|
-
import { plan } from '../.mantle/generated/mantle';
|
|
6
|
-
import fingerprint from './storage-fingerprint.json';
|
|
7
|
-
import { createChatGPTAuth, type Env } from './chatgpt-auth';
|
|
8
|
-
import { mountR2Lab } from './r2-lab';
|
|
9
|
-
import { mountWeb } from './web';
|
|
10
|
-
import { SitesR2MediaStorage, mountMedia } from './media';
|
|
11
|
-
import { mountMcp } from './mcp';
|
|
12
|
-
|
|
13
|
-
function assemble(env:Env) {
|
|
14
|
-
const auth=createChatGPTAuth(env);
|
|
15
|
-
let runtime:Promise<MantleAdminRuntime>|undefined;
|
|
16
|
-
const get=()=>runtime??=(async()=>{
|
|
17
|
-
const r=await bootMantleRuntime({plan,storage:new SqliteMantleStorageAdapter(new D1DatabaseDriver(env.DB),{brand:'Mantle × Sites Reference',title:'Mantle × ChatGPT Sites Reference',origin:env.PUBLIC_ORIGIN,media:{purposes:[{name:'content',required:['image/jpeg,image/png,image/webp'],maxBytes:{'image/jpeg':5_000_000,'image/png':5_000_000,'image/webp':5_000_000}}]}},{managedStorageFingerprint:fingerprint}),ports:{mediaStorage:new SitesR2MediaStorage(env.MEDIA_BUCKET,env.PUBLIC_ORIGIN)}});
|
|
18
|
-
if(!r.siteConfig||!r.updateSiteSettings)throw new Error('Admin storage unavailable');
|
|
19
|
-
return Object.assign(r,{siteConfig:r.siteConfig,updateSiteSettings:r.updateSiteSettings});
|
|
20
|
-
})().catch(error=>{runtime=undefined;throw error;});
|
|
21
|
-
const app=new Hono<{Bindings:Env}>();
|
|
22
|
-
app.use('*',async(c,next)=>{await next();if(!c.res.headers.has('Cache-Control'))c.header('Cache-Control','private, no-store');c.header('X-Content-Type-Options','nosniff');});
|
|
23
|
-
mountWeb(app,get);
|
|
24
|
-
mountMcp(app,get,auth);
|
|
25
|
-
mountMedia(app,auth,env);
|
|
26
|
-
app.get('/health',async()=>{await get();return Response.json({ok:true,storage:'D1',auth:'ChatGPT Sites'});});
|
|
27
|
-
app.get('/admin/sign-in',async c=>{
|
|
28
|
-
if(c.req.header('cookie')?.split(';').some(v=>v.trim()==='mantle-sites-signout=1')) {
|
|
29
|
-
c.header('Set-Cookie','mantle-sites-signout=; Path=/admin/sign-in; HttpOnly; SameSite=Strict; Max-Age=0'+(env.PUBLIC_ORIGIN.startsWith('https:')?'; Secure':''));
|
|
30
|
-
return c.redirect('/signout-with-chatgpt?return_to=%2F');
|
|
31
|
-
}
|
|
32
|
-
return c.redirect(await auth.getSession(c.req.raw)?'/admin':'/signin-with-chatgpt?return_to=%2Fadmin');
|
|
33
|
-
});
|
|
34
|
-
app.use('/admin/*',async(c,next)=>{
|
|
35
|
-
if(!c.req.path.startsWith('/admin/api/')&&!c.req.path.startsWith('/admin/lab/r2')&&!await auth.getSession(c.req.raw))return c.redirect('/signin-with-chatgpt?return_to=%2Fadmin');
|
|
36
|
-
await next();
|
|
37
|
-
});
|
|
38
|
-
mountR2Lab(app,auth,env);
|
|
39
|
-
mountMantleAdmin(app,{plan,auth,get,assets:new AssetsAssetServer(env.ASSETS),mcpEndpoints:{public:'/api/mcp',staff:'/api/mcp/staff'},requestContext:c=>({env:c.env,waitUntil:p=>c.executionCtx.waitUntil(p)})});
|
|
40
|
-
app.get('/site.css',c=>env.ASSETS.fetch(c.req.raw));
|
|
41
|
-
app.get('/_mantle/*',c=>env.ASSETS.fetch(c.req.raw));
|
|
42
|
-
app.onError(error=>{console.error('Mantle request failed',error);return Response.json({error:'internal_error'},{status:500,headers:{'Cache-Control':'private, no-store'}});});
|
|
43
|
-
return app;
|
|
44
|
-
}
|
|
45
|
-
let app:ReturnType<typeof assemble>|undefined;
|
|
46
|
-
export default {fetch(request:Request,env:Env,ctx:ExecutionContext){return (app??=assemble(env)).fetch(request,env,ctx);}};
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import type { Hono } from 'hono';
|
|
2
|
-
import type { AdminAuth, MantleAdminRuntime, StaffRole } from '@aotter/mantle/admin';
|
|
3
|
-
import { McpJsonRpcDispatcher, projectCallableCapabilities } from '@aotter/mantle/runtime';
|
|
4
|
-
import { plan } from '../.mantle/generated/mantle';
|
|
5
|
-
import type { Env } from './chatgpt-auth';
|
|
6
|
-
|
|
7
|
-
const staffRoles=new Set<string>(['owner','editor','contributor']);
|
|
8
|
-
|
|
9
|
-
/** Sites-session MCP surfaces. Remote clients still need a separate OAuth bearer flow. */
|
|
10
|
-
export function mountMcp(app:Hono<{Bindings:Env}>, get:()=>Promise<MantleAdminRuntime>, auth:AdminAuth) {
|
|
11
|
-
const cache=new WeakMap<object,Map<'public'|'staff',McpJsonRpcDispatcher>>();
|
|
12
|
-
const dispatcher=async(surface:'public'|'staff',origin:string)=>{
|
|
13
|
-
const runtime=await get();
|
|
14
|
-
let dispatchers=cache.get(runtime);
|
|
15
|
-
if(!dispatchers)cache.set(runtime,dispatchers=new Map());
|
|
16
|
-
let value=dispatchers.get(surface);
|
|
17
|
-
if(!value) {
|
|
18
|
-
value=new McpJsonRpcDispatcher({
|
|
19
|
-
getEntry:runtime.getEntry,
|
|
20
|
-
createDraft:runtime.createDraft,
|
|
21
|
-
updateDraft:runtime.updateDraft,
|
|
22
|
-
requestPublish:runtime.requestPublish,
|
|
23
|
-
unpublish:runtime.unpublish,
|
|
24
|
-
archive:runtime.archive,
|
|
25
|
-
deleteEntry:runtime.deleteEntry,
|
|
26
|
-
executeView:{execute:request=>runtime.executeView({...request,view:request.view.metadata.name})},
|
|
27
|
-
invokeTrigger:{execute:request=>runtime.invokeTrigger(request)},
|
|
28
|
-
},[...runtime.schemas.values()],{
|
|
29
|
-
surface,
|
|
30
|
-
capabilities:projectCallableCapabilities(plan,{surface}),
|
|
31
|
-
serverInfo:{name:`aotter.mantle.${surface}`,title:`Mantle ${surface}`,websiteUrl:origin},
|
|
32
|
-
});
|
|
33
|
-
dispatchers.set(surface,value);
|
|
34
|
-
}
|
|
35
|
-
return value;
|
|
36
|
-
};
|
|
37
|
-
app.all('/api/mcp',async c=>(await dispatcher('public',c.env.PUBLIC_ORIGIN)).dispatch(c.req.raw,{user:null,staff:null,env:c.env,waitUntil:p=>c.executionCtx.waitUntil(p)}));
|
|
38
|
-
app.all('/api/mcp/staff',async c=>{
|
|
39
|
-
const session=await auth.getSession(c.req.raw);
|
|
40
|
-
if(!session)return Response.json({error:'unauthorized'},{status:401});
|
|
41
|
-
const role=session.user.roleCurrent?session.user.role:await auth.getUserRole(session.user.id);
|
|
42
|
-
if(!role||!staffRoles.has(role))return Response.json({error:'forbidden'},{status:403});
|
|
43
|
-
return (await dispatcher('staff',c.env.PUBLIC_ORIGIN)).dispatch(c.req.raw,{
|
|
44
|
-
user:{id:session.user.id},staff:{id:session.user.id,role:role as StaffRole},
|
|
45
|
-
auth:{credential:'session',credentialId:session.session.id,clientId:null,scopes:[]},
|
|
46
|
-
env:c.env,waitUntil:p=>c.executionCtx.waitUntil(p),
|
|
47
|
-
});
|
|
48
|
-
});
|
|
49
|
-
}
|