@lostgradient/weft 0.20.0 → 0.21.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 (138) hide show
  1. package/README.md +2 -2
  2. package/dist/core/engine/activity-reconciliation.d.ts +2 -2
  3. package/dist/core/engine/activity-reconciliation.js +12 -8
  4. package/dist/core/engine/async-activity-completion.js +12 -4
  5. package/dist/core/engine/async-activity-records.d.ts +11 -1
  6. package/dist/core/engine/async-activity-records.js +4 -3
  7. package/dist/core/engine/attributes-tags.d.ts +11 -1
  8. package/dist/core/engine/attributes-tags.js +4 -3
  9. package/dist/core/engine/bulk-operations-purge.js +5 -2
  10. package/dist/core/engine/bulk-operations.js +17 -5
  11. package/dist/core/engine/callback-creators-bundles.js +1 -1
  12. package/dist/core/engine/callback-creators-core.js +4 -2
  13. package/dist/core/engine/checkpoint-io.js +1 -1
  14. package/dist/core/engine/child-workflow.js +2 -1
  15. package/dist/core/engine/completed-review-storage.js +1 -1
  16. package/dist/core/engine/condition-waiters.d.ts +45 -3
  17. package/dist/core/engine/condition-waiters.js +12 -3
  18. package/dist/core/engine/disposal.js +6 -0
  19. package/dist/core/engine/engine-internal-types.d.ts +12 -4
  20. package/dist/core/engine/fenced-write.d.ts +46 -15
  21. package/dist/core/engine/fenced-write.js +39 -6
  22. package/dist/core/engine/finalizer-state.d.ts +3 -1
  23. package/dist/core/engine/handle-result.d.ts +49 -1
  24. package/dist/core/engine/handle-result.js +95 -20
  25. package/dist/core/engine/index.d.ts +13 -5
  26. package/dist/core/engine/index.js +155 -5
  27. package/dist/core/engine/inline-launch-queue.js +9 -0
  28. package/dist/core/engine/internals.d.ts +73 -0
  29. package/dist/core/engine/invoke-update-handler.d.ts +19 -0
  30. package/dist/core/engine/invoke-update-handler.js +7 -0
  31. package/dist/core/engine/lease-deposition.d.ts +132 -0
  32. package/dist/core/engine/lease-deposition.js +31 -0
  33. package/dist/core/engine/lease-errors.d.ts +80 -9
  34. package/dist/core/engine/lease-errors.js +28 -2
  35. package/dist/core/engine/lifecycle/resume.js +3 -1
  36. package/dist/core/engine/lifecycle/standalone-claim-acquire.d.ts +33 -0
  37. package/dist/core/engine/lifecycle/standalone-claim-acquire.js +25 -0
  38. package/dist/core/engine/lifecycle/start-commit.js +20 -6
  39. package/dist/core/engine/lifecycle/transition.d.ts +15 -1
  40. package/dist/core/engine/lifecycle/transition.js +6 -3
  41. package/dist/core/engine/operations-activity.js +1 -1
  42. package/dist/core/engine/operations-time.js +21 -7
  43. package/dist/core/engine/owner-side-signal-poll.d.ts +132 -0
  44. package/dist/core/engine/owner-side-signal-poll.js +22 -0
  45. package/dist/core/engine/owner-side-update-poll.d.ts +116 -0
  46. package/dist/core/engine/owner-side-update-poll.js +22 -0
  47. package/dist/core/engine/ownership-bootstrap.d.ts +280 -0
  48. package/dist/core/engine/ownership-bootstrap.js +89 -0
  49. package/dist/core/engine/ownership-mode-marker.d.ts +82 -0
  50. package/dist/core/engine/ownership-mode-marker.js +52 -0
  51. package/dist/core/engine/ownership-options.d.ts +22 -6
  52. package/dist/core/engine/ownership-options.js +42 -12
  53. package/dist/core/engine/pending-updates.js +35 -24
  54. package/dist/core/engine/queries.d.ts +70 -0
  55. package/dist/core/engine/queries.js +58 -4
  56. package/dist/core/engine/schedules.js +1 -1
  57. package/dist/core/engine/signals.d.ts +11 -1
  58. package/dist/core/engine/signals.js +11 -7
  59. package/dist/core/engine/sleep-timer-acknowledgements.d.ts +68 -0
  60. package/dist/core/engine/sleep-timer-acknowledgements.js +19 -0
  61. package/dist/core/engine/storage-io.d.ts +58 -10
  62. package/dist/core/engine/storage-io.js +27 -9
  63. package/dist/core/engine/termination/cleanup.d.ts +5 -4
  64. package/dist/core/engine/termination/complete.js +23 -4
  65. package/dist/core/engine/termination/finalizer-claim.js +4 -4
  66. package/dist/core/engine/termination/state-commit-callbacks.d.ts +15 -0
  67. package/dist/core/engine/termination/state-commit-callbacks.js +0 -0
  68. package/dist/core/engine/termination/suspend.js +1 -1
  69. package/dist/core/engine/update-validation.d.ts +28 -0
  70. package/dist/core/engine/update-validation.js +37 -0
  71. package/dist/core/engine/updates.d.ts +17 -16
  72. package/dist/core/engine/updates.js +24 -47
  73. package/dist/core/engine/wake-ownership-check.d.ts +86 -0
  74. package/dist/core/engine/wake-ownership-check.js +19 -0
  75. package/dist/core/engine/wake-ownership-guard.d.ts +46 -0
  76. package/dist/core/engine/wake-ownership-guard.js +23 -0
  77. package/dist/core/engine/workflow-claim-codec.d.ts +64 -0
  78. package/dist/core/engine/workflow-claim-codec.js +44 -0
  79. package/dist/core/engine/workflow-claim-cooldown.d.ts +60 -0
  80. package/dist/core/engine/workflow-claim-cooldown.js +17 -0
  81. package/dist/core/engine/workflow-claim-fold.d.ts +82 -0
  82. package/dist/core/engine/workflow-claim-fold.js +53 -0
  83. package/dist/core/engine/workflow-claim-metrics.d.ts +131 -0
  84. package/dist/core/engine/workflow-claim-metrics.js +62 -0
  85. package/dist/core/engine/workflow-claim-reclaim-scan.d.ts +96 -0
  86. package/dist/core/engine/workflow-claim-reclaim-scan.js +66 -0
  87. package/dist/core/engine/workflow-claim-reclaim-target.d.ts +107 -0
  88. package/dist/core/engine/workflow-claim-reclaim-target.js +155 -0
  89. package/dist/core/engine/workflow-claim-registry.d.ts +227 -0
  90. package/dist/core/engine/workflow-claim-registry.js +198 -0
  91. package/dist/core/engine/workflow-claim-renewal-interval.d.ts +50 -0
  92. package/dist/core/engine/workflow-claim-renewal-interval.js +132 -0
  93. package/dist/core/engine/workflow-claim-renewal-subpasses.d.ts +265 -0
  94. package/dist/core/engine/workflow-claim-renewal-subpasses.js +104 -0
  95. package/dist/core/engine/workflow-claim-renewal-task.d.ts +159 -0
  96. package/dist/core/engine/workflow-claim-renewal-task.js +65 -0
  97. package/dist/core/engine/workflow-claim-transitions.d.ts +186 -0
  98. package/dist/core/engine/workflow-claim-transitions.js +120 -0
  99. package/dist/core/inline-execution-strategy.d.ts +20 -0
  100. package/dist/core/inline-execution-strategy.js +15 -4
  101. package/dist/core/scheduler/scheduler-class.js +3 -3
  102. package/dist/core/scheduler/timer-sources.d.ts +13 -0
  103. package/dist/core/scheduler/timer-sources.js +1 -1
  104. package/dist/core/types/options.d.ts +17 -1
  105. package/dist/core/weft-error.d.ts +1 -1
  106. package/dist/core/weft-error.js +2 -1
  107. package/dist/http.js +2 -2
  108. package/dist/index.d.ts +2 -1
  109. package/dist/index.js +8 -0
  110. package/dist/indexeddb.js +1 -1
  111. package/dist/json-schema.js +3 -3
  112. package/dist/observability/index.js +2 -2
  113. package/dist/storage/auto.js +1 -1
  114. package/dist/storage/bun-sql.js +113 -0
  115. package/dist/storage/compressed-storage.js +1 -1
  116. package/dist/storage/index.d.ts +38 -35
  117. package/dist/storage/interface.d.ts +87 -125
  118. package/dist/storage/interface.js +1 -1
  119. package/dist/storage/key-encoding.d.ts +51 -0
  120. package/dist/storage/key-encoding.js +13 -0
  121. package/dist/storage/key-prefixes.d.ts +1 -1
  122. package/dist/storage/key-prefixes.js +3 -0
  123. package/dist/storage/lmdb.js +1 -1
  124. package/dist/storage/memory.js +1 -1
  125. package/dist/storage/neon.js +2 -2
  126. package/dist/storage/node-sqlite.js +113 -0
  127. package/dist/storage/ownership-keys.d.ts +55 -0
  128. package/dist/storage/ownership-keys.js +6 -0
  129. package/dist/storage/postgres.js +2 -2
  130. package/dist/storage/resolve.js +1 -1
  131. package/dist/storage/scoped-storage.js +1 -1
  132. package/dist/storage/testing.js +1 -1
  133. package/dist/storage/turso.js +2 -2
  134. package/dist/version.d.ts +1 -1
  135. package/dist/version.js +1 -1
  136. package/dist/web-extension.js +1 -1
  137. package/dist/worker/protocol.js +1 -1
  138. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- var ZX=import.meta.require,SX=(X,Y,_)=>{if(Y!=null){if(typeof Y!=="object"&&typeof Y!=="function")throw TypeError('Object expected to be assigned to "using" declaration');let Z;if(_)Z=Y[Symbol.asyncDispose];if(Z===void 0)Z=Y[Symbol.dispose];if(typeof Z!=="function")throw TypeError("Object not disposable");X.push([_,Z,Y])}else if(_)X.push([_]);return Y},zX=(X,Y,_)=>{let Z=(G)=>Y=_?new SuppressedError(G,Y,"An error was suppressed during disposal"):(_=!0,G),$=(G)=>{while(G=X.pop())try{var M=G[1]&&G[1].call(G[2]);if(G[0])return Promise.resolve(M).then($,(F)=>(Z(F),$()))}catch(F){Z(F)}if(_)throw Y};return $()};function E(X,Y,_){if(!X.capabilities()[Y])throw Error(`Feature "${_}" requires storage capability "${Y}", but this storage backend does not provide it.`)}function GX(X){let Y=X.capabilities(),_=[];if(Y.persistence!=="local"&&Y.persistence!=="remote")_.push(`persistence must be "local" or "remote" (got "${Y.persistence}")`);if(Y.readAfterWrite!=="linearizable")_.push(`readAfterWrite must be "linearizable" (got "${Y.readAfterWrite}")`);if(Y.scanConsistency!=="snapshot")_.push(`scanConsistency must be "snapshot" (got "${Y.scanConsistency}")`);if(!Y.atomicBatch)_.push("atomicBatch must be true");if(!Y.conditionalBatch)_.push("conditionalBatch must be true");if(_.length>0)throw Error(`Storage is not durable enough for recovery: ${_.join("; ")}.`)}var L="default";async function v(X,Y){return await X.get(Y)!==null}async function*V(X,Y,_){for await(let[Z]of X.scan(Y,_))yield Z}async function R(X,Y){let _=0;for await(let Z of V(X,Y))_++;return _}async function q(X,Y){let _=[];for await(let Z of V(X,Y))_.push({type:"delete",key:Z});if(_.length===0)return 0;return await X.batch(_),_.length}async function P(X,Y,_){let Z=[];for await(let $ of V(X,Y,_))Z.push({type:"delete",key:$});if(Z.length===0)return 0;return await X.batch(Z),Z.length}var $X=["actrec:","archive:","async-act:","attr:","audit:bulk:","blob:","budget:","budget-charged:","child-by-parent:","ev:","fleet-event-by-workflow:","fleet-event:","fleet-event-tail","idx:","lease:","liveness:","offload:","op:","review:","schedule:","schedule-due:","schedule-run-by-schedule:","schedule-run-link:","schedule-run:","sig:","sigres:","sigseq:","start-idem:","state:","tag:","tool-effect:","upd:","upk:","upr:","wf:","wf-cleanup:","wf-cleanup-needed:","wf-concurrency:","wf-concurrency-holder:","wf-deadline:","wf-delayed:","wf-finalizer-state:","wf-has-services:","wf-headers:","wf-idx-","wf-teardown:","wf-teardown-deadletter:","wf-teardown-needed:","wf-teardown-succeeded:","wf-terminal:"];var D=1e4,xX=1e4;class b extends Error{code="StorageBatchOperationLimitExceededError";cap=D;count;target;constructor(X,Y){super(`${X} count ${Y} exceeds MAX_BATCH_OPERATIONS (${D}).`);this.name="StorageBatchOperationLimitExceededError",this.target=X,this.count=Y}}function U(X,Y){if(Y>D)throw new b(X,Y)}function x(X){return X.length>0?X.slice(0,-1)+String.fromCharCode(X.charCodeAt(X.length-1)+1):"\xFF"}function yX(X,Y={}){if(Y.gt!==void 0&&X<=Y.gt)return!1;if(Y.gte!==void 0&&X<Y.gte)return!1;if(Y.lt!==void 0&&X>=Y.lt)return!1;if(Y.lte!==void 0&&X>Y.lte)return!1;return!0}function y(X,Y){if(X===null||Y===null)return X===Y;if(X.byteLength!==Y.byteLength)return!1;for(let _=0;_<X.byteLength;_++)if(X[_]!==Y[_])return!1;return!0}async function I(X,Y){if(X.has)return X.has(Y);return v(X,Y)}function m(X,Y,_){if(X.keys)return X.keys(Y,_);return V(X,Y,_)}async function g(X,Y){if(X.count)return X.count(Y);return R(X,Y)}async function u(X,Y){if(X.deletePrefix)return X.deletePrefix(Y);return q(X,Y)}async function IX(X,Y){U("batch operations",Y.length),await X.batch(Y)}async function k(X,Y,_){if(U("conditionalBatch conditions",Y.length),U("conditionalBatch operations",_.length),E(X,"conditionalBatch","storageConditionalBatch"),!X.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return X.conditionalBatch(Y,_)}function J(X){return encodeURIComponent(X)}function mX(X){return decodeURIComponent(X)}function gX(X){try{return decodeURIComponent(X)}catch{return null}}var H=(X)=>String(X).padStart(16,"0"),MX="0",FX="1",h=(X,Y,_,Z)=>`sig:${J(X)}:${J(Y)}:${Z}:${J(_)}`,uX={workflow:(X)=>`wf:${J(X)}`,checkpoint:(X)=>`wf:${J(X)}:ckpt`,checkpointHistory:(X,Y)=>`wf:${J(X)}:ckpt:${String(Y).padStart(10,"0")}`,timelinePrefix:(X)=>`wf:${J(X)}:timeline:`,timeline:(X,Y)=>`wf:${J(X)}:timeline:${String(Y).padStart(10,"0")}`,schedule:(X)=>`schedule:${J(X)}`,scheduleTick:(X,Y)=>`schedule-due:${String(X).padStart(16,"0")}:${J(Y)}`,scheduleRun:(X)=>`schedule-run:${J(X)}`,scheduleRunLink:(X)=>`schedule-run-link:${J(X)}`,scheduleRunBySchedulePrefix:(X)=>`schedule-run-by-schedule:${J(X)}:`,scheduleRunBySchedule:(X,Y)=>`schedule-run-by-schedule:${J(X)}:${J(Y)}`,operation:(X,Y,_)=>`op:${X}:${H(Y)}:${_}`,operationInflight:(X)=>`op:inflight:${X}`,operationQueued:(X)=>`op:queued:${X}`,operationResolved:(X)=>`op:resolved:${X}`,bulkOperationAuditPrefix:()=>"audit:bulk:",bulkOperationAudit:(X,Y,_)=>`audit:bulk:${H(X)}:${J(Y)}:${J(_)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(X,Y)=>`op:resolved-by-time:${H(X)}:${J(Y)}`,asyncActivity:(X,Y)=>`async-act:v1:${J(X)}:${J(Y)}`,asyncActivityResolution:(X,Y)=>`async-act:v1:${J(X)}:${J(Y)}:resolution`,activityReconciliationPrefix:(X)=>`actrec:v1:${J(X)}:`,activityReconciliation:(X,Y,_)=>`actrec:v1:${J(X)}:${J(Y)}:${_}`,eventPrefix:(X)=>`ev:${J(X)}:`,event:(X,Y)=>`ev:${J(X)}:${String(Y).padStart(10,"0")}`,eventHead:(X)=>`ev:${J(X)}:head`,eventWatermark:(X)=>`ev:${J(X)}:watermark`,fleetEventPrefix:()=>"fleet-event:",fleetEvent:(X)=>`fleet-event:${String(X).padStart(10,"0")}`,fleetEventTail:()=>"fleet-event-tail",fleetEventByWorkflowPrefix:(X)=>`fleet-event-by-workflow:${J(X)}:`,fleetEventByWorkflow:(X,Y)=>`fleet-event-by-workflow:${J(X)}:${String(Y).padStart(10,"0")}`,signal:(X,Y,_)=>h(X,Y,_,FX),startSignal:(X,Y,_)=>h(X,Y,_,MX),signalSequence:(X)=>`sigseq:v1:${J(X)}`,signalAcceptedResponsePrefix:(X)=>`sigres:v1:${J(X)}:`,signalAcceptedResponse:(X,Y,_)=>`sigres:v1:${J(X)}:${J(Y)}:${J(_)}`,deadline:(X,Y)=>`wf-deadline:${H(X)}:${J(Y)}`,terminalCleanup:(X,Y)=>`wf-cleanup:${H(X)}:${J(Y)}`,teardownTimer:(X,Y)=>`wf-teardown:${H(X)}:${J(Y)}`,delayedStart:(X,Y)=>`wf-delayed:${H(X)}:${J(Y)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(X,Y)=>`wf-terminal:${H(X)}:${J(Y)}`,attribute:(X)=>`attr:${J(X)}`,attributeIndex:(X,Y,_)=>`idx:${X}:${Y}:${J(_)}`,tagIndex:(X,Y)=>`tag:${J(X)}:${J(Y)}`,updatePrefix:(X)=>`upd:${J(X)}:`,update:(X,Y)=>`upd:${J(X)}:${Y}`,updateResponse:(X)=>`upr:${X}`,updateIdempotency:(X,Y)=>`upk:${J(X)}:${Y}`,startIdempotency:(X)=>`start-idem:${J(X)}`,startIdempotencySignalId:(X)=>`start-idem:${X}`,livenessPrefix:()=>"liveness:",liveness:(X)=>`liveness:${J(X)}`,leasePrefix:()=>"lease:",leaseEpoch:()=>"lease:epoch",leaseHolder:()=>"lease:holder",budget:(X,Y,_)=>`budget:${X}:${Y}:${_}`,review:(X,Y)=>`review:${J(X)}:${Y}`,workflowHeaders:(X)=>`wf-headers:${J(X)}`,childCancellationPrefix:(X)=>`child-cancel:${J(X)}:`,childCancellation:(X,Y)=>`child-cancel:${J(X)}:${J(Y)}`,childWorkflowByParentPrefix:(X,Y)=>`child-by-parent:${J(X)}:${Y===void 0?"":`${J(Y)}:`}`,childWorkflowByParent:(X,Y,_)=>`child-by-parent:${J(X)}:${Y===void 0?"":`${J(Y)}:`}${J(_)}`,terminalCleanupNeeded:(X)=>`wf-cleanup-needed:${J(X)}`,workflowConcurrency:(X,Y)=>`wf-concurrency:${J(X)}:${J(Y)}`,workflowConcurrencyHolder:(X)=>`wf-concurrency-holder:${J(X)}`,workflowHasServices:(X)=>`wf-has-services:${J(X)}`,finalizerState:(X)=>`wf-finalizer-state:${J(X)}`,teardownOwed:(X)=>`wf-teardown-needed:${J(X)}`,teardownSucceeded:(X)=>`wf-teardown-succeeded:${J(X)}`,teardownDeadLetter:(X)=>`wf-teardown-deadletter:${J(X)}`,offload:(X,Y)=>`offload:${J(X)}:${Y}`,archive:(X,Y)=>`archive:${J(X)}:${Y}`,stateExecution:(X,Y)=>`state:execution:${J(X)}:${J(Y)}`,stateWorkflow:(X,Y)=>`state:workflow-scope:${L}:${J(X)}:${J(Y)}`,streamChunkPrefix:(X,Y)=>`blob:${J(X)}:${Y}:chunk:`,streamChunk:(X,Y,_)=>`blob:${J(X)}:${Y}:chunk:${String(_).padStart(10,"0")}`,streamTail:(X,Y)=>`blob:${J(X)}:${Y}:tail`,streamMetadata:(X,Y)=>`blob:${J(X)}:${Y}:meta`,budgetCharged:(X)=>`budget-charged:${X}`,toolEffect:(X,Y,_)=>`tool-effect:${J(X)}:${Y}:${_}`,workflowVisibilityStatus:(X,Y)=>`wf-idx-status:${J(X)}:${J(Y)}`,workflowVisibilityType:(X,Y)=>`wf-idx-type:${J(X)}:${J(Y)}`,workflowVisibilityCreated:(X,Y)=>`wf-idx-created:${H(X)}:${J(Y)}`,workflowVisibilityUpdated:(X,Y)=>`wf-idx-updated:${H(X)}:${J(Y)}`,workflowVisibilityDeadline:(X,Y)=>`wf-idx-deadline:${H(X)}:${J(Y)}`,workflowVisibilityManifest:(X)=>`wf-idx-manifest:${J(X)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"};function HX(X){if(X===void 0)return;if(typeof X!=="number"||!Number.isInteger(X)||X<0)throw Error("deleteRange limit must be a finite non-negative integer");return X===0?0:X}function Q(X){let Y={},_=!1;for(let $ of["gt","gte","lt","lte"]){let G=X[$];if(G===void 0)continue;if(typeof G!=="string")throw Error("deleteRange bounds must be strings");Y[$]=G,_=!0}if(!_)throw Error("deleteRange requires at least one of gt/gte/lt/lte; use deletePrefix to delete a whole prefix");let Z=HX(X.limit);if(Z!==void 0)Y.limit=Z;return Y}async function c(X,Y,_){let Z=Q(_);if(X.deleteRange)return X.deleteRange(Y,Z);return P(X,Y,Z)}function C(X){return X.replaceAll(/:+$/g,"")}function UX(X,Y){let _=C(X),Z=C(Y);if(_.length===0)return Z;if(Z.length===0)return _;return`${_}:${Z}`}class A{#X;#Y;constructor(X,Y){this.#X=X,this.#Y=C(Y)}#_(X){if(this.#Y.length===0)return X;return X.length===0?`${this.#Y}:`:`${this.#Y}:${X}`}#Z(X){return X.map((Y)=>{if(Y.type==="put")return{type:"put",key:this.#_(Y.key),value:Y.value};return{type:"delete",key:this.#_(Y.key)}})}#G(X){if(this.#Y.length===0)return X;return X.slice(this.#Y.length+1)}#$(X){let Y={};if(X.limit!==void 0)Y.limit=X.limit;if(X.gt!==void 0)Y.gt=this.#_(X.gt);if(X.gte!==void 0)Y.gte=this.#_(X.gte);if(X.lt!==void 0)Y.lt=this.#_(X.lt);if(X.lte!==void 0)Y.lte=this.#_(X.lte);return Y}#J(X={}){let Y=this.#$(X);if(X.reverse!==void 0)Y.reverse=X.reverse;return Y}#M(X){return this.#$(X)}capabilities(){return this.#X.capabilities()}scoped(X){return new A(this.#X,UX(this.#Y,X))}async get(X){return this.#X.get(this.#_(X))}async put(X,Y){await this.#X.put(this.#_(X),Y)}async delete(X){await this.#X.delete(this.#_(X))}async*scan(X,Y){for await(let[_,Z]of this.#X.scan(this.#_(X),this.#J(Y)))yield[this.#G(_),Z]}async batch(X){U("batch operations",X.length),await this.#X.batch(this.#Z(X))}async conditionalBatch(X,Y){return k(this.#X,X.map((_)=>({key:this.#_(_.key),expectedValue:_.expectedValue})),this.#Z(Y))}async has(X){return I(this.#X,this.#_(X))}async deletePrefix(X){return u(this.#X,this.#_(X))}async deleteRange(X,Y){let _=this.#M(Q(Y));return c(this.#X,this.#_(X),_)}async*keys(X,Y){for await(let _ of m(this.#X,this.#_(X),this.#J(Y)))yield this.#G(_)}async count(X){return g(this.#X,this.#_(X))}[Symbol.dispose](){this.#X[Symbol.dispose]()}}function w(X,Y){return new A(X,Y)}function f(X,Y){let _,Z,$=!1,G=()=>{if($)throw Error(`${Y.storageName} pool has been disposed and cannot be reused. Construct a new adapter.`);return _??=Y.loadPool(X).catch((M)=>{throw _=void 0,QX(M,Y)}),_};return{query:async(M,F)=>{return(await G()).query(M,F)},connect:async()=>{return(await G()).connect()},end:async()=>{return $=!0,Z??=(async()=>{if(_===void 0)return;await(await _.catch(()=>{return}))?.end()})(),Z}}}var VX=/cannot find module|module_not_found|failed to resolve|could not resolve/i;function QX(X,Y){let _=X instanceof Error?X.message:String(X);if(VX.test(_))return Error(`${Y.storageName} requires the optional peer dependency "${Y.driverName}". Install it in your application with: bun add ${Y.driverName} (or npm install ${Y.driverName}).`,{cause:X});return X instanceof Error?X:Error(_)}function K(X){return X.rowCount??X.affectedRows??X.rows.length}function j(X){if(X instanceof Uint8Array)return new Uint8Array(X);return new Uint8Array(X)}function B(X){return Buffer.from(X)}function N(X){let Y=new Map,_=new Set;for(let Z of X)if(Z.type==="put")_.delete(Z.key),Y.set(Z.key,Z.value);else Y.delete(Z.key),_.add(Z.key);return{puts:Y,deletes:_}}async function d(X,Y,_){if(_.length===0)return!0;let Z=_.map((M)=>M.key),$=await X.query(Y.selectValuesByKeys,[Z]),G=new Map;for(let M of $.rows){let F=M.value;if(F!==null&&F!==void 0)G.set(M.key,j(F))}for(let M of _){let F=G.get(M.key)??null;if(!y(F,M.expectedValue))return!1}return!0}async function S(X,Y,_){if(_.puts.size>0){let Z=[],$=[];for(let[G,M]of _.puts)Z.push(G),$.push(B(M));await X.query(Y.upsertValuesByKeys,[Z,$])}if(_.deletes.size>0)await X.query(Y.deleteValuesByKeys,[[..._.deletes]])}var p=/^[a-z_][a-z0-9_]*$/i;function l(X,Y,_){if(!p.test(X))throw Error(`${_} storage ${Y} name "${X}" is not a valid ${_} identifier. Use only letters, digits, and underscores, starting with a letter or underscore (matching ${p.source}).`)}var a="kv";function z(X,Y){l(X,Y,"Postgres")}function n(X){let{schema:Y,table:_}=X;if(Y===void 0&&_===void 0)return a;let Z=_??a;if(z(Z,"table"),Y===void 0)return`"${Z}"`;return z(Y,"schema"),`"${Y}"."${Z}"`}function W(X){return[X,x(X)]}function i(X,Y){let{gt:_,gte:Z,lt:$,lte:G}=Y,M=W(X),F=["key >= $1 AND key < $2"];if(_!==void 0)M.push(_),F.push(`key > $${M.length}`);if(Z!==void 0)M.push(Z),F.push(`key >= $${M.length}`);if($!==void 0)M.push($),F.push(`key < $${M.length}`);if(G!==void 0)M.push(G),F.push(`key <= $${M.length}`);return{conditions:F,parameters:M}}function s(X,Y={}){let{limit:_,reverse:Z}=Y,{conditions:$,parameters:G}=i(X,Y),M=Z?"DESC":"ASC",F="";if(_!==void 0)G.push(_),F=` LIMIT $${G.length}`;return{parameters:G,whereOrderLimit:`WHERE ${$.join(" AND ")} ORDER BY key ${M}${F}`}}function t(X){let Y=`CREATE TABLE IF NOT EXISTS ${X} (
2
+ var $X=import.meta.require;function E(X,Y,_){if(!X.capabilities()[Y])throw Error(`Feature "${_}" requires storage capability "${Y}", but this storage backend does not provide it.`)}function MX(X){let Y=X.capabilities(),_=[];if(Y.persistence!=="local"&&Y.persistence!=="remote")_.push(`persistence must be "local" or "remote" (got "${Y.persistence}")`);if(Y.readAfterWrite!=="linearizable")_.push(`readAfterWrite must be "linearizable" (got "${Y.readAfterWrite}")`);if(Y.scanConsistency!=="snapshot")_.push(`scanConsistency must be "snapshot" (got "${Y.scanConsistency}")`);if(!Y.atomicBatch)_.push("atomicBatch must be true");if(!Y.conditionalBatch)_.push("conditionalBatch must be true");if(_.length>0)throw Error(`Storage is not durable enough for recovery: ${_.join("; ")}.`)}var L="default";async function R(X,Y){return await X.get(Y)!==null}async function*V(X,Y,_){for await(let[J]of X.scan(Y,_))yield J}async function q(X,Y){let _=0;for await(let J of V(X,Y))_++;return _}async function v(X,Y){let _=[];for await(let J of V(X,Y))_.push({type:"delete",key:J});if(_.length===0)return 0;return await X.batch(_),_.length}async function P(X,Y,_){let J=[];for await(let M of V(X,Y,_))J.push({type:"delete",key:M});if(J.length===0)return 0;return await X.batch(J),J.length}function Z(X){return encodeURIComponent(X)}function FX(X){return decodeURIComponent(X)}function GX(X){try{return decodeURIComponent(X)}catch{return null}}var b={workflowOwnerEpoch:(X)=>`wf-owner-epoch:${Z(X)}`,workflowOwnerHolder:(X)=>`wf-owner-holder:${Z(X)}`,ownershipModeMarker:()=>"ownership-mode-marker"};var HX=["actrec:","archive:","async-act:","attr:","audit:bulk:","blob:","budget:","budget-charged:","child-by-parent:","ev:","fleet-event-by-workflow:","fleet-event:","fleet-event-tail","idx:","lease:","liveness:","offload:","ownership-mode-marker","op:","review:","schedule:","schedule-due:","schedule-run-by-schedule:","schedule-run-link:","schedule-run:","sig:","sigres:","sigseq:","start-idem:","state:","tag:","tool-effect:","upd:","upk:","upr:","wf:","wf-cleanup:","wf-cleanup-needed:","wf-concurrency:","wf-concurrency-holder:","wf-deadline:","wf-delayed:","wf-finalizer-state:","wf-has-services:","wf-headers:","wf-idx-","wf-owner-epoch:","wf-owner-holder:","wf-teardown:","wf-teardown-deadletter:","wf-teardown-needed:","wf-teardown-succeeded:","wf-terminal:"];var D=1e4,kX=1e4;class x extends Error{code="StorageBatchOperationLimitExceededError";cap=D;count;target;constructor(X,Y){super(`${X} count ${Y} exceeds MAX_BATCH_OPERATIONS (${D}).`);this.name="StorageBatchOperationLimitExceededError",this.target=X,this.count=Y}}function U(X,Y){if(Y>D)throw new x(X,Y)}function y(X){return X.length>0?X.slice(0,-1)+String.fromCharCode(X.charCodeAt(X.length-1)+1):"\xFF"}function cX(X,Y={}){if(Y.gt!==void 0&&X<=Y.gt)return!1;if(Y.gte!==void 0&&X<Y.gte)return!1;if(Y.lt!==void 0&&X>=Y.lt)return!1;if(Y.lte!==void 0&&X>Y.lte)return!1;return!0}function I(X,Y){if(X===null||Y===null)return X===Y;if(X.byteLength!==Y.byteLength)return!1;for(let _=0;_<X.byteLength;_++)if(X[_]!==Y[_])return!1;return!0}async function m(X,Y){if(X.has)return X.has(Y);return R(X,Y)}function g(X,Y,_){if(X.keys)return X.keys(Y,_);return V(X,Y,_)}async function u(X,Y){if(X.count)return X.count(Y);return q(X,Y)}async function k(X,Y){if(X.deletePrefix)return X.deletePrefix(Y);return v(X,Y)}async function wX(X,Y){U("batch operations",Y.length),await X.batch(Y)}async function c(X,Y,_){if(U("conditionalBatch conditions",Y.length),U("conditionalBatch operations",_.length),E(X,"conditionalBatch","storageConditionalBatch"),!X.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return X.conditionalBatch(Y,_)}var H=(X)=>String(X).padStart(16,"0"),UX="0",VX="1",h=(X,Y,_,J)=>`sig:${Z(X)}:${Z(Y)}:${J}:${Z(_)}`,fX={workflow:(X)=>`wf:${Z(X)}`,checkpoint:(X)=>`wf:${Z(X)}:ckpt`,checkpointHistory:(X,Y)=>`wf:${Z(X)}:ckpt:${String(Y).padStart(10,"0")}`,timelinePrefix:(X)=>`wf:${Z(X)}:timeline:`,timeline:(X,Y)=>`wf:${Z(X)}:timeline:${String(Y).padStart(10,"0")}`,schedule:(X)=>`schedule:${Z(X)}`,scheduleTick:(X,Y)=>`schedule-due:${String(X).padStart(16,"0")}:${Z(Y)}`,scheduleRun:(X)=>`schedule-run:${Z(X)}`,scheduleRunLink:(X)=>`schedule-run-link:${Z(X)}`,scheduleRunBySchedulePrefix:(X)=>`schedule-run-by-schedule:${Z(X)}:`,scheduleRunBySchedule:(X,Y)=>`schedule-run-by-schedule:${Z(X)}:${Z(Y)}`,operation:(X,Y,_)=>`op:${X}:${H(Y)}:${_}`,operationInflight:(X)=>`op:inflight:${X}`,operationQueued:(X)=>`op:queued:${X}`,operationResolved:(X)=>`op:resolved:${X}`,bulkOperationAuditPrefix:()=>"audit:bulk:",bulkOperationAudit:(X,Y,_)=>`audit:bulk:${H(X)}:${Z(Y)}:${Z(_)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(X,Y)=>`op:resolved-by-time:${H(X)}:${Z(Y)}`,asyncActivity:(X,Y)=>`async-act:v1:${Z(X)}:${Z(Y)}`,asyncActivityResolution:(X,Y)=>`async-act:v1:${Z(X)}:${Z(Y)}:resolution`,activityReconciliationPrefix:(X)=>`actrec:v1:${Z(X)}:`,activityReconciliation:(X,Y,_)=>`actrec:v1:${Z(X)}:${Z(Y)}:${_}`,eventPrefix:(X)=>`ev:${Z(X)}:`,event:(X,Y)=>`ev:${Z(X)}:${String(Y).padStart(10,"0")}`,eventHead:(X)=>`ev:${Z(X)}:head`,eventWatermark:(X)=>`ev:${Z(X)}:watermark`,fleetEventPrefix:()=>"fleet-event:",fleetEvent:(X)=>`fleet-event:${String(X).padStart(10,"0")}`,fleetEventTail:()=>"fleet-event-tail",fleetEventByWorkflowPrefix:(X)=>`fleet-event-by-workflow:${Z(X)}:`,fleetEventByWorkflow:(X,Y)=>`fleet-event-by-workflow:${Z(X)}:${String(Y).padStart(10,"0")}`,signal:(X,Y,_)=>h(X,Y,_,VX),startSignal:(X,Y,_)=>h(X,Y,_,UX),signalSequence:(X)=>`sigseq:v1:${Z(X)}`,signalAcceptedResponsePrefix:(X)=>`sigres:v1:${Z(X)}:`,signalAcceptedResponse:(X,Y,_)=>`sigres:v1:${Z(X)}:${Z(Y)}:${Z(_)}`,deadline:(X,Y)=>`wf-deadline:${H(X)}:${Z(Y)}`,terminalCleanup:(X,Y)=>`wf-cleanup:${H(X)}:${Z(Y)}`,teardownTimer:(X,Y)=>`wf-teardown:${H(X)}:${Z(Y)}`,delayedStart:(X,Y)=>`wf-delayed:${H(X)}:${Z(Y)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(X,Y)=>`wf-terminal:${H(X)}:${Z(Y)}`,attribute:(X)=>`attr:${Z(X)}`,attributeIndex:(X,Y,_)=>`idx:${X}:${Y}:${Z(_)}`,tagIndex:(X,Y)=>`tag:${Z(X)}:${Z(Y)}`,updatePrefix:(X)=>`upd:${Z(X)}:`,update:(X,Y)=>`upd:${Z(X)}:${Y}`,updateResponse:(X)=>`upr:${X}`,updateIdempotency:(X,Y)=>`upk:${Z(X)}:${Y}`,startIdempotency:(X)=>`start-idem:${Z(X)}`,startIdempotencySignalId:(X)=>`start-idem:${X}`,livenessPrefix:()=>"liveness:",liveness:(X)=>`liveness:${Z(X)}`,leasePrefix:()=>"lease:",leaseEpoch:()=>"lease:epoch",leaseHolder:()=>"lease:holder",...b,budget:(X,Y,_)=>`budget:${X}:${Y}:${_}`,review:(X,Y)=>`review:${Z(X)}:${Y}`,workflowHeaders:(X)=>`wf-headers:${Z(X)}`,childCancellationPrefix:(X)=>`child-cancel:${Z(X)}:`,childCancellation:(X,Y)=>`child-cancel:${Z(X)}:${Z(Y)}`,childWorkflowByParentPrefix:(X,Y)=>`child-by-parent:${Z(X)}:${Y===void 0?"":`${Z(Y)}:`}`,childWorkflowByParent:(X,Y,_)=>`child-by-parent:${Z(X)}:${Y===void 0?"":`${Z(Y)}:`}${Z(_)}`,terminalCleanupNeeded:(X)=>`wf-cleanup-needed:${Z(X)}`,workflowConcurrency:(X,Y)=>`wf-concurrency:${Z(X)}:${Z(Y)}`,workflowConcurrencyHolder:(X)=>`wf-concurrency-holder:${Z(X)}`,workflowHasServices:(X)=>`wf-has-services:${Z(X)}`,finalizerState:(X)=>`wf-finalizer-state:${Z(X)}`,teardownOwed:(X)=>`wf-teardown-needed:${Z(X)}`,teardownSucceeded:(X)=>`wf-teardown-succeeded:${Z(X)}`,teardownDeadLetter:(X)=>`wf-teardown-deadletter:${Z(X)}`,offload:(X,Y)=>`offload:${Z(X)}:${Y}`,archive:(X,Y)=>`archive:${Z(X)}:${Y}`,stateExecution:(X,Y)=>`state:execution:${Z(X)}:${Z(Y)}`,stateWorkflow:(X,Y)=>`state:workflow-scope:${L}:${Z(X)}:${Z(Y)}`,streamChunkPrefix:(X,Y)=>`blob:${Z(X)}:${Y}:chunk:`,streamChunk:(X,Y,_)=>`blob:${Z(X)}:${Y}:chunk:${String(_).padStart(10,"0")}`,streamTail:(X,Y)=>`blob:${Z(X)}:${Y}:tail`,streamMetadata:(X,Y)=>`blob:${Z(X)}:${Y}:meta`,budgetCharged:(X)=>`budget-charged:${X}`,toolEffect:(X,Y,_)=>`tool-effect:${Z(X)}:${Y}:${_}`,workflowVisibilityStatus:(X,Y)=>`wf-idx-status:${Z(X)}:${Z(Y)}`,workflowVisibilityType:(X,Y)=>`wf-idx-type:${Z(X)}:${Z(Y)}`,workflowVisibilityCreated:(X,Y)=>`wf-idx-created:${H(X)}:${Z(Y)}`,workflowVisibilityUpdated:(X,Y)=>`wf-idx-updated:${H(X)}:${Z(Y)}`,workflowVisibilityDeadline:(X,Y)=>`wf-idx-deadline:${H(X)}:${Z(Y)}`,workflowVisibilityManifest:(X)=>`wf-idx-manifest:${Z(X)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"};function QX(X){if(X===void 0)return;if(typeof X!=="number"||!Number.isInteger(X)||X<0)throw Error("deleteRange limit must be a finite non-negative integer");return X===0?0:X}function Q(X){let Y={},_=!1;for(let M of["gt","gte","lt","lte"]){let $=X[M];if($===void 0)continue;if(typeof $!=="string")throw Error("deleteRange bounds must be strings");Y[M]=$,_=!0}if(!_)throw Error("deleteRange requires at least one of gt/gte/lt/lte; use deletePrefix to delete a whole prefix");let J=QX(X.limit);if(J!==void 0)Y.limit=J;return Y}async function w(X,Y,_){let J=Q(_);if(X.deleteRange)return X.deleteRange(Y,J);return P(X,Y,J)}function A(X){return X.replaceAll(/:+$/g,"")}function jX(X,Y){let _=A(X),J=A(Y);if(_.length===0)return J;if(J.length===0)return _;return`${_}:${J}`}class C{#X;#Y;constructor(X,Y){this.#X=X,this.#Y=A(Y)}#_(X){if(this.#Y.length===0)return X;return X.length===0?`${this.#Y}:`:`${this.#Y}:${X}`}#J(X){return X.map((Y)=>{if(Y.type==="put")return{type:"put",key:this.#_(Y.key),value:Y.value};return{type:"delete",key:this.#_(Y.key)}})}#$(X){if(this.#Y.length===0)return X;return X.slice(this.#Y.length+1)}#M(X){let Y={};if(X.limit!==void 0)Y.limit=X.limit;if(X.gt!==void 0)Y.gt=this.#_(X.gt);if(X.gte!==void 0)Y.gte=this.#_(X.gte);if(X.lt!==void 0)Y.lt=this.#_(X.lt);if(X.lte!==void 0)Y.lte=this.#_(X.lte);return Y}#Z(X={}){let Y=this.#M(X);if(X.reverse!==void 0)Y.reverse=X.reverse;return Y}#F(X){return this.#M(X)}capabilities(){return this.#X.capabilities()}scoped(X){return new C(this.#X,jX(this.#Y,X))}async get(X){return this.#X.get(this.#_(X))}async put(X,Y){await this.#X.put(this.#_(X),Y)}async delete(X){await this.#X.delete(this.#_(X))}async*scan(X,Y){for await(let[_,J]of this.#X.scan(this.#_(X),this.#Z(Y)))yield[this.#$(_),J]}async batch(X){U("batch operations",X.length),await this.#X.batch(this.#J(X))}async conditionalBatch(X,Y){return c(this.#X,X.map((_)=>({key:this.#_(_.key),expectedValue:_.expectedValue})),this.#J(Y))}async has(X){return m(this.#X,this.#_(X))}async deletePrefix(X){return k(this.#X,this.#_(X))}async deleteRange(X,Y){let _=this.#F(Q(Y));return w(this.#X,this.#_(X),_)}async*keys(X,Y){for await(let _ of g(this.#X,this.#_(X),this.#Z(Y)))yield this.#$(_)}async count(X){return u(this.#X,this.#_(X))}[Symbol.dispose](){this.#X[Symbol.dispose]()}}function f(X,Y){return new C(X,Y)}function d(X,Y){let _,J,M=!1,$=()=>{if(M)throw Error(`${Y.storageName} pool has been disposed and cannot be reused. Construct a new adapter.`);return _??=Y.loadPool(X).catch((F)=>{throw _=void 0,WX(F,Y)}),_};return{query:async(F,G)=>{return(await $()).query(F,G)},connect:async()=>{return(await $()).connect()},end:async()=>{return M=!0,J??=(async()=>{if(_===void 0)return;await(await _.catch(()=>{return}))?.end()})(),J}}}var BX=/cannot find module|module_not_found|failed to resolve|could not resolve/i;function WX(X,Y){let _=X instanceof Error?X.message:String(X);if(BX.test(_))return Error(`${Y.storageName} requires the optional peer dependency "${Y.driverName}". Install it in your application with: bun add ${Y.driverName} (or npm install ${Y.driverName}).`,{cause:X});return X instanceof Error?X:Error(_)}function N(X){return X.rowCount??X.affectedRows??X.rows.length}function j(X){if(X instanceof Uint8Array)return new Uint8Array(X);return new Uint8Array(X)}function B(X){return Buffer.from(X)}function K(X){let Y=new Map,_=new Set;for(let J of X)if(J.type==="put")_.delete(J.key),Y.set(J.key,J.value);else Y.delete(J.key),_.add(J.key);return{puts:Y,deletes:_}}async function p(X,Y,_){if(_.length===0)return!0;let J=_.map((F)=>F.key),M=await X.query(Y.selectValuesByKeys,[J]),$=new Map;for(let F of M.rows){let G=F.value;if(G!==null&&G!==void 0)$.set(F.key,j(G))}for(let F of _){let G=$.get(F.key)??null;if(!I(G,F.expectedValue))return!1}return!0}async function z(X,Y,_){if(_.puts.size>0){let J=[],M=[];for(let[$,F]of _.puts)J.push($),M.push(B(F));await X.query(Y.upsertValuesByKeys,[J,M])}if(_.deletes.size>0)await X.query(Y.deleteValuesByKeys,[[..._.deletes]])}var l=/^[a-z_][a-z0-9_]*$/i;function a(X,Y,_){if(!l.test(X))throw Error(`${_} storage ${Y} name "${X}" is not a valid ${_} identifier. Use only letters, digits, and underscores, starting with a letter or underscore (matching ${l.source}).`)}var s="kv";function O(X,Y){a(X,Y,"Postgres")}function i(X){let{schema:Y,table:_}=X;if(Y===void 0&&_===void 0)return s;let J=_??s;if(O(J,"table"),Y===void 0)return`"${J}"`;return O(Y,"schema"),`"${Y}"."${J}"`}function W(X){return[X,y(X)]}function r(X,Y){let{gt:_,gte:J,lt:M,lte:$}=Y,F=W(X),G=["key >= $1 AND key < $2"];if(_!==void 0)F.push(_),G.push(`key > $${F.length}`);if(J!==void 0)F.push(J),G.push(`key >= $${F.length}`);if(M!==void 0)F.push(M),G.push(`key < $${F.length}`);if($!==void 0)F.push($),G.push(`key <= $${F.length}`);return{conditions:G,parameters:F}}function n(X,Y={}){let{limit:_,reverse:J}=Y,{conditions:M,parameters:$}=r(X,Y),F=J?"DESC":"ASC",G="";if(_!==void 0)$.push(_),G=` LIMIT $${$.length}`;return{parameters:$,whereOrderLimit:`WHERE ${M.join(" AND ")} ORDER BY key ${F}${G}`}}function t(X){let Y=`CREATE TABLE IF NOT EXISTS ${X} (
3
3
  key TEXT COLLATE "C" PRIMARY KEY,
4
4
  value BYTEA NOT NULL
5
5
  )`,_=`
@@ -12,4 +12,4 @@ var ZX=import.meta.require,SX=(X,Y,_)=>{if(Y!=null){if(typeof Y!=="object"&&type
12
12
  FROM pg_attribute a
13
13
  LEFT JOIN pg_collation co ON co.oid = a.attcollation
14
14
  WHERE a.attrelid = to_regclass($1) AND a.attname = 'key' AND a.attnum > 0
15
- `,selectValueByKey:`SELECT value FROM ${X} WHERE key = $1`,upsertValueByKey:`INSERT INTO ${X} (key, value) VALUES ($1, $2) ON CONFLICT (key) DO UPDATE SET value = EXCLUDED.value`,deleteValueByKey:`DELETE FROM ${X} WHERE key = $1`,selectKeyPresence:`SELECT 1 AS present FROM ${X} WHERE key = $1 LIMIT 1`,countKeysByPrefix:`SELECT COUNT(*) AS count FROM ${X} WHERE key >= $1 AND key < $2`,deleteKeysByPrefix:`DELETE FROM ${X} WHERE key >= $1 AND key < $2`,selectValuesByKeys:`SELECT key, value FROM ${X} WHERE key = ANY($1)`,upsertValuesByKeys:`INSERT INTO ${X} (key, value) SELECT * FROM unnest($1::text[], $2::bytea[]) ON CONFLICT (key) DO UPDATE SET value = EXCLUDED.value`,deleteValuesByKeys:`DELETE FROM ${X} WHERE key = ANY($1)`,keyValueRangeSelect(Z,$={}){let{parameters:G,whereOrderLimit:M}=s(Z,$);return{parameters:G,sql:`SELECT key, value FROM ${X} ${M}`}},keyRangeSelect(Z,$={}){let{parameters:G,whereOrderLimit:M}=s(Z,$);return{parameters:G,sql:`SELECT key FROM ${X} ${M}`}},keyRangeDelete(Z,$){let{conditions:G,parameters:M}=i(Z,$),F=G.join(" AND ");if($.limit===void 0)return{parameters:M,sql:`DELETE FROM ${X} WHERE ${F}`};return M.push($.limit),{parameters:M,sql:`DELETE FROM ${X} WHERE key IN (SELECT key FROM ${X} WHERE ${F} ORDER BY key ASC LIMIT $${M.length})`}}}}var r="BEGIN ISOLATION LEVEL SERIALIZABLE",o="BEGIN ISOLATION LEVEL READ COMMITTED",e="BEGIN READ ONLY",XX="COMMIT",O="ROLLBACK";function YX(X){return z(X,"schema"),`CREATE SCHEMA IF NOT EXISTS "${X}"`}var jX=/^PRAGMA\b/iu,BX=/^PRAGMA\s+(?:[A-Z_][A-Z0-9_]*\.)?[A-Z_][A-Z0-9_]*\s*$/iu,WX=/^SELECT\b/iu;function EX(X){return X.trim().replace(/;+\s*$/u,"").trim()}function LX(X){return BX.test(X)}function _X(X){let Y=EX(X);if(Y.length===0)throw Error("Storage query must not be empty.");if(Y.includes(";"))throw Error("Storage query must contain exactly one read-only statement.");if(WX.test(Y))return;if(jX.test(Y)&&LX(Y))return;throw Error("Storage query only supports read-only SELECT and PRAGMA statements.")}var DX=new Set(["40001","40P01"]),JX=5;function CX(X){if(typeof X!=="object"||X===null||!("code"in X))return!1;let Y=X.code;return typeof Y==="string"&&DX.has(Y)}class T{#X;#Y;#_;#Z;#G;#$;constructor(X,Y){if(this.#G=X.pool===void 0,X.pool===void 0){if(X.url===void 0)throw Error("PostgresKeyValueStorage requires either a `url` to build a pool from, or a pre-built `pool`; neither was provided.");this.#X=Y(X.url)}else this.#X=X.pool;this.#_=X.schema;let _=n({schema:X.schema,table:X.table});this.#Y=t(_)}capabilities(){return{persistence:"remote",readAfterWrite:"linearizable",scanConsistency:"snapshot",atomicBatch:!0,conditionalBatch:!0,boundedRangeDelete:!0}}#J(){return this.#Z??=this.#M().catch((X)=>{throw this.#Z=void 0,X}),this.#Z}async#M(){if(this.#_!==void 0)await this.#X.query(YX(this.#_));await this.#X.query(this.#Y.createTable),await this.#U()}async#U(){let Y=(await this.#X.query(this.#Y.selectKeyCollation,[this.#Y.tableReference])).rows[0]?.collation;if(Y==="C")return;let _=Y===void 0?"no such table":typeof Y==="string"?`"${Y}"`:"an unexpected collation value";throw Error(`Postgres storage requires the ${this.#Y.tableReference} table's "key" column to use COLLATE "C" (found ${_}). A table created without COLLATE "C" sorts keys by the database locale, which breaks Weft's lexicographic prefix scans. Use a fresh table, or recreate it as: CREATE TABLE ${this.#Y.tableReference} (key TEXT COLLATE "C" PRIMARY KEY, value BYTEA NOT NULL).`)}async get(X){await this.#J();let _=(await this.#X.query(this.#Y.selectValueByKey,[X])).rows[0];if(_===void 0)return null;let Z=_.value;if(Z===null||Z===void 0)return null;return j(Z)}async put(X,Y){await this.#J(),await this.#X.query(this.#Y.upsertValueByKey,[X,B(Y)])}async delete(X){await this.#J(),await this.#X.query(this.#Y.deleteValueByKey,[X])}async has(X){return await this.#J(),(await this.#X.query(this.#Y.selectKeyPresence,[X])).rows.length>0}async deletePrefix(X){await this.#J();let[Y,_]=W(X),Z=await this.#X.query(this.#Y.deleteKeysByPrefix,[Y,_]);return K(Z)}async deleteRange(X,Y){await this.#J();let _=Q(Y),{parameters:Z,sql:$}=this.#Y.keyRangeDelete(X,_),G=await this.#X.query($,Z);return K(G)}async*scan(X,Y={}){await this.#J();let{parameters:_,sql:Z}=this.#Y.keyValueRangeSelect(X,Y),$=await this.#X.query(Z,_);for(let G of $.rows)yield[G.key,j(G.value)]}async*keys(X,Y={}){await this.#J();let{parameters:_,sql:Z}=this.#Y.keyRangeSelect(X,Y),$=await this.#X.query(Z,_);for(let G of $.rows)yield G.key}async count(X){await this.#J();let[Y,_]=W(X),Z=await this.#X.query(this.#Y.countKeysByPrefix,[Y,_]);return Number(Z.rows[0]?.count??0)}scoped(X){return w(this,X)}async#F(X,Y,_=()=>!0){let Z=await this.#X.connect();try{await Z.query(X);try{let $=await Y(Z);return await Z.query(_($)?XX:O),$}catch($){throw await Z.query(O).catch(()=>{}),$}}finally{Z.release()}}async batch(X){if(U("batch operations",X.length),X.length===0)return;await this.#J(),await this.#F(o,async(Y)=>{await S(Y,this.#Y,N(X))})}async conditionalBatch(X,Y){U("conditionalBatch conditions",X.length),U("conditionalBatch operations",Y.length),await this.#J();let _=N(Y),Z;for(let $=0;$<JX;$+=1)try{return await this.#F(r,async(G)=>{if(!await d(G,this.#Y,X))return!1;return await S(G,this.#Y,_),!0},(G)=>G)}catch(G){if(!CX(G))throw G;Z=G}throw Error(`conditionalBatch exhausted ${JX} attempts after retryable transaction failures`,{cause:Z})}async query(X,Y){return await this.#J(),_X(X),this.#F(e,async(_)=>{return(await _.query(X,Y??[])).rows})}#H(){if(!this.#G)return Promise.resolve();return this.#$??=this.#X.end(),this.#$}[Symbol.dispose](){this.#H().catch(()=>{})}async[Symbol.asyncDispose](){await this.#H()}}function AX(X){return f(X,{driverName:"@neondatabase/serverless",storageName:"NeonStorage",loadPool:(Y)=>import("@neondatabase/serverless").then(({Pool:_})=>new _({connectionString:Y}))})}class KX extends T{constructor(X,Y=AX){super(X,Y)}}export{KX as NeonStorage};
15
+ `,selectValueByKey:`SELECT value FROM ${X} WHERE key = $1`,upsertValueByKey:`INSERT INTO ${X} (key, value) VALUES ($1, $2) ON CONFLICT (key) DO UPDATE SET value = EXCLUDED.value`,deleteValueByKey:`DELETE FROM ${X} WHERE key = $1`,selectKeyPresence:`SELECT 1 AS present FROM ${X} WHERE key = $1 LIMIT 1`,countKeysByPrefix:`SELECT COUNT(*) AS count FROM ${X} WHERE key >= $1 AND key < $2`,deleteKeysByPrefix:`DELETE FROM ${X} WHERE key >= $1 AND key < $2`,selectValuesByKeys:`SELECT key, value FROM ${X} WHERE key = ANY($1)`,upsertValuesByKeys:`INSERT INTO ${X} (key, value) SELECT * FROM unnest($1::text[], $2::bytea[]) ON CONFLICT (key) DO UPDATE SET value = EXCLUDED.value`,deleteValuesByKeys:`DELETE FROM ${X} WHERE key = ANY($1)`,keyValueRangeSelect(J,M={}){let{parameters:$,whereOrderLimit:F}=n(J,M);return{parameters:$,sql:`SELECT key, value FROM ${X} ${F}`}},keyRangeSelect(J,M={}){let{parameters:$,whereOrderLimit:F}=n(J,M);return{parameters:$,sql:`SELECT key FROM ${X} ${F}`}},keyRangeDelete(J,M){let{conditions:$,parameters:F}=r(J,M),G=$.join(" AND ");if(M.limit===void 0)return{parameters:F,sql:`DELETE FROM ${X} WHERE ${G}`};return F.push(M.limit),{parameters:F,sql:`DELETE FROM ${X} WHERE key IN (SELECT key FROM ${X} WHERE ${G} ORDER BY key ASC LIMIT $${F.length})`}}}}var o="BEGIN ISOLATION LEVEL SERIALIZABLE",e="BEGIN ISOLATION LEVEL READ COMMITTED",XX="BEGIN READ ONLY",YX="COMMIT",S="ROLLBACK";function _X(X){return O(X,"schema"),`CREATE SCHEMA IF NOT EXISTS "${X}"`}var EX=/^PRAGMA\b/iu,LX=/^PRAGMA\s+(?:[A-Z_][A-Z0-9_]*\.)?[A-Z_][A-Z0-9_]*\s*$/iu,DX=/^SELECT\b/iu;function AX(X){return X.trim().replace(/;+\s*$/u,"").trim()}function CX(X){return LX.test(X)}function ZX(X){let Y=AX(X);if(Y.length===0)throw Error("Storage query must not be empty.");if(Y.includes(";"))throw Error("Storage query must contain exactly one read-only statement.");if(DX.test(Y))return;if(EX.test(Y)&&CX(Y))return;throw Error("Storage query only supports read-only SELECT and PRAGMA statements.")}var NX=new Set(["40001","40P01"]),JX=5;function KX(X){if(typeof X!=="object"||X===null||!("code"in X))return!1;let Y=X.code;return typeof Y==="string"&&NX.has(Y)}class T{#X;#Y;#_;#J;#$;#M;constructor(X,Y){if(this.#$=X.pool===void 0,X.pool===void 0){if(X.url===void 0)throw Error("PostgresKeyValueStorage requires either a `url` to build a pool from, or a pre-built `pool`; neither was provided.");this.#X=Y(X.url)}else this.#X=X.pool;this.#_=X.schema;let _=i({schema:X.schema,table:X.table});this.#Y=t(_)}capabilities(){return{persistence:"remote",readAfterWrite:"linearizable",scanConsistency:"snapshot",atomicBatch:!0,conditionalBatch:!0,boundedRangeDelete:!0}}#Z(){return this.#J??=this.#F().catch((X)=>{throw this.#J=void 0,X}),this.#J}async#F(){if(this.#_!==void 0)await this.#X.query(_X(this.#_));await this.#X.query(this.#Y.createTable),await this.#U()}async#U(){let Y=(await this.#X.query(this.#Y.selectKeyCollation,[this.#Y.tableReference])).rows[0]?.collation;if(Y==="C")return;let _=Y===void 0?"no such table":typeof Y==="string"?`"${Y}"`:"an unexpected collation value";throw Error(`Postgres storage requires the ${this.#Y.tableReference} table's "key" column to use COLLATE "C" (found ${_}). A table created without COLLATE "C" sorts keys by the database locale, which breaks Weft's lexicographic prefix scans. Use a fresh table, or recreate it as: CREATE TABLE ${this.#Y.tableReference} (key TEXT COLLATE "C" PRIMARY KEY, value BYTEA NOT NULL).`)}async get(X){await this.#Z();let _=(await this.#X.query(this.#Y.selectValueByKey,[X])).rows[0];if(_===void 0)return null;let J=_.value;if(J===null||J===void 0)return null;return j(J)}async put(X,Y){await this.#Z(),await this.#X.query(this.#Y.upsertValueByKey,[X,B(Y)])}async delete(X){await this.#Z(),await this.#X.query(this.#Y.deleteValueByKey,[X])}async has(X){return await this.#Z(),(await this.#X.query(this.#Y.selectKeyPresence,[X])).rows.length>0}async deletePrefix(X){await this.#Z();let[Y,_]=W(X),J=await this.#X.query(this.#Y.deleteKeysByPrefix,[Y,_]);return N(J)}async deleteRange(X,Y){await this.#Z();let _=Q(Y),{parameters:J,sql:M}=this.#Y.keyRangeDelete(X,_),$=await this.#X.query(M,J);return N($)}async*scan(X,Y={}){await this.#Z();let{parameters:_,sql:J}=this.#Y.keyValueRangeSelect(X,Y),M=await this.#X.query(J,_);for(let $ of M.rows)yield[$.key,j($.value)]}async*keys(X,Y={}){await this.#Z();let{parameters:_,sql:J}=this.#Y.keyRangeSelect(X,Y),M=await this.#X.query(J,_);for(let $ of M.rows)yield $.key}async count(X){await this.#Z();let[Y,_]=W(X),J=await this.#X.query(this.#Y.countKeysByPrefix,[Y,_]);return Number(J.rows[0]?.count??0)}scoped(X){return f(this,X)}async#G(X,Y,_=()=>!0){let J=await this.#X.connect();try{await J.query(X);try{let M=await Y(J);return await J.query(_(M)?YX:S),M}catch(M){throw await J.query(S).catch(()=>{}),M}}finally{J.release()}}async batch(X){if(U("batch operations",X.length),X.length===0)return;await this.#Z(),await this.#G(e,async(Y)=>{await z(Y,this.#Y,K(X))})}async conditionalBatch(X,Y){U("conditionalBatch conditions",X.length),U("conditionalBatch operations",Y.length),await this.#Z();let _=K(Y),J;for(let M=0;M<JX;M+=1)try{return await this.#G(o,async($)=>{if(!await p($,this.#Y,X))return!1;return await z($,this.#Y,_),!0},($)=>$)}catch($){if(!KX($))throw $;J=$}throw Error(`conditionalBatch exhausted ${JX} attempts after retryable transaction failures`,{cause:J})}async query(X,Y){return await this.#Z(),ZX(X),this.#G(XX,async(_)=>{return(await _.query(X,Y??[])).rows})}#H(){if(!this.#$)return Promise.resolve();return this.#M??=this.#X.end(),this.#M}[Symbol.dispose](){this.#H().catch(()=>{})}async[Symbol.asyncDispose](){await this.#H()}}function zX(X){return d(X,{driverName:"@neondatabase/serverless",storageName:"NeonStorage",loadPool:(Y)=>import("@neondatabase/serverless").then(({Pool:_})=>new _({connectionString:Y}))})}class OX extends T{constructor(X,Y=zX){super(X,Y)}}export{OX as NeonStorage};
@@ -6,6 +6,9 @@ function requireStorageCapability(storage, capability, featureName) {
6
6
  }
7
7
  }
8
8
 
9
+ // src/storage/default-scope.ts
10
+ var DEFAULT_SCOPE = "default";
11
+
9
12
  // src/storage/derived-operations.ts
10
13
  async function storageHasCore(storage, key) {
11
14
  return await storage.get(key) !== null;
@@ -45,6 +48,18 @@ async function storageDeleteRangeCore(storage, prefix, options) {
45
48
  return operations.length;
46
49
  }
47
50
 
51
+ // src/storage/key-encoding.ts
52
+ function encodeStorageKeyComponent(value) {
53
+ return encodeURIComponent(value);
54
+ }
55
+
56
+ // src/storage/ownership-keys.ts
57
+ var OWNERSHIP_CLAIM_KEYS = {
58
+ workflowOwnerEpoch: (workflowId) => `wf-owner-epoch:${encodeStorageKeyComponent(workflowId)}`,
59
+ workflowOwnerHolder: (workflowId) => `wf-owner-holder:${encodeStorageKeyComponent(workflowId)}`,
60
+ ownershipModeMarker: () => "ownership-mode-marker"
61
+ };
62
+
48
63
  // src/storage/interface.ts
49
64
  var MAX_BATCH_OPERATIONS = 1e4;
50
65
  class StorageBatchOperationLimitExceededError extends Error {
@@ -114,6 +129,104 @@ async function storageConditionalBatch(storage, conditions, operations) {
114
129
  }
115
130
  return storage.conditionalBatch(conditions, operations);
116
131
  }
132
+ var formatSortableTimestamp = (timestamp) => String(timestamp).padStart(16, "0");
133
+ var SIGNAL_SORT_CLASS_START = "0";
134
+ var SIGNAL_SORT_CLASS_NORMAL = "1";
135
+ var signalStorageKey = (workflowId, name, id, sortClass) => `sig:${encodeStorageKeyComponent(workflowId)}:${encodeStorageKeyComponent(name)}:${sortClass}:${encodeStorageKeyComponent(id)}`;
136
+ var KEYS = {
137
+ workflow: (id) => `wf:${encodeStorageKeyComponent(id)}`,
138
+ checkpoint: (id) => `wf:${encodeStorageKeyComponent(id)}:ckpt`,
139
+ checkpointHistory: (id, step) => `wf:${encodeStorageKeyComponent(id)}:ckpt:${String(step).padStart(10, "0")}`,
140
+ timelinePrefix: (id) => `wf:${encodeStorageKeyComponent(id)}:timeline:`,
141
+ timeline: (id, step) => `wf:${encodeStorageKeyComponent(id)}:timeline:${String(step).padStart(10, "0")}`,
142
+ schedule: (id) => `schedule:${encodeStorageKeyComponent(id)}`,
143
+ scheduleTick: (fireAt, id) => `schedule-due:${String(fireAt).padStart(16, "0")}:${encodeStorageKeyComponent(id)}`,
144
+ scheduleRun: (workflowId) => `schedule-run:${encodeStorageKeyComponent(workflowId)}`,
145
+ scheduleRunLink: (workflowId) => `schedule-run-link:${encodeStorageKeyComponent(workflowId)}`,
146
+ scheduleRunBySchedulePrefix: (scheduleId) => `schedule-run-by-schedule:${encodeStorageKeyComponent(scheduleId)}:`,
147
+ scheduleRunBySchedule: (scheduleId, workflowId) => `schedule-run-by-schedule:${encodeStorageKeyComponent(scheduleId)}:${encodeStorageKeyComponent(workflowId)}`,
148
+ operation: (queue, scheduledAt, id) => `op:${queue}:${formatSortableTimestamp(scheduledAt)}:${id}`,
149
+ operationInflight: (id) => `op:inflight:${id}`,
150
+ operationQueued: (id) => `op:queued:${id}`,
151
+ operationResolved: (id) => `op:resolved:${id}`,
152
+ bulkOperationAuditPrefix: () => "audit:bulk:",
153
+ bulkOperationAudit: (timestamp, requestId, confirmationToken) => `audit:bulk:${formatSortableTimestamp(timestamp)}:${encodeStorageKeyComponent(requestId)}:${encodeStorageKeyComponent(confirmationToken)}`,
154
+ operationResolvedByTimePrefix: () => "op:resolved-by-time:",
155
+ operationResolvedByTime: (resolvedAt, id) => `op:resolved-by-time:${formatSortableTimestamp(resolvedAt)}:${encodeStorageKeyComponent(id)}`,
156
+ asyncActivity: (workflowId, token) => `async-act:v1:${encodeStorageKeyComponent(workflowId)}:${encodeStorageKeyComponent(token)}`,
157
+ asyncActivityResolution: (workflowId, token) => `async-act:v1:${encodeStorageKeyComponent(workflowId)}:${encodeStorageKeyComponent(token)}:resolution`,
158
+ activityReconciliationPrefix: (workflowId) => `actrec:v1:${encodeStorageKeyComponent(workflowId)}:`,
159
+ activityReconciliation: (workflowId, activityName, idempotencyKeyDigest) => `actrec:v1:${encodeStorageKeyComponent(workflowId)}:${encodeStorageKeyComponent(activityName)}:${idempotencyKeyDigest}`,
160
+ eventPrefix: (workflowId) => `ev:${encodeStorageKeyComponent(workflowId)}:`,
161
+ event: (workflowId, sequence) => `ev:${encodeStorageKeyComponent(workflowId)}:${String(sequence).padStart(10, "0")}`,
162
+ eventHead: (workflowId) => `ev:${encodeStorageKeyComponent(workflowId)}:head`,
163
+ eventWatermark: (workflowId) => `ev:${encodeStorageKeyComponent(workflowId)}:watermark`,
164
+ fleetEventPrefix: () => "fleet-event:",
165
+ fleetEvent: (sequence) => `fleet-event:${String(sequence).padStart(10, "0")}`,
166
+ fleetEventTail: () => "fleet-event-tail",
167
+ fleetEventByWorkflowPrefix: (workflowId) => `fleet-event-by-workflow:${encodeStorageKeyComponent(workflowId)}:`,
168
+ fleetEventByWorkflow: (workflowId, sequence) => `fleet-event-by-workflow:${encodeStorageKeyComponent(workflowId)}:${String(sequence).padStart(10, "0")}`,
169
+ signal: (workflowId, name, id) => signalStorageKey(workflowId, name, id, SIGNAL_SORT_CLASS_NORMAL),
170
+ startSignal: (workflowId, name, id) => signalStorageKey(workflowId, name, id, SIGNAL_SORT_CLASS_START),
171
+ signalSequence: (workflowId) => `sigseq:v1:${encodeStorageKeyComponent(workflowId)}`,
172
+ signalAcceptedResponsePrefix: (workflowId) => `sigres:v1:${encodeStorageKeyComponent(workflowId)}:`,
173
+ signalAcceptedResponse: (workflowId, name, signalId) => `sigres:v1:${encodeStorageKeyComponent(workflowId)}:${encodeStorageKeyComponent(name)}:${encodeStorageKeyComponent(signalId)}`,
174
+ deadline: (deadline, workflowId) => `wf-deadline:${formatSortableTimestamp(deadline)}:${encodeStorageKeyComponent(workflowId)}`,
175
+ terminalCleanup: (fireAt, timerId) => `wf-cleanup:${formatSortableTimestamp(fireAt)}:${encodeStorageKeyComponent(timerId)}`,
176
+ teardownTimer: (fireAt, timerId) => `wf-teardown:${formatSortableTimestamp(fireAt)}:${encodeStorageKeyComponent(timerId)}`,
177
+ delayedStart: (startAt, workflowId) => `wf-delayed:${formatSortableTimestamp(startAt)}:${encodeStorageKeyComponent(workflowId)}`,
178
+ terminalWorkflowPrefix: () => "wf-terminal:",
179
+ terminalWorkflow: (updatedAt, workflowId) => `wf-terminal:${formatSortableTimestamp(updatedAt)}:${encodeStorageKeyComponent(workflowId)}`,
180
+ attribute: (workflowId) => `attr:${encodeStorageKeyComponent(workflowId)}`,
181
+ attributeIndex: (attributeName, encodedValue, workflowId) => `idx:${attributeName}:${encodedValue}:${encodeStorageKeyComponent(workflowId)}`,
182
+ tagIndex: (tag, workflowId) => `tag:${encodeStorageKeyComponent(tag)}:${encodeStorageKeyComponent(workflowId)}`,
183
+ updatePrefix: (workflowId) => `upd:${encodeStorageKeyComponent(workflowId)}:`,
184
+ update: (workflowId, updateId) => `upd:${encodeStorageKeyComponent(workflowId)}:${updateId}`,
185
+ updateResponse: (updateId) => `upr:${updateId}`,
186
+ updateIdempotency: (workflowId, key) => `upk:${encodeStorageKeyComponent(workflowId)}:${key}`,
187
+ startIdempotency: (key) => `start-idem:${encodeStorageKeyComponent(key)}`,
188
+ startIdempotencySignalId: (key) => `start-idem:${key}`,
189
+ livenessPrefix: () => "liveness:",
190
+ liveness: (instanceId) => `liveness:${encodeStorageKeyComponent(instanceId)}`,
191
+ leasePrefix: () => "lease:",
192
+ leaseEpoch: () => "lease:epoch",
193
+ leaseHolder: () => "lease:holder",
194
+ ...OWNERSHIP_CLAIM_KEYS,
195
+ budget: (namespace, period, date) => `budget:${namespace}:${period}:${date}`,
196
+ review: (workflowId, reviewId) => `review:${encodeStorageKeyComponent(workflowId)}:${reviewId}`,
197
+ workflowHeaders: (workflowId) => `wf-headers:${encodeStorageKeyComponent(workflowId)}`,
198
+ childCancellationPrefix: (workflowId) => `child-cancel:${encodeStorageKeyComponent(workflowId)}:`,
199
+ childCancellation: (workflowId, childWorkflowId) => `child-cancel:${encodeStorageKeyComponent(workflowId)}:${encodeStorageKeyComponent(childWorkflowId)}`,
200
+ childWorkflowByParentPrefix: (parentWorkflowId, parentWorkflowExecutionToken) => `child-by-parent:${encodeStorageKeyComponent(parentWorkflowId)}:${parentWorkflowExecutionToken === undefined ? "" : `${encodeStorageKeyComponent(parentWorkflowExecutionToken)}:`}`,
201
+ childWorkflowByParent: (parentWorkflowId, parentWorkflowExecutionToken, childWorkflowId) => `child-by-parent:${encodeStorageKeyComponent(parentWorkflowId)}:${parentWorkflowExecutionToken === undefined ? "" : `${encodeStorageKeyComponent(parentWorkflowExecutionToken)}:`}${encodeStorageKeyComponent(childWorkflowId)}`,
202
+ terminalCleanupNeeded: (workflowId) => `wf-cleanup-needed:${encodeStorageKeyComponent(workflowId)}`,
203
+ workflowConcurrency: (workflowType, partitionKey) => `wf-concurrency:${encodeStorageKeyComponent(workflowType)}:${encodeStorageKeyComponent(partitionKey)}`,
204
+ workflowConcurrencyHolder: (workflowId) => `wf-concurrency-holder:${encodeStorageKeyComponent(workflowId)}`,
205
+ workflowHasServices: (workflowId) => `wf-has-services:${encodeStorageKeyComponent(workflowId)}`,
206
+ finalizerState: (workflowId) => `wf-finalizer-state:${encodeStorageKeyComponent(workflowId)}`,
207
+ teardownOwed: (workflowId) => `wf-teardown-needed:${encodeStorageKeyComponent(workflowId)}`,
208
+ teardownSucceeded: (workflowId) => `wf-teardown-succeeded:${encodeStorageKeyComponent(workflowId)}`,
209
+ teardownDeadLetter: (workflowId) => `wf-teardown-deadletter:${encodeStorageKeyComponent(workflowId)}`,
210
+ offload: (workflowId, key) => `offload:${encodeStorageKeyComponent(workflowId)}:${key}`,
211
+ archive: (workflowId, key) => `archive:${encodeStorageKeyComponent(workflowId)}:${key}`,
212
+ stateExecution: (ownerWorkflowId, key) => `state:execution:${encodeStorageKeyComponent(ownerWorkflowId)}:${encodeStorageKeyComponent(key)}`,
213
+ stateWorkflow: (workflowType, key) => `state:workflow-scope:${DEFAULT_SCOPE}:${encodeStorageKeyComponent(workflowType)}:${encodeStorageKeyComponent(key)}`,
214
+ streamChunkPrefix: (workflowId, key) => `blob:${encodeStorageKeyComponent(workflowId)}:${key}:chunk:`,
215
+ streamChunk: (workflowId, key, chunkIndex) => `blob:${encodeStorageKeyComponent(workflowId)}:${key}:chunk:${String(chunkIndex).padStart(10, "0")}`,
216
+ streamTail: (workflowId, key) => `blob:${encodeStorageKeyComponent(workflowId)}:${key}:tail`,
217
+ streamMetadata: (workflowId, key) => `blob:${encodeStorageKeyComponent(workflowId)}:${key}:meta`,
218
+ budgetCharged: (operationId) => `budget-charged:${operationId}`,
219
+ toolEffect: (workflowId, agentId, semanticHash) => `tool-effect:${encodeStorageKeyComponent(workflowId)}:${agentId}:${semanticHash}`,
220
+ workflowVisibilityStatus: (status, workflowId) => `wf-idx-status:${encodeStorageKeyComponent(status)}:${encodeStorageKeyComponent(workflowId)}`,
221
+ workflowVisibilityType: (type, workflowId) => `wf-idx-type:${encodeStorageKeyComponent(type)}:${encodeStorageKeyComponent(workflowId)}`,
222
+ workflowVisibilityCreated: (createdAt, workflowId) => `wf-idx-created:${formatSortableTimestamp(createdAt)}:${encodeStorageKeyComponent(workflowId)}`,
223
+ workflowVisibilityUpdated: (updatedAt, workflowId) => `wf-idx-updated:${formatSortableTimestamp(updatedAt)}:${encodeStorageKeyComponent(workflowId)}`,
224
+ workflowVisibilityDeadline: (deadline, workflowId) => `wf-idx-deadline:${formatSortableTimestamp(deadline)}:${encodeStorageKeyComponent(workflowId)}`,
225
+ workflowVisibilityManifest: (workflowId) => `wf-idx-manifest:${encodeStorageKeyComponent(workflowId)}`,
226
+ workflowVisibilityMetaVersion: () => "wf-idx-meta:version",
227
+ workflowVisibilityMetaBuiltAt: () => "wf-idx-meta:built-at",
228
+ workflowVisibilityMetaCursor: () => "wf-idx-meta:cursor"
229
+ };
117
230
 
118
231
  // src/storage/conditional-batch-body.ts
119
232
  function runConditionalBatchBody(conditions, operations, handlers) {
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Storage key builders for per-workflow ownership claims.
3
+ *
4
+ * These are spread into `KEYS` in `interface.ts` rather than declared there, so
5
+ * the ownership keyspace can carry its full rationale without pushing that
6
+ * file's documented line ceiling. Callers still reach them through `KEYS`, which
7
+ * keeps one import contract for storage keys.
8
+ *
9
+ * The keyspace backs `ownership: 'workflow-lease'`, specified in
10
+ * [ADR 0002](../../documentation/contributing/architecture-decisions/0002-multiengine-per-workflow-ownership.md).
11
+ *
12
+ * @module storage/ownership-keys
13
+ */
14
+ /**
15
+ * Per-workflow ownership claim keys plus the store-wide ownership-mode marker.
16
+ *
17
+ * Spread into `KEYS`; not intended to be imported directly by engine code.
18
+ */
19
+ export declare const OWNERSHIP_CLAIM_KEYS: {
20
+ /**
21
+ * The per-workflow fencing epoch. Holds an 8-byte big-endian uint64, encoded
22
+ * exactly like `KEYS.leaseEpoch` so both fencing tokens share a representation.
23
+ *
24
+ * Changes on `acquire`, on `takeover`, and on any external terminal transition
25
+ * (cancel, timeout, suspend, purge) — rotation there is what deposes a
26
+ * still-running owner, whose next write then loses its precondition.
27
+ *
28
+ * Unlike the global lease epoch this key is **permanently retained**: never
29
+ * deleted by release, purge, retention, or a mode downgrade. Retention is what
30
+ * makes the token ABA-safe across workflow-id reuse via
31
+ * `onTerminalConflict: 'start-new'`, because the counter is never reset and a
32
+ * stale owner's cached epoch can never coincide with a later generation's.
33
+ */
34
+ readonly workflowOwnerEpoch: (workflowId: string) => string;
35
+ /**
36
+ * The current per-workflow claim holder, a JSON
37
+ * `{ engineId, epoch, expiresAt, claimedAt }`.
38
+ *
39
+ * Its bytes churn on every renewal, so it must NOT be used as the fencing
40
+ * token — that is `workflowOwnerEpoch`, kept separate for exactly the reason
41
+ * `leaseEpoch` is kept separate from `leaseHolder`. Deleted at terminal or
42
+ * suspend commit and as a best-effort graceful-shutdown release, but never at
43
+ * ordinary park, so a workflow parked on a sleep or a signal keeps its claim.
44
+ */
45
+ readonly workflowOwnerHolder: (workflowId: string) => string;
46
+ /**
47
+ * The store-wide ownership-mode marker, a JSON `{ mode, establishedAt }`.
48
+ *
49
+ * Stamped by the first fencing-mode engine to construct against a store and
50
+ * compared by every later one. It is what makes `ownership: 'lease'` and
51
+ * `ownership: 'workflow-lease'` mutually exclusive across processes rather
52
+ * than only within a single process. `ownership: 'none'` engines never touch it.
53
+ */
54
+ readonly ownershipModeMarker: () => string;
55
+ };
@@ -0,0 +1,6 @@
1
+ import { encodeStorageKeyComponent } from "./key-encoding.js";
2
+ export const OWNERSHIP_CLAIM_KEYS = {
3
+ workflowOwnerEpoch: (workflowId) => `wf-owner-epoch:${encodeStorageKeyComponent(workflowId)}`,
4
+ workflowOwnerHolder: (workflowId) => `wf-owner-holder:${encodeStorageKeyComponent(workflowId)}`,
5
+ ownershipModeMarker: () => "ownership-mode-marker"
6
+ };
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- var ZX=import.meta.require,SX=(X,Y,_)=>{if(Y!=null){if(typeof Y!=="object"&&typeof Y!=="function")throw TypeError('Object expected to be assigned to "using" declaration');let Z;if(_)Z=Y[Symbol.asyncDispose];if(Z===void 0)Z=Y[Symbol.dispose];if(typeof Z!=="function")throw TypeError("Object not disposable");X.push([_,Z,Y])}else if(_)X.push([_]);return Y},zX=(X,Y,_)=>{let Z=(G)=>Y=_?new SuppressedError(G,Y,"An error was suppressed during disposal"):(_=!0,G),$=(G)=>{while(G=X.pop())try{var M=G[1]&&G[1].call(G[2]);if(G[0])return Promise.resolve(M).then($,(F)=>(Z(F),$()))}catch(F){Z(F)}if(_)throw Y};return $()};function E(X,Y,_){if(!X.capabilities()[Y])throw Error(`Feature "${_}" requires storage capability "${Y}", but this storage backend does not provide it.`)}function GX(X){let Y=X.capabilities(),_=[];if(Y.persistence!=="local"&&Y.persistence!=="remote")_.push(`persistence must be "local" or "remote" (got "${Y.persistence}")`);if(Y.readAfterWrite!=="linearizable")_.push(`readAfterWrite must be "linearizable" (got "${Y.readAfterWrite}")`);if(Y.scanConsistency!=="snapshot")_.push(`scanConsistency must be "snapshot" (got "${Y.scanConsistency}")`);if(!Y.atomicBatch)_.push("atomicBatch must be true");if(!Y.conditionalBatch)_.push("conditionalBatch must be true");if(_.length>0)throw Error(`Storage is not durable enough for recovery: ${_.join("; ")}.`)}var L="default";async function v(X,Y){return await X.get(Y)!==null}async function*V(X,Y,_){for await(let[Z]of X.scan(Y,_))yield Z}async function R(X,Y){let _=0;for await(let Z of V(X,Y))_++;return _}async function q(X,Y){let _=[];for await(let Z of V(X,Y))_.push({type:"delete",key:Z});if(_.length===0)return 0;return await X.batch(_),_.length}async function P(X,Y,_){let Z=[];for await(let $ of V(X,Y,_))Z.push({type:"delete",key:$});if(Z.length===0)return 0;return await X.batch(Z),Z.length}var $X=["actrec:","archive:","async-act:","attr:","audit:bulk:","blob:","budget:","budget-charged:","child-by-parent:","ev:","fleet-event-by-workflow:","fleet-event:","fleet-event-tail","idx:","lease:","liveness:","offload:","op:","review:","schedule:","schedule-due:","schedule-run-by-schedule:","schedule-run-link:","schedule-run:","sig:","sigres:","sigseq:","start-idem:","state:","tag:","tool-effect:","upd:","upk:","upr:","wf:","wf-cleanup:","wf-cleanup-needed:","wf-concurrency:","wf-concurrency-holder:","wf-deadline:","wf-delayed:","wf-finalizer-state:","wf-has-services:","wf-headers:","wf-idx-","wf-teardown:","wf-teardown-deadletter:","wf-teardown-needed:","wf-teardown-succeeded:","wf-terminal:"];var D=1e4,xX=1e4;class b extends Error{code="StorageBatchOperationLimitExceededError";cap=D;count;target;constructor(X,Y){super(`${X} count ${Y} exceeds MAX_BATCH_OPERATIONS (${D}).`);this.name="StorageBatchOperationLimitExceededError",this.target=X,this.count=Y}}function U(X,Y){if(Y>D)throw new b(X,Y)}function x(X){return X.length>0?X.slice(0,-1)+String.fromCharCode(X.charCodeAt(X.length-1)+1):"\xFF"}function yX(X,Y={}){if(Y.gt!==void 0&&X<=Y.gt)return!1;if(Y.gte!==void 0&&X<Y.gte)return!1;if(Y.lt!==void 0&&X>=Y.lt)return!1;if(Y.lte!==void 0&&X>Y.lte)return!1;return!0}function y(X,Y){if(X===null||Y===null)return X===Y;if(X.byteLength!==Y.byteLength)return!1;for(let _=0;_<X.byteLength;_++)if(X[_]!==Y[_])return!1;return!0}async function I(X,Y){if(X.has)return X.has(Y);return v(X,Y)}function m(X,Y,_){if(X.keys)return X.keys(Y,_);return V(X,Y,_)}async function g(X,Y){if(X.count)return X.count(Y);return R(X,Y)}async function u(X,Y){if(X.deletePrefix)return X.deletePrefix(Y);return q(X,Y)}async function IX(X,Y){U("batch operations",Y.length),await X.batch(Y)}async function k(X,Y,_){if(U("conditionalBatch conditions",Y.length),U("conditionalBatch operations",_.length),E(X,"conditionalBatch","storageConditionalBatch"),!X.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return X.conditionalBatch(Y,_)}function J(X){return encodeURIComponent(X)}function mX(X){return decodeURIComponent(X)}function gX(X){try{return decodeURIComponent(X)}catch{return null}}var H=(X)=>String(X).padStart(16,"0"),MX="0",FX="1",h=(X,Y,_,Z)=>`sig:${J(X)}:${J(Y)}:${Z}:${J(_)}`,uX={workflow:(X)=>`wf:${J(X)}`,checkpoint:(X)=>`wf:${J(X)}:ckpt`,checkpointHistory:(X,Y)=>`wf:${J(X)}:ckpt:${String(Y).padStart(10,"0")}`,timelinePrefix:(X)=>`wf:${J(X)}:timeline:`,timeline:(X,Y)=>`wf:${J(X)}:timeline:${String(Y).padStart(10,"0")}`,schedule:(X)=>`schedule:${J(X)}`,scheduleTick:(X,Y)=>`schedule-due:${String(X).padStart(16,"0")}:${J(Y)}`,scheduleRun:(X)=>`schedule-run:${J(X)}`,scheduleRunLink:(X)=>`schedule-run-link:${J(X)}`,scheduleRunBySchedulePrefix:(X)=>`schedule-run-by-schedule:${J(X)}:`,scheduleRunBySchedule:(X,Y)=>`schedule-run-by-schedule:${J(X)}:${J(Y)}`,operation:(X,Y,_)=>`op:${X}:${H(Y)}:${_}`,operationInflight:(X)=>`op:inflight:${X}`,operationQueued:(X)=>`op:queued:${X}`,operationResolved:(X)=>`op:resolved:${X}`,bulkOperationAuditPrefix:()=>"audit:bulk:",bulkOperationAudit:(X,Y,_)=>`audit:bulk:${H(X)}:${J(Y)}:${J(_)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(X,Y)=>`op:resolved-by-time:${H(X)}:${J(Y)}`,asyncActivity:(X,Y)=>`async-act:v1:${J(X)}:${J(Y)}`,asyncActivityResolution:(X,Y)=>`async-act:v1:${J(X)}:${J(Y)}:resolution`,activityReconciliationPrefix:(X)=>`actrec:v1:${J(X)}:`,activityReconciliation:(X,Y,_)=>`actrec:v1:${J(X)}:${J(Y)}:${_}`,eventPrefix:(X)=>`ev:${J(X)}:`,event:(X,Y)=>`ev:${J(X)}:${String(Y).padStart(10,"0")}`,eventHead:(X)=>`ev:${J(X)}:head`,eventWatermark:(X)=>`ev:${J(X)}:watermark`,fleetEventPrefix:()=>"fleet-event:",fleetEvent:(X)=>`fleet-event:${String(X).padStart(10,"0")}`,fleetEventTail:()=>"fleet-event-tail",fleetEventByWorkflowPrefix:(X)=>`fleet-event-by-workflow:${J(X)}:`,fleetEventByWorkflow:(X,Y)=>`fleet-event-by-workflow:${J(X)}:${String(Y).padStart(10,"0")}`,signal:(X,Y,_)=>h(X,Y,_,FX),startSignal:(X,Y,_)=>h(X,Y,_,MX),signalSequence:(X)=>`sigseq:v1:${J(X)}`,signalAcceptedResponsePrefix:(X)=>`sigres:v1:${J(X)}:`,signalAcceptedResponse:(X,Y,_)=>`sigres:v1:${J(X)}:${J(Y)}:${J(_)}`,deadline:(X,Y)=>`wf-deadline:${H(X)}:${J(Y)}`,terminalCleanup:(X,Y)=>`wf-cleanup:${H(X)}:${J(Y)}`,teardownTimer:(X,Y)=>`wf-teardown:${H(X)}:${J(Y)}`,delayedStart:(X,Y)=>`wf-delayed:${H(X)}:${J(Y)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(X,Y)=>`wf-terminal:${H(X)}:${J(Y)}`,attribute:(X)=>`attr:${J(X)}`,attributeIndex:(X,Y,_)=>`idx:${X}:${Y}:${J(_)}`,tagIndex:(X,Y)=>`tag:${J(X)}:${J(Y)}`,updatePrefix:(X)=>`upd:${J(X)}:`,update:(X,Y)=>`upd:${J(X)}:${Y}`,updateResponse:(X)=>`upr:${X}`,updateIdempotency:(X,Y)=>`upk:${J(X)}:${Y}`,startIdempotency:(X)=>`start-idem:${J(X)}`,startIdempotencySignalId:(X)=>`start-idem:${X}`,livenessPrefix:()=>"liveness:",liveness:(X)=>`liveness:${J(X)}`,leasePrefix:()=>"lease:",leaseEpoch:()=>"lease:epoch",leaseHolder:()=>"lease:holder",budget:(X,Y,_)=>`budget:${X}:${Y}:${_}`,review:(X,Y)=>`review:${J(X)}:${Y}`,workflowHeaders:(X)=>`wf-headers:${J(X)}`,childCancellationPrefix:(X)=>`child-cancel:${J(X)}:`,childCancellation:(X,Y)=>`child-cancel:${J(X)}:${J(Y)}`,childWorkflowByParentPrefix:(X,Y)=>`child-by-parent:${J(X)}:${Y===void 0?"":`${J(Y)}:`}`,childWorkflowByParent:(X,Y,_)=>`child-by-parent:${J(X)}:${Y===void 0?"":`${J(Y)}:`}${J(_)}`,terminalCleanupNeeded:(X)=>`wf-cleanup-needed:${J(X)}`,workflowConcurrency:(X,Y)=>`wf-concurrency:${J(X)}:${J(Y)}`,workflowConcurrencyHolder:(X)=>`wf-concurrency-holder:${J(X)}`,workflowHasServices:(X)=>`wf-has-services:${J(X)}`,finalizerState:(X)=>`wf-finalizer-state:${J(X)}`,teardownOwed:(X)=>`wf-teardown-needed:${J(X)}`,teardownSucceeded:(X)=>`wf-teardown-succeeded:${J(X)}`,teardownDeadLetter:(X)=>`wf-teardown-deadletter:${J(X)}`,offload:(X,Y)=>`offload:${J(X)}:${Y}`,archive:(X,Y)=>`archive:${J(X)}:${Y}`,stateExecution:(X,Y)=>`state:execution:${J(X)}:${J(Y)}`,stateWorkflow:(X,Y)=>`state:workflow-scope:${L}:${J(X)}:${J(Y)}`,streamChunkPrefix:(X,Y)=>`blob:${J(X)}:${Y}:chunk:`,streamChunk:(X,Y,_)=>`blob:${J(X)}:${Y}:chunk:${String(_).padStart(10,"0")}`,streamTail:(X,Y)=>`blob:${J(X)}:${Y}:tail`,streamMetadata:(X,Y)=>`blob:${J(X)}:${Y}:meta`,budgetCharged:(X)=>`budget-charged:${X}`,toolEffect:(X,Y,_)=>`tool-effect:${J(X)}:${Y}:${_}`,workflowVisibilityStatus:(X,Y)=>`wf-idx-status:${J(X)}:${J(Y)}`,workflowVisibilityType:(X,Y)=>`wf-idx-type:${J(X)}:${J(Y)}`,workflowVisibilityCreated:(X,Y)=>`wf-idx-created:${H(X)}:${J(Y)}`,workflowVisibilityUpdated:(X,Y)=>`wf-idx-updated:${H(X)}:${J(Y)}`,workflowVisibilityDeadline:(X,Y)=>`wf-idx-deadline:${H(X)}:${J(Y)}`,workflowVisibilityManifest:(X)=>`wf-idx-manifest:${J(X)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"};function HX(X){if(X===void 0)return;if(typeof X!=="number"||!Number.isInteger(X)||X<0)throw Error("deleteRange limit must be a finite non-negative integer");return X===0?0:X}function Q(X){let Y={},_=!1;for(let $ of["gt","gte","lt","lte"]){let G=X[$];if(G===void 0)continue;if(typeof G!=="string")throw Error("deleteRange bounds must be strings");Y[$]=G,_=!0}if(!_)throw Error("deleteRange requires at least one of gt/gte/lt/lte; use deletePrefix to delete a whole prefix");let Z=HX(X.limit);if(Z!==void 0)Y.limit=Z;return Y}async function c(X,Y,_){let Z=Q(_);if(X.deleteRange)return X.deleteRange(Y,Z);return P(X,Y,Z)}function C(X){return X.replaceAll(/:+$/g,"")}function UX(X,Y){let _=C(X),Z=C(Y);if(_.length===0)return Z;if(Z.length===0)return _;return`${_}:${Z}`}class A{#X;#Y;constructor(X,Y){this.#X=X,this.#Y=C(Y)}#_(X){if(this.#Y.length===0)return X;return X.length===0?`${this.#Y}:`:`${this.#Y}:${X}`}#Z(X){return X.map((Y)=>{if(Y.type==="put")return{type:"put",key:this.#_(Y.key),value:Y.value};return{type:"delete",key:this.#_(Y.key)}})}#G(X){if(this.#Y.length===0)return X;return X.slice(this.#Y.length+1)}#$(X){let Y={};if(X.limit!==void 0)Y.limit=X.limit;if(X.gt!==void 0)Y.gt=this.#_(X.gt);if(X.gte!==void 0)Y.gte=this.#_(X.gte);if(X.lt!==void 0)Y.lt=this.#_(X.lt);if(X.lte!==void 0)Y.lte=this.#_(X.lte);return Y}#J(X={}){let Y=this.#$(X);if(X.reverse!==void 0)Y.reverse=X.reverse;return Y}#M(X){return this.#$(X)}capabilities(){return this.#X.capabilities()}scoped(X){return new A(this.#X,UX(this.#Y,X))}async get(X){return this.#X.get(this.#_(X))}async put(X,Y){await this.#X.put(this.#_(X),Y)}async delete(X){await this.#X.delete(this.#_(X))}async*scan(X,Y){for await(let[_,Z]of this.#X.scan(this.#_(X),this.#J(Y)))yield[this.#G(_),Z]}async batch(X){U("batch operations",X.length),await this.#X.batch(this.#Z(X))}async conditionalBatch(X,Y){return k(this.#X,X.map((_)=>({key:this.#_(_.key),expectedValue:_.expectedValue})),this.#Z(Y))}async has(X){return I(this.#X,this.#_(X))}async deletePrefix(X){return u(this.#X,this.#_(X))}async deleteRange(X,Y){let _=this.#M(Q(Y));return c(this.#X,this.#_(X),_)}async*keys(X,Y){for await(let _ of m(this.#X,this.#_(X),this.#J(Y)))yield this.#G(_)}async count(X){return g(this.#X,this.#_(X))}[Symbol.dispose](){this.#X[Symbol.dispose]()}}function w(X,Y){return new A(X,Y)}function f(X,Y){let _,Z,$=!1,G=()=>{if($)throw Error(`${Y.storageName} pool has been disposed and cannot be reused. Construct a new adapter.`);return _??=Y.loadPool(X).catch((M)=>{throw _=void 0,QX(M,Y)}),_};return{query:async(M,F)=>{return(await G()).query(M,F)},connect:async()=>{return(await G()).connect()},end:async()=>{return $=!0,Z??=(async()=>{if(_===void 0)return;await(await _.catch(()=>{return}))?.end()})(),Z}}}var VX=/cannot find module|module_not_found|failed to resolve|could not resolve/i;function QX(X,Y){let _=X instanceof Error?X.message:String(X);if(VX.test(_))return Error(`${Y.storageName} requires the optional peer dependency "${Y.driverName}". Install it in your application with: bun add ${Y.driverName} (or npm install ${Y.driverName}).`,{cause:X});return X instanceof Error?X:Error(_)}function K(X){return X.rowCount??X.affectedRows??X.rows.length}function j(X){if(X instanceof Uint8Array)return new Uint8Array(X);return new Uint8Array(X)}function B(X){return Buffer.from(X)}function N(X){let Y=new Map,_=new Set;for(let Z of X)if(Z.type==="put")_.delete(Z.key),Y.set(Z.key,Z.value);else Y.delete(Z.key),_.add(Z.key);return{puts:Y,deletes:_}}async function d(X,Y,_){if(_.length===0)return!0;let Z=_.map((M)=>M.key),$=await X.query(Y.selectValuesByKeys,[Z]),G=new Map;for(let M of $.rows){let F=M.value;if(F!==null&&F!==void 0)G.set(M.key,j(F))}for(let M of _){let F=G.get(M.key)??null;if(!y(F,M.expectedValue))return!1}return!0}async function S(X,Y,_){if(_.puts.size>0){let Z=[],$=[];for(let[G,M]of _.puts)Z.push(G),$.push(B(M));await X.query(Y.upsertValuesByKeys,[Z,$])}if(_.deletes.size>0)await X.query(Y.deleteValuesByKeys,[[..._.deletes]])}var p=/^[a-z_][a-z0-9_]*$/i;function l(X,Y,_){if(!p.test(X))throw Error(`${_} storage ${Y} name "${X}" is not a valid ${_} identifier. Use only letters, digits, and underscores, starting with a letter or underscore (matching ${p.source}).`)}var a="kv";function z(X,Y){l(X,Y,"Postgres")}function n(X){let{schema:Y,table:_}=X;if(Y===void 0&&_===void 0)return a;let Z=_??a;if(z(Z,"table"),Y===void 0)return`"${Z}"`;return z(Y,"schema"),`"${Y}"."${Z}"`}function W(X){return[X,x(X)]}function i(X,Y){let{gt:_,gte:Z,lt:$,lte:G}=Y,M=W(X),F=["key >= $1 AND key < $2"];if(_!==void 0)M.push(_),F.push(`key > $${M.length}`);if(Z!==void 0)M.push(Z),F.push(`key >= $${M.length}`);if($!==void 0)M.push($),F.push(`key < $${M.length}`);if(G!==void 0)M.push(G),F.push(`key <= $${M.length}`);return{conditions:F,parameters:M}}function s(X,Y={}){let{limit:_,reverse:Z}=Y,{conditions:$,parameters:G}=i(X,Y),M=Z?"DESC":"ASC",F="";if(_!==void 0)G.push(_),F=` LIMIT $${G.length}`;return{parameters:G,whereOrderLimit:`WHERE ${$.join(" AND ")} ORDER BY key ${M}${F}`}}function t(X){let Y=`CREATE TABLE IF NOT EXISTS ${X} (
2
+ var $X=import.meta.require;function E(X,Y,_){if(!X.capabilities()[Y])throw Error(`Feature "${_}" requires storage capability "${Y}", but this storage backend does not provide it.`)}function MX(X){let Y=X.capabilities(),_=[];if(Y.persistence!=="local"&&Y.persistence!=="remote")_.push(`persistence must be "local" or "remote" (got "${Y.persistence}")`);if(Y.readAfterWrite!=="linearizable")_.push(`readAfterWrite must be "linearizable" (got "${Y.readAfterWrite}")`);if(Y.scanConsistency!=="snapshot")_.push(`scanConsistency must be "snapshot" (got "${Y.scanConsistency}")`);if(!Y.atomicBatch)_.push("atomicBatch must be true");if(!Y.conditionalBatch)_.push("conditionalBatch must be true");if(_.length>0)throw Error(`Storage is not durable enough for recovery: ${_.join("; ")}.`)}var L="default";async function v(X,Y){return await X.get(Y)!==null}async function*V(X,Y,_){for await(let[J]of X.scan(Y,_))yield J}async function R(X,Y){let _=0;for await(let J of V(X,Y))_++;return _}async function q(X,Y){let _=[];for await(let J of V(X,Y))_.push({type:"delete",key:J});if(_.length===0)return 0;return await X.batch(_),_.length}async function P(X,Y,_){let J=[];for await(let M of V(X,Y,_))J.push({type:"delete",key:M});if(J.length===0)return 0;return await X.batch(J),J.length}function Z(X){return encodeURIComponent(X)}function FX(X){return decodeURIComponent(X)}function GX(X){try{return decodeURIComponent(X)}catch{return null}}var b={workflowOwnerEpoch:(X)=>`wf-owner-epoch:${Z(X)}`,workflowOwnerHolder:(X)=>`wf-owner-holder:${Z(X)}`,ownershipModeMarker:()=>"ownership-mode-marker"};var HX=["actrec:","archive:","async-act:","attr:","audit:bulk:","blob:","budget:","budget-charged:","child-by-parent:","ev:","fleet-event-by-workflow:","fleet-event:","fleet-event-tail","idx:","lease:","liveness:","offload:","ownership-mode-marker","op:","review:","schedule:","schedule-due:","schedule-run-by-schedule:","schedule-run-link:","schedule-run:","sig:","sigres:","sigseq:","start-idem:","state:","tag:","tool-effect:","upd:","upk:","upr:","wf:","wf-cleanup:","wf-cleanup-needed:","wf-concurrency:","wf-concurrency-holder:","wf-deadline:","wf-delayed:","wf-finalizer-state:","wf-has-services:","wf-headers:","wf-idx-","wf-owner-epoch:","wf-owner-holder:","wf-teardown:","wf-teardown-deadletter:","wf-teardown-needed:","wf-teardown-succeeded:","wf-terminal:"];var D=1e4,kX=1e4;class x extends Error{code="StorageBatchOperationLimitExceededError";cap=D;count;target;constructor(X,Y){super(`${X} count ${Y} exceeds MAX_BATCH_OPERATIONS (${D}).`);this.name="StorageBatchOperationLimitExceededError",this.target=X,this.count=Y}}function U(X,Y){if(Y>D)throw new x(X,Y)}function y(X){return X.length>0?X.slice(0,-1)+String.fromCharCode(X.charCodeAt(X.length-1)+1):"\xFF"}function cX(X,Y={}){if(Y.gt!==void 0&&X<=Y.gt)return!1;if(Y.gte!==void 0&&X<Y.gte)return!1;if(Y.lt!==void 0&&X>=Y.lt)return!1;if(Y.lte!==void 0&&X>Y.lte)return!1;return!0}function I(X,Y){if(X===null||Y===null)return X===Y;if(X.byteLength!==Y.byteLength)return!1;for(let _=0;_<X.byteLength;_++)if(X[_]!==Y[_])return!1;return!0}async function m(X,Y){if(X.has)return X.has(Y);return v(X,Y)}function g(X,Y,_){if(X.keys)return X.keys(Y,_);return V(X,Y,_)}async function u(X,Y){if(X.count)return X.count(Y);return R(X,Y)}async function k(X,Y){if(X.deletePrefix)return X.deletePrefix(Y);return q(X,Y)}async function wX(X,Y){U("batch operations",Y.length),await X.batch(Y)}async function c(X,Y,_){if(U("conditionalBatch conditions",Y.length),U("conditionalBatch operations",_.length),E(X,"conditionalBatch","storageConditionalBatch"),!X.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return X.conditionalBatch(Y,_)}var H=(X)=>String(X).padStart(16,"0"),UX="0",VX="1",h=(X,Y,_,J)=>`sig:${Z(X)}:${Z(Y)}:${J}:${Z(_)}`,fX={workflow:(X)=>`wf:${Z(X)}`,checkpoint:(X)=>`wf:${Z(X)}:ckpt`,checkpointHistory:(X,Y)=>`wf:${Z(X)}:ckpt:${String(Y).padStart(10,"0")}`,timelinePrefix:(X)=>`wf:${Z(X)}:timeline:`,timeline:(X,Y)=>`wf:${Z(X)}:timeline:${String(Y).padStart(10,"0")}`,schedule:(X)=>`schedule:${Z(X)}`,scheduleTick:(X,Y)=>`schedule-due:${String(X).padStart(16,"0")}:${Z(Y)}`,scheduleRun:(X)=>`schedule-run:${Z(X)}`,scheduleRunLink:(X)=>`schedule-run-link:${Z(X)}`,scheduleRunBySchedulePrefix:(X)=>`schedule-run-by-schedule:${Z(X)}:`,scheduleRunBySchedule:(X,Y)=>`schedule-run-by-schedule:${Z(X)}:${Z(Y)}`,operation:(X,Y,_)=>`op:${X}:${H(Y)}:${_}`,operationInflight:(X)=>`op:inflight:${X}`,operationQueued:(X)=>`op:queued:${X}`,operationResolved:(X)=>`op:resolved:${X}`,bulkOperationAuditPrefix:()=>"audit:bulk:",bulkOperationAudit:(X,Y,_)=>`audit:bulk:${H(X)}:${Z(Y)}:${Z(_)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(X,Y)=>`op:resolved-by-time:${H(X)}:${Z(Y)}`,asyncActivity:(X,Y)=>`async-act:v1:${Z(X)}:${Z(Y)}`,asyncActivityResolution:(X,Y)=>`async-act:v1:${Z(X)}:${Z(Y)}:resolution`,activityReconciliationPrefix:(X)=>`actrec:v1:${Z(X)}:`,activityReconciliation:(X,Y,_)=>`actrec:v1:${Z(X)}:${Z(Y)}:${_}`,eventPrefix:(X)=>`ev:${Z(X)}:`,event:(X,Y)=>`ev:${Z(X)}:${String(Y).padStart(10,"0")}`,eventHead:(X)=>`ev:${Z(X)}:head`,eventWatermark:(X)=>`ev:${Z(X)}:watermark`,fleetEventPrefix:()=>"fleet-event:",fleetEvent:(X)=>`fleet-event:${String(X).padStart(10,"0")}`,fleetEventTail:()=>"fleet-event-tail",fleetEventByWorkflowPrefix:(X)=>`fleet-event-by-workflow:${Z(X)}:`,fleetEventByWorkflow:(X,Y)=>`fleet-event-by-workflow:${Z(X)}:${String(Y).padStart(10,"0")}`,signal:(X,Y,_)=>h(X,Y,_,VX),startSignal:(X,Y,_)=>h(X,Y,_,UX),signalSequence:(X)=>`sigseq:v1:${Z(X)}`,signalAcceptedResponsePrefix:(X)=>`sigres:v1:${Z(X)}:`,signalAcceptedResponse:(X,Y,_)=>`sigres:v1:${Z(X)}:${Z(Y)}:${Z(_)}`,deadline:(X,Y)=>`wf-deadline:${H(X)}:${Z(Y)}`,terminalCleanup:(X,Y)=>`wf-cleanup:${H(X)}:${Z(Y)}`,teardownTimer:(X,Y)=>`wf-teardown:${H(X)}:${Z(Y)}`,delayedStart:(X,Y)=>`wf-delayed:${H(X)}:${Z(Y)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(X,Y)=>`wf-terminal:${H(X)}:${Z(Y)}`,attribute:(X)=>`attr:${Z(X)}`,attributeIndex:(X,Y,_)=>`idx:${X}:${Y}:${Z(_)}`,tagIndex:(X,Y)=>`tag:${Z(X)}:${Z(Y)}`,updatePrefix:(X)=>`upd:${Z(X)}:`,update:(X,Y)=>`upd:${Z(X)}:${Y}`,updateResponse:(X)=>`upr:${X}`,updateIdempotency:(X,Y)=>`upk:${Z(X)}:${Y}`,startIdempotency:(X)=>`start-idem:${Z(X)}`,startIdempotencySignalId:(X)=>`start-idem:${X}`,livenessPrefix:()=>"liveness:",liveness:(X)=>`liveness:${Z(X)}`,leasePrefix:()=>"lease:",leaseEpoch:()=>"lease:epoch",leaseHolder:()=>"lease:holder",...b,budget:(X,Y,_)=>`budget:${X}:${Y}:${_}`,review:(X,Y)=>`review:${Z(X)}:${Y}`,workflowHeaders:(X)=>`wf-headers:${Z(X)}`,childCancellationPrefix:(X)=>`child-cancel:${Z(X)}:`,childCancellation:(X,Y)=>`child-cancel:${Z(X)}:${Z(Y)}`,childWorkflowByParentPrefix:(X,Y)=>`child-by-parent:${Z(X)}:${Y===void 0?"":`${Z(Y)}:`}`,childWorkflowByParent:(X,Y,_)=>`child-by-parent:${Z(X)}:${Y===void 0?"":`${Z(Y)}:`}${Z(_)}`,terminalCleanupNeeded:(X)=>`wf-cleanup-needed:${Z(X)}`,workflowConcurrency:(X,Y)=>`wf-concurrency:${Z(X)}:${Z(Y)}`,workflowConcurrencyHolder:(X)=>`wf-concurrency-holder:${Z(X)}`,workflowHasServices:(X)=>`wf-has-services:${Z(X)}`,finalizerState:(X)=>`wf-finalizer-state:${Z(X)}`,teardownOwed:(X)=>`wf-teardown-needed:${Z(X)}`,teardownSucceeded:(X)=>`wf-teardown-succeeded:${Z(X)}`,teardownDeadLetter:(X)=>`wf-teardown-deadletter:${Z(X)}`,offload:(X,Y)=>`offload:${Z(X)}:${Y}`,archive:(X,Y)=>`archive:${Z(X)}:${Y}`,stateExecution:(X,Y)=>`state:execution:${Z(X)}:${Z(Y)}`,stateWorkflow:(X,Y)=>`state:workflow-scope:${L}:${Z(X)}:${Z(Y)}`,streamChunkPrefix:(X,Y)=>`blob:${Z(X)}:${Y}:chunk:`,streamChunk:(X,Y,_)=>`blob:${Z(X)}:${Y}:chunk:${String(_).padStart(10,"0")}`,streamTail:(X,Y)=>`blob:${Z(X)}:${Y}:tail`,streamMetadata:(X,Y)=>`blob:${Z(X)}:${Y}:meta`,budgetCharged:(X)=>`budget-charged:${X}`,toolEffect:(X,Y,_)=>`tool-effect:${Z(X)}:${Y}:${_}`,workflowVisibilityStatus:(X,Y)=>`wf-idx-status:${Z(X)}:${Z(Y)}`,workflowVisibilityType:(X,Y)=>`wf-idx-type:${Z(X)}:${Z(Y)}`,workflowVisibilityCreated:(X,Y)=>`wf-idx-created:${H(X)}:${Z(Y)}`,workflowVisibilityUpdated:(X,Y)=>`wf-idx-updated:${H(X)}:${Z(Y)}`,workflowVisibilityDeadline:(X,Y)=>`wf-idx-deadline:${H(X)}:${Z(Y)}`,workflowVisibilityManifest:(X)=>`wf-idx-manifest:${Z(X)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"};function QX(X){if(X===void 0)return;if(typeof X!=="number"||!Number.isInteger(X)||X<0)throw Error("deleteRange limit must be a finite non-negative integer");return X===0?0:X}function Q(X){let Y={},_=!1;for(let M of["gt","gte","lt","lte"]){let $=X[M];if($===void 0)continue;if(typeof $!=="string")throw Error("deleteRange bounds must be strings");Y[M]=$,_=!0}if(!_)throw Error("deleteRange requires at least one of gt/gte/lt/lte; use deletePrefix to delete a whole prefix");let J=QX(X.limit);if(J!==void 0)Y.limit=J;return Y}async function w(X,Y,_){let J=Q(_);if(X.deleteRange)return X.deleteRange(Y,J);return P(X,Y,J)}function A(X){return X.replaceAll(/:+$/g,"")}function jX(X,Y){let _=A(X),J=A(Y);if(_.length===0)return J;if(J.length===0)return _;return`${_}:${J}`}class N{#X;#Y;constructor(X,Y){this.#X=X,this.#Y=A(Y)}#_(X){if(this.#Y.length===0)return X;return X.length===0?`${this.#Y}:`:`${this.#Y}:${X}`}#J(X){return X.map((Y)=>{if(Y.type==="put")return{type:"put",key:this.#_(Y.key),value:Y.value};return{type:"delete",key:this.#_(Y.key)}})}#$(X){if(this.#Y.length===0)return X;return X.slice(this.#Y.length+1)}#M(X){let Y={};if(X.limit!==void 0)Y.limit=X.limit;if(X.gt!==void 0)Y.gt=this.#_(X.gt);if(X.gte!==void 0)Y.gte=this.#_(X.gte);if(X.lt!==void 0)Y.lt=this.#_(X.lt);if(X.lte!==void 0)Y.lte=this.#_(X.lte);return Y}#Z(X={}){let Y=this.#M(X);if(X.reverse!==void 0)Y.reverse=X.reverse;return Y}#F(X){return this.#M(X)}capabilities(){return this.#X.capabilities()}scoped(X){return new N(this.#X,jX(this.#Y,X))}async get(X){return this.#X.get(this.#_(X))}async put(X,Y){await this.#X.put(this.#_(X),Y)}async delete(X){await this.#X.delete(this.#_(X))}async*scan(X,Y){for await(let[_,J]of this.#X.scan(this.#_(X),this.#Z(Y)))yield[this.#$(_),J]}async batch(X){U("batch operations",X.length),await this.#X.batch(this.#J(X))}async conditionalBatch(X,Y){return c(this.#X,X.map((_)=>({key:this.#_(_.key),expectedValue:_.expectedValue})),this.#J(Y))}async has(X){return m(this.#X,this.#_(X))}async deletePrefix(X){return k(this.#X,this.#_(X))}async deleteRange(X,Y){let _=this.#F(Q(Y));return w(this.#X,this.#_(X),_)}async*keys(X,Y){for await(let _ of g(this.#X,this.#_(X),this.#Z(Y)))yield this.#$(_)}async count(X){return u(this.#X,this.#_(X))}[Symbol.dispose](){this.#X[Symbol.dispose]()}}function f(X,Y){return new N(X,Y)}function d(X,Y){let _,J,M=!1,$=()=>{if(M)throw Error(`${Y.storageName} pool has been disposed and cannot be reused. Construct a new adapter.`);return _??=Y.loadPool(X).catch((F)=>{throw _=void 0,WX(F,Y)}),_};return{query:async(F,G)=>{return(await $()).query(F,G)},connect:async()=>{return(await $()).connect()},end:async()=>{return M=!0,J??=(async()=>{if(_===void 0)return;await(await _.catch(()=>{return}))?.end()})(),J}}}var BX=/cannot find module|module_not_found|failed to resolve|could not resolve/i;function WX(X,Y){let _=X instanceof Error?X.message:String(X);if(BX.test(_))return Error(`${Y.storageName} requires the optional peer dependency "${Y.driverName}". Install it in your application with: bun add ${Y.driverName} (or npm install ${Y.driverName}).`,{cause:X});return X instanceof Error?X:Error(_)}function C(X){return X.rowCount??X.affectedRows??X.rows.length}function j(X){if(X instanceof Uint8Array)return new Uint8Array(X);return new Uint8Array(X)}function B(X){return Buffer.from(X)}function K(X){let Y=new Map,_=new Set;for(let J of X)if(J.type==="put")_.delete(J.key),Y.set(J.key,J.value);else Y.delete(J.key),_.add(J.key);return{puts:Y,deletes:_}}async function p(X,Y,_){if(_.length===0)return!0;let J=_.map((F)=>F.key),M=await X.query(Y.selectValuesByKeys,[J]),$=new Map;for(let F of M.rows){let G=F.value;if(G!==null&&G!==void 0)$.set(F.key,j(G))}for(let F of _){let G=$.get(F.key)??null;if(!I(G,F.expectedValue))return!1}return!0}async function z(X,Y,_){if(_.puts.size>0){let J=[],M=[];for(let[$,F]of _.puts)J.push($),M.push(B(F));await X.query(Y.upsertValuesByKeys,[J,M])}if(_.deletes.size>0)await X.query(Y.deleteValuesByKeys,[[..._.deletes]])}var l=/^[a-z_][a-z0-9_]*$/i;function a(X,Y,_){if(!l.test(X))throw Error(`${_} storage ${Y} name "${X}" is not a valid ${_} identifier. Use only letters, digits, and underscores, starting with a letter or underscore (matching ${l.source}).`)}var s="kv";function O(X,Y){a(X,Y,"Postgres")}function i(X){let{schema:Y,table:_}=X;if(Y===void 0&&_===void 0)return s;let J=_??s;if(O(J,"table"),Y===void 0)return`"${J}"`;return O(Y,"schema"),`"${Y}"."${J}"`}function W(X){return[X,y(X)]}function r(X,Y){let{gt:_,gte:J,lt:M,lte:$}=Y,F=W(X),G=["key >= $1 AND key < $2"];if(_!==void 0)F.push(_),G.push(`key > $${F.length}`);if(J!==void 0)F.push(J),G.push(`key >= $${F.length}`);if(M!==void 0)F.push(M),G.push(`key < $${F.length}`);if($!==void 0)F.push($),G.push(`key <= $${F.length}`);return{conditions:G,parameters:F}}function n(X,Y={}){let{limit:_,reverse:J}=Y,{conditions:M,parameters:$}=r(X,Y),F=J?"DESC":"ASC",G="";if(_!==void 0)$.push(_),G=` LIMIT $${$.length}`;return{parameters:$,whereOrderLimit:`WHERE ${M.join(" AND ")} ORDER BY key ${F}${G}`}}function t(X){let Y=`CREATE TABLE IF NOT EXISTS ${X} (
3
3
  key TEXT COLLATE "C" PRIMARY KEY,
4
4
  value BYTEA NOT NULL
5
5
  )`,_=`
@@ -12,4 +12,4 @@ var ZX=import.meta.require,SX=(X,Y,_)=>{if(Y!=null){if(typeof Y!=="object"&&type
12
12
  FROM pg_attribute a
13
13
  LEFT JOIN pg_collation co ON co.oid = a.attcollation
14
14
  WHERE a.attrelid = to_regclass($1) AND a.attname = 'key' AND a.attnum > 0
15
- `,selectValueByKey:`SELECT value FROM ${X} WHERE key = $1`,upsertValueByKey:`INSERT INTO ${X} (key, value) VALUES ($1, $2) ON CONFLICT (key) DO UPDATE SET value = EXCLUDED.value`,deleteValueByKey:`DELETE FROM ${X} WHERE key = $1`,selectKeyPresence:`SELECT 1 AS present FROM ${X} WHERE key = $1 LIMIT 1`,countKeysByPrefix:`SELECT COUNT(*) AS count FROM ${X} WHERE key >= $1 AND key < $2`,deleteKeysByPrefix:`DELETE FROM ${X} WHERE key >= $1 AND key < $2`,selectValuesByKeys:`SELECT key, value FROM ${X} WHERE key = ANY($1)`,upsertValuesByKeys:`INSERT INTO ${X} (key, value) SELECT * FROM unnest($1::text[], $2::bytea[]) ON CONFLICT (key) DO UPDATE SET value = EXCLUDED.value`,deleteValuesByKeys:`DELETE FROM ${X} WHERE key = ANY($1)`,keyValueRangeSelect(Z,$={}){let{parameters:G,whereOrderLimit:M}=s(Z,$);return{parameters:G,sql:`SELECT key, value FROM ${X} ${M}`}},keyRangeSelect(Z,$={}){let{parameters:G,whereOrderLimit:M}=s(Z,$);return{parameters:G,sql:`SELECT key FROM ${X} ${M}`}},keyRangeDelete(Z,$){let{conditions:G,parameters:M}=i(Z,$),F=G.join(" AND ");if($.limit===void 0)return{parameters:M,sql:`DELETE FROM ${X} WHERE ${F}`};return M.push($.limit),{parameters:M,sql:`DELETE FROM ${X} WHERE key IN (SELECT key FROM ${X} WHERE ${F} ORDER BY key ASC LIMIT $${M.length})`}}}}var r="BEGIN ISOLATION LEVEL SERIALIZABLE",o="BEGIN ISOLATION LEVEL READ COMMITTED",e="BEGIN READ ONLY",XX="COMMIT",O="ROLLBACK";function YX(X){return z(X,"schema"),`CREATE SCHEMA IF NOT EXISTS "${X}"`}var jX=/^PRAGMA\b/iu,BX=/^PRAGMA\s+(?:[A-Z_][A-Z0-9_]*\.)?[A-Z_][A-Z0-9_]*\s*$/iu,WX=/^SELECT\b/iu;function EX(X){return X.trim().replace(/;+\s*$/u,"").trim()}function LX(X){return BX.test(X)}function _X(X){let Y=EX(X);if(Y.length===0)throw Error("Storage query must not be empty.");if(Y.includes(";"))throw Error("Storage query must contain exactly one read-only statement.");if(WX.test(Y))return;if(jX.test(Y)&&LX(Y))return;throw Error("Storage query only supports read-only SELECT and PRAGMA statements.")}var DX=new Set(["40001","40P01"]),JX=5;function CX(X){if(typeof X!=="object"||X===null||!("code"in X))return!1;let Y=X.code;return typeof Y==="string"&&DX.has(Y)}class T{#X;#Y;#_;#Z;#G;#$;constructor(X,Y){if(this.#G=X.pool===void 0,X.pool===void 0){if(X.url===void 0)throw Error("PostgresKeyValueStorage requires either a `url` to build a pool from, or a pre-built `pool`; neither was provided.");this.#X=Y(X.url)}else this.#X=X.pool;this.#_=X.schema;let _=n({schema:X.schema,table:X.table});this.#Y=t(_)}capabilities(){return{persistence:"remote",readAfterWrite:"linearizable",scanConsistency:"snapshot",atomicBatch:!0,conditionalBatch:!0,boundedRangeDelete:!0}}#J(){return this.#Z??=this.#M().catch((X)=>{throw this.#Z=void 0,X}),this.#Z}async#M(){if(this.#_!==void 0)await this.#X.query(YX(this.#_));await this.#X.query(this.#Y.createTable),await this.#U()}async#U(){let Y=(await this.#X.query(this.#Y.selectKeyCollation,[this.#Y.tableReference])).rows[0]?.collation;if(Y==="C")return;let _=Y===void 0?"no such table":typeof Y==="string"?`"${Y}"`:"an unexpected collation value";throw Error(`Postgres storage requires the ${this.#Y.tableReference} table's "key" column to use COLLATE "C" (found ${_}). A table created without COLLATE "C" sorts keys by the database locale, which breaks Weft's lexicographic prefix scans. Use a fresh table, or recreate it as: CREATE TABLE ${this.#Y.tableReference} (key TEXT COLLATE "C" PRIMARY KEY, value BYTEA NOT NULL).`)}async get(X){await this.#J();let _=(await this.#X.query(this.#Y.selectValueByKey,[X])).rows[0];if(_===void 0)return null;let Z=_.value;if(Z===null||Z===void 0)return null;return j(Z)}async put(X,Y){await this.#J(),await this.#X.query(this.#Y.upsertValueByKey,[X,B(Y)])}async delete(X){await this.#J(),await this.#X.query(this.#Y.deleteValueByKey,[X])}async has(X){return await this.#J(),(await this.#X.query(this.#Y.selectKeyPresence,[X])).rows.length>0}async deletePrefix(X){await this.#J();let[Y,_]=W(X),Z=await this.#X.query(this.#Y.deleteKeysByPrefix,[Y,_]);return K(Z)}async deleteRange(X,Y){await this.#J();let _=Q(Y),{parameters:Z,sql:$}=this.#Y.keyRangeDelete(X,_),G=await this.#X.query($,Z);return K(G)}async*scan(X,Y={}){await this.#J();let{parameters:_,sql:Z}=this.#Y.keyValueRangeSelect(X,Y),$=await this.#X.query(Z,_);for(let G of $.rows)yield[G.key,j(G.value)]}async*keys(X,Y={}){await this.#J();let{parameters:_,sql:Z}=this.#Y.keyRangeSelect(X,Y),$=await this.#X.query(Z,_);for(let G of $.rows)yield G.key}async count(X){await this.#J();let[Y,_]=W(X),Z=await this.#X.query(this.#Y.countKeysByPrefix,[Y,_]);return Number(Z.rows[0]?.count??0)}scoped(X){return w(this,X)}async#F(X,Y,_=()=>!0){let Z=await this.#X.connect();try{await Z.query(X);try{let $=await Y(Z);return await Z.query(_($)?XX:O),$}catch($){throw await Z.query(O).catch(()=>{}),$}}finally{Z.release()}}async batch(X){if(U("batch operations",X.length),X.length===0)return;await this.#J(),await this.#F(o,async(Y)=>{await S(Y,this.#Y,N(X))})}async conditionalBatch(X,Y){U("conditionalBatch conditions",X.length),U("conditionalBatch operations",Y.length),await this.#J();let _=N(Y),Z;for(let $=0;$<JX;$+=1)try{return await this.#F(r,async(G)=>{if(!await d(G,this.#Y,X))return!1;return await S(G,this.#Y,_),!0},(G)=>G)}catch(G){if(!CX(G))throw G;Z=G}throw Error(`conditionalBatch exhausted ${JX} attempts after retryable transaction failures`,{cause:Z})}async query(X,Y){return await this.#J(),_X(X),this.#F(e,async(_)=>{return(await _.query(X,Y??[])).rows})}#H(){if(!this.#G)return Promise.resolve();return this.#$??=this.#X.end(),this.#$}[Symbol.dispose](){this.#H().catch(()=>{})}async[Symbol.asyncDispose](){await this.#H()}}function AX(X){return f(X,{driverName:"pg",storageName:"PostgresStorage",loadPool:(Y)=>import("pg").then(({default:_})=>new _.Pool({connectionString:Y}))})}class KX extends T{constructor(X,Y=AX){super(X,Y)}}export{KX as PostgresStorage};
15
+ `,selectValueByKey:`SELECT value FROM ${X} WHERE key = $1`,upsertValueByKey:`INSERT INTO ${X} (key, value) VALUES ($1, $2) ON CONFLICT (key) DO UPDATE SET value = EXCLUDED.value`,deleteValueByKey:`DELETE FROM ${X} WHERE key = $1`,selectKeyPresence:`SELECT 1 AS present FROM ${X} WHERE key = $1 LIMIT 1`,countKeysByPrefix:`SELECT COUNT(*) AS count FROM ${X} WHERE key >= $1 AND key < $2`,deleteKeysByPrefix:`DELETE FROM ${X} WHERE key >= $1 AND key < $2`,selectValuesByKeys:`SELECT key, value FROM ${X} WHERE key = ANY($1)`,upsertValuesByKeys:`INSERT INTO ${X} (key, value) SELECT * FROM unnest($1::text[], $2::bytea[]) ON CONFLICT (key) DO UPDATE SET value = EXCLUDED.value`,deleteValuesByKeys:`DELETE FROM ${X} WHERE key = ANY($1)`,keyValueRangeSelect(J,M={}){let{parameters:$,whereOrderLimit:F}=n(J,M);return{parameters:$,sql:`SELECT key, value FROM ${X} ${F}`}},keyRangeSelect(J,M={}){let{parameters:$,whereOrderLimit:F}=n(J,M);return{parameters:$,sql:`SELECT key FROM ${X} ${F}`}},keyRangeDelete(J,M){let{conditions:$,parameters:F}=r(J,M),G=$.join(" AND ");if(M.limit===void 0)return{parameters:F,sql:`DELETE FROM ${X} WHERE ${G}`};return F.push(M.limit),{parameters:F,sql:`DELETE FROM ${X} WHERE key IN (SELECT key FROM ${X} WHERE ${G} ORDER BY key ASC LIMIT $${F.length})`}}}}var o="BEGIN ISOLATION LEVEL SERIALIZABLE",e="BEGIN ISOLATION LEVEL READ COMMITTED",XX="BEGIN READ ONLY",YX="COMMIT",S="ROLLBACK";function _X(X){return O(X,"schema"),`CREATE SCHEMA IF NOT EXISTS "${X}"`}var EX=/^PRAGMA\b/iu,LX=/^PRAGMA\s+(?:[A-Z_][A-Z0-9_]*\.)?[A-Z_][A-Z0-9_]*\s*$/iu,DX=/^SELECT\b/iu;function AX(X){return X.trim().replace(/;+\s*$/u,"").trim()}function NX(X){return LX.test(X)}function ZX(X){let Y=AX(X);if(Y.length===0)throw Error("Storage query must not be empty.");if(Y.includes(";"))throw Error("Storage query must contain exactly one read-only statement.");if(DX.test(Y))return;if(EX.test(Y)&&NX(Y))return;throw Error("Storage query only supports read-only SELECT and PRAGMA statements.")}var CX=new Set(["40001","40P01"]),JX=5;function KX(X){if(typeof X!=="object"||X===null||!("code"in X))return!1;let Y=X.code;return typeof Y==="string"&&CX.has(Y)}class T{#X;#Y;#_;#J;#$;#M;constructor(X,Y){if(this.#$=X.pool===void 0,X.pool===void 0){if(X.url===void 0)throw Error("PostgresKeyValueStorage requires either a `url` to build a pool from, or a pre-built `pool`; neither was provided.");this.#X=Y(X.url)}else this.#X=X.pool;this.#_=X.schema;let _=i({schema:X.schema,table:X.table});this.#Y=t(_)}capabilities(){return{persistence:"remote",readAfterWrite:"linearizable",scanConsistency:"snapshot",atomicBatch:!0,conditionalBatch:!0,boundedRangeDelete:!0}}#Z(){return this.#J??=this.#F().catch((X)=>{throw this.#J=void 0,X}),this.#J}async#F(){if(this.#_!==void 0)await this.#X.query(_X(this.#_));await this.#X.query(this.#Y.createTable),await this.#U()}async#U(){let Y=(await this.#X.query(this.#Y.selectKeyCollation,[this.#Y.tableReference])).rows[0]?.collation;if(Y==="C")return;let _=Y===void 0?"no such table":typeof Y==="string"?`"${Y}"`:"an unexpected collation value";throw Error(`Postgres storage requires the ${this.#Y.tableReference} table's "key" column to use COLLATE "C" (found ${_}). A table created without COLLATE "C" sorts keys by the database locale, which breaks Weft's lexicographic prefix scans. Use a fresh table, or recreate it as: CREATE TABLE ${this.#Y.tableReference} (key TEXT COLLATE "C" PRIMARY KEY, value BYTEA NOT NULL).`)}async get(X){await this.#Z();let _=(await this.#X.query(this.#Y.selectValueByKey,[X])).rows[0];if(_===void 0)return null;let J=_.value;if(J===null||J===void 0)return null;return j(J)}async put(X,Y){await this.#Z(),await this.#X.query(this.#Y.upsertValueByKey,[X,B(Y)])}async delete(X){await this.#Z(),await this.#X.query(this.#Y.deleteValueByKey,[X])}async has(X){return await this.#Z(),(await this.#X.query(this.#Y.selectKeyPresence,[X])).rows.length>0}async deletePrefix(X){await this.#Z();let[Y,_]=W(X),J=await this.#X.query(this.#Y.deleteKeysByPrefix,[Y,_]);return C(J)}async deleteRange(X,Y){await this.#Z();let _=Q(Y),{parameters:J,sql:M}=this.#Y.keyRangeDelete(X,_),$=await this.#X.query(M,J);return C($)}async*scan(X,Y={}){await this.#Z();let{parameters:_,sql:J}=this.#Y.keyValueRangeSelect(X,Y),M=await this.#X.query(J,_);for(let $ of M.rows)yield[$.key,j($.value)]}async*keys(X,Y={}){await this.#Z();let{parameters:_,sql:J}=this.#Y.keyRangeSelect(X,Y),M=await this.#X.query(J,_);for(let $ of M.rows)yield $.key}async count(X){await this.#Z();let[Y,_]=W(X),J=await this.#X.query(this.#Y.countKeysByPrefix,[Y,_]);return Number(J.rows[0]?.count??0)}scoped(X){return f(this,X)}async#G(X,Y,_=()=>!0){let J=await this.#X.connect();try{await J.query(X);try{let M=await Y(J);return await J.query(_(M)?YX:S),M}catch(M){throw await J.query(S).catch(()=>{}),M}}finally{J.release()}}async batch(X){if(U("batch operations",X.length),X.length===0)return;await this.#Z(),await this.#G(e,async(Y)=>{await z(Y,this.#Y,K(X))})}async conditionalBatch(X,Y){U("conditionalBatch conditions",X.length),U("conditionalBatch operations",Y.length),await this.#Z();let _=K(Y),J;for(let M=0;M<JX;M+=1)try{return await this.#G(o,async($)=>{if(!await p($,this.#Y,X))return!1;return await z($,this.#Y,_),!0},($)=>$)}catch($){if(!KX($))throw $;J=$}throw Error(`conditionalBatch exhausted ${JX} attempts after retryable transaction failures`,{cause:J})}async query(X,Y){return await this.#Z(),ZX(X),this.#G(XX,async(_)=>{return(await _.query(X,Y??[])).rows})}#H(){if(!this.#$)return Promise.resolve();return this.#M??=this.#X.end(),this.#M}[Symbol.dispose](){this.#H().catch(()=>{})}async[Symbol.asyncDispose](){await this.#H()}}function zX(X){return d(X,{driverName:"pg",storageName:"PostgresStorage",loadPool:(Y)=>import("pg").then(({default:_})=>new _.Pool({connectionString:Y}))})}class OX extends T{constructor(X,Y=zX){super(X,Y)}}export{OX as PostgresStorage};
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- var LF=import.meta.require,zF=(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},KF=(F,Y,J)=>{let $=(X)=>Y=J?new SuppressedError(X,Y,"An error was suppressed during disposal"):(J=!0,X),j=(X)=>{while(X=F.pop())try{var Q=X[1]&&X[1].call(X[2]);if(X[0])return Promise.resolve(Q).then(j,(V)=>($(V),j()))}catch(V){$(V)}if(J)throw Y};return j()};function K(F,Y,J){if(!F.capabilities()[Y])throw Error(`Feature "${J}" requires storage capability "${Y}", but this storage backend does not provide it.`)}function p(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 B="default";async function T(F,Y){return await F.get(Y)!==null}async function*C(F,Y,J){for await(let[$]of F.scan(Y,J))yield $}async function E(F,Y){let J=0;for await(let $ of C(F,Y))J++;return J}async function b(F,Y){let J=[];for await(let $ of C(F,Y))J.push({type:"delete",key:$});if(J.length===0)return 0;return await F.batch(J),J.length}async function h(F,Y,J){let $=[];for await(let j of C(F,Y,J))$.push({type:"delete",key:j});if($.length===0)return 0;return await F.batch($),$.length}var s=["actrec:","archive:","async-act:","attr:","audit:bulk:","blob:","budget:","budget-charged:","child-by-parent:","ev:","fleet-event-by-workflow:","fleet-event:","fleet-event-tail","idx:","lease:","liveness:","offload:","op:","review:","schedule:","schedule-due:","schedule-run-by-schedule:","schedule-run-link:","schedule-run:","sig:","sigres:","sigseq:","start-idem:","state:","tag:","tool-effect:","upd:","upk:","upr:","wf:","wf-cleanup:","wf-cleanup-needed:","wf-concurrency:","wf-concurrency-holder:","wf-deadline:","wf-delayed:","wf-finalizer-state:","wf-has-services:","wf-headers:","wf-idx-","wf-teardown:","wf-teardown-deadletter:","wf-teardown-needed:","wf-teardown-succeeded:","wf-terminal:"];var P=1e4,EF=1e4;class v extends Error{code="StorageBatchOperationLimitExceededError";cap=P;count;target;constructor(F,Y){super(`${F} count ${Y} exceeds MAX_BATCH_OPERATIONS (${P}).`);this.name="StorageBatchOperationLimitExceededError",this.target=F,this.count=Y}}function U(F,Y){if(Y>P)throw new v(F,Y)}function q(F){return F.length>0?F.slice(0,-1)+String.fromCharCode(F.charCodeAt(F.length-1)+1):"\xFF"}function L(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 S(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 m(F,Y){if(F.has)return F.has(Y);return T(F,Y)}function x(F,Y,J){if(F.keys)return F.keys(Y,J);return C(F,Y,J)}async function y(F,Y){if(F.count)return F.count(Y);return E(F,Y)}async function I(F,Y){if(F.deletePrefix)return F.deletePrefix(Y);return b(F,Y)}async function bF(F,Y){U("batch operations",Y.length),await F.batch(Y)}async function c(F,Y,J){if(U("conditionalBatch conditions",Y.length),U("conditionalBatch operations",J.length),K(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 hF(F){return decodeURIComponent(F)}function OF(F){try{return decodeURIComponent(F)}catch{return null}}var H=(F)=>String(F).padStart(16,"0"),a="0",n="1",O=(F,Y,J,$)=>`sig:${Z(F)}:${Z(Y)}:${$}:${Z(J)}`,vF={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)}`,scheduleRunLink:(F)=>`schedule-run-link:${Z(F)}`,scheduleRunBySchedulePrefix:(F)=>`schedule-run-by-schedule:${Z(F)}:`,scheduleRunBySchedule:(F,Y)=>`schedule-run-by-schedule:${Z(F)}:${Z(Y)}`,operation:(F,Y,J)=>`op:${F}:${H(Y)}:${J}`,operationInflight:(F)=>`op:inflight:${F}`,operationQueued:(F)=>`op:queued:${F}`,operationResolved:(F)=>`op:resolved:${F}`,bulkOperationAuditPrefix:()=>"audit:bulk:",bulkOperationAudit:(F,Y,J)=>`audit:bulk:${H(F)}:${Z(Y)}:${Z(J)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(F,Y)=>`op:resolved-by-time:${H(F)}:${Z(Y)}`,asyncActivity:(F,Y)=>`async-act:v1:${Z(F)}:${Z(Y)}`,asyncActivityResolution:(F,Y)=>`async-act:v1:${Z(F)}:${Z(Y)}:resolution`,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)=>O(F,Y,J,n),startSignal:(F,Y,J)=>O(F,Y,J,a),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:${H(F)}:${Z(Y)}`,terminalCleanup:(F,Y)=>`wf-cleanup:${H(F)}:${Z(Y)}`,teardownTimer:(F,Y)=>`wf-teardown:${H(F)}:${Z(Y)}`,delayedStart:(F,Y)=>`wf-delayed:${H(F)}:${Z(Y)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(F,Y)=>`wf-terminal:${H(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)}`,childWorkflowByParentPrefix:(F,Y)=>`child-by-parent:${Z(F)}:${Y===void 0?"":`${Z(Y)}:`}`,childWorkflowByParent:(F,Y,J)=>`child-by-parent:${Z(F)}:${Y===void 0?"":`${Z(Y)}:`}${Z(J)}`,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)}`,teardownSucceeded:(F)=>`wf-teardown-succeeded:${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:${B}:${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:${H(F)}:${Z(Y)}`,workflowVisibilityUpdated:(F,Y)=>`wf-idx-updated:${H(F)}:${Z(Y)}`,workflowVisibilityDeadline:(F,Y)=>`wf-idx-deadline:${H(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 t(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 W(F){let Y={},J=!1;for(let j of["gt","gte","lt","lte"]){let X=F[j];if(X===void 0)continue;if(typeof X!=="string")throw Error("deleteRange bounds must be strings");Y[j]=X,J=!0}if(!J)throw Error("deleteRange requires at least one of gt/gte/lt/lte; use deletePrefix to delete a whole prefix");let $=t(F.limit);if($!==void 0)Y.limit=$;return Y}async function w(F,Y,J){let $=W(J);if(F.deleteRange)return F.deleteRange(Y,$);return h(F,Y,$)}function A(F){return F.replaceAll(/:+$/g,"")}function r(F,Y){let J=A(F),$=A(Y);if(J.length===0)return $;if($.length===0)return J;return`${J}:${$}`}class N{#F;#J;constructor(F,Y){this.#F=F,this.#J=A(Y)}#Y(F){if(this.#J.length===0)return F;return F.length===0?`${this.#J}:`:`${this.#J}:${F}`}#Z(F){return 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)}})}#$(F){if(this.#J.length===0)return F;return F.slice(this.#J.length+1)}#X(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}#j(F={}){let Y=this.#X(F);if(F.reverse!==void 0)Y.reverse=F.reverse;return Y}#V(F){return this.#X(F)}capabilities(){return this.#F.capabilities()}scoped(F){return new N(this.#F,r(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.#j(Y)))yield[this.#$(J),$]}async batch(F){U("batch operations",F.length),await this.#F.batch(this.#Z(F))}async conditionalBatch(F,Y){return c(this.#F,F.map((J)=>({key:this.#Y(J.key),expectedValue:J.expectedValue})),this.#Z(Y))}async has(F){return m(this.#F,this.#Y(F))}async deletePrefix(F){return I(this.#F,this.#Y(F))}async deleteRange(F,Y){let J=this.#V(W(Y));return w(this.#F,this.#Y(F),J)}async*keys(F,Y){for await(let J of x(this.#F,this.#Y(F),this.#j(Y)))yield this.#$(J)}async count(F){return y(this.#F,this.#Y(F))}[Symbol.dispose](){this.#F[Symbol.dispose]()}}function u(F,Y){return new N(F,Y)}class z{#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,j=q(F),X=this.#Y(F,j);if(X=X.filter((V)=>L(V,Y)),$)X.reverse();let Q=0;for(let V of X){if(J!==void 0&&Q>=J)break;let R=this.#F.get(V);if(R!==void 0)yield[V,R],Q++}}async batch(F){U("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){U("conditionalBatch conditions",F.length),U("conditionalBatch operations",Y.length);for(let J of F){let $=this.#F.get(J.key)??null;if(!S($,J.expectedValue))return!1}return this.#Z(Y),!0}async has(F){return this.#F.has(F)}async deletePrefix(F){let Y=q(F),J=this.#Y(F,Y);for(let $ of J)this.#F.delete($);return J.length}async deleteRange(F,Y){let J=W(Y),$=q(F),j=this.#Y(F,$).filter((Q)=>L(Q,J)),X=J.limit===void 0?j:j.slice(0,J.limit);for(let Q of X)this.#F.delete(Q);return X.length}async*keys(F,Y={}){let{limit:J,reverse:$}=Y,j=q(F),X=this.#Y(F,j);if(X=X.filter((V)=>L(V,Y)),$)X.reverse();let Q=0;for(let V of X){if(J!==void 0&&Q>=J)break;yield V,Q++}}async count(F){let Y=q(F);return this.#Y(F,Y).length}scoped(F){return u(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()}}function _(F,Y){return import.meta.url.endsWith(".ts")?F:Y}async function G(F){return await import(F)}var i=_("./bun-sql.ts","./bun-sql.js"),e=_("./node-sqlite.ts","./node-sqlite.js"),o=_("./lmdb.ts","./lmdb.js"),FF=_("./turso.ts","./turso.js"),YF=_("./neon.ts","./neon.js"),k=_("./indexeddb.ts","./indexeddb.js"),g=_("./web-extension.ts","./web-extension.js"),JF=_("./http.ts","./http.js"),ZF=_("./auto.ts","./auto.js");function l(){return typeof Bun<"u"}function f(){return typeof globalThis.process==="object"&&globalThis.process!==null&&typeof globalThis.process.versions==="object"&&typeof globalThis.process.versions.node==="string"}function $F(){let F=globalThis;return F.browser?.storage!==void 0||F.chrome?.storage!==void 0}function XF(){return typeof globalThis.indexedDB<"u"}async function jF(F){if(l()){let{BunSQLiteStorage:Y}=await G(i);return new Y(F)}if(f()){let{NodeSQLiteStorage:Y}=await G(e);return new Y(F)}throw Error("SQLite storage is only available in Bun or Node runtimes.")}async function VF(){if(l()||f()){let{resolveDefaultStorage:F}=await G(ZF);return F()}if($F()){let{WebExtensionStorage:F}=await G(g);return new F}if(XF()){let{IndexedDBStorage:F}=await G(k);return new F}return new z}var d={memory:async(F)=>new z,sqlite:async(F)=>jF(F.path),lmdb:async(F)=>{let{LMDBStorage:Y}=await G(o);return new Y(F.path)},turso:async(F)=>{let{TursoStorage:Y}=await G(FF);return new Y({url:F.url,...F.authToken===void 0?{}:{authToken:F.authToken}})},neon:async(F)=>{let{NeonStorage:Y}=await G(YF);return new Y({url:F.url})},indexeddb:async(F)=>{let{IndexedDBStorage:Y}=await G(k);return new Y(F.databaseName)},"web-extension":async(F)=>{let{WebExtensionStorage:Y}=await G(g);return new Y(F.area===void 0?{}:{area:F.area})},http:async(F)=>{let{HTTPStorage:Y}=await G(JF);return new Y({baseUrl:F.baseUrl,...F.headers===void 0?{}:{headers:F.headers}})},auto:async(F)=>VF()};function QF(F){if(typeof F!=="object"||F===null)return"unknown";if(!("type"in F))return"unknown";return typeof F.type==="string"?F.type:"unknown"}function HF(F){if(typeof F!=="object"||F===null||Array.isArray(F))throw Error("Storage configuration must be an object.");return F}function D(F,Y,J){let $=F[Y];if(typeof $!=="string"||$.length===0)throw Error(`${J} storage configuration requires "${Y}" as a string.`);return $}function M(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 GF(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 UF(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[$,j]of Object.entries(Y)){if(typeof j!=="string")throw Error('HTTP storage configuration field "headers" must be a string record.');J[$]=j}return J}function _F(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 qF={memory:(F)=>({type:"memory"}),sqlite:(F)=>{let Y=M(F,"path","SQLite");return Y===void 0?{type:"sqlite"}:{type:"sqlite",path:Y}},lmdb:(F)=>({type:"lmdb",path:D(F,"path","LMDB")}),turso:(F)=>{let Y=M(F,"authToken","Turso");return{type:"turso",url:D(F,"url","Turso"),...Y===void 0?{}:{authToken:Y}}},neon:(F)=>({type:"neon",url:D(F,"url","Neon")}),indexeddb:(F)=>{let Y=M(F,"databaseName","IndexedDB");return Y===void 0?{type:"indexeddb"}:{type:"indexeddb",databaseName:Y}},"web-extension":(F)=>{let Y=_F(F);return Y===void 0?{type:"web-extension"}:{type:"web-extension",area:Y}},http:(F)=>{let Y=UF(F);return{type:"http",baseUrl:GF(F,"baseUrl","HTTP"),...Y===void 0?{}:{headers:Y}}},auto:(F)=>({type:"auto"})};function CF(F,Y){return qF[Y](HF(F))}function WF(F){return Object.hasOwn(d,F)}async function sF(F){let Y=QF(F);if(!WF(Y))throw Error(`Unsupported storage configuration type: ${Y}`);let J=CF(F,Y),$=d[Y];return $(J)}export{sF as resolveStorage};
2
+ var PF=import.meta.require;function B(F,Y,Z){if(!F.capabilities()[Y])throw Error(`Feature "${Z}" requires storage capability "${Y}", but this storage backend does not provide it.`)}function s(F){let Y=F.capabilities(),Z=[];if(Y.persistence!=="local"&&Y.persistence!=="remote")Z.push(`persistence must be "local" or "remote" (got "${Y.persistence}")`);if(Y.readAfterWrite!=="linearizable")Z.push(`readAfterWrite must be "linearizable" (got "${Y.readAfterWrite}")`);if(Y.scanConsistency!=="snapshot")Z.push(`scanConsistency must be "snapshot" (got "${Y.scanConsistency}")`);if(!Y.atomicBatch)Z.push("atomicBatch must be true");if(!Y.conditionalBatch)Z.push("conditionalBatch must be true");if(Z.length>0)throw Error(`Storage is not durable enough for recovery: ${Z.join("; ")}.`)}var P="default";async function T(F,Y){return await F.get(Y)!==null}async function*W(F,Y,Z){for await(let[J]of F.scan(Y,Z))yield J}async function E(F,Y){let Z=0;for await(let J of W(F,Y))Z++;return Z}async function b(F,Y){let Z=[];for await(let J of W(F,Y))Z.push({type:"delete",key:J});if(Z.length===0)return 0;return await F.batch(Z),Z.length}async function O(F,Y,Z){let J=[];for await(let j of W(F,Y,Z))J.push({type:"delete",key:j});if(J.length===0)return 0;return await F.batch(J),J.length}function $(F){return encodeURIComponent(F)}function a(F){return decodeURIComponent(F)}function n(F){try{return decodeURIComponent(F)}catch{return null}}var h={workflowOwnerEpoch:(F)=>`wf-owner-epoch:${$(F)}`,workflowOwnerHolder:(F)=>`wf-owner-holder:${$(F)}`,ownershipModeMarker:()=>"ownership-mode-marker"};var t=["actrec:","archive:","async-act:","attr:","audit:bulk:","blob:","budget:","budget-charged:","child-by-parent:","ev:","fleet-event-by-workflow:","fleet-event:","fleet-event-tail","idx:","lease:","liveness:","offload:","ownership-mode-marker","op:","review:","schedule:","schedule-due:","schedule-run-by-schedule:","schedule-run-link:","schedule-run:","sig:","sigres:","sigseq:","start-idem:","state:","tag:","tool-effect:","upd:","upk:","upr:","wf:","wf-cleanup:","wf-cleanup-needed:","wf-concurrency:","wf-concurrency-holder:","wf-deadline:","wf-delayed:","wf-finalizer-state:","wf-has-services:","wf-headers:","wf-idx-","wf-owner-epoch:","wf-owner-holder:","wf-teardown:","wf-teardown-deadletter:","wf-teardown-needed:","wf-teardown-succeeded:","wf-terminal:"];var A=1e4,mF=1e4;class S extends Error{code="StorageBatchOperationLimitExceededError";cap=A;count;target;constructor(F,Y){super(`${F} count ${Y} exceeds MAX_BATCH_OPERATIONS (${A}).`);this.name="StorageBatchOperationLimitExceededError",this.target=F,this.count=Y}}function G(F,Y){if(Y>A)throw new S(F,Y)}function q(F){return F.length>0?F.slice(0,-1)+String.fromCharCode(F.charCodeAt(F.length-1)+1):"\xFF"}function L(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 m(F,Y){if(F===null||Y===null)return F===Y;if(F.byteLength!==Y.byteLength)return!1;for(let Z=0;Z<F.byteLength;Z++)if(F[Z]!==Y[Z])return!1;return!0}async function x(F,Y){if(F.has)return F.has(Y);return T(F,Y)}function y(F,Y,Z){if(F.keys)return F.keys(Y,Z);return W(F,Y,Z)}async function I(F,Y){if(F.count)return F.count(Y);return E(F,Y)}async function w(F,Y){if(F.deletePrefix)return F.deletePrefix(Y);return b(F,Y)}async function xF(F,Y){G("batch operations",Y.length),await F.batch(Y)}async function c(F,Y,Z){if(G("conditionalBatch conditions",Y.length),G("conditionalBatch operations",Z.length),B(F,"conditionalBatch","storageConditionalBatch"),!F.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return F.conditionalBatch(Y,Z)}var V=(F)=>String(F).padStart(16,"0"),r="0",i="1",v=(F,Y,Z,J)=>`sig:${$(F)}:${$(Y)}:${J}:${$(Z)}`,yF={workflow:(F)=>`wf:${$(F)}`,checkpoint:(F)=>`wf:${$(F)}:ckpt`,checkpointHistory:(F,Y)=>`wf:${$(F)}:ckpt:${String(Y).padStart(10,"0")}`,timelinePrefix:(F)=>`wf:${$(F)}:timeline:`,timeline:(F,Y)=>`wf:${$(F)}:timeline:${String(Y).padStart(10,"0")}`,schedule:(F)=>`schedule:${$(F)}`,scheduleTick:(F,Y)=>`schedule-due:${String(F).padStart(16,"0")}:${$(Y)}`,scheduleRun:(F)=>`schedule-run:${$(F)}`,scheduleRunLink:(F)=>`schedule-run-link:${$(F)}`,scheduleRunBySchedulePrefix:(F)=>`schedule-run-by-schedule:${$(F)}:`,scheduleRunBySchedule:(F,Y)=>`schedule-run-by-schedule:${$(F)}:${$(Y)}`,operation:(F,Y,Z)=>`op:${F}:${V(Y)}:${Z}`,operationInflight:(F)=>`op:inflight:${F}`,operationQueued:(F)=>`op:queued:${F}`,operationResolved:(F)=>`op:resolved:${F}`,bulkOperationAuditPrefix:()=>"audit:bulk:",bulkOperationAudit:(F,Y,Z)=>`audit:bulk:${V(F)}:${$(Y)}:${$(Z)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(F,Y)=>`op:resolved-by-time:${V(F)}:${$(Y)}`,asyncActivity:(F,Y)=>`async-act:v1:${$(F)}:${$(Y)}`,asyncActivityResolution:(F,Y)=>`async-act:v1:${$(F)}:${$(Y)}:resolution`,activityReconciliationPrefix:(F)=>`actrec:v1:${$(F)}:`,activityReconciliation:(F,Y,Z)=>`actrec:v1:${$(F)}:${$(Y)}:${Z}`,eventPrefix:(F)=>`ev:${$(F)}:`,event:(F,Y)=>`ev:${$(F)}:${String(Y).padStart(10,"0")}`,eventHead:(F)=>`ev:${$(F)}:head`,eventWatermark:(F)=>`ev:${$(F)}:watermark`,fleetEventPrefix:()=>"fleet-event:",fleetEvent:(F)=>`fleet-event:${String(F).padStart(10,"0")}`,fleetEventTail:()=>"fleet-event-tail",fleetEventByWorkflowPrefix:(F)=>`fleet-event-by-workflow:${$(F)}:`,fleetEventByWorkflow:(F,Y)=>`fleet-event-by-workflow:${$(F)}:${String(Y).padStart(10,"0")}`,signal:(F,Y,Z)=>v(F,Y,Z,i),startSignal:(F,Y,Z)=>v(F,Y,Z,r),signalSequence:(F)=>`sigseq:v1:${$(F)}`,signalAcceptedResponsePrefix:(F)=>`sigres:v1:${$(F)}:`,signalAcceptedResponse:(F,Y,Z)=>`sigres:v1:${$(F)}:${$(Y)}:${$(Z)}`,deadline:(F,Y)=>`wf-deadline:${V(F)}:${$(Y)}`,terminalCleanup:(F,Y)=>`wf-cleanup:${V(F)}:${$(Y)}`,teardownTimer:(F,Y)=>`wf-teardown:${V(F)}:${$(Y)}`,delayedStart:(F,Y)=>`wf-delayed:${V(F)}:${$(Y)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(F,Y)=>`wf-terminal:${V(F)}:${$(Y)}`,attribute:(F)=>`attr:${$(F)}`,attributeIndex:(F,Y,Z)=>`idx:${F}:${Y}:${$(Z)}`,tagIndex:(F,Y)=>`tag:${$(F)}:${$(Y)}`,updatePrefix:(F)=>`upd:${$(F)}:`,update:(F,Y)=>`upd:${$(F)}:${Y}`,updateResponse:(F)=>`upr:${F}`,updateIdempotency:(F,Y)=>`upk:${$(F)}:${Y}`,startIdempotency:(F)=>`start-idem:${$(F)}`,startIdempotencySignalId:(F)=>`start-idem:${F}`,livenessPrefix:()=>"liveness:",liveness:(F)=>`liveness:${$(F)}`,leasePrefix:()=>"lease:",leaseEpoch:()=>"lease:epoch",leaseHolder:()=>"lease:holder",...h,budget:(F,Y,Z)=>`budget:${F}:${Y}:${Z}`,review:(F,Y)=>`review:${$(F)}:${Y}`,workflowHeaders:(F)=>`wf-headers:${$(F)}`,childCancellationPrefix:(F)=>`child-cancel:${$(F)}:`,childCancellation:(F,Y)=>`child-cancel:${$(F)}:${$(Y)}`,childWorkflowByParentPrefix:(F,Y)=>`child-by-parent:${$(F)}:${Y===void 0?"":`${$(Y)}:`}`,childWorkflowByParent:(F,Y,Z)=>`child-by-parent:${$(F)}:${Y===void 0?"":`${$(Y)}:`}${$(Z)}`,terminalCleanupNeeded:(F)=>`wf-cleanup-needed:${$(F)}`,workflowConcurrency:(F,Y)=>`wf-concurrency:${$(F)}:${$(Y)}`,workflowConcurrencyHolder:(F)=>`wf-concurrency-holder:${$(F)}`,workflowHasServices:(F)=>`wf-has-services:${$(F)}`,finalizerState:(F)=>`wf-finalizer-state:${$(F)}`,teardownOwed:(F)=>`wf-teardown-needed:${$(F)}`,teardownSucceeded:(F)=>`wf-teardown-succeeded:${$(F)}`,teardownDeadLetter:(F)=>`wf-teardown-deadletter:${$(F)}`,offload:(F,Y)=>`offload:${$(F)}:${Y}`,archive:(F,Y)=>`archive:${$(F)}:${Y}`,stateExecution:(F,Y)=>`state:execution:${$(F)}:${$(Y)}`,stateWorkflow:(F,Y)=>`state:workflow-scope:${P}:${$(F)}:${$(Y)}`,streamChunkPrefix:(F,Y)=>`blob:${$(F)}:${Y}:chunk:`,streamChunk:(F,Y,Z)=>`blob:${$(F)}:${Y}:chunk:${String(Z).padStart(10,"0")}`,streamTail:(F,Y)=>`blob:${$(F)}:${Y}:tail`,streamMetadata:(F,Y)=>`blob:${$(F)}:${Y}:meta`,budgetCharged:(F)=>`budget-charged:${F}`,toolEffect:(F,Y,Z)=>`tool-effect:${$(F)}:${Y}:${Z}`,workflowVisibilityStatus:(F,Y)=>`wf-idx-status:${$(F)}:${$(Y)}`,workflowVisibilityType:(F,Y)=>`wf-idx-type:${$(F)}:${$(Y)}`,workflowVisibilityCreated:(F,Y)=>`wf-idx-created:${V(F)}:${$(Y)}`,workflowVisibilityUpdated:(F,Y)=>`wf-idx-updated:${V(F)}:${$(Y)}`,workflowVisibilityDeadline:(F,Y)=>`wf-idx-deadline:${V(F)}:${$(Y)}`,workflowVisibilityManifest:(F)=>`wf-idx-manifest:${$(F)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"};function e(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 C(F){let Y={},Z=!1;for(let j of["gt","gte","lt","lte"]){let X=F[j];if(X===void 0)continue;if(typeof X!=="string")throw Error("deleteRange bounds must be strings");Y[j]=X,Z=!0}if(!Z)throw Error("deleteRange requires at least one of gt/gte/lt/lte; use deletePrefix to delete a whole prefix");let J=e(F.limit);if(J!==void 0)Y.limit=J;return Y}async function u(F,Y,Z){let J=C(Z);if(F.deleteRange)return F.deleteRange(Y,J);return O(F,Y,J)}function K(F){return F.replaceAll(/:+$/g,"")}function o(F,Y){let Z=K(F),J=K(Y);if(Z.length===0)return J;if(J.length===0)return Z;return`${Z}:${J}`}class N{#F;#Z;constructor(F,Y){this.#F=F,this.#Z=K(Y)}#Y(F){if(this.#Z.length===0)return F;return F.length===0?`${this.#Z}:`:`${this.#Z}:${F}`}#$(F){return 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)}})}#J(F){if(this.#Z.length===0)return F;return F.slice(this.#Z.length+1)}#X(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}#j(F={}){let Y=this.#X(F);if(F.reverse!==void 0)Y.reverse=F.reverse;return Y}#V(F){return this.#X(F)}capabilities(){return this.#F.capabilities()}scoped(F){return new N(this.#F,o(this.#Z,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[Z,J]of this.#F.scan(this.#Y(F),this.#j(Y)))yield[this.#J(Z),J]}async batch(F){G("batch operations",F.length),await this.#F.batch(this.#$(F))}async conditionalBatch(F,Y){return c(this.#F,F.map((Z)=>({key:this.#Y(Z.key),expectedValue:Z.expectedValue})),this.#$(Y))}async has(F){return x(this.#F,this.#Y(F))}async deletePrefix(F){return w(this.#F,this.#Y(F))}async deleteRange(F,Y){let Z=this.#V(C(Y));return u(this.#F,this.#Y(F),Z)}async*keys(F,Y){for await(let Z of y(this.#F,this.#Y(F),this.#j(Y)))yield this.#J(Z)}async count(F){return I(this.#F,this.#Y(F))}[Symbol.dispose](){this.#F[Symbol.dispose]()}}function k(F,Y){return new N(F,Y)}class z{#F;constructor(){this.#F=new Map}capabilities(){return{persistence:"ephemeral",readAfterWrite:"linearizable",scanConsistency:"snapshot",atomicBatch:!0,conditionalBatch:!0,boundedRangeDelete:!0}}#Z(F,Y,Z){return F>=Y&&F<Z}#Y(F,Y){let Z=[];for(let J of this.#F.keys())if(this.#Z(J,F,Y))Z.push(J);return Z.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:Z,reverse:J}=Y,j=q(F),X=this.#Y(F,j);if(X=X.filter((_)=>L(_,Y)),J)X.reverse();let H=0;for(let _ of X){if(Z!==void 0&&H>=Z)break;let R=this.#F.get(_);if(R!==void 0)yield[_,R],H++}}async batch(F){G("batch operations",F.length),this.#$(F)}#$(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 Z of F){let J=this.#F.get(Z.key)??null;if(!m(J,Z.expectedValue))return!1}return this.#$(Y),!0}async has(F){return this.#F.has(F)}async deletePrefix(F){let Y=q(F),Z=this.#Y(F,Y);for(let J of Z)this.#F.delete(J);return Z.length}async deleteRange(F,Y){let Z=C(Y),J=q(F),j=this.#Y(F,J).filter((H)=>L(H,Z)),X=Z.limit===void 0?j:j.slice(0,Z.limit);for(let H of X)this.#F.delete(H);return X.length}async*keys(F,Y={}){let{limit:Z,reverse:J}=Y,j=q(F),X=this.#Y(F,j);if(X=X.filter((_)=>L(_,Y)),J)X.reverse();let H=0;for(let _ of X){if(Z!==void 0&&H>=Z)break;yield _,H++}}async count(F){let Y=q(F);return this.#Y(F,Y).length}scoped(F){return k(this,F)}get size(){return this.#F.size}clear(){this.#F.clear()}snapshot(){let F=new Map;for(let[Y,Z]of this.#F)F.set(Y,new Uint8Array(Z));return F}[Symbol.dispose](){this.#F.clear()}}function U(F,Y){return import.meta.url.endsWith(".ts")?F:Y}async function Q(F){return await import(F)}var FF=U("./bun-sql.ts","./bun-sql.js"),YF=U("./node-sqlite.ts","./node-sqlite.js"),ZF=U("./lmdb.ts","./lmdb.js"),$F=U("./turso.ts","./turso.js"),JF=U("./neon.ts","./neon.js"),g=U("./indexeddb.ts","./indexeddb.js"),l=U("./web-extension.ts","./web-extension.js"),XF=U("./http.ts","./http.js"),jF=U("./auto.ts","./auto.js");function f(){return typeof Bun<"u"}function d(){return typeof globalThis.process==="object"&&globalThis.process!==null&&typeof globalThis.process.versions==="object"&&typeof globalThis.process.versions.node==="string"}function VF(){let F=globalThis;return F.browser?.storage!==void 0||F.chrome?.storage!==void 0}function QF(){return typeof globalThis.indexedDB<"u"}async function HF(F){if(f()){let{BunSQLiteStorage:Y}=await Q(FF);return new Y(F)}if(d()){let{NodeSQLiteStorage:Y}=await Q(YF);return new Y(F)}throw Error("SQLite storage is only available in Bun or Node runtimes.")}async function GF(){if(f()||d()){let{resolveDefaultStorage:F}=await Q(jF);return F()}if(VF()){let{WebExtensionStorage:F}=await Q(l);return new F}if(QF()){let{IndexedDBStorage:F}=await Q(g);return new F}return new z}var p={memory:async(F)=>new z,sqlite:async(F)=>HF(F.path),lmdb:async(F)=>{let{LMDBStorage:Y}=await Q(ZF);return new Y(F.path)},turso:async(F)=>{let{TursoStorage:Y}=await Q($F);return new Y({url:F.url,...F.authToken===void 0?{}:{authToken:F.authToken}})},neon:async(F)=>{let{NeonStorage:Y}=await Q(JF);return new Y({url:F.url})},indexeddb:async(F)=>{let{IndexedDBStorage:Y}=await Q(g);return new Y(F.databaseName)},"web-extension":async(F)=>{let{WebExtensionStorage:Y}=await Q(l);return new Y(F.area===void 0?{}:{area:F.area})},http:async(F)=>{let{HTTPStorage:Y}=await Q(XF);return new Y({baseUrl:F.baseUrl,...F.headers===void 0?{}:{headers:F.headers}})},auto:async(F)=>GF()};function UF(F){if(typeof F!=="object"||F===null)return"unknown";if(!("type"in F))return"unknown";return typeof F.type==="string"?F.type:"unknown"}function _F(F){if(typeof F!=="object"||F===null||Array.isArray(F))throw Error("Storage configuration must be an object.");return F}function D(F,Y,Z){let J=F[Y];if(typeof J!=="string"||J.length===0)throw Error(`${Z} storage configuration requires "${Y}" as a string.`);return J}function M(F,Y,Z){let J=F[Y];if(J===void 0)return;if(typeof J!=="string")throw Error(`${Z} storage configuration field "${Y}" must be a string.`);return J}function qF(F,Y,Z){let J=F[Y];if(typeof J==="string"||J instanceof URL)return J;throw Error(`${Z} storage configuration requires "${Y}" as a string or URL.`)}function WF(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 Z={};for(let[J,j]of Object.entries(Y)){if(typeof j!=="string")throw Error('HTTP storage configuration field "headers" must be a string record.');Z[J]=j}return Z}function CF(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 LF={memory:(F)=>({type:"memory"}),sqlite:(F)=>{let Y=M(F,"path","SQLite");return Y===void 0?{type:"sqlite"}:{type:"sqlite",path:Y}},lmdb:(F)=>({type:"lmdb",path:D(F,"path","LMDB")}),turso:(F)=>{let Y=M(F,"authToken","Turso");return{type:"turso",url:D(F,"url","Turso"),...Y===void 0?{}:{authToken:Y}}},neon:(F)=>({type:"neon",url:D(F,"url","Neon")}),indexeddb:(F)=>{let Y=M(F,"databaseName","IndexedDB");return Y===void 0?{type:"indexeddb"}:{type:"indexeddb",databaseName:Y}},"web-extension":(F)=>{let Y=CF(F);return Y===void 0?{type:"web-extension"}:{type:"web-extension",area:Y}},http:(F)=>{let Y=WF(F);return{type:"http",baseUrl:qF(F,"baseUrl","HTTP"),...Y===void 0?{}:{headers:Y}}},auto:(F)=>({type:"auto"})};function zF(F,Y){return LF[Y](_F(F))}function BF(F){return Object.hasOwn(p,F)}async function iF(F){let Y=UF(F);if(!BF(Y))throw Error(`Unsupported storage configuration type: ${Y}`);let Z=zF(F,Y),J=p[Y];return J(Z)}export{iF as resolveStorage};
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- var x=import.meta.require,y=(E,_,Y)=>{if(_!=null){if(typeof _!=="object"&&typeof _!=="function")throw TypeError('Object expected to be assigned to "using" declaration');let X;if(Y)X=_[Symbol.asyncDispose];if(X===void 0)X=_[Symbol.dispose];if(typeof X!=="function")throw TypeError("Object not disposable");E.push([Y,X,_])}else if(Y)E.push([Y]);return _},g=(E,_,Y)=>{let X=(U)=>_=Y?new SuppressedError(U,_,"An error was suppressed during disposal"):(Y=!0,U),G=(U)=>{while(U=E.pop())try{var K=U[1]&&U[1].call(U[2]);if(U[0])return Promise.resolve(K).then(G,(Q)=>(X(Q),G()))}catch(Q){X(Q)}if(Y)throw _};return G()};function Z(E,_,Y){if(!E.capabilities()[_])throw Error(`Feature "${Y}" requires storage capability "${_}", but this storage backend does not provide it.`)}function P(E){let _=E.capabilities(),Y=[];if(_.persistence!=="local"&&_.persistence!=="remote")Y.push(`persistence must be "local" or "remote" (got "${_.persistence}")`);if(_.readAfterWrite!=="linearizable")Y.push(`readAfterWrite must be "linearizable" (got "${_.readAfterWrite}")`);if(_.scanConsistency!=="snapshot")Y.push(`scanConsistency must be "snapshot" (got "${_.scanConsistency}")`);if(!_.atomicBatch)Y.push("atomicBatch must be true");if(!_.conditionalBatch)Y.push("conditionalBatch must be true");if(Y.length>0)throw Error(`Storage is not durable enough for recovery: ${Y.join("; ")}.`)}var $="default";async function D(E,_){return await E.get(_)!==null}async function*J(E,_,Y){for await(let[X]of E.scan(_,Y))yield X}async function R(E,_){let Y=0;for await(let X of J(E,_))Y++;return Y}async function B(E,_){let Y=[];for await(let X of J(E,_))Y.push({type:"delete",key:X});if(Y.length===0)return 0;return await E.batch(Y),Y.length}async function C(E,_,Y){let X=[];for await(let G of J(E,_,Y))X.push({type:"delete",key:G});if(X.length===0)return 0;return await E.batch(X),X.length}var h=["actrec:","archive:","async-act:","attr:","audit:bulk:","blob:","budget:","budget-charged:","child-by-parent:","ev:","fleet-event-by-workflow:","fleet-event:","fleet-event-tail","idx:","lease:","liveness:","offload:","op:","review:","schedule:","schedule-due:","schedule-run-by-schedule:","schedule-run-link:","schedule-run:","sig:","sigres:","sigseq:","start-idem:","state:","tag:","tool-effect:","upd:","upk:","upr:","wf:","wf-cleanup:","wf-cleanup-needed:","wf-concurrency:","wf-concurrency-holder:","wf-deadline:","wf-delayed:","wf-finalizer-state:","wf-has-services:","wf-headers:","wf-idx-","wf-teardown:","wf-teardown-deadletter:","wf-teardown-needed:","wf-teardown-succeeded:","wf-terminal:"];var j=1e4,s=1e4;class q 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=_}}function M(E,_){if(_>j)throw new q(E,_)}function n(E){return E.length>0?E.slice(0,-1)+String.fromCharCode(E.charCodeAt(E.length-1)+1):"\xFF"}function t(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 r(E,_){if(E===null||_===null)return E===_;if(E.byteLength!==_.byteLength)return!1;for(let Y=0;Y<E.byteLength;Y++)if(E[Y]!==_[Y])return!1;return!0}async function T(E,_){if(E.has)return E.has(_);return D(E,_)}function W(E,_,Y){if(E.keys)return E.keys(_,Y);return J(E,_,Y)}async function A(E,_){if(E.count)return E.count(_);return R(E,_)}async function v(E,_){if(E.deletePrefix)return E.deletePrefix(_);return B(E,_)}async function i(E,_){M("batch operations",_.length),await E.batch(_)}async function z(E,_,Y){if(M("conditionalBatch conditions",_.length),M("conditionalBatch operations",Y.length),Z(E,"conditionalBatch","storageConditionalBatch"),!E.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return E.conditionalBatch(_,Y)}function F(E){return encodeURIComponent(E)}function e(E){return decodeURIComponent(E)}function o(E){try{return decodeURIComponent(E)}catch{return null}}var V=(E)=>String(E).padStart(16,"0"),b="0",m="1",N=(E,_,Y,X)=>`sig:${F(E)}:${F(_)}:${X}:${F(Y)}`,EE={workflow:(E)=>`wf:${F(E)}`,checkpoint:(E)=>`wf:${F(E)}:ckpt`,checkpointHistory:(E,_)=>`wf:${F(E)}:ckpt:${String(_).padStart(10,"0")}`,timelinePrefix:(E)=>`wf:${F(E)}:timeline:`,timeline:(E,_)=>`wf:${F(E)}:timeline:${String(_).padStart(10,"0")}`,schedule:(E)=>`schedule:${F(E)}`,scheduleTick:(E,_)=>`schedule-due:${String(E).padStart(16,"0")}:${F(_)}`,scheduleRun:(E)=>`schedule-run:${F(E)}`,scheduleRunLink:(E)=>`schedule-run-link:${F(E)}`,scheduleRunBySchedulePrefix:(E)=>`schedule-run-by-schedule:${F(E)}:`,scheduleRunBySchedule:(E,_)=>`schedule-run-by-schedule:${F(E)}:${F(_)}`,operation:(E,_,Y)=>`op:${E}:${V(_)}:${Y}`,operationInflight:(E)=>`op:inflight:${E}`,operationQueued:(E)=>`op:queued:${E}`,operationResolved:(E)=>`op:resolved:${E}`,bulkOperationAuditPrefix:()=>"audit:bulk:",bulkOperationAudit:(E,_,Y)=>`audit:bulk:${V(E)}:${F(_)}:${F(Y)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(E,_)=>`op:resolved-by-time:${V(E)}:${F(_)}`,asyncActivity:(E,_)=>`async-act:v1:${F(E)}:${F(_)}`,asyncActivityResolution:(E,_)=>`async-act:v1:${F(E)}:${F(_)}:resolution`,activityReconciliationPrefix:(E)=>`actrec:v1:${F(E)}:`,activityReconciliation:(E,_,Y)=>`actrec:v1:${F(E)}:${F(_)}:${Y}`,eventPrefix:(E)=>`ev:${F(E)}:`,event:(E,_)=>`ev:${F(E)}:${String(_).padStart(10,"0")}`,eventHead:(E)=>`ev:${F(E)}:head`,eventWatermark:(E)=>`ev:${F(E)}:watermark`,fleetEventPrefix:()=>"fleet-event:",fleetEvent:(E)=>`fleet-event:${String(E).padStart(10,"0")}`,fleetEventTail:()=>"fleet-event-tail",fleetEventByWorkflowPrefix:(E)=>`fleet-event-by-workflow:${F(E)}:`,fleetEventByWorkflow:(E,_)=>`fleet-event-by-workflow:${F(E)}:${String(_).padStart(10,"0")}`,signal:(E,_,Y)=>N(E,_,Y,m),startSignal:(E,_,Y)=>N(E,_,Y,b),signalSequence:(E)=>`sigseq:v1:${F(E)}`,signalAcceptedResponsePrefix:(E)=>`sigres:v1:${F(E)}:`,signalAcceptedResponse:(E,_,Y)=>`sigres:v1:${F(E)}:${F(_)}:${F(Y)}`,deadline:(E,_)=>`wf-deadline:${V(E)}:${F(_)}`,terminalCleanup:(E,_)=>`wf-cleanup:${V(E)}:${F(_)}`,teardownTimer:(E,_)=>`wf-teardown:${V(E)}:${F(_)}`,delayedStart:(E,_)=>`wf-delayed:${V(E)}:${F(_)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(E,_)=>`wf-terminal:${V(E)}:${F(_)}`,attribute:(E)=>`attr:${F(E)}`,attributeIndex:(E,_,Y)=>`idx:${E}:${_}:${F(Y)}`,tagIndex:(E,_)=>`tag:${F(E)}:${F(_)}`,updatePrefix:(E)=>`upd:${F(E)}:`,update:(E,_)=>`upd:${F(E)}:${_}`,updateResponse:(E)=>`upr:${E}`,updateIdempotency:(E,_)=>`upk:${F(E)}:${_}`,startIdempotency:(E)=>`start-idem:${F(E)}`,startIdempotencySignalId:(E)=>`start-idem:${E}`,livenessPrefix:()=>"liveness:",liveness:(E)=>`liveness:${F(E)}`,leasePrefix:()=>"lease:",leaseEpoch:()=>"lease:epoch",leaseHolder:()=>"lease:holder",budget:(E,_,Y)=>`budget:${E}:${_}:${Y}`,review:(E,_)=>`review:${F(E)}:${_}`,workflowHeaders:(E)=>`wf-headers:${F(E)}`,childCancellationPrefix:(E)=>`child-cancel:${F(E)}:`,childCancellation:(E,_)=>`child-cancel:${F(E)}:${F(_)}`,childWorkflowByParentPrefix:(E,_)=>`child-by-parent:${F(E)}:${_===void 0?"":`${F(_)}:`}`,childWorkflowByParent:(E,_,Y)=>`child-by-parent:${F(E)}:${_===void 0?"":`${F(_)}:`}${F(Y)}`,terminalCleanupNeeded:(E)=>`wf-cleanup-needed:${F(E)}`,workflowConcurrency:(E,_)=>`wf-concurrency:${F(E)}:${F(_)}`,workflowConcurrencyHolder:(E)=>`wf-concurrency-holder:${F(E)}`,workflowHasServices:(E)=>`wf-has-services:${F(E)}`,finalizerState:(E)=>`wf-finalizer-state:${F(E)}`,teardownOwed:(E)=>`wf-teardown-needed:${F(E)}`,teardownSucceeded:(E)=>`wf-teardown-succeeded:${F(E)}`,teardownDeadLetter:(E)=>`wf-teardown-deadletter:${F(E)}`,offload:(E,_)=>`offload:${F(E)}:${_}`,archive:(E,_)=>`archive:${F(E)}:${_}`,stateExecution:(E,_)=>`state:execution:${F(E)}:${F(_)}`,stateWorkflow:(E,_)=>`state:workflow-scope:${$}:${F(E)}:${F(_)}`,streamChunkPrefix:(E,_)=>`blob:${F(E)}:${_}:chunk:`,streamChunk:(E,_,Y)=>`blob:${F(E)}:${_}:chunk:${String(Y).padStart(10,"0")}`,streamTail:(E,_)=>`blob:${F(E)}:${_}:tail`,streamMetadata:(E,_)=>`blob:${F(E)}:${_}:meta`,budgetCharged:(E)=>`budget-charged:${E}`,toolEffect:(E,_,Y)=>`tool-effect:${F(E)}:${_}:${Y}`,workflowVisibilityStatus:(E,_)=>`wf-idx-status:${F(E)}:${F(_)}`,workflowVisibilityType:(E,_)=>`wf-idx-type:${F(E)}:${F(_)}`,workflowVisibilityCreated:(E,_)=>`wf-idx-created:${V(E)}:${F(_)}`,workflowVisibilityUpdated:(E,_)=>`wf-idx-updated:${V(E)}:${F(_)}`,workflowVisibilityDeadline:(E,_)=>`wf-idx-deadline:${V(E)}:${F(_)}`,workflowVisibilityManifest:(E)=>`wf-idx-manifest:${F(E)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"};function c(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 _={},Y=!1;for(let G of["gt","gte","lt","lte"]){let U=E[G];if(U===void 0)continue;if(typeof U!=="string")throw Error("deleteRange bounds must be strings");_[G]=U,Y=!0}if(!Y)throw Error("deleteRange requires at least one of gt/gte/lt/lte; use deletePrefix to delete a whole prefix");let X=c(E.limit);if(X!==void 0)_.limit=X;return _}async function O(E,_,Y){let X=H(Y);if(E.deleteRange)return E.deleteRange(_,X);return C(E,_,X)}function S(E){return E.replaceAll(/:+$/g,"")}function u(E,_){let Y=S(E),X=S(_);if(Y.length===0)return X;if(X.length===0)return Y;return`${Y}:${X}`}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}`}#Y(E){return E.map((_)=>{if(_.type==="put")return{type:"put",key:this.#E(_.key),value:_.value};return{type:"delete",key:this.#E(_.key)}})}#X(E){if(this.#F.length===0)return E;return E.slice(this.#F.length+1)}#U(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 _}#V(E={}){let _=this.#U(E);if(E.reverse!==void 0)_.reverse=E.reverse;return _}#G(E){return this.#U(E)}capabilities(){return this.#_.capabilities()}scoped(E){return new L(this.#_,u(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[Y,X]of this.#_.scan(this.#E(E),this.#V(_)))yield[this.#X(Y),X]}async batch(E){M("batch operations",E.length),await this.#_.batch(this.#Y(E))}async conditionalBatch(E,_){return z(this.#_,E.map((Y)=>({key:this.#E(Y.key),expectedValue:Y.expectedValue})),this.#Y(_))}async has(E){return T(this.#_,this.#E(E))}async deletePrefix(E){return v(this.#_,this.#E(E))}async deleteRange(E,_){let Y=this.#G(H(_));return O(this.#_,this.#E(E),Y)}async*keys(E,_){for await(let Y of W(this.#_,this.#E(E),this.#V(_)))yield this.#X(Y)}async count(E){return A(this.#_,this.#E(E))}[Symbol.dispose](){this.#_[Symbol.dispose]()}}function ME(E,_){return new L(E,_)}export{ME as scopedStorage,L as ScopedStorage};
2
+ var y=import.meta.require;function $(E,_,Y){if(!E.capabilities()[_])throw Error(`Feature "${Y}" requires storage capability "${_}", but this storage backend does not provide it.`)}function P(E){let _=E.capabilities(),Y=[];if(_.persistence!=="local"&&_.persistence!=="remote")Y.push(`persistence must be "local" or "remote" (got "${_.persistence}")`);if(_.readAfterWrite!=="linearizable")Y.push(`readAfterWrite must be "linearizable" (got "${_.readAfterWrite}")`);if(_.scanConsistency!=="snapshot")Y.push(`scanConsistency must be "snapshot" (got "${_.scanConsistency}")`);if(!_.atomicBatch)Y.push("atomicBatch must be true");if(!_.conditionalBatch)Y.push("conditionalBatch must be true");if(Y.length>0)throw Error(`Storage is not durable enough for recovery: ${Y.join("; ")}.`)}var J="default";async function B(E,_){return await E.get(_)!==null}async function*V(E,_,Y){for await(let[X]of E.scan(_,Y))yield X}async function R(E,_){let Y=0;for await(let X of V(E,_))Y++;return Y}async function q(E,_){let Y=[];for await(let X of V(E,_))Y.push({type:"delete",key:X});if(Y.length===0)return 0;return await E.batch(Y),Y.length}async function N(E,_,Y){let X=[];for await(let Q of V(E,_,Y))X.push({type:"delete",key:Q});if(X.length===0)return 0;return await E.batch(X),X.length}function F(E){return encodeURIComponent(E)}function K(E){return decodeURIComponent(E)}function b(E){try{return decodeURIComponent(E)}catch{return null}}var W={workflowOwnerEpoch:(E)=>`wf-owner-epoch:${F(E)}`,workflowOwnerHolder:(E)=>`wf-owner-holder:${F(E)}`,ownershipModeMarker:()=>"ownership-mode-marker"};var h=["actrec:","archive:","async-act:","attr:","audit:bulk:","blob:","budget:","budget-charged:","child-by-parent:","ev:","fleet-event-by-workflow:","fleet-event:","fleet-event-tail","idx:","lease:","liveness:","offload:","ownership-mode-marker","op:","review:","schedule:","schedule-due:","schedule-run-by-schedule:","schedule-run-link:","schedule-run:","sig:","sigres:","sigseq:","start-idem:","state:","tag:","tool-effect:","upd:","upk:","upr:","wf:","wf-cleanup:","wf-cleanup-needed:","wf-concurrency:","wf-concurrency-holder:","wf-deadline:","wf-delayed:","wf-finalizer-state:","wf-has-services:","wf-headers:","wf-idx-","wf-owner-epoch:","wf-owner-holder:","wf-teardown:","wf-teardown-deadletter:","wf-teardown-needed:","wf-teardown-succeeded:","wf-terminal:"];var j=1e4,r=1e4;class T 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=_}}function M(E,_){if(_>j)throw new T(E,_)}function e(E){return E.length>0?E.slice(0,-1)+String.fromCharCode(E.charCodeAt(E.length-1)+1):"\xFF"}function o(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 EE(E,_){if(E===null||_===null)return E===_;if(E.byteLength!==_.byteLength)return!1;for(let Y=0;Y<E.byteLength;Y++)if(E[Y]!==_[Y])return!1;return!0}async function S(E,_){if(E.has)return E.has(_);return B(E,_)}function C(E,_,Y){if(E.keys)return E.keys(_,Y);return V(E,_,Y)}async function A(E,_){if(E.count)return E.count(_);return R(E,_)}async function v(E,_){if(E.deletePrefix)return E.deletePrefix(_);return q(E,_)}async function _E(E,_){M("batch operations",_.length),await E.batch(_)}async function z(E,_,Y){if(M("conditionalBatch conditions",_.length),M("conditionalBatch operations",Y.length),$(E,"conditionalBatch","storageConditionalBatch"),!E.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return E.conditionalBatch(_,Y)}var U=(E)=>String(E).padStart(16,"0"),m="0",c="1",D=(E,_,Y,X)=>`sig:${F(E)}:${F(_)}:${X}:${F(Y)}`,FE={workflow:(E)=>`wf:${F(E)}`,checkpoint:(E)=>`wf:${F(E)}:ckpt`,checkpointHistory:(E,_)=>`wf:${F(E)}:ckpt:${String(_).padStart(10,"0")}`,timelinePrefix:(E)=>`wf:${F(E)}:timeline:`,timeline:(E,_)=>`wf:${F(E)}:timeline:${String(_).padStart(10,"0")}`,schedule:(E)=>`schedule:${F(E)}`,scheduleTick:(E,_)=>`schedule-due:${String(E).padStart(16,"0")}:${F(_)}`,scheduleRun:(E)=>`schedule-run:${F(E)}`,scheduleRunLink:(E)=>`schedule-run-link:${F(E)}`,scheduleRunBySchedulePrefix:(E)=>`schedule-run-by-schedule:${F(E)}:`,scheduleRunBySchedule:(E,_)=>`schedule-run-by-schedule:${F(E)}:${F(_)}`,operation:(E,_,Y)=>`op:${E}:${U(_)}:${Y}`,operationInflight:(E)=>`op:inflight:${E}`,operationQueued:(E)=>`op:queued:${E}`,operationResolved:(E)=>`op:resolved:${E}`,bulkOperationAuditPrefix:()=>"audit:bulk:",bulkOperationAudit:(E,_,Y)=>`audit:bulk:${U(E)}:${F(_)}:${F(Y)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(E,_)=>`op:resolved-by-time:${U(E)}:${F(_)}`,asyncActivity:(E,_)=>`async-act:v1:${F(E)}:${F(_)}`,asyncActivityResolution:(E,_)=>`async-act:v1:${F(E)}:${F(_)}:resolution`,activityReconciliationPrefix:(E)=>`actrec:v1:${F(E)}:`,activityReconciliation:(E,_,Y)=>`actrec:v1:${F(E)}:${F(_)}:${Y}`,eventPrefix:(E)=>`ev:${F(E)}:`,event:(E,_)=>`ev:${F(E)}:${String(_).padStart(10,"0")}`,eventHead:(E)=>`ev:${F(E)}:head`,eventWatermark:(E)=>`ev:${F(E)}:watermark`,fleetEventPrefix:()=>"fleet-event:",fleetEvent:(E)=>`fleet-event:${String(E).padStart(10,"0")}`,fleetEventTail:()=>"fleet-event-tail",fleetEventByWorkflowPrefix:(E)=>`fleet-event-by-workflow:${F(E)}:`,fleetEventByWorkflow:(E,_)=>`fleet-event-by-workflow:${F(E)}:${String(_).padStart(10,"0")}`,signal:(E,_,Y)=>D(E,_,Y,c),startSignal:(E,_,Y)=>D(E,_,Y,m),signalSequence:(E)=>`sigseq:v1:${F(E)}`,signalAcceptedResponsePrefix:(E)=>`sigres:v1:${F(E)}:`,signalAcceptedResponse:(E,_,Y)=>`sigres:v1:${F(E)}:${F(_)}:${F(Y)}`,deadline:(E,_)=>`wf-deadline:${U(E)}:${F(_)}`,terminalCleanup:(E,_)=>`wf-cleanup:${U(E)}:${F(_)}`,teardownTimer:(E,_)=>`wf-teardown:${U(E)}:${F(_)}`,delayedStart:(E,_)=>`wf-delayed:${U(E)}:${F(_)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(E,_)=>`wf-terminal:${U(E)}:${F(_)}`,attribute:(E)=>`attr:${F(E)}`,attributeIndex:(E,_,Y)=>`idx:${E}:${_}:${F(Y)}`,tagIndex:(E,_)=>`tag:${F(E)}:${F(_)}`,updatePrefix:(E)=>`upd:${F(E)}:`,update:(E,_)=>`upd:${F(E)}:${_}`,updateResponse:(E)=>`upr:${E}`,updateIdempotency:(E,_)=>`upk:${F(E)}:${_}`,startIdempotency:(E)=>`start-idem:${F(E)}`,startIdempotencySignalId:(E)=>`start-idem:${E}`,livenessPrefix:()=>"liveness:",liveness:(E)=>`liveness:${F(E)}`,leasePrefix:()=>"lease:",leaseEpoch:()=>"lease:epoch",leaseHolder:()=>"lease:holder",...W,budget:(E,_,Y)=>`budget:${E}:${_}:${Y}`,review:(E,_)=>`review:${F(E)}:${_}`,workflowHeaders:(E)=>`wf-headers:${F(E)}`,childCancellationPrefix:(E)=>`child-cancel:${F(E)}:`,childCancellation:(E,_)=>`child-cancel:${F(E)}:${F(_)}`,childWorkflowByParentPrefix:(E,_)=>`child-by-parent:${F(E)}:${_===void 0?"":`${F(_)}:`}`,childWorkflowByParent:(E,_,Y)=>`child-by-parent:${F(E)}:${_===void 0?"":`${F(_)}:`}${F(Y)}`,terminalCleanupNeeded:(E)=>`wf-cleanup-needed:${F(E)}`,workflowConcurrency:(E,_)=>`wf-concurrency:${F(E)}:${F(_)}`,workflowConcurrencyHolder:(E)=>`wf-concurrency-holder:${F(E)}`,workflowHasServices:(E)=>`wf-has-services:${F(E)}`,finalizerState:(E)=>`wf-finalizer-state:${F(E)}`,teardownOwed:(E)=>`wf-teardown-needed:${F(E)}`,teardownSucceeded:(E)=>`wf-teardown-succeeded:${F(E)}`,teardownDeadLetter:(E)=>`wf-teardown-deadletter:${F(E)}`,offload:(E,_)=>`offload:${F(E)}:${_}`,archive:(E,_)=>`archive:${F(E)}:${_}`,stateExecution:(E,_)=>`state:execution:${F(E)}:${F(_)}`,stateWorkflow:(E,_)=>`state:workflow-scope:${J}:${F(E)}:${F(_)}`,streamChunkPrefix:(E,_)=>`blob:${F(E)}:${_}:chunk:`,streamChunk:(E,_,Y)=>`blob:${F(E)}:${_}:chunk:${String(Y).padStart(10,"0")}`,streamTail:(E,_)=>`blob:${F(E)}:${_}:tail`,streamMetadata:(E,_)=>`blob:${F(E)}:${_}:meta`,budgetCharged:(E)=>`budget-charged:${E}`,toolEffect:(E,_,Y)=>`tool-effect:${F(E)}:${_}:${Y}`,workflowVisibilityStatus:(E,_)=>`wf-idx-status:${F(E)}:${F(_)}`,workflowVisibilityType:(E,_)=>`wf-idx-type:${F(E)}:${F(_)}`,workflowVisibilityCreated:(E,_)=>`wf-idx-created:${U(E)}:${F(_)}`,workflowVisibilityUpdated:(E,_)=>`wf-idx-updated:${U(E)}:${F(_)}`,workflowVisibilityDeadline:(E,_)=>`wf-idx-deadline:${U(E)}:${F(_)}`,workflowVisibilityManifest:(E)=>`wf-idx-manifest:${F(E)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"};function u(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 G(E){let _={},Y=!1;for(let Q of["gt","gte","lt","lte"]){let Z=E[Q];if(Z===void 0)continue;if(typeof Z!=="string")throw Error("deleteRange bounds must be strings");_[Q]=Z,Y=!0}if(!Y)throw Error("deleteRange requires at least one of gt/gte/lt/lte; use deletePrefix to delete a whole prefix");let X=u(E.limit);if(X!==void 0)_.limit=X;return _}async function O(E,_,Y){let X=G(Y);if(E.deleteRange)return E.deleteRange(_,X);return N(E,_,X)}function H(E){return E.replaceAll(/:+$/g,"")}function x(E,_){let Y=H(E),X=H(_);if(Y.length===0)return X;if(X.length===0)return Y;return`${Y}:${X}`}class L{#_;#F;constructor(E,_){this.#_=E,this.#F=H(_)}#E(E){if(this.#F.length===0)return E;return E.length===0?`${this.#F}:`:`${this.#F}:${E}`}#Y(E){return E.map((_)=>{if(_.type==="put")return{type:"put",key:this.#E(_.key),value:_.value};return{type:"delete",key:this.#E(_.key)}})}#X(E){if(this.#F.length===0)return E;return E.slice(this.#F.length+1)}#U(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 _}#V(E={}){let _=this.#U(E);if(E.reverse!==void 0)_.reverse=E.reverse;return _}#M(E){return this.#U(E)}capabilities(){return this.#_.capabilities()}scoped(E){return new L(this.#_,x(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[Y,X]of this.#_.scan(this.#E(E),this.#V(_)))yield[this.#X(Y),X]}async batch(E){M("batch operations",E.length),await this.#_.batch(this.#Y(E))}async conditionalBatch(E,_){return z(this.#_,E.map((Y)=>({key:this.#E(Y.key),expectedValue:Y.expectedValue})),this.#Y(_))}async has(E){return S(this.#_,this.#E(E))}async deletePrefix(E){return v(this.#_,this.#E(E))}async deleteRange(E,_){let Y=this.#M(G(_));return O(this.#_,this.#E(E),Y)}async*keys(E,_){for await(let Y of C(this.#_,this.#E(E),this.#V(_)))yield this.#X(Y)}async count(E){return A(this.#_,this.#E(E))}[Symbol.dispose](){this.#_[Symbol.dispose]()}}function jE(E,_){return new L(E,_)}export{jE as scopedStorage,L as ScopedStorage};