dotdo 0.0.1 → 0.1.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/LICENSE +1 -1
- package/README.md +446 -315
- package/cli/README.md +238 -0
- package/cli/agent.ts +72 -0
- package/cli/bin.js +44 -0
- package/cli/bin.ts +38 -0
- package/cli/build.ts +157 -0
- package/cli/commands/auth/login.ts +14 -0
- package/cli/commands/auth/logout.ts +6 -0
- package/cli/commands/auth/whoami.ts +16 -0
- package/cli/commands/deploy-multi.ts +245 -0
- package/cli/commands/dev/deploy.ts +100 -0
- package/cli/commands/dev/dev.ts +95 -0
- package/cli/commands/dev/logs.ts +91 -0
- package/cli/commands/dev-local.ts +88 -0
- package/cli/commands/do-ops.ts +314 -0
- package/cli/commands/index.ts +100 -0
- package/cli/commands/init.ts +247 -0
- package/cli/commands/introspect/emitter.ts +315 -0
- package/cli/commands/introspect/index.ts +193 -0
- package/cli/commands/link.ts +598 -0
- package/cli/commands/snippets.ts +415 -0
- package/cli/commands/tunnel.ts +239 -0
- package/cli/device-auth.ts +289 -0
- package/cli/fallback.ts +12 -0
- package/cli/index.ts +121 -0
- package/cli/main.ts +246 -0
- package/cli/mcp-stdio.ts +790 -0
- package/cli/package.json +62 -0
- package/cli/runtime/do-registry.ts +193 -0
- package/cli/runtime/embedded-db.ts +344 -0
- package/cli/runtime/index.ts +9 -0
- package/cli/runtime/miniflare-adapter.ts +162 -0
- package/cli/sandbox.ts +82 -0
- package/cli/src/args.ts +174 -0
- package/cli/src/auth.ts +55 -0
- package/cli/src/commands/call.ts +84 -0
- package/cli/src/commands/charge.ts +96 -0
- package/cli/src/commands/config.ts +115 -0
- package/cli/src/commands/email.ts +112 -0
- package/cli/src/commands/llm.ts +115 -0
- package/cli/src/commands/queue.ts +134 -0
- package/cli/src/commands/text.ts +86 -0
- package/cli/src/config.ts +185 -0
- package/cli/src/output.ts +246 -0
- package/cli/src/rpc.ts +192 -0
- package/cli/utils/config.ts +282 -0
- package/cli/utils/detect.ts +73 -0
- package/cli/utils/index.ts +15 -0
- package/cli/utils/logger.ts +232 -0
- package/dist/ai/index.js +19 -0
- package/dist/ai/index.js.map +1 -0
- package/dist/ai/template-literals.js +852 -0
- package/dist/ai/template-literals.js.map +1 -0
- package/dist/api/middleware/auth-federation.js +573 -0
- package/dist/api/middleware/auth-federation.js.map +1 -0
- package/dist/api/middleware/auth.js +545 -0
- package/dist/api/middleware/auth.js.map +1 -0
- package/dist/db/actions.js +212 -0
- package/dist/db/actions.js.map +1 -0
- package/dist/db/auth.js +506 -0
- package/dist/db/auth.js.map +1 -0
- package/dist/db/branches.js +65 -0
- package/dist/db/branches.js.map +1 -0
- package/dist/db/clickhouse.js +1074 -0
- package/dist/db/clickhouse.js.map +1 -0
- package/dist/db/dlq.js +39 -0
- package/dist/db/dlq.js.map +1 -0
- package/dist/db/events.js +28 -0
- package/dist/db/events.js.map +1 -0
- package/dist/db/exec.js +64 -0
- package/dist/db/exec.js.map +1 -0
- package/dist/db/files.js +85 -0
- package/dist/db/files.js.map +1 -0
- package/dist/db/flags.js +24 -0
- package/dist/db/flags.js.map +1 -0
- package/dist/db/git.js +116 -0
- package/dist/db/git.js.map +1 -0
- package/dist/db/iceberg/inverted-index.js +862 -0
- package/dist/db/iceberg/inverted-index.js.map +1 -0
- package/dist/db/iceberg/puffin.js +878 -0
- package/dist/db/iceberg/puffin.js.map +1 -0
- package/dist/db/iceberg/search-manifest.js +422 -0
- package/dist/db/iceberg/search-manifest.js.map +1 -0
- package/dist/db/iceberg/types.js +8 -0
- package/dist/db/iceberg/types.js.map +1 -0
- package/dist/db/index.js +121 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db/integrations.js +368 -0
- package/dist/db/integrations.js.map +1 -0
- package/dist/db/json-indexes.js +332 -0
- package/dist/db/json-indexes.js.map +1 -0
- package/dist/db/linked-accounts.js +287 -0
- package/dist/db/linked-accounts.js.map +1 -0
- package/dist/db/nouns.js +183 -0
- package/dist/db/nouns.js.map +1 -0
- package/dist/db/objects.js +170 -0
- package/dist/db/objects.js.map +1 -0
- package/dist/db/primitives/dag-scheduler/index.js +869 -0
- package/dist/db/primitives/dag-scheduler/index.js.map +1 -0
- package/dist/db/primitives/exactly-once-context.js +237 -0
- package/dist/db/primitives/exactly-once-context.js.map +1 -0
- package/dist/db/primitives/index.js +62 -0
- package/dist/db/primitives/index.js.map +1 -0
- package/dist/db/primitives/keyed-router.js +145 -0
- package/dist/db/primitives/keyed-router.js.map +1 -0
- package/dist/db/primitives/observability.js +162 -0
- package/dist/db/primitives/observability.js.map +1 -0
- package/dist/db/primitives/schema-evolution.js +643 -0
- package/dist/db/primitives/schema-evolution.js.map +1 -0
- package/dist/db/primitives/stateful-operator/index.js +770 -0
- package/dist/db/primitives/stateful-operator/index.js.map +1 -0
- package/dist/db/primitives/temporal-store.js +306 -0
- package/dist/db/primitives/temporal-store.js.map +1 -0
- package/dist/db/primitives/typed-column-store.js +1229 -0
- package/dist/db/primitives/typed-column-store.js.map +1 -0
- package/dist/db/primitives/utils/duration.js +162 -0
- package/dist/db/primitives/utils/duration.js.map +1 -0
- package/dist/db/primitives/utils/murmur3.js +116 -0
- package/dist/db/primitives/utils/murmur3.js.map +1 -0
- package/dist/db/primitives/watermark-service.js +136 -0
- package/dist/db/primitives/watermark-service.js.map +1 -0
- package/dist/db/primitives/window-manager.js +764 -0
- package/dist/db/primitives/window-manager.js.map +1 -0
- package/dist/db/relationships.js +66 -0
- package/dist/db/relationships.js.map +1 -0
- package/dist/db/schema-minimal.js +61 -0
- package/dist/db/schema-minimal.js.map +1 -0
- package/dist/db/search.js +28 -0
- package/dist/db/search.js.map +1 -0
- package/dist/db/stores.js +1665 -0
- package/dist/db/stores.js.map +1 -0
- package/dist/db/things.js +297 -0
- package/dist/db/things.js.map +1 -0
- package/dist/db/vault.js +171 -0
- package/dist/db/vault.js.map +1 -0
- package/dist/db/verbs.js +102 -0
- package/dist/db/verbs.js.map +1 -0
- package/dist/do/base.js +48 -0
- package/dist/do/base.js.map +1 -0
- package/dist/do/tiny.js +31 -0
- package/dist/do/tiny.js.map +1 -0
- package/dist/lib/DOAuth.js +261 -0
- package/dist/lib/DOAuth.js.map +1 -0
- package/dist/lib/DODispatcher.js +72 -0
- package/dist/lib/DODispatcher.js.map +1 -0
- package/dist/lib/Modifier.js +189 -0
- package/dist/lib/Modifier.js.map +1 -0
- package/dist/lib/StateStorage.js +403 -0
- package/dist/lib/StateStorage.js.map +1 -0
- package/dist/lib/TypeRegistry.js +122 -0
- package/dist/lib/TypeRegistry.js.map +1 -0
- package/dist/lib/ai/gateway.js +247 -0
- package/dist/lib/ai/gateway.js.map +1 -0
- package/dist/lib/ai/tool-loop-agent.js +591 -0
- package/dist/lib/ai/tool-loop-agent.js.map +1 -0
- package/dist/lib/auto-wiring.js +439 -0
- package/dist/lib/auto-wiring.js.map +1 -0
- package/dist/lib/browse/browserbase.js +163 -0
- package/dist/lib/browse/browserbase.js.map +1 -0
- package/dist/lib/browse/cloudflare.js +144 -0
- package/dist/lib/browse/cloudflare.js.map +1 -0
- package/dist/lib/browse/index.js +62 -0
- package/dist/lib/browse/index.js.map +1 -0
- package/dist/lib/browse/types.js +13 -0
- package/dist/lib/browse/types.js.map +1 -0
- package/dist/lib/cache/index.js +37 -0
- package/dist/lib/cache/index.js.map +1 -0
- package/dist/lib/cache/visibility.js +638 -0
- package/dist/lib/cache/visibility.js.map +1 -0
- package/dist/lib/capabilities.js +268 -0
- package/dist/lib/capabilities.js.map +1 -0
- package/dist/lib/channels/base.js +106 -0
- package/dist/lib/channels/base.js.map +1 -0
- package/dist/lib/channels/discord.js +94 -0
- package/dist/lib/channels/discord.js.map +1 -0
- package/dist/lib/channels/email.js +204 -0
- package/dist/lib/channels/email.js.map +1 -0
- package/dist/lib/channels/index.js +90 -0
- package/dist/lib/channels/index.js.map +1 -0
- package/dist/lib/channels/mdxui-chat.js +95 -0
- package/dist/lib/channels/mdxui-chat.js.map +1 -0
- package/dist/lib/channels/slack-blockkit.js +121 -0
- package/dist/lib/channels/slack-blockkit.js.map +1 -0
- package/dist/lib/channels/types.js +7 -0
- package/dist/lib/channels/types.js.map +1 -0
- package/dist/lib/cloudflare/ai.js +654 -0
- package/dist/lib/cloudflare/ai.js.map +1 -0
- package/dist/lib/cloudflare/index.js +88 -0
- package/dist/lib/cloudflare/index.js.map +1 -0
- package/dist/lib/cloudflare/kv.js +342 -0
- package/dist/lib/cloudflare/kv.js.map +1 -0
- package/dist/lib/cloudflare/queues.js +434 -0
- package/dist/lib/cloudflare/queues.js.map +1 -0
- package/dist/lib/cloudflare/r2.js +604 -0
- package/dist/lib/cloudflare/r2.js.map +1 -0
- package/dist/lib/cloudflare/vectorize.js +494 -0
- package/dist/lib/cloudflare/vectorize.js.map +1 -0
- package/dist/lib/cloudflare/workflows.js +569 -0
- package/dist/lib/cloudflare/workflows.js.map +1 -0
- package/dist/lib/colo/caching.js +196 -0
- package/dist/lib/colo/caching.js.map +1 -0
- package/dist/lib/colo/detection.js +194 -0
- package/dist/lib/colo/detection.js.map +1 -0
- package/dist/lib/colo/external-data.js +219 -0
- package/dist/lib/colo/external-data.js.map +1 -0
- package/dist/lib/colo/globe-data.js +179 -0
- package/dist/lib/colo/globe-data.js.map +1 -0
- package/dist/lib/colo/index.js +16 -0
- package/dist/lib/colo/index.js.map +1 -0
- package/dist/lib/decorators.js +37 -0
- package/dist/lib/decorators.js.map +1 -0
- package/dist/lib/discovery.js +81 -0
- package/dist/lib/discovery.js.map +1 -0
- package/dist/lib/executors/AgenticFunctionExecutor.js +619 -0
- package/dist/lib/executors/AgenticFunctionExecutor.js.map +1 -0
- package/dist/lib/executors/BaseFunctionExecutor.js +328 -0
- package/dist/lib/executors/BaseFunctionExecutor.js.map +1 -0
- package/dist/lib/executors/CascadeExecutor.js +418 -0
- package/dist/lib/executors/CascadeExecutor.js.map +1 -0
- package/dist/lib/executors/CodeFunctionExecutor.js +904 -0
- package/dist/lib/executors/CodeFunctionExecutor.js.map +1 -0
- package/dist/lib/executors/GenerativeFunctionExecutor.js +904 -0
- package/dist/lib/executors/GenerativeFunctionExecutor.js.map +1 -0
- package/dist/lib/executors/HumanFunctionExecutor.js +884 -0
- package/dist/lib/executors/HumanFunctionExecutor.js.map +1 -0
- package/dist/lib/executors/ParallelStepExecutor.js +308 -0
- package/dist/lib/executors/ParallelStepExecutor.js.map +1 -0
- package/dist/lib/executors/types.js +12 -0
- package/dist/lib/executors/types.js.map +1 -0
- package/dist/lib/experiments.js +89 -0
- package/dist/lib/experiments.js.map +1 -0
- package/dist/lib/flags/store.js +262 -0
- package/dist/lib/flags/store.js.map +1 -0
- package/dist/lib/functions/FunctionComposition.js +467 -0
- package/dist/lib/functions/FunctionComposition.js.map +1 -0
- package/dist/lib/functions/FunctionMiddleware.js +457 -0
- package/dist/lib/functions/FunctionMiddleware.js.map +1 -0
- package/dist/lib/functions/FunctionRegistry.js +426 -0
- package/dist/lib/functions/FunctionRegistry.js.map +1 -0
- package/dist/lib/functions/createFunction.js +1048 -0
- package/dist/lib/functions/createFunction.js.map +1 -0
- package/dist/lib/humans/index.js +68 -0
- package/dist/lib/humans/index.js.map +1 -0
- package/dist/lib/humans/templates.js +117 -0
- package/dist/lib/humans/templates.js.map +1 -0
- package/dist/lib/identity.js +98 -0
- package/dist/lib/identity.js.map +1 -0
- package/dist/lib/index.js +9 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/lib/logging/error-logger.js +163 -0
- package/dist/lib/logging/error-logger.js.map +1 -0
- package/dist/lib/logging/index.js +160 -0
- package/dist/lib/logging/index.js.map +1 -0
- package/dist/lib/mixins/bash.js +753 -0
- package/dist/lib/mixins/bash.js.map +1 -0
- package/dist/lib/mixins/fs.js +648 -0
- package/dist/lib/mixins/fs.js.map +1 -0
- package/dist/lib/mixins/git.js +1006 -0
- package/dist/lib/mixins/git.js.map +1 -0
- package/dist/lib/mixins/npm.js +662 -0
- package/dist/lib/mixins/npm.js.map +1 -0
- package/dist/lib/noun-id.js +278 -0
- package/dist/lib/noun-id.js.map +1 -0
- package/dist/lib/rate-limit/sliding-window.js +148 -0
- package/dist/lib/rate-limit/sliding-window.js.map +1 -0
- package/dist/lib/rate-limit.js +110 -0
- package/dist/lib/rate-limit.js.map +1 -0
- package/dist/lib/rpc/bindings.js +548 -0
- package/dist/lib/rpc/bindings.js.map +1 -0
- package/dist/lib/rpc/index.js +64 -0
- package/dist/lib/rpc/index.js.map +1 -0
- package/dist/lib/safe-stringify.js +223 -0
- package/dist/lib/safe-stringify.js.map +1 -0
- package/dist/lib/sandbox/miniflare-sandbox.js +1007 -0
- package/dist/lib/sandbox/miniflare-sandbox.js.map +1 -0
- package/dist/lib/sqids.js +110 -0
- package/dist/lib/sqids.js.map +1 -0
- package/dist/lib/sql/adapters/index.js +10 -0
- package/dist/lib/sql/adapters/index.js.map +1 -0
- package/dist/lib/sql/adapters/node-sql-parser.js +552 -0
- package/dist/lib/sql/adapters/node-sql-parser.js.map +1 -0
- package/dist/lib/sql/adapters/pgsql-parser.js +1190 -0
- package/dist/lib/sql/adapters/pgsql-parser.js.map +1 -0
- package/dist/lib/sql/index.js +277 -0
- package/dist/lib/sql/index.js.map +1 -0
- package/dist/lib/sql/types.js +56 -0
- package/dist/lib/sql/types.js.map +1 -0
- package/dist/lib/type-classifier.js +126 -0
- package/dist/lib/type-classifier.js.map +1 -0
- package/dist/lib/utils/html.js +47 -0
- package/dist/lib/utils/html.js.map +1 -0
- package/dist/lib/validation.js +48 -0
- package/dist/lib/validation.js.map +1 -0
- package/dist/lib/vault/store.js +411 -0
- package/dist/lib/vault/store.js.map +1 -0
- package/dist/metrics/hunch.js +739 -0
- package/dist/metrics/hunch.js.map +1 -0
- package/dist/objects/API.js +302 -0
- package/dist/objects/API.js.map +1 -0
- package/dist/objects/Agent.js +179 -0
- package/dist/objects/Agent.js.map +1 -0
- package/dist/objects/AgenticFunctionExecutor.js +8 -0
- package/dist/objects/AgenticFunctionExecutor.js.map +1 -0
- package/dist/objects/App.js +83 -0
- package/dist/objects/App.js.map +1 -0
- package/dist/objects/Browser.js +884 -0
- package/dist/objects/Browser.js.map +1 -0
- package/dist/objects/Business.js +107 -0
- package/dist/objects/Business.js.map +1 -0
- package/dist/objects/CLI.js +221 -0
- package/dist/objects/CLI.js.map +1 -0
- package/dist/objects/CodeFunctionExecutor.js +8 -0
- package/dist/objects/CodeFunctionExecutor.js.map +1 -0
- package/dist/objects/Collection.js +161 -0
- package/dist/objects/Collection.js.map +1 -0
- package/dist/objects/DO.js +41 -0
- package/dist/objects/DO.js.map +1 -0
- package/dist/objects/DOBase.js +2309 -0
- package/dist/objects/DOBase.js.map +1 -0
- package/dist/objects/DOCache.js +153 -0
- package/dist/objects/DOCache.js.map +1 -0
- package/dist/objects/DOFull.js +1676 -0
- package/dist/objects/DOFull.js.map +1 -0
- package/dist/objects/DOTiny.js +207 -0
- package/dist/objects/DOTiny.js.map +1 -0
- package/dist/objects/Directory.js +199 -0
- package/dist/objects/Directory.js.map +1 -0
- package/dist/objects/Entity.js +413 -0
- package/dist/objects/Entity.js.map +1 -0
- package/dist/objects/Function.js +116 -0
- package/dist/objects/Function.js.map +1 -0
- package/dist/objects/Human.js +231 -0
- package/dist/objects/Human.js.map +1 -0
- package/dist/objects/HumanFunctionExecutor.js +8 -0
- package/dist/objects/HumanFunctionExecutor.js.map +1 -0
- package/dist/objects/IcebergMetadataDO.js +938 -0
- package/dist/objects/IcebergMetadataDO.js.map +1 -0
- package/dist/objects/IntegrationsDO.js +1174 -0
- package/dist/objects/IntegrationsDO.js.map +1 -0
- package/dist/objects/ObservabilityBroadcaster.js +149 -0
- package/dist/objects/ObservabilityBroadcaster.js.map +1 -0
- package/dist/objects/Package.js +154 -0
- package/dist/objects/Package.js.map +1 -0
- package/dist/objects/Product.js +193 -0
- package/dist/objects/Product.js.map +1 -0
- package/dist/objects/SDK.js +152 -0
- package/dist/objects/SDK.js.map +1 -0
- package/dist/objects/SaaS.js +235 -0
- package/dist/objects/SaaS.js.map +1 -0
- package/dist/objects/SandboxDO.js +759 -0
- package/dist/objects/SandboxDO.js.map +1 -0
- package/dist/objects/Service.js +337 -0
- package/dist/objects/Service.js.map +1 -0
- package/dist/objects/Site.js +80 -0
- package/dist/objects/Site.js.map +1 -0
- package/dist/objects/Startup.js +479 -0
- package/dist/objects/Startup.js.map +1 -0
- package/dist/objects/ThingsDO.js +170 -0
- package/dist/objects/ThingsDO.js.map +1 -0
- package/dist/objects/VectorShardDO.js +650 -0
- package/dist/objects/VectorShardDO.js.map +1 -0
- package/dist/objects/Worker.js +144 -0
- package/dist/objects/Worker.js.map +1 -0
- package/dist/objects/Workflow.js +196 -0
- package/dist/objects/Workflow.js.map +1 -0
- package/dist/objects/WorkflowFactory.js +313 -0
- package/dist/objects/WorkflowFactory.js.map +1 -0
- package/dist/objects/WorkflowRuntime.js +863 -0
- package/dist/objects/WorkflowRuntime.js.map +1 -0
- package/dist/objects/circuit-breaker-bulkhead.js +178 -0
- package/dist/objects/circuit-breaker-bulkhead.js.map +1 -0
- package/dist/objects/createFunction.js +934 -0
- package/dist/objects/createFunction.js.map +1 -0
- package/dist/objects/index.js +80 -0
- package/dist/objects/index.js.map +1 -0
- package/dist/objects/lifecycle/Branch.js +275 -0
- package/dist/objects/lifecycle/Branch.js.map +1 -0
- package/dist/objects/lifecycle/Clone.js +1499 -0
- package/dist/objects/lifecycle/Clone.js.map +1 -0
- package/dist/objects/lifecycle/Compact.js +237 -0
- package/dist/objects/lifecycle/Compact.js.map +1 -0
- package/dist/objects/lifecycle/Promote.js +476 -0
- package/dist/objects/lifecycle/Promote.js.map +1 -0
- package/dist/objects/lifecycle/Shard.js +560 -0
- package/dist/objects/lifecycle/Shard.js.map +1 -0
- package/dist/objects/lifecycle/index.js +15 -0
- package/dist/objects/lifecycle/index.js.map +1 -0
- package/dist/objects/lifecycle/types.js +33 -0
- package/dist/objects/lifecycle/types.js.map +1 -0
- package/dist/objects/mixins/infrastructure.js +171 -0
- package/dist/objects/mixins/infrastructure.js.map +1 -0
- package/dist/objects/modules/StoresModule.js +153 -0
- package/dist/objects/modules/StoresModule.js.map +1 -0
- package/dist/objects/persistence/checkpoint-manager.js +606 -0
- package/dist/objects/persistence/checkpoint-manager.js.map +1 -0
- package/dist/objects/persistence/index.js +72 -0
- package/dist/objects/persistence/index.js.map +1 -0
- package/dist/objects/persistence/migration-runner.js +562 -0
- package/dist/objects/persistence/migration-runner.js.map +1 -0
- package/dist/objects/persistence/replication-manager.js +501 -0
- package/dist/objects/persistence/replication-manager.js.map +1 -0
- package/dist/objects/persistence/tiered-storage-manager.js +595 -0
- package/dist/objects/persistence/tiered-storage-manager.js.map +1 -0
- package/dist/objects/persistence/types.js +14 -0
- package/dist/objects/persistence/types.js.map +1 -0
- package/dist/objects/persistence/wal-manager.js +653 -0
- package/dist/objects/persistence/wal-manager.js.map +1 -0
- package/dist/objects/presets/index.js +20 -0
- package/dist/objects/presets/index.js.map +1 -0
- package/dist/objects/presets/primitives.js +188 -0
- package/dist/objects/presets/primitives.js.map +1 -0
- package/dist/objects/primitives/alarm-adapter.js +141 -0
- package/dist/objects/primitives/alarm-adapter.js.map +1 -0
- package/dist/objects/primitives/index.js +337 -0
- package/dist/objects/primitives/index.js.map +1 -0
- package/dist/objects/primitives/storage-adapter.js +182 -0
- package/dist/objects/primitives/storage-adapter.js.map +1 -0
- package/dist/objects/primitives/with-primitives.js +102 -0
- package/dist/objects/primitives/with-primitives.js.map +1 -0
- package/dist/objects/services/StoreManager.js +227 -0
- package/dist/objects/services/StoreManager.js.map +1 -0
- package/dist/objects/services/index.js +13 -0
- package/dist/objects/services/index.js.map +1 -0
- package/dist/objects/transport/auth-layer.js +1451 -0
- package/dist/objects/transport/auth-layer.js.map +1 -0
- package/dist/objects/transport/capnweb-target.js +355 -0
- package/dist/objects/transport/capnweb-target.js.map +1 -0
- package/dist/objects/transport/chain.js +441 -0
- package/dist/objects/transport/chain.js.map +1 -0
- package/dist/objects/transport/handler.js +58 -0
- package/dist/objects/transport/handler.js.map +1 -0
- package/dist/objects/transport/index.js +53 -0
- package/dist/objects/transport/index.js.map +1 -0
- package/dist/objects/transport/mcp-server.js +691 -0
- package/dist/objects/transport/mcp-server.js.map +1 -0
- package/dist/objects/transport/rest-autowire.js +1508 -0
- package/dist/objects/transport/rest-autowire.js.map +1 -0
- package/dist/objects/transport/rest-router.js +440 -0
- package/dist/objects/transport/rest-router.js.map +1 -0
- package/dist/objects/transport/rpc-server.js +1539 -0
- package/dist/objects/transport/rpc-server.js.map +1 -0
- package/dist/objects/transport/shared.js +576 -0
- package/dist/objects/transport/shared.js.map +1 -0
- package/dist/objects/transport/sync-engine.js +291 -0
- package/dist/objects/transport/sync-engine.js.map +1 -0
- package/dist/objects/transport/types.js +8 -0
- package/dist/objects/transport/types.js.map +1 -0
- package/dist/sandbox/index.js +258 -0
- package/dist/sandbox/index.js.map +1 -0
- package/dist/snippets/artifacts-config.js +241 -0
- package/dist/snippets/artifacts-config.js.map +1 -0
- package/dist/snippets/artifacts-ingest.js +832 -0
- package/dist/snippets/artifacts-ingest.js.map +1 -0
- package/dist/snippets/artifacts-serve.js +1035 -0
- package/dist/snippets/artifacts-serve.js.map +1 -0
- package/dist/snippets/artifacts-types.js +161 -0
- package/dist/snippets/artifacts-types.js.map +1 -0
- package/dist/snippets/cache-probe.js +376 -0
- package/dist/snippets/cache-probe.js.map +1 -0
- package/dist/snippets/cache.js +10 -0
- package/dist/snippets/cache.js.map +1 -0
- package/dist/snippets/events.js +469 -0
- package/dist/snippets/events.js.map +1 -0
- package/dist/snippets/index.js +7 -0
- package/dist/snippets/index.js.map +1 -0
- package/dist/snippets/proxy.js +495 -0
- package/dist/snippets/proxy.js.map +1 -0
- package/dist/snippets/search.js +1759 -0
- package/dist/snippets/search.js.map +1 -0
- package/dist/streams/index.js +30 -0
- package/dist/streams/index.js.map +1 -0
- package/dist/streams/observability.js +68 -0
- package/dist/streams/observability.js.map +1 -0
- package/dist/types/AI.js +92 -0
- package/dist/types/AI.js.map +1 -0
- package/dist/types/AIFunction.js +171 -0
- package/dist/types/AIFunction.js.map +1 -0
- package/dist/types/BrowseVerb.js +89 -0
- package/dist/types/BrowseVerb.js.map +1 -0
- package/dist/types/Browser.js +31 -0
- package/dist/types/Browser.js.map +1 -0
- package/dist/types/Chaos.js +15 -0
- package/dist/types/Chaos.js.map +1 -0
- package/dist/types/CloudflareBindings.js +109 -0
- package/dist/types/CloudflareBindings.js.map +1 -0
- package/dist/types/Collection.js +50 -0
- package/dist/types/Collection.js.map +1 -0
- package/dist/types/DO.js +2 -0
- package/dist/types/DO.js.map +1 -0
- package/dist/types/DOLocation.js +63 -0
- package/dist/types/DOLocation.js.map +1 -0
- package/dist/types/EventHandler.js +57 -0
- package/dist/types/EventHandler.js.map +1 -0
- package/dist/types/Experiment.js +33 -0
- package/dist/types/Experiment.js.map +1 -0
- package/dist/types/Flag.js +57 -0
- package/dist/types/Flag.js.map +1 -0
- package/dist/types/Lifecycle.js +13 -0
- package/dist/types/Lifecycle.js.map +1 -0
- package/dist/types/Location.js +169 -0
- package/dist/types/Location.js.map +1 -0
- package/dist/types/Noun.js +66 -0
- package/dist/types/Noun.js.map +1 -0
- package/dist/types/SessionEvent.js +194 -0
- package/dist/types/SessionEvent.js.map +1 -0
- package/dist/types/Thing.js +55 -0
- package/dist/types/Thing.js.map +1 -0
- package/dist/types/ThingDO.js +153 -0
- package/dist/types/ThingDO.js.map +1 -0
- package/dist/types/Things.js +2 -0
- package/dist/types/Things.js.map +1 -0
- package/dist/types/Verb.js +119 -0
- package/dist/types/Verb.js.map +1 -0
- package/dist/types/WorkflowContext.js +70 -0
- package/dist/types/WorkflowContext.js.map +1 -0
- package/dist/types/analytics-api.js +13 -0
- package/dist/types/analytics-api.js.map +1 -0
- package/dist/types/capabilities.js +135 -0
- package/dist/types/capabilities.js.map +1 -0
- package/dist/types/drizzle.js +12 -0
- package/dist/types/drizzle.js.map +1 -0
- package/dist/types/event.js +201 -0
- package/dist/types/event.js.map +1 -0
- package/dist/types/fn.js +12 -0
- package/dist/types/fn.js.map +1 -0
- package/dist/types/iceberg.js +48 -0
- package/dist/types/iceberg.js.map +1 -0
- package/dist/types/ids.js +170 -0
- package/dist/types/ids.js.map +1 -0
- package/dist/types/index.js +41 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/introspect.js +54 -0
- package/dist/types/introspect.js.map +1 -0
- package/dist/types/observability.js +124 -0
- package/dist/types/observability.js.map +1 -0
- package/dist/types/sync-protocol.js +175 -0
- package/dist/types/sync-protocol.js.map +1 -0
- package/dist/types/vector.js +13 -0
- package/dist/types/vector.js.map +1 -0
- package/dist/workflows/ScheduleManager.js +473 -0
- package/dist/workflows/ScheduleManager.js.map +1 -0
- package/dist/workflows/StepDOBridge.js +149 -0
- package/dist/workflows/StepDOBridge.js.map +1 -0
- package/dist/workflows/StepResultStorage.js +232 -0
- package/dist/workflows/StepResultStorage.js.map +1 -0
- package/dist/workflows/WaitForEventManager.js +461 -0
- package/dist/workflows/WaitForEventManager.js.map +1 -0
- package/dist/workflows/analyzer.js +332 -0
- package/dist/workflows/analyzer.js.map +1 -0
- package/dist/workflows/compat/activity-router.js +484 -0
- package/dist/workflows/compat/activity-router.js.map +1 -0
- package/dist/workflows/compat/backends/cloudflare-workflows.js +431 -0
- package/dist/workflows/compat/backends/cloudflare-workflows.js.map +1 -0
- package/dist/workflows/compat/backends/index.js +14 -0
- package/dist/workflows/compat/backends/index.js.map +1 -0
- package/dist/workflows/compat/errors/index.js +375 -0
- package/dist/workflows/compat/errors/index.js.map +1 -0
- package/dist/workflows/compat/index.js +79 -0
- package/dist/workflows/compat/index.js.map +1 -0
- package/dist/workflows/compat/inngest/index.js +989 -0
- package/dist/workflows/compat/inngest/index.js.map +1 -0
- package/dist/workflows/compat/qstash/index.js +1263 -0
- package/dist/workflows/compat/qstash/index.js.map +1 -0
- package/dist/workflows/compat/temporal/activities.js +739 -0
- package/dist/workflows/compat/temporal/activities.js.map +1 -0
- package/dist/workflows/compat/temporal/child-workflows.js +154 -0
- package/dist/workflows/compat/temporal/child-workflows.js.map +1 -0
- package/dist/workflows/compat/temporal/client.js +381 -0
- package/dist/workflows/compat/temporal/client.js.map +1 -0
- package/dist/workflows/compat/temporal/context.js +309 -0
- package/dist/workflows/compat/temporal/context.js.map +1 -0
- package/dist/workflows/compat/temporal/determinism.js +216 -0
- package/dist/workflows/compat/temporal/determinism.js.map +1 -0
- package/dist/workflows/compat/temporal/errors.js +128 -0
- package/dist/workflows/compat/temporal/errors.js.map +1 -0
- package/dist/workflows/compat/temporal/index.js +2464 -0
- package/dist/workflows/compat/temporal/index.js.map +1 -0
- package/dist/workflows/compat/temporal/saga.js +504 -0
- package/dist/workflows/compat/temporal/saga.js.map +1 -0
- package/dist/workflows/compat/temporal/signals.js +364 -0
- package/dist/workflows/compat/temporal/signals.js.map +1 -0
- package/dist/workflows/compat/temporal/storage.js +271 -0
- package/dist/workflows/compat/temporal/storage.js.map +1 -0
- package/dist/workflows/compat/temporal/timers.js +347 -0
- package/dist/workflows/compat/temporal/timers.js.map +1 -0
- package/dist/workflows/compat/temporal/types.js +7 -0
- package/dist/workflows/compat/temporal/types.js.map +1 -0
- package/dist/workflows/compat/temporal/unified-primitives.js +339 -0
- package/dist/workflows/compat/temporal/unified-primitives.js.map +1 -0
- package/dist/workflows/compat/trigger/index.js +468 -0
- package/dist/workflows/compat/trigger/index.js.map +1 -0
- package/dist/workflows/compat/utils/index.js +69 -0
- package/dist/workflows/compat/utils/index.js.map +1 -0
- package/dist/workflows/context/correlation-capability.js +266 -0
- package/dist/workflows/context/correlation-capability.js.map +1 -0
- package/dist/workflows/context/correlation.js +484 -0
- package/dist/workflows/context/correlation.js.map +1 -0
- package/dist/workflows/context/experiment.js +289 -0
- package/dist/workflows/context/experiment.js.map +1 -0
- package/dist/workflows/context/flag.js +244 -0
- package/dist/workflows/context/flag.js.map +1 -0
- package/dist/workflows/context/foundation.js +648 -0
- package/dist/workflows/context/foundation.js.map +1 -0
- package/dist/workflows/context/human-base.js +106 -0
- package/dist/workflows/context/human-base.js.map +1 -0
- package/dist/workflows/context/human.js +368 -0
- package/dist/workflows/context/human.js.map +1 -0
- package/dist/workflows/context/measure.js +354 -0
- package/dist/workflows/context/measure.js.map +1 -0
- package/dist/workflows/context/rate-limit.js +358 -0
- package/dist/workflows/context/rate-limit.js.map +1 -0
- package/dist/workflows/context/user.js +117 -0
- package/dist/workflows/context/user.js.map +1 -0
- package/dist/workflows/context/vault.js +360 -0
- package/dist/workflows/context/vault.js.map +1 -0
- package/dist/workflows/data/entity-events/entity-events.js +489 -0
- package/dist/workflows/data/entity-events/entity-events.js.map +1 -0
- package/dist/workflows/data/experiment/index.js +599 -0
- package/dist/workflows/data/experiment/index.js.map +1 -0
- package/dist/workflows/data/goal/context.js +558 -0
- package/dist/workflows/data/goal/context.js.map +1 -0
- package/dist/workflows/data/goal/index.js +32 -0
- package/dist/workflows/data/goal/index.js.map +1 -0
- package/dist/workflows/data/measure/index.js +840 -0
- package/dist/workflows/data/measure/index.js.map +1 -0
- package/dist/workflows/data/stream/index.js +1149 -0
- package/dist/workflows/data/stream/index.js.map +1 -0
- package/dist/workflows/data/track/context.js +883 -0
- package/dist/workflows/data/track/context.js.map +1 -0
- package/dist/workflows/data/track/index.js +15 -0
- package/dist/workflows/data/track/index.js.map +1 -0
- package/dist/workflows/data/view/context.js +864 -0
- package/dist/workflows/data/view/context.js.map +1 -0
- package/dist/workflows/domain.js +93 -0
- package/dist/workflows/domain.js.map +1 -0
- package/dist/workflows/flag.js +176 -0
- package/dist/workflows/flag.js.map +1 -0
- package/dist/workflows/flags.js +217 -0
- package/dist/workflows/flags.js.map +1 -0
- package/dist/workflows/hash.js +209 -0
- package/dist/workflows/hash.js.map +1 -0
- package/dist/workflows/index.js +50 -0
- package/dist/workflows/index.js.map +1 -0
- package/dist/workflows/on.js +378 -0
- package/dist/workflows/on.js.map +1 -0
- package/dist/workflows/pipeline-promise.js +481 -0
- package/dist/workflows/pipeline-promise.js.map +1 -0
- package/dist/workflows/pipeline-types.js +20 -0
- package/dist/workflows/pipeline-types.js.map +1 -0
- package/dist/workflows/proxy.js +76 -0
- package/dist/workflows/proxy.js.map +1 -0
- package/dist/workflows/runtime.js +310 -0
- package/dist/workflows/runtime.js.map +1 -0
- package/dist/workflows/schedule-builder.js +327 -0
- package/dist/workflows/schedule-builder.js.map +1 -0
- package/dist/workflows/visibility/index.js +146 -0
- package/dist/workflows/visibility/index.js.map +1 -0
- package/dist/workflows/visibility/query-parser.js +150 -0
- package/dist/workflows/visibility/query-parser.js.map +1 -0
- package/dist/workflows/visibility/store.js +223 -0
- package/dist/workflows/visibility/store.js.map +1 -0
- package/dist/workflows/visibility/types.js +30 -0
- package/dist/workflows/visibility/types.js.map +1 -0
- package/dist/workflows/workflow.js +53 -0
- package/dist/workflows/workflow.js.map +1 -0
- package/package.json +294 -46
|
@@ -0,0 +1,337 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DO Primitives Integration
|
|
3
|
+
*
|
|
4
|
+
* Integrates the unified primitives (TemporalStore, WindowManager,
|
|
5
|
+
* ExactlyOnceContext, TypedColumnStore) into the Durable Object architecture.
|
|
6
|
+
*
|
|
7
|
+
* Provides a factory that creates DO-backed primitives with:
|
|
8
|
+
* - Automatic persistence to DO storage
|
|
9
|
+
* - Alarm integration for time-based triggers
|
|
10
|
+
* - Proper initialization and cleanup
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* class MyDO extends DO {
|
|
15
|
+
* async handleRequest(req: Request) {
|
|
16
|
+
* // Get primitives via factory
|
|
17
|
+
* const primitives = createDOPrimitiveFactory(this.ctx, this.env)
|
|
18
|
+
*
|
|
19
|
+
* // Create a temporal store for events
|
|
20
|
+
* const eventStore = primitives.temporal<Event>('events')
|
|
21
|
+
* await eventStore.put('event-1', event, Date.now())
|
|
22
|
+
*
|
|
23
|
+
* // Create a window manager for aggregation
|
|
24
|
+
* const windowMgr = primitives.window('tumbling', { size: { minutes: 5 } })
|
|
25
|
+
* windowMgr.process(metric, Date.now())
|
|
26
|
+
* }
|
|
27
|
+
* }
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
import { createTemporalStore, WindowManager, hours, minutes, seconds, milliseconds, createExactlyOnceContext, createColumnStore, EventTimeTrigger, CountTrigger, ProcessingTimeTrigger, } from '../../db/primitives';
|
|
31
|
+
import { createDOStorageAdapter, createTemporalStorageAdapter, createExactlyOnceStorageAdapter, } from './storage-adapter';
|
|
32
|
+
import { createDOAlarmAdapter, createWindowAlarmIntegration, } from './alarm-adapter';
|
|
33
|
+
// Re-export adapters for direct usage
|
|
34
|
+
export * from './storage-adapter';
|
|
35
|
+
export * from './alarm-adapter';
|
|
36
|
+
// ============================================================================
|
|
37
|
+
// Implementation
|
|
38
|
+
// ============================================================================
|
|
39
|
+
/**
|
|
40
|
+
* Convert DurationSpec to duration object
|
|
41
|
+
*/
|
|
42
|
+
function toDuration(spec) {
|
|
43
|
+
if (spec.hours)
|
|
44
|
+
return hours(spec.hours);
|
|
45
|
+
if (spec.minutes)
|
|
46
|
+
return minutes(spec.minutes);
|
|
47
|
+
if (spec.seconds)
|
|
48
|
+
return seconds(spec.seconds);
|
|
49
|
+
if (spec.milliseconds)
|
|
50
|
+
return milliseconds(spec.milliseconds);
|
|
51
|
+
throw new Error('Invalid duration spec: must specify hours, minutes, seconds, or milliseconds');
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* DO Primitive Factory implementation
|
|
55
|
+
*/
|
|
56
|
+
class DOPrimitiveFactoryImpl {
|
|
57
|
+
ctx;
|
|
58
|
+
env;
|
|
59
|
+
storageAdapter;
|
|
60
|
+
alarmAdapter;
|
|
61
|
+
windowIntegration;
|
|
62
|
+
// Instance caches for lazy initialization and reuse
|
|
63
|
+
temporalStores = new Map();
|
|
64
|
+
columnStores = new Map();
|
|
65
|
+
exactlyOnceCtx = null;
|
|
66
|
+
constructor(ctx, env) {
|
|
67
|
+
this.ctx = ctx;
|
|
68
|
+
this.env = env;
|
|
69
|
+
this.storageAdapter = createDOStorageAdapter(ctx.storage);
|
|
70
|
+
this.alarmAdapter = createDOAlarmAdapter(ctx);
|
|
71
|
+
this.windowIntegration = createWindowAlarmIntegration(this.alarmAdapter, ctx.storage);
|
|
72
|
+
}
|
|
73
|
+
temporal(name, options) {
|
|
74
|
+
const cached = this.temporalStores.get(name);
|
|
75
|
+
if (cached)
|
|
76
|
+
return cached;
|
|
77
|
+
// Create DO-backed temporal store
|
|
78
|
+
const storageAdapter = createTemporalStorageAdapter(this.ctx.storage, name);
|
|
79
|
+
const store = createDOBackedTemporalStore(storageAdapter, options);
|
|
80
|
+
this.temporalStores.set(name, store);
|
|
81
|
+
return store;
|
|
82
|
+
}
|
|
83
|
+
window(type, config) {
|
|
84
|
+
// Create window assigner based on type
|
|
85
|
+
let assigner;
|
|
86
|
+
switch (type) {
|
|
87
|
+
case 'tumbling':
|
|
88
|
+
if (!config.size)
|
|
89
|
+
throw new Error('Tumbling windows require a size');
|
|
90
|
+
assigner = WindowManager.tumbling(toDuration(config.size));
|
|
91
|
+
break;
|
|
92
|
+
case 'sliding':
|
|
93
|
+
if (!config.size || !config.slide)
|
|
94
|
+
throw new Error('Sliding windows require both size and slide');
|
|
95
|
+
assigner = WindowManager.sliding(toDuration(config.size), toDuration(config.slide));
|
|
96
|
+
break;
|
|
97
|
+
case 'session':
|
|
98
|
+
if (!config.gap)
|
|
99
|
+
throw new Error('Session windows require a gap');
|
|
100
|
+
assigner = WindowManager.session(toDuration(config.gap));
|
|
101
|
+
break;
|
|
102
|
+
case 'global':
|
|
103
|
+
assigner = WindowManager.global();
|
|
104
|
+
break;
|
|
105
|
+
default:
|
|
106
|
+
throw new Error(`Unknown window type: ${type}`);
|
|
107
|
+
}
|
|
108
|
+
const windowManager = new WindowManager(assigner);
|
|
109
|
+
// Configure trigger
|
|
110
|
+
if (config.trigger) {
|
|
111
|
+
let trigger;
|
|
112
|
+
if (config.trigger === 'eventTime') {
|
|
113
|
+
trigger = new EventTimeTrigger();
|
|
114
|
+
}
|
|
115
|
+
else if (config.trigger === 'count') {
|
|
116
|
+
trigger = new CountTrigger(1);
|
|
117
|
+
}
|
|
118
|
+
else if (config.trigger === 'processingTime') {
|
|
119
|
+
trigger = new ProcessingTimeTrigger(minutes(1));
|
|
120
|
+
}
|
|
121
|
+
else if ('count' in config.trigger) {
|
|
122
|
+
trigger = new CountTrigger(config.trigger.count);
|
|
123
|
+
}
|
|
124
|
+
else if ('interval' in config.trigger) {
|
|
125
|
+
trigger = new ProcessingTimeTrigger(toDuration(config.trigger.interval));
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
trigger = new EventTimeTrigger();
|
|
129
|
+
}
|
|
130
|
+
windowManager.withTrigger(trigger);
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
// Default to event time trigger
|
|
134
|
+
windowManager.withTrigger(new EventTimeTrigger());
|
|
135
|
+
}
|
|
136
|
+
// Configure key extractor
|
|
137
|
+
if (config.keyBy) {
|
|
138
|
+
windowManager.withKeyExtractor(config.keyBy);
|
|
139
|
+
}
|
|
140
|
+
// Integrate with DO alarms for automatic watermark advancement
|
|
141
|
+
const originalProcess = windowManager.process.bind(windowManager);
|
|
142
|
+
windowManager.process = (element, timestamp) => {
|
|
143
|
+
originalProcess(element, timestamp);
|
|
144
|
+
// Schedule alarm for any new windows that will need to trigger
|
|
145
|
+
const windows = windowManager.assign(element, timestamp);
|
|
146
|
+
for (const window of windows) {
|
|
147
|
+
// Schedule alarm slightly after window end
|
|
148
|
+
this.windowIntegration.scheduleWindowTrigger(window.end + 1);
|
|
149
|
+
}
|
|
150
|
+
};
|
|
151
|
+
// Register alarm handler for window triggers
|
|
152
|
+
this.alarmAdapter.onAlarm('window-trigger', async () => {
|
|
153
|
+
await this.windowIntegration.handleWindowAlarm((timestamp) => {
|
|
154
|
+
windowManager.advanceWatermark(timestamp);
|
|
155
|
+
});
|
|
156
|
+
});
|
|
157
|
+
return windowManager;
|
|
158
|
+
}
|
|
159
|
+
exactlyOnce(options) {
|
|
160
|
+
if (this.exactlyOnceCtx)
|
|
161
|
+
return this.exactlyOnceCtx;
|
|
162
|
+
// Create DO-backed exactly-once context
|
|
163
|
+
const storageAdapter = createExactlyOnceStorageAdapter(this.ctx.storage, 'default');
|
|
164
|
+
this.exactlyOnceCtx = createDOBackedExactlyOnceContext(storageAdapter, options);
|
|
165
|
+
return this.exactlyOnceCtx;
|
|
166
|
+
}
|
|
167
|
+
columns(name) {
|
|
168
|
+
const cached = this.columnStores.get(name);
|
|
169
|
+
if (cached)
|
|
170
|
+
return cached;
|
|
171
|
+
// Create column store (currently in-memory, persistence can be added later)
|
|
172
|
+
const store = createColumnStore();
|
|
173
|
+
this.columnStores.set(name, store);
|
|
174
|
+
return store;
|
|
175
|
+
}
|
|
176
|
+
alarms() {
|
|
177
|
+
return this.alarmAdapter;
|
|
178
|
+
}
|
|
179
|
+
storage() {
|
|
180
|
+
return this.storageAdapter;
|
|
181
|
+
}
|
|
182
|
+
async handleAlarm() {
|
|
183
|
+
await this.alarmAdapter.handleAlarm();
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Create a DO-backed temporal store
|
|
188
|
+
*/
|
|
189
|
+
function createDOBackedTemporalStore(storageAdapter, options) {
|
|
190
|
+
// Create the base in-memory temporal store
|
|
191
|
+
const memStore = createTemporalStore(options);
|
|
192
|
+
// Wrap with persistence layer
|
|
193
|
+
const store = {
|
|
194
|
+
async put(key, value, timestamp, opts) {
|
|
195
|
+
// Store in memory first
|
|
196
|
+
await memStore.put(key, value, timestamp, opts);
|
|
197
|
+
// Persist to DO storage
|
|
198
|
+
const versions = await storageAdapter.loadVersions(key);
|
|
199
|
+
const version = versions.length + 1;
|
|
200
|
+
await storageAdapter.saveVersion(key, value, timestamp, version, opts?.ttl ? timestamp + opts.ttl : undefined);
|
|
201
|
+
},
|
|
202
|
+
async get(key) {
|
|
203
|
+
// Try memory first
|
|
204
|
+
const memResult = await memStore.get(key);
|
|
205
|
+
if (memResult !== null)
|
|
206
|
+
return memResult;
|
|
207
|
+
// Fall back to storage
|
|
208
|
+
const versions = await storageAdapter.loadVersions(key);
|
|
209
|
+
if (versions.length === 0)
|
|
210
|
+
return null;
|
|
211
|
+
const lastVersion = versions[versions.length - 1];
|
|
212
|
+
return lastVersion ? lastVersion.value : null;
|
|
213
|
+
},
|
|
214
|
+
async getAsOf(key, timestamp) {
|
|
215
|
+
// Try memory first
|
|
216
|
+
const memResult = await memStore.getAsOf(key, timestamp);
|
|
217
|
+
if (memResult !== null)
|
|
218
|
+
return memResult;
|
|
219
|
+
// Fall back to storage
|
|
220
|
+
const versions = await storageAdapter.loadVersions(key);
|
|
221
|
+
for (let i = versions.length - 1; i >= 0; i--) {
|
|
222
|
+
const version = versions[i];
|
|
223
|
+
if (version && version.timestamp <= timestamp) {
|
|
224
|
+
return version.value;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
return null;
|
|
228
|
+
},
|
|
229
|
+
range(prefix, timeRange) {
|
|
230
|
+
// Delegate to memory store for now
|
|
231
|
+
return memStore.range(prefix, timeRange);
|
|
232
|
+
},
|
|
233
|
+
async snapshot() {
|
|
234
|
+
return memStore.snapshot();
|
|
235
|
+
},
|
|
236
|
+
async restoreSnapshot(id) {
|
|
237
|
+
return memStore.restoreSnapshot(id);
|
|
238
|
+
},
|
|
239
|
+
async listSnapshots() {
|
|
240
|
+
return memStore.listSnapshots();
|
|
241
|
+
},
|
|
242
|
+
async prune(policy) {
|
|
243
|
+
return memStore.prune(policy);
|
|
244
|
+
},
|
|
245
|
+
async compact(policy) {
|
|
246
|
+
return memStore.compact(policy);
|
|
247
|
+
},
|
|
248
|
+
getRetentionPolicy() {
|
|
249
|
+
return memStore.getRetentionPolicy();
|
|
250
|
+
},
|
|
251
|
+
setRetentionPolicy(policy) {
|
|
252
|
+
memStore.setRetentionPolicy(policy);
|
|
253
|
+
},
|
|
254
|
+
};
|
|
255
|
+
return store;
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Create a DO-backed exactly-once context
|
|
259
|
+
*/
|
|
260
|
+
function createDOBackedExactlyOnceContext(storageAdapter, options) {
|
|
261
|
+
// Create the base in-memory context
|
|
262
|
+
const memCtx = createExactlyOnceContext(options);
|
|
263
|
+
// Wrap with persistence layer
|
|
264
|
+
const ctx = {
|
|
265
|
+
async processOnce(eventId, fn) {
|
|
266
|
+
// Check storage for already processed
|
|
267
|
+
const processed = await storageAdapter.loadProcessedIds();
|
|
268
|
+
if (processed.has(eventId)) {
|
|
269
|
+
return processed.get(eventId).result;
|
|
270
|
+
}
|
|
271
|
+
// Process using memory context
|
|
272
|
+
const result = await memCtx.processOnce(eventId, fn);
|
|
273
|
+
// Persist to storage
|
|
274
|
+
await storageAdapter.markProcessed(eventId, Date.now(), result);
|
|
275
|
+
return result;
|
|
276
|
+
},
|
|
277
|
+
async isProcessed(eventId) {
|
|
278
|
+
// Check memory first
|
|
279
|
+
const memResult = await memCtx.isProcessed(eventId);
|
|
280
|
+
if (memResult)
|
|
281
|
+
return true;
|
|
282
|
+
// Check storage
|
|
283
|
+
const processed = await storageAdapter.loadProcessedIds();
|
|
284
|
+
return processed.has(eventId);
|
|
285
|
+
},
|
|
286
|
+
async transaction(fn) {
|
|
287
|
+
// Use memory context for transactions
|
|
288
|
+
const result = await memCtx.transaction(fn);
|
|
289
|
+
// Persist state changes
|
|
290
|
+
const state = (await memCtx.getCheckpointState()).state;
|
|
291
|
+
await storageAdapter.saveState(state);
|
|
292
|
+
return result;
|
|
293
|
+
},
|
|
294
|
+
emit(event) {
|
|
295
|
+
memCtx.emit(event);
|
|
296
|
+
},
|
|
297
|
+
async flush() {
|
|
298
|
+
return memCtx.flush();
|
|
299
|
+
},
|
|
300
|
+
async onBarrier(barrier) {
|
|
301
|
+
return memCtx.onBarrier(barrier);
|
|
302
|
+
},
|
|
303
|
+
async getCheckpointState() {
|
|
304
|
+
return memCtx.getCheckpointState();
|
|
305
|
+
},
|
|
306
|
+
async restoreFromCheckpoint(state) {
|
|
307
|
+
return memCtx.restoreFromCheckpoint(state);
|
|
308
|
+
},
|
|
309
|
+
getEpoch() {
|
|
310
|
+
return memCtx.getEpoch();
|
|
311
|
+
},
|
|
312
|
+
getBufferedEventCount() {
|
|
313
|
+
return memCtx.getBufferedEventCount();
|
|
314
|
+
},
|
|
315
|
+
async clear() {
|
|
316
|
+
return memCtx.clear();
|
|
317
|
+
},
|
|
318
|
+
};
|
|
319
|
+
return ctx;
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* Create a DO primitive factory
|
|
323
|
+
*
|
|
324
|
+
* @param ctx - Durable Object state
|
|
325
|
+
* @param env - Environment bindings
|
|
326
|
+
* @returns Primitive factory instance
|
|
327
|
+
*
|
|
328
|
+
* @example
|
|
329
|
+
* ```typescript
|
|
330
|
+
* const primitives = createDOPrimitiveFactory(this.ctx, this.env)
|
|
331
|
+
* const eventStore = primitives.temporal<Event>('events')
|
|
332
|
+
* ```
|
|
333
|
+
*/
|
|
334
|
+
export function createDOPrimitiveFactory(ctx, env) {
|
|
335
|
+
return new DOPrimitiveFactoryImpl(ctx, env);
|
|
336
|
+
}
|
|
337
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../objects/primitives/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,EACL,mBAAmB,EAGnB,aAAa,EAEb,KAAK,EACL,OAAO,EACP,OAAO,EACP,YAAY,EACZ,wBAAwB,EAGxB,iBAAiB,EAEjB,gBAAgB,EAChB,YAAY,EACZ,qBAAqB,GAGtB,MAAM,qBAAqB,CAAA;AAE5B,OAAO,EACL,sBAAsB,EACtB,4BAA4B,EAC5B,+BAA+B,GAEhC,MAAM,mBAAmB,CAAA;AAE1B,OAAO,EACL,oBAAoB,EACpB,4BAA4B,GAG7B,MAAM,iBAAiB,CAAA;AAExB,sCAAsC;AACtC,cAAc,mBAAmB,CAAA;AACjC,cAAc,iBAAiB,CAAA;AA+D/B,+EAA+E;AAC/E,iBAAiB;AACjB,+EAA+E;AAE/E;;GAEG;AACH,SAAS,UAAU,CAAC,IAAkB;IACpC,IAAI,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACxC,IAAI,IAAI,CAAC,OAAO;QAAE,OAAO,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAC9C,IAAI,IAAI,CAAC,OAAO;QAAE,OAAO,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAC9C,IAAI,IAAI,CAAC,YAAY;QAAE,OAAO,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;IAC7D,MAAM,IAAI,KAAK,CAAC,8EAA8E,CAAC,CAAA;AACjG,CAAC;AAED;;GAEG;AACH,MAAM,sBAAsB;IACT,GAAG,CAAoB;IACvB,GAAG,CAAS;IACZ,cAAc,CAAkB;IAChC,YAAY,CAAgB;IAC5B,iBAAiB,CAAwB;IAE1D,oDAAoD;IACnC,cAAc,GAAG,IAAI,GAAG,EAAkC,CAAA;IAC1D,YAAY,GAAG,IAAI,GAAG,EAA4B,CAAA;IAC3D,cAAc,GAAuC,IAAI,CAAA;IAEjE,YAAY,GAAuB,EAAE,GAAY;QAC/C,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;QACd,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;QACd,IAAI,CAAC,cAAc,GAAG,sBAAsB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QACzD,IAAI,CAAC,YAAY,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAA;QAC7C,IAAI,CAAC,iBAAiB,GAAG,4BAA4B,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;IACvF,CAAC;IAED,QAAQ,CAAI,IAAY,EAAE,OAA8B;QACtD,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAC5C,IAAI,MAAM;YAAE,OAAO,MAA0B,CAAA;QAE7C,kCAAkC;QAClC,MAAM,cAAc,GAAG,4BAA4B,CAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;QAC9E,MAAM,KAAK,GAAG,2BAA2B,CAAI,cAAc,EAAE,OAAO,CAAC,CAAA;QAErE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,EAAE,KAA+B,CAAC,CAAA;QAC9D,OAAO,KAAK,CAAA;IACd,CAAC;IAED,MAAM,CAAI,IAAgB,EAAE,MAAoB;QAC9C,uCAAuC;QACvC,IAAI,QAA2B,CAAA;QAE/B,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,UAAU;gBACb,IAAI,CAAC,MAAM,CAAC,IAAI;oBAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAA;gBACpE,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAI,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAA;gBAC7D,MAAK;YAEP,KAAK,SAAS;gBACZ,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK;oBAC/B,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAA;gBAChE,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAI,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;gBACtF,MAAK;YAEP,KAAK,SAAS;gBACZ,IAAI,CAAC,MAAM,CAAC,GAAG;oBAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAA;gBACjE,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAI,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;gBAC3D,MAAK;YAEP,KAAK,QAAQ;gBACX,QAAQ,GAAG,aAAa,CAAC,MAAM,EAAK,CAAA;gBACpC,MAAK;YAEP;gBACE,MAAM,IAAI,KAAK,CAAC,wBAAwB,IAAI,EAAE,CAAC,CAAA;QACnD,CAAC;QAED,MAAM,aAAa,GAAG,IAAI,aAAa,CAAI,QAAQ,CAAC,CAAA;QAEpD,oBAAoB;QACpB,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,IAAI,OAAmB,CAAA;YAEvB,IAAI,MAAM,CAAC,OAAO,KAAK,WAAW,EAAE,CAAC;gBACnC,OAAO,GAAG,IAAI,gBAAgB,EAAK,CAAA;YACrC,CAAC;iBAAM,IAAI,MAAM,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;gBACtC,OAAO,GAAG,IAAI,YAAY,CAAI,CAAC,CAAC,CAAA;YAClC,CAAC;iBAAM,IAAI,MAAM,CAAC,OAAO,KAAK,gBAAgB,EAAE,CAAC;gBAC/C,OAAO,GAAG,IAAI,qBAAqB,CAAI,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;YACpD,CAAC;iBAAM,IAAI,OAAO,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACrC,OAAO,GAAG,IAAI,YAAY,CAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;YACrD,CAAC;iBAAM,IAAI,UAAU,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACxC,OAAO,GAAG,IAAI,qBAAqB,CAAI,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAA;YAC7E,CAAC;iBAAM,CAAC;gBACN,OAAO,GAAG,IAAI,gBAAgB,EAAK,CAAA;YACrC,CAAC;YAED,aAAa,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;QACpC,CAAC;aAAM,CAAC;YACN,gCAAgC;YAChC,aAAa,CAAC,WAAW,CAAC,IAAI,gBAAgB,EAAK,CAAC,CAAA;QACtD,CAAC;QAED,0BAA0B;QAC1B,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,aAAa,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAA+B,CAAC,CAAA;QACxE,CAAC;QAED,+DAA+D;QAC/D,MAAM,eAAe,GAAG,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;QACjE,aAAa,CAAC,OAAO,GAAG,CAAC,OAAU,EAAE,SAAiB,EAAE,EAAE;YACxD,eAAe,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;YAEnC,+DAA+D;YAC/D,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;YACxD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,2CAA2C;gBAC3C,IAAI,CAAC,iBAAiB,CAAC,qBAAqB,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAA;YAC9D,CAAC;QACH,CAAC,CAAA;QAED,6CAA6C;QAC7C,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,gBAAgB,EAAE,KAAK,IAAI,EAAE;YACrD,MAAM,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAAC,SAAS,EAAE,EAAE;gBAC3D,aAAa,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAA;YAC3C,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,OAAO,aAAa,CAAA;IACtB,CAAC;IAED,WAAW,CAAC,OAAmC;QAC7C,IAAI,IAAI,CAAC,cAAc;YAAE,OAAO,IAAI,CAAC,cAAc,CAAA;QAEnD,wCAAwC;QACxC,MAAM,cAAc,GAAG,+BAA+B,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;QACnF,IAAI,CAAC,cAAc,GAAG,gCAAgC,CAAC,cAAc,EAAE,OAAO,CAAC,CAAA;QAE/E,OAAO,IAAI,CAAC,cAAc,CAAA;IAC5B,CAAC;IAED,OAAO,CAAC,IAAY;QAClB,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAC1C,IAAI,MAAM;YAAE,OAAO,MAAM,CAAA;QAEzB,4EAA4E;QAC5E,MAAM,KAAK,GAAG,iBAAiB,EAAE,CAAA;QAEjC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;QAClC,OAAO,KAAK,CAAA;IACd,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,YAAY,CAAA;IAC1B,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,cAAc,CAAA;IAC5B,CAAC;IAED,KAAK,CAAC,WAAW;QACf,MAAM,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAA;IACvC,CAAC;CACF;AAED;;GAEG;AACH,SAAS,2BAA2B,CAClC,cAAkE,EAClE,OAA8B;IAE9B,2CAA2C;IAC3C,MAAM,QAAQ,GAAG,mBAAmB,CAAI,OAAO,CAAC,CAAA;IAEhD,8BAA8B;IAC9B,MAAM,KAAK,GAAqB;QAC9B,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,KAAQ,EAAE,SAAiB,EAAE,IAAuB;YACzE,wBAAwB;YACxB,MAAM,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,CAAA;YAE/C,wBAAwB;YACxB,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;YACvD,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAA;YACnC,MAAM,cAAc,CAAC,WAAW,CAC9B,GAAG,EACH,KAAK,EACL,SAAS,EACT,OAAO,EACP,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAC7C,CAAA;QACH,CAAC;QAED,KAAK,CAAC,GAAG,CAAC,GAAW;YACnB,mBAAmB;YACnB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YACzC,IAAI,SAAS,KAAK,IAAI;gBAAE,OAAO,SAAS,CAAA;YAExC,uBAAuB;YACvB,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;YACvD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,IAAI,CAAA;YACtC,MAAM,WAAW,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;YACjD,OAAO,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAA;QAC/C,CAAC;QAED,KAAK,CAAC,OAAO,CAAC,GAAW,EAAE,SAAiB;YAC1C,mBAAmB;YACnB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,CAAA;YACxD,IAAI,SAAS,KAAK,IAAI;gBAAE,OAAO,SAAS,CAAA;YAExC,uBAAuB;YACvB,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;YACvD,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC9C,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;gBAC3B,IAAI,OAAO,IAAI,OAAO,CAAC,SAAS,IAAI,SAAS,EAAE,CAAC;oBAC9C,OAAO,OAAO,CAAC,KAAK,CAAA;gBACtB,CAAC;YACH,CAAC;YACD,OAAO,IAAI,CAAA;QACb,CAAC;QAED,KAAK,CAAC,MAAc,EAAE,SAA2C;YAC/D,mCAAmC;YACnC,OAAO,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;QAC1C,CAAC;QAED,KAAK,CAAC,QAAQ;YACZ,OAAO,QAAQ,CAAC,QAAQ,EAAE,CAAA;QAC5B,CAAC;QAED,KAAK,CAAC,eAAe,CAAC,EAAU;YAC9B,OAAO,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,CAAA;QACrC,CAAC;QAED,KAAK,CAAC,aAAa;YACjB,OAAO,QAAQ,CAAC,aAAa,EAAE,CAAA;QACjC,CAAC;QAED,KAAK,CAAC,KAAK,CAAC,MAAM;YAChB,OAAO,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;QAC/B,CAAC;QAED,KAAK,CAAC,OAAO,CAAC,MAAM;YAClB,OAAO,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;QACjC,CAAC;QAED,kBAAkB;YAChB,OAAO,QAAQ,CAAC,kBAAkB,EAAE,CAAA;QACtC,CAAC;QAED,kBAAkB,CAAC,MAAM;YACvB,QAAQ,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAA;QACrC,CAAC;KACF,CAAA;IAED,OAAO,KAAK,CAAA;AACd,CAAC;AAED;;GAEG;AACH,SAAS,gCAAgC,CACvC,cAAkE,EAClE,OAAmC;IAEnC,oCAAoC;IACpC,MAAM,MAAM,GAAG,wBAAwB,CAAC,OAAO,CAAC,CAAA;IAEhD,8BAA8B;IAC9B,MAAM,GAAG,GAAgC;QACvC,KAAK,CAAC,WAAW,CAAI,OAAe,EAAE,EAAoB;YACxD,sCAAsC;YACtC,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC,gBAAgB,EAAE,CAAA;YACzD,IAAI,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC3B,OAAO,SAAS,CAAC,GAAG,CAAC,OAAO,CAAE,CAAC,MAAW,CAAA;YAC5C,CAAC;YAED,+BAA+B;YAC/B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE,CAAC,CAAA;YAEpD,qBAAqB;YACrB,MAAM,cAAc,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAA;YAE/D,OAAO,MAAM,CAAA;QACf,CAAC;QAED,KAAK,CAAC,WAAW,CAAC,OAAe;YAC/B,qBAAqB;YACrB,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;YACnD,IAAI,SAAS;gBAAE,OAAO,IAAI,CAAA;YAE1B,gBAAgB;YAChB,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC,gBAAgB,EAAE,CAAA;YACzD,OAAO,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QAC/B,CAAC;QAED,KAAK,CAAC,WAAW,CAAI,EAA2B;YAC9C,sCAAsC;YACtC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;YAE3C,wBAAwB;YACxB,MAAM,KAAK,GAAG,CAAC,MAAM,MAAM,CAAC,kBAAkB,EAAE,CAAC,CAAC,KAAK,CAAA;YACvD,MAAM,cAAc,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;YAErC,OAAO,MAAM,CAAA;QACf,CAAC;QAED,IAAI,CAAC,KAAc;YACjB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACpB,CAAC;QAED,KAAK,CAAC,KAAK;YACT,OAAO,MAAM,CAAC,KAAK,EAAE,CAAA;QACvB,CAAC;QAED,KAAK,CAAC,SAAS,CAAC,OAAO;YACrB,OAAO,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;QAClC,CAAC;QAED,KAAK,CAAC,kBAAkB;YACtB,OAAO,MAAM,CAAC,kBAAkB,EAAE,CAAA;QACpC,CAAC;QAED,KAAK,CAAC,qBAAqB,CAAC,KAAK;YAC/B,OAAO,MAAM,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAA;QAC5C,CAAC;QAED,QAAQ;YACN,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAA;QAC1B,CAAC;QAED,qBAAqB;YACnB,OAAO,MAAM,CAAC,qBAAqB,EAAE,CAAA;QACvC,CAAC;QAED,KAAK,CAAC,KAAK;YACT,OAAO,MAAM,CAAC,KAAK,EAAE,CAAA;QACvB,CAAC;KACF,CAAA;IAED,OAAO,GAAG,CAAA;AACZ,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,wBAAwB,CAAC,GAAuB,EAAE,GAAY;IAC5E,OAAO,IAAI,sBAAsB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;AAC7C,CAAC"}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DO Storage Adapter
|
|
3
|
+
*
|
|
4
|
+
* Adapts Durable Object storage to work with the unified primitives.
|
|
5
|
+
* Provides a consistent interface for primitives to persist their state
|
|
6
|
+
* using DO's built-in storage mechanisms.
|
|
7
|
+
*
|
|
8
|
+
* Key features:
|
|
9
|
+
* - Namespaced key storage to avoid collisions
|
|
10
|
+
* - Batch operations for efficiency
|
|
11
|
+
* - Serialization/deserialization handling
|
|
12
|
+
* - SQL storage support for complex queries
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* Internal prefix for DO storage keys
|
|
16
|
+
*/
|
|
17
|
+
const DEFAULT_NAMESPACE = 'primitives';
|
|
18
|
+
/**
|
|
19
|
+
* DO Storage Adapter implementation
|
|
20
|
+
*/
|
|
21
|
+
class DOStorageAdapterImpl {
|
|
22
|
+
storage;
|
|
23
|
+
namespace;
|
|
24
|
+
useSql;
|
|
25
|
+
constructor(storage, options) {
|
|
26
|
+
this.storage = storage;
|
|
27
|
+
this.namespace = options?.namespace ?? DEFAULT_NAMESPACE;
|
|
28
|
+
this.useSql = options?.useSql ?? false;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Get the prefixed key for DO storage
|
|
32
|
+
*/
|
|
33
|
+
prefixKey(key) {
|
|
34
|
+
return `${this.namespace}:${key}`;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Remove prefix from key
|
|
38
|
+
*/
|
|
39
|
+
unprefixKey(prefixedKey) {
|
|
40
|
+
const prefix = `${this.namespace}:`;
|
|
41
|
+
return prefixedKey.startsWith(prefix) ? prefixedKey.slice(prefix.length) : prefixedKey;
|
|
42
|
+
}
|
|
43
|
+
async get(key) {
|
|
44
|
+
return this.storage.get(this.prefixKey(key));
|
|
45
|
+
}
|
|
46
|
+
async put(key, value) {
|
|
47
|
+
await this.storage.put(this.prefixKey(key), value);
|
|
48
|
+
}
|
|
49
|
+
async delete(key) {
|
|
50
|
+
return this.storage.delete(this.prefixKey(key));
|
|
51
|
+
}
|
|
52
|
+
async list(prefix) {
|
|
53
|
+
const fullPrefix = prefix ? this.prefixKey(prefix) : `${this.namespace}:`;
|
|
54
|
+
const entries = await this.storage.list({ prefix: fullPrefix });
|
|
55
|
+
// Convert to Map with unprefixed keys
|
|
56
|
+
const result = new Map();
|
|
57
|
+
for (const [key, value] of entries) {
|
|
58
|
+
result.set(this.unprefixKey(key), value);
|
|
59
|
+
}
|
|
60
|
+
return result;
|
|
61
|
+
}
|
|
62
|
+
async putMany(entries) {
|
|
63
|
+
if (entries.length === 0)
|
|
64
|
+
return;
|
|
65
|
+
// Convert to object for batch put
|
|
66
|
+
const batch = {};
|
|
67
|
+
for (const { key, value } of entries) {
|
|
68
|
+
batch[this.prefixKey(key)] = value;
|
|
69
|
+
}
|
|
70
|
+
await this.storage.put(batch);
|
|
71
|
+
}
|
|
72
|
+
async deleteMany(keys) {
|
|
73
|
+
if (keys.length === 0)
|
|
74
|
+
return;
|
|
75
|
+
await this.storage.delete(keys.map((k) => this.prefixKey(k)));
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Create a storage adapter for DO primitives
|
|
80
|
+
*
|
|
81
|
+
* @param storage - Durable Object storage instance
|
|
82
|
+
* @param options - Adapter configuration options
|
|
83
|
+
* @returns Storage adapter compatible with primitives
|
|
84
|
+
*/
|
|
85
|
+
export function createDOStorageAdapter(storage, options) {
|
|
86
|
+
return new DOStorageAdapterImpl(storage, options);
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Create a temporal storage adapter
|
|
90
|
+
*/
|
|
91
|
+
export function createTemporalStorageAdapter(storage, storeName) {
|
|
92
|
+
const prefix = `primitives:temporal:${storeName}:`;
|
|
93
|
+
return {
|
|
94
|
+
async loadVersions(key) {
|
|
95
|
+
const entries = await storage.list({ prefix: `${prefix}versions:${key}:` });
|
|
96
|
+
const versions = [];
|
|
97
|
+
for (const [, entry] of entries) {
|
|
98
|
+
versions.push({
|
|
99
|
+
value: entry.value,
|
|
100
|
+
timestamp: entry.timestamp,
|
|
101
|
+
version: entry.version,
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
// Sort by timestamp
|
|
105
|
+
versions.sort((a, b) => a.timestamp - b.timestamp);
|
|
106
|
+
return versions;
|
|
107
|
+
},
|
|
108
|
+
async saveVersion(key, value, timestamp, version, expiresAt) {
|
|
109
|
+
await storage.put(`${prefix}versions:${key}:${version}`, {
|
|
110
|
+
value,
|
|
111
|
+
timestamp,
|
|
112
|
+
version,
|
|
113
|
+
expiresAt,
|
|
114
|
+
});
|
|
115
|
+
},
|
|
116
|
+
async pruneVersions(key, olderThan) {
|
|
117
|
+
const entries = await storage.list({ prefix: `${prefix}versions:${key}:` });
|
|
118
|
+
const keysToDelete = [];
|
|
119
|
+
for (const [storageKey, entry] of entries) {
|
|
120
|
+
if (entry.timestamp < olderThan) {
|
|
121
|
+
keysToDelete.push(storageKey);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
if (keysToDelete.length > 0) {
|
|
125
|
+
await storage.delete(keysToDelete);
|
|
126
|
+
}
|
|
127
|
+
return keysToDelete.length;
|
|
128
|
+
},
|
|
129
|
+
async loadSnapshots() {
|
|
130
|
+
return storage.list({ prefix: `${prefix}snapshots:` });
|
|
131
|
+
},
|
|
132
|
+
async saveSnapshot(id, snapshot) {
|
|
133
|
+
await storage.put(`${prefix}snapshots:${id}`, snapshot);
|
|
134
|
+
},
|
|
135
|
+
async deleteSnapshot(id) {
|
|
136
|
+
await storage.delete(`${prefix}snapshots:${id}`);
|
|
137
|
+
},
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Create an exactly-once storage adapter
|
|
142
|
+
*/
|
|
143
|
+
export function createExactlyOnceStorageAdapter(storage, contextName) {
|
|
144
|
+
const prefix = `primitives:exactlyonce:${contextName}:`;
|
|
145
|
+
return {
|
|
146
|
+
async loadProcessedIds() {
|
|
147
|
+
const entries = await storage.list({
|
|
148
|
+
prefix: `${prefix}processed:`,
|
|
149
|
+
});
|
|
150
|
+
const result = new Map();
|
|
151
|
+
for (const [key, value] of entries) {
|
|
152
|
+
const eventId = key.slice(`${prefix}processed:`.length);
|
|
153
|
+
result.set(eventId, value);
|
|
154
|
+
}
|
|
155
|
+
return result;
|
|
156
|
+
},
|
|
157
|
+
async markProcessed(eventId, timestamp, result) {
|
|
158
|
+
await storage.put(`${prefix}processed:${eventId}`, { timestamp, result });
|
|
159
|
+
},
|
|
160
|
+
async pruneExpired(olderThan) {
|
|
161
|
+
const entries = await storage.list({ prefix: `${prefix}processed:` });
|
|
162
|
+
const keysToDelete = [];
|
|
163
|
+
for (const [key, value] of entries) {
|
|
164
|
+
if (value.timestamp < olderThan) {
|
|
165
|
+
keysToDelete.push(key);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
if (keysToDelete.length > 0) {
|
|
169
|
+
await storage.delete(keysToDelete);
|
|
170
|
+
}
|
|
171
|
+
return keysToDelete.length;
|
|
172
|
+
},
|
|
173
|
+
async loadState() {
|
|
174
|
+
const state = await storage.get(`${prefix}state`);
|
|
175
|
+
return new Map(Object.entries(state ?? {}));
|
|
176
|
+
},
|
|
177
|
+
async saveState(state) {
|
|
178
|
+
await storage.put(`${prefix}state`, Object.fromEntries(state));
|
|
179
|
+
},
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
//# sourceMappingURL=storage-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage-adapter.js","sourceRoot":"","sources":["../../../objects/primitives/storage-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* With Primitives Mixin
|
|
3
|
+
*
|
|
4
|
+
* A capability mixin that adds the unified primitives to any Durable Object class.
|
|
5
|
+
* Provides zero-config access to:
|
|
6
|
+
* - TemporalStore: Time-aware key-value storage
|
|
7
|
+
* - WindowManager: Stream windowing and aggregation
|
|
8
|
+
* - ExactlyOnceContext: Idempotent event processing
|
|
9
|
+
* - TypedColumnStore: Columnar analytical storage
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* import { DO } from 'dotdo'
|
|
14
|
+
* import { withPrimitives } from 'dotdo/primitives'
|
|
15
|
+
*
|
|
16
|
+
* class MyDO extends withPrimitives(DO) {
|
|
17
|
+
* async handleRequest(req: Request) {
|
|
18
|
+
* // Access primitives via $.primitives
|
|
19
|
+
* const eventStore = this.$.primitives.temporal<Event>('events')
|
|
20
|
+
* await eventStore.put('event-1', event, Date.now())
|
|
21
|
+
*
|
|
22
|
+
* // Process events exactly once
|
|
23
|
+
* await this.$.primitives.exactlyOnce().processOnce(event.id, async () => {
|
|
24
|
+
* // Process event
|
|
25
|
+
* })
|
|
26
|
+
* }
|
|
27
|
+
* }
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
import { createCapabilityMixin, } from '../mixins/infrastructure';
|
|
31
|
+
import { createDOPrimitiveFactory, } from './index';
|
|
32
|
+
import { WindowManager } from '../../db/primitives';
|
|
33
|
+
export { WindowManager };
|
|
34
|
+
/**
|
|
35
|
+
* Create the primitives capability
|
|
36
|
+
*/
|
|
37
|
+
function createPrimitivesCapability(ctx) {
|
|
38
|
+
// Create the factory lazily on first access
|
|
39
|
+
let factory = null;
|
|
40
|
+
const getFactory = () => {
|
|
41
|
+
if (!factory) {
|
|
42
|
+
factory = createDOPrimitiveFactory(ctx.state, ctx.env);
|
|
43
|
+
}
|
|
44
|
+
return factory;
|
|
45
|
+
};
|
|
46
|
+
return {
|
|
47
|
+
temporal(name, options) {
|
|
48
|
+
return getFactory().temporal(name, options);
|
|
49
|
+
},
|
|
50
|
+
window(type, config) {
|
|
51
|
+
return getFactory().window(type, config);
|
|
52
|
+
},
|
|
53
|
+
exactlyOnce(options) {
|
|
54
|
+
return getFactory().exactlyOnce(options);
|
|
55
|
+
},
|
|
56
|
+
columns(name) {
|
|
57
|
+
return getFactory().columns(name);
|
|
58
|
+
},
|
|
59
|
+
async handleAlarm() {
|
|
60
|
+
return getFactory().handleAlarm();
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Primitives mixin
|
|
66
|
+
*
|
|
67
|
+
* Adds unified primitives capability to a Durable Object class.
|
|
68
|
+
*
|
|
69
|
+
* @param Base - Base DO class to extend
|
|
70
|
+
* @returns Extended class with primitives capability
|
|
71
|
+
*
|
|
72
|
+
* @example
|
|
73
|
+
* ```typescript
|
|
74
|
+
* import { DO } from 'dotdo'
|
|
75
|
+
* import { withPrimitives } from 'dotdo/primitives'
|
|
76
|
+
*
|
|
77
|
+
* // Add primitives to DO
|
|
78
|
+
* class MyDO extends withPrimitives(DO) {
|
|
79
|
+
* async fetch(request: Request) {
|
|
80
|
+
* // Use primitives via $.primitives
|
|
81
|
+
* const store = this.$.primitives.temporal('events')
|
|
82
|
+
* // ...
|
|
83
|
+
* }
|
|
84
|
+
* }
|
|
85
|
+
*
|
|
86
|
+
* // Compose with other mixins
|
|
87
|
+
* import { withFs } from 'dotdo/mixins'
|
|
88
|
+
* class FullDO extends withFs(withPrimitives(DO)) {
|
|
89
|
+
* // Has both $.primitives and $.fs
|
|
90
|
+
* }
|
|
91
|
+
* ```
|
|
92
|
+
*/
|
|
93
|
+
export const withPrimitives = createCapabilityMixin('primitives', createPrimitivesCapability);
|
|
94
|
+
/**
|
|
95
|
+
* Convenience re-export of primitive utilities
|
|
96
|
+
*/
|
|
97
|
+
export {
|
|
98
|
+
// Duration helpers from WindowManager
|
|
99
|
+
hours, minutes, seconds, milliseconds,
|
|
100
|
+
// Trigger types
|
|
101
|
+
EventTimeTrigger, CountTrigger, ProcessingTimeTrigger, PurgingTrigger, Trigger, } from '../../db/primitives';
|
|
102
|
+
//# sourceMappingURL=with-primitives.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"with-primitives.js","sourceRoot":"","sources":["../../../objects/primitives/with-primitives.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,EACL,qBAAqB,GAGtB,MAAM,0BAA0B,CAAA;AAEjC,OAAO,EACL,wBAAwB,GAKzB,MAAM,SAAS,CAAA;AAUhB,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAenD,OAAO,EAAE,aAAa,EAAE,CAAA;AAqHxB;;GAEG;AACH,SAAS,0BAA0B,CAAC,GAAsB;IACxD,4CAA4C;IAC5C,IAAI,OAAO,GAA8B,IAAI,CAAA;IAE7C,MAAM,UAAU,GAAG,GAAG,EAAE;QACtB,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,GAAG,wBAAwB,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,CAAA;QACxD,CAAC;QACD,OAAO,OAAO,CAAA;IAChB,CAAC,CAAA;IAED,OAAO;QACL,QAAQ,CAAI,IAAY,EAAE,OAA8B;YACtD,OAAO,UAAU,EAAE,CAAC,QAAQ,CAAI,IAAI,EAAE,OAAO,CAAC,CAAA;QAChD,CAAC;QAED,MAAM,CAAI,IAAgB,EAAE,MAAoB;YAC9C,OAAO,UAAU,EAAE,CAAC,MAAM,CAAI,IAAI,EAAE,MAAM,CAAC,CAAA;QAC7C,CAAC;QAED,WAAW,CAAC,OAAmC;YAC7C,OAAO,UAAU,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;QAC1C,CAAC;QAED,OAAO,CAAC,IAAY;YAClB,OAAO,UAAU,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QACnC,CAAC;QAED,KAAK,CAAC,WAAW;YACf,OAAO,UAAU,EAAE,CAAC,WAAW,EAAE,CAAA;QACnC,CAAC;KACF,CAAA;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,qBAAqB,CAAC,YAAY,EAAE,0BAA0B,CAAC,CAAA;AAwB7F;;GAEG;AACH,OAAO;AACL,sCAAsC;AACtC,KAAK,EACL,OAAO,EACP,OAAO,EACP,YAAY;AACZ,gBAAgB;AAChB,gBAAgB,EAChB,YAAY,EACZ,qBAAqB,EACrB,cAAc,EACd,OAAO,GACR,MAAM,qBAAqB,CAAA"}
|