@lostgradient/weft 0.7.0 → 0.9.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 (141) hide show
  1. package/README.md +9 -3
  2. package/dist/cli/generated/operation-client.generated.d.ts +1 -0
  3. package/dist/cli-main.js +78 -78
  4. package/dist/core/context/activity-retry-state.d.ts +6 -5
  5. package/dist/core/context/activity-retry-state.js +31 -21
  6. package/dist/core/context/durable-activity.d.ts +117 -0
  7. package/dist/core/context/durable-activity.js +79 -0
  8. package/dist/core/context/durable-operations.js +1 -1
  9. package/dist/core/context/index.d.ts +1 -0
  10. package/dist/core/context/index.js +2 -0
  11. package/dist/core/context/operation-request.d.ts +17 -0
  12. package/dist/core/context/parallel-operations.js +1 -0
  13. package/dist/core/context/run-operation-cached-request.d.ts +8 -0
  14. package/dist/core/context/run-operation-cached-request.js +59 -0
  15. package/dist/core/context/run-operation.d.ts +23 -5
  16. package/dist/core/context/run-operation.js +63 -47
  17. package/dist/core/context/speculative-child.js +1 -0
  18. package/dist/core/context/types.d.ts +1 -0
  19. package/dist/core/engine/activity-heartbeat-tracking.d.ts +8 -17
  20. package/dist/core/engine/activity-heartbeat-tracking.js +12 -2
  21. package/dist/core/engine/activity-reconciliation.d.ts +1 -0
  22. package/dist/core/engine/activity-reconciliation.js +7 -2
  23. package/dist/core/engine/anonymous-signal-sequence.js +6 -6
  24. package/dist/core/engine/async-activity-completion.d.ts +5 -7
  25. package/dist/core/engine/async-activity-completion.js +13 -9
  26. package/dist/core/engine/bulk-operations-purge.js +2 -1
  27. package/dist/core/engine/bulk-operations.js +18 -36
  28. package/dist/core/engine/callback-checkpoint-persistence.d.ts +3 -0
  29. package/dist/core/engine/callback-checkpoint-persistence.js +25 -0
  30. package/dist/core/engine/callback-creators-bundles.js +5 -2
  31. package/dist/core/engine/checkpoint-io.d.ts +4 -1
  32. package/dist/core/engine/checkpoint-io.js +19 -10
  33. package/dist/core/engine/completed-review-storage.d.ts +2 -1
  34. package/dist/core/engine/completed-review-storage.js +4 -3
  35. package/dist/core/engine/disposal.js +1 -0
  36. package/dist/core/engine/engine-internal-types.d.ts +1 -0
  37. package/dist/core/engine/index.d.ts +31 -0
  38. package/dist/core/engine/index.js +19 -10
  39. package/dist/core/engine/inline-launch-queue.js +1 -1
  40. package/dist/core/engine/internals.d.ts +25 -2
  41. package/dist/core/engine/lease-manager.js +2 -2
  42. package/dist/core/engine/lifecycle/fork-helpers.js +1 -0
  43. package/dist/core/engine/lifecycle/resume.js +6 -0
  44. package/dist/core/engine/lifecycle/start-exec.d.ts +2 -2
  45. package/dist/core/engine/lifecycle/start-exec.js +6 -4
  46. package/dist/core/engine/lifecycle/start.js +1 -0
  47. package/dist/core/engine/lifecycle/transition.js +6 -0
  48. package/dist/core/engine/memo-durable-activity.d.ts +11 -0
  49. package/dist/core/engine/memo-durable-activity.js +282 -0
  50. package/dist/core/engine/operations-activity.d.ts +6 -2
  51. package/dist/core/engine/operations-activity.js +24 -10
  52. package/dist/core/engine/operations-data.d.ts +4 -1
  53. package/dist/core/engine/operations-data.js +3 -3
  54. package/dist/core/engine/operations-time.d.ts +2 -2
  55. package/dist/core/engine/operations-time.js +40 -6
  56. package/dist/core/engine/reviews.js +7 -4
  57. package/dist/core/engine/schedule-timer.js +2 -0
  58. package/dist/core/engine/schedules.js +3 -0
  59. package/dist/core/engine/storage-io.js +1 -1
  60. package/dist/core/engine/termination/cleanup.js +15 -13
  61. package/dist/core/engine/termination/finalizer-activity.d.ts +1 -1
  62. package/dist/core/engine/termination/finalizer-activity.js +5 -1
  63. package/dist/core/engine/termination/finalizer.js +1 -1
  64. package/dist/core/engine/validation/schedule-options.d.ts +9 -0
  65. package/dist/core/engine/validation/schedule-options.js +59 -0
  66. package/dist/core/engine/validation/schedule.d.ts +3 -8
  67. package/dist/core/engine/validation/schedule.js +40 -56
  68. package/dist/core/engine/validation.js +1 -0
  69. package/dist/core/execution-strategy.d.ts +1 -0
  70. package/dist/core/inline-execution-strategy.context-options.d.ts +1 -0
  71. package/dist/core/inline-execution-strategy.context-options.js +3 -0
  72. package/dist/core/json.js +1 -1
  73. package/dist/core/types/activity.d.ts +11 -0
  74. package/dist/core/types/checkpoint.d.ts +1 -0
  75. package/dist/core/types/schedules.d.ts +10 -0
  76. package/dist/core/types/state.d.ts +6 -0
  77. package/dist/core/types/workflow-context.d.ts +13 -0
  78. package/dist/core/weft-error.d.ts +1 -1
  79. package/dist/core/weft-error.js +2 -0
  80. package/dist/core/worker-execution-strategy.d.ts +1 -0
  81. package/dist/core/worker-inbound-message.d.ts +1 -0
  82. package/dist/core/worker-inbound-message.js +3 -0
  83. package/dist/index.d.ts +2 -1
  84. package/dist/index.js +6 -0
  85. package/dist/json-schema.js +2 -2
  86. package/dist/mcp/cli.js +32 -32
  87. package/dist/observability/index.js +2 -2
  88. package/dist/runtime/portable.d.ts +1 -1
  89. package/dist/server/handler.js +27 -27
  90. package/dist/server/index.d.ts +2 -0
  91. package/dist/server/index.js +32 -32
  92. package/dist/server/operations/create-schedule.d.ts +2 -0
  93. package/dist/server/operations/create-schedule.js +13 -2
  94. package/dist/server/rest-binding.d.ts +1 -1
  95. package/dist/server/runtime/task-dispatch.js +6 -0
  96. package/dist/server/runtime/task-polling.js +9 -1
  97. package/dist/server/runtime/task-reconciliation.js +2 -1
  98. package/dist/server/runtime/websocket-worker.js +7 -2
  99. package/dist/server/serve-internals.d.ts +28 -0
  100. package/dist/server/serve-internals.js +4 -2
  101. package/dist/server/task-queue-types.d.ts +2 -0
  102. package/dist/server/task-state.d.ts +4 -0
  103. package/dist/service-worker/index.d.ts +15 -14
  104. package/dist/service-worker/index.js +28 -28
  105. package/dist/service-worker/scheduler.d.ts +41 -1
  106. package/dist/service-worker/setup.d.ts +18 -1
  107. package/dist/service-worker/setup.js +7 -4
  108. package/dist/storage/auto.d.ts +36 -18
  109. package/dist/storage/auto.js +1 -1
  110. package/dist/storage/compressed-storage.js +1 -1
  111. package/dist/storage/indexeddb.d.ts +6 -1
  112. package/dist/storage/indexeddb.js +1 -1
  113. package/dist/storage/interface.js +1 -1
  114. package/dist/storage/lmdb.js +1 -1
  115. package/dist/storage/memory.js +1 -1
  116. package/dist/storage/neon.js +1 -1
  117. package/dist/storage/resolve.js +1 -1
  118. package/dist/storage/scoped-storage.js +1 -1
  119. package/dist/storage/testing.js +1 -1
  120. package/dist/storage/turso.js +1 -1
  121. package/dist/storage/typed-storage.d.ts +1 -1
  122. package/dist/storage/typed-storage.js +1 -1
  123. package/dist/storage/web-extension.d.ts +1 -1
  124. package/dist/storage/web-extension.js +1 -1
  125. package/dist/testing/index.js +32 -32
  126. package/dist/version.d.ts +1 -1
  127. package/dist/version.js +1 -1
  128. package/dist/worker/execute-with-interceptors.d.ts +9 -3
  129. package/dist/worker/execute-with-interceptors.js +14 -2
  130. package/dist/worker/long-poll.d.ts +2 -1
  131. package/dist/worker/long-poll.js +1 -1
  132. package/dist/worker/protocol-messages.d.ts +2 -0
  133. package/dist/worker/protocol-schemas.d.ts +8 -0
  134. package/dist/worker/protocol-schemas.js +1 -0
  135. package/dist/worker/protocol.js +1 -1
  136. package/dist/worker/remote-activity-context.d.ts +2 -0
  137. package/dist/workers/activity-runner.d.ts +2 -0
  138. package/dist/workers/activity-runner.js +9 -1
  139. package/dist/workers/workflow-runner.d.ts +2 -1
  140. package/dist/workers/workflow-runner.js +1 -0
  141. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- var U_=Object.defineProperty;var Z_=(_)=>_;function G_(_,E){this[_]=Z_.bind(null,E)}var z_=(_,E)=>{for(var F in E)U_(_,F,{get:E[F],enumerable:!0,configurable:!0,set:G_.bind(E,F)})};var M=(_,E)=>()=>(_&&(E=_(_=0)),E);var v_=(_,E,F)=>{if(E!=null){if(typeof E!=="object"&&typeof E!=="function")throw TypeError('Object expected to be assigned to "using" declaration');let W;if(F)W=E[Symbol.asyncDispose];if(W===void 0)W=E[Symbol.dispose];if(typeof W!=="function")throw TypeError("Object not disposable");_.push([F,W,E])}else if(F)_.push([F]);return E},P_=(_,E,F)=>{let W=(Y)=>E=F?new SuppressedError(Y,E,"An error was suppressed during disposal"):(F=!0,Y),J=(Y)=>{while(Y=_.pop())try{var Q=Y[1]&&Y[1].call(Y[2]);if(Y[0])return Promise.resolve(Q).then(J,(U)=>(W(U),J()))}catch(U){W(U)}if(F)throw E};return J()};function N(_,E,F){if(!_.capabilities()[E])throw Error(`Feature "${F}" requires storage capability "${E}", but this storage backend does not provide it.`)}function M_(_){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 C="default";async function q(_,E){return await _.get(E)!==null}async function*H(_,E,F){for await(let[W]of _.scan(E,F))yield W}async function h(_,E){let F=0;for await(let W of H(_,E))F++;return F}async function b(_,E){let F=[];for await(let W of H(_,E))F.push({type:"delete",key:W});if(F.length===0)return 0;return await _.batch(F),F.length}async function x(_,E,F){let W=[];for await(let J of H(_,E,F))W.push({type:"delete",key:J});if(W.length===0)return 0;return await _.batch(W),W.length}var $_;var y=M(()=>{$_=["actrec:","archive:","async-act:","attr:","audit:bulk:","blob:","budget:","budget-charged:","ev:","fleet-event-by-workflow:","fleet-event:","fleet-event-tail","idx:","lease:","liveness:","offload:","op:","review:","schedule:","schedule-due:","schedule-run:","sig:","sigres:","sigseq:","start-idem:","state:","tag:","tool-effect:","upd:","upk:","upr:","wf:","wf-cleanup:","wf-cleanup-needed:","wf-concurrency:","wf-concurrency-holder:","wf-deadline:","wf-delayed:","wf-finalizer-state:","wf-has-services:","wf-headers:","wf-idx-","wf-teardown:","wf-teardown-deadletter:","wf-teardown-needed:","wf-terminal:"]});function G(_,E){if(E>A)throw new m(_,E)}function g(_){return _.length>0?_.slice(0,-1)+String.fromCharCode(_.charCodeAt(_.length-1)+1):"\xFF"}function u_(_,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 u(_,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 c(_,E){if(_.has)return _.has(E);return q(_,E)}function k(_,E,F){if(_.keys)return _.keys(E,F);return H(_,E,F)}async function w(_,E){if(_.count)return _.count(E);return h(_,E)}async function f(_,E){if(_.deletePrefix)return _.deletePrefix(E);return b(_,E)}async function c_(_,E){G("batch operations",E.length),await _.batch(E)}async function d(_,E,F){if(G("conditionalBatch conditions",E.length),G("conditionalBatch operations",F.length),N(_,"conditionalBatch","storageConditionalBatch"),!_.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return _.conditionalBatch(E,F)}function X(_){return encodeURIComponent(_)}function k_(_){return decodeURIComponent(_)}function w_(_){try{return decodeURIComponent(_)}catch{return null}}var A=1e4,g_=1e4,m,Z=(_)=>String(_).padStart(16,"0"),H_="0",V_="1",I=(_,E,F,W)=>`sig:${X(_)}:${X(E)}:${W}:${X(F)}`,f_;var V=M(()=>{y();m=class m extends Error{code="StorageBatchOperationLimitExceededError";cap=A;count;target;constructor(_,E){super(`${_} count ${E} exceeds MAX_BATCH_OPERATIONS (${A}).`);this.name="StorageBatchOperationLimitExceededError",this.target=_,this.count=E}};f_={workflow:(_)=>`wf:${X(_)}`,checkpoint:(_)=>`wf:${X(_)}:ckpt`,checkpointHistory:(_,E)=>`wf:${X(_)}:ckpt:${String(E).padStart(10,"0")}`,timelinePrefix:(_)=>`wf:${X(_)}:timeline:`,timeline:(_,E)=>`wf:${X(_)}:timeline:${String(E).padStart(10,"0")}`,schedule:(_)=>`schedule:${X(_)}`,scheduleTick:(_,E)=>`schedule-due:${String(_).padStart(16,"0")}:${X(E)}`,scheduleRun:(_)=>`schedule-run:${X(_)}`,operation:(_,E,F)=>`op:${_}:${Z(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:${Z(_)}:${X(E)}:${X(F)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(_,E)=>`op:resolved-by-time:${Z(_)}:${X(E)}`,asyncActivity:(_,E)=>`async-act:v1:${X(_)}:${X(E)}`,activityReconciliationPrefix:(_)=>`actrec:v1:${X(_)}:`,activityReconciliation:(_,E,F)=>`actrec:v1:${X(_)}:${X(E)}:${F}`,eventPrefix:(_)=>`ev:${X(_)}:`,event:(_,E)=>`ev:${X(_)}:${String(E).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:(_,E)=>`fleet-event-by-workflow:${X(_)}:${String(E).padStart(10,"0")}`,signal:(_,E,F)=>I(_,E,F,V_),startSignal:(_,E,F)=>I(_,E,F,H_),signalSequence:(_)=>`sigseq:v1:${X(_)}`,signalAcceptedResponsePrefix:(_)=>`sigres:v1:${X(_)}:`,signalAcceptedResponse:(_,E,F)=>`sigres:v1:${X(_)}:${X(E)}:${X(F)}`,deadline:(_,E)=>`wf-deadline:${Z(_)}:${X(E)}`,terminalCleanup:(_,E)=>`wf-cleanup:${Z(_)}:${X(E)}`,teardownTimer:(_,E)=>`wf-teardown:${Z(_)}:${X(E)}`,delayedStart:(_,E)=>`wf-delayed:${Z(_)}:${X(E)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(_,E)=>`wf-terminal:${Z(_)}:${X(E)}`,attribute:(_)=>`attr:${X(_)}`,attributeIndex:(_,E,F)=>`idx:${_}:${E}:${X(F)}`,tagIndex:(_,E)=>`tag:${X(_)}:${X(E)}`,updatePrefix:(_)=>`upd:${X(_)}:`,update:(_,E)=>`upd:${X(_)}:${E}`,updateResponse:(_)=>`upr:${_}`,updateIdempotency:(_,E)=>`upk:${X(_)}:${E}`,startIdempotency:(_)=>`start-idem:${X(_)}`,startIdempotencySignalId:(_)=>`start-idem:${_}`,livenessPrefix:()=>"liveness:",liveness:(_)=>`liveness:${X(_)}`,leasePrefix:()=>"lease:",leaseEpoch:()=>"lease:epoch",leaseHolder:()=>"lease:holder",budget:(_,E,F)=>`budget:${_}:${E}:${F}`,review:(_,E)=>`review:${X(_)}:${E}`,workflowHeaders:(_)=>`wf-headers:${X(_)}`,childCancellationPrefix:(_)=>`child-cancel:${X(_)}:`,childCancellation:(_,E)=>`child-cancel:${X(_)}:${X(E)}`,terminalCleanupNeeded:(_)=>`wf-cleanup-needed:${X(_)}`,workflowConcurrency:(_,E)=>`wf-concurrency:${X(_)}:${X(E)}`,workflowConcurrencyHolder:(_)=>`wf-concurrency-holder:${X(_)}`,workflowHasServices:(_)=>`wf-has-services:${X(_)}`,finalizerState:(_)=>`wf-finalizer-state:${X(_)}`,teardownOwed:(_)=>`wf-teardown-needed:${X(_)}`,teardownDeadLetter:(_)=>`wf-teardown-deadletter:${X(_)}`,offload:(_,E)=>`offload:${X(_)}:${E}`,archive:(_,E)=>`archive:${X(_)}:${E}`,stateExecution:(_,E)=>`state:execution:${X(_)}:${X(E)}`,stateWorkflow:(_,E)=>`state:workflow-scope:${C}:${X(_)}:${X(E)}`,streamChunkPrefix:(_,E)=>`blob:${X(_)}:${E}:chunk:`,streamChunk:(_,E,F)=>`blob:${X(_)}:${E}:chunk:${String(F).padStart(10,"0")}`,streamTail:(_,E)=>`blob:${X(_)}:${E}:tail`,streamMetadata:(_,E)=>`blob:${X(_)}:${E}:meta`,budgetCharged:(_)=>`budget-charged:${_}`,toolEffect:(_,E,F)=>`tool-effect:${X(_)}:${E}:${F}`,workflowVisibilityStatus:(_,E)=>`wf-idx-status:${X(_)}:${X(E)}`,workflowVisibilityType:(_,E)=>`wf-idx-type:${X(_)}:${X(E)}`,workflowVisibilityCreated:(_,E)=>`wf-idx-created:${Z(_)}:${X(E)}`,workflowVisibilityUpdated:(_,E)=>`wf-idx-updated:${Z(_)}:${X(E)}`,workflowVisibilityDeadline:(_,E)=>`wf-idx-deadline:${Z(_)}:${X(E)}`,workflowVisibilityManifest:(_)=>`wf-idx-manifest:${X(_)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"}});function j_(_){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 E={},F=!1;for(let J of["gt","gte","lt","lte"]){let Y=_[J];if(Y===void 0)continue;if(typeof Y!=="string")throw Error("deleteRange bounds must be strings");E[J]=Y,F=!0}if(!F)throw Error("deleteRange requires at least one of gt/gte/lt/lte; use deletePrefix to delete a whole prefix");let W=j_(_.limit);if(W!==void 0)E.limit=W;return E}async function l(_,E,F){let W=j(F);if(_.deleteRange)return _.deleteRange(E,W);return x(_,E,W)}var S=()=>{};function T(_){return _.replaceAll(/:+$/g,"")}function L_(_,E){let F=T(_),W=T(E);if(F.length===0)return W;if(W.length===0)return F;return`${F}:${W}`}function p(_,E){return new K(_,E)}var K;var a=M(()=>{S();V();K=class K{#_;#E;constructor(_,E){this.#_=_,this.#E=T(E)}#F(_){if(this.#E.length===0)return _;return _.length===0?`${this.#E}:`:`${this.#E}:${_}`}#X(_){if(this.#E.length===0)return _;return _.slice(this.#E.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.#F(_.gt);if(_.gte!==void 0)E.gte=this.#F(_.gte);if(_.lt!==void 0)E.lt=this.#F(_.lt);if(_.lte!==void 0)E.lte=this.#F(_.lte);return E}#J(_){let E={};if(_.limit!==void 0)E.limit=_.limit;if(_.gt!==void 0)E.gt=this.#F(_.gt);if(_.gte!==void 0)E.gte=this.#F(_.gte);if(_.lt!==void 0)E.lt=this.#F(_.lt);if(_.lte!==void 0)E.lte=this.#F(_.lte);return E}capabilities(){return this.#_.capabilities()}scoped(_){return new K(this.#_,L_(this.#E,_))}async get(_){return this.#_.get(this.#F(_))}async put(_,E){await this.#_.put(this.#F(_),E)}async delete(_){await this.#_.delete(this.#F(_))}async*scan(_,E){for await(let[F,W]of this.#_.scan(this.#F(_),this.#Y(E)))yield[this.#X(F),W]}async batch(_){G("batch operations",_.length),await this.#_.batch(_.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 conditionalBatch(_,E){return d(this.#_,_.map((F)=>({key:this.#F(F.key),expectedValue:F.expectedValue})),E.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 has(_){return c(this.#_,this.#F(_))}async deletePrefix(_){return f(this.#_,this.#F(_))}async deleteRange(_,E){let F=this.#J(j(E));return l(this.#_,this.#F(_),F)}async*keys(_,E){for await(let F of k(this.#_,this.#F(_),this.#Y(E)))yield this.#X(F)}async count(_){return w(this.#_,this.#F(_))}[Symbol.dispose](){this.#_[Symbol.dispose]()}}});function C_(_){return _.trim().replace(/;+\s*$/u,"").trim()}function A_(_){return B_.test(_)}function Y_(_){let E=C_(_);if(E.length===0)throw Error("Storage query must not be empty.");if(E.includes(";"))throw Error("Storage query must contain exactly one read-only statement.");if(N_.test(E))return;if(D_.test(E)&&A_(E))return;throw Error("Storage query only supports read-only SELECT and PRAGMA statements.")}var D_,B_,N_;var J_=M(()=>{D_=/^PRAGMA\b/iu,B_=/^PRAGMA\s+(?:[A-Z_][A-Z0-9_]*\.)?[A-Z_][A-Z0-9_]*\s*$/iu,N_=/^SELECT\b/iu});S();V();import{Pool as S_}from"@neondatabase/serverless";V();function O(_){return _.rowCount??_.affectedRows??_.rows.length}function L(_){if(_ instanceof Uint8Array)return new Uint8Array(_);return new Uint8Array(_)}function D(_){return Buffer.from(_)}function z(_){let E=new Map,F=new Set;for(let W of _)if(W.type==="put")F.delete(W.key),E.set(W.key,W.value);else E.delete(W.key),F.add(W.key);return{puts:E,deletes:F}}async function s(_,E,F){if(F.length===0)return!0;let W=F.map((Q)=>Q.key),J=await _.query(E.selectValuesByKeys,[W]),Y=new Map;for(let Q of J.rows){let U=Q.value;if(U!==null&&U!==void 0)Y.set(Q.key,L(U))}for(let Q of F){let U=Y.get(Q.key)??null;if(!u(U,Q.expectedValue))return!1}return!0}async function v(_,E,F){if(F.puts.size>0){let W=[],J=[];for(let[Y,Q]of F.puts)W.push(Y),J.push(D(Q));await _.query(E.upsertValuesByKeys,[W,J])}if(F.deletes.size>0)await _.query(E.deleteValuesByKeys,[[...F.deletes]])}V();var n="kv",i=/^[a-z_][a-z0-9_]*$/i;function P(_,E){if(!i.test(_))throw Error(`NeonStorage ${E} name "${_}" is not a valid Postgres identifier. Use only letters, digits, and underscores, starting with a letter or underscore (matching ${i.source}).`)}function t(_){let{schema:E,table:F}=_;if(E===void 0&&F===void 0)return n;let W=F??n;if(P(W,"table"),E===void 0)return`"${W}"`;return P(E,"schema"),`"${E}"."${W}"`}function B(_){return[_,g(_)]}function o(_,E){let{gt:F,gte:W,lt:J,lte:Y}=E,Q=B(_),U=["key >= $1 AND key < $2"];if(F!==void 0)Q.push(F),U.push(`key > $${Q.length}`);if(W!==void 0)Q.push(W),U.push(`key >= $${Q.length}`);if(J!==void 0)Q.push(J),U.push(`key < $${Q.length}`);if(Y!==void 0)Q.push(Y),U.push(`key <= $${Q.length}`);return{conditions:U,parameters:Q}}function r(_,E={}){let{limit:F,reverse:W}=E,{conditions:J,parameters:Y}=o(_,E),Q=W?"DESC":"ASC",U="";if(F!==void 0)Y.push(F),U=` LIMIT $${Y.length}`;return{parameters:Y,whereOrderLimit:`WHERE ${J.join(" AND ")} ORDER BY key ${Q}${U}`}}function e(_){let E=`CREATE TABLE IF NOT EXISTS ${_} (
2
+ var U_=Object.defineProperty;var Z_=(_)=>_;function G_(_,E){this[_]=Z_.bind(null,E)}var z_=(_,E)=>{for(var F in E)U_(_,F,{get:E[F],enumerable:!0,configurable:!0,set:G_.bind(E,F)})};var M=(_,E)=>()=>(_&&(E=_(_=0)),E);var v_=import.meta.require,P_=(_,E,F)=>{if(E!=null){if(typeof E!=="object"&&typeof E!=="function")throw TypeError('Object expected to be assigned to "using" declaration');let W;if(F)W=E[Symbol.asyncDispose];if(W===void 0)W=E[Symbol.dispose];if(typeof W!=="function")throw TypeError("Object not disposable");_.push([F,W,E])}else if(F)_.push([F]);return E},R_=(_,E,F)=>{let W=(Y)=>E=F?new SuppressedError(Y,E,"An error was suppressed during disposal"):(F=!0,Y),J=(Y)=>{while(Y=_.pop())try{var Q=Y[1]&&Y[1].call(Y[2]);if(Y[0])return Promise.resolve(Q).then(J,(U)=>(W(U),J()))}catch(U){W(U)}if(F)throw E};return J()};function N(_,E,F){if(!_.capabilities()[E])throw Error(`Feature "${F}" requires storage capability "${E}", but this storage backend does not provide it.`)}function M_(_){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 C="default";async function q(_,E){return await _.get(E)!==null}async function*H(_,E,F){for await(let[W]of _.scan(E,F))yield W}async function h(_,E){let F=0;for await(let W of H(_,E))F++;return F}async function b(_,E){let F=[];for await(let W of H(_,E))F.push({type:"delete",key:W});if(F.length===0)return 0;return await _.batch(F),F.length}async function x(_,E,F){let W=[];for await(let J of H(_,E,F))W.push({type:"delete",key:J});if(W.length===0)return 0;return await _.batch(W),W.length}var $_;var y=M(()=>{$_=["actrec:","archive:","async-act:","attr:","audit:bulk:","blob:","budget:","budget-charged:","ev:","fleet-event-by-workflow:","fleet-event:","fleet-event-tail","idx:","lease:","liveness:","offload:","op:","review:","schedule:","schedule-due:","schedule-run:","sig:","sigres:","sigseq:","start-idem:","state:","tag:","tool-effect:","upd:","upk:","upr:","wf:","wf-cleanup:","wf-cleanup-needed:","wf-concurrency:","wf-concurrency-holder:","wf-deadline:","wf-delayed:","wf-finalizer-state:","wf-has-services:","wf-headers:","wf-idx-","wf-teardown:","wf-teardown-deadletter:","wf-teardown-needed:","wf-terminal:"]});function G(_,E){if(E>A)throw new m(_,E)}function g(_){return _.length>0?_.slice(0,-1)+String.fromCharCode(_.charCodeAt(_.length-1)+1):"\xFF"}function c_(_,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 u(_,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 c(_,E){if(_.has)return _.has(E);return q(_,E)}function k(_,E,F){if(_.keys)return _.keys(E,F);return H(_,E,F)}async function w(_,E){if(_.count)return _.count(E);return h(_,E)}async function f(_,E){if(_.deletePrefix)return _.deletePrefix(E);return b(_,E)}async function k_(_,E){G("batch operations",E.length),await _.batch(E)}async function d(_,E,F){if(G("conditionalBatch conditions",E.length),G("conditionalBatch operations",F.length),N(_,"conditionalBatch","storageConditionalBatch"),!_.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return _.conditionalBatch(E,F)}function X(_){return encodeURIComponent(_)}function w_(_){return decodeURIComponent(_)}function f_(_){try{return decodeURIComponent(_)}catch{return null}}var A=1e4,u_=1e4,m,Z=(_)=>String(_).padStart(16,"0"),H_="0",V_="1",I=(_,E,F,W)=>`sig:${X(_)}:${X(E)}:${W}:${X(F)}`,d_;var V=M(()=>{y();m=class m extends Error{code="StorageBatchOperationLimitExceededError";cap=A;count;target;constructor(_,E){super(`${_} count ${E} exceeds MAX_BATCH_OPERATIONS (${A}).`);this.name="StorageBatchOperationLimitExceededError",this.target=_,this.count=E}};d_={workflow:(_)=>`wf:${X(_)}`,checkpoint:(_)=>`wf:${X(_)}:ckpt`,checkpointHistory:(_,E)=>`wf:${X(_)}:ckpt:${String(E).padStart(10,"0")}`,timelinePrefix:(_)=>`wf:${X(_)}:timeline:`,timeline:(_,E)=>`wf:${X(_)}:timeline:${String(E).padStart(10,"0")}`,schedule:(_)=>`schedule:${X(_)}`,scheduleTick:(_,E)=>`schedule-due:${String(_).padStart(16,"0")}:${X(E)}`,scheduleRun:(_)=>`schedule-run:${X(_)}`,operation:(_,E,F)=>`op:${_}:${Z(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:${Z(_)}:${X(E)}:${X(F)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(_,E)=>`op:resolved-by-time:${Z(_)}:${X(E)}`,asyncActivity:(_,E)=>`async-act:v1:${X(_)}:${X(E)}`,activityReconciliationPrefix:(_)=>`actrec:v1:${X(_)}:`,activityReconciliation:(_,E,F)=>`actrec:v1:${X(_)}:${X(E)}:${F}`,eventPrefix:(_)=>`ev:${X(_)}:`,event:(_,E)=>`ev:${X(_)}:${String(E).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:(_,E)=>`fleet-event-by-workflow:${X(_)}:${String(E).padStart(10,"0")}`,signal:(_,E,F)=>I(_,E,F,V_),startSignal:(_,E,F)=>I(_,E,F,H_),signalSequence:(_)=>`sigseq:v1:${X(_)}`,signalAcceptedResponsePrefix:(_)=>`sigres:v1:${X(_)}:`,signalAcceptedResponse:(_,E,F)=>`sigres:v1:${X(_)}:${X(E)}:${X(F)}`,deadline:(_,E)=>`wf-deadline:${Z(_)}:${X(E)}`,terminalCleanup:(_,E)=>`wf-cleanup:${Z(_)}:${X(E)}`,teardownTimer:(_,E)=>`wf-teardown:${Z(_)}:${X(E)}`,delayedStart:(_,E)=>`wf-delayed:${Z(_)}:${X(E)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(_,E)=>`wf-terminal:${Z(_)}:${X(E)}`,attribute:(_)=>`attr:${X(_)}`,attributeIndex:(_,E,F)=>`idx:${_}:${E}:${X(F)}`,tagIndex:(_,E)=>`tag:${X(_)}:${X(E)}`,updatePrefix:(_)=>`upd:${X(_)}:`,update:(_,E)=>`upd:${X(_)}:${E}`,updateResponse:(_)=>`upr:${_}`,updateIdempotency:(_,E)=>`upk:${X(_)}:${E}`,startIdempotency:(_)=>`start-idem:${X(_)}`,startIdempotencySignalId:(_)=>`start-idem:${_}`,livenessPrefix:()=>"liveness:",liveness:(_)=>`liveness:${X(_)}`,leasePrefix:()=>"lease:",leaseEpoch:()=>"lease:epoch",leaseHolder:()=>"lease:holder",budget:(_,E,F)=>`budget:${_}:${E}:${F}`,review:(_,E)=>`review:${X(_)}:${E}`,workflowHeaders:(_)=>`wf-headers:${X(_)}`,childCancellationPrefix:(_)=>`child-cancel:${X(_)}:`,childCancellation:(_,E)=>`child-cancel:${X(_)}:${X(E)}`,terminalCleanupNeeded:(_)=>`wf-cleanup-needed:${X(_)}`,workflowConcurrency:(_,E)=>`wf-concurrency:${X(_)}:${X(E)}`,workflowConcurrencyHolder:(_)=>`wf-concurrency-holder:${X(_)}`,workflowHasServices:(_)=>`wf-has-services:${X(_)}`,finalizerState:(_)=>`wf-finalizer-state:${X(_)}`,teardownOwed:(_)=>`wf-teardown-needed:${X(_)}`,teardownDeadLetter:(_)=>`wf-teardown-deadletter:${X(_)}`,offload:(_,E)=>`offload:${X(_)}:${E}`,archive:(_,E)=>`archive:${X(_)}:${E}`,stateExecution:(_,E)=>`state:execution:${X(_)}:${X(E)}`,stateWorkflow:(_,E)=>`state:workflow-scope:${C}:${X(_)}:${X(E)}`,streamChunkPrefix:(_,E)=>`blob:${X(_)}:${E}:chunk:`,streamChunk:(_,E,F)=>`blob:${X(_)}:${E}:chunk:${String(F).padStart(10,"0")}`,streamTail:(_,E)=>`blob:${X(_)}:${E}:tail`,streamMetadata:(_,E)=>`blob:${X(_)}:${E}:meta`,budgetCharged:(_)=>`budget-charged:${_}`,toolEffect:(_,E,F)=>`tool-effect:${X(_)}:${E}:${F}`,workflowVisibilityStatus:(_,E)=>`wf-idx-status:${X(_)}:${X(E)}`,workflowVisibilityType:(_,E)=>`wf-idx-type:${X(_)}:${X(E)}`,workflowVisibilityCreated:(_,E)=>`wf-idx-created:${Z(_)}:${X(E)}`,workflowVisibilityUpdated:(_,E)=>`wf-idx-updated:${Z(_)}:${X(E)}`,workflowVisibilityDeadline:(_,E)=>`wf-idx-deadline:${Z(_)}:${X(E)}`,workflowVisibilityManifest:(_)=>`wf-idx-manifest:${X(_)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"}});function j_(_){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 E={},F=!1;for(let J of["gt","gte","lt","lte"]){let Y=_[J];if(Y===void 0)continue;if(typeof Y!=="string")throw Error("deleteRange bounds must be strings");E[J]=Y,F=!0}if(!F)throw Error("deleteRange requires at least one of gt/gte/lt/lte; use deletePrefix to delete a whole prefix");let W=j_(_.limit);if(W!==void 0)E.limit=W;return E}async function l(_,E,F){let W=j(F);if(_.deleteRange)return _.deleteRange(E,W);return x(_,E,W)}var S=()=>{};function T(_){return _.replaceAll(/:+$/g,"")}function L_(_,E){let F=T(_),W=T(E);if(F.length===0)return W;if(W.length===0)return F;return`${F}:${W}`}function p(_,E){return new K(_,E)}var K;var a=M(()=>{S();V();K=class K{#_;#E;constructor(_,E){this.#_=_,this.#E=T(E)}#F(_){if(this.#E.length===0)return _;return _.length===0?`${this.#E}:`:`${this.#E}:${_}`}#X(_){if(this.#E.length===0)return _;return _.slice(this.#E.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.#F(_.gt);if(_.gte!==void 0)E.gte=this.#F(_.gte);if(_.lt!==void 0)E.lt=this.#F(_.lt);if(_.lte!==void 0)E.lte=this.#F(_.lte);return E}#J(_){let E={};if(_.limit!==void 0)E.limit=_.limit;if(_.gt!==void 0)E.gt=this.#F(_.gt);if(_.gte!==void 0)E.gte=this.#F(_.gte);if(_.lt!==void 0)E.lt=this.#F(_.lt);if(_.lte!==void 0)E.lte=this.#F(_.lte);return E}capabilities(){return this.#_.capabilities()}scoped(_){return new K(this.#_,L_(this.#E,_))}async get(_){return this.#_.get(this.#F(_))}async put(_,E){await this.#_.put(this.#F(_),E)}async delete(_){await this.#_.delete(this.#F(_))}async*scan(_,E){for await(let[F,W]of this.#_.scan(this.#F(_),this.#Y(E)))yield[this.#X(F),W]}async batch(_){G("batch operations",_.length),await this.#_.batch(_.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 conditionalBatch(_,E){return d(this.#_,_.map((F)=>({key:this.#F(F.key),expectedValue:F.expectedValue})),E.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 has(_){return c(this.#_,this.#F(_))}async deletePrefix(_){return f(this.#_,this.#F(_))}async deleteRange(_,E){let F=this.#J(j(E));return l(this.#_,this.#F(_),F)}async*keys(_,E){for await(let F of k(this.#_,this.#F(_),this.#Y(E)))yield this.#X(F)}async count(_){return w(this.#_,this.#F(_))}[Symbol.dispose](){this.#_[Symbol.dispose]()}}});function C_(_){return _.trim().replace(/;+\s*$/u,"").trim()}function A_(_){return B_.test(_)}function Y_(_){let E=C_(_);if(E.length===0)throw Error("Storage query must not be empty.");if(E.includes(";"))throw Error("Storage query must contain exactly one read-only statement.");if(N_.test(E))return;if(D_.test(E)&&A_(E))return;throw Error("Storage query only supports read-only SELECT and PRAGMA statements.")}var D_,B_,N_;var J_=M(()=>{D_=/^PRAGMA\b/iu,B_=/^PRAGMA\s+(?:[A-Z_][A-Z0-9_]*\.)?[A-Z_][A-Z0-9_]*\s*$/iu,N_=/^SELECT\b/iu});S();V();import{Pool as S_}from"@neondatabase/serverless";V();function O(_){return _.rowCount??_.affectedRows??_.rows.length}function L(_){if(_ instanceof Uint8Array)return new Uint8Array(_);return new Uint8Array(_)}function D(_){return Buffer.from(_)}function z(_){let E=new Map,F=new Set;for(let W of _)if(W.type==="put")F.delete(W.key),E.set(W.key,W.value);else E.delete(W.key),F.add(W.key);return{puts:E,deletes:F}}async function s(_,E,F){if(F.length===0)return!0;let W=F.map((Q)=>Q.key),J=await _.query(E.selectValuesByKeys,[W]),Y=new Map;for(let Q of J.rows){let U=Q.value;if(U!==null&&U!==void 0)Y.set(Q.key,L(U))}for(let Q of F){let U=Y.get(Q.key)??null;if(!u(U,Q.expectedValue))return!1}return!0}async function v(_,E,F){if(F.puts.size>0){let W=[],J=[];for(let[Y,Q]of F.puts)W.push(Y),J.push(D(Q));await _.query(E.upsertValuesByKeys,[W,J])}if(F.deletes.size>0)await _.query(E.deleteValuesByKeys,[[...F.deletes]])}V();var n="kv",i=/^[a-z_][a-z0-9_]*$/i;function P(_,E){if(!i.test(_))throw Error(`NeonStorage ${E} name "${_}" is not a valid Postgres identifier. Use only letters, digits, and underscores, starting with a letter or underscore (matching ${i.source}).`)}function t(_){let{schema:E,table:F}=_;if(E===void 0&&F===void 0)return n;let W=F??n;if(P(W,"table"),E===void 0)return`"${W}"`;return P(E,"schema"),`"${E}"."${W}"`}function B(_){return[_,g(_)]}function o(_,E){let{gt:F,gte:W,lt:J,lte:Y}=E,Q=B(_),U=["key >= $1 AND key < $2"];if(F!==void 0)Q.push(F),U.push(`key > $${Q.length}`);if(W!==void 0)Q.push(W),U.push(`key >= $${Q.length}`);if(J!==void 0)Q.push(J),U.push(`key < $${Q.length}`);if(Y!==void 0)Q.push(Y),U.push(`key <= $${Q.length}`);return{conditions:U,parameters:Q}}function r(_,E={}){let{limit:F,reverse:W}=E,{conditions:J,parameters:Y}=o(_,E),Q=W?"DESC":"ASC",U="";if(F!==void 0)Y.push(F),U=` LIMIT $${Y.length}`;return{parameters:Y,whereOrderLimit:`WHERE ${J.join(" AND ")} ORDER BY key ${Q}${U}`}}function e(_){let E=`CREATE TABLE IF NOT EXISTS ${_} (
3
3
  key TEXT COLLATE "C" PRIMARY KEY,
4
4
  value BYTEA NOT NULL
5
5
  )`,F=`
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- var e=Object.defineProperty;var o=(F)=>F;function FF(F,Y){this[F]=o.bind(null,Y)}var YF=(F,Y)=>{for(var J in Y)e(F,J,{get:Y[J],enumerable:!0,configurable:!0,set:FF.bind(Y,J)})};var q=(F,Y)=>()=>(F&&(Y=F(F=0)),Y);var hF=(F,Y,J)=>{if(Y!=null){if(typeof Y!=="object"&&typeof Y!=="function")throw TypeError('Object expected to be assigned to "using" declaration');let $;if(J)$=Y[Symbol.asyncDispose];if($===void 0)$=Y[Symbol.dispose];if(typeof $!=="function")throw TypeError("Object not disposable");F.push([J,$,Y])}else if(J)F.push([J]);return Y},bF=(F,Y,J)=>{let $=(W)=>Y=J?new SuppressedError(W,Y,"An error was suppressed during disposal"):(J=!0,W),X=(W)=>{while(W=F.pop())try{var V=W[1]&&W[1].call(W[2]);if(W[0])return Promise.resolve(V).then(X,(j)=>($(j),X()))}catch(j){$(j)}if(J)throw Y};return X()};function A(F,Y,J){if(!F.capabilities()[Y])throw Error(`Feature "${J}" requires storage capability "${Y}", but this storage backend does not provide it.`)}function JF(F){let Y=F.capabilities(),J=[];if(Y.persistence!=="local"&&Y.persistence!=="remote")J.push(`persistence must be "local" or "remote" (got "${Y.persistence}")`);if(Y.readAfterWrite!=="linearizable")J.push(`readAfterWrite must be "linearizable" (got "${Y.readAfterWrite}")`);if(Y.scanConsistency!=="snapshot")J.push(`scanConsistency must be "snapshot" (got "${Y.scanConsistency}")`);if(!Y.atomicBatch)J.push("atomicBatch must be true");if(!Y.conditionalBatch)J.push("conditionalBatch must be true");if(J.length>0)throw Error(`Storage is not durable enough for recovery: ${J.join("; ")}.`)}var T="default";async function O(F,Y){return await F.get(Y)!==null}async function*L(F,Y,J){for await(let[$]of F.scan(Y,J))yield $}async function v(F,Y){let J=0;for await(let $ of L(F,Y))J++;return J}async function S(F,Y){let J=[];for await(let $ of L(F,Y))J.push({type:"delete",key:$});if(J.length===0)return 0;return await F.batch(J),J.length}async function m(F,Y,J){let $=[];for await(let X of L(F,Y,J))$.push({type:"delete",key:X});if($.length===0)return 0;return await F.batch($),$.length}var ZF;var x=q(()=>{ZF=["actrec:","archive:","async-act:","attr:","audit:bulk:","blob:","budget:","budget-charged:","ev:","fleet-event-by-workflow:","fleet-event:","fleet-event-tail","idx:","lease:","liveness:","offload:","op:","review:","schedule:","schedule-due:","schedule-run:","sig:","sigres:","sigseq:","start-idem:","state:","tag:","tool-effect:","upd:","upk:","upr:","wf:","wf-cleanup:","wf-cleanup-needed:","wf-concurrency:","wf-concurrency-holder:","wf-deadline:","wf-delayed:","wf-finalizer-state:","wf-has-services:","wf-headers:","wf-idx-","wf-teardown:","wf-teardown-deadletter:","wf-teardown-needed:","wf-terminal:"]});function G(F,Y){if(Y>N)throw new y(F,Y)}function _(F){return F.length>0?F.slice(0,-1)+String.fromCharCode(F.charCodeAt(F.length-1)+1):"\xFF"}function P(F,Y={}){if(Y.gt!==void 0&&F<=Y.gt)return!1;if(Y.gte!==void 0&&F<Y.gte)return!1;if(Y.lt!==void 0&&F>=Y.lt)return!1;if(Y.lte!==void 0&&F>Y.lte)return!1;return!0}function w(F,Y){if(F===null||Y===null)return F===Y;if(F.byteLength!==Y.byteLength)return!1;for(let J=0;J<F.byteLength;J++)if(F[J]!==Y[J])return!1;return!0}async function c(F,Y){if(F.has)return F.has(Y);return O(F,Y)}function k(F,Y,J){if(F.keys)return F.keys(Y,J);return L(F,Y,J)}async function u(F,Y){if(F.count)return F.count(Y);return v(F,Y)}async function g(F,Y){if(F.deletePrefix)return F.deletePrefix(Y);return S(F,Y)}async function kF(F,Y){G("batch operations",Y.length),await F.batch(Y)}async function l(F,Y,J){if(G("conditionalBatch conditions",Y.length),G("conditionalBatch operations",J.length),A(F,"conditionalBatch","storageConditionalBatch"),!F.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return F.conditionalBatch(Y,J)}function Z(F){return encodeURIComponent(F)}function uF(F){return decodeURIComponent(F)}function gF(F){try{return decodeURIComponent(F)}catch{return null}}var N=1e4,cF=1e4,y,Q=(F)=>String(F).padStart(16,"0"),$F="0",WF="1",I=(F,Y,J,$)=>`sig:${Z(F)}:${Z(Y)}:${$}:${Z(J)}`,lF;var E=q(()=>{x();y=class y extends Error{code="StorageBatchOperationLimitExceededError";cap=N;count;target;constructor(F,Y){super(`${F} count ${Y} exceeds MAX_BATCH_OPERATIONS (${N}).`);this.name="StorageBatchOperationLimitExceededError",this.target=F,this.count=Y}};lF={workflow:(F)=>`wf:${Z(F)}`,checkpoint:(F)=>`wf:${Z(F)}:ckpt`,checkpointHistory:(F,Y)=>`wf:${Z(F)}:ckpt:${String(Y).padStart(10,"0")}`,timelinePrefix:(F)=>`wf:${Z(F)}:timeline:`,timeline:(F,Y)=>`wf:${Z(F)}:timeline:${String(Y).padStart(10,"0")}`,schedule:(F)=>`schedule:${Z(F)}`,scheduleTick:(F,Y)=>`schedule-due:${String(F).padStart(16,"0")}:${Z(Y)}`,scheduleRun:(F)=>`schedule-run:${Z(F)}`,operation:(F,Y,J)=>`op:${F}:${Q(Y)}:${J}`,operationInflight:(F)=>`op:inflight:${F}`,operationQueued:(F)=>`op:queued:${F}`,operationResolved:(F)=>`op:resolved:${F}`,operationDeadLetterPrefix:()=>"op:dead-letter:",operationDeadLetter:(F)=>`op:dead-letter:${F}`,bulkOperationAuditPrefix:()=>"audit:bulk:",bulkOperationAudit:(F,Y,J)=>`audit:bulk:${Q(F)}:${Z(Y)}:${Z(J)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(F,Y)=>`op:resolved-by-time:${Q(F)}:${Z(Y)}`,asyncActivity:(F,Y)=>`async-act:v1:${Z(F)}:${Z(Y)}`,activityReconciliationPrefix:(F)=>`actrec:v1:${Z(F)}:`,activityReconciliation:(F,Y,J)=>`actrec:v1:${Z(F)}:${Z(Y)}:${J}`,eventPrefix:(F)=>`ev:${Z(F)}:`,event:(F,Y)=>`ev:${Z(F)}:${String(Y).padStart(10,"0")}`,eventHead:(F)=>`ev:${Z(F)}:head`,eventWatermark:(F)=>`ev:${Z(F)}:watermark`,fleetEventPrefix:()=>"fleet-event:",fleetEvent:(F)=>`fleet-event:${String(F).padStart(10,"0")}`,fleetEventTail:()=>"fleet-event-tail",fleetEventByWorkflowPrefix:(F)=>`fleet-event-by-workflow:${Z(F)}:`,fleetEventByWorkflow:(F,Y)=>`fleet-event-by-workflow:${Z(F)}:${String(Y).padStart(10,"0")}`,signal:(F,Y,J)=>I(F,Y,J,WF),startSignal:(F,Y,J)=>I(F,Y,J,$F),signalSequence:(F)=>`sigseq:v1:${Z(F)}`,signalAcceptedResponsePrefix:(F)=>`sigres:v1:${Z(F)}:`,signalAcceptedResponse:(F,Y,J)=>`sigres:v1:${Z(F)}:${Z(Y)}:${Z(J)}`,deadline:(F,Y)=>`wf-deadline:${Q(F)}:${Z(Y)}`,terminalCleanup:(F,Y)=>`wf-cleanup:${Q(F)}:${Z(Y)}`,teardownTimer:(F,Y)=>`wf-teardown:${Q(F)}:${Z(Y)}`,delayedStart:(F,Y)=>`wf-delayed:${Q(F)}:${Z(Y)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(F,Y)=>`wf-terminal:${Q(F)}:${Z(Y)}`,attribute:(F)=>`attr:${Z(F)}`,attributeIndex:(F,Y,J)=>`idx:${F}:${Y}:${Z(J)}`,tagIndex:(F,Y)=>`tag:${Z(F)}:${Z(Y)}`,updatePrefix:(F)=>`upd:${Z(F)}:`,update:(F,Y)=>`upd:${Z(F)}:${Y}`,updateResponse:(F)=>`upr:${F}`,updateIdempotency:(F,Y)=>`upk:${Z(F)}:${Y}`,startIdempotency:(F)=>`start-idem:${Z(F)}`,startIdempotencySignalId:(F)=>`start-idem:${F}`,livenessPrefix:()=>"liveness:",liveness:(F)=>`liveness:${Z(F)}`,leasePrefix:()=>"lease:",leaseEpoch:()=>"lease:epoch",leaseHolder:()=>"lease:holder",budget:(F,Y,J)=>`budget:${F}:${Y}:${J}`,review:(F,Y)=>`review:${Z(F)}:${Y}`,workflowHeaders:(F)=>`wf-headers:${Z(F)}`,childCancellationPrefix:(F)=>`child-cancel:${Z(F)}:`,childCancellation:(F,Y)=>`child-cancel:${Z(F)}:${Z(Y)}`,terminalCleanupNeeded:(F)=>`wf-cleanup-needed:${Z(F)}`,workflowConcurrency:(F,Y)=>`wf-concurrency:${Z(F)}:${Z(Y)}`,workflowConcurrencyHolder:(F)=>`wf-concurrency-holder:${Z(F)}`,workflowHasServices:(F)=>`wf-has-services:${Z(F)}`,finalizerState:(F)=>`wf-finalizer-state:${Z(F)}`,teardownOwed:(F)=>`wf-teardown-needed:${Z(F)}`,teardownDeadLetter:(F)=>`wf-teardown-deadletter:${Z(F)}`,offload:(F,Y)=>`offload:${Z(F)}:${Y}`,archive:(F,Y)=>`archive:${Z(F)}:${Y}`,stateExecution:(F,Y)=>`state:execution:${Z(F)}:${Z(Y)}`,stateWorkflow:(F,Y)=>`state:workflow-scope:${T}:${Z(F)}:${Z(Y)}`,streamChunkPrefix:(F,Y)=>`blob:${Z(F)}:${Y}:chunk:`,streamChunk:(F,Y,J)=>`blob:${Z(F)}:${Y}:chunk:${String(J).padStart(10,"0")}`,streamTail:(F,Y)=>`blob:${Z(F)}:${Y}:tail`,streamMetadata:(F,Y)=>`blob:${Z(F)}:${Y}:meta`,budgetCharged:(F)=>`budget-charged:${F}`,toolEffect:(F,Y,J)=>`tool-effect:${Z(F)}:${Y}:${J}`,workflowVisibilityStatus:(F,Y)=>`wf-idx-status:${Z(F)}:${Z(Y)}`,workflowVisibilityType:(F,Y)=>`wf-idx-type:${Z(F)}:${Z(Y)}`,workflowVisibilityCreated:(F,Y)=>`wf-idx-created:${Q(F)}:${Z(Y)}`,workflowVisibilityUpdated:(F,Y)=>`wf-idx-updated:${Q(F)}:${Z(Y)}`,workflowVisibilityDeadline:(F,Y)=>`wf-idx-deadline:${Q(F)}:${Z(Y)}`,workflowVisibilityManifest:(F)=>`wf-idx-manifest:${Z(F)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"}});function XF(F){if(F===void 0)return;if(typeof F!=="number"||!Number.isInteger(F)||F<0)throw Error("deleteRange limit must be a finite non-negative integer");return F===0?0:F}function z(F){let Y={},J=!1;for(let X of["gt","gte","lt","lte"]){let W=F[X];if(W===void 0)continue;if(typeof W!=="string")throw Error("deleteRange bounds must be strings");Y[X]=W,J=!0}if(!J)throw Error("deleteRange requires at least one of gt/gte/lt/lte; use deletePrefix to delete a whole prefix");let $=XF(F.limit);if($!==void 0)Y.limit=$;return Y}async function f(F,Y,J){let $=z(J);if(F.deleteRange)return F.deleteRange(Y,$);return m(F,Y,$)}var K=()=>{};function D(F){return F.replaceAll(/:+$/g,"")}function jF(F,Y){let J=D(F),$=D(Y);if(J.length===0)return $;if($.length===0)return J;return`${J}:${$}`}function d(F,Y){return new R(F,Y)}var R;var p=q(()=>{K();E();R=class R{#F;#J;constructor(F,Y){this.#F=F,this.#J=D(Y)}#Y(F){if(this.#J.length===0)return F;return F.length===0?`${this.#J}:`:`${this.#J}:${F}`}#Z(F){if(this.#J.length===0)return F;return F.slice(this.#J.length+1)}#$(F={}){let Y={};if(F.limit!==void 0)Y.limit=F.limit;if(F.reverse!==void 0)Y.reverse=F.reverse;if(F.gt!==void 0)Y.gt=this.#Y(F.gt);if(F.gte!==void 0)Y.gte=this.#Y(F.gte);if(F.lt!==void 0)Y.lt=this.#Y(F.lt);if(F.lte!==void 0)Y.lte=this.#Y(F.lte);return Y}#W(F){let Y={};if(F.limit!==void 0)Y.limit=F.limit;if(F.gt!==void 0)Y.gt=this.#Y(F.gt);if(F.gte!==void 0)Y.gte=this.#Y(F.gte);if(F.lt!==void 0)Y.lt=this.#Y(F.lt);if(F.lte!==void 0)Y.lte=this.#Y(F.lte);return Y}capabilities(){return this.#F.capabilities()}scoped(F){return new R(this.#F,jF(this.#J,F))}async get(F){return this.#F.get(this.#Y(F))}async put(F,Y){await this.#F.put(this.#Y(F),Y)}async delete(F){await this.#F.delete(this.#Y(F))}async*scan(F,Y){for await(let[J,$]of this.#F.scan(this.#Y(F),this.#$(Y)))yield[this.#Z(J),$]}async batch(F){G("batch operations",F.length),await this.#F.batch(F.map((Y)=>{if(Y.type==="put")return{type:"put",key:this.#Y(Y.key),value:Y.value};return{type:"delete",key:this.#Y(Y.key)}}))}async conditionalBatch(F,Y){return l(this.#F,F.map((J)=>({key:this.#Y(J.key),expectedValue:J.expectedValue})),Y.map((J)=>{if(J.type==="put")return{type:"put",key:this.#Y(J.key),value:J.value};return{type:"delete",key:this.#Y(J.key)}}))}async has(F){return c(this.#F,this.#Y(F))}async deletePrefix(F){return g(this.#F,this.#Y(F))}async deleteRange(F,Y){let J=this.#W(z(Y));return f(this.#F,this.#Y(F),J)}async*keys(F,Y){for await(let J of k(this.#F,this.#Y(F),this.#$(Y)))yield this.#Z(J)}async count(F){return u(this.#F,this.#Y(F))}[Symbol.dispose](){this.#F[Symbol.dispose]()}}});var VF={};YF(VF,{MemoryStorage:()=>B});var B;var s=q(()=>{K();E();p();B=class B{#F;constructor(){this.#F=new Map}capabilities(){return{persistence:"ephemeral",readAfterWrite:"linearizable",scanConsistency:"snapshot",atomicBatch:!0,conditionalBatch:!0,boundedRangeDelete:!0}}#J(F,Y,J){return F>=Y&&F<J}#Y(F,Y){let J=[];for(let $ of this.#F.keys())if(this.#J($,F,Y))J.push($);return J.toSorted()}async get(F){return this.#F.get(F)??null}async put(F,Y){this.#F.set(F,Y)}async delete(F){this.#F.delete(F)}async*scan(F,Y={}){let{limit:J,reverse:$}=Y,X=_(F),W=this.#Y(F,X);if(W=W.filter((j)=>P(j,Y)),$)W.reverse();let V=0;for(let j of W){if(J!==void 0&&V>=J)break;let b=this.#F.get(j);if(b!==void 0)yield[j,b],V++}}async batch(F){G("batch operations",F.length),this.#Z(F)}#Z(F){for(let Y of F)if(Y.type==="put")this.#F.set(Y.key,Y.value);else this.#F.delete(Y.key)}async conditionalBatch(F,Y){G("conditionalBatch conditions",F.length),G("conditionalBatch operations",Y.length);for(let J of F){let $=this.#F.get(J.key)??null;if(!w($,J.expectedValue))return!1}return this.#Z(Y),!0}async has(F){return this.#F.has(F)}async deletePrefix(F){let Y=_(F),J=this.#Y(F,Y);for(let $ of J)this.#F.delete($);return J.length}async deleteRange(F,Y){let J=z(Y),$=_(F),X=this.#Y(F,$).filter((V)=>P(V,J)),W=J.limit===void 0?X:X.slice(0,J.limit);for(let V of W)this.#F.delete(V);return W.length}async*keys(F,Y={}){let{limit:J,reverse:$}=Y,X=_(F),W=this.#Y(F,X);if(W=W.filter((j)=>P(j,Y)),$)W.reverse();let V=0;for(let j of W){if(J!==void 0&&V>=J)break;yield j,V++}}async count(F){let Y=_(F);return this.#Y(F,Y).length}scoped(F){return d(this,F)}get size(){return this.#F.size}clear(){this.#F.clear()}snapshot(){let F=new Map;for(let[Y,J]of this.#F)F.set(Y,new Uint8Array(J));return F}[Symbol.dispose](){this.#F.clear()}}});s();function U(F,Y){return import.meta.url.endsWith(".ts")?F:Y}async function H(F){return await import(F)}var QF=U("./bun-sql.ts","./bun-sql.js"),HF=U("./node-sqlite.ts","./node-sqlite.js"),GF=U("./lmdb.ts","./lmdb.js"),UF=U("./turso.ts","./turso.js"),_F=U("./neon.ts","./neon.js"),a=U("./indexeddb.ts","./indexeddb.js"),n=U("./web-extension.ts","./web-extension.js"),qF=U("./http.ts","./http.js"),CF=U("./auto.ts","./auto.js");function t(){return typeof Bun<"u"}function r(){return typeof globalThis.process==="object"&&globalThis.process!==null&&typeof globalThis.process.versions==="object"&&typeof globalThis.process.versions.node==="string"}function LF(){let F=globalThis;return F.browser?.storage!==void 0||F.chrome?.storage!==void 0}function zF(){return typeof globalThis.indexedDB<"u"}async function BF(F){if(t()){let{BunSQLiteStorage:Y}=await H(QF);return new Y(F)}if(r()){let{NodeSQLiteStorage:Y}=await H(HF);return new Y(F)}throw Error("SQLite storage is only available in Bun or Node runtimes.")}async function PF(){if(t()||r()){let{resolveDefaultStorage:F}=await H(CF);return F()}if(LF()){let{WebExtensionStorage:F}=await H(n);return new F}if(zF()){let{IndexedDBStorage:F}=await H(a);return new F}return new B}var i={memory:async(F)=>new B,sqlite:async(F)=>BF(F.path),lmdb:async(F)=>{let{LMDBStorage:Y}=await H(GF);return new Y(F.path)},turso:async(F)=>{let{TursoStorage:Y}=await H(UF);return new Y({url:F.url,...F.authToken===void 0?{}:{authToken:F.authToken}})},neon:async(F)=>{let{NeonStorage:Y}=await H(_F);return new Y({url:F.url})},indexeddb:async(F)=>{let{IndexedDBStorage:Y}=await H(a);return new Y(F.databaseName)},"web-extension":async(F)=>{let{WebExtensionStorage:Y}=await H(n);return new Y(F.area===void 0?{}:{area:F.area})},http:async(F)=>{let{HTTPStorage:Y}=await H(qF);return new Y({baseUrl:F.baseUrl,...F.headers===void 0?{}:{headers:F.headers}})},auto:async(F)=>PF()};function AF(F){if(typeof F!=="object"||F===null)return"unknown";if(!("type"in F))return"unknown";return typeof F.type==="string"?F.type:"unknown"}function TF(F){if(typeof F!=="object"||F===null||Array.isArray(F))throw Error("Storage configuration must be an object.");return F}function M(F,Y,J){let $=F[Y];if(typeof $!=="string"||$.length===0)throw Error(`${J} storage configuration requires "${Y}" as a string.`);return $}function h(F,Y,J){let $=F[Y];if($===void 0)return;if(typeof $!=="string")throw Error(`${J} storage configuration field "${Y}" must be a string.`);return $}function NF(F,Y,J){let $=F[Y];if(typeof $==="string"||$ instanceof URL)return $;throw Error(`${J} storage configuration requires "${Y}" as a string or URL.`)}function EF(F){let Y=F.headers;if(Y===void 0)return;if(typeof Y!=="object"||Y===null||Array.isArray(Y))throw Error('HTTP storage configuration field "headers" must be a string record.');let J={};for(let[$,X]of Object.entries(Y)){if(typeof X!=="string")throw Error('HTTP storage configuration field "headers" must be a string record.');J[$]=X}return J}function KF(F){let Y=F.area;if(Y===void 0)return;if(Y==="local"||Y==="sync"||Y==="session"||Y==="managed")return Y;throw Error('WebExtension storage configuration field "area" must be one of local, sync, session, or managed.')}var DF={memory:(F)=>({type:"memory"}),sqlite:(F)=>{let Y=h(F,"path","SQLite");return Y===void 0?{type:"sqlite"}:{type:"sqlite",path:Y}},lmdb:(F)=>({type:"lmdb",path:M(F,"path","LMDB")}),turso:(F)=>{let Y=h(F,"authToken","Turso");return{type:"turso",url:M(F,"url","Turso"),...Y===void 0?{}:{authToken:Y}}},neon:(F)=>({type:"neon",url:M(F,"url","Neon")}),indexeddb:(F)=>{let Y=h(F,"databaseName","IndexedDB");return Y===void 0?{type:"indexeddb"}:{type:"indexeddb",databaseName:Y}},"web-extension":(F)=>{let Y=KF(F);return Y===void 0?{type:"web-extension"}:{type:"web-extension",area:Y}},http:(F)=>{let Y=EF(F);return{type:"http",baseUrl:NF(F,"baseUrl","HTTP"),...Y===void 0?{}:{headers:Y}}},auto:(F)=>({type:"auto"})};function RF(F,Y){return DF[Y](TF(F))}function MF(F){return Object.hasOwn(i,F)}async function JY(F){let Y=AF(F);if(!MF(Y))throw Error(`Unsupported storage configuration type: ${Y}`);let J=RF(F,Y),$=i[Y];return $(J)}export{JY as resolveStorage};
2
+ var e=Object.defineProperty;var o=(F)=>F;function FF(F,Y){this[F]=o.bind(null,Y)}var YF=(F,Y)=>{for(var J in Y)e(F,J,{get:Y[J],enumerable:!0,configurable:!0,set:FF.bind(Y,J)})};var q=(F,Y)=>()=>(F&&(Y=F(F=0)),Y);var hF=import.meta.require,bF=(F,Y,J)=>{if(Y!=null){if(typeof Y!=="object"&&typeof Y!=="function")throw TypeError('Object expected to be assigned to "using" declaration');let $;if(J)$=Y[Symbol.asyncDispose];if($===void 0)$=Y[Symbol.dispose];if(typeof $!=="function")throw TypeError("Object not disposable");F.push([J,$,Y])}else if(J)F.push([J]);return Y},OF=(F,Y,J)=>{let $=(W)=>Y=J?new SuppressedError(W,Y,"An error was suppressed during disposal"):(J=!0,W),X=(W)=>{while(W=F.pop())try{var V=W[1]&&W[1].call(W[2]);if(W[0])return Promise.resolve(V).then(X,(j)=>($(j),X()))}catch(j){$(j)}if(J)throw Y};return X()};function A(F,Y,J){if(!F.capabilities()[Y])throw Error(`Feature "${J}" requires storage capability "${Y}", but this storage backend does not provide it.`)}function JF(F){let Y=F.capabilities(),J=[];if(Y.persistence!=="local"&&Y.persistence!=="remote")J.push(`persistence must be "local" or "remote" (got "${Y.persistence}")`);if(Y.readAfterWrite!=="linearizable")J.push(`readAfterWrite must be "linearizable" (got "${Y.readAfterWrite}")`);if(Y.scanConsistency!=="snapshot")J.push(`scanConsistency must be "snapshot" (got "${Y.scanConsistency}")`);if(!Y.atomicBatch)J.push("atomicBatch must be true");if(!Y.conditionalBatch)J.push("conditionalBatch must be true");if(J.length>0)throw Error(`Storage is not durable enough for recovery: ${J.join("; ")}.`)}var T="default";async function O(F,Y){return await F.get(Y)!==null}async function*L(F,Y,J){for await(let[$]of F.scan(Y,J))yield $}async function v(F,Y){let J=0;for await(let $ of L(F,Y))J++;return J}async function S(F,Y){let J=[];for await(let $ of L(F,Y))J.push({type:"delete",key:$});if(J.length===0)return 0;return await F.batch(J),J.length}async function m(F,Y,J){let $=[];for await(let X of L(F,Y,J))$.push({type:"delete",key:X});if($.length===0)return 0;return await F.batch($),$.length}var ZF;var x=q(()=>{ZF=["actrec:","archive:","async-act:","attr:","audit:bulk:","blob:","budget:","budget-charged:","ev:","fleet-event-by-workflow:","fleet-event:","fleet-event-tail","idx:","lease:","liveness:","offload:","op:","review:","schedule:","schedule-due:","schedule-run:","sig:","sigres:","sigseq:","start-idem:","state:","tag:","tool-effect:","upd:","upk:","upr:","wf:","wf-cleanup:","wf-cleanup-needed:","wf-concurrency:","wf-concurrency-holder:","wf-deadline:","wf-delayed:","wf-finalizer-state:","wf-has-services:","wf-headers:","wf-idx-","wf-teardown:","wf-teardown-deadletter:","wf-teardown-needed:","wf-terminal:"]});function G(F,Y){if(Y>N)throw new y(F,Y)}function _(F){return F.length>0?F.slice(0,-1)+String.fromCharCode(F.charCodeAt(F.length-1)+1):"\xFF"}function P(F,Y={}){if(Y.gt!==void 0&&F<=Y.gt)return!1;if(Y.gte!==void 0&&F<Y.gte)return!1;if(Y.lt!==void 0&&F>=Y.lt)return!1;if(Y.lte!==void 0&&F>Y.lte)return!1;return!0}function w(F,Y){if(F===null||Y===null)return F===Y;if(F.byteLength!==Y.byteLength)return!1;for(let J=0;J<F.byteLength;J++)if(F[J]!==Y[J])return!1;return!0}async function c(F,Y){if(F.has)return F.has(Y);return O(F,Y)}function k(F,Y,J){if(F.keys)return F.keys(Y,J);return L(F,Y,J)}async function u(F,Y){if(F.count)return F.count(Y);return v(F,Y)}async function g(F,Y){if(F.deletePrefix)return F.deletePrefix(Y);return S(F,Y)}async function uF(F,Y){G("batch operations",Y.length),await F.batch(Y)}async function l(F,Y,J){if(G("conditionalBatch conditions",Y.length),G("conditionalBatch operations",J.length),A(F,"conditionalBatch","storageConditionalBatch"),!F.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return F.conditionalBatch(Y,J)}function Z(F){return encodeURIComponent(F)}function gF(F){return decodeURIComponent(F)}function lF(F){try{return decodeURIComponent(F)}catch{return null}}var N=1e4,kF=1e4,y,Q=(F)=>String(F).padStart(16,"0"),$F="0",WF="1",I=(F,Y,J,$)=>`sig:${Z(F)}:${Z(Y)}:${$}:${Z(J)}`,fF;var E=q(()=>{x();y=class y extends Error{code="StorageBatchOperationLimitExceededError";cap=N;count;target;constructor(F,Y){super(`${F} count ${Y} exceeds MAX_BATCH_OPERATIONS (${N}).`);this.name="StorageBatchOperationLimitExceededError",this.target=F,this.count=Y}};fF={workflow:(F)=>`wf:${Z(F)}`,checkpoint:(F)=>`wf:${Z(F)}:ckpt`,checkpointHistory:(F,Y)=>`wf:${Z(F)}:ckpt:${String(Y).padStart(10,"0")}`,timelinePrefix:(F)=>`wf:${Z(F)}:timeline:`,timeline:(F,Y)=>`wf:${Z(F)}:timeline:${String(Y).padStart(10,"0")}`,schedule:(F)=>`schedule:${Z(F)}`,scheduleTick:(F,Y)=>`schedule-due:${String(F).padStart(16,"0")}:${Z(Y)}`,scheduleRun:(F)=>`schedule-run:${Z(F)}`,operation:(F,Y,J)=>`op:${F}:${Q(Y)}:${J}`,operationInflight:(F)=>`op:inflight:${F}`,operationQueued:(F)=>`op:queued:${F}`,operationResolved:(F)=>`op:resolved:${F}`,operationDeadLetterPrefix:()=>"op:dead-letter:",operationDeadLetter:(F)=>`op:dead-letter:${F}`,bulkOperationAuditPrefix:()=>"audit:bulk:",bulkOperationAudit:(F,Y,J)=>`audit:bulk:${Q(F)}:${Z(Y)}:${Z(J)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(F,Y)=>`op:resolved-by-time:${Q(F)}:${Z(Y)}`,asyncActivity:(F,Y)=>`async-act:v1:${Z(F)}:${Z(Y)}`,activityReconciliationPrefix:(F)=>`actrec:v1:${Z(F)}:`,activityReconciliation:(F,Y,J)=>`actrec:v1:${Z(F)}:${Z(Y)}:${J}`,eventPrefix:(F)=>`ev:${Z(F)}:`,event:(F,Y)=>`ev:${Z(F)}:${String(Y).padStart(10,"0")}`,eventHead:(F)=>`ev:${Z(F)}:head`,eventWatermark:(F)=>`ev:${Z(F)}:watermark`,fleetEventPrefix:()=>"fleet-event:",fleetEvent:(F)=>`fleet-event:${String(F).padStart(10,"0")}`,fleetEventTail:()=>"fleet-event-tail",fleetEventByWorkflowPrefix:(F)=>`fleet-event-by-workflow:${Z(F)}:`,fleetEventByWorkflow:(F,Y)=>`fleet-event-by-workflow:${Z(F)}:${String(Y).padStart(10,"0")}`,signal:(F,Y,J)=>I(F,Y,J,WF),startSignal:(F,Y,J)=>I(F,Y,J,$F),signalSequence:(F)=>`sigseq:v1:${Z(F)}`,signalAcceptedResponsePrefix:(F)=>`sigres:v1:${Z(F)}:`,signalAcceptedResponse:(F,Y,J)=>`sigres:v1:${Z(F)}:${Z(Y)}:${Z(J)}`,deadline:(F,Y)=>`wf-deadline:${Q(F)}:${Z(Y)}`,terminalCleanup:(F,Y)=>`wf-cleanup:${Q(F)}:${Z(Y)}`,teardownTimer:(F,Y)=>`wf-teardown:${Q(F)}:${Z(Y)}`,delayedStart:(F,Y)=>`wf-delayed:${Q(F)}:${Z(Y)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(F,Y)=>`wf-terminal:${Q(F)}:${Z(Y)}`,attribute:(F)=>`attr:${Z(F)}`,attributeIndex:(F,Y,J)=>`idx:${F}:${Y}:${Z(J)}`,tagIndex:(F,Y)=>`tag:${Z(F)}:${Z(Y)}`,updatePrefix:(F)=>`upd:${Z(F)}:`,update:(F,Y)=>`upd:${Z(F)}:${Y}`,updateResponse:(F)=>`upr:${F}`,updateIdempotency:(F,Y)=>`upk:${Z(F)}:${Y}`,startIdempotency:(F)=>`start-idem:${Z(F)}`,startIdempotencySignalId:(F)=>`start-idem:${F}`,livenessPrefix:()=>"liveness:",liveness:(F)=>`liveness:${Z(F)}`,leasePrefix:()=>"lease:",leaseEpoch:()=>"lease:epoch",leaseHolder:()=>"lease:holder",budget:(F,Y,J)=>`budget:${F}:${Y}:${J}`,review:(F,Y)=>`review:${Z(F)}:${Y}`,workflowHeaders:(F)=>`wf-headers:${Z(F)}`,childCancellationPrefix:(F)=>`child-cancel:${Z(F)}:`,childCancellation:(F,Y)=>`child-cancel:${Z(F)}:${Z(Y)}`,terminalCleanupNeeded:(F)=>`wf-cleanup-needed:${Z(F)}`,workflowConcurrency:(F,Y)=>`wf-concurrency:${Z(F)}:${Z(Y)}`,workflowConcurrencyHolder:(F)=>`wf-concurrency-holder:${Z(F)}`,workflowHasServices:(F)=>`wf-has-services:${Z(F)}`,finalizerState:(F)=>`wf-finalizer-state:${Z(F)}`,teardownOwed:(F)=>`wf-teardown-needed:${Z(F)}`,teardownDeadLetter:(F)=>`wf-teardown-deadletter:${Z(F)}`,offload:(F,Y)=>`offload:${Z(F)}:${Y}`,archive:(F,Y)=>`archive:${Z(F)}:${Y}`,stateExecution:(F,Y)=>`state:execution:${Z(F)}:${Z(Y)}`,stateWorkflow:(F,Y)=>`state:workflow-scope:${T}:${Z(F)}:${Z(Y)}`,streamChunkPrefix:(F,Y)=>`blob:${Z(F)}:${Y}:chunk:`,streamChunk:(F,Y,J)=>`blob:${Z(F)}:${Y}:chunk:${String(J).padStart(10,"0")}`,streamTail:(F,Y)=>`blob:${Z(F)}:${Y}:tail`,streamMetadata:(F,Y)=>`blob:${Z(F)}:${Y}:meta`,budgetCharged:(F)=>`budget-charged:${F}`,toolEffect:(F,Y,J)=>`tool-effect:${Z(F)}:${Y}:${J}`,workflowVisibilityStatus:(F,Y)=>`wf-idx-status:${Z(F)}:${Z(Y)}`,workflowVisibilityType:(F,Y)=>`wf-idx-type:${Z(F)}:${Z(Y)}`,workflowVisibilityCreated:(F,Y)=>`wf-idx-created:${Q(F)}:${Z(Y)}`,workflowVisibilityUpdated:(F,Y)=>`wf-idx-updated:${Q(F)}:${Z(Y)}`,workflowVisibilityDeadline:(F,Y)=>`wf-idx-deadline:${Q(F)}:${Z(Y)}`,workflowVisibilityManifest:(F)=>`wf-idx-manifest:${Z(F)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"}});function XF(F){if(F===void 0)return;if(typeof F!=="number"||!Number.isInteger(F)||F<0)throw Error("deleteRange limit must be a finite non-negative integer");return F===0?0:F}function z(F){let Y={},J=!1;for(let X of["gt","gte","lt","lte"]){let W=F[X];if(W===void 0)continue;if(typeof W!=="string")throw Error("deleteRange bounds must be strings");Y[X]=W,J=!0}if(!J)throw Error("deleteRange requires at least one of gt/gte/lt/lte; use deletePrefix to delete a whole prefix");let $=XF(F.limit);if($!==void 0)Y.limit=$;return Y}async function f(F,Y,J){let $=z(J);if(F.deleteRange)return F.deleteRange(Y,$);return m(F,Y,$)}var K=()=>{};function D(F){return F.replaceAll(/:+$/g,"")}function jF(F,Y){let J=D(F),$=D(Y);if(J.length===0)return $;if($.length===0)return J;return`${J}:${$}`}function d(F,Y){return new R(F,Y)}var R;var p=q(()=>{K();E();R=class R{#F;#J;constructor(F,Y){this.#F=F,this.#J=D(Y)}#Y(F){if(this.#J.length===0)return F;return F.length===0?`${this.#J}:`:`${this.#J}:${F}`}#Z(F){if(this.#J.length===0)return F;return F.slice(this.#J.length+1)}#$(F={}){let Y={};if(F.limit!==void 0)Y.limit=F.limit;if(F.reverse!==void 0)Y.reverse=F.reverse;if(F.gt!==void 0)Y.gt=this.#Y(F.gt);if(F.gte!==void 0)Y.gte=this.#Y(F.gte);if(F.lt!==void 0)Y.lt=this.#Y(F.lt);if(F.lte!==void 0)Y.lte=this.#Y(F.lte);return Y}#W(F){let Y={};if(F.limit!==void 0)Y.limit=F.limit;if(F.gt!==void 0)Y.gt=this.#Y(F.gt);if(F.gte!==void 0)Y.gte=this.#Y(F.gte);if(F.lt!==void 0)Y.lt=this.#Y(F.lt);if(F.lte!==void 0)Y.lte=this.#Y(F.lte);return Y}capabilities(){return this.#F.capabilities()}scoped(F){return new R(this.#F,jF(this.#J,F))}async get(F){return this.#F.get(this.#Y(F))}async put(F,Y){await this.#F.put(this.#Y(F),Y)}async delete(F){await this.#F.delete(this.#Y(F))}async*scan(F,Y){for await(let[J,$]of this.#F.scan(this.#Y(F),this.#$(Y)))yield[this.#Z(J),$]}async batch(F){G("batch operations",F.length),await this.#F.batch(F.map((Y)=>{if(Y.type==="put")return{type:"put",key:this.#Y(Y.key),value:Y.value};return{type:"delete",key:this.#Y(Y.key)}}))}async conditionalBatch(F,Y){return l(this.#F,F.map((J)=>({key:this.#Y(J.key),expectedValue:J.expectedValue})),Y.map((J)=>{if(J.type==="put")return{type:"put",key:this.#Y(J.key),value:J.value};return{type:"delete",key:this.#Y(J.key)}}))}async has(F){return c(this.#F,this.#Y(F))}async deletePrefix(F){return g(this.#F,this.#Y(F))}async deleteRange(F,Y){let J=this.#W(z(Y));return f(this.#F,this.#Y(F),J)}async*keys(F,Y){for await(let J of k(this.#F,this.#Y(F),this.#$(Y)))yield this.#Z(J)}async count(F){return u(this.#F,this.#Y(F))}[Symbol.dispose](){this.#F[Symbol.dispose]()}}});var VF={};YF(VF,{MemoryStorage:()=>B});var B;var s=q(()=>{K();E();p();B=class B{#F;constructor(){this.#F=new Map}capabilities(){return{persistence:"ephemeral",readAfterWrite:"linearizable",scanConsistency:"snapshot",atomicBatch:!0,conditionalBatch:!0,boundedRangeDelete:!0}}#J(F,Y,J){return F>=Y&&F<J}#Y(F,Y){let J=[];for(let $ of this.#F.keys())if(this.#J($,F,Y))J.push($);return J.toSorted()}async get(F){return this.#F.get(F)??null}async put(F,Y){this.#F.set(F,Y)}async delete(F){this.#F.delete(F)}async*scan(F,Y={}){let{limit:J,reverse:$}=Y,X=_(F),W=this.#Y(F,X);if(W=W.filter((j)=>P(j,Y)),$)W.reverse();let V=0;for(let j of W){if(J!==void 0&&V>=J)break;let b=this.#F.get(j);if(b!==void 0)yield[j,b],V++}}async batch(F){G("batch operations",F.length),this.#Z(F)}#Z(F){for(let Y of F)if(Y.type==="put")this.#F.set(Y.key,Y.value);else this.#F.delete(Y.key)}async conditionalBatch(F,Y){G("conditionalBatch conditions",F.length),G("conditionalBatch operations",Y.length);for(let J of F){let $=this.#F.get(J.key)??null;if(!w($,J.expectedValue))return!1}return this.#Z(Y),!0}async has(F){return this.#F.has(F)}async deletePrefix(F){let Y=_(F),J=this.#Y(F,Y);for(let $ of J)this.#F.delete($);return J.length}async deleteRange(F,Y){let J=z(Y),$=_(F),X=this.#Y(F,$).filter((V)=>P(V,J)),W=J.limit===void 0?X:X.slice(0,J.limit);for(let V of W)this.#F.delete(V);return W.length}async*keys(F,Y={}){let{limit:J,reverse:$}=Y,X=_(F),W=this.#Y(F,X);if(W=W.filter((j)=>P(j,Y)),$)W.reverse();let V=0;for(let j of W){if(J!==void 0&&V>=J)break;yield j,V++}}async count(F){let Y=_(F);return this.#Y(F,Y).length}scoped(F){return d(this,F)}get size(){return this.#F.size}clear(){this.#F.clear()}snapshot(){let F=new Map;for(let[Y,J]of this.#F)F.set(Y,new Uint8Array(J));return F}[Symbol.dispose](){this.#F.clear()}}});s();function U(F,Y){return import.meta.url.endsWith(".ts")?F:Y}async function H(F){return await import(F)}var QF=U("./bun-sql.ts","./bun-sql.js"),HF=U("./node-sqlite.ts","./node-sqlite.js"),GF=U("./lmdb.ts","./lmdb.js"),UF=U("./turso.ts","./turso.js"),_F=U("./neon.ts","./neon.js"),a=U("./indexeddb.ts","./indexeddb.js"),n=U("./web-extension.ts","./web-extension.js"),qF=U("./http.ts","./http.js"),CF=U("./auto.ts","./auto.js");function t(){return typeof Bun<"u"}function r(){return typeof globalThis.process==="object"&&globalThis.process!==null&&typeof globalThis.process.versions==="object"&&typeof globalThis.process.versions.node==="string"}function LF(){let F=globalThis;return F.browser?.storage!==void 0||F.chrome?.storage!==void 0}function zF(){return typeof globalThis.indexedDB<"u"}async function BF(F){if(t()){let{BunSQLiteStorage:Y}=await H(QF);return new Y(F)}if(r()){let{NodeSQLiteStorage:Y}=await H(HF);return new Y(F)}throw Error("SQLite storage is only available in Bun or Node runtimes.")}async function PF(){if(t()||r()){let{resolveDefaultStorage:F}=await H(CF);return F()}if(LF()){let{WebExtensionStorage:F}=await H(n);return new F}if(zF()){let{IndexedDBStorage:F}=await H(a);return new F}return new B}var i={memory:async(F)=>new B,sqlite:async(F)=>BF(F.path),lmdb:async(F)=>{let{LMDBStorage:Y}=await H(GF);return new Y(F.path)},turso:async(F)=>{let{TursoStorage:Y}=await H(UF);return new Y({url:F.url,...F.authToken===void 0?{}:{authToken:F.authToken}})},neon:async(F)=>{let{NeonStorage:Y}=await H(_F);return new Y({url:F.url})},indexeddb:async(F)=>{let{IndexedDBStorage:Y}=await H(a);return new Y(F.databaseName)},"web-extension":async(F)=>{let{WebExtensionStorage:Y}=await H(n);return new Y(F.area===void 0?{}:{area:F.area})},http:async(F)=>{let{HTTPStorage:Y}=await H(qF);return new Y({baseUrl:F.baseUrl,...F.headers===void 0?{}:{headers:F.headers}})},auto:async(F)=>PF()};function AF(F){if(typeof F!=="object"||F===null)return"unknown";if(!("type"in F))return"unknown";return typeof F.type==="string"?F.type:"unknown"}function TF(F){if(typeof F!=="object"||F===null||Array.isArray(F))throw Error("Storage configuration must be an object.");return F}function M(F,Y,J){let $=F[Y];if(typeof $!=="string"||$.length===0)throw Error(`${J} storage configuration requires "${Y}" as a string.`);return $}function h(F,Y,J){let $=F[Y];if($===void 0)return;if(typeof $!=="string")throw Error(`${J} storage configuration field "${Y}" must be a string.`);return $}function NF(F,Y,J){let $=F[Y];if(typeof $==="string"||$ instanceof URL)return $;throw Error(`${J} storage configuration requires "${Y}" as a string or URL.`)}function EF(F){let Y=F.headers;if(Y===void 0)return;if(typeof Y!=="object"||Y===null||Array.isArray(Y))throw Error('HTTP storage configuration field "headers" must be a string record.');let J={};for(let[$,X]of Object.entries(Y)){if(typeof X!=="string")throw Error('HTTP storage configuration field "headers" must be a string record.');J[$]=X}return J}function KF(F){let Y=F.area;if(Y===void 0)return;if(Y==="local"||Y==="sync"||Y==="session"||Y==="managed")return Y;throw Error('WebExtension storage configuration field "area" must be one of local, sync, session, or managed.')}var DF={memory:(F)=>({type:"memory"}),sqlite:(F)=>{let Y=h(F,"path","SQLite");return Y===void 0?{type:"sqlite"}:{type:"sqlite",path:Y}},lmdb:(F)=>({type:"lmdb",path:M(F,"path","LMDB")}),turso:(F)=>{let Y=h(F,"authToken","Turso");return{type:"turso",url:M(F,"url","Turso"),...Y===void 0?{}:{authToken:Y}}},neon:(F)=>({type:"neon",url:M(F,"url","Neon")}),indexeddb:(F)=>{let Y=h(F,"databaseName","IndexedDB");return Y===void 0?{type:"indexeddb"}:{type:"indexeddb",databaseName:Y}},"web-extension":(F)=>{let Y=KF(F);return Y===void 0?{type:"web-extension"}:{type:"web-extension",area:Y}},http:(F)=>{let Y=EF(F);return{type:"http",baseUrl:NF(F,"baseUrl","HTTP"),...Y===void 0?{}:{headers:Y}}},auto:(F)=>({type:"auto"})};function RF(F,Y){return DF[Y](TF(F))}function MF(F){return Object.hasOwn(i,F)}async function ZY(F){let Y=AF(F);if(!MF(Y))throw Error(`Unsupported storage configuration type: ${Y}`);let J=RF(F,Y),$=i[Y];return $(J)}export{ZY as resolveStorage};
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- var u=Object.defineProperty;var x=(E)=>E;function y(E,_){this[E]=x.bind(null,_)}var a=(E,_)=>{for(var F in _)u(E,F,{get:_[F],enumerable:!0,configurable:!0,set:y.bind(_,F)})};var Q=(E,_)=>()=>(E&&(_=E(E=0)),_);var 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 _},s=(E,_,F)=>{let Y=(X)=>_=F?new SuppressedError(X,_,"An error was suppressed during disposal"):(F=!0,X),V=(X)=>{while(X=E.pop())try{var m=X[1]&&X[1].call(X[2]);if(X[0])return Promise.resolve(m).then(V,(Z)=>(Y(Z),V()))}catch(Z){Y(Z)}if(F)throw _};return V()};function $(E,_,F){if(!E.capabilities()[_])throw Error(`Feature "${F}" requires storage capability "${_}", but this storage backend does not provide it.`)}function g(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 T="default";async function R(E,_){return await E.get(_)!==null}async function*J(E,_,F){for await(let[Y]of E.scan(_,F))yield Y}async function D(E,_){let F=0;for await(let Y of J(E,_))F++;return F}async function B(E,_){let F=[];for await(let Y of J(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 V of J(E,_,F))Y.push({type:"delete",key:V});if(Y.length===0)return 0;return await E.batch(Y),Y.length}var I;var N=Q(()=>{I=["actrec:","archive:","async-act:","attr:","audit:bulk:","blob:","budget:","budget-charged:","ev:","fleet-event-by-workflow:","fleet-event:","fleet-event-tail","idx:","lease:","liveness:","offload:","op:","review:","schedule:","schedule-due:","schedule-run:","sig:","sigres:","sigseq:","start-idem:","state:","tag:","tool-effect:","upd:","upk:","upr:","wf:","wf-cleanup:","wf-cleanup-needed:","wf-concurrency:","wf-concurrency-holder:","wf-deadline:","wf-delayed:","wf-finalizer-state:","wf-has-services:","wf-headers:","wf-idx-","wf-teardown:","wf-teardown-deadletter:","wf-teardown-needed:","wf-terminal:"]});function M(E,_){if(_>j)throw new A(E,_)}function WE(E){return E.length>0?E.slice(0,-1)+String.fromCharCode(E.charCodeAt(E.length-1)+1):"\xFF"}function YE(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 XE(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 v(E,_){if(E.has)return E.has(_);return R(E,_)}function z(E,_,F){if(E.keys)return E.keys(_,F);return J(E,_,F)}async function h(E,_){if(E.count)return E.count(_);return D(E,_)}async function O(E,_){if(E.deletePrefix)return E.deletePrefix(_);return B(E,_)}async function UE(E,_){M("batch operations",_.length),await E.batch(_)}async function P(E,_,F){if(M("conditionalBatch conditions",_.length),M("conditionalBatch operations",F.length),$(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 VE(E){return decodeURIComponent(E)}function GE(E){try{return decodeURIComponent(E)}catch{return null}}var j=1e4,FE=1e4,A,U=(E)=>String(E).padStart(16,"0"),k="0",f="1",q=(E,_,F,Y)=>`sig:${W(E)}:${W(_)}:${Y}:${W(F)}`,JE;var K=Q(()=>{N();A=class A extends Error{code="StorageBatchOperationLimitExceededError";cap=j;count;target;constructor(E,_){super(`${E} count ${_} exceeds MAX_BATCH_OPERATIONS (${j}).`);this.name="StorageBatchOperationLimitExceededError",this.target=E,this.count=_}};JE={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}:${U(_)}:${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:${U(E)}:${W(_)}:${W(F)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(E,_)=>`op:resolved-by-time:${U(E)}:${W(_)}`,asyncActivity:(E,_)=>`async-act:v1:${W(E)}:${W(_)}`,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)=>q(E,_,F,f),startSignal:(E,_,F)=>q(E,_,F,k),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:${U(E)}:${W(_)}`,terminalCleanup:(E,_)=>`wf-cleanup:${U(E)}:${W(_)}`,teardownTimer:(E,_)=>`wf-teardown:${U(E)}:${W(_)}`,delayedStart:(E,_)=>`wf-delayed:${U(E)}:${W(_)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(E,_)=>`wf-terminal:${U(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:${T}:${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:${U(E)}:${W(_)}`,workflowVisibilityUpdated:(E,_)=>`wf-idx-updated:${U(E)}:${W(_)}`,workflowVisibilityDeadline:(E,_)=>`wf-idx-deadline:${U(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 w(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 H(E){let _={},F=!1;for(let V of["gt","gte","lt","lte"]){let X=E[V];if(X===void 0)continue;if(typeof X!=="string")throw Error("deleteRange bounds must be strings");_[V]=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=w(E.limit);if(Y!==void 0)_.limit=Y;return _}async function b(E,_,F){let Y=H(F);if(E.deleteRange)return E.deleteRange(_,Y);return C(E,_,Y)}var c=()=>{};function S(E){return E.replaceAll(/:+$/g,"")}function l(E,_){let F=S(E),Y=S(_);if(F.length===0)return Y;if(Y.length===0)return F;return`${F}:${Y}`}function LE(E,_){return new L(E,_)}var L;var d=Q(()=>{c();K();L=class L{#_;#F;constructor(E,_){this.#_=E,this.#F=S(_)}#E(E){if(this.#F.length===0)return E;return E.length===0?`${this.#F}:`:`${this.#F}:${E}`}#W(E){if(this.#F.length===0)return E;return E.slice(this.#F.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(E.gt);if(E.gte!==void 0)_.gte=this.#E(E.gte);if(E.lt!==void 0)_.lt=this.#E(E.lt);if(E.lte!==void 0)_.lte=this.#E(E.lte);return _}#X(E){let _={};if(E.limit!==void 0)_.limit=E.limit;if(E.gt!==void 0)_.gt=this.#E(E.gt);if(E.gte!==void 0)_.gte=this.#E(E.gte);if(E.lt!==void 0)_.lt=this.#E(E.lt);if(E.lte!==void 0)_.lte=this.#E(E.lte);return _}capabilities(){return this.#_.capabilities()}scoped(E){return new L(this.#_,l(this.#F,E))}async get(E){return this.#_.get(this.#E(E))}async put(E,_){await this.#_.put(this.#E(E),_)}async delete(E){await this.#_.delete(this.#E(E))}async*scan(E,_){for await(let[F,Y]of this.#_.scan(this.#E(E),this.#Y(_)))yield[this.#W(F),Y]}async batch(E){M("batch operations",E.length),await this.#_.batch(E.map((_)=>{if(_.type==="put")return{type:"put",key:this.#E(_.key),value:_.value};return{type:"delete",key:this.#E(_.key)}}))}async conditionalBatch(E,_){return P(this.#_,E.map((F)=>({key:this.#E(F.key),expectedValue:F.expectedValue})),_.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(E){return v(this.#_,this.#E(E))}async deletePrefix(E){return O(this.#_,this.#E(E))}async deleteRange(E,_){let F=this.#X(H(_));return b(this.#_,this.#E(E),F)}async*keys(E,_){for await(let F of z(this.#_,this.#E(E),this.#Y(_)))yield this.#W(F)}async count(E){return h(this.#_,this.#E(E))}[Symbol.dispose](){this.#_[Symbol.dispose]()}}});d();export{LE as scopedStorage,L as ScopedStorage};
2
+ var u=Object.defineProperty;var x=(E)=>E;function y(E,_){this[E]=x.bind(null,_)}var a=(E,_)=>{for(var F in _)u(E,F,{get:_[F],enumerable:!0,configurable:!0,set:y.bind(_,F)})};var Q=(E,_)=>()=>(E&&(_=E(E=0)),_);var p=import.meta.require,s=(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 _},n=(E,_,F)=>{let Y=(X)=>_=F?new SuppressedError(X,_,"An error was suppressed during disposal"):(F=!0,X),V=(X)=>{while(X=E.pop())try{var m=X[1]&&X[1].call(X[2]);if(X[0])return Promise.resolve(m).then(V,(Z)=>(Y(Z),V()))}catch(Z){Y(Z)}if(F)throw _};return V()};function $(E,_,F){if(!E.capabilities()[_])throw Error(`Feature "${F}" requires storage capability "${_}", but this storage backend does not provide it.`)}function g(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 T="default";async function R(E,_){return await E.get(_)!==null}async function*J(E,_,F){for await(let[Y]of E.scan(_,F))yield Y}async function D(E,_){let F=0;for await(let Y of J(E,_))F++;return F}async function B(E,_){let F=[];for await(let Y of J(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 V of J(E,_,F))Y.push({type:"delete",key:V});if(Y.length===0)return 0;return await E.batch(Y),Y.length}var I;var N=Q(()=>{I=["actrec:","archive:","async-act:","attr:","audit:bulk:","blob:","budget:","budget-charged:","ev:","fleet-event-by-workflow:","fleet-event:","fleet-event-tail","idx:","lease:","liveness:","offload:","op:","review:","schedule:","schedule-due:","schedule-run:","sig:","sigres:","sigseq:","start-idem:","state:","tag:","tool-effect:","upd:","upk:","upr:","wf:","wf-cleanup:","wf-cleanup-needed:","wf-concurrency:","wf-concurrency-holder:","wf-deadline:","wf-delayed:","wf-finalizer-state:","wf-has-services:","wf-headers:","wf-idx-","wf-teardown:","wf-teardown-deadletter:","wf-teardown-needed:","wf-terminal:"]});function M(E,_){if(_>j)throw new A(E,_)}function YE(E){return E.length>0?E.slice(0,-1)+String.fromCharCode(E.charCodeAt(E.length-1)+1):"\xFF"}function XE(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 UE(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 v(E,_){if(E.has)return E.has(_);return R(E,_)}function z(E,_,F){if(E.keys)return E.keys(_,F);return J(E,_,F)}async function h(E,_){if(E.count)return E.count(_);return D(E,_)}async function O(E,_){if(E.deletePrefix)return E.deletePrefix(_);return B(E,_)}async function VE(E,_){M("batch operations",_.length),await E.batch(_)}async function P(E,_,F){if(M("conditionalBatch conditions",_.length),M("conditionalBatch operations",F.length),$(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 GE(E){return decodeURIComponent(E)}function JE(E){try{return decodeURIComponent(E)}catch{return null}}var j=1e4,WE=1e4,A,U=(E)=>String(E).padStart(16,"0"),k="0",f="1",q=(E,_,F,Y)=>`sig:${W(E)}:${W(_)}:${Y}:${W(F)}`,ME;var K=Q(()=>{N();A=class A extends Error{code="StorageBatchOperationLimitExceededError";cap=j;count;target;constructor(E,_){super(`${E} count ${_} exceeds MAX_BATCH_OPERATIONS (${j}).`);this.name="StorageBatchOperationLimitExceededError",this.target=E,this.count=_}};ME={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}:${U(_)}:${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:${U(E)}:${W(_)}:${W(F)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(E,_)=>`op:resolved-by-time:${U(E)}:${W(_)}`,asyncActivity:(E,_)=>`async-act:v1:${W(E)}:${W(_)}`,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)=>q(E,_,F,f),startSignal:(E,_,F)=>q(E,_,F,k),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:${U(E)}:${W(_)}`,terminalCleanup:(E,_)=>`wf-cleanup:${U(E)}:${W(_)}`,teardownTimer:(E,_)=>`wf-teardown:${U(E)}:${W(_)}`,delayedStart:(E,_)=>`wf-delayed:${U(E)}:${W(_)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(E,_)=>`wf-terminal:${U(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:${T}:${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:${U(E)}:${W(_)}`,workflowVisibilityUpdated:(E,_)=>`wf-idx-updated:${U(E)}:${W(_)}`,workflowVisibilityDeadline:(E,_)=>`wf-idx-deadline:${U(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 w(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 H(E){let _={},F=!1;for(let V of["gt","gte","lt","lte"]){let X=E[V];if(X===void 0)continue;if(typeof X!=="string")throw Error("deleteRange bounds must be strings");_[V]=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=w(E.limit);if(Y!==void 0)_.limit=Y;return _}async function b(E,_,F){let Y=H(F);if(E.deleteRange)return E.deleteRange(_,Y);return C(E,_,Y)}var c=()=>{};function S(E){return E.replaceAll(/:+$/g,"")}function l(E,_){let F=S(E),Y=S(_);if(F.length===0)return Y;if(Y.length===0)return F;return`${F}:${Y}`}function RE(E,_){return new L(E,_)}var L;var d=Q(()=>{c();K();L=class L{#_;#F;constructor(E,_){this.#_=E,this.#F=S(_)}#E(E){if(this.#F.length===0)return E;return E.length===0?`${this.#F}:`:`${this.#F}:${E}`}#W(E){if(this.#F.length===0)return E;return E.slice(this.#F.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(E.gt);if(E.gte!==void 0)_.gte=this.#E(E.gte);if(E.lt!==void 0)_.lt=this.#E(E.lt);if(E.lte!==void 0)_.lte=this.#E(E.lte);return _}#X(E){let _={};if(E.limit!==void 0)_.limit=E.limit;if(E.gt!==void 0)_.gt=this.#E(E.gt);if(E.gte!==void 0)_.gte=this.#E(E.gte);if(E.lt!==void 0)_.lt=this.#E(E.lt);if(E.lte!==void 0)_.lte=this.#E(E.lte);return _}capabilities(){return this.#_.capabilities()}scoped(E){return new L(this.#_,l(this.#F,E))}async get(E){return this.#_.get(this.#E(E))}async put(E,_){await this.#_.put(this.#E(E),_)}async delete(E){await this.#_.delete(this.#E(E))}async*scan(E,_){for await(let[F,Y]of this.#_.scan(this.#E(E),this.#Y(_)))yield[this.#W(F),Y]}async batch(E){M("batch operations",E.length),await this.#_.batch(E.map((_)=>{if(_.type==="put")return{type:"put",key:this.#E(_.key),value:_.value};return{type:"delete",key:this.#E(_.key)}}))}async conditionalBatch(E,_){return P(this.#_,E.map((F)=>({key:this.#E(F.key),expectedValue:F.expectedValue})),_.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(E){return v(this.#_,this.#E(E))}async deletePrefix(E){return O(this.#_,this.#E(E))}async deleteRange(E,_){let F=this.#X(H(_));return b(this.#_,this.#E(E),F)}async*keys(E,_){for await(let F of z(this.#_,this.#E(E),this.#Y(_)))yield this.#W(F)}async count(E){return h(this.#_,this.#E(E))}[Symbol.dispose](){this.#_[Symbol.dispose]()}}});d();export{RE as scopedStorage,L as ScopedStorage};
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- var c=Object.defineProperty;var f=(E)=>E;function g(E,_){this[E]=f.bind(null,_)}var s=(E,_)=>{for(var F in _)c(E,F,{get:_[F],enumerable:!0,configurable:!0,set:g.bind(_,F)})};var h=(E,_)=>()=>(E&&(_=E(E=0)),_);var K=(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 _},O=(E,_,F)=>{let P=(W)=>_=F?new SuppressedError(W,_,"An error was suppressed during disposal"):(F=!0,W),S=(W)=>{while(W=E.pop())try{var Y=W[1]&&W[1].call(W[2]);if(W[0])return Promise.resolve(Y).then(S,(U)=>(P(U),S()))}catch(U){P(U)}if(F)throw _};return S()};function N(E,_,F){if(!E.capabilities()[_])throw Error(`Feature "${F}" requires storage capability "${_}", but this storage backend does not provide it.`)}function p(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 q="default";async function v(E,_){return await E.get(_)!==null}async function*j(E,_,F){for await(let[P]of E.scan(_,F))yield P}async function m(E,_){let F=0;for await(let P of j(E,_))F++;return F}async function u(E,_){let F=[];for await(let P of j(E,_))F.push({type:"delete",key:P});if(F.length===0)return 0;return await E.batch(F),F.length}async function o(E,_,F){let P=[];for await(let S of j(E,_,F))P.push({type:"delete",key:S});if(P.length===0)return 0;return await E.batch(P),P.length}var n;var b=h(()=>{n=["actrec:","archive:","async-act:","attr:","audit:bulk:","blob:","budget:","budget-charged:","ev:","fleet-event-by-workflow:","fleet-event:","fleet-event-tail","idx:","lease:","liveness:","offload:","op:","review:","schedule:","schedule-due:","schedule-run:","sig:","sigres:","sigseq:","start-idem:","state:","tag:","tool-effect:","upd:","upk:","upr:","wf:","wf-cleanup:","wf-cleanup-needed:","wf-concurrency:","wf-concurrency-holder:","wf-deadline:","wf-delayed:","wf-finalizer-state:","wf-has-services:","wf-headers:","wf-idx-","wf-teardown:","wf-teardown-deadletter:","wf-teardown-needed:","wf-terminal:"]});function A(E,_){if(_>C)throw new y(E,_)}function WE(E){return E.length>0?E.slice(0,-1)+String.fromCharCode(E.charCodeAt(E.length-1)+1):"\xFF"}function SE(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 YE(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 UE(E,_){if(E.has)return E.has(_);return v(E,_)}function XE(E,_,F){if(E.keys)return E.keys(_,F);return j(E,_,F)}async function LE(E,_){if(E.count)return E.count(_);return m(E,_)}async function VE(E,_){if(E.deletePrefix)return E.deletePrefix(_);return u(E,_)}async function GE(E,_){A("batch operations",_.length),await E.batch(_)}async function z(E,_,F){if(A("conditionalBatch conditions",_.length),A("conditionalBatch operations",F.length),N(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 R(E){return encodeURIComponent(E)}function JE(E){return decodeURIComponent(E)}function KE(E){try{return decodeURIComponent(E)}catch{return null}}var C=1e4,RE=1e4,y,Q=(E)=>String(E).padStart(16,"0"),k="0",l="1",x=(E,_,F,P)=>`sig:${R(E)}:${R(_)}:${P}:${R(F)}`,OE;var I=h(()=>{b();y=class y extends Error{code="StorageBatchOperationLimitExceededError";cap=C;count;target;constructor(E,_){super(`${E} count ${_} exceeds MAX_BATCH_OPERATIONS (${C}).`);this.name="StorageBatchOperationLimitExceededError",this.target=E,this.count=_}};OE={workflow:(E)=>`wf:${R(E)}`,checkpoint:(E)=>`wf:${R(E)}:ckpt`,checkpointHistory:(E,_)=>`wf:${R(E)}:ckpt:${String(_).padStart(10,"0")}`,timelinePrefix:(E)=>`wf:${R(E)}:timeline:`,timeline:(E,_)=>`wf:${R(E)}:timeline:${String(_).padStart(10,"0")}`,schedule:(E)=>`schedule:${R(E)}`,scheduleTick:(E,_)=>`schedule-due:${String(E).padStart(16,"0")}:${R(_)}`,scheduleRun:(E)=>`schedule-run:${R(E)}`,operation:(E,_,F)=>`op:${E}:${Q(_)}:${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:${Q(E)}:${R(_)}:${R(F)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(E,_)=>`op:resolved-by-time:${Q(E)}:${R(_)}`,asyncActivity:(E,_)=>`async-act:v1:${R(E)}:${R(_)}`,activityReconciliationPrefix:(E)=>`actrec:v1:${R(E)}:`,activityReconciliation:(E,_,F)=>`actrec:v1:${R(E)}:${R(_)}:${F}`,eventPrefix:(E)=>`ev:${R(E)}:`,event:(E,_)=>`ev:${R(E)}:${String(_).padStart(10,"0")}`,eventHead:(E)=>`ev:${R(E)}:head`,eventWatermark:(E)=>`ev:${R(E)}:watermark`,fleetEventPrefix:()=>"fleet-event:",fleetEvent:(E)=>`fleet-event:${String(E).padStart(10,"0")}`,fleetEventTail:()=>"fleet-event-tail",fleetEventByWorkflowPrefix:(E)=>`fleet-event-by-workflow:${R(E)}:`,fleetEventByWorkflow:(E,_)=>`fleet-event-by-workflow:${R(E)}:${String(_).padStart(10,"0")}`,signal:(E,_,F)=>x(E,_,F,l),startSignal:(E,_,F)=>x(E,_,F,k),signalSequence:(E)=>`sigseq:v1:${R(E)}`,signalAcceptedResponsePrefix:(E)=>`sigres:v1:${R(E)}:`,signalAcceptedResponse:(E,_,F)=>`sigres:v1:${R(E)}:${R(_)}:${R(F)}`,deadline:(E,_)=>`wf-deadline:${Q(E)}:${R(_)}`,terminalCleanup:(E,_)=>`wf-cleanup:${Q(E)}:${R(_)}`,teardownTimer:(E,_)=>`wf-teardown:${Q(E)}:${R(_)}`,delayedStart:(E,_)=>`wf-delayed:${Q(E)}:${R(_)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(E,_)=>`wf-terminal:${Q(E)}:${R(_)}`,attribute:(E)=>`attr:${R(E)}`,attributeIndex:(E,_,F)=>`idx:${E}:${_}:${R(F)}`,tagIndex:(E,_)=>`tag:${R(E)}:${R(_)}`,updatePrefix:(E)=>`upd:${R(E)}:`,update:(E,_)=>`upd:${R(E)}:${_}`,updateResponse:(E)=>`upr:${E}`,updateIdempotency:(E,_)=>`upk:${R(E)}:${_}`,startIdempotency:(E)=>`start-idem:${R(E)}`,startIdempotencySignalId:(E)=>`start-idem:${E}`,livenessPrefix:()=>"liveness:",liveness:(E)=>`liveness:${R(E)}`,leasePrefix:()=>"lease:",leaseEpoch:()=>"lease:epoch",leaseHolder:()=>"lease:holder",budget:(E,_,F)=>`budget:${E}:${_}:${F}`,review:(E,_)=>`review:${R(E)}:${_}`,workflowHeaders:(E)=>`wf-headers:${R(E)}`,childCancellationPrefix:(E)=>`child-cancel:${R(E)}:`,childCancellation:(E,_)=>`child-cancel:${R(E)}:${R(_)}`,terminalCleanupNeeded:(E)=>`wf-cleanup-needed:${R(E)}`,workflowConcurrency:(E,_)=>`wf-concurrency:${R(E)}:${R(_)}`,workflowConcurrencyHolder:(E)=>`wf-concurrency-holder:${R(E)}`,workflowHasServices:(E)=>`wf-has-services:${R(E)}`,finalizerState:(E)=>`wf-finalizer-state:${R(E)}`,teardownOwed:(E)=>`wf-teardown-needed:${R(E)}`,teardownDeadLetter:(E)=>`wf-teardown-deadletter:${R(E)}`,offload:(E,_)=>`offload:${R(E)}:${_}`,archive:(E,_)=>`archive:${R(E)}:${_}`,stateExecution:(E,_)=>`state:execution:${R(E)}:${R(_)}`,stateWorkflow:(E,_)=>`state:workflow-scope:${q}:${R(E)}:${R(_)}`,streamChunkPrefix:(E,_)=>`blob:${R(E)}:${_}:chunk:`,streamChunk:(E,_,F)=>`blob:${R(E)}:${_}:chunk:${String(F).padStart(10,"0")}`,streamTail:(E,_)=>`blob:${R(E)}:${_}:tail`,streamMetadata:(E,_)=>`blob:${R(E)}:${_}:meta`,budgetCharged:(E)=>`budget-charged:${E}`,toolEffect:(E,_,F)=>`tool-effect:${R(E)}:${_}:${F}`,workflowVisibilityStatus:(E,_)=>`wf-idx-status:${R(E)}:${R(_)}`,workflowVisibilityType:(E,_)=>`wf-idx-type:${R(E)}:${R(_)}`,workflowVisibilityCreated:(E,_)=>`wf-idx-created:${Q(E)}:${R(_)}`,workflowVisibilityUpdated:(E,_)=>`wf-idx-updated:${Q(E)}:${R(_)}`,workflowVisibilityDeadline:(E,_)=>`wf-idx-deadline:${Q(E)}:${R(_)}`,workflowVisibilityManifest:(E)=>`wf-idx-manifest:${R(E)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"}});I();import{describe as H,expect as V,it as J}from"bun:test";var w=new TextEncoder,d=new TextDecoder;function L(E){return w.encode(E)}function D(E){return d.decode(E)}async function Z(E){let _=[];for await(let F of E)_.push(F);return _}function a(E){let _=E.capabilities();V(["ephemeral","local","remote"]).toContain(_.persistence??""),V(["linearizable","session","eventual"]).toContain(_.readAfterWrite),V(["snapshot","best-effort"]).toContain(_.scanConsistency),V(typeof _.atomicBatch).toBe("boolean"),V(typeof _.conditionalBatch).toBe("boolean"),V(typeof _.boundedRangeDelete).toBe("boolean")}function HE(E,_){H(`${E} binary and large-scan conformance`,()=>{J("round-trips binary values correctly",async()=>{let F=await _.create();try{let P=new Uint8Array([0,1,127,128,255,42,0,13,10]);await F.put("binary",P);let S=await F.get("binary");V(S).toEqual(P)}finally{F[Symbol.dispose]()}}),J("returns 1000 scanned keys in sorted order",async()=>{let F=await _.create();try{let P=Array.from({length:1000},(W,Y)=>({type:"put",key:`item:${String(Y).padStart(4,"0")}`,value:L(String(Y))}));await F.batch(P);let S=await Z(F.scan("item:"));V(S).toHaveLength(1000);for(let W=0;W<S.length;W+=1)V(S[W][0]).toBe(`item:${String(W).padStart(4,"0")}`)}finally{F[Symbol.dispose]()}})})}function ME(E,_){let{create:F,expected:P}=_;H(`${E} capabilities() conformance`,()=>{if(J("reports a well-formed capability shape",async()=>{let W=[];try{const S=K(W,await F(),0);a(S)}catch(Y){var U=Y,X=1}finally{O(W,U,X)}}),J("reports the expected capability row",async()=>{let W=[];try{const S=K(W,await F(),0);V(S.capabilities()).toEqual(P)}catch(Y){var U=Y,X=1}finally{O(W,U,X)}}),J("satisfies its declared read-after-write level",async()=>{let Y=[];try{const S=K(Y,await F(),0);await S.put("raw:key",L("written"));let W=await S.get("raw:key");if(P.readAfterWrite!=="eventual")V(W).not.toBeNull(),V(D(W)).toBe("written")}catch(U){var X=U,G=1}finally{O(Y,X,G)}}),P.scanConsistency==="snapshot")J("does not observe a key inserted after the scan began (snapshot)",async()=>{let X=[];try{const S=K(X,await F(),0);await S.put("scan:a",L("1"));await S.put("scan:b",L("2"));let W=S.scan("scan:")[Symbol.asyncIterator]();let Y=await W.next();V(Y.done).toBe(!1);await S.put("scan:c",L("3"));let U=[];if(!Y.done)U.push(Y.value[0]);for(let B=await W.next();!B.done;B=await W.next())U.push(B.value[0]);V(U).not.toContain("scan:c");V(U).toContain("scan:a");V(U).toContain("scan:b")}catch(G){var M=G,T=1}finally{O(X,M,T)}});if(P.conditionalBatch)J("applies nothing when a conditionalBatch precondition mismatches",async()=>{let Y=[];try{const S=K(Y,await F(),0);await S.put("cas:key",L("initial"));let W=await z(S,[{key:"cas:key",expectedValue:L("wrong")}],[{type:"put",key:"cas:key",value:L("changed")}]);V(W).toBe(!1);V(D(await S.get("cas:key"))).toBe("initial")}catch(U){var X=U,G=1}finally{O(Y,X,G)}}),J("reports conditionalBatch before running compare-and-swap assertions",async()=>{let W=[];try{const S=K(W,await F(),0);V(S.capabilities().conditionalBatch).toBe(!0)}catch(Y){var U=Y,X=1}finally{O(W,U,X)}})})}function TE(E,_){let{create:F}=_;H(`${E} concurrent conditionalBatch conformance`,()=>{J("lets exactly one of two contending conditionalBatch calls win",async()=>{let X=[];try{const P=K(X,await F(),0);V(P.capabilities().conditionalBatch).toBe(!0);await P.put("cas:counter",L("start"));let S=[{key:"cas:counter",expectedValue:L("start")}];let[W,Y]=await Promise.all([z(P,S,[{type:"put",key:"cas:counter",value:L("first")}]),z(P,S,[{type:"put",key:"cas:counter",value:L("second")}])]);V([W,Y].filter(Boolean)).toHaveLength(1);let U=D(await P.get("cas:counter"));V(U).toBe(W?"first":"second")}catch(G){var M=G,T=1}finally{O(X,M,T)}})})}function BE(E,_){let{create:F}=_;H(`${E} basic storage contract`,()=>{J("get on empty storage returns null",async()=>{let W=[];try{const P=K(W,await F(),0);let S=await P.get("nonexistent");V(S).toBeNull()}catch(Y){var U=Y,X=1}finally{O(W,U,X)}}),J("put then get returns same bytes",async()=>{let Y=[];try{const P=K(Y,await F(),0);let S=L("hello");await P.put("key",S);let W=await P.get("key");V(W).toEqual(S)}catch(U){var X=U,G=1}finally{O(Y,X,G)}}),J("put with same key overwrites previous value",async()=>{let W=[];try{const P=K(W,await F(),0);await P.put("key",L("first"));await P.put("key",L("second"));let S=await P.get("key");V(D(S)).toBe("second")}catch(Y){var U=Y,X=1}finally{O(W,U,X)}}),J("delete removes key, subsequent get returns null",async()=>{let W=[];try{const P=K(W,await F(),0);await P.put("key",L("value"));await P.delete("key");let S=await P.get("key");V(S).toBeNull()}catch(Y){var U=Y,X=1}finally{O(W,U,X)}}),J("scan with prefix returns only matching keys, sorted lexicographically",async()=>{let W=[];try{const P=K(W,await F(),0);await P.put("wf:b",L("b"));await P.put("wf:a",L("a"));await P.put("wf:c",L("c"));await P.put("other:x",L("x"));let S=await Z(P.scan("wf:"));V(S.map(([G])=>G)).toEqual(["wf:a","wf:b","wf:c"])}catch(Y){var U=Y,X=1}finally{O(W,U,X)}}),J("scan with limit returns at most N entries",async()=>{let W=[];try{const P=K(W,await F(),0);await P.put("p:a",L("a"));await P.put("p:b",L("b"));await P.put("p:c",L("c"));let S=await Z(P.scan("p:",{limit:2}));V(S).toHaveLength(2);V(S.map(([G])=>G)).toEqual(["p:a","p:b"])}catch(Y){var U=Y,X=1}finally{O(W,U,X)}}),J("scan with reverse returns in reverse order",async()=>{let W=[];try{const P=K(W,await F(),0);await P.put("p:a",L("a"));await P.put("p:b",L("b"));await P.put("p:c",L("c"));let S=await Z(P.scan("p:",{reverse:!0}));V(S.map(([G])=>G)).toEqual(["p:c","p:b","p:a"])}catch(Y){var U=Y,X=1}finally{O(W,U,X)}}),J("scan with gt/lt bounds",async()=>{let W=[];try{const P=K(W,await F(),0);await P.put("p:a",L("a"));await P.put("p:b",L("b"));await P.put("p:c",L("c"));await P.put("p:d",L("d"));let S=await Z(P.scan("p:",{gt:"p:a",lt:"p:d"}));V(S.map(([G])=>G)).toEqual(["p:b","p:c"])}catch(Y){var U=Y,X=1}finally{O(W,U,X)}}),J("scan with empty prefix returns all keys",async()=>{let W=[];try{const P=K(W,await F(),0);await P.put("alpha",L("a"));await P.put("beta",L("b"));await P.put("gamma",L("c"));let S=await Z(P.scan(""));V(S.map(([G])=>G)).toEqual(["alpha","beta","gamma"])}catch(Y){var U=Y,X=1}finally{O(W,U,X)}})})}export{ME as runStorageCapabilityConformance,TE as runConcurrentConditionalBatchConformance,HE as runBinaryAndLargeScanStorageConformance,BE as runBasicStorageContract};
2
+ var c=Object.defineProperty;var f=(E)=>E;function g(E,_){this[E]=f.bind(null,_)}var s=(E,_)=>{for(var F in _)c(E,F,{get:_[F],enumerable:!0,configurable:!0,set:g.bind(_,F)})};var h=(E,_)=>()=>(E&&(_=E(E=0)),_);var i=import.meta.require,K=(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 _},O=(E,_,F)=>{let P=(W)=>_=F?new SuppressedError(W,_,"An error was suppressed during disposal"):(F=!0,W),S=(W)=>{while(W=E.pop())try{var Y=W[1]&&W[1].call(W[2]);if(W[0])return Promise.resolve(Y).then(S,(U)=>(P(U),S()))}catch(U){P(U)}if(F)throw _};return S()};function N(E,_,F){if(!E.capabilities()[_])throw Error(`Feature "${F}" requires storage capability "${_}", but this storage backend does not provide it.`)}function p(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 q="default";async function v(E,_){return await E.get(_)!==null}async function*j(E,_,F){for await(let[P]of E.scan(_,F))yield P}async function m(E,_){let F=0;for await(let P of j(E,_))F++;return F}async function u(E,_){let F=[];for await(let P of j(E,_))F.push({type:"delete",key:P});if(F.length===0)return 0;return await E.batch(F),F.length}async function e(E,_,F){let P=[];for await(let S of j(E,_,F))P.push({type:"delete",key:S});if(P.length===0)return 0;return await E.batch(P),P.length}var n;var b=h(()=>{n=["actrec:","archive:","async-act:","attr:","audit:bulk:","blob:","budget:","budget-charged:","ev:","fleet-event-by-workflow:","fleet-event:","fleet-event-tail","idx:","lease:","liveness:","offload:","op:","review:","schedule:","schedule-due:","schedule-run:","sig:","sigres:","sigseq:","start-idem:","state:","tag:","tool-effect:","upd:","upk:","upr:","wf:","wf-cleanup:","wf-cleanup-needed:","wf-concurrency:","wf-concurrency-holder:","wf-deadline:","wf-delayed:","wf-finalizer-state:","wf-has-services:","wf-headers:","wf-idx-","wf-teardown:","wf-teardown-deadletter:","wf-teardown-needed:","wf-terminal:"]});function A(E,_){if(_>C)throw new y(E,_)}function SE(E){return E.length>0?E.slice(0,-1)+String.fromCharCode(E.charCodeAt(E.length-1)+1):"\xFF"}function YE(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 UE(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 XE(E,_){if(E.has)return E.has(_);return v(E,_)}function LE(E,_,F){if(E.keys)return E.keys(_,F);return j(E,_,F)}async function VE(E,_){if(E.count)return E.count(_);return m(E,_)}async function GE(E,_){if(E.deletePrefix)return E.deletePrefix(_);return u(E,_)}async function JE(E,_){A("batch operations",_.length),await E.batch(_)}async function z(E,_,F){if(A("conditionalBatch conditions",_.length),A("conditionalBatch operations",F.length),N(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 R(E){return encodeURIComponent(E)}function KE(E){return decodeURIComponent(E)}function OE(E){try{return decodeURIComponent(E)}catch{return null}}var C=1e4,WE=1e4,y,Q=(E)=>String(E).padStart(16,"0"),k="0",l="1",x=(E,_,F,P)=>`sig:${R(E)}:${R(_)}:${P}:${R(F)}`,QE;var I=h(()=>{b();y=class y extends Error{code="StorageBatchOperationLimitExceededError";cap=C;count;target;constructor(E,_){super(`${E} count ${_} exceeds MAX_BATCH_OPERATIONS (${C}).`);this.name="StorageBatchOperationLimitExceededError",this.target=E,this.count=_}};QE={workflow:(E)=>`wf:${R(E)}`,checkpoint:(E)=>`wf:${R(E)}:ckpt`,checkpointHistory:(E,_)=>`wf:${R(E)}:ckpt:${String(_).padStart(10,"0")}`,timelinePrefix:(E)=>`wf:${R(E)}:timeline:`,timeline:(E,_)=>`wf:${R(E)}:timeline:${String(_).padStart(10,"0")}`,schedule:(E)=>`schedule:${R(E)}`,scheduleTick:(E,_)=>`schedule-due:${String(E).padStart(16,"0")}:${R(_)}`,scheduleRun:(E)=>`schedule-run:${R(E)}`,operation:(E,_,F)=>`op:${E}:${Q(_)}:${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:${Q(E)}:${R(_)}:${R(F)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(E,_)=>`op:resolved-by-time:${Q(E)}:${R(_)}`,asyncActivity:(E,_)=>`async-act:v1:${R(E)}:${R(_)}`,activityReconciliationPrefix:(E)=>`actrec:v1:${R(E)}:`,activityReconciliation:(E,_,F)=>`actrec:v1:${R(E)}:${R(_)}:${F}`,eventPrefix:(E)=>`ev:${R(E)}:`,event:(E,_)=>`ev:${R(E)}:${String(_).padStart(10,"0")}`,eventHead:(E)=>`ev:${R(E)}:head`,eventWatermark:(E)=>`ev:${R(E)}:watermark`,fleetEventPrefix:()=>"fleet-event:",fleetEvent:(E)=>`fleet-event:${String(E).padStart(10,"0")}`,fleetEventTail:()=>"fleet-event-tail",fleetEventByWorkflowPrefix:(E)=>`fleet-event-by-workflow:${R(E)}:`,fleetEventByWorkflow:(E,_)=>`fleet-event-by-workflow:${R(E)}:${String(_).padStart(10,"0")}`,signal:(E,_,F)=>x(E,_,F,l),startSignal:(E,_,F)=>x(E,_,F,k),signalSequence:(E)=>`sigseq:v1:${R(E)}`,signalAcceptedResponsePrefix:(E)=>`sigres:v1:${R(E)}:`,signalAcceptedResponse:(E,_,F)=>`sigres:v1:${R(E)}:${R(_)}:${R(F)}`,deadline:(E,_)=>`wf-deadline:${Q(E)}:${R(_)}`,terminalCleanup:(E,_)=>`wf-cleanup:${Q(E)}:${R(_)}`,teardownTimer:(E,_)=>`wf-teardown:${Q(E)}:${R(_)}`,delayedStart:(E,_)=>`wf-delayed:${Q(E)}:${R(_)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(E,_)=>`wf-terminal:${Q(E)}:${R(_)}`,attribute:(E)=>`attr:${R(E)}`,attributeIndex:(E,_,F)=>`idx:${E}:${_}:${R(F)}`,tagIndex:(E,_)=>`tag:${R(E)}:${R(_)}`,updatePrefix:(E)=>`upd:${R(E)}:`,update:(E,_)=>`upd:${R(E)}:${_}`,updateResponse:(E)=>`upr:${E}`,updateIdempotency:(E,_)=>`upk:${R(E)}:${_}`,startIdempotency:(E)=>`start-idem:${R(E)}`,startIdempotencySignalId:(E)=>`start-idem:${E}`,livenessPrefix:()=>"liveness:",liveness:(E)=>`liveness:${R(E)}`,leasePrefix:()=>"lease:",leaseEpoch:()=>"lease:epoch",leaseHolder:()=>"lease:holder",budget:(E,_,F)=>`budget:${E}:${_}:${F}`,review:(E,_)=>`review:${R(E)}:${_}`,workflowHeaders:(E)=>`wf-headers:${R(E)}`,childCancellationPrefix:(E)=>`child-cancel:${R(E)}:`,childCancellation:(E,_)=>`child-cancel:${R(E)}:${R(_)}`,terminalCleanupNeeded:(E)=>`wf-cleanup-needed:${R(E)}`,workflowConcurrency:(E,_)=>`wf-concurrency:${R(E)}:${R(_)}`,workflowConcurrencyHolder:(E)=>`wf-concurrency-holder:${R(E)}`,workflowHasServices:(E)=>`wf-has-services:${R(E)}`,finalizerState:(E)=>`wf-finalizer-state:${R(E)}`,teardownOwed:(E)=>`wf-teardown-needed:${R(E)}`,teardownDeadLetter:(E)=>`wf-teardown-deadletter:${R(E)}`,offload:(E,_)=>`offload:${R(E)}:${_}`,archive:(E,_)=>`archive:${R(E)}:${_}`,stateExecution:(E,_)=>`state:execution:${R(E)}:${R(_)}`,stateWorkflow:(E,_)=>`state:workflow-scope:${q}:${R(E)}:${R(_)}`,streamChunkPrefix:(E,_)=>`blob:${R(E)}:${_}:chunk:`,streamChunk:(E,_,F)=>`blob:${R(E)}:${_}:chunk:${String(F).padStart(10,"0")}`,streamTail:(E,_)=>`blob:${R(E)}:${_}:tail`,streamMetadata:(E,_)=>`blob:${R(E)}:${_}:meta`,budgetCharged:(E)=>`budget-charged:${E}`,toolEffect:(E,_,F)=>`tool-effect:${R(E)}:${_}:${F}`,workflowVisibilityStatus:(E,_)=>`wf-idx-status:${R(E)}:${R(_)}`,workflowVisibilityType:(E,_)=>`wf-idx-type:${R(E)}:${R(_)}`,workflowVisibilityCreated:(E,_)=>`wf-idx-created:${Q(E)}:${R(_)}`,workflowVisibilityUpdated:(E,_)=>`wf-idx-updated:${Q(E)}:${R(_)}`,workflowVisibilityDeadline:(E,_)=>`wf-idx-deadline:${Q(E)}:${R(_)}`,workflowVisibilityManifest:(E)=>`wf-idx-manifest:${R(E)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"}});I();import{describe as H,expect as V,it as J}from"bun:test";var w=new TextEncoder,d=new TextDecoder;function L(E){return w.encode(E)}function D(E){return d.decode(E)}async function Z(E){let _=[];for await(let F of E)_.push(F);return _}function a(E){let _=E.capabilities();V(["ephemeral","local","remote"]).toContain(_.persistence??""),V(["linearizable","session","eventual"]).toContain(_.readAfterWrite),V(["snapshot","best-effort"]).toContain(_.scanConsistency),V(typeof _.atomicBatch).toBe("boolean"),V(typeof _.conditionalBatch).toBe("boolean"),V(typeof _.boundedRangeDelete).toBe("boolean")}function ME(E,_){H(`${E} binary and large-scan conformance`,()=>{J("round-trips binary values correctly",async()=>{let F=await _.create();try{let P=new Uint8Array([0,1,127,128,255,42,0,13,10]);await F.put("binary",P);let S=await F.get("binary");V(S).toEqual(P)}finally{F[Symbol.dispose]()}}),J("returns 1000 scanned keys in sorted order",async()=>{let F=await _.create();try{let P=Array.from({length:1000},(W,Y)=>({type:"put",key:`item:${String(Y).padStart(4,"0")}`,value:L(String(Y))}));await F.batch(P);let S=await Z(F.scan("item:"));V(S).toHaveLength(1000);for(let W=0;W<S.length;W+=1)V(S[W][0]).toBe(`item:${String(W).padStart(4,"0")}`)}finally{F[Symbol.dispose]()}})})}function TE(E,_){let{create:F,expected:P}=_;H(`${E} capabilities() conformance`,()=>{if(J("reports a well-formed capability shape",async()=>{let W=[];try{const S=K(W,await F(),0);a(S)}catch(Y){var U=Y,X=1}finally{O(W,U,X)}}),J("reports the expected capability row",async()=>{let W=[];try{const S=K(W,await F(),0);V(S.capabilities()).toEqual(P)}catch(Y){var U=Y,X=1}finally{O(W,U,X)}}),J("satisfies its declared read-after-write level",async()=>{let Y=[];try{const S=K(Y,await F(),0);await S.put("raw:key",L("written"));let W=await S.get("raw:key");if(P.readAfterWrite!=="eventual")V(W).not.toBeNull(),V(D(W)).toBe("written")}catch(U){var X=U,G=1}finally{O(Y,X,G)}}),P.scanConsistency==="snapshot")J("does not observe a key inserted after the scan began (snapshot)",async()=>{let X=[];try{const S=K(X,await F(),0);await S.put("scan:a",L("1"));await S.put("scan:b",L("2"));let W=S.scan("scan:")[Symbol.asyncIterator]();let Y=await W.next();V(Y.done).toBe(!1);await S.put("scan:c",L("3"));let U=[];if(!Y.done)U.push(Y.value[0]);for(let B=await W.next();!B.done;B=await W.next())U.push(B.value[0]);V(U).not.toContain("scan:c");V(U).toContain("scan:a");V(U).toContain("scan:b")}catch(G){var M=G,T=1}finally{O(X,M,T)}});if(P.conditionalBatch)J("applies nothing when a conditionalBatch precondition mismatches",async()=>{let Y=[];try{const S=K(Y,await F(),0);await S.put("cas:key",L("initial"));let W=await z(S,[{key:"cas:key",expectedValue:L("wrong")}],[{type:"put",key:"cas:key",value:L("changed")}]);V(W).toBe(!1);V(D(await S.get("cas:key"))).toBe("initial")}catch(U){var X=U,G=1}finally{O(Y,X,G)}}),J("reports conditionalBatch before running compare-and-swap assertions",async()=>{let W=[];try{const S=K(W,await F(),0);V(S.capabilities().conditionalBatch).toBe(!0)}catch(Y){var U=Y,X=1}finally{O(W,U,X)}})})}function BE(E,_){let{create:F}=_;H(`${E} concurrent conditionalBatch conformance`,()=>{J("lets exactly one of two contending conditionalBatch calls win",async()=>{let X=[];try{const P=K(X,await F(),0);V(P.capabilities().conditionalBatch).toBe(!0);await P.put("cas:counter",L("start"));let S=[{key:"cas:counter",expectedValue:L("start")}];let[W,Y]=await Promise.all([z(P,S,[{type:"put",key:"cas:counter",value:L("first")}]),z(P,S,[{type:"put",key:"cas:counter",value:L("second")}])]);V([W,Y].filter(Boolean)).toHaveLength(1);let U=D(await P.get("cas:counter"));V(U).toBe(W?"first":"second")}catch(G){var M=G,T=1}finally{O(X,M,T)}})})}function NE(E,_){let{create:F}=_;H(`${E} basic storage contract`,()=>{J("get on empty storage returns null",async()=>{let W=[];try{const P=K(W,await F(),0);let S=await P.get("nonexistent");V(S).toBeNull()}catch(Y){var U=Y,X=1}finally{O(W,U,X)}}),J("put then get returns same bytes",async()=>{let Y=[];try{const P=K(Y,await F(),0);let S=L("hello");await P.put("key",S);let W=await P.get("key");V(W).toEqual(S)}catch(U){var X=U,G=1}finally{O(Y,X,G)}}),J("put with same key overwrites previous value",async()=>{let W=[];try{const P=K(W,await F(),0);await P.put("key",L("first"));await P.put("key",L("second"));let S=await P.get("key");V(D(S)).toBe("second")}catch(Y){var U=Y,X=1}finally{O(W,U,X)}}),J("delete removes key, subsequent get returns null",async()=>{let W=[];try{const P=K(W,await F(),0);await P.put("key",L("value"));await P.delete("key");let S=await P.get("key");V(S).toBeNull()}catch(Y){var U=Y,X=1}finally{O(W,U,X)}}),J("scan with prefix returns only matching keys, sorted lexicographically",async()=>{let W=[];try{const P=K(W,await F(),0);await P.put("wf:b",L("b"));await P.put("wf:a",L("a"));await P.put("wf:c",L("c"));await P.put("other:x",L("x"));let S=await Z(P.scan("wf:"));V(S.map(([G])=>G)).toEqual(["wf:a","wf:b","wf:c"])}catch(Y){var U=Y,X=1}finally{O(W,U,X)}}),J("scan with limit returns at most N entries",async()=>{let W=[];try{const P=K(W,await F(),0);await P.put("p:a",L("a"));await P.put("p:b",L("b"));await P.put("p:c",L("c"));let S=await Z(P.scan("p:",{limit:2}));V(S).toHaveLength(2);V(S.map(([G])=>G)).toEqual(["p:a","p:b"])}catch(Y){var U=Y,X=1}finally{O(W,U,X)}}),J("scan with reverse returns in reverse order",async()=>{let W=[];try{const P=K(W,await F(),0);await P.put("p:a",L("a"));await P.put("p:b",L("b"));await P.put("p:c",L("c"));let S=await Z(P.scan("p:",{reverse:!0}));V(S.map(([G])=>G)).toEqual(["p:c","p:b","p:a"])}catch(Y){var U=Y,X=1}finally{O(W,U,X)}}),J("scan with gt/lt bounds",async()=>{let W=[];try{const P=K(W,await F(),0);await P.put("p:a",L("a"));await P.put("p:b",L("b"));await P.put("p:c",L("c"));await P.put("p:d",L("d"));let S=await Z(P.scan("p:",{gt:"p:a",lt:"p:d"}));V(S.map(([G])=>G)).toEqual(["p:b","p:c"])}catch(Y){var U=Y,X=1}finally{O(W,U,X)}}),J("scan with empty prefix returns all keys",async()=>{let W=[];try{const P=K(W,await F(),0);await P.put("alpha",L("a"));await P.put("beta",L("b"));await P.put("gamma",L("c"));let S=await Z(P.scan(""));V(S.map(([G])=>G)).toEqual(["alpha","beta","gamma"])}catch(Y){var U=Y,X=1}finally{O(W,U,X)}})})}export{TE as runStorageCapabilityConformance,BE as runConcurrentConditionalBatchConformance,ME as runBinaryAndLargeScanStorageConformance,NE as runBasicStorageContract};
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- var GF=Object.defineProperty;var jF=(F)=>F;function HF(F,W){this[F]=jF.bind(null,W)}var EF=(F,W)=>{for(var X in W)GF(F,X,{get:W[X],enumerable:!0,configurable:!0,set:HF.bind(W,X)})};var D=(F,W)=>()=>(F&&(W=F(F=0)),W);var SF=(F,W,X)=>{if(W!=null){if(typeof W!=="object"&&typeof W!=="function")throw TypeError('Object expected to be assigned to "using" declaration');let Z;if(X)Z=W[Symbol.asyncDispose];if(Z===void 0)Z=W[Symbol.dispose];if(typeof Z!=="function")throw TypeError("Object not disposable");F.push([X,Z,W])}else if(X)F.push([X]);return W},TF=(F,W,X)=>{let Z=(G)=>W=X?new SuppressedError(G,W,"An error was suppressed during disposal"):(X=!0,G),$=(G)=>{while(G=F.pop())try{var H=G[1]&&G[1].call(G[2]);if(G[0])return Promise.resolve(H).then($,(j)=>(Z(j),$()))}catch(j){Z(j)}if(X)throw W};return $()};function v(F,W,X){if(!F.capabilities()[W])throw Error(`Feature "${X}" requires storage capability "${W}", but this storage backend does not provide it.`)}function MF(F){let W=F.capabilities(),X=[];if(W.persistence!=="local"&&W.persistence!=="remote")X.push(`persistence must be "local" or "remote" (got "${W.persistence}")`);if(W.readAfterWrite!=="linearizable")X.push(`readAfterWrite must be "linearizable" (got "${W.readAfterWrite}")`);if(W.scanConsistency!=="snapshot")X.push(`scanConsistency must be "snapshot" (got "${W.scanConsistency}")`);if(!W.atomicBatch)X.push("atomicBatch must be true");if(!W.conditionalBatch)X.push("conditionalBatch must be true");if(X.length>0)throw Error(`Storage is not durable enough for recovery: ${X.join("; ")}.`)}var h="default";async function q(F,W){return await F.get(W)!==null}async function*N(F,W,X){for await(let[Z]of F.scan(W,X))yield Z}async function K(F,W){let X=0;for await(let Z of N(F,W))X++;return X}async function E(F,W){let X=[];for await(let Z of N(F,W))X.push({type:"delete",key:Z});if(X.length===0)return 0;return await F.batch(X),X.length}async function S(F,W,X){let Z=[];for await(let $ of N(F,W,X))Z.push({type:"delete",key:$});if(Z.length===0)return 0;return await F.batch(Z),Z.length}var UF;var T=D(()=>{UF=["actrec:","archive:","async-act:","attr:","audit:bulk:","blob:","budget:","budget-charged:","ev:","fleet-event-by-workflow:","fleet-event:","fleet-event-tail","idx:","lease:","liveness:","offload:","op:","review:","schedule:","schedule-due:","schedule-run:","sig:","sigres:","sigseq:","start-idem:","state:","tag:","tool-effect:","upd:","upk:","upr:","wf:","wf-cleanup:","wf-cleanup-needed:","wf-concurrency:","wf-concurrency-holder:","wf-deadline:","wf-delayed:","wf-finalizer-state:","wf-has-services:","wf-headers:","wf-idx-","wf-teardown:","wf-teardown-deadletter:","wf-teardown-needed:","wf-terminal:"]});function U(F,W){if(W>_)throw new m(F,W)}function c(F){return F.length>0?F.slice(0,-1)+String.fromCharCode(F.charCodeAt(F.length-1)+1):"\xFF"}function wF(F,W={}){if(W.gt!==void 0&&F<=W.gt)return!1;if(W.gte!==void 0&&F<W.gte)return!1;if(W.lt!==void 0&&F>=W.lt)return!1;if(W.lte!==void 0&&F>W.lte)return!1;return!0}function x(F,W){if(F===null||W===null)return F===W;if(F.byteLength!==W.byteLength)return!1;for(let X=0;X<F.byteLength;X++)if(F[X]!==W[X])return!1;return!0}async function u(F,W){if(F.has)return F.has(W);return q(F,W)}function y(F,W,X){if(F.keys)return F.keys(W,X);return N(F,W,X)}async function g(F,W){if(F.count)return F.count(W);return K(F,W)}async function I(F,W){if(F.deletePrefix)return F.deletePrefix(W);return E(F,W)}async function fF(F,W){U("batch operations",W.length),await F.batch(W)}async function k(F,W,X){if(U("conditionalBatch conditions",W.length),U("conditionalBatch operations",X.length),v(F,"conditionalBatch","storageConditionalBatch"),!F.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return F.conditionalBatch(W,X)}function J(F){return encodeURIComponent(F)}function dF(F){return decodeURIComponent(F)}function lF(F){try{return decodeURIComponent(F)}catch{return null}}var _=1e4,kF=1e4,m,M=(F)=>String(F).padStart(16,"0"),DF="0",QF="1",b=(F,W,X,Z)=>`sig:${J(F)}:${J(W)}:${Z}:${J(X)}`,pF;var R=D(()=>{T();m=class m extends Error{code="StorageBatchOperationLimitExceededError";cap=_;count;target;constructor(F,W){super(`${F} count ${W} exceeds MAX_BATCH_OPERATIONS (${_}).`);this.name="StorageBatchOperationLimitExceededError",this.target=F,this.count=W}};pF={workflow:(F)=>`wf:${J(F)}`,checkpoint:(F)=>`wf:${J(F)}:ckpt`,checkpointHistory:(F,W)=>`wf:${J(F)}:ckpt:${String(W).padStart(10,"0")}`,timelinePrefix:(F)=>`wf:${J(F)}:timeline:`,timeline:(F,W)=>`wf:${J(F)}:timeline:${String(W).padStart(10,"0")}`,schedule:(F)=>`schedule:${J(F)}`,scheduleTick:(F,W)=>`schedule-due:${String(F).padStart(16,"0")}:${J(W)}`,scheduleRun:(F)=>`schedule-run:${J(F)}`,operation:(F,W,X)=>`op:${F}:${M(W)}:${X}`,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,W,X)=>`audit:bulk:${M(F)}:${J(W)}:${J(X)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(F,W)=>`op:resolved-by-time:${M(F)}:${J(W)}`,asyncActivity:(F,W)=>`async-act:v1:${J(F)}:${J(W)}`,activityReconciliationPrefix:(F)=>`actrec:v1:${J(F)}:`,activityReconciliation:(F,W,X)=>`actrec:v1:${J(F)}:${J(W)}:${X}`,eventPrefix:(F)=>`ev:${J(F)}:`,event:(F,W)=>`ev:${J(F)}:${String(W).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,W)=>`fleet-event-by-workflow:${J(F)}:${String(W).padStart(10,"0")}`,signal:(F,W,X)=>b(F,W,X,QF),startSignal:(F,W,X)=>b(F,W,X,DF),signalSequence:(F)=>`sigseq:v1:${J(F)}`,signalAcceptedResponsePrefix:(F)=>`sigres:v1:${J(F)}:`,signalAcceptedResponse:(F,W,X)=>`sigres:v1:${J(F)}:${J(W)}:${J(X)}`,deadline:(F,W)=>`wf-deadline:${M(F)}:${J(W)}`,terminalCleanup:(F,W)=>`wf-cleanup:${M(F)}:${J(W)}`,teardownTimer:(F,W)=>`wf-teardown:${M(F)}:${J(W)}`,delayedStart:(F,W)=>`wf-delayed:${M(F)}:${J(W)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(F,W)=>`wf-terminal:${M(F)}:${J(W)}`,attribute:(F)=>`attr:${J(F)}`,attributeIndex:(F,W,X)=>`idx:${F}:${W}:${J(X)}`,tagIndex:(F,W)=>`tag:${J(F)}:${J(W)}`,updatePrefix:(F)=>`upd:${J(F)}:`,update:(F,W)=>`upd:${J(F)}:${W}`,updateResponse:(F)=>`upr:${F}`,updateIdempotency:(F,W)=>`upk:${J(F)}:${W}`,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,W,X)=>`budget:${F}:${W}:${X}`,review:(F,W)=>`review:${J(F)}:${W}`,workflowHeaders:(F)=>`wf-headers:${J(F)}`,childCancellationPrefix:(F)=>`child-cancel:${J(F)}:`,childCancellation:(F,W)=>`child-cancel:${J(F)}:${J(W)}`,terminalCleanupNeeded:(F)=>`wf-cleanup-needed:${J(F)}`,workflowConcurrency:(F,W)=>`wf-concurrency:${J(F)}:${J(W)}`,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)}`,teardownDeadLetter:(F)=>`wf-teardown-deadletter:${J(F)}`,offload:(F,W)=>`offload:${J(F)}:${W}`,archive:(F,W)=>`archive:${J(F)}:${W}`,stateExecution:(F,W)=>`state:execution:${J(F)}:${J(W)}`,stateWorkflow:(F,W)=>`state:workflow-scope:${h}:${J(F)}:${J(W)}`,streamChunkPrefix:(F,W)=>`blob:${J(F)}:${W}:chunk:`,streamChunk:(F,W,X)=>`blob:${J(F)}:${W}:chunk:${String(X).padStart(10,"0")}`,streamTail:(F,W)=>`blob:${J(F)}:${W}:tail`,streamMetadata:(F,W)=>`blob:${J(F)}:${W}:meta`,budgetCharged:(F)=>`budget-charged:${F}`,toolEffect:(F,W,X)=>`tool-effect:${J(F)}:${W}:${X}`,workflowVisibilityStatus:(F,W)=>`wf-idx-status:${J(F)}:${J(W)}`,workflowVisibilityType:(F,W)=>`wf-idx-type:${J(F)}:${J(W)}`,workflowVisibilityCreated:(F,W)=>`wf-idx-created:${M(F)}:${J(W)}`,workflowVisibilityUpdated:(F,W)=>`wf-idx-updated:${M(F)}:${J(W)}`,workflowVisibilityDeadline:(F,W)=>`wf-idx-deadline:${M(F)}:${J(W)}`,workflowVisibilityManifest:(F)=>`wf-idx-manifest:${J(F)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"}});function NF(F){if(F===void 0)return;if(typeof F!=="number"||!Number.isInteger(F)||F<0)throw Error("deleteRange limit must be a finite non-negative integer");return F===0?0:F}function V(F){let W={},X=!1;for(let $ of["gt","gte","lt","lte"]){let G=F[$];if(G===void 0)continue;if(typeof G!=="string")throw Error("deleteRange bounds must be strings");W[$]=G,X=!0}if(!X)throw Error("deleteRange requires at least one of gt/gte/lt/lte; use deletePrefix to delete a whole prefix");let Z=NF(F.limit);if(Z!==void 0)W.limit=Z;return W}async function w(F,W,X){let Z=V(X);if(F.deleteRange)return F.deleteRange(W,Z);return S(F,W,Z)}var z=()=>{};function P(F){return F.replaceAll(/:+$/g,"")}function VF(F,W){let X=P(F),Z=P(W);if(X.length===0)return Z;if(Z.length===0)return X;return`${X}:${Z}`}function f(F,W){return new A(F,W)}var A;var d=D(()=>{z();R();A=class A{#F;#J;constructor(F,W){this.#F=F,this.#J=P(W)}#W(F){if(this.#J.length===0)return F;return F.length===0?`${this.#J}:`:`${this.#J}:${F}`}#X(F){if(this.#J.length===0)return F;return F.slice(this.#J.length+1)}#Z(F={}){let W={};if(F.limit!==void 0)W.limit=F.limit;if(F.reverse!==void 0)W.reverse=F.reverse;if(F.gt!==void 0)W.gt=this.#W(F.gt);if(F.gte!==void 0)W.gte=this.#W(F.gte);if(F.lt!==void 0)W.lt=this.#W(F.lt);if(F.lte!==void 0)W.lte=this.#W(F.lte);return W}#$(F){let W={};if(F.limit!==void 0)W.limit=F.limit;if(F.gt!==void 0)W.gt=this.#W(F.gt);if(F.gte!==void 0)W.gte=this.#W(F.gte);if(F.lt!==void 0)W.lt=this.#W(F.lt);if(F.lte!==void 0)W.lte=this.#W(F.lte);return W}capabilities(){return this.#F.capabilities()}scoped(F){return new A(this.#F,VF(this.#J,F))}async get(F){return this.#F.get(this.#W(F))}async put(F,W){await this.#F.put(this.#W(F),W)}async delete(F){await this.#F.delete(this.#W(F))}async*scan(F,W){for await(let[X,Z]of this.#F.scan(this.#W(F),this.#Z(W)))yield[this.#X(X),Z]}async batch(F){U("batch operations",F.length),await this.#F.batch(F.map((W)=>{if(W.type==="put")return{type:"put",key:this.#W(W.key),value:W.value};return{type:"delete",key:this.#W(W.key)}}))}async conditionalBatch(F,W){return k(this.#F,F.map((X)=>({key:this.#W(X.key),expectedValue:X.expectedValue})),W.map((X)=>{if(X.type==="put")return{type:"put",key:this.#W(X.key),value:X.value};return{type:"delete",key:this.#W(X.key)}}))}async has(F){return u(this.#F,this.#W(F))}async deletePrefix(F){return I(this.#F,this.#W(F))}async deleteRange(F,W){let X=this.#$(V(W));return w(this.#F,this.#W(F),X)}async*keys(F,W){for await(let X of y(this.#F,this.#W(F),this.#Z(W)))yield this.#X(X)}async count(F){return g(this.#F,this.#W(F))}[Symbol.dispose](){this.#F[Symbol.dispose]()}}});function CF(F){return F.trim().replace(/;+\s*$/u,"").trim()}function OF(F){return RF.test(F)}function l(F){let W=CF(F);if(W.length===0)throw Error("Storage query must not be empty.");if(W.includes(";"))throw Error("Storage query must contain exactly one read-only statement.");if(BF.test(W))return;if(YF.test(W)&&OF(W))return;throw Error("Storage query only supports read-only SELECT and PRAGMA statements.")}var YF,RF,BF;var p=D(()=>{YF=/^PRAGMA\b/iu,RF=/^PRAGMA\s+(?:[A-Z_][A-Z0-9_]*\.)?[A-Z_][A-Z0-9_]*\s*$/iu,BF=/^SELECT\b/iu});function O(F){return[F,c(F)]}function i(F,W){let{gt:X,gte:Z,lt:$,lte:G}=W,H=["key >= ? AND key < ?"],j=O(F);if(X!==void 0)H.push("key > ?"),j.push(X);if(Z!==void 0)H.push("key >= ?"),j.push(Z);if($!==void 0)H.push("key < ?"),j.push($);if(G!==void 0)H.push("key <= ?"),j.push(G);return{conditions:H,parameters:j}}function t(F,W={}){let{limit:X,reverse:Z}=W,{conditions:$,parameters:G}=i(F,W),H=Z?"DESC":"ASC",j=X!==void 0?" LIMIT ?":"";if(X!==void 0)G.push(X);return{parameters:G,sqlSuffix:`WHERE ${$.join(" AND ")} ORDER BY key ${H}${j}`}}function e(F,W){let{conditions:X,parameters:Z}=i(F,W),$=X.join(" AND ");if(W.limit===void 0)return{parameters:Z,sql:`DELETE FROM kv WHERE ${$}`};return Z.push(W.limit),{parameters:Z,sql:`DELETE FROM kv WHERE key IN (SELECT key FROM kv WHERE ${$} ORDER BY key ASC LIMIT ?)`}}function o(F,W={}){let{parameters:X,sqlSuffix:Z}=t(F,W);return{parameters:X,sql:`SELECT key, value FROM kv ${Z}`}}function FF(F,W={}){let{parameters:X,sqlSuffix:Z}=t(F,W);return{parameters:X,sql:`SELECT key FROM kv ${Z}`}}var a=`CREATE TABLE IF NOT EXISTS kv (
2
+ var GF=Object.defineProperty;var jF=(F)=>F;function HF(F,W){this[F]=jF.bind(null,W)}var EF=(F,W)=>{for(var X in W)GF(F,X,{get:W[X],enumerable:!0,configurable:!0,set:HF.bind(W,X)})};var D=(F,W)=>()=>(F&&(W=F(F=0)),W);var SF=import.meta.require,TF=(F,W,X)=>{if(W!=null){if(typeof W!=="object"&&typeof W!=="function")throw TypeError('Object expected to be assigned to "using" declaration');let Z;if(X)Z=W[Symbol.asyncDispose];if(Z===void 0)Z=W[Symbol.dispose];if(typeof Z!=="function")throw TypeError("Object not disposable");F.push([X,Z,W])}else if(X)F.push([X]);return W},bF=(F,W,X)=>{let Z=(G)=>W=X?new SuppressedError(G,W,"An error was suppressed during disposal"):(X=!0,G),$=(G)=>{while(G=F.pop())try{var H=G[1]&&G[1].call(G[2]);if(G[0])return Promise.resolve(H).then($,(j)=>(Z(j),$()))}catch(j){Z(j)}if(X)throw W};return $()};function v(F,W,X){if(!F.capabilities()[W])throw Error(`Feature "${X}" requires storage capability "${W}", but this storage backend does not provide it.`)}function MF(F){let W=F.capabilities(),X=[];if(W.persistence!=="local"&&W.persistence!=="remote")X.push(`persistence must be "local" or "remote" (got "${W.persistence}")`);if(W.readAfterWrite!=="linearizable")X.push(`readAfterWrite must be "linearizable" (got "${W.readAfterWrite}")`);if(W.scanConsistency!=="snapshot")X.push(`scanConsistency must be "snapshot" (got "${W.scanConsistency}")`);if(!W.atomicBatch)X.push("atomicBatch must be true");if(!W.conditionalBatch)X.push("conditionalBatch must be true");if(X.length>0)throw Error(`Storage is not durable enough for recovery: ${X.join("; ")}.`)}var h="default";async function q(F,W){return await F.get(W)!==null}async function*N(F,W,X){for await(let[Z]of F.scan(W,X))yield Z}async function K(F,W){let X=0;for await(let Z of N(F,W))X++;return X}async function E(F,W){let X=[];for await(let Z of N(F,W))X.push({type:"delete",key:Z});if(X.length===0)return 0;return await F.batch(X),X.length}async function S(F,W,X){let Z=[];for await(let $ of N(F,W,X))Z.push({type:"delete",key:$});if(Z.length===0)return 0;return await F.batch(Z),Z.length}var UF;var T=D(()=>{UF=["actrec:","archive:","async-act:","attr:","audit:bulk:","blob:","budget:","budget-charged:","ev:","fleet-event-by-workflow:","fleet-event:","fleet-event-tail","idx:","lease:","liveness:","offload:","op:","review:","schedule:","schedule-due:","schedule-run:","sig:","sigres:","sigseq:","start-idem:","state:","tag:","tool-effect:","upd:","upk:","upr:","wf:","wf-cleanup:","wf-cleanup-needed:","wf-concurrency:","wf-concurrency-holder:","wf-deadline:","wf-delayed:","wf-finalizer-state:","wf-has-services:","wf-headers:","wf-idx-","wf-teardown:","wf-teardown-deadletter:","wf-teardown-needed:","wf-terminal:"]});function U(F,W){if(W>_)throw new m(F,W)}function c(F){return F.length>0?F.slice(0,-1)+String.fromCharCode(F.charCodeAt(F.length-1)+1):"\xFF"}function fF(F,W={}){if(W.gt!==void 0&&F<=W.gt)return!1;if(W.gte!==void 0&&F<W.gte)return!1;if(W.lt!==void 0&&F>=W.lt)return!1;if(W.lte!==void 0&&F>W.lte)return!1;return!0}function x(F,W){if(F===null||W===null)return F===W;if(F.byteLength!==W.byteLength)return!1;for(let X=0;X<F.byteLength;X++)if(F[X]!==W[X])return!1;return!0}async function u(F,W){if(F.has)return F.has(W);return q(F,W)}function y(F,W,X){if(F.keys)return F.keys(W,X);return N(F,W,X)}async function g(F,W){if(F.count)return F.count(W);return K(F,W)}async function I(F,W){if(F.deletePrefix)return F.deletePrefix(W);return E(F,W)}async function dF(F,W){U("batch operations",W.length),await F.batch(W)}async function k(F,W,X){if(U("conditionalBatch conditions",W.length),U("conditionalBatch operations",X.length),v(F,"conditionalBatch","storageConditionalBatch"),!F.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return F.conditionalBatch(W,X)}function J(F){return encodeURIComponent(F)}function lF(F){return decodeURIComponent(F)}function pF(F){try{return decodeURIComponent(F)}catch{return null}}var _=1e4,wF=1e4,m,M=(F)=>String(F).padStart(16,"0"),DF="0",QF="1",b=(F,W,X,Z)=>`sig:${J(F)}:${J(W)}:${Z}:${J(X)}`,aF;var R=D(()=>{T();m=class m extends Error{code="StorageBatchOperationLimitExceededError";cap=_;count;target;constructor(F,W){super(`${F} count ${W} exceeds MAX_BATCH_OPERATIONS (${_}).`);this.name="StorageBatchOperationLimitExceededError",this.target=F,this.count=W}};aF={workflow:(F)=>`wf:${J(F)}`,checkpoint:(F)=>`wf:${J(F)}:ckpt`,checkpointHistory:(F,W)=>`wf:${J(F)}:ckpt:${String(W).padStart(10,"0")}`,timelinePrefix:(F)=>`wf:${J(F)}:timeline:`,timeline:(F,W)=>`wf:${J(F)}:timeline:${String(W).padStart(10,"0")}`,schedule:(F)=>`schedule:${J(F)}`,scheduleTick:(F,W)=>`schedule-due:${String(F).padStart(16,"0")}:${J(W)}`,scheduleRun:(F)=>`schedule-run:${J(F)}`,operation:(F,W,X)=>`op:${F}:${M(W)}:${X}`,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,W,X)=>`audit:bulk:${M(F)}:${J(W)}:${J(X)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(F,W)=>`op:resolved-by-time:${M(F)}:${J(W)}`,asyncActivity:(F,W)=>`async-act:v1:${J(F)}:${J(W)}`,activityReconciliationPrefix:(F)=>`actrec:v1:${J(F)}:`,activityReconciliation:(F,W,X)=>`actrec:v1:${J(F)}:${J(W)}:${X}`,eventPrefix:(F)=>`ev:${J(F)}:`,event:(F,W)=>`ev:${J(F)}:${String(W).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,W)=>`fleet-event-by-workflow:${J(F)}:${String(W).padStart(10,"0")}`,signal:(F,W,X)=>b(F,W,X,QF),startSignal:(F,W,X)=>b(F,W,X,DF),signalSequence:(F)=>`sigseq:v1:${J(F)}`,signalAcceptedResponsePrefix:(F)=>`sigres:v1:${J(F)}:`,signalAcceptedResponse:(F,W,X)=>`sigres:v1:${J(F)}:${J(W)}:${J(X)}`,deadline:(F,W)=>`wf-deadline:${M(F)}:${J(W)}`,terminalCleanup:(F,W)=>`wf-cleanup:${M(F)}:${J(W)}`,teardownTimer:(F,W)=>`wf-teardown:${M(F)}:${J(W)}`,delayedStart:(F,W)=>`wf-delayed:${M(F)}:${J(W)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(F,W)=>`wf-terminal:${M(F)}:${J(W)}`,attribute:(F)=>`attr:${J(F)}`,attributeIndex:(F,W,X)=>`idx:${F}:${W}:${J(X)}`,tagIndex:(F,W)=>`tag:${J(F)}:${J(W)}`,updatePrefix:(F)=>`upd:${J(F)}:`,update:(F,W)=>`upd:${J(F)}:${W}`,updateResponse:(F)=>`upr:${F}`,updateIdempotency:(F,W)=>`upk:${J(F)}:${W}`,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,W,X)=>`budget:${F}:${W}:${X}`,review:(F,W)=>`review:${J(F)}:${W}`,workflowHeaders:(F)=>`wf-headers:${J(F)}`,childCancellationPrefix:(F)=>`child-cancel:${J(F)}:`,childCancellation:(F,W)=>`child-cancel:${J(F)}:${J(W)}`,terminalCleanupNeeded:(F)=>`wf-cleanup-needed:${J(F)}`,workflowConcurrency:(F,W)=>`wf-concurrency:${J(F)}:${J(W)}`,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)}`,teardownDeadLetter:(F)=>`wf-teardown-deadletter:${J(F)}`,offload:(F,W)=>`offload:${J(F)}:${W}`,archive:(F,W)=>`archive:${J(F)}:${W}`,stateExecution:(F,W)=>`state:execution:${J(F)}:${J(W)}`,stateWorkflow:(F,W)=>`state:workflow-scope:${h}:${J(F)}:${J(W)}`,streamChunkPrefix:(F,W)=>`blob:${J(F)}:${W}:chunk:`,streamChunk:(F,W,X)=>`blob:${J(F)}:${W}:chunk:${String(X).padStart(10,"0")}`,streamTail:(F,W)=>`blob:${J(F)}:${W}:tail`,streamMetadata:(F,W)=>`blob:${J(F)}:${W}:meta`,budgetCharged:(F)=>`budget-charged:${F}`,toolEffect:(F,W,X)=>`tool-effect:${J(F)}:${W}:${X}`,workflowVisibilityStatus:(F,W)=>`wf-idx-status:${J(F)}:${J(W)}`,workflowVisibilityType:(F,W)=>`wf-idx-type:${J(F)}:${J(W)}`,workflowVisibilityCreated:(F,W)=>`wf-idx-created:${M(F)}:${J(W)}`,workflowVisibilityUpdated:(F,W)=>`wf-idx-updated:${M(F)}:${J(W)}`,workflowVisibilityDeadline:(F,W)=>`wf-idx-deadline:${M(F)}:${J(W)}`,workflowVisibilityManifest:(F)=>`wf-idx-manifest:${J(F)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"}});function NF(F){if(F===void 0)return;if(typeof F!=="number"||!Number.isInteger(F)||F<0)throw Error("deleteRange limit must be a finite non-negative integer");return F===0?0:F}function V(F){let W={},X=!1;for(let $ of["gt","gte","lt","lte"]){let G=F[$];if(G===void 0)continue;if(typeof G!=="string")throw Error("deleteRange bounds must be strings");W[$]=G,X=!0}if(!X)throw Error("deleteRange requires at least one of gt/gte/lt/lte; use deletePrefix to delete a whole prefix");let Z=NF(F.limit);if(Z!==void 0)W.limit=Z;return W}async function w(F,W,X){let Z=V(X);if(F.deleteRange)return F.deleteRange(W,Z);return S(F,W,Z)}var z=()=>{};function P(F){return F.replaceAll(/:+$/g,"")}function VF(F,W){let X=P(F),Z=P(W);if(X.length===0)return Z;if(Z.length===0)return X;return`${X}:${Z}`}function f(F,W){return new A(F,W)}var A;var d=D(()=>{z();R();A=class A{#F;#J;constructor(F,W){this.#F=F,this.#J=P(W)}#W(F){if(this.#J.length===0)return F;return F.length===0?`${this.#J}:`:`${this.#J}:${F}`}#X(F){if(this.#J.length===0)return F;return F.slice(this.#J.length+1)}#Z(F={}){let W={};if(F.limit!==void 0)W.limit=F.limit;if(F.reverse!==void 0)W.reverse=F.reverse;if(F.gt!==void 0)W.gt=this.#W(F.gt);if(F.gte!==void 0)W.gte=this.#W(F.gte);if(F.lt!==void 0)W.lt=this.#W(F.lt);if(F.lte!==void 0)W.lte=this.#W(F.lte);return W}#$(F){let W={};if(F.limit!==void 0)W.limit=F.limit;if(F.gt!==void 0)W.gt=this.#W(F.gt);if(F.gte!==void 0)W.gte=this.#W(F.gte);if(F.lt!==void 0)W.lt=this.#W(F.lt);if(F.lte!==void 0)W.lte=this.#W(F.lte);return W}capabilities(){return this.#F.capabilities()}scoped(F){return new A(this.#F,VF(this.#J,F))}async get(F){return this.#F.get(this.#W(F))}async put(F,W){await this.#F.put(this.#W(F),W)}async delete(F){await this.#F.delete(this.#W(F))}async*scan(F,W){for await(let[X,Z]of this.#F.scan(this.#W(F),this.#Z(W)))yield[this.#X(X),Z]}async batch(F){U("batch operations",F.length),await this.#F.batch(F.map((W)=>{if(W.type==="put")return{type:"put",key:this.#W(W.key),value:W.value};return{type:"delete",key:this.#W(W.key)}}))}async conditionalBatch(F,W){return k(this.#F,F.map((X)=>({key:this.#W(X.key),expectedValue:X.expectedValue})),W.map((X)=>{if(X.type==="put")return{type:"put",key:this.#W(X.key),value:X.value};return{type:"delete",key:this.#W(X.key)}}))}async has(F){return u(this.#F,this.#W(F))}async deletePrefix(F){return I(this.#F,this.#W(F))}async deleteRange(F,W){let X=this.#$(V(W));return w(this.#F,this.#W(F),X)}async*keys(F,W){for await(let X of y(this.#F,this.#W(F),this.#Z(W)))yield this.#X(X)}async count(F){return g(this.#F,this.#W(F))}[Symbol.dispose](){this.#F[Symbol.dispose]()}}});function CF(F){return F.trim().replace(/;+\s*$/u,"").trim()}function OF(F){return RF.test(F)}function l(F){let W=CF(F);if(W.length===0)throw Error("Storage query must not be empty.");if(W.includes(";"))throw Error("Storage query must contain exactly one read-only statement.");if(BF.test(W))return;if(YF.test(W)&&OF(W))return;throw Error("Storage query only supports read-only SELECT and PRAGMA statements.")}var YF,RF,BF;var p=D(()=>{YF=/^PRAGMA\b/iu,RF=/^PRAGMA\s+(?:[A-Z_][A-Z0-9_]*\.)?[A-Z_][A-Z0-9_]*\s*$/iu,BF=/^SELECT\b/iu});function O(F){return[F,c(F)]}function i(F,W){let{gt:X,gte:Z,lt:$,lte:G}=W,H=["key >= ? AND key < ?"],j=O(F);if(X!==void 0)H.push("key > ?"),j.push(X);if(Z!==void 0)H.push("key >= ?"),j.push(Z);if($!==void 0)H.push("key < ?"),j.push($);if(G!==void 0)H.push("key <= ?"),j.push(G);return{conditions:H,parameters:j}}function t(F,W={}){let{limit:X,reverse:Z}=W,{conditions:$,parameters:G}=i(F,W),H=Z?"DESC":"ASC",j=X!==void 0?" LIMIT ?":"";if(X!==void 0)G.push(X);return{parameters:G,sqlSuffix:`WHERE ${$.join(" AND ")} ORDER BY key ${H}${j}`}}function e(F,W){let{conditions:X,parameters:Z}=i(F,W),$=X.join(" AND ");if(W.limit===void 0)return{parameters:Z,sql:`DELETE FROM kv WHERE ${$}`};return Z.push(W.limit),{parameters:Z,sql:`DELETE FROM kv WHERE key IN (SELECT key FROM kv WHERE ${$} ORDER BY key ASC LIMIT ?)`}}function o(F,W={}){let{parameters:X,sqlSuffix:Z}=t(F,W);return{parameters:X,sql:`SELECT key, value FROM kv ${Z}`}}function FF(F,W={}){let{parameters:X,sqlSuffix:Z}=t(F,W);return{parameters:X,sql:`SELECT key FROM kv ${Z}`}}var a=`CREATE TABLE IF NOT EXISTS kv (
3
3
  key TEXT PRIMARY KEY,
4
4
  value BLOB NOT NULL
5
5
  ) WITHOUT ROWID`,L="SELECT value FROM kv WHERE key = ?",B="INSERT INTO kv (key, value) VALUES (?, ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value",C="DELETE FROM kv WHERE key = ?",s="SELECT 1 AS present FROM kv WHERE key = ? LIMIT 1",n="SELECT COUNT(*) AS count FROM kv WHERE key >= ? AND key < ?",r="DELETE FROM kv WHERE key >= ? AND key < ?";var WF=D(()=>{R()});z();R();p();d();WF();import{createClient as vF}from"@libsql/client";var XF=`${a};`,Y=10,hF=new Set(["SQLITE_BUSY","SQLITE_LOCKED"]);function JF(F){return typeof F==="object"&&F!==null&&"code"in F&&typeof F.code==="string"&&hF.has(F.code)}async function _F(F){return F.transaction("write")}async function zF(F){try{await F.rollback()}catch{}}async function ZF(F){await new Promise((W)=>{setTimeout(W,Math.min(F*5,50))})}async function PF(F,W){for(let X=1;X<=Y;X++)try{await F.batch(W,"write");return}catch(Z){if(!JF(Z)||X===Y)throw Z;await ZF(X)}}async function AF(F,W){for(let X of W){let $=(await F.execute({sql:L,args:[X.key]})).rows[0]?.value,G=$===null||$===void 0?null:new Uint8Array($);if(!x(G,X.expectedValue))return!1}return!0}async function LF(F,W){for(let X of W)if(X.type==="put")await F.execute({sql:B,args:[X.key,X.value]});else await F.execute({sql:C,args:[X.key]})}function qF(F){if(F==="file::memory:"||F===":memory:")return"ephemeral";if(F.startsWith("file:"))return"local";return"remote"}class KF{#F;#J;#W=!1;constructor(F){this.#J=qF(F.url),this.#F=vF(F.authToken?{url:F.url,authToken:F.authToken}:{url:F.url})}capabilities(){return{persistence:this.#J,readAfterWrite:"session",scanConsistency:"snapshot",atomicBatch:!0,conditionalBatch:!0,boundedRangeDelete:!0}}async#X(){if(this.#W)return;await this.#F.executeMultiple(XF),this.#W=!0}async get(F){await this.#X();let W=await this.#F.execute({sql:L,args:[F]});if(W.rows.length===0)return null;let X=W.rows[0].value;if(X===null||X===void 0)return null;return new Uint8Array(X)}async put(F,W){await this.#X(),await this.#F.execute({sql:B,args:[F,W]})}async delete(F){await this.#X(),await this.#F.execute({sql:C,args:[F]})}async has(F){return await this.#X(),(await this.#F.execute({sql:s,args:[F]})).rows.length>0}async deletePrefix(F){await this.#X();let[W,X]=O(F);return(await this.#F.execute({sql:r,args:[W,X]})).rowsAffected}async deleteRange(F,W){await this.#X();let X=V(W),{parameters:Z,sql:$}=e(F,X);return(await this.#F.execute({sql:$,args:Z})).rowsAffected}async*scan(F,W={}){await this.#X();let{parameters:X,sql:Z}=o(F,W),$=await this.#F.execute({sql:Z,args:X});for(let G of $.rows){let{key:H,value:j}=G,$F=new Uint8Array(j);yield[H,$F]}}async*keys(F,W={}){await this.#X();let{parameters:X,sql:Z}=FF(F,W),$=await this.#F.execute({sql:Z,args:X});for(let G of $.rows)yield G.key}async count(F){await this.#X();let[W,X]=O(F),Z=await this.#F.execute({sql:n,args:[W,X]});return Number(Z.rows[0]?.count??0)}scoped(F){return f(this,F)}async batch(F){if(U("batch operations",F.length),F.length===0)return;await this.#X();let W=F.map((X)=>{if(X.type==="put")return{sql:B,args:[X.key,X.value]};return{sql:C,args:[X.key]}});await PF(this.#F,W)}async conditionalBatch(F,W){U("conditionalBatch conditions",F.length),U("conditionalBatch operations",W.length),await this.#X();let X;for(let Z=1;Z<=Y;Z++){let $;try{if($=await _F(this.#F),await $.executeMultiple(XF),!await AF($,F))return await $.rollback(),!1;return await LF($,W),await $.commit(),!0}catch(G){if($!==void 0)await zF($);if(!JF(G))throw G;if(X=G,Z<Y)await ZF(Z)}}throw Error(`conditionalBatch exhausted ${Y} attempts after SQLite contention failures`,{cause:X})}async query(F,W){return await this.#X(),l(F),(await this.#F.execute({sql:F,args:W??[]})).rows}[Symbol.dispose](){this.#F.close()}}export{KF as TursoStorage};
@@ -1,4 +1,4 @@
1
- import type { JSONValue } from '../core/json.ts';
1
+ import { type JSONValue } from '../core/json.ts';
2
2
  import { type DeleteRangeOptions } from './delete-range.ts';
3
3
  import { type ScanOptions, type Storage } from './interface.ts';
4
4
  /**