@aotter/mantle 0.1.5-alpha.1 → 0.2.0-alpha.2
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 +592 -0
- package/dist/admin/createAdminSurface.js.map +1 -0
- package/dist/admin/developerConsole.d.ts +266 -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 +38 -0
- package/dist/admin/procedureFlow.d.ts.map +1 -0
- package/dist/admin/procedureFlow.js +188 -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 +129 -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 +508 -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 +318 -262
- 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 +353 -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/0022-caller-observed-version-occ.md +1 -1
- package/docs/adr/0024-manifest-native-schema-tables.md +2 -2
- package/docs/adr/0027-scheduled-procedure-triggers.md +1 -1
- package/docs/adr/0028-schema-ttl-expiry.md +3 -3
- 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 +23 -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 +119 -311
- 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 -163
- 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 -33
- package/docs/handbook/reference/authorization.md +52 -271
- package/docs/handbook/reference/diagnostics.md +69 -178
- package/docs/handbook/reference/features.md +48 -50
- package/docs/handbook/reference/manifest.md +56 -116
- package/docs/handbook/reference/procedure.md +91 -279
- package/docs/handbook/reference/schema.md +154 -239
- package/docs/handbook/reference/site-config.md +58 -211
- package/docs/handbook/reference/surface.md +69 -181
- package/docs/handbook/reference/trigger.md +72 -181
- package/docs/handbook/reference/view.md +140 -241
- package/docs/handbook/releases/index.md +58 -77
- package/docs/handbook/start/overview.md +59 -51
- package/docs/handbook/start/project-and-cli.md +132 -105
- package/docs/handbook/start/quickstart-worker.md +102 -160
- package/docs/skills/develop/SKILL.md +114 -240
- package/docs/skills/develop/mcp-app.md +79 -0
- package/docs/skills/integrate/SKILL.md +83 -47
- 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 -106
- 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/generate-cloudflare.d.ts +0 -7
- package/dist/cli/generate-cloudflare.d.ts.map +0 -1
- package/dist/cli/generate-cloudflare.js +0 -123
- package/dist/cli/generate-cloudflare.js.map +0 -1
- package/dist/cli/generate-project.d.ts +0 -25
- package/dist/cli/generate-project.d.ts.map +0 -1
- package/dist/cli/generate-project.js +0 -282
- package/dist/cli/generate-project.js.map +0 -1
- package/dist/cli/generate-sites.d.ts +0 -8
- package/dist/cli/generate-sites.d.ts.map +0 -1
- package/dist/cli/generate-sites.js +0 -273
- package/dist/cli/generate-sites.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 -64
- 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/0004_mantle.sql +0 -10
- package/docs/examples/host-chatgpt-sites/drizzle/0005_mantle.sql +0 -24
- package/docs/examples/host-chatgpt-sites/drizzle/meta/_journal.json +0 -1
- package/docs/examples/host-chatgpt-sites/drizzle/meta/mantle-state.json +0 -60
- 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 -43
- package/docs/examples/host-chatgpt-sites/src/chatgpt-auth.ts +0 -66
- 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/generated-app.md +0 -84
- package/docs/handbook/chatgpt-sites/host-reference.md +0 -113
- package/docs/handbook/chatgpt-sites/index.md +0 -133
- package/docs/handbook/cloudflare/bindings.md +0 -291
- package/docs/handbook/cloudflare/conventional-worker.md +0 -166
- 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 -52
- 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 -127
- package/skills/develop/SKILL.md +0 -258
- package/skills/install/SKILL.md +0 -112
- package/skills/integrate/SKILL.md +0 -60
- 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
- package/templates/chatgpt-sites/auth.ts +0 -66
- package/templates/chatgpt-sites/build.mjs +0 -14
- package/templates/chatgpt-sites/env.ts +0 -1
- package/templates/chatgpt-sites/mcp.ts +0 -48
- package/templates/chatgpt-sites/public-mcp.ts +0 -29
- package/templates/chatgpt-sites/smoke-local.mjs +0 -20
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Reference service
|
|
2
|
+
|
|
3
|
+
A small shop built on `@aotter/mantle` 0.2.0. It is also the Worker that the
|
|
4
|
+
release gate runs (`scripts/check-worker-consumer.mjs`).
|
|
5
|
+
|
|
6
|
+
- `manifests/`: the whole service in the v2 grammar.
|
|
7
|
+
- A scoped Schema (`orders`) and a Schema with a check (`items`, `stock >= 0`).
|
|
8
|
+
- Views written as one `SELECT`: a join, a `GROUP BY`, and `mantle.search`.
|
|
9
|
+
- Procedures written as SQL: a two-statement order, an `ON CONFLICT`
|
|
10
|
+
restock, and an optimistic-lock cancel in handler code.
|
|
11
|
+
- An after hook that loops over `ctx.cause.rows`.
|
|
12
|
+
- A POSIX cron.
|
|
13
|
+
- `src/handlers.ts`: the three `ref` handlers, written against the typed
|
|
14
|
+
`ctx.store`.
|
|
15
|
+
- `src/service.ts`, `src/index.ts`, `wrangler.jsonc`, `tsconfig.json`: the
|
|
16
|
+
preset `mantle generate` wrote once. These files are the application's own.
|
|
17
|
+
- `smoke.mjs`: starts `wrangler dev` on a fresh local D1 and drives the service:
|
|
18
|
+
- console email-OTP sign-in for an owner and a buyer;
|
|
19
|
+
- REST, both MCP surfaces, the cron, and Admin: the console from `@aotter/mantle-ui/admin` at `/admin`, its API, and an editor's save;
|
|
20
|
+
- asserts scope, the stock check, locks and hooks.
|
|
21
|
+
|
|
22
|
+
Outside the SDK workspace, with Node 22+ and pnpm 9+, pin every dependency to
|
|
23
|
+
one exact version, then:
|
|
24
|
+
|
|
25
|
+
```sh
|
|
26
|
+
pnpm install
|
|
27
|
+
pnpm check # generate, generate --check, typecheck, smoke
|
|
28
|
+
cp .dev.vars.example .dev.vars # set ADMIN_EMAIL and a random BETTER_AUTH_SECRET
|
|
29
|
+
pnpm dev # open /admin; sign-in codes are printed to this log
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
The release gate installs the exact tarballs it just packed in place of the
|
|
33
|
+
pinned versions.
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
# A small shop: a public catalog, orders that only their owner sees, and staff tools.
|
|
2
|
+
apiVersion: cms.mantle.aotter.net/v2
|
|
3
|
+
kind: Schema
|
|
4
|
+
metadata: { name: items }
|
|
5
|
+
spec:
|
|
6
|
+
title: Items
|
|
7
|
+
lifecycle: operational
|
|
8
|
+
schema:
|
|
9
|
+
type: object
|
|
10
|
+
required: [sku, name, stock]
|
|
11
|
+
properties:
|
|
12
|
+
sku: { type: string }
|
|
13
|
+
name: { type: string }
|
|
14
|
+
priceCents: { type: integer, minimum: 0 }
|
|
15
|
+
stock: { type: integer, default: 0 }
|
|
16
|
+
checks: ["stock >= 0"]
|
|
17
|
+
uiSchema: { list: { primaryField: name, columns: [sku, stock] } }
|
|
18
|
+
uniqueIndexes: [[sku]]
|
|
19
|
+
searchableFields: [name, sku]
|
|
20
|
+
---
|
|
21
|
+
apiVersion: cms.mantle.aotter.net/v2
|
|
22
|
+
kind: Schema
|
|
23
|
+
metadata: { name: orders }
|
|
24
|
+
spec:
|
|
25
|
+
title: Orders
|
|
26
|
+
lifecycle: operational
|
|
27
|
+
scope: { owner: auth.uid() }
|
|
28
|
+
uiSchema: { list: { primaryField: itemId, columns: [qty, orderStatus] } }
|
|
29
|
+
indexes: [[owner]]
|
|
30
|
+
schema:
|
|
31
|
+
type: object
|
|
32
|
+
required: [owner, itemId, qty, orderStatus]
|
|
33
|
+
properties:
|
|
34
|
+
owner: { type: string }
|
|
35
|
+
itemId: { type: string }
|
|
36
|
+
qty: { type: integer, minimum: 1 }
|
|
37
|
+
orderStatus: { type: string, enum: [placed, cancelled] }
|
|
38
|
+
placedAt: { type: string, format: date-time }
|
|
39
|
+
---
|
|
40
|
+
apiVersion: cms.mantle.aotter.net/v2
|
|
41
|
+
kind: Schema
|
|
42
|
+
metadata: { name: activity }
|
|
43
|
+
spec:
|
|
44
|
+
title: Activity
|
|
45
|
+
lifecycle: operational
|
|
46
|
+
schema:
|
|
47
|
+
type: object
|
|
48
|
+
required: [kind, subject]
|
|
49
|
+
properties:
|
|
50
|
+
kind: { type: string }
|
|
51
|
+
subject: { type: string }
|
|
52
|
+
detail: { type: string }
|
|
53
|
+
---
|
|
54
|
+
# Views are one SELECT; `input` is their parameters.
|
|
55
|
+
apiVersion: cms.mantle.aotter.net/v2
|
|
56
|
+
kind: View
|
|
57
|
+
metadata: { name: catalog }
|
|
58
|
+
spec:
|
|
59
|
+
surface: public
|
|
60
|
+
sql: SELECT id, sku, name, priceCents, stock FROM items ORDER BY name
|
|
61
|
+
---
|
|
62
|
+
apiVersion: cms.mantle.aotter.net/v2
|
|
63
|
+
kind: View
|
|
64
|
+
metadata: { name: search-items }
|
|
65
|
+
spec:
|
|
66
|
+
surface: public
|
|
67
|
+
input: { type: object, required: [q], properties: { q: { type: string, minLength: 1 } } }
|
|
68
|
+
sql: |
|
|
69
|
+
SELECT i.id, i.name, i.stock FROM items i
|
|
70
|
+
WHERE mantle.search(i, input.q)
|
|
71
|
+
ORDER BY mantle.search_rank(i), i.name
|
|
72
|
+
---
|
|
73
|
+
# Scope is injected into every Schema reference: this join only ever sees the caller's orders.
|
|
74
|
+
apiVersion: cms.mantle.aotter.net/v2
|
|
75
|
+
kind: View
|
|
76
|
+
metadata: { name: my-orders }
|
|
77
|
+
spec:
|
|
78
|
+
surface: public
|
|
79
|
+
requires: { auth: { all: [ctx.user] } }
|
|
80
|
+
sql: |
|
|
81
|
+
SELECT o.id, o.qty, o.orderStatus, i.name AS item, o.version
|
|
82
|
+
FROM orders o JOIN items i ON i.id = o.itemId
|
|
83
|
+
ORDER BY o.created_at DESC
|
|
84
|
+
---
|
|
85
|
+
apiVersion: cms.mantle.aotter.net/v2
|
|
86
|
+
kind: View
|
|
87
|
+
metadata: { name: sales-by-item }
|
|
88
|
+
spec:
|
|
89
|
+
surface: staff
|
|
90
|
+
requires: { auth: { all: [{ ctx.staff: [owner, editor] }] } }
|
|
91
|
+
sql: |
|
|
92
|
+
SELECT i.name, count(o.id) AS orders, coalesce(sum(o.qty), 0) AS units
|
|
93
|
+
FROM items i LEFT JOIN orders o ON o.itemId = i.id AND o.orderStatus = 'placed'
|
|
94
|
+
GROUP BY i.name
|
|
95
|
+
ORDER BY units DESC, i.name
|
|
96
|
+
---
|
|
97
|
+
apiVersion: cms.mantle.aotter.net/v2
|
|
98
|
+
kind: View
|
|
99
|
+
metadata: { name: recent-activity }
|
|
100
|
+
spec:
|
|
101
|
+
surface: staff
|
|
102
|
+
requires: { auth: { all: [{ ctx.staff: [owner, editor] }] } }
|
|
103
|
+
sql: SELECT kind, subject, detail FROM activity ORDER BY created_at DESC LIMIT 50
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
# A Procedure written as SQL: its statements apply together or not at all. The order is written
|
|
2
|
+
# first, so when the stock check on items fails the second statement, the order is rolled back too.
|
|
3
|
+
apiVersion: cms.mantle.aotter.net/v2
|
|
4
|
+
kind: Procedure
|
|
5
|
+
metadata: { name: place-order }
|
|
6
|
+
spec:
|
|
7
|
+
title: Place an order
|
|
8
|
+
description: Order one item for the signed-in caller; the stock check fails the whole order when stock runs out.
|
|
9
|
+
requires: { auth: { all: [ctx.user] } }
|
|
10
|
+
input:
|
|
11
|
+
type: object
|
|
12
|
+
required: [itemId, qty]
|
|
13
|
+
properties:
|
|
14
|
+
itemId: { type: string }
|
|
15
|
+
qty: { type: integer, minimum: 1 }
|
|
16
|
+
output: { type: object }
|
|
17
|
+
handler:
|
|
18
|
+
sql: |
|
|
19
|
+
INSERT INTO orders (itemId, qty, orderStatus, placedAt)
|
|
20
|
+
SELECT id, input.qty, 'placed', now() FROM items WHERE id = input.itemId
|
|
21
|
+
RETURNING id, qty, orderStatus;
|
|
22
|
+
UPDATE items SET stock = stock - input.qty WHERE id = input.itemId
|
|
23
|
+
---
|
|
24
|
+
# Optimistic concurrency: the caller sends the version it saw.
|
|
25
|
+
apiVersion: cms.mantle.aotter.net/v2
|
|
26
|
+
kind: Procedure
|
|
27
|
+
metadata: { name: cancel-order }
|
|
28
|
+
spec:
|
|
29
|
+
title: Cancel an order
|
|
30
|
+
requires: { auth: { all: [ctx.user] } }
|
|
31
|
+
input:
|
|
32
|
+
type: object
|
|
33
|
+
required: [orderId, expectedVersion]
|
|
34
|
+
properties:
|
|
35
|
+
orderId: { type: string }
|
|
36
|
+
expectedVersion: { type: integer }
|
|
37
|
+
output: { type: object }
|
|
38
|
+
handler: { ref: cancelOrder }
|
|
39
|
+
---
|
|
40
|
+
# An upsert keyed by a unique index.
|
|
41
|
+
apiVersion: cms.mantle.aotter.net/v2
|
|
42
|
+
kind: Procedure
|
|
43
|
+
metadata: { name: restock }
|
|
44
|
+
spec:
|
|
45
|
+
title: Restock an item
|
|
46
|
+
description: Add stock to an item by SKU, creating the item if it is new.
|
|
47
|
+
requires: { auth: { all: [{ ctx.staff: [owner, editor] }] } }
|
|
48
|
+
input:
|
|
49
|
+
type: object
|
|
50
|
+
required: [sku, name, qty]
|
|
51
|
+
properties:
|
|
52
|
+
sku: { type: string }
|
|
53
|
+
name: { type: string }
|
|
54
|
+
qty: { type: integer, minimum: 1 }
|
|
55
|
+
output: { type: object }
|
|
56
|
+
handler:
|
|
57
|
+
sql: |
|
|
58
|
+
INSERT INTO items (sku, name, stock) VALUES (input.sku, input.name, input.qty)
|
|
59
|
+
ON CONFLICT (sku) DO UPDATE SET stock = items.stock + EXCLUDED.stock
|
|
60
|
+
RETURNING id, sku, stock
|
|
61
|
+
---
|
|
62
|
+
apiVersion: cms.mantle.aotter.net/v2
|
|
63
|
+
kind: Procedure
|
|
64
|
+
metadata: { name: record-orders }
|
|
65
|
+
spec:
|
|
66
|
+
input: { type: object }
|
|
67
|
+
output: { type: object }
|
|
68
|
+
handler: { ref: recordOrders }
|
|
69
|
+
---
|
|
70
|
+
apiVersion: cms.mantle.aotter.net/v2
|
|
71
|
+
kind: Procedure
|
|
72
|
+
metadata: { name: weekly-digest }
|
|
73
|
+
spec:
|
|
74
|
+
input: { type: object }
|
|
75
|
+
output: { type: object }
|
|
76
|
+
handler: { ref: weeklyDigest }
|
|
77
|
+
---
|
|
78
|
+
apiVersion: cms.mantle.aotter.net/v2
|
|
79
|
+
kind: Trigger
|
|
80
|
+
metadata: { name: place-order-http }
|
|
81
|
+
spec:
|
|
82
|
+
source: { kind: http, method: POST, path: /api/orders }
|
|
83
|
+
target: { procedure: place-order }
|
|
84
|
+
---
|
|
85
|
+
apiVersion: cms.mantle.aotter.net/v2
|
|
86
|
+
kind: Trigger
|
|
87
|
+
metadata: { name: place-order-mcp }
|
|
88
|
+
spec:
|
|
89
|
+
source: { kind: mcp, surface: public }
|
|
90
|
+
target: { procedure: place-order }
|
|
91
|
+
---
|
|
92
|
+
apiVersion: cms.mantle.aotter.net/v2
|
|
93
|
+
kind: Trigger
|
|
94
|
+
metadata: { name: cancel-order-http }
|
|
95
|
+
spec:
|
|
96
|
+
source: { kind: http, method: POST, path: /api/orders/cancel }
|
|
97
|
+
target: { procedure: cancel-order }
|
|
98
|
+
---
|
|
99
|
+
apiVersion: cms.mantle.aotter.net/v2
|
|
100
|
+
kind: Trigger
|
|
101
|
+
metadata: { name: restock-mcp }
|
|
102
|
+
spec:
|
|
103
|
+
source: { kind: mcp, surface: staff }
|
|
104
|
+
target: { procedure: restock }
|
|
105
|
+
---
|
|
106
|
+
# After hooks get every row one statement touched.
|
|
107
|
+
apiVersion: cms.mantle.aotter.net/v2
|
|
108
|
+
kind: Trigger
|
|
109
|
+
metadata: { name: orders-recorded }
|
|
110
|
+
spec:
|
|
111
|
+
source: { kind: lifecycle, schema: orders, on: [after_create, after_update] }
|
|
112
|
+
target: { procedure: record-orders }
|
|
113
|
+
---
|
|
114
|
+
# POSIX cron, UTC: Sundays at 03:00.
|
|
115
|
+
apiVersion: cms.mantle.aotter.net/v2
|
|
116
|
+
kind: Trigger
|
|
117
|
+
metadata: { name: weekly-digest }
|
|
118
|
+
spec:
|
|
119
|
+
source: { kind: schedule, cron: "0 3 * * 0" }
|
|
120
|
+
target: { procedure: weekly-digest }
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{ "version": 2, "identity": "mantle", "features": ["mcp", "admin", "web"] }
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "mantle-reference-service",
|
|
3
|
+
"private": true,
|
|
4
|
+
"type": "module",
|
|
5
|
+
"scripts": {
|
|
6
|
+
"generate": "mantle generate",
|
|
7
|
+
"dev": "wrangler dev --local --ip 127.0.0.1 --port 8787",
|
|
8
|
+
"check": "mantle generate && mantle generate --check && tsc --noEmit && node smoke.mjs"
|
|
9
|
+
},
|
|
10
|
+
"dependencies": {
|
|
11
|
+
"@aotter/mantle": "0.2.0-alpha.2",
|
|
12
|
+
"@aotter/mantle-ui": "0.2.0-alpha.2",
|
|
13
|
+
"@better-auth/cimd": "1.7.2",
|
|
14
|
+
"@better-auth/mcp": "1.7.2",
|
|
15
|
+
"@better-auth/oauth-provider": "1.7.2",
|
|
16
|
+
"@modelcontextprotocol/ext-apps": "2.0.0",
|
|
17
|
+
"@modelcontextprotocol/server": "2.1.0",
|
|
18
|
+
"better-auth": "1.7.2"
|
|
19
|
+
},
|
|
20
|
+
"devDependencies": {
|
|
21
|
+
"@cloudflare/workers-types": "5.20260904.1",
|
|
22
|
+
"@types/node": "^26",
|
|
23
|
+
"typescript": "^6.0.3",
|
|
24
|
+
"wrangler": "4.129.0"
|
|
25
|
+
},
|
|
26
|
+
"packageManager": "pnpm@9.15.0"
|
|
27
|
+
}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
// Runs the service under `wrangler dev` on a fresh local D1 and drives it the way people and agents would: console email-OTP
|
|
2
|
+
// sign-in, REST, both MCP surfaces, Admin's API and a cron. Each step asserts what the manifests promise.
|
|
3
|
+
import assert from "node:assert/strict";
|
|
4
|
+
import { spawn } from "node:child_process";
|
|
5
|
+
import { mkdtempSync, readFileSync, rmSync } from "node:fs";
|
|
6
|
+
import { tmpdir } from "node:os";
|
|
7
|
+
import { join } from "node:path";
|
|
8
|
+
|
|
9
|
+
const port = 18000 + Math.floor(Math.random() * 1000);
|
|
10
|
+
const origin = `http://127.0.0.1:${port}`;
|
|
11
|
+
const owner = "owner@example.test";
|
|
12
|
+
const state = mkdtempSync(join(tmpdir(), "mantle-reference-"));
|
|
13
|
+
const wrangler = spawn("pnpm", ["exec", "wrangler", "dev", "--local", "--ip", "127.0.0.1", "--port", String(port), "--inspector-port", "0",
|
|
14
|
+
"--persist-to", state, "--test-scheduled",
|
|
15
|
+
"--var", `PUBLIC_ORIGIN:${origin}`, "--var", `ADMIN_EMAIL:${owner}`, "--var", "BETTER_AUTH_SECRET:reference-smoke-secret-0123456789abcdef"],
|
|
16
|
+
// its own process group: pnpm does not pass a signal on to wrangler and workerd, so the group is stopped as one
|
|
17
|
+
{ env: { ...process.env, WRANGLER_SEND_METRICS: "false", CI: "1" }, stdio: ["ignore", "pipe", "pipe"], detached: true });
|
|
18
|
+
let logs = "";
|
|
19
|
+
wrangler.stdout.on("data", (chunk) => { logs += chunk; });
|
|
20
|
+
wrangler.stderr.on("data", (chunk) => { logs += chunk; });
|
|
21
|
+
|
|
22
|
+
const json = { "content-type": "application/json", origin };
|
|
23
|
+
const call = async (method, path, { cookie, body } = {}) => {
|
|
24
|
+
const response = await fetch(`${origin}${path}`, { method, headers: { ...json, ...(cookie ? { cookie } : {}) }, ...(body === undefined ? {} : { body: JSON.stringify(body) }) });
|
|
25
|
+
const text = await response.text();
|
|
26
|
+
return { status: response.status, body: text ? JSON.parse(text) : null, headers: response.headers };
|
|
27
|
+
};
|
|
28
|
+
const mcp = async (path, cookie, name, args) => {
|
|
29
|
+
const response = await fetch(`${origin}${path}`, { method: "POST", headers: { ...json, accept: "application/json, text/event-stream", ...(cookie ? { cookie } : {}) },
|
|
30
|
+
body: JSON.stringify({ jsonrpc: "2.0", id: 1, method: name ? "tools/call" : "tools/list", params: name ? { name, arguments: args } : {} }) });
|
|
31
|
+
const text = await response.text();
|
|
32
|
+
const data = text.split("\n").find((line) => line.startsWith("data:"));
|
|
33
|
+
return { status: response.status, body: data ? JSON.parse(data.slice(5)) : text ? JSON.parse(text) : null };
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
/** Console email OTP: ask for a code, read it from the wrangler log as a developer would, sign in. */
|
|
37
|
+
async function signIn(email) {
|
|
38
|
+
const before = logs.length;
|
|
39
|
+
assert.equal((await call("POST", "/api/auth/email-otp/send-verification-otp", { body: { email, type: "sign-in" } })).status, 200);
|
|
40
|
+
let code;
|
|
41
|
+
for (let i = 0; i < 40 && !code; i++) {
|
|
42
|
+
code = new RegExp(`${email.replace(/[.+]/g, "\\$&")}[\\s\\S]*?one-time code is (\\d{6})`).exec(logs.slice(before))?.[1];
|
|
43
|
+
if (!code) await new Promise((resolve) => setTimeout(resolve, 100));
|
|
44
|
+
}
|
|
45
|
+
assert.ok(code, `no one-time code for ${email} in the log`);
|
|
46
|
+
const signed = await call("POST", "/api/auth/sign-in/email-otp", { body: { email, otp: code } });
|
|
47
|
+
assert.equal(signed.status, 200, JSON.stringify(signed.body));
|
|
48
|
+
return signed.headers.getSetCookie().map((c) => c.split(";")[0]).join("; ");
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const stockOf = async () => (await call("GET", "/api/views/catalog")).body.rows[0].stock;
|
|
52
|
+
const step = (name) => console.log(`ok - ${name}`);
|
|
53
|
+
|
|
54
|
+
try {
|
|
55
|
+
for (let attempt = 0; ; attempt++) {
|
|
56
|
+
if (wrangler.exitCode !== null) throw new Error(`wrangler exited ${wrangler.exitCode}`);
|
|
57
|
+
try { if ((await fetch(`${origin}/api/views/catalog`)).status === 200) break; } catch { /* starting */ }
|
|
58
|
+
if (attempt > 240) throw new Error("the Worker did not start");
|
|
59
|
+
await new Promise((resolve) => setTimeout(resolve, 250));
|
|
60
|
+
}
|
|
61
|
+
assert.deepEqual((await call("GET", "/api/views/catalog")).body.rows, []);
|
|
62
|
+
step("boot converges a fresh D1 to the plan; the public catalog is empty");
|
|
63
|
+
|
|
64
|
+
const staff = await signIn(owner);
|
|
65
|
+
assert.equal((await call("GET", "/admin/api/me", { cookie: staff })).body.role, "owner");
|
|
66
|
+
step("console email OTP signs in; ADMIN_EMAIL becomes the owner");
|
|
67
|
+
|
|
68
|
+
for (const qty of [5, 3]) {
|
|
69
|
+
const restocked = await mcp("/mcp/staff", staff, "restock", { sku: "TEA-1", name: "Oolong tea", qty });
|
|
70
|
+
assert.equal(restocked.body.result.isError, undefined, JSON.stringify(restocked.body));
|
|
71
|
+
}
|
|
72
|
+
assert.equal(await stockOf(), 8);
|
|
73
|
+
step("staff MCP: restock is an upsert on the unique sku (5 + 3)");
|
|
74
|
+
|
|
75
|
+
const itemId = (await call("GET", "/api/views/catalog")).body.rows[0].id;
|
|
76
|
+
assert.equal((await call("POST", "/api/orders", { body: { itemId, qty: 1 } })).status, 401);
|
|
77
|
+
step("an anonymous order is 401");
|
|
78
|
+
|
|
79
|
+
const buyer = await signIn("buyer@example.test");
|
|
80
|
+
assert.equal((await call("GET", "/admin/api/me", { cookie: buyer })).status, 403);
|
|
81
|
+
const placed = await call("POST", "/api/orders", { cookie: buyer, body: { itemId, qty: 2 } });
|
|
82
|
+
assert.equal(placed.status, 200, JSON.stringify(placed.body));
|
|
83
|
+
assert.equal(await stockOf(), 6);
|
|
84
|
+
step("a signed-in buyer (not staff) orders 2: stock 8 -> 6 in one program");
|
|
85
|
+
|
|
86
|
+
const tooMany = await call("POST", "/api/orders", { cookie: buyer, body: { itemId, qty: 99 } });
|
|
87
|
+
assert.equal(tooMany.status, 400, JSON.stringify(tooMany.body));
|
|
88
|
+
assert.match(tooMany.body.error.message, /CHECK items: stock >= 0/);
|
|
89
|
+
assert.equal(await stockOf(), 6);
|
|
90
|
+
step("ordering 99 fails the stock >= 0 check in the second statement, and the order the first wrote is rolled back");
|
|
91
|
+
|
|
92
|
+
const mine = (await call("GET", "/api/views/my-orders", { cookie: buyer })).body.rows;
|
|
93
|
+
assert.deepEqual(mine.map(({ qty, orderStatus, item }) => ({ qty, orderStatus, item })), [{ qty: 2, orderStatus: "placed", item: "Oolong tea" }]);
|
|
94
|
+
assert.deepEqual((await call("GET", "/api/views/my-orders", { cookie: staff })).body.rows, []);
|
|
95
|
+
step("my-orders joins items and shows only the caller's own orders (scope)");
|
|
96
|
+
|
|
97
|
+
const order = mine[0];
|
|
98
|
+
assert.equal((await call("POST", "/api/orders/cancel", { cookie: staff, body: { orderId: order.id, expectedVersion: order.version } })).status, 409);
|
|
99
|
+
const cancelled = await call("POST", "/api/orders/cancel", { cookie: buyer, body: { orderId: order.id, expectedVersion: order.version } });
|
|
100
|
+
assert.equal(cancelled.status, 200, JSON.stringify(cancelled.body));
|
|
101
|
+
assert.equal(await stockOf(), 8);
|
|
102
|
+
assert.equal((await call("POST", "/api/orders/cancel", { cookie: buyer, body: { orderId: order.id, expectedVersion: order.version } })).status, 409);
|
|
103
|
+
step("cancel: another owner's order is a CONFLICT, the owner's returns the stock, a stale version is a CONFLICT");
|
|
104
|
+
|
|
105
|
+
assert.deepEqual((await call("GET", "/api/views/search-items?q=oolong")).body.rows.map((r) => r.name), ["Oolong tea"]);
|
|
106
|
+
step("search-items: mantle.search over searchableFields");
|
|
107
|
+
|
|
108
|
+
const sales = await call("GET", "/admin/api/views/sales-by-item", { cookie: staff });
|
|
109
|
+
assert.deepEqual(sales.body.rows, [{ name: "Oolong tea", orders: 0, units: 0 }], JSON.stringify(sales.body));
|
|
110
|
+
assert.equal((await call("GET", "/admin/api/views/sales-by-item", { cookie: buyer })).status, 403);
|
|
111
|
+
step("sales-by-item (GROUP BY over a LEFT JOIN) is staff-only through Admin's API");
|
|
112
|
+
|
|
113
|
+
// the console: @aotter/mantle-ui/admin served by Admin at /admin, its assets by name, any other path its client-side route
|
|
114
|
+
const shell = await fetch(`${origin}/admin/c/items`);
|
|
115
|
+
const html = await shell.text();
|
|
116
|
+
const script = /src="(\/admin\/assets\/[^"]+\.js)"/.exec(html)?.[1];
|
|
117
|
+
assert.equal(shell.headers.get("x-frame-options"), "DENY");
|
|
118
|
+
assert.ok(script, html.slice(0, 300));
|
|
119
|
+
assert.equal((await fetch(`${origin}${script}`)).status, 200);
|
|
120
|
+
assert.equal((await fetch(`${origin}/admin/assets/missing.js`)).status, 404);
|
|
121
|
+
// the editor's round trip: it reads the whole entry and writes it back, an unset optional field included as null
|
|
122
|
+
const [tea] = (await call("GET", "/admin/api/entries?collection=items", { cookie: staff })).body.items;
|
|
123
|
+
assert.deepEqual(tea.data_preview, { name: "Oolong tea", sku: "TEA-1", stock: 8 });
|
|
124
|
+
const { entry } = (await call("GET", `/admin/api/entries/${tea.id}?collection=items`, { cookie: staff })).body;
|
|
125
|
+
const saved = await call("PATCH", `/admin/api/entries/${tea.id}?collection=items`, { cookie: staff, body: { expectedVersion: entry.version, data: { ...entry.data, name: "Oolong tea (Taiwan)", priceCents: null } } });
|
|
126
|
+
assert.equal(saved.status, 200, JSON.stringify(saved.body));
|
|
127
|
+
assert.equal((await call("GET", "/api/views/catalog")).body.rows[0].name, "Oolong tea (Taiwan)");
|
|
128
|
+
step("Admin's console: the SPA and its assets at /admin, the list's declared columns, and an editor's save of the whole entry");
|
|
129
|
+
|
|
130
|
+
const tools = (await mcp("/mcp", undefined)).body.result.tools.map((t) => t.name);
|
|
131
|
+
assert.ok(tools.includes("place_order") && !tools.includes("restock"), tools.join());
|
|
132
|
+
step("public MCP lists place_order and not the staff restock");
|
|
133
|
+
|
|
134
|
+
assert.equal((await fetch(`${origin}/__scheduled?cron=${encodeURIComponent("0 3 * * 1")}`)).status, 200);
|
|
135
|
+
const activity = (await call("GET", "/admin/api/views/recent-activity", { cookie: staff })).body.rows;
|
|
136
|
+
assert.deepEqual(activity.map((r) => r.kind).sort(), ["after_create", "after_update", "weekly-digest"]);
|
|
137
|
+
// the one order was cancelled, and the digest counts placed orders only
|
|
138
|
+
assert.equal(activity.find((r) => r.kind === "weekly-digest").detail, "0 orders, 0 units");
|
|
139
|
+
step("the after hooks recorded the order rows, and Cloudflare's Monday-numbered cron ran the POSIX Sunday digest");
|
|
140
|
+
|
|
141
|
+
const version = JSON.parse(readFileSync("node_modules/@aotter/mantle/package.json", "utf8")).version;
|
|
142
|
+
console.log(`Mantle ${version}: reference service passed`);
|
|
143
|
+
} catch (error) {
|
|
144
|
+
console.error(logs.slice(-4000));
|
|
145
|
+
throw error;
|
|
146
|
+
} finally {
|
|
147
|
+
const stop = (signal) => { try { process.kill(-wrangler.pid, signal); } catch { /* already gone */ } };
|
|
148
|
+
stop("SIGTERM");
|
|
149
|
+
await new Promise((resolve) => {
|
|
150
|
+
if (wrangler.exitCode !== null) return resolve();
|
|
151
|
+
const timer = setTimeout(() => { stop("SIGKILL"); resolve(); }, 5_000);
|
|
152
|
+
wrangler.once("exit", () => { clearTimeout(timer); resolve(); });
|
|
153
|
+
});
|
|
154
|
+
stop("SIGKILL");
|
|
155
|
+
rmSync(state, { recursive: true, force: true });
|
|
156
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
// Written once by `mantle generate`, then filled in. `MantleHandlers` lists exactly the plan's handler refs.
|
|
2
|
+
import type { MantleHandlers } from "../.mantle/generated/mantle.js";
|
|
3
|
+
|
|
4
|
+
export const handlers: MantleHandlers = {
|
|
5
|
+
// ctx.store is scoped to the caller: another owner's order is not visible, so the write below is a CONFLICT, never a leak
|
|
6
|
+
cancelOrder: async ({ orderId, expectedVersion }, ctx) => {
|
|
7
|
+
const [order] = (await ctx.store.select({ from: "orders", where: { id: orderId, orderStatus: "placed" } })).rows;
|
|
8
|
+
const [item] = order ? (await ctx.store.select({ from: "items", where: { id: String(order.itemId) } })).rows : [];
|
|
9
|
+
await ctx.store.write([
|
|
10
|
+
{ update: "orders", set: { orderStatus: "cancelled" }, where: { id: orderId }, lock: expectedVersion },
|
|
11
|
+
// both rows or neither: the stock goes back only with the cancellation, and a concurrent restock is a CONFLICT
|
|
12
|
+
...(order && item ? [{ update: "items" as const, set: { stock: Number(item.stock) + Number(order.qty) }, where: { id: String(item.id) }, lock: Number(item.version) }] : []),
|
|
13
|
+
]);
|
|
14
|
+
return { id: orderId, orderStatus: "cancelled" };
|
|
15
|
+
},
|
|
16
|
+
|
|
17
|
+
// an after hook gets every row the statement touched: loop, never rows[0]
|
|
18
|
+
recordOrders: async (_input, ctx) => {
|
|
19
|
+
const cause = ctx.cause;
|
|
20
|
+
if (cause.kind !== "lifecycle") return {};
|
|
21
|
+
await ctx.store.write(cause.rows.map((row) => ({
|
|
22
|
+
insert: "activity" as const,
|
|
23
|
+
values: { kind: cause.hook, subject: String(row.id), detail: `${String(row.orderStatus)} x${String(row.qty)}` },
|
|
24
|
+
})));
|
|
25
|
+
return {};
|
|
26
|
+
},
|
|
27
|
+
|
|
28
|
+
// a schedule runs as the system caller: no scope, and no requires.auth predicate holds for it. One page of up to 500 orders
|
|
29
|
+
// keeps the example short; a digest over more would page with nextCursor.
|
|
30
|
+
weeklyDigest: async (_input, ctx) => {
|
|
31
|
+
const { rows } = await ctx.store.select({ from: "orders", columns: ["qty"], where: { orderStatus: "placed" }, limit: 500 });
|
|
32
|
+
const units = rows.reduce((sum, row) => sum + Number(row.qty), 0);
|
|
33
|
+
await ctx.store.write([{ insert: "activity", values: { kind: "weekly-digest", subject: String(ctx.cause.kind === "schedule" ? ctx.cause.scheduledTime : ""), detail: `${rows.length} orders, ${units} units` } }]);
|
|
34
|
+
return {};
|
|
35
|
+
},
|
|
36
|
+
};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
// Written once by `mantle generate`; this file is yours now. The Cloudflare entry (ADR-0032 decision 6).
|
|
2
|
+
import { waitUntil } from "cloudflare:workers";
|
|
3
|
+
import { toCloudflareCron } from "@aotter/mantle/cloudflare";
|
|
4
|
+
import { plan } from "../.mantle/generated/mantle.js";
|
|
5
|
+
import { mantle, type Env } from "./service.js";
|
|
6
|
+
|
|
7
|
+
// Cloudflare names a cron as wrangler.jsonc spells it; the plan's schedule Triggers are POSIX, and several spellings can share one
|
|
8
|
+
const crons = new Map<string, string[]>();
|
|
9
|
+
for (const t of Object.values(plan.triggers)) {
|
|
10
|
+
if (t.source.kind !== "schedule" || t.source.enabled === false) continue;
|
|
11
|
+
const cf = toCloudflareCron(t.source.cron);
|
|
12
|
+
const posix = crons.get(cf) ?? [];
|
|
13
|
+
if (!posix.includes(t.source.cron)) crons.set(cf, [...posix, t.source.cron]);
|
|
14
|
+
}
|
|
15
|
+
// not bound to one request, so a handler's ctx.waitUntil never lands on another request's finished context
|
|
16
|
+
const ctx = { waitUntil };
|
|
17
|
+
|
|
18
|
+
export default {
|
|
19
|
+
fetch: (request, env) => mantle.fetch(request, env, ctx),
|
|
20
|
+
async scheduled(controller, env) {
|
|
21
|
+
const posix = crons.get(controller.cron);
|
|
22
|
+
if (posix === undefined) throw new Error(`No schedule Trigger runs on the Cloudflare cron '${controller.cron}'`);
|
|
23
|
+
const errors: unknown[] = [];
|
|
24
|
+
for (const cron of posix) {
|
|
25
|
+
try {
|
|
26
|
+
await mantle.invokeSchedule(cron, controller.scheduledTime, env, ctx);
|
|
27
|
+
} catch (error) {
|
|
28
|
+
errors.push(error);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
if (errors.length) throw new AggregateError(errors, `${errors.length} cron spelling(s) failed for '${controller.cron}'`);
|
|
32
|
+
},
|
|
33
|
+
} satisfies ExportedHandler<Env>;
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
// Written once by `mantle generate`; this file is yours now. It composes the service (ADR-0032 decision 6).
|
|
2
|
+
import { createMantle, withCaller, type MantleRuntime, type MantleService, type Surface } from "@aotter/mantle";
|
|
3
|
+
import { createAdminSurface } from "@aotter/mantle/admin";
|
|
4
|
+
import { ConsoleEmailSender, createAuthRoutes, createCallerResolver, createMantleAuth, createSetupIncompleteAuth, type MantleAuth } from "@aotter/mantle/auth";
|
|
5
|
+
import { d1Driver, d1Storage } from "@aotter/mantle/cloudflare";
|
|
6
|
+
import { createMcpSurface, planApp } from "@aotter/mantle/mcp";
|
|
7
|
+
import { mantleAppHtml } from "@aotter/mantle-ui/mcp-app";
|
|
8
|
+
import { createRestSurface } from "@aotter/mantle/web";
|
|
9
|
+
import { plan } from "../.mantle/generated/mantle.js";
|
|
10
|
+
import { handlers } from "./handlers.js";
|
|
11
|
+
|
|
12
|
+
export interface Env {
|
|
13
|
+
readonly DB: D1Database;
|
|
14
|
+
/** The Admin SPA's files (`@aotter/mantle-ui/admin`), bound in wrangler.jsonc. */
|
|
15
|
+
readonly ASSETS: Fetcher;
|
|
16
|
+
readonly BETTER_AUTH_SECRET?: string;
|
|
17
|
+
readonly PUBLIC_ORIGIN?: string;
|
|
18
|
+
readonly ADMIN_EMAIL?: string;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/** One-time codes printed to the log are for local development: a deployed service picks its own sign-in method and sender. */
|
|
22
|
+
function createAuth(env: Env, origin: string): MantleAuth {
|
|
23
|
+
// an unset PUBLIC_ORIGIN is not local: the fallback origin below is only for URLs, never for deciding to print codes
|
|
24
|
+
const local = env.PUBLIC_ORIGIN !== undefined && /^http:\/\/(localhost|127\.0\.0\.1|\[::1\])(:\d+)?$/.test(origin);
|
|
25
|
+
if (!local || !env.BETTER_AUTH_SECRET || !env.ADMIN_EMAIL)
|
|
26
|
+
return createSetupIncompleteAuth({ message: "Sign-in is not configured: copy .dev.vars.example to .dev.vars locally, or choose a sign-in method in src/service.ts." });
|
|
27
|
+
return createMantleAuth({
|
|
28
|
+
database: env.DB, driver: d1Driver(env.DB), baseURL: origin, secret: env.BETTER_AUTH_SECRET,
|
|
29
|
+
methods: [{ kind: "email-otp", sender: new ConsoleEmailSender() }],
|
|
30
|
+
bootstrapOwner: { match: "email", value: env.ADMIN_EMAIL },
|
|
31
|
+
ipAddressHeaders: ["cf-connecting-ip"],
|
|
32
|
+
oauthProvider: { loginPage: "/admin/sign-in", consentPage: "/admin/oauth/consent", scopes: ["mcp"], mcpResource: `${origin}/mcp` },
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/** A file of the Admin SPA, or null when it has none by that path. */
|
|
37
|
+
async function adminAsset(assets: Fetcher, path: string): Promise<Response | null> {
|
|
38
|
+
const response = await assets.fetch(new URL(path, "http://assets/"));
|
|
39
|
+
return response.ok ? response : null;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function mount(runtime: MantleRuntime, env: Env) {
|
|
43
|
+
const origin = env.PUBLIC_ORIGIN?.replace(/\/+$/, "") ?? "http://127.0.0.1:8787";
|
|
44
|
+
const auth = createAuth(env, origin);
|
|
45
|
+
const resolver = createCallerResolver(auth, { jwtBearer: { audience: `${origin}/mcp`, scopes: ["mcp"] } });
|
|
46
|
+
const authRoutes = createAuthRoutes(auth, { resolver });
|
|
47
|
+
const guard = (surface: Surface, options?: { resourceMetadata?: string }) => withCaller(resolver, surface, options);
|
|
48
|
+
const resourceMetadata = `${origin}/.well-known/oauth-protected-resource/mcp`;
|
|
49
|
+
const admin = guard(createAdminSurface(runtime, { basePath: "/admin", assets: (path) => adminAsset(env.ASSETS, path), identity: { directory: auth, roles: auth, deleteUser: auth.deleteUser }, site: { mcpEndpoints: { public: "/mcp", staff: "/mcp/staff" } } }));
|
|
50
|
+
const mcp = guard(createMcpSurface(runtime, { basePath: "/mcp", surface: "public", resourceMetadata }), { resourceMetadata });
|
|
51
|
+
// MCP Apps hosts render each staff View's rows, and the operations on one row, in the chat
|
|
52
|
+
const staffMcp = guard(createMcpSurface(runtime, { basePath: "/mcp/staff", surface: "staff", apps: { resources: [planApp(runtime.plan, { surface: "staff", html: mantleAppHtml })] }, resourceMetadata }), { resourceMetadata });
|
|
53
|
+
// REST answers everything else: public Views under /api/views and the plan's HTTP Triggers
|
|
54
|
+
const rest = guard(createRestSurface(runtime, { basePath: "/api" }));
|
|
55
|
+
return async (request: Request, waitUntil: (promise: Promise<unknown>) => void): Promise<Response> => {
|
|
56
|
+
const { pathname } = new URL(request.url);
|
|
57
|
+
const under = (base: string) => pathname === base || pathname.startsWith(`${base}/`);
|
|
58
|
+
// Better Auth's context is per isolate: the request that starts it waits for it, or the next one hangs on it; a failed start is mounted again
|
|
59
|
+
await auth.ready?.catch((error) => {
|
|
60
|
+
routes = undefined;
|
|
61
|
+
throw error;
|
|
62
|
+
});
|
|
63
|
+
const owned = await authRoutes(request, { waitUntil });
|
|
64
|
+
if (owned) return owned;
|
|
65
|
+
if (under("/admin")) return admin(request);
|
|
66
|
+
if (under("/mcp/staff")) return staffMcp(request);
|
|
67
|
+
if (under("/mcp")) return mcp(request);
|
|
68
|
+
return rest(request);
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
let routes: ReturnType<typeof mount> | undefined;
|
|
73
|
+
const service: MantleService<Env> = {
|
|
74
|
+
handlers,
|
|
75
|
+
fetch: (request, env, { runtime, waitUntil }) => (routes ??= mount(runtime, env))(request, waitUntil),
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
export const mantle = createMantle(service, { plan, storage: (env) => d1Storage(env.DB), schedules: true });
|
|
@@ -1,13 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"compilerOptions": {
|
|
3
3
|
"target": "ES2022",
|
|
4
|
+
"lib": [
|
|
5
|
+
"ES2023"
|
|
6
|
+
],
|
|
4
7
|
"module": "ESNext",
|
|
5
|
-
"moduleResolution": "
|
|
8
|
+
"moduleResolution": "Bundler",
|
|
6
9
|
"strict": true,
|
|
7
10
|
"noEmit": true,
|
|
8
11
|
"skipLibCheck": true,
|
|
12
|
+
"resolveJsonModule": true,
|
|
9
13
|
"types": [
|
|
10
|
-
"@cloudflare/workers-types"
|
|
14
|
+
"@cloudflare/workers-types",
|
|
15
|
+
"node"
|
|
11
16
|
]
|
|
12
17
|
},
|
|
13
18
|
"include": [
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "node_modules/wrangler/config-schema.json",
|
|
3
|
+
"name": "mantle-reference",
|
|
4
|
+
"main": "src/index.ts",
|
|
5
|
+
"compatibility_date": "2026-09-01",
|
|
6
|
+
"compatibility_flags": [
|
|
7
|
+
"nodejs_compat"
|
|
8
|
+
],
|
|
9
|
+
"d1_databases": [
|
|
10
|
+
{
|
|
11
|
+
"binding": "DB",
|
|
12
|
+
"database_name": "mantle-reference"
|
|
13
|
+
}
|
|
14
|
+
],
|
|
15
|
+
"assets": {
|
|
16
|
+
"directory": "node_modules/@aotter/mantle-ui/dist/admin",
|
|
17
|
+
"binding": "ASSETS",
|
|
18
|
+
"run_worker_first": true,
|
|
19
|
+
"html_handling": "none"
|
|
20
|
+
},
|
|
21
|
+
"triggers": {
|
|
22
|
+
"crons": [
|
|
23
|
+
"0 3 * * 1"
|
|
24
|
+
]
|
|
25
|
+
}
|
|
26
|
+
}
|