@lostgradient/weft 0.24.1 → 0.24.2

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 (97) hide show
  1. package/README.md +1 -1
  2. package/dist/core/engine/bulk-operations-purge.d.ts +1 -1
  3. package/dist/core/engine/bulk-operations-purge.js +3 -2
  4. package/dist/core/engine/bulk-operations-retry.d.ts +16 -1
  5. package/dist/core/engine/bulk-operations-retry.js +19 -6
  6. package/dist/core/engine/bulk-operations.d.ts +3 -2
  7. package/dist/core/engine/bulk-operations.js +2 -2
  8. package/dist/core/engine/callback-creators-bundles.js +1 -1
  9. package/dist/core/engine/callback-creators-schedule.js +2 -2
  10. package/dist/core/engine/child-workflow.d.ts +13 -1
  11. package/dist/core/engine/child-workflow.js +22 -4
  12. package/dist/core/engine/generation-codec.d.ts +22 -0
  13. package/dist/core/engine/generation-codec.js +2 -0
  14. package/dist/core/engine/index.js +1 -1
  15. package/dist/core/engine/lifecycle/recovery-isolation.d.ts +20 -0
  16. package/dist/core/engine/lifecycle/recovery-isolation.js +26 -0
  17. package/dist/core/engine/lifecycle/resume-body.d.ts +44 -0
  18. package/dist/core/engine/lifecycle/resume-body.js +211 -0
  19. package/dist/core/engine/lifecycle/resume.d.ts +46 -3
  20. package/dist/core/engine/lifecycle/resume.js +21 -210
  21. package/dist/core/engine/lifecycle/standalone-claim-acquire.d.ts +68 -2
  22. package/dist/core/engine/lifecycle/standalone-claim-acquire.js +14 -4
  23. package/dist/core/engine/lifecycle/start-commit.d.ts +2 -0
  24. package/dist/core/engine/lifecycle/start-commit.js +16 -8
  25. package/dist/core/engine/lifecycle/start-or-signal-resolution.d.ts +8 -2
  26. package/dist/core/engine/lifecycle/start-or-signal-resolution.js +11 -3
  27. package/dist/core/engine/lifecycle/start-precondition-attribution.d.ts +10 -4
  28. package/dist/core/engine/lifecycle/start-schedule-timing.d.ts +11 -0
  29. package/dist/core/engine/lifecycle/start-schedule-timing.js +21 -0
  30. package/dist/core/engine/lifecycle/start-terminal-conflict-purge.d.ts +90 -11
  31. package/dist/core/engine/lifecycle/start-terminal-conflict-purge.js +24 -5
  32. package/dist/core/engine/lifecycle/start.d.ts +40 -3
  33. package/dist/core/engine/lifecycle/start.js +19 -26
  34. package/dist/core/engine/lifecycle/transition.d.ts +9 -0
  35. package/dist/core/engine/lifecycle/transition.js +20 -25
  36. package/dist/core/engine/lifecycle.d.ts +2 -1
  37. package/dist/core/engine/lifecycle.js +2 -1
  38. package/dist/core/engine/schedule-overlap.js +2 -1
  39. package/dist/core/engine/schedule-run.d.ts +10 -0
  40. package/dist/core/engine/schedule-run.js +1 -1
  41. package/dist/core/engine/schedules.d.ts +11 -2
  42. package/dist/core/engine/termination/complete.js +1 -1
  43. package/dist/core/engine/termination/suspend.js +3 -0
  44. package/dist/core/engine/validation/schedule.d.ts +25 -1
  45. package/dist/core/engine/validation/schedule.js +4 -10
  46. package/dist/core/engine/validation.js +10 -17
  47. package/dist/core/engine/workflow-claim-reclaim-target.js +6 -6
  48. package/dist/core/engine/workflow-claim-registry.d.ts +79 -75
  49. package/dist/core/engine/workflow-claim-registry.js +15 -2
  50. package/dist/core/engine/workflow-generation-fence.d.ts +74 -0
  51. package/dist/core/engine/workflow-generation-fence.js +19 -0
  52. package/dist/core/start-workflow-validation.d.ts +15 -0
  53. package/dist/core/start-workflow-validation.js +11 -1
  54. package/dist/core/workflow-identifiers.d.ts +37 -0
  55. package/dist/core/workflow-identifiers.js +19 -1
  56. package/dist/http.js +2 -2
  57. package/dist/indexeddb.js +1 -1
  58. package/dist/server/fleet-event-feed.js +6 -6
  59. package/dist/server/rest-binding.d.ts +11 -0
  60. package/dist/server/runtime/task-dispatch-envelope.d.ts +32 -5
  61. package/dist/server/runtime/task-dispatch-envelope.js +23 -1
  62. package/dist/server/runtime/task-dispatch.d.ts +3 -1
  63. package/dist/server/runtime/task-dispatch.js +9 -8
  64. package/dist/server/task-ledger-codec.d.ts +19 -0
  65. package/dist/server/task-ledger-codec.js +3 -0
  66. package/dist/server/task-ledger.d.ts +1 -1
  67. package/dist/server/task-ledger.js +1 -0
  68. package/dist/storage/bun-sql.js +132 -99
  69. package/dist/storage/compressed-storage.js +1 -1
  70. package/dist/storage/generation-keys.d.ts +52 -0
  71. package/dist/storage/generation-keys.js +4 -0
  72. package/dist/storage/index.d.ts +76 -65
  73. package/dist/storage/interface.d.ts +24 -232
  74. package/dist/storage/interface.js +1 -1
  75. package/dist/storage/key-prefixes.d.ts +1 -1
  76. package/dist/storage/key-prefixes.js +1 -0
  77. package/dist/storage/lease-keys.d.ts +48 -0
  78. package/dist/storage/lease-keys.js +8 -0
  79. package/dist/storage/lmdb.js +1 -1
  80. package/dist/storage/memory.js +1 -1
  81. package/dist/storage/neon.js +3 -3
  82. package/dist/storage/node-sqlite.js +132 -99
  83. package/dist/storage/postgres.js +3 -3
  84. package/dist/storage/resolve.js +1 -1
  85. package/dist/storage/scoped-storage.js +1 -1
  86. package/dist/storage/signal-keys.d.ts +23 -0
  87. package/dist/storage/signal-keys.js +9 -0
  88. package/dist/storage/testing.js +1 -1
  89. package/dist/storage/turso.js +2 -2
  90. package/dist/storage/workflow-lifecycle-keys.d.ts +128 -0
  91. package/dist/storage/workflow-lifecycle-keys.js +46 -0
  92. package/dist/storage/workflow-record-keys.d.ts +98 -0
  93. package/dist/storage/workflow-record-keys.js +47 -0
  94. package/dist/version.d.ts +1 -1
  95. package/dist/version.js +1 -1
  96. package/dist/web-extension.js +1 -1
  97. package/package.json +1 -1
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- var Oe=import.meta.require;function S(e,t,r){if(!e.capabilities()[t])throw Error(`Feature "${r}" requires storage capability "${t}", but this storage backend does not provide it.`)}function Y(e){let t=e.capabilities(),r=[];if(t.persistence!=="local"&&t.persistence!=="remote")r.push(`persistence must be "local" or "remote" (got "${t.persistence}")`);if(t.readAfterWrite!=="linearizable")r.push(`readAfterWrite must be "linearizable" (got "${t.readAfterWrite}")`);if(t.scanConsistency!=="snapshot")r.push(`scanConsistency must be "snapshot" (got "${t.scanConsistency}")`);if(!t.atomicBatch)r.push("atomicBatch must be true");if(!t.conditionalBatch)r.push("conditionalBatch must be true");if(r.length>0)throw Error(`Storage is not durable enough for recovery: ${r.join("; ")}.`)}function n(e){return encodeURIComponent(e)}function J(e){return decodeURIComponent(e)}function Z(e){try{return decodeURIComponent(e)}catch{return null}}function s(e){return String(e).padStart(16,"0")}var B={catalogEntry:(e,t)=>`catalog-entry:${n(e)}:${n(t)}`,catalogEntryPrefix:(e)=>`catalog-entry:${n(e)}:`,catalogActive:(e)=>`catalog-active:${n(e)}`,catalogTombstone:(e,t)=>`catalog-tombstone:${n(e)}:${n(t)}`,catalogTombstonePrefix:()=>"catalog-tombstone:"};var w="default";async function P(e,t){return await e.get(t)!==null}async function*m(e,t,r){for await(let[i]of e.scan(t,r))yield i}async function E(e,t){let r=0;for await(let i of m(e,t))r++;return r}async function T(e,t){let r=[];for await(let i of m(e,t))r.push({type:"delete",key:i});if(r.length===0)return 0;return await e.batch(r),r.length}async function D(e,t,r){let i=[];for await(let a of m(e,t,r))i.push({type:"delete",key:a});if(i.length===0)return 0;return await e.batch(i),i.length}var A={applicationMailbox:(e,t)=>`appmbx:v1:${n(e)}:${n(t)}`,applicationMailboxSinkProbe:(e,t,r)=>`appprobe:v1:${n(e)}:${n(t)}:${n(r)}`,applicationCommandPrefix:(e,t)=>`appcmd:v1:${n(e)}:${n(t)}:`,applicationCommand:(e,t,r)=>`appcmd:v1:${n(e)}:${n(t)}:${n(r)}`,applicationCommandReadyPrefix:(e,t)=>`appready:v1:${n(e)}:${n(t)}:`,applicationCommandReady:(e,t,r)=>`appready:v1:${n(e)}:${n(t)}:${s(r)}`,applicationCommandIdempotency:(e,t,r)=>`appidem:v1:${n(e)}:${n(t)}:${n(r)}`,applicationCommandBySequencePrefix:(e,t)=>`appseq:v1:${n(e)}:${n(t)}:`,applicationCommandBySequence:(e,t,r)=>`appseq:v1:${n(e)}:${n(t)}:${s(r)}`,applicationCommandTerminalPrefix:(e,t)=>`appterm:v1:${n(e)}:${n(t)}:`,applicationCommandTerminal:(e,t,r,i)=>`appterm:v1:${n(e)}:${n(t)}:${s(r)}:${n(i)}`};var L={applicationOutbox:(e,t)=>`appobx:v1:${n(e)}:${n(t)}`,applicationOutboxSinkProbe:(e,t,r)=>`appprobe:v1:outbox:${n(e)}:${n(t)}:${n(r)}`,applicationDeliveryPrefix:(e,t)=>`appdlv:v1:${n(e)}:${n(t)}:`,applicationDelivery:(e,t,r)=>`appdlv:v1:${n(e)}:${n(t)}:${n(r)}`,applicationDeliveryDuePrefix:(e,t)=>`appdue:v1:${n(e)}:${n(t)}:`,applicationDeliveryDue:(e,t,r,i)=>`appdue:v1:${n(e)}:${n(t)}:${s(r)}:${n(i)}`,applicationDeliveryIdempotency:(e,t,r)=>`appdidem:v1:${n(e)}:${n(t)}:${n(r)}`,applicationDeliveryBySequencePrefix:(e,t)=>`appdseq:v1:${n(e)}:${n(t)}:`,applicationDeliveryBySequence:(e,t,r)=>`appdseq:v1:${n(e)}:${n(t)}:${s(r)}`,applicationDeliveryTerminalPrefix:(e,t)=>`appdterm:v1:${n(e)}:${n(t)}:`,applicationDeliveryTerminal:(e,t,r,i)=>`appdterm:v1:${n(e)}:${n(t)}:${s(r)}:${n(i)}`};var _={workflowOwnerEpoch:(e)=>`wf-owner-epoch:${n(e)}`,workflowOwnerHolder:(e)=>`wf-owner-holder:${n(e)}`,ownershipModeMarker:()=>"ownership-mode-marker"};var ee=["actrec:","appcmd:","appdidem:","appdlv:","appdseq:","appdterm:","appdue:","appidem:","appmbx:","appobx:","appprobe:","appready:","appseq:","appterm:","archive:","async-act:","attr:","audit:bulk:","blob:","budget:","budget-charged:","catalog-active:","catalog-entry:","catalog-tombstone:","child-by-parent:","ev:","fleet-event-by-workflow:","fleet-event:","fleet-event-tail","fleet-event-watermark","idx:","lease:","liveness:","offload:","ownership-mode-marker","op:","review:","schedule:","schedule-due:","schedule-run-by-schedule:","schedule-run-link:","schedule-run:","sig:","sigres:","sigseq:","start-idem:","state:","tag:","tool-effect:","upd:","upk:","upr:","wf:","wf-cleanup:","wf-cleanup-needed:","wf-concurrency:","wf-concurrency-holder:","wf-deadline:","wf-delayed:","wf-finalizer-state:","wf-has-services:","wf-headers:","wf-idx-","wf-owner-epoch:","wf-owner-holder:","wf-teardown:","wf-teardown-deadletter:","wf-teardown-needed:","wf-teardown-succeeded:","wf-terminal:"];var x=1e4,Fe=1e4;class I extends Error{code="StorageBatchOperationLimitExceededError";cap=x;count;target;constructor(e,t){super(`${e} count ${t} exceeds MAX_BATCH_OPERATIONS (${x}).`);this.name="StorageBatchOperationLimitExceededError",this.target=e,this.count=t}}function c(e,t){if(t>x)throw new I(e,t)}function f(e){return e.length>0?e.slice(0,-1)+String.fromCharCode(e.charCodeAt(e.length-1)+1):"\xFF"}function h(e,t={}){if(t.gt!==void 0&&e<=t.gt)return!1;if(t.gte!==void 0&&e<t.gte)return!1;if(t.lt!==void 0&&e>=t.lt)return!1;if(t.lte!==void 0&&e>t.lte)return!1;return!0}function U(e,t){if(e===null||t===null)return e===t;if(e.byteLength!==t.byteLength)return!1;for(let r=0;r<e.byteLength;r++)if(e[r]!==t[r])return!1;return!0}async function q(e,t){if(e.has)return e.has(t);return P(e,t)}function N(e,t,r){if(e.keys)return e.keys(t,r);return m(e,t,r)}async function K(e,t){if(e.count)return e.count(t);return E(e,t)}async function W(e,t){if(e.deletePrefix)return e.deletePrefix(t);return T(e,t)}async function Qe(e,t){c("batch operations",t.length),await e.batch(t)}async function z(e,t,r){if(c("conditionalBatch conditions",t.length),c("conditionalBatch operations",r.length),S(e,"conditionalBatch","storageConditionalBatch"),!e.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return e.conditionalBatch(t,r)}var g=s,te="0",ne="1",M=(e,t,r,i)=>`sig:${n(e)}:${n(t)}:${i}:${n(r)}`,Xe={workflow:(e)=>`wf:${n(e)}`,checkpoint:(e)=>`wf:${n(e)}:ckpt`,checkpointHistory:(e,t)=>`wf:${n(e)}:ckpt:${String(t).padStart(10,"0")}`,timelinePrefix:(e)=>`wf:${n(e)}:timeline:`,timeline:(e,t)=>`wf:${n(e)}:timeline:${String(t).padStart(10,"0")}`,schedule:(e)=>`schedule:${n(e)}`,scheduleTick:(e,t)=>`schedule-due:${String(e).padStart(16,"0")}:${n(t)}`,scheduleRun:(e)=>`schedule-run:${n(e)}`,scheduleRunLink:(e)=>`schedule-run-link:${n(e)}`,scheduleRunBySchedulePrefix:(e)=>`schedule-run-by-schedule:${n(e)}:`,scheduleRunBySchedule:(e,t)=>`schedule-run-by-schedule:${n(e)}:${n(t)}`,operation:(e,t,r)=>`op:${e}:${g(t)}:${r}`,operationInflight:(e)=>`op:inflight:${e}`,operationQueued:(e)=>`op:queued:${e}`,operationResolved:(e)=>`op:resolved:${e}`,bulkOperationAuditPrefix:()=>"audit:bulk:",bulkOperationAudit:(e,t,r)=>`audit:bulk:${g(e)}:${n(t)}:${n(r)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(e,t)=>`op:resolved-by-time:${g(e)}:${n(t)}`,asyncActivity:(e,t)=>`async-act:v1:${n(e)}:${n(t)}`,asyncActivityResolution:(e,t)=>`async-act:v1:${n(e)}:${n(t)}:resolution`,activityReconciliationPrefix:(e)=>`actrec:v1:${n(e)}:`,activityReconciliation:(e,t,r)=>`actrec:v1:${n(e)}:${n(t)}:${r}`,eventPrefix:(e)=>`ev:${n(e)}:`,event:(e,t)=>`ev:${n(e)}:${String(t).padStart(10,"0")}`,eventHead:(e)=>`ev:${n(e)}:head`,eventWatermark:(e)=>`ev:${n(e)}:watermark`,fleetEventPrefix:()=>"fleet-event:",fleetEvent:(e)=>`fleet-event:${String(e).padStart(10,"0")}`,fleetEventTail:()=>"fleet-event-tail",fleetEventWatermark:()=>"fleet-event-watermark",fleetEventByWorkflowPrefix:(e)=>`fleet-event-by-workflow:${n(e)}:`,fleetEventByWorkflow:(e,t)=>`fleet-event-by-workflow:${n(e)}:${String(t).padStart(10,"0")}`,signal:(e,t,r)=>M(e,t,r,ne),startSignal:(e,t,r)=>M(e,t,r,te),signalSequence:(e)=>`sigseq:v1:${n(e)}`,signalAcceptedResponsePrefix:(e)=>`sigres:v1:${n(e)}:`,signalAcceptedResponse:(e,t,r)=>`sigres:v1:${n(e)}:${n(t)}:${n(r)}`,deadline:(e,t)=>`wf-deadline:${g(e)}:${n(t)}`,terminalCleanup:(e,t)=>`wf-cleanup:${g(e)}:${n(t)}`,teardownTimer:(e,t)=>`wf-teardown:${g(e)}:${n(t)}`,delayedStart:(e,t)=>`wf-delayed:${g(e)}:${n(t)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(e,t)=>`wf-terminal:${g(e)}:${n(t)}`,attribute:(e)=>`attr:${n(e)}`,attributeIndex:(e,t,r)=>`idx:${e}:${t}:${n(r)}`,tagIndex:(e,t)=>`tag:${n(e)}:${n(t)}`,updatePrefix:(e)=>`upd:${n(e)}:`,update:(e,t)=>`upd:${n(e)}:${t}`,updateResponse:(e)=>`upr:${e}`,updateIdempotency:(e,t)=>`upk:${n(e)}:${t}`,startIdempotency:(e)=>`start-idem:${n(e)}`,startIdempotencySignalId:(e)=>`start-idem:${e}`,livenessPrefix:()=>"liveness:",liveness:(e)=>`liveness:${n(e)}`,leasePrefix:()=>"lease:",leaseEpoch:()=>"lease:epoch",leaseHolder:()=>"lease:holder",...A,...L,..._,...B,budget:(e,t,r)=>`budget:${e}:${t}:${r}`,review:(e,t)=>`review:${n(e)}:${t}`,workflowHeaders:(e)=>`wf-headers:${n(e)}`,childCancellationPrefix:(e)=>`child-cancel:${n(e)}:`,childCancellation:(e,t)=>`child-cancel:${n(e)}:${n(t)}`,childWorkflowByParentPrefix:(e,t)=>`child-by-parent:${n(e)}:${t===void 0?"":`${n(t)}:`}`,childWorkflowByParent:(e,t,r)=>`child-by-parent:${n(e)}:${t===void 0?"":`${n(t)}:`}${n(r)}`,terminalCleanupNeeded:(e)=>`wf-cleanup-needed:${n(e)}`,workflowConcurrency:(e,t)=>`wf-concurrency:${n(e)}:${n(t)}`,workflowConcurrencyHolder:(e)=>`wf-concurrency-holder:${n(e)}`,workflowHasServices:(e)=>`wf-has-services:${n(e)}`,finalizerState:(e)=>`wf-finalizer-state:${n(e)}`,teardownOwed:(e)=>`wf-teardown-needed:${n(e)}`,teardownSucceeded:(e)=>`wf-teardown-succeeded:${n(e)}`,teardownDeadLetter:(e)=>`wf-teardown-deadletter:${n(e)}`,offload:(e,t)=>`offload:${n(e)}:${t}`,archive:(e,t)=>`archive:${n(e)}:${t}`,stateExecution:(e,t)=>`state:execution:${n(e)}:${n(t)}`,stateWorkflow:(e,t)=>`state:workflow-scope:${w}:${n(e)}:${n(t)}`,streamChunkPrefix:(e,t)=>`blob:${n(e)}:${t}:chunk:`,streamChunk:(e,t,r)=>`blob:${n(e)}:${t}:chunk:${String(r).padStart(10,"0")}`,streamTail:(e,t)=>`blob:${n(e)}:${t}:tail`,streamMetadata:(e,t)=>`blob:${n(e)}:${t}:meta`,budgetCharged:(e)=>`budget-charged:${e}`,toolEffect:(e,t,r)=>`tool-effect:${n(e)}:${t}:${r}`,workflowVisibilityStatus:(e,t)=>`wf-idx-status:${n(e)}:${n(t)}`,workflowVisibilityType:(e,t)=>`wf-idx-type:${n(e)}:${n(t)}`,workflowVisibilityCreated:(e,t)=>`wf-idx-created:${g(e)}:${n(t)}`,workflowVisibilityUpdated:(e,t)=>`wf-idx-updated:${g(e)}:${n(t)}`,workflowVisibilityDeadline:(e,t)=>`wf-idx-deadline:${g(e)}:${n(t)}`,workflowVisibilityManifest:(e)=>`wf-idx-manifest:${n(e)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"};function re(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 y(e){let t={},r=!1;for(let a of["gt","gte","lt","lte"]){let o=e[a];if(o===void 0)continue;if(typeof o!=="string")throw Error("deleteRange bounds must be strings");t[a]=o,r=!0}if(!r)throw Error("deleteRange requires at least one of gt/gte/lt/lte; use deletePrefix to delete a whole prefix");let i=re(e.limit);if(i!==void 0)t.limit=i;return t}async function H(e,t,r){let i=y(r);if(e.deleteRange)return e.deleteRange(t,i);return D(e,t,i)}function v(e){return e.replaceAll(/:+$/g,"")}function ie(e,t){let r=v(e),i=v(t);if(r.length===0)return i;if(i.length===0)return r;return`${r}:${i}`}class C{#e;#n;constructor(e,t){this.#e=e,this.#n=v(t)}#t(e){if(this.#n.length===0)return e;return e.length===0?`${this.#n}:`:`${this.#n}:${e}`}#r(e){return e.map((t)=>{if(t.type==="put")return{type:"put",key:this.#t(t.key),value:t.value};return{type:"delete",key:this.#t(t.key)}})}#i(e){if(this.#n.length===0)return e;return e.slice(this.#n.length+1)}#o(e){let t={};if(e.limit!==void 0)t.limit=e.limit;if(e.gt!==void 0)t.gt=this.#t(e.gt);if(e.gte!==void 0)t.gte=this.#t(e.gte);if(e.lt!==void 0)t.lt=this.#t(e.lt);if(e.lte!==void 0)t.lte=this.#t(e.lte);return t}#a(e={}){let t=this.#o(e);if(e.reverse!==void 0)t.reverse=e.reverse;return t}#s(e){return this.#o(e)}capabilities(){return this.#e.capabilities()}scoped(e){return new C(this.#e,ie(this.#n,e))}async get(e){return this.#e.get(this.#t(e))}async put(e,t){await this.#e.put(this.#t(e),t)}async delete(e){await this.#e.delete(this.#t(e))}async*scan(e,t){for await(let[r,i]of this.#e.scan(this.#t(e),this.#a(t)))yield[this.#i(r),i]}async batch(e){c("batch operations",e.length),await this.#e.batch(this.#r(e))}async conditionalBatch(e,t){return z(this.#e,e.map((r)=>({key:this.#t(r.key),expectedValue:r.expectedValue})),this.#r(t))}async has(e){return q(this.#e,this.#t(e))}async deletePrefix(e){return W(this.#e,this.#t(e))}async deleteRange(e,t){let r=this.#s(y(t));return H(this.#e,this.#t(e),r)}async*keys(e,t){for await(let r of N(this.#e,this.#t(e),this.#a(t)))yield this.#i(r)}async count(e){return K(this.#e,this.#t(e))}[Symbol.dispose](){this.#e[Symbol.dispose]()}}function V(e,t){return new C(e,t)}class b{#e;constructor(){this.#e=new Map}capabilities(){return{persistence:"ephemeral",readAfterWrite:"linearizable",scanConsistency:"snapshot",atomicBatch:!0,conditionalBatch:!0,boundedRangeDelete:!0}}#n(e,t,r){return e>=t&&e<r}#t(e,t){let r=[];for(let i of this.#e.keys())if(this.#n(i,e,t))r.push(i);return r.toSorted()}async get(e){return this.#e.get(e)??null}async put(e,t){this.#e.set(e,t)}async delete(e){this.#e.delete(e)}async*scan(e,t={}){let{limit:r,reverse:i}=t,a=f(e),o=this.#t(e,a);if(o=o.filter((p)=>h(p,t)),i)o.reverse();let u=0;for(let p of o){if(r!==void 0&&u>=r)break;let k=this.#e.get(p);if(k!==void 0)yield[p,k],u++}}async batch(e){c("batch operations",e.length),this.#r(e)}#r(e){for(let t of e)if(t.type==="put")this.#e.set(t.key,t.value);else this.#e.delete(t.key)}async conditionalBatch(e,t){c("conditionalBatch conditions",e.length),c("conditionalBatch operations",t.length);for(let r of e){let i=this.#e.get(r.key)??null;if(!U(i,r.expectedValue))return!1}return this.#r(t),!0}async has(e){return this.#e.has(e)}async deletePrefix(e){let t=f(e),r=this.#t(e,t);for(let i of r)this.#e.delete(i);return r.length}async deleteRange(e,t){let r=y(t),i=f(e),a=this.#t(e,i).filter((u)=>h(u,r)),o=r.limit===void 0?a:a.slice(0,r.limit);for(let u of o)this.#e.delete(u);return o.length}async*keys(e,t={}){let{limit:r,reverse:i}=t,a=f(e),o=this.#t(e,a);if(o=o.filter((p)=>h(p,t)),i)o.reverse();let u=0;for(let p of o){if(r!==void 0&&u>=r)break;yield p,u++}}async count(e){let t=f(e);return this.#t(e,t).length}scoped(e){return V(this,e)}get size(){return this.#e.size}clear(){this.#e.clear()}snapshot(){let e=new Map;for(let[t,r]of this.#e)e.set(t,new Uint8Array(r));return e}[Symbol.dispose](){this.#e.clear()}}function d(e,t){return import.meta.url.endsWith(".ts")?e:t}async function l(e){return await import(e)}var oe=d("./bun-sql.ts","./bun-sql.js"),ae=d("./node-sqlite.ts","./node-sqlite.js"),se=d("./lmdb.ts","./lmdb.js"),ge=d("./turso.ts","./turso.js"),le=d("./neon.ts","./neon.js"),j=d("./indexeddb.ts","./indexeddb.js"),G=d("./web-extension.ts","./web-extension.js"),ue=d("./http.ts","./http.js"),ce=d("./auto.ts","./auto.js");function F(){return typeof Bun<"u"}function Q(){return typeof globalThis.process==="object"&&globalThis.process!==null&&typeof globalThis.process.versions==="object"&&typeof globalThis.process.versions.node==="string"}function de(){let e=globalThis;return e.browser?.storage!==void 0||e.chrome?.storage!==void 0}function pe(){return typeof globalThis.indexedDB<"u"}async function fe(e){if(F()){let{BunSQLiteStorage:t}=await l(oe);return new t(e)}if(Q()){let{NodeSQLiteStorage:t}=await l(ae);return new t(e)}throw Error("SQLite storage is only available in Bun or Node runtimes.")}async function me(){if(F()||Q()){let{resolveDefaultStorage:e}=await l(ce);return e()}if(de()){let{WebExtensionStorage:e}=await l(G);return new e}if(pe()){let{IndexedDBStorage:e}=await l(j);return new e}return new b}var X={memory:async(e)=>new b,sqlite:async(e)=>fe(e.path),lmdb:async(e)=>{let{LMDBStorage:t}=await l(se);return new t(e.path,e.durability===void 0?{}:{durability:e.durability})},turso:async(e)=>{let{TursoStorage:t}=await l(ge);return new t({url:e.url,...e.authToken===void 0?{}:{authToken:e.authToken}})},neon:async(e)=>{let{NeonStorage:t}=await l(le);return new t({url:e.url})},indexeddb:async(e)=>{let{IndexedDBStorage:t}=await l(j);return new t(e.databaseName)},"web-extension":async(e)=>{let{WebExtensionStorage:t}=await l(G);return new t(e.area===void 0?{}:{area:e.area})},http:async(e)=>{let{HTTPStorage:t}=await l(ue);return new t({baseUrl:e.baseUrl,...e.headers===void 0?{}:{headers:e.headers}})},auto:async(e)=>me()};function ye(e){if(typeof e!=="object"||e===null)return"unknown";if(!("type"in e))return"unknown";return typeof e.type==="string"?e.type:"unknown"}function he(e){if(typeof e!=="object"||e===null||Array.isArray(e))throw Error("Storage configuration must be an object.");return e}function O(e,t,r){let i=e[t];if(typeof i!=="string"||i.length===0)throw Error(`${r} storage configuration requires "${t}" as a string.`);return i}function R(e,t,r){let i=e[t];if(i===void 0)return;if(typeof i!=="string")throw Error(`${r} storage configuration field "${t}" must be a string.`);return i}function be(e,t,r){let i=e[t];if(typeof i==="string"||i instanceof URL)return i;throw Error(`${r} storage configuration requires "${t}" as a string or URL.`)}function Se(e){let t=e.headers;if(t===void 0)return;if(typeof t!=="object"||t===null||Array.isArray(t))throw Error('HTTP storage configuration field "headers" must be a string record.');let r={};for(let[i,a]of Object.entries(t)){if(typeof a!=="string")throw Error('HTTP storage configuration field "headers" must be a string record.');r[i]=a}return r}function we(e){let t=e.durability;if(t===void 0)return;if(t==="full"||t==="relaxed")return t;throw Error('LMDB storage configuration field "durability" must be one of full or relaxed.')}function $e(e){let t=e.area;if(t===void 0)return;if(t==="local"||t==="sync"||t==="session"||t==="managed")return t;throw Error('WebExtension storage configuration field "area" must be one of local, sync, session, or managed.')}var xe={memory:(e)=>({type:"memory"}),sqlite:(e)=>{let t=R(e,"path","SQLite");return t===void 0?{type:"sqlite"}:{type:"sqlite",path:t}},lmdb:(e)=>{let t=we(e);return{type:"lmdb",path:O(e,"path","LMDB"),...t===void 0?{}:{durability:t}}},turso:(e)=>{let t=R(e,"authToken","Turso");return{type:"turso",url:O(e,"url","Turso"),...t===void 0?{}:{authToken:t}}},neon:(e)=>({type:"neon",url:O(e,"url","Neon")}),indexeddb:(e)=>{let t=R(e,"databaseName","IndexedDB");return t===void 0?{type:"indexeddb"}:{type:"indexeddb",databaseName:t}},"web-extension":(e)=>{let t=$e(e);return t===void 0?{type:"web-extension"}:{type:"web-extension",area:t}},http:(e)=>{let t=Se(e);return{type:"http",baseUrl:be(e,"baseUrl","HTTP"),...t===void 0?{}:{headers:t}}},auto:(e)=>({type:"auto"})};function ve(e,t){return xe[t](he(e))}function Ce(e){return Object.hasOwn(X,e)}async function dt(e){let t=ye(e);if(!Ce(t))throw Error(`Unsupported storage configuration type: ${t}`);let r=ve(e,t),i=X[t];return i(r)}export{dt as resolveStorage};
2
+ var _e=import.meta.require;function b(e,t,r){if(!e.capabilities()[t])throw Error(`Feature "${r}" requires storage capability "${t}", but this storage backend does not provide it.`)}function oe(e){let t=e.capabilities(),r=[];if(t.persistence!=="local"&&t.persistence!=="remote")r.push(`persistence must be "local" or "remote" (got "${t.persistence}")`);if(t.readAfterWrite!=="linearizable")r.push(`readAfterWrite must be "linearizable" (got "${t.readAfterWrite}")`);if(t.scanConsistency!=="snapshot")r.push(`scanConsistency must be "snapshot" (got "${t.scanConsistency}")`);if(!t.atomicBatch)r.push("atomicBatch must be true");if(!t.conditionalBatch)r.push("conditionalBatch must be true");if(r.length>0)throw Error(`Storage is not durable enough for recovery: ${r.join("; ")}.`)}function n(e){return encodeURIComponent(e)}function ae(e){return decodeURIComponent(e)}function se(e){try{return decodeURIComponent(e)}catch{return null}}function s(e){return String(e).padStart(16,"0")}var B={catalogEntry:(e,t)=>`catalog-entry:${n(e)}:${n(t)}`,catalogEntryPrefix:(e)=>`catalog-entry:${n(e)}:`,catalogActive:(e)=>`catalog-active:${n(e)}`,catalogTombstone:(e,t)=>`catalog-tombstone:${n(e)}:${n(t)}`,catalogTombstonePrefix:()=>"catalog-tombstone:"};async function D(e,t){return await e.get(t)!==null}async function*m(e,t,r){for await(let[i]of e.scan(t,r))yield i}async function T(e,t){let r=0;for await(let i of m(e,t))r++;return r}async function P(e,t){let r=[];for await(let i of m(e,t))r.push({type:"delete",key:i});if(r.length===0)return 0;return await e.batch(r),r.length}async function _(e,t,r){let i=[];for await(let a of m(e,t,r))i.push({type:"delete",key:a});if(i.length===0)return 0;return await e.batch(i),i.length}var A={workflowGeneration:(e)=>`wf-gen:${n(e)}`};var L={livenessPrefix:()=>"liveness:",liveness:(e)=>`liveness:${n(e)}`,leasePrefix:()=>"lease:",leaseEpoch:()=>"lease:epoch",leaseHolder:()=>"lease:holder"};var K={applicationMailbox:(e,t)=>`appmbx:v1:${n(e)}:${n(t)}`,applicationMailboxSinkProbe:(e,t,r)=>`appprobe:v1:${n(e)}:${n(t)}:${n(r)}`,applicationCommandPrefix:(e,t)=>`appcmd:v1:${n(e)}:${n(t)}:`,applicationCommand:(e,t,r)=>`appcmd:v1:${n(e)}:${n(t)}:${n(r)}`,applicationCommandReadyPrefix:(e,t)=>`appready:v1:${n(e)}:${n(t)}:`,applicationCommandReady:(e,t,r)=>`appready:v1:${n(e)}:${n(t)}:${s(r)}`,applicationCommandIdempotency:(e,t,r)=>`appidem:v1:${n(e)}:${n(t)}:${n(r)}`,applicationCommandBySequencePrefix:(e,t)=>`appseq:v1:${n(e)}:${n(t)}:`,applicationCommandBySequence:(e,t,r)=>`appseq:v1:${n(e)}:${n(t)}:${s(r)}`,applicationCommandTerminalPrefix:(e,t)=>`appterm:v1:${n(e)}:${n(t)}:`,applicationCommandTerminal:(e,t,r,i)=>`appterm:v1:${n(e)}:${n(t)}:${s(r)}:${n(i)}`};var I={applicationOutbox:(e,t)=>`appobx:v1:${n(e)}:${n(t)}`,applicationOutboxSinkProbe:(e,t,r)=>`appprobe:v1:outbox:${n(e)}:${n(t)}:${n(r)}`,applicationDeliveryPrefix:(e,t)=>`appdlv:v1:${n(e)}:${n(t)}:`,applicationDelivery:(e,t,r)=>`appdlv:v1:${n(e)}:${n(t)}:${n(r)}`,applicationDeliveryDuePrefix:(e,t)=>`appdue:v1:${n(e)}:${n(t)}:`,applicationDeliveryDue:(e,t,r,i)=>`appdue:v1:${n(e)}:${n(t)}:${s(r)}:${n(i)}`,applicationDeliveryIdempotency:(e,t,r)=>`appdidem:v1:${n(e)}:${n(t)}:${n(r)}`,applicationDeliveryBySequencePrefix:(e,t)=>`appdseq:v1:${n(e)}:${n(t)}:`,applicationDeliveryBySequence:(e,t,r)=>`appdseq:v1:${n(e)}:${n(t)}:${s(r)}`,applicationDeliveryTerminalPrefix:(e,t)=>`appdterm:v1:${n(e)}:${n(t)}:`,applicationDeliveryTerminal:(e,t,r,i)=>`appdterm:v1:${n(e)}:${n(t)}:${s(r)}:${n(i)}`};var W={workflowOwnerEpoch:(e)=>`wf-owner-epoch:${n(e)}`,workflowOwnerHolder:(e)=>`wf-owner-holder:${n(e)}`,ownershipModeMarker:()=>"ownership-mode-marker"};var ge="0",le="1",M=(e,t,r,i)=>`sig:${n(e)}:${n(t)}:${i}:${n(r)}`,N={signal:(e,t,r)=>M(e,t,r,le),startSignal:(e,t,r)=>M(e,t,r,ge),signalSequence:(e)=>`sigseq:v1:${n(e)}`,signalAcceptedResponsePrefix:(e)=>`sigres:v1:${n(e)}:`,signalAcceptedResponse:(e,t,r)=>`sigres:v1:${n(e)}:${n(t)}:${n(r)}`};var w="default";var p=s,U={deadline:(e,t)=>`wf-deadline:${p(e)}:${n(t)}`,terminalCleanup:(e,t)=>`wf-cleanup:${p(e)}:${n(t)}`,teardownTimer:(e,t)=>`wf-teardown:${p(e)}:${n(t)}`,delayedStart:(e,t)=>`wf-delayed:${p(e)}:${n(t)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(e,t)=>`wf-terminal:${p(e)}:${n(t)}`},Y={budget:(e,t,r)=>`budget:${e}:${t}:${r}`,review:(e,t)=>`review:${n(e)}:${t}`,workflowHeaders:(e)=>`wf-headers:${n(e)}`,childCancellationPrefix:(e)=>`child-cancel:${n(e)}:`,childCancellation:(e,t)=>`child-cancel:${n(e)}:${n(t)}`,childWorkflowByParentPrefix:(e,t)=>`child-by-parent:${n(e)}:${t===void 0?"":`${n(t)}:`}`,childWorkflowByParent:(e,t,r)=>`child-by-parent:${n(e)}:${t===void 0?"":`${n(t)}:`}${n(r)}`,terminalCleanupNeeded:(e)=>`wf-cleanup-needed:${n(e)}`,workflowConcurrency:(e,t)=>`wf-concurrency:${n(e)}:${n(t)}`,workflowConcurrencyHolder:(e)=>`wf-concurrency-holder:${n(e)}`,workflowHasServices:(e)=>`wf-has-services:${n(e)}`,finalizerState:(e)=>`wf-finalizer-state:${n(e)}`,teardownOwed:(e)=>`wf-teardown-needed:${n(e)}`,teardownSucceeded:(e)=>`wf-teardown-succeeded:${n(e)}`,teardownDeadLetter:(e)=>`wf-teardown-deadletter:${n(e)}`,offload:(e,t)=>`offload:${n(e)}:${t}`,archive:(e,t)=>`archive:${n(e)}:${t}`,stateExecution:(e,t)=>`state:execution:${n(e)}:${n(t)}`,stateWorkflow:(e,t)=>`state:workflow-scope:${w}:${n(e)}:${n(t)}`,streamChunkPrefix:(e,t)=>`blob:${n(e)}:${t}:chunk:`,streamChunk:(e,t,r)=>`blob:${n(e)}:${t}:chunk:${String(r).padStart(10,"0")}`,streamTail:(e,t)=>`blob:${n(e)}:${t}:tail`,streamMetadata:(e,t)=>`blob:${n(e)}:${t}:meta`,budgetCharged:(e)=>`budget-charged:${e}`,toolEffect:(e,t,r)=>`tool-effect:${n(e)}:${t}:${r}`,workflowVisibilityStatus:(e,t)=>`wf-idx-status:${n(e)}:${n(t)}`,workflowVisibilityType:(e,t)=>`wf-idx-type:${n(e)}:${n(t)}`,workflowVisibilityCreated:(e,t)=>`wf-idx-created:${p(e)}:${n(t)}`,workflowVisibilityUpdated:(e,t)=>`wf-idx-updated:${p(e)}:${n(t)}`,workflowVisibilityDeadline:(e,t)=>`wf-idx-deadline:${p(e)}:${n(t)}`,workflowVisibilityManifest:(e)=>`wf-idx-manifest:${n(e)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"};var E=s,q={workflow:(e)=>`wf:${n(e)}`,checkpoint:(e)=>`wf:${n(e)}:ckpt`,checkpointHistory:(e,t)=>`wf:${n(e)}:ckpt:${String(t).padStart(10,"0")}`,timelinePrefix:(e)=>`wf:${n(e)}:timeline:`,timeline:(e,t)=>`wf:${n(e)}:timeline:${String(t).padStart(10,"0")}`,schedule:(e)=>`schedule:${n(e)}`,scheduleTick:(e,t)=>`schedule-due:${String(e).padStart(16,"0")}:${n(t)}`,scheduleRun:(e)=>`schedule-run:${n(e)}`,scheduleRunLink:(e)=>`schedule-run-link:${n(e)}`,scheduleRunBySchedulePrefix:(e)=>`schedule-run-by-schedule:${n(e)}:`,scheduleRunBySchedule:(e,t)=>`schedule-run-by-schedule:${n(e)}:${n(t)}`,operation:(e,t,r)=>`op:${e}:${E(t)}:${r}`,operationInflight:(e)=>`op:inflight:${e}`,operationQueued:(e)=>`op:queued:${e}`,operationResolved:(e)=>`op:resolved:${e}`,bulkOperationAuditPrefix:()=>"audit:bulk:",bulkOperationAudit:(e,t,r)=>`audit:bulk:${E(e)}:${n(t)}:${n(r)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(e,t)=>`op:resolved-by-time:${E(e)}:${n(t)}`,asyncActivity:(e,t)=>`async-act:v1:${n(e)}:${n(t)}`,asyncActivityResolution:(e,t)=>`async-act:v1:${n(e)}:${n(t)}:resolution`,activityReconciliationPrefix:(e)=>`actrec:v1:${n(e)}:`,activityReconciliation:(e,t,r)=>`actrec:v1:${n(e)}:${n(t)}:${r}`,eventPrefix:(e)=>`ev:${n(e)}:`,event:(e,t)=>`ev:${n(e)}:${String(t).padStart(10,"0")}`,eventHead:(e)=>`ev:${n(e)}:head`,eventWatermark:(e)=>`ev:${n(e)}:watermark`,fleetEventPrefix:()=>"fleet-event:",fleetEvent:(e)=>`fleet-event:${String(e).padStart(10,"0")}`,fleetEventTail:()=>"fleet-event-tail",fleetEventWatermark:()=>"fleet-event-watermark",fleetEventByWorkflowPrefix:(e)=>`fleet-event-by-workflow:${n(e)}:`,fleetEventByWorkflow:(e,t)=>`fleet-event-by-workflow:${n(e)}:${String(t).padStart(10,"0")}`},F={attribute:(e)=>`attr:${n(e)}`,attributeIndex:(e,t,r)=>`idx:${e}:${t}:${n(r)}`,tagIndex:(e,t)=>`tag:${n(e)}:${n(t)}`,updatePrefix:(e)=>`upd:${n(e)}:`,update:(e,t)=>`upd:${n(e)}:${t}`,updateResponse:(e)=>`upr:${e}`,updateIdempotency:(e,t)=>`upk:${n(e)}:${t}`,startIdempotency:(e)=>`start-idem:${n(e)}`,startIdempotencySignalId:(e)=>`start-idem:${e}`};var ce=["actrec:","appcmd:","appdidem:","appdlv:","appdseq:","appdterm:","appdue:","appidem:","appmbx:","appobx:","appprobe:","appready:","appseq:","appterm:","archive:","async-act:","attr:","audit:bulk:","blob:","budget:","budget-charged:","catalog-active:","catalog-entry:","catalog-tombstone:","child-by-parent:","ev:","fleet-event-by-workflow:","fleet-event:","fleet-event-tail","fleet-event-watermark","idx:","lease:","liveness:","offload:","ownership-mode-marker","op:","review:","schedule:","schedule-due:","schedule-run-by-schedule:","schedule-run-link:","schedule-run:","sig:","sigres:","sigseq:","start-idem:","state:","tag:","tool-effect:","upd:","upk:","upr:","wf:","wf-cleanup:","wf-cleanup-needed:","wf-concurrency:","wf-concurrency-holder:","wf-deadline:","wf-delayed:","wf-finalizer-state:","wf-gen:","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 O=1e4,yt=1e4;class z extends Error{code="StorageBatchOperationLimitExceededError";cap=O;count;target;constructor(e,t){super(`${e} count ${t} exceeds MAX_BATCH_OPERATIONS (${O}).`);this.name="StorageBatchOperationLimitExceededError",this.target=e,this.count=t}}function c(e,t){if(t>O)throw new z(e,t)}function f(e){return e.length>0?e.slice(0,-1)+String.fromCharCode(e.charCodeAt(e.length-1)+1):"\xFF"}function h(e,t={}){if(t.gt!==void 0&&e<=t.gt)return!1;if(t.gte!==void 0&&e<t.gte)return!1;if(t.lt!==void 0&&e>=t.lt)return!1;if(t.lte!==void 0&&e>t.lte)return!1;return!0}function H(e,t){if(e===null||t===null)return e===t;if(e.byteLength!==t.byteLength)return!1;for(let r=0;r<e.byteLength;r++)if(e[r]!==t[r])return!1;return!0}async function G(e,t){if(e.has)return e.has(t);return D(e,t)}function V(e,t,r){if(e.keys)return e.keys(t,r);return m(e,t,r)}async function j(e,t){if(e.count)return e.count(t);return T(e,t)}async function X(e,t){if(e.deletePrefix)return e.deletePrefix(t);return P(e,t)}async function ht(e,t){c("batch operations",t.length),await e.batch(t)}async function Q(e,t,r){if(c("conditionalBatch conditions",t.length),c("conditionalBatch operations",r.length),b(e,"conditionalBatch","storageConditionalBatch"),!e.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return e.conditionalBatch(t,r)}var St={...q,...N,...U,...F,...L,...K,...I,...W,...B,...A,...Y};function ue(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 y(e){let t={},r=!1;for(let a of["gt","gte","lt","lte"]){let o=e[a];if(o===void 0)continue;if(typeof o!=="string")throw Error("deleteRange bounds must be strings");t[a]=o,r=!0}if(!r)throw Error("deleteRange requires at least one of gt/gte/lt/lte; use deletePrefix to delete a whole prefix");let i=ue(e.limit);if(i!==void 0)t.limit=i;return t}async function J(e,t,r){let i=y(r);if(e.deleteRange)return e.deleteRange(t,i);return _(e,t,i)}function C(e){return e.replaceAll(/:+$/g,"")}function de(e,t){let r=C(e),i=C(t);if(r.length===0)return i;if(i.length===0)return r;return`${r}:${i}`}class x{#e;#n;constructor(e,t){this.#e=e,this.#n=C(t)}#t(e){if(this.#n.length===0)return e;return e.length===0?`${this.#n}:`:`${this.#n}:${e}`}#r(e){return e.map((t)=>{if(t.type==="put")return{type:"put",key:this.#t(t.key),value:t.value};return{type:"delete",key:this.#t(t.key)}})}#i(e){if(this.#n.length===0)return e;return e.slice(this.#n.length+1)}#o(e){let t={};if(e.limit!==void 0)t.limit=e.limit;if(e.gt!==void 0)t.gt=this.#t(e.gt);if(e.gte!==void 0)t.gte=this.#t(e.gte);if(e.lt!==void 0)t.lt=this.#t(e.lt);if(e.lte!==void 0)t.lte=this.#t(e.lte);return t}#a(e={}){let t=this.#o(e);if(e.reverse!==void 0)t.reverse=e.reverse;return t}#s(e){return this.#o(e)}capabilities(){return this.#e.capabilities()}scoped(e){return new x(this.#e,de(this.#n,e))}async get(e){return this.#e.get(this.#t(e))}async put(e,t){await this.#e.put(this.#t(e),t)}async delete(e){await this.#e.delete(this.#t(e))}async*scan(e,t){for await(let[r,i]of this.#e.scan(this.#t(e),this.#a(t)))yield[this.#i(r),i]}async batch(e){c("batch operations",e.length),await this.#e.batch(this.#r(e))}async conditionalBatch(e,t){return Q(this.#e,e.map((r)=>({key:this.#t(r.key),expectedValue:r.expectedValue})),this.#r(t))}async has(e){return G(this.#e,this.#t(e))}async deletePrefix(e){return X(this.#e,this.#t(e))}async deleteRange(e,t){let r=this.#s(y(t));return J(this.#e,this.#t(e),r)}async*keys(e,t){for await(let r of V(this.#e,this.#t(e),this.#a(t)))yield this.#i(r)}async count(e){return j(this.#e,this.#t(e))}[Symbol.dispose](){this.#e[Symbol.dispose]()}}function Z(e,t){return new x(e,t)}class S{#e;constructor(){this.#e=new Map}capabilities(){return{persistence:"ephemeral",readAfterWrite:"linearizable",scanConsistency:"snapshot",atomicBatch:!0,conditionalBatch:!0,boundedRangeDelete:!0}}#n(e,t,r){return e>=t&&e<r}#t(e,t){let r=[];for(let i of this.#e.keys())if(this.#n(i,e,t))r.push(i);return r.toSorted()}async get(e){return this.#e.get(e)??null}async put(e,t){this.#e.set(e,t)}async delete(e){this.#e.delete(e)}async*scan(e,t={}){let{limit:r,reverse:i}=t,a=f(e),o=this.#t(e,a);if(o=o.filter((d)=>h(d,t)),i)o.reverse();let l=0;for(let d of o){if(r!==void 0&&l>=r)break;let k=this.#e.get(d);if(k!==void 0)yield[d,k],l++}}async batch(e){c("batch operations",e.length),this.#r(e)}#r(e){for(let t of e)if(t.type==="put")this.#e.set(t.key,t.value);else this.#e.delete(t.key)}async conditionalBatch(e,t){c("conditionalBatch conditions",e.length),c("conditionalBatch operations",t.length);for(let r of e){let i=this.#e.get(r.key)??null;if(!H(i,r.expectedValue))return!1}return this.#r(t),!0}async has(e){return this.#e.has(e)}async deletePrefix(e){let t=f(e),r=this.#t(e,t);for(let i of r)this.#e.delete(i);return r.length}async deleteRange(e,t){let r=y(t),i=f(e),a=this.#t(e,i).filter((l)=>h(l,r)),o=r.limit===void 0?a:a.slice(0,r.limit);for(let l of o)this.#e.delete(l);return o.length}async*keys(e,t={}){let{limit:r,reverse:i}=t,a=f(e),o=this.#t(e,a);if(o=o.filter((d)=>h(d,t)),i)o.reverse();let l=0;for(let d of o){if(r!==void 0&&l>=r)break;yield d,l++}}async count(e){let t=f(e);return this.#t(e,t).length}scoped(e){return Z(this,e)}get size(){return this.#e.size}clear(){this.#e.clear()}snapshot(){let e=new Map;for(let[t,r]of this.#e)e.set(t,new Uint8Array(r));return e}[Symbol.dispose](){this.#e.clear()}}function u(e,t){return import.meta.url.endsWith(".ts")?e:t}async function g(e){return await import(e)}var pe=u("./bun-sql.ts","./bun-sql.js"),fe=u("./node-sqlite.ts","./node-sqlite.js"),me=u("./lmdb.ts","./lmdb.js"),ye=u("./turso.ts","./turso.js"),he=u("./neon.ts","./neon.js"),ee=u("./indexeddb.ts","./indexeddb.js"),te=u("./web-extension.ts","./web-extension.js"),Se=u("./http.ts","./http.js"),be=u("./auto.ts","./auto.js");function ne(){return typeof Bun<"u"}function re(){return typeof globalThis.process==="object"&&globalThis.process!==null&&typeof globalThis.process.versions==="object"&&typeof globalThis.process.versions.node==="string"}function we(){let e=globalThis;return e.browser?.storage!==void 0||e.chrome?.storage!==void 0}function $e(){return typeof globalThis.indexedDB<"u"}async function Ee(e){if(ne()){let{BunSQLiteStorage:t}=await g(pe);return new t(e)}if(re()){let{NodeSQLiteStorage:t}=await g(fe);return new t(e)}throw Error("SQLite storage is only available in Bun or Node runtimes.")}async function Oe(){if(ne()||re()){let{resolveDefaultStorage:e}=await g(be);return e()}if(we()){let{WebExtensionStorage:e}=await g(te);return new e}if($e()){let{IndexedDBStorage:e}=await g(ee);return new e}return new S}var ie={memory:async(e)=>new S,sqlite:async(e)=>Ee(e.path),lmdb:async(e)=>{let{LMDBStorage:t}=await g(me);return new t(e.path,e.durability===void 0?{}:{durability:e.durability})},turso:async(e)=>{let{TursoStorage:t}=await g(ye);return new t({url:e.url,...e.authToken===void 0?{}:{authToken:e.authToken}})},neon:async(e)=>{let{NeonStorage:t}=await g(he);return new t({url:e.url})},indexeddb:async(e)=>{let{IndexedDBStorage:t}=await g(ee);return new t(e.databaseName)},"web-extension":async(e)=>{let{WebExtensionStorage:t}=await g(te);return new t(e.area===void 0?{}:{area:e.area})},http:async(e)=>{let{HTTPStorage:t}=await g(Se);return new t({baseUrl:e.baseUrl,...e.headers===void 0?{}:{headers:e.headers}})},auto:async(e)=>Oe()};function Ce(e){if(typeof e!=="object"||e===null)return"unknown";if(!("type"in e))return"unknown";return typeof e.type==="string"?e.type:"unknown"}function xe(e){if(typeof e!=="object"||e===null||Array.isArray(e))throw Error("Storage configuration must be an object.");return e}function v(e,t,r){let i=e[t];if(typeof i!=="string"||i.length===0)throw Error(`${r} storage configuration requires "${t}" as a string.`);return i}function R(e,t,r){let i=e[t];if(i===void 0)return;if(typeof i!=="string")throw Error(`${r} storage configuration field "${t}" must be a string.`);return i}function ve(e,t,r){let i=e[t];if(typeof i==="string"||i instanceof URL)return i;throw Error(`${r} storage configuration requires "${t}" as a string or URL.`)}function Re(e){let t=e.headers;if(t===void 0)return;if(typeof t!=="object"||t===null||Array.isArray(t))throw Error('HTTP storage configuration field "headers" must be a string record.');let r={};for(let[i,a]of Object.entries(t)){if(typeof a!=="string")throw Error('HTTP storage configuration field "headers" must be a string record.');r[i]=a}return r}function ke(e){let t=e.durability;if(t===void 0)return;if(t==="full"||t==="relaxed")return t;throw Error('LMDB storage configuration field "durability" must be one of full or relaxed.')}function Be(e){let t=e.area;if(t===void 0)return;if(t==="local"||t==="sync"||t==="session"||t==="managed")return t;throw Error('WebExtension storage configuration field "area" must be one of local, sync, session, or managed.')}var De={memory:(e)=>({type:"memory"}),sqlite:(e)=>{let t=R(e,"path","SQLite");return t===void 0?{type:"sqlite"}:{type:"sqlite",path:t}},lmdb:(e)=>{let t=ke(e);return{type:"lmdb",path:v(e,"path","LMDB"),...t===void 0?{}:{durability:t}}},turso:(e)=>{let t=R(e,"authToken","Turso");return{type:"turso",url:v(e,"url","Turso"),...t===void 0?{}:{authToken:t}}},neon:(e)=>({type:"neon",url:v(e,"url","Neon")}),indexeddb:(e)=>{let t=R(e,"databaseName","IndexedDB");return t===void 0?{type:"indexeddb"}:{type:"indexeddb",databaseName:t}},"web-extension":(e)=>{let t=Be(e);return t===void 0?{type:"web-extension"}:{type:"web-extension",area:t}},http:(e)=>{let t=Re(e);return{type:"http",baseUrl:ve(e,"baseUrl","HTTP"),...t===void 0?{}:{headers:t}}},auto:(e)=>({type:"auto"})};function Te(e,t){return De[t](xe(e))}function Pe(e){return Object.hasOwn(ie,e)}async function At(e){let t=Ce(e);if(!Pe(t))throw Error(`Unsupported storage configuration type: ${t}`);let r=Te(e,t),i=ie[t];return i(r)}export{At as resolveStorage};
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- var M=import.meta.require;function p(e,t,r){if(!e.capabilities()[t])throw Error(`Feature "${r}" requires storage capability "${t}", but this storage backend does not provide it.`)}function I(e){let t=e.capabilities(),r=[];if(t.persistence!=="local"&&t.persistence!=="remote")r.push(`persistence must be "local" or "remote" (got "${t.persistence}")`);if(t.readAfterWrite!=="linearizable")r.push(`readAfterWrite must be "linearizable" (got "${t.readAfterWrite}")`);if(t.scanConsistency!=="snapshot")r.push(`scanConsistency must be "snapshot" (got "${t.scanConsistency}")`);if(!t.atomicBatch)r.push("atomicBatch must be true");if(!t.conditionalBatch)r.push("conditionalBatch must be true");if(r.length>0)throw Error(`Storage is not durable enough for recovery: ${r.join("; ")}.`)}function n(e){return encodeURIComponent(e)}function _(e){return decodeURIComponent(e)}function K(e){try{return decodeURIComponent(e)}catch{return null}}function o(e){return String(e).padStart(16,"0")}var h={catalogEntry:(e,t)=>`catalog-entry:${n(e)}:${n(t)}`,catalogEntryPrefix:(e)=>`catalog-entry:${n(e)}:`,catalogActive:(e)=>`catalog-active:${n(e)}`,catalogTombstone:(e,t)=>`catalog-tombstone:${n(e)}:${n(t)}`,catalogTombstonePrefix:()=>"catalog-tombstone:"};var d="default";async function b(e,t){return await e.get(t)!==null}async function*s(e,t,r){for await(let[i]of e.scan(t,r))yield i}async function w(e,t){let r=0;for await(let i of s(e,t))r++;return r}async function S(e,t){let r=[];for await(let i of s(e,t))r.push({type:"delete",key:i});if(r.length===0)return 0;return await e.batch(r),r.length}async function v(e,t,r){let i=[];for await(let g of s(e,t,r))i.push({type:"delete",key:g});if(i.length===0)return 0;return await e.batch(i),i.length}var x={applicationMailbox:(e,t)=>`appmbx:v1:${n(e)}:${n(t)}`,applicationMailboxSinkProbe:(e,t,r)=>`appprobe:v1:${n(e)}:${n(t)}:${n(r)}`,applicationCommandPrefix:(e,t)=>`appcmd:v1:${n(e)}:${n(t)}:`,applicationCommand:(e,t,r)=>`appcmd:v1:${n(e)}:${n(t)}:${n(r)}`,applicationCommandReadyPrefix:(e,t)=>`appready:v1:${n(e)}:${n(t)}:`,applicationCommandReady:(e,t,r)=>`appready:v1:${n(e)}:${n(t)}:${o(r)}`,applicationCommandIdempotency:(e,t,r)=>`appidem:v1:${n(e)}:${n(t)}:${n(r)}`,applicationCommandBySequencePrefix:(e,t)=>`appseq:v1:${n(e)}:${n(t)}:`,applicationCommandBySequence:(e,t,r)=>`appseq:v1:${n(e)}:${n(t)}:${o(r)}`,applicationCommandTerminalPrefix:(e,t)=>`appterm:v1:${n(e)}:${n(t)}:`,applicationCommandTerminal:(e,t,r,i)=>`appterm:v1:${n(e)}:${n(t)}:${o(r)}:${n(i)}`};var O={applicationOutbox:(e,t)=>`appobx:v1:${n(e)}:${n(t)}`,applicationOutboxSinkProbe:(e,t,r)=>`appprobe:v1:outbox:${n(e)}:${n(t)}:${n(r)}`,applicationDeliveryPrefix:(e,t)=>`appdlv:v1:${n(e)}:${n(t)}:`,applicationDelivery:(e,t,r)=>`appdlv:v1:${n(e)}:${n(t)}:${n(r)}`,applicationDeliveryDuePrefix:(e,t)=>`appdue:v1:${n(e)}:${n(t)}:`,applicationDeliveryDue:(e,t,r,i)=>`appdue:v1:${n(e)}:${n(t)}:${o(r)}:${n(i)}`,applicationDeliveryIdempotency:(e,t,r)=>`appdidem:v1:${n(e)}:${n(t)}:${n(r)}`,applicationDeliveryBySequencePrefix:(e,t)=>`appdseq:v1:${n(e)}:${n(t)}:`,applicationDeliveryBySequence:(e,t,r)=>`appdseq:v1:${n(e)}:${n(t)}:${o(r)}`,applicationDeliveryTerminalPrefix:(e,t)=>`appdterm:v1:${n(e)}:${n(t)}:`,applicationDeliveryTerminal:(e,t,r,i)=>`appdterm:v1:${n(e)}:${n(t)}:${o(r)}:${n(i)}`};var C={workflowOwnerEpoch:(e)=>`wf-owner-epoch:${n(e)}`,workflowOwnerHolder:(e)=>`wf-owner-holder:${n(e)}`,ownershipModeMarker:()=>"ownership-mode-marker"};var L=["actrec:","appcmd:","appdidem:","appdlv:","appdseq:","appdterm:","appdue:","appidem:","appmbx:","appobx:","appprobe:","appready:","appseq:","appterm:","archive:","async-act:","attr:","audit:bulk:","blob:","budget:","budget-charged:","catalog-active:","catalog-entry:","catalog-tombstone:","child-by-parent:","ev:","fleet-event-by-workflow:","fleet-event:","fleet-event-tail","fleet-event-watermark","idx:","lease:","liveness:","offload:","ownership-mode-marker","op:","review:","schedule:","schedule-due:","schedule-run-by-schedule:","schedule-run-link:","schedule-run:","sig:","sigres:","sigseq:","start-idem:","state:","tag:","tool-effect:","upd:","upk:","upr:","wf:","wf-cleanup:","wf-cleanup-needed:","wf-concurrency:","wf-concurrency-holder:","wf-deadline:","wf-delayed:","wf-finalizer-state:","wf-has-services:","wf-headers:","wf-idx-","wf-owner-epoch:","wf-owner-holder:","wf-teardown:","wf-teardown-deadletter:","wf-teardown-needed:","wf-teardown-succeeded:","wf-terminal:"];var u=1e4,pe=1e4;class k extends Error{code="StorageBatchOperationLimitExceededError";cap=u;count;target;constructor(e,t){super(`${e} count ${t} exceeds MAX_BATCH_OPERATIONS (${u}).`);this.name="StorageBatchOperationLimitExceededError",this.target=e,this.count=t}}function l(e,t){if(t>u)throw new k(e,t)}function de(e){return e.length>0?e.slice(0,-1)+String.fromCharCode(e.charCodeAt(e.length-1)+1):"\xFF"}function ue(e,t={}){if(t.gt!==void 0&&e<=t.gt)return!1;if(t.gte!==void 0&&e<t.gte)return!1;if(t.lt!==void 0&&e>=t.lt)return!1;if(t.lte!==void 0&&e>t.lte)return!1;return!0}function fe(e,t){if(e===null||t===null)return e===t;if(e.byteLength!==t.byteLength)return!1;for(let r=0;r<e.byteLength;r++)if(e[r]!==t[r])return!1;return!0}async function P(e,t){if(e.has)return e.has(t);return b(e,t)}function B(e,t,r){if(e.keys)return e.keys(t,r);return s(e,t,r)}async function D(e,t){if(e.count)return e.count(t);return w(e,t)}async function E(e,t){if(e.deletePrefix)return e.deletePrefix(t);return S(e,t)}async function me(e,t){l("batch operations",t.length),await e.batch(t)}async function A(e,t,r){if(l("conditionalBatch conditions",t.length),l("conditionalBatch operations",r.length),p(e,"conditionalBatch","storageConditionalBatch"),!e.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return e.conditionalBatch(t,r)}var a=o,z="0",q="1",R=(e,t,r,i)=>`sig:${n(e)}:${n(t)}:${i}:${n(r)}`,ye={workflow:(e)=>`wf:${n(e)}`,checkpoint:(e)=>`wf:${n(e)}:ckpt`,checkpointHistory:(e,t)=>`wf:${n(e)}:ckpt:${String(t).padStart(10,"0")}`,timelinePrefix:(e)=>`wf:${n(e)}:timeline:`,timeline:(e,t)=>`wf:${n(e)}:timeline:${String(t).padStart(10,"0")}`,schedule:(e)=>`schedule:${n(e)}`,scheduleTick:(e,t)=>`schedule-due:${String(e).padStart(16,"0")}:${n(t)}`,scheduleRun:(e)=>`schedule-run:${n(e)}`,scheduleRunLink:(e)=>`schedule-run-link:${n(e)}`,scheduleRunBySchedulePrefix:(e)=>`schedule-run-by-schedule:${n(e)}:`,scheduleRunBySchedule:(e,t)=>`schedule-run-by-schedule:${n(e)}:${n(t)}`,operation:(e,t,r)=>`op:${e}:${a(t)}:${r}`,operationInflight:(e)=>`op:inflight:${e}`,operationQueued:(e)=>`op:queued:${e}`,operationResolved:(e)=>`op:resolved:${e}`,bulkOperationAuditPrefix:()=>"audit:bulk:",bulkOperationAudit:(e,t,r)=>`audit:bulk:${a(e)}:${n(t)}:${n(r)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(e,t)=>`op:resolved-by-time:${a(e)}:${n(t)}`,asyncActivity:(e,t)=>`async-act:v1:${n(e)}:${n(t)}`,asyncActivityResolution:(e,t)=>`async-act:v1:${n(e)}:${n(t)}:resolution`,activityReconciliationPrefix:(e)=>`actrec:v1:${n(e)}:`,activityReconciliation:(e,t,r)=>`actrec:v1:${n(e)}:${n(t)}:${r}`,eventPrefix:(e)=>`ev:${n(e)}:`,event:(e,t)=>`ev:${n(e)}:${String(t).padStart(10,"0")}`,eventHead:(e)=>`ev:${n(e)}:head`,eventWatermark:(e)=>`ev:${n(e)}:watermark`,fleetEventPrefix:()=>"fleet-event:",fleetEvent:(e)=>`fleet-event:${String(e).padStart(10,"0")}`,fleetEventTail:()=>"fleet-event-tail",fleetEventWatermark:()=>"fleet-event-watermark",fleetEventByWorkflowPrefix:(e)=>`fleet-event-by-workflow:${n(e)}:`,fleetEventByWorkflow:(e,t)=>`fleet-event-by-workflow:${n(e)}:${String(t).padStart(10,"0")}`,signal:(e,t,r)=>R(e,t,r,q),startSignal:(e,t,r)=>R(e,t,r,z),signalSequence:(e)=>`sigseq:v1:${n(e)}`,signalAcceptedResponsePrefix:(e)=>`sigres:v1:${n(e)}:`,signalAcceptedResponse:(e,t,r)=>`sigres:v1:${n(e)}:${n(t)}:${n(r)}`,deadline:(e,t)=>`wf-deadline:${a(e)}:${n(t)}`,terminalCleanup:(e,t)=>`wf-cleanup:${a(e)}:${n(t)}`,teardownTimer:(e,t)=>`wf-teardown:${a(e)}:${n(t)}`,delayedStart:(e,t)=>`wf-delayed:${a(e)}:${n(t)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(e,t)=>`wf-terminal:${a(e)}:${n(t)}`,attribute:(e)=>`attr:${n(e)}`,attributeIndex:(e,t,r)=>`idx:${e}:${t}:${n(r)}`,tagIndex:(e,t)=>`tag:${n(e)}:${n(t)}`,updatePrefix:(e)=>`upd:${n(e)}:`,update:(e,t)=>`upd:${n(e)}:${t}`,updateResponse:(e)=>`upr:${e}`,updateIdempotency:(e,t)=>`upk:${n(e)}:${t}`,startIdempotency:(e)=>`start-idem:${n(e)}`,startIdempotencySignalId:(e)=>`start-idem:${e}`,livenessPrefix:()=>"liveness:",liveness:(e)=>`liveness:${n(e)}`,leasePrefix:()=>"lease:",leaseEpoch:()=>"lease:epoch",leaseHolder:()=>"lease:holder",...x,...O,...C,...h,budget:(e,t,r)=>`budget:${e}:${t}:${r}`,review:(e,t)=>`review:${n(e)}:${t}`,workflowHeaders:(e)=>`wf-headers:${n(e)}`,childCancellationPrefix:(e)=>`child-cancel:${n(e)}:`,childCancellation:(e,t)=>`child-cancel:${n(e)}:${n(t)}`,childWorkflowByParentPrefix:(e,t)=>`child-by-parent:${n(e)}:${t===void 0?"":`${n(t)}:`}`,childWorkflowByParent:(e,t,r)=>`child-by-parent:${n(e)}:${t===void 0?"":`${n(t)}:`}${n(r)}`,terminalCleanupNeeded:(e)=>`wf-cleanup-needed:${n(e)}`,workflowConcurrency:(e,t)=>`wf-concurrency:${n(e)}:${n(t)}`,workflowConcurrencyHolder:(e)=>`wf-concurrency-holder:${n(e)}`,workflowHasServices:(e)=>`wf-has-services:${n(e)}`,finalizerState:(e)=>`wf-finalizer-state:${n(e)}`,teardownOwed:(e)=>`wf-teardown-needed:${n(e)}`,teardownSucceeded:(e)=>`wf-teardown-succeeded:${n(e)}`,teardownDeadLetter:(e)=>`wf-teardown-deadletter:${n(e)}`,offload:(e,t)=>`offload:${n(e)}:${t}`,archive:(e,t)=>`archive:${n(e)}:${t}`,stateExecution:(e,t)=>`state:execution:${n(e)}:${n(t)}`,stateWorkflow:(e,t)=>`state:workflow-scope:${d}:${n(e)}:${n(t)}`,streamChunkPrefix:(e,t)=>`blob:${n(e)}:${t}:chunk:`,streamChunk:(e,t,r)=>`blob:${n(e)}:${t}:chunk:${String(r).padStart(10,"0")}`,streamTail:(e,t)=>`blob:${n(e)}:${t}:tail`,streamMetadata:(e,t)=>`blob:${n(e)}:${t}:meta`,budgetCharged:(e)=>`budget-charged:${e}`,toolEffect:(e,t,r)=>`tool-effect:${n(e)}:${t}:${r}`,workflowVisibilityStatus:(e,t)=>`wf-idx-status:${n(e)}:${n(t)}`,workflowVisibilityType:(e,t)=>`wf-idx-type:${n(e)}:${n(t)}`,workflowVisibilityCreated:(e,t)=>`wf-idx-created:${a(e)}:${n(t)}`,workflowVisibilityUpdated:(e,t)=>`wf-idx-updated:${a(e)}:${n(t)}`,workflowVisibilityDeadline:(e,t)=>`wf-idx-deadline:${a(e)}:${n(t)}`,workflowVisibilityManifest:(e)=>`wf-idx-manifest:${n(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 f(e){let t={},r=!1;for(let g of["gt","gte","lt","lte"]){let c=e[g];if(c===void 0)continue;if(typeof c!=="string")throw Error("deleteRange bounds must be strings");t[g]=c,r=!0}if(!r)throw Error("deleteRange requires at least one of gt/gte/lt/lte; use deletePrefix to delete a whole prefix");let i=U(e.limit);if(i!==void 0)t.limit=i;return t}async function T(e,t,r){let i=f(r);if(e.deleteRange)return e.deleteRange(t,i);return v(e,t,i)}function m(e){return e.replaceAll(/:+$/g,"")}function W(e,t){let r=m(e),i=m(t);if(r.length===0)return i;if(i.length===0)return r;return`${r}:${i}`}class y{#t;#n;constructor(e,t){this.#t=e,this.#n=m(t)}#e(e){if(this.#n.length===0)return e;return e.length===0?`${this.#n}:`:`${this.#n}:${e}`}#r(e){return e.map((t)=>{if(t.type==="put")return{type:"put",key:this.#e(t.key),value:t.value};return{type:"delete",key:this.#e(t.key)}})}#i(e){if(this.#n.length===0)return e;return e.slice(this.#n.length+1)}#o(e){let t={};if(e.limit!==void 0)t.limit=e.limit;if(e.gt!==void 0)t.gt=this.#e(e.gt);if(e.gte!==void 0)t.gte=this.#e(e.gte);if(e.lt!==void 0)t.lt=this.#e(e.lt);if(e.lte!==void 0)t.lte=this.#e(e.lte);return t}#a(e={}){let t=this.#o(e);if(e.reverse!==void 0)t.reverse=e.reverse;return t}#s(e){return this.#o(e)}capabilities(){return this.#t.capabilities()}scoped(e){return new y(this.#t,W(this.#n,e))}async get(e){return this.#t.get(this.#e(e))}async put(e,t){await this.#t.put(this.#e(e),t)}async delete(e){await this.#t.delete(this.#e(e))}async*scan(e,t){for await(let[r,i]of this.#t.scan(this.#e(e),this.#a(t)))yield[this.#i(r),i]}async batch(e){l("batch operations",e.length),await this.#t.batch(this.#r(e))}async conditionalBatch(e,t){return A(this.#t,e.map((r)=>({key:this.#e(r.key),expectedValue:r.expectedValue})),this.#r(t))}async has(e){return P(this.#t,this.#e(e))}async deletePrefix(e){return E(this.#t,this.#e(e))}async deleteRange(e,t){let r=this.#s(f(t));return T(this.#t,this.#e(e),r)}async*keys(e,t){for await(let r of B(this.#t,this.#e(e),this.#a(t)))yield this.#i(r)}async count(e){return D(this.#t,this.#e(e))}[Symbol.dispose](){this.#t[Symbol.dispose]()}}function Re(e,t){return new y(e,t)}export{y as ScopedStorage,Re as scopedStorage};
2
+ var j=import.meta.require;function p(e,t,r){if(!e.capabilities()[t])throw Error(`Feature "${r}" requires storage capability "${t}", but this storage backend does not provide it.`)}function z(e){let t=e.capabilities(),r=[];if(t.persistence!=="local"&&t.persistence!=="remote")r.push(`persistence must be "local" or "remote" (got "${t.persistence}")`);if(t.readAfterWrite!=="linearizable")r.push(`readAfterWrite must be "linearizable" (got "${t.readAfterWrite}")`);if(t.scanConsistency!=="snapshot")r.push(`scanConsistency must be "snapshot" (got "${t.scanConsistency}")`);if(!t.atomicBatch)r.push("atomicBatch must be true");if(!t.conditionalBatch)r.push("conditionalBatch must be true");if(r.length>0)throw Error(`Storage is not durable enough for recovery: ${r.join("; ")}.`)}function n(e){return encodeURIComponent(e)}function q(e){return decodeURIComponent(e)}function U(e){try{return decodeURIComponent(e)}catch{return null}}function o(e){return String(e).padStart(16,"0")}var b={catalogEntry:(e,t)=>`catalog-entry:${n(e)}:${n(t)}`,catalogEntryPrefix:(e)=>`catalog-entry:${n(e)}:`,catalogActive:(e)=>`catalog-active:${n(e)}`,catalogTombstone:(e,t)=>`catalog-tombstone:${n(e)}:${n(t)}`,catalogTombstonePrefix:()=>"catalog-tombstone:"};async function S(e,t){return await e.get(t)!==null}async function*s(e,t,r){for await(let[i]of e.scan(t,r))yield i}async function w(e,t){let r=0;for await(let i of s(e,t))r++;return r}async function O(e,t){let r=[];for await(let i of s(e,t))r.push({type:"delete",key:i});if(r.length===0)return 0;return await e.batch(r),r.length}async function E(e,t,r){let i=[];for await(let g of s(e,t,r))i.push({type:"delete",key:g});if(i.length===0)return 0;return await e.batch(i),i.length}var x={workflowGeneration:(e)=>`wf-gen:${n(e)}`};var v={livenessPrefix:()=>"liveness:",liveness:(e)=>`liveness:${n(e)}`,leasePrefix:()=>"lease:",leaseEpoch:()=>"lease:epoch",leaseHolder:()=>"lease:holder"};var C={applicationMailbox:(e,t)=>`appmbx:v1:${n(e)}:${n(t)}`,applicationMailboxSinkProbe:(e,t,r)=>`appprobe:v1:${n(e)}:${n(t)}:${n(r)}`,applicationCommandPrefix:(e,t)=>`appcmd:v1:${n(e)}:${n(t)}:`,applicationCommand:(e,t,r)=>`appcmd:v1:${n(e)}:${n(t)}:${n(r)}`,applicationCommandReadyPrefix:(e,t)=>`appready:v1:${n(e)}:${n(t)}:`,applicationCommandReady:(e,t,r)=>`appready:v1:${n(e)}:${n(t)}:${o(r)}`,applicationCommandIdempotency:(e,t,r)=>`appidem:v1:${n(e)}:${n(t)}:${n(r)}`,applicationCommandBySequencePrefix:(e,t)=>`appseq:v1:${n(e)}:${n(t)}:`,applicationCommandBySequence:(e,t,r)=>`appseq:v1:${n(e)}:${n(t)}:${o(r)}`,applicationCommandTerminalPrefix:(e,t)=>`appterm:v1:${n(e)}:${n(t)}:`,applicationCommandTerminal:(e,t,r,i)=>`appterm:v1:${n(e)}:${n(t)}:${o(r)}:${n(i)}`};var R={applicationOutbox:(e,t)=>`appobx:v1:${n(e)}:${n(t)}`,applicationOutboxSinkProbe:(e,t,r)=>`appprobe:v1:outbox:${n(e)}:${n(t)}:${n(r)}`,applicationDeliveryPrefix:(e,t)=>`appdlv:v1:${n(e)}:${n(t)}:`,applicationDelivery:(e,t,r)=>`appdlv:v1:${n(e)}:${n(t)}:${n(r)}`,applicationDeliveryDuePrefix:(e,t)=>`appdue:v1:${n(e)}:${n(t)}:`,applicationDeliveryDue:(e,t,r,i)=>`appdue:v1:${n(e)}:${n(t)}:${o(r)}:${n(i)}`,applicationDeliveryIdempotency:(e,t,r)=>`appdidem:v1:${n(e)}:${n(t)}:${n(r)}`,applicationDeliveryBySequencePrefix:(e,t)=>`appdseq:v1:${n(e)}:${n(t)}:`,applicationDeliveryBySequence:(e,t,r)=>`appdseq:v1:${n(e)}:${n(t)}:${o(r)}`,applicationDeliveryTerminalPrefix:(e,t)=>`appdterm:v1:${n(e)}:${n(t)}:`,applicationDeliveryTerminal:(e,t,r,i)=>`appdterm:v1:${n(e)}:${n(t)}:${o(r)}:${n(i)}`};var k={workflowOwnerEpoch:(e)=>`wf-owner-epoch:${n(e)}`,workflowOwnerHolder:(e)=>`wf-owner-holder:${n(e)}`,ownershipModeMarker:()=>"ownership-mode-marker"};var M="0",X="1",P=(e,t,r,i)=>`sig:${n(e)}:${n(t)}:${i}:${n(r)}`,_={signal:(e,t,r)=>P(e,t,r,X),startSignal:(e,t,r)=>P(e,t,r,M),signalSequence:(e)=>`sigseq:v1:${n(e)}`,signalAcceptedResponsePrefix:(e)=>`sigres:v1:${n(e)}:`,signalAcceptedResponse:(e,t,r)=>`sigres:v1:${n(e)}:${n(t)}:${n(r)}`};var d="default";var a=o,D={deadline:(e,t)=>`wf-deadline:${a(e)}:${n(t)}`,terminalCleanup:(e,t)=>`wf-cleanup:${a(e)}:${n(t)}`,teardownTimer:(e,t)=>`wf-teardown:${a(e)}:${n(t)}`,delayedStart:(e,t)=>`wf-delayed:${a(e)}:${n(t)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(e,t)=>`wf-terminal:${a(e)}:${n(t)}`},B={budget:(e,t,r)=>`budget:${e}:${t}:${r}`,review:(e,t)=>`review:${n(e)}:${t}`,workflowHeaders:(e)=>`wf-headers:${n(e)}`,childCancellationPrefix:(e)=>`child-cancel:${n(e)}:`,childCancellation:(e,t)=>`child-cancel:${n(e)}:${n(t)}`,childWorkflowByParentPrefix:(e,t)=>`child-by-parent:${n(e)}:${t===void 0?"":`${n(t)}:`}`,childWorkflowByParent:(e,t,r)=>`child-by-parent:${n(e)}:${t===void 0?"":`${n(t)}:`}${n(r)}`,terminalCleanupNeeded:(e)=>`wf-cleanup-needed:${n(e)}`,workflowConcurrency:(e,t)=>`wf-concurrency:${n(e)}:${n(t)}`,workflowConcurrencyHolder:(e)=>`wf-concurrency-holder:${n(e)}`,workflowHasServices:(e)=>`wf-has-services:${n(e)}`,finalizerState:(e)=>`wf-finalizer-state:${n(e)}`,teardownOwed:(e)=>`wf-teardown-needed:${n(e)}`,teardownSucceeded:(e)=>`wf-teardown-succeeded:${n(e)}`,teardownDeadLetter:(e)=>`wf-teardown-deadletter:${n(e)}`,offload:(e,t)=>`offload:${n(e)}:${t}`,archive:(e,t)=>`archive:${n(e)}:${t}`,stateExecution:(e,t)=>`state:execution:${n(e)}:${n(t)}`,stateWorkflow:(e,t)=>`state:workflow-scope:${d}:${n(e)}:${n(t)}`,streamChunkPrefix:(e,t)=>`blob:${n(e)}:${t}:chunk:`,streamChunk:(e,t,r)=>`blob:${n(e)}:${t}:chunk:${String(r).padStart(10,"0")}`,streamTail:(e,t)=>`blob:${n(e)}:${t}:tail`,streamMetadata:(e,t)=>`blob:${n(e)}:${t}:meta`,budgetCharged:(e)=>`budget-charged:${e}`,toolEffect:(e,t,r)=>`tool-effect:${n(e)}:${t}:${r}`,workflowVisibilityStatus:(e,t)=>`wf-idx-status:${n(e)}:${n(t)}`,workflowVisibilityType:(e,t)=>`wf-idx-type:${n(e)}:${n(t)}`,workflowVisibilityCreated:(e,t)=>`wf-idx-created:${a(e)}:${n(t)}`,workflowVisibilityUpdated:(e,t)=>`wf-idx-updated:${a(e)}:${n(t)}`,workflowVisibilityDeadline:(e,t)=>`wf-idx-deadline:${a(e)}:${n(t)}`,workflowVisibilityManifest:(e)=>`wf-idx-manifest:${n(e)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"};var u=o,K={workflow:(e)=>`wf:${n(e)}`,checkpoint:(e)=>`wf:${n(e)}:ckpt`,checkpointHistory:(e,t)=>`wf:${n(e)}:ckpt:${String(t).padStart(10,"0")}`,timelinePrefix:(e)=>`wf:${n(e)}:timeline:`,timeline:(e,t)=>`wf:${n(e)}:timeline:${String(t).padStart(10,"0")}`,schedule:(e)=>`schedule:${n(e)}`,scheduleTick:(e,t)=>`schedule-due:${String(e).padStart(16,"0")}:${n(t)}`,scheduleRun:(e)=>`schedule-run:${n(e)}`,scheduleRunLink:(e)=>`schedule-run-link:${n(e)}`,scheduleRunBySchedulePrefix:(e)=>`schedule-run-by-schedule:${n(e)}:`,scheduleRunBySchedule:(e,t)=>`schedule-run-by-schedule:${n(e)}:${n(t)}`,operation:(e,t,r)=>`op:${e}:${u(t)}:${r}`,operationInflight:(e)=>`op:inflight:${e}`,operationQueued:(e)=>`op:queued:${e}`,operationResolved:(e)=>`op:resolved:${e}`,bulkOperationAuditPrefix:()=>"audit:bulk:",bulkOperationAudit:(e,t,r)=>`audit:bulk:${u(e)}:${n(t)}:${n(r)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(e,t)=>`op:resolved-by-time:${u(e)}:${n(t)}`,asyncActivity:(e,t)=>`async-act:v1:${n(e)}:${n(t)}`,asyncActivityResolution:(e,t)=>`async-act:v1:${n(e)}:${n(t)}:resolution`,activityReconciliationPrefix:(e)=>`actrec:v1:${n(e)}:`,activityReconciliation:(e,t,r)=>`actrec:v1:${n(e)}:${n(t)}:${r}`,eventPrefix:(e)=>`ev:${n(e)}:`,event:(e,t)=>`ev:${n(e)}:${String(t).padStart(10,"0")}`,eventHead:(e)=>`ev:${n(e)}:head`,eventWatermark:(e)=>`ev:${n(e)}:watermark`,fleetEventPrefix:()=>"fleet-event:",fleetEvent:(e)=>`fleet-event:${String(e).padStart(10,"0")}`,fleetEventTail:()=>"fleet-event-tail",fleetEventWatermark:()=>"fleet-event-watermark",fleetEventByWorkflowPrefix:(e)=>`fleet-event-by-workflow:${n(e)}:`,fleetEventByWorkflow:(e,t)=>`fleet-event-by-workflow:${n(e)}:${String(t).padStart(10,"0")}`},A={attribute:(e)=>`attr:${n(e)}`,attributeIndex:(e,t,r)=>`idx:${e}:${t}:${n(r)}`,tagIndex:(e,t)=>`tag:${n(e)}:${n(t)}`,updatePrefix:(e)=>`upd:${n(e)}:`,update:(e,t)=>`upd:${n(e)}:${t}`,updateResponse:(e)=>`upr:${e}`,updateIdempotency:(e,t)=>`upk:${n(e)}:${t}`,startIdempotency:(e)=>`start-idem:${n(e)}`,startIdempotencySignalId:(e)=>`start-idem:${e}`};var H=["actrec:","appcmd:","appdidem:","appdlv:","appdseq:","appdterm:","appdue:","appidem:","appmbx:","appobx:","appprobe:","appready:","appseq:","appterm:","archive:","async-act:","attr:","audit:bulk:","blob:","budget:","budget-charged:","catalog-active:","catalog-entry:","catalog-tombstone:","child-by-parent:","ev:","fleet-event-by-workflow:","fleet-event:","fleet-event-tail","fleet-event-watermark","idx:","lease:","liveness:","offload:","ownership-mode-marker","op:","review:","schedule:","schedule-due:","schedule-run-by-schedule:","schedule-run-link:","schedule-run:","sig:","sigres:","sigseq:","start-idem:","state:","tag:","tool-effect:","upd:","upk:","upr:","wf:","wf-cleanup:","wf-cleanup-needed:","wf-concurrency:","wf-concurrency-holder:","wf-deadline:","wf-delayed:","wf-finalizer-state:","wf-gen:","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 f=1e4,Ke=1e4;class L extends Error{code="StorageBatchOperationLimitExceededError";cap=f;count;target;constructor(e,t){super(`${e} count ${t} exceeds MAX_BATCH_OPERATIONS (${f}).`);this.name="StorageBatchOperationLimitExceededError",this.target=e,this.count=t}}function l(e,t){if(t>f)throw new L(e,t)}function Ae(e){return e.length>0?e.slice(0,-1)+String.fromCharCode(e.charCodeAt(e.length-1)+1):"\xFF"}function Le(e,t={}){if(t.gt!==void 0&&e<=t.gt)return!1;if(t.gte!==void 0&&e<t.gte)return!1;if(t.lt!==void 0&&e>=t.lt)return!1;if(t.lte!==void 0&&e>t.lte)return!1;return!0}function Te(e,t){if(e===null||t===null)return e===t;if(e.byteLength!==t.byteLength)return!1;for(let r=0;r<e.byteLength;r++)if(e[r]!==t[r])return!1;return!0}async function T(e,t){if(e.has)return e.has(t);return S(e,t)}function I(e,t,r){if(e.keys)return e.keys(t,r);return s(e,t,r)}async function W(e,t){if(e.count)return e.count(t);return w(e,t)}async function Y(e,t){if(e.deletePrefix)return e.deletePrefix(t);return O(e,t)}async function Ie(e,t){l("batch operations",t.length),await e.batch(t)}async function N(e,t,r){if(l("conditionalBatch conditions",t.length),l("conditionalBatch operations",r.length),p(e,"conditionalBatch","storageConditionalBatch"),!e.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return e.conditionalBatch(t,r)}var We={...K,..._,...D,...A,...v,...C,...R,...k,...b,...x,...B};function V(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 m(e){let t={},r=!1;for(let g of["gt","gte","lt","lte"]){let c=e[g];if(c===void 0)continue;if(typeof c!=="string")throw Error("deleteRange bounds must be strings");t[g]=c,r=!0}if(!r)throw Error("deleteRange requires at least one of gt/gte/lt/lte; use deletePrefix to delete a whole prefix");let i=V(e.limit);if(i!==void 0)t.limit=i;return t}async function F(e,t,r){let i=m(r);if(e.deleteRange)return e.deleteRange(t,i);return E(e,t,i)}function y(e){return e.replaceAll(/:+$/g,"")}function G(e,t){let r=y(e),i=y(t);if(r.length===0)return i;if(i.length===0)return r;return`${r}:${i}`}class h{#t;#n;constructor(e,t){this.#t=e,this.#n=y(t)}#e(e){if(this.#n.length===0)return e;return e.length===0?`${this.#n}:`:`${this.#n}:${e}`}#r(e){return e.map((t)=>{if(t.type==="put")return{type:"put",key:this.#e(t.key),value:t.value};return{type:"delete",key:this.#e(t.key)}})}#i(e){if(this.#n.length===0)return e;return e.slice(this.#n.length+1)}#o(e){let t={};if(e.limit!==void 0)t.limit=e.limit;if(e.gt!==void 0)t.gt=this.#e(e.gt);if(e.gte!==void 0)t.gte=this.#e(e.gte);if(e.lt!==void 0)t.lt=this.#e(e.lt);if(e.lte!==void 0)t.lte=this.#e(e.lte);return t}#a(e={}){let t=this.#o(e);if(e.reverse!==void 0)t.reverse=e.reverse;return t}#s(e){return this.#o(e)}capabilities(){return this.#t.capabilities()}scoped(e){return new h(this.#t,G(this.#n,e))}async get(e){return this.#t.get(this.#e(e))}async put(e,t){await this.#t.put(this.#e(e),t)}async delete(e){await this.#t.delete(this.#e(e))}async*scan(e,t){for await(let[r,i]of this.#t.scan(this.#e(e),this.#a(t)))yield[this.#i(r),i]}async batch(e){l("batch operations",e.length),await this.#t.batch(this.#r(e))}async conditionalBatch(e,t){return N(this.#t,e.map((r)=>({key:this.#e(r.key),expectedValue:r.expectedValue})),this.#r(t))}async has(e){return T(this.#t,this.#e(e))}async deletePrefix(e){return Y(this.#t,this.#e(e))}async deleteRange(e,t){let r=this.#s(m(t));return F(this.#t,this.#e(e),r)}async*keys(e,t){for await(let r of I(this.#t,this.#e(e),this.#a(t)))yield this.#i(r)}async count(e){return W(this.#t,this.#e(e))}[Symbol.dispose](){this.#t[Symbol.dispose]()}}function Ve(e,t){return new h(e,t)}export{h as ScopedStorage,Ve as scopedStorage};
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Storage key builders for buffered workflow signals and their accepted-response
3
+ * records.
4
+ *
5
+ * These are spread into `KEYS` in `interface.ts` rather than declared there, so
6
+ * the signal keyspace can carry its full rationale without pushing that file's
7
+ * documented line ceiling. Callers still reach them through `KEYS`, which keeps
8
+ * one import contract for storage keys.
9
+ *
10
+ * @module storage/signal-keys
11
+ */
12
+ /**
13
+ * Buffered workflow signal keys plus their accepted-response records.
14
+ *
15
+ * Spread into `KEYS`; not intended to be imported directly by engine code.
16
+ */
17
+ export declare const SIGNAL_KEYS: {
18
+ readonly signal: (workflowId: string, name: string, id: string) => string;
19
+ readonly startSignal: (workflowId: string, name: string, id: string) => string;
20
+ readonly signalSequence: (workflowId: string) => string;
21
+ readonly signalAcceptedResponsePrefix: (workflowId: string) => string;
22
+ readonly signalAcceptedResponse: (workflowId: string, name: string, signalId: string) => string;
23
+ };
@@ -0,0 +1,9 @@
1
+ import { encodeStorageKeyComponent } from "./key-encoding.js";
2
+ const SIGNAL_SORT_CLASS_START = "0", SIGNAL_SORT_CLASS_NORMAL = "1", signalStorageKey = (workflowId, name, id, sortClass) => `sig:${encodeStorageKeyComponent(workflowId)}:${encodeStorageKeyComponent(name)}:${sortClass}:${encodeStorageKeyComponent(id)}`;
3
+ export const SIGNAL_KEYS = {
4
+ signal: (workflowId, name, id) => signalStorageKey(workflowId, name, id, SIGNAL_SORT_CLASS_NORMAL),
5
+ startSignal: (workflowId, name, id) => signalStorageKey(workflowId, name, id, SIGNAL_SORT_CLASS_START),
6
+ signalSequence: (workflowId) => `sigseq:v1:${encodeStorageKeyComponent(workflowId)}`,
7
+ signalAcceptedResponsePrefix: (workflowId) => `sigres:v1:${encodeStorageKeyComponent(workflowId)}:`,
8
+ signalAcceptedResponse: (workflowId, name, signalId) => `sigres:v1:${encodeStorageKeyComponent(workflowId)}:${encodeStorageKeyComponent(name)}:${encodeStorageKeyComponent(signalId)}`
9
+ };
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- var V=import.meta.require;function v(t,e,n){if(!t.capabilities()[e])throw Error(`Feature "${n}" requires storage capability "${e}", but this storage backend does not provide it.`)}function L(t){let e=t.capabilities(),n=[];if(e.persistence!=="local"&&e.persistence!=="remote")n.push(`persistence must be "local" or "remote" (got "${e.persistence}")`);if(e.readAfterWrite!=="linearizable")n.push(`readAfterWrite must be "linearizable" (got "${e.readAfterWrite}")`);if(e.scanConsistency!=="snapshot")n.push(`scanConsistency must be "snapshot" (got "${e.scanConsistency}")`);if(!e.atomicBatch)n.push("atomicBatch must be true");if(!e.conditionalBatch)n.push("conditionalBatch must be true");if(n.length>0)throw Error(`Storage is not durable enough for recovery: ${n.join("; ")}.`)}function a(t){return encodeURIComponent(t)}function I(t){return decodeURIComponent(t)}function K(t){try{return decodeURIComponent(t)}catch{return null}}function p(t){return String(t).padStart(16,"0")}var B={catalogEntry:(t,e)=>`catalog-entry:${a(t)}:${a(e)}`,catalogEntryPrefix:(t)=>`catalog-entry:${a(t)}:`,catalogActive:(t)=>`catalog-active:${a(t)}`,catalogTombstone:(t,e)=>`catalog-tombstone:${a(t)}:${a(e)}`,catalogTombstonePrefix:()=>"catalog-tombstone:"};var x="default";async function E(t,e){return await t.get(e)!==null}async function*y(t,e,n){for await(let[r]of t.scan(e,n))yield r}async function P(t,e){let n=0;for await(let r of y(t,e))n++;return n}async function O(t,e){let n=[];for await(let r of y(t,e))n.push({type:"delete",key:r});if(n.length===0)return 0;return await t.batch(n),n.length}async function Q(t,e,n){let r=[];for await(let o of y(t,e,n))r.push({type:"delete",key:o});if(r.length===0)return 0;return await t.batch(r),r.length}var A={applicationMailbox:(t,e)=>`appmbx:v1:${a(t)}:${a(e)}`,applicationMailboxSinkProbe:(t,e,n)=>`appprobe:v1:${a(t)}:${a(e)}:${a(n)}`,applicationCommandPrefix:(t,e)=>`appcmd:v1:${a(t)}:${a(e)}:`,applicationCommand:(t,e,n)=>`appcmd:v1:${a(t)}:${a(e)}:${a(n)}`,applicationCommandReadyPrefix:(t,e)=>`appready:v1:${a(t)}:${a(e)}:`,applicationCommandReady:(t,e,n)=>`appready:v1:${a(t)}:${a(e)}:${p(n)}`,applicationCommandIdempotency:(t,e,n)=>`appidem:v1:${a(t)}:${a(e)}:${a(n)}`,applicationCommandBySequencePrefix:(t,e)=>`appseq:v1:${a(t)}:${a(e)}:`,applicationCommandBySequence:(t,e,n)=>`appseq:v1:${a(t)}:${a(e)}:${p(n)}`,applicationCommandTerminalPrefix:(t,e)=>`appterm:v1:${a(t)}:${a(e)}:`,applicationCommandTerminal:(t,e,n,r)=>`appterm:v1:${a(t)}:${a(e)}:${p(n)}:${a(r)}`};var T={applicationOutbox:(t,e)=>`appobx:v1:${a(t)}:${a(e)}`,applicationOutboxSinkProbe:(t,e,n)=>`appprobe:v1:outbox:${a(t)}:${a(e)}:${a(n)}`,applicationDeliveryPrefix:(t,e)=>`appdlv:v1:${a(t)}:${a(e)}:`,applicationDelivery:(t,e,n)=>`appdlv:v1:${a(t)}:${a(e)}:${a(n)}`,applicationDeliveryDuePrefix:(t,e)=>`appdue:v1:${a(t)}:${a(e)}:`,applicationDeliveryDue:(t,e,n,r)=>`appdue:v1:${a(t)}:${a(e)}:${p(n)}:${a(r)}`,applicationDeliveryIdempotency:(t,e,n)=>`appdidem:v1:${a(t)}:${a(e)}:${a(n)}`,applicationDeliveryBySequencePrefix:(t,e)=>`appdseq:v1:${a(t)}:${a(e)}:`,applicationDeliveryBySequence:(t,e,n)=>`appdseq:v1:${a(t)}:${a(e)}:${p(n)}`,applicationDeliveryTerminalPrefix:(t,e)=>`appdterm:v1:${a(t)}:${a(e)}:`,applicationDeliveryTerminal:(t,e,n,r)=>`appdterm:v1:${a(t)}:${a(e)}:${p(n)}:${a(r)}`};var R={workflowOwnerEpoch:(t)=>`wf-owner-epoch:${a(t)}`,workflowOwnerHolder:(t)=>`wf-owner-holder:${a(t)}`,ownershipModeMarker:()=>"ownership-mode-marker"};var W=["actrec:","appcmd:","appdidem:","appdlv:","appdseq:","appdterm:","appdue:","appidem:","appmbx:","appobx:","appprobe:","appready:","appseq:","appterm:","archive:","async-act:","attr:","audit:bulk:","blob:","budget:","budget-charged:","catalog-active:","catalog-entry:","catalog-tombstone:","child-by-parent:","ev:","fleet-event-by-workflow:","fleet-event:","fleet-event-tail","fleet-event-watermark","idx:","lease:","liveness:","offload:","ownership-mode-marker","op:","review:","schedule:","schedule-due:","schedule-run-by-schedule:","schedule-run-link:","schedule-run:","sig:","sigres:","sigseq:","start-idem:","state:","tag:","tool-effect:","upd:","upk:","upr:","wf:","wf-cleanup:","wf-cleanup-needed:","wf-concurrency:","wf-concurrency-holder:","wf-deadline:","wf-delayed:","wf-finalizer-state:","wf-has-services:","wf-headers:","wf-idx-","wf-owner-epoch:","wf-owner-holder:","wf-teardown:","wf-teardown-deadletter:","wf-teardown-needed:","wf-teardown-succeeded:","wf-terminal:"];var C=1e4,ft=1e4;class _ extends Error{code="StorageBatchOperationLimitExceededError";cap=C;count;target;constructor(t,e){super(`${t} count ${e} exceeds MAX_BATCH_OPERATIONS (${C}).`);this.name="StorageBatchOperationLimitExceededError",this.target=t,this.count=e}}function k(t,e){if(e>C)throw new _(t,e)}function mt(t){return t.length>0?t.slice(0,-1)+String.fromCharCode(t.charCodeAt(t.length-1)+1):"\xFF"}function yt(t,e={}){if(e.gt!==void 0&&t<=e.gt)return!1;if(e.gte!==void 0&&t<e.gte)return!1;if(e.lt!==void 0&&t>=e.lt)return!1;if(e.lte!==void 0&&t>e.lte)return!1;return!0}function wt(t,e){if(t===null||e===null)return t===e;if(t.byteLength!==e.byteLength)return!1;for(let n=0;n<t.byteLength;n++)if(t[n]!==e[n])return!1;return!0}async function bt(t,e){if(t.has)return t.has(e);return E(t,e)}function $t(t,e,n){if(t.keys)return t.keys(e,n);return y(t,e,n)}async function ht(t,e){if(t.count)return t.count(e);return P(t,e)}async function St(t,e){if(t.deletePrefix)return t.deletePrefix(e);return O(t,e)}async function vt(t,e){k("batch operations",e.length),await t.batch(e)}async function b(t,e,n){if(k("conditionalBatch conditions",e.length),k("conditionalBatch operations",n.length),v(t,"conditionalBatch","storageConditionalBatch"),!t.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return t.conditionalBatch(e,n)}var g=p,M="0",U="1",q=(t,e,n,r)=>`sig:${a(t)}:${a(e)}:${r}:${a(n)}`,xt={workflow:(t)=>`wf:${a(t)}`,checkpoint:(t)=>`wf:${a(t)}:ckpt`,checkpointHistory:(t,e)=>`wf:${a(t)}:ckpt:${String(e).padStart(10,"0")}`,timelinePrefix:(t)=>`wf:${a(t)}:timeline:`,timeline:(t,e)=>`wf:${a(t)}:timeline:${String(e).padStart(10,"0")}`,schedule:(t)=>`schedule:${a(t)}`,scheduleTick:(t,e)=>`schedule-due:${String(t).padStart(16,"0")}:${a(e)}`,scheduleRun:(t)=>`schedule-run:${a(t)}`,scheduleRunLink:(t)=>`schedule-run-link:${a(t)}`,scheduleRunBySchedulePrefix:(t)=>`schedule-run-by-schedule:${a(t)}:`,scheduleRunBySchedule:(t,e)=>`schedule-run-by-schedule:${a(t)}:${a(e)}`,operation:(t,e,n)=>`op:${t}:${g(e)}:${n}`,operationInflight:(t)=>`op:inflight:${t}`,operationQueued:(t)=>`op:queued:${t}`,operationResolved:(t)=>`op:resolved:${t}`,bulkOperationAuditPrefix:()=>"audit:bulk:",bulkOperationAudit:(t,e,n)=>`audit:bulk:${g(t)}:${a(e)}:${a(n)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(t,e)=>`op:resolved-by-time:${g(t)}:${a(e)}`,asyncActivity:(t,e)=>`async-act:v1:${a(t)}:${a(e)}`,asyncActivityResolution:(t,e)=>`async-act:v1:${a(t)}:${a(e)}:resolution`,activityReconciliationPrefix:(t)=>`actrec:v1:${a(t)}:`,activityReconciliation:(t,e,n)=>`actrec:v1:${a(t)}:${a(e)}:${n}`,eventPrefix:(t)=>`ev:${a(t)}:`,event:(t,e)=>`ev:${a(t)}:${String(e).padStart(10,"0")}`,eventHead:(t)=>`ev:${a(t)}:head`,eventWatermark:(t)=>`ev:${a(t)}:watermark`,fleetEventPrefix:()=>"fleet-event:",fleetEvent:(t)=>`fleet-event:${String(t).padStart(10,"0")}`,fleetEventTail:()=>"fleet-event-tail",fleetEventWatermark:()=>"fleet-event-watermark",fleetEventByWorkflowPrefix:(t)=>`fleet-event-by-workflow:${a(t)}:`,fleetEventByWorkflow:(t,e)=>`fleet-event-by-workflow:${a(t)}:${String(e).padStart(10,"0")}`,signal:(t,e,n)=>q(t,e,n,U),startSignal:(t,e,n)=>q(t,e,n,M),signalSequence:(t)=>`sigseq:v1:${a(t)}`,signalAcceptedResponsePrefix:(t)=>`sigres:v1:${a(t)}:`,signalAcceptedResponse:(t,e,n)=>`sigres:v1:${a(t)}:${a(e)}:${a(n)}`,deadline:(t,e)=>`wf-deadline:${g(t)}:${a(e)}`,terminalCleanup:(t,e)=>`wf-cleanup:${g(t)}:${a(e)}`,teardownTimer:(t,e)=>`wf-teardown:${g(t)}:${a(e)}`,delayedStart:(t,e)=>`wf-delayed:${g(t)}:${a(e)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(t,e)=>`wf-terminal:${g(t)}:${a(e)}`,attribute:(t)=>`attr:${a(t)}`,attributeIndex:(t,e,n)=>`idx:${t}:${e}:${a(n)}`,tagIndex:(t,e)=>`tag:${a(t)}:${a(e)}`,updatePrefix:(t)=>`upd:${a(t)}:`,update:(t,e)=>`upd:${a(t)}:${e}`,updateResponse:(t)=>`upr:${t}`,updateIdempotency:(t,e)=>`upk:${a(t)}:${e}`,startIdempotency:(t)=>`start-idem:${a(t)}`,startIdempotencySignalId:(t)=>`start-idem:${t}`,livenessPrefix:()=>"liveness:",liveness:(t)=>`liveness:${a(t)}`,leasePrefix:()=>"lease:",leaseEpoch:()=>"lease:epoch",leaseHolder:()=>"lease:holder",...A,...T,...R,...B,budget:(t,e,n)=>`budget:${t}:${e}:${n}`,review:(t,e)=>`review:${a(t)}:${e}`,workflowHeaders:(t)=>`wf-headers:${a(t)}`,childCancellationPrefix:(t)=>`child-cancel:${a(t)}:`,childCancellation:(t,e)=>`child-cancel:${a(t)}:${a(e)}`,childWorkflowByParentPrefix:(t,e)=>`child-by-parent:${a(t)}:${e===void 0?"":`${a(e)}:`}`,childWorkflowByParent:(t,e,n)=>`child-by-parent:${a(t)}:${e===void 0?"":`${a(e)}:`}${a(n)}`,terminalCleanupNeeded:(t)=>`wf-cleanup-needed:${a(t)}`,workflowConcurrency:(t,e)=>`wf-concurrency:${a(t)}:${a(e)}`,workflowConcurrencyHolder:(t)=>`wf-concurrency-holder:${a(t)}`,workflowHasServices:(t)=>`wf-has-services:${a(t)}`,finalizerState:(t)=>`wf-finalizer-state:${a(t)}`,teardownOwed:(t)=>`wf-teardown-needed:${a(t)}`,teardownSucceeded:(t)=>`wf-teardown-succeeded:${a(t)}`,teardownDeadLetter:(t)=>`wf-teardown-deadletter:${a(t)}`,offload:(t,e)=>`offload:${a(t)}:${e}`,archive:(t,e)=>`archive:${a(t)}:${e}`,stateExecution:(t,e)=>`state:execution:${a(t)}:${a(e)}`,stateWorkflow:(t,e)=>`state:workflow-scope:${x}:${a(t)}:${a(e)}`,streamChunkPrefix:(t,e)=>`blob:${a(t)}:${e}:chunk:`,streamChunk:(t,e,n)=>`blob:${a(t)}:${e}:chunk:${String(n).padStart(10,"0")}`,streamTail:(t,e)=>`blob:${a(t)}:${e}:tail`,streamMetadata:(t,e)=>`blob:${a(t)}:${e}:meta`,budgetCharged:(t)=>`budget-charged:${t}`,toolEffect:(t,e,n)=>`tool-effect:${a(t)}:${e}:${n}`,workflowVisibilityStatus:(t,e)=>`wf-idx-status:${a(t)}:${a(e)}`,workflowVisibilityType:(t,e)=>`wf-idx-type:${a(t)}:${a(e)}`,workflowVisibilityCreated:(t,e)=>`wf-idx-created:${g(t)}:${a(e)}`,workflowVisibilityUpdated:(t,e)=>`wf-idx-updated:${g(t)}:${a(e)}`,workflowVisibilityDeadline:(t,e)=>`wf-idx-deadline:${g(t)}:${a(e)}`,workflowVisibilityManifest:(t)=>`wf-idx-manifest:${a(t)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"};import{describe as h,expect as s,it as l}from"bun:test";import{expect as m}from"bun:test";var H=new TextEncoder,N=new TextDecoder;function i(t){return H.encode(t)}function w(t){return N.decode(t)}async function u(t){let e=[];for await(let n of t)e.push(n);return e}function D(t){let e=t.capabilities();m(["ephemeral","local","remote"]).toContain(e.persistence??""),m(["linearizable","session","eventual"]).toContain(e.readAfterWrite),m(["snapshot","best-effort"]).toContain(e.scanConsistency),m(typeof e.atomicBatch).toBe("boolean"),m(typeof e.conditionalBatch).toBe("boolean"),m(typeof e.boundedRangeDelete).toBe("boolean")}function _t(t,e){h(`${t} binary and large-scan conformance`,()=>{l("round-trips binary values correctly",async()=>{let n=await e.create();try{let r=new Uint8Array([0,1,127,128,255,42,0,13,10]);await n.put("binary",r);let o=await n.get("binary");s(o).toEqual(r)}finally{n[Symbol.dispose]()}}),l("returns 1000 scanned keys in sorted order",async()=>{let n=await e.create();try{let r=Array.from({length:1000},(c,d)=>({type:"put",key:`item:${String(d).padStart(4,"0")}`,value:i(String(d))}));await n.batch(r);let o=await u(n.scan("item:"));s(o).toHaveLength(1000);for(let c=0;c<o.length;c+=1)s(o[c][0]).toBe(`item:${String(c).padStart(4,"0")}`)}finally{n[Symbol.dispose]()}},e.largeScanTimeoutMs)})}function Dt(t,e){let{create:n,expected:r}=e;h(`${t} capabilities() conformance`,()=>{if(l("reports a well-formed capability shape",async()=>{using o=await n();D(o)}),l("reports the expected capability row",async()=>{using o=await n();s(o.capabilities()).toEqual(r)}),l("satisfies its declared read-after-write level",async()=>{using o=await n();await o.put("raw:key",i("written"));let c=await o.get("raw:key");if(r.readAfterWrite!=="eventual")s(c).not.toBeNull(),s(w(c)).toBe("written")}),r.scanConsistency==="snapshot")l("does not observe a key inserted after the scan began (snapshot)",async()=>{using o=await n();await o.put("scan:a",i("1")),await o.put("scan:b",i("2"));let c=o.scan("scan:")[Symbol.asyncIterator](),d=await c.next();s(d.done).toBe(!1),await o.put("scan:c",i("3"));let f=[];if(!d.done)f.push(d.value[0]);for(let S=await c.next();!S.done;S=await c.next())f.push(S.value[0]);s(f).not.toContain("scan:c"),s(f).toContain("scan:a"),s(f).toContain("scan:b")});if(r.conditionalBatch)l("applies nothing when a conditionalBatch precondition mismatches",async()=>{using o=await n();await o.put("cas:key",i("initial"));let c=await b(o,[{key:"cas:key",expectedValue:i("wrong")}],[{type:"put",key:"cas:key",value:i("changed")}]);s(c).toBe(!1),s(w(await o.get("cas:key"))).toBe("initial")}),l("reports conditionalBatch before running compare-and-swap assertions",async()=>{using o=await n();s(o.capabilities().conditionalBatch).toBe(!0)})})}function Lt(t,e){let{create:n}=e;h(`${t} concurrent conditionalBatch conformance`,()=>{l("lets exactly one of two contending conditionalBatch calls win",async()=>{using r=await n();s(r.capabilities().conditionalBatch).toBe(!0),await r.put("cas:counter",i("start"));let o=[{key:"cas:counter",expectedValue:i("start")}],[c,d]=await Promise.all([b(r,o,[{type:"put",key:"cas:counter",value:i("first")}]),b(r,o,[{type:"put",key:"cas:counter",value:i("second")}])]);s([c,d].filter(Boolean)).toHaveLength(1);let f=w(await r.get("cas:counter"));s(f).toBe(c?"first":"second")})})}function It(t,e){let{create:n}=e;h(`${t} basic storage contract`,()=>{l("get on empty storage returns null",async()=>{using r=await n();let o=await r.get("nonexistent");s(o).toBeNull()}),l("put then get returns same bytes",async()=>{using r=await n();let o=i("hello");await r.put("key",o);let c=await r.get("key");s(c).toEqual(o)}),l("put with same key overwrites previous value",async()=>{using r=await n();await r.put("key",i("first")),await r.put("key",i("second"));let o=await r.get("key");s(w(o)).toBe("second")}),l("delete removes key, subsequent get returns null",async()=>{using r=await n();await r.put("key",i("value")),await r.delete("key");let o=await r.get("key");s(o).toBeNull()}),l("delete on a missing key is a no-op",async()=>{using r=await n();await r.delete("nonexistent"),s(await r.get("nonexistent")).toBeNull()}),l("scan with prefix returns only matching keys, sorted lexicographically",async()=>{using r=await n();await r.put("wf:b",i("b")),await r.put("wf:a",i("a")),await r.put("wf:c",i("c")),await r.put("other:x",i("x"));let o=await u(r.scan("wf:"));s(o.map(([c])=>c)).toEqual(["wf:a","wf:b","wf:c"])}),l("scan with limit returns at most N entries",async()=>{using r=await n();await r.put("p:a",i("a")),await r.put("p:b",i("b")),await r.put("p:c",i("c"));let o=await u(r.scan("p:",{limit:2}));s(o).toHaveLength(2),s(o.map(([c])=>c)).toEqual(["p:a","p:b"])}),l("scan with reverse returns in reverse order",async()=>{using r=await n();await r.put("p:a",i("a")),await r.put("p:b",i("b")),await r.put("p:c",i("c"));let o=await u(r.scan("p:",{reverse:!0}));s(o.map(([c])=>c)).toEqual(["p:c","p:b","p:a"])}),l("scan with gt/lt bounds",async()=>{using r=await n();await r.put("p:a",i("a")),await r.put("p:b",i("b")),await r.put("p:c",i("c")),await r.put("p:d",i("d"));let o=await u(r.scan("p:",{gt:"p:a",lt:"p:d"}));s(o.map(([c])=>c)).toEqual(["p:b","p:c"])}),l("scan with inclusive gte/lte bounds",async()=>{using r=await n();await r.put("p:a",i("a")),await r.put("p:b",i("b")),await r.put("p:c",i("c")),await r.put("p:d",i("d"));let o=await u(r.scan("p:",{gte:"p:b",lte:"p:c"}));s(o.map(([c])=>c)).toEqual(["p:b","p:c"])}),l("scan with no matching keys returns no entries",async()=>{using r=await n();await r.put("other:a",i("a")),s(await u(r.scan("wf:"))).toHaveLength(0)}),l("batch with multiple puts stores every value",async()=>{using r=await n();await r.batch([{type:"put",key:"a",value:i("1")},{type:"put",key:"b",value:i("2")},{type:"put",key:"c",value:i("3")}]),s(await r.get("a")).toEqual(i("1")),s(await r.get("b")).toEqual(i("2")),s(await r.get("c")).toEqual(i("3"))}),l("batch with mixed puts and deletes leaves the expected state",async()=>{using r=await n();await r.put("keep",i("keep")),await r.put("remove",i("remove")),await r.batch([{type:"put",key:"new",value:i("new")},{type:"delete",key:"remove"}]),s(await r.get("keep")).toEqual(i("keep")),s(await r.get("remove")).toBeNull(),s(await r.get("new")).toEqual(i("new"))}),l("batch with no operations is a no-op",async()=>{using r=await n();await r.put("key",i("value")),await r.batch([]),s(await r.get("key")).toEqual(i("value"))}),l("scan with empty prefix returns all keys",async()=>{using r=await n();await r.put("alpha",i("a")),await r.put("beta",i("b")),await r.put("gamma",i("c"));let o=await u(r.scan(""));s(o.map(([c])=>c)).toEqual(["alpha","beta","gamma"])}),l("scan with empty prefix on empty storage returns no entries",async()=>{using r=await n();s(await u(r.scan(""))).toEqual([])})})}export{It as runBasicStorageContract,_t as runBinaryAndLargeScanStorageConformance,Lt as runConcurrentConditionalBatchConformance,Dt as runStorageCapabilityConformance};
2
+ var J=import.meta.require;function v(t,e,n){if(!t.capabilities()[e])throw Error(`Feature "${n}" requires storage capability "${e}", but this storage backend does not provide it.`)}function U(t){let e=t.capabilities(),n=[];if(e.persistence!=="local"&&e.persistence!=="remote")n.push(`persistence must be "local" or "remote" (got "${e.persistence}")`);if(e.readAfterWrite!=="linearizable")n.push(`readAfterWrite must be "linearizable" (got "${e.readAfterWrite}")`);if(e.scanConsistency!=="snapshot")n.push(`scanConsistency must be "snapshot" (got "${e.scanConsistency}")`);if(!e.atomicBatch)n.push("atomicBatch must be true");if(!e.conditionalBatch)n.push("conditionalBatch must be true");if(n.length>0)throw Error(`Storage is not durable enough for recovery: ${n.join("; ")}.`)}function a(t){return encodeURIComponent(t)}function H(t){return decodeURIComponent(t)}function X(t){try{return decodeURIComponent(t)}catch{return null}}function l(t){return String(t).padStart(16,"0")}var k={catalogEntry:(t,e)=>`catalog-entry:${a(t)}:${a(e)}`,catalogEntryPrefix:(t)=>`catalog-entry:${a(t)}:`,catalogActive:(t)=>`catalog-active:${a(t)}`,catalogTombstone:(t,e)=>`catalog-tombstone:${a(t)}:${a(e)}`,catalogTombstonePrefix:()=>"catalog-tombstone:"};async function B(t,e){return await t.get(e)!==null}async function*y(t,e,n){for await(let[r]of t.scan(e,n))yield r}async function _(t,e){let n=0;for await(let r of y(t,e))n++;return n}async function R(t,e){let n=[];for await(let r of y(t,e))n.push({type:"delete",key:r});if(n.length===0)return 0;return await t.batch(n),n.length}async function rt(t,e,n){let r=[];for await(let o of y(t,e,n))r.push({type:"delete",key:o});if(r.length===0)return 0;return await t.batch(r),r.length}var K={workflowGeneration:(t)=>`wf-gen:${a(t)}`};var A={livenessPrefix:()=>"liveness:",liveness:(t)=>`liveness:${a(t)}`,leasePrefix:()=>"lease:",leaseEpoch:()=>"lease:epoch",leaseHolder:()=>"lease:holder"};var P={applicationMailbox:(t,e)=>`appmbx:v1:${a(t)}:${a(e)}`,applicationMailboxSinkProbe:(t,e,n)=>`appprobe:v1:${a(t)}:${a(e)}:${a(n)}`,applicationCommandPrefix:(t,e)=>`appcmd:v1:${a(t)}:${a(e)}:`,applicationCommand:(t,e,n)=>`appcmd:v1:${a(t)}:${a(e)}:${a(n)}`,applicationCommandReadyPrefix:(t,e)=>`appready:v1:${a(t)}:${a(e)}:`,applicationCommandReady:(t,e,n)=>`appready:v1:${a(t)}:${a(e)}:${l(n)}`,applicationCommandIdempotency:(t,e,n)=>`appidem:v1:${a(t)}:${a(e)}:${a(n)}`,applicationCommandBySequencePrefix:(t,e)=>`appseq:v1:${a(t)}:${a(e)}:`,applicationCommandBySequence:(t,e,n)=>`appseq:v1:${a(t)}:${a(e)}:${l(n)}`,applicationCommandTerminalPrefix:(t,e)=>`appterm:v1:${a(t)}:${a(e)}:`,applicationCommandTerminal:(t,e,n,r)=>`appterm:v1:${a(t)}:${a(e)}:${l(n)}:${a(r)}`};var L={applicationOutbox:(t,e)=>`appobx:v1:${a(t)}:${a(e)}`,applicationOutboxSinkProbe:(t,e,n)=>`appprobe:v1:outbox:${a(t)}:${a(e)}:${a(n)}`,applicationDeliveryPrefix:(t,e)=>`appdlv:v1:${a(t)}:${a(e)}:`,applicationDelivery:(t,e,n)=>`appdlv:v1:${a(t)}:${a(e)}:${a(n)}`,applicationDeliveryDuePrefix:(t,e)=>`appdue:v1:${a(t)}:${a(e)}:`,applicationDeliveryDue:(t,e,n,r)=>`appdue:v1:${a(t)}:${a(e)}:${l(n)}:${a(r)}`,applicationDeliveryIdempotency:(t,e,n)=>`appdidem:v1:${a(t)}:${a(e)}:${a(n)}`,applicationDeliveryBySequencePrefix:(t,e)=>`appdseq:v1:${a(t)}:${a(e)}:`,applicationDeliveryBySequence:(t,e,n)=>`appdseq:v1:${a(t)}:${a(e)}:${l(n)}`,applicationDeliveryTerminalPrefix:(t,e)=>`appdterm:v1:${a(t)}:${a(e)}:`,applicationDeliveryTerminal:(t,e,n,r)=>`appdterm:v1:${a(t)}:${a(e)}:${l(n)}:${a(r)}`};var T={workflowOwnerEpoch:(t)=>`wf-owner-epoch:${a(t)}`,workflowOwnerHolder:(t)=>`wf-owner-holder:${a(t)}`,ownershipModeMarker:()=>"ownership-mode-marker"};var V="0",G="1",D=(t,e,n,r)=>`sig:${a(t)}:${a(e)}:${r}:${a(n)}`,W={signal:(t,e,n)=>D(t,e,n,G),startSignal:(t,e,n)=>D(t,e,n,V),signalSequence:(t)=>`sigseq:v1:${a(t)}`,signalAcceptedResponsePrefix:(t)=>`sigres:v1:${a(t)}:`,signalAcceptedResponse:(t,e,n)=>`sigres:v1:${a(t)}:${a(e)}:${a(n)}`};var x="default";var d=l,I={deadline:(t,e)=>`wf-deadline:${d(t)}:${a(e)}`,terminalCleanup:(t,e)=>`wf-cleanup:${d(t)}:${a(e)}`,teardownTimer:(t,e)=>`wf-teardown:${d(t)}:${a(e)}`,delayedStart:(t,e)=>`wf-delayed:${d(t)}:${a(e)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(t,e)=>`wf-terminal:${d(t)}:${a(e)}`},Y={budget:(t,e,n)=>`budget:${t}:${e}:${n}`,review:(t,e)=>`review:${a(t)}:${e}`,workflowHeaders:(t)=>`wf-headers:${a(t)}`,childCancellationPrefix:(t)=>`child-cancel:${a(t)}:`,childCancellation:(t,e)=>`child-cancel:${a(t)}:${a(e)}`,childWorkflowByParentPrefix:(t,e)=>`child-by-parent:${a(t)}:${e===void 0?"":`${a(e)}:`}`,childWorkflowByParent:(t,e,n)=>`child-by-parent:${a(t)}:${e===void 0?"":`${a(e)}:`}${a(n)}`,terminalCleanupNeeded:(t)=>`wf-cleanup-needed:${a(t)}`,workflowConcurrency:(t,e)=>`wf-concurrency:${a(t)}:${a(e)}`,workflowConcurrencyHolder:(t)=>`wf-concurrency-holder:${a(t)}`,workflowHasServices:(t)=>`wf-has-services:${a(t)}`,finalizerState:(t)=>`wf-finalizer-state:${a(t)}`,teardownOwed:(t)=>`wf-teardown-needed:${a(t)}`,teardownSucceeded:(t)=>`wf-teardown-succeeded:${a(t)}`,teardownDeadLetter:(t)=>`wf-teardown-deadletter:${a(t)}`,offload:(t,e)=>`offload:${a(t)}:${e}`,archive:(t,e)=>`archive:${a(t)}:${e}`,stateExecution:(t,e)=>`state:execution:${a(t)}:${a(e)}`,stateWorkflow:(t,e)=>`state:workflow-scope:${x}:${a(t)}:${a(e)}`,streamChunkPrefix:(t,e)=>`blob:${a(t)}:${e}:chunk:`,streamChunk:(t,e,n)=>`blob:${a(t)}:${e}:chunk:${String(n).padStart(10,"0")}`,streamTail:(t,e)=>`blob:${a(t)}:${e}:tail`,streamMetadata:(t,e)=>`blob:${a(t)}:${e}:meta`,budgetCharged:(t)=>`budget-charged:${t}`,toolEffect:(t,e,n)=>`tool-effect:${a(t)}:${e}:${n}`,workflowVisibilityStatus:(t,e)=>`wf-idx-status:${a(t)}:${a(e)}`,workflowVisibilityType:(t,e)=>`wf-idx-type:${a(t)}:${a(e)}`,workflowVisibilityCreated:(t,e)=>`wf-idx-created:${d(t)}:${a(e)}`,workflowVisibilityUpdated:(t,e)=>`wf-idx-updated:${d(t)}:${a(e)}`,workflowVisibilityDeadline:(t,e)=>`wf-idx-deadline:${d(t)}:${a(e)}`,workflowVisibilityManifest:(t)=>`wf-idx-manifest:${a(t)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"};var E=l,q={workflow:(t)=>`wf:${a(t)}`,checkpoint:(t)=>`wf:${a(t)}:ckpt`,checkpointHistory:(t,e)=>`wf:${a(t)}:ckpt:${String(e).padStart(10,"0")}`,timelinePrefix:(t)=>`wf:${a(t)}:timeline:`,timeline:(t,e)=>`wf:${a(t)}:timeline:${String(e).padStart(10,"0")}`,schedule:(t)=>`schedule:${a(t)}`,scheduleTick:(t,e)=>`schedule-due:${String(t).padStart(16,"0")}:${a(e)}`,scheduleRun:(t)=>`schedule-run:${a(t)}`,scheduleRunLink:(t)=>`schedule-run-link:${a(t)}`,scheduleRunBySchedulePrefix:(t)=>`schedule-run-by-schedule:${a(t)}:`,scheduleRunBySchedule:(t,e)=>`schedule-run-by-schedule:${a(t)}:${a(e)}`,operation:(t,e,n)=>`op:${t}:${E(e)}:${n}`,operationInflight:(t)=>`op:inflight:${t}`,operationQueued:(t)=>`op:queued:${t}`,operationResolved:(t)=>`op:resolved:${t}`,bulkOperationAuditPrefix:()=>"audit:bulk:",bulkOperationAudit:(t,e,n)=>`audit:bulk:${E(t)}:${a(e)}:${a(n)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(t,e)=>`op:resolved-by-time:${E(t)}:${a(e)}`,asyncActivity:(t,e)=>`async-act:v1:${a(t)}:${a(e)}`,asyncActivityResolution:(t,e)=>`async-act:v1:${a(t)}:${a(e)}:resolution`,activityReconciliationPrefix:(t)=>`actrec:v1:${a(t)}:`,activityReconciliation:(t,e,n)=>`actrec:v1:${a(t)}:${a(e)}:${n}`,eventPrefix:(t)=>`ev:${a(t)}:`,event:(t,e)=>`ev:${a(t)}:${String(e).padStart(10,"0")}`,eventHead:(t)=>`ev:${a(t)}:head`,eventWatermark:(t)=>`ev:${a(t)}:watermark`,fleetEventPrefix:()=>"fleet-event:",fleetEvent:(t)=>`fleet-event:${String(t).padStart(10,"0")}`,fleetEventTail:()=>"fleet-event-tail",fleetEventWatermark:()=>"fleet-event-watermark",fleetEventByWorkflowPrefix:(t)=>`fleet-event-by-workflow:${a(t)}:`,fleetEventByWorkflow:(t,e)=>`fleet-event-by-workflow:${a(t)}:${String(e).padStart(10,"0")}`},N={attribute:(t)=>`attr:${a(t)}`,attributeIndex:(t,e,n)=>`idx:${t}:${e}:${a(n)}`,tagIndex:(t,e)=>`tag:${a(t)}:${a(e)}`,updatePrefix:(t)=>`upd:${a(t)}:`,update:(t,e)=>`upd:${a(t)}:${e}`,updateResponse:(t)=>`upr:${t}`,updateIdempotency:(t,e)=>`upk:${a(t)}:${e}`,startIdempotency:(t)=>`start-idem:${a(t)}`,startIdempotencySignalId:(t)=>`start-idem:${t}`};var z=["actrec:","appcmd:","appdidem:","appdlv:","appdseq:","appdterm:","appdue:","appidem:","appmbx:","appobx:","appprobe:","appready:","appseq:","appterm:","archive:","async-act:","attr:","audit:bulk:","blob:","budget:","budget-charged:","catalog-active:","catalog-entry:","catalog-tombstone:","child-by-parent:","ev:","fleet-event-by-workflow:","fleet-event:","fleet-event-tail","fleet-event-watermark","idx:","lease:","liveness:","offload:","ownership-mode-marker","op:","review:","schedule:","schedule-due:","schedule-run-by-schedule:","schedule-run-link:","schedule-run:","sig:","sigres:","sigseq:","start-idem:","state:","tag:","tool-effect:","upd:","upk:","upr:","wf:","wf-cleanup:","wf-cleanup-needed:","wf-concurrency:","wf-concurrency-holder:","wf-deadline:","wf-delayed:","wf-finalizer-state:","wf-gen:","wf-has-services:","wf-headers:","wf-idx-","wf-owner-epoch:","wf-owner-holder:","wf-teardown:","wf-teardown-deadletter:","wf-teardown-needed:","wf-teardown-succeeded:","wf-terminal:"];var C=1e4,Dt=1e4;class F extends Error{code="StorageBatchOperationLimitExceededError";cap=C;count;target;constructor(t,e){super(`${t} count ${e} exceeds MAX_BATCH_OPERATIONS (${C}).`);this.name="StorageBatchOperationLimitExceededError",this.target=t,this.count=e}}function O(t,e){if(e>C)throw new F(t,e)}function Wt(t){return t.length>0?t.slice(0,-1)+String.fromCharCode(t.charCodeAt(t.length-1)+1):"\xFF"}function It(t,e={}){if(e.gt!==void 0&&t<=e.gt)return!1;if(e.gte!==void 0&&t<e.gte)return!1;if(e.lt!==void 0&&t>=e.lt)return!1;if(e.lte!==void 0&&t>e.lte)return!1;return!0}function Yt(t,e){if(t===null||e===null)return t===e;if(t.byteLength!==e.byteLength)return!1;for(let n=0;n<t.byteLength;n++)if(t[n]!==e[n])return!1;return!0}async function qt(t,e){if(t.has)return t.has(e);return B(t,e)}function Nt(t,e,n){if(t.keys)return t.keys(e,n);return y(t,e,n)}async function Ft(t,e){if(t.count)return t.count(e);return _(t,e)}async function Mt(t,e){if(t.deletePrefix)return t.deletePrefix(e);return R(t,e)}async function Ut(t,e){O("batch operations",e.length),await t.batch(e)}async function b(t,e,n){if(O("conditionalBatch conditions",e.length),O("conditionalBatch operations",n.length),v(t,"conditionalBatch","storageConditionalBatch"),!t.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return t.conditionalBatch(e,n)}var Ht={...q,...W,...I,...N,...A,...P,...L,...T,...k,...K,...Y};import{describe as h,expect as s,it as p}from"bun:test";import{expect as m}from"bun:test";var j=new TextEncoder,Q=new TextDecoder;function i(t){return j.encode(t)}function w(t){return Q.decode(t)}async function g(t){let e=[];for await(let n of t)e.push(n);return e}function M(t){let e=t.capabilities();m(["ephemeral","local","remote"]).toContain(e.persistence??""),m(["linearizable","session","eventual"]).toContain(e.readAfterWrite),m(["snapshot","best-effort"]).toContain(e.scanConsistency),m(typeof e.atomicBatch).toBe("boolean"),m(typeof e.conditionalBatch).toBe("boolean"),m(typeof e.boundedRangeDelete).toBe("boolean")}function ae(t,e){h(`${t} binary and large-scan conformance`,()=>{p("round-trips binary values correctly",async()=>{let n=await e.create();try{let r=new Uint8Array([0,1,127,128,255,42,0,13,10]);await n.put("binary",r);let o=await n.get("binary");s(o).toEqual(r)}finally{n[Symbol.dispose]()}}),p("returns 1000 scanned keys in sorted order",async()=>{let n=await e.create();try{let r=Array.from({length:1000},(c,u)=>({type:"put",key:`item:${String(u).padStart(4,"0")}`,value:i(String(u))}));await n.batch(r);let o=await g(n.scan("item:"));s(o).toHaveLength(1000);for(let c=0;c<o.length;c+=1)s(o[c][0]).toBe(`item:${String(c).padStart(4,"0")}`)}finally{n[Symbol.dispose]()}},e.largeScanTimeoutMs)})}function ne(t,e){let{create:n,expected:r}=e;h(`${t} capabilities() conformance`,()=>{if(p("reports a well-formed capability shape",async()=>{using o=await n();M(o)}),p("reports the expected capability row",async()=>{using o=await n();s(o.capabilities()).toEqual(r)}),p("satisfies its declared read-after-write level",async()=>{using o=await n();await o.put("raw:key",i("written"));let c=await o.get("raw:key");if(r.readAfterWrite!=="eventual")s(c).not.toBeNull(),s(w(c)).toBe("written")}),r.scanConsistency==="snapshot")p("does not observe a key inserted after the scan began (snapshot)",async()=>{using o=await n();await o.put("scan:a",i("1")),await o.put("scan:b",i("2"));let c=o.scan("scan:")[Symbol.asyncIterator](),u=await c.next();s(u.done).toBe(!1),await o.put("scan:c",i("3"));let f=[];if(!u.done)f.push(u.value[0]);for(let S=await c.next();!S.done;S=await c.next())f.push(S.value[0]);s(f).not.toContain("scan:c"),s(f).toContain("scan:a"),s(f).toContain("scan:b")});if(r.conditionalBatch)p("applies nothing when a conditionalBatch precondition mismatches",async()=>{using o=await n();await o.put("cas:key",i("initial"));let c=await b(o,[{key:"cas:key",expectedValue:i("wrong")}],[{type:"put",key:"cas:key",value:i("changed")}]);s(c).toBe(!1),s(w(await o.get("cas:key"))).toBe("initial")}),p("reports conditionalBatch before running compare-and-swap assertions",async()=>{using o=await n();s(o.capabilities().conditionalBatch).toBe(!0)})})}function re(t,e){let{create:n}=e;h(`${t} concurrent conditionalBatch conformance`,()=>{p("lets exactly one of two contending conditionalBatch calls win",async()=>{using r=await n();s(r.capabilities().conditionalBatch).toBe(!0),await r.put("cas:counter",i("start"));let o=[{key:"cas:counter",expectedValue:i("start")}],[c,u]=await Promise.all([b(r,o,[{type:"put",key:"cas:counter",value:i("first")}]),b(r,o,[{type:"put",key:"cas:counter",value:i("second")}])]);s([c,u].filter(Boolean)).toHaveLength(1);let f=w(await r.get("cas:counter"));s(f).toBe(c?"first":"second")})})}function ie(t,e){let{create:n}=e;h(`${t} basic storage contract`,()=>{p("get on empty storage returns null",async()=>{using r=await n();let o=await r.get("nonexistent");s(o).toBeNull()}),p("put then get returns same bytes",async()=>{using r=await n();let o=i("hello");await r.put("key",o);let c=await r.get("key");s(c).toEqual(o)}),p("put with same key overwrites previous value",async()=>{using r=await n();await r.put("key",i("first")),await r.put("key",i("second"));let o=await r.get("key");s(w(o)).toBe("second")}),p("delete removes key, subsequent get returns null",async()=>{using r=await n();await r.put("key",i("value")),await r.delete("key");let o=await r.get("key");s(o).toBeNull()}),p("delete on a missing key is a no-op",async()=>{using r=await n();await r.delete("nonexistent"),s(await r.get("nonexistent")).toBeNull()}),p("scan with prefix returns only matching keys, sorted lexicographically",async()=>{using r=await n();await r.put("wf:b",i("b")),await r.put("wf:a",i("a")),await r.put("wf:c",i("c")),await r.put("other:x",i("x"));let o=await g(r.scan("wf:"));s(o.map(([c])=>c)).toEqual(["wf:a","wf:b","wf:c"])}),p("scan with limit returns at most N entries",async()=>{using r=await n();await r.put("p:a",i("a")),await r.put("p:b",i("b")),await r.put("p:c",i("c"));let o=await g(r.scan("p:",{limit:2}));s(o).toHaveLength(2),s(o.map(([c])=>c)).toEqual(["p:a","p:b"])}),p("scan with reverse returns in reverse order",async()=>{using r=await n();await r.put("p:a",i("a")),await r.put("p:b",i("b")),await r.put("p:c",i("c"));let o=await g(r.scan("p:",{reverse:!0}));s(o.map(([c])=>c)).toEqual(["p:c","p:b","p:a"])}),p("scan with gt/lt bounds",async()=>{using r=await n();await r.put("p:a",i("a")),await r.put("p:b",i("b")),await r.put("p:c",i("c")),await r.put("p:d",i("d"));let o=await g(r.scan("p:",{gt:"p:a",lt:"p:d"}));s(o.map(([c])=>c)).toEqual(["p:b","p:c"])}),p("scan with inclusive gte/lte bounds",async()=>{using r=await n();await r.put("p:a",i("a")),await r.put("p:b",i("b")),await r.put("p:c",i("c")),await r.put("p:d",i("d"));let o=await g(r.scan("p:",{gte:"p:b",lte:"p:c"}));s(o.map(([c])=>c)).toEqual(["p:b","p:c"])}),p("scan with no matching keys returns no entries",async()=>{using r=await n();await r.put("other:a",i("a")),s(await g(r.scan("wf:"))).toHaveLength(0)}),p("batch with multiple puts stores every value",async()=>{using r=await n();await r.batch([{type:"put",key:"a",value:i("1")},{type:"put",key:"b",value:i("2")},{type:"put",key:"c",value:i("3")}]),s(await r.get("a")).toEqual(i("1")),s(await r.get("b")).toEqual(i("2")),s(await r.get("c")).toEqual(i("3"))}),p("batch with mixed puts and deletes leaves the expected state",async()=>{using r=await n();await r.put("keep",i("keep")),await r.put("remove",i("remove")),await r.batch([{type:"put",key:"new",value:i("new")},{type:"delete",key:"remove"}]),s(await r.get("keep")).toEqual(i("keep")),s(await r.get("remove")).toBeNull(),s(await r.get("new")).toEqual(i("new"))}),p("batch with no operations is a no-op",async()=>{using r=await n();await r.put("key",i("value")),await r.batch([]),s(await r.get("key")).toEqual(i("value"))}),p("scan with empty prefix returns all keys",async()=>{using r=await n();await r.put("alpha",i("a")),await r.put("beta",i("b")),await r.put("gamma",i("c"));let o=await g(r.scan(""));s(o.map(([c])=>c)).toEqual(["alpha","beta","gamma"])}),p("scan with empty prefix on empty storage returns no entries",async()=>{using r=await n();s(await g(r.scan(""))).toEqual([])})})}export{ie as runBasicStorageContract,ae as runBinaryAndLargeScanStorageConformance,re as runConcurrentConditionalBatchConformance,ne as runStorageCapabilityConformance};
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- var Oe=import.meta.require;function S(e,t,r){if(!e.capabilities()[t])throw Error(`Feature "${r}" requires storage capability "${t}", but this storage backend does not provide it.`)}function ie(e){let t=e.capabilities(),r=[];if(t.persistence!=="local"&&t.persistence!=="remote")r.push(`persistence must be "local" or "remote" (got "${t.persistence}")`);if(t.readAfterWrite!=="linearizable")r.push(`readAfterWrite must be "linearizable" (got "${t.readAfterWrite}")`);if(t.scanConsistency!=="snapshot")r.push(`scanConsistency must be "snapshot" (got "${t.scanConsistency}")`);if(!t.atomicBatch)r.push("atomicBatch must be true");if(!t.conditionalBatch)r.push("conditionalBatch must be true");if(r.length>0)throw Error(`Storage is not durable enough for recovery: ${r.join("; ")}.`)}function n(e){return encodeURIComponent(e)}function ae(e){return decodeURIComponent(e)}function oe(e){try{return decodeURIComponent(e)}catch{return null}}function s(e){return String(e).padStart(16,"0")}var v={catalogEntry:(e,t)=>`catalog-entry:${n(e)}:${n(t)}`,catalogEntryPrefix:(e)=>`catalog-entry:${n(e)}:`,catalogActive:(e)=>`catalog-active:${n(e)}`,catalogTombstone:(e,t)=>`catalog-tombstone:${n(e)}:${n(t)}`,catalogTombstonePrefix:()=>"catalog-tombstone:"};var w="default";async function O(e,t){return await e.get(t)!==null}async function*p(e,t,r){for await(let[i]of e.scan(t,r))yield i}async function C(e,t){let r=0;for await(let i of p(e,t))r++;return r}async function T(e,t){let r=[];for await(let i of p(e,t))r.push({type:"delete",key:i});if(r.length===0)return 0;return await e.batch(r),r.length}async function k(e,t,r){let i=[];for await(let a of p(e,t,r))i.push({type:"delete",key:a});if(i.length===0)return 0;return await e.batch(i),i.length}var P={applicationMailbox:(e,t)=>`appmbx:v1:${n(e)}:${n(t)}`,applicationMailboxSinkProbe:(e,t,r)=>`appprobe:v1:${n(e)}:${n(t)}:${n(r)}`,applicationCommandPrefix:(e,t)=>`appcmd:v1:${n(e)}:${n(t)}:`,applicationCommand:(e,t,r)=>`appcmd:v1:${n(e)}:${n(t)}:${n(r)}`,applicationCommandReadyPrefix:(e,t)=>`appready:v1:${n(e)}:${n(t)}:`,applicationCommandReady:(e,t,r)=>`appready:v1:${n(e)}:${n(t)}:${s(r)}`,applicationCommandIdempotency:(e,t,r)=>`appidem:v1:${n(e)}:${n(t)}:${n(r)}`,applicationCommandBySequencePrefix:(e,t)=>`appseq:v1:${n(e)}:${n(t)}:`,applicationCommandBySequence:(e,t,r)=>`appseq:v1:${n(e)}:${n(t)}:${s(r)}`,applicationCommandTerminalPrefix:(e,t)=>`appterm:v1:${n(e)}:${n(t)}:`,applicationCommandTerminal:(e,t,r,i)=>`appterm:v1:${n(e)}:${n(t)}:${s(r)}:${n(i)}`};var B={applicationOutbox:(e,t)=>`appobx:v1:${n(e)}:${n(t)}`,applicationOutboxSinkProbe:(e,t,r)=>`appprobe:v1:outbox:${n(e)}:${n(t)}:${n(r)}`,applicationDeliveryPrefix:(e,t)=>`appdlv:v1:${n(e)}:${n(t)}:`,applicationDelivery:(e,t,r)=>`appdlv:v1:${n(e)}:${n(t)}:${n(r)}`,applicationDeliveryDuePrefix:(e,t)=>`appdue:v1:${n(e)}:${n(t)}:`,applicationDeliveryDue:(e,t,r,i)=>`appdue:v1:${n(e)}:${n(t)}:${s(r)}:${n(i)}`,applicationDeliveryIdempotency:(e,t,r)=>`appdidem:v1:${n(e)}:${n(t)}:${n(r)}`,applicationDeliveryBySequencePrefix:(e,t)=>`appdseq:v1:${n(e)}:${n(t)}:`,applicationDeliveryBySequence:(e,t,r)=>`appdseq:v1:${n(e)}:${n(t)}:${s(r)}`,applicationDeliveryTerminalPrefix:(e,t)=>`appdterm:v1:${n(e)}:${n(t)}:`,applicationDeliveryTerminal:(e,t,r,i)=>`appdterm:v1:${n(e)}:${n(t)}:${s(r)}:${n(i)}`};var A={workflowOwnerEpoch:(e)=>`wf-owner-epoch:${n(e)}`,workflowOwnerHolder:(e)=>`wf-owner-holder:${n(e)}`,ownershipModeMarker:()=>"ownership-mode-marker"};var se=["actrec:","appcmd:","appdidem:","appdlv:","appdseq:","appdterm:","appdue:","appidem:","appmbx:","appobx:","appprobe:","appready:","appseq:","appterm:","archive:","async-act:","attr:","audit:bulk:","blob:","budget:","budget-charged:","catalog-active:","catalog-entry:","catalog-tombstone:","child-by-parent:","ev:","fleet-event-by-workflow:","fleet-event:","fleet-event-tail","fleet-event-watermark","idx:","lease:","liveness:","offload:","ownership-mode-marker","op:","review:","schedule:","schedule-due:","schedule-run-by-schedule:","schedule-run-link:","schedule-run:","sig:","sigres:","sigseq:","start-idem:","state:","tag:","tool-effect:","upd:","upk:","upr:","wf:","wf-cleanup:","wf-cleanup-needed:","wf-concurrency:","wf-concurrency-holder:","wf-deadline:","wf-delayed:","wf-finalizer-state:","wf-has-services:","wf-headers:","wf-idx-","wf-owner-epoch:","wf-owner-holder:","wf-teardown:","wf-teardown-deadletter:","wf-teardown-needed:","wf-teardown-succeeded:","wf-terminal:"];var b=1e4,Xe=1e4;class D extends Error{code="StorageBatchOperationLimitExceededError";cap=b;count;target;constructor(e,t){super(`${e} count ${t} exceeds MAX_BATCH_OPERATIONS (${b}).`);this.name="StorageBatchOperationLimitExceededError",this.target=e,this.count=t}}function u(e,t){if(t>b)throw new D(e,t)}function L(e){return e.length>0?e.slice(0,-1)+String.fromCharCode(e.charCodeAt(e.length-1)+1):"\xFF"}function Ge(e,t={}){if(t.gt!==void 0&&e<=t.gt)return!1;if(t.gte!==void 0&&e<t.gte)return!1;if(t.lt!==void 0&&e>=t.lt)return!1;if(t.lte!==void 0&&e>t.lte)return!1;return!0}function I(e,t){if(e===null||t===null)return e===t;if(e.byteLength!==t.byteLength)return!1;for(let r=0;r<e.byteLength;r++)if(e[r]!==t[r])return!1;return!0}async function q(e,t){if(e.has)return e.has(t);return O(e,t)}function K(e,t,r){if(e.keys)return e.keys(t,r);return p(e,t,r)}async function N(e,t){if(e.count)return e.count(t);return C(e,t)}async function U(e,t){if(e.deletePrefix)return e.deletePrefix(t);return T(e,t)}async function je(e,t){u("batch operations",t.length),await e.batch(t)}async function M(e,t,r){if(u("conditionalBatch conditions",t.length),u("conditionalBatch operations",r.length),S(e,"conditionalBatch","storageConditionalBatch"),!e.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return e.conditionalBatch(t,r)}var l=s,le="0",ce="1",_=(e,t,r,i)=>`sig:${n(e)}:${n(t)}:${i}:${n(r)}`,Ze={workflow:(e)=>`wf:${n(e)}`,checkpoint:(e)=>`wf:${n(e)}:ckpt`,checkpointHistory:(e,t)=>`wf:${n(e)}:ckpt:${String(t).padStart(10,"0")}`,timelinePrefix:(e)=>`wf:${n(e)}:timeline:`,timeline:(e,t)=>`wf:${n(e)}:timeline:${String(t).padStart(10,"0")}`,schedule:(e)=>`schedule:${n(e)}`,scheduleTick:(e,t)=>`schedule-due:${String(e).padStart(16,"0")}:${n(t)}`,scheduleRun:(e)=>`schedule-run:${n(e)}`,scheduleRunLink:(e)=>`schedule-run-link:${n(e)}`,scheduleRunBySchedulePrefix:(e)=>`schedule-run-by-schedule:${n(e)}:`,scheduleRunBySchedule:(e,t)=>`schedule-run-by-schedule:${n(e)}:${n(t)}`,operation:(e,t,r)=>`op:${e}:${l(t)}:${r}`,operationInflight:(e)=>`op:inflight:${e}`,operationQueued:(e)=>`op:queued:${e}`,operationResolved:(e)=>`op:resolved:${e}`,bulkOperationAuditPrefix:()=>"audit:bulk:",bulkOperationAudit:(e,t,r)=>`audit:bulk:${l(e)}:${n(t)}:${n(r)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(e,t)=>`op:resolved-by-time:${l(e)}:${n(t)}`,asyncActivity:(e,t)=>`async-act:v1:${n(e)}:${n(t)}`,asyncActivityResolution:(e,t)=>`async-act:v1:${n(e)}:${n(t)}:resolution`,activityReconciliationPrefix:(e)=>`actrec:v1:${n(e)}:`,activityReconciliation:(e,t,r)=>`actrec:v1:${n(e)}:${n(t)}:${r}`,eventPrefix:(e)=>`ev:${n(e)}:`,event:(e,t)=>`ev:${n(e)}:${String(t).padStart(10,"0")}`,eventHead:(e)=>`ev:${n(e)}:head`,eventWatermark:(e)=>`ev:${n(e)}:watermark`,fleetEventPrefix:()=>"fleet-event:",fleetEvent:(e)=>`fleet-event:${String(e).padStart(10,"0")}`,fleetEventTail:()=>"fleet-event-tail",fleetEventWatermark:()=>"fleet-event-watermark",fleetEventByWorkflowPrefix:(e)=>`fleet-event-by-workflow:${n(e)}:`,fleetEventByWorkflow:(e,t)=>`fleet-event-by-workflow:${n(e)}:${String(t).padStart(10,"0")}`,signal:(e,t,r)=>_(e,t,r,ce),startSignal:(e,t,r)=>_(e,t,r,le),signalSequence:(e)=>`sigseq:v1:${n(e)}`,signalAcceptedResponsePrefix:(e)=>`sigres:v1:${n(e)}:`,signalAcceptedResponse:(e,t,r)=>`sigres:v1:${n(e)}:${n(t)}:${n(r)}`,deadline:(e,t)=>`wf-deadline:${l(e)}:${n(t)}`,terminalCleanup:(e,t)=>`wf-cleanup:${l(e)}:${n(t)}`,teardownTimer:(e,t)=>`wf-teardown:${l(e)}:${n(t)}`,delayedStart:(e,t)=>`wf-delayed:${l(e)}:${n(t)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(e,t)=>`wf-terminal:${l(e)}:${n(t)}`,attribute:(e)=>`attr:${n(e)}`,attributeIndex:(e,t,r)=>`idx:${e}:${t}:${n(r)}`,tagIndex:(e,t)=>`tag:${n(e)}:${n(t)}`,updatePrefix:(e)=>`upd:${n(e)}:`,update:(e,t)=>`upd:${n(e)}:${t}`,updateResponse:(e)=>`upr:${e}`,updateIdempotency:(e,t)=>`upk:${n(e)}:${t}`,startIdempotency:(e)=>`start-idem:${n(e)}`,startIdempotencySignalId:(e)=>`start-idem:${e}`,livenessPrefix:()=>"liveness:",liveness:(e)=>`liveness:${n(e)}`,leasePrefix:()=>"lease:",leaseEpoch:()=>"lease:epoch",leaseHolder:()=>"lease:holder",...P,...B,...A,...v,budget:(e,t,r)=>`budget:${e}:${t}:${r}`,review:(e,t)=>`review:${n(e)}:${t}`,workflowHeaders:(e)=>`wf-headers:${n(e)}`,childCancellationPrefix:(e)=>`child-cancel:${n(e)}:`,childCancellation:(e,t)=>`child-cancel:${n(e)}:${n(t)}`,childWorkflowByParentPrefix:(e,t)=>`child-by-parent:${n(e)}:${t===void 0?"":`${n(t)}:`}`,childWorkflowByParent:(e,t,r)=>`child-by-parent:${n(e)}:${t===void 0?"":`${n(t)}:`}${n(r)}`,terminalCleanupNeeded:(e)=>`wf-cleanup-needed:${n(e)}`,workflowConcurrency:(e,t)=>`wf-concurrency:${n(e)}:${n(t)}`,workflowConcurrencyHolder:(e)=>`wf-concurrency-holder:${n(e)}`,workflowHasServices:(e)=>`wf-has-services:${n(e)}`,finalizerState:(e)=>`wf-finalizer-state:${n(e)}`,teardownOwed:(e)=>`wf-teardown-needed:${n(e)}`,teardownSucceeded:(e)=>`wf-teardown-succeeded:${n(e)}`,teardownDeadLetter:(e)=>`wf-teardown-deadletter:${n(e)}`,offload:(e,t)=>`offload:${n(e)}:${t}`,archive:(e,t)=>`archive:${n(e)}:${t}`,stateExecution:(e,t)=>`state:execution:${n(e)}:${n(t)}`,stateWorkflow:(e,t)=>`state:workflow-scope:${w}:${n(e)}:${n(t)}`,streamChunkPrefix:(e,t)=>`blob:${n(e)}:${t}:chunk:`,streamChunk:(e,t,r)=>`blob:${n(e)}:${t}:chunk:${String(r).padStart(10,"0")}`,streamTail:(e,t)=>`blob:${n(e)}:${t}:tail`,streamMetadata:(e,t)=>`blob:${n(e)}:${t}:meta`,budgetCharged:(e)=>`budget-charged:${e}`,toolEffect:(e,t,r)=>`tool-effect:${n(e)}:${t}:${r}`,workflowVisibilityStatus:(e,t)=>`wf-idx-status:${n(e)}:${n(t)}`,workflowVisibilityType:(e,t)=>`wf-idx-type:${n(e)}:${n(t)}`,workflowVisibilityCreated:(e,t)=>`wf-idx-created:${l(e)}:${n(t)}`,workflowVisibilityUpdated:(e,t)=>`wf-idx-updated:${l(e)}:${n(t)}`,workflowVisibilityDeadline:(e,t)=>`wf-idx-deadline:${l(e)}:${n(t)}`,workflowVisibilityManifest:(e)=>`wf-idx-manifest:${n(e)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"};function ge(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 d(e){let t={},r=!1;for(let a of["gt","gte","lt","lte"]){let o=e[a];if(o===void 0)continue;if(typeof o!=="string")throw Error("deleteRange bounds must be strings");t[a]=o,r=!0}if(!r)throw Error("deleteRange requires at least one of gt/gte/lt/lte; use deletePrefix to delete a whole prefix");let i=ge(e.limit);if(i!==void 0)t.limit=i;return t}async function Y(e,t,r){let i=d(r);if(e.deleteRange)return e.deleteRange(t,i);return k(e,t,i)}function E(e){return e.replaceAll(/:+$/g,"")}function ue(e,t){let r=E(e),i=E(t);if(r.length===0)return i;if(i.length===0)return r;return`${r}:${i}`}class x{#e;#r;constructor(e,t){this.#e=e,this.#r=E(t)}#t(e){if(this.#r.length===0)return e;return e.length===0?`${this.#r}:`:`${this.#r}:${e}`}#n(e){return e.map((t)=>{if(t.type==="put")return{type:"put",key:this.#t(t.key),value:t.value};return{type:"delete",key:this.#t(t.key)}})}#i(e){if(this.#r.length===0)return e;return e.slice(this.#r.length+1)}#a(e){let t={};if(e.limit!==void 0)t.limit=e.limit;if(e.gt!==void 0)t.gt=this.#t(e.gt);if(e.gte!==void 0)t.gte=this.#t(e.gte);if(e.lt!==void 0)t.lt=this.#t(e.lt);if(e.lte!==void 0)t.lte=this.#t(e.lte);return t}#o(e={}){let t=this.#a(e);if(e.reverse!==void 0)t.reverse=e.reverse;return t}#s(e){return this.#a(e)}capabilities(){return this.#e.capabilities()}scoped(e){return new x(this.#e,ue(this.#r,e))}async get(e){return this.#e.get(this.#t(e))}async put(e,t){await this.#e.put(this.#t(e),t)}async delete(e){await this.#e.delete(this.#t(e))}async*scan(e,t){for await(let[r,i]of this.#e.scan(this.#t(e),this.#o(t)))yield[this.#i(r),i]}async batch(e){u("batch operations",e.length),await this.#e.batch(this.#n(e))}async conditionalBatch(e,t){return M(this.#e,e.map((r)=>({key:this.#t(r.key),expectedValue:r.expectedValue})),this.#n(t))}async has(e){return q(this.#e,this.#t(e))}async deletePrefix(e){return U(this.#e,this.#t(e))}async deleteRange(e,t){let r=this.#s(d(t));return Y(this.#e,this.#t(e),r)}async*keys(e,t){for await(let r of K(this.#e,this.#t(e),this.#o(t)))yield this.#i(r)}async count(e){return N(this.#e,this.#t(e))}[Symbol.dispose](){this.#e[Symbol.dispose]()}}function W(e,t){return new x(e,t)}import{createClient as he}from"@libsql/client";var pe=/^PRAGMA\b/iu,de=/^PRAGMA\s+(?:[A-Z_][A-Z0-9_]*\.)?[A-Z_][A-Z0-9_]*\s*$/iu,fe=/^SELECT\b/iu;function me(e){return e.trim().replace(/;+\s*$/u,"").trim()}function ye(e){return de.test(e)}function V(e){let t=me(e);if(t.length===0)throw Error("Storage query must not be empty.");if(t.includes(";"))throw Error("Storage query must contain exactly one read-only statement.");if(fe.test(t))return;if(pe.test(t)&&ye(t))return;throw Error("Storage query only supports read-only SELECT and PRAGMA statements.")}var Q=`CREATE TABLE IF NOT EXISTS kv (
2
+ var Ae=import.meta.require;function h(e,t,r){if(!e.capabilities()[t])throw Error(`Feature "${r}" requires storage capability "${t}", but this storage backend does not provide it.`)}function pe(e){let t=e.capabilities(),r=[];if(t.persistence!=="local"&&t.persistence!=="remote")r.push(`persistence must be "local" or "remote" (got "${t.persistence}")`);if(t.readAfterWrite!=="linearizable")r.push(`readAfterWrite must be "linearizable" (got "${t.readAfterWrite}")`);if(t.scanConsistency!=="snapshot")r.push(`scanConsistency must be "snapshot" (got "${t.scanConsistency}")`);if(!t.atomicBatch)r.push("atomicBatch must be true");if(!t.conditionalBatch)r.push("conditionalBatch must be true");if(r.length>0)throw Error(`Storage is not durable enough for recovery: ${r.join("; ")}.`)}function n(e){return encodeURIComponent(e)}function de(e){return decodeURIComponent(e)}function fe(e){try{return decodeURIComponent(e)}catch{return null}}function s(e){return String(e).padStart(16,"0")}var C={catalogEntry:(e,t)=>`catalog-entry:${n(e)}:${n(t)}`,catalogEntryPrefix:(e)=>`catalog-entry:${n(e)}:`,catalogActive:(e)=>`catalog-active:${n(e)}`,catalogTombstone:(e,t)=>`catalog-tombstone:${n(e)}:${n(t)}`,catalogTombstonePrefix:()=>"catalog-tombstone:"};async function v(e,t){return await e.get(t)!==null}async function*p(e,t,r){for await(let[i]of e.scan(t,r))yield i}async function T(e,t){let r=0;for await(let i of p(e,t))r++;return r}async function _(e,t){let r=[];for await(let i of p(e,t))r.push({type:"delete",key:i});if(r.length===0)return 0;return await e.batch(r),r.length}async function k(e,t,r){let i=[];for await(let a of p(e,t,r))i.push({type:"delete",key:a});if(i.length===0)return 0;return await e.batch(i),i.length}var P={workflowGeneration:(e)=>`wf-gen:${n(e)}`};var B={livenessPrefix:()=>"liveness:",liveness:(e)=>`liveness:${n(e)}`,leasePrefix:()=>"lease:",leaseEpoch:()=>"lease:epoch",leaseHolder:()=>"lease:holder"};var L={applicationMailbox:(e,t)=>`appmbx:v1:${n(e)}:${n(t)}`,applicationMailboxSinkProbe:(e,t,r)=>`appprobe:v1:${n(e)}:${n(t)}:${n(r)}`,applicationCommandPrefix:(e,t)=>`appcmd:v1:${n(e)}:${n(t)}:`,applicationCommand:(e,t,r)=>`appcmd:v1:${n(e)}:${n(t)}:${n(r)}`,applicationCommandReadyPrefix:(e,t)=>`appready:v1:${n(e)}:${n(t)}:`,applicationCommandReady:(e,t,r)=>`appready:v1:${n(e)}:${n(t)}:${s(r)}`,applicationCommandIdempotency:(e,t,r)=>`appidem:v1:${n(e)}:${n(t)}:${n(r)}`,applicationCommandBySequencePrefix:(e,t)=>`appseq:v1:${n(e)}:${n(t)}:`,applicationCommandBySequence:(e,t,r)=>`appseq:v1:${n(e)}:${n(t)}:${s(r)}`,applicationCommandTerminalPrefix:(e,t)=>`appterm:v1:${n(e)}:${n(t)}:`,applicationCommandTerminal:(e,t,r,i)=>`appterm:v1:${n(e)}:${n(t)}:${s(r)}:${n(i)}`};var A={applicationOutbox:(e,t)=>`appobx:v1:${n(e)}:${n(t)}`,applicationOutboxSinkProbe:(e,t,r)=>`appprobe:v1:outbox:${n(e)}:${n(t)}:${n(r)}`,applicationDeliveryPrefix:(e,t)=>`appdlv:v1:${n(e)}:${n(t)}:`,applicationDelivery:(e,t,r)=>`appdlv:v1:${n(e)}:${n(t)}:${n(r)}`,applicationDeliveryDuePrefix:(e,t)=>`appdue:v1:${n(e)}:${n(t)}:`,applicationDeliveryDue:(e,t,r,i)=>`appdue:v1:${n(e)}:${n(t)}:${s(r)}:${n(i)}`,applicationDeliveryIdempotency:(e,t,r)=>`appdidem:v1:${n(e)}:${n(t)}:${n(r)}`,applicationDeliveryBySequencePrefix:(e,t)=>`appdseq:v1:${n(e)}:${n(t)}:`,applicationDeliveryBySequence:(e,t,r)=>`appdseq:v1:${n(e)}:${n(t)}:${s(r)}`,applicationDeliveryTerminalPrefix:(e,t)=>`appdterm:v1:${n(e)}:${n(t)}:`,applicationDeliveryTerminal:(e,t,r,i)=>`appdterm:v1:${n(e)}:${n(t)}:${s(r)}:${n(i)}`};var D={workflowOwnerEpoch:(e)=>`wf-owner-epoch:${n(e)}`,workflowOwnerHolder:(e)=>`wf-owner-holder:${n(e)}`,ownershipModeMarker:()=>"ownership-mode-marker"};var me="0",ye="1",K=(e,t,r,i)=>`sig:${n(e)}:${n(t)}:${i}:${n(r)}`,I={signal:(e,t,r)=>K(e,t,r,ye),startSignal:(e,t,r)=>K(e,t,r,me),signalSequence:(e)=>`sigseq:v1:${n(e)}`,signalAcceptedResponsePrefix:(e)=>`sigres:v1:${n(e)}:`,signalAcceptedResponse:(e,t,r)=>`sigres:v1:${n(e)}:${n(t)}:${n(r)}`};var E="default";var u=s,q={deadline:(e,t)=>`wf-deadline:${u(e)}:${n(t)}`,terminalCleanup:(e,t)=>`wf-cleanup:${u(e)}:${n(t)}`,teardownTimer:(e,t)=>`wf-teardown:${u(e)}:${n(t)}`,delayedStart:(e,t)=>`wf-delayed:${u(e)}:${n(t)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(e,t)=>`wf-terminal:${u(e)}:${n(t)}`},Y={budget:(e,t,r)=>`budget:${e}:${t}:${r}`,review:(e,t)=>`review:${n(e)}:${t}`,workflowHeaders:(e)=>`wf-headers:${n(e)}`,childCancellationPrefix:(e)=>`child-cancel:${n(e)}:`,childCancellation:(e,t)=>`child-cancel:${n(e)}:${n(t)}`,childWorkflowByParentPrefix:(e,t)=>`child-by-parent:${n(e)}:${t===void 0?"":`${n(t)}:`}`,childWorkflowByParent:(e,t,r)=>`child-by-parent:${n(e)}:${t===void 0?"":`${n(t)}:`}${n(r)}`,terminalCleanupNeeded:(e)=>`wf-cleanup-needed:${n(e)}`,workflowConcurrency:(e,t)=>`wf-concurrency:${n(e)}:${n(t)}`,workflowConcurrencyHolder:(e)=>`wf-concurrency-holder:${n(e)}`,workflowHasServices:(e)=>`wf-has-services:${n(e)}`,finalizerState:(e)=>`wf-finalizer-state:${n(e)}`,teardownOwed:(e)=>`wf-teardown-needed:${n(e)}`,teardownSucceeded:(e)=>`wf-teardown-succeeded:${n(e)}`,teardownDeadLetter:(e)=>`wf-teardown-deadletter:${n(e)}`,offload:(e,t)=>`offload:${n(e)}:${t}`,archive:(e,t)=>`archive:${n(e)}:${t}`,stateExecution:(e,t)=>`state:execution:${n(e)}:${n(t)}`,stateWorkflow:(e,t)=>`state:workflow-scope:${E}:${n(e)}:${n(t)}`,streamChunkPrefix:(e,t)=>`blob:${n(e)}:${t}:chunk:`,streamChunk:(e,t,r)=>`blob:${n(e)}:${t}:chunk:${String(r).padStart(10,"0")}`,streamTail:(e,t)=>`blob:${n(e)}:${t}:tail`,streamMetadata:(e,t)=>`blob:${n(e)}:${t}:meta`,budgetCharged:(e)=>`budget-charged:${e}`,toolEffect:(e,t,r)=>`tool-effect:${n(e)}:${t}:${r}`,workflowVisibilityStatus:(e,t)=>`wf-idx-status:${n(e)}:${n(t)}`,workflowVisibilityType:(e,t)=>`wf-idx-type:${n(e)}:${n(t)}`,workflowVisibilityCreated:(e,t)=>`wf-idx-created:${u(e)}:${n(t)}`,workflowVisibilityUpdated:(e,t)=>`wf-idx-updated:${u(e)}:${n(t)}`,workflowVisibilityDeadline:(e,t)=>`wf-idx-deadline:${u(e)}:${n(t)}`,workflowVisibilityManifest:(e)=>`wf-idx-manifest:${n(e)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"};var w=s,W={workflow:(e)=>`wf:${n(e)}`,checkpoint:(e)=>`wf:${n(e)}:ckpt`,checkpointHistory:(e,t)=>`wf:${n(e)}:ckpt:${String(t).padStart(10,"0")}`,timelinePrefix:(e)=>`wf:${n(e)}:timeline:`,timeline:(e,t)=>`wf:${n(e)}:timeline:${String(t).padStart(10,"0")}`,schedule:(e)=>`schedule:${n(e)}`,scheduleTick:(e,t)=>`schedule-due:${String(e).padStart(16,"0")}:${n(t)}`,scheduleRun:(e)=>`schedule-run:${n(e)}`,scheduleRunLink:(e)=>`schedule-run-link:${n(e)}`,scheduleRunBySchedulePrefix:(e)=>`schedule-run-by-schedule:${n(e)}:`,scheduleRunBySchedule:(e,t)=>`schedule-run-by-schedule:${n(e)}:${n(t)}`,operation:(e,t,r)=>`op:${e}:${w(t)}:${r}`,operationInflight:(e)=>`op:inflight:${e}`,operationQueued:(e)=>`op:queued:${e}`,operationResolved:(e)=>`op:resolved:${e}`,bulkOperationAuditPrefix:()=>"audit:bulk:",bulkOperationAudit:(e,t,r)=>`audit:bulk:${w(e)}:${n(t)}:${n(r)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(e,t)=>`op:resolved-by-time:${w(e)}:${n(t)}`,asyncActivity:(e,t)=>`async-act:v1:${n(e)}:${n(t)}`,asyncActivityResolution:(e,t)=>`async-act:v1:${n(e)}:${n(t)}:resolution`,activityReconciliationPrefix:(e)=>`actrec:v1:${n(e)}:`,activityReconciliation:(e,t,r)=>`actrec:v1:${n(e)}:${n(t)}:${r}`,eventPrefix:(e)=>`ev:${n(e)}:`,event:(e,t)=>`ev:${n(e)}:${String(t).padStart(10,"0")}`,eventHead:(e)=>`ev:${n(e)}:head`,eventWatermark:(e)=>`ev:${n(e)}:watermark`,fleetEventPrefix:()=>"fleet-event:",fleetEvent:(e)=>`fleet-event:${String(e).padStart(10,"0")}`,fleetEventTail:()=>"fleet-event-tail",fleetEventWatermark:()=>"fleet-event-watermark",fleetEventByWorkflowPrefix:(e)=>`fleet-event-by-workflow:${n(e)}:`,fleetEventByWorkflow:(e,t)=>`fleet-event-by-workflow:${n(e)}:${String(t).padStart(10,"0")}`},N={attribute:(e)=>`attr:${n(e)}`,attributeIndex:(e,t,r)=>`idx:${e}:${t}:${n(r)}`,tagIndex:(e,t)=>`tag:${n(e)}:${n(t)}`,updatePrefix:(e)=>`upd:${n(e)}:`,update:(e,t)=>`upd:${n(e)}:${t}`,updateResponse:(e)=>`upr:${e}`,updateIdempotency:(e,t)=>`upk:${n(e)}:${t}`,startIdempotency:(e)=>`start-idem:${n(e)}`,startIdempotencySignalId:(e)=>`start-idem:${e}`};var Se=["actrec:","appcmd:","appdidem:","appdlv:","appdseq:","appdterm:","appdue:","appidem:","appmbx:","appobx:","appprobe:","appready:","appseq:","appterm:","archive:","async-act:","attr:","audit:bulk:","blob:","budget:","budget-charged:","catalog-active:","catalog-entry:","catalog-tombstone:","child-by-parent:","ev:","fleet-event-by-workflow:","fleet-event:","fleet-event-tail","fleet-event-watermark","idx:","lease:","liveness:","offload:","ownership-mode-marker","op:","review:","schedule:","schedule-due:","schedule-run-by-schedule:","schedule-run-link:","schedule-run:","sig:","sigres:","sigseq:","start-idem:","state:","tag:","tool-effect:","upd:","upk:","upr:","wf:","wf-cleanup:","wf-cleanup-needed:","wf-concurrency:","wf-concurrency-holder:","wf-deadline:","wf-delayed:","wf-finalizer-state:","wf-gen:","wf-has-services:","wf-headers:","wf-idx-","wf-owner-epoch:","wf-owner-holder:","wf-teardown:","wf-teardown-deadletter:","wf-teardown-needed:","wf-teardown-succeeded:","wf-terminal:"];var b=1e4,St=1e4;class F extends Error{code="StorageBatchOperationLimitExceededError";cap=b;count;target;constructor(e,t){super(`${e} count ${t} exceeds MAX_BATCH_OPERATIONS (${b}).`);this.name="StorageBatchOperationLimitExceededError",this.target=e,this.count=t}}function g(e,t){if(t>b)throw new F(e,t)}function U(e){return e.length>0?e.slice(0,-1)+String.fromCharCode(e.charCodeAt(e.length-1)+1):"\xFF"}function ht(e,t={}){if(t.gt!==void 0&&e<=t.gt)return!1;if(t.gte!==void 0&&e<t.gte)return!1;if(t.lt!==void 0&&e>=t.lt)return!1;if(t.lte!==void 0&&e>t.lte)return!1;return!0}function M(e,t){if(e===null||t===null)return e===t;if(e.byteLength!==t.byteLength)return!1;for(let r=0;r<e.byteLength;r++)if(e[r]!==t[r])return!1;return!0}async function V(e,t){if(e.has)return e.has(t);return v(e,t)}function Q(e,t,r){if(e.keys)return e.keys(t,r);return p(e,t,r)}async function z(e,t){if(e.count)return e.count(t);return T(e,t)}async function H(e,t){if(e.deletePrefix)return e.deletePrefix(t);return _(e,t)}async function Et(e,t){g("batch operations",t.length),await e.batch(t)}async function X(e,t,r){if(g("conditionalBatch conditions",t.length),g("conditionalBatch operations",r.length),h(e,"conditionalBatch","storageConditionalBatch"),!e.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return e.conditionalBatch(t,r)}var wt={...W,...I,...q,...N,...B,...L,...A,...D,...C,...P,...Y};function he(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 d(e){let t={},r=!1;for(let a of["gt","gte","lt","lte"]){let o=e[a];if(o===void 0)continue;if(typeof o!=="string")throw Error("deleteRange bounds must be strings");t[a]=o,r=!0}if(!r)throw Error("deleteRange requires at least one of gt/gte/lt/lte; use deletePrefix to delete a whole prefix");let i=he(e.limit);if(i!==void 0)t.limit=i;return t}async function G(e,t,r){let i=d(r);if(e.deleteRange)return e.deleteRange(t,i);return k(e,t,i)}function R(e){return e.replaceAll(/:+$/g,"")}function Ee(e,t){let r=R(e),i=R(t);if(r.length===0)return i;if(i.length===0)return r;return`${r}:${i}`}class O{#e;#r;constructor(e,t){this.#e=e,this.#r=R(t)}#t(e){if(this.#r.length===0)return e;return e.length===0?`${this.#r}:`:`${this.#r}:${e}`}#n(e){return e.map((t)=>{if(t.type==="put")return{type:"put",key:this.#t(t.key),value:t.value};return{type:"delete",key:this.#t(t.key)}})}#i(e){if(this.#r.length===0)return e;return e.slice(this.#r.length+1)}#a(e){let t={};if(e.limit!==void 0)t.limit=e.limit;if(e.gt!==void 0)t.gt=this.#t(e.gt);if(e.gte!==void 0)t.gte=this.#t(e.gte);if(e.lt!==void 0)t.lt=this.#t(e.lt);if(e.lte!==void 0)t.lte=this.#t(e.lte);return t}#o(e={}){let t=this.#a(e);if(e.reverse!==void 0)t.reverse=e.reverse;return t}#s(e){return this.#a(e)}capabilities(){return this.#e.capabilities()}scoped(e){return new O(this.#e,Ee(this.#r,e))}async get(e){return this.#e.get(this.#t(e))}async put(e,t){await this.#e.put(this.#t(e),t)}async delete(e){await this.#e.delete(this.#t(e))}async*scan(e,t){for await(let[r,i]of this.#e.scan(this.#t(e),this.#o(t)))yield[this.#i(r),i]}async batch(e){g("batch operations",e.length),await this.#e.batch(this.#n(e))}async conditionalBatch(e,t){return X(this.#e,e.map((r)=>({key:this.#t(r.key),expectedValue:r.expectedValue})),this.#n(t))}async has(e){return V(this.#e,this.#t(e))}async deletePrefix(e){return H(this.#e,this.#t(e))}async deleteRange(e,t){let r=this.#s(d(t));return G(this.#e,this.#t(e),r)}async*keys(e,t){for await(let r of Q(this.#e,this.#t(e),this.#o(t)))yield this.#i(r)}async count(e){return z(this.#e,this.#t(e))}[Symbol.dispose](){this.#e[Symbol.dispose]()}}function j(e,t){return new O(e,t)}import{createClient as xe}from"@libsql/client";var we=/^PRAGMA\b/iu,be=/^PRAGMA\s+(?:[A-Z_][A-Z0-9_]*\.)?[A-Z_][A-Z0-9_]*\s*$/iu,$e=/^SELECT\b/iu;function Re(e){return e.trim().replace(/;+\s*$/u,"").trim()}function Oe(e){return be.test(e)}function Z(e){let t=Re(e);if(t.length===0)throw Error("Storage query must not be empty.");if(t.includes(";"))throw Error("Storage query must contain exactly one read-only statement.");if($e.test(t))return;if(we.test(t)&&Oe(t))return;throw Error("Storage query only supports read-only SELECT and PRAGMA statements.")}var J=`CREATE TABLE IF NOT EXISTS kv (
3
3
  key TEXT PRIMARY KEY,
4
4
  value BLOB NOT NULL
5
- ) WITHOUT ROWID`,R="SELECT value FROM kv WHERE key = ?",m="INSERT INTO kv (key, value) VALUES (?, ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value",y="DELETE FROM kv WHERE key = ?",z="SELECT 1 AS present FROM kv WHERE key = ? LIMIT 1",F="SELECT COUNT(*) AS count FROM kv WHERE key >= ? AND key < ?",H="DELETE FROM kv WHERE key >= ? AND key < ?";function h(e){return[e,L(e)]}function X(e,t){let{gt:r,gte:i,lt:a,lte:o}=t,c=["key >= ? AND key < ?"],g=h(e);if(r!==void 0)c.push("key > ?"),g.push(r);if(i!==void 0)c.push("key >= ?"),g.push(i);if(a!==void 0)c.push("key < ?"),g.push(a);if(o!==void 0)c.push("key <= ?"),g.push(o);return{conditions:c,parameters:g}}function G(e,t={}){let{limit:r,reverse:i}=t,{conditions:a,parameters:o}=X(e,t),c=i?"DESC":"ASC",g=r!==void 0?" LIMIT ?":"";if(r!==void 0)o.push(r);return{parameters:o,sqlSuffix:`WHERE ${a.join(" AND ")} ORDER BY key ${c}${g}`}}function j(e,t,r="kv"){let{conditions:i,parameters:a}=X(e,t),o=i.join(" AND ");if(t.limit===void 0)return{parameters:a,sql:`DELETE FROM ${r} WHERE ${o}`};return a.push(t.limit),{parameters:a,sql:`DELETE FROM ${r} WHERE key IN (SELECT key FROM ${r} WHERE ${o} ORDER BY key ASC LIMIT ?)`}}function Z(e,t={}){let{parameters:r,sqlSuffix:i}=G(e,t);return{parameters:r,sql:`SELECT key, value FROM kv ${i}`}}function J(e,t={}){let{parameters:r,sqlSuffix:i}=G(e,t);return{parameters:r,sql:`SELECT key FROM kv ${i}`}}var ee=`${Q};`,f=10,Se=new Set(["SQLITE_BUSY","SQLITE_LOCKED"]);function te(e){return typeof e==="object"&&e!==null&&"code"in e&&typeof e.code==="string"&&Se.has(e.code)}async function we(e){return e.transaction("write")}async function be(e){try{await e.rollback()}catch{}}async function ne(e){await new Promise((t)=>{setTimeout(t,Math.min(e*5,50))})}async function $e(e,t){for(let r=1;r<=f;r++)try{await e.batch(t,"write");return}catch(i){if(!te(i)||r===f)throw i;await ne(r)}}async function Ee(e,t){for(let r of t){let a=(await e.execute({sql:R,args:[r.key]})).rows[0]?.value,o=a===null||a===void 0?null:new Uint8Array(a);if(!I(o,r.expectedValue))return!1}return!0}async function xe(e,t){for(let r of t)if(r.type==="put")await e.execute({sql:m,args:[r.key,r.value]});else await e.execute({sql:y,args:[r.key]})}function Re(e){if(e==="file::memory:"||e===":memory:")return"ephemeral";if(e.startsWith("file:"))return"local";return"remote"}class ve{#e;#r;#t=!1;constructor(e){this.#r=Re(e.url),this.#e=he(e.authToken?{url:e.url,authToken:e.authToken}:{url:e.url})}capabilities(){return{persistence:this.#r,readAfterWrite:"session",scanConsistency:"snapshot",atomicBatch:!0,conditionalBatch:!0,boundedRangeDelete:!0}}async#n(){if(this.#t)return;await this.#e.executeMultiple(ee),this.#t=!0}async get(e){await this.#n();let t=await this.#e.execute({sql:R,args:[e]});if(t.rows.length===0)return null;let r=t.rows[0].value;if(r===null||r===void 0)return null;return new Uint8Array(r)}async put(e,t){await this.#n(),await this.#e.execute({sql:m,args:[e,t]})}async delete(e){await this.#n(),await this.#e.execute({sql:y,args:[e]})}async has(e){return await this.#n(),(await this.#e.execute({sql:z,args:[e]})).rows.length>0}async deletePrefix(e){await this.#n();let[t,r]=h(e);return(await this.#e.execute({sql:H,args:[t,r]})).rowsAffected}async deleteRange(e,t){await this.#n();let r=d(t),{parameters:i,sql:a}=j(e,r);return(await this.#e.execute({sql:a,args:i})).rowsAffected}async*scan(e,t={}){await this.#n();let{parameters:r,sql:i}=Z(e,t),a=await this.#e.execute({sql:i,args:r});for(let o of a.rows){let{key:c,value:g}=o,re=new Uint8Array(g);yield[c,re]}}async*keys(e,t={}){await this.#n();let{parameters:r,sql:i}=J(e,t),a=await this.#e.execute({sql:i,args:r});for(let o of a.rows)yield o.key}async count(e){await this.#n();let[t,r]=h(e),i=await this.#e.execute({sql:F,args:[t,r]});return Number(i.rows[0]?.count??0)}scoped(e){return W(this,e)}async batch(e){if(u("batch operations",e.length),e.length===0)return;await this.#n();let t=e.map((r)=>{if(r.type==="put")return{sql:m,args:[r.key,r.value]};return{sql:y,args:[r.key]}});await $e(this.#e,t)}async conditionalBatch(e,t){u("conditionalBatch conditions",e.length),u("conditionalBatch operations",t.length),await this.#n();let r;for(let i=1;i<=f;i++){let a;try{if(a=await we(this.#e),await a.executeMultiple(ee),!await Ee(a,e))return await a.rollback(),!1;return await xe(a,t),await a.commit(),!0}catch(o){if(a!==void 0)await be(a);if(!te(o))throw o;if(r=o,i<f)await ne(i)}}throw Error(`conditionalBatch exhausted ${f} attempts after SQLite contention failures`,{cause:r})}async query(e,t){return await this.#n(),V(e),(await this.#e.execute({sql:e,args:t??[]})).rows}[Symbol.dispose](){this.#e.close()}}export{ve as TursoStorage};
5
+ ) WITHOUT ROWID`,x="SELECT value FROM kv WHERE key = ?",m="INSERT INTO kv (key, value) VALUES (?, ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value",y="DELETE FROM kv WHERE key = ?",ee="SELECT 1 AS present FROM kv WHERE key = ? LIMIT 1",te="SELECT COUNT(*) AS count FROM kv WHERE key >= ? AND key < ?",ne="DELETE FROM kv WHERE key >= ? AND key < ?";function S(e){return[e,U(e)]}function re(e,t){let{gt:r,gte:i,lt:a,lte:o}=t,l=["key >= ? AND key < ?"],c=S(e);if(r!==void 0)l.push("key > ?"),c.push(r);if(i!==void 0)l.push("key >= ?"),c.push(i);if(a!==void 0)l.push("key < ?"),c.push(a);if(o!==void 0)l.push("key <= ?"),c.push(o);return{conditions:l,parameters:c}}function ie(e,t={}){let{limit:r,reverse:i}=t,{conditions:a,parameters:o}=re(e,t),l=i?"DESC":"ASC",c=r!==void 0?" LIMIT ?":"";if(r!==void 0)o.push(r);return{parameters:o,sqlSuffix:`WHERE ${a.join(" AND ")} ORDER BY key ${l}${c}`}}function ae(e,t,r="kv"){let{conditions:i,parameters:a}=re(e,t),o=i.join(" AND ");if(t.limit===void 0)return{parameters:a,sql:`DELETE FROM ${r} WHERE ${o}`};return a.push(t.limit),{parameters:a,sql:`DELETE FROM ${r} WHERE key IN (SELECT key FROM ${r} WHERE ${o} ORDER BY key ASC LIMIT ?)`}}function oe(e,t={}){let{parameters:r,sqlSuffix:i}=ie(e,t);return{parameters:r,sql:`SELECT key, value FROM kv ${i}`}}function se(e,t={}){let{parameters:r,sqlSuffix:i}=ie(e,t);return{parameters:r,sql:`SELECT key FROM kv ${i}`}}var le=`${J};`,f=10,Ce=new Set(["SQLITE_BUSY","SQLITE_LOCKED"]);function ce(e){return typeof e==="object"&&e!==null&&"code"in e&&typeof e.code==="string"&&Ce.has(e.code)}async function ve(e){return e.transaction("write")}async function Te(e){try{await e.rollback()}catch{}}async function ge(e){await new Promise((t)=>{setTimeout(t,Math.min(e*5,50))})}async function _e(e,t){for(let r=1;r<=f;r++)try{await e.batch(t,"write");return}catch(i){if(!ce(i)||r===f)throw i;await ge(r)}}async function ke(e,t){for(let r of t){let a=(await e.execute({sql:x,args:[r.key]})).rows[0]?.value,o=a===null||a===void 0?null:new Uint8Array(a);if(!M(o,r.expectedValue))return!1}return!0}async function Pe(e,t){for(let r of t)if(r.type==="put")await e.execute({sql:m,args:[r.key,r.value]});else await e.execute({sql:y,args:[r.key]})}function Be(e){if(e==="file::memory:"||e===":memory:")return"ephemeral";if(e.startsWith("file:"))return"local";return"remote"}class Le{#e;#r;#t=!1;constructor(e){this.#r=Be(e.url),this.#e=xe(e.authToken?{url:e.url,authToken:e.authToken}:{url:e.url})}capabilities(){return{persistence:this.#r,readAfterWrite:"session",scanConsistency:"snapshot",atomicBatch:!0,conditionalBatch:!0,boundedRangeDelete:!0}}async#n(){if(this.#t)return;await this.#e.executeMultiple(le),this.#t=!0}async get(e){await this.#n();let t=await this.#e.execute({sql:x,args:[e]});if(t.rows.length===0)return null;let r=t.rows[0].value;if(r===null||r===void 0)return null;return new Uint8Array(r)}async put(e,t){await this.#n(),await this.#e.execute({sql:m,args:[e,t]})}async delete(e){await this.#n(),await this.#e.execute({sql:y,args:[e]})}async has(e){return await this.#n(),(await this.#e.execute({sql:ee,args:[e]})).rows.length>0}async deletePrefix(e){await this.#n();let[t,r]=S(e);return(await this.#e.execute({sql:ne,args:[t,r]})).rowsAffected}async deleteRange(e,t){await this.#n();let r=d(t),{parameters:i,sql:a}=ae(e,r);return(await this.#e.execute({sql:a,args:i})).rowsAffected}async*scan(e,t={}){await this.#n();let{parameters:r,sql:i}=oe(e,t),a=await this.#e.execute({sql:i,args:r});for(let o of a.rows){let{key:l,value:c}=o,ue=new Uint8Array(c);yield[l,ue]}}async*keys(e,t={}){await this.#n();let{parameters:r,sql:i}=se(e,t),a=await this.#e.execute({sql:i,args:r});for(let o of a.rows)yield o.key}async count(e){await this.#n();let[t,r]=S(e),i=await this.#e.execute({sql:te,args:[t,r]});return Number(i.rows[0]?.count??0)}scoped(e){return j(this,e)}async batch(e){if(g("batch operations",e.length),e.length===0)return;await this.#n();let t=e.map((r)=>{if(r.type==="put")return{sql:m,args:[r.key,r.value]};return{sql:y,args:[r.key]}});await _e(this.#e,t)}async conditionalBatch(e,t){g("conditionalBatch conditions",e.length),g("conditionalBatch operations",t.length),await this.#n();let r;for(let i=1;i<=f;i++){let a;try{if(a=await ve(this.#e),await a.executeMultiple(le),!await ke(a,e))return await a.rollback(),!1;return await Pe(a,t),await a.commit(),!0}catch(o){if(a!==void 0)await Te(a);if(!ce(o))throw o;if(r=o,i<f)await ge(i)}}throw Error(`conditionalBatch exhausted ${f} attempts after SQLite contention failures`,{cause:r})}async query(e,t){return await this.#n(),Z(e),(await this.#e.execute({sql:e,args:t??[]})).rows}[Symbol.dispose](){this.#e.close()}}export{Le as TursoStorage};
@@ -0,0 +1,128 @@
1
+ /**
2
+ * Storage key builders for post-execution workflow lifecycle concerns:
3
+ * deadlines and terminal timers, finalizer/teardown tracking, concurrency
4
+ * limits, child-workflow bookkeeping, durable state/stream storage, and the
5
+ * workflow visibility index.
6
+ *
7
+ * These are spread into `KEYS` in `interface.ts` rather than declared there, so
8
+ * the lifecycle keyspace can carry its full rationale without pushing that
9
+ * file's documented line ceiling. Callers still reach them through `KEYS`,
10
+ * which keeps one import contract for storage keys.
11
+ *
12
+ * @module storage/workflow-lifecycle-keys
13
+ */
14
+ /**
15
+ * Deadline and terminal timer keys.
16
+ *
17
+ * Spread into `KEYS` after `SIGNAL_KEYS` and ahead of
18
+ * `WORKFLOW_RECORD_KEYS_EXTENDED` to preserve the pre-split
19
+ * `Object.keys(KEYS)` insertion order; not intended to be imported directly
20
+ * by engine code.
21
+ */
22
+ export declare const WORKFLOW_LIFECYCLE_KEYS_CORE: {
23
+ readonly deadline: (deadline: number, workflowId: string) => string;
24
+ readonly terminalCleanup: (fireAt: number, timerId: string) => string;
25
+ /**
26
+ * Durable timer that drives a workflow's finalizer after a `cancelled`/`timed-out`
27
+ * terminal (issue #446 Phase 2). Sortable by `fireAt` and scanned by its own
28
+ * source (`wf-teardown:`) so it dispatches as the `teardown` timer kind rather
29
+ * than `terminal-cleanup`. Re-armed with exponential backoff on a failed finalizer
30
+ * attempt; the scheduler deletes the fired entry after the drive returns without
31
+ * throwing, so a backoff reschedule is a write of a new entry at the later `fireAt`.
32
+ */
33
+ readonly teardownTimer: (fireAt: number, timerId: string) => string;
34
+ readonly delayedStart: (startAt: number, workflowId: string) => string;
35
+ readonly terminalWorkflowPrefix: () => string;
36
+ readonly terminalWorkflow: (updatedAt: number, workflowId: string) => string;
37
+ };
38
+ /**
39
+ * Finalizer/teardown tracking, concurrency limits, child-workflow
40
+ * bookkeeping, durable state/stream storage, and workflow visibility index
41
+ * keys.
42
+ *
43
+ * Spread into `KEYS` after `MAILBOX_KEYS`, `OUTBOX_KEYS`,
44
+ * `OWNERSHIP_CLAIM_KEYS`, and `WORKFLOW_CATALOG_KEYS` to preserve the
45
+ * pre-split `Object.keys(KEYS)` insertion order; not intended to be imported
46
+ * directly by engine code.
47
+ */
48
+ export declare const WORKFLOW_LIFECYCLE_KEYS_EXTENDED: {
49
+ readonly budget: (namespace: string, period: string, date: string) => string;
50
+ readonly review: (workflowId: string, reviewId: string) => string;
51
+ readonly workflowHeaders: (workflowId: string) => string;
52
+ readonly childCancellationPrefix: (workflowId: string) => string;
53
+ readonly childCancellation: (workflowId: string, childWorkflowId: string) => string;
54
+ readonly childWorkflowByParentPrefix: (parentWorkflowId: string, parentWorkflowExecutionToken?: string) => string;
55
+ readonly childWorkflowByParent: (parentWorkflowId: string, parentWorkflowExecutionToken: string | undefined, childWorkflowId: string) => string;
56
+ readonly terminalCleanupNeeded: (workflowId: string) => string;
57
+ readonly workflowConcurrency: (workflowType: string, partitionKey: string) => string;
58
+ readonly workflowConcurrencyHolder: (workflowId: string) => string;
59
+ /**
60
+ * Presence-only marker written at start only when a run is launched with a
61
+ * non-serialized `services` value (see `start-batch.ts`). It lets a
62
+ * fresh-process recovery tell a run whose services were lost on crash apart
63
+ * from one that never had any — the services value itself is never persisted,
64
+ * so this bit is the only durable trace. Cleared on terminal cleanup.
65
+ */
66
+ readonly workflowHasServices: (workflowId: string) => string;
67
+ /**
68
+ * Last-write-wins payload that `ctx.setFinalizerState(value)` records for a
69
+ * workflow's definition-level `finalizer` activity (issue #446). Staged as a
70
+ * pending atomic side-effect so it commits with the next checkpoint or the
71
+ * terminal batch, and swept on terminal cleanup.
72
+ *
73
+ * **Current behavior (this release): recorded only.** Nothing reads this value
74
+ * yet. **Planned behavior (future release):** the engine will pass the decoded
75
+ * value as the finalizer's input when driving teardown after a
76
+ * `cancelled`/`timed-out` terminal, where presence means "a resource was
77
+ * recorded" and absence means the finalizer is skipped.
78
+ */
79
+ readonly finalizerState: (workflowId: string) => string;
80
+ /**
81
+ * Durable execution-claim + attempt marker for a workflow that owes a finalizer
82
+ * run after a `cancelled`/`timed-out` terminal (issue #446 Phase 2). Mirrors the
83
+ * `wf-cleanup-needed:` lifecycle. The value is the encoded claim record
84
+ * `{ status: 'owed' | 'running'; attempts: number; token: string; claimedAt?: number }`:
85
+ * the engine fenced-CAS's `owed → running` (stamping `claimedAt`) before invoking the
86
+ * finalizer, and settle-CAS's the exact `running` bytes it wrote when clearing or
87
+ * rescheduling. Liveness is decided purely by TIME: a `running` claim is reclaimable
88
+ * once `claimedAt` is older than the finalizer's per-attempt timeout plus a margin
89
+ * (see `teardownStaleThresholdMs`), so crash recovery is an ordinary stale-claim retry
90
+ * driven by the timer that survived the terminal batch — there is no in-memory liveness
91
+ * set and no epoch in the record. The cost is that a finalizer running past the stale
92
+ * threshold may be re-driven concurrently, which is why workflow finalizers must be
93
+ * idempotent. Present while teardown is outstanding; deleted by the finalizer on
94
+ * success or when it dead-letters, which is what unblocks purge.
95
+ */
96
+ readonly teardownOwed: (workflowId: string) => string;
97
+ /** Durable successful finalizer outcome, retained until workflow purge or retention. */
98
+ readonly teardownSucceeded: (workflowId: string) => string;
99
+ /**
100
+ * Durable audit record written when a workflow's finalizer permanently fails — the
101
+ * retry horizon is reached, or the recorded resource state vanished so the finalizer
102
+ * can never run (issue #446 Phase 2). Holds the `TeardownDeadLetterRecord` shape
103
+ * `{ type, lastError, attempts, deadLetteredAt, workflowExecutionToken?, finalizerInput? }`.
104
+ * **Excluded from the workflow purge delete-set** so it survives as the operator's
105
+ * evidence of a leaked external resource and remains queryable through the durable
106
+ * finalizer-status API after purge.
107
+ */
108
+ readonly teardownDeadLetter: (workflowId: string) => string;
109
+ readonly offload: (workflowId: string, key: string) => string;
110
+ readonly archive: (workflowId: string, key: string) => string;
111
+ readonly stateExecution: (ownerWorkflowId: string, key: string) => string;
112
+ readonly stateWorkflow: (workflowType: string, key: string) => string;
113
+ readonly streamChunkPrefix: (workflowId: string, key: string) => string;
114
+ readonly streamChunk: (workflowId: string, key: string, chunkIndex: number) => string;
115
+ readonly streamTail: (workflowId: string, key: string) => string;
116
+ readonly streamMetadata: (workflowId: string, key: string) => string;
117
+ readonly budgetCharged: (operationId: string) => string;
118
+ readonly toolEffect: (workflowId: string, agentId: string, semanticHash: string) => string;
119
+ readonly workflowVisibilityStatus: (status: string, workflowId: string) => string;
120
+ readonly workflowVisibilityType: (type: string, workflowId: string) => string;
121
+ readonly workflowVisibilityCreated: (createdAt: number, workflowId: string) => string;
122
+ readonly workflowVisibilityUpdated: (updatedAt: number, workflowId: string) => string;
123
+ readonly workflowVisibilityDeadline: (deadline: number, workflowId: string) => string;
124
+ readonly workflowVisibilityManifest: (workflowId: string) => string;
125
+ readonly workflowVisibilityMetaVersion: () => string;
126
+ readonly workflowVisibilityMetaBuiltAt: () => string;
127
+ readonly workflowVisibilityMetaCursor: () => string;
128
+ };
@@ -0,0 +1,46 @@
1
+ import { DEFAULT_SCOPE } from "./default-scope.js";
2
+ import { encodeStorageKeyComponent, formatSortableStorageTimestamp } from "./key-encoding.js";
3
+ const formatSortableTimestamp = formatSortableStorageTimestamp;
4
+ export const WORKFLOW_LIFECYCLE_KEYS_CORE = {
5
+ deadline: (deadline, workflowId) => `wf-deadline:${formatSortableTimestamp(deadline)}:${encodeStorageKeyComponent(workflowId)}`,
6
+ terminalCleanup: (fireAt, timerId) => `wf-cleanup:${formatSortableTimestamp(fireAt)}:${encodeStorageKeyComponent(timerId)}`,
7
+ teardownTimer: (fireAt, timerId) => `wf-teardown:${formatSortableTimestamp(fireAt)}:${encodeStorageKeyComponent(timerId)}`,
8
+ delayedStart: (startAt, workflowId) => `wf-delayed:${formatSortableTimestamp(startAt)}:${encodeStorageKeyComponent(workflowId)}`,
9
+ terminalWorkflowPrefix: () => "wf-terminal:",
10
+ terminalWorkflow: (updatedAt, workflowId) => `wf-terminal:${formatSortableTimestamp(updatedAt)}:${encodeStorageKeyComponent(workflowId)}`
11
+ }, WORKFLOW_LIFECYCLE_KEYS_EXTENDED = {
12
+ budget: (namespace, period, date) => `budget:${namespace}:${period}:${date}`,
13
+ review: (workflowId, reviewId) => `review:${encodeStorageKeyComponent(workflowId)}:${reviewId}`,
14
+ workflowHeaders: (workflowId) => `wf-headers:${encodeStorageKeyComponent(workflowId)}`,
15
+ childCancellationPrefix: (workflowId) => `child-cancel:${encodeStorageKeyComponent(workflowId)}:`,
16
+ childCancellation: (workflowId, childWorkflowId) => `child-cancel:${encodeStorageKeyComponent(workflowId)}:${encodeStorageKeyComponent(childWorkflowId)}`,
17
+ childWorkflowByParentPrefix: (parentWorkflowId, parentWorkflowExecutionToken) => `child-by-parent:${encodeStorageKeyComponent(parentWorkflowId)}:${parentWorkflowExecutionToken === void 0 ? "" : `${encodeStorageKeyComponent(parentWorkflowExecutionToken)}:`}`,
18
+ childWorkflowByParent: (parentWorkflowId, parentWorkflowExecutionToken, childWorkflowId) => `child-by-parent:${encodeStorageKeyComponent(parentWorkflowId)}:${parentWorkflowExecutionToken === void 0 ? "" : `${encodeStorageKeyComponent(parentWorkflowExecutionToken)}:`}${encodeStorageKeyComponent(childWorkflowId)}`,
19
+ terminalCleanupNeeded: (workflowId) => `wf-cleanup-needed:${encodeStorageKeyComponent(workflowId)}`,
20
+ workflowConcurrency: (workflowType, partitionKey) => `wf-concurrency:${encodeStorageKeyComponent(workflowType)}:${encodeStorageKeyComponent(partitionKey)}`,
21
+ workflowConcurrencyHolder: (workflowId) => `wf-concurrency-holder:${encodeStorageKeyComponent(workflowId)}`,
22
+ workflowHasServices: (workflowId) => `wf-has-services:${encodeStorageKeyComponent(workflowId)}`,
23
+ finalizerState: (workflowId) => `wf-finalizer-state:${encodeStorageKeyComponent(workflowId)}`,
24
+ teardownOwed: (workflowId) => `wf-teardown-needed:${encodeStorageKeyComponent(workflowId)}`,
25
+ teardownSucceeded: (workflowId) => `wf-teardown-succeeded:${encodeStorageKeyComponent(workflowId)}`,
26
+ teardownDeadLetter: (workflowId) => `wf-teardown-deadletter:${encodeStorageKeyComponent(workflowId)}`,
27
+ offload: (workflowId, key) => `offload:${encodeStorageKeyComponent(workflowId)}:${key}`,
28
+ archive: (workflowId, key) => `archive:${encodeStorageKeyComponent(workflowId)}:${key}`,
29
+ stateExecution: (ownerWorkflowId, key) => `state:execution:${encodeStorageKeyComponent(ownerWorkflowId)}:${encodeStorageKeyComponent(key)}`,
30
+ stateWorkflow: (workflowType, key) => `state:workflow-scope:${DEFAULT_SCOPE}:${encodeStorageKeyComponent(workflowType)}:${encodeStorageKeyComponent(key)}`,
31
+ streamChunkPrefix: (workflowId, key) => `blob:${encodeStorageKeyComponent(workflowId)}:${key}:chunk:`,
32
+ streamChunk: (workflowId, key, chunkIndex) => `blob:${encodeStorageKeyComponent(workflowId)}:${key}:chunk:${String(chunkIndex).padStart(10, "0")}`,
33
+ streamTail: (workflowId, key) => `blob:${encodeStorageKeyComponent(workflowId)}:${key}:tail`,
34
+ streamMetadata: (workflowId, key) => `blob:${encodeStorageKeyComponent(workflowId)}:${key}:meta`,
35
+ budgetCharged: (operationId) => `budget-charged:${operationId}`,
36
+ toolEffect: (workflowId, agentId, semanticHash) => `tool-effect:${encodeStorageKeyComponent(workflowId)}:${agentId}:${semanticHash}`,
37
+ workflowVisibilityStatus: (status, workflowId) => `wf-idx-status:${encodeStorageKeyComponent(status)}:${encodeStorageKeyComponent(workflowId)}`,
38
+ workflowVisibilityType: (type, workflowId) => `wf-idx-type:${encodeStorageKeyComponent(type)}:${encodeStorageKeyComponent(workflowId)}`,
39
+ workflowVisibilityCreated: (createdAt, workflowId) => `wf-idx-created:${formatSortableTimestamp(createdAt)}:${encodeStorageKeyComponent(workflowId)}`,
40
+ workflowVisibilityUpdated: (updatedAt, workflowId) => `wf-idx-updated:${formatSortableTimestamp(updatedAt)}:${encodeStorageKeyComponent(workflowId)}`,
41
+ workflowVisibilityDeadline: (deadline, workflowId) => `wf-idx-deadline:${formatSortableTimestamp(deadline)}:${encodeStorageKeyComponent(workflowId)}`,
42
+ workflowVisibilityManifest: (workflowId) => `wf-idx-manifest:${encodeStorageKeyComponent(workflowId)}`,
43
+ workflowVisibilityMetaVersion: () => "wf-idx-meta:version",
44
+ workflowVisibilityMetaBuiltAt: () => "wf-idx-meta:built-at",
45
+ workflowVisibilityMetaCursor: () => "wf-idx-meta:cursor"
46
+ };