@lostgradient/weft 0.2.1 → 0.4.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 (579) hide show
  1. package/README.md +123 -43
  2. package/dist/cli/conformance.js +7 -1
  3. package/dist/cli/generated/operation-client.generated.d.ts +55 -13
  4. package/dist/cli/generated/operation-client.generated.js +3 -0
  5. package/dist/cli/help-text.d.ts +1 -1
  6. package/dist/cli/help-text.js +1 -0
  7. package/dist/cli/operation-catalog-snapshot.d.ts +8 -0
  8. package/dist/cli/operation-catalog-snapshot.js +11 -0
  9. package/dist/cli/parse-schedule-arguments.js +3 -1
  10. package/dist/cli/schedule.js +2 -1
  11. package/dist/cli/types.d.ts +1 -0
  12. package/dist/cli-main.js +80 -79
  13. package/dist/client/handle-delegation.d.ts +7 -2
  14. package/dist/client/handle-delegation.js +9 -1
  15. package/dist/client/http-client-requests.d.ts +4 -1
  16. package/dist/client/http-client-requests.js +10 -0
  17. package/dist/client/http-client.d.ts +10 -4
  18. package/dist/client/http-client.js +18 -1
  19. package/dist/client/http-request.d.ts +11 -1
  20. package/dist/client/http-request.js +17 -7
  21. package/dist/client/index.d.ts +1 -1
  22. package/dist/client/interface.d.ts +100 -4
  23. package/dist/client/local.d.ts +7 -1
  24. package/dist/client/local.js +17 -2
  25. package/dist/client/start-body.d.ts +9 -2
  26. package/dist/client/start-body.js +13 -4
  27. package/dist/core/byte-arrays.d.ts +5 -0
  28. package/dist/core/byte-arrays.js +5 -0
  29. package/dist/core/checkpoint/lifecycle.d.ts +3 -0
  30. package/dist/core/checkpoint/lifecycle.js +9 -4
  31. package/dist/core/checkpoint/serialization.js +12 -5
  32. package/dist/core/codec/extension-codec.d.ts +16 -0
  33. package/dist/core/codec/extension-codec.js +104 -8
  34. package/dist/core/codec/index.d.ts +1 -0
  35. package/dist/core/codec/index.js +1 -0
  36. package/dist/core/codec/serializer-registry.d.ts +122 -0
  37. package/dist/core/codec/serializer-registry.js +51 -0
  38. package/dist/core/context/activity-retry-state.d.ts +38 -0
  39. package/dist/core/context/activity-retry-state.js +89 -0
  40. package/dist/core/context/activity-schedule-to-close.d.ts +159 -0
  41. package/dist/core/context/activity-schedule-to-close.js +69 -0
  42. package/dist/core/context/child-workflow-pipe.d.ts +5 -5
  43. package/dist/core/context/child-workflow-pipe.js +15 -2
  44. package/dist/core/context/context-presence.d.ts +19 -0
  45. package/dist/core/context/context-presence.js +13 -0
  46. package/dist/core/context/durable-operations.d.ts +25 -0
  47. package/dist/core/context/durable-operations.js +64 -0
  48. package/dist/core/context/index.d.ts +18 -5
  49. package/dist/core/context/index.js +17 -12
  50. package/dist/core/context/internals.d.ts +29 -0
  51. package/dist/core/context/internals.js +6 -1
  52. package/dist/core/context/operation-request.d.ts +35 -0
  53. package/dist/core/context/parallel-cache-entry.d.ts +14 -5
  54. package/dist/core/context/run-operation.d.ts +21 -3
  55. package/dist/core/context/run-operation.js +56 -93
  56. package/dist/core/context/session-state.js +7 -8
  57. package/dist/core/context/speculative-child.js +2 -0
  58. package/dist/core/context/types.d.ts +15 -0
  59. package/dist/core/context/version-patching.d.ts +8 -0
  60. package/dist/core/context/version-patching.js +40 -0
  61. package/dist/core/context/workflow-logger.d.ts +98 -0
  62. package/dist/core/context/workflow-logger.js +68 -0
  63. package/dist/core/engine/activity-heartbeat-tracking.d.ts +64 -0
  64. package/dist/core/engine/activity-heartbeat-tracking.js +42 -0
  65. package/dist/core/engine/activity-per-attempt-timeout.d.ts +41 -0
  66. package/dist/core/engine/activity-per-attempt-timeout.js +36 -0
  67. package/dist/core/engine/activity-reconciliation.d.ts +1 -0
  68. package/dist/core/engine/activity-reconciliation.js +12 -1
  69. package/dist/core/engine/activity-resolution.d.ts +23 -0
  70. package/dist/core/engine/activity-resolution.js +37 -0
  71. package/dist/core/engine/aggregate.js +66 -30
  72. package/dist/core/engine/async-activity-completion.d.ts +23 -6
  73. package/dist/core/engine/async-activity-completion.js +53 -12
  74. package/dist/core/engine/attributes-tags.js +9 -4
  75. package/dist/core/engine/bulk-operations-purge.d.ts +26 -0
  76. package/dist/core/engine/bulk-operations-purge.js +38 -3
  77. package/dist/core/engine/bulk-operations-shared.d.ts +2 -0
  78. package/dist/core/engine/bulk-operations-shared.js +8 -2
  79. package/dist/core/engine/bulk-operations.d.ts +4 -1
  80. package/dist/core/engine/bulk-operations.js +235 -24
  81. package/dist/core/engine/callback-creators-bundles.d.ts +9 -0
  82. package/dist/core/engine/callback-creators-bundles.js +30 -2
  83. package/dist/core/engine/callback-creators-core.js +6 -4
  84. package/dist/core/engine/callback-creators-router.js +10 -0
  85. package/dist/core/engine/callback-creators-schedule.d.ts +2 -2
  86. package/dist/core/engine/callback-creators-schedule.js +12 -8
  87. package/dist/core/engine/candidate-read-batching.d.ts +6 -0
  88. package/dist/core/engine/candidate-read-batching.js +1 -0
  89. package/dist/core/engine/checkpoint-io.js +61 -25
  90. package/dist/core/engine/checkpoint-reads.js +3 -2
  91. package/dist/core/engine/checkpoint-replay.d.ts +20 -0
  92. package/dist/core/engine/checkpoint-replay.js +242 -0
  93. package/dist/core/engine/checkpoint-side-effects.d.ts +23 -0
  94. package/dist/core/engine/checkpoint-side-effects.js +35 -0
  95. package/dist/core/engine/child-workflow-cancellation.d.ts +10 -0
  96. package/dist/core/engine/child-workflow-cancellation.js +40 -0
  97. package/dist/core/engine/child-workflow.js +27 -4
  98. package/dist/core/engine/condition-waiters.d.ts +14 -0
  99. package/dist/core/engine/condition-waiters.js +5 -0
  100. package/dist/core/engine/construction.d.ts +3 -1
  101. package/dist/core/engine/construction.js +30 -8
  102. package/dist/core/engine/coordination-branch-executors.d.ts +70 -0
  103. package/dist/core/engine/coordination-branch-executors.js +107 -0
  104. package/dist/core/engine/deferred-consume-envelope.d.ts +59 -0
  105. package/dist/core/engine/deferred-consume-envelope.js +14 -0
  106. package/dist/core/engine/disposal.js +25 -0
  107. package/dist/core/engine/engine-create-types.d.ts +14 -18
  108. package/dist/core/engine/engine-internal-types.d.ts +38 -3
  109. package/dist/core/engine/engine-leak-warnings.d.ts +6 -0
  110. package/dist/core/engine/engine-leak-warnings.js +4 -0
  111. package/dist/core/engine/engine-runtime-helpers.d.ts +17 -0
  112. package/dist/core/engine/engine-runtime-helpers.js +26 -5
  113. package/dist/core/engine/errors.d.ts +121 -0
  114. package/dist/core/engine/errors.js +45 -1
  115. package/dist/core/engine/event-log-compaction.d.ts +8 -0
  116. package/dist/core/engine/event-log-compaction.js +20 -2
  117. package/dist/core/engine/fenced-write.d.ts +65 -0
  118. package/dist/core/engine/fenced-write.js +71 -0
  119. package/dist/core/engine/finalizer-state.d.ts +28 -0
  120. package/dist/core/engine/finalizer-state.js +16 -0
  121. package/dist/core/engine/handle-result.js +1 -1
  122. package/dist/core/engine/handles.d.ts +97 -40
  123. package/dist/core/engine/handles.js +25 -27
  124. package/dist/core/engine/index.d.ts +125 -15
  125. package/dist/core/engine/index.js +207 -11
  126. package/dist/core/engine/inline-launch-queue.d.ts +14 -0
  127. package/dist/core/engine/inline-launch-queue.js +32 -7
  128. package/dist/core/engine/inline-parking.js +3 -2
  129. package/dist/core/engine/internals.d.ts +125 -13
  130. package/dist/core/engine/lease-codec.d.ts +35 -0
  131. package/dist/core/engine/lease-codec.js +32 -0
  132. package/dist/core/engine/lease-deposition.d.ts +66 -0
  133. package/dist/core/engine/lease-deposition.js +10 -0
  134. package/dist/core/engine/lease-errors.d.ts +99 -0
  135. package/dist/core/engine/lease-errors.js +30 -0
  136. package/dist/core/engine/lease-manager.d.ts +114 -0
  137. package/dist/core/engine/lease-manager.js +135 -0
  138. package/dist/core/engine/lifecycle/fork-helpers.js +1 -7
  139. package/dist/core/engine/lifecycle/persist.js +15 -52
  140. package/dist/core/engine/lifecycle/recovered-services.d.ts +8 -6
  141. package/dist/core/engine/lifecycle/recovered-services.js +18 -3
  142. package/dist/core/engine/lifecycle/resume.js +39 -11
  143. package/dist/core/engine/lifecycle/shared.d.ts +8 -1
  144. package/dist/core/engine/lifecycle/start-batch.d.ts +1 -1
  145. package/dist/core/engine/lifecycle/start-batch.js +2 -1
  146. package/dist/core/engine/lifecycle/start-commit.d.ts +56 -0
  147. package/dist/core/engine/lifecycle/start-commit.js +69 -0
  148. package/dist/core/engine/lifecycle/start-exec.d.ts +30 -2
  149. package/dist/core/engine/lifecycle/start-exec.js +38 -0
  150. package/dist/core/engine/lifecycle/start-or-signal-create.d.ts +58 -0
  151. package/dist/core/engine/lifecycle/start-or-signal-create.js +95 -0
  152. package/dist/core/engine/lifecycle/start-or-signal-resolution.d.ts +79 -0
  153. package/dist/core/engine/lifecycle/start-or-signal-resolution.js +60 -0
  154. package/dist/core/engine/lifecycle/start-or-signal.d.ts +46 -0
  155. package/dist/core/engine/lifecycle/start-or-signal.js +71 -0
  156. package/dist/core/engine/lifecycle/start-terminal-conflict-purge.d.ts +39 -0
  157. package/dist/core/engine/lifecycle/start-terminal-conflict-purge.js +28 -0
  158. package/dist/core/engine/lifecycle/start.d.ts +6 -6
  159. package/dist/core/engine/lifecycle/start.js +47 -45
  160. package/dist/core/engine/lifecycle/transition.js +17 -5
  161. package/dist/core/engine/lifecycle.d.ts +3 -2
  162. package/dist/core/engine/lifecycle.js +9 -2
  163. package/dist/core/engine/list-candidate-resolution.js +2 -2
  164. package/dist/core/engine/listing.js +10 -6
  165. package/dist/core/engine/operations-activity.d.ts +4 -11
  166. package/dist/core/engine/operations-activity.js +22 -49
  167. package/dist/core/engine/operations-coordination.d.ts +10 -0
  168. package/dist/core/engine/operations-coordination.js +43 -8
  169. package/dist/core/engine/operations-router.d.ts +6 -0
  170. package/dist/core/engine/operations-router.js +2 -0
  171. package/dist/core/engine/operations-speculate.js +6 -2
  172. package/dist/core/engine/operations-stream.js +12 -2
  173. package/dist/core/engine/operations-time.d.ts +4 -2
  174. package/dist/core/engine/operations-time.js +14 -2
  175. package/dist/core/engine/operations-wait-condition.d.ts +23 -0
  176. package/dist/core/engine/operations-wait-condition.js +62 -0
  177. package/dist/core/engine/ownership-options.d.ts +23 -0
  178. package/dist/core/engine/ownership-options.js +26 -0
  179. package/dist/core/engine/payload-size-policy.d.ts +3 -0
  180. package/dist/core/engine/payload-size-policy.js +4 -0
  181. package/dist/core/engine/pending-updates.d.ts +17 -0
  182. package/dist/core/engine/pending-updates.js +33 -11
  183. package/dist/core/engine/persisted-data-version.d.ts +5 -9
  184. package/dist/core/engine/persisted-data-version.js +4 -5
  185. package/dist/core/engine/queries.js +1 -1
  186. package/dist/core/engine/registration.d.ts +1 -0
  187. package/dist/core/engine/registration.js +18 -3
  188. package/dist/core/engine/schedule-handle.d.ts +45 -0
  189. package/dist/core/engine/schedule-handle.js +26 -0
  190. package/dist/core/engine/schedule-jitter.d.ts +5 -0
  191. package/dist/core/engine/schedule-jitter.js +10 -0
  192. package/dist/core/engine/schedule-run.d.ts +17 -0
  193. package/dist/core/engine/schedule-run.js +38 -0
  194. package/dist/core/engine/schedule-timer.js +81 -17
  195. package/dist/core/engine/schedules.d.ts +8 -5
  196. package/dist/core/engine/schedules.js +44 -19
  197. package/dist/core/engine/search-attribute-records.d.ts +4 -0
  198. package/dist/core/engine/search-attribute-records.js +17 -0
  199. package/dist/core/engine/second-instance-detector.d.ts +96 -0
  200. package/dist/core/engine/second-instance-detector.js +108 -0
  201. package/dist/core/engine/signals.d.ts +38 -0
  202. package/dist/core/engine/signals.js +55 -19
  203. package/dist/core/engine/state-utilities.d.ts +49 -2
  204. package/dist/core/engine/state-utilities.js +114 -3
  205. package/dist/core/engine/storage-io.d.ts +16 -2
  206. package/dist/core/engine/storage-io.js +26 -5
  207. package/dist/core/engine/stream-chunk-loading.d.ts +2 -0
  208. package/dist/core/engine/stream-chunk-loading.js +24 -1
  209. package/dist/core/engine/sub-operation.js +22 -3
  210. package/dist/core/engine/termination/cleanup.d.ts +28 -1
  211. package/dist/core/engine/termination/cleanup.js +44 -2
  212. package/dist/core/engine/termination/complete.js +48 -9
  213. package/dist/core/engine/termination/finalizer-activity.d.ts +53 -0
  214. package/dist/core/engine/termination/finalizer-activity.js +30 -0
  215. package/dist/core/engine/termination/finalizer-claim.d.ts +110 -0
  216. package/dist/core/engine/termination/finalizer-claim.js +80 -0
  217. package/dist/core/engine/termination/finalizer.d.ts +48 -0
  218. package/dist/core/engine/termination/finalizer.js +159 -0
  219. package/dist/core/engine/termination/suspend.d.ts +70 -0
  220. package/dist/core/engine/termination/suspend.js +41 -0
  221. package/dist/core/engine/termination.d.ts +5 -2
  222. package/dist/core/engine/termination.js +6 -0
  223. package/dist/core/engine/updates.js +5 -25
  224. package/dist/core/engine/validation/schedule.d.ts +2 -1
  225. package/dist/core/engine/validation/schedule.js +51 -2
  226. package/dist/core/engine/validation.js +54 -3
  227. package/dist/core/engine/waiting-update-response.d.ts +8 -0
  228. package/dist/core/engine/waiting-update-response.js +22 -0
  229. package/dist/core/engine/workflow-concurrency.d.ts +10 -0
  230. package/dist/core/engine/workflow-concurrency.js +136 -0
  231. package/dist/core/engine/workflow-feed.d.ts +9 -8
  232. package/dist/core/engine/workflow-feed.js +4 -1
  233. package/dist/core/engine/workflow-indexes.d.ts +9 -0
  234. package/dist/core/engine/workflow-indexes.js +10 -0
  235. package/dist/core/engine/workflow-state-stream.js +33 -13
  236. package/dist/core/engine/workflow-visibility-queries.d.ts +2 -2
  237. package/dist/core/engine-helpers.js +1 -0
  238. package/dist/core/events/activity-events.d.ts +43 -12
  239. package/dist/core/events/activity-events.js +28 -0
  240. package/dist/core/events/attribute-events.d.ts +2 -3
  241. package/dist/core/events/event-map.d.ts +19 -12
  242. package/dist/core/events/index.d.ts +1 -0
  243. package/dist/core/events/index.js +1 -0
  244. package/dist/core/events/schedule-events.d.ts +71 -0
  245. package/dist/core/events/schedule-events.js +29 -0
  246. package/dist/core/events/signal-events.d.ts +4 -6
  247. package/dist/core/events/system-events.d.ts +29 -19
  248. package/dist/core/events/system-events.js +26 -0
  249. package/dist/core/events/update-events.d.ts +6 -8
  250. package/dist/core/events/workflow-events.d.ts +108 -20
  251. package/dist/core/events/workflow-events.js +35 -0
  252. package/dist/core/failure-categories.js +5 -17
  253. package/dist/core/fault-code.d.ts +9 -3
  254. package/dist/core/fault-code.js +1 -0
  255. package/dist/core/inline-execution-strategy.context-options.d.ts +69 -0
  256. package/dist/core/inline-execution-strategy.context-options.js +56 -0
  257. package/dist/core/inline-execution-strategy.d.ts +31 -36
  258. package/dist/core/inline-execution-strategy.js +16 -27
  259. package/dist/core/list-filter-validation.d.ts +1 -1
  260. package/dist/core/list-filter-validation.js +2 -1
  261. package/dist/core/payload-size.d.ts +1 -1
  262. package/dist/core/persisted-data-incompatible-error.d.ts +9 -7
  263. package/dist/core/review/events.d.ts +6 -8
  264. package/dist/core/scheduler/scheduler-class.d.ts +10 -1
  265. package/dist/core/scheduler/scheduler-class.js +38 -11
  266. package/dist/core/scheduler/timer-batch.js +9 -1
  267. package/dist/core/scheduler/timer-sources.d.ts +1 -0
  268. package/dist/core/scheduler/timer-sources.js +11 -5
  269. package/dist/core/session-state.d.ts +0 -1
  270. package/dist/core/session-state.js +2 -2
  271. package/dist/core/start-workflow-validation.d.ts +56 -0
  272. package/dist/core/start-workflow-validation.js +30 -1
  273. package/dist/core/step-context.d.ts +10 -6
  274. package/dist/core/step-context.js +7 -15
  275. package/dist/core/types/activity-verification.d.ts +67 -0
  276. package/dist/core/types/activity-verification.js +0 -0
  277. package/dist/core/types/activity.d.ts +86 -64
  278. package/dist/core/types/bulk.d.ts +50 -9
  279. package/dist/core/types/checkpoint.d.ts +44 -8
  280. package/dist/core/types/identity.d.ts +8 -1
  281. package/dist/core/types/launch-metadata.d.ts +33 -0
  282. package/dist/core/types/launch-metadata.js +0 -0
  283. package/dist/core/types/list-options.d.ts +146 -0
  284. package/dist/core/types/list-options.js +0 -0
  285. package/dist/core/types/message-handles.d.ts +25 -0
  286. package/dist/core/types/options.d.ts +165 -215
  287. package/dist/core/types/reviews.d.ts +2 -1
  288. package/dist/core/types/schedules.d.ts +39 -3
  289. package/dist/core/types/services-resolution.d.ts +47 -0
  290. package/dist/core/types/services-resolution.js +0 -0
  291. package/dist/core/types/state.d.ts +11 -11
  292. package/dist/core/types/workflow-builder-runtime.d.ts +12 -3
  293. package/dist/core/types/workflow-builder-runtime.js +11 -2
  294. package/dist/core/types/workflow-builder.d.ts +47 -15
  295. package/dist/core/types/workflow-concurrency.d.ts +39 -0
  296. package/dist/core/types/workflow-concurrency.js +0 -0
  297. package/dist/core/types/workflow-context.d.ts +157 -14
  298. package/dist/core/types/workflow-definition.d.ts +53 -10
  299. package/dist/core/types/workflow-function.d.ts +101 -9
  300. package/dist/core/types/workflow-log.d.ts +98 -0
  301. package/dist/core/types/workflow-log.js +0 -0
  302. package/dist/core/types/workflow-registries.d.ts +14 -3
  303. package/dist/core/types/workflow-registry.d.ts +3 -0
  304. package/dist/core/types/workflow-snapshot.d.ts +29 -0
  305. package/dist/core/types/workflow-snapshot.js +0 -0
  306. package/dist/core/types.d.ts +7 -0
  307. package/dist/core/types.js +7 -0
  308. package/dist/core/versioning.d.ts +9 -39
  309. package/dist/core/versioning.js +2 -12
  310. package/dist/core/weft-error.d.ts +44 -1
  311. package/dist/core/weft-error.js +19 -1
  312. package/dist/core/worker-execution-strategy-options.d.ts +26 -0
  313. package/dist/core/worker-execution-strategy.js +40 -36
  314. package/dist/core/worker-inbound-message.d.ts +38 -0
  315. package/dist/core/worker-inbound-message.js +37 -0
  316. package/dist/core/worker-log-abuse-counter.d.ts +175 -0
  317. package/dist/core/worker-log-abuse-counter.js +107 -0
  318. package/dist/core/worker-message-helpers.d.ts +47 -0
  319. package/dist/core/worker-message-helpers.js +26 -0
  320. package/dist/core/worker-protocol-guard.js +1 -1
  321. package/dist/core/worker-protocol-log.d.ts +56 -0
  322. package/dist/core/worker-protocol-log.js +18 -0
  323. package/dist/core/worker-protocol.d.ts +23 -0
  324. package/dist/core/worker-protocol.js +12 -2
  325. package/dist/core/workflow-version-tuple.d.ts +3 -9
  326. package/dist/core/workflow-version-tuple.js +2 -3
  327. package/dist/diagnostics/doctor.js +6 -3
  328. package/dist/diagnostics/format.js +3 -8
  329. package/dist/diagnostics/types.d.ts +5 -5
  330. package/dist/diagnostics/validate.d.ts +0 -1
  331. package/dist/diagnostics/version-check.d.ts +1 -1
  332. package/dist/diagnostics/version-check.js +10 -13
  333. package/dist/index.d.ts +13 -11
  334. package/dist/index.js +39 -4
  335. package/dist/json-schema.js +3 -3
  336. package/dist/mcp/cli.js +35 -35
  337. package/dist/mcp/dispatcher.js +1 -1
  338. package/dist/mcp/http.js +16 -6
  339. package/dist/mcp/list-filter.js +2 -1
  340. package/dist/mcp/protocol.d.ts +2 -0
  341. package/dist/mcp/protocol.js +1 -1
  342. package/dist/mcp/session.d.ts +16 -0
  343. package/dist/mcp/session.js +60 -6
  344. package/dist/mcp/tools.js +73 -6
  345. package/dist/observability/index.js +2 -2
  346. package/dist/server/asyncapi-channels.js +5 -2
  347. package/dist/server/attribute-filters.d.ts +8 -3
  348. package/dist/server/attribute-filters.js +6 -1
  349. package/dist/server/authentication/api-key.d.ts +2 -1
  350. package/dist/server/authentication/api-key.js +5 -2
  351. package/dist/server/authentication/constant-time-api-key.d.ts +15 -0
  352. package/dist/server/authentication/constant-time-api-key.js +24 -0
  353. package/dist/server/authentication/index.d.ts +1 -1
  354. package/dist/server/authentication/index.js +7 -4
  355. package/dist/server/authentication/rotating-api-key-store.d.ts +5 -3
  356. package/dist/server/authentication/rotating-api-key-store.js +19 -11
  357. package/dist/server/engine-event-feed-backend.d.ts +4 -5
  358. package/dist/server/fault-to-http.js +8 -1
  359. package/dist/server/fault-to-json-rpc.js +1 -0
  360. package/dist/server/fleet-event-feed.d.ts +31 -0
  361. package/dist/server/fleet-event-feed.js +157 -0
  362. package/dist/server/handler/index.js +1 -1
  363. package/dist/server/handler/response-helpers.js +2 -1
  364. package/dist/server/handler/route-dispatch.d.ts +6 -3
  365. package/dist/server/handler/route-dispatch.js +2 -2
  366. package/dist/server/handler.js +31 -31
  367. package/dist/server/index.d.ts +32 -2
  368. package/dist/server/index.js +35 -35
  369. package/dist/server/interactive-operations.js +1 -0
  370. package/dist/server/json-rpc-transport-helpers.d.ts +1 -0
  371. package/dist/server/json-rpc-transport-helpers.js +2 -1
  372. package/dist/server/json-rpc-websocket-runtime.d.ts +11 -2
  373. package/dist/server/json-rpc-websocket-runtime.js +1 -0
  374. package/dist/server/json-rpc-websocket-subscriptions.d.ts +10 -0
  375. package/dist/server/json-rpc-websocket-subscriptions.js +29 -0
  376. package/dist/server/json-rpc-websocket-types.d.ts +22 -0
  377. package/dist/server/json-rpc-websocket-types.js +0 -0
  378. package/dist/server/json-rpc-websocket-validation.js +20 -4
  379. package/dist/server/json-rpc-websocket.d.ts +2 -43
  380. package/dist/server/json-rpc-websocket.js +57 -74
  381. package/dist/server/openapi.d.ts +2 -1
  382. package/dist/server/openapi.js +1 -3
  383. package/dist/server/openrpc-document-schema.d.ts +78 -0
  384. package/dist/server/openrpc-document-schema.js +27 -1
  385. package/dist/server/openrpc-errors.d.ts +3 -0
  386. package/dist/server/openrpc-errors.js +2 -1
  387. package/dist/server/openrpc.js +32 -0
  388. package/dist/server/operation-catalog/index.d.ts +1 -1
  389. package/dist/server/operation-catalog/pipeline-helpers.js +1 -0
  390. package/dist/server/operation-catalog/pipeline-stages.js +26 -12
  391. package/dist/server/operation-catalog/pipeline.js +8 -1
  392. package/dist/server/operation-catalog/registry.js +13 -0
  393. package/dist/server/operation-catalog/types.d.ts +20 -9
  394. package/dist/server/operation-fault.d.ts +10 -0
  395. package/dist/server/operation-fault.js +2 -0
  396. package/dist/server/operation-registry.d.ts +12 -11
  397. package/dist/server/operation-registry.js +12 -3
  398. package/dist/server/operations/aggregate-workflows.d.ts +15 -15
  399. package/dist/server/operations/async-activity.d.ts +2 -2
  400. package/dist/server/operations/async-activity.js +12 -7
  401. package/dist/server/operations/bulk-cancel-workflows.d.ts +1 -1
  402. package/dist/server/operations/bulk-cancel-workflows.js +2 -2
  403. package/dist/server/operations/bulk-delete-workflows.d.ts +1 -1
  404. package/dist/server/operations/bulk-delete-workflows.js +2 -2
  405. package/dist/server/operations/bulk-filter-helpers.d.ts +8 -6
  406. package/dist/server/operations/bulk-filter-helpers.js +54 -24
  407. package/dist/server/operations/bulk-mutate-workflow-tags.d.ts +11 -9
  408. package/dist/server/operations/bulk-mutate-workflow-tags.js +2 -2
  409. package/dist/server/operations/bulk-operation-helpers.d.ts +2 -2
  410. package/dist/server/operations/bulk-retry-failed-workflows.d.ts +7 -0
  411. package/dist/server/operations/bulk-retry-failed-workflows.js +64 -0
  412. package/dist/server/operations/bulk-signal-workflows.d.ts +11 -9
  413. package/dist/server/operations/bulk-signal-workflows.js +2 -2
  414. package/dist/server/operations/cancel-schedule.d.ts +1 -1
  415. package/dist/server/operations/create-schedule.d.ts +3 -1
  416. package/dist/server/operations/create-schedule.js +29 -11
  417. package/dist/server/operations/fleet-events-subscription.d.ts +54 -0
  418. package/dist/server/operations/fleet-events-subscription.js +99 -0
  419. package/dist/server/operations/fork-workflow.d.ts +1 -1
  420. package/dist/server/operations/fork-workflow.js +3 -2
  421. package/dist/server/operations/get-checkpoint-at.d.ts +1 -1
  422. package/dist/server/operations/get-registry.d.ts +1 -1
  423. package/dist/server/operations/get-retention-overview.d.ts +1 -1
  424. package/dist/server/operations/get-review.d.ts +1 -1
  425. package/dist/server/operations/get-schedule.d.ts +1 -1
  426. package/dist/server/operations/get-stream-chunks.d.ts +1 -1
  427. package/dist/server/operations/get-system-metrics.d.ts +2 -2
  428. package/dist/server/operations/get-task-diagnostics.d.ts +45 -6
  429. package/dist/server/operations/get-task-diagnostics.js +101 -7
  430. package/dist/server/operations/get-update-result.d.ts +1 -1
  431. package/dist/server/operations/get-workflow-attributes.d.ts +1 -1
  432. package/dist/server/operations/get-workflow-events.d.ts +1 -1
  433. package/dist/server/operations/get-workflow-result.d.ts +1 -1
  434. package/dist/server/operations/get-workflow-timeline.d.ts +1 -1
  435. package/dist/server/operations/get-workflow.d.ts +1 -1
  436. package/dist/server/operations/list-checkpoints.d.ts +1 -1
  437. package/dist/server/operations/list-reviews.d.ts +1 -1
  438. package/dist/server/operations/list-schedules.d.ts +1 -1
  439. package/dist/server/operations/list-task-queues.d.ts +2 -2
  440. package/dist/server/operations/list-workers.d.ts +2 -2
  441. package/dist/server/operations/list-workflows.d.ts +1 -1
  442. package/dist/server/operations/operation-helpers.d.ts +16 -1
  443. package/dist/server/operations/operation-helpers.js +15 -3
  444. package/dist/server/operations/pause-schedule.d.ts +1 -1
  445. package/dist/server/operations/purge-workflows.d.ts +5 -5
  446. package/dist/server/operations/purge-workflows.js +2 -2
  447. package/dist/server/operations/query-workflow.d.ts +1 -1
  448. package/dist/server/operations/query-workflow.js +3 -2
  449. package/dist/server/operations/recover-all.d.ts +1 -1
  450. package/dist/server/operations/replay-workflow.d.ts +1 -1
  451. package/dist/server/operations/resume-schedule.d.ts +1 -1
  452. package/dist/server/operations/resume-workflow.js +2 -2
  453. package/dist/server/operations/set-workflow-attributes.d.ts +1 -1
  454. package/dist/server/operations/set-workflow-attributes.js +6 -3
  455. package/dist/server/operations/signal-workflow.js +8 -3
  456. package/dist/server/operations/single-workflow-tag-mutation.js +13 -3
  457. package/dist/server/operations/start-or-signal-workflow.d.ts +44 -0
  458. package/dist/server/operations/start-or-signal-workflow.js +130 -0
  459. package/dist/server/operations/start-workflow-options.d.ts +38 -0
  460. package/dist/server/operations/start-workflow-options.js +63 -0
  461. package/dist/server/operations/start-workflow-rest-input.d.ts +14 -0
  462. package/dist/server/operations/start-workflow-rest-input.js +31 -0
  463. package/dist/server/operations/start-workflow.d.ts +1 -1
  464. package/dist/server/operations/start-workflow.js +15 -92
  465. package/dist/server/operations/storage.d.ts +6 -6
  466. package/dist/server/operations/storage.js +24 -14
  467. package/dist/server/operations/stream-workflow-sse.d.ts +1 -1
  468. package/dist/server/operations/submit-review-decision.d.ts +1 -1
  469. package/dist/server/operations/submit-review-decision.js +6 -3
  470. package/dist/server/operations/suspend-workflow.d.ts +13 -0
  471. package/dist/server/operations/suspend-workflow.js +36 -0
  472. package/dist/server/operations/update-schedule.d.ts +1 -1
  473. package/dist/server/operations/update-schedule.js +7 -4
  474. package/dist/server/operations/update-workflow.d.ts +1 -1
  475. package/dist/server/operations/update-workflow.js +7 -3
  476. package/dist/server/operations/worker-drain.d.ts +8 -8
  477. package/dist/server/operations/worker-drain.js +11 -8
  478. package/dist/server/operations/workflow-events-subscription.d.ts +7 -8
  479. package/dist/server/operations/workflow-events-subscription.js +43 -8
  480. package/dist/server/rest-binding.d.ts +21 -8
  481. package/dist/server/rest-bindings.js +24 -0
  482. package/dist/server/rest-body.d.ts +10 -0
  483. package/dist/server/rest-body.js +80 -0
  484. package/dist/server/runtime/authentication-bridge.d.ts +1 -0
  485. package/dist/server/runtime/authentication-bridge.js +33 -6
  486. package/dist/server/runtime/client-visible-events.d.ts +3 -0
  487. package/dist/server/runtime/client-visible-events.js +65 -0
  488. package/dist/server/runtime/context.d.ts +7 -0
  489. package/dist/server/runtime/event-broadcasting.d.ts +6 -0
  490. package/dist/server/runtime/event-broadcasting.js +72 -38
  491. package/dist/server/runtime/retry.d.ts +1 -0
  492. package/dist/server/runtime/retry.js +14 -0
  493. package/dist/server/runtime/shutdown.d.ts +7 -6
  494. package/dist/server/runtime/shutdown.js +6 -1
  495. package/dist/server/runtime/task-dispatch.js +5 -3
  496. package/dist/server/runtime/task-polling.d.ts +16 -2
  497. package/dist/server/runtime/task-polling.js +80 -24
  498. package/dist/server/runtime/task-reconciliation.js +9 -1
  499. package/dist/server/runtime/task-result-resolution.d.ts +15 -0
  500. package/dist/server/runtime/task-result-resolution.js +81 -0
  501. package/dist/server/runtime/websocket-stream.d.ts +20 -1
  502. package/dist/server/runtime/websocket-stream.js +173 -7
  503. package/dist/server/runtime/websocket-upgrade.js +22 -3
  504. package/dist/server/runtime/websocket-worker.d.ts +1 -1
  505. package/dist/server/runtime/websocket-worker.js +46 -30
  506. package/dist/server/serve-internals.d.ts +11 -1
  507. package/dist/server/serve-internals.js +20 -2
  508. package/dist/server/task-state.d.ts +38 -0
  509. package/dist/server/task-state.js +28 -0
  510. package/dist/server/workflow-event-feed.d.ts +36 -115
  511. package/dist/server/workflow-event-feed.js +92 -27
  512. package/dist/service-worker/index.js +31 -31
  513. package/dist/storage/auto.js +1 -1
  514. package/dist/storage/bun-sql.js +24 -0
  515. package/dist/storage/capabilities.d.ts +10 -2
  516. package/dist/storage/capabilities.js +2 -2
  517. package/dist/storage/compressed-storage.js +1 -1
  518. package/dist/storage/default-scope.d.ts +7 -4
  519. package/dist/storage/http.js +2 -2
  520. package/dist/storage/index.d.ts +81 -4
  521. package/dist/storage/indexeddb.js +1 -1
  522. package/dist/storage/interface.d.ts +189 -0
  523. package/dist/storage/interface.js +1 -1
  524. package/dist/storage/key-prefixes.d.ts +1 -1
  525. package/dist/storage/key-prefixes.js +12 -0
  526. package/dist/storage/lmdb.d.ts +4 -3
  527. package/dist/storage/lmdb.js +1 -1
  528. package/dist/storage/memory.js +1 -1
  529. package/dist/storage/neon-batch.d.ts +30 -0
  530. package/dist/storage/neon-batch.js +30 -0
  531. package/dist/storage/neon-value-mapping.d.ts +74 -0
  532. package/dist/storage/neon-value-mapping.js +23 -0
  533. package/dist/storage/neon.d.ts +124 -0
  534. package/dist/storage/neon.js +15 -0
  535. package/dist/storage/node-sqlite-loader.d.ts +71 -0
  536. package/dist/storage/node-sqlite-loader.js +41 -0
  537. package/dist/storage/node-sqlite.d.ts +1 -19
  538. package/dist/storage/node-sqlite.js +61 -32
  539. package/dist/storage/postgres-key-value-queries.d.ts +104 -0
  540. package/dist/storage/postgres-key-value-queries.js +101 -0
  541. package/dist/storage/resolve.d.ts +2 -165
  542. package/dist/storage/resolve.js +1 -1
  543. package/dist/storage/scoped-storage.js +1 -1
  544. package/dist/storage/storage-configuration.d.ts +209 -0
  545. package/dist/storage/storage-configuration.js +0 -0
  546. package/dist/storage/testing.d.ts +168 -0
  547. package/dist/storage/testing.js +2 -0
  548. package/dist/storage/text-value-store.d.ts +9 -9
  549. package/dist/storage/turso.d.ts +8 -0
  550. package/dist/storage/turso.js +2 -2
  551. package/dist/storage/typed-storage.js +1 -1
  552. package/dist/storage/web-extension.js +1 -1
  553. package/dist/testing/index.js +35 -35
  554. package/dist/version.d.ts +1 -1
  555. package/dist/version.js +1 -1
  556. package/dist/worker/index.js +9 -5
  557. package/dist/worker/long-poll.js +4 -0
  558. package/dist/worker/protocol-messages.d.ts +20 -0
  559. package/dist/worker/protocol-schemas.d.ts +32 -0
  560. package/dist/worker/protocol-schemas.js +8 -4
  561. package/dist/worker/protocol-task-result.d.ts +28 -0
  562. package/dist/worker/protocol-task-result.js +76 -0
  563. package/dist/worker/protocol.d.ts +4 -15
  564. package/dist/worker/protocol.js +1 -1
  565. package/dist/worker/registry/fair-share.d.ts +29 -0
  566. package/dist/worker/registry/fair-share.js +30 -0
  567. package/dist/worker/registry/routing.d.ts +18 -0
  568. package/dist/worker/registry/routing.js +14 -0
  569. package/dist/worker/registry/types.d.ts +7 -0
  570. package/dist/worker/registry.d.ts +16 -1
  571. package/dist/worker/registry.js +24 -36
  572. package/dist/workers/worker-replay-state.d.ts +32 -0
  573. package/dist/workers/worker-replay-state.js +35 -0
  574. package/dist/workers/worker-state-namespace.d.ts +21 -0
  575. package/dist/workers/worker-state-namespace.js +13 -0
  576. package/dist/workers/workflow-runner.d.ts +19 -15
  577. package/dist/workers/workflow-runner.js +72 -60
  578. package/dist/workers/workflow-worker-entry.js +5 -2
  579. package/package.json +21 -4
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- var Y=Object.defineProperty;var Z=(z)=>z;function $(z,C){this[z]=Z.bind(null,C)}var y=(z,C)=>{for(var F in C)Y(z,F,{get:C[F],enumerable:!0,configurable:!0,set:$.bind(C,F)})};var R=(z,C)=>()=>(z&&(C=z(z=0)),C);import{createHash as W}from"crypto";import{mkdirSync as j}from"fs";import{tmpdir as k}from"os";import{dirname as q,join as A}from"path";function H(){return{hasBun:typeof globalThis.Bun<"u",hasNode:typeof process<"u"&&typeof process.versions?.node==="string"}}function I(){let z=typeof process<"u"?process.cwd():"weft-default";return W("sha256").update(z).digest("hex").slice(0,16)}function J(){let z=typeof process<"u"?process.env.WEFT_DEFAULT_STORAGE_PATH:void 0,C=z!==void 0&&z.length>0?z:A(k(),"weft-default",`${I()}.db`);return j(q(C),{recursive:!0}),C}function K(z){if(z==="Bun")return typeof globalThis.Bun;return typeof process}function X(z,C){return import.meta.url.endsWith(".ts")?z:C}async function V(z){return await import(z)}var P=X("./bun-sql.ts","./bun-sql.js"),x=X("./node-sqlite.ts","./node-sqlite.js");async function N(){let z=H();if(z.hasBun){let{BunSQLiteStorage:C}=await V(P);return new C(J())}if(z.hasNode){let{NodeSQLiteStorage:C}=await V(x);return new C(J())}throw Error(`resolveDefaultStorage: requires Bun or Node. Detected: typeof Bun=${K("Bun")}, typeof process=${K("process")}. In browser/Service Worker contexts, use \`IndexedDBStorage\` directly or \`setupServiceWorker()\` from \`@lostgradient/weft/service-worker\`.`)}export{N as resolveDefaultStorage};
2
+ var k=Object.defineProperty;var q=(z)=>z;function A(z,C){this[z]=q.bind(null,C)}var D=(z,C)=>{for(var F in C)k(z,F,{get:C[F],enumerable:!0,configurable:!0,set:A.bind(C,F)})};var G=(z,C)=>()=>(z&&(C=z(z=0)),C);var N=(z,C,F)=>{if(C!=null){if(typeof C!=="object"&&typeof C!=="function")throw TypeError('Object expected to be assigned to "using" declaration');let J;if(F)J=C[Symbol.asyncDispose];if(J===void 0)J=C[Symbol.dispose];if(typeof J!=="function")throw TypeError("Object not disposable");z.push([F,J,C])}else if(F)z.push([F]);return C},O=(z,C,F)=>{let J=(K)=>C=F?new SuppressedError(K,C,"An error was suppressed during disposal"):(F=!0,K),V=(K)=>{while(K=z.pop())try{var j=K[1]&&K[1].call(K[2]);if(K[0])return Promise.resolve(j).then(V,(X)=>(J(X),V()))}catch(X){J(X)}if(F)throw C};return V()};import{createHash as H}from"crypto";import{mkdirSync as I}from"fs";import{tmpdir as P}from"os";import{dirname as x,join as y}from"path";function R(){return{hasBun:typeof globalThis.Bun<"u",hasNode:typeof process<"u"&&typeof process.versions?.node==="string"}}function U(){let z=typeof process<"u"?process.cwd():"weft-default";return H("sha256").update(z).digest("hex").slice(0,16)}function Y(){let z=typeof process<"u"?process.env.WEFT_DEFAULT_STORAGE_PATH:void 0,C=z!==void 0&&z.length>0?z:y(P(),"weft-default",`${U()}.db`);return I(x(C),{recursive:!0}),C}function Z(z){if(z==="Bun")return typeof globalThis.Bun;return typeof process}function W(z,C){return import.meta.url.endsWith(".ts")?z:C}async function $(z){return await import(z)}var B=W("./bun-sql.ts","./bun-sql.js"),Q=W("./node-sqlite.ts","./node-sqlite.js");async function v(){let z=R();if(z.hasBun){let{BunSQLiteStorage:C}=await $(B);return new C(Y())}if(z.hasNode){let{NodeSQLiteStorage:C}=await $(Q);return new C(Y())}throw Error(`resolveDefaultStorage: requires Bun or Node. Detected: typeof Bun=${Z("Bun")}, typeof process=${Z("process")}. In browser/Service Worker contexts, use \`IndexedDBStorage\` directly or \`setupServiceWorker()\` from \`@lostgradient/weft/service-worker\`.`)}export{v as resolveDefaultStorage};
@@ -49,6 +49,24 @@ function requireStorageCapability(storage, capability, featureName) {
49
49
  }
