@lostgradient/weft 0.12.0 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (226) hide show
  1. package/README.md +1 -1
  2. package/dist/cli/api.d.ts +2 -0
  3. package/dist/cli/api.js +3 -4
  4. package/dist/cli/generated/operation-catalog.snapshot.json +508 -12
  5. package/dist/cli/generated/operation-client.generated.d.ts +118 -10
  6. package/dist/cli/generated/operation-client.generated.js +74 -1
  7. package/dist/cli/help-text.d.ts +3 -3
  8. package/dist/cli/help-text.js +4 -4
  9. package/dist/cli/operation-catalog-snapshot.d.ts +12 -3
  10. package/dist/cli/operation-catalog-snapshot.js +14 -5
  11. package/dist/cli/operation-client-runtime.d.ts +29 -0
  12. package/dist/cli/schedule.js +1 -3
  13. package/dist/cli/serve-registrations.d.ts +3 -3
  14. package/dist/cli/serve-registrations.js +2 -2
  15. package/dist/cli/shutdown.d.ts +11 -0
  16. package/dist/cli/shutdown.js +25 -0
  17. package/dist/cli/validate.d.ts +1 -1
  18. package/dist/cli/version-check.d.ts +1 -1
  19. package/dist/cli/version-check.js +1 -1
  20. package/dist/cli-main.js +10 -29
  21. package/dist/client/client-storage.d.ts +24 -0
  22. package/dist/client/client-storage.js +14 -0
  23. package/dist/client/handle-delegation.d.ts +3 -3
  24. package/dist/client/handle-delegation.js +2 -2
  25. package/dist/client/http-client-requests.d.ts +5 -3
  26. package/dist/client/http-client-requests.js +20 -2
  27. package/dist/client/http-client-storage.d.ts +3 -0
  28. package/dist/client/http-client-storage.js +82 -0
  29. package/dist/client/http-client.d.ts +9 -6
  30. package/dist/client/http-client.js +13 -18
  31. package/dist/client/http-operations.d.ts +3 -1
  32. package/dist/client/http-operations.js +77 -1
  33. package/dist/client/http-request.d.ts +20 -14
  34. package/dist/client/http-request.js +21 -31
  35. package/dist/client/in-process-operations.d.ts +2 -2
  36. package/dist/client/in-process-operations.js +2 -2
  37. package/dist/client/index.d.ts +5 -1
  38. package/dist/client/index.js +13 -2
  39. package/dist/client/interface.d.ts +26 -26
  40. package/dist/client/local.d.ts +9 -6
  41. package/dist/client/local.js +9 -4
  42. package/dist/client/search-params.js +10 -6
  43. package/dist/client/start-body.d.ts +3 -1
  44. package/dist/client/start-body.js +9 -0
  45. package/dist/core/bulk-workflow-filter.d.ts +2 -1
  46. package/dist/core/bulk-workflow-filter.js +5 -1
  47. package/dist/core/context/parallel-operations.d.ts +0 -2
  48. package/dist/core/context/parallel-operations.js +0 -7
  49. package/dist/core/engine/async-activity-records.d.ts +12 -1
  50. package/dist/core/engine/async-activity-records.js +81 -2
  51. package/dist/core/engine/bulk-operations-purge.js +16 -1
  52. package/dist/core/engine/bulk-operations-shared.js +2 -0
  53. package/dist/core/engine/callback-checkpoint-persistence.d.ts +2 -0
  54. package/dist/core/engine/callback-checkpoint-persistence.js +6 -3
  55. package/dist/core/engine/callback-creators-schedule.d.ts +2 -1
  56. package/dist/core/engine/callback-creators-schedule.js +3 -3
  57. package/dist/core/engine/callback-creators.js +4 -22
  58. package/dist/core/engine/checkpoint-io.d.ts +1 -1
  59. package/dist/core/engine/checkpoint-reads.js +11 -1
  60. package/dist/core/engine/child-workflow.js +15 -6
  61. package/dist/core/engine/construction.js +3 -0
  62. package/dist/core/engine/disposal.js +2 -0
  63. package/dist/core/engine/engine-internal-types.d.ts +4 -1
  64. package/dist/core/engine/fenced-write.d.ts +5 -3
  65. package/dist/core/engine/finalizer-status.d.ts +10 -0
  66. package/dist/core/engine/finalizer-status.js +82 -0
  67. package/dist/core/engine/index.d.ts +26 -2
  68. package/dist/core/engine/index.js +71 -8
  69. package/dist/core/engine/internals.d.ts +3 -0
  70. package/dist/core/engine/lease-health.d.ts +64 -0
  71. package/dist/core/engine/lease-health.js +0 -0
  72. package/dist/core/engine/lease-manager.d.ts +4 -2
  73. package/dist/core/engine/lease-manager.js +32 -4
  74. package/dist/core/engine/lifecycle/recovered-services.js +0 -2
  75. package/dist/core/engine/lifecycle/shared.d.ts +11 -8
  76. package/dist/core/engine/lifecycle/start-batch.js +12 -0
  77. package/dist/core/engine/lifecycle/start.d.ts +1 -1
  78. package/dist/core/engine/lifecycle/start.js +34 -5
  79. package/dist/core/engine/operations-coordination.d.ts +1 -12
  80. package/dist/core/engine/operations-coordination.js +58 -11
  81. package/dist/core/engine/operations-speculate.d.ts +1 -1
  82. package/dist/core/engine/operations-speculate.js +19 -5
  83. package/dist/core/engine/parallel-dispatch.d.ts +1 -1
  84. package/dist/core/engine/parallel-dispatch.js +1 -1
  85. package/dist/core/engine/registration.js +14 -0
  86. package/dist/core/engine/review-list-entries.d.ts +1 -1
  87. package/dist/core/engine/review-list-entries.js +6 -30
  88. package/dist/core/engine/schedule-handle.d.ts +4 -4
  89. package/dist/core/engine/schedule-handle.js +2 -2
  90. package/dist/core/engine/schedule-overlap.d.ts +11 -0
  91. package/dist/core/engine/schedule-overlap.js +50 -0
  92. package/dist/core/engine/schedule-run.d.ts +11 -3
  93. package/dist/core/engine/schedule-run.js +27 -4
  94. package/dist/core/engine/schedule-timer.js +10 -1
  95. package/dist/core/engine/schedules.d.ts +5 -4
  96. package/dist/core/engine/schedules.js +62 -56
  97. package/dist/core/engine/state-utilities.js +1 -1
  98. package/dist/core/engine/storage-io.d.ts +12 -0
  99. package/dist/core/engine/storage-io.js +49 -10
  100. package/dist/core/engine/termination/finalizer-claim.d.ts +8 -6
  101. package/dist/core/engine/termination/finalizer-claim.js +2 -1
  102. package/dist/core/engine/termination/finalizer.js +10 -14
  103. package/dist/core/engine/timeline-coordinator-constants.d.ts +3 -0
  104. package/dist/core/engine/timeline-coordinator-constants.js +1 -0
  105. package/dist/core/engine/timeline-coordinator-detail.d.ts +13 -0
  106. package/dist/core/engine/timeline-coordinator-detail.js +76 -0
  107. package/dist/core/engine/validation/schedule-options.d.ts +8 -1
  108. package/dist/core/engine/validation/schedule-options.js +18 -0
  109. package/dist/core/engine/validation/schedule.d.ts +1 -1
  110. package/dist/core/engine/validation/schedule.js +27 -3
  111. package/dist/core/engine/validation.js +66 -2
  112. package/dist/core/engine/workflow-state-stream.d.ts +5 -1
  113. package/dist/core/engine/workflow-state-stream.js +37 -14
  114. package/dist/core/events/schedule-events.d.ts +3 -4
  115. package/dist/core/events/workflow-events.d.ts +2 -1
  116. package/dist/core/list-filter-validation.d.ts +3 -0
  117. package/dist/core/list-filter-validation.js +11 -0
  118. package/dist/core/registry-snapshot.d.ts +32 -0
  119. package/dist/core/registry-snapshot.js +28 -0
  120. package/dist/core/review/index.d.ts +91 -4
  121. package/dist/core/review/index.js +29 -0
  122. package/dist/core/types/activity.d.ts +52 -5
  123. package/dist/core/types/bulk.d.ts +1 -0
  124. package/dist/core/types/list-options.d.ts +6 -0
  125. package/dist/core/types/options.d.ts +6 -5
  126. package/dist/core/types/reviews.d.ts +2 -2
  127. package/dist/core/types/schedules.d.ts +45 -2
  128. package/dist/core/types/services-resolution.d.ts +5 -5
  129. package/dist/core/types/state.d.ts +64 -0
  130. package/dist/core/types/workflow-log.d.ts +3 -2
  131. package/dist/core/types/workflow-observability.d.ts +50 -0
  132. package/dist/core/types/workflow-observability.js +0 -0
  133. package/dist/core/types/workflow-registry.d.ts +7 -0
  134. package/dist/core/types.d.ts +1 -0
  135. package/dist/core/types.js +1 -0
  136. package/dist/diagnostics/validate.d.ts +9 -30
  137. package/dist/diagnostics/validate.js +83 -21
  138. package/dist/diagnostics/version-check.d.ts +2 -2
  139. package/dist/http.js +2 -2
  140. package/dist/index.d.ts +4 -3
  141. package/dist/indexeddb.js +1 -1
  142. package/dist/server/access-policy-metadata.d.ts +92 -0
  143. package/dist/server/access-policy-metadata.js +78 -0
  144. package/dist/server/fault-to-http.d.ts +3 -7
  145. package/dist/server/fault-to-http.js +2 -34
  146. package/dist/server/handler/index.js +1 -1
  147. package/dist/server/handler/route-dispatch.d.ts +10 -3
  148. package/dist/server/handler/route-dispatch.js +19 -4
  149. package/dist/server/index.d.ts +1 -1
  150. package/dist/server/index.js +1 -0
  151. package/dist/server/interactive-operations.js +2 -0
  152. package/dist/server/openapi-error-responses.js +41 -4
  153. package/dist/server/openapi.d.ts +3 -1
  154. package/dist/server/openapi.js +4 -0
  155. package/dist/server/openrpc-document-schema.d.ts +64 -0
  156. package/dist/server/openrpc-document-schema.js +6 -26
  157. package/dist/server/openrpc.d.ts +4 -0
  158. package/dist/server/openrpc.js +9 -33
  159. package/dist/server/operation-catalog/index.d.ts +1 -1
  160. package/dist/server/operation-catalog/raise-fault.d.ts +2 -1
  161. package/dist/server/operation-catalog/types.d.ts +2 -1
  162. package/dist/server/operation-fault.d.ts +22 -8
  163. package/dist/server/operation-fault.js +65 -13
  164. package/dist/server/operation-registry.d.ts +1 -1
  165. package/dist/server/operations/aggregate-workflows.d.ts +6 -0
  166. package/dist/server/operations/aggregate-workflows.js +3 -2
  167. package/dist/server/operations/async-activity.d.ts +14 -0
  168. package/dist/server/operations/async-activity.js +88 -4
  169. package/dist/server/operations/bulk-filter-helpers.d.ts +3 -0
  170. package/dist/server/operations/bulk-filter-helpers.js +27 -3
  171. package/dist/server/operations/bulk-mutate-workflow-tags.d.ts +6 -0
  172. package/dist/server/operations/bulk-signal-workflows.d.ts +6 -0
  173. package/dist/server/operations/get-stream-chunks.js +2 -7
  174. package/dist/server/operations/get-system-lease.d.ts +19 -0
  175. package/dist/server/operations/get-system-lease.js +48 -0
  176. package/dist/server/operations/get-workflow-observability.d.ts +24 -0
  177. package/dist/server/operations/get-workflow-observability.js +80 -0
  178. package/dist/server/operations/get-workflow-result.js +2 -2
  179. package/dist/server/operations/get-workflow.d.ts +2 -2
  180. package/dist/server/operations/list-filter-query-extractor.js +15 -0
  181. package/dist/server/operations/list-reviews.js +2 -19
  182. package/dist/server/operations/list-workflows.d.ts +6 -0
  183. package/dist/server/operations/list-workflows.js +12 -3
  184. package/dist/server/operations/operation-helpers.d.ts +9 -18
  185. package/dist/server/operations/operation-helpers.js +5 -23
  186. package/dist/server/operations/purge-workflows.d.ts +3 -0
  187. package/dist/server/operations/recover-all.js +1 -9
  188. package/dist/server/operations/single-workflow-control-operation.d.ts +2 -1
  189. package/dist/server/operations/single-workflow-tag-mutation.js +2 -2
  190. package/dist/server/operations/sse-stream.js +2 -7
  191. package/dist/server/operations/storage-capabilities.d.ts +34 -0
  192. package/dist/server/operations/storage-capabilities.js +38 -0
  193. package/dist/server/operations/storage.js +8 -17
  194. package/dist/server/operations/stream-workflow-sse.js +3 -9
  195. package/dist/server/operations/update-schedule.d.ts +8 -0
  196. package/dist/server/operations/update-schedule.js +70 -7
  197. package/dist/server/operations/workflow-events-sse.js +2 -2
  198. package/dist/server/rest-binding.d.ts +7 -6
  199. package/dist/server/rest-bindings.d.ts +2 -13
  200. package/dist/server/rest-bindings.js +19 -10
  201. package/dist/server/task-queue.d.ts +7 -5
  202. package/dist/storage/bounded-ndjson-response.d.ts +5 -0
  203. package/dist/storage/bounded-ndjson-response.js +33 -0
  204. package/dist/storage/capabilities.d.ts +1 -1
  205. package/dist/storage/cloudflare-value-codec.d.ts +5 -3
  206. package/dist/storage/cloudflare-value-codec.js +1 -1
  207. package/dist/storage/compressed-storage.js +1 -1
  208. package/dist/storage/http.js +5 -37
  209. package/dist/storage/index.d.ts +7 -1
  210. package/dist/storage/interface.d.ts +16 -4
  211. package/dist/storage/interface.js +1 -1
  212. package/dist/storage/key-prefixes.d.ts +1 -1
  213. package/dist/storage/key-prefixes.js +4 -0
  214. package/dist/storage/lmdb.js +1 -1
  215. package/dist/storage/memory.js +1 -1
  216. package/dist/storage/neon.d.ts +3 -16
  217. package/dist/storage/neon.js +4 -4
  218. package/dist/storage/postgres.js +4 -4
  219. package/dist/storage/resolve.js +1 -1
  220. package/dist/storage/scoped-storage.js +1 -1
  221. package/dist/storage/testing.js +1 -1
  222. package/dist/storage/turso.js +2 -2
  223. package/dist/version.d.ts +1 -1
  224. package/dist/version.js +1 -1
  225. package/dist/web-extension.js +1 -1
  226. package/package.json +1 -1
@@ -14,21 +14,23 @@ export declare function resetLifoStarvationWarningForTesting(): void;
14
14
  * until a task arrives or the timeout expires.
15
15
  *
16
16
  * `serve()` owns the live instance and exposes it as
17
- * {@link WeftServer.taskQueue} for inspection. Prefer the `WeftServer` methods
18
- * (`dispatchTask`, `shutdownWorker`, etc.) over mutating the queue directly
19
- * the type is re-exported so callers can name `server.taskQueue`, not as a
20
- * stable mutation surface.
17
+ * {@link WeftServer.taskQueue} for inspection. Direct `handleRequest()` hosts
18
+ * can construct an instance alongside a `WorkerRegistry` and inject both via
19
+ * `HandlerOptions`. Prefer the `WeftServer` methods (`dispatchTask`,
20
+ * `shutdownWorker`, etc.) over mutating a server-owned queue directly.
21
21
  *
22
22
  * @example
23
23
  * ```ts
24
- * import { serve, type TaskQueue } from '@lostgradient/weft/server';
24
+ * import { serve, TaskQueue } from '@lostgradient/weft/server';
25
25
  * import { Engine, MemoryStorage } from '@lostgradient/weft';
26
26
  *
27
27
  * await using engine = new Engine({ storage: new MemoryStorage() });
28
28
  * await using server = serve({ engine });
29
29
  *
30
30
  * const taskQueue: TaskQueue = server.taskQueue;
31
+ * const standaloneTaskQueue = new TaskQueue();
31
32
  * void taskQueue;
33
+ * standaloneTaskQueue[Symbol.dispose]();
32
34
  * ```
33
35
  */
