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,309 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Workflow Context Module
|
|
3
|
+
*
|
|
4
|
+
* AsyncLocalStorage-based context management for concurrent workflow execution.
|
|
5
|
+
* This enables multiple workflows to execute concurrently without global state pollution.
|
|
6
|
+
*/
|
|
7
|
+
import { AsyncLocalStorage } from 'async_hooks';
|
|
8
|
+
import { WaitForEventManager } from '../../WaitForEventManager';
|
|
9
|
+
import { InMemoryStepStorage } from '../../runtime';
|
|
10
|
+
import { createStorageStrategy } from './storage';
|
|
11
|
+
import { setGetCurrentWorkflowFn } from './determinism';
|
|
12
|
+
// ============================================================================
|
|
13
|
+
// ASYNCLOCALSTORAGE
|
|
14
|
+
// ============================================================================
|
|
15
|
+
// AsyncLocalStorage provides execution-scoped context
|
|
16
|
+
// This works in both Node.js and Cloudflare Workers runtime
|
|
17
|
+
const workflowContextStorage = new AsyncLocalStorage();
|
|
18
|
+
// ============================================================================
|
|
19
|
+
// CONTEXT ACCESSORS
|
|
20
|
+
// ============================================================================
|
|
21
|
+
/**
|
|
22
|
+
* Get the current workflow context from AsyncLocalStorage.
|
|
23
|
+
* Returns null if not executing within a workflow.
|
|
24
|
+
*/
|
|
25
|
+
export function getCurrentContext() {
|
|
26
|
+
return workflowContextStorage.getStore() ?? null;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Get the current workflow state for backward compatibility.
|
|
30
|
+
* This function bridges the old global state approach with the new context-based approach.
|
|
31
|
+
*/
|
|
32
|
+
export function getCurrentWorkflow() {
|
|
33
|
+
const ctx = getCurrentContext();
|
|
34
|
+
return ctx?.workflow ?? null;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Get the current patch state from context.
|
|
38
|
+
*/
|
|
39
|
+
export function getCurrentPatchState() {
|
|
40
|
+
const ctx = getCurrentContext();
|
|
41
|
+
return ctx?.patchState ?? null;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Set the current patch state within the context.
|
|
45
|
+
*/
|
|
46
|
+
export function setCurrentPatchState(patchState) {
|
|
47
|
+
const ctx = getCurrentContext();
|
|
48
|
+
if (ctx) {
|
|
49
|
+
ctx.patchState = patchState;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Execute a workflow function within a context.
|
|
54
|
+
* This ensures all workflow operations have access to the correct context.
|
|
55
|
+
*/
|
|
56
|
+
export function runWithContext(context, fn) {
|
|
57
|
+
return workflowContextStorage.run(context, fn);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Check if code is running within a workflow context.
|
|
61
|
+
* Useful for conditional behavior based on workflow vs non-workflow execution.
|
|
62
|
+
*/
|
|
63
|
+
export function inWorkflowContext() {
|
|
64
|
+
return getCurrentWorkflow() !== null;
|
|
65
|
+
}
|
|
66
|
+
// ============================================================================
|
|
67
|
+
// GLOBAL REGISTRIES
|
|
68
|
+
// ============================================================================
|
|
69
|
+
// These are shared lookup tables, not per-execution state
|
|
70
|
+
let globalStorage = new InMemoryStepStorage();
|
|
71
|
+
let globalState = null;
|
|
72
|
+
let globalWaitManager = null;
|
|
73
|
+
let globalNamespace = 'default';
|
|
74
|
+
// Workflow registry - shared across all executions for handle lookups
|
|
75
|
+
const workflows = new Map();
|
|
76
|
+
const workflowFunctions = new Map();
|
|
77
|
+
/**
|
|
78
|
+
* Get the workflows registry (for client and child workflow access)
|
|
79
|
+
*/
|
|
80
|
+
export function getWorkflowsRegistry() {
|
|
81
|
+
return workflows;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Get the workflow functions registry
|
|
85
|
+
*/
|
|
86
|
+
export function getWorkflowFunctionsRegistry() {
|
|
87
|
+
return workflowFunctions;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Get the global namespace
|
|
91
|
+
*/
|
|
92
|
+
export function getGlobalNamespace() {
|
|
93
|
+
return globalNamespace;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Set the global namespace
|
|
97
|
+
*/
|
|
98
|
+
export function setGlobalNamespace(namespace) {
|
|
99
|
+
globalNamespace = namespace;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Get the global storage
|
|
103
|
+
*/
|
|
104
|
+
export function getGlobalStorage() {
|
|
105
|
+
return globalStorage;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Get the global wait manager
|
|
109
|
+
*/
|
|
110
|
+
export function getGlobalWaitManager() {
|
|
111
|
+
return globalWaitManager;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Get the current storage from context or fallback to global.
|
|
115
|
+
*
|
|
116
|
+
* This provides a single source of truth for storage access, consolidating
|
|
117
|
+
* the pattern of `ctx?.storage ?? globalStorage` that was previously
|
|
118
|
+
* scattered throughout the codebase.
|
|
119
|
+
*/
|
|
120
|
+
export function getCurrentStorage() {
|
|
121
|
+
const ctx = getCurrentContext();
|
|
122
|
+
return ctx?.storage ?? globalStorage;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Get the storage strategy for the current workflow context.
|
|
126
|
+
*
|
|
127
|
+
* This function creates the appropriate storage strategy based on the current context:
|
|
128
|
+
* - If a WorkflowStep is available, returns CFWorkflowsStorageStrategy (FREE sleeping, durable)
|
|
129
|
+
* - Otherwise, returns InMemoryStorageStrategy (fallback, BILLABLE sleeping)
|
|
130
|
+
*
|
|
131
|
+
* Note: Strategies are created on-demand rather than stored in context to avoid
|
|
132
|
+
* stale strategy references when WorkflowStep is set/cleared dynamically.
|
|
133
|
+
*/
|
|
134
|
+
export function getCurrentStorageStrategy() {
|
|
135
|
+
const ctx = getCurrentContext();
|
|
136
|
+
const step = ctx?.workflowStep ?? null;
|
|
137
|
+
const storage = getCurrentStorage();
|
|
138
|
+
return createStorageStrategy(step, storage);
|
|
139
|
+
}
|
|
140
|
+
// ============================================================================
|
|
141
|
+
// CF WORKFLOWS STEP CONTEXT
|
|
142
|
+
// ============================================================================
|
|
143
|
+
/**
|
|
144
|
+
* Set the WorkflowStep context for the current workflow execution.
|
|
145
|
+
* Call this at the beginning of a CF Workflows run() method to enable
|
|
146
|
+
* native step.do() and step.sleep() execution.
|
|
147
|
+
*
|
|
148
|
+
* The step is stored in the workflow's AsyncLocalStorage context, ensuring
|
|
149
|
+
* isolation between concurrent workflow executions.
|
|
150
|
+
*
|
|
151
|
+
* @param step - The WorkflowStep from CF Workflows runtime, or null to clear
|
|
152
|
+
*
|
|
153
|
+
* @example
|
|
154
|
+
* ```typescript
|
|
155
|
+
* async run(event: WorkflowEvent, step: WorkflowStep) {
|
|
156
|
+
* setWorkflowStep(step)
|
|
157
|
+
* try {
|
|
158
|
+
* // Temporal compat layer will use step.sleep() and step.do()
|
|
159
|
+
* await sleep('5s')
|
|
160
|
+
* await activities.processOrder(event.payload.orderId)
|
|
161
|
+
* } finally {
|
|
162
|
+
* clearWorkflowStep()
|
|
163
|
+
* }
|
|
164
|
+
* }
|
|
165
|
+
* ```
|
|
166
|
+
*/
|
|
167
|
+
export function setWorkflowStep(step) {
|
|
168
|
+
const ctx = getCurrentContext();
|
|
169
|
+
if (ctx) {
|
|
170
|
+
ctx.workflowStep = step;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Clear the WorkflowStep context for the current workflow.
|
|
175
|
+
* Call this when exiting the CF Workflows context.
|
|
176
|
+
*/
|
|
177
|
+
export function clearWorkflowStep() {
|
|
178
|
+
const ctx = getCurrentContext();
|
|
179
|
+
if (ctx) {
|
|
180
|
+
ctx.workflowStep = null;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Get the current WorkflowStep context, or null if not in a CF Workflows context.
|
|
185
|
+
* Used internally by sleep() and proxyActivities() to route to native APIs.
|
|
186
|
+
*/
|
|
187
|
+
export function getWorkflowStep() {
|
|
188
|
+
const ctx = getCurrentContext();
|
|
189
|
+
return ctx?.workflowStep ?? null;
|
|
190
|
+
}
|
|
191
|
+
// ============================================================================
|
|
192
|
+
// CONFIGURATION
|
|
193
|
+
// ============================================================================
|
|
194
|
+
/**
|
|
195
|
+
* Configure the Temporal compat layer globals.
|
|
196
|
+
*
|
|
197
|
+
* This is the single entry point for backend configuration. The storage
|
|
198
|
+
* strategy (CFWorkflows vs InMemory) is auto-detected at runtime based on
|
|
199
|
+
* whether a WorkflowStep context is available.
|
|
200
|
+
*
|
|
201
|
+
* ## Configuration Flow
|
|
202
|
+
*
|
|
203
|
+
* 1. Set `storage` for durable step persistence
|
|
204
|
+
* 2. Set `state` for DurableObject state access (required for waitForEvent)
|
|
205
|
+
* 3. Set `namespace` for workflow isolation
|
|
206
|
+
*
|
|
207
|
+
* ## Storage Strategy Selection (Automatic)
|
|
208
|
+
*
|
|
209
|
+
* - If WorkflowStep context is available: Uses CFWorkflowsStorageStrategy
|
|
210
|
+
* - sleep() uses step.sleep() - FREE (no wall-clock billing)
|
|
211
|
+
* - Activities use step.do() - DURABLE (survives restarts)
|
|
212
|
+
*
|
|
213
|
+
* - Otherwise: Uses InMemoryStorageStrategy (fallback)
|
|
214
|
+
* - sleep() uses setTimeout - BILLABLE (consumes DO time)
|
|
215
|
+
* - Activities execute directly - NOT DURABLE
|
|
216
|
+
*
|
|
217
|
+
* @example
|
|
218
|
+
* ```typescript
|
|
219
|
+
* import { configure } from '@dotdo/temporal'
|
|
220
|
+
*
|
|
221
|
+
* // In a Durable Object
|
|
222
|
+
* configure({
|
|
223
|
+
* storage: new DOStepStorage(ctx.storage),
|
|
224
|
+
* state: ctx.state,
|
|
225
|
+
* namespace: 'production'
|
|
226
|
+
* })
|
|
227
|
+
* ```
|
|
228
|
+
*/
|
|
229
|
+
export function configure(opts) {
|
|
230
|
+
if (opts.storage)
|
|
231
|
+
globalStorage = opts.storage;
|
|
232
|
+
if (opts.state) {
|
|
233
|
+
globalState = opts.state;
|
|
234
|
+
globalWaitManager = new WaitForEventManager(opts.state);
|
|
235
|
+
}
|
|
236
|
+
if (opts.namespace)
|
|
237
|
+
globalNamespace = opts.namespace;
|
|
238
|
+
}
|
|
239
|
+
// ============================================================================
|
|
240
|
+
// DURATION FORMATTING
|
|
241
|
+
// ============================================================================
|
|
242
|
+
/**
|
|
243
|
+
* Format a duration in milliseconds to CF Workflows format string.
|
|
244
|
+
* CF Workflows accepts durations like '5s', '1m', '1h', etc.
|
|
245
|
+
*
|
|
246
|
+
* @param ms - Duration in milliseconds
|
|
247
|
+
* @returns Formatted duration string
|
|
248
|
+
*/
|
|
249
|
+
export function formatDurationForCF(ms) {
|
|
250
|
+
if (ms < 1000) {
|
|
251
|
+
return `${ms}ms`;
|
|
252
|
+
}
|
|
253
|
+
if (ms < 60 * 1000) {
|
|
254
|
+
const seconds = Math.round(ms / 1000);
|
|
255
|
+
return `${seconds}s`;
|
|
256
|
+
}
|
|
257
|
+
if (ms < 60 * 60 * 1000) {
|
|
258
|
+
const minutes = Math.round(ms / (60 * 1000));
|
|
259
|
+
return `${minutes}m`;
|
|
260
|
+
}
|
|
261
|
+
const hours = Math.round(ms / (60 * 60 * 1000));
|
|
262
|
+
return `${hours}h`;
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Generate a unique step ID for sleep operations.
|
|
266
|
+
* Uses per-workflow counter for deterministic IDs across concurrent workflows.
|
|
267
|
+
*
|
|
268
|
+
* @param ms - Duration in milliseconds
|
|
269
|
+
* @returns Unique step ID
|
|
270
|
+
*/
|
|
271
|
+
export function generateSleepStepId(ms) {
|
|
272
|
+
const ctx = getCurrentContext();
|
|
273
|
+
if (!ctx?.workflow) {
|
|
274
|
+
// Fallback for non-workflow context (testing)
|
|
275
|
+
return `sleep:${formatDurationForCF(ms)}:${Date.now()}`;
|
|
276
|
+
}
|
|
277
|
+
ctx.workflow.sleepStepCounter++;
|
|
278
|
+
return `sleep:${formatDurationForCF(ms)}:${ctx.workflow.sleepStepCounter}`;
|
|
279
|
+
}
|
|
280
|
+
// ============================================================================
|
|
281
|
+
// ID GENERATION
|
|
282
|
+
// ============================================================================
|
|
283
|
+
export function generateWorkflowId() {
|
|
284
|
+
return `wf_${crypto.randomUUID().replace(/-/g, '')}`;
|
|
285
|
+
}
|
|
286
|
+
export function generateRunId() {
|
|
287
|
+
return `run_${crypto.randomUUID().replace(/-/g, '')}`;
|
|
288
|
+
}
|
|
289
|
+
export function generateTimerId() {
|
|
290
|
+
return `timer_${crypto.randomUUID().replace(/-/g, '')}`;
|
|
291
|
+
}
|
|
292
|
+
// ============================================================================
|
|
293
|
+
// STATE RESET
|
|
294
|
+
// ============================================================================
|
|
295
|
+
/**
|
|
296
|
+
* Reset global registries (for testing)
|
|
297
|
+
*/
|
|
298
|
+
export function resetGlobalState() {
|
|
299
|
+
workflows.clear();
|
|
300
|
+
workflowFunctions.clear();
|
|
301
|
+
globalNamespace = 'default';
|
|
302
|
+
clearWorkflowStep();
|
|
303
|
+
}
|
|
304
|
+
// ============================================================================
|
|
305
|
+
// INITIALIZATION
|
|
306
|
+
// ============================================================================
|
|
307
|
+
// Wire up the determinism module to access current workflow
|
|
308
|
+
setGetCurrentWorkflowFn(getCurrentWorkflow);
|
|
309
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../../../workflows/compat/temporal/context.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAA;AAInD,OAAO,EAAE,qBAAqB,EAAgC,MAAM,WAAW,CAAA;AAC/E,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAA;AAKvD,+EAA+E;AAC/E,oBAAoB;AACpB,+EAA+E;AAE/E,sDAAsD;AACtD,4DAA4D;AAC5D,MAAM,sBAAsB,GAAG,IAAI,iBAAiB,EAAmB,CAAA;AAEvE,+EAA+E;AAC/E,oBAAoB;AACpB,+EAA+E;AAE/E;;;GAGG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO,sBAAsB,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAA;AAClD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB;IAChC,MAAM,GAAG,GAAG,iBAAiB,EAAE,CAAA;IAC/B,OAAO,GAAG,EAAE,QAAQ,IAAI,IAAI,CAAA;AAC9B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB;IAClC,MAAM,GAAG,GAAG,iBAAiB,EAAE,CAAA;IAC/B,OAAO,GAAG,EAAE,UAAU,IAAI,IAAI,CAAA;AAChC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,UAAsB;IACzD,MAAM,GAAG,GAAG,iBAAiB,EAAE,CAAA;IAC/B,IAAI,GAAG,EAAE,CAAC;QACR,GAAG,CAAC,UAAU,GAAG,UAAU,CAAA;IAC7B,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAI,OAAwB,EAAE,EAAW;IACrE,OAAO,sBAAsB,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAA;AAChD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO,kBAAkB,EAAE,KAAK,IAAI,CAAA;AACtC,CAAC;AAED,+EAA+E;AAC/E,oBAAoB;AACpB,+EAA+E;AAE/E,0DAA0D;AAC1D,IAAI,aAAa,GAAgB,IAAI,mBAAmB,EAAE,CAAA;AAC1D,IAAI,WAAW,GAA8B,IAAI,CAAA;AACjD,IAAI,iBAAiB,GAA+B,IAAI,CAAA;AACxD,IAAI,eAAe,GAAG,SAAS,CAAA;AAE/B,sEAAsE;AACtE,MAAM,SAAS,GAAG,IAAI,GAAG,EAAyB,CAAA;AAClD,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAoD,CAAA;AAErF;;GAEG;AACH,MAAM,UAAU,oBAAoB;IAClC,OAAO,SAAS,CAAA;AAClB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,4BAA4B;IAC1C,OAAO,iBAAiB,CAAA;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB;IAChC,OAAO,eAAe,CAAA;AACxB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,SAAiB;IAClD,eAAe,GAAG,SAAS,CAAA;AAC7B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,OAAO,aAAa,CAAA;AACtB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB;IAClC,OAAO,iBAAiB,CAAA;AAC1B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,GAAG,GAAG,iBAAiB,EAAE,CAAA;IAC/B,OAAO,GAAG,EAAE,OAAO,IAAI,aAAa,CAAA;AACtC,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,yBAAyB;IACvC,MAAM,GAAG,GAAG,iBAAiB,EAAE,CAAA;IAC/B,MAAM,IAAI,GAAG,GAAG,EAAE,YAAY,IAAI,IAAI,CAAA;IACtC,MAAM,OAAO,GAAG,iBAAiB,EAAE,CAAA;IACnC,OAAO,qBAAqB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;AAC7C,CAAC;AAED,+EAA+E;AAC/E,4BAA4B;AAC5B,+EAA+E;AAE/E;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,UAAU,eAAe,CAAC,IAAyB;IACvD,MAAM,GAAG,GAAG,iBAAiB,EAAE,CAAA;IAC/B,IAAI,GAAG,EAAE,CAAC;QACR,GAAG,CAAC,YAAY,GAAG,IAAI,CAAA;IACzB,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,GAAG,GAAG,iBAAiB,EAAE,CAAA;IAC/B,IAAI,GAAG,EAAE,CAAC;QACR,GAAG,CAAC,YAAY,GAAG,IAAI,CAAA;IACzB,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe;IAC7B,MAAM,GAAG,GAAG,iBAAiB,EAAE,CAAA;IAC/B,OAAO,GAAG,EAAE,YAAY,IAAI,IAAI,CAAA;AAClC,CAAC;AAED,+EAA+E;AAC/E,gBAAgB;AAChB,+EAA+E;AAE/E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,MAAM,UAAU,SAAS,CAAC,IAA+E;IACvG,IAAI,IAAI,CAAC,OAAO;QAAE,aAAa,GAAG,IAAI,CAAC,OAAO,CAAA;IAC9C,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,WAAW,GAAG,IAAI,CAAC,KAAK,CAAA;QACxB,iBAAiB,GAAG,IAAI,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACzD,CAAC;IACD,IAAI,IAAI,CAAC,SAAS;QAAE,eAAe,GAAG,IAAI,CAAC,SAAS,CAAA;AACtD,CAAC;AAED,+EAA+E;AAC/E,sBAAsB;AACtB,+EAA+E;AAE/E;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CAAC,EAAU;IAC5C,IAAI,EAAE,GAAG,IAAI,EAAE,CAAC;QACd,OAAO,GAAG,EAAE,IAAI,CAAA;IAClB,CAAC;IACD,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC;QACnB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,CAAA;QACrC,OAAO,GAAG,OAAO,GAAG,CAAA;IACtB,CAAC;IACD,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAA;QAC5C,OAAO,GAAG,OAAO,GAAG,CAAA;IACtB,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAA;IAC/C,OAAO,GAAG,KAAK,GAAG,CAAA;AACpB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CAAC,EAAU;IAC5C,MAAM,GAAG,GAAG,iBAAiB,EAAE,CAAA;IAC/B,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,CAAC;QACnB,8CAA8C;QAC9C,OAAO,SAAS,mBAAmB,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,CAAA;IACzD,CAAC;IACD,GAAG,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAA;IAC/B,OAAO,SAAS,mBAAmB,CAAC,EAAE,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAA;AAC5E,CAAC;AAED,+EAA+E;AAC/E,gBAAgB;AAChB,+EAA+E;AAE/E,MAAM,UAAU,kBAAkB;IAChC,OAAO,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAA;AACtD,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO,OAAO,MAAM,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAA;AACvD,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,OAAO,SAAS,MAAM,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAA;AACzD,CAAC;AAED,+EAA+E;AAC/E,cAAc;AACd,+EAA+E;AAE/E;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,SAAS,CAAC,KAAK,EAAE,CAAA;IACjB,iBAAiB,CAAC,KAAK,EAAE,CAAA;IACzB,eAAe,GAAG,SAAS,CAAA;IAC3B,iBAAiB,EAAE,CAAA;AACrB,CAAC;AAED,+EAA+E;AAC/E,iBAAiB;AACjB,+EAA+E;AAE/E,4DAA4D;AAC5D,uBAAuB,CAAC,kBAAkB,CAAC,CAAA"}
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Determinism Enforcement Module
|
|
3
|
+
*
|
|
4
|
+
* Runtime detection and prevention of non-deterministic patterns in workflows.
|
|
5
|
+
* Workflows MUST be deterministic to support replay - given the same inputs
|
|
6
|
+
* and history, they must produce the same sequence of commands.
|
|
7
|
+
*/
|
|
8
|
+
// Default configuration - warn in development, silent in production
|
|
9
|
+
let determinismConfig = {
|
|
10
|
+
warnOnNonDeterministic: typeof process !== 'undefined' && process.env?.NODE_ENV !== 'production',
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Configure determinism enforcement settings
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* import { configureDeterminism } from '@dotdo/temporal'
|
|
18
|
+
*
|
|
19
|
+
* // Disable warnings in tests
|
|
20
|
+
* configureDeterminism({ warnOnNonDeterministic: false })
|
|
21
|
+
*
|
|
22
|
+
* // Enable warnings in production for debugging
|
|
23
|
+
* configureDeterminism({ warnOnNonDeterministic: true })
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
export function configureDeterminism(config) {
|
|
27
|
+
determinismConfig = { ...determinismConfig, ...config };
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Get current determinism configuration
|
|
31
|
+
*/
|
|
32
|
+
export function getDeterminismConfig() {
|
|
33
|
+
return { ...determinismConfig };
|
|
34
|
+
}
|
|
35
|
+
// ============================================================================
|
|
36
|
+
// WARNING CLASS
|
|
37
|
+
// ============================================================================
|
|
38
|
+
/**
|
|
39
|
+
* Warning class for tracking determinism violations.
|
|
40
|
+
* These are logged in development mode to help identify potential replay issues.
|
|
41
|
+
*/
|
|
42
|
+
export class WorkflowDeterminismWarning {
|
|
43
|
+
/** Type of non-deterministic operation detected */
|
|
44
|
+
type;
|
|
45
|
+
/** Human-readable message describing the violation */
|
|
46
|
+
message;
|
|
47
|
+
/** Stack trace showing where the violation occurred */
|
|
48
|
+
stack;
|
|
49
|
+
/** Workflow ID where the violation was detected (if available) */
|
|
50
|
+
workflowId;
|
|
51
|
+
/** Suggested alternative to use instead */
|
|
52
|
+
suggestion;
|
|
53
|
+
/** Timestamp when the warning was created */
|
|
54
|
+
timestamp;
|
|
55
|
+
constructor(type, message, suggestion, workflowId) {
|
|
56
|
+
this.type = type;
|
|
57
|
+
this.message = message;
|
|
58
|
+
this.suggestion = suggestion;
|
|
59
|
+
this.workflowId = workflowId;
|
|
60
|
+
this.timestamp = new Date();
|
|
61
|
+
this.stack = new Error().stack;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Format the warning for console output
|
|
65
|
+
*/
|
|
66
|
+
toString() {
|
|
67
|
+
const workflowInfo = this.workflowId ? ` in workflow ${this.workflowId}` : '';
|
|
68
|
+
return `[WorkflowDeterminismWarning]${workflowInfo}: ${this.message}\n Suggestion: ${this.suggestion}`;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
// ============================================================================
|
|
72
|
+
// WARNING TRACKING
|
|
73
|
+
// ============================================================================
|
|
74
|
+
/**
|
|
75
|
+
* Track warnings for analysis (limited to prevent memory leaks)
|
|
76
|
+
*/
|
|
77
|
+
const MAX_WARNINGS = 100;
|
|
78
|
+
const determinismWarnings = [];
|
|
79
|
+
/**
|
|
80
|
+
* Get all recorded determinism warnings
|
|
81
|
+
*/
|
|
82
|
+
export function getDeterminismWarnings() {
|
|
83
|
+
return determinismWarnings;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Clear all recorded determinism warnings
|
|
87
|
+
*/
|
|
88
|
+
export function clearDeterminismWarnings() {
|
|
89
|
+
determinismWarnings.length = 0;
|
|
90
|
+
}
|
|
91
|
+
// ============================================================================
|
|
92
|
+
// WARNING FUNCTION
|
|
93
|
+
// ============================================================================
|
|
94
|
+
// Callback to get current workflow - set by context module to avoid circular deps
|
|
95
|
+
let getCurrentWorkflowFn = null;
|
|
96
|
+
/**
|
|
97
|
+
* Set the function to get current workflow (called by context module)
|
|
98
|
+
*/
|
|
99
|
+
export function setGetCurrentWorkflowFn(fn) {
|
|
100
|
+
getCurrentWorkflowFn = fn;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Record a determinism violation warning
|
|
104
|
+
*/
|
|
105
|
+
export function warnNonDeterministic(type, message, suggestion) {
|
|
106
|
+
// Only warn if enabled and we're in a workflow context
|
|
107
|
+
const workflow = getCurrentWorkflowFn?.();
|
|
108
|
+
if (!determinismConfig.warnOnNonDeterministic || !workflow) {
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
const warning = new WorkflowDeterminismWarning(type, message, suggestion, workflow.workflowId);
|
|
112
|
+
// Store warning (with limit to prevent memory leaks)
|
|
113
|
+
if (determinismWarnings.length < MAX_WARNINGS) {
|
|
114
|
+
determinismWarnings.push(warning);
|
|
115
|
+
}
|
|
116
|
+
// Log to console in development
|
|
117
|
+
console.warn(warning.toString());
|
|
118
|
+
}
|
|
119
|
+
// ============================================================================
|
|
120
|
+
// NON-DETERMINISTIC PATTERN DETECTION
|
|
121
|
+
// ============================================================================
|
|
122
|
+
// Store original functions for restoration and proxying
|
|
123
|
+
const originalDateNow = Date.now;
|
|
124
|
+
const originalMathRandom = Math.random;
|
|
125
|
+
const originalFetch = typeof fetch !== 'undefined' ? fetch : undefined;
|
|
126
|
+
const originalSetTimeout = setTimeout;
|
|
127
|
+
const originalSetInterval = setInterval;
|
|
128
|
+
/**
|
|
129
|
+
* Wrapped Date.now that warns about non-deterministic usage in workflows
|
|
130
|
+
*/
|
|
131
|
+
function wrappedDateNow() {
|
|
132
|
+
const workflow = getCurrentWorkflowFn?.();
|
|
133
|
+
if (workflow && determinismConfig.warnOnNonDeterministic) {
|
|
134
|
+
warnNonDeterministic('Date.now', 'Date.now() is non-deterministic and will return different values on replay', 'Use workflowNow() for deterministic timestamps');
|
|
135
|
+
}
|
|
136
|
+
return originalDateNow.call(Date);
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Wrapped Math.random that warns about non-deterministic usage in workflows
|
|
140
|
+
*/
|
|
141
|
+
function wrappedMathRandom() {
|
|
142
|
+
const workflow = getCurrentWorkflowFn?.();
|
|
143
|
+
if (workflow && determinismConfig.warnOnNonDeterministic) {
|
|
144
|
+
warnNonDeterministic('Math.random', 'Math.random() is non-deterministic and will return different values on replay', 'Use random() for deterministic random numbers');
|
|
145
|
+
}
|
|
146
|
+
return originalMathRandom.call(Math);
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Wrapped fetch that warns about non-deterministic usage in workflows
|
|
150
|
+
*/
|
|
151
|
+
function wrappedFetch(input, init) {
|
|
152
|
+
const workflow = getCurrentWorkflowFn?.();
|
|
153
|
+
if (workflow && determinismConfig.warnOnNonDeterministic) {
|
|
154
|
+
warnNonDeterministic('fetch', 'fetch() is non-deterministic - network responses can vary between executions', 'Use activities (proxyActivities) for network calls');
|
|
155
|
+
}
|
|
156
|
+
return originalFetch(input, init);
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Wrapped setTimeout that warns about non-deterministic usage in workflows
|
|
160
|
+
*/
|
|
161
|
+
function wrappedSetTimeout(callback, ms, ...args) {
|
|
162
|
+
const workflow = getCurrentWorkflowFn?.();
|
|
163
|
+
if (workflow && determinismConfig.warnOnNonDeterministic) {
|
|
164
|
+
warnNonDeterministic('setTimeout', 'setTimeout() is non-deterministic - timing varies between executions', 'Use sleep() or createTimer() for durable delays');
|
|
165
|
+
}
|
|
166
|
+
return originalSetTimeout(callback, ms, ...args);
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Wrapped setInterval that warns about non-deterministic usage in workflows
|
|
170
|
+
*/
|
|
171
|
+
function wrappedSetInterval(callback, ms, ...args) {
|
|
172
|
+
const workflow = getCurrentWorkflowFn?.();
|
|
173
|
+
if (workflow && determinismConfig.warnOnNonDeterministic) {
|
|
174
|
+
warnNonDeterministic('setInterval', 'setInterval() is non-deterministic - timing varies between executions', 'Use sleep() in a loop or schedule recurring activities');
|
|
175
|
+
}
|
|
176
|
+
return originalSetInterval(callback, ms, ...args);
|
|
177
|
+
}
|
|
178
|
+
// ============================================================================
|
|
179
|
+
// DETECTION ENABLE/DISABLE
|
|
180
|
+
// ============================================================================
|
|
181
|
+
/**
|
|
182
|
+
* Enable determinism detection by patching global functions.
|
|
183
|
+
* This is automatically called when the module loads in development mode.
|
|
184
|
+
*
|
|
185
|
+
* Note: This patches global objects, which may affect other code.
|
|
186
|
+
* Use with caution in shared environments.
|
|
187
|
+
*/
|
|
188
|
+
export function enableDeterminismDetection() {
|
|
189
|
+
// Only patch if we're configured to warn
|
|
190
|
+
if (!determinismConfig.warnOnNonDeterministic) {
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
// Patch Date.now
|
|
194
|
+
Date.now = wrappedDateNow;
|
|
195
|
+
// Patch Math.random
|
|
196
|
+
Math.random = wrappedMathRandom;
|
|
197
|
+
// Patch fetch if available
|
|
198
|
+
if (originalFetch && typeof globalThis !== 'undefined') {
|
|
199
|
+
;
|
|
200
|
+
globalThis.fetch = wrappedFetch;
|
|
201
|
+
}
|
|
202
|
+
// Note: setTimeout and setInterval are intentionally not patched by default
|
|
203
|
+
// as they're used internally by the workflow runtime.
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Disable determinism detection and restore original functions.
|
|
207
|
+
*/
|
|
208
|
+
export function disableDeterminismDetection() {
|
|
209
|
+
Date.now = originalDateNow;
|
|
210
|
+
Math.random = originalMathRandom;
|
|
211
|
+
if (originalFetch && typeof globalThis !== 'undefined') {
|
|
212
|
+
;
|
|
213
|
+
globalThis.fetch = originalFetch;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
//# sourceMappingURL=determinism.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"determinism.js","sourceRoot":"","sources":["../../../../workflows/compat/temporal/determinism.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Error Classes Module
|
|
3
|
+
*
|
|
4
|
+
* Standard error types for workflow failures.
|
|
5
|
+
*/
|
|
6
|
+
// ============================================================================
|
|
7
|
+
// APPLICATION FAILURE
|
|
8
|
+
// ============================================================================
|
|
9
|
+
/**
|
|
10
|
+
* Application-level failure that can be thrown from workflows or activities.
|
|
11
|
+
* Use this to signal business logic failures vs infrastructure errors.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```typescript
|
|
15
|
+
* import { ApplicationFailure } from '@dotdo/temporal'
|
|
16
|
+
*
|
|
17
|
+
* if (!user.hasPermission('admin')) {
|
|
18
|
+
* throw new ApplicationFailure('User does not have admin permission', true)
|
|
19
|
+
* }
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export class ApplicationFailure extends Error {
|
|
23
|
+
nonRetryable;
|
|
24
|
+
details;
|
|
25
|
+
type = 'ApplicationFailure';
|
|
26
|
+
constructor(message, nonRetryable = false, details) {
|
|
27
|
+
super(message);
|
|
28
|
+
this.nonRetryable = nonRetryable;
|
|
29
|
+
this.details = details;
|
|
30
|
+
this.name = 'ApplicationFailure';
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Create a non-retryable application failure
|
|
34
|
+
*/
|
|
35
|
+
static nonRetryable(message, ...details) {
|
|
36
|
+
return new ApplicationFailure(message, true, details.length > 0 ? details : undefined);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Create a retryable application failure
|
|
40
|
+
*/
|
|
41
|
+
static retryable(message, ...details) {
|
|
42
|
+
return new ApplicationFailure(message, false, details.length > 0 ? details : undefined);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
// ============================================================================
|
|
46
|
+
// ACTIVITY FAILURE
|
|
47
|
+
// ============================================================================
|
|
48
|
+
/**
|
|
49
|
+
* Failure thrown when an activity execution fails.
|
|
50
|
+
* Contains information about the failed activity and the underlying cause.
|
|
51
|
+
*
|
|
52
|
+
* @example
|
|
53
|
+
* ```typescript
|
|
54
|
+
* try {
|
|
55
|
+
* await activities.processPayment(order)
|
|
56
|
+
* } catch (error) {
|
|
57
|
+
* if (error instanceof ActivityFailure) {
|
|
58
|
+
* console.log(`Activity ${error.activityType} failed: ${error.cause?.message}`)
|
|
59
|
+
* }
|
|
60
|
+
* }
|
|
61
|
+
* ```
|
|
62
|
+
*/
|
|
63
|
+
export class ActivityFailure extends Error {
|
|
64
|
+
activityType;
|
|
65
|
+
activityId;
|
|
66
|
+
cause;
|
|
67
|
+
type = 'ActivityFailure';
|
|
68
|
+
constructor(activityType, activityId, cause) {
|
|
69
|
+
super(`Activity ${activityType} (${activityId}) failed${cause ? `: ${cause.message}` : ''}`);
|
|
70
|
+
this.activityType = activityType;
|
|
71
|
+
this.activityId = activityId;
|
|
72
|
+
this.cause = cause;
|
|
73
|
+
this.name = 'ActivityFailure';
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
// ============================================================================
|
|
77
|
+
// CHILD WORKFLOW FAILURE
|
|
78
|
+
// ============================================================================
|
|
79
|
+
/**
|
|
80
|
+
* Failure thrown when a child workflow execution fails.
|
|
81
|
+
* Contains information about the failed child workflow and the underlying cause.
|
|
82
|
+
*
|
|
83
|
+
* @example
|
|
84
|
+
* ```typescript
|
|
85
|
+
* try {
|
|
86
|
+
* await executeChild(childWorkflow, { workflowId: 'child-1' })
|
|
87
|
+
* } catch (error) {
|
|
88
|
+
* if (error instanceof ChildWorkflowFailure) {
|
|
89
|
+
* console.log(`Child workflow ${error.workflowType} failed: ${error.cause?.message}`)
|
|
90
|
+
* }
|
|
91
|
+
* }
|
|
92
|
+
* ```
|
|
93
|
+
*/
|
|
94
|
+
export class ChildWorkflowFailure extends Error {
|
|
95
|
+
workflowType;
|
|
96
|
+
workflowId;
|
|
97
|
+
cause;
|
|
98
|
+
type = 'ChildWorkflowFailure';
|
|
99
|
+
constructor(workflowType, workflowId, cause) {
|
|
100
|
+
super(`Child workflow ${workflowType} (${workflowId}) failed${cause ? `: ${cause.message}` : ''}`);
|
|
101
|
+
this.workflowType = workflowType;
|
|
102
|
+
this.workflowId = workflowId;
|
|
103
|
+
this.cause = cause;
|
|
104
|
+
this.name = 'ChildWorkflowFailure';
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
// ============================================================================
|
|
108
|
+
// TYPE GUARDS
|
|
109
|
+
// ============================================================================
|
|
110
|
+
/**
|
|
111
|
+
* Check if an error is an ApplicationFailure
|
|
112
|
+
*/
|
|
113
|
+
export function isApplicationFailure(error) {
|
|
114
|
+
return error instanceof ApplicationFailure;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Check if an error is an ActivityFailure
|
|
118
|
+
*/
|
|
119
|
+
export function isActivityFailure(error) {
|
|
120
|
+
return error instanceof ActivityFailure;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Check if an error is a ChildWorkflowFailure
|
|
124
|
+
*/
|
|
125
|
+
export function isChildWorkflowFailure(error) {
|
|
126
|
+
return error instanceof ChildWorkflowFailure;
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../../workflows/compat/temporal/errors.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,+EAA+E;AAC/E,sBAAsB;AACtB,+EAA+E;AAE/E;;;;;;;;;;;;GAYG;AACH,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAKhC;IACA;IALF,IAAI,GAAG,oBAA6B,CAAA;IAE7C,YACE,OAAe,EACN,eAAwB,KAAK,EAC7B,OAAmB;QAE5B,KAAK,CAAC,OAAO,CAAC,CAAA;QAHL,iBAAY,GAAZ,YAAY,CAAiB;QAC7B,YAAO,GAAP,OAAO,CAAY;QAG5B,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAA;IAClC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,YAAY,CAAC,OAAe,EAAE,GAAG,OAAkB;QACxD,OAAO,IAAI,kBAAkB,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;IACxF,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,SAAS,CAAC,OAAe,EAAE,GAAG,OAAkB;QACrD,OAAO,IAAI,kBAAkB,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;IACzF,CAAC;CACF;AAED,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E;;;;;;;;;;;;;;GAcG;AACH,MAAM,OAAO,eAAgB,SAAQ,KAAK;IAI7B;IACA;IACA;IALF,IAAI,GAAG,iBAA0B,CAAA;IAE1C,YACW,YAAoB,EACpB,UAAkB,EAClB,KAAa;QAEtB,KAAK,CAAC,YAAY,YAAY,KAAK,UAAU,WAAW,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;QAJnF,iBAAY,GAAZ,YAAY,CAAQ;QACpB,eAAU,GAAV,UAAU,CAAQ;QAClB,UAAK,GAAL,KAAK,CAAQ;QAGtB,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAA;IAC/B,CAAC;CACF;AAED,+EAA+E;AAC/E,yBAAyB;AACzB,+EAA+E;AAE/E;;;;;;;;;;;;;;GAcG;AACH,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IAIlC;IACA;IACA;IALF,IAAI,GAAG,sBAA+B,CAAA;IAE/C,YACW,YAAoB,EACpB,UAAkB,EAClB,KAAa;QAEtB,KAAK,CAAC,kBAAkB,YAAY,KAAK,UAAU,WAAW,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;QAJzF,iBAAY,GAAZ,YAAY,CAAQ;QACpB,eAAU,GAAV,UAAU,CAAQ;QAClB,UAAK,GAAL,KAAK,CAAQ;QAGtB,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAA;IACpC,CAAC;CACF;AAED,+EAA+E;AAC/E,cAAc;AACd,+EAA+E;AAE/E;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAc;IACjD,OAAO,KAAK,YAAY,kBAAkB,CAAA;AAC5C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,OAAO,KAAK,YAAY,eAAe,CAAA;AACzC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,KAAc;IACnD,OAAO,KAAK,YAAY,oBAAoB,CAAA;AAC9C,CAAC"}
|