50
50
 
51
51
  // src/storage/interface.ts
52
+ var MAX_BATCH_OPERATIONS = 1e4;
53
+ class StorageBatchOperationLimitExceededError extends Error {
54
+ code = "StorageBatchOperationLimitExceededError";
55
+ cap = MAX_BATCH_OPERATIONS;
56
+ count;
57
+ target;
58
+ constructor(target, count) {
59
+ super(`${target} count ${count} exceeds MAX_BATCH_OPERATIONS (${MAX_BATCH_OPERATIONS}).`);
60
+ this.name = "StorageBatchOperationLimitExceededError";
61
+ this.target = target;
62
+ this.count = count;
63
+ }
64
+ }
65
+ function assertStorageBatchOperationCount(target, count) {
66
+ if (count > MAX_BATCH_OPERATIONS) {
67
+ throw new StorageBatchOperationLimitExceededError(target, count);
68
+ }
69
+ }
52
70
  function resolvePrefixRangeEnd(prefix) {
53
71
  return prefix.length > 0 ? prefix.slice(0, -1) + String.fromCharCode(prefix.charCodeAt(prefix.length - 1) + 1) : "\xFF";
54
72
  }
@@ -91,6 +109,8 @@ async function storageDeletePrefix(storage, prefix) {
91
109
  return storageDeletePrefixCore(storage, prefix);
92
110
  }
