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.
Files changed (667) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +446 -315
  3. package/cli/README.md +238 -0
  4. package/cli/agent.ts +72 -0
  5. package/cli/bin.js +44 -0
  6. package/cli/bin.ts +38 -0
  7. package/cli/build.ts +157 -0
  8. package/cli/commands/auth/login.ts +14 -0
  9. package/cli/commands/auth/logout.ts +6 -0
  10. package/cli/commands/auth/whoami.ts +16 -0
  11. package/cli/commands/deploy-multi.ts +245 -0
  12. package/cli/commands/dev/deploy.ts +100 -0
  13. package/cli/commands/dev/dev.ts +95 -0
  14. package/cli/commands/dev/logs.ts +91 -0
  15. package/cli/commands/dev-local.ts +88 -0
  16. package/cli/commands/do-ops.ts +314 -0
  17. package/cli/commands/index.ts +100 -0
  18. package/cli/commands/init.ts +247 -0
  19. package/cli/commands/introspect/emitter.ts +315 -0
  20. package/cli/commands/introspect/index.ts +193 -0
  21. package/cli/commands/link.ts +598 -0
  22. package/cli/commands/snippets.ts +415 -0
  23. package/cli/commands/tunnel.ts +239 -0
  24. package/cli/device-auth.ts +289 -0
  25. package/cli/fallback.ts +12 -0
  26. package/cli/index.ts +121 -0
  27. package/cli/main.ts +246 -0
  28. package/cli/mcp-stdio.ts +790 -0
  29. package/cli/package.json +62 -0
  30. package/cli/runtime/do-registry.ts +193 -0
  31. package/cli/runtime/embedded-db.ts +344 -0
  32. package/cli/runtime/index.ts +9 -0
  33. package/cli/runtime/miniflare-adapter.ts +162 -0
  34. package/cli/sandbox.ts +82 -0
  35. package/cli/src/args.ts +174 -0
  36. package/cli/src/auth.ts +55 -0
  37. package/cli/src/commands/call.ts +84 -0
  38. package/cli/src/commands/charge.ts +96 -0
  39. package/cli/src/commands/config.ts +115 -0
  40. package/cli/src/commands/email.ts +112 -0
  41. package/cli/src/commands/llm.ts +115 -0
  42. package/cli/src/commands/queue.ts +134 -0
  43. package/cli/src/commands/text.ts +86 -0
  44. package/cli/src/config.ts +185 -0
  45. package/cli/src/output.ts +246 -0
  46. package/cli/src/rpc.ts +192 -0
  47. package/cli/utils/config.ts +282 -0
  48. package/cli/utils/detect.ts +73 -0
  49. package/cli/utils/index.ts +15 -0
  50. package/cli/utils/logger.ts +232 -0
  51. package/dist/ai/index.js +19 -0
  52. package/dist/ai/index.js.map +1 -0
  53. package/dist/ai/template-literals.js +852 -0
  54. package/dist/ai/template-literals.js.map +1 -0
  55. package/dist/api/middleware/auth-federation.js +573 -0
  56. package/dist/api/middleware/auth-federation.js.map +1 -0
  57. package/dist/api/middleware/auth.js +545 -0
  58. package/dist/api/middleware/auth.js.map +1 -0
  59. package/dist/db/actions.js +212 -0
  60. package/dist/db/actions.js.map +1 -0
  61. package/dist/db/auth.js +506 -0
  62. package/dist/db/auth.js.map +1 -0
  63. package/dist/db/branches.js +65 -0
  64. package/dist/db/branches.js.map +1 -0
  65. package/dist/db/clickhouse.js +1074 -0
  66. package/dist/db/clickhouse.js.map +1 -0
  67. package/dist/db/dlq.js +39 -0
  68. package/dist/db/dlq.js.map +1 -0
  69. package/dist/db/events.js +28 -0
  70. package/dist/db/events.js.map +1 -0
  71. package/dist/db/exec.js +64 -0
  72. package/dist/db/exec.js.map +1 -0
  73. package/dist/db/files.js +85 -0
  74. package/dist/db/files.js.map +1 -0
  75. package/dist/db/flags.js +24 -0
  76. package/dist/db/flags.js.map +1 -0
  77. package/dist/db/git.js +116 -0
  78. package/dist/db/git.js.map +1 -0
  79. package/dist/db/iceberg/inverted-index.js +862 -0
  80. package/dist/db/iceberg/inverted-index.js.map +1 -0
  81. package/dist/db/iceberg/puffin.js +878 -0
  82. package/dist/db/iceberg/puffin.js.map +1 -0
  83. package/dist/db/iceberg/search-manifest.js +422 -0
  84. package/dist/db/iceberg/search-manifest.js.map +1 -0
  85. package/dist/db/iceberg/types.js +8 -0
  86. package/dist/db/iceberg/types.js.map +1 -0
  87. package/dist/db/index.js +121 -0
  88. package/dist/db/index.js.map +1 -0
  89. package/dist/db/integrations.js +368 -0
  90. package/dist/db/integrations.js.map +1 -0
  91. package/dist/db/json-indexes.js +332 -0
  92. package/dist/db/json-indexes.js.map +1 -0
  93. package/dist/db/linked-accounts.js +287 -0
  94. package/dist/db/linked-accounts.js.map +1 -0
  95. package/dist/db/nouns.js +183 -0
  96. package/dist/db/nouns.js.map +1 -0
  97. package/dist/db/objects.js +170 -0
  98. package/dist/db/objects.js.map +1 -0
  99. package/dist/db/primitives/dag-scheduler/index.js +869 -0
  100. package/dist/db/primitives/dag-scheduler/index.js.map +1 -0
  101. package/dist/db/primitives/exactly-once-context.js +237 -0
  102. package/dist/db/primitives/exactly-once-context.js.map +1 -0
  103. package/dist/db/primitives/index.js +62 -0
  104. package/dist/db/primitives/index.js.map +1 -0
  105. package/dist/db/primitives/keyed-router.js +145 -0
  106. package/dist/db/primitives/keyed-router.js.map +1 -0
  107. package/dist/db/primitives/observability.js +162 -0
  108. package/dist/db/primitives/observability.js.map +1 -0
  109. package/dist/db/primitives/schema-evolution.js +643 -0
  110. package/dist/db/primitives/schema-evolution.js.map +1 -0
  111. package/dist/db/primitives/stateful-operator/index.js +770 -0
  112. package/dist/db/primitives/stateful-operator/index.js.map +1 -0
  113. package/dist/db/primitives/temporal-store.js +306 -0
  114. package/dist/db/primitives/temporal-store.js.map +1 -0
  115. package/dist/db/primitives/typed-column-store.js +1229 -0
  116. package/dist/db/primitives/typed-column-store.js.map +1 -0
  117. package/dist/db/primitives/utils/duration.js +162 -0
  118. package/dist/db/primitives/utils/duration.js.map +1 -0
  119. package/dist/db/primitives/utils/murmur3.js +116 -0
  120. package/dist/db/primitives/utils/murmur3.js.map +1 -0
  121. package/dist/db/primitives/watermark-service.js +136 -0
  122. package/dist/db/primitives/watermark-service.js.map +1 -0
  123. package/dist/db/primitives/window-manager.js +764 -0
  124. package/dist/db/primitives/window-manager.js.map +1 -0
  125. package/dist/db/relationships.js +66 -0
  126. package/dist/db/relationships.js.map +1 -0
  127. package/dist/db/schema-minimal.js +61 -0
  128. package/dist/db/schema-minimal.js.map +1 -0
  129. package/dist/db/search.js +28 -0
  130. package/dist/db/search.js.map +1 -0
  131. package/dist/db/stores.js +1665 -0
  132. package/dist/db/stores.js.map +1 -0
  133. package/dist/db/things.js +297 -0
  134. package/dist/db/things.js.map +1 -0
  135. package/dist/db/vault.js +171 -0
  136. package/dist/db/vault.js.map +1 -0
  137. package/dist/db/verbs.js +102 -0
  138. package/dist/db/verbs.js.map +1 -0
  139. package/dist/do/base.js +48 -0
  140. package/dist/do/base.js.map +1 -0
  141. package/dist/do/tiny.js +31 -0
  142. package/dist/do/tiny.js.map +1 -0
  143. package/dist/lib/DOAuth.js +261 -0
  144. package/dist/lib/DOAuth.js.map +1 -0
  145. package/dist/lib/DODispatcher.js +72 -0
  146. package/dist/lib/DODispatcher.js.map +1 -0
  147. package/dist/lib/Modifier.js +189 -0
  148. package/dist/lib/Modifier.js.map +1 -0
  149. package/dist/lib/StateStorage.js +403 -0
  150. package/dist/lib/StateStorage.js.map +1 -0
  151. package/dist/lib/TypeRegistry.js +122 -0
  152. package/dist/lib/TypeRegistry.js.map +1 -0
  153. package/dist/lib/ai/gateway.js +247 -0
  154. package/dist/lib/ai/gateway.js.map +1 -0
  155. package/dist/lib/ai/tool-loop-agent.js +591 -0
  156. package/dist/lib/ai/tool-loop-agent.js.map +1 -0
  157. package/dist/lib/auto-wiring.js +439 -0
  158. package/dist/lib/auto-wiring.js.map +1 -0
  159. package/dist/lib/browse/browserbase.js +163 -0
  160. package/dist/lib/browse/browserbase.js.map +1 -0
  161. package/dist/lib/browse/cloudflare.js +144 -0
  162. package/dist/lib/browse/cloudflare.js.map +1 -0
  163. package/dist/lib/browse/index.js +62 -0
  164. package/dist/lib/browse/index.js.map +1 -0
  165. package/dist/lib/browse/types.js +13 -0
  166. package/dist/lib/browse/types.js.map +1 -0
  167. package/dist/lib/cache/index.js +37 -0
  168. package/dist/lib/cache/index.js.map +1 -0
  169. package/dist/lib/cache/visibility.js +638 -0
  170. package/dist/lib/cache/visibility.js.map +1 -0
  171. package/dist/lib/capabilities.js +268 -0
  172. package/dist/lib/capabilities.js.map +1 -0
  173. package/dist/lib/channels/base.js +106 -0
  174. package/dist/lib/channels/base.js.map +1 -0
  175. package/dist/lib/channels/discord.js +94 -0
  176. package/dist/lib/channels/discord.js.map +1 -0
  177. package/dist/lib/channels/email.js +204 -0
  178. package/dist/lib/channels/email.js.map +1 -0
  179. package/dist/lib/channels/index.js +90 -0
  180. package/dist/lib/channels/index.js.map +1 -0
  181. package/dist/lib/channels/mdxui-chat.js +95 -0
  182. package/dist/lib/channels/mdxui-chat.js.map +1 -0
  183. package/dist/lib/channels/slack-blockkit.js +121 -0
  184. package/dist/lib/channels/slack-blockkit.js.map +1 -0
  185. package/dist/lib/channels/types.js +7 -0
  186. package/dist/lib/channels/types.js.map +1 -0
  187. package/dist/lib/cloudflare/ai.js +654 -0
  188. package/dist/lib/cloudflare/ai.js.map +1 -0
  189. package/dist/lib/cloudflare/index.js +88 -0
  190. package/dist/lib/cloudflare/index.js.map +1 -0
  191. package/dist/lib/cloudflare/kv.js +342 -0
  192. package/dist/lib/cloudflare/kv.js.map +1 -0
  193. package/dist/lib/cloudflare/queues.js +434 -0
  194. package/dist/lib/cloudflare/queues.js.map +1 -0
  195. package/dist/lib/cloudflare/r2.js +604 -0
  196. package/dist/lib/cloudflare/r2.js.map +1 -0
  197. package/dist/lib/cloudflare/vectorize.js +494 -0
  198. package/dist/lib/cloudflare/vectorize.js.map +1 -0
  199. package/dist/lib/cloudflare/workflows.js +569 -0
  200. package/dist/lib/cloudflare/workflows.js.map +1 -0
  201. package/dist/lib/colo/caching.js +196 -0
  202. package/dist/lib/colo/caching.js.map +1 -0
  203. package/dist/lib/colo/detection.js +194 -0
  204. package/dist/lib/colo/detection.js.map +1 -0
  205. package/dist/lib/colo/external-data.js +219 -0
  206. package/dist/lib/colo/external-data.js.map +1 -0
  207. package/dist/lib/colo/globe-data.js +179 -0
  208. package/dist/lib/colo/globe-data.js.map +1 -0
  209. package/dist/lib/colo/index.js +16 -0
  210. package/dist/lib/colo/index.js.map +1 -0
  211. package/dist/lib/decorators.js +37 -0
  212. package/dist/lib/decorators.js.map +1 -0
  213. package/dist/lib/discovery.js +81 -0
  214. package/dist/lib/discovery.js.map +1 -0
  215. package/dist/lib/executors/AgenticFunctionExecutor.js +619 -0
  216. package/dist/lib/executors/AgenticFunctionExecutor.js.map +1 -0
  217. package/dist/lib/executors/BaseFunctionExecutor.js +328 -0
  218. package/dist/lib/executors/BaseFunctionExecutor.js.map +1 -0
  219. package/dist/lib/executors/CascadeExecutor.js +418 -0
  220. package/dist/lib/executors/CascadeExecutor.js.map +1 -0
  221. package/dist/lib/executors/CodeFunctionExecutor.js +904 -0
  222. package/dist/lib/executors/CodeFunctionExecutor.js.map +1 -0
  223. package/dist/lib/executors/GenerativeFunctionExecutor.js +904 -0
  224. package/dist/lib/executors/GenerativeFunctionExecutor.js.map +1 -0
  225. package/dist/lib/executors/HumanFunctionExecutor.js +884 -0
  226. package/dist/lib/executors/HumanFunctionExecutor.js.map +1 -0
  227. package/dist/lib/executors/ParallelStepExecutor.js +308 -0
  228. package/dist/lib/executors/ParallelStepExecutor.js.map +1 -0
  229. package/dist/lib/executors/types.js +12 -0
  230. package/dist/lib/executors/types.js.map +1 -0
  231. package/dist/lib/experiments.js +89 -0
  232. package/dist/lib/experiments.js.map +1 -0
  233. package/dist/lib/flags/store.js +262 -0
  234. package/dist/lib/flags/store.js.map +1 -0
  235. package/dist/lib/functions/FunctionComposition.js +467 -0
  236. package/dist/lib/functions/FunctionComposition.js.map +1 -0
  237. package/dist/lib/functions/FunctionMiddleware.js +457 -0
  238. package/dist/lib/functions/FunctionMiddleware.js.map +1 -0
  239. package/dist/lib/functions/FunctionRegistry.js +426 -0
  240. package/dist/lib/functions/FunctionRegistry.js.map +1 -0
  241. package/dist/lib/functions/createFunction.js +1048 -0
  242. package/dist/lib/functions/createFunction.js.map +1 -0
  243. package/dist/lib/humans/index.js +68 -0
  244. package/dist/lib/humans/index.js.map +1 -0
  245. package/dist/lib/humans/templates.js +117 -0
  246. package/dist/lib/humans/templates.js.map +1 -0
  247. package/dist/lib/identity.js +98 -0
  248. package/dist/lib/identity.js.map +1 -0
  249. package/dist/lib/index.js +9 -0
  250. package/dist/lib/index.js.map +1 -0
  251. package/dist/lib/logging/error-logger.js +163 -0
  252. package/dist/lib/logging/error-logger.js.map +1 -0
  253. package/dist/lib/logging/index.js +160 -0
  254. package/dist/lib/logging/index.js.map +1 -0
  255. package/dist/lib/mixins/bash.js +753 -0
  256. package/dist/lib/mixins/bash.js.map +1 -0
  257. package/dist/lib/mixins/fs.js +648 -0
  258. package/dist/lib/mixins/fs.js.map +1 -0
  259. package/dist/lib/mixins/git.js +1006 -0
  260. package/dist/lib/mixins/git.js.map +1 -0
  261. package/dist/lib/mixins/npm.js +662 -0
  262. package/dist/lib/mixins/npm.js.map +1 -0
  263. package/dist/lib/noun-id.js +278 -0
  264. package/dist/lib/noun-id.js.map +1 -0
  265. package/dist/lib/rate-limit/sliding-window.js +148 -0
  266. package/dist/lib/rate-limit/sliding-window.js.map +1 -0
  267. package/dist/lib/rate-limit.js +110 -0
  268. package/dist/lib/rate-limit.js.map +1 -0
  269. package/dist/lib/rpc/bindings.js +548 -0
  270. package/dist/lib/rpc/bindings.js.map +1 -0
  271. package/dist/lib/rpc/index.js +64 -0
  272. package/dist/lib/rpc/index.js.map +1 -0
  273. package/dist/lib/safe-stringify.js +223 -0
  274. package/dist/lib/safe-stringify.js.map +1 -0
  275. package/dist/lib/sandbox/miniflare-sandbox.js +1007 -0
  276. package/dist/lib/sandbox/miniflare-sandbox.js.map +1 -0
  277. package/dist/lib/sqids.js +110 -0
  278. package/dist/lib/sqids.js.map +1 -0
  279. package/dist/lib/sql/adapters/index.js +10 -0
  280. package/dist/lib/sql/adapters/index.js.map +1 -0
  281. package/dist/lib/sql/adapters/node-sql-parser.js +552 -0
  282. package/dist/lib/sql/adapters/node-sql-parser.js.map +1 -0
  283. package/dist/lib/sql/adapters/pgsql-parser.js +1190 -0
  284. package/dist/lib/sql/adapters/pgsql-parser.js.map +1 -0
  285. package/dist/lib/sql/index.js +277 -0
  286. package/dist/lib/sql/index.js.map +1 -0
  287. package/dist/lib/sql/types.js +56 -0
  288. package/dist/lib/sql/types.js.map +1 -0
  289. package/dist/lib/type-classifier.js +126 -0
  290. package/dist/lib/type-classifier.js.map +1 -0
  291. package/dist/lib/utils/html.js +47 -0
  292. package/dist/lib/utils/html.js.map +1 -0
  293. package/dist/lib/validation.js +48 -0
  294. package/dist/lib/validation.js.map +1 -0
  295. package/dist/lib/vault/store.js +411 -0
  296. package/dist/lib/vault/store.js.map +1 -0
  297. package/dist/metrics/hunch.js +739 -0
  298. package/dist/metrics/hunch.js.map +1 -0
  299. package/dist/objects/API.js +302 -0
  300. package/dist/objects/API.js.map +1 -0
  301. package/dist/objects/Agent.js +179 -0
  302. package/dist/objects/Agent.js.map +1 -0
  303. package/dist/objects/AgenticFunctionExecutor.js +8 -0
  304. package/dist/objects/AgenticFunctionExecutor.js.map +1 -0
  305. package/dist/objects/App.js +83 -0
  306. package/dist/objects/App.js.map +1 -0
  307. package/dist/objects/Browser.js +884 -0
  308. package/dist/objects/Browser.js.map +1 -0
  309. package/dist/objects/Business.js +107 -0
  310. package/dist/objects/Business.js.map +1 -0
  311. package/dist/objects/CLI.js +221 -0
  312. package/dist/objects/CLI.js.map +1 -0
  313. package/dist/objects/CodeFunctionExecutor.js +8 -0
  314. package/dist/objects/CodeFunctionExecutor.js.map +1 -0
  315. package/dist/objects/Collection.js +161 -0
  316. package/dist/objects/Collection.js.map +1 -0
  317. package/dist/objects/DO.js +41 -0
  318. package/dist/objects/DO.js.map +1 -0
  319. package/dist/objects/DOBase.js +2309 -0
  320. package/dist/objects/DOBase.js.map +1 -0
  321. package/dist/objects/DOCache.js +153 -0
  322. package/dist/objects/DOCache.js.map +1 -0
  323. package/dist/objects/DOFull.js +1676 -0
  324. package/dist/objects/DOFull.js.map +1 -0
  325. package/dist/objects/DOTiny.js +207 -0
  326. package/dist/objects/DOTiny.js.map +1 -0
  327. package/dist/objects/Directory.js +199 -0
  328. package/dist/objects/Directory.js.map +1 -0
  329. package/dist/objects/Entity.js +413 -0
  330. package/dist/objects/Entity.js.map +1 -0
  331. package/dist/objects/Function.js +116 -0
  332. package/dist/objects/Function.js.map +1 -0
  333. package/dist/objects/Human.js +231 -0
  334. package/dist/objects/Human.js.map +1 -0
  335. package/dist/objects/HumanFunctionExecutor.js +8 -0
  336. package/dist/objects/HumanFunctionExecutor.js.map +1 -0
  337. package/dist/objects/IcebergMetadataDO.js +938 -0
  338. package/dist/objects/IcebergMetadataDO.js.map +1 -0
  339. package/dist/objects/IntegrationsDO.js +1174 -0
  340. package/dist/objects/IntegrationsDO.js.map +1 -0
  341. package/dist/objects/ObservabilityBroadcaster.js +149 -0
  342. package/dist/objects/ObservabilityBroadcaster.js.map +1 -0
  343. package/dist/objects/Package.js +154 -0
  344. package/dist/objects/Package.js.map +1 -0
  345. package/dist/objects/Product.js +193 -0
  346. package/dist/objects/Product.js.map +1 -0
  347. package/dist/objects/SDK.js +152 -0
  348. package/dist/objects/SDK.js.map +1 -0
  349. package/dist/objects/SaaS.js +235 -0
  350. package/dist/objects/SaaS.js.map +1 -0
  351. package/dist/objects/SandboxDO.js +759 -0
  352. package/dist/objects/SandboxDO.js.map +1 -0
  353. package/dist/objects/Service.js +337 -0
  354. package/dist/objects/Service.js.map +1 -0
  355. package/dist/objects/Site.js +80 -0
  356. package/dist/objects/Site.js.map +1 -0
  357. package/dist/objects/Startup.js +479 -0
  358. package/dist/objects/Startup.js.map +1 -0
  359. package/dist/objects/ThingsDO.js +170 -0
  360. package/dist/objects/ThingsDO.js.map +1 -0
  361. package/dist/objects/VectorShardDO.js +650 -0
  362. package/dist/objects/VectorShardDO.js.map +1 -0
  363. package/dist/objects/Worker.js +144 -0
  364. package/dist/objects/Worker.js.map +1 -0
  365. package/dist/objects/Workflow.js +196 -0
  366. package/dist/objects/Workflow.js.map +1 -0
  367. package/dist/objects/WorkflowFactory.js +313 -0
  368. package/dist/objects/WorkflowFactory.js.map +1 -0
  369. package/dist/objects/WorkflowRuntime.js +863 -0
  370. package/dist/objects/WorkflowRuntime.js.map +1 -0
  371. package/dist/objects/circuit-breaker-bulkhead.js +178 -0
  372. package/dist/objects/circuit-breaker-bulkhead.js.map +1 -0
  373. package/dist/objects/createFunction.js +934 -0
  374. package/dist/objects/createFunction.js.map +1 -0
  375. package/dist/objects/index.js +80 -0
  376. package/dist/objects/index.js.map +1 -0
  377. package/dist/objects/lifecycle/Branch.js +275 -0
  378. package/dist/objects/lifecycle/Branch.js.map +1 -0
  379. package/dist/objects/lifecycle/Clone.js +1499 -0
  380. package/dist/objects/lifecycle/Clone.js.map +1 -0
  381. package/dist/objects/lifecycle/Compact.js +237 -0
  382. package/dist/objects/lifecycle/Compact.js.map +1 -0
  383. package/dist/objects/lifecycle/Promote.js +476 -0
  384. package/dist/objects/lifecycle/Promote.js.map +1 -0
  385. package/dist/objects/lifecycle/Shard.js +560 -0
  386. package/dist/objects/lifecycle/Shard.js.map +1 -0
  387. package/dist/objects/lifecycle/index.js +15 -0
  388. package/dist/objects/lifecycle/index.js.map +1 -0
  389. package/dist/objects/lifecycle/types.js +33 -0
  390. package/dist/objects/lifecycle/types.js.map +1 -0
  391. package/dist/objects/mixins/infrastructure.js +171 -0
  392. package/dist/objects/mixins/infrastructure.js.map +1 -0
  393. package/dist/objects/modules/StoresModule.js +153 -0
  394. package/dist/objects/modules/StoresModule.js.map +1 -0
  395. package/dist/objects/persistence/checkpoint-manager.js +606 -0
  396. package/dist/objects/persistence/checkpoint-manager.js.map +1 -0
  397. package/dist/objects/persistence/index.js +72 -0
  398. package/dist/objects/persistence/index.js.map +1 -0
  399. package/dist/objects/persistence/migration-runner.js +562 -0
  400. package/dist/objects/persistence/migration-runner.js.map +1 -0
  401. package/dist/objects/persistence/replication-manager.js +501 -0
  402. package/dist/objects/persistence/replication-manager.js.map +1 -0
  403. package/dist/objects/persistence/tiered-storage-manager.js +595 -0
  404. package/dist/objects/persistence/tiered-storage-manager.js.map +1 -0
  405. package/dist/objects/persistence/types.js +14 -0
  406. package/dist/objects/persistence/types.js.map +1 -0
  407. package/dist/objects/persistence/wal-manager.js +653 -0
  408. package/dist/objects/persistence/wal-manager.js.map +1 -0
  409. package/dist/objects/presets/index.js +20 -0
  410. package/dist/objects/presets/index.js.map +1 -0
  411. package/dist/objects/presets/primitives.js +188 -0
  412. package/dist/objects/presets/primitives.js.map +1 -0
  413. package/dist/objects/primitives/alarm-adapter.js +141 -0
  414. package/dist/objects/primitives/alarm-adapter.js.map +1 -0
  415. package/dist/objects/primitives/index.js +337 -0
  416. package/dist/objects/primitives/index.js.map +1 -0
  417. package/dist/objects/primitives/storage-adapter.js +182 -0
  418. package/dist/objects/primitives/storage-adapter.js.map +1 -0
  419. package/dist/objects/primitives/with-primitives.js +102 -0
  420. package/dist/objects/primitives/with-primitives.js.map +1 -0
  421. package/dist/objects/services/StoreManager.js +227 -0
  422. package/dist/objects/services/StoreManager.js.map +1 -0
  423. package/dist/objects/services/index.js +13 -0
  424. package/dist/objects/services/index.js.map +1 -0
  425. package/dist/objects/transport/auth-layer.js +1451 -0
  426. package/dist/objects/transport/auth-layer.js.map +1 -0
  427. package/dist/objects/transport/capnweb-target.js +355 -0
  428. package/dist/objects/transport/capnweb-target.js.map +1 -0
  429. package/dist/objects/transport/chain.js +441 -0
  430. package/dist/objects/transport/chain.js.map +1 -0
  431. package/dist/objects/transport/handler.js +58 -0
  432. package/dist/objects/transport/handler.js.map +1 -0
  433. package/dist/objects/transport/index.js +53 -0
  434. package/dist/objects/transport/index.js.map +1 -0
  435. package/dist/objects/transport/mcp-server.js +691 -0
  436. package/dist/objects/transport/mcp-server.js.map +1 -0
  437. package/dist/objects/transport/rest-autowire.js +1508 -0
  438. package/dist/objects/transport/rest-autowire.js.map +1 -0
  439. package/dist/objects/transport/rest-router.js +440 -0
  440. package/dist/objects/transport/rest-router.js.map +1 -0
  441. package/dist/objects/transport/rpc-server.js +1539 -0
  442. package/dist/objects/transport/rpc-server.js.map +1 -0
  443. package/dist/objects/transport/shared.js +576 -0
  444. package/dist/objects/transport/shared.js.map +1 -0
  445. package/dist/objects/transport/sync-engine.js +291 -0
  446. package/dist/objects/transport/sync-engine.js.map +1 -0
  447. package/dist/objects/transport/types.js +8 -0
  448. package/dist/objects/transport/types.js.map +1 -0
  449. package/dist/sandbox/index.js +258 -0
  450. package/dist/sandbox/index.js.map +1 -0
  451. package/dist/snippets/artifacts-config.js +241 -0
  452. package/dist/snippets/artifacts-config.js.map +1 -0
  453. package/dist/snippets/artifacts-ingest.js +832 -0
  454. package/dist/snippets/artifacts-ingest.js.map +1 -0
  455. package/dist/snippets/artifacts-serve.js +1035 -0
  456. package/dist/snippets/artifacts-serve.js.map +1 -0
  457. package/dist/snippets/artifacts-types.js +161 -0
  458. package/dist/snippets/artifacts-types.js.map +1 -0
  459. package/dist/snippets/cache-probe.js +376 -0
  460. package/dist/snippets/cache-probe.js.map +1 -0
  461. package/dist/snippets/cache.js +10 -0
  462. package/dist/snippets/cache.js.map +1 -0
  463. package/dist/snippets/events.js +469 -0
  464. package/dist/snippets/events.js.map +1 -0
  465. package/dist/snippets/index.js +7 -0
  466. package/dist/snippets/index.js.map +1 -0
  467. package/dist/snippets/proxy.js +495 -0
  468. package/dist/snippets/proxy.js.map +1 -0
  469. package/dist/snippets/search.js +1759 -0
  470. package/dist/snippets/search.js.map +1 -0
  471. package/dist/streams/index.js +30 -0
  472. package/dist/streams/index.js.map +1 -0
  473. package/dist/streams/observability.js +68 -0
  474. package/dist/streams/observability.js.map +1 -0
  475. package/dist/types/AI.js +92 -0
  476. package/dist/types/AI.js.map +1 -0
  477. package/dist/types/AIFunction.js +171 -0
  478. package/dist/types/AIFunction.js.map +1 -0
  479. package/dist/types/BrowseVerb.js +89 -0
  480. package/dist/types/BrowseVerb.js.map +1 -0
  481. package/dist/types/Browser.js +31 -0
  482. package/dist/types/Browser.js.map +1 -0
  483. package/dist/types/Chaos.js +15 -0
  484. package/dist/types/Chaos.js.map +1 -0
  485. package/dist/types/CloudflareBindings.js +109 -0
  486. package/dist/types/CloudflareBindings.js.map +1 -0
  487. package/dist/types/Collection.js +50 -0
  488. package/dist/types/Collection.js.map +1 -0
  489. package/dist/types/DO.js +2 -0
  490. package/dist/types/DO.js.map +1 -0
  491. package/dist/types/DOLocation.js +63 -0
  492. package/dist/types/DOLocation.js.map +1 -0
  493. package/dist/types/EventHandler.js +57 -0
  494. package/dist/types/EventHandler.js.map +1 -0
  495. package/dist/types/Experiment.js +33 -0
  496. package/dist/types/Experiment.js.map +1 -0
  497. package/dist/types/Flag.js +57 -0
  498. package/dist/types/Flag.js.map +1 -0
  499. package/dist/types/Lifecycle.js +13 -0
  500. package/dist/types/Lifecycle.js.map +1 -0
  501. package/dist/types/Location.js +169 -0
  502. package/dist/types/Location.js.map +1 -0
  503. package/dist/types/Noun.js +66 -0
  504. package/dist/types/Noun.js.map +1 -0
  505. package/dist/types/SessionEvent.js +194 -0
  506. package/dist/types/SessionEvent.js.map +1 -0
  507. package/dist/types/Thing.js +55 -0
  508. package/dist/types/Thing.js.map +1 -0
  509. package/dist/types/ThingDO.js +153 -0
  510. package/dist/types/ThingDO.js.map +1 -0
  511. package/dist/types/Things.js +2 -0
  512. package/dist/types/Things.js.map +1 -0
  513. package/dist/types/Verb.js +119 -0
  514. package/dist/types/Verb.js.map +1 -0
  515. package/dist/types/WorkflowContext.js +70 -0
  516. package/dist/types/WorkflowContext.js.map +1 -0
  517. package/dist/types/analytics-api.js +13 -0
  518. package/dist/types/analytics-api.js.map +1 -0
  519. package/dist/types/capabilities.js +135 -0
  520. package/dist/types/capabilities.js.map +1 -0
  521. package/dist/types/drizzle.js +12 -0
  522. package/dist/types/drizzle.js.map +1 -0
  523. package/dist/types/event.js +201 -0
  524. package/dist/types/event.js.map +1 -0
  525. package/dist/types/fn.js +12 -0
  526. package/dist/types/fn.js.map +1 -0
  527. package/dist/types/iceberg.js +48 -0
  528. package/dist/types/iceberg.js.map +1 -0
  529. package/dist/types/ids.js +170 -0
  530. package/dist/types/ids.js.map +1 -0
  531. package/dist/types/index.js +41 -0
  532. package/dist/types/index.js.map +1 -0
  533. package/dist/types/introspect.js +54 -0
  534. package/dist/types/introspect.js.map +1 -0
  535. package/dist/types/observability.js +124 -0
  536. package/dist/types/observability.js.map +1 -0
  537. package/dist/types/sync-protocol.js +175 -0
  538. package/dist/types/sync-protocol.js.map +1 -0
  539. package/dist/types/vector.js +13 -0
  540. package/dist/types/vector.js.map +1 -0
  541. package/dist/workflows/ScheduleManager.js +473 -0
  542. package/dist/workflows/ScheduleManager.js.map +1 -0
  543. package/dist/workflows/StepDOBridge.js +149 -0
  544. package/dist/workflows/StepDOBridge.js.map +1 -0
  545. package/dist/workflows/StepResultStorage.js +232 -0
  546. package/dist/workflows/StepResultStorage.js.map +1 -0
  547. package/dist/workflows/WaitForEventManager.js +461 -0
  548. package/dist/workflows/WaitForEventManager.js.map +1 -0
  549. package/dist/workflows/analyzer.js +332 -0
  550. package/dist/workflows/analyzer.js.map +1 -0
  551. package/dist/workflows/compat/activity-router.js +484 -0
  552. package/dist/workflows/compat/activity-router.js.map +1 -0
  553. package/dist/workflows/compat/backends/cloudflare-workflows.js +431 -0
  554. package/dist/workflows/compat/backends/cloudflare-workflows.js.map +1 -0
  555. package/dist/workflows/compat/backends/index.js +14 -0
  556. package/dist/workflows/compat/backends/index.js.map +1 -0
  557. package/dist/workflows/compat/errors/index.js +375 -0
  558. package/dist/workflows/compat/errors/index.js.map +1 -0
  559. package/dist/workflows/compat/index.js +79 -0
  560. package/dist/workflows/compat/index.js.map +1 -0
  561. package/dist/workflows/compat/inngest/index.js +989 -0
  562. package/dist/workflows/compat/inngest/index.js.map +1 -0
  563. package/dist/workflows/compat/qstash/index.js +1263 -0
  564. package/dist/workflows/compat/qstash/index.js.map +1 -0
  565. package/dist/workflows/compat/temporal/activities.js +739 -0
  566. package/dist/workflows/compat/temporal/activities.js.map +1 -0
  567. package/dist/workflows/compat/temporal/child-workflows.js +154 -0
  568. package/dist/workflows/compat/temporal/child-workflows.js.map +1 -0
  569. package/dist/workflows/compat/temporal/client.js +381 -0
  570. package/dist/workflows/compat/temporal/client.js.map +1 -0
  571. package/dist/workflows/compat/temporal/context.js +309 -0
  572. package/dist/workflows/compat/temporal/context.js.map +1 -0
  573. package/dist/workflows/compat/temporal/determinism.js +216 -0
  574. package/dist/workflows/compat/temporal/determinism.js.map +1 -0
  575. package/dist/workflows/compat/temporal/errors.js +128 -0
  576. package/dist/workflows/compat/temporal/errors.js.map +1 -0
  577. package/dist/workflows/compat/temporal/index.js +2464 -0
  578. package/dist/workflows/compat/temporal/index.js.map +1 -0
  579. package/dist/workflows/compat/temporal/saga.js +504 -0
  580. package/dist/workflows/compat/temporal/saga.js.map +1 -0
  581. package/dist/workflows/compat/temporal/signals.js +364 -0
  582. package/dist/workflows/compat/temporal/signals.js.map +1 -0
  583. package/dist/workflows/compat/temporal/storage.js +271 -0
  584. package/dist/workflows/compat/temporal/storage.js.map +1 -0
  585. package/dist/workflows/compat/temporal/timers.js +347 -0
  586. package/dist/workflows/compat/temporal/timers.js.map +1 -0
  587. package/dist/workflows/compat/temporal/types.js +7 -0
  588. package/dist/workflows/compat/temporal/types.js.map +1 -0
  589. package/dist/workflows/compat/temporal/unified-primitives.js +339 -0
  590. package/dist/workflows/compat/temporal/unified-primitives.js.map +1 -0
  591. package/dist/workflows/compat/trigger/index.js +468 -0
  592. package/dist/workflows/compat/trigger/index.js.map +1 -0
  593. package/dist/workflows/compat/utils/index.js +69 -0
  594. package/dist/workflows/compat/utils/index.js.map +1 -0
  595. package/dist/workflows/context/correlation-capability.js +266 -0
  596. package/dist/workflows/context/correlation-capability.js.map +1 -0
  597. package/dist/workflows/context/correlation.js +484 -0
  598. package/dist/workflows/context/correlation.js.map +1 -0
  599. package/dist/workflows/context/experiment.js +289 -0
  600. package/dist/workflows/context/experiment.js.map +1 -0
  601. package/dist/workflows/context/flag.js +244 -0
  602. package/dist/workflows/context/flag.js.map +1 -0
  603. package/dist/workflows/context/foundation.js +648 -0
  604. package/dist/workflows/context/foundation.js.map +1 -0
  605. package/dist/workflows/context/human-base.js +106 -0
  606. package/dist/workflows/context/human-base.js.map +1 -0
  607. package/dist/workflows/context/human.js +368 -0
  608. package/dist/workflows/context/human.js.map +1 -0
  609. package/dist/workflows/context/measure.js +354 -0
  610. package/dist/workflows/context/measure.js.map +1 -0
  611. package/dist/workflows/context/rate-limit.js +358 -0
  612. package/dist/workflows/context/rate-limit.js.map +1 -0
  613. package/dist/workflows/context/user.js +117 -0
  614. package/dist/workflows/context/user.js.map +1 -0
  615. package/dist/workflows/context/vault.js +360 -0
  616. package/dist/workflows/context/vault.js.map +1 -0
  617. package/dist/workflows/data/entity-events/entity-events.js +489 -0
  618. package/dist/workflows/data/entity-events/entity-events.js.map +1 -0
  619. package/dist/workflows/data/experiment/index.js +599 -0
  620. package/dist/workflows/data/experiment/index.js.map +1 -0
  621. package/dist/workflows/data/goal/context.js +558 -0
  622. package/dist/workflows/data/goal/context.js.map +1 -0
  623. package/dist/workflows/data/goal/index.js +32 -0
  624. package/dist/workflows/data/goal/index.js.map +1 -0
  625. package/dist/workflows/data/measure/index.js +840 -0
  626. package/dist/workflows/data/measure/index.js.map +1 -0
  627. package/dist/workflows/data/stream/index.js +1149 -0
  628. package/dist/workflows/data/stream/index.js.map +1 -0
  629. package/dist/workflows/data/track/context.js +883 -0
  630. package/dist/workflows/data/track/context.js.map +1 -0
  631. package/dist/workflows/data/track/index.js +15 -0
  632. package/dist/workflows/data/track/index.js.map +1 -0
  633. package/dist/workflows/data/view/context.js +864 -0
  634. package/dist/workflows/data/view/context.js.map +1 -0
  635. package/dist/workflows/domain.js +93 -0
  636. package/dist/workflows/domain.js.map +1 -0
  637. package/dist/workflows/flag.js +176 -0
  638. package/dist/workflows/flag.js.map +1 -0
  639. package/dist/workflows/flags.js +217 -0
  640. package/dist/workflows/flags.js.map +1 -0
  641. package/dist/workflows/hash.js +209 -0
  642. package/dist/workflows/hash.js.map +1 -0
  643. package/dist/workflows/index.js +50 -0
  644. package/dist/workflows/index.js.map +1 -0
  645. package/dist/workflows/on.js +378 -0
  646. package/dist/workflows/on.js.map +1 -0
  647. package/dist/workflows/pipeline-promise.js +481 -0
  648. package/dist/workflows/pipeline-promise.js.map +1 -0
  649. package/dist/workflows/pipeline-types.js +20 -0
  650. package/dist/workflows/pipeline-types.js.map +1 -0
  651. package/dist/workflows/proxy.js +76 -0
  652. package/dist/workflows/proxy.js.map +1 -0
  653. package/dist/workflows/runtime.js +310 -0
  654. package/dist/workflows/runtime.js.map +1 -0
  655. package/dist/workflows/schedule-builder.js +327 -0
  656. package/dist/workflows/schedule-builder.js.map +1 -0
  657. package/dist/workflows/visibility/index.js +146 -0
  658. package/dist/workflows/visibility/index.js.map +1 -0
  659. package/dist/workflows/visibility/query-parser.js +150 -0
  660. package/dist/workflows/visibility/query-parser.js.map +1 -0
  661. package/dist/workflows/visibility/store.js +223 -0
  662. package/dist/workflows/visibility/store.js.map +1 -0
  663. package/dist/workflows/visibility/types.js +30 -0
  664. package/dist/workflows/visibility/types.js.map +1 -0
  665. package/dist/workflows/workflow.js +53 -0
  666. package/dist/workflows/workflow.js.map +1 -0
  667. 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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"}