dotdo 0.0.1 → 0.0.2

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 (727) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +446 -315
  3. package/dist/ai/index.js +19 -0
  4. package/dist/ai/index.js.map +1 -0
  5. package/dist/ai/template-literals.js +852 -0
  6. package/dist/ai/template-literals.js.map +1 -0
  7. package/dist/api/analytics/router.js +601 -0
  8. package/dist/api/analytics/router.js.map +1 -0
  9. package/dist/api/index.js +158 -0
  10. package/dist/api/index.js.map +1 -0
  11. package/dist/api/middleware/auth-federation.js +573 -0
  12. package/dist/api/middleware/auth-federation.js.map +1 -0
  13. package/dist/api/middleware/auth.js +544 -0
  14. package/dist/api/middleware/auth.js.map +1 -0
  15. package/dist/api/middleware/error-handling.js +176 -0
  16. package/dist/api/middleware/error-handling.js.map +1 -0
  17. package/dist/api/middleware/request-id.js +21 -0
  18. package/dist/api/middleware/request-id.js.map +1 -0
  19. package/dist/api/pages.js +1180 -0
  20. package/dist/api/pages.js.map +1 -0
  21. package/dist/api/routes/api.js +612 -0
  22. package/dist/api/routes/api.js.map +1 -0
  23. package/dist/api/routes/browsers.js +471 -0
  24. package/dist/api/routes/browsers.js.map +1 -0
  25. package/dist/api/routes/do.js +188 -0
  26. package/dist/api/routes/do.js.map +1 -0
  27. package/dist/api/routes/mcp.js +459 -0
  28. package/dist/api/routes/mcp.js.map +1 -0
  29. package/dist/api/routes/obs.js +445 -0
  30. package/dist/api/routes/obs.js.map +1 -0
  31. package/dist/api/routes/openapi.js +794 -0
  32. package/dist/api/routes/openapi.js.map +1 -0
  33. package/dist/api/routes/rpc.js +1103 -0
  34. package/dist/api/routes/rpc.js.map +1 -0
  35. package/dist/api/routes/sandboxes.js +389 -0
  36. package/dist/api/routes/sandboxes.js.map +1 -0
  37. package/dist/api/test-do.js +38 -0
  38. package/dist/api/test-do.js.map +1 -0
  39. package/dist/api/types.js +11 -0
  40. package/dist/api/types.js.map +1 -0
  41. package/dist/cli/bin.js +2 -0
  42. package/dist/cli/main.js +52342 -0
  43. package/dist/db/actions.js +212 -0
  44. package/dist/db/actions.js.map +1 -0
  45. package/dist/db/auth.js +506 -0
  46. package/dist/db/auth.js.map +1 -0
  47. package/dist/db/branches.js +65 -0
  48. package/dist/db/branches.js.map +1 -0
  49. package/dist/db/clickhouse.js +1074 -0
  50. package/dist/db/clickhouse.js.map +1 -0
  51. package/dist/db/dlq.js +39 -0
  52. package/dist/db/dlq.js.map +1 -0
  53. package/dist/db/events.js +28 -0
  54. package/dist/db/events.js.map +1 -0
  55. package/dist/db/exec.js +64 -0
  56. package/dist/db/exec.js.map +1 -0
  57. package/dist/db/files.js +85 -0
  58. package/dist/db/files.js.map +1 -0
  59. package/dist/db/flags.js +24 -0
  60. package/dist/db/flags.js.map +1 -0
  61. package/dist/db/git.js +116 -0
  62. package/dist/db/git.js.map +1 -0
  63. package/dist/db/iceberg/inverted-index.js +862 -0
  64. package/dist/db/iceberg/inverted-index.js.map +1 -0
  65. package/dist/db/iceberg/puffin.js +878 -0
  66. package/dist/db/iceberg/puffin.js.map +1 -0
  67. package/dist/db/iceberg/search-manifest.js +422 -0
  68. package/dist/db/iceberg/search-manifest.js.map +1 -0
  69. package/dist/db/iceberg/types.js +8 -0
  70. package/dist/db/iceberg/types.js.map +1 -0
  71. package/dist/db/index.js +121 -0
  72. package/dist/db/index.js.map +1 -0
  73. package/dist/db/integrations.js +368 -0
  74. package/dist/db/integrations.js.map +1 -0
  75. package/dist/db/json-indexes.js +332 -0
  76. package/dist/db/json-indexes.js.map +1 -0
  77. package/dist/db/linked-accounts.js +287 -0
  78. package/dist/db/linked-accounts.js.map +1 -0
  79. package/dist/db/nouns.js +183 -0
  80. package/dist/db/nouns.js.map +1 -0
  81. package/dist/db/objects.js +170 -0
  82. package/dist/db/objects.js.map +1 -0
  83. package/dist/db/primitives/dag-scheduler/index.js +869 -0
  84. package/dist/db/primitives/dag-scheduler/index.js.map +1 -0
  85. package/dist/db/primitives/exactly-once-context.js +237 -0
  86. package/dist/db/primitives/exactly-once-context.js.map +1 -0
  87. package/dist/db/primitives/index.js +62 -0
  88. package/dist/db/primitives/index.js.map +1 -0
  89. package/dist/db/primitives/keyed-router.js +145 -0
  90. package/dist/db/primitives/keyed-router.js.map +1 -0
  91. package/dist/db/primitives/observability.js +162 -0
  92. package/dist/db/primitives/observability.js.map +1 -0
  93. package/dist/db/primitives/schema-evolution.js +643 -0
  94. package/dist/db/primitives/schema-evolution.js.map +1 -0
  95. package/dist/db/primitives/stateful-operator/index.js +770 -0
  96. package/dist/db/primitives/stateful-operator/index.js.map +1 -0
  97. package/dist/db/primitives/temporal-store.js +306 -0
  98. package/dist/db/primitives/temporal-store.js.map +1 -0
  99. package/dist/db/primitives/typed-column-store.js +1229 -0
  100. package/dist/db/primitives/typed-column-store.js.map +1 -0
  101. package/dist/db/primitives/utils/duration.js +162 -0
  102. package/dist/db/primitives/utils/duration.js.map +1 -0
  103. package/dist/db/primitives/utils/murmur3.js +118 -0
  104. package/dist/db/primitives/utils/murmur3.js.map +1 -0
  105. package/dist/db/primitives/watermark-service.js +136 -0
  106. package/dist/db/primitives/watermark-service.js.map +1 -0
  107. package/dist/db/primitives/window-manager.js +764 -0
  108. package/dist/db/primitives/window-manager.js.map +1 -0
  109. package/dist/db/relationships.js +66 -0
  110. package/dist/db/relationships.js.map +1 -0
  111. package/dist/db/schema-minimal.js +61 -0
  112. package/dist/db/schema-minimal.js.map +1 -0
  113. package/dist/db/search.js +28 -0
  114. package/dist/db/search.js.map +1 -0
  115. package/dist/db/stores.js +1665 -0
  116. package/dist/db/stores.js.map +1 -0
  117. package/dist/db/things.js +297 -0
  118. package/dist/db/things.js.map +1 -0
  119. package/dist/db/vault.js +171 -0
  120. package/dist/db/vault.js.map +1 -0
  121. package/dist/db/verbs.js +102 -0
  122. package/dist/db/verbs.js.map +1 -0
  123. package/dist/do/base.js +48 -0
  124. package/dist/do/base.js.map +1 -0
  125. package/dist/do/bash.js +35 -0
  126. package/dist/do/bash.js.map +1 -0
  127. package/dist/do/fs.js +25 -0
  128. package/dist/do/fs.js.map +1 -0
  129. package/dist/do/full.js +61 -0
  130. package/dist/do/full.js.map +1 -0
  131. package/dist/do/git.js +28 -0
  132. package/dist/do/git.js.map +1 -0
  133. package/dist/do/index.js +52 -0
  134. package/dist/do/index.js.map +1 -0
  135. package/dist/do/tiny.js +31 -0
  136. package/dist/do/tiny.js.map +1 -0
  137. package/dist/lib/DOAuth.js +261 -0
  138. package/dist/lib/DOAuth.js.map +1 -0
  139. package/dist/lib/DODispatcher.js +72 -0
  140. package/dist/lib/DODispatcher.js.map +1 -0
  141. package/dist/lib/Modifier.js +189 -0
  142. package/dist/lib/Modifier.js.map +1 -0
  143. package/dist/lib/StateStorage.js +403 -0
  144. package/dist/lib/StateStorage.js.map +1 -0
  145. package/dist/lib/TypeRegistry.js +122 -0
  146. package/dist/lib/TypeRegistry.js.map +1 -0
  147. package/dist/lib/agent/tools/bash.js +336 -0
  148. package/dist/lib/agent/tools/bash.js.map +1 -0
  149. package/dist/lib/agent/tools/edit.js +157 -0
  150. package/dist/lib/agent/tools/edit.js.map +1 -0
  151. package/dist/lib/agent/tools/glob.js +137 -0
  152. package/dist/lib/agent/tools/glob.js.map +1 -0
  153. package/dist/lib/agent/tools/grep.js +315 -0
  154. package/dist/lib/agent/tools/grep.js.map +1 -0
  155. package/dist/lib/agent/tools/index.js +71 -0
  156. package/dist/lib/agent/tools/index.js.map +1 -0
  157. package/dist/lib/agent/tools/read.js +212 -0
  158. package/dist/lib/agent/tools/read.js.map +1 -0
  159. package/dist/lib/agent/tools/types.js +197 -0
  160. package/dist/lib/agent/tools/types.js.map +1 -0
  161. package/dist/lib/agent/tools/write.js +159 -0
  162. package/dist/lib/agent/tools/write.js.map +1 -0
  163. package/dist/lib/ai/gateway.js +247 -0
  164. package/dist/lib/ai/gateway.js.map +1 -0
  165. package/dist/lib/ai/tool-loop-agent.js +591 -0
  166. package/dist/lib/ai/tool-loop-agent.js.map +1 -0
  167. package/dist/lib/auto-wiring.js +439 -0
  168. package/dist/lib/auto-wiring.js.map +1 -0
  169. package/dist/lib/browse/browserbase.js +163 -0
  170. package/dist/lib/browse/browserbase.js.map +1 -0
  171. package/dist/lib/browse/cloudflare.js +144 -0
  172. package/dist/lib/browse/cloudflare.js.map +1 -0
  173. package/dist/lib/browse/index.js +62 -0
  174. package/dist/lib/browse/index.js.map +1 -0
  175. package/dist/lib/browse/types.js +13 -0
  176. package/dist/lib/browse/types.js.map +1 -0
  177. package/dist/lib/cache/index.js +37 -0
  178. package/dist/lib/cache/index.js.map +1 -0
  179. package/dist/lib/cache/visibility.js +638 -0
  180. package/dist/lib/cache/visibility.js.map +1 -0
  181. package/dist/lib/capabilities.js +268 -0
  182. package/dist/lib/capabilities.js.map +1 -0
  183. package/dist/lib/channels/base.js +106 -0
  184. package/dist/lib/channels/base.js.map +1 -0
  185. package/dist/lib/channels/discord.js +94 -0
  186. package/dist/lib/channels/discord.js.map +1 -0
  187. package/dist/lib/channels/email.js +204 -0
  188. package/dist/lib/channels/email.js.map +1 -0
  189. package/dist/lib/channels/index.js +90 -0
  190. package/dist/lib/channels/index.js.map +1 -0
  191. package/dist/lib/channels/mdxui-chat.js +95 -0
  192. package/dist/lib/channels/mdxui-chat.js.map +1 -0
  193. package/dist/lib/channels/slack-blockkit.js +121 -0
  194. package/dist/lib/channels/slack-blockkit.js.map +1 -0
  195. package/dist/lib/channels/types.js +7 -0
  196. package/dist/lib/channels/types.js.map +1 -0
  197. package/dist/lib/cloudflare/ai.js +654 -0
  198. package/dist/lib/cloudflare/ai.js.map +1 -0
  199. package/dist/lib/cloudflare/index.js +88 -0
  200. package/dist/lib/cloudflare/index.js.map +1 -0
  201. package/dist/lib/cloudflare/kv.js +342 -0
  202. package/dist/lib/cloudflare/kv.js.map +1 -0
  203. package/dist/lib/cloudflare/queues.js +434 -0
  204. package/dist/lib/cloudflare/queues.js.map +1 -0
  205. package/dist/lib/cloudflare/r2.js +604 -0
  206. package/dist/lib/cloudflare/r2.js.map +1 -0
  207. package/dist/lib/cloudflare/vectorize.js +494 -0
  208. package/dist/lib/cloudflare/vectorize.js.map +1 -0
  209. package/dist/lib/cloudflare/workflows.js +569 -0
  210. package/dist/lib/cloudflare/workflows.js.map +1 -0
  211. package/dist/lib/colo/caching.js +196 -0
  212. package/dist/lib/colo/caching.js.map +1 -0
  213. package/dist/lib/colo/detection.js +194 -0
  214. package/dist/lib/colo/detection.js.map +1 -0
  215. package/dist/lib/colo/external-data.js +219 -0
  216. package/dist/lib/colo/external-data.js.map +1 -0
  217. package/dist/lib/colo/globe-data.js +179 -0
  218. package/dist/lib/colo/globe-data.js.map +1 -0
  219. package/dist/lib/colo/index.js +16 -0
  220. package/dist/lib/colo/index.js.map +1 -0
  221. package/dist/lib/decorators.js +37 -0
  222. package/dist/lib/decorators.js.map +1 -0
  223. package/dist/lib/discovery.js +81 -0
  224. package/dist/lib/discovery.js.map +1 -0
  225. package/dist/lib/executors/AgenticFunctionExecutor.js +619 -0
  226. package/dist/lib/executors/AgenticFunctionExecutor.js.map +1 -0
  227. package/dist/lib/executors/BaseFunctionExecutor.js +328 -0
  228. package/dist/lib/executors/BaseFunctionExecutor.js.map +1 -0
  229. package/dist/lib/executors/CascadeExecutor.js +418 -0
  230. package/dist/lib/executors/CascadeExecutor.js.map +1 -0
  231. package/dist/lib/executors/CodeFunctionExecutor.js +904 -0
  232. package/dist/lib/executors/CodeFunctionExecutor.js.map +1 -0
  233. package/dist/lib/executors/GenerativeFunctionExecutor.js +904 -0
  234. package/dist/lib/executors/GenerativeFunctionExecutor.js.map +1 -0
  235. package/dist/lib/executors/HumanFunctionExecutor.js +884 -0
  236. package/dist/lib/executors/HumanFunctionExecutor.js.map +1 -0
  237. package/dist/lib/executors/ParallelStepExecutor.js +308 -0
  238. package/dist/lib/executors/ParallelStepExecutor.js.map +1 -0
  239. package/dist/lib/executors/types.js +12 -0
  240. package/dist/lib/executors/types.js.map +1 -0
  241. package/dist/lib/experiments.js +89 -0
  242. package/dist/lib/experiments.js.map +1 -0
  243. package/dist/lib/flags/store.js +262 -0
  244. package/dist/lib/flags/store.js.map +1 -0
  245. package/dist/lib/functions/FunctionComposition.js +467 -0
  246. package/dist/lib/functions/FunctionComposition.js.map +1 -0
  247. package/dist/lib/functions/FunctionMiddleware.js +457 -0
  248. package/dist/lib/functions/FunctionMiddleware.js.map +1 -0
  249. package/dist/lib/functions/FunctionRegistry.js +426 -0
  250. package/dist/lib/functions/FunctionRegistry.js.map +1 -0
  251. package/dist/lib/functions/createFunction.js +1048 -0
  252. package/dist/lib/functions/createFunction.js.map +1 -0
  253. package/dist/lib/humans/index.js +68 -0
  254. package/dist/lib/humans/index.js.map +1 -0
  255. package/dist/lib/humans/templates.js +117 -0
  256. package/dist/lib/humans/templates.js.map +1 -0
  257. package/dist/lib/identity.js +98 -0
  258. package/dist/lib/identity.js.map +1 -0
  259. package/dist/lib/index.js +9 -0
  260. package/dist/lib/index.js.map +1 -0
  261. package/dist/lib/logging/error-logger.js +163 -0
  262. package/dist/lib/logging/error-logger.js.map +1 -0
  263. package/dist/lib/logging/index.js +160 -0
  264. package/dist/lib/logging/index.js.map +1 -0
  265. package/dist/lib/mixins/bash.js +825 -0
  266. package/dist/lib/mixins/bash.js.map +1 -0
  267. package/dist/lib/mixins/fs.js +648 -0
  268. package/dist/lib/mixins/fs.js.map +1 -0
  269. package/dist/lib/mixins/git.js +1011 -0
  270. package/dist/lib/mixins/git.js.map +1 -0
  271. package/dist/lib/mixins/index.js +29 -0
  272. package/dist/lib/mixins/index.js.map +1 -0
  273. package/dist/lib/mixins/npm.js +662 -0
  274. package/dist/lib/mixins/npm.js.map +1 -0
  275. package/dist/lib/noun-id.js +278 -0
  276. package/dist/lib/noun-id.js.map +1 -0
  277. package/dist/lib/rate-limit/sliding-window.js +148 -0
  278. package/dist/lib/rate-limit/sliding-window.js.map +1 -0
  279. package/dist/lib/rate-limit.js +110 -0
  280. package/dist/lib/rate-limit.js.map +1 -0
  281. package/dist/lib/rpc/bindings.js +548 -0
  282. package/dist/lib/rpc/bindings.js.map +1 -0
  283. package/dist/lib/rpc/index.js +64 -0
  284. package/dist/lib/rpc/index.js.map +1 -0
  285. package/dist/lib/safe-stringify.js +223 -0
  286. package/dist/lib/safe-stringify.js.map +1 -0
  287. package/dist/lib/sandbox/miniflare-sandbox.js +1007 -0
  288. package/dist/lib/sandbox/miniflare-sandbox.js.map +1 -0
  289. package/dist/lib/sqids.js +110 -0
  290. package/dist/lib/sqids.js.map +1 -0
  291. package/dist/lib/sql/adapters/index.js +10 -0
  292. package/dist/lib/sql/adapters/index.js.map +1 -0
  293. package/dist/lib/sql/adapters/node-sql-parser.js +552 -0
  294. package/dist/lib/sql/adapters/node-sql-parser.js.map +1 -0
  295. package/dist/lib/sql/adapters/pgsql-parser.js +1189 -0
  296. package/dist/lib/sql/adapters/pgsql-parser.js.map +1 -0
  297. package/dist/lib/sql/index.js +277 -0
  298. package/dist/lib/sql/index.js.map +1 -0
  299. package/dist/lib/sql/types.js +56 -0
  300. package/dist/lib/sql/types.js.map +1 -0
  301. package/dist/lib/type-classifier.js +126 -0
  302. package/dist/lib/type-classifier.js.map +1 -0
  303. package/dist/lib/utils/html.js +47 -0
  304. package/dist/lib/utils/html.js.map +1 -0
  305. package/dist/lib/validation.js +48 -0
  306. package/dist/lib/validation.js.map +1 -0
  307. package/dist/lib/vault/store.js +411 -0
  308. package/dist/lib/vault/store.js.map +1 -0
  309. package/dist/metrics/hunch.js +739 -0
  310. package/dist/metrics/hunch.js.map +1 -0
  311. package/dist/objects/API.js +302 -0
  312. package/dist/objects/API.js.map +1 -0
  313. package/dist/objects/Agent.js +179 -0
  314. package/dist/objects/Agent.js.map +1 -0
  315. package/dist/objects/AgenticFunctionExecutor.js +8 -0
  316. package/dist/objects/AgenticFunctionExecutor.js.map +1 -0
  317. package/dist/objects/App.js +83 -0
  318. package/dist/objects/App.js.map +1 -0
  319. package/dist/objects/Browser.js +884 -0
  320. package/dist/objects/Browser.js.map +1 -0
  321. package/dist/objects/Business.js +107 -0
  322. package/dist/objects/Business.js.map +1 -0
  323. package/dist/objects/CLI.js +221 -0
  324. package/dist/objects/CLI.js.map +1 -0
  325. package/dist/objects/CodeFunctionExecutor.js +8 -0
  326. package/dist/objects/CodeFunctionExecutor.js.map +1 -0
  327. package/dist/objects/Collection.js +161 -0
  328. package/dist/objects/Collection.js.map +1 -0
  329. package/dist/objects/DO.js +41 -0
  330. package/dist/objects/DO.js.map +1 -0
  331. package/dist/objects/DOBase.js +2309 -0
  332. package/dist/objects/DOBase.js.map +1 -0
  333. package/dist/objects/DOFull.js +1676 -0
  334. package/dist/objects/DOFull.js.map +1 -0
  335. package/dist/objects/DOTiny.js +207 -0
  336. package/dist/objects/DOTiny.js.map +1 -0
  337. package/dist/objects/Directory.js +199 -0
  338. package/dist/objects/Directory.js.map +1 -0
  339. package/dist/objects/Entity.js +413 -0
  340. package/dist/objects/Entity.js.map +1 -0
  341. package/dist/objects/Function.js +116 -0
  342. package/dist/objects/Function.js.map +1 -0
  343. package/dist/objects/Human.js +231 -0
  344. package/dist/objects/Human.js.map +1 -0
  345. package/dist/objects/HumanFunctionExecutor.js +8 -0
  346. package/dist/objects/HumanFunctionExecutor.js.map +1 -0
  347. package/dist/objects/IcebergMetadataDO.js +938 -0
  348. package/dist/objects/IcebergMetadataDO.js.map +1 -0
  349. package/dist/objects/IntegrationsDO.js +1174 -0
  350. package/dist/objects/IntegrationsDO.js.map +1 -0
  351. package/dist/objects/ObservabilityBroadcaster.js +149 -0
  352. package/dist/objects/ObservabilityBroadcaster.js.map +1 -0
  353. package/dist/objects/Package.js +154 -0
  354. package/dist/objects/Package.js.map +1 -0
  355. package/dist/objects/Product.js +193 -0
  356. package/dist/objects/Product.js.map +1 -0
  357. package/dist/objects/SDK.js +152 -0
  358. package/dist/objects/SDK.js.map +1 -0
  359. package/dist/objects/SaaS.js +235 -0
  360. package/dist/objects/SaaS.js.map +1 -0
  361. package/dist/objects/SandboxDO.js +759 -0
  362. package/dist/objects/SandboxDO.js.map +1 -0
  363. package/dist/objects/Service.js +337 -0
  364. package/dist/objects/Service.js.map +1 -0
  365. package/dist/objects/Site.js +80 -0
  366. package/dist/objects/Site.js.map +1 -0
  367. package/dist/objects/Startup.js +479 -0
  368. package/dist/objects/Startup.js.map +1 -0
  369. package/dist/objects/ThingsDO.js +170 -0
  370. package/dist/objects/ThingsDO.js.map +1 -0
  371. package/dist/objects/VectorShardDO.js +648 -0
  372. package/dist/objects/VectorShardDO.js.map +1 -0
  373. package/dist/objects/Worker.js +144 -0
  374. package/dist/objects/Worker.js.map +1 -0
  375. package/dist/objects/Workflow.js +196 -0
  376. package/dist/objects/Workflow.js.map +1 -0
  377. package/dist/objects/WorkflowFactory.js +313 -0
  378. package/dist/objects/WorkflowFactory.js.map +1 -0
  379. package/dist/objects/WorkflowRuntime.js +863 -0
  380. package/dist/objects/WorkflowRuntime.js.map +1 -0
  381. package/dist/objects/circuit-breaker-bulkhead.js +178 -0
  382. package/dist/objects/circuit-breaker-bulkhead.js.map +1 -0
  383. package/dist/objects/createFunction.js +934 -0
  384. package/dist/objects/createFunction.js.map +1 -0
  385. package/dist/objects/index.js +80 -0
  386. package/dist/objects/index.js.map +1 -0
  387. package/dist/objects/lifecycle/Branch.js +275 -0
  388. package/dist/objects/lifecycle/Branch.js.map +1 -0
  389. package/dist/objects/lifecycle/Clone.js +1499 -0
  390. package/dist/objects/lifecycle/Clone.js.map +1 -0
  391. package/dist/objects/lifecycle/Compact.js +237 -0
  392. package/dist/objects/lifecycle/Compact.js.map +1 -0
  393. package/dist/objects/lifecycle/Promote.js +476 -0
  394. package/dist/objects/lifecycle/Promote.js.map +1 -0
  395. package/dist/objects/lifecycle/Shard.js +560 -0
  396. package/dist/objects/lifecycle/Shard.js.map +1 -0
  397. package/dist/objects/lifecycle/index.js +15 -0
  398. package/dist/objects/lifecycle/index.js.map +1 -0
  399. package/dist/objects/lifecycle/types.js +33 -0
  400. package/dist/objects/lifecycle/types.js.map +1 -0
  401. package/dist/objects/mixins/infrastructure.js +171 -0
  402. package/dist/objects/mixins/infrastructure.js.map +1 -0
  403. package/dist/objects/modules/StoresModule.js +153 -0
  404. package/dist/objects/modules/StoresModule.js.map +1 -0
  405. package/dist/objects/persistence/checkpoint-manager.js +606 -0
  406. package/dist/objects/persistence/checkpoint-manager.js.map +1 -0
  407. package/dist/objects/persistence/index.js +72 -0
  408. package/dist/objects/persistence/index.js.map +1 -0
  409. package/dist/objects/persistence/migration-runner.js +562 -0
  410. package/dist/objects/persistence/migration-runner.js.map +1 -0
  411. package/dist/objects/persistence/replication-manager.js +501 -0
  412. package/dist/objects/persistence/replication-manager.js.map +1 -0
  413. package/dist/objects/persistence/tiered-storage-manager.js +595 -0
  414. package/dist/objects/persistence/tiered-storage-manager.js.map +1 -0
  415. package/dist/objects/persistence/types.js +14 -0
  416. package/dist/objects/persistence/types.js.map +1 -0
  417. package/dist/objects/persistence/wal-manager.js +653 -0
  418. package/dist/objects/persistence/wal-manager.js.map +1 -0
  419. package/dist/objects/presets/index.js +20 -0
  420. package/dist/objects/presets/index.js.map +1 -0
  421. package/dist/objects/presets/primitives.js +188 -0
  422. package/dist/objects/presets/primitives.js.map +1 -0
  423. package/dist/objects/primitives/alarm-adapter.js +141 -0
  424. package/dist/objects/primitives/alarm-adapter.js.map +1 -0
  425. package/dist/objects/primitives/index.js +337 -0
  426. package/dist/objects/primitives/index.js.map +1 -0
  427. package/dist/objects/primitives/storage-adapter.js +182 -0
  428. package/dist/objects/primitives/storage-adapter.js.map +1 -0
  429. package/dist/objects/primitives/with-primitives.js +102 -0
  430. package/dist/objects/primitives/with-primitives.js.map +1 -0
  431. package/dist/objects/services/StoreManager.js +227 -0
  432. package/dist/objects/services/StoreManager.js.map +1 -0
  433. package/dist/objects/services/index.js +13 -0
  434. package/dist/objects/services/index.js.map +1 -0
  435. package/dist/objects/transport/auth-layer.js +1451 -0
  436. package/dist/objects/transport/auth-layer.js.map +1 -0
  437. package/dist/objects/transport/capnweb-target.js +355 -0
  438. package/dist/objects/transport/capnweb-target.js.map +1 -0
  439. package/dist/objects/transport/chain.js +441 -0
  440. package/dist/objects/transport/chain.js.map +1 -0
  441. package/dist/objects/transport/handler.js +58 -0
  442. package/dist/objects/transport/handler.js.map +1 -0
  443. package/dist/objects/transport/index.js +53 -0
  444. package/dist/objects/transport/index.js.map +1 -0
  445. package/dist/objects/transport/mcp-server.js +690 -0
  446. package/dist/objects/transport/mcp-server.js.map +1 -0
  447. package/dist/objects/transport/rest-autowire.js +1507 -0
  448. package/dist/objects/transport/rest-autowire.js.map +1 -0
  449. package/dist/objects/transport/rest-router.js +440 -0
  450. package/dist/objects/transport/rest-router.js.map +1 -0
  451. package/dist/objects/transport/rpc-server.js +1536 -0
  452. package/dist/objects/transport/rpc-server.js.map +1 -0
  453. package/dist/objects/transport/shared.js +575 -0
  454. package/dist/objects/transport/shared.js.map +1 -0
  455. package/dist/objects/transport/sync-engine.js +291 -0
  456. package/dist/objects/transport/sync-engine.js.map +1 -0
  457. package/dist/objects/transport/types.js +8 -0
  458. package/dist/objects/transport/types.js.map +1 -0
  459. package/dist/primitives/bashx/src/ast/analyze.js +1472 -0
  460. package/dist/primitives/bashx/src/ast/analyze.js.map +1 -0
  461. package/dist/primitives/bashx/src/ast/parser.js +1488 -0
  462. package/dist/primitives/bashx/src/ast/parser.js.map +1 -0
  463. package/dist/primitives/bashx/src/do/commands/crypto.js +1954 -0
  464. package/dist/primitives/bashx/src/do/commands/crypto.js.map +1 -0
  465. package/dist/primitives/bashx/src/do/commands/data-processing.js +1812 -0
  466. package/dist/primitives/bashx/src/do/commands/data-processing.js.map +1 -0
  467. package/dist/primitives/bashx/src/do/commands/extended-utils.js +804 -0
  468. package/dist/primitives/bashx/src/do/commands/extended-utils.js.map +1 -0
  469. package/dist/primitives/bashx/src/do/commands/math-control.js +1122 -0
  470. package/dist/primitives/bashx/src/do/commands/math-control.js.map +1 -0
  471. package/dist/primitives/bashx/src/do/commands/posix-utils.js +1015 -0
  472. package/dist/primitives/bashx/src/do/commands/posix-utils.js.map +1 -0
  473. package/dist/primitives/bashx/src/do/commands/system-utils.js +687 -0
  474. package/dist/primitives/bashx/src/do/commands/system-utils.js.map +1 -0
  475. package/dist/primitives/bashx/src/do/commands/test-command.js +523 -0
  476. package/dist/primitives/bashx/src/do/commands/test-command.js.map +1 -0
  477. package/dist/primitives/bashx/src/do/commands/text-processing.js +1550 -0
  478. package/dist/primitives/bashx/src/do/commands/text-processing.js.map +1 -0
  479. package/dist/primitives/bashx/src/do/container-executor.js +429 -0
  480. package/dist/primitives/bashx/src/do/container-executor.js.map +1 -0
  481. package/dist/primitives/bashx/src/do/index.js +668 -0
  482. package/dist/primitives/bashx/src/do/index.js.map +1 -0
  483. package/dist/primitives/bashx/src/do/tiered-executor.js +2647 -0
  484. package/dist/primitives/bashx/src/do/tiered-executor.js.map +1 -0
  485. package/dist/primitives/bashx/src/do/worker.js +352 -0
  486. package/dist/primitives/bashx/src/do/worker.js.map +1 -0
  487. package/dist/primitives/bashx/src/types.js +10 -0
  488. package/dist/primitives/bashx/src/types.js.map +1 -0
  489. package/dist/primitives/fsx/core/backend.js +480 -0
  490. package/dist/primitives/fsx/core/backend.js.map +1 -0
  491. package/dist/primitives/fsx/core/constants.js +140 -0
  492. package/dist/primitives/fsx/core/constants.js.map +1 -0
  493. package/dist/primitives/fsx/core/fsx.js +1184 -0
  494. package/dist/primitives/fsx/core/fsx.js.map +1 -0
  495. package/dist/primitives/fsx/core/glob/glob.js +438 -0
  496. package/dist/primitives/fsx/core/glob/glob.js.map +1 -0
  497. package/dist/primitives/fsx/core/glob/index.js +8 -0
  498. package/dist/primitives/fsx/core/glob/index.js.map +1 -0
  499. package/dist/primitives/fsx/core/glob/match.js +392 -0
  500. package/dist/primitives/fsx/core/glob/match.js.map +1 -0
  501. package/dist/primitives/fsx/core/types.js +307 -0
  502. package/dist/primitives/fsx/core/types.js.map +1 -0
  503. package/dist/sandbox/index.js +258 -0
  504. package/dist/sandbox/index.js.map +1 -0
  505. package/dist/sdk/capnweb-compat.js +42 -0
  506. package/dist/sdk/capnweb-compat.js.map +1 -0
  507. package/dist/sdk/client.js +20 -0
  508. package/dist/sdk/client.js.map +1 -0
  509. package/dist/sdk/index.js +17 -0
  510. package/dist/sdk/index.js.map +1 -0
  511. package/dist/snippets/artifacts-config.js +241 -0
  512. package/dist/snippets/artifacts-config.js.map +1 -0
  513. package/dist/snippets/artifacts-ingest.js +832 -0
  514. package/dist/snippets/artifacts-ingest.js.map +1 -0
  515. package/dist/snippets/artifacts-serve.js +1035 -0
  516. package/dist/snippets/artifacts-serve.js.map +1 -0
  517. package/dist/snippets/artifacts-types.js +161 -0
  518. package/dist/snippets/artifacts-types.js.map +1 -0
  519. package/dist/snippets/cache-probe.js +376 -0
  520. package/dist/snippets/cache-probe.js.map +1 -0
  521. package/dist/snippets/cache.js +10 -0
  522. package/dist/snippets/cache.js.map +1 -0
  523. package/dist/snippets/events.js +469 -0
  524. package/dist/snippets/events.js.map +1 -0
  525. package/dist/snippets/index.js +7 -0
  526. package/dist/snippets/index.js.map +1 -0
  527. package/dist/snippets/proxy.js +495 -0
  528. package/dist/snippets/proxy.js.map +1 -0
  529. package/dist/snippets/search.js +1759 -0
  530. package/dist/snippets/search.js.map +1 -0
  531. package/dist/streams/index.js +30 -0
  532. package/dist/streams/index.js.map +1 -0
  533. package/dist/streams/observability.js +68 -0
  534. package/dist/streams/observability.js.map +1 -0
  535. package/dist/types/AI.js +92 -0
  536. package/dist/types/AI.js.map +1 -0
  537. package/dist/types/AIFunction.js +171 -0
  538. package/dist/types/AIFunction.js.map +1 -0
  539. package/dist/types/BrowseVerb.js +89 -0
  540. package/dist/types/BrowseVerb.js.map +1 -0
  541. package/dist/types/Browser.js +31 -0
  542. package/dist/types/Browser.js.map +1 -0
  543. package/dist/types/Chaos.js +15 -0
  544. package/dist/types/Chaos.js.map +1 -0
  545. package/dist/types/CloudflareBindings.js +109 -0
  546. package/dist/types/CloudflareBindings.js.map +1 -0
  547. package/dist/types/Collection.js +50 -0
  548. package/dist/types/Collection.js.map +1 -0
  549. package/dist/types/DO.js +2 -0
  550. package/dist/types/DO.js.map +1 -0
  551. package/dist/types/DOLocation.js +63 -0
  552. package/dist/types/DOLocation.js.map +1 -0
  553. package/dist/types/EventHandler.js +57 -0
  554. package/dist/types/EventHandler.js.map +1 -0
  555. package/dist/types/Experiment.js +33 -0
  556. package/dist/types/Experiment.js.map +1 -0
  557. package/dist/types/Flag.js +57 -0
  558. package/dist/types/Flag.js.map +1 -0
  559. package/dist/types/Lifecycle.js +13 -0
  560. package/dist/types/Lifecycle.js.map +1 -0
  561. package/dist/types/Location.js +169 -0
  562. package/dist/types/Location.js.map +1 -0
  563. package/dist/types/Noun.js +66 -0
  564. package/dist/types/Noun.js.map +1 -0
  565. package/dist/types/SessionEvent.js +194 -0
  566. package/dist/types/SessionEvent.js.map +1 -0
  567. package/dist/types/Thing.js +55 -0
  568. package/dist/types/Thing.js.map +1 -0
  569. package/dist/types/ThingDO.js +153 -0
  570. package/dist/types/ThingDO.js.map +1 -0
  571. package/dist/types/Things.js +2 -0
  572. package/dist/types/Things.js.map +1 -0
  573. package/dist/types/Verb.js +119 -0
  574. package/dist/types/Verb.js.map +1 -0
  575. package/dist/types/WorkflowContext.js +70 -0
  576. package/dist/types/WorkflowContext.js.map +1 -0
  577. package/dist/types/analytics-api.js +13 -0
  578. package/dist/types/analytics-api.js.map +1 -0
  579. package/dist/types/capabilities.js +135 -0
  580. package/dist/types/capabilities.js.map +1 -0
  581. package/dist/types/drizzle.js +12 -0
  582. package/dist/types/drizzle.js.map +1 -0
  583. package/dist/types/event.js +201 -0
  584. package/dist/types/event.js.map +1 -0
  585. package/dist/types/fn.js +12 -0
  586. package/dist/types/fn.js.map +1 -0
  587. package/dist/types/iceberg.js +48 -0
  588. package/dist/types/iceberg.js.map +1 -0
  589. package/dist/types/ids.js +170 -0
  590. package/dist/types/ids.js.map +1 -0
  591. package/dist/types/index.js +41 -0
  592. package/dist/types/index.js.map +1 -0
  593. package/dist/types/introspect.js +54 -0
  594. package/dist/types/introspect.js.map +1 -0
  595. package/dist/types/observability.js +124 -0
  596. package/dist/types/observability.js.map +1 -0
  597. package/dist/types/sync-protocol.js +175 -0
  598. package/dist/types/sync-protocol.js.map +1 -0
  599. package/dist/types/vector.js +13 -0
  600. package/dist/types/vector.js.map +1 -0
  601. package/dist/workflows/ScheduleManager.js +473 -0
  602. package/dist/workflows/ScheduleManager.js.map +1 -0
  603. package/dist/workflows/StepDOBridge.js +149 -0
  604. package/dist/workflows/StepDOBridge.js.map +1 -0
  605. package/dist/workflows/StepResultStorage.js +232 -0
  606. package/dist/workflows/StepResultStorage.js.map +1 -0
  607. package/dist/workflows/WaitForEventManager.js +461 -0
  608. package/dist/workflows/WaitForEventManager.js.map +1 -0
  609. package/dist/workflows/analyzer.js +332 -0
  610. package/dist/workflows/analyzer.js.map +1 -0
  611. package/dist/workflows/compat/activity-router.js +484 -0
  612. package/dist/workflows/compat/activity-router.js.map +1 -0
  613. package/dist/workflows/compat/backends/cloudflare-workflows.js +431 -0
  614. package/dist/workflows/compat/backends/cloudflare-workflows.js.map +1 -0
  615. package/dist/workflows/compat/backends/index.js +14 -0
  616. package/dist/workflows/compat/backends/index.js.map +1 -0
  617. package/dist/workflows/compat/errors/index.js +375 -0
  618. package/dist/workflows/compat/errors/index.js.map +1 -0
  619. package/dist/workflows/compat/index.js +79 -0
  620. package/dist/workflows/compat/index.js.map +1 -0
  621. package/dist/workflows/compat/inngest/index.js +989 -0
  622. package/dist/workflows/compat/inngest/index.js.map +1 -0
  623. package/dist/workflows/compat/qstash/index.js +1263 -0
  624. package/dist/workflows/compat/qstash/index.js.map +1 -0
  625. package/dist/workflows/compat/temporal/activities.js +739 -0
  626. package/dist/workflows/compat/temporal/activities.js.map +1 -0
  627. package/dist/workflows/compat/temporal/child-workflows.js +154 -0
  628. package/dist/workflows/compat/temporal/child-workflows.js.map +1 -0
  629. package/dist/workflows/compat/temporal/client.js +381 -0
  630. package/dist/workflows/compat/temporal/client.js.map +1 -0
  631. package/dist/workflows/compat/temporal/context.js +309 -0
  632. package/dist/workflows/compat/temporal/context.js.map +1 -0
  633. package/dist/workflows/compat/temporal/determinism.js +216 -0
  634. package/dist/workflows/compat/temporal/determinism.js.map +1 -0
  635. package/dist/workflows/compat/temporal/errors.js +128 -0
  636. package/dist/workflows/compat/temporal/errors.js.map +1 -0
  637. package/dist/workflows/compat/temporal/index.js +2464 -0
  638. package/dist/workflows/compat/temporal/index.js.map +1 -0
  639. package/dist/workflows/compat/temporal/saga.js +504 -0
  640. package/dist/workflows/compat/temporal/saga.js.map +1 -0
  641. package/dist/workflows/compat/temporal/signals.js +364 -0
  642. package/dist/workflows/compat/temporal/signals.js.map +1 -0
  643. package/dist/workflows/compat/temporal/storage.js +271 -0
  644. package/dist/workflows/compat/temporal/storage.js.map +1 -0
  645. package/dist/workflows/compat/temporal/timers.js +347 -0
  646. package/dist/workflows/compat/temporal/timers.js.map +1 -0
  647. package/dist/workflows/compat/temporal/types.js +7 -0
  648. package/dist/workflows/compat/temporal/types.js.map +1 -0
  649. package/dist/workflows/compat/temporal/unified-primitives.js +339 -0
  650. package/dist/workflows/compat/temporal/unified-primitives.js.map +1 -0
  651. package/dist/workflows/compat/trigger/index.js +468 -0
  652. package/dist/workflows/compat/trigger/index.js.map +1 -0
  653. package/dist/workflows/compat/utils/index.js +69 -0
  654. package/dist/workflows/compat/utils/index.js.map +1 -0
  655. package/dist/workflows/context/correlation-capability.js +266 -0
  656. package/dist/workflows/context/correlation-capability.js.map +1 -0
  657. package/dist/workflows/context/correlation.js +484 -0
  658. package/dist/workflows/context/correlation.js.map +1 -0
  659. package/dist/workflows/context/experiment.js +289 -0
  660. package/dist/workflows/context/experiment.js.map +1 -0
  661. package/dist/workflows/context/flag.js +244 -0
  662. package/dist/workflows/context/flag.js.map +1 -0
  663. package/dist/workflows/context/foundation.js +648 -0
  664. package/dist/workflows/context/foundation.js.map +1 -0
  665. package/dist/workflows/context/human-base.js +106 -0
  666. package/dist/workflows/context/human-base.js.map +1 -0
  667. package/dist/workflows/context/human.js +368 -0
  668. package/dist/workflows/context/human.js.map +1 -0
  669. package/dist/workflows/context/measure.js +354 -0
  670. package/dist/workflows/context/measure.js.map +1 -0
  671. package/dist/workflows/context/rate-limit.js +358 -0
  672. package/dist/workflows/context/rate-limit.js.map +1 -0
  673. package/dist/workflows/context/user.js +117 -0
  674. package/dist/workflows/context/user.js.map +1 -0
  675. package/dist/workflows/context/vault.js +360 -0
  676. package/dist/workflows/context/vault.js.map +1 -0
  677. package/dist/workflows/data/entity-events/entity-events.js +489 -0
  678. package/dist/workflows/data/entity-events/entity-events.js.map +1 -0
  679. package/dist/workflows/data/experiment/index.js +599 -0
  680. package/dist/workflows/data/experiment/index.js.map +1 -0
  681. package/dist/workflows/data/goal/context.js +558 -0
  682. package/dist/workflows/data/goal/context.js.map +1 -0
  683. package/dist/workflows/data/goal/index.js +32 -0
  684. package/dist/workflows/data/goal/index.js.map +1 -0
  685. package/dist/workflows/data/measure/index.js +840 -0
  686. package/dist/workflows/data/measure/index.js.map +1 -0
  687. package/dist/workflows/data/stream/index.js +1215 -0
  688. package/dist/workflows/data/stream/index.js.map +1 -0
  689. package/dist/workflows/data/track/context.js +883 -0
  690. package/dist/workflows/data/track/context.js.map +1 -0
  691. package/dist/workflows/data/track/index.js +15 -0
  692. package/dist/workflows/data/track/index.js.map +1 -0
  693. package/dist/workflows/data/view/context.js +864 -0
  694. package/dist/workflows/data/view/context.js.map +1 -0
  695. package/dist/workflows/domain.js +93 -0
  696. package/dist/workflows/domain.js.map +1 -0
  697. package/dist/workflows/flag.js +176 -0
  698. package/dist/workflows/flag.js.map +1 -0
  699. package/dist/workflows/flags.js +217 -0
  700. package/dist/workflows/flags.js.map +1 -0
  701. package/dist/workflows/hash.js +209 -0
  702. package/dist/workflows/hash.js.map +1 -0
  703. package/dist/workflows/index.js +50 -0
  704. package/dist/workflows/index.js.map +1 -0
  705. package/dist/workflows/on.js +378 -0
  706. package/dist/workflows/on.js.map +1 -0
  707. package/dist/workflows/pipeline-promise.js +481 -0
  708. package/dist/workflows/pipeline-promise.js.map +1 -0
  709. package/dist/workflows/pipeline-types.js +20 -0
  710. package/dist/workflows/pipeline-types.js.map +1 -0
  711. package/dist/workflows/proxy.js +76 -0
  712. package/dist/workflows/proxy.js.map +1 -0
  713. package/dist/workflows/runtime.js +310 -0
  714. package/dist/workflows/runtime.js.map +1 -0
  715. package/dist/workflows/schedule-builder.js +327 -0
  716. package/dist/workflows/schedule-builder.js.map +1 -0
  717. package/dist/workflows/visibility/index.js +148 -0
  718. package/dist/workflows/visibility/index.js.map +1 -0
  719. package/dist/workflows/visibility/query-parser.js +150 -0
  720. package/dist/workflows/visibility/query-parser.js.map +1 -0
  721. package/dist/workflows/visibility/store.js +223 -0
  722. package/dist/workflows/visibility/store.js.map +1 -0
  723. package/dist/workflows/visibility/types.js +30 -0
  724. package/dist/workflows/visibility/types.js.map +1 -0
  725. package/dist/workflows/workflow.js +53 -0
  726. package/dist/workflows/workflow.js.map +1 -0
  727. package/package.json +279 -46