93
111
  async function storageConditionalBatch(storage, conditions, operations) {
112
+ assertStorageBatchOperationCount("conditionalBatch conditions", conditions.length);
113
+ assertStorageBatchOperationCount("conditionalBatch operations", operations.length);
94
114
  requireStorageCapability(storage, "conditionalBatch", "storageConditionalBatch");
95
115
  if (!storage.conditionalBatch) {
96
116
  throw new Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");
@@ -263,6 +283,7 @@ class ScopedStorage {
263
283
  }
264
284
  }
265
285
  async batch(operations) {
286
+ assertStorageBatchOperationCount("batch operations", operations.length);
266
287
  await this.#storage.batch(operations.map((operation) => {
267
288
  if (operation.type === "put") {
268
289
  return {
@@ -514,11 +535,14 @@ class BunSQLiteStorage {
514
535
  return scoped;
515
536
  }
516
537
  async batch(operations) {
538
+ assertStorageBatchOperationCount("batch operations", operations.length);
517
539
  if (operations.length === 0)
518
540
  return;
519
541
  this.#batchTransaction(operations);
520
542
  }
521
543
  async conditionalBatch(conditions, operations) {
544
+ assertStorageBatchOperationCount("conditionalBatch conditions", conditions.length);
545
+ assertStorageBatchOperationCount("conditionalBatch operations", operations.length);
522
546
  const conditionalTransaction = this.#database.transaction((pendingConditions, pendingOperations) => {
523
547
  for (const condition of pendingConditions) {
524
548
  const row = this.#getStatement.get(condition.key);
@@ -170,8 +170,16 @@ export declare function requireStorageCapability(storage: Storage, capability: G
170
170
  /**
171
171
  * Fail fast when a storage backend is not conservative enough for boot-time
172
172
  * durable recovery. This is intentionally stricter than the engine's per-feature
173
- * gates: it rejects ephemeral, remote, eventual, best-effort, non-atomic, and
174
- * non-CAS storage before an application starts in durable mode.
173
+ * gates: it rejects ephemeral, eventual, best-effort, non-atomic, and non-CAS
174
+ * storage before an application starts in durable mode.
175
+ *
176
+ * Persistence may be `local` (a same-process file-backed store) or `remote` (a
177
+ * durable service such as Neon Postgres). A `remote` backend is acceptable only
178
+ * because the other four axes are still required at their strongest:
179
+ * `linearizable` read-after-write, `snapshot` scans, atomic batches, and
180
+ * compare-and-swap. A remote store that cannot promise all four (an eventually
181
+ * consistent HTTP backend, say) is still rejected — by those axes, not by its
182
+ * persistence scope.
175
183
  *
176
184
  * @throws {Error} When the backend's capability row is not suitable for recovery.
177
185
  *
@@ -4,8 +4,8 @@ export function requireStorageCapability(storage, capability, featureName) {
4
4
  }
5
5
  export function assertDurableStorageForRecovery(storage) {
6
6
  const capabilities = storage.capabilities(), failures = [];
7
- if (capabilities.persistence !== "local")
8
- failures.push(`persistence must be "local" (got "${capabilities.persistence}")`);
7
+ if (capabilities.persistence !== "local" && capabilities.persistence !== "remote")
8
+ failures.push(`persistence must be "local" or "remote" (got "${capabilities.persistence}")`);
9
9
  if (capabilities.readAfterWrite !== "linearizable")
10
10
  failures.push(`readAfterWrite must be "linearizable" (got "${capabilities.readAfterWrite}")`);
11
11
  if (capabilities.scanConsistency !== "snapshot")
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- var A=Object.defineProperty;var S=(j)=>j;function y(j,J){this[j]=S.bind(null,J)}var p=(j,J)=>{for(var W in J)A(j,W,{get:J[W],enumerable:!0,configurable:!0,set:y.bind(J,W)})};var Y=(j,J)=>()=>(j&&(J=j(j=0)),J);function x(){return typeof(K&&"bun"in K?K.bun:globalThis.Bun)<"u"}function I(){if(K&&"process"in K)return K.process;return globalThis.process}function d(j){if(x())return Bun.sleep(j);return new Promise((J)=>setTimeout(J,j))}function z(j){let J=v;for(let W=0;W<j.length;W++)J^=BigInt(j[W]),J=J*O&_;return J.toString(16).padStart(16,"0")}function n(j){return z(j)}function i(j){return z(b.encode(j))}function w(j){let W=I()?.getBuiltinModule;if(typeof W!=="function")return;return W(j)}function s(j){if(x())return Bun.file(j).size;let J=w("node:fs");if(!J)throw Error("fileSize() requires Bun or Node 22.5+ (process.getBuiltinModule). Not available in browser or edge runtimes.");try{return J.statSync(j).size}catch(W){if(typeof W==="object"&&W!==null&&"code"in W&&W.code==="ENOENT")return 0;throw W}}function C(){let j=w("node:zlib");if(!j)throw Error("gzip/gunzip require Bun or Node 22.5+ (process.getBuiltinModule). "+"Not available in browser or edge runtimes \u2014 use CompressionStream directly.");return j}function P(j){if(x())return new Uint8Array(Bun.gzipSync(new Uint8Array(j)));return new Uint8Array(C().gzipSync(j))}function G(j){if(x())return new Uint8Array(Bun.gunzipSync(new Uint8Array(j)));return new Uint8Array(C().gunzipSync(j))}function N(){return w("node:zlib")}var K,v=0xcbf29ce484222325n,O=0x00000100000001b3n,_=0xffffffffffffffffn,b;var f=Y(()=>{b=new TextEncoder});function L(){let j=N();if(!j)throw Error("Brotli compression requires Bun or Node 22.5+ with process.getBuiltinModule support. Use gzip compression for browser/edge runtimes.");return j}function T(j){return new Uint8Array(L().brotliCompressSync(j))}function h(j){return new Uint8Array(L().brotliDecompressSync(j))}function D(j){return c(j)}function c(j){switch(j){case"gzip":return{algorithm:"gzip",compress(J){return P(J)}};case"brotli":return{algorithm:"brotli",compress(J){return T(J)}};case"none":return{algorithm:"none",compress(J){return J}}}}async function U(j,J,W){if(j.length<W||J.algorithm==="none"){let $=new Uint8Array(j.length+X);return $[0]=V,$[1]=F,$.set(j,X),$}let q=await J.compress(j);if(q.length+X>=j.length+X){let $=new Uint8Array(j.length+X);return $[0]=V,$[1]=F,$.set(j,X),$}let B=J.algorithm==="gzip"?Z:g,Q=new Uint8Array(q.length+X);return Q[0]=V,Q[1]=B,Q.set(q,X),Q}async function k(j){if(j.length<X)throw Error("Compression payload missing 2-byte header.");if(j[0]!==V)throw Error("Compression payload missing magic byte 0xC1.");let J=j[1],W=j.slice(X);switch(J){case F:return W;case Z:return G(W);case g:return h(W);default:throw Error(`Compression payload uses unsupported algorithm byte 0x${J.toString(16).padStart(2,"0")}.`)}}function H(j){return{threshold:j?.threshold??E,algorithm:j?.algorithm??R}}var V=193,F=0,Z=1,g=2,X=2,E=4096,R="gzip";var M=Y(()=>{f()});var m;var u=Y(()=>{M();m=class m{#j;#J;#W;constructor(j,J){this.#j=j;let W=H(J);if(this.#J=D(W.algorithm),this.#W=W.threshold,j.query){let q=j.query.bind(j);Object.defineProperty(this,"query",{value:q,enumerable:!0,configurable:!0})}}capabilities(){let j=this.#j.capabilities();return{...j.persistence===void 0?{}:{persistence:j.persistence},readAfterWrite:j.readAfterWrite,scanConsistency:j.scanConsistency,atomicBatch:j.atomicBatch,conditionalBatch:!1,boundedRangeDelete:!1}}async get(j){let J=await this.#j.get(j);if(!J)return null;return k(J)}async put(j,J){let W=await U(J,this.#J,this.#W);return this.#j.put(j,W)}async delete(j){return this.#j.delete(j)}async*scan(j,J){for await(let[W,q]of this.#j.scan(j,J))yield[W,await k(q)]}async batch(j){let J=await Promise.all(j.map(async(W)=>{if(W.type==="put")return{type:"put",key:W.key,value:await U(W.value,this.#J,this.#W)};return W}));return this.#j.batch(J)}[Symbol.dispose](){this.#j[Symbol.dispose]()}}});u();export{m as CompressedStorage};
2
+ var n=Object.defineProperty;var l=(W)=>W;function s(W,F){this[W]=l.bind(null,F)}var UW=(W,F)=>{for(var X in F)n(W,X,{get:F[X],enumerable:!0,configurable:!0,set:s.bind(F,X)})};var P=(W,F)=>()=>(W&&(F=W(W=0)),F);var VW=(W,F,X)=>{if(F!=null){if(typeof F!=="object"&&typeof F!=="function")throw TypeError('Object expected to be assigned to "using" declaration');let Y;if(X)Y=F[Symbol.asyncDispose];if(Y===void 0)Y=F[Symbol.dispose];if(typeof Y!=="function")throw TypeError("Object not disposable");W.push([X,Y,F])}else if(X)W.push([X]);return F},PW=(W,F,X)=>{let Y=($)=>F=X?new SuppressedError($,F,"An error was suppressed during disposal"):(X=!0,$),U=($)=>{while($=W.pop())try{var j=$[1]&&$[1].call($[2]);if($[0])return Promise.resolve(j).then(U,(D)=>(Y(D),U()))}catch(D){Y(D)}if(X)throw F};return U()};function S(W,F,X){if(!W.capabilities()[F])throw Error(`Feature "${X}" requires storage capability "${F}", but this storage backend does not provide it.`)}function d(W){let F=W.capabilities(),X=[];if(F.persistence!=="local"&&F.persistence!=="remote")X.push(`persistence must be "local" or "remote" (got "${F.persistence}")`);if(F.readAfterWrite!=="linearizable")X.push(`readAfterWrite must be "linearizable" (got "${F.readAfterWrite}")`);if(F.scanConsistency!=="snapshot")X.push(`scanConsistency must be "snapshot" (got "${F.scanConsistency}")`);if(!F.atomicBatch)X.push("atomicBatch must be true");if(!F.conditionalBatch)X.push("conditionalBatch must be true");if(X.length>0)throw Error(`Storage is not durable enough for recovery: ${X.join("; ")}.`)}var Z="default";async function B(W,F){return await W.get(F)!==null}async function*z(W,F,X){for await(let[Y]of W.scan(F,X))yield Y}async function x(W,F){let X=0;for await(let Y of z(W,F))X++;return X}async function v(W,F){let X=[];for await(let Y of z(W,F))X.push({type:"delete",key:Y});if(X.length===0)return 0;return await W.batch(X),X.length}async function LW(W,F,X){let Y=[];for await(let U of z(W,F,X))Y.push({type:"delete",key:U});if(Y.length===0)return 0;return await W.batch(Y),Y.length}var a;var O=P(()=>{a=["actrec:","archive:","async-act:","attr:","audit:bulk:","blob:","budget:","budget-charged:","ev:","fleet-event-by-workflow:","fleet-event:","fleet-event-tail","idx:","lease:","liveness:","offload:","op:","review:","schedule:","schedule-due:","schedule-run:","sig:","sigres:","sigseq:","start-idem:","state:","tag:","tool-effect:","upd:","upk:","upr:","wf:","wf-cleanup:","wf-cleanup-needed:","wf-concurrency:","wf-concurrency-holder:","wf-deadline:","wf-delayed:","wf-finalizer-state:","wf-has-services:","wf-headers:","wf-idx-","wf-teardown:","wf-teardown-deadletter:","wf-teardown-needed:","wf-terminal:"]});function G(W,F){if(F>_)throw new h(W,F)}function NW(W){return W.length>0?W.slice(0,-1)+String.fromCharCode(W.charCodeAt(W.length-1)+1):"\xFF"}function HW(W,F={}){if(F.gt!==void 0&&W<=F.gt)return!1;if(F.gte!==void 0&&W<F.gte)return!1;if(F.lt!==void 0&&W>=F.lt)return!1;if(F.lte!==void 0&&W>F.lte)return!1;return!0}function EW(W,F){if(W===null||F===null)return W===F;if(W.byteLength!==F.byteLength)return!1;for(let X=0;X<W.byteLength;X++)if(W[X]!==F[X])return!1;return!0}async function BW(W,F){if(W.has)return W.has(F);return B(W,F)}function xW(W,F,X){if(W.keys)return W.keys(F,X);return z(W,F,X)}async function vW(W,F){if(W.count)return W.count(F);return x(W,F)}async function OW(W,F){if(W.deletePrefix)return W.deletePrefix(F);return v(W,F)}async function TW(W,F){G("batch operations",F.length),await W.batch(F)}async function hW(W,F,X){if(G("conditionalBatch conditions",F.length),G("conditionalBatch operations",X.length),S(W,"conditionalBatch","storageConditionalBatch"),!W.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return W.conditionalBatch(F,X)}function J(W){return encodeURIComponent(W)}function AW(W){return decodeURIComponent(W)}function RW(W){try{return decodeURIComponent(W)}catch{return null}}var _=1e4,MW=1e4,h,K=(W)=>String(W).padStart(16,"0"),i="0",t="1",T=(W,F,X,Y)=>`sig:${J(W)}:${J(F)}:${Y}:${J(X)}`,bW;var A=P(()=>{O();h=class h extends Error{code="StorageBatchOperationLimitExceededError";cap=_;count;target;constructor(W,F){super(`${W} count ${F} exceeds MAX_BATCH_OPERATIONS (${_}).`);this.name="StorageBatchOperationLimitExceededError",this.target=W,this.count=F}};bW={workflow:(W)=>`wf:${J(W)}`,checkpoint:(W)=>`wf:${J(W)}:ckpt`,checkpointHistory:(W,F)=>`wf:${J(W)}:ckpt:${String(F).padStart(10,"0")}`,timelinePrefix:(W)=>`wf:${J(W)}:timeline:`,timeline:(W,F)=>`wf:${J(W)}:timeline:${String(F).padStart(10,"0")}`,schedule:(W)=>`schedule:${J(W)}`,scheduleTick:(W,F)=>`schedule-due:${String(W).padStart(16,"0")}:${J(F)}`,scheduleRun:(W)=>`schedule-run:${J(W)}`,operation:(W,F,X)=>`op:${W}:${K(F)}:${X}`,operationInflight:(W)=>`op:inflight:${W}`,operationQueued:(W)=>`op:queued:${W}`,operationResolved:(W)=>`op:resolved:${W}`,operationDeadLetterPrefix:()=>"op:dead-letter:",operationDeadLetter:(W)=>`op:dead-letter:${W}`,bulkOperationAuditPrefix:()=>"audit:bulk:",bulkOperationAudit:(W,F,X)=>`audit:bulk:${K(W)}:${J(F)}:${J(X)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(W,F)=>`op:resolved-by-time:${K(W)}:${J(F)}`,asyncActivity:(W,F)=>`async-act:v1:${J(W)}:${J(F)}`,activityReconciliationPrefix:(W)=>`actrec:v1:${J(W)}:`,activityReconciliation:(W,F,X)=>`actrec:v1:${J(W)}:${J(F)}:${X}`,eventPrefix:(W)=>`ev:${J(W)}:`,event:(W,F)=>`ev:${J(W)}:${String(F).padStart(10,"0")}`,eventHead:(W)=>`ev:${J(W)}:head`,eventWatermark:(W)=>`ev:${J(W)}:watermark`,fleetEventPrefix:()=>"fleet-event:",fleetEvent:(W)=>`fleet-event:${String(W).padStart(10,"0")}`,fleetEventTail:()=>"fleet-event-tail",fleetEventByWorkflowPrefix:(W)=>`fleet-event-by-workflow:${J(W)}:`,fleetEventByWorkflow:(W,F)=>`fleet-event-by-workflow:${J(W)}:${String(F).padStart(10,"0")}`,signal:(W,F,X)=>T(W,F,X,t),startSignal:(W,F,X)=>T(W,F,X,i),signalSequence:(W)=>`sigseq:v1:${J(W)}`,signalAcceptedResponsePrefix:(W)=>`sigres:v1:${J(W)}:`,signalAcceptedResponse:(W,F,X)=>`sigres:v1:${J(W)}:${J(F)}:${J(X)}`,deadline:(W,F)=>`wf-deadline:${K(W)}:${J(F)}`,terminalCleanup:(W,F)=>`wf-cleanup:${K(W)}:${J(F)}`,teardownTimer:(W,F)=>`wf-teardown:${K(W)}:${J(F)}`,delayedStart:(W,F)=>`wf-delayed:${K(W)}:${J(F)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(W,F)=>`wf-terminal:${K(W)}:${J(F)}`,attribute:(W)=>`attr:${J(W)}`,attributeIndex:(W,F,X)=>`idx:${W}:${F}:${J(X)}`,tagIndex:(W,F)=>`tag:${J(W)}:${J(F)}`,updatePrefix:(W)=>`upd:${J(W)}:`,update:(W,F)=>`upd:${J(W)}:${F}`,updateResponse:(W)=>`upr:${W}`,updateIdempotency:(W,F)=>`upk:${J(W)}:${F}`,startIdempotency:(W)=>`start-idem:${J(W)}`,startIdempotencySignalId:(W)=>`start-idem:${W}`,livenessPrefix:()=>"liveness:",liveness:(W)=>`liveness:${J(W)}`,leasePrefix:()=>"lease:",leaseEpoch:()=>"lease:epoch",leaseHolder:()=>"lease:holder",budget:(W,F,X)=>`budget:${W}:${F}:${X}`,review:(W,F)=>`review:${J(W)}:${F}`,workflowHeaders:(W)=>`wf-headers:${J(W)}`,childCancellationPrefix:(W)=>`child-cancel:${J(W)}:`,childCancellation:(W,F)=>`child-cancel:${J(W)}:${J(F)}`,terminalCleanupNeeded:(W)=>`wf-cleanup-needed:${J(W)}`,workflowConcurrency:(W,F)=>`wf-concurrency:${J(W)}:${J(F)}`,workflowConcurrencyHolder:(W)=>`wf-concurrency-holder:${J(W)}`,workflowHasServices:(W)=>`wf-has-services:${J(W)}`,finalizerState:(W)=>`wf-finalizer-state:${J(W)}`,teardownOwed:(W)=>`wf-teardown-needed:${J(W)}`,teardownDeadLetter:(W)=>`wf-teardown-deadletter:${J(W)}`,offload:(W,F)=>`offload:${J(W)}:${F}`,archive:(W,F)=>`archive:${J(W)}:${F}`,stateExecution:(W,F)=>`state:execution:${J(W)}:${J(F)}`,stateWorkflow:(W,F)=>`state:workflow-scope:${Z}:${J(W)}:${J(F)}`,streamChunkPrefix:(W,F)=>`blob:${J(W)}:${F}:chunk:`,streamChunk:(W,F,X)=>`blob:${J(W)}:${F}:chunk:${String(X).padStart(10,"0")}`,streamTail:(W,F)=>`blob:${J(W)}:${F}:tail`,streamMetadata:(W,F)=>`blob:${J(W)}:${F}:meta`,budgetCharged:(W)=>`budget-charged:${W}`,toolEffect:(W,F,X)=>`tool-effect:${J(W)}:${F}:${X}`,workflowVisibilityStatus:(W,F)=>`wf-idx-status:${J(W)}:${J(F)}`,workflowVisibilityType:(W,F)=>`wf-idx-type:${J(W)}:${J(F)}`,workflowVisibilityCreated:(W,F)=>`wf-idx-created:${K(W)}:${J(F)}`,workflowVisibilityUpdated:(W,F)=>`wf-idx-updated:${K(W)}:${J(F)}`,workflowVisibilityDeadline:(W,F)=>`wf-idx-deadline:${K(W)}:${J(F)}`,workflowVisibilityManifest:(W)=>`wf-idx-manifest:${J(W)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"}});function L(){return typeof(V&&"bun"in V?V.bun:globalThis.Bun)<"u"}function r(){if(V&&"process"in V)return V.process;return globalThis.process}function uW(W){if(L())return Bun.sleep(W);return new Promise((F)=>setTimeout(F,W))}function R(W){let F=e;for(let X=0;X<W.length;X++)F^=BigInt(W[X]),F=F*o&WW;return F.toString(16).padStart(16,"0")}function fW(W){return R(W)}function IW(W){return R(FW.encode(W))}function M(W){let X=r()?.getBuiltinModule;if(typeof X!=="function")return;return X(W)}function kW(W){if(L())return Bun.file(W).size;let F=M("node:fs");if(!F)throw Error("fileSize() requires Bun or Node 22.5+ (process.getBuiltinModule). Not available in browser or edge runtimes.");try{return F.statSync(W).size}catch(X){if(typeof X==="object"&&X!==null&&"code"in X&&X.code==="ENOENT")return 0;throw X}}function b(){let W=M("node:zlib");if(!W)throw Error("gzip/gunzip require Bun or Node 22.5+ (process.getBuiltinModule). "+"Not available in browser or edge runtimes \u2014 use CompressionStream directly.");return W}function c(W){if(L())return new Uint8Array(Bun.gzipSync(new Uint8Array(W)));return new Uint8Array(b().gzipSync(W))}function y(W){if(L())return new Uint8Array(Bun.gunzipSync(new Uint8Array(W)));return new Uint8Array(b().gunzipSync(W))}function m(){return M("node:zlib")}var V,e=0xcbf29ce484222325n,o=0x00000100000001b3n,WW=0xffffffffffffffffn,FW;var g=P(()=>{FW=new TextEncoder});function u(){let W=m();if(!W)throw Error("Brotli compression requires Bun or Node 22.5+ with process.getBuiltinModule support. Use gzip compression for browser/edge runtimes.");return W}function XW(W){return new Uint8Array(u().brotliCompressSync(W))}function JW(W){return new Uint8Array(u().brotliDecompressSync(W))}function k(W){return YW(W)}function YW(W){switch(W){case"gzip":return{algorithm:"gzip",compress(F){return c(F)}};case"brotli":return{algorithm:"brotli",compress(F){return XW(F)}};case"none":return{algorithm:"none",compress(F){return F}}}}async function H(W,F,X){if(W.length<X||F.algorithm==="none"){let j=new Uint8Array(W.length+Q);return j[0]=C,j[1]=N,j.set(W,Q),j}let Y=await F.compress(W);if(Y.length+Q>=W.length+Q){let j=new Uint8Array(W.length+Q);return j[0]=C,j[1]=N,j.set(W,Q),j}let U=F.algorithm==="gzip"?f:I,$=new Uint8Array(Y.length+Q);return $[0]=C,$[1]=U,$.set(Y,Q),$}async function E(W){if(W.length<Q)throw Error("Compression payload missing 2-byte header.");if(W[0]!==C)throw Error("Compression payload missing magic byte 0xC1.");let F=W[1],X=W.slice(Q);switch(F){case N:return X;case f:return y(X);case I:return JW(X);default:throw Error(`Compression payload uses unsupported algorithm byte 0x${F.toString(16).padStart(2,"0")}.`)}}function p(W){return{threshold:W?.threshold??$W,algorithm:W?.algorithm??jW}}var C=193,N=0,f=1,I=2,Q=2,$W=4096,jW="gzip";var w=P(()=>{g()});var KW;var QW=P(()=>{w();A();KW=class KW{#W;#F;#X;constructor(W,F){this.#W=W;let X=p(F);if(this.#F=k(X.algorithm),this.#X=X.threshold,W.query){let Y=W.query.bind(W);Object.defineProperty(this,"query",{value:Y,enumerable:!0,configurable:!0})}}capabilities(){let W=this.#W.capabilities();return{...W.persistence===void 0?{}:{persistence:W.persistence},readAfterWrite:W.readAfterWrite,scanConsistency:W.scanConsistency,atomicBatch:W.atomicBatch,conditionalBatch:!1,boundedRangeDelete:!1}}async get(W){let F=await this.#W.get(W);if(!F)return null;return E(F)}async put(W,F){let X=await H(F,this.#F,this.#X);return this.#W.put(W,X)}async delete(W){return this.#W.delete(W)}async*scan(W,F){for await(let[X,Y]of this.#W.scan(W,F))yield[X,await E(Y)]}async batch(W){G("batch operations",W.length);let F=await Promise.all(W.map(async(X)=>{if(X.type==="put")return{type:"put",key:X.key,value:await H(X.value,this.#F,this.#X)};return X}));return this.#W.batch(F)}[Symbol.dispose](){this.#W[Symbol.dispose]()}}});QW();export{KW as CompressedStorage};
@@ -1,9 +1,12 @@
1
1
  /**
2
2
  * Constant scope for workflow-type-shared durable state (single source of truth;
3
- * never inline the literal). Keys live under `state:workflow-scope:` — distinct
4
- * from the legacy `state:workflow:<tenantId>:` layout so a historical tenant id
5
- * cannot alias in, making a future re-partition a key rename, not a data
6
- * migration. See `KEYS.stateWorkflow` in `./interface.ts`.
3
+ * never inline the literal). Keys live under `state:workflow-scope:` —
4
+ * deliberately distinct from the retired `state:workflow:<tenantId>:` prefix so
5
+ * that a tenant id which happened to equal a scope name can never alias into
6
+ * this namespace (the current key never starts with `state:workflow:`).
7
+ * Re-partitioning the scope is therefore a key rename, not a data rewrite. See
8
+ * `KEYS.stateWorkflow` in `./interface.ts`, pinned by the alias test in
9
+ * `../core/atomic-state.test.ts`.
7
10
  *
8
11
  * Internal leaf module (no imports) so both `./interface.ts` and
9
12
  * `../core/atomic-state.ts` can depend on it without an import cycle.
@@ -1,2 +1,2 @@
1
- var k=Object.defineProperty;var u=(J)=>J;function m(J,Y){this[J]=u.bind(null,Y)}var n=(J,Y)=>{for(var Z in Y)k(J,Z,{get:Y[Z],enumerable:!0,configurable:!0,set:m.bind(Y,Z)})};function U(J){let Y=[];for(let Z=0;Z<J.length;Z+=512)Y.push(String.fromCharCode(...J.subarray(Z,Z+512)));return btoa(Y.join(""))}function T(J){let Y=atob(J),Z=new Uint8Array(Y.length);for(let G=0;G<Y.length;G+=1)Z[G]=Y.charCodeAt(G);return Z}function N(J){return typeof J==="object"&&J!==null&&!Array.isArray(J)}async function M(J,Y){return await J.get(Y)!==null}async function*Q(J,Y,Z){for await(let[G]of J.scan(Y,Z))yield G}async function V(J,Y){let Z=0;for await(let G of Q(J,Y))Z++;return Z}async function E(J,Y){let Z=[];for await(let G of Q(J,Y))Z.push({type:"delete",key:G});if(Z.length===0)return 0;return await J.batch(Z),Z.length}async function H(J,Y,Z){let G=[];for await(let X of Q(J,Y,Z))G.push({type:"delete",key:X});if(G.length===0)return 0;return await J.batch(G),G.length}function q(J,Y,Z){if(!J.capabilities()[Y])throw Error(`Feature "${Z}" requires storage capability "${Y}", but this storage backend does not provide it.`)}var R="default";function O(J){return J.length>0?J.slice(0,-1)+String.fromCharCode(J.charCodeAt(J.length-1)+1):"ÿ"}function _J(J,Y={}){if(Y.gt!==void 0&&J<=Y.gt)return!1;if(Y.gte!==void 0&&J<Y.gte)return!1;if(Y.lt!==void 0&&J>=Y.lt)return!1;if(Y.lte!==void 0&&J>Y.lte)return!1;return!0}function FJ(J,Y){if(J===null||Y===null)return J===Y;if(J.byteLength!==Y.byteLength)return!1;for(let Z=0;Z<J.byteLength;Z++)if(J[Z]!==Y[Z])return!1;return!0}async function P(J,Y){if(J.has)return J.has(Y);return M(J,Y)}function h(J,Y,Z){if(J.keys)return J.keys(Y,Z);return Q(J,Y,Z)}async function v(J,Y){if(J.count)return J.count(Y);return V(J,Y)}async function C(J,Y){if(J.deletePrefix)return J.deletePrefix(Y);return E(J,Y)}async function K(J,Y,Z){if(q(J,"conditionalBatch","storageConditionalBatch"),!J.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return J.conditionalBatch(Y,Z)}function $(J){return encodeURIComponent(J)}function QJ(J){try{return decodeURIComponent(J)}catch{return null}}var _=(J)=>String(J).padStart(16,"0"),WJ={workflow:(J)=>`wf:${$(J)}`,checkpoint:(J)=>`wf:${$(J)}:ckpt`,checkpointHistory:(J,Y)=>`wf:${$(J)}:ckpt:${String(Y).padStart(10,"0")}`,timelinePrefix:(J)=>`wf:${$(J)}:timeline:`,timeline:(J,Y)=>`wf:${$(J)}:timeline:${String(Y).padStart(10,"0")}`,schedule:(J)=>`schedule:${$(J)}`,scheduleTick:(J,Y)=>`schedule-due:${String(J).padStart(16,"0")}:${$(Y)}`,scheduleRun:(J)=>`schedule-run:${$(J)}`,operation:(J,Y,Z)=>`op:${J}:${_(Y)}:${Z}`,operationInflight:(J)=>`op:inflight:${J}`,operationQueued:(J)=>`op:queued:${J}`,operationResolved:(J)=>`op:resolved:${J}`,bulkOperationAuditPrefix:()=>"audit:bulk:",bulkOperationAudit:(J,Y,Z)=>`audit:bulk:${_(J)}:${$(Y)}:${$(Z)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(J,Y)=>`op:resolved-by-time:${_(J)}:${$(Y)}`,asyncActivity:(J,Y)=>`async-act:v1:${$(J)}:${$(Y)}`,activityReconciliationPrefix:(J)=>`actrec:v1:${$(J)}:`,activityReconciliation:(J,Y,Z)=>`actrec:v1:${$(J)}:${$(Y)}:${Z}`,eventPrefix:(J)=>`ev:${$(J)}:`,event:(J,Y)=>`ev:${$(J)}:${String(Y).padStart(10,"0")}`,eventHead:(J)=>`ev:${$(J)}:head`,eventWatermark:(J)=>`ev:${$(J)}:watermark`,signal:(J,Y,Z)=>`sig:${$(J)}:${Y}:${$(Z)}`,signalSequence:(J)=>`sigseq:v1:${$(J)}`,signalAcceptedResponsePrefix:(J)=>`sigres:v1:${$(J)}:`,signalAcceptedResponse:(J,Y,Z)=>`sigres:v1:${$(J)}:${$(Y)}:${$(Z)}`,deadline:(J,Y)=>`wf-deadline:${_(J)}:${$(Y)}`,terminalCleanup:(J,Y)=>`wf-cleanup:${_(J)}:${$(Y)}`,delayedStart:(J,Y)=>`wf-delayed:${_(J)}:${$(Y)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(J,Y)=>`wf-terminal:${_(J)}:${$(Y)}`,attribute:(J)=>`attr:${$(J)}`,attributeIndex:(J,Y,Z)=>`idx:${J}:${Y}:${$(Z)}`,tagIndex:(J,Y)=>`tag:${$(J)}:${$(Y)}`,updatePrefix:(J)=>`upd:${$(J)}:`,update:(J,Y)=>`upd:${$(J)}:${Y}`,updateResponse:(J)=>`upr:${J}`,updateIdempotency:(J,Y)=>`upk:${$(J)}:${Y}`,budget:(J,Y,Z)=>`budget:${J}:${Y}:${Z}`,review:(J,Y)=>`review:${$(J)}:${Y}`,workflowHeaders:(J)=>`wf-headers:${$(J)}`,terminalCleanupNeeded:(J)=>`wf-cleanup-needed:${$(J)}`,workflowHasServices:(J)=>`wf-has-services:${$(J)}`,offload:(J,Y)=>`offload:${$(J)}:${Y}`,archive:(J,Y)=>`archive:${$(J)}:${Y}`,stateExecution:(J,Y)=>`state:execution:${$(J)}:${$(Y)}`,stateWorkflow:(J,Y)=>`state:workflow-scope:${R}:${$(J)}:${$(Y)}`,streamChunkPrefix:(J,Y)=>`blob:${$(J)}:${Y}:chunk:`,streamChunk:(J,Y,Z)=>`blob:${$(J)}:${Y}:chunk:${String(Z).padStart(10,"0")}`,streamMetadata:(J,Y)=>`blob:${$(J)}:${Y}:meta`,budgetCharged:(J)=>`budget-charged:${J}`,toolEffect:(J,Y,Z)=>`tool-effect:${$(J)}:${Y}:${Z}`,workflowVisibilityStatus:(J,Y)=>`wf-idx-status:${$(J)}:${$(Y)}`,workflowVisibilityType:(J,Y)=>`wf-idx-type:${$(J)}:${$(Y)}`,workflowVisibilityCreated:(J,Y)=>`wf-idx-created:${_(J)}:${$(Y)}`,workflowVisibilityUpdated:(J,Y)=>`wf-idx-updated:${_(J)}:${$(Y)}`,workflowVisibilityDeadline:(J,Y)=>`wf-idx-deadline:${_(J)}:${$(Y)}`,workflowVisibilityManifest:(J)=>`wf-idx-manifest:${$(J)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"};function w(J){if(J===void 0)return;if(typeof J!=="number"||!Number.isInteger(J)||J<0)throw Error("deleteRange limit must be a finite non-negative integer");return J===0?0:J}function j(J){let Y={},Z=!1;for(let X of["gt","gte","lt","lte"]){let F=J[X];if(F===void 0)continue;if(typeof F!=="string")throw Error("deleteRange bounds must be strings");Y[X]=F,Z=!0}if(!Z)throw Error("deleteRange requires at least one of gt/gte/lt/lte; use deletePrefix to delete a whole prefix");let G=w(J.limit);if(G!==void 0)Y.limit=G;return Y}async function b(J,Y,Z){let G=j(Z);if(J.deleteRange)return J.deleteRange(Y,G);return H(J,Y,G)}function c(J,Y){let Z={key:J,open:!1};if(Y.gte!==void 0&&Y.gte>Z.key)Z.key=Y.gte,Z.open=!1;if(Y.gt!==void 0&&Y.gt>=Z.key)Z.key=Y.gt,Z.open=!0;return Z}function y(J,Y){let Z={key:O(J),open:!0};if(Y.lt!==void 0&&Y.lt<=Z.key)Z.key=Y.lt,Z.open=!0;if(Y.lte!==void 0&&Y.lte<Z.key)Z.key=Y.lte,Z.open=!1;return Z}function HJ(J,Y){let Z=c(J,Y),G=y(J,Y);if(Z.key>G.key||Z.key===G.key&&(Z.open||G.open))return null;return{lower:Z,upper:G}}function B(J){return J.replaceAll(/:+$/g,"")}function g(J,Y){let Z=B(J),G=B(Y);if(Z.length===0)return G;if(G.length===0)return Z;return`${Z}:${G}`}class A{#Y;#Z;constructor(J,Y){this.#Y=J,this.#Z=B(Y)}#J(J){if(this.#Z.length===0)return J;return J.length===0?`${this.#Z}:`:`${this.#Z}:${J}`}#$(J){if(this.#Z.length===0)return J;return J.slice(this.#Z.length+1)}#G(J={}){let Y={};if(J.limit!==void 0)Y.limit=J.limit;if(J.reverse!==void 0)Y.reverse=J.reverse;if(J.gt!==void 0)Y.gt=this.#J(J.gt);if(J.gte!==void 0)Y.gte=this.#J(J.gte);if(J.lt!==void 0)Y.lt=this.#J(J.lt);if(J.lte!==void 0)Y.lte=this.#J(J.lte);return Y}#_(J){let Y={};if(J.limit!==void 0)Y.limit=J.limit;if(J.gt!==void 0)Y.gt=this.#J(J.gt);if(J.gte!==void 0)Y.gte=this.#J(J.gte);if(J.lt!==void 0)Y.lt=this.#J(J.lt);if(J.lte!==void 0)Y.lte=this.#J(J.lte);return Y}capabilities(){return this.#Y.capabilities()}scoped(J){return new A(this.#Y,g(this.#Z,J))}async get(J){return this.#Y.get(this.#J(J))}async put(J,Y){await this.#Y.put(this.#J(J),Y)}async delete(J){await this.#Y.delete(this.#J(J))}async*scan(J,Y){for await(let[Z,G]of this.#Y.scan(this.#J(J),this.#G(Y)))yield[this.#$(Z),G]}async batch(J){await this.#Y.batch(J.map((Y)=>{if(Y.type==="put")return{type:"put",key:this.#J(Y.key),value:Y.value};return{type:"delete",key:this.#J(Y.key)}}))}async conditionalBatch(J,Y){return K(this.#Y,J.map((Z)=>({key:this.#J(Z.key),expectedValue:Z.expectedValue})),Y.map((Z)=>{if(Z.type==="put")return{type:"put",key:this.#J(Z.key),value:Z.value};return{type:"delete",key:this.#J(Z.key)}}))}async has(J){return P(this.#Y,this.#J(J))}async deletePrefix(J){return C(this.#Y,this.#J(J))}async deleteRange(J,Y){let Z=this.#_(j(Y));return b(this.#Y,this.#J(J),Z)}async*keys(J,Y){for await(let Z of h(this.#Y,this.#J(J),this.#G(Y)))yield this.#$(Z)}async count(J){return v(this.#Y,this.#J(J))}[Symbol.dispose](){this.#Y[Symbol.dispose]()}}function S(J,Y){return new A(J,Y)}var f=67108864;function I(J){if(J.type==="put")return{type:"put",key:J.key,value:U(J.value)};return{type:"delete",key:J.key}}function l(J){return{key:J.key,expectedValue:J.expectedValue===null?null:U(J.expectedValue)}}function d(J){if(!N(J)||typeof J.key!=="string"||typeof J.value!=="string")throw Error("HTTPStorage scan response contained an invalid NDJSON entry.");return{key:J.key,value:J.value}}function p(J){if(!N(J)||typeof J.applied!=="boolean")throw Error('HTTPStorage conditional batch response must include a boolean "applied" field.');return J.applied}function W(J,Y,Z){if(Z!==void 0)J.searchParams.set(Y,String(Z))}function s(J){if(J.trim().length===0)return null;let Y=d(JSON.parse(J));return[Y.key,T(Y.value)]}function a(J){if(J>f)throw Error("HTTPStorage scan response exceeded the maximum allowed size.")}async function*i(J){if(J.body===null)return;let Y=J.body.getReader(),Z=new TextDecoder,G="",X=0,F=!1;try{while(!0){let{done:L,value:D}=await Y.read();if(L){F=!0;break}X+=D.byteLength,a(X),G+=Z.decode(D,{stream:!0});let z=G.split(`
2
- `);G=z.pop()??"";for(let x of z)yield x}if(G+=Z.decode(),G.length>0)yield G}finally{try{if(!F)await Y.cancel()}catch{}Y.releaseLock()}}class r{#Y;#Z;#J;constructor(J){this.#Y=J.baseUrl instanceof URL?J.baseUrl:new URL(J.baseUrl),this.#Z={...J.headers},this.#J=J.remoteConditionalBatch??!1}capabilities(){return{persistence:"remote",readAfterWrite:"eventual",scanConsistency:"best-effort",atomicBatch:!0,conditionalBatch:this.#J,boundedRangeDelete:!1}}#$(J){let Y=this.#Y.href.endsWith("/")?this.#Y.href:`${this.#Y.href}/`;return new URL(J.replace(/^\/+/,""),Y)}#G(J){return this.#$(`/v1/storage/${encodeURIComponent(J)}`)}#_(J,Y){let Z=this.#$("/v1/storage");return Z.searchParams.set("prefix",J),W(Z,"limit",Y.limit),W(Z,"reverse",Y.reverse),W(Z,"gt",Y.gt),W(Z,"gte",Y.gte),W(Z,"lt",Y.lt),W(Z,"lte",Y.lte),Z}async#X(J,Y={},Z=[]){let G=new Headers(this.#Z);for(let[F,L]of new Headers(Y.headers).entries())G.set(F,L);let X=await fetch(J,{...Y,headers:G});if(!X.ok&&!Z.includes(X.status))throw Error(`HTTPStorage request failed: ${Y.method??"GET"} ${J.pathname} returned ${String(X.status)}.`);return X}async get(J){let Y=await this.#X(this.#G(J),{method:"GET"},[404]);if(Y.status===404)return null;return new Uint8Array(await Y.arrayBuffer())}async put(J,Y){await this.#X(this.#G(J),{method:"PUT",headers:{"content-type":"application/octet-stream"},body:new Blob([Y])})}async delete(J){await this.#X(this.#G(J),{method:"DELETE"})}async*scan(J,Y={}){let Z=await this.#X(this.#_(J,Y),{method:"GET",headers:{accept:"application/x-ndjson"}});for await(let G of i(Z)){let X=s(G);if(X!==null)yield X}}async batch(J){await this.#X(this.#$("/v1/storage/-/batch"),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({operations:J.map(I)})})}async conditionalBatch(J,Y){let Z=await this.#X(this.#$("/v1/storage/-/conditional-batch"),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({conditions:J.map(l),operations:Y.map(I)})});return p(await Z.json())}has(J){return M(this,J)}async*keys(J,Y){yield*Q(this,J,Y)}count(J){return V(this,J)}deletePrefix(J){return E(this,J)}deleteRange(J,Y){return H(this,J,j(Y))}scoped(J){return S(this,J)}[Symbol.dispose](){}}export{r as HTTPStorage};
1
+ var u=Object.defineProperty;var k=(F)=>F;function w(F,G){this[F]=k.bind(null,G)}var JF=(F,G)=>{for(var J in G)u(F,J,{get:G[J],enumerable:!0,configurable:!0,set:w.bind(G,J)})};function N(F){let G=[];for(let J=0;J<F.length;J+=512)G.push(String.fromCharCode(...F.subarray(J,J+512)));return btoa(G.join(""))}function R(F){let G=atob(F),J=new Uint8Array(G.length);for(let Y=0;Y<G.length;Y+=1)J[Y]=G.charCodeAt(Y);return J}function D(F){return typeof F==="object"&&F!==null&&!Array.isArray(F)}async function j(F,G){return await F.get(G)!==null}async function*X(F,G,J){for await(let[Y]of F.scan(G,J))yield Y}async function W(F,G){let J=0;for await(let Y of X(F,G))J++;return J}async function H(F,G){let J=[];for await(let Y of X(F,G))J.push({type:"delete",key:Y});if(J.length===0)return 0;return await F.batch(J),J.length}async function L(F,G,J){let Y=[];for await(let Z of X(F,G,J))Y.push({type:"delete",key:Z});if(Y.length===0)return 0;return await F.batch(Y),Y.length}function q(F,G,J){if(!F.capabilities()[G])throw Error(`Feature "${J}" requires storage capability "${G}", but this storage backend does not provide it.`)}var S="default";var T=1e4,jF=1e4;class K extends Error{code="StorageBatchOperationLimitExceededError";cap=T;count;target;constructor(F,G){super(`${F} count ${G} exceeds MAX_BATCH_OPERATIONS (${T}).`);this.name="StorageBatchOperationLimitExceededError",this.target=F,this.count=G}}function $(F,G){if(G>T)throw new K(F,G)}function O(F){return F.length>0?F.slice(0,-1)+String.fromCharCode(F.charCodeAt(F.length-1)+1):"ÿ"}function WF(F,G={}){if(G.gt!==void 0&&F<=G.gt)return!1;if(G.gte!==void 0&&F<G.gte)return!1;if(G.lt!==void 0&&F>=G.lt)return!1;if(G.lte!==void 0&&F>G.lte)return!1;return!0}function HF(F,G){if(F===null||G===null)return F===G;if(F.byteLength!==G.byteLength)return!1;for(let J=0;J<F.byteLength;J++)if(F[J]!==G[J])return!1;return!0}async function h(F,G){if(F.has)return F.has(G);return j(F,G)}function b(F,G,J){if(F.keys)return F.keys(G,J);return X(F,G,J)}async function v(F,G){if(F.count)return F.count(G);return W(F,G)}async function m(F,G){if(F.deletePrefix)return F.deletePrefix(G);return H(F,G)}async function LF(F,G){$("batch operations",G.length),await F.batch(G)}async function x(F,G,J){if($("conditionalBatch conditions",G.length),$("conditionalBatch operations",J.length),q(F,"conditionalBatch","storageConditionalBatch"),!F.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return F.conditionalBatch(G,J)}function Q(F){return encodeURIComponent(F)}function UF(F){return decodeURIComponent(F)}function NF(F){try{return decodeURIComponent(F)}catch{return null}}var _=(F)=>String(F).padStart(16,"0"),f="0",l="1",P=(F,G,J,Y)=>`sig:${Q(F)}:${Q(G)}:${Y}:${Q(J)}`,DF={workflow:(F)=>`wf:${Q(F)}`,checkpoint:(F)=>`wf:${Q(F)}:ckpt`,checkpointHistory:(F,G)=>`wf:${Q(F)}:ckpt:${String(G).padStart(10,"0")}`,timelinePrefix:(F)=>`wf:${Q(F)}:timeline:`,timeline:(F,G)=>`wf:${Q(F)}:timeline:${String(G).padStart(10,"0")}`,schedule:(F)=>`schedule:${Q(F)}`,scheduleTick:(F,G)=>`schedule-due:${String(F).padStart(16,"0")}:${Q(G)}`,scheduleRun:(F)=>`schedule-run:${Q(F)}`,operation:(F,G,J)=>`op:${F}:${_(G)}:${J}`,operationInflight:(F)=>`op:inflight:${F}`,operationQueued:(F)=>`op:queued:${F}`,operationResolved:(F)=>`op:resolved:${F}`,operationDeadLetterPrefix:()=>"op:dead-letter:",operationDeadLetter:(F)=>`op:dead-letter:${F}`,bulkOperationAuditPrefix:()=>"audit:bulk:",bulkOperationAudit:(F,G,J)=>`audit:bulk:${_(F)}:${Q(G)}:${Q(J)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(F,G)=>`op:resolved-by-time:${_(F)}:${Q(G)}`,asyncActivity:(F,G)=>`async-act:v1:${Q(F)}:${Q(G)}`,activityReconciliationPrefix:(F)=>`actrec:v1:${Q(F)}:`,activityReconciliation:(F,G,J)=>`actrec:v1:${Q(F)}:${Q(G)}:${J}`,eventPrefix:(F)=>`ev:${Q(F)}:`,event:(F,G)=>`ev:${Q(F)}:${String(G).padStart(10,"0")}`,eventHead:(F)=>`ev:${Q(F)}:head`,eventWatermark:(F)=>`ev:${Q(F)}:watermark`,fleetEventPrefix:()=>"fleet-event:",fleetEvent:(F)=>`fleet-event:${String(F).padStart(10,"0")}`,fleetEventTail:()=>"fleet-event-tail",fleetEventByWorkflowPrefix:(F)=>`fleet-event-by-workflow:${Q(F)}:`,fleetEventByWorkflow:(F,G)=>`fleet-event-by-workflow:${Q(F)}:${String(G).padStart(10,"0")}`,signal:(F,G,J)=>P(F,G,J,l),startSignal:(F,G,J)=>P(F,G,J,f),signalSequence:(F)=>`sigseq:v1:${Q(F)}`,signalAcceptedResponsePrefix:(F)=>`sigres:v1:${Q(F)}:`,signalAcceptedResponse:(F,G,J)=>`sigres:v1:${Q(F)}:${Q(G)}:${Q(J)}`,deadline:(F,G)=>`wf-deadline:${_(F)}:${Q(G)}`,terminalCleanup:(F,G)=>`wf-cleanup:${_(F)}:${Q(G)}`,teardownTimer:(F,G)=>`wf-teardown:${_(F)}:${Q(G)}`,delayedStart:(F,G)=>`wf-delayed:${_(F)}:${Q(G)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(F,G)=>`wf-terminal:${_(F)}:${Q(G)}`,attribute:(F)=>`attr:${Q(F)}`,attributeIndex:(F,G,J)=>`idx:${F}:${G}:${Q(J)}`,tagIndex:(F,G)=>`tag:${Q(F)}:${Q(G)}`,updatePrefix:(F)=>`upd:${Q(F)}:`,update:(F,G)=>`upd:${Q(F)}:${G}`,updateResponse:(F)=>`upr:${F}`,updateIdempotency:(F,G)=>`upk:${Q(F)}:${G}`,startIdempotency:(F)=>`start-idem:${Q(F)}`,startIdempotencySignalId:(F)=>`start-idem:${F}`,livenessPrefix:()=>"liveness:",liveness:(F)=>`liveness:${Q(F)}`,leasePrefix:()=>"lease:",leaseEpoch:()=>"lease:epoch",leaseHolder:()=>"lease:holder",budget:(F,G,J)=>`budget:${F}:${G}:${J}`,review:(F,G)=>`review:${Q(F)}:${G}`,workflowHeaders:(F)=>`wf-headers:${Q(F)}`,childCancellationPrefix:(F)=>`child-cancel:${Q(F)}:`,childCancellation:(F,G)=>`child-cancel:${Q(F)}:${Q(G)}`,terminalCleanupNeeded:(F)=>`wf-cleanup-needed:${Q(F)}`,workflowConcurrency:(F,G)=>`wf-concurrency:${Q(F)}:${Q(G)}`,workflowConcurrencyHolder:(F)=>`wf-concurrency-holder:${Q(F)}`,workflowHasServices:(F)=>`wf-has-services:${Q(F)}`,finalizerState:(F)=>`wf-finalizer-state:${Q(F)}`,teardownOwed:(F)=>`wf-teardown-needed:${Q(F)}`,teardownDeadLetter:(F)=>`wf-teardown-deadletter:${Q(F)}`,offload:(F,G)=>`offload:${Q(F)}:${G}`,archive:(F,G)=>`archive:${Q(F)}:${G}`,stateExecution:(F,G)=>`state:execution:${Q(F)}:${Q(G)}`,stateWorkflow:(F,G)=>`state:workflow-scope:${S}:${Q(F)}:${Q(G)}`,streamChunkPrefix:(F,G)=>`blob:${Q(F)}:${G}:chunk:`,streamChunk:(F,G,J)=>`blob:${Q(F)}:${G}:chunk:${String(J).padStart(10,"0")}`,streamTail:(F,G)=>`blob:${Q(F)}:${G}:tail`,streamMetadata:(F,G)=>`blob:${Q(F)}:${G}:meta`,budgetCharged:(F)=>`budget-charged:${F}`,toolEffect:(F,G,J)=>`tool-effect:${Q(F)}:${G}:${J}`,workflowVisibilityStatus:(F,G)=>`wf-idx-status:${Q(F)}:${Q(G)}`,workflowVisibilityType:(F,G)=>`wf-idx-type:${Q(F)}:${Q(G)}`,workflowVisibilityCreated:(F,G)=>`wf-idx-created:${_(F)}:${Q(G)}`,workflowVisibilityUpdated:(F,G)=>`wf-idx-updated:${_(F)}:${Q(G)}`,workflowVisibilityDeadline:(F,G)=>`wf-idx-deadline:${_(F)}:${Q(G)}`,workflowVisibilityManifest:(F)=>`wf-idx-manifest:${Q(F)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"};function d(F){if(F===void 0)return;if(typeof F!=="number"||!Number.isInteger(F)||F<0)throw Error("deleteRange limit must be a finite non-negative integer");return F===0?0:F}function V(F){let G={},J=!1;for(let Z of["gt","gte","lt","lte"]){let M=F[Z];if(M===void 0)continue;if(typeof M!=="string")throw Error("deleteRange bounds must be strings");G[Z]=M,J=!0}if(!J)throw Error("deleteRange requires at least one of gt/gte/lt/lte; use deletePrefix to delete a whole prefix");let Y=d(F.limit);if(Y!==void 0)G.limit=Y;return G}async function c(F,G,J){let Y=V(J);if(F.deleteRange)return F.deleteRange(G,Y);return L(F,G,Y)}function p(F,G){let J={key:F,open:!1};if(G.gte!==void 0&&G.gte>J.key)J.key=G.gte,J.open=!1;if(G.gt!==void 0&&G.gt>=J.key)J.key=G.gt,J.open=!0;return J}function a(F,G){let J={key:O(F),open:!0};if(G.lt!==void 0&&G.lt<=J.key)J.key=G.lt,J.open=!0;if(G.lte!==void 0&&G.lte<J.key)J.key=G.lte,J.open=!1;return J}function BF(F,G){let J=p(F,G),Y=a(F,G);if(J.key>Y.key||J.key===Y.key&&(J.open||Y.open))return null;return{lower:J,upper:Y}}function A(F){return F.replaceAll(/:+$/g,"")}function s(F,G){let J=A(F),Y=A(G);if(J.length===0)return Y;if(Y.length===0)return J;return`${J}:${Y}`}class z{#G;#J;constructor(F,G){this.#G=F,this.#J=A(G)}#F(F){if(this.#J.length===0)return F;return F.length===0?`${this.#J}:`:`${this.#J}:${F}`}#Q(F){if(this.#J.length===0)return F;return F.slice(this.#J.length+1)}#Y(F={}){let G={};if(F.limit!==void 0)G.limit=F.limit;if(F.reverse!==void 0)G.reverse=F.reverse;if(F.gt!==void 0)G.gt=this.#F(F.gt);if(F.gte!==void 0)G.gte=this.#F(F.gte);if(F.lt!==void 0)G.lt=this.#F(F.lt);if(F.lte!==void 0)G.lte=this.#F(F.lte);return G}#_(F){let G={};if(F.limit!==void 0)G.limit=F.limit;if(F.gt!==void 0)G.gt=this.#F(F.gt);if(F.gte!==void 0)G.gte=this.#F(F.gte);if(F.lt!==void 0)G.lt=this.#F(F.lt);if(F.lte!==void 0)G.lte=this.#F(F.lte);return G}capabilities(){return this.#G.capabilities()}scoped(F){return new z(this.#G,s(this.#J,F))}async get(F){return this.#G.get(this.#F(F))}async put(F,G){await this.#G.put(this.#F(F),G)}async delete(F){await this.#G.delete(this.#F(F))}async*scan(F,G){for await(let[J,Y]of this.#G.scan(this.#F(F),this.#Y(G)))yield[this.#Q(J),Y]}async batch(F){$("batch operations",F.length),await this.#G.batch(F.map((G)=>{if(G.type==="put")return{type:"put",key:this.#F(G.key),value:G.value};return{type:"delete",key:this.#F(G.key)}}))}async conditionalBatch(F,G){return x(this.#G,F.map((J)=>({key:this.#F(J.key),expectedValue:J.expectedValue})),G.map((J)=>{if(J.type==="put")return{type:"put",key:this.#F(J.key),value:J.value};return{type:"delete",key:this.#F(J.key)}}))}async has(F){return h(this.#G,this.#F(F))}async deletePrefix(F){return m(this.#G,this.#F(F))}async deleteRange(F,G){let J=this.#_(V(G));return c(this.#G,this.#F(F),J)}async*keys(F,G){for await(let J of b(this.#G,this.#F(F),this.#Y(G)))yield this.#Q(J)}async count(F){return v(this.#G,this.#F(F))}[Symbol.dispose](){this.#G[Symbol.dispose]()}}function I(F,G){return new z(F,G)}var n=67108864;function g(F){if(F.type==="put")return{type:"put",key:F.key,value:N(F.value)};return{type:"delete",key:F.key}}function r(F){return{key:F.key,expectedValue:F.expectedValue===null?null:N(F.expectedValue)}}function i(F){if(!D(F)||typeof F.key!=="string"||typeof F.value!=="string")throw Error("HTTPStorage scan response contained an invalid NDJSON entry.");return{key:F.key,value:F.value}}function t(F){if(!D(F)||typeof F.applied!=="boolean")throw Error('HTTPStorage conditional batch response must include a boolean "applied" field.');return F.applied}function E(F,G,J){if(J!==void 0)F.searchParams.set(G,String(J))}function o(F){if(F.trim().length===0)return null;let G=i(JSON.parse(F));return[G.key,R(G.value)]}function e(F){if(F>n)throw Error("HTTPStorage scan response exceeded the maximum allowed size.")}async function*FF(F){if(F.body===null)return;let G=F.body.getReader(),J=new TextDecoder,Y="",Z=0,M=!1;try{while(!0){let{done:U,value:B}=await G.read();if(U){M=!0;break}Z+=B.byteLength,e(Z),Y+=J.decode(B,{stream:!0});let C=Y.split(`
2
+ `);Y=C.pop()??"";for(let y of C)yield y}if(Y+=J.decode(),Y.length>0)yield Y}finally{try{if(!M)await G.cancel()}catch{}G.releaseLock()}}class GF{#G;#J;#F;constructor(F){this.#G=F.baseUrl instanceof URL?F.baseUrl:new URL(F.baseUrl),this.#J={...F.headers},this.#F=F.remoteConditionalBatch??!1}capabilities(){return{persistence:"remote",readAfterWrite:"eventual",scanConsistency:"best-effort",atomicBatch:!0,conditionalBatch:this.#F,boundedRangeDelete:!1}}#Q(F){let G=this.#G.href.endsWith("/")?this.#G.href:`${this.#G.href}/`;return new URL(F.replace(/^\/+/,""),G)}#Y(F){return this.#Q(`/v1/storage/${encodeURIComponent(F)}`)}#_(F,G){let J=this.#Q("/v1/storage");return J.searchParams.set("prefix",F),E(J,"limit",G.limit),E(J,"reverse",G.reverse),E(J,"gt",G.gt),E(J,"gte",G.gte),E(J,"lt",G.lt),E(J,"lte",G.lte),J}async#Z(F,G={},J=[]){let Y=new Headers(this.#J);for(let[M,U]of new Headers(G.headers).entries())Y.set(M,U);let Z=await fetch(F,{...G,headers:Y});if(!Z.ok&&!J.includes(Z.status))throw Error(`HTTPStorage request failed: ${G.method??"GET"} ${F.pathname} returned ${String(Z.status)}.`);return Z}async get(F){let G=await this.#Z(this.#Y(F),{method:"GET"},[404]);if(G.status===404)return null;return new Uint8Array(await G.arrayBuffer())}async put(F,G){await this.#Z(this.#Y(F),{method:"PUT",headers:{"content-type":"application/octet-stream"},body:new Blob([G])})}async delete(F){await this.#Z(this.#Y(F),{method:"DELETE"})}async*scan(F,G={}){let J=await this.#Z(this.#_(F,G),{method:"GET",headers:{accept:"application/x-ndjson"}});for await(let Y of FF(J)){let Z=o(Y);if(Z!==null)yield Z}}async batch(F){$("batch operations",F.length),await this.#Z(this.#Q("/v1/storage/-/batch"),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({operations:F.map(g)})})}async conditionalBatch(F,G){$("conditionalBatch conditions",F.length),$("conditionalBatch operations",G.length);let J=await this.#Z(this.#Q("/v1/storage/-/conditional-batch"),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({conditions:F.map(r),operations:G.map(g)})});return t(await J.json())}has(F){return j(this,F)}async*keys(F,G){yield*X(this,F,G)}count(F){return W(this,F)}deletePrefix(F){return H(this,F)}deleteRange(F,G){return L(this,F,V(G))}scoped(F){return I(this,F)}[Symbol.dispose](){}}export{GF as HTTPStorage};
@@ -13,6 +13,7 @@
13
13
  * import { SQLiteStorage } from '@lostgradient/weft/storage/sqlite'; // Bun or Node SQLite
14
14
  * import { LMDBStorage } from '@lostgradient/weft/storage/lmdb'; // peer: lmdb
15
15
  * import { TursoStorage } from '@lostgradient/weft/storage/turso'; // peer: @libsql/client
16
+ * import { NeonStorage } from '@lostgradient/weft/storage/neon'; // peer: @neondatabase/serverless
16
17
  * import { IndexedDBStorage } from '@lostgradient/weft/storage/indexeddb'; // browser-only
17
18
  * import { WebExtensionStorage } from '@lostgradient/weft/storage/web-extension'; // extension-only
18
19
  * import { HTTPStorage } from '@lostgradient/weft/storage/http'; // remote storage
@@ -21,7 +22,7 @@
21
22
  * @module @lostgradient/weft/storage
22
23
  */
23
24
  import { storageDeleteRange } from './delete-range';
24
- import { assertDurableStorageForRecovery, requireStorageCapability, storageConditionalBatch, storageValuesEqual } from './interface';
25
+ import { assertDurableStorageForRecovery, assertStorageBatchOperationCount, requireStorageCapability, storageBatch, StorageBatchOperationLimitExceededError, storageConditionalBatch, storageValuesEqual } from './interface';
25
26
  import { MemoryStorage } from './memory';
26
27
  import { resolveStorage } from './resolve';
27
28
  import { ScopedStorage, scopedStorage } from './scoped-storage';
@@ -92,6 +93,8 @@ declare const exportedKeys: {
92
93
  readonly operationInflight: (id: string) => string;
93
94
  readonly operationQueued: (id: string) => string;
94
95
  readonly operationResolved: (id: string) => string;
96
+ readonly operationDeadLetterPrefix: () => string;
97
+ readonly operationDeadLetter: (id: string) => string;
95
98
  readonly bulkOperationAuditPrefix: () => string;
96
99
  readonly bulkOperationAudit: (timestamp: number, requestId: string, confirmationToken: string) => string;
97
100
  readonly operationResolvedByTimePrefix: () => string;
@@ -103,12 +106,19 @@ declare const exportedKeys: {
103
106
  readonly event: (workflowId: string, sequence: number) => string;
104
107
  readonly eventHead: (workflowId: string) => string;
105
108
  readonly eventWatermark: (workflowId: string) => string;
109
+ readonly fleetEventPrefix: () => string;
110
+ readonly fleetEvent: (sequence: number) => string;
111
+ readonly fleetEventTail: () => string;
112
+ readonly fleetEventByWorkflowPrefix: (workflowId: string) => string;
113
+ readonly fleetEventByWorkflow: (workflowId: string, sequence: number) => string;
106
114
  readonly signal: (workflowId: string, name: string, id: string) => string;
115
+ readonly startSignal: (workflowId: string, name: string, id: string) => string;
107
116
  readonly signalSequence: (workflowId: string) => string;
108
117
  readonly signalAcceptedResponsePrefix: (workflowId: string) => string;
109
118
  readonly signalAcceptedResponse: (workflowId: string, name: string, signalId: string) => string;
110
119
  readonly deadline: (deadline: number, workflowId: string) => string;
111
120
  readonly terminalCleanup: (fireAt: number, timerId: string) => string;
121
+ readonly teardownTimer: (fireAt: number, timerId: string) => string;
112
122
  readonly delayedStart: (startAt: number, workflowId: string) => string;
113
123
  readonly terminalWorkflowPrefix: () => string;
114
124
  readonly terminalWorkflow: (updatedAt: number, workflowId: string) => string;
@@ -119,17 +129,32 @@ declare const exportedKeys: {
119
129
  readonly update: (workflowId: string, updateId: string) => string;
120
130
  readonly updateResponse: (updateId: string) => string;
121
131
  readonly updateIdempotency: (workflowId: string, key: string) => string;
132
+ readonly startIdempotency: (key: string) => string;
133
+ readonly startIdempotencySignalId: (key: string) => string;
134
+ readonly livenessPrefix: () => string;
135
+ readonly liveness: (instanceId: string) => string;
136
+ readonly leasePrefix: () => string;
137
+ readonly leaseEpoch: () => string;
138
+ readonly leaseHolder: () => string;
122
139
  readonly budget: (namespace: string, period: string, date: string) => string;
123
140
  readonly review: (workflowId: string, reviewId: string) => string;
124
141
  readonly workflowHeaders: (workflowId: string) => string;
142
+ readonly childCancellationPrefix: (workflowId: string) => string;
143
+ readonly childCancellation: (workflowId: string, childWorkflowId: string) => string;
125
144
  readonly terminalCleanupNeeded: (workflowId: string) => string;
145
+ readonly workflowConcurrency: (workflowType: string, partitionKey: string) => string;
146
+ readonly workflowConcurrencyHolder: (workflowId: string) => string;
126
147
  readonly workflowHasServices: (workflowId: string) => string;
148
+ readonly finalizerState: (workflowId: string) => string;
149
+ readonly teardownOwed: (workflowId: string) => string;
150
+ readonly teardownDeadLetter: (workflowId: string) => string;
127
151
  readonly offload: (workflowId: string, key: string) => string;
128
152
  readonly archive: (workflowId: string, key: string) => string;
129
153
  readonly stateExecution: (ownerWorkflowId: string, key: string) => string;
130
154
  readonly stateWorkflow: (workflowType: string, key: string) => string;
131
155
  readonly streamChunkPrefix: (workflowId: string, key: string) => string;
132
156
  readonly streamChunk: (workflowId: string, key: string, chunkIndex: number) => string;
157
+ readonly streamTail: (workflowId: string, key: string) => string;
133
158
  readonly streamMetadata: (workflowId: string, key: string) => string;
134
159
  readonly budgetCharged: (operationId: string) => string;
135
160
  readonly toolEffect: (workflowId: string, agentId: string, semanticHash: string) => string;
@@ -143,6 +168,26 @@ declare const exportedKeys: {
143
168
  readonly workflowVisibilityMetaBuiltAt: () => string;
144
169
  readonly workflowVisibilityMetaCursor: () => string;
145
170
  };
171
+ /**
172
+ * Re-exported {@link MAX_BATCH_OPERATIONS}. See the original declaration for full docs.
173
+ *
174
+ * @example
175
+ * ```ts
176
+ * import { MAX_BATCH_OPERATIONS } from '@lostgradient/weft/storage';
177
+ * console.log(MAX_BATCH_OPERATIONS);
178
+ * ```
179
+ */
180
+ declare const exportedMaxBatchOperations = 10000;
181
+ /**
182
+ * Re-exported {@link MAX_SCAN_LIMIT}. See the original declaration for full docs.
183
+ *
184
+ * @example
185
+ * ```ts
186
+ * import { MAX_SCAN_LIMIT } from '@lostgradient/weft/storage';
187
+ * console.log(MAX_SCAN_LIMIT);
188
+ * ```
189
+ */
190
+ declare const exportedMaxScanLimit = 10000;
146
191
  /**
147
192
  * Re-exported {@link MemoryStorage}. See the original declaration for full docs.
148
193
  *
@@ -200,6 +245,27 @@ declare const exportedScopedStorage: typeof ScopedStorage;
200
245
  * ```
201
246
  */
202
247
  declare const exportedScopedStorageFactory: typeof scopedStorage;
248
+ /**
249
+ * Re-exported {@link assertStorageBatchOperationCount}. See the original declaration for full docs.
250
+ *
251
+ * @example
252
+ * ```ts
253
+ * import { assertStorageBatchOperationCount } from '@lostgradient/weft/storage';
254
+ * assertStorageBatchOperationCount('batch operations', 1);
255
+ * ```
256
+ */
257
+ declare const exportedAssertStorageBatchOperationCount: typeof assertStorageBatchOperationCount;
258
+ /**
259
+ * Re-exported {@link storageBatch}. See the original declaration for full docs.
260
+ *
261
+ * @example
262
+ * ```ts
263
+ * import { MemoryStorage, storageBatch } from '@lostgradient/weft/storage';
264
+ * await using storage = new MemoryStorage();
265
+ * await storageBatch(storage, []);
266
+ * ```
267
+ */
268
+ declare const exportedStorageBatch: typeof storageBatch;
203
269
  /**
204
270
  * Re-exported {@link storageConditionalBatch}. See the original declaration for full docs.
205
271
  *
@@ -246,6 +312,17 @@ declare const exportedRequireStorageCapability: typeof requireStorageCapability;
246
312
  * ```
247
313
  */
248
314
  declare const exportedStorageValuesEqual: typeof storageValuesEqual;
315
+ /**
316
+ * Re-exported {@link StorageBatchOperationLimitExceededError}. See the original declaration for full docs.
317
+ *
318
+ * @example
319
+ * ```ts
320
+ * import { StorageBatchOperationLimitExceededError } from '@lostgradient/weft/storage';
321
+ * const error = new StorageBatchOperationLimitExceededError('batch operations', 10001);
322
+ * console.log(error.count);
323
+ * ```
324
+ */
325
+ declare const exportedStorageBatchOperationLimitExceededError: typeof StorageBatchOperationLimitExceededError;
249
326
  /**
250
327
  * Re-exported {@link textValueStore}. See the original declaration for full docs.
251
328
  *
@@ -270,7 +347,7 @@ declare const exportedTextValueStore: typeof textValueStore;
270
347
  * void isWeftKey;
271
348
  * ```
272
349
  */
273
- declare const exportedWeftReservedKeyPrefixes: readonly ["actrec:", "archive:", "async-act:", "attr:", "audit:bulk:", "blob:", "budget:", "budget-charged:", "ev:", "idx:", "offload:", "op:", "review:", "schedule:", "schedule-due:", "schedule-run:", "sig:", "sigres:", "sigseq:", "state:", "tag:", "tool-effect:", "upd:", "upk:", "upr:", "wf:", "wf-cleanup:", "wf-cleanup-needed:", "wf-deadline:", "wf-delayed:", "wf-has-services:", "wf-headers:", "wf-idx-", "wf-terminal:"];
350
+ declare const exportedWeftReservedKeyPrefixes: readonly ["actrec:", "archive:", "async-act:", "attr:", "audit:bulk:", "blob:", "budget:", "budget-charged:", "ev:", "fleet-event-by-workflow:", "fleet-event:", "fleet-event-tail", "idx:", "lease:", "liveness:", "offload:", "op:", "review:", "schedule:", "schedule-due:", "schedule-run:", "sig:", "sigres:", "sigseq:", "start-idem:", "state:", "tag:", "tool-effect:", "upd:", "upk:", "upr:", "wf:", "wf-cleanup:", "wf-cleanup-needed:", "wf-concurrency:", "wf-concurrency-holder:", "wf-deadline:", "wf-delayed:", "wf-finalizer-state:", "wf-has-services:", "wf-headers:", "wf-idx-", "wf-teardown:", "wf-teardown-deadletter:", "wf-teardown-needed:", "wf-terminal:"];
274
351
  /**
275
352
  * Re-exported {@link withCodec}. See the original declaration for full docs.
276
353
  *
@@ -285,9 +362,9 @@ declare const exportedWeftReservedKeyPrefixes: readonly ["actrec:", "archive:",
285
362
  declare const exportedWithCodec: typeof withCodec;
286
363
  export type { JSONValue } from '../core/json.ts';
287
364
  export type { DeleteRangeOptions } from './delete-range';
288
- export type { BatchOperation, ConditionalBatchCondition, GatedStorageCapabilityKey, ScanOptions, Storage, StorageCapabilities, } from './interface';
365
+ export type { BatchOperation, ConditionalBatchCondition, GatedStorageCapabilityKey, ScanOptions, Storage, StorageBatchOperationLimitTarget, StorageCapabilities, } from './interface';
289
366
  export type { StorageConfiguration } from './resolve';
290
367
  export type { CopyTextKeyValueRowsToStorageOptions, CopyTextKeyValueRowsToStorageResult, TextKeyValueRow, } from './text-value-import';
291
368
  export type { TextValueStore, TextValueStoreBatchOperation, TextValueStoreCondition, TextValueStoreOptions, } from './text-value-store';
292
369
  export type { CodecStorageOptions, MessagePackValue, StorageCodec, StorageValueParser, TypedBatchOperation, TypedConditionalBatchCondition, TypedStorage, } from './typed-storage';
293
- export { exportedAssertDurableStorageForRecovery as assertDurableStorageForRecovery, exportedCopyTextKeyValueRowsToStorage as copyTextKeyValueRowsToStorage, exportedJsonCodec as jsonCodec, exportedKeys as KEYS, exportedMemoryStorage as MemoryStorage, exportedMsgpackCodec as msgpackCodec, exportedRequireStorageCapability as requireStorageCapability, exportedResolveStorage as resolveStorage, exportedScopedStorage as ScopedStorage, exportedScopedStorageFactory as scopedStorage, exportedStorageConditionalBatch as storageConditionalBatch, exportedStorageDeleteRange as storageDeleteRange, exportedStorageValuesEqual as storageValuesEqual, exportedTextValueStore as textValueStore, exportedWeftReservedKeyPrefixes as WEFT_RESERVED_KEY_PREFIXES, exportedWithCodec as withCodec, };
370
+ export { exportedAssertDurableStorageForRecovery as assertDurableStorageForRecovery, exportedAssertStorageBatchOperationCount as assertStorageBatchOperationCount, exportedCopyTextKeyValueRowsToStorage as copyTextKeyValueRowsToStorage, exportedJsonCodec as jsonCodec, exportedKeys as KEYS, exportedMaxBatchOperations as MAX_BATCH_OPERATIONS, exportedMaxScanLimit as MAX_SCAN_LIMIT, exportedMemoryStorage as MemoryStorage, exportedMsgpackCodec as msgpackCodec, exportedRequireStorageCapability as requireStorageCapability, exportedResolveStorage as resolveStorage, exportedScopedStorage as ScopedStorage, exportedScopedStorageFactory as scopedStorage, exportedStorageBatch as storageBatch, exportedStorageBatchOperationLimitExceededError as StorageBatchOperationLimitExceededError, exportedStorageConditionalBatch as storageConditionalBatch, exportedStorageDeleteRange as storageDeleteRange, exportedStorageValuesEqual as storageValuesEqual, exportedTextValueStore as textValueStore, exportedWeftReservedKeyPrefixes as WEFT_RESERVED_KEY_PREFIXES, exportedWithCodec as withCodec, };
@@ -1 +1 @@
1
- var l=Object.defineProperty;var d=(Y)=>Y;function p(Y,J){this[Y]=d.bind(null,J)}var t=(Y,J)=>{for(var U in J)l(Y,U,{get:J[U],enumerable:!0,configurable:!0,set:p.bind(J,U)})};async function E(Y,J){return await Y.get(J)!==null}async function*T(Y,J,U){for await(let[Z]of Y.scan(J,U))yield Z}async function v(Y,J){let U=0;for await(let Z of T(Y,J))U++;return U}async function K(Y,J){let U=[];for await(let Z of T(Y,J))U.push({type:"delete",key:Z});if(U.length===0)return 0;return await Y.batch(U),U.length}async function C(Y,J,U){let Z=[];for await(let $ of T(Y,J,U))Z.push({type:"delete",key:$});if(Z.length===0)return 0;return await Y.batch(Z),Z.length}function q(Y,J,U){if(!Y.capabilities()[J])throw Error(`Feature "${U}" requires storage capability "${J}", but this storage backend does not provide it.`)}var b="default";function N(Y){return Y.length>0?Y.slice(0,-1)+String.fromCharCode(Y.charCodeAt(Y.length-1)+1):"ÿ"}function O(Y,J={}){if(J.gt!==void 0&&Y<=J.gt)return!1;if(J.gte!==void 0&&Y<J.gte)return!1;if(J.lt!==void 0&&Y>=J.lt)return!1;if(J.lte!==void 0&&Y>J.lte)return!1;return!0}function I(Y,J){if(Y===null||J===null)return Y===J;if(Y.byteLength!==J.byteLength)return!1;for(let U=0;U<Y.byteLength;U++)if(Y[U]!==J[U])return!1;return!0}async function S(Y,J){if(Y.has)return Y.has(J);return E(Y,J)}function x(Y,J,U){if(Y.keys)return Y.keys(J,U);return T(Y,J,U)}async function k(Y,J){if(Y.count)return Y.count(J);return v(Y,J)}async function w(Y,J){if(Y.deletePrefix)return Y.deletePrefix(J);return K(Y,J)}async function u(Y,J,U){if(q(Y,"conditionalBatch","storageConditionalBatch"),!Y.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return Y.conditionalBatch(J,U)}function X(Y){return encodeURIComponent(Y)}function GY(Y){try{return decodeURIComponent(Y)}catch{return null}}var _=(Y)=>String(Y).padStart(16,"0"),FY={workflow:(Y)=>`wf:${X(Y)}`,checkpoint:(Y)=>`wf:${X(Y)}:ckpt`,checkpointHistory:(Y,J)=>`wf:${X(Y)}:ckpt:${String(J).padStart(10,"0")}`,timelinePrefix:(Y)=>`wf:${X(Y)}:timeline:`,timeline:(Y,J)=>`wf:${X(Y)}:timeline:${String(J).padStart(10,"0")}`,schedule:(Y)=>`schedule:${X(Y)}`,scheduleTick:(Y,J)=>`schedule-due:${String(Y).padStart(16,"0")}:${X(J)}`,scheduleRun:(Y)=>`schedule-run:${X(Y)}`,operation:(Y,J,U)=>`op:${Y}:${_(J)}:${U}`,operationInflight:(Y)=>`op:inflight:${Y}`,operationQueued:(Y)=>`op:queued:${Y}`,operationResolved:(Y)=>`op:resolved:${Y}`,bulkOperationAuditPrefix:()=>"audit:bulk:",bulkOperationAudit:(Y,J,U)=>`audit:bulk:${_(Y)}:${X(J)}:${X(U)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(Y,J)=>`op:resolved-by-time:${_(Y)}:${X(J)}`,asyncActivity:(Y,J)=>`async-act:v1:${X(Y)}:${X(J)}`,activityReconciliationPrefix:(Y)=>`actrec:v1:${X(Y)}:`,activityReconciliation:(Y,J,U)=>`actrec:v1:${X(Y)}:${X(J)}:${U}`,eventPrefix:(Y)=>`ev:${X(Y)}:`,event:(Y,J)=>`ev:${X(Y)}:${String(J).padStart(10,"0")}`,eventHead:(Y)=>`ev:${X(Y)}:head`,eventWatermark:(Y)=>`ev:${X(Y)}:watermark`,signal:(Y,J,U)=>`sig:${X(Y)}:${J}:${X(U)}`,signalSequence:(Y)=>`sigseq:v1:${X(Y)}`,signalAcceptedResponsePrefix:(Y)=>`sigres:v1:${X(Y)}:`,signalAcceptedResponse:(Y,J,U)=>`sigres:v1:${X(Y)}:${X(J)}:${X(U)}`,deadline:(Y,J)=>`wf-deadline:${_(Y)}:${X(J)}`,terminalCleanup:(Y,J)=>`wf-cleanup:${_(Y)}:${X(J)}`,delayedStart:(Y,J)=>`wf-delayed:${_(Y)}:${X(J)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(Y,J)=>`wf-terminal:${_(Y)}:${X(J)}`,attribute:(Y)=>`attr:${X(Y)}`,attributeIndex:(Y,J,U)=>`idx:${Y}:${J}:${X(U)}`,tagIndex:(Y,J)=>`tag:${X(Y)}:${X(J)}`,updatePrefix:(Y)=>`upd:${X(Y)}:`,update:(Y,J)=>`upd:${X(Y)}:${J}`,updateResponse:(Y)=>`upr:${Y}`,updateIdempotency:(Y,J)=>`upk:${X(Y)}:${J}`,budget:(Y,J,U)=>`budget:${Y}:${J}:${U}`,review:(Y,J)=>`review:${X(Y)}:${J}`,workflowHeaders:(Y)=>`wf-headers:${X(Y)}`,terminalCleanupNeeded:(Y)=>`wf-cleanup-needed:${X(Y)}`,workflowHasServices:(Y)=>`wf-has-services:${X(Y)}`,offload:(Y,J)=>`offload:${X(Y)}:${J}`,archive:(Y,J)=>`archive:${X(Y)}:${J}`,stateExecution:(Y,J)=>`state:execution:${X(Y)}:${X(J)}`,stateWorkflow:(Y,J)=>`state:workflow-scope:${b}:${X(Y)}:${X(J)}`,streamChunkPrefix:(Y,J)=>`blob:${X(Y)}:${J}:chunk:`,streamChunk:(Y,J,U)=>`blob:${X(Y)}:${J}:chunk:${String(U).padStart(10,"0")}`,streamMetadata:(Y,J)=>`blob:${X(Y)}:${J}:meta`,budgetCharged:(Y)=>`budget-charged:${Y}`,toolEffect:(Y,J,U)=>`tool-effect:${X(Y)}:${J}:${U}`,workflowVisibilityStatus:(Y,J)=>`wf-idx-status:${X(Y)}:${X(J)}`,workflowVisibilityType:(Y,J)=>`wf-idx-type:${X(Y)}:${X(J)}`,workflowVisibilityCreated:(Y,J)=>`wf-idx-created:${_(Y)}:${X(J)}`,workflowVisibilityUpdated:(Y,J)=>`wf-idx-updated:${_(Y)}:${X(J)}`,workflowVisibilityDeadline:(Y,J)=>`wf-idx-deadline:${_(Y)}:${X(J)}`,workflowVisibilityManifest:(Y)=>`wf-idx-manifest:${X(Y)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"};function s(Y){if(Y===void 0)return;if(typeof Y!=="number"||!Number.isInteger(Y)||Y<0)throw Error("deleteRange limit must be a finite non-negative integer");return Y===0?0:Y}function P(Y){let J={},U=!1;for(let $ of["gt","gte","lt","lte"]){let F=Y[$];if(F===void 0)continue;if(typeof F!=="string")throw Error("deleteRange bounds must be strings");J[$]=F,U=!0}if(!U)throw Error("deleteRange requires at least one of gt/gte/lt/lte; use deletePrefix to delete a whole prefix");let Z=s(Y.limit);if(Z!==void 0)J.limit=Z;return J}async function y(Y,J,U){let Z=P(U);if(Y.deleteRange)return Y.deleteRange(J,Z);return C(Y,J,Z)}function a(Y,J){let U={key:Y,open:!1};if(J.gte!==void 0&&J.gte>U.key)U.key=J.gte,U.open=!1;if(J.gt!==void 0&&J.gt>=U.key)U.key=J.gt,U.open=!0;return U}function i(Y,J){let U={key:N(Y),open:!0};if(J.lt!==void 0&&J.lt<=U.key)U.key=J.lt,U.open=!0;if(J.lte!==void 0&&J.lte<U.key)U.key=J.lte,U.open=!1;return U}function m(Y,J){let U=a(Y,J),Z=i(Y,J);if(U.key>Z.key||U.key===Z.key&&(U.open||Z.open))return null;return{lower:U,upper:Z}}function R(Y){return Y.replaceAll(/:+$/g,"")}function n(Y,J){let U=R(Y),Z=R(J);if(U.length===0)return Z;if(Z.length===0)return U;return`${U}:${Z}`}class h{#J;#U;constructor(Y,J){this.#J=Y,this.#U=R(J)}#Y(Y){if(this.#U.length===0)return Y;return Y.length===0?`${this.#U}:`:`${this.#U}:${Y}`}#X(Y){if(this.#U.length===0)return Y;return Y.slice(this.#U.length+1)}#Z(Y={}){let J={};if(Y.limit!==void 0)J.limit=Y.limit;if(Y.reverse!==void 0)J.reverse=Y.reverse;if(Y.gt!==void 0)J.gt=this.#Y(Y.gt);if(Y.gte!==void 0)J.gte=this.#Y(Y.gte);if(Y.lt!==void 0)J.lt=this.#Y(Y.lt);if(Y.lte!==void 0)J.lte=this.#Y(Y.lte);return J}#$(Y){let J={};if(Y.limit!==void 0)J.limit=Y.limit;if(Y.gt!==void 0)J.gt=this.#Y(Y.gt);if(Y.gte!==void 0)J.gte=this.#Y(Y.gte);if(Y.lt!==void 0)J.lt=this.#Y(Y.lt);if(Y.lte!==void 0)J.lte=this.#Y(Y.lte);return J}capabilities(){return this.#J.capabilities()}scoped(Y){return new h(this.#J,n(this.#U,Y))}async get(Y){return this.#J.get(this.#Y(Y))}async put(Y,J){await this.#J.put(this.#Y(Y),J)}async delete(Y){await this.#J.delete(this.#Y(Y))}async*scan(Y,J){for await(let[U,Z]of this.#J.scan(this.#Y(Y),this.#Z(J)))yield[this.#X(U),Z]}async batch(Y){await this.#J.batch(Y.map((J)=>{if(J.type==="put")return{type:"put",key:this.#Y(J.key),value:J.value};return{type:"delete",key:this.#Y(J.key)}}))}async conditionalBatch(Y,J){return u(this.#J,Y.map((U)=>({key:this.#Y(U.key),expectedValue:U.expectedValue})),J.map((U)=>{if(U.type==="put")return{type:"put",key:this.#Y(U.key),value:U.value};return{type:"delete",key:this.#Y(U.key)}}))}async has(Y){return S(this.#J,this.#Y(Y))}async deletePrefix(Y){return w(this.#J,this.#Y(Y))}async deleteRange(Y,J){let U=this.#$(P(J));return y(this.#J,this.#Y(Y),U)}async*keys(Y,J){for await(let U of x(this.#J,this.#Y(Y),this.#Z(J)))yield this.#X(U)}async count(Y){return k(this.#J,this.#Y(Y))}[Symbol.dispose](){this.#J[Symbol.dispose]()}}function f(Y,J){return new h(Y,J)}var Q="kv";function A(Y){return new Promise((J,U)=>{Y.onsuccess=()=>J(Y.result),Y.onerror=()=>U(Y.error)})}function g(Y,J){let U=null,Z=null,$=null,F=(G,V)=>{let W=G??Error(V);if(Z){let B=Z;U=null,Z=null,B(W);return}$=W};return Y.onsuccess=()=>{if(!U)return;let G=U;U=null,Z=null,G(Y.result)},Y.onerror=()=>{F(Y.error,"IndexedDB cursor request failed.")},J.onerror=()=>{F(J.error,"IndexedDB transaction failed.")},J.onabort=()=>{F(J.error,"IndexedDB transaction aborted.")},()=>{return new Promise((G,V)=>{if($){let W=$;$=null,V(W);return}if(U=G,Z=V,Y.readyState==="done"){let W=U;U=null,Z=null,W?.(Y.result)}})}}class r{#J;#U=null;#Y;constructor(Y="weft"){this.#J=Y,this.#Y=this.#X()}capabilities(){return{persistence:"local",readAfterWrite:"linearizable",scanConsistency:"best-effort",atomicBatch:!0,conditionalBatch:!0,boundedRangeDelete:!0}}#X(){let Y=indexedDB.open(this.#J,1);return Y.onupgradeneeded=()=>{let J=Y.result;if(!J.objectStoreNames.contains(Q))J.createObjectStore(Q)},A(Y).then((J)=>{return this.#U=J,J})}async get(Y){let Z=(await this.#Y).transaction(Q,"readonly").objectStore(Q),$=await A(Z.get(Y));return $===void 0?null:new Uint8Array($)}async put(Y,J){let $=(await this.#Y).transaction(Q,"readwrite").objectStore(Q);await A($.put(J,Y))}async delete(Y){let Z=(await this.#Y).transaction(Q,"readwrite").objectStore(Q);await A(Z.delete(Y))}async has(Y){let Z=(await this.#Y).transaction(Q,"readonly").objectStore(Q);return await A(Z.count(Y))>0}async deletePrefix(Y){let J=await this.#Y,U=N(Y),Z=IDBKeyRange.bound(Y,U,!1,!0);return new Promise(($,F)=>{let G=J.transaction(Q,"readwrite"),V=G.objectStore(Q),W=0,B=V.count(Z);B.onsuccess=()=>{W=B.result,V.delete(Z)},G.oncomplete=()=>$(W),G.onerror=()=>F(G.error)})}async deleteRange(Y,J){let U=P(J),Z=m(Y,U);if(Z===null)return 0;let $=IDBKeyRange.bound(Z.lower.key,Z.upper.key,Z.lower.open,Z.upper.open),F=await this.#Y,{limit:G}=U;return new Promise((V,W)=>{let B=F.transaction(Q,"readwrite"),M=B.objectStore(Q),D=0;if(G===void 0){let H=M.count($);H.onsuccess=()=>{D=H.result,M.delete($)}}else{let H=M.openCursor($,"next");H.onsuccess=()=>{let z=H.result;if(z===null||D>=G)return;if(z.delete(),D++,D<G)z.continue()}}B.oncomplete=()=>V(D),B.onerror=()=>W(B.error)})}async*scan(Y,J={}){let{limit:U,reverse:Z}=J,$=await this.#Y,F=N(Y),G=IDBKeyRange.bound(Y,F,!1,!0),V=Z?"prev":"next",W=$.transaction(Q,"readonly"),M=W.objectStore(Q).openCursor(G,V),D=0,H=g(M,W),z=!1;try{let L=await H();while(L){if(U!==void 0&&D>=U)break;let j=L.key;if(O(j,J))yield[j,new Uint8Array(L.value)],D++;L.continue(),L=await H()}z=!0}finally{if(!z)try{W.abort()}catch{}}}async batch(Y){if(Y.length===0)return;let J=await this.#Y;return new Promise((U,Z)=>{let $=J.transaction(Q,"readwrite"),F=$.objectStore(Q);for(let G of Y)if(G.type==="put")F.put(G.value,G.key);else F.delete(G.key);$.oncomplete=()=>U(),$.onerror=()=>Z($.error)})}async conditionalBatch(Y,J){let U=await this.#Y;return new Promise((Z,$)=>{let F=U.transaction(Q,"readwrite"),G=F.objectStore(Q),V=!1,W=!1,B=(H,z)=>{if(V)return;V=!0,$(H??Error(z))};F.oncomplete=()=>{if(V)return;V=!0,Z(!0)},F.onerror=()=>{B(F.error,"IndexedDB conditionalBatch transaction failed.")},F.onabort=()=>{if(V)return;if(V=!0,W){Z(!1);return}$(F.error??Error("IndexedDB conditionalBatch transaction aborted."))};let M=()=>{for(let H of J)if(H.type==="put")G.put(H.value,H.key);else G.delete(H.key)},D=(H)=>{if(H>=Y.length){M();return}let z=Y[H],L=G.get(z.key);L.onsuccess=()=>{let j=L.result,c=j===void 0?null:new Uint8Array(j);if(!I(c,z.expectedValue)){W=!0,F.abort();return}D(H+1)},L.onerror=()=>{B(L.error,"IndexedDB conditionalBatch condition check failed.")}};D(0)})}async*keys(Y,J={}){let{limit:U,reverse:Z}=J,$=await this.#Y,F=N(Y),G=IDBKeyRange.bound(Y,F,!1,!0),V=Z?"prev":"next",W=$.transaction(Q,"readonly"),M=W.objectStore(Q).openKeyCursor(G,V),D=0,H=g(M,W),z=!1;try{let L=await H();while(L){if(U!==void 0&&D>=U)break;let j=L.key;if(O(j,J))yield j,D++;L.continue(),L=await H()}z=!0}finally{if(!z)try{W.abort()}catch{}}}async count(Y){let J=await this.#Y,U=N(Y),$=J.transaction(Q,"readonly").objectStore(Q);return A($.count(IDBKeyRange.bound(Y,U,!1,!0)))}scoped(Y){return f(this,Y)}[Symbol.dispose](){if(this.#U)this.#U.close(),this.#U=null}}export{r as IndexedDBStorage};
1
+ var s=Object.defineProperty;var n=(F)=>F;function i(F,U){this[F]=n.bind(null,U)}var GF=(F,U)=>{for(var Y in U)s(F,Y,{get:U[Y],enumerable:!0,configurable:!0,set:i.bind(U,Y)})};async function R(F,U){return await F.get(U)!==null}async function*S(F,U,Y){for await(let[J]of F.scan(U,Y))yield J}async function E(F,U){let Y=0;for await(let J of S(F,U))Y++;return Y}async function v(F,U){let Y=[];for await(let J of S(F,U))Y.push({type:"delete",key:J});if(Y.length===0)return 0;return await F.batch(Y),Y.length}async function b(F,U,Y){let J=[];for await(let Q of S(F,U,Y))J.push({type:"delete",key:Q});if(J.length===0)return 0;return await F.batch(J),J.length}function A(F,U,Y){if(!F.capabilities()[U])throw Error(`Feature "${Y}" requires storage capability "${U}", but this storage backend does not provide it.`)}var m="default";var P=1e4,VF=1e4;class y extends Error{code="StorageBatchOperationLimitExceededError";cap=P;count;target;constructor(F,U){super(`${F} count ${U} exceeds MAX_BATCH_OPERATIONS (${P}).`);this.name="StorageBatchOperationLimitExceededError",this.target=F,this.count=U}}function T(F,U){if(U>P)throw new y(F,U)}function K(F){return F.length>0?F.slice(0,-1)+String.fromCharCode(F.charCodeAt(F.length-1)+1):"ÿ"}function C(F,U={}){if(U.gt!==void 0&&F<=U.gt)return!1;if(U.gte!==void 0&&F<U.gte)return!1;if(U.lt!==void 0&&F>=U.lt)return!1;if(U.lte!==void 0&&F>U.lte)return!1;return!0}function I(F,U){if(F===null||U===null)return F===U;if(F.byteLength!==U.byteLength)return!1;for(let Y=0;Y<F.byteLength;Y++)if(F[Y]!==U[Y])return!1;return!0}async function g(F,U){if(F.has)return F.has(U);return R(F,U)}function k(F,U,Y){if(F.keys)return F.keys(U,Y);return S(F,U,Y)}async function c(F,U){if(F.count)return F.count(U);return E(F,U)}async function u(F,U){if(F.deletePrefix)return F.deletePrefix(U);return v(F,U)}async function DF(F,U){T("batch operations",U.length),await F.batch(U)}async function w(F,U,Y){if(T("conditionalBatch conditions",U.length),T("conditionalBatch operations",Y.length),A(F,"conditionalBatch","storageConditionalBatch"),!F.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return F.conditionalBatch(U,Y)}function G(F){return encodeURIComponent(F)}function BF(F){return decodeURIComponent(F)}function _F(F){try{return decodeURIComponent(F)}catch{return null}}var z=(F)=>String(F).padStart(16,"0"),r="0",t="1",x=(F,U,Y,J)=>`sig:${G(F)}:${G(U)}:${J}:${G(Y)}`,zF={workflow:(F)=>`wf:${G(F)}`,checkpoint:(F)=>`wf:${G(F)}:ckpt`,checkpointHistory:(F,U)=>`wf:${G(F)}:ckpt:${String(U).padStart(10,"0")}`,timelinePrefix:(F)=>`wf:${G(F)}:timeline:`,timeline:(F,U)=>`wf:${G(F)}:timeline:${String(U).padStart(10,"0")}`,schedule:(F)=>`schedule:${G(F)}`,scheduleTick:(F,U)=>`schedule-due:${String(F).padStart(16,"0")}:${G(U)}`,scheduleRun:(F)=>`schedule-run:${G(F)}`,operation:(F,U,Y)=>`op:${F}:${z(U)}:${Y}`,operationInflight:(F)=>`op:inflight:${F}`,operationQueued:(F)=>`op:queued:${F}`,operationResolved:(F)=>`op:resolved:${F}`,operationDeadLetterPrefix:()=>"op:dead-letter:",operationDeadLetter:(F)=>`op:dead-letter:${F}`,bulkOperationAuditPrefix:()=>"audit:bulk:",bulkOperationAudit:(F,U,Y)=>`audit:bulk:${z(F)}:${G(U)}:${G(Y)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(F,U)=>`op:resolved-by-time:${z(F)}:${G(U)}`,asyncActivity:(F,U)=>`async-act:v1:${G(F)}:${G(U)}`,activityReconciliationPrefix:(F)=>`actrec:v1:${G(F)}:`,activityReconciliation:(F,U,Y)=>`actrec:v1:${G(F)}:${G(U)}:${Y}`,eventPrefix:(F)=>`ev:${G(F)}:`,event:(F,U)=>`ev:${G(F)}:${String(U).padStart(10,"0")}`,eventHead:(F)=>`ev:${G(F)}:head`,eventWatermark:(F)=>`ev:${G(F)}:watermark`,fleetEventPrefix:()=>"fleet-event:",fleetEvent:(F)=>`fleet-event:${String(F).padStart(10,"0")}`,fleetEventTail:()=>"fleet-event-tail",fleetEventByWorkflowPrefix:(F)=>`fleet-event-by-workflow:${G(F)}:`,fleetEventByWorkflow:(F,U)=>`fleet-event-by-workflow:${G(F)}:${String(U).padStart(10,"0")}`,signal:(F,U,Y)=>x(F,U,Y,t),startSignal:(F,U,Y)=>x(F,U,Y,r),signalSequence:(F)=>`sigseq:v1:${G(F)}`,signalAcceptedResponsePrefix:(F)=>`sigres:v1:${G(F)}:`,signalAcceptedResponse:(F,U,Y)=>`sigres:v1:${G(F)}:${G(U)}:${G(Y)}`,deadline:(F,U)=>`wf-deadline:${z(F)}:${G(U)}`,terminalCleanup:(F,U)=>`wf-cleanup:${z(F)}:${G(U)}`,teardownTimer:(F,U)=>`wf-teardown:${z(F)}:${G(U)}`,delayedStart:(F,U)=>`wf-delayed:${z(F)}:${G(U)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(F,U)=>`wf-terminal:${z(F)}:${G(U)}`,attribute:(F)=>`attr:${G(F)}`,attributeIndex:(F,U,Y)=>`idx:${F}:${U}:${G(Y)}`,tagIndex:(F,U)=>`tag:${G(F)}:${G(U)}`,updatePrefix:(F)=>`upd:${G(F)}:`,update:(F,U)=>`upd:${G(F)}:${U}`,updateResponse:(F)=>`upr:${F}`,updateIdempotency:(F,U)=>`upk:${G(F)}:${U}`,startIdempotency:(F)=>`start-idem:${G(F)}`,startIdempotencySignalId:(F)=>`start-idem:${F}`,livenessPrefix:()=>"liveness:",liveness:(F)=>`liveness:${G(F)}`,leasePrefix:()=>"lease:",leaseEpoch:()=>"lease:epoch",leaseHolder:()=>"lease:holder",budget:(F,U,Y)=>`budget:${F}:${U}:${Y}`,review:(F,U)=>`review:${G(F)}:${U}`,workflowHeaders:(F)=>`wf-headers:${G(F)}`,childCancellationPrefix:(F)=>`child-cancel:${G(F)}:`,childCancellation:(F,U)=>`child-cancel:${G(F)}:${G(U)}`,terminalCleanupNeeded:(F)=>`wf-cleanup-needed:${G(F)}`,workflowConcurrency:(F,U)=>`wf-concurrency:${G(F)}:${G(U)}`,workflowConcurrencyHolder:(F)=>`wf-concurrency-holder:${G(F)}`,workflowHasServices:(F)=>`wf-has-services:${G(F)}`,finalizerState:(F)=>`wf-finalizer-state:${G(F)}`,teardownOwed:(F)=>`wf-teardown-needed:${G(F)}`,teardownDeadLetter:(F)=>`wf-teardown-deadletter:${G(F)}`,offload:(F,U)=>`offload:${G(F)}:${U}`,archive:(F,U)=>`archive:${G(F)}:${U}`,stateExecution:(F,U)=>`state:execution:${G(F)}:${G(U)}`,stateWorkflow:(F,U)=>`state:workflow-scope:${m}:${G(F)}:${G(U)}`,streamChunkPrefix:(F,U)=>`blob:${G(F)}:${U}:chunk:`,streamChunk:(F,U,Y)=>`blob:${G(F)}:${U}:chunk:${String(Y).padStart(10,"0")}`,streamTail:(F,U)=>`blob:${G(F)}:${U}:tail`,streamMetadata:(F,U)=>`blob:${G(F)}:${U}:meta`,budgetCharged:(F)=>`budget-charged:${F}`,toolEffect:(F,U,Y)=>`tool-effect:${G(F)}:${U}:${Y}`,workflowVisibilityStatus:(F,U)=>`wf-idx-status:${G(F)}:${G(U)}`,workflowVisibilityType:(F,U)=>`wf-idx-type:${G(F)}:${G(U)}`,workflowVisibilityCreated:(F,U)=>`wf-idx-created:${z(F)}:${G(U)}`,workflowVisibilityUpdated:(F,U)=>`wf-idx-updated:${z(F)}:${G(U)}`,workflowVisibilityDeadline:(F,U)=>`wf-idx-deadline:${z(F)}:${G(U)}`,workflowVisibilityManifest:(F)=>`wf-idx-manifest:${G(F)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"};function o(F){if(F===void 0)return;if(typeof F!=="number"||!Number.isInteger(F)||F<0)throw Error("deleteRange limit must be a finite non-negative integer");return F===0?0:F}function h(F){let U={},Y=!1;for(let Q of["gt","gte","lt","lte"]){let Z=F[Q];if(Z===void 0)continue;if(typeof Z!=="string")throw Error("deleteRange bounds must be strings");U[Q]=Z,Y=!0}if(!Y)throw Error("deleteRange requires at least one of gt/gte/lt/lte; use deletePrefix to delete a whole prefix");let J=o(F.limit);if(J!==void 0)U.limit=J;return U}async function f(F,U,Y){let J=h(Y);if(F.deleteRange)return F.deleteRange(U,J);return b(F,U,J)}function e(F,U){let Y={key:F,open:!1};if(U.gte!==void 0&&U.gte>Y.key)Y.key=U.gte,Y.open=!1;if(U.gt!==void 0&&U.gt>=Y.key)Y.key=U.gt,Y.open=!0;return Y}function FF(F,U){let Y={key:K(F),open:!0};if(U.lt!==void 0&&U.lt<=Y.key)Y.key=U.lt,Y.open=!0;if(U.lte!==void 0&&U.lte<Y.key)Y.key=U.lte,Y.open=!1;return Y}function l(F,U){let Y=e(F,U),J=FF(F,U);if(Y.key>J.key||Y.key===J.key&&(Y.open||J.open))return null;return{lower:Y,upper:J}}function q(F){return F.replaceAll(/:+$/g,"")}function UF(F,U){let Y=q(F),J=q(U);if(Y.length===0)return J;if(J.length===0)return Y;return`${Y}:${J}`}class O{#U;#Y;constructor(F,U){this.#U=F,this.#Y=q(U)}#F(F){if(this.#Y.length===0)return F;return F.length===0?`${this.#Y}:`:`${this.#Y}:${F}`}#G(F){if(this.#Y.length===0)return F;return F.slice(this.#Y.length+1)}#J(F={}){let U={};if(F.limit!==void 0)U.limit=F.limit;if(F.reverse!==void 0)U.reverse=F.reverse;if(F.gt!==void 0)U.gt=this.#F(F.gt);if(F.gte!==void 0)U.gte=this.#F(F.gte);if(F.lt!==void 0)U.lt=this.#F(F.lt);if(F.lte!==void 0)U.lte=this.#F(F.lte);return U}#Q(F){let U={};if(F.limit!==void 0)U.limit=F.limit;if(F.gt!==void 0)U.gt=this.#F(F.gt);if(F.gte!==void 0)U.gte=this.#F(F.gte);if(F.lt!==void 0)U.lt=this.#F(F.lt);if(F.lte!==void 0)U.lte=this.#F(F.lte);return U}capabilities(){return this.#U.capabilities()}scoped(F){return new O(this.#U,UF(this.#Y,F))}async get(F){return this.#U.get(this.#F(F))}async put(F,U){await this.#U.put(this.#F(F),U)}async delete(F){await this.#U.delete(this.#F(F))}async*scan(F,U){for await(let[Y,J]of this.#U.scan(this.#F(F),this.#J(U)))yield[this.#G(Y),J]}async batch(F){T("batch operations",F.length),await this.#U.batch(F.map((U)=>{if(U.type==="put")return{type:"put",key:this.#F(U.key),value:U.value};return{type:"delete",key:this.#F(U.key)}}))}async conditionalBatch(F,U){return w(this.#U,F.map((Y)=>({key:this.#F(Y.key),expectedValue:Y.expectedValue})),U.map((Y)=>{if(Y.type==="put")return{type:"put",key:this.#F(Y.key),value:Y.value};return{type:"delete",key:this.#F(Y.key)}}))}async has(F){return g(this.#U,this.#F(F))}async deletePrefix(F){return u(this.#U,this.#F(F))}async deleteRange(F,U){let Y=this.#Q(h(U));return f(this.#U,this.#F(F),Y)}async*keys(F,U){for await(let Y of k(this.#U,this.#F(F),this.#J(U)))yield this.#G(Y)}async count(F){return c(this.#U,this.#F(F))}[Symbol.dispose](){this.#U[Symbol.dispose]()}}function d(F,U){return new O(F,U)}var $="kv";function N(F){return new Promise((U,Y)=>{F.onsuccess=()=>U(F.result),F.onerror=()=>Y(F.error)})}function p(F,U){let Y=null,J=null,Q=null,Z=(X,L)=>{let H=X??Error(L);if(J){let D=J;Y=null,J=null,D(H);return}Q=H};return F.onsuccess=()=>{if(!Y)return;let X=Y;Y=null,J=null,X(F.result)},F.onerror=()=>{Z(F.error,"IndexedDB cursor request failed.")},U.onerror=()=>{Z(U.error,"IndexedDB transaction failed.")},U.onabort=()=>{Z(U.error,"IndexedDB transaction aborted.")},()=>{return new Promise((X,L)=>{if(Q){let H=Q;Q=null,L(H);return}if(Y=X,J=L,F.readyState==="done"){let H=Y;Y=null,J=null,H?.(F.result)}})}}class YF{#U;#Y=null;#F;constructor(F="weft"){this.#U=F,this.#F=this.#G()}capabilities(){return{persistence:"local",readAfterWrite:"linearizable",scanConsistency:"best-effort",atomicBatch:!0,conditionalBatch:!0,boundedRangeDelete:!0}}#G(){let F=indexedDB.open(this.#U,1);return F.onupgradeneeded=()=>{let U=F.result;if(!U.objectStoreNames.contains($))U.createObjectStore($)},N(F).then((U)=>{return this.#Y=U,U})}async get(F){let J=(await this.#F).transaction($,"readonly").objectStore($),Q=await N(J.get(F));return Q===void 0?null:new Uint8Array(Q)}async put(F,U){let Q=(await this.#F).transaction($,"readwrite").objectStore($);await N(Q.put(U,F))}async delete(F){let J=(await this.#F).transaction($,"readwrite").objectStore($);await N(J.delete(F))}async has(F){let J=(await this.#F).transaction($,"readonly").objectStore($);return await N(J.count(F))>0}async deletePrefix(F){let U=await this.#F,Y=K(F),J=IDBKeyRange.bound(F,Y,!1,!0);return new Promise((Q,Z)=>{let X=U.transaction($,"readwrite"),L=X.objectStore($),H=0,D=L.count(J);D.onsuccess=()=>{H=D.result,L.delete(J)},X.oncomplete=()=>Q(H),X.onerror=()=>Z(X.error)})}async deleteRange(F,U){let Y=h(U),J=l(F,Y);if(J===null)return 0;let Q=IDBKeyRange.bound(J.lower.key,J.upper.key,J.lower.open,J.upper.open),Z=await this.#F,{limit:X}=Y;return new Promise((L,H)=>{let D=Z.transaction($,"readwrite"),M=D.objectStore($),B=0;if(X===void 0){let W=M.count(Q);W.onsuccess=()=>{B=W.result,M.delete(Q)}}else{let W=M.openCursor(Q,"next");W.onsuccess=()=>{let _=W.result;if(_===null||B>=X)return;if(_.delete(),B++,B<X)_.continue()}}D.oncomplete=()=>L(B),D.onerror=()=>H(D.error)})}async*scan(F,U={}){let{limit:Y,reverse:J}=U,Q=await this.#F,Z=K(F),X=IDBKeyRange.bound(F,Z,!1,!0),L=J?"prev":"next",H=Q.transaction($,"readonly"),M=H.objectStore($).openCursor(X,L),B=0,W=p(M,H),_=!1;try{let V=await W();while(V){if(Y!==void 0&&B>=Y)break;let j=V.key;if(C(j,U))yield[j,new Uint8Array(V.value)],B++;V.continue(),V=await W()}_=!0}finally{if(!_)try{H.abort()}catch{}}}async batch(F){if(T("batch operations",F.length),F.length===0)return;let U=await this.#F;return new Promise((Y,J)=>{let Q=U.transaction($,"readwrite"),Z=Q.objectStore($);for(let X of F)if(X.type==="put")Z.put(X.value,X.key);else Z.delete(X.key);Q.oncomplete=()=>Y(),Q.onerror=()=>J(Q.error)})}async conditionalBatch(F,U){T("conditionalBatch conditions",F.length),T("conditionalBatch operations",U.length);let Y=await this.#F;return new Promise((J,Q)=>{let Z=Y.transaction($,"readwrite"),X=Z.objectStore($),L=!1,H=!1,D=(W,_)=>{if(L)return;L=!0,Q(W??Error(_))};Z.oncomplete=()=>{if(L)return;L=!0,J(!0)},Z.onerror=()=>{D(Z.error,"IndexedDB conditionalBatch transaction failed.")},Z.onabort=()=>{if(L)return;if(L=!0,H){J(!1);return}Q(Z.error??Error("IndexedDB conditionalBatch transaction aborted."))};let M=()=>{for(let W of U)if(W.type==="put")X.put(W.value,W.key);else X.delete(W.key)},B=(W)=>{if(W>=F.length){M();return}let _=F[W],V=X.get(_.key);V.onsuccess=()=>{let j=V.result,a=j===void 0?null:new Uint8Array(j);if(!I(a,_.expectedValue)){H=!0,Z.abort();return}B(W+1)},V.onerror=()=>{D(V.error,"IndexedDB conditionalBatch condition check failed.")}};B(0)})}async*keys(F,U={}){let{limit:Y,reverse:J}=U,Q=await this.#F,Z=K(F),X=IDBKeyRange.bound(F,Z,!1,!0),L=J?"prev":"next",H=Q.transaction($,"readonly"),M=H.objectStore($).openKeyCursor(X,L),B=0,W=p(M,H),_=!1;try{let V=await W();while(V){if(Y!==void 0&&B>=Y)break;let j=V.key;if(C(j,U))yield j,B++;V.continue(),V=await W()}_=!0}finally{if(!_)try{H.abort()}catch{}}}async count(F){let U=await this.#F,Y=K(F),Q=U.transaction($,"readonly").objectStore($);return N(Q.count(IDBKeyRange.bound(F,Y,!1,!0)))}scoped(F){return d(this,F)}[Symbol.dispose](){if(this.#Y)this.#Y.close(),this.#Y=null}}export{YF as IndexedDBStorage};