@lostgradient/weft 0.23.1 → 0.24.1

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 (469) hide show
  1. package/README.md +72 -4
  2. package/dist/cli/codegen-emit-dedup.d.ts +81 -0
  3. package/dist/cli/codegen-emit-dedup.js +45 -0
  4. package/dist/cli/codegen-emit-registry.d.ts +90 -0
  5. package/dist/cli/codegen-emit-registry.js +50 -0
  6. package/dist/cli/codegen-emit.d.ts +26 -39
  7. package/dist/cli/codegen-emit.js +4 -27
  8. package/dist/cli/codegen-validate.d.ts +49 -0
  9. package/dist/cli/codegen-validate.js +186 -0
  10. package/dist/cli/codegen.js +6 -87
  11. package/dist/cli/conformance.js +5 -2
  12. package/dist/cli/generated/operation-catalog.snapshot.json +381 -3
  13. package/dist/cli/generated/operation-client.generated.d.ts +350 -10
  14. package/dist/cli/generated/operation-client.generated.js +14 -0
  15. package/dist/cli/output.js +1 -1
  16. package/dist/cli/parse-schedule-arguments.js +15 -3
  17. package/dist/cli/schedule.js +2 -1
  18. package/dist/cli/storage-factory.js +2 -0
  19. package/dist/cli/types.d.ts +2 -1
  20. package/dist/cli/workflow-commands.js +2 -0
  21. package/dist/cli-main.js +1 -1
  22. package/dist/client/http-client-requests.js +6 -9
  23. package/dist/client/start-body.js +1 -0
  24. package/dist/core/application-payload-digest.d.ts +42 -0
  25. package/dist/core/application-payload-digest.js +76 -0
  26. package/dist/core/application-primitive-abort.d.ts +50 -0
  27. package/dist/core/application-primitive-abort.js +40 -0
  28. package/dist/core/application-primitive-attempt-registry.d.ts +74 -0
  29. package/dist/core/application-primitive-attempt-registry.js +73 -0
  30. package/dist/core/application-primitive-codec.d.ts +36 -0
  31. package/dist/core/application-primitive-codec.js +56 -0
  32. package/dist/core/application-primitive-commit.d.ts +67 -0
  33. package/dist/core/application-primitive-commit.js +66 -0
  34. package/dist/core/application-primitive-guards.d.ts +62 -0
  35. package/dist/core/application-primitive-guards.js +89 -0
  36. package/dist/core/application-primitive-payload.d.ts +29 -0
  37. package/dist/core/application-primitive-payload.js +65 -0
  38. package/dist/core/application-primitive-timing.d.ts +18 -0
  39. package/dist/core/application-primitive-timing.js +22 -0
  40. package/dist/core/atomic-state.js +2 -0
  41. package/dist/core/catalog/codec.d.ts +40 -0
  42. package/dist/core/catalog/codec.js +45 -0
  43. package/dist/core/catalog/errors.d.ts +104 -0
  44. package/dist/core/catalog/errors.js +41 -0
  45. package/dist/core/catalog/index.d.ts +25 -0
  46. package/dist/core/catalog/index.js +22 -0
  47. package/dist/core/catalog/reference-counts.d.ts +120 -0
  48. package/dist/core/catalog/reference-counts.js +28 -0
  49. package/dist/core/catalog/removal.d.ts +105 -0
  50. package/dist/core/catalog/removal.js +30 -0
  51. package/dist/core/catalog/storage-io.d.ts +101 -0
  52. package/dist/core/catalog/storage-io.js +106 -0
  53. package/dist/core/catalog/types.d.ts +108 -0
  54. package/dist/core/catalog/types.js +0 -0
  55. package/dist/core/catalog/workflow-catalog.d.ts +165 -0
  56. package/dist/core/catalog/workflow-catalog.js +198 -0
  57. package/dist/core/compare-codepoint.d.ts +13 -0
  58. package/dist/core/compare-codepoint.js +7 -0
  59. package/dist/core/compression.js +2 -0
  60. package/dist/core/context/attributes.d.ts +1 -1
  61. package/dist/core/context/durable-operations.d.ts +2 -2
  62. package/dist/core/context/index.js +5 -3
  63. package/dist/core/context/state-namespace.d.ts +1 -1
  64. package/dist/core/contract/build.d.ts +64 -0
  65. package/dist/core/contract/build.js +99 -0
  66. package/dist/core/contract/compatibility.d.ts +187 -0
  67. package/dist/core/contract/compatibility.js +37 -0
  68. package/dist/core/contract/failure.d.ts +64 -0
  69. package/dist/core/contract/failure.js +4 -0
  70. package/dist/core/contract/hash.d.ts +92 -0
  71. package/dist/core/contract/hash.js +34 -0
  72. package/dist/core/contract/index.d.ts +21 -0
  73. package/dist/core/contract/index.js +22 -0
  74. package/dist/core/contract/limits.d.ts +74 -0
  75. package/dist/core/contract/limits.js +1 -0
  76. package/dist/core/contract/manifest-parse-schema.d.ts +37 -0
  77. package/dist/core/contract/manifest-parse-schema.js +106 -0
  78. package/dist/core/contract/manifest-parse.d.ts +76 -0
  79. package/dist/core/contract/manifest-parse.js +189 -0
  80. package/dist/core/contract/manifest.d.ts +56 -0
  81. package/dist/core/contract/manifest.js +31 -0
  82. package/dist/core/contract/normalize.d.ts +97 -0
  83. package/dist/core/contract/normalize.js +127 -0
  84. package/dist/core/contract/revision.d.ts +29 -0
  85. package/dist/core/contract/revision.js +5 -0
  86. package/dist/core/contract/types.d.ts +274 -0
  87. package/dist/core/contract/types.js +1 -0
  88. package/dist/core/engine/activity-resolution.js +17 -17
  89. package/dist/core/engine/bulk-operations-purge.js +14 -20
  90. package/dist/core/engine/bulk-operations-retry.d.ts +9 -0
  91. package/dist/core/engine/bulk-operations-retry.js +177 -0
  92. package/dist/core/engine/bulk-operations-shared.d.ts +18 -0
  93. package/dist/core/engine/bulk-operations-shared.js +14 -0
  94. package/dist/core/engine/bulk-operations.js +8 -167
  95. package/dist/core/engine/callback-creators-bundles.js +4 -2
  96. package/dist/core/engine/callback-creators-core.js +9 -1
  97. package/dist/core/engine/callback-creators-schedule.js +2 -2
  98. package/dist/core/engine/catalog-activation.d.ts +40 -0
  99. package/dist/core/engine/catalog-activation.js +17 -0
  100. package/dist/core/engine/catalog-events.d.ts +36 -0
  101. package/dist/core/engine/catalog-events.js +15 -0
  102. package/dist/core/engine/catalog-readiness.d.ts +49 -0
  103. package/dist/core/engine/catalog-readiness.js +61 -0
  104. package/dist/core/engine/catalog-removal.d.ts +236 -0
  105. package/dist/core/engine/catalog-removal.js +123 -0
  106. package/dist/core/engine/catalog-tombstone-recovery.d.ts +56 -0
  107. package/dist/core/engine/catalog-tombstone-recovery.js +39 -0
  108. package/dist/core/engine/constraints.js +5 -1
  109. package/dist/core/engine/construction.d.ts +2 -2
  110. package/dist/core/engine/construction.js +4 -2
  111. package/dist/core/engine/decode-revision.d.ts +32 -0
  112. package/dist/core/engine/decode-revision.js +9 -0
  113. package/dist/core/engine/disposal.d.ts +6 -2
  114. package/dist/core/engine/disposal.js +26 -3
  115. package/dist/core/engine/dynamic-source-errors.d.ts +81 -0
  116. package/dist/core/engine/dynamic-source-errors.js +25 -0
  117. package/dist/core/engine/dynamic-source-execution.d.ts +173 -0
  118. package/dist/core/engine/dynamic-source-execution.js +108 -0
  119. package/dist/core/engine/engine-internal-types.d.ts +16 -0
  120. package/dist/core/engine/engine-workflows-namespace.d.ts +140 -0
  121. package/dist/core/engine/engine-workflows-namespace.js +51 -0
  122. package/dist/core/engine/finalizer-metadata.d.ts +22 -0
  123. package/dist/core/engine/finalizer-metadata.js +12 -0
  124. package/dist/core/engine/handle-result.js +2 -0
  125. package/dist/core/engine/index.d.ts +91 -0
  126. package/dist/core/engine/index.js +78 -6
  127. package/dist/core/engine/inline-launch-queue.js +1 -1
  128. package/dist/core/engine/internals.d.ts +54 -15
  129. package/dist/core/engine/internals.js +6 -0
  130. package/dist/core/engine/lifecycle/checkpoint-launch.d.ts +29 -0
  131. package/dist/core/engine/lifecycle/checkpoint-launch.js +75 -0
  132. package/dist/core/engine/lifecycle/delayed-start-registration.d.ts +30 -0
  133. package/dist/core/engine/lifecycle/delayed-start-registration.js +11 -0
  134. package/dist/core/engine/lifecycle/fork-helpers.d.ts +33 -1
  135. package/dist/core/engine/lifecycle/fork-helpers.js +3 -1
  136. package/dist/core/engine/lifecycle/recovery-revision-groups.d.ts +75 -0
  137. package/dist/core/engine/lifecycle/recovery-revision-groups.js +64 -0
  138. package/dist/core/engine/lifecycle/resume-generation-guard.d.ts +58 -0
  139. package/dist/core/engine/lifecycle/resume-generation-guard.js +11 -0
  140. package/dist/core/engine/lifecycle/resume.js +18 -9
  141. package/dist/core/engine/lifecycle/shared.d.ts +43 -0
  142. package/dist/core/engine/lifecycle/standalone-claim-acquire.d.ts +12 -0
  143. package/dist/core/engine/lifecycle/standalone-claim-acquire.js +6 -0
  144. package/dist/core/engine/lifecycle/start-commit-errors.d.ts +12 -0
  145. package/dist/core/engine/lifecycle/start-commit-errors.js +6 -0
  146. package/dist/core/engine/lifecycle/start-commit.d.ts +22 -7
  147. package/dist/core/engine/lifecycle/start-commit.js +49 -15
  148. package/dist/core/engine/lifecycle/start-exec.d.ts +18 -2
  149. package/dist/core/engine/lifecycle/start-exec.js +7 -5
  150. package/dist/core/engine/lifecycle/start-or-signal-create.js +1 -3
  151. package/dist/core/engine/lifecycle/start-or-signal.js +1 -1
  152. package/dist/core/engine/lifecycle/start-precondition-attribution.d.ts +49 -0
  153. package/dist/core/engine/lifecycle/start-precondition-attribution.js +13 -0
  154. package/dist/core/engine/lifecycle/start-revision-resolution.d.ts +34 -0
  155. package/dist/core/engine/lifecycle/start-revision-resolution.js +11 -0
  156. package/dist/core/engine/lifecycle/start-state.d.ts +16 -0
  157. package/dist/core/engine/lifecycle/start-state.js +60 -0
  158. package/dist/core/engine/lifecycle/start-terminal-conflict-purge.d.ts +66 -3
  159. package/dist/core/engine/lifecycle/start-terminal-conflict-purge.js +13 -3
  160. package/dist/core/engine/lifecycle/start.d.ts +16 -6
  161. package/dist/core/engine/lifecycle/start.js +39 -66
  162. package/dist/core/engine/lifecycle/transition.d.ts +3 -4
  163. package/dist/core/engine/lifecycle/transition.js +30 -80
  164. package/dist/core/engine/lifecycle.d.ts +4 -2
  165. package/dist/core/engine/lifecycle.js +6 -6
  166. package/dist/core/engine/listing.js +15 -1
  167. package/dist/core/engine/memo-durable-activity.js +4 -1
  168. package/dist/core/engine/nonterminal-revision-count.d.ts +25 -0
  169. package/dist/core/engine/nonterminal-revision-count.js +16 -0
  170. package/dist/core/engine/operations-time.d.ts +5 -23
  171. package/dist/core/engine/operations-time.js +13 -11
  172. package/dist/core/engine/ownership-bootstrap.d.ts +1 -1
  173. package/dist/core/engine/pinned-schedule-revision-count.d.ts +26 -0
  174. package/dist/core/engine/pinned-schedule-revision-count.js +19 -0
  175. package/dist/core/engine/pinned-schedule-revision.d.ts +76 -0
  176. package/dist/core/engine/pinned-schedule-revision.js +53 -0
  177. package/dist/core/engine/registration.d.ts +106 -0
  178. package/dist/core/engine/registration.js +28 -7
  179. package/dist/core/engine/retention.js +9 -2
  180. package/dist/core/engine/revision-errors.d.ts +71 -0
  181. package/dist/core/engine/revision-errors.js +13 -0
  182. package/dist/core/engine/schedule-revision-fire.d.ts +17 -0
  183. package/dist/core/engine/schedule-revision-fire.js +3 -0
  184. package/dist/core/engine/schedule-run.js +2 -1
  185. package/dist/core/engine/schedules.d.ts +2 -1
  186. package/dist/core/engine/schedules.js +28 -9
  187. package/dist/core/engine/source-diagnostics.d.ts +76 -0
  188. package/dist/core/engine/source-diagnostics.js +105 -0
  189. package/dist/core/engine/source-registration.d.ts +42 -0
  190. package/dist/core/engine/source-registration.js +38 -0
  191. package/dist/core/engine/source-resolution.d.ts +101 -0
  192. package/dist/core/engine/source-resolution.js +154 -0
  193. package/dist/core/engine/source-runtime-state.d.ts +92 -0
  194. package/dist/core/engine/source-runtime-state.js +36 -0
  195. package/dist/core/engine/storage-io.d.ts +19 -2
  196. package/dist/core/engine/storage-io.js +21 -2
  197. package/dist/core/engine/termination/finalizer-registration.d.ts +18 -0
  198. package/dist/core/engine/termination/finalizer-registration.js +21 -0
  199. package/dist/core/engine/termination/finalizer.d.ts +16 -19
  200. package/dist/core/engine/termination/finalizer.js +3 -3
  201. package/dist/core/engine/time-operation-callbacks.d.ts +32 -0
  202. package/dist/core/engine/time-operation-callbacks.js +0 -0
  203. package/dist/core/engine/validation/schedule-cadence.d.ts +16 -0
  204. package/dist/core/engine/validation/schedule-cadence.js +20 -0
  205. package/dist/core/engine/validation/schedule-options.d.ts +4 -1
  206. package/dist/core/engine/validation/schedule-options.js +14 -0
  207. package/dist/core/engine/validation/schedule-revision.d.ts +24 -0
  208. package/dist/core/engine/validation/schedule-revision.js +21 -0
  209. package/dist/core/engine/validation/schedule-warnings.d.ts +11 -0
  210. package/dist/core/engine/validation/schedule-warnings.js +5 -0
  211. package/dist/core/engine/validation/schedule.d.ts +4 -3
  212. package/dist/core/engine/validation/schedule.js +15 -26
  213. package/dist/core/engine/validation.js +5 -2
  214. package/dist/core/engine/workflow-claim-reclaim-target.d.ts +1 -1
  215. package/dist/core/engine/workflow-claim-reclaim-target.js +16 -2
  216. package/dist/core/engine/workflow-retention-deadline.d.ts +16 -0
  217. package/dist/core/engine/workflow-retention-deadline.js +33 -0
  218. package/dist/core/events/catalog-events.d.ts +117 -0
  219. package/dist/core/events/catalog-events.js +62 -0
  220. package/dist/core/events/event-map.d.ts +11 -0
  221. package/dist/core/events/index.d.ts +2 -0
  222. package/dist/core/events/index.js +2 -0
  223. package/dist/core/events/workflow-source-events.d.ts +102 -0
  224. package/dist/core/events/workflow-source-events.js +57 -0
  225. package/dist/core/execution-strategy.d.ts +7 -0
  226. package/dist/core/inline-execution-strategy.context-options.d.ts +1 -1
  227. package/dist/core/inline-execution-strategy.js +1 -1
  228. package/dist/core/mailbox-admission.d.ts +26 -0
  229. package/dist/core/mailbox-admission.js +130 -0
  230. package/dist/core/mailbox-claims.d.ts +251 -0
  231. package/dist/core/mailbox-claims.js +0 -0
  232. package/dist/core/mailbox-codec.d.ts +32 -0
  233. package/dist/core/mailbox-codec.js +221 -0
  234. package/dist/core/mailbox-contract.d.ts +290 -0
  235. package/dist/core/mailbox-contract.js +0 -0
  236. package/dist/core/mailbox-delivery.d.ts +37 -0
  237. package/dist/core/mailbox-delivery.js +193 -0
  238. package/dist/core/mailbox-guards.d.ts +78 -0
  239. package/dist/core/mailbox-guards.js +58 -0
  240. package/dist/core/mailbox-index-codec.d.ts +41 -0
  241. package/dist/core/mailbox-index-codec.js +71 -0
  242. package/dist/core/mailbox-internals.d.ts +156 -0
  243. package/dist/core/mailbox-internals.js +154 -0
  244. package/dist/core/mailbox-maintenance.d.ts +29 -0
  245. package/dist/core/mailbox-maintenance.js +196 -0
  246. package/dist/core/mailbox-settlement.d.ts +69 -0
  247. package/dist/core/mailbox-settlement.js +206 -0
  248. package/dist/core/mailbox-storage.d.ts +117 -0
  249. package/dist/core/mailbox-storage.js +115 -0
  250. package/dist/core/mailbox-transition-helpers.d.ts +70 -0
  251. package/dist/core/mailbox-transition-helpers.js +43 -0
  252. package/dist/core/mailbox-transitions-recovery.d.ts +28 -0
  253. package/dist/core/mailbox-transitions-recovery.js +64 -0
  254. package/dist/core/mailbox-transitions.d.ts +138 -0
  255. package/dist/core/mailbox-transitions.js +180 -0
  256. package/dist/core/mailbox-types.d.ts +406 -0
  257. package/dist/core/mailbox-types.js +16 -0
  258. package/dist/core/mailbox-validation.d.ts +65 -0
  259. package/dist/core/mailbox-validation.js +73 -0
  260. package/dist/core/mailbox-waits.d.ts +50 -0
  261. package/dist/core/mailbox-waits.js +97 -0
  262. package/dist/core/mailbox.d.ts +163 -0
  263. package/dist/core/mailbox.js +211 -0
  264. package/dist/core/outbox-claims.d.ts +307 -0
  265. package/dist/core/outbox-claims.js +0 -0
  266. package/dist/core/outbox-codec.d.ts +24 -0
  267. package/dist/core/outbox-codec.js +257 -0
  268. package/dist/core/outbox-contract.d.ts +346 -0
  269. package/dist/core/outbox-contract.js +0 -0
  270. package/dist/core/outbox-delivery.d.ts +34 -0
  271. package/dist/core/outbox-delivery.js +149 -0
  272. package/dist/core/outbox-drain.d.ts +29 -0
  273. package/dist/core/outbox-drain.js +158 -0
  274. package/dist/core/outbox-enqueue.d.ts +24 -0
  275. package/dist/core/outbox-enqueue.js +115 -0
  276. package/dist/core/outbox-guards.d.ts +76 -0
  277. package/dist/core/outbox-guards.js +60 -0
  278. package/dist/core/outbox-index-codec.d.ts +33 -0
  279. package/dist/core/outbox-index-codec.js +71 -0
  280. package/dist/core/outbox-internals.d.ts +99 -0
  281. package/dist/core/outbox-internals.js +159 -0
  282. package/dist/core/outbox-listing.d.ts +12 -0
  283. package/dist/core/outbox-listing.js +38 -0
  284. package/dist/core/outbox-maintenance.d.ts +28 -0
  285. package/dist/core/outbox-maintenance.js +191 -0
  286. package/dist/core/outbox-operations.d.ts +18 -0
  287. package/dist/core/outbox-operations.js +46 -0
  288. package/dist/core/outbox-runner.d.ts +30 -0
  289. package/dist/core/outbox-runner.js +217 -0
  290. package/dist/core/outbox-settlement.d.ts +57 -0
  291. package/dist/core/outbox-settlement.js +183 -0
  292. package/dist/core/outbox-storage.d.ts +107 -0
  293. package/dist/core/outbox-storage.js +127 -0
  294. package/dist/core/outbox-transition-helpers.d.ts +83 -0
  295. package/dist/core/outbox-transition-helpers.js +63 -0
  296. package/dist/core/outbox-transitions-recovery.d.ts +30 -0
  297. package/dist/core/outbox-transitions-recovery.js +42 -0
  298. package/dist/core/outbox-transitions.d.ts +145 -0
  299. package/dist/core/outbox-transitions.js +236 -0
  300. package/dist/core/outbox-types.d.ts +400 -0
  301. package/dist/core/outbox-types.js +20 -0
  302. package/dist/core/outbox-validation.d.ts +101 -0
  303. package/dist/core/outbox-validation.js +127 -0
  304. package/dist/core/outbox-waits.d.ts +39 -0
  305. package/dist/core/outbox-waits.js +88 -0
  306. package/dist/core/outbox.d.ts +156 -0
  307. package/dist/core/outbox.js +234 -0
  308. package/dist/core/registry-limits.d.ts +49 -0
  309. package/dist/core/registry-limits.js +10 -0
  310. package/dist/core/registry-schema-conversion.d.ts +20 -0
  311. package/dist/core/registry-schema-conversion.js +22 -0
  312. package/dist/core/registry-snapshot.d.ts +91 -42
  313. package/dist/core/registry-snapshot.js +39 -77
  314. package/dist/core/registry-workflow-contract-draft.d.ts +32 -0
  315. package/dist/core/registry-workflow-contract-draft.js +28 -0
  316. package/dist/core/registry-workflow-manifest.d.ts +122 -0
  317. package/dist/core/registry-workflow-manifest.js +92 -0
  318. package/dist/core/source/errors.d.ts +55 -0
  319. package/dist/core/source/errors.js +13 -0
  320. package/dist/core/source/index.d.ts +19 -0
  321. package/dist/core/source/index.js +4 -0
  322. package/dist/core/source/resolvers.d.ts +45 -0
  323. package/dist/core/source/resolvers.js +9 -0
  324. package/dist/core/source/types.d.ts +211 -0
  325. package/dist/core/source/types.js +0 -0
  326. package/dist/core/source/validate.d.ts +91 -0
  327. package/dist/core/source/validate.js +62 -0
  328. package/dist/core/source/workflow-source.d.ts +43 -0
  329. package/dist/core/source/workflow-source.js +16 -0
  330. package/dist/core/types/checkpoint.d.ts +14 -0
  331. package/dist/core/types/schedules.d.ts +52 -1
  332. package/dist/core/types/state.d.ts +16 -0
  333. package/dist/core/types/workflow-registries.d.ts +7 -0
  334. package/dist/core/types/workflow-registry.d.ts +12 -0
  335. package/dist/core/versioning.js +2 -0
  336. package/dist/core/weft-error.d.ts +1 -1
  337. package/dist/core/weft-error.js +12 -1
  338. package/dist/core/worker-execution-strategy.d.ts +1 -0
  339. package/dist/core/worker-execution-strategy.js +13 -1
  340. package/dist/core/worker-fault-handling.d.ts +10 -0
  341. package/dist/core/worker-fault-handling.js +1 -0
  342. package/dist/core/worker-inbound-message.d.ts +1 -0
  343. package/dist/core/worker-inbound-message.js +1 -0
  344. package/dist/core/worker-protocol-guard.js +4 -0
  345. package/dist/core/worker-protocol.d.ts +7 -0
  346. package/dist/core/worker-protocol.js +2 -1
  347. package/dist/core/worker-turn-watchdog.d.ts +8 -1
  348. package/dist/core/worker-turn-watchdog.js +3 -2
  349. package/dist/diagnostics/format.js +5 -0
  350. package/dist/diagnostics/types.d.ts +24 -0
  351. package/dist/diagnostics/version-check.js +8 -2
  352. package/dist/http.js +2 -2
  353. package/dist/index.d.ts +25 -4
  354. package/dist/index.js +57 -0
  355. package/dist/indexeddb.js +1 -1
  356. package/dist/json-schema.js +3 -3
  357. package/dist/mcp/resources.js +2 -0
  358. package/dist/runtime/portable.d.ts +9 -1
  359. package/dist/server/fault-to-json-rpc.js +4 -1
  360. package/dist/server/handler/auth-context-principal.js +4 -0
  361. package/dist/server/index.d.ts +11 -0
  362. package/dist/server/json-rpc-http.js +2 -0
  363. package/dist/server/json-rpc-websocket.js +6 -4
  364. package/dist/server/operation-catalog/index.d.ts +1 -1
  365. package/dist/server/operation-catalog/pipeline-helpers.js +2 -0
  366. package/dist/server/operation-catalog/types.d.ts +17 -0
  367. package/dist/server/operation-fault.d.ts +5 -0
  368. package/dist/server/operation-fault.js +4 -1
  369. package/dist/server/operations/activate-workflow-revision.d.ts +30 -0
  370. package/dist/server/operations/activate-workflow-revision.js +69 -0
  371. package/dist/server/operations/create-schedule.d.ts +2 -0
  372. package/dist/server/operations/create-schedule.js +10 -6
  373. package/dist/server/operations/fleet-events-subscription.js +1 -1
  374. package/dist/server/operations/fork-workflow.js +1 -1
  375. package/dist/server/operations/get-active-workflow-revision.d.ts +32 -0
  376. package/dist/server/operations/get-active-workflow-revision.js +46 -0
  377. package/dist/server/operations/get-catalog-diagnostics.d.ts +113 -0
  378. package/dist/server/operations/get-catalog-diagnostics.js +65 -0
  379. package/dist/server/operations/get-registry.js +17 -4
  380. package/dist/server/operations/get-task-detail-schema.d.ts +8 -0
  381. package/dist/server/operations/get-task-detail-schema.js +1 -0
  382. package/dist/server/operations/get-task-detail.d.ts +8 -0
  383. package/dist/server/operations/get-task-detail.js +1 -0
  384. package/dist/server/operations/get-task-diagnostics.d.ts +4 -4
  385. package/dist/server/operations/get-workflow-revision.d.ts +25 -0
  386. package/dist/server/operations/get-workflow-revision.js +50 -0
  387. package/dist/server/operations/install-workflow-revision.d.ts +27 -0
  388. package/dist/server/operations/install-workflow-revision.js +46 -0
  389. package/dist/server/operations/list-workflow-revisions.d.ts +20 -0
  390. package/dist/server/operations/list-workflow-revisions.js +40 -0
  391. package/dist/server/operations/preload-workflow-revision.d.ts +28 -0
  392. package/dist/server/operations/preload-workflow-revision.js +60 -0
  393. package/dist/server/operations/schedule-faults.d.ts +1 -0
  394. package/dist/server/operations/schedule-faults.js +32 -4
  395. package/dist/server/operations/schedule-rest-body.d.ts +1 -0
  396. package/dist/server/operations/schedule-rest-body.js +2 -1
  397. package/dist/server/operations/start-or-signal-workflow.js +1 -1
  398. package/dist/server/operations/start-workflow.js +1 -1
  399. package/dist/server/operations/static-registrations.js +42 -0
  400. package/dist/server/operations/storage.js +2 -2
  401. package/dist/server/operations/submit-review-decision.js +1 -1
  402. package/dist/server/operations/update-schedule.d.ts +2 -0
  403. package/dist/server/operations/update-schedule.js +4 -2
  404. package/dist/server/operations/workflow-catalog-operation-helpers.d.ts +59 -0
  405. package/dist/server/operations/workflow-catalog-operation-helpers.js +162 -0
  406. package/dist/server/runtime/task-dispatch-envelope.d.ts +14 -0
  407. package/dist/server/runtime/task-dispatch-envelope.js +32 -0
  408. package/dist/server/runtime/task-dispatch-revision.d.ts +29 -0
  409. package/dist/server/runtime/task-dispatch-revision.js +13 -0
  410. package/dist/server/runtime/task-dispatch.js +12 -37
  411. package/dist/server/runtime/task-ledger-recovery.js +1 -1
  412. package/dist/server/runtime/task-ledger-runtime.d.ts +14 -2
  413. package/dist/server/runtime/task-ledger-runtime.js +5 -3
  414. package/dist/server/runtime/task-polling.js +9 -3
  415. package/dist/server/runtime/task-reconciliation.js +2 -1
  416. package/dist/server/runtime/websocket-upgrade.js +2 -0
  417. package/dist/server/runtime/websocket-worker.js +9 -0
  418. package/dist/server/task-ledger-codec.d.ts +9 -0
  419. package/dist/server/task-ledger-codec.js +4 -1
  420. package/dist/server/task-ledger-transition-helpers.js +1 -0
  421. package/dist/server/task-ledger-types.d.ts +9 -0
  422. package/dist/server/task-ledger.d.ts +1 -1
  423. package/dist/server/task-ledger.js +2 -1
  424. package/dist/server/task-queue-types.d.ts +2 -0
  425. package/dist/storage/bun-sql.js +51 -6
  426. package/dist/storage/catalog-keys.d.ts +64 -0
  427. package/dist/storage/catalog-keys.js +8 -0
  428. package/dist/storage/compressed-storage.js +1 -1
  429. package/dist/storage/derived-operations.js +1 -1
  430. package/dist/storage/index.d.ts +28 -1
  431. package/dist/storage/interface.d.ts +28 -1
  432. package/dist/storage/interface.js +1 -1
  433. package/dist/storage/key-encoding.d.ts +15 -0
  434. package/dist/storage/key-encoding.js +3 -0
  435. package/dist/storage/key-prefixes.d.ts +1 -1
  436. package/dist/storage/key-prefixes.js +16 -0
  437. package/dist/storage/lmdb.d.ts +54 -1
  438. package/dist/storage/lmdb.js +1 -1
  439. package/dist/storage/mailbox-keys.d.ts +80 -0
  440. package/dist/storage/mailbox-keys.js +14 -0
  441. package/dist/storage/memory.js +1 -1
  442. package/dist/storage/neon.js +2 -2
  443. package/dist/storage/node-sqlite-loader.d.ts +1 -1
  444. package/dist/storage/node-sqlite.js +51 -6
  445. package/dist/storage/outbox-keys.d.ts +77 -0
  446. package/dist/storage/outbox-keys.js +14 -0
  447. package/dist/storage/postgres.js +2 -2
  448. package/dist/storage/resolve.js +1 -1
  449. package/dist/storage/scoped-storage.js +1 -1
  450. package/dist/storage/storage-configuration.d.ts +6 -0
  451. package/dist/storage/testing.js +1 -1
  452. package/dist/storage/turso.js +2 -2
  453. package/dist/version.d.ts +1 -1
  454. package/dist/version.js +1 -1
  455. package/dist/web-extension.js +1 -1
  456. package/dist/worker/manifest/registry-contract-builder.d.ts +21 -3
  457. package/dist/worker/manifest/registry-contract-builder.js +40 -31
  458. package/dist/worker/protocol-messages.d.ts +17 -0
  459. package/dist/worker/protocol-schemas.d.ts +32 -0
  460. package/dist/worker/protocol-schemas.js +7 -3
  461. package/dist/worker/protocol-task-result.js +35 -3
  462. package/dist/worker/protocol.js +1 -1
  463. package/dist/worker/registry/types.d.ts +2 -0
  464. package/dist/worker/registry.d.ts +1 -1
  465. package/dist/worker/registry.js +3 -1
  466. package/dist/workers/workflow-runner.d.ts +9 -0
  467. package/dist/workers/workflow-runner.js +9 -2
  468. package/dist/workers/workflow-worker-entry.js +9 -4
  469. package/package.json +2 -2