@@ -0,0 +1,770 @@
1
+ /**
2
+ * StatefulOperator - Flink-style stream state management primitive
3
+ *
4
+ * Provides state management capabilities for stream processing:
5
+ * - StateBackend: Pluggable state storage interface
6
+ * - KeyedState: State partitioned by key with hash/range partitioning
7
+ * - WindowState: Time-based aggregation windows (tumbling, sliding, session)
8
+ * - CheckpointBarrier: Distributed snapshot coordination
9
+ * - StateTTL: Time-to-live state cleanup strategies
10
+ * - StateRecovery: Checkpoint restoration
11
+ * - StateMetrics: Observability for state operations
12
+ *
13
+ * @module db/primitives/stateful-operator
14
+ */
15
+ import { murmurHash3, murmurHash3_32 } from '../utils/murmur3';
16
+ // =============================================================================
17
+ // InMemoryStateBackend
18
+ // =============================================================================
19
+ /**
20
+ * In-memory implementation of StateBackend
21
+ */
22
+ export class InMemoryStateBackend {
23
+ name;
24
+ entries = new Map();
25
+ snapshotCounter = 0;
26
+ constructor(name) {
27
+ this.name = name;
28
+ }
29
+ async get(key) {
30
+ const entry = this.entries.get(key);
31
+ if (!entry)
32
+ return undefined;
33
+ // Check TTL expiration
34
+ if (entry.expiresAt !== undefined && Date.now() >= entry.expiresAt) {
35
+ this.entries.delete(key);
36
+ return undefined;
37
+ }
38
+ return entry.value;
39
+ }
40
+ async put(key, value, ttl) {
41
+ const entry = {
42
+ value,
43
+ createdAt: Date.now(),
44
+ expiresAt: ttl !== undefined ? Date.now() + ttl : undefined,
45
+ };
46
+ this.entries.set(key, entry);
47
+ }
48
+ async delete(key) {
49
+ this.entries.delete(key);
50
+ }
51
+ async *list(prefix) {
52
+ const now = Date.now();
53
+ for (const [key, entry] of this.entries) {
54
+ // Filter by prefix
55
+ if (prefix !== undefined && !key.startsWith(prefix)) {
56
+ continue;
57
+ }
58
+ // Check TTL
59
+ if (entry.expiresAt !== undefined && now >= entry.expiresAt) {
60
+ this.entries.delete(key);
61
+ continue;
62
+ }
63
+ yield [key, entry.value];
64
+ }
65
+ }
66
+ async size() {
67
+ // Clean up expired entries first
68
+ const now = Date.now();
69
+ for (const [key, entry] of this.entries) {
70
+ if (entry.expiresAt !== undefined && now >= entry.expiresAt) {
71
+ this.entries.delete(key);
72
+ }
73
+ }
74
+ return this.entries.size;
75
+ }
76
+ async snapshot() {
77
+ const id = `${this.name}-snap-${++this.snapshotCounter}-${Date.now()}`;
78
+ const timestamp = Date.now();
79
+ // Serialize entries
80
+ const serializedEntries = [];
81
+ for (const [key, entry] of this.entries) {
82
+ // Skip expired entries
83
+ if (entry.expiresAt !== undefined && timestamp >= entry.expiresAt) {
84
+ continue;
85
+ }
86
+ serializedEntries.push([key, entry]);
87
+ }
88
+ const jsonData = JSON.stringify(serializedEntries);
89
+ const data = new TextEncoder().encode(jsonData);
90
+ const checksum = this.computeChecksum(data);
91
+ return {
92
+ id,
93
+ timestamp,
94
+ data,
95
+ metadata: {
96
+ stateCount: serializedEntries.length,
97
+ totalBytes: data.length,
98
+ checksum,
99
+ },
100
+ };
101
+ }
102
+ async restore(snapshot) {
103
+ // Validate checksum
104
+ const actualChecksum = this.computeChecksum(snapshot.data);
105
+ if (actualChecksum !== snapshot.metadata.checksum) {
106
+ throw new Error(`Checksum mismatch: expected ${snapshot.metadata.checksum}, got ${actualChecksum}`);
107
+ }
108
+ // Deserialize and restore
109
+ const jsonData = new TextDecoder().decode(snapshot.data);
110
+ const entries = JSON.parse(jsonData);
111
+ this.entries.clear();
112
+ for (const [key, entry] of entries) {
113
+ this.entries.set(key, entry);
114
+ }
115
+ }
116
+ async clear() {
117
+ this.entries.clear();
118
+ }
119
+ computeChecksum(data) {
120
+ // Simple checksum using murmur hash
121
+ const hash = murmurHash3_32(data, 0);
122
+ return hash.toString(16);
123
+ }
124
+ }
125
+ /**
126
+ * Hash-based partitioner for even key distribution
127
+ */
128
+ export class HashPartitioner {
129
+ numPartitions;
130
+ constructor(numPartitions = 256) {
131
+ this.numPartitions = numPartitions;
132
+ }
133
+ partition(key) {
134
+ const hash = murmurHash3(String(key), 0);
135
+ return Math.abs(hash) % this.numPartitions;
136
+ }
137
+ }
138
+ /**
139
+ * Range-based partitioner for ordered key access
140
+ */
141
+ export class RangePartitioner {
142
+ boundaries;
143
+ numPartitions;
144
+ constructor(boundaries) {
145
+ this.boundaries = boundaries;
146
+ this.numPartitions = boundaries.length + 1;
147
+ }
148
+ partition(key) {
149
+ for (let i = 0; i < this.boundaries.length; i++) {
150
+ const boundary = this.boundaries[i];
151
+ if (boundary !== undefined && key < boundary) {
152
+ return i;
153
+ }
154
+ }
155
+ return this.boundaries.length;
156
+ }
157
+ }
158
+ /**
159
+ * Implementation of KeyedState
160
+ */
161
+ class KeyedStateImpl {
162
+ backend;
163
+ keySerializer;
164
+ constructor(backend, keySerializer = String) {
165
+ this.backend = backend;
166
+ this.keySerializer = keySerializer;
167
+ }
168
+ async get(key) {
169
+ return this.backend.get(this.keySerializer(key));
170
+ }
171
+ async put(key, value) {
172
+ await this.backend.put(this.keySerializer(key), value);
173
+ }
174
+ async update(key, fn) {
175
+ const current = await this.get(key);
176
+ const updated = fn(current);
177
+ await this.put(key, updated);
178
+ return updated;
179
+ }
180
+ async delete(key) {
181
+ await this.backend.delete(this.keySerializer(key));
182
+ }
183
+ async *keys() {
184
+ for await (const [keyStr] of this.backend.list()) {
185
+ // Note: This assumes K can be reconstructed from string
186
+ // For complex keys, a deserializer would be needed
187
+ yield keyStr;
188
+ }
189
+ }
190
+ async clear() {
191
+ await this.backend.clear();
192
+ }
193
+ }
194
+ /**
195
+ * Factory function to create a KeyedState
196
+ */
197
+ export function createKeyedState(backend, keySerializer) {
198
+ return new KeyedStateImpl(backend, keySerializer);
199
+ }
200
+ /**
201
+ * Tumbling window assigner (non-overlapping fixed-size windows)
202
+ */
203
+ export class TumblingWindowAssigner {
204
+ windowSizeMs;
205
+ constructor(windowSizeMs) {
206
+ this.windowSizeMs = windowSizeMs;
207
+ }
208
+ assignWindows(timestamp) {
209
+ const windowStart = Math.floor(timestamp / this.windowSizeMs) * this.windowSizeMs;
210
+ return [{ start: windowStart, end: windowStart + this.windowSizeMs }];
211
+ }
212
+ }
213
+ /**
214
+ * Sliding window assigner (overlapping fixed-size windows)
215
+ */
216
+ export class SlidingWindowAssigner {
217
+ windowSizeMs;
218
+ slideMs;
219
+ constructor(windowSizeMs, slideMs) {
220
+ this.windowSizeMs = windowSizeMs;
221
+ this.slideMs = slideMs;
222
+ if (slideMs <= 0) {
223
+ throw new Error('Slide must be positive');
224
+ }
225
+ if (slideMs > windowSizeMs) {
226
+ throw new Error('Slide cannot be larger than window size');
227
+ }
228
+ }
229
+ assignWindows(timestamp) {
230
+ const windows = [];
231
+ // Find the last window start that contains this timestamp
232
+ const lastWindowStart = Math.floor(timestamp / this.slideMs) * this.slideMs;
233
+ // Count backwards to find all windows
234
+ const numWindows = Math.ceil(this.windowSizeMs / this.slideMs);
235
+ for (let i = 0; i < numWindows; i++) {
236
+ const windowStart = lastWindowStart - i * this.slideMs;
237
+ const windowEnd = windowStart + this.windowSizeMs;
238
+ // Check if this window actually contains the timestamp
239
+ if (windowStart <= timestamp && timestamp < windowEnd) {
240
+ windows.push({ start: windowStart, end: windowEnd });
241
+ }
242
+ }
243
+ return windows.sort((a, b) => a.start - b.start);
244
+ }
245
+ }
246
+ /**
247
+ * Session window assigner (gap-based dynamic windows)
248
+ */
249
+ export class SessionWindowAssigner {
250
+ gapMs;
251
+ constructor(gapMs) {
252
+ this.gapMs = gapMs;
253
+ }
254
+ get windowSizeMs() {
255
+ return this.gapMs; // Minimum size
256
+ }
257
+ assignWindows(timestamp, existingWindows) {
258
+ const newWindow = { start: timestamp, end: timestamp + this.gapMs };
259
+ if (!existingWindows || existingWindows.size === 0) {
260
+ return [newWindow];
261
+ }
262
+ // Find overlapping or adjacent sessions to merge
263
+ const windowsToMerge = [newWindow];
264
+ for (const w of existingWindows.values()) {
265
+ // Check if windows should merge (overlap or within gap)
266
+ const overlapOrAdjacent = (newWindow.start <= w.end && newWindow.end >= w.start) ||
267
+ Math.abs(newWindow.start - w.end) <= this.gapMs ||
268
+ Math.abs(w.start - newWindow.end) <= this.gapMs;
269
+ if (overlapOrAdjacent) {
270
+ windowsToMerge.push(w);
271
+ }
272
+ }
273
+ if (windowsToMerge.length === 1) {
274
+ return [newWindow];
275
+ }
276
+ // Merge all overlapping windows
277
+ const mergedStart = Math.min(...windowsToMerge.map((w) => w.start));
278
+ const maxTimestamp = Math.max(timestamp, ...windowsToMerge.map((w) => w.end - this.gapMs));
279
+ const mergedEnd = maxTimestamp + this.gapMs;
280
+ return [{ start: mergedStart, end: mergedEnd }];
281
+ }
282
+ }
283
+ /**
284
+ * Implementation of WindowState
285
+ */
286
+ class WindowStateImpl {
287
+ backend;
288
+ assigner;
289
+ constructor(backend, assigner) {
290
+ this.backend = backend;
291
+ this.assigner = assigner;
292
+ }
293
+ encodeWindowKey(key, start, end) {
294
+ return `${key}:${start}:${end}`;
295
+ }
296
+ decodeWindowKey(encoded) {
297
+ const parts = encoded.split(':');
298
+ const end = parseInt(parts.pop(), 10);
299
+ const start = parseInt(parts.pop(), 10);
300
+ const key = parts.join(':');
301
+ return { key, windowStart: start, windowEnd: end };
302
+ }
303
+ async getWindow(key, start, end) {
304
+ const windowKey = this.encodeWindowKey(key, start, end);
305
+ return this.backend.get(windowKey);
306
+ }
307
+ async updateWindow(key, start, end, fn) {
308
+ const windowKey = this.encodeWindowKey(key, start, end);
309
+ const current = await this.backend.get(windowKey);
310
+ const updated = fn(current);
311
+ await this.backend.put(windowKey, updated);
312
+ return updated;
313
+ }
314
+ async expireWindows(before) {
315
+ let expired = 0;
316
+ const keysToDelete = [];
317
+ for await (const [encodedKey] of this.backend.list()) {
318
+ const windowKey = this.decodeWindowKey(encodedKey);
319
+ if (windowKey.windowEnd < before) {
320
+ keysToDelete.push(encodedKey);
321
+ expired++;
322
+ }
323
+ }
324
+ for (const key of keysToDelete) {
325
+ await this.backend.delete(key);
326
+ }
327
+ return expired;
328
+ }
329
+ async *activeWindows(key) {
330
+ const prefix = `${key}:`;
331
+ for await (const [encodedKey] of this.backend.list(prefix)) {
332
+ yield this.decodeWindowKey(encodedKey);
333
+ }
334
+ }
335
+ }
336
+ /**
337
+ * Factory function to create a WindowState
338
+ */
339
+ export function createWindowState(backend, assigner) {
340
+ return new WindowStateImpl(backend, assigner);
341
+ }
342
+ /**
343
+ * Aligns checkpoint barriers from multiple input channels
344
+ */
345
+ export class BarrierAligner {
346
+ inputChannels;
347
+ onAligned;
348
+ pendingBarriers = new Map();
349
+ blockedChannels = new Set();
350
+ constructor(inputChannels, onAligned) {
351
+ this.inputChannels = inputChannels;
352
+ this.onAligned = onAligned;
353
+ }
354
+ async processBarrier(channel, barrier) {
355
+ this.pendingBarriers.set(channel, barrier);
356
+ this.blockedChannels.add(channel);
357
+ if (this.allBarriersReceived(barrier.checkpointId)) {
358
+ await this.onAligned(barrier);
359
+ this.releaseBlocked();
360
+ }
361
+ }
362
+ isBlocked(channel) {
363
+ return this.blockedChannels.has(channel);
364
+ }
365
+ allBarriersReceived(checkpointId) {
366
+ return this.inputChannels.every((ch) => this.pendingBarriers.get(ch)?.checkpointId === checkpointId);
367
+ }
368
+ releaseBlocked() {
369
+ this.pendingBarriers.clear();
370
+ this.blockedChannels.clear();
371
+ }
372
+ }
373
+ /**
374
+ * Coordinates checkpoint barriers across operators
375
+ */
376
+ export class CheckpointCoordinator {
377
+ config;
378
+ nextCheckpointId = 1n;
379
+ pendingCheckpoints = new Map();
380
+ constructor(config) {
381
+ this.config = config;
382
+ }
383
+ async triggerCheckpoint(options) {
384
+ const checkpointId = this.nextCheckpointId++;
385
+ const startTime = Date.now();
386
+ const timeout = options?.timeout ?? this.config.defaultTimeout ?? 60000;
387
+ const barrier = {
388
+ checkpointId,
389
+ timestamp: startTime,
390
+ options: {
391
+ mode: options?.mode ?? 'aligned',
392
+ timeout,
393
+ savepoint: options?.savepoint,
394
+ },
395
+ };
396
+ // Track pending checkpoint
397
+ this.pendingCheckpoints.set(checkpointId, {
398
+ startTime,
399
+ acknowledgedSinks: new Set(),
400
+ options: barrier.options,
401
+ });
402
+ try {
403
+ // Inject barrier at all sources
404
+ await Promise.all(this.config.sources.map((s) => s.injectBarrier(barrier)));
405
+ // Wait for all sinks to acknowledge with timeout
406
+ const result = await this.waitForCompletion(checkpointId, timeout);
407
+ return {
408
+ checkpointId,
409
+ status: result ? 'completed' : 'failed',
410
+ failureReason: result ? undefined : 'Timeout waiting for sink acknowledgements',
411
+ isSavepoint: options?.savepoint,
412
+ duration: Date.now() - startTime,
413
+ };
414
+ }
415
+ catch (error) {
416
+ return {
417
+ checkpointId,
418
+ status: 'failed',
419
+ failureReason: error instanceof Error ? error.message : 'Unknown error',
420
+ isSavepoint: options?.savepoint,
421
+ duration: Date.now() - startTime,
422
+ };
423
+ }
424
+ finally {
425
+ this.pendingCheckpoints.delete(checkpointId);
426
+ }
427
+ }
428
+ acknowledgeSink(checkpointId, sinkIndex) {
429
+ const pending = this.pendingCheckpoints.get(checkpointId);
430
+ if (pending) {
431
+ pending.acknowledgedSinks.add(sinkIndex);
432
+ }
433
+ }
434
+ async waitForCompletion(checkpointId, timeout) {
435
+ const pending = this.pendingCheckpoints.get(checkpointId);
436
+ if (!pending)
437
+ return false;
438
+ const numSinks = this.config.sinks.length;
439
+ // Create a timeout promise
440
+ const timeoutPromise = new Promise((resolve) => {
441
+ setTimeout(() => resolve('timeout'), timeout);
442
+ });
443
+ // Create acknowledgement promises with individual timeouts
444
+ const ackPromises = this.config.sinks.map((sink, index) => Promise.race([
445
+ sink.acknowledge(checkpointId).then(() => {
446
+ this.acknowledgeSink(checkpointId, index);
447
+ return 'ack';
448
+ }),
449
+ timeoutPromise,
450
+ ]).catch(() => 'error'));
451
+ // Wait for all with overall timeout
452
+ const results = await Promise.race([
453
+ Promise.all(ackPromises),
454
+ timeoutPromise.then(() => 'timeout'),
455
+ ]);
456
+ if (results === 'timeout') {
457
+ return false;
458
+ }
459
+ // Check if all sinks acknowledged
460
+ return pending.acknowledgedSinks.size >= numSinks;
461
+ }
462
+ }
463
+ /**
464
+ * TTL wrapper for StateBackend
465
+ */
466
+ export class TTLStateWrapper {
467
+ inner;
468
+ policy;
469
+ scheduler;
470
+ ttlEntries = new Map();
471
+ constructor(inner, policy, scheduler) {
472
+ this.inner = inner;
473
+ this.policy = policy;
474
+ this.scheduler = scheduler;
475
+ if (policy.cleanupStrategy.type === 'eager' && scheduler) {
476
+ scheduler.schedule(() => this.runCleanup(), policy.cleanupStrategy.intervalMs);
477
+ }
478
+ }
479
+ get name() {
480
+ return this.inner.name;
481
+ }
482
+ async get(key) {
483
+ const entry = this.ttlEntries.get(key);
484
+ const now = Date.now();
485
+ if (!entry) {
486
+ return undefined;
487
+ }
488
+ // Check expiration
489
+ if (this.isExpired(entry, now)) {
490
+ this.ttlEntries.delete(key);
491
+ await this.inner.delete(key);
492
+ return undefined;
493
+ }
494
+ // Update TTL on read if configured
495
+ if (this.policy.updateOnRead) {
496
+ entry.lastAccessedAt = now;
497
+ entry.expiresAt = now + this.policy.ttlMs;
498
+ }
499
+ return entry.value;
500
+ }
501
+ async put(key, value, ttl) {
502
+ const now = Date.now();
503
+ const effectiveTtl = ttl ?? this.policy.ttlMs;
504
+ const entry = {
505
+ value,
506
+ createdAt: now,
507
+ lastAccessedAt: now,
508
+ expiresAt: now + effectiveTtl,
509
+ };
510
+ this.ttlEntries.set(key, entry);
511
+ await this.inner.put(key, value, effectiveTtl);
512
+ }
513
+ async delete(key) {
514
+ this.ttlEntries.delete(key);
515
+ await this.inner.delete(key);
516
+ }
517
+ async *list(prefix) {
518
+ const now = Date.now();
519
+ for (const [key, entry] of this.ttlEntries) {
520
+ if (prefix !== undefined && !key.startsWith(prefix)) {
521
+ continue;
522
+ }
523
+ if (!this.isExpired(entry, now)) {
524
+ yield [key, entry.value];
525
+ }
526
+ }
527
+ }
528
+ async size() {
529
+ const now = Date.now();
530
+ let count = 0;
531
+ for (const entry of this.ttlEntries.values()) {
532
+ if (!this.isExpired(entry, now)) {
533
+ count++;
534
+ }
535
+ }
536
+ return count;
537
+ }
538
+ async snapshot() {
539
+ return this.inner.snapshot();
540
+ }
541
+ async restore(snapshot) {
542
+ await this.inner.restore(snapshot);
543
+ // Clear TTL entries and rebuild from inner state
544
+ this.ttlEntries.clear();
545
+ const now = Date.now();
546
+ for await (const [key, value] of this.inner.list()) {
547
+ this.ttlEntries.set(key, {
548
+ value,
549
+ createdAt: now,
550
+ lastAccessedAt: now,
551
+ expiresAt: now + this.policy.ttlMs,
552
+ });
553
+ }
554
+ }
555
+ async clear() {
556
+ this.ttlEntries.clear();
557
+ await this.inner.clear();
558
+ }
559
+ async runCleanup() {
560
+ const now = Date.now();
561
+ let cleaned = 0;
562
+ const keysToDelete = [];
563
+ for (const [key, entry] of this.ttlEntries) {
564
+ if (this.isExpired(entry, now)) {
565
+ keysToDelete.push(key);
566
+ cleaned++;
567
+ }
568
+ }
569
+ for (const key of keysToDelete) {
570
+ this.ttlEntries.delete(key);
571
+ await this.inner.delete(key);
572
+ }
573
+ return { cleanedCount: cleaned, timestamp: now };
574
+ }
575
+ async onWatermark(watermark) {
576
+ if (this.policy.cleanupStrategy.type === 'watermark') {
577
+ const allowedLateness = this.policy.cleanupStrategy.allowedLateness;
578
+ const cutoff = watermark - allowedLateness;
579
+ const keysToDelete = [];
580
+ for (const [key, entry] of this.ttlEntries) {
581
+ if (entry.createdAt < cutoff) {
582
+ keysToDelete.push(key);
583
+ }
584
+ }
585
+ for (const key of keysToDelete) {
586
+ this.ttlEntries.delete(key);
587
+ await this.inner.delete(key);
588
+ }
589
+ }
590
+ }
591
+ isExpired(entry, now) {
592
+ return now >= entry.expiresAt;
593
+ }
594
+ }
595
+ /**
596
+ * Manages state recovery from checkpoints
597
+ */
598
+ export class StateRecoveryManager {
599
+ checkpointStore;
600
+ operators;
601
+ constructor(checkpointStore, operators) {
602
+ this.checkpointStore = checkpointStore;
603
+ this.operators = operators;
604
+ }
605
+ async findLatestCheckpoint() {
606
+ const checkpoints = await this.checkpointStore.listCompleted();
607
+ if (checkpoints.length === 0) {
608
+ return undefined;
609
+ }
610
+ return checkpoints.sort((a, b) => Number(b.checkpointId - a.checkpointId))[0];
611
+ }
612
+ async recover(checkpointId) {
613
+ const checkpoint = checkpointId
614
+ ? await this.checkpointStore.get(checkpointId)
615
+ : await this.findLatestCheckpoint();
616
+ if (!checkpoint) {
617
+ throw new Error('No checkpoint available for recovery');
618
+ }
619
+ // Restore each operator's state
620
+ for (const [opId, snapshotId] of checkpoint.operatorStates) {
621
+ const operator = this.operators.get(opId);
622
+ if (operator) {
623
+ const snapshot = await this.checkpointStore.getSnapshot(snapshotId);
624
+ await operator.restoreState(snapshot);
625
+ }
626
+ }
627
+ }
628
+ }
629
+ /**
630
+ * Simple counter implementation
631
+ */
632
+ class SimpleCounter {
633
+ count = 0;
634
+ inc(amount = 1) {
635
+ this.count += amount;
636
+ }
637
+ value() {
638
+ return this.count;
639
+ }
640
+ }
641
+ /**
642
+ * Simple gauge implementation
643
+ */
644
+ class SimpleGauge {
645
+ val = 0;
646
+ set(value) {
647
+ this.val = value;
648
+ }
649
+ value() {
650
+ return this.val;
651
+ }
652
+ }
653
+ /**
654
+ * Simple histogram implementation
655
+ */
656
+ class SimpleHistogram {
657
+ observations = [];
658
+ observe(value) {
659
+ this.observations.push(value);
660
+ }
661
+ values() {
662
+ return [...this.observations];
663
+ }
664
+ }
665
+ /**
666
+ * Create a metrics registry
667
+ */
668
+ export function createStateMetrics() {
669
+ return {
670
+ createCounter: () => new SimpleCounter(),
671
+ createGauge: () => new SimpleGauge(),
672
+ createHistogram: () => new SimpleHistogram(),
673
+ };
674
+ }
675
+ /**
676
+ * Metrics wrapper for StateBackend
677
+ */
678
+ export class MetricsStateWrapper {
679
+ inner;
680
+ registry;
681
+ operatorName;
682
+ metrics;
683
+ constructor(inner, registry, operatorName) {
684
+ this.inner = inner;
685
+ this.registry = registry;
686
+ this.operatorName = operatorName;
687
+ this.metrics = {
688
+ keyCount: 0,
689
+ totalBytes: 0,
690
+ largestKey: { key: '', bytes: 0 },
691
+ reads: registry.createCounter(`${operatorName}_reads`),
692
+ writes: registry.createCounter(`${operatorName}_writes`),
693
+ deletes: registry.createCounter(`${operatorName}_deletes`),
694
+ cacheHits: registry.createCounter(`${operatorName}_cache_hits`),
695
+ cacheMisses: registry.createCounter(`${operatorName}_cache_misses`),
696
+ lastCheckpointDuration: registry.createGauge(`${operatorName}_checkpoint_duration`),
697
+ lastCheckpointSize: registry.createGauge(`${operatorName}_checkpoint_size`),
698
+ checkpointFailures: registry.createCounter(`${operatorName}_checkpoint_failures`),
699
+ expiredKeys: registry.createCounter(`${operatorName}_expired_keys`),
700
+ cleanupDuration: registry.createHistogram(`${operatorName}_cleanup_duration`),
701
+ };
702
+ }
703
+ get name() {
704
+ return this.inner.name;
705
+ }
706
+ async get(key) {
707
+ this.metrics.reads.inc();
708
+ return this.inner.get(key);
709
+ }
710
+ async put(key, value, ttl) {
711
+ this.metrics.writes.inc();
712
+ await this.inner.put(key, value, ttl);
713
+ await this.updateSizeMetrics();
714
+ }
715
+ async delete(key) {
716
+ this.metrics.deletes.inc();
717
+ await this.inner.delete(key);
718
+ await this.updateSizeMetrics();
719
+ }
720
+ async *list(prefix) {
721
+ for await (const entry of this.inner.list(prefix)) {
722
+ yield entry;
723
+ }
724
+ }
725
+ async size() {
726
+ return this.inner.size();
727
+ }
728
+ async snapshot() {
729
+ const start = performance.now();
730
+ try {
731
+ const snapshot = await this.inner.snapshot();
732
+ this.metrics.lastCheckpointDuration.set(performance.now() - start);
733
+ this.metrics.lastCheckpointSize.set(snapshot.metadata.totalBytes);
734
+ return snapshot;
735
+ }
736
+ catch (error) {
737
+ this.metrics.checkpointFailures.inc();
738
+ throw error;
739
+ }
740
+ }
741
+ async restore(snapshot) {
742
+ await this.inner.restore(snapshot);
743
+ await this.updateSizeMetrics();
744
+ }
745
+ async clear() {
746
+ await this.inner.clear();
747
+ this.metrics.keyCount = 0;
748
+ this.metrics.totalBytes = 0;
749
+ }
750
+ getMetrics() {
751
+ return this.metrics;
752
+ }
753
+ async updateSizeMetrics() {
754
+ const size = await this.inner.size();
755
+ this.metrics.keyCount = size;
756
+ // Estimate total bytes (simplified)
757
+ let totalBytes = 0;
758
+ let largestKey = { key: '', bytes: 0 };
759
+ for await (const [key, value] of this.inner.list()) {
760
+ const bytes = JSON.stringify(value).length + key.length;
761
+ totalBytes += bytes;
762
+ if (bytes > largestKey.bytes) {
763
+ largestKey = { key, bytes };
764
+ }
765
+ }
766
+ this.metrics.totalBytes = totalBytes;
767
+ this.metrics.largestKey = largestKey;
768
+ }
769
+ }
770
+ //# sourceMappingURL=index.js.map