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,484 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Correlation Headers and Context for Request Tracing
|
|
3
|
+
*
|
|
4
|
+
* Enables request tracing across services with:
|
|
5
|
+
* - X-Correlation-ID: Primary correlation identifier
|
|
6
|
+
* - X-Request-ID: Request-specific identifier
|
|
7
|
+
* - X-Dotdo-Request: Combined header with full trace context
|
|
8
|
+
*
|
|
9
|
+
* Header format for X-Dotdo-Request:
|
|
10
|
+
* ```
|
|
11
|
+
* {correlationId}.{requestId}.{timestamp}.{sequence}[.{spanId}[.{parentSpanId}]]
|
|
12
|
+
* Example: corr-abc123.req-xyz789.1704067200000.1.span-123.span-parent
|
|
13
|
+
* ```
|
|
14
|
+
*
|
|
15
|
+
* The correlation system:
|
|
16
|
+
* - Generates new correlation IDs for root requests
|
|
17
|
+
* - Propagates correlation through DO calls
|
|
18
|
+
* - Creates child spans for nested requests
|
|
19
|
+
* - Links frontend events to backend traces
|
|
20
|
+
*
|
|
21
|
+
* @module workflows/context/correlation
|
|
22
|
+
*/
|
|
23
|
+
// ============================================================================
|
|
24
|
+
// CONSTANTS
|
|
25
|
+
// ============================================================================
|
|
26
|
+
/** Header name for the combined dotdo request header */
|
|
27
|
+
export const DOTDO_REQUEST_HEADER = 'X-Dotdo-Request';
|
|
28
|
+
/** Header name for correlation ID */
|
|
29
|
+
export const CORRELATION_ID_HEADER = 'X-Correlation-ID';
|
|
30
|
+
/** Header name for request ID */
|
|
31
|
+
export const REQUEST_ID_HEADER = 'X-Request-ID';
|
|
32
|
+
/** Maximum length for correlation/request IDs */
|
|
33
|
+
const MAX_ID_LENGTH = 128;
|
|
34
|
+
/** Characters allowed in IDs (URL-safe, no injection risks) */
|
|
35
|
+
const SAFE_ID_PATTERN = /^[a-zA-Z0-9_-]+$/;
|
|
36
|
+
/** Pattern for detecting dangerous characters (global for replace) */
|
|
37
|
+
const DANGEROUS_CHARS_PATTERN = /[<>;'"\\`\r\n${}]/g;
|
|
38
|
+
// ============================================================================
|
|
39
|
+
// ID GENERATION
|
|
40
|
+
// ============================================================================
|
|
41
|
+
/**
|
|
42
|
+
* Generates a cryptographically random hex string
|
|
43
|
+
*/
|
|
44
|
+
function randomHex(bytes) {
|
|
45
|
+
const array = new Uint8Array(bytes);
|
|
46
|
+
crypto.getRandomValues(array);
|
|
47
|
+
return Array.from(array)
|
|
48
|
+
.map((b) => b.toString(16).padStart(2, '0'))
|
|
49
|
+
.join('');
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Generates a unique correlation ID.
|
|
53
|
+
*
|
|
54
|
+
* Format: corr-{timestamp_hex}{random_hex}
|
|
55
|
+
* - Prefix "corr-" for identification
|
|
56
|
+
* - 8 chars timestamp (hex) for time-sortability
|
|
57
|
+
* - 8 chars random for uniqueness
|
|
58
|
+
*
|
|
59
|
+
* Total length: 21 characters
|
|
60
|
+
*
|
|
61
|
+
* @returns A unique correlation ID string
|
|
62
|
+
*
|
|
63
|
+
* @example
|
|
64
|
+
* ```typescript
|
|
65
|
+
* const id = generateCorrelationId()
|
|
66
|
+
* // "corr-18d4f8a0b1c2d3e4"
|
|
67
|
+
* ```
|
|
68
|
+
*/
|
|
69
|
+
export function generateCorrelationId() {
|
|
70
|
+
const timestamp = Date.now().toString(16).padStart(12, '0').slice(-12);
|
|
71
|
+
const random = randomHex(4);
|
|
72
|
+
return `corr-${timestamp}${random}`;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Generates a unique request ID.
|
|
76
|
+
*
|
|
77
|
+
* Format: req-{random_hex}
|
|
78
|
+
* - Prefix "req-" for identification
|
|
79
|
+
* - 8 chars random hex
|
|
80
|
+
*
|
|
81
|
+
* Total length: 12 characters (shorter than correlation ID)
|
|
82
|
+
*
|
|
83
|
+
* @returns A unique request ID string
|
|
84
|
+
*
|
|
85
|
+
* @example
|
|
86
|
+
* ```typescript
|
|
87
|
+
* const id = generateRequestId()
|
|
88
|
+
* // "req-a1b2c3d4"
|
|
89
|
+
* ```
|
|
90
|
+
*/
|
|
91
|
+
export function generateRequestId() {
|
|
92
|
+
return `req-${randomHex(4)}`;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Generates a unique span ID.
|
|
96
|
+
*
|
|
97
|
+
* Format: span-{random_hex}
|
|
98
|
+
* - Prefix "span-" for identification
|
|
99
|
+
* - 8 chars random hex
|
|
100
|
+
*
|
|
101
|
+
* @returns A unique span ID string
|
|
102
|
+
*/
|
|
103
|
+
function generateSpanId() {
|
|
104
|
+
return `span-${randomHex(4)}`;
|
|
105
|
+
}
|
|
106
|
+
// ============================================================================
|
|
107
|
+
// VALIDATION & SANITIZATION
|
|
108
|
+
// ============================================================================
|
|
109
|
+
/**
|
|
110
|
+
* Sanitizes an ID by removing dangerous characters and truncating
|
|
111
|
+
*/
|
|
112
|
+
function sanitizeId(id) {
|
|
113
|
+
// Remove dangerous characters
|
|
114
|
+
let sanitized = id.replace(DANGEROUS_CHARS_PATTERN, '');
|
|
115
|
+
// Truncate to max length
|
|
116
|
+
if (sanitized.length > MAX_ID_LENGTH) {
|
|
117
|
+
sanitized = sanitized.slice(0, MAX_ID_LENGTH);
|
|
118
|
+
}
|
|
119
|
+
return sanitized;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Validates that an ID is safe (URL-safe characters only)
|
|
123
|
+
*/
|
|
124
|
+
function isValidId(id) {
|
|
125
|
+
if (!id || id.length === 0 || id.length > MAX_ID_LENGTH) {
|
|
126
|
+
return false;
|
|
127
|
+
}
|
|
128
|
+
return SAFE_ID_PATTERN.test(id);
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Validates that a timestamp is reasonable
|
|
132
|
+
*/
|
|
133
|
+
function isValidTimestamp(timestamp) {
|
|
134
|
+
if (typeof timestamp !== 'number' || !Number.isInteger(timestamp)) {
|
|
135
|
+
return false;
|
|
136
|
+
}
|
|
137
|
+
// Allow some clock skew but reject clearly invalid values
|
|
138
|
+
// Minimum: 2000-01-01, Maximum: 100 years in the future
|
|
139
|
+
const minTimestamp = 946684800000; // 2000-01-01
|
|
140
|
+
const maxTimestamp = Date.now() + 100 * 365 * 24 * 60 * 60 * 1000;
|
|
141
|
+
return timestamp >= minTimestamp && timestamp <= maxTimestamp;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Validates that a sequence is a positive integer
|
|
145
|
+
*/
|
|
146
|
+
function isValidSequence(sequence) {
|
|
147
|
+
return Number.isInteger(sequence) && sequence >= 1;
|
|
148
|
+
}
|
|
149
|
+
// ============================================================================
|
|
150
|
+
// HEADER CREATION
|
|
151
|
+
// ============================================================================
|
|
152
|
+
/**
|
|
153
|
+
* Creates the X-Dotdo-Request header value from a correlation context.
|
|
154
|
+
*
|
|
155
|
+
* Format: {correlationId}.{requestId}.{timestamp}.{sequence}[.{spanId}[.{parentSpanId}]]
|
|
156
|
+
*
|
|
157
|
+
* Missing fields will be auto-generated.
|
|
158
|
+
*
|
|
159
|
+
* @param ctx - Partial correlation context (missing fields are generated)
|
|
160
|
+
* @returns The header value string
|
|
161
|
+
*
|
|
162
|
+
* @example
|
|
163
|
+
* ```typescript
|
|
164
|
+
* const header = createDotdoRequestHeader({
|
|
165
|
+
* correlationId: 'corr-abc123',
|
|
166
|
+
* requestId: 'req-xyz789',
|
|
167
|
+
* timestamp: 1704067200000,
|
|
168
|
+
* sequence: 1
|
|
169
|
+
* })
|
|
170
|
+
* // "corr-abc123.req-xyz789.1704067200000.1"
|
|
171
|
+
* ```
|
|
172
|
+
*/
|
|
173
|
+
export function createDotdoRequestHeader(ctx) {
|
|
174
|
+
// Auto-generate missing fields
|
|
175
|
+
const correlationId = sanitizeId(ctx.correlationId || generateCorrelationId());
|
|
176
|
+
const requestId = sanitizeId(ctx.requestId || generateRequestId());
|
|
177
|
+
const timestamp = ctx.timestamp ?? Date.now();
|
|
178
|
+
const sequence = ctx.sequence ?? 1;
|
|
179
|
+
// Build base header
|
|
180
|
+
let header = `${correlationId}.${requestId}.${timestamp}.${sequence}`;
|
|
181
|
+
// Add optional span IDs
|
|
182
|
+
if (ctx.spanId) {
|
|
183
|
+
header += `.${sanitizeId(ctx.spanId)}`;
|
|
184
|
+
if (ctx.parentSpanId) {
|
|
185
|
+
header += `.${sanitizeId(ctx.parentSpanId)}`;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
return header;
|
|
189
|
+
}
|
|
190
|
+
// ============================================================================
|
|
191
|
+
// HEADER PARSING
|
|
192
|
+
// ============================================================================
|
|
193
|
+
/**
|
|
194
|
+
* Parses the X-Dotdo-Request header value into a correlation context.
|
|
195
|
+
*
|
|
196
|
+
* @param header - The header value to parse
|
|
197
|
+
* @returns The parsed correlation context
|
|
198
|
+
* @throws Error if the header is malformed or contains invalid values
|
|
199
|
+
*
|
|
200
|
+
* @example
|
|
201
|
+
* ```typescript
|
|
202
|
+
* const ctx = parseDotdoRequestHeader('corr-abc123.req-xyz789.1704067200000.1')
|
|
203
|
+
* // { correlationId: 'corr-abc123', requestId: 'req-xyz789', timestamp: 1704067200000, sequence: 1 }
|
|
204
|
+
* ```
|
|
205
|
+
*/
|
|
206
|
+
export function parseDotdoRequestHeader(header) {
|
|
207
|
+
if (!header || typeof header !== 'string') {
|
|
208
|
+
throw new Error('Invalid header: header must be a non-empty string');
|
|
209
|
+
}
|
|
210
|
+
const parts = header.split('.');
|
|
211
|
+
// Must have at least 4 parts: correlationId, requestId, timestamp, sequence
|
|
212
|
+
if (parts.length < 4) {
|
|
213
|
+
throw new Error(`Invalid header format: expected at least 4 dot-separated parts, got ${parts.length}`);
|
|
214
|
+
}
|
|
215
|
+
const [correlationId, requestId, timestampStr, sequenceStr, spanId, parentSpanId] = parts;
|
|
216
|
+
// Validate correlationId
|
|
217
|
+
if (!isValidId(correlationId)) {
|
|
218
|
+
throw new Error(`Invalid correlationId: must be alphanumeric with dashes/underscores, got "${correlationId}"`);
|
|
219
|
+
}
|
|
220
|
+
// Validate requestId
|
|
221
|
+
if (!isValidId(requestId)) {
|
|
222
|
+
throw new Error(`Invalid requestId: must be alphanumeric with dashes/underscores, got "${requestId}"`);
|
|
223
|
+
}
|
|
224
|
+
// Parse and validate timestamp
|
|
225
|
+
const timestamp = parseInt(timestampStr, 10);
|
|
226
|
+
if (isNaN(timestamp) || !isValidTimestamp(timestamp)) {
|
|
227
|
+
throw new Error(`Invalid timestamp: must be a valid Unix timestamp in milliseconds, got "${timestampStr}"`);
|
|
228
|
+
}
|
|
229
|
+
// Parse and validate sequence
|
|
230
|
+
const sequence = parseInt(sequenceStr, 10);
|
|
231
|
+
if (isNaN(sequence) || !isValidSequence(sequence)) {
|
|
232
|
+
throw new Error(`Invalid sequence: must be a positive integer >= 1, got "${sequenceStr}"`);
|
|
233
|
+
}
|
|
234
|
+
// Build context
|
|
235
|
+
const ctx = {
|
|
236
|
+
correlationId: correlationId,
|
|
237
|
+
requestId: requestId,
|
|
238
|
+
timestamp,
|
|
239
|
+
sequence,
|
|
240
|
+
};
|
|
241
|
+
// Add optional span IDs if present
|
|
242
|
+
if (spanId && isValidId(spanId)) {
|
|
243
|
+
ctx.spanId = spanId;
|
|
244
|
+
if (parentSpanId && isValidId(parentSpanId)) {
|
|
245
|
+
ctx.parentSpanId = parentSpanId;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
return ctx;
|
|
249
|
+
}
|
|
250
|
+
// ============================================================================
|
|
251
|
+
// REQUEST EXTRACTION & INJECTION
|
|
252
|
+
// ============================================================================
|
|
253
|
+
/**
|
|
254
|
+
* Extracts correlation context from a Request's headers.
|
|
255
|
+
*
|
|
256
|
+
* Checks headers in priority order:
|
|
257
|
+
* 1. X-Dotdo-Request (full context)
|
|
258
|
+
* 2. X-Correlation-ID + X-Request-ID (fallback)
|
|
259
|
+
* 3. X-Correlation-ID only
|
|
260
|
+
* 4. X-Request-ID only
|
|
261
|
+
*
|
|
262
|
+
* @param request - The Request object to extract from
|
|
263
|
+
* @returns The correlation context, or null if no correlation headers found
|
|
264
|
+
*
|
|
265
|
+
* @example
|
|
266
|
+
* ```typescript
|
|
267
|
+
* const request = new Request('http://localhost/api/test', {
|
|
268
|
+
* headers: { 'X-Dotdo-Request': 'corr-abc123.req-xyz789.1704067200000.1' }
|
|
269
|
+
* })
|
|
270
|
+
* const ctx = extractCorrelationFromRequest(request)
|
|
271
|
+
* // { correlationId: 'corr-abc123', requestId: 'req-xyz789', ... }
|
|
272
|
+
* ```
|
|
273
|
+
*/
|
|
274
|
+
export function extractCorrelationFromRequest(request) {
|
|
275
|
+
// Priority 1: X-Dotdo-Request header (full context)
|
|
276
|
+
const dotdoHeader = request.headers.get(DOTDO_REQUEST_HEADER);
|
|
277
|
+
if (dotdoHeader) {
|
|
278
|
+
try {
|
|
279
|
+
return parseDotdoRequestHeader(dotdoHeader);
|
|
280
|
+
}
|
|
281
|
+
catch {
|
|
282
|
+
// Fall through to individual headers
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
// Priority 2: Individual headers
|
|
286
|
+
const correlationId = request.headers.get(CORRELATION_ID_HEADER);
|
|
287
|
+
const requestId = request.headers.get(REQUEST_ID_HEADER);
|
|
288
|
+
// No correlation headers found
|
|
289
|
+
if (!correlationId && !requestId) {
|
|
290
|
+
return null;
|
|
291
|
+
}
|
|
292
|
+
// Build partial context from individual headers
|
|
293
|
+
const ctx = {
|
|
294
|
+
correlationId: correlationId || generateCorrelationId(),
|
|
295
|
+
requestId: requestId || generateRequestId(),
|
|
296
|
+
timestamp: Date.now(),
|
|
297
|
+
sequence: 1,
|
|
298
|
+
};
|
|
299
|
+
return ctx;
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* Injects correlation headers into a Request.
|
|
303
|
+
*
|
|
304
|
+
* Sets:
|
|
305
|
+
* - X-Correlation-ID
|
|
306
|
+
* - X-Request-ID
|
|
307
|
+
* - X-Dotdo-Request (combined)
|
|
308
|
+
*
|
|
309
|
+
* Note: Increments sequence number for propagation.
|
|
310
|
+
*
|
|
311
|
+
* @param request - The original Request
|
|
312
|
+
* @param ctx - The correlation context to inject
|
|
313
|
+
* @returns A new Request with correlation headers added
|
|
314
|
+
*
|
|
315
|
+
* @example
|
|
316
|
+
* ```typescript
|
|
317
|
+
* const ctx = { correlationId: 'corr-abc', requestId: 'req-xyz', timestamp: Date.now(), sequence: 1 }
|
|
318
|
+
* const newRequest = injectCorrelationHeaders(originalRequest, ctx)
|
|
319
|
+
* // newRequest has X-Correlation-ID, X-Request-ID, X-Dotdo-Request headers
|
|
320
|
+
* ```
|
|
321
|
+
*/
|
|
322
|
+
export function injectCorrelationHeaders(request, ctx) {
|
|
323
|
+
// Clone headers and add correlation headers
|
|
324
|
+
const headers = new Headers(request.headers);
|
|
325
|
+
// Create propagation context with incremented sequence
|
|
326
|
+
const propagationCtx = {
|
|
327
|
+
...ctx,
|
|
328
|
+
sequence: ctx.sequence + 1,
|
|
329
|
+
};
|
|
330
|
+
// Set all correlation headers
|
|
331
|
+
headers.set(CORRELATION_ID_HEADER, propagationCtx.correlationId);
|
|
332
|
+
headers.set(REQUEST_ID_HEADER, propagationCtx.requestId);
|
|
333
|
+
headers.set(DOTDO_REQUEST_HEADER, createDotdoRequestHeader(propagationCtx));
|
|
334
|
+
// Create new request with updated headers
|
|
335
|
+
// Note: Cloudflare Request type doesn't support mode, credentials, cache, referrer
|
|
336
|
+
return new Request(request.url, {
|
|
337
|
+
method: request.method,
|
|
338
|
+
headers,
|
|
339
|
+
body: request.body,
|
|
340
|
+
redirect: request.redirect,
|
|
341
|
+
integrity: request.integrity,
|
|
342
|
+
});
|
|
343
|
+
}
|
|
344
|
+
// ============================================================================
|
|
345
|
+
// SPAN MANAGEMENT
|
|
346
|
+
// ============================================================================
|
|
347
|
+
/**
|
|
348
|
+
* Creates a child span from a parent correlation context.
|
|
349
|
+
*
|
|
350
|
+
* Child spans:
|
|
351
|
+
* - Inherit the correlationId (same trace)
|
|
352
|
+
* - Get a new requestId
|
|
353
|
+
* - Get a new spanId
|
|
354
|
+
* - Reference parent's spanId as parentSpanId
|
|
355
|
+
* - Increment sequence
|
|
356
|
+
* - Use current timestamp
|
|
357
|
+
*
|
|
358
|
+
* @param parent - The parent correlation context
|
|
359
|
+
* @returns A new child correlation context
|
|
360
|
+
*
|
|
361
|
+
* @example
|
|
362
|
+
* ```typescript
|
|
363
|
+
* const parent = { correlationId: 'corr-abc', spanId: 'span-123', sequence: 1, ... }
|
|
364
|
+
* const child = createChildSpan(parent)
|
|
365
|
+
* // { correlationId: 'corr-abc', spanId: 'span-xyz', parentSpanId: 'span-123', sequence: 2, ... }
|
|
366
|
+
* ```
|
|
367
|
+
*/
|
|
368
|
+
export function createChildSpan(parent) {
|
|
369
|
+
return {
|
|
370
|
+
correlationId: parent.correlationId,
|
|
371
|
+
requestId: generateRequestId(),
|
|
372
|
+
timestamp: Date.now(),
|
|
373
|
+
sequence: parent.sequence + 1,
|
|
374
|
+
spanId: generateSpanId(),
|
|
375
|
+
parentSpanId: parent.spanId,
|
|
376
|
+
};
|
|
377
|
+
}
|
|
378
|
+
// ============================================================================
|
|
379
|
+
// SESSION CORRELATION
|
|
380
|
+
// ============================================================================
|
|
381
|
+
/**
|
|
382
|
+
* Creates a correlation context from a session ID.
|
|
383
|
+
*
|
|
384
|
+
* Useful for linking frontend session events to backend traces.
|
|
385
|
+
* The same session ID will always produce the same base correlation ID
|
|
386
|
+
* (deterministic for grouping).
|
|
387
|
+
*
|
|
388
|
+
* @param sessionId - The session identifier
|
|
389
|
+
* @returns A correlation context tied to the session
|
|
390
|
+
*
|
|
391
|
+
* @example
|
|
392
|
+
* ```typescript
|
|
393
|
+
* const ctx = createSessionCorrelation('session-user123')
|
|
394
|
+
* // ctx.correlationId will include 'session-user123' for consistent grouping
|
|
395
|
+
* ```
|
|
396
|
+
*/
|
|
397
|
+
export function createSessionCorrelation(sessionId) {
|
|
398
|
+
// Create deterministic correlation ID from session ID
|
|
399
|
+
const correlationId = `${sanitizeId(sessionId)}`;
|
|
400
|
+
return {
|
|
401
|
+
correlationId,
|
|
402
|
+
requestId: generateRequestId(),
|
|
403
|
+
timestamp: Date.now(),
|
|
404
|
+
sequence: 1,
|
|
405
|
+
};
|
|
406
|
+
}
|
|
407
|
+
/**
|
|
408
|
+
* Links a frontend event to a backend correlation context.
|
|
409
|
+
*
|
|
410
|
+
* Returns true if the frontend event's correlationId matches
|
|
411
|
+
* the backend context's correlationId.
|
|
412
|
+
*
|
|
413
|
+
* @param frontendEvent - The frontend event with correlationId
|
|
414
|
+
* @param backendCtx - The backend correlation context
|
|
415
|
+
* @returns true if the events are linked (same correlation)
|
|
416
|
+
*
|
|
417
|
+
* @example
|
|
418
|
+
* ```typescript
|
|
419
|
+
* const frontendEvent = { correlationId: 'corr-abc123', type: 'request', data: {} }
|
|
420
|
+
* const backendCtx = { correlationId: 'corr-abc123', ... }
|
|
421
|
+
* const isLinked = linkFrontendToBackend(frontendEvent, backendCtx)
|
|
422
|
+
* // true
|
|
423
|
+
* ```
|
|
424
|
+
*/
|
|
425
|
+
export function linkFrontendToBackend(frontendEvent, backendCtx) {
|
|
426
|
+
return frontendEvent.correlationId === backendCtx.correlationId;
|
|
427
|
+
}
|
|
428
|
+
/**
|
|
429
|
+
* Creates a Hono middleware for correlation header propagation.
|
|
430
|
+
*
|
|
431
|
+
* This middleware:
|
|
432
|
+
* 1. Extracts correlation context from incoming request
|
|
433
|
+
* 2. Generates new context if none exists (root request)
|
|
434
|
+
* 3. Stores context in c.set('correlation', ctx) for handlers
|
|
435
|
+
* 4. Adds correlation headers to the response
|
|
436
|
+
*
|
|
437
|
+
* @returns Hono middleware function
|
|
438
|
+
*
|
|
439
|
+
* @example
|
|
440
|
+
* ```typescript
|
|
441
|
+
* import { Hono } from 'hono'
|
|
442
|
+
* import { correlationMiddleware } from './correlation'
|
|
443
|
+
*
|
|
444
|
+
* const app = new Hono()
|
|
445
|
+
* app.use('*', correlationMiddleware())
|
|
446
|
+
*
|
|
447
|
+
* app.get('/api/test', (c) => {
|
|
448
|
+
* const ctx = c.get('correlation')
|
|
449
|
+
* return c.json({ correlationId: ctx.correlationId })
|
|
450
|
+
* })
|
|
451
|
+
* ```
|
|
452
|
+
*/
|
|
453
|
+
export function correlationMiddleware() {
|
|
454
|
+
return async (c, next) => {
|
|
455
|
+
// Extract or create correlation context
|
|
456
|
+
let ctx = extractCorrelationFromRequest(c.req.raw);
|
|
457
|
+
if (!ctx) {
|
|
458
|
+
// Root request - create new correlation context
|
|
459
|
+
ctx = {
|
|
460
|
+
correlationId: generateCorrelationId(),
|
|
461
|
+
requestId: generateRequestId(),
|
|
462
|
+
timestamp: Date.now(),
|
|
463
|
+
sequence: 1,
|
|
464
|
+
spanId: generateSpanId(),
|
|
465
|
+
};
|
|
466
|
+
}
|
|
467
|
+
else if (!ctx.spanId) {
|
|
468
|
+
// Add span ID if not present
|
|
469
|
+
ctx = {
|
|
470
|
+
...ctx,
|
|
471
|
+
spanId: generateSpanId(),
|
|
472
|
+
};
|
|
473
|
+
}
|
|
474
|
+
// Store context for handlers
|
|
475
|
+
c.set('correlation', ctx);
|
|
476
|
+
// Process request
|
|
477
|
+
await next();
|
|
478
|
+
// Add correlation headers to response
|
|
479
|
+
c.header(CORRELATION_ID_HEADER, ctx.correlationId);
|
|
480
|
+
c.header(REQUEST_ID_HEADER, ctx.requestId);
|
|
481
|
+
c.header(DOTDO_REQUEST_HEADER, createDotdoRequestHeader(ctx));
|
|
482
|
+
};
|
|
483
|
+
}
|
|
484
|
+
//# sourceMappingURL=correlation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"correlation.js","sourceRoot":"","sources":["../../../workflows/context/correlation.ts"],"names":[],"mappings":"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"}
|