34
36
  export declare class TaskQueue implements Disposable {
@@ -0,0 +1,5 @@
1
+ export type BoundedNdjsonResponseOptions = {
2
+ readonly maximumBytes: number;
3
+ readonly sizeLimitError: () => Error;
4
+ };
5
+ export declare function readBoundedNdjsonResponse(response: Response, options: BoundedNdjsonResponseOptions): AsyncIterable<string>;
@@ -0,0 +1,33 @@
1
+ export async function* readBoundedNdjsonResponse(response, options) {
2
+ if (response.body === null)
3
+ return;
4
+ const reader = response.body.getReader(), decoder = new TextDecoder;
5
+ let bufferedText = "", bytesRead = 0, reachedEndOfStream = !1;
6
+ try {
7
+ while (!0) {
8
+ const { done, value } = await reader.read();
9
+ if (done) {
10
+ reachedEndOfStream = !0;
11
+ break;
12
+ }
13
+ bytesRead += value.byteLength;
14
+ if (bytesRead > options.maximumBytes)
15
+ throw options.sizeLimitError();
16
+ bufferedText += decoder.decode(value, { stream: !0 });
17
+ const lines = bufferedText.split(`
18
+ `);
19
+ bufferedText = lines.pop() ?? "";
20
+ for (const line of lines)
21
+ yield line;
22
+ }
23
+ bufferedText += decoder.decode();
24
+ if (bufferedText.length > 0)
25
+ yield bufferedText;
26
+ } finally {
27
+ if (!reachedEndOfStream)
28
+ try {
29
+ await reader.cancel();
30
+ } catch {}
31
+ reader.releaseLock();
32
+ }
33
+ }
@@ -72,7 +72,7 @@ export type StorageCapabilities = {
72
72
  * - `remote`: data is owned by a remote service or synchronized storage area
73
73
  * whose durability and freshness depend on that service.
74
74
  */
75
- persistence?: 'ephemeral' | 'local' | 'remote';
75
+ persistence: 'ephemeral' | 'local' | 'remote';
76
76
  /**
77
77
  * Visibility of a completed write to a later read, scoped to one `Storage`
78
78
  * instance.
@@ -41,9 +41,11 @@ export type CloudflareValueEncoding = 'base64' | 'blob';
41
41
  * throws immediately, instead of silently misinterpreting the bytes.
42
42
  *
43
43
  * This is the cross-mode contract for
44
- * {@link CloudflareDurableObjectSQLiteStorageOptions.valueEncoding}: a table
45
- * must use a single `valueEncoding` for its lifetime. There is no dual-read
46
- * fallback and no migration path between encodings pick one per table.
44
+ * {@link CloudflareDurableObjectSQLiteStorageOptions.valueEncoding}:
45
+ * `valueEncoding` is a per-table storage-format decision, and every row in a
46
+ * table must use the same encoding. Each codec accepts only values written in
47
+ * its storage class, so cross-mode reads fail fast. Configure a distinct table
48
+ * name when one Durable Object needs both encodings.
47
49
  */
48
50
  type CloudflareValueCodec = {
49
51
  readonly sqlColumnType: 'TEXT' | 'BLOB';
@@ -14,7 +14,7 @@ function base64ToBytes(base64) {
14
14
  return bytes;
15
15
  }
16
16
  function unexpectedValueTypeError(key, expectedEncoding, actualType) {
17
- return Error(`Cloudflare Durable Object SQLite storage: key "${key}" holds a value of type ${actualType}, but this instance is configured for valueEncoding: '${expectedEncoding}'. A table must use a single, ` + "consistent valueEncoding for its lifetime \u2014 this row was written by an instance configured " + "with a different valueEncoding. Pick one encoding per table (or per-instance configured table name) and do not change it; there is no automatic migration between encodings.");
17
+ return Error(`Cloudflare Durable Object SQLite storage: key "${key}" holds a value of type ${actualType}, but this instance is configured for valueEncoding: '${expectedEncoding}'. valueEncoding is a per-table storage-format decision, and this row was written with a different valueEncoding. Configure every instance that accesses this table with the same valueEncoding, or use a different table name for a different encoding.`);
18
18
  }
19
19
  const base64Codec = {
20
20
  sqlColumnType: "TEXT",
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- var i=import.meta.require,t=(W,F,X)=>{if(F!=null){if(typeof F!=="object"&&typeof F!=="function")throw TypeError('Object expected to be assigned to "using" declaration');let Y;if(X)Y=F[Symbol.asyncDispose];if(Y===void 0)Y=F[Symbol.dispose];if(typeof Y!=="function")throw TypeError("Object not disposable");W.push([X,Y,F])}else if(X)W.push([X]);return F},r=(W,F,X)=>{let Y=($)=>F=X?new SuppressedError($,F,"An error was suppressed during disposal"):(X=!0,$),U=($)=>{while($=W.pop())try{var j=$[1]&&$[1].call($[2]);if($[0])return Promise.resolve(j).then(U,(C)=>(Y(C),U()))}catch(C){Y(C)}if(X)throw F};return U()};function G(W,F,X){if(!W.capabilities()[F])throw Error(`Feature "${X}" requires storage capability "${F}", but this storage backend does not provide it.`)}function g(W){let F=W.capabilities(),X=[];if(F.persistence!=="local"&&F.persistence!=="remote")X.push(`persistence must be "local" or "remote" (got "${F.persistence}")`);if(F.readAfterWrite!=="linearizable")X.push(`readAfterWrite must be "linearizable" (got "${F.readAfterWrite}")`);if(F.scanConsistency!=="snapshot")X.push(`scanConsistency must be "snapshot" (got "${F.scanConsistency}")`);if(!F.atomicBatch)X.push("atomicBatch must be true");if(!F.conditionalBatch)X.push("conditionalBatch must be true");if(X.length>0)throw Error(`Storage is not durable enough for recovery: ${X.join("; ")}.`)}var D="default";async function M(W,F){return await W.get(F)!==null}async function*P(W,F,X){for await(let[Y]of W.scan(F,X))yield Y}async function N(W,F){let X=0;for await(let Y of P(W,F))X++;return X}async function H(W,F){let X=[];for await(let Y of P(W,F))X.push({type:"delete",key:Y});if(X.length===0)return 0;return await W.batch(X),X.length}async function FW(W,F,X){let Y=[];for await(let U of P(W,F,X))Y.push({type:"delete",key:U});if(Y.length===0)return 0;return await W.batch(Y),Y.length}var u=["actrec:","archive:","async-act:","attr:","audit:bulk:","blob:","budget:","budget-charged:","ev:","fleet-event-by-workflow:","fleet-event:","fleet-event-tail","idx:","lease:","liveness:","offload:","op:","review:","schedule:","schedule-due:","schedule-run:","sig:","sigres:","sigseq:","start-idem:","state:","tag:","tool-effect:","upd:","upk:","upr:","wf:","wf-cleanup:","wf-cleanup-needed:","wf-concurrency:","wf-concurrency-holder:","wf-deadline:","wf-delayed:","wf-finalizer-state:","wf-has-services:","wf-headers:","wf-idx-","wf-teardown:","wf-teardown-deadletter:","wf-teardown-needed:","wf-terminal:"];var L=1e4,KW=1e4;class B extends Error{code="StorageBatchOperationLimitExceededError";cap=L;count;target;constructor(W,F){super(`${W} count ${F} exceeds MAX_BATCH_OPERATIONS (${L}).`);this.name="StorageBatchOperationLimitExceededError",this.target=W,this.count=F}}function q(W,F){if(F>L)throw new B(W,F)}function QW(W){return W.length>0?W.slice(0,-1)+String.fromCharCode(W.charCodeAt(W.length-1)+1):"\xFF"}function UW(W,F={}){if(F.gt!==void 0&&W<=F.gt)return!1;if(F.gte!==void 0&&W<F.gte)return!1;if(F.lt!==void 0&&W>=F.lt)return!1;if(F.lte!==void 0&&W>F.lte)return!1;return!0}function VW(W,F){if(W===null||F===null)return W===F;if(W.byteLength!==F.byteLength)return!1;for(let X=0;X<W.byteLength;X++)if(W[X]!==F[X])return!1;return!0}async function PW(W,F){if(W.has)return W.has(F);return M(W,F)}function qW(W,F,X){if(W.keys)return W.keys(F,X);return P(W,F,X)}async function zW(W,F){if(W.count)return W.count(F);return N(W,F)}async function CW(W,F){if(W.deletePrefix)return W.deletePrefix(F);return H(W,F)}async function GW(W,F){q("batch operations",F.length),await W.batch(F)}async function DW(W,F,X){if(q("conditionalBatch conditions",F.length),q("conditionalBatch operations",X.length),G(W,"conditionalBatch","storageConditionalBatch"),!W.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return W.conditionalBatch(F,X)}function J(W){return encodeURIComponent(W)}function LW(W){return decodeURIComponent(W)}function SW(W){try{return decodeURIComponent(W)}catch{return null}}var K=(W)=>String(W).padStart(16,"0"),f="0",I="1",E=(W,F,X,Y)=>`sig:${J(W)}:${J(F)}:${Y}:${J(X)}`,ZW={workflow:(W)=>`wf:${J(W)}`,checkpoint:(W)=>`wf:${J(W)}:ckpt`,checkpointHistory:(W,F)=>`wf:${J(W)}:ckpt:${String(F).padStart(10,"0")}`,timelinePrefix:(W)=>`wf:${J(W)}:timeline:`,timeline:(W,F)=>`wf:${J(W)}:timeline:${String(F).padStart(10,"0")}`,schedule:(W)=>`schedule:${J(W)}`,scheduleTick:(W,F)=>`schedule-due:${String(W).padStart(16,"0")}:${J(F)}`,scheduleRun:(W)=>`schedule-run:${J(W)}`,operation:(W,F,X)=>`op:${W}:${K(F)}:${X}`,operationInflight:(W)=>`op:inflight:${W}`,operationQueued:(W)=>`op:queued:${W}`,operationResolved:(W)=>`op:resolved:${W}`,operationDeadLetterPrefix:()=>"op:dead-letter:",operationDeadLetter:(W)=>`op:dead-letter:${W}`,bulkOperationAuditPrefix:()=>"audit:bulk:",bulkOperationAudit:(W,F,X)=>`audit:bulk:${K(W)}:${J(F)}:${J(X)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(W,F)=>`op:resolved-by-time:${K(W)}:${J(F)}`,asyncActivity:(W,F)=>`async-act:v1:${J(W)}:${J(F)}`,asyncActivityResolution:(W,F)=>`async-act:v1:${J(W)}:${J(F)}:resolution`,activityReconciliationPrefix:(W)=>`actrec:v1:${J(W)}:`,activityReconciliation:(W,F,X)=>`actrec:v1:${J(W)}:${J(F)}:${X}`,eventPrefix:(W)=>`ev:${J(W)}:`,event:(W,F)=>`ev:${J(W)}:${String(F).padStart(10,"0")}`,eventHead:(W)=>`ev:${J(W)}:head`,eventWatermark:(W)=>`ev:${J(W)}:watermark`,fleetEventPrefix:()=>"fleet-event:",fleetEvent:(W)=>`fleet-event:${String(W).padStart(10,"0")}`,fleetEventTail:()=>"fleet-event-tail",fleetEventByWorkflowPrefix:(W)=>`fleet-event-by-workflow:${J(W)}:`,fleetEventByWorkflow:(W,F)=>`fleet-event-by-workflow:${J(W)}:${String(F).padStart(10,"0")}`,signal:(W,F,X)=>E(W,F,X,I),startSignal:(W,F,X)=>E(W,F,X,f),signalSequence:(W)=>`sigseq:v1:${J(W)}`,signalAcceptedResponsePrefix:(W)=>`sigres:v1:${J(W)}:`,signalAcceptedResponse:(W,F,X)=>`sigres:v1:${J(W)}:${J(F)}:${J(X)}`,deadline:(W,F)=>`wf-deadline:${K(W)}:${J(F)}`,terminalCleanup:(W,F)=>`wf-cleanup:${K(W)}:${J(F)}`,teardownTimer:(W,F)=>`wf-teardown:${K(W)}:${J(F)}`,delayedStart:(W,F)=>`wf-delayed:${K(W)}:${J(F)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(W,F)=>`wf-terminal:${K(W)}:${J(F)}`,attribute:(W)=>`attr:${J(W)}`,attributeIndex:(W,F,X)=>`idx:${W}:${F}:${J(X)}`,tagIndex:(W,F)=>`tag:${J(W)}:${J(F)}`,updatePrefix:(W)=>`upd:${J(W)}:`,update:(W,F)=>`upd:${J(W)}:${F}`,updateResponse:(W)=>`upr:${W}`,updateIdempotency:(W,F)=>`upk:${J(W)}:${F}`,startIdempotency:(W)=>`start-idem:${J(W)}`,startIdempotencySignalId:(W)=>`start-idem:${W}`,livenessPrefix:()=>"liveness:",liveness:(W)=>`liveness:${J(W)}`,leasePrefix:()=>"lease:",leaseEpoch:()=>"lease:epoch",leaseHolder:()=>"lease:holder",budget:(W,F,X)=>`budget:${W}:${F}:${X}`,review:(W,F)=>`review:${J(W)}:${F}`,workflowHeaders:(W)=>`wf-headers:${J(W)}`,childCancellationPrefix:(W)=>`child-cancel:${J(W)}:`,childCancellation:(W,F)=>`child-cancel:${J(W)}:${J(F)}`,terminalCleanupNeeded:(W)=>`wf-cleanup-needed:${J(W)}`,workflowConcurrency:(W,F)=>`wf-concurrency:${J(W)}:${J(F)}`,workflowConcurrencyHolder:(W)=>`wf-concurrency-holder:${J(W)}`,workflowHasServices:(W)=>`wf-has-services:${J(W)}`,finalizerState:(W)=>`wf-finalizer-state:${J(W)}`,teardownOwed:(W)=>`wf-teardown-needed:${J(W)}`,teardownDeadLetter:(W)=>`wf-teardown-deadletter:${J(W)}`,offload:(W,F)=>`offload:${J(W)}:${F}`,archive:(W,F)=>`archive:${J(W)}:${F}`,stateExecution:(W,F)=>`state:execution:${J(W)}:${J(F)}`,stateWorkflow:(W,F)=>`state:workflow-scope:${D}:${J(W)}:${J(F)}`,streamChunkPrefix:(W,F)=>`blob:${J(W)}:${F}:chunk:`,streamChunk:(W,F,X)=>`blob:${J(W)}:${F}:chunk:${String(X).padStart(10,"0")}`,streamTail:(W,F)=>`blob:${J(W)}:${F}:tail`,streamMetadata:(W,F)=>`blob:${J(W)}:${F}:meta`,budgetCharged:(W)=>`budget-charged:${W}`,toolEffect:(W,F,X)=>`tool-effect:${J(W)}:${F}:${X}`,workflowVisibilityStatus:(W,F)=>`wf-idx-status:${J(W)}:${J(F)}`,workflowVisibilityType:(W,F)=>`wf-idx-type:${J(W)}:${J(F)}`,workflowVisibilityCreated:(W,F)=>`wf-idx-created:${K(W)}:${J(F)}`,workflowVisibilityUpdated:(W,F)=>`wf-idx-updated:${K(W)}:${J(F)}`,workflowVisibilityDeadline:(W,F)=>`wf-idx-deadline:${K(W)}:${J(F)}`,workflowVisibilityManifest:(W)=>`wf-idx-manifest:${J(W)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"};var V;function p(){if(V&&"bun"in V)return V.bun;return globalThis.Bun}function x(){return typeof p()<"u"}function k(){if(V&&"process"in V)return V.process;return globalThis.process}function v(W){let X=k()?.getBuiltinModule;if(typeof X!=="function")return;return X(W)}function O(){let W=v("node:zlib");if(!W)throw Error("gzip/gunzip require Bun or Node 22.5+ (process.getBuiltinModule). "+"Not available in browser or edge runtimes \u2014 use CompressionStream directly.");return W}function T(W){if(x())return new Uint8Array(Bun.gzipSync(new Uint8Array(W)));return new Uint8Array(O().gzipSync(W))}function h(W){if(x())return new Uint8Array(Bun.gunzipSync(new Uint8Array(W)));return new Uint8Array(O().gunzipSync(W))}function A(){return v("node:zlib")}function R(){let W=A();if(!W)throw Error("Brotli compression requires Bun or Node 22.5+ with process.getBuiltinModule support. Use gzip compression for browser/edge runtimes.");return W}function w(W){return new Uint8Array(R().brotliCompressSync(W))}function n(W){return new Uint8Array(R().brotliDecompressSync(W))}var z=193,S=0,b=1,c=2,Q=2;function y(W){return l(W)}function l(W){switch(W){case"gzip":return{algorithm:"gzip",compress(F){return T(F)}};case"brotli":return{algorithm:"brotli",compress(F){return w(F)}};case"none":return{algorithm:"none",compress(F){return F}}}}async function Z(W,F,X){if(W.length<X||F.algorithm==="none"){let j=new Uint8Array(W.length+Q);return j[0]=z,j[1]=S,j.set(W,Q),j}let Y=await F.compress(W);if(Y.length+Q>=W.length+Q){let j=new Uint8Array(W.length+Q);return j[0]=z,j[1]=S,j.set(W,Q),j}let U=F.algorithm==="gzip"?b:c,$=new Uint8Array(Y.length+Q);return $[0]=z,$[1]=U,$.set(Y,Q),$}async function _(W){if(W.length<Q)throw Error("Compression payload missing 2-byte header.");if(W[0]!==z)throw Error("Compression payload missing magic byte 0xC1.");let F=W[1],X=W.slice(Q);switch(F){case S:return X;case b:return h(X);case c:return n(X);default:throw Error(`Compression payload uses unsupported algorithm byte 0x${F.toString(16).padStart(2,"0")}.`)}}var s=4096,d="gzip";function m(W){return{threshold:W?.threshold??s,algorithm:W?.algorithm??d}}class a{#W;#F;#X;constructor(W,F){this.#W=W;let X=m(F);if(this.#F=y(X.algorithm),this.#X=X.threshold,W.query){let Y=W.query.bind(W);Object.defineProperty(this,"query",{value:Y,enumerable:!0,configurable:!0})}}capabilities(){let W=this.#W.capabilities();return{...W.persistence===void 0?{}:{persistence:W.persistence},readAfterWrite:W.readAfterWrite,scanConsistency:W.scanConsistency,atomicBatch:W.atomicBatch,conditionalBatch:!1,boundedRangeDelete:!1}}async get(W){let F=await this.#W.get(W);if(!F)return null;return _(F)}async put(W,F){let X=await Z(F,this.#F,this.#X);return this.#W.put(W,X)}async delete(W){return this.#W.delete(W)}async*scan(W,F){for await(let[X,Y]of this.#W.scan(W,F))yield[X,await _(Y)]}async batch(W){q("batch operations",W.length);let F=await Promise.all(W.map(async(X)=>{if(X.type==="put")return{type:"put",key:X.key,value:await Z(X.value,this.#F,this.#X)};return X}));return this.#W.batch(F)}[Symbol.dispose](){this.#W[Symbol.dispose]()}}export{a as CompressedStorage};
2
+ var i=import.meta.require,t=(F,X,Y)=>{if(X!=null){if(typeof X!=="object"&&typeof X!=="function")throw TypeError('Object expected to be assigned to "using" declaration');let $;if(Y)$=X[Symbol.asyncDispose];if($===void 0)$=X[Symbol.dispose];if(typeof $!=="function")throw TypeError("Object not disposable");F.push([Y,$,X])}else if(Y)F.push([Y]);return X},r=(F,X,Y)=>{let $=(j)=>X=Y?new SuppressedError(j,X,"An error was suppressed during disposal"):(Y=!0,j),V=(j)=>{while(j=F.pop())try{var K=j[1]&&j[1].call(j[2]);if(j[0])return Promise.resolve(K).then(V,(C)=>($(C),V()))}catch(C){$(C)}if(Y)throw X};return V()};function G(F,X,Y){if(!F.capabilities()[X])throw Error(`Feature "${Y}" requires storage capability "${X}", but this storage backend does not provide it.`)}function g(F){let X=F.capabilities(),Y=[];if(X.persistence!=="local"&&X.persistence!=="remote")Y.push(`persistence must be "local" or "remote" (got "${X.persistence}")`);if(X.readAfterWrite!=="linearizable")Y.push(`readAfterWrite must be "linearizable" (got "${X.readAfterWrite}")`);if(X.scanConsistency!=="snapshot")Y.push(`scanConsistency must be "snapshot" (got "${X.scanConsistency}")`);if(!X.atomicBatch)Y.push("atomicBatch must be true");if(!X.conditionalBatch)Y.push("conditionalBatch must be true");if(Y.length>0)throw Error(`Storage is not durable enough for recovery: ${Y.join("; ")}.`)}var D="default";async function M(F,X){return await F.get(X)!==null}async function*q(F,X,Y){for await(let[$]of F.scan(X,Y))yield $}async function N(F,X){let Y=0;for await(let $ of q(F,X))Y++;return Y}async function H(F,X){let Y=[];for await(let $ of q(F,X))Y.push({type:"delete",key:$});if(Y.length===0)return 0;return await F.batch(Y),Y.length}async function XF(F,X,Y){let $=[];for await(let V of q(F,X,Y))$.push({type:"delete",key:V});if($.length===0)return 0;return await F.batch($),$.length}var u=["actrec:","archive:","async-act:","attr:","audit:bulk:","blob:","budget:","budget-charged:","child-by-parent:","ev:","fleet-event-by-workflow:","fleet-event:","fleet-event-tail","idx:","lease:","liveness:","offload:","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-teardown:","wf-teardown-deadletter:","wf-teardown-needed:","wf-teardown-succeeded:","wf-terminal:"];var L=1e4,QF=1e4;class v extends Error{code="StorageBatchOperationLimitExceededError";cap=L;count;target;constructor(F,X){super(`${F} count ${X} exceeds MAX_BATCH_OPERATIONS (${L}).`);this.name="StorageBatchOperationLimitExceededError",this.target=F,this.count=X}}function z(F,X){if(X>L)throw new v(F,X)}function UF(F){return F.length>0?F.slice(0,-1)+String.fromCharCode(F.charCodeAt(F.length-1)+1):"\xFF"}function VF(F,X={}){if(X.gt!==void 0&&F<=X.gt)return!1;if(X.gte!==void 0&&F<X.gte)return!1;if(X.lt!==void 0&&F>=X.lt)return!1;if(X.lte!==void 0&&F>X.lte)return!1;return!0}function PF(F,X){if(F===null||X===null)return F===X;if(F.byteLength!==X.byteLength)return!1;for(let Y=0;Y<F.byteLength;Y++)if(F[Y]!==X[Y])return!1;return!0}async function qF(F,X){if(F.has)return F.has(X);return M(F,X)}function zF(F,X,Y){if(F.keys)return F.keys(X,Y);return q(F,X,Y)}async function WF(F,X){if(F.count)return F.count(X);return N(F,X)}async function CF(F,X){if(F.deletePrefix)return F.deletePrefix(X);return H(F,X)}async function GF(F,X){z("batch operations",X.length),await F.batch(X)}async function DF(F,X,Y){if(z("conditionalBatch conditions",X.length),z("conditionalBatch operations",Y.length),G(F,"conditionalBatch","storageConditionalBatch"),!F.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return F.conditionalBatch(X,Y)}function J(F){return encodeURIComponent(F)}function LF(F){return decodeURIComponent(F)}function SF(F){try{return decodeURIComponent(F)}catch{return null}}var Q=(F)=>String(F).padStart(16,"0"),f="0",p="1",B=(F,X,Y,$)=>`sig:${J(F)}:${J(X)}:${$}:${J(Y)}`,ZF={workflow:(F)=>`wf:${J(F)}`,checkpoint:(F)=>`wf:${J(F)}:ckpt`,checkpointHistory:(F,X)=>`wf:${J(F)}:ckpt:${String(X).padStart(10,"0")}`,timelinePrefix:(F)=>`wf:${J(F)}:timeline:`,timeline:(F,X)=>`wf:${J(F)}:timeline:${String(X).padStart(10,"0")}`,schedule:(F)=>`schedule:${J(F)}`,scheduleTick:(F,X)=>`schedule-due:${String(F).padStart(16,"0")}:${J(X)}`,scheduleRun:(F)=>`schedule-run:${J(F)}`,scheduleRunLink:(F)=>`schedule-run-link:${J(F)}`,scheduleRunBySchedulePrefix:(F)=>`schedule-run-by-schedule:${J(F)}:`,scheduleRunBySchedule:(F,X)=>`schedule-run-by-schedule:${J(F)}:${J(X)}`,operation:(F,X,Y)=>`op:${F}:${Q(X)}:${Y}`,operationInflight:(F)=>`op:inflight:${F}`,operationQueued:(F)=>`op:queued:${F}`,operationResolved:(F)=>`op:resolved:${F}`,operationDeadLetterPrefix:()=>"op:dead-letter:",operationDeadLetter:(F)=>`op:dead-letter:${F}`,bulkOperationAuditPrefix:()=>"audit:bulk:",bulkOperationAudit:(F,X,Y)=>`audit:bulk:${Q(F)}:${J(X)}:${J(Y)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(F,X)=>`op:resolved-by-time:${Q(F)}:${J(X)}`,asyncActivity:(F,X)=>`async-act:v1:${J(F)}:${J(X)}`,asyncActivityResolution:(F,X)=>`async-act:v1:${J(F)}:${J(X)}:resolution`,activityReconciliationPrefix:(F)=>`actrec:v1:${J(F)}:`,activityReconciliation:(F,X,Y)=>`actrec:v1:${J(F)}:${J(X)}:${Y}`,eventPrefix:(F)=>`ev:${J(F)}:`,event:(F,X)=>`ev:${J(F)}:${String(X).padStart(10,"0")}`,eventHead:(F)=>`ev:${J(F)}:head`,eventWatermark:(F)=>`ev:${J(F)}:watermark`,fleetEventPrefix:()=>"fleet-event:",fleetEvent:(F)=>`fleet-event:${String(F).padStart(10,"0")}`,fleetEventTail:()=>"fleet-event-tail",fleetEventByWorkflowPrefix:(F)=>`fleet-event-by-workflow:${J(F)}:`,fleetEventByWorkflow:(F,X)=>`fleet-event-by-workflow:${J(F)}:${String(X).padStart(10,"0")}`,signal:(F,X,Y)=>B(F,X,Y,p),startSignal:(F,X,Y)=>B(F,X,Y,f),signalSequence:(F)=>`sigseq:v1:${J(F)}`,signalAcceptedResponsePrefix:(F)=>`sigres:v1:${J(F)}:`,signalAcceptedResponse:(F,X,Y)=>`sigres:v1:${J(F)}:${J(X)}:${J(Y)}`,deadline:(F,X)=>`wf-deadline:${Q(F)}:${J(X)}`,terminalCleanup:(F,X)=>`wf-cleanup:${Q(F)}:${J(X)}`,teardownTimer:(F,X)=>`wf-teardown:${Q(F)}:${J(X)}`,delayedStart:(F,X)=>`wf-delayed:${Q(F)}:${J(X)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(F,X)=>`wf-terminal:${Q(F)}:${J(X)}`,attribute:(F)=>`attr:${J(F)}`,attributeIndex:(F,X,Y)=>`idx:${F}:${X}:${J(Y)}`,tagIndex:(F,X)=>`tag:${J(F)}:${J(X)}`,updatePrefix:(F)=>`upd:${J(F)}:`,update:(F,X)=>`upd:${J(F)}:${X}`,updateResponse:(F)=>`upr:${F}`,updateIdempotency:(F,X)=>`upk:${J(F)}:${X}`,startIdempotency:(F)=>`start-idem:${J(F)}`,startIdempotencySignalId:(F)=>`start-idem:${F}`,livenessPrefix:()=>"liveness:",liveness:(F)=>`liveness:${J(F)}`,leasePrefix:()=>"lease:",leaseEpoch:()=>"lease:epoch",leaseHolder:()=>"lease:holder",budget:(F,X,Y)=>`budget:${F}:${X}:${Y}`,review:(F,X)=>`review:${J(F)}:${X}`,workflowHeaders:(F)=>`wf-headers:${J(F)}`,childCancellationPrefix:(F)=>`child-cancel:${J(F)}:`,childCancellation:(F,X)=>`child-cancel:${J(F)}:${J(X)}`,childWorkflowByParentPrefix:(F,X)=>`child-by-parent:${J(F)}:${X===void 0?"":`${J(X)}:`}`,childWorkflowByParent:(F,X,Y)=>`child-by-parent:${J(F)}:${X===void 0?"":`${J(X)}:`}${J(Y)}`,terminalCleanupNeeded:(F)=>`wf-cleanup-needed:${J(F)}`,workflowConcurrency:(F,X)=>`wf-concurrency:${J(F)}:${J(X)}`,workflowConcurrencyHolder:(F)=>`wf-concurrency-holder:${J(F)}`,workflowHasServices:(F)=>`wf-has-services:${J(F)}`,finalizerState:(F)=>`wf-finalizer-state:${J(F)}`,teardownOwed:(F)=>`wf-teardown-needed:${J(F)}`,teardownSucceeded:(F)=>`wf-teardown-succeeded:${J(F)}`,teardownDeadLetter:(F)=>`wf-teardown-deadletter:${J(F)}`,offload:(F,X)=>`offload:${J(F)}:${X}`,archive:(F,X)=>`archive:${J(F)}:${X}`,stateExecution:(F,X)=>`state:execution:${J(F)}:${J(X)}`,stateWorkflow:(F,X)=>`state:workflow-scope:${D}:${J(F)}:${J(X)}`,streamChunkPrefix:(F,X)=>`blob:${J(F)}:${X}:chunk:`,streamChunk:(F,X,Y)=>`blob:${J(F)}:${X}:chunk:${String(Y).padStart(10,"0")}`,streamTail:(F,X)=>`blob:${J(F)}:${X}:tail`,streamMetadata:(F,X)=>`blob:${J(F)}:${X}:meta`,budgetCharged:(F)=>`budget-charged:${F}`,toolEffect:(F,X,Y)=>`tool-effect:${J(F)}:${X}:${Y}`,workflowVisibilityStatus:(F,X)=>`wf-idx-status:${J(F)}:${J(X)}`,workflowVisibilityType:(F,X)=>`wf-idx-type:${J(F)}:${J(X)}`,workflowVisibilityCreated:(F,X)=>`wf-idx-created:${Q(F)}:${J(X)}`,workflowVisibilityUpdated:(F,X)=>`wf-idx-updated:${Q(F)}:${J(X)}`,workflowVisibilityDeadline:(F,X)=>`wf-idx-deadline:${Q(F)}:${J(X)}`,workflowVisibilityManifest:(F)=>`wf-idx-manifest:${J(F)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"};var P;function I(){if(P&&"bun"in P)return P.bun;return globalThis.Bun}function E(){return typeof I()<"u"}function k(){if(P&&"process"in P)return P.process;return globalThis.process}function O(F){let Y=k()?.getBuiltinModule;if(typeof Y!=="function")return;return Y(F)}function x(){let F=O("node:zlib");if(!F)throw Error("gzip/gunzip require Bun or Node 22.5+ (process.getBuiltinModule). "+"Not available in browser or edge runtimes \u2014 use CompressionStream directly.");return F}function A(F){if(E())return new Uint8Array(Bun.gzipSync(new Uint8Array(F)));return new Uint8Array(x().gzipSync(F))}function h(F){if(E())return new Uint8Array(Bun.gunzipSync(new Uint8Array(F)));return new Uint8Array(x().gunzipSync(F))}function R(){return O("node:zlib")}function T(){let F=R();if(!F)throw Error("Brotli compression requires Bun or Node 22.5+ with process.getBuiltinModule support. Use gzip compression for browser/edge runtimes.");return F}function w(F){return new Uint8Array(T().brotliCompressSync(F))}function n(F){return new Uint8Array(T().brotliDecompressSync(F))}var W=193,S=0,b=1,c=2,U=2;function y(F){return l(F)}function l(F){switch(F){case"gzip":return{algorithm:"gzip",compress(X){return A(X)}};case"brotli":return{algorithm:"brotli",compress(X){return w(X)}};case"none":return{algorithm:"none",compress(X){return X}}}}async function Z(F,X,Y){if(F.length<Y||X.algorithm==="none"){let K=new Uint8Array(F.length+U);return K[0]=W,K[1]=S,K.set(F,U),K}let $=await X.compress(F);if($.length+U>=F.length+U){let K=new Uint8Array(F.length+U);return K[0]=W,K[1]=S,K.set(F,U),K}let V=X.algorithm==="gzip"?b:c,j=new Uint8Array($.length+U);return j[0]=W,j[1]=V,j.set($,U),j}async function _(F){if(F.length<U)throw Error("Compression payload missing 2-byte header.");if(F[0]!==W)throw Error("Compression payload missing magic byte 0xC1.");let X=F[1],Y=F.slice(U);switch(X){case S:return Y;case b:return h(Y);case c:return n(Y);default:throw Error(`Compression payload uses unsupported algorithm byte 0x${X.toString(16).padStart(2,"0")}.`)}}var s=4096,d="gzip";function m(F){return{threshold:F?.threshold??s,algorithm:F?.algorithm??d}}class a{#F;#X;#J;constructor(F,X){this.#F=F;let Y=m(X);if(this.#X=y(Y.algorithm),this.#J=Y.threshold,F.query){let $=F.query.bind(F);Object.defineProperty(this,"query",{value:$,enumerable:!0,configurable:!0})}}capabilities(){let F=this.#F.capabilities();return{persistence:F.persistence,readAfterWrite:F.readAfterWrite,scanConsistency:F.scanConsistency,atomicBatch:F.atomicBatch,conditionalBatch:!1,boundedRangeDelete:!1}}async get(F){let X=await this.#F.get(F);if(!X)return null;return _(X)}async put(F,X){let Y=await Z(X,this.#X,this.#J);return this.#F.put(F,Y)}async delete(F){return this.#F.delete(F)}async*scan(F,X){for await(let[Y,$]of this.#F.scan(F,X))yield[Y,await _($)]}async batch(F){z("batch operations",F.length);let X=await Promise.all(F.map(async(Y)=>{if(Y.type==="put")return{type:"put",key:Y.key,value:await Z(Y.value,this.#X,this.#J)};return Y}));return this.#F.batch(X)}[Symbol.dispose](){this.#F[Symbol.dispose]()}}export{a as CompressedStorage};
@@ -1,3 +1,4 @@
1
+ import { readBoundedNdjsonResponse } from "./bounded-ndjson-response.js";
1
2
  import { decodeBase64ToBytes, encodeBytesToBase64, isRecord } from "./byte-encoding.js";
2
3
  import { normalizeDeleteRangeOptions } from "./delete-range.js";
3
4
  import {
@@ -47,42 +48,6 @@ function parseScanLine(line) {
47
48
  const entry = parseScanEntry(JSON.parse(line));
48
49
  return [entry.key, decodeBase64ToBytes(entry.value)];
49
50
  }
50
- function assertScanResponseSize(bytesRead) {
51
- if (bytesRead > MAX_SCAN_RESPONSE_BYTES)
52
- throw Error("HTTPStorage scan response exceeded the maximum allowed size.");
53
- }
54
- async function* readNdjsonLines(response) {
55
- if (response.body === null)
56
- return;
57
- const reader = response.body.getReader(), decoder = new TextDecoder;
58
- let bufferedText = "", bytesRead = 0, reachedEndOfStream = !1;
59
- try {
60
- while (!0) {
61
- const { done, value } = await reader.read();
62
- if (done) {
63
- reachedEndOfStream = !0;
64
- break;
65
- }
66
- bytesRead += value.byteLength;
67
- assertScanResponseSize(bytesRead);
68
- bufferedText += decoder.decode(value, { stream: !0 });
69
- const lines = bufferedText.split(`
70
- `);
71
- bufferedText = lines.pop() ?? "";
72
- for (const line of lines)
73
- yield line;
74
- }
75
- bufferedText += decoder.decode();
76
- if (bufferedText.length > 0)
77
- yield bufferedText;
78
- } finally {
79
- try {
80
- if (!reachedEndOfStream)
81
- await reader.cancel();
82
- } catch {}
83
- reader.releaseLock();
84
- }
85
- }
86
51
 
87
52
  export class HTTPStorage {
88
53
  #baseUrl;
@@ -151,7 +116,10 @@ export class HTTPStorage {
151
116
  method: "GET",
152
117
  headers: { accept: "application/x-ndjson" }
153
118
  });
154
- for await (const line of readNdjsonLines(response)) {
119
+ for await (const line of readBoundedNdjsonResponse(response, {
120
+ maximumBytes: MAX_SCAN_RESPONSE_BYTES,
121
+ sizeLimitError: () => Error("HTTPStorage scan response exceeded the maximum allowed size.")
122
+ })) {
155
123
  const entry = parseScanLine(line);
156
124
  if (entry !== null)
157
125
  yield entry;
@@ -90,6 +90,9 @@ declare const exportedKeys: {
90
90
  readonly schedule: (id: string) => string;
91
91
  readonly scheduleTick: (fireAt: number, id: string) => string;
92
92
  readonly scheduleRun: (workflowId: string) => string;
93
+ readonly scheduleRunLink: (workflowId: string) => string;
94
+ readonly scheduleRunBySchedulePrefix: (scheduleId: string) => string;
95
+ readonly scheduleRunBySchedule: (scheduleId: string, workflowId: string) => string;
93
96
  readonly operation: (queue: string, scheduledAt: number, id: string) => string;
94
97
  readonly operationInflight: (id: string) => string;
95
98
  readonly operationQueued: (id: string) => string;
@@ -143,12 +146,15 @@ declare const exportedKeys: {
143
146
  readonly workflowHeaders: (workflowId: string) => string;
144
147
  readonly childCancellationPrefix: (workflowId: string) => string;
145
148
  readonly childCancellation: (workflowId: string, childWorkflowId: string) => string;
149
+ readonly childWorkflowByParentPrefix: (parentWorkflowId: string, parentWorkflowExecutionToken?: string) => string;
150
+ readonly childWorkflowByParent: (parentWorkflowId: string, parentWorkflowExecutionToken: string | undefined, childWorkflowId: string) => string;
146
151
  readonly terminalCleanupNeeded: (workflowId: string) => string;
147
152
  readonly workflowConcurrency: (workflowType: string, partitionKey: string) => string;
148
153
  readonly workflowConcurrencyHolder: (workflowId: string) => string;
149
154
  readonly workflowHasServices: (workflowId: string) => string;
150
155
  readonly finalizerState: (workflowId: string) => string;
151
156
  readonly teardownOwed: (workflowId: string) => string;
157
+ readonly teardownSucceeded: (workflowId: string) => string;
152
158
  readonly teardownDeadLetter: (workflowId: string) => string;
153
159
  readonly offload: (workflowId: string, key: string) => string;
154
160
  readonly archive: (workflowId: string, key: string) => string;
@@ -349,7 +355,7 @@ declare const exportedTextValueStore: typeof textValueStore;
349
355
  * void isWeftKey;
350
356
  * ```
351
357
  */
352
- declare const exportedWeftReservedKeyPrefixes: readonly ["actrec:", "archive:", "async-act:", "attr:", "audit:bulk:", "blob:", "budget:", "budget-charged:", "ev:", "fleet-event-by-workflow:", "fleet-event:", "fleet-event-tail", "idx:", "lease:", "liveness:", "offload:", "op:", "review:", "schedule:", "schedule-due:", "schedule-run:", "sig:", "sigres:", "sigseq:", "start-idem:", "state:", "tag:", "tool-effect:", "upd:", "upk:", "upr:", "wf:", "wf-cleanup:", "wf-cleanup-needed:", "wf-concurrency:", "wf-concurrency-holder:", "wf-deadline:", "wf-delayed:", "wf-finalizer-state:", "wf-has-services:", "wf-headers:", "wf-idx-", "wf-teardown:", "wf-teardown-deadletter:", "wf-teardown-needed:", "wf-terminal:"];
358
+ 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", "idx:", "lease:", "liveness:", "offload:", "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-teardown:", "wf-teardown-deadletter:", "wf-teardown-needed:", "wf-teardown-succeeded:", "wf-terminal:"];
353
359
  /**
354
360
  * Re-exported {@link withCodec}. See the original declaration for full docs.
355
361
  *
@@ -365,6 +365,14 @@ export declare const KEYS: {
365
365
  readonly schedule: (id: string) => string;
366
366
  readonly scheduleTick: (fireAt: number, id: string) => string;
367
367
  readonly scheduleRun: (workflowId: string) => string;
368
+ /**
369
+ * Durable per-workflow manifest for the schedule that launched a run. Unlike
370
+ * `scheduleRun`, this link survives terminal cleanup so schedule history can
371
+ * be queried until the workflow itself is purged.
372
+ */
373
+ readonly scheduleRunLink: (workflowId: string) => string;
374
+ readonly scheduleRunBySchedulePrefix: (scheduleId: string) => string;
375
+ readonly scheduleRunBySchedule: (scheduleId: string, workflowId: string) => string;
368
376
  readonly operation: (queue: string, scheduledAt: number, id: string) => string;
369
377
  readonly operationInflight: (id: string) => string;
370
378
  readonly operationQueued: (id: string) => string;
@@ -471,6 +479,8 @@ export declare const KEYS: {
471
479
  readonly workflowHeaders: (workflowId: string) => string;
472
480
  readonly childCancellationPrefix: (workflowId: string) => string;
473
481
  readonly childCancellation: (workflowId: string, childWorkflowId: string) => string;
482
+ readonly childWorkflowByParentPrefix: (parentWorkflowId: string, parentWorkflowExecutionToken?: string) => string;
483
+ readonly childWorkflowByParent: (parentWorkflowId: string, parentWorkflowExecutionToken: string | undefined, childWorkflowId: string) => string;
474
484
  readonly terminalCleanupNeeded: (workflowId: string) => string;
475
485
  readonly workflowConcurrency: (workflowType: string, partitionKey: string) => string;
476
486
  readonly workflowConcurrencyHolder: (workflowId: string) => string;
@@ -512,14 +522,16 @@ export declare const KEYS: {
512
522
  * success or when it dead-letters, which is what unblocks purge.
513
523
  */
514
524
  readonly teardownOwed: (workflowId: string) => string;
525
+ /** Durable successful finalizer outcome, retained until workflow purge or retention. */
526
+ readonly teardownSucceeded: (workflowId: string) => string;
515
527
  /**
516
528
  * Durable audit record written when a workflow's finalizer permanently fails — the
517
529
  * retry horizon is reached, or the recorded resource state vanished so the finalizer
518
530
  * can never run (issue #446 Phase 2). Holds the `TeardownDeadLetterRecord` shape
519
- * `{ type, lastError, attempts, deadLetteredAt, finalizerInput? }`. **Excluded from
520
- * the workflow purge delete-set** so it survives as the operator's evidence of a
521
- * leaked external resource in-process `WorkflowTeardownEvent`s are not durable, so
522
- * raw inspection of this key is the supported operator surface after purge.
531
+ * `{ type, lastError, attempts, deadLetteredAt, workflowExecutionToken?, finalizerInput? }`.
532
+ * **Excluded from the workflow purge delete-set** so it survives as the operator's
533
+ * evidence of a leaked external resource and remains queryable through the durable
534
+ * finalizer-status API after purge.
523
535
  */
524
536
  readonly teardownDeadLetter: (workflowId: string) => string;
525
537
  readonly offload: (workflowId: string, key: string) => string;
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- var T=import.meta.require,v=(E,_,F)=>{if(_!=null){if(typeof _!=="object"&&typeof _!=="function")throw TypeError('Object expected to be assigned to "using" declaration');let P;if(F)P=_[Symbol.asyncDispose];if(P===void 0)P=_[Symbol.dispose];if(typeof P!=="function")throw TypeError("Object not disposable");E.push([F,P,_])}else if(F)E.push([F]);return _},H=(E,_,F)=>{let P=(W)=>_=F?new SuppressedError(W,_,"An error was suppressed during disposal"):(F=!0,W),Y=(W)=>{while(W=E.pop())try{var Z=W[1]&&W[1].call(W[2]);if(W[0])return Promise.resolve(Z).then(Y,(X)=>(P(X),Y()))}catch(X){P(X)}if(F)throw _};return Y()};function D(E,_,F){if(!E.capabilities()[_])throw Error(`Feature "${F}" requires storage capability "${_}", but this storage backend does not provide it.`)}function $(E){let _=E.capabilities(),F=[];if(_.persistence!=="local"&&_.persistence!=="remote")F.push(`persistence must be "local" or "remote" (got "${_.persistence}")`);if(_.readAfterWrite!=="linearizable")F.push(`readAfterWrite must be "linearizable" (got "${_.readAfterWrite}")`);if(_.scanConsistency!=="snapshot")F.push(`scanConsistency must be "snapshot" (got "${_.scanConsistency}")`);if(!_.atomicBatch)F.push("atomicBatch must be true");if(!_.conditionalBatch)F.push("conditionalBatch must be true");if(F.length>0)throw Error(`Storage is not durable enough for recovery: ${F.join("; ")}.`)}var L="default";async function J(E,_){return await E.get(_)!==null}async function*U(E,_,F){for await(let[P]of E.scan(_,F))yield P}async function K(E,_){let F=0;for await(let P of U(E,_))F++;return F}async function M(E,_){let F=[];for await(let P of U(E,_))F.push({type:"delete",key:P});if(F.length===0)return 0;return await E.batch(F),F.length}async function h(E,_,F){let P=[];for await(let Y of U(E,_,F))P.push({type:"delete",key:Y});if(P.length===0)return 0;return await E.batch(P),P.length}var j=["actrec:","archive:","async-act:","attr:","audit:bulk:","blob:","budget:","budget-charged:","ev:","fleet-event-by-workflow:","fleet-event:","fleet-event-tail","idx:","lease:","liveness:","offload:","op:","review:","schedule:","schedule-due:","schedule-run:","sig:","sigres:","sigseq:","start-idem:","state:","tag:","tool-effect:","upd:","upk:","upr:","wf:","wf-cleanup:","wf-cleanup-needed:","wf-concurrency:","wf-concurrency-holder:","wf-deadline:","wf-delayed:","wf-finalizer-state:","wf-has-services:","wf-headers:","wf-idx-","wf-teardown:","wf-teardown-deadletter:","wf-teardown-needed:","wf-terminal:"];var V=1e4,u=1e4;class Q extends Error{code="StorageBatchOperationLimitExceededError";cap=V;count;target;constructor(E,_){super(`${E} count ${_} exceeds MAX_BATCH_OPERATIONS (${V}).`);this.name="StorageBatchOperationLimitExceededError",this.target=E,this.count=_}}function G(E,_){if(_>V)throw new Q(E,_)}function y(E){return E.length>0?E.slice(0,-1)+String.fromCharCode(E.charCodeAt(E.length-1)+1):"\xFF"}function g(E,_={}){if(_.gt!==void 0&&E<=_.gt)return!1;if(_.gte!==void 0&&E<_.gte)return!1;if(_.lt!==void 0&&E>=_.lt)return!1;if(_.lte!==void 0&&E>_.lte)return!1;return!0}function n(E,_){if(E===null||_===null)return E===_;if(E.byteLength!==_.byteLength)return!1;for(let F=0;F<E.byteLength;F++)if(E[F]!==_[F])return!1;return!0}async function p(E,_){if(E.has)return E.has(_);return J(E,_)}function s(E,_,F){if(E.keys)return E.keys(_,F);return U(E,_,F)}async function f(E,_){if(E.count)return E.count(_);return K(E,_)}async function a(E,_){if(E.deletePrefix)return E.deletePrefix(_);return M(E,_)}async function I(E,_){G("batch operations",_.length),await E.batch(_)}async function l(E,_,F){if(G("conditionalBatch conditions",_.length),G("conditionalBatch operations",F.length),D(E,"conditionalBatch","storageConditionalBatch"),!E.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return E.conditionalBatch(_,F)}function S(E){return encodeURIComponent(E)}function k(E){return decodeURIComponent(E)}function t(E){try{return decodeURIComponent(E)}catch{return null}}var R=(E)=>String(E).padStart(16,"0"),z="0",B="1",O=(E,_,F,P)=>`sig:${S(E)}:${S(_)}:${P}:${S(F)}`,d={workflow:(E)=>`wf:${S(E)}`,checkpoint:(E)=>`wf:${S(E)}:ckpt`,checkpointHistory:(E,_)=>`wf:${S(E)}:ckpt:${String(_).padStart(10,"0")}`,timelinePrefix:(E)=>`wf:${S(E)}:timeline:`,timeline:(E,_)=>`wf:${S(E)}:timeline:${String(_).padStart(10,"0")}`,schedule:(E)=>`schedule:${S(E)}`,scheduleTick:(E,_)=>`schedule-due:${String(E).padStart(16,"0")}:${S(_)}`,scheduleRun:(E)=>`schedule-run:${S(E)}`,operation:(E,_,F)=>`op:${E}:${R(_)}:${F}`,operationInflight:(E)=>`op:inflight:${E}`,operationQueued:(E)=>`op:queued:${E}`,operationResolved:(E)=>`op:resolved:${E}`,operationDeadLetterPrefix:()=>"op:dead-letter:",operationDeadLetter:(E)=>`op:dead-letter:${E}`,bulkOperationAuditPrefix:()=>"audit:bulk:",bulkOperationAudit:(E,_,F)=>`audit:bulk:${R(E)}:${S(_)}:${S(F)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(E,_)=>`op:resolved-by-time:${R(E)}:${S(_)}`,asyncActivity:(E,_)=>`async-act:v1:${S(E)}:${S(_)}`,asyncActivityResolution:(E,_)=>`async-act:v1:${S(E)}:${S(_)}:resolution`,activityReconciliationPrefix:(E)=>`actrec:v1:${S(E)}:`,activityReconciliation:(E,_,F)=>`actrec:v1:${S(E)}:${S(_)}:${F}`,eventPrefix:(E)=>`ev:${S(E)}:`,event:(E,_)=>`ev:${S(E)}:${String(_).padStart(10,"0")}`,eventHead:(E)=>`ev:${S(E)}:head`,eventWatermark:(E)=>`ev:${S(E)}:watermark`,fleetEventPrefix:()=>"fleet-event:",fleetEvent:(E)=>`fleet-event:${String(E).padStart(10,"0")}`,fleetEventTail:()=>"fleet-event-tail",fleetEventByWorkflowPrefix:(E)=>`fleet-event-by-workflow:${S(E)}:`,fleetEventByWorkflow:(E,_)=>`fleet-event-by-workflow:${S(E)}:${String(_).padStart(10,"0")}`,signal:(E,_,F)=>O(E,_,F,B),startSignal:(E,_,F)=>O(E,_,F,z),signalSequence:(E)=>`sigseq:v1:${S(E)}`,signalAcceptedResponsePrefix:(E)=>`sigres:v1:${S(E)}:`,signalAcceptedResponse:(E,_,F)=>`sigres:v1:${S(E)}:${S(_)}:${S(F)}`,deadline:(E,_)=>`wf-deadline:${R(E)}:${S(_)}`,terminalCleanup:(E,_)=>`wf-cleanup:${R(E)}:${S(_)}`,teardownTimer:(E,_)=>`wf-teardown:${R(E)}:${S(_)}`,delayedStart:(E,_)=>`wf-delayed:${R(E)}:${S(_)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(E,_)=>`wf-terminal:${R(E)}:${S(_)}`,attribute:(E)=>`attr:${S(E)}`,attributeIndex:(E,_,F)=>`idx:${E}:${_}:${S(F)}`,tagIndex:(E,_)=>`tag:${S(E)}:${S(_)}`,updatePrefix:(E)=>`upd:${S(E)}:`,update:(E,_)=>`upd:${S(E)}:${_}`,updateResponse:(E)=>`upr:${E}`,updateIdempotency:(E,_)=>`upk:${S(E)}:${_}`,startIdempotency:(E)=>`start-idem:${S(E)}`,startIdempotencySignalId:(E)=>`start-idem:${E}`,livenessPrefix:()=>"liveness:",liveness:(E)=>`liveness:${S(E)}`,leasePrefix:()=>"lease:",leaseEpoch:()=>"lease:epoch",leaseHolder:()=>"lease:holder",budget:(E,_,F)=>`budget:${E}:${_}:${F}`,review:(E,_)=>`review:${S(E)}:${_}`,workflowHeaders:(E)=>`wf-headers:${S(E)}`,childCancellationPrefix:(E)=>`child-cancel:${S(E)}:`,childCancellation:(E,_)=>`child-cancel:${S(E)}:${S(_)}`,terminalCleanupNeeded:(E)=>`wf-cleanup-needed:${S(E)}`,workflowConcurrency:(E,_)=>`wf-concurrency:${S(E)}:${S(_)}`,workflowConcurrencyHolder:(E)=>`wf-concurrency-holder:${S(E)}`,workflowHasServices:(E)=>`wf-has-services:${S(E)}`,finalizerState:(E)=>`wf-finalizer-state:${S(E)}`,teardownOwed:(E)=>`wf-teardown-needed:${S(E)}`,teardownDeadLetter:(E)=>`wf-teardown-deadletter:${S(E)}`,offload:(E,_)=>`offload:${S(E)}:${_}`,archive:(E,_)=>`archive:${S(E)}:${_}`,stateExecution:(E,_)=>`state:execution:${S(E)}:${S(_)}`,stateWorkflow:(E,_)=>`state:workflow-scope:${L}:${S(E)}:${S(_)}`,streamChunkPrefix:(E,_)=>`blob:${S(E)}:${_}:chunk:`,streamChunk:(E,_,F)=>`blob:${S(E)}:${_}:chunk:${String(F).padStart(10,"0")}`,streamTail:(E,_)=>`blob:${S(E)}:${_}:tail`,streamMetadata:(E,_)=>`blob:${S(E)}:${_}:meta`,budgetCharged:(E)=>`budget-charged:${E}`,toolEffect:(E,_,F)=>`tool-effect:${S(E)}:${_}:${F}`,workflowVisibilityStatus:(E,_)=>`wf-idx-status:${S(E)}:${S(_)}`,workflowVisibilityType:(E,_)=>`wf-idx-type:${S(E)}:${S(_)}`,workflowVisibilityCreated:(E,_)=>`wf-idx-created:${R(E)}:${S(_)}`,workflowVisibilityUpdated:(E,_)=>`wf-idx-updated:${R(E)}:${S(_)}`,workflowVisibilityDeadline:(E,_)=>`wf-idx-deadline:${R(E)}:${S(_)}`,workflowVisibilityManifest:(E)=>`wf-idx-manifest:${S(E)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"};export{t as tryDecodeStorageKeyComponent,n as storageValuesEqual,s as storageKeys,p as storageHas,a as storageDeletePrefix,f as storageCount,l as storageConditionalBatch,I as storageBatch,y as resolvePrefixRangeEnd,D as requireStorageCapability,g as matchesScanOptions,S as encodeStorageKeyComponent,k as decodeStorageKeyComponent,G as assertStorageBatchOperationCount,$ as assertDurableStorageForRecovery,j as WEFT_RESERVED_KEY_PREFIXES,Q as StorageBatchOperationLimitExceededError,u as MAX_SCAN_LIMIT,V as MAX_BATCH_OPERATIONS,d as KEYS,L as DEFAULT_SCOPE};
2
+ var H=import.meta.require,C=(E,_,F)=>{if(_!=null){if(typeof _!=="object"&&typeof _!=="function")throw TypeError('Object expected to be assigned to "using" declaration');let P;if(F)P=_[Symbol.asyncDispose];if(P===void 0)P=_[Symbol.dispose];if(typeof P!=="function")throw TypeError("Object not disposable");E.push([F,P,_])}else if(F)E.push([F]);return _},N=(E,_,F)=>{let P=(Y)=>_=F?new SuppressedError(Y,_,"An error was suppressed during disposal"):(F=!0,Y),U=(Y)=>{while(Y=E.pop())try{var $=Y[1]&&Y[1].call(Y[2]);if(Y[0])return Promise.resolve($).then(U,(D)=>(P(D),U()))}catch(D){P(D)}if(F)throw _};return U()};function L(E,_,F){if(!E.capabilities()[_])throw Error(`Feature "${F}" requires storage capability "${_}", but this storage backend does not provide it.`)}function j(E){let _=E.capabilities(),F=[];if(_.persistence!=="local"&&_.persistence!=="remote")F.push(`persistence must be "local" or "remote" (got "${_.persistence}")`);if(_.readAfterWrite!=="linearizable")F.push(`readAfterWrite must be "linearizable" (got "${_.readAfterWrite}")`);if(_.scanConsistency!=="snapshot")F.push(`scanConsistency must be "snapshot" (got "${_.scanConsistency}")`);if(!_.atomicBatch)F.push("atomicBatch must be true");if(!_.conditionalBatch)F.push("conditionalBatch must be true");if(F.length>0)throw Error(`Storage is not durable enough for recovery: ${F.join("; ")}.`)}var V="default";async function K(E,_){return await E.get(_)!==null}async function*X(E,_,F){for await(let[P]of E.scan(_,F))yield P}async function M(E,_){let F=0;for await(let P of X(E,_))F++;return F}async function O(E,_){let F=[];for await(let P of X(E,_))F.push({type:"delete",key:P});if(F.length===0)return 0;return await E.batch(F),F.length}async function W(E,_,F){let P=[];for await(let U of X(E,_,F))P.push({type:"delete",key:U});if(P.length===0)return 0;return await E.batch(P),P.length}var z=["actrec:","archive:","async-act:","attr:","audit:bulk:","blob:","budget:","budget-charged:","child-by-parent:","ev:","fleet-event-by-workflow:","fleet-event:","fleet-event-tail","idx:","lease:","liveness:","offload:","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-teardown:","wf-teardown-deadletter:","wf-teardown-needed:","wf-teardown-succeeded:","wf-terminal:"];var G=1e4,u=1e4;class Z extends Error{code="StorageBatchOperationLimitExceededError";cap=G;count;target;constructor(E,_){super(`${E} count ${_} exceeds MAX_BATCH_OPERATIONS (${G}).`);this.name="StorageBatchOperationLimitExceededError",this.target=E,this.count=_}}function J(E,_){if(_>G)throw new Z(E,_)}function y(E){return E.length>0?E.slice(0,-1)+String.fromCharCode(E.charCodeAt(E.length-1)+1):"\xFF"}function g(E,_={}){if(_.gt!==void 0&&E<=_.gt)return!1;if(_.gte!==void 0&&E<_.gte)return!1;if(_.lt!==void 0&&E>=_.lt)return!1;if(_.lte!==void 0&&E>_.lte)return!1;return!0}function p(E,_){if(E===null||_===null)return E===_;if(E.byteLength!==_.byteLength)return!1;for(let F=0;F<E.byteLength;F++)if(E[F]!==_[F])return!1;return!0}async function n(E,_){if(E.has)return E.has(_);return K(E,_)}function s(E,_,F){if(E.keys)return E.keys(_,F);return X(E,_,F)}async function a(E,_){if(E.count)return E.count(_);return M(E,_)}async function f(E,_){if(E.deletePrefix)return E.deletePrefix(_);return O(E,_)}async function I(E,_){J("batch operations",_.length),await E.batch(_)}async function l(E,_,F){if(J("conditionalBatch conditions",_.length),J("conditionalBatch operations",F.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(_,F)}function S(E){return encodeURIComponent(E)}function k(E){return decodeURIComponent(E)}function t(E){try{return decodeURIComponent(E)}catch{return null}}var R=(E)=>String(E).padStart(16,"0"),B="0",v="1",Q=(E,_,F,P)=>`sig:${S(E)}:${S(_)}:${P}:${S(F)}`,i={workflow:(E)=>`wf:${S(E)}`,checkpoint:(E)=>`wf:${S(E)}:ckpt`,checkpointHistory:(E,_)=>`wf:${S(E)}:ckpt:${String(_).padStart(10,"0")}`,timelinePrefix:(E)=>`wf:${S(E)}:timeline:`,timeline:(E,_)=>`wf:${S(E)}:timeline:${String(_).padStart(10,"0")}`,schedule:(E)=>`schedule:${S(E)}`,scheduleTick:(E,_)=>`schedule-due:${String(E).padStart(16,"0")}:${S(_)}`,scheduleRun:(E)=>`schedule-run:${S(E)}`,scheduleRunLink:(E)=>`schedule-run-link:${S(E)}`,scheduleRunBySchedulePrefix:(E)=>`schedule-run-by-schedule:${S(E)}:`,scheduleRunBySchedule:(E,_)=>`schedule-run-by-schedule:${S(E)}:${S(_)}`,operation:(E,_,F)=>`op:${E}:${R(_)}:${F}`,operationInflight:(E)=>`op:inflight:${E}`,operationQueued:(E)=>`op:queued:${E}`,operationResolved:(E)=>`op:resolved:${E}`,operationDeadLetterPrefix:()=>"op:dead-letter:",operationDeadLetter:(E)=>`op:dead-letter:${E}`,bulkOperationAuditPrefix:()=>"audit:bulk:",bulkOperationAudit:(E,_,F)=>`audit:bulk:${R(E)}:${S(_)}:${S(F)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(E,_)=>`op:resolved-by-time:${R(E)}:${S(_)}`,asyncActivity:(E,_)=>`async-act:v1:${S(E)}:${S(_)}`,asyncActivityResolution:(E,_)=>`async-act:v1:${S(E)}:${S(_)}:resolution`,activityReconciliationPrefix:(E)=>`actrec:v1:${S(E)}:`,activityReconciliation:(E,_,F)=>`actrec:v1:${S(E)}:${S(_)}:${F}`,eventPrefix:(E)=>`ev:${S(E)}:`,event:(E,_)=>`ev:${S(E)}:${String(_).padStart(10,"0")}`,eventHead:(E)=>`ev:${S(E)}:head`,eventWatermark:(E)=>`ev:${S(E)}:watermark`,fleetEventPrefix:()=>"fleet-event:",fleetEvent:(E)=>`fleet-event:${String(E).padStart(10,"0")}`,fleetEventTail:()=>"fleet-event-tail",fleetEventByWorkflowPrefix:(E)=>`fleet-event-by-workflow:${S(E)}:`,fleetEventByWorkflow:(E,_)=>`fleet-event-by-workflow:${S(E)}:${String(_).padStart(10,"0")}`,signal:(E,_,F)=>Q(E,_,F,v),startSignal:(E,_,F)=>Q(E,_,F,B),signalSequence:(E)=>`sigseq:v1:${S(E)}`,signalAcceptedResponsePrefix:(E)=>`sigres:v1:${S(E)}:`,signalAcceptedResponse:(E,_,F)=>`sigres:v1:${S(E)}:${S(_)}:${S(F)}`,deadline:(E,_)=>`wf-deadline:${R(E)}:${S(_)}`,terminalCleanup:(E,_)=>`wf-cleanup:${R(E)}:${S(_)}`,teardownTimer:(E,_)=>`wf-teardown:${R(E)}:${S(_)}`,delayedStart:(E,_)=>`wf-delayed:${R(E)}:${S(_)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(E,_)=>`wf-terminal:${R(E)}:${S(_)}`,attribute:(E)=>`attr:${S(E)}`,attributeIndex:(E,_,F)=>`idx:${E}:${_}:${S(F)}`,tagIndex:(E,_)=>`tag:${S(E)}:${S(_)}`,updatePrefix:(E)=>`upd:${S(E)}:`,update:(E,_)=>`upd:${S(E)}:${_}`,updateResponse:(E)=>`upr:${E}`,updateIdempotency:(E,_)=>`upk:${S(E)}:${_}`,startIdempotency:(E)=>`start-idem:${S(E)}`,startIdempotencySignalId:(E)=>`start-idem:${E}`,livenessPrefix:()=>"liveness:",liveness:(E)=>`liveness:${S(E)}`,leasePrefix:()=>"lease:",leaseEpoch:()=>"lease:epoch",leaseHolder:()=>"lease:holder",budget:(E,_,F)=>`budget:${E}:${_}:${F}`,review:(E,_)=>`review:${S(E)}:${_}`,workflowHeaders:(E)=>`wf-headers:${S(E)}`,childCancellationPrefix:(E)=>`child-cancel:${S(E)}:`,childCancellation:(E,_)=>`child-cancel:${S(E)}:${S(_)}`,childWorkflowByParentPrefix:(E,_)=>`child-by-parent:${S(E)}:${_===void 0?"":`${S(_)}:`}`,childWorkflowByParent:(E,_,F)=>`child-by-parent:${S(E)}:${_===void 0?"":`${S(_)}:`}${S(F)}`,terminalCleanupNeeded:(E)=>`wf-cleanup-needed:${S(E)}`,workflowConcurrency:(E,_)=>`wf-concurrency:${S(E)}:${S(_)}`,workflowConcurrencyHolder:(E)=>`wf-concurrency-holder:${S(E)}`,workflowHasServices:(E)=>`wf-has-services:${S(E)}`,finalizerState:(E)=>`wf-finalizer-state:${S(E)}`,teardownOwed:(E)=>`wf-teardown-needed:${S(E)}`,teardownSucceeded:(E)=>`wf-teardown-succeeded:${S(E)}`,teardownDeadLetter:(E)=>`wf-teardown-deadletter:${S(E)}`,offload:(E,_)=>`offload:${S(E)}:${_}`,archive:(E,_)=>`archive:${S(E)}:${_}`,stateExecution:(E,_)=>`state:execution:${S(E)}:${S(_)}`,stateWorkflow:(E,_)=>`state:workflow-scope:${V}:${S(E)}:${S(_)}`,streamChunkPrefix:(E,_)=>`blob:${S(E)}:${_}:chunk:`,streamChunk:(E,_,F)=>`blob:${S(E)}:${_}:chunk:${String(F).padStart(10,"0")}`,streamTail:(E,_)=>`blob:${S(E)}:${_}:tail`,streamMetadata:(E,_)=>`blob:${S(E)}:${_}:meta`,budgetCharged:(E)=>`budget-charged:${E}`,toolEffect:(E,_,F)=>`tool-effect:${S(E)}:${_}:${F}`,workflowVisibilityStatus:(E,_)=>`wf-idx-status:${S(E)}:${S(_)}`,workflowVisibilityType:(E,_)=>`wf-idx-type:${S(E)}:${S(_)}`,workflowVisibilityCreated:(E,_)=>`wf-idx-created:${R(E)}:${S(_)}`,workflowVisibilityUpdated:(E,_)=>`wf-idx-updated:${R(E)}:${S(_)}`,workflowVisibilityDeadline:(E,_)=>`wf-idx-deadline:${R(E)}:${S(_)}`,workflowVisibilityManifest:(E)=>`wf-idx-manifest:${S(E)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"};export{t as tryDecodeStorageKeyComponent,p as storageValuesEqual,s as storageKeys,n as storageHas,f as storageDeletePrefix,a as storageCount,l as storageConditionalBatch,I as storageBatch,y as resolvePrefixRangeEnd,L as requireStorageCapability,g as matchesScanOptions,S as encodeStorageKeyComponent,k as decodeStorageKeyComponent,J as assertStorageBatchOperationCount,j as assertDurableStorageForRecovery,z as WEFT_RESERVED_KEY_PREFIXES,Z as StorageBatchOperationLimitExceededError,u as MAX_SCAN_LIMIT,G as MAX_BATCH_OPERATIONS,i as KEYS,V as DEFAULT_SCOPE};
@@ -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:", "ev:", "fleet-event-by-workflow:", "fleet-event:", "fleet-event-tail", "idx:", "lease:", "liveness:", "offload:", "op:", "review:", "schedule:", "schedule-due:", "schedule-run:", "sig:", "sigres:", "sigseq:", "start-idem:", "state:", "tag:", "tool-effect:", "upd:", "upk:", "upr:", "wf:", "wf-cleanup:", "wf-cleanup-needed:", "wf-concurrency:", "wf-concurrency-holder:", "wf-deadline:", "wf-delayed:", "wf-finalizer-state:", "wf-has-services:", "wf-headers:", "wf-idx-", "wf-teardown:", "wf-teardown-deadletter:", "wf-teardown-needed:", "wf-terminal:"];
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", "idx:", "lease:", "liveness:", "offload:", "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-teardown:", "wf-teardown-deadletter:", "wf-teardown-needed:", "wf-teardown-succeeded:", "wf-terminal:"];
@@ -7,6 +7,7 @@ export const WEFT_RESERVED_KEY_PREFIXES = [
7
7
  "blob:",
8
8
  "budget:",
9
9
  "budget-charged:",
10
+ "child-by-parent:",
10
11
  "ev:",
11
12
  "fleet-event-by-workflow:",
12
13
  "fleet-event:",
@@ -19,6 +20,8 @@ export const WEFT_RESERVED_KEY_PREFIXES = [
19
20
  "review:",
20
21
  "schedule:",
21
22
  "schedule-due:",
23
+ "schedule-run-by-schedule:",
24
+ "schedule-run-link:",
22
25
  "schedule-run:",
23
26
  "sig:",
24
27
  "sigres:",
@@ -44,5 +47,6 @@ export const WEFT_RESERVED_KEY_PREFIXES = [
44
47
  "wf-teardown:",
45
48
  "wf-teardown-deadletter:",
46
49
  "wf-teardown-needed:",
50
+ "wf-teardown-succeeded:",
47
51
  "wf-terminal:"
48
52
  ];
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- var d=import.meta.require,p=(E,_,F)=>{if(_!=null){if(typeof _!=="object"&&typeof _!=="function")throw TypeError('Object expected to be assigned to "using" declaration');let Y;if(F)Y=_[Symbol.asyncDispose];if(Y===void 0)Y=_[Symbol.dispose];if(typeof Y!=="function")throw TypeError("Object not disposable");E.push([F,Y,_])}else if(F)E.push([F]);return _},a=(E,_,F)=>{let Y=(U)=>_=F?new SuppressedError(U,_,"An error was suppressed during disposal"):(F=!0,U),X=(U)=>{while(U=E.pop())try{var Q=U[1]&&U[1].call(U[2]);if(U[0])return Promise.resolve(Q).then(X,(J)=>(Y(J),X()))}catch(J){Y(J)}if(F)throw _};return X()};function H(E,_,F){if(!E.capabilities()[_])throw Error(`Feature "${F}" requires storage capability "${_}", but this storage backend does not provide it.`)}function y(E){let _=E.capabilities(),F=[];if(_.persistence!=="local"&&_.persistence!=="remote")F.push(`persistence must be "local" or "remote" (got "${_.persistence}")`);if(_.readAfterWrite!=="linearizable")F.push(`readAfterWrite must be "linearizable" (got "${_.readAfterWrite}")`);if(_.scanConsistency!=="snapshot")F.push(`scanConsistency must be "snapshot" (got "${_.scanConsistency}")`);if(!_.atomicBatch)F.push("atomicBatch must be true");if(!_.conditionalBatch)F.push("conditionalBatch must be true");if(F.length>0)throw Error(`Storage is not durable enough for recovery: ${F.join("; ")}.`)}var V="default";async function S(E,_){return await E.get(_)!==null}async function*$(E,_,F){for await(let[Y]of E.scan(_,F))yield Y}async function q(E,_){let F=0;for await(let Y of $(E,_))F++;return F}async function B(E,_){let F=[];for await(let Y of $(E,_))F.push({type:"delete",key:Y});if(F.length===0)return 0;return await E.batch(F),F.length}async function C(E,_,F){let Y=[];for await(let X of $(E,_,F))Y.push({type:"delete",key:X});if(Y.length===0)return 0;return await E.batch(Y),Y.length}var g=["actrec:","archive:","async-act:","attr:","audit:bulk:","blob:","budget:","budget-charged:","ev:","fleet-event-by-workflow:","fleet-event:","fleet-event-tail","idx:","lease:","liveness:","offload:","op:","review:","schedule:","schedule-due:","schedule-run:","sig:","sigres:","sigseq:","start-idem:","state:","tag:","tool-effect:","upd:","upk:","upr:","wf:","wf-cleanup:","wf-cleanup-needed:","wf-concurrency:","wf-concurrency-holder:","wf-deadline:","wf-delayed:","wf-finalizer-state:","wf-has-services:","wf-headers:","wf-idx-","wf-teardown:","wf-teardown-deadletter:","wf-teardown-needed:","wf-terminal:"];var L=1e4,_E=1e4;class z extends Error{code="StorageBatchOperationLimitExceededError";cap=L;count;target;constructor(E,_){super(`${E} count ${_} exceeds MAX_BATCH_OPERATIONS (${L}).`);this.name="StorageBatchOperationLimitExceededError",this.target=E,this.count=_}}function M(E,_){if(_>L)throw new z(E,_)}function j(E){return E.length>0?E.slice(0,-1)+String.fromCharCode(E.charCodeAt(E.length-1)+1):"\xFF"}function D(E,_={}){if(_.gt!==void 0&&E<=_.gt)return!1;if(_.gte!==void 0&&E<_.gte)return!1;if(_.lt!==void 0&&E>=_.lt)return!1;if(_.lte!==void 0&&E>_.lte)return!1;return!0}function K(E,_){if(E===null||_===null)return E===_;if(E.byteLength!==_.byteLength)return!1;for(let F=0;F<E.byteLength;F++)if(E[F]!==_[F])return!1;return!0}async function h(E,_){if(E.has)return E.has(_);return S(E,_)}function v(E,_,F){if(E.keys)return E.keys(_,F);return $(E,_,F)}async function P(E,_){if(E.count)return E.count(_);return q(E,_)}async function O(E,_){if(E.deletePrefix)return E.deletePrefix(_);return B(E,_)}async function FE(E,_){M("batch operations",_.length),await E.batch(_)}async function b(E,_,F){if(M("conditionalBatch conditions",_.length),M("conditionalBatch operations",F.length),H(E,"conditionalBatch","storageConditionalBatch"),!E.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return E.conditionalBatch(_,F)}function W(E){return encodeURIComponent(E)}function WE(E){return decodeURIComponent(E)}function YE(E){try{return decodeURIComponent(E)}catch{return null}}var G=(E)=>String(E).padStart(16,"0"),I="0",w="1",A=(E,_,F,Y)=>`sig:${W(E)}:${W(_)}:${Y}:${W(F)}`,XE={workflow:(E)=>`wf:${W(E)}`,checkpoint:(E)=>`wf:${W(E)}:ckpt`,checkpointHistory:(E,_)=>`wf:${W(E)}:ckpt:${String(_).padStart(10,"0")}`,timelinePrefix:(E)=>`wf:${W(E)}:timeline:`,timeline:(E,_)=>`wf:${W(E)}:timeline:${String(_).padStart(10,"0")}`,schedule:(E)=>`schedule:${W(E)}`,scheduleTick:(E,_)=>`schedule-due:${String(E).padStart(16,"0")}:${W(_)}`,scheduleRun:(E)=>`schedule-run:${W(E)}`,operation:(E,_,F)=>`op:${E}:${G(_)}:${F}`,operationInflight:(E)=>`op:inflight:${E}`,operationQueued:(E)=>`op:queued:${E}`,operationResolved:(E)=>`op:resolved:${E}`,operationDeadLetterPrefix:()=>"op:dead-letter:",operationDeadLetter:(E)=>`op:dead-letter:${E}`,bulkOperationAuditPrefix:()=>"audit:bulk:",bulkOperationAudit:(E,_,F)=>`audit:bulk:${G(E)}:${W(_)}:${W(F)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(E,_)=>`op:resolved-by-time:${G(E)}:${W(_)}`,asyncActivity:(E,_)=>`async-act:v1:${W(E)}:${W(_)}`,asyncActivityResolution:(E,_)=>`async-act:v1:${W(E)}:${W(_)}:resolution`,activityReconciliationPrefix:(E)=>`actrec:v1:${W(E)}:`,activityReconciliation:(E,_,F)=>`actrec:v1:${W(E)}:${W(_)}:${F}`,eventPrefix:(E)=>`ev:${W(E)}:`,event:(E,_)=>`ev:${W(E)}:${String(_).padStart(10,"0")}`,eventHead:(E)=>`ev:${W(E)}:head`,eventWatermark:(E)=>`ev:${W(E)}:watermark`,fleetEventPrefix:()=>"fleet-event:",fleetEvent:(E)=>`fleet-event:${String(E).padStart(10,"0")}`,fleetEventTail:()=>"fleet-event-tail",fleetEventByWorkflowPrefix:(E)=>`fleet-event-by-workflow:${W(E)}:`,fleetEventByWorkflow:(E,_)=>`fleet-event-by-workflow:${W(E)}:${String(_).padStart(10,"0")}`,signal:(E,_,F)=>A(E,_,F,w),startSignal:(E,_,F)=>A(E,_,F,I),signalSequence:(E)=>`sigseq:v1:${W(E)}`,signalAcceptedResponsePrefix:(E)=>`sigres:v1:${W(E)}:`,signalAcceptedResponse:(E,_,F)=>`sigres:v1:${W(E)}:${W(_)}:${W(F)}`,deadline:(E,_)=>`wf-deadline:${G(E)}:${W(_)}`,terminalCleanup:(E,_)=>`wf-cleanup:${G(E)}:${W(_)}`,teardownTimer:(E,_)=>`wf-teardown:${G(E)}:${W(_)}`,delayedStart:(E,_)=>`wf-delayed:${G(E)}:${W(_)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(E,_)=>`wf-terminal:${G(E)}:${W(_)}`,attribute:(E)=>`attr:${W(E)}`,attributeIndex:(E,_,F)=>`idx:${E}:${_}:${W(F)}`,tagIndex:(E,_)=>`tag:${W(E)}:${W(_)}`,updatePrefix:(E)=>`upd:${W(E)}:`,update:(E,_)=>`upd:${W(E)}:${_}`,updateResponse:(E)=>`upr:${E}`,updateIdempotency:(E,_)=>`upk:${W(E)}:${_}`,startIdempotency:(E)=>`start-idem:${W(E)}`,startIdempotencySignalId:(E)=>`start-idem:${E}`,livenessPrefix:()=>"liveness:",liveness:(E)=>`liveness:${W(E)}`,leasePrefix:()=>"lease:",leaseEpoch:()=>"lease:epoch",leaseHolder:()=>"lease:holder",budget:(E,_,F)=>`budget:${E}:${_}:${F}`,review:(E,_)=>`review:${W(E)}:${_}`,workflowHeaders:(E)=>`wf-headers:${W(E)}`,childCancellationPrefix:(E)=>`child-cancel:${W(E)}:`,childCancellation:(E,_)=>`child-cancel:${W(E)}:${W(_)}`,terminalCleanupNeeded:(E)=>`wf-cleanup-needed:${W(E)}`,workflowConcurrency:(E,_)=>`wf-concurrency:${W(E)}:${W(_)}`,workflowConcurrencyHolder:(E)=>`wf-concurrency-holder:${W(E)}`,workflowHasServices:(E)=>`wf-has-services:${W(E)}`,finalizerState:(E)=>`wf-finalizer-state:${W(E)}`,teardownOwed:(E)=>`wf-teardown-needed:${W(E)}`,teardownDeadLetter:(E)=>`wf-teardown-deadletter:${W(E)}`,offload:(E,_)=>`offload:${W(E)}:${_}`,archive:(E,_)=>`archive:${W(E)}:${_}`,stateExecution:(E,_)=>`state:execution:${W(E)}:${W(_)}`,stateWorkflow:(E,_)=>`state:workflow-scope:${V}:${W(E)}:${W(_)}`,streamChunkPrefix:(E,_)=>`blob:${W(E)}:${_}:chunk:`,streamChunk:(E,_,F)=>`blob:${W(E)}:${_}:chunk:${String(F).padStart(10,"0")}`,streamTail:(E,_)=>`blob:${W(E)}:${_}:tail`,streamMetadata:(E,_)=>`blob:${W(E)}:${_}:meta`,budgetCharged:(E)=>`budget-charged:${E}`,toolEffect:(E,_,F)=>`tool-effect:${W(E)}:${_}:${F}`,workflowVisibilityStatus:(E,_)=>`wf-idx-status:${W(E)}:${W(_)}`,workflowVisibilityType:(E,_)=>`wf-idx-type:${W(E)}:${W(_)}`,workflowVisibilityCreated:(E,_)=>`wf-idx-created:${G(E)}:${W(_)}`,workflowVisibilityUpdated:(E,_)=>`wf-idx-updated:${G(E)}:${W(_)}`,workflowVisibilityDeadline:(E,_)=>`wf-idx-deadline:${G(E)}:${W(_)}`,workflowVisibilityManifest:(E)=>`wf-idx-manifest:${W(E)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"};function k(E){if(E===void 0)return;if(typeof E!=="number"||!Number.isInteger(E)||E<0)throw Error("deleteRange limit must be a finite non-negative integer");return E===0?0:E}function T(E){let _={},F=!1;for(let X of["gt","gte","lt","lte"]){let U=E[X];if(U===void 0)continue;if(typeof U!=="string")throw Error("deleteRange bounds must be strings");_[X]=U,F=!0}if(!F)throw Error("deleteRange requires at least one of gt/gte/lt/lte; use deletePrefix to delete a whole prefix");let Y=k(E.limit);if(Y!==void 0)_.limit=Y;return _}async function m(E,_,F){let Y=T(F);if(E.deleteRange)return E.deleteRange(_,Y);return C(E,_,Y)}function N(E){return E.replaceAll(/:+$/g,"")}function l(E,_){let F=N(E),Y=N(_);if(F.length===0)return Y;if(Y.length===0)return F;return`${F}:${Y}`}class R{#E;#W;constructor(E,_){this.#E=E,this.#W=N(_)}#_(E){if(this.#W.length===0)return E;return E.length===0?`${this.#W}:`:`${this.#W}:${E}`}#F(E){if(this.#W.length===0)return E;return E.slice(this.#W.length+1)}#Y(E={}){let _={};if(E.limit!==void 0)_.limit=E.limit;if(E.reverse!==void 0)_.reverse=E.reverse;if(E.gt!==void 0)_.gt=this.#_(E.gt);if(E.gte!==void 0)_.gte=this.#_(E.gte);if(E.lt!==void 0)_.lt=this.#_(E.lt);if(E.lte!==void 0)_.lte=this.#_(E.lte);return _}#X(E){let _={};if(E.limit!==void 0)_.limit=E.limit;if(E.gt!==void 0)_.gt=this.#_(E.gt);if(E.gte!==void 0)_.gte=this.#_(E.gte);if(E.lt!==void 0)_.lt=this.#_(E.lt);if(E.lte!==void 0)_.lte=this.#_(E.lte);return _}capabilities(){return this.#E.capabilities()}scoped(E){return new R(this.#E,l(this.#W,E))}async get(E){return this.#E.get(this.#_(E))}async put(E,_){await this.#E.put(this.#_(E),_)}async delete(E){await this.#E.delete(this.#_(E))}async*scan(E,_){for await(let[F,Y]of this.#E.scan(this.#_(E),this.#Y(_)))yield[this.#F(F),Y]}async batch(E){M("batch operations",E.length),await this.#E.batch(E.map((_)=>{if(_.type==="put")return{type:"put",key:this.#_(_.key),value:_.value};return{type:"delete",key:this.#_(_.key)}}))}async conditionalBatch(E,_){return b(this.#E,E.map((F)=>({key:this.#_(F.key),expectedValue:F.expectedValue})),_.map((F)=>{if(F.type==="put")return{type:"put",key:this.#_(F.key),value:F.value};return{type:"delete",key:this.#_(F.key)}}))}async has(E){return h(this.#E,this.#_(E))}async deletePrefix(E){return O(this.#E,this.#_(E))}async deleteRange(E,_){let F=this.#X(T(_));return m(this.#E,this.#_(E),F)}async*keys(E,_){for await(let F of v(this.#E,this.#_(E),this.#Y(_)))yield this.#F(F)}async count(E){return P(this.#E,this.#_(E))}[Symbol.dispose](){this.#E[Symbol.dispose]()}}function c(E,_){return new R(E,_)}import*as u from"lmdb";class f{#E;#W=!1;#_=null;constructor(E){this.#E=u.open({path:E,encoding:"binary"})}#F(){if(this.#W)throw Error("LMDBStorage is closed")}capabilities(){return{persistence:"local",readAfterWrite:"linearizable",scanConsistency:"snapshot",atomicBatch:!0,conditionalBatch:!0,boundedRangeDelete:!1}}async get(E){this.#F();let _=this.#E.get(E);if(_===void 0)return null;return new Uint8Array(_)}async put(E,_){this.#F(),await this.#E.put(E,Buffer.from(_))}async delete(E){this.#F(),await this.#E.remove(E)}async has(E){return this.#F(),this.#E.doesExist(E)}async deletePrefix(E){this.#F();let _=[];for await(let F of this.keys(E))_.push(F);if(_.length===0)return 0;return await this.#E.batch(()=>{for(let F of _)this.#E.remove(F)}),_.length}async deleteRange(E,_){this.#F();let F=T(_),Y=[];for await(let X of this.keys(E,F))Y.push(X);if(Y.length===0)return 0;return await this.#E.batch(()=>{for(let X of Y)this.#E.remove(X)}),Y.length}async*scan(E,_={}){this.#F();let{limit:F,reverse:Y}=_,X=j(E),U=Y?this.#E.getRange({start:X,end:E,reverse:!0}):this.#E.getRange({start:E,end:X}),Q=0,J=!1;for(let{key:Z,value:x}of U){if(!Z.startsWith(E)){if(Y&&!J)continue;break}if(J=!0,!D(Z,_))continue;if(F!==void 0&&Q>=F)break;yield[Z,new Uint8Array(x)],Q++}}async*keys(E,_={}){this.#F();let{limit:F,reverse:Y}=_,X=j(E),U=Y?this.#E.getKeys({start:X,end:E,reverse:!0}):this.#E.getKeys({start:E,end:X}),Q=0,J=!1;for(let Z of U){if(!Z.startsWith(E)){if(Y&&!J)continue;break}if(J=!0,!D(Z,_))continue;if(F!==void 0&&Q>=F)break;yield Z,Q++}}async count(E){this.#F();let _=j(E);return this.#E.getKeysCount({start:E,end:_})}scoped(E){return this.#F(),c(this,E)}async batch(E){if(this.#F(),M("batch operations",E.length),E.length===0)return;await this.#E.batch(()=>{for(let _ of E)if(_.type==="put")this.#E.put(_.key,Buffer.from(_.value));else this.#E.remove(_.key)})}async conditionalBatch(E,_){return this.#F(),M("conditionalBatch conditions",E.length),M("conditionalBatch operations",_.length),this.#E.transactionSync(()=>{for(let Y of E){let X=this.#E.get(Y.key),U=X===void 0?null:new Uint8Array(X);if(!K(U,Y.expectedValue))return!1}for(let Y of _)if(Y.type==="put")this.#E.putSync(Y.key,Buffer.from(Y.value));else this.#E.removeSync(Y.key);return!0})}close(){return this.#W=!0,this.#_??=(async()=>{await Promise.resolve(),await this.#E.close()})(),this.#_}[Symbol.dispose](){this.close()}}export{f as LMDBStorage};
2
+ var d=import.meta.require,p=(_,F,E)=>{if(F!=null){if(typeof F!=="object"&&typeof F!=="function")throw TypeError('Object expected to be assigned to "using" declaration');let X;if(E)X=F[Symbol.asyncDispose];if(X===void 0)X=F[Symbol.dispose];if(typeof X!=="function")throw TypeError("Object not disposable");_.push([E,X,F])}else if(E)_.push([E]);return F},a=(_,F,E)=>{let X=(G)=>F=E?new SuppressedError(G,F,"An error was suppressed during disposal"):(E=!0,G),U=(G)=>{while(G=_.pop())try{var Z=G[1]&&G[1].call(G[2]);if(G[0])return Promise.resolve(Z).then(U,(M)=>(X(M),U()))}catch(M){X(M)}if(E)throw F};return U()};function L(_,F,E){if(!_.capabilities()[F])throw Error(`Feature "${E}" requires storage capability "${F}", but this storage backend does not provide it.`)}function x(_){let F=_.capabilities(),E=[];if(F.persistence!=="local"&&F.persistence!=="remote")E.push(`persistence must be "local" or "remote" (got "${F.persistence}")`);if(F.readAfterWrite!=="linearizable")E.push(`readAfterWrite must be "linearizable" (got "${F.readAfterWrite}")`);if(F.scanConsistency!=="snapshot")E.push(`scanConsistency must be "snapshot" (got "${F.scanConsistency}")`);if(!F.atomicBatch)E.push("atomicBatch must be true");if(!F.conditionalBatch)E.push("conditionalBatch must be true");if(E.length>0)throw Error(`Storage is not durable enough for recovery: ${E.join("; ")}.`)}var D="default";async function T(_,F){return await _.get(F)!==null}async function*j(_,F,E){for await(let[X]of _.scan(F,E))yield X}async function W(_,F){let E=0;for await(let X of j(_,F))E++;return E}async function B(_,F){let E=[];for await(let X of j(_,F))E.push({type:"delete",key:X});if(E.length===0)return 0;return await _.batch(E),E.length}async function C(_,F,E){let X=[];for await(let U of j(_,F,E))X.push({type:"delete",key:U});if(X.length===0)return 0;return await _.batch(X),X.length}var g=["actrec:","archive:","async-act:","attr:","audit:bulk:","blob:","budget:","budget-charged:","child-by-parent:","ev:","fleet-event-by-workflow:","fleet-event:","fleet-event-tail","idx:","lease:","liveness:","offload:","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-teardown:","wf-teardown-deadletter:","wf-teardown-needed:","wf-teardown-succeeded:","wf-terminal:"];var N=1e4,F_=1e4;class z extends Error{code="StorageBatchOperationLimitExceededError";cap=N;count;target;constructor(_,F){super(`${_} count ${F} exceeds MAX_BATCH_OPERATIONS (${N}).`);this.name="StorageBatchOperationLimitExceededError",this.target=_,this.count=F}}function Q(_,F){if(F>N)throw new z(_,F)}function V(_){return _.length>0?_.slice(0,-1)+String.fromCharCode(_.charCodeAt(_.length-1)+1):"\xFF"}function R(_,F={}){if(F.gt!==void 0&&_<=F.gt)return!1;if(F.gte!==void 0&&_<F.gte)return!1;if(F.lt!==void 0&&_>=F.lt)return!1;if(F.lte!==void 0&&_>F.lte)return!1;return!0}function K(_,F){if(_===null||F===null)return _===F;if(_.byteLength!==F.byteLength)return!1;for(let E=0;E<_.byteLength;E++)if(_[E]!==F[E])return!1;return!0}async function v(_,F){if(_.has)return _.has(F);return T(_,F)}function h(_,F,E){if(_.keys)return _.keys(F,E);return j(_,F,E)}async function P(_,F){if(_.count)return _.count(F);return W(_,F)}async function O(_,F){if(_.deletePrefix)return _.deletePrefix(F);return B(_,F)}async function E_(_,F){Q("batch operations",F.length),await _.batch(F)}async function b(_,F,E){if(Q("conditionalBatch conditions",F.length),Q("conditionalBatch operations",E.length),L(_,"conditionalBatch","storageConditionalBatch"),!_.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return _.conditionalBatch(F,E)}function Y(_){return encodeURIComponent(_)}function Y_(_){return decodeURIComponent(_)}function X_(_){try{return decodeURIComponent(_)}catch{return null}}var J=(_)=>String(_).padStart(16,"0"),I="0",w="1",A=(_,F,E,X)=>`sig:${Y(_)}:${Y(F)}:${X}:${Y(E)}`,U_={workflow:(_)=>`wf:${Y(_)}`,checkpoint:(_)=>`wf:${Y(_)}:ckpt`,checkpointHistory:(_,F)=>`wf:${Y(_)}:ckpt:${String(F).padStart(10,"0")}`,timelinePrefix:(_)=>`wf:${Y(_)}:timeline:`,timeline:(_,F)=>`wf:${Y(_)}:timeline:${String(F).padStart(10,"0")}`,schedule:(_)=>`schedule:${Y(_)}`,scheduleTick:(_,F)=>`schedule-due:${String(_).padStart(16,"0")}:${Y(F)}`,scheduleRun:(_)=>`schedule-run:${Y(_)}`,scheduleRunLink:(_)=>`schedule-run-link:${Y(_)}`,scheduleRunBySchedulePrefix:(_)=>`schedule-run-by-schedule:${Y(_)}:`,scheduleRunBySchedule:(_,F)=>`schedule-run-by-schedule:${Y(_)}:${Y(F)}`,operation:(_,F,E)=>`op:${_}:${J(F)}:${E}`,operationInflight:(_)=>`op:inflight:${_}`,operationQueued:(_)=>`op:queued:${_}`,operationResolved:(_)=>`op:resolved:${_}`,operationDeadLetterPrefix:()=>"op:dead-letter:",operationDeadLetter:(_)=>`op:dead-letter:${_}`,bulkOperationAuditPrefix:()=>"audit:bulk:",bulkOperationAudit:(_,F,E)=>`audit:bulk:${J(_)}:${Y(F)}:${Y(E)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(_,F)=>`op:resolved-by-time:${J(_)}:${Y(F)}`,asyncActivity:(_,F)=>`async-act:v1:${Y(_)}:${Y(F)}`,asyncActivityResolution:(_,F)=>`async-act:v1:${Y(_)}:${Y(F)}:resolution`,activityReconciliationPrefix:(_)=>`actrec:v1:${Y(_)}:`,activityReconciliation:(_,F,E)=>`actrec:v1:${Y(_)}:${Y(F)}:${E}`,eventPrefix:(_)=>`ev:${Y(_)}:`,event:(_,F)=>`ev:${Y(_)}:${String(F).padStart(10,"0")}`,eventHead:(_)=>`ev:${Y(_)}:head`,eventWatermark:(_)=>`ev:${Y(_)}:watermark`,fleetEventPrefix:()=>"fleet-event:",fleetEvent:(_)=>`fleet-event:${String(_).padStart(10,"0")}`,fleetEventTail:()=>"fleet-event-tail",fleetEventByWorkflowPrefix:(_)=>`fleet-event-by-workflow:${Y(_)}:`,fleetEventByWorkflow:(_,F)=>`fleet-event-by-workflow:${Y(_)}:${String(F).padStart(10,"0")}`,signal:(_,F,E)=>A(_,F,E,w),startSignal:(_,F,E)=>A(_,F,E,I),signalSequence:(_)=>`sigseq:v1:${Y(_)}`,signalAcceptedResponsePrefix:(_)=>`sigres:v1:${Y(_)}:`,signalAcceptedResponse:(_,F,E)=>`sigres:v1:${Y(_)}:${Y(F)}:${Y(E)}`,deadline:(_,F)=>`wf-deadline:${J(_)}:${Y(F)}`,terminalCleanup:(_,F)=>`wf-cleanup:${J(_)}:${Y(F)}`,teardownTimer:(_,F)=>`wf-teardown:${J(_)}:${Y(F)}`,delayedStart:(_,F)=>`wf-delayed:${J(_)}:${Y(F)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(_,F)=>`wf-terminal:${J(_)}:${Y(F)}`,attribute:(_)=>`attr:${Y(_)}`,attributeIndex:(_,F,E)=>`idx:${_}:${F}:${Y(E)}`,tagIndex:(_,F)=>`tag:${Y(_)}:${Y(F)}`,updatePrefix:(_)=>`upd:${Y(_)}:`,update:(_,F)=>`upd:${Y(_)}:${F}`,updateResponse:(_)=>`upr:${_}`,updateIdempotency:(_,F)=>`upk:${Y(_)}:${F}`,startIdempotency:(_)=>`start-idem:${Y(_)}`,startIdempotencySignalId:(_)=>`start-idem:${_}`,livenessPrefix:()=>"liveness:",liveness:(_)=>`liveness:${Y(_)}`,leasePrefix:()=>"lease:",leaseEpoch:()=>"lease:epoch",leaseHolder:()=>"lease:holder",budget:(_,F,E)=>`budget:${_}:${F}:${E}`,review:(_,F)=>`review:${Y(_)}:${F}`,workflowHeaders:(_)=>`wf-headers:${Y(_)}`,childCancellationPrefix:(_)=>`child-cancel:${Y(_)}:`,childCancellation:(_,F)=>`child-cancel:${Y(_)}:${Y(F)}`,childWorkflowByParentPrefix:(_,F)=>`child-by-parent:${Y(_)}:${F===void 0?"":`${Y(F)}:`}`,childWorkflowByParent:(_,F,E)=>`child-by-parent:${Y(_)}:${F===void 0?"":`${Y(F)}:`}${Y(E)}`,terminalCleanupNeeded:(_)=>`wf-cleanup-needed:${Y(_)}`,workflowConcurrency:(_,F)=>`wf-concurrency:${Y(_)}:${Y(F)}`,workflowConcurrencyHolder:(_)=>`wf-concurrency-holder:${Y(_)}`,workflowHasServices:(_)=>`wf-has-services:${Y(_)}`,finalizerState:(_)=>`wf-finalizer-state:${Y(_)}`,teardownOwed:(_)=>`wf-teardown-needed:${Y(_)}`,teardownSucceeded:(_)=>`wf-teardown-succeeded:${Y(_)}`,teardownDeadLetter:(_)=>`wf-teardown-deadletter:${Y(_)}`,offload:(_,F)=>`offload:${Y(_)}:${F}`,archive:(_,F)=>`archive:${Y(_)}:${F}`,stateExecution:(_,F)=>`state:execution:${Y(_)}:${Y(F)}`,stateWorkflow:(_,F)=>`state:workflow-scope:${D}:${Y(_)}:${Y(F)}`,streamChunkPrefix:(_,F)=>`blob:${Y(_)}:${F}:chunk:`,streamChunk:(_,F,E)=>`blob:${Y(_)}:${F}:chunk:${String(E).padStart(10,"0")}`,streamTail:(_,F)=>`blob:${Y(_)}:${F}:tail`,streamMetadata:(_,F)=>`blob:${Y(_)}:${F}:meta`,budgetCharged:(_)=>`budget-charged:${_}`,toolEffect:(_,F,E)=>`tool-effect:${Y(_)}:${F}:${E}`,workflowVisibilityStatus:(_,F)=>`wf-idx-status:${Y(_)}:${Y(F)}`,workflowVisibilityType:(_,F)=>`wf-idx-type:${Y(_)}:${Y(F)}`,workflowVisibilityCreated:(_,F)=>`wf-idx-created:${J(_)}:${Y(F)}`,workflowVisibilityUpdated:(_,F)=>`wf-idx-updated:${J(_)}:${Y(F)}`,workflowVisibilityDeadline:(_,F)=>`wf-idx-deadline:${J(_)}:${Y(F)}`,workflowVisibilityManifest:(_)=>`wf-idx-manifest:${Y(_)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"};function k(_){if(_===void 0)return;if(typeof _!=="number"||!Number.isInteger(_)||_<0)throw Error("deleteRange limit must be a finite non-negative integer");return _===0?0:_}function H(_){let F={},E=!1;for(let U of["gt","gte","lt","lte"]){let G=_[U];if(G===void 0)continue;if(typeof G!=="string")throw Error("deleteRange bounds must be strings");F[U]=G,E=!0}if(!E)throw Error("deleteRange requires at least one of gt/gte/lt/lte; use deletePrefix to delete a whole prefix");let X=k(_.limit);if(X!==void 0)F.limit=X;return F}async function m(_,F,E){let X=H(E);if(_.deleteRange)return _.deleteRange(F,X);return C(_,F,X)}function S(_){return _.replaceAll(/:+$/g,"")}function l(_,F){let E=S(_),X=S(F);if(E.length===0)return X;if(X.length===0)return E;return`${E}:${X}`}class q{#_;#Y;constructor(_,F){this.#_=_,this.#Y=S(F)}#F(_){if(this.#Y.length===0)return _;return _.length===0?`${this.#Y}:`:`${this.#Y}:${_}`}#E(_){if(this.#Y.length===0)return _;return _.slice(this.#Y.length+1)}#X(_={}){let F={};if(_.limit!==void 0)F.limit=_.limit;if(_.reverse!==void 0)F.reverse=_.reverse;if(_.gt!==void 0)F.gt=this.#F(_.gt);if(_.gte!==void 0)F.gte=this.#F(_.gte);if(_.lt!==void 0)F.lt=this.#F(_.lt);if(_.lte!==void 0)F.lte=this.#F(_.lte);return F}#U(_){let F={};if(_.limit!==void 0)F.limit=_.limit;if(_.gt!==void 0)F.gt=this.#F(_.gt);if(_.gte!==void 0)F.gte=this.#F(_.gte);if(_.lt!==void 0)F.lt=this.#F(_.lt);if(_.lte!==void 0)F.lte=this.#F(_.lte);return F}capabilities(){return this.#_.capabilities()}scoped(_){return new q(this.#_,l(this.#Y,_))}async get(_){return this.#_.get(this.#F(_))}async put(_,F){await this.#_.put(this.#F(_),F)}async delete(_){await this.#_.delete(this.#F(_))}async*scan(_,F){for await(let[E,X]of this.#_.scan(this.#F(_),this.#X(F)))yield[this.#E(E),X]}async batch(_){Q("batch operations",_.length),await this.#_.batch(_.map((F)=>{if(F.type==="put")return{type:"put",key:this.#F(F.key),value:F.value};return{type:"delete",key:this.#F(F.key)}}))}async conditionalBatch(_,F){return b(this.#_,_.map((E)=>({key:this.#F(E.key),expectedValue:E.expectedValue})),F.map((E)=>{if(E.type==="put")return{type:"put",key:this.#F(E.key),value:E.value};return{type:"delete",key:this.#F(E.key)}}))}async has(_){return v(this.#_,this.#F(_))}async deletePrefix(_){return O(this.#_,this.#F(_))}async deleteRange(_,F){let E=this.#U(H(F));return m(this.#_,this.#F(_),E)}async*keys(_,F){for await(let E of h(this.#_,this.#F(_),this.#X(F)))yield this.#E(E)}async count(_){return P(this.#_,this.#F(_))}[Symbol.dispose](){this.#_[Symbol.dispose]()}}function c(_,F){return new q(_,F)}import*as u from"lmdb";class f{#_;#Y=!1;#F=null;constructor(_){this.#_=u.open({path:_,encoding:"binary"})}#E(){if(this.#Y)throw Error("LMDBStorage is closed")}capabilities(){return{persistence:"local",readAfterWrite:"linearizable",scanConsistency:"snapshot",atomicBatch:!0,conditionalBatch:!0,boundedRangeDelete:!1}}async get(_){this.#E();let F=this.#_.get(_);if(F===void 0)return null;return new Uint8Array(F)}async put(_,F){this.#E(),await this.#_.put(_,Buffer.from(F))}async delete(_){this.#E(),await this.#_.remove(_)}async has(_){return this.#E(),this.#_.doesExist(_)}async deletePrefix(_){this.#E();let F=[];for await(let E of this.keys(_))F.push(E);if(F.length===0)return 0;return await this.#_.batch(()=>{for(let E of F)this.#_.remove(E)}),F.length}async deleteRange(_,F){this.#E();let E=H(F),X=[];for await(let U of this.keys(_,E))X.push(U);if(X.length===0)return 0;return await this.#_.batch(()=>{for(let U of X)this.#_.remove(U)}),X.length}async*scan(_,F={}){this.#E();let{limit:E,reverse:X}=F,U=V(_),G=X?this.#_.getRange({start:U,end:_,reverse:!0}):this.#_.getRange({start:_,end:U}),Z=0,M=!1;for(let{key:$,value:y}of G){if(!$.startsWith(_)){if(X&&!M)continue;break}if(M=!0,!R($,F))continue;if(E!==void 0&&Z>=E)break;yield[$,new Uint8Array(y)],Z++}}async*keys(_,F={}){this.#E();let{limit:E,reverse:X}=F,U=V(_),G=X?this.#_.getKeys({start:U,end:_,reverse:!0}):this.#_.getKeys({start:_,end:U}),Z=0,M=!1;for(let $ of G){if(!$.startsWith(_)){if(X&&!M)continue;break}if(M=!0,!R($,F))continue;if(E!==void 0&&Z>=E)break;yield $,Z++}}async count(_){this.#E();let F=V(_);return this.#_.getKeysCount({start:_,end:F})}scoped(_){return this.#E(),c(this,_)}async batch(_){if(this.#E(),Q("batch operations",_.length),_.length===0)return;await this.#_.batch(()=>{for(let F of _)if(F.type==="put")this.#_.put(F.key,Buffer.from(F.value));else this.#_.remove(F.key)})}async conditionalBatch(_,F){return this.#E(),Q("conditionalBatch conditions",_.length),Q("conditionalBatch operations",F.length),this.#_.transactionSync(()=>{for(let X of _){let U=this.#_.get(X.key),G=U===void 0?null:new Uint8Array(U);if(!K(G,X.expectedValue))return!1}for(let X of F)if(X.type==="put")this.#_.putSync(X.key,Buffer.from(X.value));else this.#_.removeSync(X.key);return!0})}close(){return this.#Y=!0,this.#F??=(async()=>{await Promise.resolve(),await this.#_.close()})(),this.#F}[Symbol.dispose](){this.close()}}export{f as LMDBStorage};
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- var f=import.meta.require,l=(_,E,F)=>{if(E!=null){if(typeof E!=="object"&&typeof E!=="function")throw TypeError('Object expected to be assigned to "using" declaration');let Y;if(F)Y=E[Symbol.asyncDispose];if(Y===void 0)Y=E[Symbol.dispose];if(typeof Y!=="function")throw TypeError("Object not disposable");_.push([F,Y,E])}else if(F)_.push([F]);return E},d=(_,E,F)=>{let Y=(X)=>E=F?new SuppressedError(X,E,"An error was suppressed during disposal"):(F=!0,X),U=(X)=>{while(X=_.pop())try{var J=X[1]&&X[1].call(X[2]);if(X[0])return Promise.resolve(J).then(U,(G)=>(Y(G),U()))}catch(G){Y(G)}if(F)throw E};return U()};function j(_,E,F){if(!_.capabilities()[E])throw Error(`Feature "${F}" requires storage capability "${E}", but this storage backend does not provide it.`)}function u(_){let E=_.capabilities(),F=[];if(E.persistence!=="local"&&E.persistence!=="remote")F.push(`persistence must be "local" or "remote" (got "${E.persistence}")`);if(E.readAfterWrite!=="linearizable")F.push(`readAfterWrite must be "linearizable" (got "${E.readAfterWrite}")`);if(E.scanConsistency!=="snapshot")F.push(`scanConsistency must be "snapshot" (got "${E.scanConsistency}")`);if(!E.atomicBatch)F.push("atomicBatch must be true");if(!E.conditionalBatch)F.push("conditionalBatch must be true");if(F.length>0)throw Error(`Storage is not durable enough for recovery: ${F.join("; ")}.`)}var H="default";async function C(_,E){return await _.get(E)!==null}async function*$(_,E,F){for await(let[Y]of _.scan(E,F))yield Y}async function R(_,E){let F=0;for await(let Y of $(_,E))F++;return F}async function B(_,E){let F=[];for await(let Y of $(_,E))F.push({type:"delete",key:Y});if(F.length===0)return 0;return await _.batch(F),F.length}async function A(_,E,F){let Y=[];for await(let U of $(_,E,F))Y.push({type:"delete",key:U});if(Y.length===0)return 0;return await _.batch(Y),Y.length}var x=["actrec:","archive:","async-act:","attr:","audit:bulk:","blob:","budget:","budget-charged:","ev:","fleet-event-by-workflow:","fleet-event:","fleet-event-tail","idx:","lease:","liveness:","offload:","op:","review:","schedule:","schedule-due:","schedule-run:","sig:","sigres:","sigseq:","start-idem:","state:","tag:","tool-effect:","upd:","upk:","upr:","wf:","wf-cleanup:","wf-cleanup-needed:","wf-concurrency:","wf-concurrency-holder:","wf-deadline:","wf-delayed:","wf-finalizer-state:","wf-has-services:","wf-headers:","wf-idx-","wf-teardown:","wf-teardown-deadletter:","wf-teardown-needed:","wf-terminal:"];var L=1e4,o=1e4;class z extends Error{code="StorageBatchOperationLimitExceededError";cap=L;count;target;constructor(_,E){super(`${_} count ${E} exceeds MAX_BATCH_OPERATIONS (${L}).`);this.name="StorageBatchOperationLimitExceededError",this.target=_,this.count=E}}function Q(_,E){if(E>L)throw new z(_,E)}function Z(_){return _.length>0?_.slice(0,-1)+String.fromCharCode(_.charCodeAt(_.length-1)+1):"\xFF"}function V(_,E={}){if(E.gt!==void 0&&_<=E.gt)return!1;if(E.gte!==void 0&&_<E.gte)return!1;if(E.lt!==void 0&&_>=E.lt)return!1;if(E.lte!==void 0&&_>E.lte)return!1;return!0}function P(_,E){if(_===null||E===null)return _===E;if(_.byteLength!==E.byteLength)return!1;for(let F=0;F<_.byteLength;F++)if(_[F]!==E[F])return!1;return!0}async function v(_,E){if(_.has)return _.has(E);return C(_,E)}function h(_,E,F){if(_.keys)return _.keys(E,F);return $(_,E,F)}async function O(_,E){if(_.count)return _.count(E);return R(_,E)}async function K(_,E){if(_.deletePrefix)return _.deletePrefix(E);return B(_,E)}async function __(_,E){Q("batch operations",E.length),await _.batch(E)}async function b(_,E,F){if(Q("conditionalBatch conditions",E.length),Q("conditionalBatch operations",F.length),j(_,"conditionalBatch","storageConditionalBatch"),!_.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return _.conditionalBatch(E,F)}function W(_){return encodeURIComponent(_)}function E_(_){return decodeURIComponent(_)}function F_(_){try{return decodeURIComponent(_)}catch{return null}}var M=(_)=>String(_).padStart(16,"0"),g="0",I="1",S=(_,E,F,Y)=>`sig:${W(_)}:${W(E)}:${Y}:${W(F)}`,W_={workflow:(_)=>`wf:${W(_)}`,checkpoint:(_)=>`wf:${W(_)}:ckpt`,checkpointHistory:(_,E)=>`wf:${W(_)}:ckpt:${String(E).padStart(10,"0")}`,timelinePrefix:(_)=>`wf:${W(_)}:timeline:`,timeline:(_,E)=>`wf:${W(_)}:timeline:${String(E).padStart(10,"0")}`,schedule:(_)=>`schedule:${W(_)}`,scheduleTick:(_,E)=>`schedule-due:${String(_).padStart(16,"0")}:${W(E)}`,scheduleRun:(_)=>`schedule-run:${W(_)}`,operation:(_,E,F)=>`op:${_}:${M(E)}:${F}`,operationInflight:(_)=>`op:inflight:${_}`,operationQueued:(_)=>`op:queued:${_}`,operationResolved:(_)=>`op:resolved:${_}`,operationDeadLetterPrefix:()=>"op:dead-letter:",operationDeadLetter:(_)=>`op:dead-letter:${_}`,bulkOperationAuditPrefix:()=>"audit:bulk:",bulkOperationAudit:(_,E,F)=>`audit:bulk:${M(_)}:${W(E)}:${W(F)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(_,E)=>`op:resolved-by-time:${M(_)}:${W(E)}`,asyncActivity:(_,E)=>`async-act:v1:${W(_)}:${W(E)}`,asyncActivityResolution:(_,E)=>`async-act:v1:${W(_)}:${W(E)}:resolution`,activityReconciliationPrefix:(_)=>`actrec:v1:${W(_)}:`,activityReconciliation:(_,E,F)=>`actrec:v1:${W(_)}:${W(E)}:${F}`,eventPrefix:(_)=>`ev:${W(_)}:`,event:(_,E)=>`ev:${W(_)}:${String(E).padStart(10,"0")}`,eventHead:(_)=>`ev:${W(_)}:head`,eventWatermark:(_)=>`ev:${W(_)}:watermark`,fleetEventPrefix:()=>"fleet-event:",fleetEvent:(_)=>`fleet-event:${String(_).padStart(10,"0")}`,fleetEventTail:()=>"fleet-event-tail",fleetEventByWorkflowPrefix:(_)=>`fleet-event-by-workflow:${W(_)}:`,fleetEventByWorkflow:(_,E)=>`fleet-event-by-workflow:${W(_)}:${String(E).padStart(10,"0")}`,signal:(_,E,F)=>S(_,E,F,I),startSignal:(_,E,F)=>S(_,E,F,g),signalSequence:(_)=>`sigseq:v1:${W(_)}`,signalAcceptedResponsePrefix:(_)=>`sigres:v1:${W(_)}:`,signalAcceptedResponse:(_,E,F)=>`sigres:v1:${W(_)}:${W(E)}:${W(F)}`,deadline:(_,E)=>`wf-deadline:${M(_)}:${W(E)}`,terminalCleanup:(_,E)=>`wf-cleanup:${M(_)}:${W(E)}`,teardownTimer:(_,E)=>`wf-teardown:${M(_)}:${W(E)}`,delayedStart:(_,E)=>`wf-delayed:${M(_)}:${W(E)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(_,E)=>`wf-terminal:${M(_)}:${W(E)}`,attribute:(_)=>`attr:${W(_)}`,attributeIndex:(_,E,F)=>`idx:${_}:${E}:${W(F)}`,tagIndex:(_,E)=>`tag:${W(_)}:${W(E)}`,updatePrefix:(_)=>`upd:${W(_)}:`,update:(_,E)=>`upd:${W(_)}:${E}`,updateResponse:(_)=>`upr:${_}`,updateIdempotency:(_,E)=>`upk:${W(_)}:${E}`,startIdempotency:(_)=>`start-idem:${W(_)}`,startIdempotencySignalId:(_)=>`start-idem:${_}`,livenessPrefix:()=>"liveness:",liveness:(_)=>`liveness:${W(_)}`,leasePrefix:()=>"lease:",leaseEpoch:()=>"lease:epoch",leaseHolder:()=>"lease:holder",budget:(_,E,F)=>`budget:${_}:${E}:${F}`,review:(_,E)=>`review:${W(_)}:${E}`,workflowHeaders:(_)=>`wf-headers:${W(_)}`,childCancellationPrefix:(_)=>`child-cancel:${W(_)}:`,childCancellation:(_,E)=>`child-cancel:${W(_)}:${W(E)}`,terminalCleanupNeeded:(_)=>`wf-cleanup-needed:${W(_)}`,workflowConcurrency:(_,E)=>`wf-concurrency:${W(_)}:${W(E)}`,workflowConcurrencyHolder:(_)=>`wf-concurrency-holder:${W(_)}`,workflowHasServices:(_)=>`wf-has-services:${W(_)}`,finalizerState:(_)=>`wf-finalizer-state:${W(_)}`,teardownOwed:(_)=>`wf-teardown-needed:${W(_)}`,teardownDeadLetter:(_)=>`wf-teardown-deadletter:${W(_)}`,offload:(_,E)=>`offload:${W(_)}:${E}`,archive:(_,E)=>`archive:${W(_)}:${E}`,stateExecution:(_,E)=>`state:execution:${W(_)}:${W(E)}`,stateWorkflow:(_,E)=>`state:workflow-scope:${H}:${W(_)}:${W(E)}`,streamChunkPrefix:(_,E)=>`blob:${W(_)}:${E}:chunk:`,streamChunk:(_,E,F)=>`blob:${W(_)}:${E}:chunk:${String(F).padStart(10,"0")}`,streamTail:(_,E)=>`blob:${W(_)}:${E}:tail`,streamMetadata:(_,E)=>`blob:${W(_)}:${E}:meta`,budgetCharged:(_)=>`budget-charged:${_}`,toolEffect:(_,E,F)=>`tool-effect:${W(_)}:${E}:${F}`,workflowVisibilityStatus:(_,E)=>`wf-idx-status:${W(_)}:${W(E)}`,workflowVisibilityType:(_,E)=>`wf-idx-type:${W(_)}:${W(E)}`,workflowVisibilityCreated:(_,E)=>`wf-idx-created:${M(_)}:${W(E)}`,workflowVisibilityUpdated:(_,E)=>`wf-idx-updated:${M(_)}:${W(E)}`,workflowVisibilityDeadline:(_,E)=>`wf-idx-deadline:${M(_)}:${W(E)}`,workflowVisibilityManifest:(_)=>`wf-idx-manifest:${W(_)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"};function y(_){if(_===void 0)return;if(typeof _!=="number"||!Number.isInteger(_)||_<0)throw Error("deleteRange limit must be a finite non-negative integer");return _===0?0:_}function T(_){let E={},F=!1;for(let U of["gt","gte","lt","lte"]){let X=_[U];if(X===void 0)continue;if(typeof X!=="string")throw Error("deleteRange bounds must be strings");E[U]=X,F=!0}if(!F)throw Error("deleteRange requires at least one of gt/gte/lt/lte; use deletePrefix to delete a whole prefix");let Y=y(_.limit);if(Y!==void 0)E.limit=Y;return E}async function m(_,E,F){let Y=T(F);if(_.deleteRange)return _.deleteRange(E,Y);return A(_,E,Y)}function D(_){return _.replaceAll(/:+$/g,"")}function w(_,E){let F=D(_),Y=D(E);if(F.length===0)return Y;if(Y.length===0)return F;return`${F}:${Y}`}class N{#_;#F;constructor(_,E){this.#_=_,this.#F=D(E)}#E(_){if(this.#F.length===0)return _;return _.length===0?`${this.#F}:`:`${this.#F}:${_}`}#W(_){if(this.#F.length===0)return _;return _.slice(this.#F.length+1)}#Y(_={}){let E={};if(_.limit!==void 0)E.limit=_.limit;if(_.reverse!==void 0)E.reverse=_.reverse;if(_.gt!==void 0)E.gt=this.#E(_.gt);if(_.gte!==void 0)E.gte=this.#E(_.gte);if(_.lt!==void 0)E.lt=this.#E(_.lt);if(_.lte!==void 0)E.lte=this.#E(_.lte);return E}#X(_){let E={};if(_.limit!==void 0)E.limit=_.limit;if(_.gt!==void 0)E.gt=this.#E(_.gt);if(_.gte!==void 0)E.gte=this.#E(_.gte);if(_.lt!==void 0)E.lt=this.#E(_.lt);if(_.lte!==void 0)E.lte=this.#E(_.lte);return E}capabilities(){return this.#_.capabilities()}scoped(_){return new N(this.#_,w(this.#F,_))}async get(_){return this.#_.get(this.#E(_))}async put(_,E){await this.#_.put(this.#E(_),E)}async delete(_){await this.#_.delete(this.#E(_))}async*scan(_,E){for await(let[F,Y]of this.#_.scan(this.#E(_),this.#Y(E)))yield[this.#W(F),Y]}async batch(_){Q("batch operations",_.length),await this.#_.batch(_.map((E)=>{if(E.type==="put")return{type:"put",key:this.#E(E.key),value:E.value};return{type:"delete",key:this.#E(E.key)}}))}async conditionalBatch(_,E){return b(this.#_,_.map((F)=>({key:this.#E(F.key),expectedValue:F.expectedValue})),E.map((F)=>{if(F.type==="put")return{type:"put",key:this.#E(F.key),value:F.value};return{type:"delete",key:this.#E(F.key)}}))}async has(_){return v(this.#_,this.#E(_))}async deletePrefix(_){return K(this.#_,this.#E(_))}async deleteRange(_,E){let F=this.#X(T(E));return m(this.#_,this.#E(_),F)}async*keys(_,E){for await(let F of h(this.#_,this.#E(_),this.#Y(E)))yield this.#W(F)}async count(_){return O(this.#_,this.#E(_))}[Symbol.dispose](){this.#_[Symbol.dispose]()}}function c(_,E){return new N(_,E)}class k{#_;constructor(){this.#_=new Map}capabilities(){return{persistence:"ephemeral",readAfterWrite:"linearizable",scanConsistency:"snapshot",atomicBatch:!0,conditionalBatch:!0,boundedRangeDelete:!0}}#F(_,E,F){return _>=E&&_<F}#E(_,E){let F=[];for(let Y of this.#_.keys())if(this.#F(Y,_,E))F.push(Y);return F.toSorted()}async get(_){return this.#_.get(_)??null}async put(_,E){this.#_.set(_,E)}async delete(_){this.#_.delete(_)}async*scan(_,E={}){let{limit:F,reverse:Y}=E,U=Z(_),X=this.#E(_,U);if(X=X.filter((G)=>V(G,E)),Y)X.reverse();let J=0;for(let G of X){if(F!==void 0&&J>=F)break;let q=this.#_.get(G);if(q!==void 0)yield[G,q],J++}}async batch(_){Q("batch operations",_.length),this.#W(_)}#W(_){for(let E of _)if(E.type==="put")this.#_.set(E.key,E.value);else this.#_.delete(E.key)}async conditionalBatch(_,E){Q("conditionalBatch conditions",_.length),Q("conditionalBatch operations",E.length);for(let F of _){let Y=this.#_.get(F.key)??null;if(!P(Y,F.expectedValue))return!1}return this.#W(E),!0}async has(_){return this.#_.has(_)}async deletePrefix(_){let E=Z(_),F=this.#E(_,E);for(let Y of F)this.#_.delete(Y);return F.length}async deleteRange(_,E){let F=T(E),Y=Z(_),U=this.#E(_,Y).filter((J)=>V(J,F)),X=F.limit===void 0?U:U.slice(0,F.limit);for(let J of X)this.#_.delete(J);return X.length}async*keys(_,E={}){let{limit:F,reverse:Y}=E,U=Z(_),X=this.#E(_,U);if(X=X.filter((G)=>V(G,E)),Y)X.reverse();let J=0;for(let G of X){if(F!==void 0&&J>=F)break;yield G,J++}}async count(_){let E=Z(_);return this.#E(_,E).length}scoped(_){return c(this,_)}get size(){return this.#_.size}clear(){this.#_.clear()}snapshot(){let _=new Map;for(let[E,F]of this.#_)_.set(E,new Uint8Array(F));return _}[Symbol.dispose](){this.#_.clear()}}export{k as MemoryStorage};
2
+ var k=import.meta.require,l=(_,F,Y)=>{if(F!=null){if(typeof F!=="object"&&typeof F!=="function")throw TypeError('Object expected to be assigned to "using" declaration');let E;if(Y)E=F[Symbol.asyncDispose];if(E===void 0)E=F[Symbol.dispose];if(typeof E!=="function")throw TypeError("Object not disposable");_.push([Y,E,F])}else if(Y)_.push([Y]);return F},d=(_,F,Y)=>{let E=(U)=>F=Y?new SuppressedError(U,F,"An error was suppressed during disposal"):(Y=!0,U),G=(U)=>{while(U=_.pop())try{var M=U[1]&&U[1].call(U[2]);if(U[0])return Promise.resolve(M).then(G,(J)=>(E(J),G()))}catch(J){E(J)}if(Y)throw F};return G()};function L(_,F,Y){if(!_.capabilities()[F])throw Error(`Feature "${Y}" requires storage capability "${F}", but this storage backend does not provide it.`)}function u(_){let F=_.capabilities(),Y=[];if(F.persistence!=="local"&&F.persistence!=="remote")Y.push(`persistence must be "local" or "remote" (got "${F.persistence}")`);if(F.readAfterWrite!=="linearizable")Y.push(`readAfterWrite must be "linearizable" (got "${F.readAfterWrite}")`);if(F.scanConsistency!=="snapshot")Y.push(`scanConsistency must be "snapshot" (got "${F.scanConsistency}")`);if(!F.atomicBatch)Y.push("atomicBatch must be true");if(!F.conditionalBatch)Y.push("conditionalBatch must be true");if(Y.length>0)throw Error(`Storage is not durable enough for recovery: ${Y.join("; ")}.`)}var D="default";async function C(_,F){return await _.get(F)!==null}async function*V(_,F,Y){for await(let[E]of _.scan(F,Y))yield E}async function R(_,F){let Y=0;for await(let E of V(_,F))Y++;return Y}async function B(_,F){let Y=[];for await(let E of V(_,F))Y.push({type:"delete",key:E});if(Y.length===0)return 0;return await _.batch(Y),Y.length}async function A(_,F,Y){let E=[];for await(let G of V(_,F,Y))E.push({type:"delete",key:G});if(E.length===0)return 0;return await _.batch(E),E.length}var g=["actrec:","archive:","async-act:","attr:","audit:bulk:","blob:","budget:","budget-charged:","child-by-parent:","ev:","fleet-event-by-workflow:","fleet-event:","fleet-event-tail","idx:","lease:","liveness:","offload:","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-teardown:","wf-teardown-deadletter:","wf-teardown-needed:","wf-teardown-succeeded:","wf-terminal:"];var N=1e4,o=1e4;class z extends Error{code="StorageBatchOperationLimitExceededError";cap=N;count;target;constructor(_,F){super(`${_} count ${F} exceeds MAX_BATCH_OPERATIONS (${N}).`);this.name="StorageBatchOperationLimitExceededError",this.target=_,this.count=F}}function Z(_,F){if(F>N)throw new z(_,F)}function $(_){return _.length>0?_.slice(0,-1)+String.fromCharCode(_.charCodeAt(_.length-1)+1):"\xFF"}function H(_,F={}){if(F.gt!==void 0&&_<=F.gt)return!1;if(F.gte!==void 0&&_<F.gte)return!1;if(F.lt!==void 0&&_>=F.lt)return!1;if(F.lte!==void 0&&_>F.lte)return!1;return!0}function P(_,F){if(_===null||F===null)return _===F;if(_.byteLength!==F.byteLength)return!1;for(let Y=0;Y<_.byteLength;Y++)if(_[Y]!==F[Y])return!1;return!0}async function v(_,F){if(_.has)return _.has(F);return C(_,F)}function O(_,F,Y){if(_.keys)return _.keys(F,Y);return V(_,F,Y)}async function h(_,F){if(_.count)return _.count(F);return R(_,F)}async function K(_,F){if(_.deletePrefix)return _.deletePrefix(F);return B(_,F)}async function __(_,F){Z("batch operations",F.length),await _.batch(F)}async function b(_,F,Y){if(Z("conditionalBatch conditions",F.length),Z("conditionalBatch operations",Y.length),L(_,"conditionalBatch","storageConditionalBatch"),!_.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return _.conditionalBatch(F,Y)}function X(_){return encodeURIComponent(_)}function F_(_){return decodeURIComponent(_)}function Y_(_){try{return decodeURIComponent(_)}catch{return null}}var Q=(_)=>String(_).padStart(16,"0"),x="0",y="1",S=(_,F,Y,E)=>`sig:${X(_)}:${X(F)}:${E}:${X(Y)}`,X_={workflow:(_)=>`wf:${X(_)}`,checkpoint:(_)=>`wf:${X(_)}:ckpt`,checkpointHistory:(_,F)=>`wf:${X(_)}:ckpt:${String(F).padStart(10,"0")}`,timelinePrefix:(_)=>`wf:${X(_)}:timeline:`,timeline:(_,F)=>`wf:${X(_)}:timeline:${String(F).padStart(10,"0")}`,schedule:(_)=>`schedule:${X(_)}`,scheduleTick:(_,F)=>`schedule-due:${String(_).padStart(16,"0")}:${X(F)}`,scheduleRun:(_)=>`schedule-run:${X(_)}`,scheduleRunLink:(_)=>`schedule-run-link:${X(_)}`,scheduleRunBySchedulePrefix:(_)=>`schedule-run-by-schedule:${X(_)}:`,scheduleRunBySchedule:(_,F)=>`schedule-run-by-schedule:${X(_)}:${X(F)}`,operation:(_,F,Y)=>`op:${_}:${Q(F)}:${Y}`,operationInflight:(_)=>`op:inflight:${_}`,operationQueued:(_)=>`op:queued:${_}`,operationResolved:(_)=>`op:resolved:${_}`,operationDeadLetterPrefix:()=>"op:dead-letter:",operationDeadLetter:(_)=>`op:dead-letter:${_}`,bulkOperationAuditPrefix:()=>"audit:bulk:",bulkOperationAudit:(_,F,Y)=>`audit:bulk:${Q(_)}:${X(F)}:${X(Y)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(_,F)=>`op:resolved-by-time:${Q(_)}:${X(F)}`,asyncActivity:(_,F)=>`async-act:v1:${X(_)}:${X(F)}`,asyncActivityResolution:(_,F)=>`async-act:v1:${X(_)}:${X(F)}:resolution`,activityReconciliationPrefix:(_)=>`actrec:v1:${X(_)}:`,activityReconciliation:(_,F,Y)=>`actrec:v1:${X(_)}:${X(F)}:${Y}`,eventPrefix:(_)=>`ev:${X(_)}:`,event:(_,F)=>`ev:${X(_)}:${String(F).padStart(10,"0")}`,eventHead:(_)=>`ev:${X(_)}:head`,eventWatermark:(_)=>`ev:${X(_)}:watermark`,fleetEventPrefix:()=>"fleet-event:",fleetEvent:(_)=>`fleet-event:${String(_).padStart(10,"0")}`,fleetEventTail:()=>"fleet-event-tail",fleetEventByWorkflowPrefix:(_)=>`fleet-event-by-workflow:${X(_)}:`,fleetEventByWorkflow:(_,F)=>`fleet-event-by-workflow:${X(_)}:${String(F).padStart(10,"0")}`,signal:(_,F,Y)=>S(_,F,Y,y),startSignal:(_,F,Y)=>S(_,F,Y,x),signalSequence:(_)=>`sigseq:v1:${X(_)}`,signalAcceptedResponsePrefix:(_)=>`sigres:v1:${X(_)}:`,signalAcceptedResponse:(_,F,Y)=>`sigres:v1:${X(_)}:${X(F)}:${X(Y)}`,deadline:(_,F)=>`wf-deadline:${Q(_)}:${X(F)}`,terminalCleanup:(_,F)=>`wf-cleanup:${Q(_)}:${X(F)}`,teardownTimer:(_,F)=>`wf-teardown:${Q(_)}:${X(F)}`,delayedStart:(_,F)=>`wf-delayed:${Q(_)}:${X(F)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(_,F)=>`wf-terminal:${Q(_)}:${X(F)}`,attribute:(_)=>`attr:${X(_)}`,attributeIndex:(_,F,Y)=>`idx:${_}:${F}:${X(Y)}`,tagIndex:(_,F)=>`tag:${X(_)}:${X(F)}`,updatePrefix:(_)=>`upd:${X(_)}:`,update:(_,F)=>`upd:${X(_)}:${F}`,updateResponse:(_)=>`upr:${_}`,updateIdempotency:(_,F)=>`upk:${X(_)}:${F}`,startIdempotency:(_)=>`start-idem:${X(_)}`,startIdempotencySignalId:(_)=>`start-idem:${_}`,livenessPrefix:()=>"liveness:",liveness:(_)=>`liveness:${X(_)}`,leasePrefix:()=>"lease:",leaseEpoch:()=>"lease:epoch",leaseHolder:()=>"lease:holder",budget:(_,F,Y)=>`budget:${_}:${F}:${Y}`,review:(_,F)=>`review:${X(_)}:${F}`,workflowHeaders:(_)=>`wf-headers:${X(_)}`,childCancellationPrefix:(_)=>`child-cancel:${X(_)}:`,childCancellation:(_,F)=>`child-cancel:${X(_)}:${X(F)}`,childWorkflowByParentPrefix:(_,F)=>`child-by-parent:${X(_)}:${F===void 0?"":`${X(F)}:`}`,childWorkflowByParent:(_,F,Y)=>`child-by-parent:${X(_)}:${F===void 0?"":`${X(F)}:`}${X(Y)}`,terminalCleanupNeeded:(_)=>`wf-cleanup-needed:${X(_)}`,workflowConcurrency:(_,F)=>`wf-concurrency:${X(_)}:${X(F)}`,workflowConcurrencyHolder:(_)=>`wf-concurrency-holder:${X(_)}`,workflowHasServices:(_)=>`wf-has-services:${X(_)}`,finalizerState:(_)=>`wf-finalizer-state:${X(_)}`,teardownOwed:(_)=>`wf-teardown-needed:${X(_)}`,teardownSucceeded:(_)=>`wf-teardown-succeeded:${X(_)}`,teardownDeadLetter:(_)=>`wf-teardown-deadletter:${X(_)}`,offload:(_,F)=>`offload:${X(_)}:${F}`,archive:(_,F)=>`archive:${X(_)}:${F}`,stateExecution:(_,F)=>`state:execution:${X(_)}:${X(F)}`,stateWorkflow:(_,F)=>`state:workflow-scope:${D}:${X(_)}:${X(F)}`,streamChunkPrefix:(_,F)=>`blob:${X(_)}:${F}:chunk:`,streamChunk:(_,F,Y)=>`blob:${X(_)}:${F}:chunk:${String(Y).padStart(10,"0")}`,streamTail:(_,F)=>`blob:${X(_)}:${F}:tail`,streamMetadata:(_,F)=>`blob:${X(_)}:${F}:meta`,budgetCharged:(_)=>`budget-charged:${_}`,toolEffect:(_,F,Y)=>`tool-effect:${X(_)}:${F}:${Y}`,workflowVisibilityStatus:(_,F)=>`wf-idx-status:${X(_)}:${X(F)}`,workflowVisibilityType:(_,F)=>`wf-idx-type:${X(_)}:${X(F)}`,workflowVisibilityCreated:(_,F)=>`wf-idx-created:${Q(_)}:${X(F)}`,workflowVisibilityUpdated:(_,F)=>`wf-idx-updated:${Q(_)}:${X(F)}`,workflowVisibilityDeadline:(_,F)=>`wf-idx-deadline:${Q(_)}:${X(F)}`,workflowVisibilityManifest:(_)=>`wf-idx-manifest:${X(_)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"};function I(_){if(_===void 0)return;if(typeof _!=="number"||!Number.isInteger(_)||_<0)throw Error("deleteRange limit must be a finite non-negative integer");return _===0?0:_}function j(_){let F={},Y=!1;for(let G of["gt","gte","lt","lte"]){let U=_[G];if(U===void 0)continue;if(typeof U!=="string")throw Error("deleteRange bounds must be strings");F[G]=U,Y=!0}if(!Y)throw Error("deleteRange requires at least one of gt/gte/lt/lte; use deletePrefix to delete a whole prefix");let E=I(_.limit);if(E!==void 0)F.limit=E;return F}async function m(_,F,Y){let E=j(Y);if(_.deleteRange)return _.deleteRange(F,E);return A(_,F,E)}function q(_){return _.replaceAll(/:+$/g,"")}function w(_,F){let Y=q(_),E=q(F);if(Y.length===0)return E;if(E.length===0)return Y;return`${Y}:${E}`}class T{#_;#Y;constructor(_,F){this.#_=_,this.#Y=q(F)}#F(_){if(this.#Y.length===0)return _;return _.length===0?`${this.#Y}:`:`${this.#Y}:${_}`}#X(_){if(this.#Y.length===0)return _;return _.slice(this.#Y.length+1)}#E(_={}){let F={};if(_.limit!==void 0)F.limit=_.limit;if(_.reverse!==void 0)F.reverse=_.reverse;if(_.gt!==void 0)F.gt=this.#F(_.gt);if(_.gte!==void 0)F.gte=this.#F(_.gte);if(_.lt!==void 0)F.lt=this.#F(_.lt);if(_.lte!==void 0)F.lte=this.#F(_.lte);return F}#U(_){let F={};if(_.limit!==void 0)F.limit=_.limit;if(_.gt!==void 0)F.gt=this.#F(_.gt);if(_.gte!==void 0)F.gte=this.#F(_.gte);if(_.lt!==void 0)F.lt=this.#F(_.lt);if(_.lte!==void 0)F.lte=this.#F(_.lte);return F}capabilities(){return this.#_.capabilities()}scoped(_){return new T(this.#_,w(this.#Y,_))}async get(_){return this.#_.get(this.#F(_))}async put(_,F){await this.#_.put(this.#F(_),F)}async delete(_){await this.#_.delete(this.#F(_))}async*scan(_,F){for await(let[Y,E]of this.#_.scan(this.#F(_),this.#E(F)))yield[this.#X(Y),E]}async batch(_){Z("batch operations",_.length),await this.#_.batch(_.map((F)=>{if(F.type==="put")return{type:"put",key:this.#F(F.key),value:F.value};return{type:"delete",key:this.#F(F.key)}}))}async conditionalBatch(_,F){return b(this.#_,_.map((Y)=>({key:this.#F(Y.key),expectedValue:Y.expectedValue})),F.map((Y)=>{if(Y.type==="put")return{type:"put",key:this.#F(Y.key),value:Y.value};return{type:"delete",key:this.#F(Y.key)}}))}async has(_){return v(this.#_,this.#F(_))}async deletePrefix(_){return K(this.#_,this.#F(_))}async deleteRange(_,F){let Y=this.#U(j(F));return m(this.#_,this.#F(_),Y)}async*keys(_,F){for await(let Y of O(this.#_,this.#F(_),this.#E(F)))yield this.#X(Y)}async count(_){return h(this.#_,this.#F(_))}[Symbol.dispose](){this.#_[Symbol.dispose]()}}function c(_,F){return new T(_,F)}class f{#_;constructor(){this.#_=new Map}capabilities(){return{persistence:"ephemeral",readAfterWrite:"linearizable",scanConsistency:"snapshot",atomicBatch:!0,conditionalBatch:!0,boundedRangeDelete:!0}}#Y(_,F,Y){return _>=F&&_<Y}#F(_,F){let Y=[];for(let E of this.#_.keys())if(this.#Y(E,_,F))Y.push(E);return Y.toSorted()}async get(_){return this.#_.get(_)??null}async put(_,F){this.#_.set(_,F)}async delete(_){this.#_.delete(_)}async*scan(_,F={}){let{limit:Y,reverse:E}=F,G=$(_),U=this.#F(_,G);if(U=U.filter((J)=>H(J,F)),E)U.reverse();let M=0;for(let J of U){if(Y!==void 0&&M>=Y)break;let W=this.#_.get(J);if(W!==void 0)yield[J,W],M++}}async batch(_){Z("batch operations",_.length),this.#X(_)}#X(_){for(let F of _)if(F.type==="put")this.#_.set(F.key,F.value);else this.#_.delete(F.key)}async conditionalBatch(_,F){Z("conditionalBatch conditions",_.length),Z("conditionalBatch operations",F.length);for(let Y of _){let E=this.#_.get(Y.key)??null;if(!P(E,Y.expectedValue))return!1}return this.#X(F),!0}async has(_){return this.#_.has(_)}async deletePrefix(_){let F=$(_),Y=this.#F(_,F);for(let E of Y)this.#_.delete(E);return Y.length}async deleteRange(_,F){let Y=j(F),E=$(_),G=this.#F(_,E).filter((M)=>H(M,Y)),U=Y.limit===void 0?G:G.slice(0,Y.limit);for(let M of U)this.#_.delete(M);return U.length}async*keys(_,F={}){let{limit:Y,reverse:E}=F,G=$(_),U=this.#F(_,G);if(U=U.filter((J)=>H(J,F)),E)U.reverse();let M=0;for(let J of U){if(Y!==void 0&&M>=Y)break;yield J,M++}}async count(_){let F=$(_);return this.#F(_,F).length}scoped(_){return c(this,_)}get size(){return this.#_.size}clear(){this.#_.clear()}snapshot(){let _=new Map;for(let[F,Y]of this.#_)_.set(F,new Uint8Array(Y));return _}[Symbol.dispose](){this.#_.clear()}}export{f as MemoryStorage};
@@ -1,20 +1,7 @@
1
- import { PostgresKeyValueStorage, type PostgresKeyValueStorageOptions, type PostgresPool, type PostgresPoolClient } from './postgres-key-value-storage.ts';
1
+ import { PostgresKeyValueStorage, type PostgresKeyValueStorageOptions, type PostgresPool } from './postgres-key-value-storage.ts';
2
2
  /**
3
- * A connection that can run a single interactive transaction, obtained from
4
- * {@link NeonPool.connect}. Alias of the driver-agnostic
5
- * {@link PostgresPoolClient}; kept for backward-compatible imports.
6
- */
7
- export type NeonPoolClient = PostgresPoolClient;
8
- /**
9
- * Minimal structural view of a node-postgres `Pool`. The Neon serverless `Pool`
10
- * satisfies this; the PGlite test backend is wrapped to satisfy it too. Alias of
11
- * the driver-agnostic {@link PostgresPool}; kept for backward-compatible imports.
12
- */
13
- export type NeonPool = PostgresPool;
14
- /**
15
- * Configuration for connecting to a Neon (or any Postgres) database. Alias of the
16
- * shared {@link PostgresKeyValueStorageOptions}; `url` is optional and required
17
- * only when no `pool` is supplied.
3
+ * Configuration for connecting {@link NeonStorage} to a Neon database.
4
+ * `url` is optional and required only when no `pool` is supplied.
18
5
  *
19
6
  * @example
20
7
  * ```ts