@@ -11,7 +11,8 @@ export {
11
11
  isRemoteTaskTerminalCancelled,
12
12
  isRemoteTaskTerminalResolved,
13
13
  isRemoteTaskTerminalRetryExhausted,
14
- isValidTaskHeaders
14
+ isValidTaskHeaders,
15
+ isValidWorkflowRevision
15
16
  } from "./task-ledger-codec.js";
16
17
  export { taskLedgerKey } from "./task-ledger-keys.js";
17
18
  export {
@@ -15,6 +15,8 @@ export interface PendingTask extends TaskLifecycleFields {
15
15
  workflowId?: string | undefined;
16
16
  /** Durable token for the workflow run that dispatched this activity, when known. */
17
17
  workflowExecutionToken?: string | undefined;
18
+ /** The dispatching workflow run's persisted revision (WFT-20), when known. */
19
+ workflowRevision?: string | undefined;
18
20
  /**
19
21
  * Task priority. Higher values are dequeued first. Tasks with equal priority
20
22
  * maintain FIFO order. Default: 0. Agent workflow tasks use priority 10.
@@ -9,6 +9,23 @@ function requireStorageCapability(storage, capability, featureName) {
9
9
  }
10
10
  }
11
11
 
12
+ // src/storage/key-encoding.ts
13
+ function encodeStorageKeyComponent(value) {
14
+ return encodeURIComponent(value);
15
+ }
16
+ function formatSortableStorageTimestamp(timestamp) {
17
+ return String(timestamp).padStart(16, "0");
18
+ }
19
+
20
+ // src/storage/catalog-keys.ts
21
+ var WORKFLOW_CATALOG_KEYS = {
22
+ catalogEntry: (name, revision) => `catalog-entry:${encodeStorageKeyComponent(name)}:${encodeStorageKeyComponent(revision)}`,
23
+ catalogEntryPrefix: (name) => `catalog-entry:${encodeStorageKeyComponent(name)}:`,
24
+ catalogActive: (name) => `catalog-active:${encodeStorageKeyComponent(name)}`,
25
+ catalogTombstone: (name, revision) => `catalog-tombstone:${encodeStorageKeyComponent(name)}:${encodeStorageKeyComponent(revision)}`,
26
+ catalogTombstonePrefix: () => `catalog-tombstone:`
27
+ };
28
+
12
29
  // src/storage/default-scope.ts
13
30
  var DEFAULT_SCOPE = "default";
14
31
 
@@ -23,7 +40,7 @@ async function* storageKeysCore(storage, prefix, options) {
23
40
  }
24
41
  async function storageCountCore(storage, prefix) {
25
42
  let count = 0;
26
- for await (const _key of storageKeysCore(storage, prefix)) {
43
+ for await (const _ of storageKeysCore(storage, prefix)) {
27
44
  count++;
28
45
  }
29
46
  return count;
@@ -51,10 +68,35 @@ async function storageDeleteRangeCore(storage, prefix, options) {
51
68
  return operations.length;
52
69
  }
53
70
 
54
- // src/storage/key-encoding.ts
55
- function encodeStorageKeyComponent(value) {
56
- return encodeURIComponent(value);
57
- }
71
+ // src/storage/mailbox-keys.ts
72
+ var MAILBOX_KEYS = {
73
+ applicationMailbox: (namespace, resourceId) => `appmbx:v1:${encodeStorageKeyComponent(namespace)}:${encodeStorageKeyComponent(resourceId)}`,
74
+ applicationMailboxSinkProbe: (namespace, resourceId, nonce) => `appprobe:v1:${encodeStorageKeyComponent(namespace)}:${encodeStorageKeyComponent(resourceId)}:${encodeStorageKeyComponent(nonce)}`,
75
+ applicationCommandPrefix: (namespace, resourceId) => `appcmd:v1:${encodeStorageKeyComponent(namespace)}:${encodeStorageKeyComponent(resourceId)}:`,
76
+ applicationCommand: (namespace, resourceId, commandId) => `appcmd:v1:${encodeStorageKeyComponent(namespace)}:${encodeStorageKeyComponent(resourceId)}:${encodeStorageKeyComponent(commandId)}`,
77
+ applicationCommandReadyPrefix: (namespace, resourceId) => `appready:v1:${encodeStorageKeyComponent(namespace)}:${encodeStorageKeyComponent(resourceId)}:`,
78
+ applicationCommandReady: (namespace, resourceId, sequence) => `appready:v1:${encodeStorageKeyComponent(namespace)}:${encodeStorageKeyComponent(resourceId)}:${formatSortableStorageTimestamp(sequence)}`,
79
+ applicationCommandIdempotency: (namespace, resourceId, key) => `appidem:v1:${encodeStorageKeyComponent(namespace)}:${encodeStorageKeyComponent(resourceId)}:${encodeStorageKeyComponent(key)}`,
80
+ applicationCommandBySequencePrefix: (namespace, resourceId) => `appseq:v1:${encodeStorageKeyComponent(namespace)}:${encodeStorageKeyComponent(resourceId)}:`,
81
+ applicationCommandBySequence: (namespace, resourceId, sequence) => `appseq:v1:${encodeStorageKeyComponent(namespace)}:${encodeStorageKeyComponent(resourceId)}:${formatSortableStorageTimestamp(sequence)}`,
82
+ applicationCommandTerminalPrefix: (namespace, resourceId) => `appterm:v1:${encodeStorageKeyComponent(namespace)}:${encodeStorageKeyComponent(resourceId)}:`,
83
+ applicationCommandTerminal: (namespace, resourceId, terminalAt, commandId) => `appterm:v1:${encodeStorageKeyComponent(namespace)}:${encodeStorageKeyComponent(resourceId)}:${formatSortableStorageTimestamp(terminalAt)}:${encodeStorageKeyComponent(commandId)}`
84
+ };
85
+
86
+ // src/storage/outbox-keys.ts
87
+ var OUTBOX_KEYS = {
88
+ applicationOutbox: (namespace, ownerId) => `appobx:v1:${encodeStorageKeyComponent(namespace)}:${encodeStorageKeyComponent(ownerId)}`,
89
+ applicationOutboxSinkProbe: (namespace, ownerId, nonce) => `appprobe:v1:outbox:${encodeStorageKeyComponent(namespace)}:${encodeStorageKeyComponent(ownerId)}:${encodeStorageKeyComponent(nonce)}`,
90
+ applicationDeliveryPrefix: (namespace, ownerId) => `appdlv:v1:${encodeStorageKeyComponent(namespace)}:${encodeStorageKeyComponent(ownerId)}:`,
91
+ applicationDelivery: (namespace, ownerId, deliveryId) => `appdlv:v1:${encodeStorageKeyComponent(namespace)}:${encodeStorageKeyComponent(ownerId)}:${encodeStorageKeyComponent(deliveryId)}`,
92
+ applicationDeliveryDuePrefix: (namespace, ownerId) => `appdue:v1:${encodeStorageKeyComponent(namespace)}:${encodeStorageKeyComponent(ownerId)}:`,
93
+ applicationDeliveryDue: (namespace, ownerId, availableAt, deliveryId) => `appdue:v1:${encodeStorageKeyComponent(namespace)}:${encodeStorageKeyComponent(ownerId)}:${formatSortableStorageTimestamp(availableAt)}:${encodeStorageKeyComponent(deliveryId)}`,
94
+ applicationDeliveryIdempotency: (namespace, ownerId, key) => `appdidem:v1:${encodeStorageKeyComponent(namespace)}:${encodeStorageKeyComponent(ownerId)}:${encodeStorageKeyComponent(key)}`,
95
+ applicationDeliveryBySequencePrefix: (namespace, ownerId) => `appdseq:v1:${encodeStorageKeyComponent(namespace)}:${encodeStorageKeyComponent(ownerId)}:`,
96
+ applicationDeliveryBySequence: (namespace, ownerId, sequence) => `appdseq:v1:${encodeStorageKeyComponent(namespace)}:${encodeStorageKeyComponent(ownerId)}:${formatSortableStorageTimestamp(sequence)}`,
97
+ applicationDeliveryTerminalPrefix: (namespace, ownerId) => `appdterm:v1:${encodeStorageKeyComponent(namespace)}:${encodeStorageKeyComponent(ownerId)}:`,
98
+ applicationDeliveryTerminal: (namespace, ownerId, terminalAt, deliveryId) => `appdterm:v1:${encodeStorageKeyComponent(namespace)}:${encodeStorageKeyComponent(ownerId)}:${formatSortableStorageTimestamp(terminalAt)}:${encodeStorageKeyComponent(deliveryId)}`
99
+ };
58
100
 
59
101
  // src/storage/ownership-keys.ts
60
102
  var OWNERSHIP_CLAIM_KEYS = {
@@ -132,7 +174,7 @@ async function storageConditionalBatch(storage, conditions, operations) {
132
174
  }
133
175
  return storage.conditionalBatch(conditions, operations);
134
176
  }
135
- var formatSortableTimestamp = (timestamp) => String(timestamp).padStart(16, "0");
177
+ var formatSortableTimestamp = formatSortableStorageTimestamp;
136
178
  var SIGNAL_SORT_CLASS_START = "0";
137
179
  var SIGNAL_SORT_CLASS_NORMAL = "1";
138
180
  var signalStorageKey = (workflowId, name, id, sortClass) => `sig:${encodeStorageKeyComponent(workflowId)}:${encodeStorageKeyComponent(name)}:${sortClass}:${encodeStorageKeyComponent(id)}`;
@@ -195,7 +237,10 @@ var KEYS = {
195
237
  leasePrefix: () => "lease:",
196
238
  leaseEpoch: () => "lease:epoch",
197
239
  leaseHolder: () => "lease:holder",
240
+ ...MAILBOX_KEYS,
241
+ ...OUTBOX_KEYS,
198
242
  ...OWNERSHIP_CLAIM_KEYS,
243
+ ...WORKFLOW_CATALOG_KEYS,
199
244
  budget: (namespace, period, date) => `budget:${namespace}:${period}:${date}`,
200
245
  review: (workflowId, reviewId) => `review:${encodeStorageKeyComponent(workflowId)}:${reviewId}`,
201
246
  workflowHeaders: (workflowId) => `wf-headers:${encodeStorageKeyComponent(workflowId)}`,
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Storage key builders for the durable workflow catalog (WFT-9/WFT-10).
3
+ *
4
+ * Spread into `KEYS` in `interface.ts` rather than declared there, mirroring
5
+ * `ownership-keys.ts`'s pattern — the catalog keyspace can carry its full
6
+ * rationale without pushing `interface.ts` past its documented line ceiling.
7
+ * Callers reach these through `KEYS`, which keeps one import contract for
8
+ * storage keys.
9
+ *
10
+ * `catalog-entry:<name>:<revision>` is one immutable record per installed
11
+ * `(name, revision)` pair, never overwritten once written. `catalog-active:<name>`
12
+ * is the single mutable `{ revision, generation, activatedAt }` pointer per
13
+ * workflow name, written only through `conditionalBatch` CAS — the exact
14
+ * store-wide-singleton precedent `ownership-mode-marker.ts` establishes for
15
+ * `KEYS.ownershipModeMarker()`.
16
+ *
17
+ * @module storage/catalog-keys
18
+ */
19
+ /**
20
+ * Workflow catalog key builders. Spread into `KEYS`; not intended to be
21
+ * imported directly by engine code.
22
+ */
23
+ export declare const WORKFLOW_CATALOG_KEYS: {
24
+ /**
25
+ * One immutable installed-revision record for `name`. The initial write
26
+ * IS `conditionalBatch` CAS-guarded ({@link import('../core/catalog/storage-io.ts').writeCatalogEntry}),
27
+ * not a plain `put` — a caller-supplied, non-content-derived `revision`
28
+ * (`buildWorkflowRevisionManifest`'s `options.revision` escape hatch)
29
+ * means two racing writers are not guaranteed to agree on this key's
30
+ * content, so the write must fail closed on a genuine conflict rather than
31
+ * last-write-win. This key is also deleted, CAS-guarded on its own exact
32
+ * bytes, by `removeCatalogEntry` (WFT-12) once a revision is no longer
33
+ * active and no longer referenced.
34
+ */
35
+ readonly catalogEntry: (name: string, revision: string) => string;
36
+ /** Scan prefix for every installed revision of `name`. */
37
+ readonly catalogEntryPrefix: (name: string) => string;
38
+ /**
39
+ * The active-revision pointer for `name`: a single mutable
40
+ * `{ revision, generation, activatedAt }` record, written only through
41
+ * `conditionalBatch` — the same CAS/store-wide-singleton precedent
42
+ * `KEYS.ownershipModeMarker()` uses.
43
+ */
44
+ readonly catalogActive: (name: string) => string;
45
+ /**
46
+ * A durable, transient marker for a `(name, revision)` catalog entry
47
+ * mid-removal (WFT-17/18): `removeCatalogEntry` puts this key — value is
48
+ * the exact `catalog-entry:<name>:<revision>` bytes it just deleted — in
49
+ * the SAME `conditionalBatch` as the entry delete, so "the entry is gone"
50
+ * and "a durable record of what it was" land atomically together. A
51
+ * process that crashes between that commit and the removal's own
52
+ * post-delete reference re-check leaves this key behind as the ONLY
53
+ * durable evidence a removal was in flight; `catalog-readiness.ts`'s
54
+ * boot-time restore sweeps every `catalog-tombstone:` key and resolves
55
+ * each one (restore the entry, or finalize the removal) from a FRESH
56
+ * reference count, so no process — not just the one that crashed — is
57
+ * needed to complete it. Present only for the brief window between the
58
+ * delete committing and its own resolution (normally sub-millisecond,
59
+ * same call); never present after a clean `removed`/`referenced` outcome.
60
+ */
61
+ readonly catalogTombstone: (name: string, revision: string) => string;
62
+ /** Scan prefix for every in-flight removal tombstone (should normally be empty). */
63
+ readonly catalogTombstonePrefix: () => string;
64
+ };
@@ -0,0 +1,8 @@
1
+ import { encodeStorageKeyComponent } from "./key-encoding.js";
2
+ export const WORKFLOW_CATALOG_KEYS = {
3
+ catalogEntry: (name, revision) => `catalog-entry:${encodeStorageKeyComponent(name)}:${encodeStorageKeyComponent(revision)}`,
4
+ catalogEntryPrefix: (name) => `catalog-entry:${encodeStorageKeyComponent(name)}:`,
5
+ catalogActive: (name) => `catalog-active:${encodeStorageKeyComponent(name)}`,
6
+ catalogTombstone: (name, revision) => `catalog-tombstone:${encodeStorageKeyComponent(name)}:${encodeStorageKeyComponent(revision)}`,
7
+ catalogTombstonePrefix: () => "catalog-tombstone:"
8
+ };
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- var Q=import.meta.require;function f(e,t,n){if(!e.capabilities()[t])throw Error(`Feature "${n}" requires storage capability "${t}", but this storage backend does not provide it.`)}function D(e){let t=e.capabilities(),n=[];if(t.persistence!=="local"&&t.persistence!=="remote")n.push(`persistence must be "local" or "remote" (got "${t.persistence}")`);if(t.readAfterWrite!=="linearizable")n.push(`readAfterWrite must be "linearizable" (got "${t.readAfterWrite}")`);if(t.scanConsistency!=="snapshot")n.push(`scanConsistency must be "snapshot" (got "${t.scanConsistency}")`);if(!t.atomicBatch)n.push("atomicBatch must be true");if(!t.conditionalBatch)n.push("conditionalBatch must be true");if(n.length>0)throw Error(`Storage is not durable enough for recovery: ${n.join("; ")}.`)}var m="default";async function S(e,t){return await e.get(t)!==null}async function*l(e,t,n){for await(let[i]of e.scan(t,n))yield i}async function x(e,t){let n=0;for await(let i of l(e,t))n++;return n}async function C(e,t){let n=[];for await(let i of l(e,t))n.push({type:"delete",key:i});if(n.length===0)return 0;return await e.batch(n),n.length}async function re(e,t,n){let i=[];for await(let p of l(e,t,n))i.push({type:"delete",key:p});if(i.length===0)return 0;return await e.batch(i),i.length}function r(e){return encodeURIComponent(e)}function M(e){return decodeURIComponent(e)}function N(e){try{return decodeURIComponent(e)}catch{return null}}var v={workflowOwnerEpoch:(e)=>`wf-owner-epoch:${r(e)}`,workflowOwnerHolder:(e)=>`wf-owner-holder:${r(e)}`,ownershipModeMarker:()=>"ownership-mode-marker"};var K=["actrec:","archive:","async-act:","attr:","audit:bulk:","blob:","budget:","budget-charged:","child-by-parent:","ev:","fleet-event-by-workflow:","fleet-event:","fleet-event-tail","fleet-event-watermark","idx:","lease:","liveness:","offload:","ownership-mode-marker","op:","review:","schedule:","schedule-due:","schedule-run-by-schedule:","schedule-run-link:","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-owner-epoch:","wf-owner-holder:","wf-teardown:","wf-teardown-deadletter:","wf-teardown-needed:","wf-teardown-succeeded:","wf-terminal:"];var y=1e4,pe=1e4;class B extends Error{code="StorageBatchOperationLimitExceededError";cap=y;count;target;constructor(e,t){super(`${e} count ${t} exceeds MAX_BATCH_OPERATIONS (${y}).`);this.name="StorageBatchOperationLimitExceededError",this.target=e,this.count=t}}function u(e,t){if(t>y)throw new B(e,t)}function fe(e){return e.length>0?e.slice(0,-1)+String.fromCharCode(e.charCodeAt(e.length-1)+1):"\xFF"}function me(e,t={}){if(t.gt!==void 0&&e<=t.gt)return!1;if(t.gte!==void 0&&e<t.gte)return!1;if(t.lt!==void 0&&e>=t.lt)return!1;if(t.lte!==void 0&&e>t.lte)return!1;return!0}function ye(e,t){if(e===null||t===null)return e===t;if(e.byteLength!==t.byteLength)return!1;for(let n=0;n<e.byteLength;n++)if(e[n]!==t[n])return!1;return!0}async function he(e,t){if(e.has)return e.has(t);return S(e,t)}function be(e,t,n){if(e.keys)return e.keys(t,n);return l(e,t,n)}async function we(e,t){if(e.count)return e.count(t);return x(e,t)}async function Se(e,t){if(e.deletePrefix)return e.deletePrefix(t);return C(e,t)}async function $e(e,t){u("batch operations",t.length),await e.batch(t)}async function xe(e,t,n){if(u("conditionalBatch conditions",t.length),u("conditionalBatch operations",n.length),f(e,"conditionalBatch","storageConditionalBatch"),!e.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return e.conditionalBatch(t,n)}var o=(e)=>String(e).padStart(16,"0"),H="0",V="1",A=(e,t,n,i)=>`sig:${r(e)}:${r(t)}:${i}:${r(n)}`,Ce={workflow:(e)=>`wf:${r(e)}`,checkpoint:(e)=>`wf:${r(e)}:ckpt`,checkpointHistory:(e,t)=>`wf:${r(e)}:ckpt:${String(t).padStart(10,"0")}`,timelinePrefix:(e)=>`wf:${r(e)}:timeline:`,timeline:(e,t)=>`wf:${r(e)}:timeline:${String(t).padStart(10,"0")}`,schedule:(e)=>`schedule:${r(e)}`,scheduleTick:(e,t)=>`schedule-due:${String(e).padStart(16,"0")}:${r(t)}`,scheduleRun:(e)=>`schedule-run:${r(e)}`,scheduleRunLink:(e)=>`schedule-run-link:${r(e)}`,scheduleRunBySchedulePrefix:(e)=>`schedule-run-by-schedule:${r(e)}:`,scheduleRunBySchedule:(e,t)=>`schedule-run-by-schedule:${r(e)}:${r(t)}`,operation:(e,t,n)=>`op:${e}:${o(t)}:${n}`,operationInflight:(e)=>`op:inflight:${e}`,operationQueued:(e)=>`op:queued:${e}`,operationResolved:(e)=>`op:resolved:${e}`,bulkOperationAuditPrefix:()=>"audit:bulk:",bulkOperationAudit:(e,t,n)=>`audit:bulk:${o(e)}:${r(t)}:${r(n)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(e,t)=>`op:resolved-by-time:${o(e)}:${r(t)}`,asyncActivity:(e,t)=>`async-act:v1:${r(e)}:${r(t)}`,asyncActivityResolution:(e,t)=>`async-act:v1:${r(e)}:${r(t)}:resolution`,activityReconciliationPrefix:(e)=>`actrec:v1:${r(e)}:`,activityReconciliation:(e,t,n)=>`actrec:v1:${r(e)}:${r(t)}:${n}`,eventPrefix:(e)=>`ev:${r(e)}:`,event:(e,t)=>`ev:${r(e)}:${String(t).padStart(10,"0")}`,eventHead:(e)=>`ev:${r(e)}:head`,eventWatermark:(e)=>`ev:${r(e)}:watermark`,fleetEventPrefix:()=>"fleet-event:",fleetEvent:(e)=>`fleet-event:${String(e).padStart(10,"0")}`,fleetEventTail:()=>"fleet-event-tail",fleetEventWatermark:()=>"fleet-event-watermark",fleetEventByWorkflowPrefix:(e)=>`fleet-event-by-workflow:${r(e)}:`,fleetEventByWorkflow:(e,t)=>`fleet-event-by-workflow:${r(e)}:${String(t).padStart(10,"0")}`,signal:(e,t,n)=>A(e,t,n,V),startSignal:(e,t,n)=>A(e,t,n,H),signalSequence:(e)=>`sigseq:v1:${r(e)}`,signalAcceptedResponsePrefix:(e)=>`sigres:v1:${r(e)}:`,signalAcceptedResponse:(e,t,n)=>`sigres:v1:${r(e)}:${r(t)}:${r(n)}`,deadline:(e,t)=>`wf-deadline:${o(e)}:${r(t)}`,terminalCleanup:(e,t)=>`wf-cleanup:${o(e)}:${r(t)}`,teardownTimer:(e,t)=>`wf-teardown:${o(e)}:${r(t)}`,delayedStart:(e,t)=>`wf-delayed:${o(e)}:${r(t)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(e,t)=>`wf-terminal:${o(e)}:${r(t)}`,attribute:(e)=>`attr:${r(e)}`,attributeIndex:(e,t,n)=>`idx:${e}:${t}:${r(n)}`,tagIndex:(e,t)=>`tag:${r(e)}:${r(t)}`,updatePrefix:(e)=>`upd:${r(e)}:`,update:(e,t)=>`upd:${r(e)}:${t}`,updateResponse:(e)=>`upr:${e}`,updateIdempotency:(e,t)=>`upk:${r(e)}:${t}`,startIdempotency:(e)=>`start-idem:${r(e)}`,startIdempotencySignalId:(e)=>`start-idem:${e}`,livenessPrefix:()=>"liveness:",liveness:(e)=>`liveness:${r(e)}`,leasePrefix:()=>"lease:",leaseEpoch:()=>"lease:epoch",leaseHolder:()=>"lease:holder",...v,budget:(e,t,n)=>`budget:${e}:${t}:${n}`,review:(e,t)=>`review:${r(e)}:${t}`,workflowHeaders:(e)=>`wf-headers:${r(e)}`,childCancellationPrefix:(e)=>`child-cancel:${r(e)}:`,childCancellation:(e,t)=>`child-cancel:${r(e)}:${r(t)}`,childWorkflowByParentPrefix:(e,t)=>`child-by-parent:${r(e)}:${t===void 0?"":`${r(t)}:`}`,childWorkflowByParent:(e,t,n)=>`child-by-parent:${r(e)}:${t===void 0?"":`${r(t)}:`}${r(n)}`,terminalCleanupNeeded:(e)=>`wf-cleanup-needed:${r(e)}`,workflowConcurrency:(e,t)=>`wf-concurrency:${r(e)}:${r(t)}`,workflowConcurrencyHolder:(e)=>`wf-concurrency-holder:${r(e)}`,workflowHasServices:(e)=>`wf-has-services:${r(e)}`,finalizerState:(e)=>`wf-finalizer-state:${r(e)}`,teardownOwed:(e)=>`wf-teardown-needed:${r(e)}`,teardownSucceeded:(e)=>`wf-teardown-succeeded:${r(e)}`,teardownDeadLetter:(e)=>`wf-teardown-deadletter:${r(e)}`,offload:(e,t)=>`offload:${r(e)}:${t}`,archive:(e,t)=>`archive:${r(e)}:${t}`,stateExecution:(e,t)=>`state:execution:${r(e)}:${r(t)}`,stateWorkflow:(e,t)=>`state:workflow-scope:${m}:${r(e)}:${r(t)}`,streamChunkPrefix:(e,t)=>`blob:${r(e)}:${t}:chunk:`,streamChunk:(e,t,n)=>`blob:${r(e)}:${t}:chunk:${String(n).padStart(10,"0")}`,streamTail:(e,t)=>`blob:${r(e)}:${t}:tail`,streamMetadata:(e,t)=>`blob:${r(e)}:${t}:meta`,budgetCharged:(e)=>`budget-charged:${e}`,toolEffect:(e,t,n)=>`tool-effect:${r(e)}:${t}:${n}`,workflowVisibilityStatus:(e,t)=>`wf-idx-status:${r(e)}:${r(t)}`,workflowVisibilityType:(e,t)=>`wf-idx-type:${r(e)}:${r(t)}`,workflowVisibilityCreated:(e,t)=>`wf-idx-created:${o(e)}:${r(t)}`,workflowVisibilityUpdated:(e,t)=>`wf-idx-updated:${o(e)}:${r(t)}`,workflowVisibilityDeadline:(e,t)=>`wf-idx-deadline:${o(e)}:${r(t)}`,workflowVisibilityManifest:(e)=>`wf-idx-manifest:${r(e)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"};var c;function q(){if(c&&"bun"in c)return c.bun;return globalThis.Bun}function P(){return typeof q()<"u"}function F(){if(c&&"process"in c)return c.process;return globalThis.process}function O(e){let t=F();if(typeof t?.getBuiltinModule!=="function")return;return t.getBuiltinModule(e)}function k(){let e=O("node:zlib");if(!e)throw Error("gzip/gunzip require Bun or Node 22.5+ (process.getBuiltinModule). "+"Not available in browser or edge runtimes \u2014 use CompressionStream directly.");return e}function E(e){if(P())return new Uint8Array(Bun.gzipSync(new Uint8Array(e)));return new Uint8Array(k().gzipSync(e))}function R(e){if(P())return new Uint8Array(Bun.gunzipSync(new Uint8Array(e)));return new Uint8Array(k().gunzipSync(e))}function T(){return O("node:zlib")}function U(){let e=T();if(!e)throw Error("Brotli compression requires Bun or Node 22.5+ with process.getBuiltinModule support. Use gzip compression for browser/edge runtimes.");return e}function W(e){return new Uint8Array(U().brotliCompressSync(e))}function G(e){return new Uint8Array(U().brotliDecompressSync(e))}var g=193,h=0,_=1,I=2,s=2;function z(e){return Y(e)}function Y(e){switch(e){case"gzip":return{algorithm:"gzip",compress(t){return E(t)}};case"brotli":return{algorithm:"brotli",compress(t){return W(t)}};case"none":return{algorithm:"none",compress(t){return t}}}}async function b(e,t,n){if(e.length<n||t.algorithm==="none"){let a=new Uint8Array(e.length+s);return a[0]=g,a[1]=h,a.set(e,s),a}let i=await t.compress(e);if(i.length+s>=e.length+s){let a=new Uint8Array(e.length+s);return a[0]=g,a[1]=h,a.set(e,s),a}let p=t.algorithm==="gzip"?_:I,d=new Uint8Array(i.length+s);return d[0]=g,d[1]=p,d.set(i,s),d}async function w(e){if(e.length<s)throw Error("Compression payload missing 2-byte header.");if(e[0]!==g)throw Error("Compression payload missing magic byte 0xC1.");let t=e[1],n=e.slice(s);switch(t){case h:return n;case _:return R(n);case I:return G(n);default:throw Error(`Compression payload uses unsupported algorithm byte 0x${t.toString(16).padStart(2,"0")}.`)}}var Z=4096,X="gzip";function L(e){return{threshold:e?.threshold??Z,algorithm:e?.algorithm??X}}class j{#e;#t;#r;constructor(e,t){this.#e=e;let n=L(t);if(this.#t=z(n.algorithm),this.#r=n.threshold,e.query){let i=e.query.bind(e);Object.defineProperty(this,"query",{value:i,enumerable:!0,configurable:!0})}}capabilities(){let e=this.#e.capabilities();return{persistence:e.persistence,readAfterWrite:e.readAfterWrite,scanConsistency:e.scanConsistency,atomicBatch:e.atomicBatch,conditionalBatch:!1,boundedRangeDelete:!1}}async get(e){let t=await this.#e.get(e);if(!t)return null;return w(t)}async put(e,t){let n=await b(t,this.#t,this.#r);return this.#e.put(e,n)}async delete(e){return this.#e.delete(e)}async*scan(e,t){for await(let[n,i]of this.#e.scan(e,t))yield[n,await w(i)]}async batch(e){u("batch operations",e.length);let t=await Promise.all(e.map(async(n)=>{if(n.type==="put")return{type:"put",key:n.key,value:await b(n.value,this.#t,this.#r)};return n}));return this.#e.batch(t)}[Symbol.dispose](){this.#e[Symbol.dispose]()}}export{j as CompressedStorage};
2
+ var re=import.meta.require;function m(e,t,n){if(!e.capabilities()[t])throw Error(`Feature "${n}" requires storage capability "${t}", but this storage backend does not provide it.`)}function q(e){let t=e.capabilities(),n=[];if(t.persistence!=="local"&&t.persistence!=="remote")n.push(`persistence must be "local" or "remote" (got "${t.persistence}")`);if(t.readAfterWrite!=="linearizable")n.push(`readAfterWrite must be "linearizable" (got "${t.readAfterWrite}")`);if(t.scanConsistency!=="snapshot")n.push(`scanConsistency must be "snapshot" (got "${t.scanConsistency}")`);if(!t.atomicBatch)n.push("atomicBatch must be true");if(!t.conditionalBatch)n.push("conditionalBatch must be true");if(n.length>0)throw Error(`Storage is not durable enough for recovery: ${n.join("; ")}.`)}function r(e){return encodeURIComponent(e)}function H(e){return decodeURIComponent(e)}function W(e){try{return decodeURIComponent(e)}catch{return null}}function o(e){return String(e).padStart(16,"0")}var x={catalogEntry:(e,t)=>`catalog-entry:${r(e)}:${r(t)}`,catalogEntryPrefix:(e)=>`catalog-entry:${r(e)}:`,catalogActive:(e)=>`catalog-active:${r(e)}`,catalogTombstone:(e,t)=>`catalog-tombstone:${r(e)}:${r(t)}`,catalogTombstonePrefix:()=>"catalog-tombstone:"};var y="default";async function v(e,t){return await e.get(t)!==null}async function*p(e,t,n){for await(let[i]of e.scan(t,n))yield i}async function C(e,t){let n=0;for await(let i of p(e,t))n++;return n}async function A(e,t){let n=[];for await(let i of p(e,t))n.push({type:"delete",key:i});if(n.length===0)return 0;return await e.batch(n),n.length}async function le(e,t,n){let i=[];for await(let f of p(e,t,n))i.push({type:"delete",key:f});if(i.length===0)return 0;return await e.batch(i),i.length}var B={applicationMailbox:(e,t)=>`appmbx:v1:${r(e)}:${r(t)}`,applicationMailboxSinkProbe:(e,t,n)=>`appprobe:v1:${r(e)}:${r(t)}:${r(n)}`,applicationCommandPrefix:(e,t)=>`appcmd:v1:${r(e)}:${r(t)}:`,applicationCommand:(e,t,n)=>`appcmd:v1:${r(e)}:${r(t)}:${r(n)}`,applicationCommandReadyPrefix:(e,t)=>`appready:v1:${r(e)}:${r(t)}:`,applicationCommandReady:(e,t,n)=>`appready:v1:${r(e)}:${r(t)}:${o(n)}`,applicationCommandIdempotency:(e,t,n)=>`appidem:v1:${r(e)}:${r(t)}:${r(n)}`,applicationCommandBySequencePrefix:(e,t)=>`appseq:v1:${r(e)}:${r(t)}:`,applicationCommandBySequence:(e,t,n)=>`appseq:v1:${r(e)}:${r(t)}:${o(n)}`,applicationCommandTerminalPrefix:(e,t)=>`appterm:v1:${r(e)}:${r(t)}:`,applicationCommandTerminal:(e,t,n,i)=>`appterm:v1:${r(e)}:${r(t)}:${o(n)}:${r(i)}`};var P={applicationOutbox:(e,t)=>`appobx:v1:${r(e)}:${r(t)}`,applicationOutboxSinkProbe:(e,t,n)=>`appprobe:v1:outbox:${r(e)}:${r(t)}:${r(n)}`,applicationDeliveryPrefix:(e,t)=>`appdlv:v1:${r(e)}:${r(t)}:`,applicationDelivery:(e,t,n)=>`appdlv:v1:${r(e)}:${r(t)}:${r(n)}`,applicationDeliveryDuePrefix:(e,t)=>`appdue:v1:${r(e)}:${r(t)}:`,applicationDeliveryDue:(e,t,n,i)=>`appdue:v1:${r(e)}:${r(t)}:${o(n)}:${r(i)}`,applicationDeliveryIdempotency:(e,t,n)=>`appdidem:v1:${r(e)}:${r(t)}:${r(n)}`,applicationDeliveryBySequencePrefix:(e,t)=>`appdseq:v1:${r(e)}:${r(t)}:`,applicationDeliveryBySequence:(e,t,n)=>`appdseq:v1:${r(e)}:${r(t)}:${o(n)}`,applicationDeliveryTerminalPrefix:(e,t)=>`appdterm:v1:${r(e)}:${r(t)}:`,applicationDeliveryTerminal:(e,t,n,i)=>`appdterm:v1:${r(e)}:${r(t)}:${o(n)}:${r(i)}`};var O={workflowOwnerEpoch:(e)=>`wf-owner-epoch:${r(e)}`,workflowOwnerHolder:(e)=>`wf-owner-holder:${r(e)}`,ownershipModeMarker:()=>"ownership-mode-marker"};var V=["actrec:","appcmd:","appdidem:","appdlv:","appdseq:","appdterm:","appdue:","appidem:","appmbx:","appobx:","appprobe:","appready:","appseq:","appterm:","archive:","async-act:","attr:","audit:bulk:","blob:","budget:","budget-charged:","catalog-active:","catalog-entry:","catalog-tombstone:","child-by-parent:","ev:","fleet-event-by-workflow:","fleet-event:","fleet-event-tail","fleet-event-watermark","idx:","lease:","liveness:","offload:","ownership-mode-marker","op:","review:","schedule:","schedule-due:","schedule-run-by-schedule:","schedule-run-link:","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-owner-epoch:","wf-owner-holder:","wf-teardown:","wf-teardown-deadletter:","wf-teardown-needed:","wf-teardown-succeeded:","wf-terminal:"];var b=1e4,Be=1e4;class k extends Error{code="StorageBatchOperationLimitExceededError";cap=b;count;target;constructor(e,t){super(`${e} count ${t} exceeds MAX_BATCH_OPERATIONS (${b}).`);this.name="StorageBatchOperationLimitExceededError",this.target=e,this.count=t}}function g(e,t){if(t>b)throw new k(e,t)}function Pe(e){return e.length>0?e.slice(0,-1)+String.fromCharCode(e.charCodeAt(e.length-1)+1):"\xFF"}function Oe(e,t={}){if(t.gt!==void 0&&e<=t.gt)return!1;if(t.gte!==void 0&&e<t.gte)return!1;if(t.lt!==void 0&&e>=t.lt)return!1;if(t.lte!==void 0&&e>t.lte)return!1;return!0}function Ee(e,t){if(e===null||t===null)return e===t;if(e.byteLength!==t.byteLength)return!1;for(let n=0;n<e.byteLength;n++)if(e[n]!==t[n])return!1;return!0}async function ke(e,t){if(e.has)return e.has(t);return v(e,t)}function Te(e,t,n){if(e.keys)return e.keys(t,n);return p(e,t,n)}async function Re(e,t){if(e.count)return e.count(t);return C(e,t)}async function Ue(e,t){if(e.deletePrefix)return e.deletePrefix(t);return A(e,t)}async function _e(e,t){g("batch operations",t.length),await e.batch(t)}async function De(e,t,n){if(g("conditionalBatch conditions",t.length),g("conditionalBatch operations",n.length),m(e,"conditionalBatch","storageConditionalBatch"),!e.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return e.conditionalBatch(t,n)}var s=o,F="0",G="1",E=(e,t,n,i)=>`sig:${r(e)}:${r(t)}:${i}:${r(n)}`,Ie={workflow:(e)=>`wf:${r(e)}`,checkpoint:(e)=>`wf:${r(e)}:ckpt`,checkpointHistory:(e,t)=>`wf:${r(e)}:ckpt:${String(t).padStart(10,"0")}`,timelinePrefix:(e)=>`wf:${r(e)}:timeline:`,timeline:(e,t)=>`wf:${r(e)}:timeline:${String(t).padStart(10,"0")}`,schedule:(e)=>`schedule:${r(e)}`,scheduleTick:(e,t)=>`schedule-due:${String(e).padStart(16,"0")}:${r(t)}`,scheduleRun:(e)=>`schedule-run:${r(e)}`,scheduleRunLink:(e)=>`schedule-run-link:${r(e)}`,scheduleRunBySchedulePrefix:(e)=>`schedule-run-by-schedule:${r(e)}:`,scheduleRunBySchedule:(e,t)=>`schedule-run-by-schedule:${r(e)}:${r(t)}`,operation:(e,t,n)=>`op:${e}:${s(t)}:${n}`,operationInflight:(e)=>`op:inflight:${e}`,operationQueued:(e)=>`op:queued:${e}`,operationResolved:(e)=>`op:resolved:${e}`,bulkOperationAuditPrefix:()=>"audit:bulk:",bulkOperationAudit:(e,t,n)=>`audit:bulk:${s(e)}:${r(t)}:${r(n)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(e,t)=>`op:resolved-by-time:${s(e)}:${r(t)}`,asyncActivity:(e,t)=>`async-act:v1:${r(e)}:${r(t)}`,asyncActivityResolution:(e,t)=>`async-act:v1:${r(e)}:${r(t)}:resolution`,activityReconciliationPrefix:(e)=>`actrec:v1:${r(e)}:`,activityReconciliation:(e,t,n)=>`actrec:v1:${r(e)}:${r(t)}:${n}`,eventPrefix:(e)=>`ev:${r(e)}:`,event:(e,t)=>`ev:${r(e)}:${String(t).padStart(10,"0")}`,eventHead:(e)=>`ev:${r(e)}:head`,eventWatermark:(e)=>`ev:${r(e)}:watermark`,fleetEventPrefix:()=>"fleet-event:",fleetEvent:(e)=>`fleet-event:${String(e).padStart(10,"0")}`,fleetEventTail:()=>"fleet-event-tail",fleetEventWatermark:()=>"fleet-event-watermark",fleetEventByWorkflowPrefix:(e)=>`fleet-event-by-workflow:${r(e)}:`,fleetEventByWorkflow:(e,t)=>`fleet-event-by-workflow:${r(e)}:${String(t).padStart(10,"0")}`,signal:(e,t,n)=>E(e,t,n,G),startSignal:(e,t,n)=>E(e,t,n,F),signalSequence:(e)=>`sigseq:v1:${r(e)}`,signalAcceptedResponsePrefix:(e)=>`sigres:v1:${r(e)}:`,signalAcceptedResponse:(e,t,n)=>`sigres:v1:${r(e)}:${r(t)}:${r(n)}`,deadline:(e,t)=>`wf-deadline:${s(e)}:${r(t)}`,terminalCleanup:(e,t)=>`wf-cleanup:${s(e)}:${r(t)}`,teardownTimer:(e,t)=>`wf-teardown:${s(e)}:${r(t)}`,delayedStart:(e,t)=>`wf-delayed:${s(e)}:${r(t)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(e,t)=>`wf-terminal:${s(e)}:${r(t)}`,attribute:(e)=>`attr:${r(e)}`,attributeIndex:(e,t,n)=>`idx:${e}:${t}:${r(n)}`,tagIndex:(e,t)=>`tag:${r(e)}:${r(t)}`,updatePrefix:(e)=>`upd:${r(e)}:`,update:(e,t)=>`upd:${r(e)}:${t}`,updateResponse:(e)=>`upr:${e}`,updateIdempotency:(e,t)=>`upk:${r(e)}:${t}`,startIdempotency:(e)=>`start-idem:${r(e)}`,startIdempotencySignalId:(e)=>`start-idem:${e}`,livenessPrefix:()=>"liveness:",liveness:(e)=>`liveness:${r(e)}`,leasePrefix:()=>"lease:",leaseEpoch:()=>"lease:epoch",leaseHolder:()=>"lease:holder",...B,...P,...O,...x,budget:(e,t,n)=>`budget:${e}:${t}:${n}`,review:(e,t)=>`review:${r(e)}:${t}`,workflowHeaders:(e)=>`wf-headers:${r(e)}`,childCancellationPrefix:(e)=>`child-cancel:${r(e)}:`,childCancellation:(e,t)=>`child-cancel:${r(e)}:${r(t)}`,childWorkflowByParentPrefix:(e,t)=>`child-by-parent:${r(e)}:${t===void 0?"":`${r(t)}:`}`,childWorkflowByParent:(e,t,n)=>`child-by-parent:${r(e)}:${t===void 0?"":`${r(t)}:`}${r(n)}`,terminalCleanupNeeded:(e)=>`wf-cleanup-needed:${r(e)}`,workflowConcurrency:(e,t)=>`wf-concurrency:${r(e)}:${r(t)}`,workflowConcurrencyHolder:(e)=>`wf-concurrency-holder:${r(e)}`,workflowHasServices:(e)=>`wf-has-services:${r(e)}`,finalizerState:(e)=>`wf-finalizer-state:${r(e)}`,teardownOwed:(e)=>`wf-teardown-needed:${r(e)}`,teardownSucceeded:(e)=>`wf-teardown-succeeded:${r(e)}`,teardownDeadLetter:(e)=>`wf-teardown-deadletter:${r(e)}`,offload:(e,t)=>`offload:${r(e)}:${t}`,archive:(e,t)=>`archive:${r(e)}:${t}`,stateExecution:(e,t)=>`state:execution:${r(e)}:${r(t)}`,stateWorkflow:(e,t)=>`state:workflow-scope:${y}:${r(e)}:${r(t)}`,streamChunkPrefix:(e,t)=>`blob:${r(e)}:${t}:chunk:`,streamChunk:(e,t,n)=>`blob:${r(e)}:${t}:chunk:${String(n).padStart(10,"0")}`,streamTail:(e,t)=>`blob:${r(e)}:${t}:tail`,streamMetadata:(e,t)=>`blob:${r(e)}:${t}:meta`,budgetCharged:(e)=>`budget-charged:${e}`,toolEffect:(e,t,n)=>`tool-effect:${r(e)}:${t}:${n}`,workflowVisibilityStatus:(e,t)=>`wf-idx-status:${r(e)}:${r(t)}`,workflowVisibilityType:(e,t)=>`wf-idx-type:${r(e)}:${r(t)}`,workflowVisibilityCreated:(e,t)=>`wf-idx-created:${s(e)}:${r(t)}`,workflowVisibilityUpdated:(e,t)=>`wf-idx-updated:${s(e)}:${r(t)}`,workflowVisibilityDeadline:(e,t)=>`wf-idx-deadline:${s(e)}:${r(t)}`,workflowVisibilityManifest:(e)=>`wf-idx-manifest:${r(e)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"};var l;function Y(){if(l&&"bun"in l)return l.bun;return globalThis.Bun}function T(){return typeof Y()<"u"}function X(){if(l&&"process"in l)return l.process;return globalThis.process}function R(e){let t=X();if(typeof t?.getBuiltinModule!=="function")return;return t.getBuiltinModule(e)}function U(){let e=R("node:zlib");if(!e)throw Error("gzip/gunzip require Bun or Node 22.5+ (process.getBuiltinModule). "+"Not available in browser or edge runtimes \u2014 use CompressionStream directly.");return e}function _(e){if(T())return new Uint8Array(Bun.gzipSync(new Uint8Array(e)));return new Uint8Array(U().gzipSync(e))}function D(e){if(T())return new Uint8Array(Bun.gunzipSync(new Uint8Array(e)));return new Uint8Array(U().gunzipSync(e))}function I(){return R("node:zlib")}function L(){let e=I();if(!e)throw Error("Brotli compression requires Bun or Node 22.5+ with process.getBuiltinModule support. Use gzip compression for browser/edge runtimes.");return e}function Z(e){return new Uint8Array(L().brotliCompressSync(e))}function j(e){return new Uint8Array(L().brotliDecompressSync(e))}var d=193,h=0,z=1,K=2,a=2;function M(e){return Q(e)}function Q(e){switch(e){case"gzip":return{algorithm:"gzip",compress(t){return _(t)}};case"brotli":return{algorithm:"brotli",compress(t){return Z(t)}};case"none":return{algorithm:"none",compress(t){return t}};default:throw Error(`Unknown compression algorithm: ${JSON.stringify(e)}`)}}async function w(e,t,n){if(e.length<n||t.algorithm==="none"){let c=new Uint8Array(e.length+a);return c[0]=d,c[1]=h,c.set(e,a),c}let i=await t.compress(e);if(i.length+a>=e.length+a){let c=new Uint8Array(e.length+a);return c[0]=d,c[1]=h,c.set(e,a),c}let f=t.algorithm==="gzip"?z:K,u=new Uint8Array(i.length+a);return u[0]=d,u[1]=f,u.set(i,a),u}async function S(e){if(e.length<a)throw Error("Compression payload missing 2-byte header.");if(e[0]!==d)throw Error("Compression payload missing magic byte 0xC1.");let t=e[1],n=e.slice(a);switch(t){case h:return n;case z:return D(n);case K:return j(n);default:throw Error(`Compression payload uses unsupported algorithm byte 0x${t.toString(16).padStart(2,"0")}.`)}}var J=4096,ee="gzip";function N(e){return{threshold:e?.threshold??J,algorithm:e?.algorithm??ee}}class te{#e;#t;#r;constructor(e,t){this.#e=e;let n=N(t);if(this.#t=M(n.algorithm),this.#r=n.threshold,e.query){let i=e.query.bind(e);Object.defineProperty(this,"query",{value:i,enumerable:!0,configurable:!0})}}capabilities(){let e=this.#e.capabilities();return{persistence:e.persistence,readAfterWrite:e.readAfterWrite,scanConsistency:e.scanConsistency,atomicBatch:e.atomicBatch,conditionalBatch:!1,boundedRangeDelete:!1}}async get(e){let t=await this.#e.get(e);if(!t)return null;return S(t)}async put(e,t){let n=await w(t,this.#t,this.#r);return this.#e.put(e,n)}async delete(e){return this.#e.delete(e)}async*scan(e,t){for await(let[n,i]of this.#e.scan(e,t))yield[n,await S(i)]}async batch(e){g("batch operations",e.length);let t=await Promise.all(e.map(async(n)=>{if(n.type==="put")return{type:"put",key:n.key,value:await w(n.value,this.#t,this.#r)};return n}));return this.#e.batch(t)}[Symbol.dispose](){this.#e[Symbol.dispose]()}}export{te as CompressedStorage};
@@ -7,7 +7,7 @@ export async function* storageKeysCore(storage, prefix, options) {
7
7
  }
8
8
  export async function storageCountCore(storage, prefix) {
9
9
  let count = 0;
10
- for await (const _key of storageKeysCore(storage, prefix))
10
+ for await (const _ of storageKeysCore(storage, prefix))
11
11
  count++;
12
12
  return count;
13
13
  }
@@ -116,9 +116,36 @@ declare const exportedKeys: {
116
116
  readonly workflowVisibilityMetaVersion: () => string;
117
117
  readonly workflowVisibilityMetaBuiltAt: () => string;
118
118
  readonly workflowVisibilityMetaCursor: () => string;
119
+ readonly catalogEntry: (name: string, revision: string) => string;
120
+ readonly catalogEntryPrefix: (name: string) => string;
121
+ readonly catalogActive: (name: string) => string;
122
+ readonly catalogTombstone: (name: string, revision: string) => string;
123
+ readonly catalogTombstonePrefix: () => string;
119
124
  readonly workflowOwnerEpoch: (workflowId: string) => string;
120
125
  readonly workflowOwnerHolder: (workflowId: string) => string;
121
126
  readonly ownershipModeMarker: () => string;
127
+ readonly applicationOutbox: (namespace: string, ownerId: string) => string;
128
+ readonly applicationOutboxSinkProbe: (namespace: string, ownerId: string, nonce: string) => string;
129
+ readonly applicationDeliveryPrefix: (namespace: string, ownerId: string) => string;
130
+ readonly applicationDelivery: (namespace: string, ownerId: string, deliveryId: string) => string;
131
+ readonly applicationDeliveryDuePrefix: (namespace: string, ownerId: string) => string;
132
+ readonly applicationDeliveryDue: (namespace: string, ownerId: string, availableAt: number, deliveryId: string) => string;
133
+ readonly applicationDeliveryIdempotency: (namespace: string, ownerId: string, key: string) => string;
134
+ readonly applicationDeliveryBySequencePrefix: (namespace: string, ownerId: string) => string;
135
+ readonly applicationDeliveryBySequence: (namespace: string, ownerId: string, sequence: number) => string;
136
+ readonly applicationDeliveryTerminalPrefix: (namespace: string, ownerId: string) => string;
137
+ readonly applicationDeliveryTerminal: (namespace: string, ownerId: string, terminalAt: number, deliveryId: string) => string;
138
+ readonly applicationMailbox: (namespace: string, resourceId: string) => string;
139
+ readonly applicationMailboxSinkProbe: (namespace: string, resourceId: string, nonce: string) => string;
140
+ readonly applicationCommandPrefix: (namespace: string, resourceId: string) => string;
141
+ readonly applicationCommand: (namespace: string, resourceId: string, commandId: string) => string;
142
+ readonly applicationCommandReadyPrefix: (namespace: string, resourceId: string) => string;
143
+ readonly applicationCommandReady: (namespace: string, resourceId: string, sequence: number) => string;
144
+ readonly applicationCommandIdempotency: (namespace: string, resourceId: string, key: string) => string;
145
+ readonly applicationCommandBySequencePrefix: (namespace: string, resourceId: string) => string;
146
+ readonly applicationCommandBySequence: (namespace: string, resourceId: string, sequence: number) => string;
147
+ readonly applicationCommandTerminalPrefix: (namespace: string, resourceId: string) => string;
148
+ readonly applicationCommandTerminal: (namespace: string, resourceId: string, terminalAt: number, commandId: string) => string;
122
149
  readonly workflow: (id: string) => string;
123
150
  readonly checkpoint: (id: string) => string;
124
151
  readonly checkpointHistory: (id: string, step: number) => string;
@@ -357,7 +384,7 @@ declare const exportedTextValueStore: typeof textValueStore;
357
384
  * void isWeftKey;
358
385
  * ```
359
386
  */
360
- declare const exportedWeftReservedKeyPrefixes: readonly ["actrec:", "archive:", "async-act:", "attr:", "audit:bulk:", "blob:", "budget:", "budget-charged:", "child-by-parent:", "ev:", "fleet-event-by-workflow:", "fleet-event:", "fleet-event-tail", "fleet-event-watermark", "idx:", "lease:", "liveness:", "offload:", "ownership-mode-marker", "op:", "review:", "schedule:", "schedule-due:", "schedule-run-by-schedule:", "schedule-run-link:", "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-owner-epoch:", "wf-owner-holder:", "wf-teardown:", "wf-teardown-deadletter:", "wf-teardown-needed:", "wf-teardown-succeeded:", "wf-terminal:"];
387
+ declare const exportedWeftReservedKeyPrefixes: readonly ["actrec:", "appcmd:", "appdidem:", "appdlv:", "appdseq:", "appdterm:", "appdue:", "appidem:", "appmbx:", "appobx:", "appprobe:", "appready:", "appseq:", "appterm:", "archive:", "async-act:", "attr:", "audit:bulk:", "blob:", "budget:", "budget-charged:", "catalog-active:", "catalog-entry:", "catalog-tombstone:", "child-by-parent:", "ev:", "fleet-event-by-workflow:", "fleet-event:", "fleet-event-tail", "fleet-event-watermark", "idx:", "lease:", "liveness:", "offload:", "ownership-mode-marker", "op:", "review:", "schedule:", "schedule-due:", "schedule-run-by-schedule:", "schedule-run-link:", "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-owner-epoch:", "wf-owner-holder:", "wf-teardown:", "wf-teardown-deadletter:", "wf-teardown-needed:", "wf-teardown-succeeded:", "wf-terminal:"];
361
388
  /**
362
389
  * Re-exported {@link withCodec}. See the original declaration for full docs.
363
390
  *
@@ -298,7 +298,7 @@ export declare function storageBatch(storage: Storage, operations: BatchOperatio
298
298
  * ```
299
299
  */
300
300
  export declare function storageConditionalBatch(storage: Storage, conditions: ConditionalBatchCondition[], operations: BatchOperation[]): Promise<boolean>;
301
- export { decodeStorageKeyComponent, encodeStorageKeyComponent, tryDecodeStorageKeyComponent, } from './key-encoding.ts';
301
+ export { decodeStorageKeyComponent, encodeStorageKeyComponent, formatSortableStorageTimestamp, tryDecodeStorageKeyComponent, } from './key-encoding.ts';
302
302
  /**
303
303
  * Key layout constants for hierarchical key encoding. Timestamps are
304
304
  * zero-padded to 16 digits for lexicographic ordering.
@@ -395,9 +395,36 @@ export declare const KEYS: {
395
395
  readonly workflowVisibilityMetaVersion: () => string;
396
396
  readonly workflowVisibilityMetaBuiltAt: () => string;
397
397
  readonly workflowVisibilityMetaCursor: () => string;
398
+ readonly catalogEntry: (name: string, revision: string) => string;
399
+ readonly catalogEntryPrefix: (name: string) => string;
400
+ readonly catalogActive: (name: string) => string;
401
+ readonly catalogTombstone: (name: string, revision: string) => string;
402
+ readonly catalogTombstonePrefix: () => string;
398
403
  readonly workflowOwnerEpoch: (workflowId: string) => string;
399
404
  readonly workflowOwnerHolder: (workflowId: string) => string;
400
405
  readonly ownershipModeMarker: () => string;
406
+ readonly applicationOutbox: (namespace: string, ownerId: string) => string;
407
+ readonly applicationOutboxSinkProbe: (namespace: string, ownerId: string, nonce: string) => string;
408
+ readonly applicationDeliveryPrefix: (namespace: string, ownerId: string) => string;
409
+ readonly applicationDelivery: (namespace: string, ownerId: string, deliveryId: string) => string;
410
+ readonly applicationDeliveryDuePrefix: (namespace: string, ownerId: string) => string;
411
+ readonly applicationDeliveryDue: (namespace: string, ownerId: string, availableAt: number, deliveryId: string) => string;
412
+ readonly applicationDeliveryIdempotency: (namespace: string, ownerId: string, key: string) => string;
413
+ readonly applicationDeliveryBySequencePrefix: (namespace: string, ownerId: string) => string;
414
+ readonly applicationDeliveryBySequence: (namespace: string, ownerId: string, sequence: number) => string;
415
+ readonly applicationDeliveryTerminalPrefix: (namespace: string, ownerId: string) => string;
416
+ readonly applicationDeliveryTerminal: (namespace: string, ownerId: string, terminalAt: number, deliveryId: string) => string;
417
+ readonly applicationMailbox: (namespace: string, resourceId: string) => string;
418
+ readonly applicationMailboxSinkProbe: (namespace: string, resourceId: string, nonce: string) => string;
419
+ readonly applicationCommandPrefix: (namespace: string, resourceId: string) => string;
420
+ readonly applicationCommand: (namespace: string, resourceId: string, commandId: string) => string;
421
+ readonly applicationCommandReadyPrefix: (namespace: string, resourceId: string) => string;
422
+ readonly applicationCommandReady: (namespace: string, resourceId: string, sequence: number) => string;
423
+ readonly applicationCommandIdempotency: (namespace: string, resourceId: string, key: string) => string;
424
+ readonly applicationCommandBySequencePrefix: (namespace: string, resourceId: string) => string;
425
+ readonly applicationCommandBySequence: (namespace: string, resourceId: string, sequence: number) => string;
426
+ readonly applicationCommandTerminalPrefix: (namespace: string, resourceId: string) => string;
427
+ readonly applicationCommandTerminal: (namespace: string, resourceId: string, terminalAt: number, commandId: string) => string;
401
428
  readonly workflow: (id: string) => string;
402
429
  readonly checkpoint: (id: string) => string;
403
430
  readonly checkpointHistory: (id: string, step: number) => string;
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- var k=import.meta.require;function s(e,t,n){if(!e.capabilities()[t])throw Error(`Feature "${n}" requires storage capability "${t}", but this storage backend does not provide it.`)}function w(e){let t=e.capabilities(),n=[];if(t.persistence!=="local"&&t.persistence!=="remote")n.push(`persistence must be "local" or "remote" (got "${t.persistence}")`);if(t.readAfterWrite!=="linearizable")n.push(`readAfterWrite must be "linearizable" (got "${t.readAfterWrite}")`);if(t.scanConsistency!=="snapshot")n.push(`scanConsistency must be "snapshot" (got "${t.scanConsistency}")`);if(!t.atomicBatch)n.push("atomicBatch must be true");if(!t.conditionalBatch)n.push("conditionalBatch must be true");if(n.length>0)throw Error(`Storage is not durable enough for recovery: ${n.join("; ")}.`)}var l="default";async function d(e,t){return await e.get(t)!==null}async function*a(e,t,n){for await(let[i]of e.scan(t,n))yield i}async function u(e,t){let n=0;for await(let i of a(e,t))n++;return n}async function f(e,t){let n=[];for await(let i of a(e,t))n.push({type:"delete",key:i});if(n.length===0)return 0;return await e.batch(n),n.length}async function O(e,t,n){let i=[];for await(let y of a(e,t,n))i.push({type:"delete",key:y});if(i.length===0)return 0;return await e.batch(i),i.length}function r(e){return encodeURIComponent(e)}function b(e){return decodeURIComponent(e)}function S(e){try{return decodeURIComponent(e)}catch{return null}}var p={workflowOwnerEpoch:(e)=>`wf-owner-epoch:${r(e)}`,workflowOwnerHolder:(e)=>`wf-owner-holder:${r(e)}`,ownershipModeMarker:()=>"ownership-mode-marker"};var x=["actrec:","archive:","async-act:","attr:","audit:bulk:","blob:","budget:","budget-charged:","child-by-parent:","ev:","fleet-event-by-workflow:","fleet-event:","fleet-event-tail","fleet-event-watermark","idx:","lease:","liveness:","offload:","ownership-mode-marker","op:","review:","schedule:","schedule-due:","schedule-run-by-schedule:","schedule-run-link:","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-owner-epoch:","wf-owner-holder:","wf-teardown:","wf-teardown-deadletter:","wf-teardown-needed:","wf-teardown-succeeded:","wf-terminal:"];var c=1e4,M=1e4;class h extends Error{code="StorageBatchOperationLimitExceededError";cap=c;count;target;constructor(e,t){super(`${e} count ${t} exceeds MAX_BATCH_OPERATIONS (${c}).`);this.name="StorageBatchOperationLimitExceededError",this.target=e,this.count=t}}function g(e,t){if(t>c)throw new h(e,t)}function U(e){return e.length>0?e.slice(0,-1)+String.fromCharCode(e.charCodeAt(e.length-1)+1):"\xFF"}function V(e,t={}){if(t.gt!==void 0&&e<=t.gt)return!1;if(t.gte!==void 0&&e<t.gte)return!1;if(t.lt!==void 0&&e>=t.lt)return!1;if(t.lte!==void 0&&e>t.lte)return!1;return!0}function q(e,t){if(e===null||t===null)return e===t;if(e.byteLength!==t.byteLength)return!1;for(let n=0;n<e.byteLength;n++)if(e[n]!==t[n])return!1;return!0}async function N(e,t){if(e.has)return e.has(t);return d(e,t)}function F(e,t,n){if(e.keys)return e.keys(t,n);return a(e,t,n)}async function z(e,t){if(e.count)return e.count(t);return u(e,t)}async function G(e,t){if(e.deletePrefix)return e.deletePrefix(t);return f(e,t)}async function X(e,t){g("batch operations",t.length),await e.batch(t)}async function Y(e,t,n){if(g("conditionalBatch conditions",t.length),g("conditionalBatch operations",n.length),s(e,"conditionalBatch","storageConditionalBatch"),!e.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return e.conditionalBatch(t,n)}var o=(e)=>String(e).padStart(16,"0"),v="0",C="1",m=(e,t,n,i)=>`sig:${r(e)}:${r(t)}:${i}:${r(n)}`,j={workflow:(e)=>`wf:${r(e)}`,checkpoint:(e)=>`wf:${r(e)}:ckpt`,checkpointHistory:(e,t)=>`wf:${r(e)}:ckpt:${String(t).padStart(10,"0")}`,timelinePrefix:(e)=>`wf:${r(e)}:timeline:`,timeline:(e,t)=>`wf:${r(e)}:timeline:${String(t).padStart(10,"0")}`,schedule:(e)=>`schedule:${r(e)}`,scheduleTick:(e,t)=>`schedule-due:${String(e).padStart(16,"0")}:${r(t)}`,scheduleRun:(e)=>`schedule-run:${r(e)}`,scheduleRunLink:(e)=>`schedule-run-link:${r(e)}`,scheduleRunBySchedulePrefix:(e)=>`schedule-run-by-schedule:${r(e)}:`,scheduleRunBySchedule:(e,t)=>`schedule-run-by-schedule:${r(e)}:${r(t)}`,operation:(e,t,n)=>`op:${e}:${o(t)}:${n}`,operationInflight:(e)=>`op:inflight:${e}`,operationQueued:(e)=>`op:queued:${e}`,operationResolved:(e)=>`op:resolved:${e}`,bulkOperationAuditPrefix:()=>"audit:bulk:",bulkOperationAudit:(e,t,n)=>`audit:bulk:${o(e)}:${r(t)}:${r(n)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(e,t)=>`op:resolved-by-time:${o(e)}:${r(t)}`,asyncActivity:(e,t)=>`async-act:v1:${r(e)}:${r(t)}`,asyncActivityResolution:(e,t)=>`async-act:v1:${r(e)}:${r(t)}:resolution`,activityReconciliationPrefix:(e)=>`actrec:v1:${r(e)}:`,activityReconciliation:(e,t,n)=>`actrec:v1:${r(e)}:${r(t)}:${n}`,eventPrefix:(e)=>`ev:${r(e)}:`,event:(e,t)=>`ev:${r(e)}:${String(t).padStart(10,"0")}`,eventHead:(e)=>`ev:${r(e)}:head`,eventWatermark:(e)=>`ev:${r(e)}:watermark`,fleetEventPrefix:()=>"fleet-event:",fleetEvent:(e)=>`fleet-event:${String(e).padStart(10,"0")}`,fleetEventTail:()=>"fleet-event-tail",fleetEventWatermark:()=>"fleet-event-watermark",fleetEventByWorkflowPrefix:(e)=>`fleet-event-by-workflow:${r(e)}:`,fleetEventByWorkflow:(e,t)=>`fleet-event-by-workflow:${r(e)}:${String(t).padStart(10,"0")}`,signal:(e,t,n)=>m(e,t,n,C),startSignal:(e,t,n)=>m(e,t,n,v),signalSequence:(e)=>`sigseq:v1:${r(e)}`,signalAcceptedResponsePrefix:(e)=>`sigres:v1:${r(e)}:`,signalAcceptedResponse:(e,t,n)=>`sigres:v1:${r(e)}:${r(t)}:${r(n)}`,deadline:(e,t)=>`wf-deadline:${o(e)}:${r(t)}`,terminalCleanup:(e,t)=>`wf-cleanup:${o(e)}:${r(t)}`,teardownTimer:(e,t)=>`wf-teardown:${o(e)}:${r(t)}`,delayedStart:(e,t)=>`wf-delayed:${o(e)}:${r(t)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(e,t)=>`wf-terminal:${o(e)}:${r(t)}`,attribute:(e)=>`attr:${r(e)}`,attributeIndex:(e,t,n)=>`idx:${e}:${t}:${r(n)}`,tagIndex:(e,t)=>`tag:${r(e)}:${r(t)}`,updatePrefix:(e)=>`upd:${r(e)}:`,update:(e,t)=>`upd:${r(e)}:${t}`,updateResponse:(e)=>`upr:${e}`,updateIdempotency:(e,t)=>`upk:${r(e)}:${t}`,startIdempotency:(e)=>`start-idem:${r(e)}`,startIdempotencySignalId:(e)=>`start-idem:${e}`,livenessPrefix:()=>"liveness:",liveness:(e)=>`liveness:${r(e)}`,leasePrefix:()=>"lease:",leaseEpoch:()=>"lease:epoch",leaseHolder:()=>"lease:holder",...p,budget:(e,t,n)=>`budget:${e}:${t}:${n}`,review:(e,t)=>`review:${r(e)}:${t}`,workflowHeaders:(e)=>`wf-headers:${r(e)}`,childCancellationPrefix:(e)=>`child-cancel:${r(e)}:`,childCancellation:(e,t)=>`child-cancel:${r(e)}:${r(t)}`,childWorkflowByParentPrefix:(e,t)=>`child-by-parent:${r(e)}:${t===void 0?"":`${r(t)}:`}`,childWorkflowByParent:(e,t,n)=>`child-by-parent:${r(e)}:${t===void 0?"":`${r(t)}:`}${r(n)}`,terminalCleanupNeeded:(e)=>`wf-cleanup-needed:${r(e)}`,workflowConcurrency:(e,t)=>`wf-concurrency:${r(e)}:${r(t)}`,workflowConcurrencyHolder:(e)=>`wf-concurrency-holder:${r(e)}`,workflowHasServices:(e)=>`wf-has-services:${r(e)}`,finalizerState:(e)=>`wf-finalizer-state:${r(e)}`,teardownOwed:(e)=>`wf-teardown-needed:${r(e)}`,teardownSucceeded:(e)=>`wf-teardown-succeeded:${r(e)}`,teardownDeadLetter:(e)=>`wf-teardown-deadletter:${r(e)}`,offload:(e,t)=>`offload:${r(e)}:${t}`,archive:(e,t)=>`archive:${r(e)}:${t}`,stateExecution:(e,t)=>`state:execution:${r(e)}:${r(t)}`,stateWorkflow:(e,t)=>`state:workflow-scope:${l}:${r(e)}:${r(t)}`,streamChunkPrefix:(e,t)=>`blob:${r(e)}:${t}:chunk:`,streamChunk:(e,t,n)=>`blob:${r(e)}:${t}:chunk:${String(n).padStart(10,"0")}`,streamTail:(e,t)=>`blob:${r(e)}:${t}:tail`,streamMetadata:(e,t)=>`blob:${r(e)}:${t}:meta`,budgetCharged:(e)=>`budget-charged:${e}`,toolEffect:(e,t,n)=>`tool-effect:${r(e)}:${t}:${n}`,workflowVisibilityStatus:(e,t)=>`wf-idx-status:${r(e)}:${r(t)}`,workflowVisibilityType:(e,t)=>`wf-idx-type:${r(e)}:${r(t)}`,workflowVisibilityCreated:(e,t)=>`wf-idx-created:${o(e)}:${r(t)}`,workflowVisibilityUpdated:(e,t)=>`wf-idx-updated:${o(e)}:${r(t)}`,workflowVisibilityDeadline:(e,t)=>`wf-idx-deadline:${o(e)}:${r(t)}`,workflowVisibilityManifest:(e)=>`wf-idx-manifest:${r(e)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"};export{l as DEFAULT_SCOPE,j as KEYS,c as MAX_BATCH_OPERATIONS,M as MAX_SCAN_LIMIT,h as StorageBatchOperationLimitExceededError,x as WEFT_RESERVED_KEY_PREFIXES,w as assertDurableStorageForRecovery,g as assertStorageBatchOperationCount,b as decodeStorageKeyComponent,r as encodeStorageKeyComponent,V as matchesScanOptions,s as requireStorageCapability,U as resolvePrefixRangeEnd,X as storageBatch,Y as storageConditionalBatch,z as storageCount,G as storageDeletePrefix,N as storageHas,F as storageKeys,q as storageValuesEqual,S as tryDecodeStorageKeyComponent};
2
+ var E=import.meta.require;function l(e,t,n){if(!e.capabilities()[t])throw Error(`Feature "${n}" requires storage capability "${t}", but this storage backend does not provide it.`)}function x(e){let t=e.capabilities(),n=[];if(t.persistence!=="local"&&t.persistence!=="remote")n.push(`persistence must be "local" or "remote" (got "${t.persistence}")`);if(t.readAfterWrite!=="linearizable")n.push(`readAfterWrite must be "linearizable" (got "${t.readAfterWrite}")`);if(t.scanConsistency!=="snapshot")n.push(`scanConsistency must be "snapshot" (got "${t.scanConsistency}")`);if(!t.atomicBatch)n.push("atomicBatch must be true");if(!t.conditionalBatch)n.push("conditionalBatch must be true");if(n.length>0)throw Error(`Storage is not durable enough for recovery: ${n.join("; ")}.`)}function r(e){return encodeURIComponent(e)}function C(e){return decodeURIComponent(e)}function P(e){try{return decodeURIComponent(e)}catch{return null}}function o(e){return String(e).padStart(16,"0")}var d={catalogEntry:(e,t)=>`catalog-entry:${r(e)}:${r(t)}`,catalogEntryPrefix:(e)=>`catalog-entry:${r(e)}:`,catalogActive:(e)=>`catalog-active:${r(e)}`,catalogTombstone:(e,t)=>`catalog-tombstone:${r(e)}:${r(t)}`,catalogTombstonePrefix:()=>"catalog-tombstone:"};var g="default";async function u(e,t){return await e.get(t)!==null}async function*s(e,t,n){for await(let[i]of e.scan(t,n))yield i}async function f(e,t){let n=0;for await(let i of s(e,t))n++;return n}async function m(e,t){let n=[];for await(let i of s(e,t))n.push({type:"delete",key:i});if(n.length===0)return 0;return await e.batch(n),n.length}async function I(e,t,n){let i=[];for await(let v of s(e,t,n))i.push({type:"delete",key:v});if(i.length===0)return 0;return await e.batch(i),i.length}var y={applicationMailbox:(e,t)=>`appmbx:v1:${r(e)}:${r(t)}`,applicationMailboxSinkProbe:(e,t,n)=>`appprobe:v1:${r(e)}:${r(t)}:${r(n)}`,applicationCommandPrefix:(e,t)=>`appcmd:v1:${r(e)}:${r(t)}:`,applicationCommand:(e,t,n)=>`appcmd:v1:${r(e)}:${r(t)}:${r(n)}`,applicationCommandReadyPrefix:(e,t)=>`appready:v1:${r(e)}:${r(t)}:`,applicationCommandReady:(e,t,n)=>`appready:v1:${r(e)}:${r(t)}:${o(n)}`,applicationCommandIdempotency:(e,t,n)=>`appidem:v1:${r(e)}:${r(t)}:${r(n)}`,applicationCommandBySequencePrefix:(e,t)=>`appseq:v1:${r(e)}:${r(t)}:`,applicationCommandBySequence:(e,t,n)=>`appseq:v1:${r(e)}:${r(t)}:${o(n)}`,applicationCommandTerminalPrefix:(e,t)=>`appterm:v1:${r(e)}:${r(t)}:`,applicationCommandTerminal:(e,t,n,i)=>`appterm:v1:${r(e)}:${r(t)}:${o(n)}:${r(i)}`};var b={applicationOutbox:(e,t)=>`appobx:v1:${r(e)}:${r(t)}`,applicationOutboxSinkProbe:(e,t,n)=>`appprobe:v1:outbox:${r(e)}:${r(t)}:${r(n)}`,applicationDeliveryPrefix:(e,t)=>`appdlv:v1:${r(e)}:${r(t)}:`,applicationDelivery:(e,t,n)=>`appdlv:v1:${r(e)}:${r(t)}:${r(n)}`,applicationDeliveryDuePrefix:(e,t)=>`appdue:v1:${r(e)}:${r(t)}:`,applicationDeliveryDue:(e,t,n,i)=>`appdue:v1:${r(e)}:${r(t)}:${o(n)}:${r(i)}`,applicationDeliveryIdempotency:(e,t,n)=>`appdidem:v1:${r(e)}:${r(t)}:${r(n)}`,applicationDeliveryBySequencePrefix:(e,t)=>`appdseq:v1:${r(e)}:${r(t)}:`,applicationDeliveryBySequence:(e,t,n)=>`appdseq:v1:${r(e)}:${r(t)}:${o(n)}`,applicationDeliveryTerminalPrefix:(e,t)=>`appdterm:v1:${r(e)}:${r(t)}:`,applicationDeliveryTerminal:(e,t,n,i)=>`appdterm:v1:${r(e)}:${r(t)}:${o(n)}:${r(i)}`};var h={workflowOwnerEpoch:(e)=>`wf-owner-epoch:${r(e)}`,workflowOwnerHolder:(e)=>`wf-owner-holder:${r(e)}`,ownershipModeMarker:()=>"ownership-mode-marker"};var k=["actrec:","appcmd:","appdidem:","appdlv:","appdseq:","appdterm:","appdue:","appidem:","appmbx:","appobx:","appprobe:","appready:","appseq:","appterm:","archive:","async-act:","attr:","audit:bulk:","blob:","budget:","budget-charged:","catalog-active:","catalog-entry:","catalog-tombstone:","child-by-parent:","ev:","fleet-event-by-workflow:","fleet-event:","fleet-event-tail","fleet-event-watermark","idx:","lease:","liveness:","offload:","ownership-mode-marker","op:","review:","schedule:","schedule-due:","schedule-run-by-schedule:","schedule-run-link:","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-owner-epoch:","wf-owner-holder:","wf-teardown:","wf-teardown-deadletter:","wf-teardown-needed:","wf-teardown-succeeded:","wf-terminal:"];var c=1e4,Z=1e4;class S extends Error{code="StorageBatchOperationLimitExceededError";cap=c;count;target;constructor(e,t){super(`${e} count ${t} exceeds MAX_BATCH_OPERATIONS (${c}).`);this.name="StorageBatchOperationLimitExceededError",this.target=e,this.count=t}}function p(e,t){if(t>c)throw new S(e,t)}function ee(e){return e.length>0?e.slice(0,-1)+String.fromCharCode(e.charCodeAt(e.length-1)+1):"\xFF"}function te(e,t={}){if(t.gt!==void 0&&e<=t.gt)return!1;if(t.gte!==void 0&&e<t.gte)return!1;if(t.lt!==void 0&&e>=t.lt)return!1;if(t.lte!==void 0&&e>t.lte)return!1;return!0}function re(e,t){if(e===null||t===null)return e===t;if(e.byteLength!==t.byteLength)return!1;for(let n=0;n<e.byteLength;n++)if(e[n]!==t[n])return!1;return!0}async function ne(e,t){if(e.has)return e.has(t);return u(e,t)}function ie(e,t,n){if(e.keys)return e.keys(t,n);return s(e,t,n)}async function oe(e,t){if(e.count)return e.count(t);return f(e,t)}async function ae(e,t){if(e.deletePrefix)return e.deletePrefix(t);return m(e,t)}async function se(e,t){p("batch operations",t.length),await e.batch(t)}async function le(e,t,n){if(p("conditionalBatch conditions",t.length),p("conditionalBatch operations",n.length),l(e,"conditionalBatch","storageConditionalBatch"),!e.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return e.conditionalBatch(t,n)}var a=o,O="0",B="1",w=(e,t,n,i)=>`sig:${r(e)}:${r(t)}:${i}:${r(n)}`,ge={workflow:(e)=>`wf:${r(e)}`,checkpoint:(e)=>`wf:${r(e)}:ckpt`,checkpointHistory:(e,t)=>`wf:${r(e)}:ckpt:${String(t).padStart(10,"0")}`,timelinePrefix:(e)=>`wf:${r(e)}:timeline:`,timeline:(e,t)=>`wf:${r(e)}:timeline:${String(t).padStart(10,"0")}`,schedule:(e)=>`schedule:${r(e)}`,scheduleTick:(e,t)=>`schedule-due:${String(e).padStart(16,"0")}:${r(t)}`,scheduleRun:(e)=>`schedule-run:${r(e)}`,scheduleRunLink:(e)=>`schedule-run-link:${r(e)}`,scheduleRunBySchedulePrefix:(e)=>`schedule-run-by-schedule:${r(e)}:`,scheduleRunBySchedule:(e,t)=>`schedule-run-by-schedule:${r(e)}:${r(t)}`,operation:(e,t,n)=>`op:${e}:${a(t)}:${n}`,operationInflight:(e)=>`op:inflight:${e}`,operationQueued:(e)=>`op:queued:${e}`,operationResolved:(e)=>`op:resolved:${e}`,bulkOperationAuditPrefix:()=>"audit:bulk:",bulkOperationAudit:(e,t,n)=>`audit:bulk:${a(e)}:${r(t)}:${r(n)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(e,t)=>`op:resolved-by-time:${a(e)}:${r(t)}`,asyncActivity:(e,t)=>`async-act:v1:${r(e)}:${r(t)}`,asyncActivityResolution:(e,t)=>`async-act:v1:${r(e)}:${r(t)}:resolution`,activityReconciliationPrefix:(e)=>`actrec:v1:${r(e)}:`,activityReconciliation:(e,t,n)=>`actrec:v1:${r(e)}:${r(t)}:${n}`,eventPrefix:(e)=>`ev:${r(e)}:`,event:(e,t)=>`ev:${r(e)}:${String(t).padStart(10,"0")}`,eventHead:(e)=>`ev:${r(e)}:head`,eventWatermark:(e)=>`ev:${r(e)}:watermark`,fleetEventPrefix:()=>"fleet-event:",fleetEvent:(e)=>`fleet-event:${String(e).padStart(10,"0")}`,fleetEventTail:()=>"fleet-event-tail",fleetEventWatermark:()=>"fleet-event-watermark",fleetEventByWorkflowPrefix:(e)=>`fleet-event-by-workflow:${r(e)}:`,fleetEventByWorkflow:(e,t)=>`fleet-event-by-workflow:${r(e)}:${String(t).padStart(10,"0")}`,signal:(e,t,n)=>w(e,t,n,B),startSignal:(e,t,n)=>w(e,t,n,O),signalSequence:(e)=>`sigseq:v1:${r(e)}`,signalAcceptedResponsePrefix:(e)=>`sigres:v1:${r(e)}:`,signalAcceptedResponse:(e,t,n)=>`sigres:v1:${r(e)}:${r(t)}:${r(n)}`,deadline:(e,t)=>`wf-deadline:${a(e)}:${r(t)}`,terminalCleanup:(e,t)=>`wf-cleanup:${a(e)}:${r(t)}`,teardownTimer:(e,t)=>`wf-teardown:${a(e)}:${r(t)}`,delayedStart:(e,t)=>`wf-delayed:${a(e)}:${r(t)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(e,t)=>`wf-terminal:${a(e)}:${r(t)}`,attribute:(e)=>`attr:${r(e)}`,attributeIndex:(e,t,n)=>`idx:${e}:${t}:${r(n)}`,tagIndex:(e,t)=>`tag:${r(e)}:${r(t)}`,updatePrefix:(e)=>`upd:${r(e)}:`,update:(e,t)=>`upd:${r(e)}:${t}`,updateResponse:(e)=>`upr:${e}`,updateIdempotency:(e,t)=>`upk:${r(e)}:${t}`,startIdempotency:(e)=>`start-idem:${r(e)}`,startIdempotencySignalId:(e)=>`start-idem:${e}`,livenessPrefix:()=>"liveness:",liveness:(e)=>`liveness:${r(e)}`,leasePrefix:()=>"lease:",leaseEpoch:()=>"lease:epoch",leaseHolder:()=>"lease:holder",...y,...b,...h,...d,budget:(e,t,n)=>`budget:${e}:${t}:${n}`,review:(e,t)=>`review:${r(e)}:${t}`,workflowHeaders:(e)=>`wf-headers:${r(e)}`,childCancellationPrefix:(e)=>`child-cancel:${r(e)}:`,childCancellation:(e,t)=>`child-cancel:${r(e)}:${r(t)}`,childWorkflowByParentPrefix:(e,t)=>`child-by-parent:${r(e)}:${t===void 0?"":`${r(t)}:`}`,childWorkflowByParent:(e,t,n)=>`child-by-parent:${r(e)}:${t===void 0?"":`${r(t)}:`}${r(n)}`,terminalCleanupNeeded:(e)=>`wf-cleanup-needed:${r(e)}`,workflowConcurrency:(e,t)=>`wf-concurrency:${r(e)}:${r(t)}`,workflowConcurrencyHolder:(e)=>`wf-concurrency-holder:${r(e)}`,workflowHasServices:(e)=>`wf-has-services:${r(e)}`,finalizerState:(e)=>`wf-finalizer-state:${r(e)}`,teardownOwed:(e)=>`wf-teardown-needed:${r(e)}`,teardownSucceeded:(e)=>`wf-teardown-succeeded:${r(e)}`,teardownDeadLetter:(e)=>`wf-teardown-deadletter:${r(e)}`,offload:(e,t)=>`offload:${r(e)}:${t}`,archive:(e,t)=>`archive:${r(e)}:${t}`,stateExecution:(e,t)=>`state:execution:${r(e)}:${r(t)}`,stateWorkflow:(e,t)=>`state:workflow-scope:${g}:${r(e)}:${r(t)}`,streamChunkPrefix:(e,t)=>`blob:${r(e)}:${t}:chunk:`,streamChunk:(e,t,n)=>`blob:${r(e)}:${t}:chunk:${String(n).padStart(10,"0")}`,streamTail:(e,t)=>`blob:${r(e)}:${t}:tail`,streamMetadata:(e,t)=>`blob:${r(e)}:${t}:meta`,budgetCharged:(e)=>`budget-charged:${e}`,toolEffect:(e,t,n)=>`tool-effect:${r(e)}:${t}:${n}`,workflowVisibilityStatus:(e,t)=>`wf-idx-status:${r(e)}:${r(t)}`,workflowVisibilityType:(e,t)=>`wf-idx-type:${r(e)}:${r(t)}`,workflowVisibilityCreated:(e,t)=>`wf-idx-created:${a(e)}:${r(t)}`,workflowVisibilityUpdated:(e,t)=>`wf-idx-updated:${a(e)}:${r(t)}`,workflowVisibilityDeadline:(e,t)=>`wf-idx-deadline:${a(e)}:${r(t)}`,workflowVisibilityManifest:(e)=>`wf-idx-manifest:${r(e)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"};export{g as DEFAULT_SCOPE,ge as KEYS,c as MAX_BATCH_OPERATIONS,Z as MAX_SCAN_LIMIT,S as StorageBatchOperationLimitExceededError,k as WEFT_RESERVED_KEY_PREFIXES,x as assertDurableStorageForRecovery,p as assertStorageBatchOperationCount,C as decodeStorageKeyComponent,r as encodeStorageKeyComponent,o as formatSortableStorageTimestamp,te as matchesScanOptions,l as requireStorageCapability,ee as resolvePrefixRangeEnd,se as storageBatch,le as storageConditionalBatch,oe as storageCount,ae as storageDeletePrefix,ne as storageHas,ie as storageKeys,re as storageValuesEqual,P as tryDecodeStorageKeyComponent};
@@ -49,3 +49,18 @@ export declare function decodeStorageKeyComponent(value: string): string;
49
49
  * ```
50
50
  */
51
51
  export declare function tryDecodeStorageKeyComponent(value: string): string | null;
52
+ /**
53
+ * Format a millisecond timestamp as a fixed-width, zero-padded string so
54
+ * lexicographic key order matches chronological order.
55
+ *
56
+ * Sixteen digits covers every millisecond timestamp JavaScript can represent as
57
+ * a safe integer, so a shorter value can never sort after a longer one.
58
+ *
59
+ * @example
60
+ * ```ts
61
+ * import { formatSortableStorageTimestamp } from '@lostgradient/weft/storage/interface';
62
+ *
63
+ * console.log(formatSortableStorageTimestamp(1700000000000)); // '0001700000000000'
64
+ * ```
65
+ */
66
+ export declare function formatSortableStorageTimestamp(timestamp: number): string;
@@ -11,3 +11,6 @@ export function tryDecodeStorageKeyComponent(value) {
11
11
  return null;
12
12
  }
13
13
  }
14
+ export function formatSortableStorageTimestamp(timestamp) {
15
+ return String(timestamp).padStart(16, "0");
16
+ }
@@ -16,4 +16,4 @@
16
16
  * console.log(isWeftKey); // true
17
17
  * ```
18
18
  */
19
- export declare const WEFT_RESERVED_KEY_PREFIXES: readonly ["actrec:", "archive:", "async-act:", "attr:", "audit:bulk:", "blob:", "budget:", "budget-charged:", "child-by-parent:", "ev:", "fleet-event-by-workflow:", "fleet-event:", "fleet-event-tail", "fleet-event-watermark", "idx:", "lease:", "liveness:", "offload:", "ownership-mode-marker", "op:", "review:", "schedule:", "schedule-due:", "schedule-run-by-schedule:", "schedule-run-link:", "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-owner-epoch:", "wf-owner-holder:", "wf-teardown:", "wf-teardown-deadletter:", "wf-teardown-needed:", "wf-teardown-succeeded:", "wf-terminal:"];
19
+ export declare const WEFT_RESERVED_KEY_PREFIXES: readonly ["actrec:", "appcmd:", "appdidem:", "appdlv:", "appdseq:", "appdterm:", "appdue:", "appidem:", "appmbx:", "appobx:", "appprobe:", "appready:", "appseq:", "appterm:", "archive:", "async-act:", "attr:", "audit:bulk:", "blob:", "budget:", "budget-charged:", "catalog-active:", "catalog-entry:", "catalog-tombstone:", "child-by-parent:", "ev:", "fleet-event-by-workflow:", "fleet-event:", "fleet-event-tail", "fleet-event-watermark", "idx:", "lease:", "liveness:", "offload:", "ownership-mode-marker", "op:", "review:", "schedule:", "schedule-due:", "schedule-run-by-schedule:", "schedule-run-link:", "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-owner-epoch:", "wf-owner-holder:", "wf-teardown:", "wf-teardown-deadletter:", "wf-teardown-needed:", "wf-teardown-succeeded:", "wf-terminal:"];
@@ -1,5 +1,18 @@
1
1
  export const WEFT_RESERVED_KEY_PREFIXES = [
2
2
  "actrec:",
3
+ "appcmd:",
4
+ "appdidem:",
5
+ "appdlv:",
6
+ "appdseq:",
7
+ "appdterm:",
8
+ "appdue:",
9
+ "appidem:",
10
+ "appmbx:",
11
+ "appobx:",
12
+ "appprobe:",
13
+ "appready:",
14
+ "appseq:",
15
+ "appterm:",
3
16
  "archive:",
4
17
  "async-act:",
5
18
  "attr:",
@@ -7,6 +20,9 @@ export const WEFT_RESERVED_KEY_PREFIXES = [
7
20
  "blob:",
8
21
  "budget:",
9
22
  "budget-charged:",
23
+ "catalog-active:",
24
+ "catalog-entry:",
25
+ "catalog-tombstone:",
10
26
  "child-by-parent:",
11
27
  "ev:",
12
28
  "fleet-event-by-workflow:",
@@ -1,5 +1,57 @@
1
1
  import { type DeleteRangeOptions } from './delete-range';
2
2
  import { type BatchOperation, type ConditionalBatchCondition, type ScanOptions, type Storage, type StorageCapabilities } from './interface';
3
+ /**
4
+ * Construction options for {@link LMDBStorage}.
5
+ *
6
+ * @example
7
+ * ```ts
8
+ * import { LMDBStorage, type LMDBStorageOptions } from '@lostgradient/weft/storage/lmdb';
9
+ *
10
+ * const options: LMDBStorageOptions = { durability: 'relaxed' };
11
+ * await using storage = new LMDBStorage('./weft-data', options);
12
+ * void storage;
13
+ * ```
14
+ */
15
+ export type LMDBStorageOptions = {
16
+ /**
17
+ * LMDB commit durability.
18
+ * - `'full'` (default): every commit fsyncs both data and metadata to disk
19
+ * before resolving—safe for production use.
20
+ * - `'relaxed'`: opens the environment with `noSync: true` and
21
+ * `noMetaSync: true`, skipping `fsync` on every commit. This trades crash
22
+ * durability for write latency and is intended for test fixtures and other
23
+ * disposable environments, not for storage backing recoverable workflows.
24
+ */
25
+ durability?: 'full' | 'relaxed';
26
+ };
27
+ type LMDBRangeOptions = {
28
+ start: string;
29
+ end: string;
30
+ reverse?: boolean;
31
+ };
32
+ type LMDBDatabase = {
33
+ get(key: string): Uint8Array | undefined;
34
+ put(key: string, value: Uint8Array): Promise<boolean>;
35
+ remove(key: string): Promise<boolean>;
36
+ doesExist(key: string): boolean;
37
+ batch(action: () => unknown): Promise<boolean>;
38
+ getRange(options: LMDBRangeOptions): Iterable<{
39
+ key: string;
40
+ value: Uint8Array;
41
+ }>;
42
+ getKeys(options: LMDBRangeOptions): Iterable<string>;
43
+ getKeysCount(options: LMDBRangeOptions): number;
44
+ transactionSync<T>(action: () => T): T;
45
+ putSync(key: string, value: Uint8Array): void;
46
+ removeSync(key: string): boolean;
47
+ close(): Promise<void>;
48
+ };
49
+ type OpenLMDBEnvironment = (options: {
50
+ path: string;
51
+ encoding: 'binary';
52
+ noSync?: boolean;
53
+ noMetaSync?: boolean;
54
+ }) => LMDBDatabase;
3
55
  /**
4
56
  * LMDB-backed storage adapter. Reads hit lmdb-js's synchronous memory-mapped
5
57
  * path internally, but the Storage interface presents them as Promises and
@@ -22,7 +74,7 @@ import { type BatchOperation, type ConditionalBatchCondition, type ScanOptions,
22
74
  */
23
75
  export declare class LMDBStorage implements Storage {
24
76
  #private;
25
- constructor(path: string);
77
+ constructor(path: string, options?: LMDBStorageOptions, openEnvironment?: OpenLMDBEnvironment);
26
78
  capabilities(): StorageCapabilities;
27
79
  get(key: string): Promise<Uint8Array | null>;
28
80
  put(key: string, value: Uint8Array): Promise<void>;
@@ -39,3 +91,4 @@ export declare class LMDBStorage implements Storage {
39
91
  close(): Promise<void>;
40
92
  [Symbol.dispose](): void;
41
93
  }
94
+ export {};