workerstack 0.1.0-beta.0
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/CHANGELOG.md +13 -0
- package/LICENSE +21 -0
- package/README.md +138 -0
- package/dist/access.d.ts +131 -0
- package/dist/access.d.ts.map +1 -0
- package/dist/access.js +333 -0
- package/dist/access.js.map +1 -0
- package/dist/api/builder.d.ts +457 -0
- package/dist/api/builder.d.ts.map +1 -0
- package/dist/api/builder.js +45 -0
- package/dist/api/builder.js.map +1 -0
- package/dist/api/catalog.d.ts +8 -0
- package/dist/api/catalog.d.ts.map +1 -0
- package/dist/api/catalog.js +56 -0
- package/dist/api/catalog.js.map +1 -0
- package/dist/api/context.d.ts +47 -0
- package/dist/api/context.d.ts.map +1 -0
- package/dist/api/context.js +40 -0
- package/dist/api/context.js.map +1 -0
- package/dist/api/crud-router.d.ts +476 -0
- package/dist/api/crud-router.d.ts.map +1 -0
- package/dist/api/crud-router.js +354 -0
- package/dist/api/crud-router.js.map +1 -0
- package/dist/api/list-input-schema.d.ts +37 -0
- package/dist/api/list-input-schema.d.ts.map +1 -0
- package/dist/api/list-input-schema.js +63 -0
- package/dist/api/list-input-schema.js.map +1 -0
- package/dist/api/list-spec.d.ts +44 -0
- package/dist/api/list-spec.d.ts.map +1 -0
- package/dist/api/list-spec.js +49 -0
- package/dist/api/list-spec.js.map +1 -0
- package/dist/api/live-view.d.ts +14 -0
- package/dist/api/live-view.d.ts.map +1 -0
- package/dist/api/live-view.js +42 -0
- package/dist/api/live-view.js.map +1 -0
- package/dist/api/live-window.d.ts +40 -0
- package/dist/api/live-window.d.ts.map +1 -0
- package/dist/api/live-window.js +93 -0
- package/dist/api/live-window.js.map +1 -0
- package/dist/api/openapi.d.ts +6 -0
- package/dist/api/openapi.d.ts.map +1 -0
- package/dist/api/openapi.js +146 -0
- package/dist/api/openapi.js.map +1 -0
- package/dist/api/realtime-router.d.ts +94 -0
- package/dist/api/realtime-router.d.ts.map +1 -0
- package/dist/api/realtime-router.js +45 -0
- package/dist/api/realtime-router.js.map +1 -0
- package/dist/api/registry.d.ts +30 -0
- package/dist/api/registry.d.ts.map +1 -0
- package/dist/api/registry.js +236 -0
- package/dist/api/registry.js.map +1 -0
- package/dist/api/router.d.ts +15 -0
- package/dist/api/router.d.ts.map +1 -0
- package/dist/api/router.js +32 -0
- package/dist/api/router.js.map +1 -0
- package/dist/api/storage-router.d.ts +349 -0
- package/dist/api/storage-router.d.ts.map +1 -0
- package/dist/api/storage-router.js +155 -0
- package/dist/api/storage-router.js.map +1 -0
- package/dist/api/types.d.ts +55 -0
- package/dist/api/types.d.ts.map +1 -0
- package/dist/api/types.js +2 -0
- package/dist/api/types.js.map +1 -0
- package/dist/auth-password.d.ts +27 -0
- package/dist/auth-password.d.ts.map +1 -0
- package/dist/auth-password.js +60 -0
- package/dist/auth-password.js.map +1 -0
- package/dist/auth.d.ts +59 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +146 -0
- package/dist/auth.js.map +1 -0
- package/dist/backend-internals.d.ts +35 -0
- package/dist/backend-internals.d.ts.map +1 -0
- package/dist/backend-internals.js +2 -0
- package/dist/backend-internals.js.map +1 -0
- package/dist/backend.d.ts +63 -0
- package/dist/backend.d.ts.map +1 -0
- package/dist/backend.js +59 -0
- package/dist/backend.js.map +1 -0
- package/dist/blueprint-generator.d.ts +21 -0
- package/dist/blueprint-generator.d.ts.map +1 -0
- package/dist/blueprint-generator.js +199 -0
- package/dist/blueprint-generator.js.map +1 -0
- package/dist/blueprint.d.ts +99 -0
- package/dist/blueprint.d.ts.map +1 -0
- package/dist/blueprint.js +257 -0
- package/dist/blueprint.js.map +1 -0
- package/dist/cli-skills.d.ts +16 -0
- package/dist/cli-skills.d.ts.map +1 -0
- package/dist/cli-skills.js +108 -0
- package/dist/cli-skills.js.map +1 -0
- package/dist/cli.d.ts +18 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +205 -0
- package/dist/cli.js.map +1 -0
- package/dist/client/client.d.ts +53 -0
- package/dist/client/client.d.ts.map +1 -0
- package/dist/client/client.js +111 -0
- package/dist/client/client.js.map +1 -0
- package/dist/client/index.d.ts +4 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +4 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/live-view.d.ts +49 -0
- package/dist/client/live-view.d.ts.map +1 -0
- package/dist/client/live-view.js +184 -0
- package/dist/client/live-view.js.map +1 -0
- package/dist/client/react.d.ts +4 -0
- package/dist/client/react.d.ts.map +1 -0
- package/dist/client/react.js +6 -0
- package/dist/client/react.js.map +1 -0
- package/dist/client/realtime.d.ts +54 -0
- package/dist/client/realtime.d.ts.map +1 -0
- package/dist/client/realtime.js +105 -0
- package/dist/client/realtime.js.map +1 -0
- package/dist/client/rest.d.ts +2 -0
- package/dist/client/rest.d.ts.map +1 -0
- package/dist/client/rest.js +2 -0
- package/dist/client/rest.js.map +1 -0
- package/dist/client/rpc-client.d.ts +38 -0
- package/dist/client/rpc-client.d.ts.map +1 -0
- package/dist/client/rpc-client.js +59 -0
- package/dist/client/rpc-client.js.map +1 -0
- package/dist/client/solid.d.ts +7 -0
- package/dist/client/solid.d.ts.map +1 -0
- package/dist/client/solid.js +21 -0
- package/dist/client/solid.js.map +1 -0
- package/dist/client/svelte.d.ts +6 -0
- package/dist/client/svelte.d.ts.map +1 -0
- package/dist/client/svelte.js +9 -0
- package/dist/client/svelte.js.map +1 -0
- package/dist/client/vue.d.ts +5 -0
- package/dist/client/vue.d.ts.map +1 -0
- package/dist/client/vue.js +11 -0
- package/dist/client/vue.js.map +1 -0
- package/dist/codegen.d.ts +36 -0
- package/dist/codegen.d.ts.map +1 -0
- package/dist/codegen.js +235 -0
- package/dist/codegen.js.map +1 -0
- package/dist/config.d.ts +129 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +75 -0
- package/dist/config.js.map +1 -0
- package/dist/cron.d.ts +4 -0
- package/dist/cron.d.ts.map +1 -0
- package/dist/cron.js +3 -0
- package/dist/cron.js.map +1 -0
- package/dist/crud-operations.d.ts +43 -0
- package/dist/crud-operations.d.ts.map +1 -0
- package/dist/crud-operations.js +249 -0
- package/dist/crud-operations.js.map +1 -0
- package/dist/database/adapter.d.ts +26 -0
- package/dist/database/adapter.d.ts.map +1 -0
- package/dist/database/adapter.js +2 -0
- package/dist/database/adapter.js.map +1 -0
- package/dist/database/libsql.d.ts +3 -0
- package/dist/database/libsql.d.ts.map +1 -0
- package/dist/database/libsql.js +39 -0
- package/dist/database/libsql.js.map +1 -0
- package/dist/db.d.ts +15 -0
- package/dist/db.d.ts.map +1 -0
- package/dist/db.js +8 -0
- package/dist/db.js.map +1 -0
- package/dist/dev/binaries.d.ts +22 -0
- package/dist/dev/binaries.d.ts.map +1 -0
- package/dist/dev/binaries.js +119 -0
- package/dist/dev/binaries.js.map +1 -0
- package/dist/dev/env.d.ts +11 -0
- package/dist/dev/env.d.ts.map +1 -0
- package/dist/dev/env.js +71 -0
- package/dist/dev/env.js.map +1 -0
- package/dist/dev/index.d.ts +39 -0
- package/dist/dev/index.d.ts.map +1 -0
- package/dist/dev/index.js +273 -0
- package/dist/dev/index.js.map +1 -0
- package/dist/dev/processes.d.ts +37 -0
- package/dist/dev/processes.d.ts.map +1 -0
- package/dist/dev/processes.js +104 -0
- package/dist/dev/processes.js.map +1 -0
- package/dist/dev/push.d.ts +2 -0
- package/dist/dev/push.d.ts.map +1 -0
- package/dist/dev/push.js +30 -0
- package/dist/dev/push.js.map +1 -0
- package/dist/dialect.d.ts +17 -0
- package/dist/dialect.d.ts.map +1 -0
- package/dist/dialect.js +12 -0
- package/dist/dialect.js.map +1 -0
- package/dist/email/smtp.d.ts +20 -0
- package/dist/email/smtp.d.ts.map +1 -0
- package/dist/email/smtp.js +31 -0
- package/dist/email/smtp.js.map +1 -0
- package/dist/email.d.ts +26 -0
- package/dist/email.d.ts.map +1 -0
- package/dist/email.js +2 -0
- package/dist/email.js.map +1 -0
- package/dist/env-probe.d.ts +9 -0
- package/dist/env-probe.d.ts.map +1 -0
- package/dist/env-probe.js +72 -0
- package/dist/env-probe.js.map +1 -0
- package/dist/env.d.ts +62 -0
- package/dist/env.d.ts.map +1 -0
- package/dist/env.js +86 -0
- package/dist/env.js.map +1 -0
- package/dist/errors.d.ts +153 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +106 -0
- package/dist/errors.js.map +1 -0
- package/dist/handler.d.ts +11 -0
- package/dist/handler.d.ts.map +1 -0
- package/dist/handler.js +21 -0
- package/dist/handler.js.map +1 -0
- package/dist/hosted-contract.d.ts +11 -0
- package/dist/hosted-contract.d.ts.map +1 -0
- package/dist/hosted-contract.js +50 -0
- package/dist/hosted-contract.js.map +1 -0
- package/dist/idempotency.d.ts +17 -0
- package/dist/idempotency.d.ts.map +1 -0
- package/dist/idempotency.js +65 -0
- package/dist/idempotency.js.map +1 -0
- package/dist/index.d.ts +41 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/inspect.d.ts +15 -0
- package/dist/inspect.d.ts.map +1 -0
- package/dist/inspect.js +44 -0
- package/dist/inspect.js.map +1 -0
- package/dist/internal-tables.d.ts +1767 -0
- package/dist/internal-tables.d.ts.map +1 -0
- package/dist/internal-tables.js +114 -0
- package/dist/internal-tables.js.map +1 -0
- package/dist/jobs/cron.d.ts +15 -0
- package/dist/jobs/cron.d.ts.map +1 -0
- package/dist/jobs/cron.js +74 -0
- package/dist/jobs/cron.js.map +1 -0
- package/dist/jobs/define.d.ts +186 -0
- package/dist/jobs/define.d.ts.map +1 -0
- package/dist/jobs/define.js +99 -0
- package/dist/jobs/define.js.map +1 -0
- package/dist/jobs/index.d.ts +9 -0
- package/dist/jobs/index.d.ts.map +1 -0
- package/dist/jobs/index.js +7 -0
- package/dist/jobs/index.js.map +1 -0
- package/dist/jobs/queue.d.ts +13 -0
- package/dist/jobs/queue.d.ts.map +1 -0
- package/dist/jobs/queue.js +71 -0
- package/dist/jobs/queue.js.map +1 -0
- package/dist/jobs/slots.d.ts +30 -0
- package/dist/jobs/slots.d.ts.map +1 -0
- package/dist/jobs/slots.js +53 -0
- package/dist/jobs/slots.js.map +1 -0
- package/dist/jobs/worker.d.ts +45 -0
- package/dist/jobs/worker.d.ts.map +1 -0
- package/dist/jobs/worker.js +605 -0
- package/dist/jobs/worker.js.map +1 -0
- package/dist/lifecycle.d.ts +10 -0
- package/dist/lifecycle.d.ts.map +1 -0
- package/dist/lifecycle.js +37 -0
- package/dist/lifecycle.js.map +1 -0
- package/dist/list-query.d.ts +62 -0
- package/dist/list-query.d.ts.map +1 -0
- package/dist/list-query.js +190 -0
- package/dist/list-query.js.map +1 -0
- package/dist/live/apply.d.ts +13 -0
- package/dist/live/apply.d.ts.map +1 -0
- package/dist/live/apply.js +32 -0
- package/dist/live/apply.js.map +1 -0
- package/dist/live/index.d.ts +48 -0
- package/dist/live/index.d.ts.map +1 -0
- package/dist/live/index.js +108 -0
- package/dist/live/index.js.map +1 -0
- package/dist/live/protocol.d.ts +47 -0
- package/dist/live/protocol.d.ts.map +1 -0
- package/dist/live/protocol.js +12 -0
- package/dist/live/protocol.js.map +1 -0
- package/dist/live/sse.d.ts +22 -0
- package/dist/live/sse.d.ts.map +1 -0
- package/dist/live/sse.js +41 -0
- package/dist/live/sse.js.map +1 -0
- package/dist/logging.d.ts +8 -0
- package/dist/logging.d.ts.map +1 -0
- package/dist/logging.js +6 -0
- package/dist/logging.js.map +1 -0
- package/dist/manifest-diff.d.ts +6 -0
- package/dist/manifest-diff.d.ts.map +1 -0
- package/dist/manifest-diff.js +42 -0
- package/dist/manifest-diff.js.map +1 -0
- package/dist/manifest.d.ts +87 -0
- package/dist/manifest.d.ts.map +1 -0
- package/dist/manifest.js +237 -0
- package/dist/manifest.js.map +1 -0
- package/dist/messaging/email.d.ts +16 -0
- package/dist/messaging/email.d.ts.map +1 -0
- package/dist/messaging/email.js +8 -0
- package/dist/messaging/email.js.map +1 -0
- package/dist/messaging/index.d.ts +8 -0
- package/dist/messaging/index.d.ts.map +1 -0
- package/dist/messaging/index.js +4 -0
- package/dist/messaging/index.js.map +1 -0
- package/dist/messaging/journal.d.ts +4 -0
- package/dist/messaging/journal.d.ts.map +1 -0
- package/dist/messaging/journal.js +19 -0
- package/dist/messaging/journal.js.map +1 -0
- package/dist/messaging/runtime.d.ts +16 -0
- package/dist/messaging/runtime.d.ts.map +1 -0
- package/dist/messaging/runtime.js +213 -0
- package/dist/messaging/runtime.js.map +1 -0
- package/dist/messaging/standalone.d.ts +27 -0
- package/dist/messaging/standalone.d.ts.map +1 -0
- package/dist/messaging/standalone.js +18 -0
- package/dist/messaging/standalone.js.map +1 -0
- package/dist/messaging/telegram.d.ts +16 -0
- package/dist/messaging/telegram.d.ts.map +1 -0
- package/dist/messaging/telegram.js +5 -0
- package/dist/messaging/telegram.js.map +1 -0
- package/dist/messaging/types.d.ts +22 -0
- package/dist/messaging/types.d.ts.map +1 -0
- package/dist/messaging/types.js +17 -0
- package/dist/messaging/types.js.map +1 -0
- package/dist/platform.d.ts +25 -0
- package/dist/platform.d.ts.map +1 -0
- package/dist/platform.js +24 -0
- package/dist/platform.js.map +1 -0
- package/dist/provision-internals.d.ts +23 -0
- package/dist/provision-internals.d.ts.map +1 -0
- package/dist/provision-internals.js +7 -0
- package/dist/provision-internals.js.map +1 -0
- package/dist/provision-runtime.d.ts +6 -0
- package/dist/provision-runtime.d.ts.map +1 -0
- package/dist/provision-runtime.js +41 -0
- package/dist/provision-runtime.js.map +1 -0
- package/dist/provision-schema.d.ts +16 -0
- package/dist/provision-schema.d.ts.map +1 -0
- package/dist/provision-schema.js +59 -0
- package/dist/provision-schema.js.map +1 -0
- package/dist/provision.d.ts +8 -0
- package/dist/provision.d.ts.map +1 -0
- package/dist/provision.js +16 -0
- package/dist/provision.js.map +1 -0
- package/dist/query/api.d.ts +10 -0
- package/dist/query/api.d.ts.map +1 -0
- package/dist/query/api.js +7 -0
- package/dist/query/api.js.map +1 -0
- package/dist/query/client.d.ts +28 -0
- package/dist/query/client.d.ts.map +1 -0
- package/dist/query/client.js +87 -0
- package/dist/query/client.js.map +1 -0
- package/dist/query/fetch.d.ts +3 -0
- package/dist/query/fetch.d.ts.map +1 -0
- package/dist/query/fetch.js +4 -0
- package/dist/query/fetch.js.map +1 -0
- package/dist/query/index.d.ts +8 -0
- package/dist/query/index.d.ts.map +1 -0
- package/dist/query/index.js +4 -0
- package/dist/query/index.js.map +1 -0
- package/dist/query/infer.d.ts +25 -0
- package/dist/query/infer.d.ts.map +1 -0
- package/dist/query/infer.js +2 -0
- package/dist/query/infer.js.map +1 -0
- package/dist/query/react.d.ts +3 -0
- package/dist/query/react.d.ts.map +1 -0
- package/dist/query/react.js +2 -0
- package/dist/query/react.js.map +1 -0
- package/dist/query/realtime-flush.d.ts +26 -0
- package/dist/query/realtime-flush.d.ts.map +1 -0
- package/dist/query/realtime-flush.js +45 -0
- package/dist/query/realtime-flush.js.map +1 -0
- package/dist/query/realtime-stream.d.ts +3 -0
- package/dist/query/realtime-stream.d.ts.map +1 -0
- package/dist/query/realtime-stream.js +3 -0
- package/dist/query/realtime-stream.js.map +1 -0
- package/dist/query/realtime.d.ts +88 -0
- package/dist/query/realtime.d.ts.map +1 -0
- package/dist/query/realtime.js +255 -0
- package/dist/query/realtime.js.map +1 -0
- package/dist/rate-limit.d.ts +8 -0
- package/dist/rate-limit.d.ts.map +1 -0
- package/dist/rate-limit.js +46 -0
- package/dist/rate-limit.js.map +1 -0
- package/dist/readiness-probes.d.ts +4 -0
- package/dist/readiness-probes.d.ts.map +1 -0
- package/dist/readiness-probes.js +23 -0
- package/dist/readiness-probes.js.map +1 -0
- package/dist/readiness.d.ts +39 -0
- package/dist/readiness.d.ts.map +1 -0
- package/dist/readiness.js +72 -0
- package/dist/readiness.js.map +1 -0
- package/dist/realtime/facade.d.ts +20 -0
- package/dist/realtime/facade.d.ts.map +1 -0
- package/dist/realtime/facade.js +37 -0
- package/dist/realtime/facade.js.map +1 -0
- package/dist/realtime/filter.d.ts +42 -0
- package/dist/realtime/filter.d.ts.map +1 -0
- package/dist/realtime/filter.js +86 -0
- package/dist/realtime/filter.js.map +1 -0
- package/dist/realtime/heartbeat.d.ts +20 -0
- package/dist/realtime/heartbeat.d.ts.map +1 -0
- package/dist/realtime/heartbeat.js +64 -0
- package/dist/realtime/heartbeat.js.map +1 -0
- package/dist/realtime/publisher.d.ts +19 -0
- package/dist/realtime/publisher.d.ts.map +1 -0
- package/dist/realtime/publisher.js +8 -0
- package/dist/realtime/publisher.js.map +1 -0
- package/dist/runtime.d.ts +141 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +463 -0
- package/dist/runtime.js.map +1 -0
- package/dist/schema-export.d.ts +2 -0
- package/dist/schema-export.d.ts.map +1 -0
- package/dist/schema-export.js +2 -0
- package/dist/schema-export.js.map +1 -0
- package/dist/scope.d.ts +4 -0
- package/dist/scope.d.ts.map +1 -0
- package/dist/scope.js +13 -0
- package/dist/scope.js.map +1 -0
- package/dist/standard-schema.d.ts +13 -0
- package/dist/standard-schema.d.ts.map +1 -0
- package/dist/standard-schema.js +34 -0
- package/dist/standard-schema.js.map +1 -0
- package/dist/start/auth-client.d.ts +11 -0
- package/dist/start/auth-client.d.ts.map +1 -0
- package/dist/start/auth-client.js +15 -0
- package/dist/start/auth-client.js.map +1 -0
- package/dist/start/create-start-worker.d.ts +16 -0
- package/dist/start/create-start-worker.d.ts.map +1 -0
- package/dist/start/create-start-worker.js +24 -0
- package/dist/start/create-start-worker.js.map +1 -0
- package/dist/start/index.d.ts +66 -0
- package/dist/start/index.d.ts.map +1 -0
- package/dist/start/index.js +49 -0
- package/dist/start/index.js.map +1 -0
- package/dist/start/isomorphic-fetch.d.ts +22 -0
- package/dist/start/isomorphic-fetch.d.ts.map +1 -0
- package/dist/start/isomorphic-fetch.js +49 -0
- package/dist/start/isomorphic-fetch.js.map +1 -0
- package/dist/start/server-entry.d.ts +7 -0
- package/dist/start/server-entry.d.ts.map +1 -0
- package/dist/start/server-entry.js +8 -0
- package/dist/start/server-entry.js.map +1 -0
- package/dist/storage/background.d.ts +3 -0
- package/dist/storage/background.d.ts.map +1 -0
- package/dist/storage/background.js +3 -0
- package/dist/storage/background.js.map +1 -0
- package/dist/storage/buckets.d.ts +78 -0
- package/dist/storage/buckets.d.ts.map +1 -0
- package/dist/storage/buckets.js +177 -0
- package/dist/storage/buckets.js.map +1 -0
- package/dist/storage/delete.d.ts +8 -0
- package/dist/storage/delete.d.ts.map +1 -0
- package/dist/storage/delete.js +10 -0
- package/dist/storage/delete.js.map +1 -0
- package/dist/storage/file-meta.d.ts +37 -0
- package/dist/storage/file-meta.d.ts.map +1 -0
- package/dist/storage/file-meta.js +166 -0
- package/dist/storage/file-meta.js.map +1 -0
- package/dist/storage/index.d.ts +28 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +5 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/local.d.ts +15 -0
- package/dist/storage/local.d.ts.map +1 -0
- package/dist/storage/local.js +56 -0
- package/dist/storage/local.js.map +1 -0
- package/dist/storage/operations.d.ts +54 -0
- package/dist/storage/operations.d.ts.map +1 -0
- package/dist/storage/operations.js +212 -0
- package/dist/storage/operations.js.map +1 -0
- package/dist/storage/registry.d.ts +11 -0
- package/dist/storage/registry.d.ts.map +1 -0
- package/dist/storage/registry.js +23 -0
- package/dist/storage/registry.js.map +1 -0
- package/dist/storage/s3.d.ts +35 -0
- package/dist/storage/s3.d.ts.map +1 -0
- package/dist/storage/s3.js +125 -0
- package/dist/storage/s3.js.map +1 -0
- package/dist/storage/sigv4.d.ts +24 -0
- package/dist/storage/sigv4.d.ts.map +1 -0
- package/dist/storage/sigv4.js +107 -0
- package/dist/storage/sigv4.js.map +1 -0
- package/dist/storage/sweep.d.ts +9 -0
- package/dist/storage/sweep.d.ts.map +1 -0
- package/dist/storage/sweep.js +17 -0
- package/dist/storage/sweep.js.map +1 -0
- package/dist/sync/collection.d.ts +106 -0
- package/dist/sync/collection.d.ts.map +1 -0
- package/dist/sync/collection.js +258 -0
- package/dist/sync/collection.js.map +1 -0
- package/dist/sync/index.d.ts +8 -0
- package/dist/sync/index.d.ts.map +1 -0
- package/dist/sync/index.js +4 -0
- package/dist/sync/index.js.map +1 -0
- package/dist/sync/realtime-sync.d.ts +31 -0
- package/dist/sync/realtime-sync.d.ts.map +1 -0
- package/dist/sync/realtime-sync.js +46 -0
- package/dist/sync/realtime-sync.js.map +1 -0
- package/dist/sync/sync-client.d.ts +28 -0
- package/dist/sync/sync-client.d.ts.map +1 -0
- package/dist/sync/sync-client.js +52 -0
- package/dist/sync/sync-client.js.map +1 -0
- package/dist/sync/update-queue.d.ts +27 -0
- package/dist/sync/update-queue.d.ts.map +1 -0
- package/dist/sync/update-queue.js +66 -0
- package/dist/sync/update-queue.js.map +1 -0
- package/dist/testing/auth.d.ts +85 -0
- package/dist/testing/auth.d.ts.map +1 -0
- package/dist/testing/auth.js +140 -0
- package/dist/testing/auth.js.map +1 -0
- package/dist/testing/client.d.ts +6 -0
- package/dist/testing/client.d.ts.map +1 -0
- package/dist/testing/client.js +9 -0
- package/dist/testing/client.js.map +1 -0
- package/dist/testing/database.d.ts +6 -0
- package/dist/testing/database.d.ts.map +1 -0
- package/dist/testing/database.js +8 -0
- package/dist/testing/database.js.map +1 -0
- package/dist/testing/email.d.ts +15 -0
- package/dist/testing/email.d.ts.map +1 -0
- package/dist/testing/email.js +32 -0
- package/dist/testing/email.js.map +1 -0
- package/dist/testing/fixture.d.ts +51 -0
- package/dist/testing/fixture.d.ts.map +1 -0
- package/dist/testing/fixture.js +177 -0
- package/dist/testing/fixture.js.map +1 -0
- package/dist/testing/jobs.d.ts +40 -0
- package/dist/testing/jobs.d.ts.map +1 -0
- package/dist/testing/jobs.js +76 -0
- package/dist/testing/jobs.js.map +1 -0
- package/dist/testing/logs.d.ts +18 -0
- package/dist/testing/logs.d.ts.map +1 -0
- package/dist/testing/logs.js +53 -0
- package/dist/testing/logs.js.map +1 -0
- package/dist/testing/messaging.d.ts +21 -0
- package/dist/testing/messaging.d.ts.map +1 -0
- package/dist/testing/messaging.js +34 -0
- package/dist/testing/messaging.js.map +1 -0
- package/dist/testing/storage.d.ts +7 -0
- package/dist/testing/storage.d.ts.map +1 -0
- package/dist/testing/storage.js +29 -0
- package/dist/testing/storage.js.map +1 -0
- package/dist/testing/workers-fakes.d.ts +17 -0
- package/dist/testing/workers-fakes.d.ts.map +1 -0
- package/dist/testing/workers-fakes.js +98 -0
- package/dist/testing/workers-fakes.js.map +1 -0
- package/dist/testing.d.ts +12 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +5 -0
- package/dist/testing.js.map +1 -0
- package/dist/typeid.d.ts +46 -0
- package/dist/typeid.d.ts.map +1 -0
- package/dist/typeid.js +130 -0
- package/dist/typeid.js.map +1 -0
- package/dist/vite.d.ts +26 -0
- package/dist/vite.d.ts.map +1 -0
- package/dist/vite.js +100 -0
- package/dist/vite.js.map +1 -0
- package/dist/worker-plan.d.ts +37 -0
- package/dist/worker-plan.d.ts.map +1 -0
- package/dist/worker-plan.js +63 -0
- package/dist/worker-plan.js.map +1 -0
- package/dist/workers/app.d.ts +19 -0
- package/dist/workers/app.d.ts.map +1 -0
- package/dist/workers/app.js +56 -0
- package/dist/workers/app.js.map +1 -0
- package/dist/workers/entry.d.ts +7 -0
- package/dist/workers/entry.d.ts.map +1 -0
- package/dist/workers/entry.js +8 -0
- package/dist/workers/entry.js.map +1 -0
- package/dist/workers/index.d.ts +23 -0
- package/dist/workers/index.d.ts.map +1 -0
- package/dist/workers/index.js +39 -0
- package/dist/workers/index.js.map +1 -0
- package/dist/workers/r2.d.ts +24 -0
- package/dist/workers/r2.d.ts.map +1 -0
- package/dist/workers/r2.js +76 -0
- package/dist/workers/r2.js.map +1 -0
- package/dist/workers/rate-limiter.d.ts +9 -0
- package/dist/workers/rate-limiter.d.ts.map +1 -0
- package/dist/workers/rate-limiter.js +22 -0
- package/dist/workers/rate-limiter.js.map +1 -0
- package/dist/workers/realtime-hub.d.ts +20 -0
- package/dist/workers/realtime-hub.d.ts.map +1 -0
- package/dist/workers/realtime-hub.js +117 -0
- package/dist/workers/realtime-hub.js.map +1 -0
- package/dist/workers/registry.d.ts +13 -0
- package/dist/workers/registry.d.ts.map +1 -0
- package/dist/workers/registry.js +19 -0
- package/dist/workers/registry.js.map +1 -0
- package/dist/workers/scheduler.d.ts +13 -0
- package/dist/workers/scheduler.d.ts.map +1 -0
- package/dist/workers/scheduler.js +71 -0
- package/dist/workers/scheduler.js.map +1 -0
- package/dist/workers/types.d.ts +55 -0
- package/dist/workers/types.d.ts.map +1 -0
- package/dist/workers/types.js +4 -0
- package/dist/workers/types.js.map +1 -0
- package/dist/workers/wrangler.d.ts +62 -0
- package/dist/workers/wrangler.d.ts.map +1 -0
- package/dist/workers/wrangler.js +90 -0
- package/dist/workers/wrangler.js.map +1 -0
- package/package.json +286 -0
- package/skills/creating-workerstack-apps/SKILL.md +45 -0
- package/skills/creating-workerstack-apps/agents/openai.yaml +4 -0
- package/skills/creating-workerstack-apps/references/application-structure.md +219 -0
- package/skills/creating-workerstack-apps/references/runtime-integrations.md +96 -0
- package/skills/creating-workerstack-apps/references/verification.md +29 -0
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
// src/auth-password.ts — BetterAuth's scrypt password format, with a plain-JS
|
|
2
|
+
// fallback. BetterAuth picks node:crypto scrypt through its `workerd` and
|
|
3
|
+
// `node` export conditions; celld implements neither, so we choose at runtime.
|
|
4
|
+
import { scryptAsync } from '@noble/hashes/scrypt.js';
|
|
5
|
+
import * as nodeCrypto from 'node:crypto';
|
|
6
|
+
// Must match @better-auth/utils/password: existing hashes stay valid.
|
|
7
|
+
const PARAMS = { N: 16384, r: 16, p: 1 };
|
|
8
|
+
const KEY_LENGTH = 64;
|
|
9
|
+
const MAXMEM = 128 * PARAMS.N * PARAMS.r * 2;
|
|
10
|
+
function toHex(bytes) {
|
|
11
|
+
return Array.from(bytes, (b) => b.toString(16).padStart(2, '0')).join('');
|
|
12
|
+
}
|
|
13
|
+
const nodeScrypt = typeof nodeCrypto.scrypt === 'function'
|
|
14
|
+
? (password, salt, keylen, options) => new Promise((resolve, reject) => nodeCrypto.scrypt(password, salt, keylen, options, (error, key) => error ? reject(error) : resolve(new Uint8Array(key))))
|
|
15
|
+
: null;
|
|
16
|
+
const pureScrypt = (password, salt, keylen, options) => scryptAsync(password, salt, { ...options, dkLen: keylen });
|
|
17
|
+
export function createPasswordHasher(options = {}) {
|
|
18
|
+
let native = options.nativeScrypt === undefined ? nodeScrypt : options.nativeScrypt;
|
|
19
|
+
async function derive(password, salt) {
|
|
20
|
+
const input = password.normalize('NFKC');
|
|
21
|
+
const opts = { ...PARAMS, maxmem: MAXMEM };
|
|
22
|
+
if (native) {
|
|
23
|
+
try {
|
|
24
|
+
return await native(input, salt, KEY_LENGTH, opts);
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
// celld: "The scrypt method is not implemented". Stop trying.
|
|
28
|
+
native = null;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return pureScrypt(input, salt, KEY_LENGTH, opts);
|
|
32
|
+
}
|
|
33
|
+
return {
|
|
34
|
+
async hash(password) {
|
|
35
|
+
const salt = toHex(crypto.getRandomValues(new Uint8Array(16)));
|
|
36
|
+
return `${salt}:${toHex(await derive(password, salt))}`;
|
|
37
|
+
},
|
|
38
|
+
async verify({ hash, password, }) {
|
|
39
|
+
const [salt, key] = hash.split(':');
|
|
40
|
+
if (!salt || !key)
|
|
41
|
+
throw new Error('Invalid password hash');
|
|
42
|
+
return toHex(await derive(password, salt)) === key;
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
export const passwordHasher = createPasswordHasher();
|
|
47
|
+
/** Only fills a gap: a user-supplied password hasher always wins. */
|
|
48
|
+
export function withPasswordDefaults(cfg) {
|
|
49
|
+
if (!cfg.emailAndPassword?.enabled || cfg.emailAndPassword.password) {
|
|
50
|
+
return cfg;
|
|
51
|
+
}
|
|
52
|
+
return {
|
|
53
|
+
...cfg,
|
|
54
|
+
emailAndPassword: {
|
|
55
|
+
...cfg.emailAndPassword,
|
|
56
|
+
password: { hash: passwordHasher.hash, verify: passwordHasher.verify },
|
|
57
|
+
},
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=auth-password.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-password.js","sourceRoot":"","sources":["../src/auth-password.ts"],"names":[],"mappings":"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","sourcesContent":["// src/auth-password.ts — BetterAuth's scrypt password format, with a plain-JS\n// fallback. BetterAuth picks node:crypto scrypt through its `workerd` and\n// `node` export conditions; celld implements neither, so we choose at runtime.\nimport { scryptAsync } from '@noble/hashes/scrypt.js'\nimport * as nodeCrypto from 'node:crypto'\n\nimport type { BetterAuthConfig } from './config'\n\ntype ScryptFn = (\n password: string,\n salt: string,\n keylen: number,\n options: { N: number; r: number; p: number; maxmem: number },\n) => Promise<Uint8Array>\n\n// Must match @better-auth/utils/password: existing hashes stay valid.\nconst PARAMS = { N: 16384, r: 16, p: 1 } as const\nconst KEY_LENGTH = 64\nconst MAXMEM = 128 * PARAMS.N * PARAMS.r * 2\n\nfunction toHex(bytes: Uint8Array): string {\n return Array.from(bytes, (b) => b.toString(16).padStart(2, '0')).join('')\n}\n\nconst nodeScrypt: ScryptFn | null =\n typeof nodeCrypto.scrypt === 'function'\n ? (password, salt, keylen, options) =>\n new Promise((resolve, reject) =>\n nodeCrypto.scrypt(password, salt, keylen, options, (error, key) =>\n error ? reject(error) : resolve(new Uint8Array(key)),\n ),\n )\n : null\n\nconst pureScrypt: ScryptFn = (password, salt, keylen, options) =>\n scryptAsync(password, salt, { ...options, dkLen: keylen })\n\nexport function createPasswordHasher(\n options: { nativeScrypt?: ScryptFn | null } = {},\n) {\n let native =\n options.nativeScrypt === undefined ? nodeScrypt : options.nativeScrypt\n\n async function derive(password: string, salt: string): Promise<Uint8Array> {\n const input = password.normalize('NFKC')\n const opts = { ...PARAMS, maxmem: MAXMEM }\n if (native) {\n try {\n return await native(input, salt, KEY_LENGTH, opts)\n } catch {\n // celld: \"The scrypt method is not implemented\". Stop trying.\n native = null\n }\n }\n return pureScrypt(input, salt, KEY_LENGTH, opts)\n }\n\n return {\n async hash(password: string): Promise<string> {\n const salt = toHex(crypto.getRandomValues(new Uint8Array(16)))\n return `${salt}:${toHex(await derive(password, salt))}`\n },\n async verify({\n hash,\n password,\n }: {\n hash: string\n password: string\n }): Promise<boolean> {\n const [salt, key] = hash.split(':')\n if (!salt || !key) throw new Error('Invalid password hash')\n return toHex(await derive(password, salt)) === key\n },\n }\n}\n\nexport const passwordHasher = createPasswordHasher()\n\n/** Only fills a gap: a user-supplied password hasher always wins. */\nexport function withPasswordDefaults<\n T extends Pick<BetterAuthConfig, 'emailAndPassword'>,\n>(cfg: T): T {\n if (!cfg.emailAndPassword?.enabled || cfg.emailAndPassword.password) {\n return cfg\n }\n return {\n ...cfg,\n emailAndPassword: {\n ...cfg.emailAndPassword,\n password: { hash: passwordHasher.hash, verify: passwordHasher.verify },\n },\n }\n}\n"]}
|
package/dist/auth.d.ts
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { type Auth, type BetterAuthPlugin } from 'better-auth';
|
|
2
|
+
import { openAPI } from 'better-auth/plugins';
|
|
3
|
+
import type { AccessUserBase, AuthSessionResolver, SessionUserConfig } from './access.js';
|
|
4
|
+
import type { BetterAuthConfig } from './config.js';
|
|
5
|
+
import type { AnyDb } from './dialect.js';
|
|
6
|
+
import type { EmailFacade } from './email.js';
|
|
7
|
+
type ConfiguredAuthPlugins<TConfig extends BetterAuthConfig> = TConfig extends {
|
|
8
|
+
plugins: infer TPlugins extends readonly BetterAuthPlugin[];
|
|
9
|
+
} ? TPlugins : [];
|
|
10
|
+
type WithWorkerstackAuthDefaults<TConfig extends BetterAuthConfig> = Omit<BetterAuthConfig, 'plugins'> & Omit<TConfig, 'plugins'> & {
|
|
11
|
+
plugins: [...ConfiguredAuthPlugins<TConfig>, ReturnType<typeof openAPI>];
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* The public Better Auth instance retains every endpoint and model field from
|
|
15
|
+
* the declared config. Workerstack always installs OpenAPI at runtime, so its
|
|
16
|
+
* endpoints are part of the public type even when the app omitted the plugin.
|
|
17
|
+
*/
|
|
18
|
+
export type WorkerstackAuth<TConfig extends BetterAuthConfig = BetterAuthConfig> = Auth<WithWorkerstackAuthDefaults<TConfig>>;
|
|
19
|
+
/**
|
|
20
|
+
* Build Better Auth while exposing its named plugin-aware public type. The
|
|
21
|
+
* implementation accepts the resolved runtime config, while `TConfig` carries
|
|
22
|
+
* the declaration that produced it; their relationship is asserted once here.
|
|
23
|
+
*/
|
|
24
|
+
export declare function createAuth<TConfig extends BetterAuthConfig = BetterAuthConfig>(db: AnyDb, cfg: BetterAuthConfig, userSchema?: Record<string, unknown>): WorkerstackAuth<TConfig>;
|
|
25
|
+
/**
|
|
26
|
+
* better-auth resolves its models out of the app's own schema, so an app that
|
|
27
|
+
* declares none has no auth at all. Session resolution must then short-circuit
|
|
28
|
+
* to null: the drizzle adapter throws on a missing model, and any session
|
|
29
|
+
* cookie for the host — a browser keeps those per host, not per port, so one
|
|
30
|
+
* minted by another local app arrives here too — would break every request.
|
|
31
|
+
*/
|
|
32
|
+
export declare function missingAuthModels(schema: Record<string, unknown>, cfg: BetterAuthConfig): string[];
|
|
33
|
+
/**
|
|
34
|
+
* Defer building better-auth until someone touches the instance. From 1.7.6 on,
|
|
35
|
+
* constructing it starts a schema check that logs, and every `auth.api` call
|
|
36
|
+
* throws, when the auth tables are missing. An app without auth models never
|
|
37
|
+
* builds one, yet `app.auth` / `ctx.auth` still work for code that reaches for
|
|
38
|
+
* it on purpose. A proxy, not a getter: oRPC middleware and access scopes
|
|
39
|
+
* spread the context, which would read a getter on every request.
|
|
40
|
+
*/
|
|
41
|
+
export declare function lazyAuth<TAuth extends object>(create: () => TAuth): TAuth;
|
|
42
|
+
/**
|
|
43
|
+
* Adapt the raw better-auth instance to our internal {@link AuthSessionResolver}
|
|
44
|
+
* contract. better-auth's `getSession` has a union return (a bare session, or a
|
|
45
|
+
* `{ headers, response }` wrapper when `returnHeaders` is set); we only ever
|
|
46
|
+
* call the bare form, so we narrow on `'user' in result` and map to our shape.
|
|
47
|
+
* Keeping this adapter here means internal modules never depend on better-auth's
|
|
48
|
+
* evolving types.
|
|
49
|
+
*/
|
|
50
|
+
export declare function toAuthSessionResolver<TExtra extends Record<string, unknown> = Record<never, never>>(auth: Auth, sessionUser?: SessionUserConfig<TExtra>): AuthSessionResolver<Omit<TExtra, keyof AccessUserBase>>;
|
|
51
|
+
/**
|
|
52
|
+
* Fill better-auth's email hooks from the workerstack email facade. Only fills
|
|
53
|
+
* gaps: user-supplied handlers always win, and nothing is injected when email
|
|
54
|
+
* isn't configured. emailAndPassword is only touched when the user enabled it
|
|
55
|
+
* (injecting it unasked would enable the feature).
|
|
56
|
+
*/
|
|
57
|
+
export declare function withEmailAuthDefaults(cfg: BetterAuthConfig, email: EmailFacade, emailConfigured: boolean): BetterAuthConfig;
|
|
58
|
+
export { withPasswordDefaults } from './auth-password.js';
|
|
59
|
+
//# sourceMappingURL=auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AACA,OAAO,EAAc,KAAK,IAAI,EAAE,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAE1E,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAE7C,OAAO,KAAK,EACV,cAAc,EACd,mBAAmB,EACnB,iBAAiB,EAElB,MAAM,UAAU,CAAA;AACjB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAChD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,WAAW,CAAA;AACtC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAE1C,KAAK,qBAAqB,CAAC,OAAO,SAAS,gBAAgB,IAAI,OAAO,SAAS;IAC7E,OAAO,EAAE,MAAM,QAAQ,SAAS,SAAS,gBAAgB,EAAE,CAAA;CAC5D,GACG,QAAQ,GACR,EAAE,CAAA;AAEN,KAAK,2BAA2B,CAAC,OAAO,SAAS,gBAAgB,IAAI,IAAI,CACvE,gBAAgB,EAChB,SAAS,CACV,GACC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,GAAG;IACzB,OAAO,EAAE,CAAC,GAAG,qBAAqB,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC,OAAO,OAAO,CAAC,CAAC,CAAA;CACzE,CAAA;AAEH;;;;GAIG;AACH,MAAM,MAAM,eAAe,CACzB,OAAO,SAAS,gBAAgB,GAAG,gBAAgB,IACjD,IAAI,CAAC,2BAA2B,CAAC,OAAO,CAAC,CAAC,CAAA;AAE9C;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,OAAO,SAAS,gBAAgB,GAAG,gBAAgB,EAC5E,EAAE,EAAE,KAAK,EACT,GAAG,EAAE,gBAAgB,EACrB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACnC,eAAe,CAAC,OAAO,CAAC,CAY1B;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,GAAG,EAAE,gBAAgB,GACpB,MAAM,EAAE,CAMV;AAED;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,KAAK,SAAS,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,GAAG,KAAK,CAezE;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,EAE7D,IAAI,EAAE,IAAI,EACV,WAAW,CAAC,EAAE,iBAAiB,CAAC,MAAM,CAAC,GACtC,mBAAmB,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,cAAc,CAAC,CAAC,CA4CzD;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,gBAAgB,EACrB,KAAK,EAAE,WAAW,EAClB,eAAe,EAAE,OAAO,GACvB,gBAAgB,CAkClB;AAED,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA"}
|
package/dist/auth.js
ADDED
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
// src/auth.ts
|
|
2
|
+
import { betterAuth } from 'better-auth';
|
|
3
|
+
import { drizzleAdapter } from 'better-auth/adapters/drizzle';
|
|
4
|
+
import { openAPI } from 'better-auth/plugins';
|
|
5
|
+
/**
|
|
6
|
+
* Build Better Auth while exposing its named plugin-aware public type. The
|
|
7
|
+
* implementation accepts the resolved runtime config, while `TConfig` carries
|
|
8
|
+
* the declaration that produced it; their relationship is asserted once here.
|
|
9
|
+
*/
|
|
10
|
+
export function createAuth(db, cfg, userSchema) {
|
|
11
|
+
const hasOpenApi = cfg.plugins?.some((p) => p.id === 'open-api');
|
|
12
|
+
const plugins = hasOpenApi ? cfg.plugins : [...(cfg.plugins || []), openAPI()];
|
|
13
|
+
return betterAuth({
|
|
14
|
+
...cfg,
|
|
15
|
+
plugins,
|
|
16
|
+
database: drizzleAdapter(db, {
|
|
17
|
+
provider: 'sqlite',
|
|
18
|
+
...(userSchema ? { schema: userSchema } : {}),
|
|
19
|
+
}),
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* better-auth resolves its models out of the app's own schema, so an app that
|
|
24
|
+
* declares none has no auth at all. Session resolution must then short-circuit
|
|
25
|
+
* to null: the drizzle adapter throws on a missing model, and any session
|
|
26
|
+
* cookie for the host — a browser keeps those per host, not per port, so one
|
|
27
|
+
* minted by another local app arrives here too — would break every request.
|
|
28
|
+
*/
|
|
29
|
+
export function missingAuthModels(schema, cfg) {
|
|
30
|
+
const models = [
|
|
31
|
+
cfg.user?.modelName ?? 'user',
|
|
32
|
+
cfg.session?.modelName ?? 'session',
|
|
33
|
+
];
|
|
34
|
+
return models.filter((model) => !schema[model]);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Defer building better-auth until someone touches the instance. From 1.7.6 on,
|
|
38
|
+
* constructing it starts a schema check that logs, and every `auth.api` call
|
|
39
|
+
* throws, when the auth tables are missing. An app without auth models never
|
|
40
|
+
* builds one, yet `app.auth` / `ctx.auth` still work for code that reaches for
|
|
41
|
+
* it on purpose. A proxy, not a getter: oRPC middleware and access scopes
|
|
42
|
+
* spread the context, which would read a getter on every request.
|
|
43
|
+
*/
|
|
44
|
+
export function lazyAuth(create) {
|
|
45
|
+
let instance;
|
|
46
|
+
const resolve = () => {
|
|
47
|
+
instance ??= create();
|
|
48
|
+
return instance;
|
|
49
|
+
};
|
|
50
|
+
return new Proxy({}, {
|
|
51
|
+
get: (_, key) => Reflect.get(resolve(), key),
|
|
52
|
+
has: (_, key) => Reflect.has(resolve(), key),
|
|
53
|
+
ownKeys: () => Reflect.ownKeys(resolve()),
|
|
54
|
+
getOwnPropertyDescriptor: (_, key) => {
|
|
55
|
+
const descriptor = Reflect.getOwnPropertyDescriptor(resolve(), key);
|
|
56
|
+
return descriptor ? { ...descriptor, configurable: true } : undefined;
|
|
57
|
+
},
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Adapt the raw better-auth instance to our internal {@link AuthSessionResolver}
|
|
62
|
+
* contract. better-auth's `getSession` has a union return (a bare session, or a
|
|
63
|
+
* `{ headers, response }` wrapper when `returnHeaders` is set); we only ever
|
|
64
|
+
* call the bare form, so we narrow on `'user' in result` and map to our shape.
|
|
65
|
+
* Keeping this adapter here means internal modules never depend on better-auth's
|
|
66
|
+
* evolving types.
|
|
67
|
+
*/
|
|
68
|
+
export function toAuthSessionResolver(auth, sessionUser) {
|
|
69
|
+
return {
|
|
70
|
+
api: {
|
|
71
|
+
async getSession({ headers }) {
|
|
72
|
+
const result = await auth.api.getSession({ headers });
|
|
73
|
+
if (result && 'user' in result && result.user) {
|
|
74
|
+
const session = 'session' in result ? result.session : null;
|
|
75
|
+
const activeOrganizationId = session &&
|
|
76
|
+
'activeOrganizationId' in session &&
|
|
77
|
+
typeof session.activeOrganizationId === 'string'
|
|
78
|
+
? session.activeOrganizationId
|
|
79
|
+
: null;
|
|
80
|
+
const role = 'role' in result.user && typeof result.user.role === 'string'
|
|
81
|
+
? result.user.role
|
|
82
|
+
: undefined;
|
|
83
|
+
const emailVerified = 'emailVerified' in result.user && result.user.emailVerified === true;
|
|
84
|
+
const mapped = sessionUser?.mapUser(result.user);
|
|
85
|
+
const extras = { ...mapped };
|
|
86
|
+
delete extras.id;
|
|
87
|
+
delete extras.email;
|
|
88
|
+
delete extras.emailVerified;
|
|
89
|
+
delete extras.name;
|
|
90
|
+
delete extras.role;
|
|
91
|
+
return {
|
|
92
|
+
user: {
|
|
93
|
+
...extras,
|
|
94
|
+
id: result.user.id,
|
|
95
|
+
email: result.user.email,
|
|
96
|
+
emailVerified,
|
|
97
|
+
name: result.user.name,
|
|
98
|
+
...(role ? { role } : {}),
|
|
99
|
+
},
|
|
100
|
+
session: session ? { activeOrganizationId } : null,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
return null;
|
|
104
|
+
},
|
|
105
|
+
},
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Fill better-auth's email hooks from the workerstack email facade. Only fills
|
|
110
|
+
* gaps: user-supplied handlers always win, and nothing is injected when email
|
|
111
|
+
* isn't configured. emailAndPassword is only touched when the user enabled it
|
|
112
|
+
* (injecting it unasked would enable the feature).
|
|
113
|
+
*/
|
|
114
|
+
export function withEmailAuthDefaults(cfg, email, emailConfigured) {
|
|
115
|
+
if (!emailConfigured)
|
|
116
|
+
return cfg;
|
|
117
|
+
const out = { ...cfg };
|
|
118
|
+
if (cfg.emailAndPassword?.enabled &&
|
|
119
|
+
!cfg.emailAndPassword.sendResetPassword) {
|
|
120
|
+
out.emailAndPassword = {
|
|
121
|
+
...cfg.emailAndPassword,
|
|
122
|
+
sendResetPassword: async ({ user, url }) => {
|
|
123
|
+
await email.send({
|
|
124
|
+
to: user.email,
|
|
125
|
+
subject: 'Reset your password',
|
|
126
|
+
text: `Click the link to reset your password:\n\n${url}\n\nIf you didn't request this, you can ignore this email.`,
|
|
127
|
+
});
|
|
128
|
+
},
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
if (!cfg.emailVerification?.sendVerificationEmail) {
|
|
132
|
+
out.emailVerification = {
|
|
133
|
+
...cfg.emailVerification,
|
|
134
|
+
sendVerificationEmail: async ({ user, url }) => {
|
|
135
|
+
await email.send({
|
|
136
|
+
to: user.email,
|
|
137
|
+
subject: 'Verify your email',
|
|
138
|
+
text: `Click the link to verify your email address:\n\n${url}`,
|
|
139
|
+
});
|
|
140
|
+
},
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
return out;
|
|
144
|
+
}
|
|
145
|
+
export { withPasswordDefaults } from './auth-password.js';
|
|
146
|
+
//# sourceMappingURL=auth.js.map
|
package/dist/auth.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA,cAAc;AACd,OAAO,EAAE,UAAU,EAAoC,MAAM,aAAa,CAAA;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAmC7C;;;;GAIG;AACH,MAAM,UAAU,UAAU,CACxB,EAAS,EACT,GAAqB,EACrB,UAAoC;IAEpC,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,UAAU,CAAC,CAAA;IACrE,MAAM,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,CAAA;IAE9E,OAAO,UAAU,CAAC;QAChB,GAAG,GAAG;QACN,OAAO;QACP,QAAQ,EAAE,cAAc,CAAC,EAA0C,EAAE;YACnE,QAAQ,EAAE,QAAQ;YAClB,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC9C,CAAC;KACH,CAAwC,CAAA;AAC3C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAC/B,MAA+B,EAC/B,GAAqB;IAErB,MAAM,MAAM,GAAG;QACb,GAAG,CAAC,IAAI,EAAE,SAAS,IAAI,MAAM;QAC7B,GAAG,CAAC,OAAO,EAAE,SAAS,IAAI,SAAS;KACpC,CAAA;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;AACjD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,QAAQ,CAAuB,MAAmB;IAChE,IAAI,QAA2B,CAAA;IAC/B,MAAM,OAAO,GAAG,GAAG,EAAE;QACnB,QAAQ,KAAK,MAAM,EAAE,CAAA;QACrB,OAAO,QAAQ,CAAA;IACjB,CAAC,CAAA;IACD,OAAO,IAAI,KAAK,CAAC,EAAW,EAAE;QAC5B,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,GAAG,CAAC;QAC5C,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,GAAG,CAAC;QAC5C,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACzC,wBAAwB,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE;YACnC,MAAM,UAAU,GAAG,OAAO,CAAC,wBAAwB,CAAC,OAAO,EAAE,EAAE,GAAG,CAAC,CAAA;YACnE,OAAO,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,UAAU,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;QACvE,CAAC;KACF,CAAC,CAAA;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CAGnC,IAAU,EACV,WAAuC;IAEvC,OAAO;QACL,GAAG,EAAE;YACH,KAAK,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE;gBAC1B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,CAAC,CAAA;gBACrD,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;oBAC9C,MAAM,OAAO,GAAG,SAAS,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAA;oBAC3D,MAAM,oBAAoB,GACxB,OAAO;wBACP,sBAAsB,IAAI,OAAO;wBACjC,OAAO,OAAO,CAAC,oBAAoB,KAAK,QAAQ;wBAC9C,CAAC,CAAC,OAAO,CAAC,oBAAoB;wBAC9B,CAAC,CAAC,IAAI,CAAA;oBACV,MAAM,IAAI,GACR,MAAM,IAAI,MAAM,CAAC,IAAI,IAAI,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ;wBAC3D,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI;wBAClB,CAAC,CAAC,SAAS,CAAA;oBACf,MAAM,aAAa,GACjB,eAAe,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,aAAa,KAAK,IAAI,CAAA;oBACtE,MAAM,MAAM,GAAG,WAAW,EAAE,OAAO,CACjC,MAAM,CAAC,IAAyB,CACM,CAAA;oBACxC,MAAM,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,CAAA;oBAC5B,OAAO,MAAM,CAAC,EAAE,CAAA;oBAChB,OAAO,MAAM,CAAC,KAAK,CAAA;oBACnB,OAAO,MAAM,CAAC,aAAa,CAAA;oBAC3B,OAAO,MAAM,CAAC,IAAI,CAAA;oBAClB,OAAO,MAAM,CAAC,IAAI,CAAA;oBAClB,OAAO;wBACL,IAAI,EAAE;4BACJ,GAAG,MAAM;4BACT,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE;4BAClB,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK;4BACxB,aAAa;4BACb,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI;4BACtB,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;yBAC1B;wBACD,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,oBAAoB,EAAE,CAAC,CAAC,CAAC,IAAI;qBACnD,CAAA;gBACH,CAAC;gBACD,OAAO,IAAI,CAAA;YACb,CAAC;SACF;KACyD,CAAA;AAC9D,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CACnC,GAAqB,EACrB,KAAkB,EAClB,eAAwB;IAExB,IAAI,CAAC,eAAe;QAAE,OAAO,GAAG,CAAA;IAChC,MAAM,GAAG,GAAqB,EAAE,GAAG,GAAG,EAAE,CAAA;IAExC,IACE,GAAG,CAAC,gBAAgB,EAAE,OAAO;QAC7B,CAAC,GAAG,CAAC,gBAAgB,CAAC,iBAAiB,EACvC,CAAC;QACD,GAAG,CAAC,gBAAgB,GAAG;YACrB,GAAG,GAAG,CAAC,gBAAgB;YACvB,iBAAiB,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE;gBACzC,MAAM,KAAK,CAAC,IAAI,CAAC;oBACf,EAAE,EAAE,IAAI,CAAC,KAAK;oBACd,OAAO,EAAE,qBAAqB;oBAC9B,IAAI,EAAE,6CAA6C,GAAG,4DAA4D;iBACnH,CAAC,CAAA;YACJ,CAAC;SACF,CAAA;IACH,CAAC;IAED,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE,qBAAqB,EAAE,CAAC;QAClD,GAAG,CAAC,iBAAiB,GAAG;YACtB,GAAG,GAAG,CAAC,iBAAiB;YACxB,qBAAqB,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE;gBAC7C,MAAM,KAAK,CAAC,IAAI,CAAC;oBACf,EAAE,EAAE,IAAI,CAAC,KAAK;oBACd,OAAO,EAAE,mBAAmB;oBAC5B,IAAI,EAAE,mDAAmD,GAAG,EAAE;iBAC/D,CAAC,CAAA;YACJ,CAAC;SACF,CAAA;IACH,CAAC;IAED,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA","sourcesContent":["// src/auth.ts\nimport { betterAuth, type Auth, type BetterAuthPlugin } from 'better-auth'\nimport { drizzleAdapter } from 'better-auth/adapters/drizzle'\nimport { openAPI } from 'better-auth/plugins'\n\nimport type {\n AccessUserBase,\n AuthSessionResolver,\n SessionUserConfig,\n SessionUserSource,\n} from './access'\nimport type { BetterAuthConfig } from './config'\nimport type { AnyDb } from './dialect'\nimport type { EmailFacade } from './email'\n\ntype ConfiguredAuthPlugins<TConfig extends BetterAuthConfig> = TConfig extends {\n plugins: infer TPlugins extends readonly BetterAuthPlugin[]\n}\n ? TPlugins\n : []\n\ntype WithWorkerstackAuthDefaults<TConfig extends BetterAuthConfig> = Omit<\n BetterAuthConfig,\n 'plugins'\n> &\n Omit<TConfig, 'plugins'> & {\n plugins: [...ConfiguredAuthPlugins<TConfig>, ReturnType<typeof openAPI>]\n }\n\n/**\n * The public Better Auth instance retains every endpoint and model field from\n * the declared config. Workerstack always installs OpenAPI at runtime, so its\n * endpoints are part of the public type even when the app omitted the plugin.\n */\nexport type WorkerstackAuth<\n TConfig extends BetterAuthConfig = BetterAuthConfig,\n> = Auth<WithWorkerstackAuthDefaults<TConfig>>\n\n/**\n * Build Better Auth while exposing its named plugin-aware public type. The\n * implementation accepts the resolved runtime config, while `TConfig` carries\n * the declaration that produced it; their relationship is asserted once here.\n */\nexport function createAuth<TConfig extends BetterAuthConfig = BetterAuthConfig>(\n db: AnyDb,\n cfg: BetterAuthConfig,\n userSchema?: Record<string, unknown>,\n): WorkerstackAuth<TConfig> {\n const hasOpenApi = cfg.plugins?.some((p: any) => p.id === 'open-api')\n const plugins = hasOpenApi ? cfg.plugins : [...(cfg.plugins || []), openAPI()]\n\n return betterAuth({\n ...cfg,\n plugins,\n database: drizzleAdapter(db as Parameters<typeof drizzleAdapter>[0], {\n provider: 'sqlite',\n ...(userSchema ? { schema: userSchema } : {}),\n }),\n }) as unknown as WorkerstackAuth<TConfig>\n}\n\n/**\n * better-auth resolves its models out of the app's own schema, so an app that\n * declares none has no auth at all. Session resolution must then short-circuit\n * to null: the drizzle adapter throws on a missing model, and any session\n * cookie for the host — a browser keeps those per host, not per port, so one\n * minted by another local app arrives here too — would break every request.\n */\nexport function missingAuthModels(\n schema: Record<string, unknown>,\n cfg: BetterAuthConfig,\n): string[] {\n const models = [\n cfg.user?.modelName ?? 'user',\n cfg.session?.modelName ?? 'session',\n ]\n return models.filter((model) => !schema[model])\n}\n\n/**\n * Defer building better-auth until someone touches the instance. From 1.7.6 on,\n * constructing it starts a schema check that logs, and every `auth.api` call\n * throws, when the auth tables are missing. An app without auth models never\n * builds one, yet `app.auth` / `ctx.auth` still work for code that reaches for\n * it on purpose. A proxy, not a getter: oRPC middleware and access scopes\n * spread the context, which would read a getter on every request.\n */\nexport function lazyAuth<TAuth extends object>(create: () => TAuth): TAuth {\n let instance: TAuth | undefined\n const resolve = () => {\n instance ??= create()\n return instance\n }\n return new Proxy({} as TAuth, {\n get: (_, key) => Reflect.get(resolve(), key),\n has: (_, key) => Reflect.has(resolve(), key),\n ownKeys: () => Reflect.ownKeys(resolve()),\n getOwnPropertyDescriptor: (_, key) => {\n const descriptor = Reflect.getOwnPropertyDescriptor(resolve(), key)\n return descriptor ? { ...descriptor, configurable: true } : undefined\n },\n })\n}\n\n/**\n * Adapt the raw better-auth instance to our internal {@link AuthSessionResolver}\n * contract. better-auth's `getSession` has a union return (a bare session, or a\n * `{ headers, response }` wrapper when `returnHeaders` is set); we only ever\n * call the bare form, so we narrow on `'user' in result` and map to our shape.\n * Keeping this adapter here means internal modules never depend on better-auth's\n * evolving types.\n */\nexport function toAuthSessionResolver<\n TExtra extends Record<string, unknown> = Record<never, never>,\n>(\n auth: Auth,\n sessionUser?: SessionUserConfig<TExtra>,\n): AuthSessionResolver<Omit<TExtra, keyof AccessUserBase>> {\n return {\n api: {\n async getSession({ headers }) {\n const result = await auth.api.getSession({ headers })\n if (result && 'user' in result && result.user) {\n const session = 'session' in result ? result.session : null\n const activeOrganizationId =\n session &&\n 'activeOrganizationId' in session &&\n typeof session.activeOrganizationId === 'string'\n ? session.activeOrganizationId\n : null\n const role =\n 'role' in result.user && typeof result.user.role === 'string'\n ? result.user.role\n : undefined\n const emailVerified =\n 'emailVerified' in result.user && result.user.emailVerified === true\n const mapped = sessionUser?.mapUser(\n result.user as SessionUserSource,\n ) as Record<string, unknown> | undefined\n const extras = { ...mapped }\n delete extras.id\n delete extras.email\n delete extras.emailVerified\n delete extras.name\n delete extras.role\n return {\n user: {\n ...extras,\n id: result.user.id,\n email: result.user.email,\n emailVerified,\n name: result.user.name,\n ...(role ? { role } : {}),\n },\n session: session ? { activeOrganizationId } : null,\n }\n }\n return null\n },\n },\n } as AuthSessionResolver<Omit<TExtra, keyof AccessUserBase>>\n}\n\n/**\n * Fill better-auth's email hooks from the workerstack email facade. Only fills\n * gaps: user-supplied handlers always win, and nothing is injected when email\n * isn't configured. emailAndPassword is only touched when the user enabled it\n * (injecting it unasked would enable the feature).\n */\nexport function withEmailAuthDefaults(\n cfg: BetterAuthConfig,\n email: EmailFacade,\n emailConfigured: boolean,\n): BetterAuthConfig {\n if (!emailConfigured) return cfg\n const out: BetterAuthConfig = { ...cfg }\n\n if (\n cfg.emailAndPassword?.enabled &&\n !cfg.emailAndPassword.sendResetPassword\n ) {\n out.emailAndPassword = {\n ...cfg.emailAndPassword,\n sendResetPassword: async ({ user, url }) => {\n await email.send({\n to: user.email,\n subject: 'Reset your password',\n text: `Click the link to reset your password:\\n\\n${url}\\n\\nIf you didn't request this, you can ignore this email.`,\n })\n },\n }\n }\n\n if (!cfg.emailVerification?.sendVerificationEmail) {\n out.emailVerification = {\n ...cfg.emailVerification,\n sendVerificationEmail: async ({ user, url }) => {\n await email.send({\n to: user.email,\n subject: 'Verify your email',\n text: `Click the link to verify your email address:\\n\\n${url}`,\n })\n },\n }\n }\n\n return out\n}\n\nexport { withPasswordDefaults } from './auth-password'\n"]}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { EnvConfigInput } from './env.js';
|
|
2
|
+
import type { InspectedDefinition } from './inspect.js';
|
|
3
|
+
import type { TickResult } from './jobs/index.js';
|
|
4
|
+
import type { RuntimeOverrides } from './runtime.js';
|
|
5
|
+
export declare const BACKEND_INTERNALS: unique symbol;
|
|
6
|
+
export type RuntimeJobFailure = {
|
|
7
|
+
id: string;
|
|
8
|
+
name: string;
|
|
9
|
+
attempts: number;
|
|
10
|
+
lastError: string | null;
|
|
11
|
+
};
|
|
12
|
+
export type RuntimeTestJob = {
|
|
13
|
+
id: string;
|
|
14
|
+
name: string;
|
|
15
|
+
kind: 'job' | 'cron';
|
|
16
|
+
status: 'pending' | 'running' | 'succeeded' | 'failed';
|
|
17
|
+
attempts: number;
|
|
18
|
+
runAt: number;
|
|
19
|
+
dedupeKey: string | null;
|
|
20
|
+
lastError: string | null;
|
|
21
|
+
};
|
|
22
|
+
export type RuntimeTestingHandle = {
|
|
23
|
+
tick(now: number): Promise<TickResult>;
|
|
24
|
+
inspect(now: number): Promise<{
|
|
25
|
+
runnable: number;
|
|
26
|
+
failed: RuntimeJobFailure[];
|
|
27
|
+
jobs: RuntimeTestJob[];
|
|
28
|
+
}>;
|
|
29
|
+
};
|
|
30
|
+
export type BackendInternals<TApp> = {
|
|
31
|
+
readonly envSchema: EnvConfigInput | undefined;
|
|
32
|
+
inspect(source: Record<string, string | undefined>): InspectedDefinition;
|
|
33
|
+
start(source: Record<string, string | undefined>, overrides?: RuntimeOverrides, inspected?: InspectedDefinition): Promise<TApp>;
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=backend-internals.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backend-internals.d.ts","sourceRoot":"","sources":["../src/backend-internals.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAA;AAC3C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAA;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AACxC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AAEjD,eAAO,MAAM,iBAAiB,EAAE,OAAO,MAEtC,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CACzB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,KAAK,GAAG,MAAM,CAAA;IACpB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAA;IACtD,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CACzB,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;IACtC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;QAC5B,QAAQ,EAAE,MAAM,CAAA;QAChB,MAAM,EAAE,iBAAiB,EAAE,CAAA;QAC3B,IAAI,EAAE,cAAc,EAAE,CAAA;KACvB,CAAC,CAAA;CACH,CAAA;AAED,MAAM,MAAM,gBAAgB,CAAC,IAAI,IAAI;IACnC,QAAQ,CAAC,SAAS,EAAE,cAAc,GAAG,SAAS,CAAA;IAC9C,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,mBAAmB,CAAA;IACxE,KAAK,CACH,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,EAC1C,SAAS,CAAC,EAAE,gBAAgB,EAC5B,SAAS,CAAC,EAAE,mBAAmB,GAC9B,OAAO,CAAC,IAAI,CAAC,CAAA;CACjB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backend-internals.js","sourceRoot":"","sources":["../src/backend-internals.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,MAAM,iBAAiB,GAAkB,MAAM,CAAC,GAAG,CACxD,+BAA+B,CAChC,CAAA","sourcesContent":["import type { EnvConfigInput } from './env'\nimport type { InspectedDefinition } from './inspect'\nimport type { TickResult } from './jobs'\nimport type { RuntimeOverrides } from './runtime'\n\nexport const BACKEND_INTERNALS: unique symbol = Symbol.for(\n 'workerstack.backend-internals',\n)\n\nexport type RuntimeJobFailure = {\n id: string\n name: string\n attempts: number\n lastError: string | null\n}\n\nexport type RuntimeTestJob = {\n id: string\n name: string\n kind: 'job' | 'cron'\n status: 'pending' | 'running' | 'succeeded' | 'failed'\n attempts: number\n runAt: number\n dedupeKey: string | null\n lastError: string | null\n}\n\nexport type RuntimeTestingHandle = {\n tick(now: number): Promise<TickResult>\n inspect(now: number): Promise<{\n runnable: number\n failed: RuntimeJobFailure[]\n jobs: RuntimeTestJob[]\n }>\n}\n\nexport type BackendInternals<TApp> = {\n readonly envSchema: EnvConfigInput | undefined\n inspect(source: Record<string, string | undefined>): InspectedDefinition\n start(\n source: Record<string, string | undefined>,\n overrides?: RuntimeOverrides,\n inspected?: InspectedDefinition,\n ): Promise<TApp>\n}\n"]}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import type { AnyRouter as AnyORPCRouter } from '@orpc/server';
|
|
2
|
+
import type { SessionUserConfig, SessionUserExtraOf, TableAccessInput } from './access.js';
|
|
3
|
+
import type { BetterAuthConfig, WorkerstackConfig, RealtimeConfigInput } from './config.js';
|
|
4
|
+
import type { EnvConfigInput, ValidatedEnv } from './env.js';
|
|
5
|
+
import type { WorkerstackJobsBuilder, JobsDefs } from './jobs/index.js';
|
|
6
|
+
import type { WorkerstackManifest } from './manifest.js';
|
|
7
|
+
import type { MessagingConfig } from './messaging/index.js';
|
|
8
|
+
import type { Platform } from './platform.js';
|
|
9
|
+
import type { WorkerstackApp, BucketNamesOf } from './runtime.js';
|
|
10
|
+
import type { StorageConfigInput } from './storage/buckets.js';
|
|
11
|
+
import type { TestMethod } from './testing/fixture.js';
|
|
12
|
+
import { BACKEND_INTERNALS, type BackendInternals } from './backend-internals.js';
|
|
13
|
+
export type StartOptions = {
|
|
14
|
+
env?: Record<string, string | undefined>;
|
|
15
|
+
/** Host services. Missing ones use in-memory defaults. */
|
|
16
|
+
platform?: Partial<Platform>;
|
|
17
|
+
};
|
|
18
|
+
export type WorkerstackBackend<TApp> = {
|
|
19
|
+
inspect(options?: StartOptions): WorkerstackManifest;
|
|
20
|
+
start(options?: StartOptions): Promise<TApp>;
|
|
21
|
+
test: TestMethod<TApp>;
|
|
22
|
+
readonly [BACKEND_INTERNALS]: BackendInternals<TApp>;
|
|
23
|
+
};
|
|
24
|
+
export type WorkerstackDefinitionConfig<TSchema extends Record<string, unknown>, TAccess extends Record<string, TableAccessInput> | undefined = undefined, TStorage extends StorageConfigInput | undefined = undefined, TEnv extends EnvConfigInput | undefined = undefined, TJobsDefs extends JobsDefs | undefined = undefined, TCustomApiRouter extends AnyORPCRouter | undefined = undefined, TRealtime = undefined, TMessaging extends MessagingConfig | undefined = undefined, TAuthConfig extends BetterAuthConfig = BetterAuthConfig, TSession extends SessionUserConfig<Record<string, unknown>> | undefined = undefined> = Omit<WorkerstackConfig<TSchema, TAccess, TStorage, TEnv, TCustomApiRouter, TAuthConfig, TSession>, 'realtime' | 'messaging' | 'api'> & {
|
|
25
|
+
/**
|
|
26
|
+
* An inline `api` or `jobs` builder receives the open `MessagingConfig`, not
|
|
27
|
+
* `TMessaging`. Naming `TMessaging` in a callback parameter makes TypeScript
|
|
28
|
+
* fix it before it reads the sibling `messaging` property, and the whole
|
|
29
|
+
* declaration then loses its inferred channels. Declare the builder in its
|
|
30
|
+
* own module with an annotated parameter to type `ctx.messaging` exactly —
|
|
31
|
+
* `defineApi({ schema, env, messaging })` and `WorkerstackJobsBuilder` both
|
|
32
|
+
* take the channel record.
|
|
33
|
+
*/
|
|
34
|
+
realtime?: TRealtime;
|
|
35
|
+
messaging?: TMessaging;
|
|
36
|
+
api?: TCustomApiRouter | ((builder: import('./api/builder.js').WorkerstackApiBuilder<TSchema, ValidatedEnv<TEnv>, MessagingConfig, SessionUserExtraOf<TSession>>) => TCustomApiRouter);
|
|
37
|
+
jobs?: TJobsDefs | ((builder: WorkerstackJobsBuilder<TSchema, ValidatedEnv<TEnv>, MessagingConfig>) => TJobsDefs);
|
|
38
|
+
};
|
|
39
|
+
export declare function isWorkerstackBackend(value: unknown): value is WorkerstackBackend<unknown>;
|
|
40
|
+
/**
|
|
41
|
+
* A configuration slot that may read validated environment values. The shape a
|
|
42
|
+
* slot produces reaches the manifest, so a callback belongs here to supply a
|
|
43
|
+
* key, a URL, or a sender — never to change which channels, buckets, or tables
|
|
44
|
+
* exist. Blueprint generation resolves the declaration against two accepted
|
|
45
|
+
* environments and rejects a shape that differs between them.
|
|
46
|
+
*/
|
|
47
|
+
export type EnvAware<TEnv extends EnvConfigInput | undefined, T> = T | ((env: ValidatedEnv<NoInfer<TEnv>>) => T);
|
|
48
|
+
export type DatabaseSlot = WorkerstackConfig<Record<string, unknown>, undefined, undefined, undefined, undefined>['database'];
|
|
49
|
+
/**
|
|
50
|
+
* The whole application in one object. `schema`, `access`, and the routers are
|
|
51
|
+
* plain data; the slots that hold credentials also accept a function of the
|
|
52
|
+
* validated environment.
|
|
53
|
+
*/
|
|
54
|
+
export type WorkerstackDeclaration<TSchema extends Record<string, unknown>, TEnv extends EnvConfigInput | undefined = undefined, TAccess extends Record<string, TableAccessInput> | undefined = undefined, TStorage extends StorageConfigInput | undefined = undefined, TJobsDefs extends JobsDefs | undefined = undefined, TCustomApiRouter extends AnyORPCRouter | undefined = undefined, TRealtime = undefined, TMessaging extends MessagingConfig | undefined = undefined, TAuthConfig extends BetterAuthConfig = BetterAuthConfig, TSession extends SessionUserConfig<Record<string, unknown>> | undefined = undefined> = Omit<WorkerstackDefinitionConfig<TSchema, TAccess, TStorage, TEnv, TJobsDefs, TCustomApiRouter, TRealtime, TMessaging, TAuthConfig, TSession>, 'database' | 'storage' | 'messaging' | 'realtime'> & {
|
|
55
|
+
/** Declared environment. Its names reach the blueprint; its values never do. */
|
|
56
|
+
env?: TEnv;
|
|
57
|
+
database: EnvAware<TEnv, DatabaseSlot>;
|
|
58
|
+
storage?: EnvAware<TEnv, TStorage>;
|
|
59
|
+
messaging?: EnvAware<TEnv, TMessaging>;
|
|
60
|
+
realtime?: EnvAware<TEnv, TRealtime>;
|
|
61
|
+
};
|
|
62
|
+
export declare function workerstack<TSchema extends Record<string, unknown>, const TEnv extends EnvConfigInput | undefined = undefined, const TAccess extends Record<string, TableAccessInput> | undefined = undefined, const TStorage extends StorageConfigInput | undefined = undefined, const TJobsDefs extends JobsDefs | undefined = undefined, TCustomApiRouter extends AnyORPCRouter | undefined = undefined, const TRealtime extends RealtimeConfigInput | undefined = undefined, const TMessaging extends MessagingConfig | undefined = undefined, const TAuthConfig extends BetterAuthConfig = BetterAuthConfig, const TSession extends SessionUserConfig<Record<string, unknown>> | undefined = undefined>(declaration: WorkerstackDeclaration<TSchema, TEnv, TAccess, TStorage, TJobsDefs, TCustomApiRouter, TRealtime, TMessaging, TAuthConfig, TSession>): WorkerstackBackend<WorkerstackApp<TSchema, TAccess, BucketNamesOf<TStorage>, TEnv, TJobsDefs, TCustomApiRouter, TRealtime, TMessaging, TAuthConfig>>;
|
|
63
|
+
//# sourceMappingURL=backend.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../src/backend.ts"],"names":[],"mappings":"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"}
|
package/dist/backend.js
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { BACKEND_INTERNALS } from './backend-internals.js';
|
|
2
|
+
import { validateEnv } from './env.js';
|
|
3
|
+
import { assertHostedBlueprintFile } from './hosted-contract.js';
|
|
4
|
+
import { inspectConfig } from './inspect.js';
|
|
5
|
+
import { materializeWorkerstack } from './runtime.js';
|
|
6
|
+
export function isWorkerstackBackend(value) {
|
|
7
|
+
return (typeof value === 'object' && value !== null && BACKEND_INTERNALS in value);
|
|
8
|
+
}
|
|
9
|
+
export function workerstack(declaration) {
|
|
10
|
+
const { env: envSchema, ...slots } = declaration;
|
|
11
|
+
const inspect = (source) => {
|
|
12
|
+
const env = validateEnv(envSchema, { source });
|
|
13
|
+
const resolve = (value) => typeof value === 'function'
|
|
14
|
+
? value(env)
|
|
15
|
+
: value;
|
|
16
|
+
const config = {
|
|
17
|
+
...slots,
|
|
18
|
+
database: resolve(slots.database),
|
|
19
|
+
storage: resolve(slots.storage),
|
|
20
|
+
messaging: resolve(slots.messaging),
|
|
21
|
+
realtime: resolve(slots.realtime),
|
|
22
|
+
};
|
|
23
|
+
return inspectConfig(config, envSchema, env);
|
|
24
|
+
};
|
|
25
|
+
const start = async (source, overrides = {}, inspected = inspect(source)) => {
|
|
26
|
+
if (source.WORKERSTACK_BLUEPRINT_PATH) {
|
|
27
|
+
await assertHostedBlueprintFile(inspected.manifest, source.WORKERSTACK_BLUEPRINT_PATH);
|
|
28
|
+
}
|
|
29
|
+
return materializeWorkerstack({
|
|
30
|
+
...inspected.config,
|
|
31
|
+
jobs: inspected.jobsDefs,
|
|
32
|
+
api: inspected.customApiRouter,
|
|
33
|
+
}, source, overrides, inspected.env);
|
|
34
|
+
};
|
|
35
|
+
let backend;
|
|
36
|
+
const test = (async (options) => {
|
|
37
|
+
const testing = await import('./testing.js');
|
|
38
|
+
return testing.createTestApp(backend, options);
|
|
39
|
+
});
|
|
40
|
+
test.configure = (options) => (async (overrides = {}) => {
|
|
41
|
+
const testing = await import('./testing.js');
|
|
42
|
+
return testing.configureTestApp(backend, options)(overrides);
|
|
43
|
+
});
|
|
44
|
+
backend = {
|
|
45
|
+
inspect: ({ env } = {}) => inspect(env ?? process.env)
|
|
46
|
+
.manifest,
|
|
47
|
+
start: async ({ env, platform } = {}) => await start(env ?? process.env, {
|
|
48
|
+
platform,
|
|
49
|
+
}),
|
|
50
|
+
test,
|
|
51
|
+
[BACKEND_INTERNALS]: {
|
|
52
|
+
envSchema,
|
|
53
|
+
inspect,
|
|
54
|
+
start,
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
return backend;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=backend.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backend.js","sourceRoot":"","sources":["../src/backend.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AnyRouter as AnyORPCRouter } from '@orpc/server'\n\nimport type {\n SessionUserConfig,\n SessionUserExtraOf,\n TableAccessInput,\n} from './access'\nimport type {\n BetterAuthConfig,\n WorkerstackConfig,\n RealtimeConfigInput,\n} from './config'\nimport type { EnvConfigInput, ValidatedEnv } from './env'\nimport type { WorkerstackJobsBuilder, JobsDefs } from './jobs'\nimport type { WorkerstackManifest } from './manifest'\nimport type { MessagingConfig } from './messaging'\nimport type { Platform } from './platform'\nimport type { WorkerstackApp, BucketNamesOf, RuntimeOverrides } from './runtime'\nimport type { StorageConfigInput } from './storage/buckets'\nimport type { TestMethod, TestOptions } from './testing/fixture'\n\nimport { BACKEND_INTERNALS, type BackendInternals } from './backend-internals'\nimport { validateEnv } from './env'\nimport { assertHostedBlueprintFile } from './hosted-contract'\nimport { inspectConfig, type InspectedDefinition } from './inspect'\nimport { materializeWorkerstack } from './runtime'\n\nexport type StartOptions = {\n env?: Record<string, string | undefined>\n /** Host services. Missing ones use in-memory defaults. */\n platform?: Partial<Platform>\n}\n\nexport type WorkerstackBackend<TApp> = {\n inspect(options?: StartOptions): WorkerstackManifest\n start(options?: StartOptions): Promise<TApp>\n test: TestMethod<TApp>\n readonly [BACKEND_INTERNALS]: BackendInternals<TApp>\n}\n\nexport type WorkerstackDefinitionConfig<\n TSchema extends Record<string, unknown>,\n TAccess extends Record<string, TableAccessInput> | undefined = undefined,\n TStorage extends StorageConfigInput | undefined = undefined,\n TEnv extends EnvConfigInput | undefined = undefined,\n TJobsDefs extends JobsDefs | undefined = undefined,\n TCustomApiRouter extends AnyORPCRouter | undefined = undefined,\n TRealtime = undefined,\n TMessaging extends MessagingConfig | undefined = undefined,\n TAuthConfig extends BetterAuthConfig = BetterAuthConfig,\n TSession extends SessionUserConfig<Record<string, unknown>> | undefined =\n undefined,\n> = Omit<\n WorkerstackConfig<\n TSchema,\n TAccess,\n TStorage,\n TEnv,\n TCustomApiRouter,\n TAuthConfig,\n TSession\n >,\n 'realtime' | 'messaging' | 'api'\n> & {\n /**\n * An inline `api` or `jobs` builder receives the open `MessagingConfig`, not\n * `TMessaging`. Naming `TMessaging` in a callback parameter makes TypeScript\n * fix it before it reads the sibling `messaging` property, and the whole\n * declaration then loses its inferred channels. Declare the builder in its\n * own module with an annotated parameter to type `ctx.messaging` exactly —\n * `defineApi({ schema, env, messaging })` and `WorkerstackJobsBuilder` both\n * take the channel record.\n */\n realtime?: TRealtime\n messaging?: TMessaging\n api?:\n | TCustomApiRouter\n | ((\n builder: import('./api/builder').WorkerstackApiBuilder<\n TSchema,\n ValidatedEnv<TEnv>,\n MessagingConfig,\n SessionUserExtraOf<TSession>\n >,\n ) => TCustomApiRouter)\n jobs?:\n | TJobsDefs\n | ((\n builder: WorkerstackJobsBuilder<\n TSchema,\n ValidatedEnv<TEnv>,\n MessagingConfig\n >,\n ) => TJobsDefs)\n}\n\nexport function isWorkerstackBackend(\n value: unknown,\n): value is WorkerstackBackend<unknown> {\n return (\n typeof value === 'object' && value !== null && BACKEND_INTERNALS in value\n )\n}\n\n/**\n * A configuration slot that may read validated environment values. The shape a\n * slot produces reaches the manifest, so a callback belongs here to supply a\n * key, a URL, or a sender — never to change which channels, buckets, or tables\n * exist. Blueprint generation resolves the declaration against two accepted\n * environments and rejects a shape that differs between them.\n */\nexport type EnvAware<TEnv extends EnvConfigInput | undefined, T> =\n | T\n | ((env: ValidatedEnv<NoInfer<TEnv>>) => T)\n\nexport type DatabaseSlot = WorkerstackConfig<\n Record<string, unknown>,\n undefined,\n undefined,\n undefined,\n undefined\n>['database']\n\n/**\n * The whole application in one object. `schema`, `access`, and the routers are\n * plain data; the slots that hold credentials also accept a function of the\n * validated environment.\n */\nexport type WorkerstackDeclaration<\n TSchema extends Record<string, unknown>,\n TEnv extends EnvConfigInput | undefined = undefined,\n TAccess extends Record<string, TableAccessInput> | undefined = undefined,\n TStorage extends StorageConfigInput | undefined = undefined,\n TJobsDefs extends JobsDefs | undefined = undefined,\n TCustomApiRouter extends AnyORPCRouter | undefined = undefined,\n TRealtime = undefined,\n TMessaging extends MessagingConfig | undefined = undefined,\n TAuthConfig extends BetterAuthConfig = BetterAuthConfig,\n TSession extends SessionUserConfig<Record<string, unknown>> | undefined =\n undefined,\n> = Omit<\n WorkerstackDefinitionConfig<\n TSchema,\n TAccess,\n TStorage,\n TEnv,\n TJobsDefs,\n TCustomApiRouter,\n TRealtime,\n TMessaging,\n TAuthConfig,\n TSession\n >,\n 'database' | 'storage' | 'messaging' | 'realtime'\n> & {\n /** Declared environment. Its names reach the blueprint; its values never do. */\n env?: TEnv\n database: EnvAware<TEnv, DatabaseSlot>\n storage?: EnvAware<TEnv, TStorage>\n messaging?: EnvAware<TEnv, TMessaging>\n realtime?: EnvAware<TEnv, TRealtime>\n}\n\nexport function workerstack<\n TSchema extends Record<string, unknown>,\n const TEnv extends EnvConfigInput | undefined = undefined,\n const TAccess extends Record<string, TableAccessInput> | undefined =\n undefined,\n const TStorage extends StorageConfigInput | undefined = undefined,\n const TJobsDefs extends JobsDefs | undefined = undefined,\n TCustomApiRouter extends AnyORPCRouter | undefined = undefined,\n const TRealtime extends RealtimeConfigInput | undefined = undefined,\n const TMessaging extends MessagingConfig | undefined = undefined,\n const TAuthConfig extends BetterAuthConfig = BetterAuthConfig,\n const TSession extends\n | SessionUserConfig<Record<string, unknown>>\n | undefined = undefined,\n>(\n declaration: WorkerstackDeclaration<\n TSchema,\n TEnv,\n TAccess,\n TStorage,\n TJobsDefs,\n TCustomApiRouter,\n TRealtime,\n TMessaging,\n TAuthConfig,\n TSession\n >,\n): WorkerstackBackend<\n WorkerstackApp<\n TSchema,\n TAccess,\n BucketNamesOf<TStorage>,\n TEnv,\n TJobsDefs,\n TCustomApiRouter,\n TRealtime,\n TMessaging,\n TAuthConfig\n >\n>\nexport function workerstack(\n declaration: WorkerstackDeclaration<Record<string, unknown>, any>,\n): WorkerstackBackend<any> {\n const { env: envSchema, ...slots } = declaration as Record<\n string,\n unknown\n > & {\n env?: EnvConfigInput\n }\n const inspect = (source: Record<string, string | undefined>) => {\n const env = validateEnv(envSchema, { source })\n const resolve = (value: unknown) =>\n typeof value === 'function'\n ? (value as (given: typeof env) => unknown)(env)\n : value\n const config = {\n ...slots,\n database: resolve(slots.database),\n storage: resolve(slots.storage),\n messaging: resolve(slots.messaging),\n realtime: resolve(slots.realtime),\n }\n return inspectConfig(config as never, envSchema, env)\n }\n\n type App = WorkerstackApp<any, any, any, any, any, any, any, any, any>\n\n const start = async (\n source: Record<string, string | undefined>,\n overrides: RuntimeOverrides = {},\n inspected: InspectedDefinition = inspect(source),\n ): Promise<App> => {\n if (source.WORKERSTACK_BLUEPRINT_PATH) {\n await assertHostedBlueprintFile(\n inspected.manifest,\n source.WORKERSTACK_BLUEPRINT_PATH,\n )\n }\n return materializeWorkerstack(\n {\n ...inspected.config,\n jobs: inspected.jobsDefs,\n api: inspected.customApiRouter,\n } as never,\n source,\n overrides,\n inspected.env,\n ) as Promise<App>\n }\n\n let backend: WorkerstackBackend<App>\n const test = (async (options) => {\n const testing = await import('./testing')\n return testing.createTestApp(backend, options)\n }) as TestMethod<App>\n test.configure = (options) =>\n (async (overrides: TestOptions = {}) => {\n const testing = await import('./testing')\n return testing.configureTestApp(backend, options)(overrides)\n }) as never\n backend = {\n inspect: ({ env } = {}) =>\n inspect(env ?? (process.env as Record<string, string | undefined>))\n .manifest,\n start: async ({ env, platform } = {}) =>\n await start(env ?? (process.env as Record<string, string | undefined>), {\n platform,\n }),\n test,\n [BACKEND_INTERNALS]: {\n envSchema,\n inspect,\n start,\n },\n }\n return backend\n}\n"]}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { type WorkerBlueprint } from './blueprint.js';
|
|
2
|
+
export type GenerateBlueprintOptions = {
|
|
3
|
+
directory: string;
|
|
4
|
+
entry?: string;
|
|
5
|
+
output?: string;
|
|
6
|
+
check?: boolean;
|
|
7
|
+
hostedCheck?: boolean;
|
|
8
|
+
/** UTC date for a new compatibilityDate; tests pin it. */
|
|
9
|
+
today?: string;
|
|
10
|
+
};
|
|
11
|
+
export type GenerateBlueprintResult = {
|
|
12
|
+
path: string;
|
|
13
|
+
blueprint: WorkerBlueprint;
|
|
14
|
+
source: string;
|
|
15
|
+
changed: boolean;
|
|
16
|
+
};
|
|
17
|
+
export declare class BlueprintCheckError extends Error {
|
|
18
|
+
constructor();
|
|
19
|
+
}
|
|
20
|
+
export declare function generateBlueprint(options: GenerateBlueprintOptions): Promise<GenerateBlueprintResult>;
|
|
21
|
+
//# sourceMappingURL=blueprint-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blueprint-generator.d.ts","sourceRoot":"","sources":["../src/blueprint-generator.ts"],"names":[],"mappings":"AAeA,OAAO,EAKL,KAAK,eAAe,EAGrB,MAAM,aAAa,CAAA;AAMpB,MAAM,MAAM,wBAAwB,GAAG;IACrC,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,0DAA0D;IAC1D,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAED,MAAM,MAAM,uBAAuB,GAAG;IACpC,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,eAAe,CAAA;IAC1B,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,OAAO,CAAA;CACjB,CAAA;AAED,qBAAa,mBAAoB,SAAQ,KAAK;;CAO7C;AAiJD,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,uBAAuB,CAAC,CAwHlC"}
|