@lostgradient/weft 0.22.1 → 0.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/cli/generated/operation-catalog.snapshot.json +112 -38
- package/dist/core/engine/errors.d.ts +1 -1
- package/dist/core/engine/errors.js +4 -1
- package/dist/core/engine/index.d.ts +1 -1
- package/dist/core/engine/index.js +1 -0
- package/dist/core/engine/persisted-data-version.js +1 -1
- package/dist/core/persisted-data-incompatible-error.d.ts +16 -2
- package/dist/core/persisted-data-incompatible-error.js +9 -1
- package/dist/core/weft-error.d.ts +1 -1
- package/dist/core/weft-error.js +1 -0
- package/dist/http.js +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -0
- package/dist/indexeddb.js +1 -1
- package/dist/json-schema.js +1 -1
- package/dist/server/fleet-event-feed.d.ts +14 -64
- package/dist/server/fleet-event-feed.js +228 -74
- package/dist/server/handler/index.d.ts +1 -1
- package/dist/server/index.d.ts +8 -6
- package/dist/server/operations/event-stream-contracts.js +15 -2
- package/dist/server/operations/fleet-events-sse.js +3 -0
- package/dist/server/operations/fleet-events-subscription.js +3 -0
- package/dist/server/replay-live-feed-internals.d.ts +7 -0
- package/dist/server/replay-live-feed-internals.js +107 -7
- package/dist/server/runtime/task-result-view.d.ts +31 -12
- package/dist/server/runtime/task-result-view.js +31 -9
- package/dist/server/task-ledger-transitions-cancellation.d.ts +2 -0
- package/dist/server/task-ledger-transitions-cancellation.js +1 -1
- package/dist/server/workflow-event-feed.d.ts +88 -0
- package/dist/server/workflow-event-feed.js +4 -1
- package/dist/storage/bun-sql.js +1 -0
- package/dist/storage/compressed-storage.js +1 -1
- package/dist/storage/index.d.ts +2 -1
- package/dist/storage/interface.d.ts +1 -0
- package/dist/storage/interface.js +1 -1
- package/dist/storage/key-prefixes.d.ts +1 -1
- package/dist/storage/key-prefixes.js +1 -0
- package/dist/storage/lmdb.js +1 -1
- package/dist/storage/memory.js +1 -1
- package/dist/storage/neon.js +2 -2
- package/dist/storage/node-sqlite.js +1 -0
- package/dist/storage/postgres.js +2 -2
- package/dist/storage/resolve.js +1 -1
- package/dist/storage/scoped-storage.js +1 -1
- package/dist/storage/testing.js +1 -1
- package/dist/storage/turso.js +2 -2
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/web-extension.js +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -241,27 +241,64 @@
|
|
|
241
241
|
},
|
|
242
242
|
"outputSchema": {},
|
|
243
243
|
"eventSchema": {
|
|
244
|
-
"
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
"
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
244
|
+
"anyOf": [
|
|
245
|
+
{
|
|
246
|
+
"additionalProperties": false,
|
|
247
|
+
"properties": {
|
|
248
|
+
"cursor": {
|
|
249
|
+
"type": "string"
|
|
250
|
+
},
|
|
251
|
+
"emittedAtMs": {
|
|
252
|
+
"type": "number"
|
|
253
|
+
},
|
|
254
|
+
"kind": {
|
|
255
|
+
"type": "string"
|
|
256
|
+
},
|
|
257
|
+
"payload": {},
|
|
258
|
+
"sequence": {
|
|
259
|
+
"type": "number"
|
|
260
|
+
},
|
|
261
|
+
"workflowId": {
|
|
262
|
+
"type": "string"
|
|
263
|
+
}
|
|
264
|
+
},
|
|
265
|
+
"required": ["kind", "sequence", "cursor", "emittedAtMs", "payload"],
|
|
266
|
+
"type": "object"
|
|
258
267
|
},
|
|
259
|
-
|
|
260
|
-
"
|
|
268
|
+
{
|
|
269
|
+
"additionalProperties": false,
|
|
270
|
+
"properties": {
|
|
271
|
+
"cursor": {
|
|
272
|
+
"type": "string"
|
|
273
|
+
},
|
|
274
|
+
"emittedAtMs": {
|
|
275
|
+
"type": "number"
|
|
276
|
+
},
|
|
277
|
+
"kind": {
|
|
278
|
+
"const": "fleet:gap",
|
|
279
|
+
"type": "string"
|
|
280
|
+
},
|
|
281
|
+
"payload": {
|
|
282
|
+
"additionalProperties": false,
|
|
283
|
+
"properties": {
|
|
284
|
+
"firstRetainedSequence": {
|
|
285
|
+
"type": "number"
|
|
286
|
+
},
|
|
287
|
+
"requestedCursor": {
|
|
288
|
+
"type": "string"
|
|
289
|
+
}
|
|
290
|
+
},
|
|
291
|
+
"required": ["requestedCursor", "firstRetainedSequence"],
|
|
292
|
+
"type": "object"
|
|
293
|
+
},
|
|
294
|
+
"sequence": {
|
|
295
|
+
"type": "number"
|
|
296
|
+
}
|
|
297
|
+
},
|
|
298
|
+
"required": ["kind", "sequence", "cursor", "emittedAtMs", "payload"],
|
|
299
|
+
"type": "object"
|
|
261
300
|
}
|
|
262
|
-
|
|
263
|
-
"required": ["kind", "sequence", "cursor", "emittedAtMs", "payload"],
|
|
264
|
-
"type": "object"
|
|
301
|
+
]
|
|
265
302
|
}
|
|
266
303
|
},
|
|
267
304
|
{
|
|
@@ -346,27 +383,64 @@
|
|
|
346
383
|
"type": "object"
|
|
347
384
|
},
|
|
348
385
|
"eventSchema": {
|
|
349
|
-
"
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
"
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
386
|
+
"anyOf": [
|
|
387
|
+
{
|
|
388
|
+
"additionalProperties": false,
|
|
389
|
+
"properties": {
|
|
390
|
+
"cursor": {
|
|
391
|
+
"type": "string"
|
|
392
|
+
},
|
|
393
|
+
"emittedAtMs": {
|
|
394
|
+
"type": "number"
|
|
395
|
+
},
|
|
396
|
+
"kind": {
|
|
397
|
+
"type": "string"
|
|
398
|
+
},
|
|
399
|
+
"payload": {},
|
|
400
|
+
"sequence": {
|
|
401
|
+
"type": "number"
|
|
402
|
+
},
|
|
403
|
+
"workflowId": {
|
|
404
|
+
"type": "string"
|
|
405
|
+
}
|
|
406
|
+
},
|
|
407
|
+
"required": ["kind", "sequence", "cursor", "emittedAtMs", "payload"],
|
|
408
|
+
"type": "object"
|
|
363
409
|
},
|
|
364
|
-
|
|
365
|
-
"
|
|
410
|
+
{
|
|
411
|
+
"additionalProperties": false,
|
|
412
|
+
"properties": {
|
|
413
|
+
"cursor": {
|
|
414
|
+
"type": "string"
|
|
415
|
+
},
|
|
416
|
+
"emittedAtMs": {
|
|
417
|
+
"type": "number"
|
|
418
|
+
},
|
|
419
|
+
"kind": {
|
|
420
|
+
"const": "fleet:gap",
|
|
421
|
+
"type": "string"
|
|
422
|
+
},
|
|
423
|
+
"payload": {
|
|
424
|
+
"additionalProperties": false,
|
|
425
|
+
"properties": {
|
|
426
|
+
"firstRetainedSequence": {
|
|
427
|
+
"type": "number"
|
|
428
|
+
},
|
|
429
|
+
"requestedCursor": {
|
|
430
|
+
"type": "string"
|
|
431
|
+
}
|
|
432
|
+
},
|
|
433
|
+
"required": ["requestedCursor", "firstRetainedSequence"],
|
|
434
|
+
"type": "object"
|
|
435
|
+
},
|
|
436
|
+
"sequence": {
|
|
437
|
+
"type": "number"
|
|
438
|
+
}
|
|
439
|
+
},
|
|
440
|
+
"required": ["kind", "sequence", "cursor", "emittedAtMs", "payload"],
|
|
441
|
+
"type": "object"
|
|
366
442
|
}
|
|
367
|
-
|
|
368
|
-
"required": ["kind", "sequence", "cursor", "emittedAtMs", "payload"],
|
|
369
|
-
"type": "object"
|
|
443
|
+
]
|
|
370
444
|
}
|
|
371
445
|
},
|
|
372
446
|
{
|
|
@@ -353,4 +353,4 @@ export declare class IdempotencyKeyPurgedError extends WeftError<'IdempotencyKey
|
|
|
353
353
|
readonly workflowId: string;
|
|
354
354
|
constructor(workflowId: string);
|
|
355
355
|
}
|
|
356
|
-
export { PersistedDataIncompatibleError } from '../persisted-data-incompatible-error.ts';
|
|
356
|
+
export { PersistedDataCorruptError, PersistedDataIncompatibleError, } from '../persisted-data-incompatible-error.ts';
|
|
@@ -139,4 +139,7 @@ export class IdempotencyKeyPurgedError extends WeftError {
|
|
|
139
139
|
this.workflowId = workflowId;
|
|
140
140
|
}
|
|
141
141
|
}
|
|
142
|
-
export {
|
|
142
|
+
export {
|
|
143
|
+
PersistedDataCorruptError,
|
|
144
|
+
PersistedDataIncompatibleError
|
|
145
|
+
} from "../persisted-data-incompatible-error.js";
|
|
@@ -25,7 +25,7 @@ export { ActivityReconciliationCapabilityError, ActivityReconciliationConflictEr
|
|
|
25
25
|
export { AsyncActivityTokenNotFoundError } from './async-activity-completion.ts';
|
|
26
26
|
export type { PendingAsyncActivity } from './async-activity-records.ts';
|
|
27
27
|
export type { PendingTimelineEntry, RegistrationEntry, ResolvedOptions, TrackedWaiterKeys, WorkflowResultWaiter, } from './engine-internal-types.ts';
|
|
28
|
-
export { ActivityResolutionError, BulkDeleteRequiresTerminalWorkflowsError, BulkOperationConfirmationError, EngineCreateNameMismatchError, EngineDisposalError, EngineDisposedError, IdempotencyKeyPurgedError, PersistedDataIncompatibleError, StartOrSignalConflictError, WorkflowAlreadyExistsError, WorkflowConcurrencyLimitExceededError, WorkflowNotFoundError, WorkflowNotRegisteredError, WorkflowSuspendNotSupportedError, WorkflowTeardownPendingError, WorkflowTypeNotRegisteredForRecoveryError, } from './errors.ts';
|
|
28
|
+
export { ActivityResolutionError, BulkDeleteRequiresTerminalWorkflowsError, BulkOperationConfirmationError, EngineCreateNameMismatchError, EngineDisposalError, EngineDisposedError, IdempotencyKeyPurgedError, PersistedDataCorruptError, PersistedDataIncompatibleError, StartOrSignalConflictError, WorkflowAlreadyExistsError, WorkflowConcurrencyLimitExceededError, WorkflowNotFoundError, WorkflowNotRegisteredError, WorkflowSuspendNotSupportedError, WorkflowTeardownPendingError, WorkflowTypeNotRegisteredForRecoveryError, } from './errors.ts';
|
|
29
29
|
export { HANDLE_RESULT_PROMISE, WorkflowHandle } from './handles.ts';
|
|
30
30
|
export { WeftWorkflowClaimLostWarning, WeftWorkflowWakeDiscardedWarning, WORKFLOW_CLAIM_LOST_WARNING_NAME, WORKFLOW_WAKE_DISCARDED_WARNING_NAME, } from './lease-deposition.ts';
|
|
31
31
|
export type { WorkflowWakeKind } from './lease-deposition.ts';
|
|
@@ -18,7 +18,7 @@ export async function assertCompatiblePersistedDataVersion(storage) {
|
|
|
18
18
|
return;
|
|
19
19
|
}
|
|
20
20
|
for (const prefix of USER_DATA_PREFIXES)
|
|
21
|
-
for await (const
|
|
21
|
+
for await (const entry of storage.scan(prefix, { limit: 1 }))
|
|
22
22
|
throw new PersistedDataIncompatibleError(null, CURRENT_PERSISTED_DATA_SCHEMA_VERSION);
|
|
23
23
|
await storage.put(PERSISTED_DATA_SCHEMA_VERSION_KEY, new TextEncoder().encode(String(CURRENT_PERSISTED_DATA_SCHEMA_VERSION)));
|
|
24
24
|
}
|
|
@@ -34,13 +34,27 @@ export declare class PersistedDataIncompatibleError extends WeftError<'Persisted
|
|
|
34
34
|
constructor(foundVersion: number | null, expectedVersion: number);
|
|
35
35
|
}
|
|
36
36
|
/**
|
|
37
|
-
*
|
|
37
|
+
* A durable record could not be decoded without risking data loss.
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* ```ts
|
|
41
|
+
* import { PersistedDataCorruptError } from '@lostgradient/weft';
|
|
42
|
+
* declare const error: unknown;
|
|
43
|
+
* if (error instanceof PersistedDataCorruptError) console.error(error.key);
|
|
44
|
+
* ```
|
|
45
|
+
*/
|
|
46
|
+
export declare class PersistedDataCorruptError extends WeftError<'PersistedDataCorruptError'> {
|
|
47
|
+
readonly key: string;
|
|
48
|
+
constructor(key: string);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Bumped to `2` by the durable fleet-event feed hardening. Pre-MVP databases
|
|
38
52
|
* have no version key recorded — `assertCompatiblePersistedDataVersion` treats
|
|
39
53
|
* the absence of the key on an otherwise non-empty database as
|
|
40
54
|
* `pre-versioned`, which is incompatible. Fresh databases get the current
|
|
41
55
|
* version written on first open.
|
|
42
56
|
*/
|
|
43
|
-
export declare const CURRENT_PERSISTED_DATA_SCHEMA_VERSION =
|
|
57
|
+
export declare const CURRENT_PERSISTED_DATA_SCHEMA_VERSION = 2;
|
|
44
58
|
/**
|
|
45
59
|
* Storage key holding the persisted-data schema version (encoded as the UTF-8
|
|
46
60
|
* digits of an integer). Kept under a `weft:` prefix so it cannot collide with
|
|
@@ -9,4 +9,12 @@ export class PersistedDataIncompatibleError extends WeftError {
|
|
|
9
9
|
this.expectedVersion = expectedVersion;
|
|
10
10
|
}
|
|
11
11
|
}
|
|
12
|
-
|
|
12
|
+
|
|
13
|
+
export class PersistedDataCorruptError extends WeftError {
|
|
14
|
+
key;
|
|
15
|
+
constructor(key) {
|
|
16
|
+
super("PersistedDataCorruptError", `Persisted Weft record is corrupt at key "${key}".`);
|
|
17
|
+
this.key = key;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
export const CURRENT_PERSISTED_DATA_SCHEMA_VERSION = 2, PERSISTED_DATA_SCHEMA_VERSION_KEY = "weft:schema-version";
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
* }
|
|
26
26
|
* ```
|
|
27
27
|
*/
|
|
28
|
-
export type WeftErrorCode = 'WorkflowAlreadyExistsError' | 'BulkDeleteRequiresTerminalWorkflowsError' | 'BulkOperationConfirmationError' | 'WorkflowTypeNotRegisteredForRecoveryError' | 'EngineCreateNameMismatchError' | 'EngineDisposedError' | 'EngineDisposalError' | 'WorkflowNotFoundError' | 'WorkflowNotRegisteredError' | 'WorkflowConcurrencyLimitExceededError' | 'WorkflowSuspendNotSupportedError' | 'ActivityResolutionError' | 'BranchTopologyChangedError' | 'PersistedDataIncompatibleError' | 'WorkflowTimeoutError' | 'HttpClientError' | 'WorkerProtocolIncompatibleError' | 'UpdateTimeoutError' | 'UpdateValidationError' | 'WorkflowTerminalError' | 'WorkflowBuilderError' | 'VersionMismatchError' | 'EffectReplayConflictError' | 'ReviewTimeoutError' | 'AtomicStateConflictError' | 'StandardSchemaValidationError' | 'ActivityReconciliationCapabilityError' | 'ActivityReconciliationConflictError' | 'ActivityReconciliationIndeterminateError' | 'DurableActivityScopeError' | 'DurableActivityUnsupportedError' | 'AsyncActivityTokenNotFoundError' | 'ActivityScheduleToCloseTimeoutError' | 'ActivityPerAttemptTimeoutError' | 'PayloadSizeExceededError' | 'StartOrSignalConflictError' | 'WorkflowTeardownPendingError' | 'IdempotencyKeyPurgedError' | 'WorkerManifestBuildError' | 'OwnershipModeMismatchError';
|
|
28
|
+
export type WeftErrorCode = 'WorkflowAlreadyExistsError' | 'BulkDeleteRequiresTerminalWorkflowsError' | 'BulkOperationConfirmationError' | 'WorkflowTypeNotRegisteredForRecoveryError' | 'EngineCreateNameMismatchError' | 'EngineDisposedError' | 'EngineDisposalError' | 'WorkflowNotFoundError' | 'WorkflowNotRegisteredError' | 'WorkflowConcurrencyLimitExceededError' | 'WorkflowSuspendNotSupportedError' | 'ActivityResolutionError' | 'BranchTopologyChangedError' | 'PersistedDataIncompatibleError' | 'PersistedDataCorruptError' | 'WorkflowTimeoutError' | 'HttpClientError' | 'WorkerProtocolIncompatibleError' | 'UpdateTimeoutError' | 'UpdateValidationError' | 'WorkflowTerminalError' | 'WorkflowBuilderError' | 'VersionMismatchError' | 'EffectReplayConflictError' | 'ReviewTimeoutError' | 'AtomicStateConflictError' | 'StandardSchemaValidationError' | 'ActivityReconciliationCapabilityError' | 'ActivityReconciliationConflictError' | 'ActivityReconciliationIndeterminateError' | 'DurableActivityScopeError' | 'DurableActivityUnsupportedError' | 'AsyncActivityTokenNotFoundError' | 'ActivityScheduleToCloseTimeoutError' | 'ActivityPerAttemptTimeoutError' | 'PayloadSizeExceededError' | 'StartOrSignalConflictError' | 'WorkflowTeardownPendingError' | 'IdempotencyKeyPurgedError' | 'WorkerManifestBuildError' | 'OwnershipModeMismatchError';
|
|
29
29
|
/**
|
|
30
30
|
* Generic abstract base for all Weft library errors. The `TCode` parameter
|
|
31
31
|
* makes each subclass's `code` its own literal type; the exported base surface
|
package/dist/core/weft-error.js
CHANGED
|
@@ -21,6 +21,7 @@ const publicWeftErrorCodeMap = {
|
|
|
21
21
|
ActivityResolutionError: !0,
|
|
22
22
|
BranchTopologyChangedError: !0,
|
|
23
23
|
PersistedDataIncompatibleError: !0,
|
|
24
|
+
PersistedDataCorruptError: !0,
|
|
24
25
|
WorkflowTimeoutError: !0,
|
|
25
26
|
HttpClientError: !0,
|
|
26
27
|
WorkerProtocolIncompatibleError: !0,
|
package/dist/http.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
async function*O(e,t){if(e.body===null)return;let n=e.body.getReader(),i=new TextDecoder,o="",s=0,u=!1;try{while(!0){let{done:K,value:R}=await n.read();if(K){u=!0;break}if(s+=R.byteLength,s>t.maximumBytes)throw t.sizeLimitError();o+=i.decode(R,{stream:!0});let B=o.split(`
|
|
2
|
-
`);o=B.pop()??"";for(let V of B)yield V}if(o+=i.decode(),o.length>0)yield o}finally{if(!u)try{await n.cancel()}catch{}n.releaseLock()}}function m(e){let t=[];for(let n=0;n<e.length;n+=512)t.push(String.fromCharCode(...e.subarray(n,n+512)));return btoa(t.join(""))}function C(e){let t=atob(e),n=new Uint8Array(t.length);for(let i=0;i<t.length;i+=1)n[i]=t.charCodeAt(i);return n}function b(e){return typeof e==="object"&&e!==null&&!Array.isArray(e)}async function p(e,t){return await e.get(t)!==null}async function*c(e,t,n){for await(let[i]of e.scan(t,n))yield i}async function f(e,t){let n=0;for await(let i of c(e,t))n++;return n}async function y(e,t){let n=[];for await(let i of c(e,t))n.push({type:"delete",key:i});if(n.length===0)return 0;return await e.batch(n),n.length}async function h(e,t,n){let i=[];for await(let o of c(e,t,n))i.push({type:"delete",key:o});if(i.length===0)return 0;return await e.batch(i),i.length}function P(e,t,n){if(!e.capabilities()[t])throw Error(`Feature "${n}" requires storage capability "${t}", but this storage backend does not provide it.`)}var k="default";function r(e){return encodeURIComponent(e)}var v={workflowOwnerEpoch:(e)=>`wf-owner-epoch:${r(e)}`,workflowOwnerHolder:(e)=>`wf-owner-holder:${r(e)}`,ownershipModeMarker:()=>"ownership-mode-marker"};var S=1e4;class E extends Error{code="StorageBatchOperationLimitExceededError";cap=S;count;target;constructor(e,t){super(`${e} count ${t} exceeds MAX_BATCH_OPERATIONS (${S}).`);this.name="StorageBatchOperationLimitExceededError",this.target=e,this.count=t}}function l(e,t){if(t>S)throw new E(e,t)}function A(e){return e.length>0?e.slice(0,-1)+String.fromCharCode(e.charCodeAt(e.length-1)+1):"ÿ"}function fe(e,t={}){if(t.gt!==void 0&&e<=t.gt)return!1;if(t.gte!==void 0&&e<t.gte)return!1;if(t.lt!==void 0&&e>=t.lt)return!1;if(t.lte!==void 0&&e>t.lte)return!1;return!0}function ye(e,t){if(e===null||t===null)return e===t;if(e.byteLength!==t.byteLength)return!1;for(let n=0;n<e.byteLength;n++)if(e[n]!==t[n])return!1;return!0}async function D(e,t){if(e.has)return e.has(t);return p(e,t)}function U(e,t,n){if(e.keys)return e.keys(t,n);return c(e,t,n)}async function I(e,t){if(e.count)return e.count(t);return f(e,t)}async function L(e,t){if(e.deletePrefix)return e.deletePrefix(t);return y(e,t)}async function _(e,t,n){if(l("conditionalBatch conditions",t.length),l("conditionalBatch operations",n.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,n)}var a=(e)=>String(e).padStart(16,"0"),q="0",M="1",T=(e,t,n,i)=>`sig:${r(e)}:${r(t)}:${i}:${r(n)}`,he={workflow:(e)=>`wf:${r(e)}`,checkpoint:(e)=>`wf:${r(e)}:ckpt`,checkpointHistory:(e,t)=>`wf:${r(e)}:ckpt:${String(t).padStart(10,"0")}`,timelinePrefix:(e)=>`wf:${r(e)}:timeline:`,timeline:(e,t)=>`wf:${r(e)}:timeline:${String(t).padStart(10,"0")}`,schedule:(e)=>`schedule:${r(e)}`,scheduleTick:(e,t)=>`schedule-due:${String(e).padStart(16,"0")}:${r(t)}`,scheduleRun:(e)=>`schedule-run:${r(e)}`,scheduleRunLink:(e)=>`schedule-run-link:${r(e)}`,scheduleRunBySchedulePrefix:(e)=>`schedule-run-by-schedule:${r(e)}:`,scheduleRunBySchedule:(e,t)=>`schedule-run-by-schedule:${r(e)}:${r(t)}`,operation:(e,t,n)=>`op:${e}:${a(t)}:${n}`,operationInflight:(e)=>`op:inflight:${e}`,operationQueued:(e)=>`op:queued:${e}`,operationResolved:(e)=>`op:resolved:${e}`,bulkOperationAuditPrefix:()=>"audit:bulk:",bulkOperationAudit:(e,t,n)=>`audit:bulk:${a(e)}:${r(t)}:${r(n)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(e,t)=>`op:resolved-by-time:${a(e)}:${r(t)}`,asyncActivity:(e,t)=>`async-act:v1:${r(e)}:${r(t)}`,asyncActivityResolution:(e,t)=>`async-act:v1:${r(e)}:${r(t)}:resolution`,activityReconciliationPrefix:(e)=>`actrec:v1:${r(e)}:`,activityReconciliation:(e,t,n)=>`actrec:v1:${r(e)}:${r(t)}:${n}`,eventPrefix:(e)=>`ev:${r(e)}:`,event:(e,t)=>`ev:${r(e)}:${String(t).padStart(10,"0")}`,eventHead:(e)=>`ev:${r(e)}:head`,eventWatermark:(e)=>`ev:${r(e)}:watermark`,fleetEventPrefix:()=>"fleet-event:",fleetEvent:(e)=>`fleet-event:${String(e).padStart(10,"0")}`,fleetEventTail:()=>"fleet-event-tail",fleetEventByWorkflowPrefix:(e)=>`fleet-event-by-workflow:${r(e)}:`,fleetEventByWorkflow:(e,t)=>`fleet-event-by-workflow:${r(e)}:${String(t).padStart(10,"0")}`,signal:(e,t,n)=>T(e,t,n,M),startSignal:(e,t,n)=>T(e,t,n,q),signalSequence:(e)=>`sigseq:v1:${r(e)}`,signalAcceptedResponsePrefix:(e)=>`sigres:v1:${r(e)}:`,signalAcceptedResponse:(e,t,n)=>`sigres:v1:${r(e)}:${r(t)}:${r(n)}`,deadline:(e,t)=>`wf-deadline:${a(e)}:${r(t)}`,terminalCleanup:(e,t)=>`wf-cleanup:${a(e)}:${r(t)}`,teardownTimer:(e,t)=>`wf-teardown:${a(e)}:${r(t)}`,delayedStart:(e,t)=>`wf-delayed:${a(e)}:${r(t)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(e,t)=>`wf-terminal:${a(e)}:${r(t)}`,attribute:(e)=>`attr:${r(e)}`,attributeIndex:(e,t,n)=>`idx:${e}:${t}:${r(n)}`,tagIndex:(e,t)=>`tag:${r(e)}:${r(t)}`,updatePrefix:(e)=>`upd:${r(e)}:`,update:(e,t)=>`upd:${r(e)}:${t}`,updateResponse:(e)=>`upr:${e}`,updateIdempotency:(e,t)=>`upk:${r(e)}:${t}`,startIdempotency:(e)=>`start-idem:${r(e)}`,startIdempotencySignalId:(e)=>`start-idem:${e}`,livenessPrefix:()=>"liveness:",liveness:(e)=>`liveness:${r(e)}`,leasePrefix:()=>"lease:",leaseEpoch:()=>"lease:epoch",leaseHolder:()=>"lease:holder",...v,budget:(e,t,n)=>`budget:${e}:${t}:${n}`,review:(e,t)=>`review:${r(e)}:${t}`,workflowHeaders:(e)=>`wf-headers:${r(e)}`,childCancellationPrefix:(e)=>`child-cancel:${r(e)}:`,childCancellation:(e,t)=>`child-cancel:${r(e)}:${r(t)}`,childWorkflowByParentPrefix:(e,t)=>`child-by-parent:${r(e)}:${t===void 0?"":`${r(t)}:`}`,childWorkflowByParent:(e,t,n)=>`child-by-parent:${r(e)}:${t===void 0?"":`${r(t)}:`}${r(n)}`,terminalCleanupNeeded:(e)=>`wf-cleanup-needed:${r(e)}`,workflowConcurrency:(e,t)=>`wf-concurrency:${r(e)}:${r(t)}`,workflowConcurrencyHolder:(e)=>`wf-concurrency-holder:${r(e)}`,workflowHasServices:(e)=>`wf-has-services:${r(e)}`,finalizerState:(e)=>`wf-finalizer-state:${r(e)}`,teardownOwed:(e)=>`wf-teardown-needed:${r(e)}`,teardownSucceeded:(e)=>`wf-teardown-succeeded:${r(e)}`,teardownDeadLetter:(e)=>`wf-teardown-deadletter:${r(e)}`,offload:(e,t)=>`offload:${r(e)}:${t}`,archive:(e,t)=>`archive:${r(e)}:${t}`,stateExecution:(e,t)=>`state:execution:${r(e)}:${r(t)}`,stateWorkflow:(e,t)=>`state:workflow-scope:${k}:${r(e)}:${r(t)}`,streamChunkPrefix:(e,t)=>`blob:${r(e)}:${t}:chunk:`,streamChunk:(e,t,n)=>`blob:${r(e)}:${t}:chunk:${String(n).padStart(10,"0")}`,streamTail:(e,t)=>`blob:${r(e)}:${t}:tail`,streamMetadata:(e,t)=>`blob:${r(e)}:${t}:meta`,budgetCharged:(e)=>`budget-charged:${e}`,toolEffect:(e,t,n)=>`tool-effect:${r(e)}:${t}:${n}`,workflowVisibilityStatus:(e,t)=>`wf-idx-status:${r(e)}:${r(t)}`,workflowVisibilityType:(e,t)=>`wf-idx-type:${r(e)}:${r(t)}`,workflowVisibilityCreated:(e,t)=>`wf-idx-created:${a(e)}:${r(t)}`,workflowVisibilityUpdated:(e,t)=>`wf-idx-updated:${a(e)}:${r(t)}`,workflowVisibilityDeadline:(e,t)=>`wf-idx-deadline:${a(e)}:${r(t)}`,workflowVisibilityManifest:(e)=>`wf-idx-manifest:${r(e)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"};function W(e){if(e===void 0)return;if(typeof e!=="number"||!Number.isInteger(e)||e<0)throw Error("deleteRange limit must be a finite non-negative integer");return e===0?0:e}function d(e){let t={},n=!1;for(let o of["gt","gte","lt","lte"]){let s=e[o];if(s===void 0)continue;if(typeof s!=="string")throw Error("deleteRange bounds must be strings");t[o]=s,n=!0}if(!n)throw Error("deleteRange requires at least one of gt/gte/lt/lte; use deletePrefix to delete a whole prefix");let i=W(e.limit);if(i!==void 0)t.limit=i;return t}async function N(e,t,n){let i=d(n);if(e.deleteRange)return e.deleteRange(t,i);return h(e,t,i)}function j(e,t){let n={key:e,open:!1};if(t.gte!==void 0&&t.gte>n.key)n.key=t.gte,n.open=!1;if(t.gt!==void 0&&t.gt>=n.key)n.key=t.gt,n.open=!0;return n}function G(e,t){let n={key:A(e),open:!0};if(t.lt!==void 0&&t.lt<=n.key)n.key=t.lt,n.open=!0;if(t.lte!==void 0&&t.lte<n.key)n.key=t.lte,n.open=!1;return n}function we(e,t){let n=j(e,t),i=G(e,t);if(n.key>i.key||n.key===i.key&&(n.open||i.open))return null;return{lower:n,upper:i}}function w(e){return e.replaceAll(/:+$/g,"")}function F(e,t){let n=w(e),i=w(t);if(n.length===0)return i;if(i.length===0)return n;return`${n}:${i}`}class x{#e;#n;constructor(e,t){this.#e=e,this.#n=w(t)}#t(e){if(this.#n.length===0)return e;return e.length===0?`${this.#n}:`:`${this.#n}:${e}`}#i(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)}})}#o(e){if(this.#n.length===0)return e;return e.slice(this.#n.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}#r(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,F(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[n,i]of this.#e.scan(this.#t(e),this.#r(t)))yield[this.#o(n),i]}async batch(e){l("batch operations",e.length),await this.#e.batch(this.#i(e))}async conditionalBatch(e,t){return _(this.#e,e.map((n)=>({key:this.#t(n.key),expectedValue:n.expectedValue})),this.#i(t))}async has(e){return D(this.#e,this.#t(e))}async deletePrefix(e){return L(this.#e,this.#t(e))}async deleteRange(e,t){let n=this.#s(d(t));return N(this.#e,this.#t(e),n)}async*keys(e,t){for await(let n of U(this.#e,this.#t(e),this.#r(t)))yield this.#o(n)}async count(e){return I(this.#e,this.#t(e))}[Symbol.dispose](){this.#e[Symbol.dispose]()}}function H(e,t){return new x(e,t)}var Y=67108864;function z(e){if(e.type==="put")return{type:"put",key:e.key,value:m(e.value)};return{type:"delete",key:e.key}}function X(e){return{key:e.key,expectedValue:e.expectedValue===null?null:m(e.expectedValue)}}function J(e){if(!b(e)||typeof e.key!=="string"||typeof e.value!=="string")throw Error("HTTPStorage scan response contained an invalid NDJSON entry.");return{key:e.key,value:e.value}}function Z(e){if(!b(e)||typeof e.applied!=="boolean")throw Error('HTTPStorage conditional batch response must include a boolean "applied" field.');return e.applied}function g(e,t,n){if(n!==void 0)e.searchParams.set(t,String(n))}function Q(e){if(e.trim().length===0)return null;let t=J(JSON.parse(e));return[t.key,C(t.value)]}class ee{#e;#n;#t;constructor(e){this.#e=e.baseUrl instanceof URL?e.baseUrl:new URL(e.baseUrl),this.#n={...e.headers},this.#t=e.remoteConditionalBatch??!1}capabilities(){return{persistence:"remote",readAfterWrite:"eventual",scanConsistency:"best-effort",atomicBatch:!0,conditionalBatch:this.#t,boundedRangeDelete:!1}}#i(e){let t=this.#e.href.endsWith("/")?this.#e.href:`${this.#e.href}/`;return new URL(e.replace(/^\/+/,""),t)}#o(e){return this.#i(`/v1/storage/${encodeURIComponent(e)}`)}#a(e,t){let n=this.#i("/v1/storage");return n.searchParams.set("prefix",e),g(n,"limit",t.limit),g(n,"reverse",t.reverse),g(n,"gt",t.gt),g(n,"gte",t.gte),g(n,"lt",t.lt),g(n,"lte",t.lte),n}async#r(e,t={},n=[]){let i=new Headers(this.#n);for(let[s,u]of new Headers(t.headers).entries())i.set(s,u);let o=await fetch(e,{...t,headers:i});if(!o.ok&&!n.includes(o.status))throw Error(`HTTPStorage request failed: ${t.method??"GET"} ${e.pathname} returned ${String(o.status)}.`);return o}async get(e){let t=await this.#r(this.#o(e),{method:"GET"},[404]);if(t.status===404)return null;return new Uint8Array(await t.arrayBuffer())}async put(e,t){await this.#r(this.#o(e),{method:"PUT",headers:{"content-type":"application/octet-stream"},body:new Blob([new Uint8Array(t)])})}async delete(e){await this.#r(this.#o(e),{method:"DELETE"})}async*scan(e,t={}){let n=await this.#r(this.#a(e,t),{method:"GET",headers:{accept:"application/x-ndjson"}});for await(let i of O(n,{maximumBytes:Y,sizeLimitError:()=>Error("HTTPStorage scan response exceeded the maximum allowed size.")})){let o=Q(i);if(o!==null)yield o}}async batch(e){l("batch operations",e.length),await this.#r(this.#i("/v1/storage/-/batch"),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({operations:e.map(z)})})}async conditionalBatch(e,t){l("conditionalBatch conditions",e.length),l("conditionalBatch operations",t.length);let n=await this.#r(this.#i("/v1/storage/-/conditional-batch"),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({conditions:e.map(X),operations:t.map(z)})});return Z(await n.json())}has(e){return p(this,e)}async*keys(e,t){yield*c(this,e,t)}count(e){return f(this,e)}deletePrefix(e){return y(this,e)}deleteRange(e,t){return h(this,e,d(t))}scoped(e){return H(this,e)}[Symbol.dispose](){}}export{ee as HTTPStorage};
|
|
2
|
+
`);o=B.pop()??"";for(let V of B)yield V}if(o+=i.decode(),o.length>0)yield o}finally{if(!u)try{await n.cancel()}catch{}n.releaseLock()}}function m(e){let t=[];for(let n=0;n<e.length;n+=512)t.push(String.fromCharCode(...e.subarray(n,n+512)));return btoa(t.join(""))}function C(e){let t=atob(e),n=new Uint8Array(t.length);for(let i=0;i<t.length;i+=1)n[i]=t.charCodeAt(i);return n}function b(e){return typeof e==="object"&&e!==null&&!Array.isArray(e)}async function p(e,t){return await e.get(t)!==null}async function*c(e,t,n){for await(let[i]of e.scan(t,n))yield i}async function f(e,t){let n=0;for await(let i of c(e,t))n++;return n}async function y(e,t){let n=[];for await(let i of c(e,t))n.push({type:"delete",key:i});if(n.length===0)return 0;return await e.batch(n),n.length}async function h(e,t,n){let i=[];for await(let o of c(e,t,n))i.push({type:"delete",key:o});if(i.length===0)return 0;return await e.batch(i),i.length}function P(e,t,n){if(!e.capabilities()[t])throw Error(`Feature "${n}" requires storage capability "${t}", but this storage backend does not provide it.`)}var k="default";function r(e){return encodeURIComponent(e)}var v={workflowOwnerEpoch:(e)=>`wf-owner-epoch:${r(e)}`,workflowOwnerHolder:(e)=>`wf-owner-holder:${r(e)}`,ownershipModeMarker:()=>"ownership-mode-marker"};var S=1e4;class E extends Error{code="StorageBatchOperationLimitExceededError";cap=S;count;target;constructor(e,t){super(`${e} count ${t} exceeds MAX_BATCH_OPERATIONS (${S}).`);this.name="StorageBatchOperationLimitExceededError",this.target=e,this.count=t}}function l(e,t){if(t>S)throw new E(e,t)}function A(e){return e.length>0?e.slice(0,-1)+String.fromCharCode(e.charCodeAt(e.length-1)+1):"ÿ"}function fe(e,t={}){if(t.gt!==void 0&&e<=t.gt)return!1;if(t.gte!==void 0&&e<t.gte)return!1;if(t.lt!==void 0&&e>=t.lt)return!1;if(t.lte!==void 0&&e>t.lte)return!1;return!0}function ye(e,t){if(e===null||t===null)return e===t;if(e.byteLength!==t.byteLength)return!1;for(let n=0;n<e.byteLength;n++)if(e[n]!==t[n])return!1;return!0}async function D(e,t){if(e.has)return e.has(t);return p(e,t)}function U(e,t,n){if(e.keys)return e.keys(t,n);return c(e,t,n)}async function I(e,t){if(e.count)return e.count(t);return f(e,t)}async function L(e,t){if(e.deletePrefix)return e.deletePrefix(t);return y(e,t)}async function _(e,t,n){if(l("conditionalBatch conditions",t.length),l("conditionalBatch operations",n.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,n)}var a=(e)=>String(e).padStart(16,"0"),W="0",q="1",T=(e,t,n,i)=>`sig:${r(e)}:${r(t)}:${i}:${r(n)}`,he={workflow:(e)=>`wf:${r(e)}`,checkpoint:(e)=>`wf:${r(e)}:ckpt`,checkpointHistory:(e,t)=>`wf:${r(e)}:ckpt:${String(t).padStart(10,"0")}`,timelinePrefix:(e)=>`wf:${r(e)}:timeline:`,timeline:(e,t)=>`wf:${r(e)}:timeline:${String(t).padStart(10,"0")}`,schedule:(e)=>`schedule:${r(e)}`,scheduleTick:(e,t)=>`schedule-due:${String(e).padStart(16,"0")}:${r(t)}`,scheduleRun:(e)=>`schedule-run:${r(e)}`,scheduleRunLink:(e)=>`schedule-run-link:${r(e)}`,scheduleRunBySchedulePrefix:(e)=>`schedule-run-by-schedule:${r(e)}:`,scheduleRunBySchedule:(e,t)=>`schedule-run-by-schedule:${r(e)}:${r(t)}`,operation:(e,t,n)=>`op:${e}:${a(t)}:${n}`,operationInflight:(e)=>`op:inflight:${e}`,operationQueued:(e)=>`op:queued:${e}`,operationResolved:(e)=>`op:resolved:${e}`,bulkOperationAuditPrefix:()=>"audit:bulk:",bulkOperationAudit:(e,t,n)=>`audit:bulk:${a(e)}:${r(t)}:${r(n)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(e,t)=>`op:resolved-by-time:${a(e)}:${r(t)}`,asyncActivity:(e,t)=>`async-act:v1:${r(e)}:${r(t)}`,asyncActivityResolution:(e,t)=>`async-act:v1:${r(e)}:${r(t)}:resolution`,activityReconciliationPrefix:(e)=>`actrec:v1:${r(e)}:`,activityReconciliation:(e,t,n)=>`actrec:v1:${r(e)}:${r(t)}:${n}`,eventPrefix:(e)=>`ev:${r(e)}:`,event:(e,t)=>`ev:${r(e)}:${String(t).padStart(10,"0")}`,eventHead:(e)=>`ev:${r(e)}:head`,eventWatermark:(e)=>`ev:${r(e)}:watermark`,fleetEventPrefix:()=>"fleet-event:",fleetEvent:(e)=>`fleet-event:${String(e).padStart(10,"0")}`,fleetEventTail:()=>"fleet-event-tail",fleetEventWatermark:()=>"fleet-event-watermark",fleetEventByWorkflowPrefix:(e)=>`fleet-event-by-workflow:${r(e)}:`,fleetEventByWorkflow:(e,t)=>`fleet-event-by-workflow:${r(e)}:${String(t).padStart(10,"0")}`,signal:(e,t,n)=>T(e,t,n,q),startSignal:(e,t,n)=>T(e,t,n,W),signalSequence:(e)=>`sigseq:v1:${r(e)}`,signalAcceptedResponsePrefix:(e)=>`sigres:v1:${r(e)}:`,signalAcceptedResponse:(e,t,n)=>`sigres:v1:${r(e)}:${r(t)}:${r(n)}`,deadline:(e,t)=>`wf-deadline:${a(e)}:${r(t)}`,terminalCleanup:(e,t)=>`wf-cleanup:${a(e)}:${r(t)}`,teardownTimer:(e,t)=>`wf-teardown:${a(e)}:${r(t)}`,delayedStart:(e,t)=>`wf-delayed:${a(e)}:${r(t)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(e,t)=>`wf-terminal:${a(e)}:${r(t)}`,attribute:(e)=>`attr:${r(e)}`,attributeIndex:(e,t,n)=>`idx:${e}:${t}:${r(n)}`,tagIndex:(e,t)=>`tag:${r(e)}:${r(t)}`,updatePrefix:(e)=>`upd:${r(e)}:`,update:(e,t)=>`upd:${r(e)}:${t}`,updateResponse:(e)=>`upr:${e}`,updateIdempotency:(e,t)=>`upk:${r(e)}:${t}`,startIdempotency:(e)=>`start-idem:${r(e)}`,startIdempotencySignalId:(e)=>`start-idem:${e}`,livenessPrefix:()=>"liveness:",liveness:(e)=>`liveness:${r(e)}`,leasePrefix:()=>"lease:",leaseEpoch:()=>"lease:epoch",leaseHolder:()=>"lease:holder",...v,budget:(e,t,n)=>`budget:${e}:${t}:${n}`,review:(e,t)=>`review:${r(e)}:${t}`,workflowHeaders:(e)=>`wf-headers:${r(e)}`,childCancellationPrefix:(e)=>`child-cancel:${r(e)}:`,childCancellation:(e,t)=>`child-cancel:${r(e)}:${r(t)}`,childWorkflowByParentPrefix:(e,t)=>`child-by-parent:${r(e)}:${t===void 0?"":`${r(t)}:`}`,childWorkflowByParent:(e,t,n)=>`child-by-parent:${r(e)}:${t===void 0?"":`${r(t)}:`}${r(n)}`,terminalCleanupNeeded:(e)=>`wf-cleanup-needed:${r(e)}`,workflowConcurrency:(e,t)=>`wf-concurrency:${r(e)}:${r(t)}`,workflowConcurrencyHolder:(e)=>`wf-concurrency-holder:${r(e)}`,workflowHasServices:(e)=>`wf-has-services:${r(e)}`,finalizerState:(e)=>`wf-finalizer-state:${r(e)}`,teardownOwed:(e)=>`wf-teardown-needed:${r(e)}`,teardownSucceeded:(e)=>`wf-teardown-succeeded:${r(e)}`,teardownDeadLetter:(e)=>`wf-teardown-deadletter:${r(e)}`,offload:(e,t)=>`offload:${r(e)}:${t}`,archive:(e,t)=>`archive:${r(e)}:${t}`,stateExecution:(e,t)=>`state:execution:${r(e)}:${r(t)}`,stateWorkflow:(e,t)=>`state:workflow-scope:${k}:${r(e)}:${r(t)}`,streamChunkPrefix:(e,t)=>`blob:${r(e)}:${t}:chunk:`,streamChunk:(e,t,n)=>`blob:${r(e)}:${t}:chunk:${String(n).padStart(10,"0")}`,streamTail:(e,t)=>`blob:${r(e)}:${t}:tail`,streamMetadata:(e,t)=>`blob:${r(e)}:${t}:meta`,budgetCharged:(e)=>`budget-charged:${e}`,toolEffect:(e,t,n)=>`tool-effect:${r(e)}:${t}:${n}`,workflowVisibilityStatus:(e,t)=>`wf-idx-status:${r(e)}:${r(t)}`,workflowVisibilityType:(e,t)=>`wf-idx-type:${r(e)}:${r(t)}`,workflowVisibilityCreated:(e,t)=>`wf-idx-created:${a(e)}:${r(t)}`,workflowVisibilityUpdated:(e,t)=>`wf-idx-updated:${a(e)}:${r(t)}`,workflowVisibilityDeadline:(e,t)=>`wf-idx-deadline:${a(e)}:${r(t)}`,workflowVisibilityManifest:(e)=>`wf-idx-manifest:${r(e)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"};function M(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={},n=!1;for(let o of["gt","gte","lt","lte"]){let s=e[o];if(s===void 0)continue;if(typeof s!=="string")throw Error("deleteRange bounds must be strings");t[o]=s,n=!0}if(!n)throw Error("deleteRange requires at least one of gt/gte/lt/lte; use deletePrefix to delete a whole prefix");let i=M(e.limit);if(i!==void 0)t.limit=i;return t}async function N(e,t,n){let i=d(n);if(e.deleteRange)return e.deleteRange(t,i);return h(e,t,i)}function j(e,t){let n={key:e,open:!1};if(t.gte!==void 0&&t.gte>n.key)n.key=t.gte,n.open=!1;if(t.gt!==void 0&&t.gt>=n.key)n.key=t.gt,n.open=!0;return n}function G(e,t){let n={key:A(e),open:!0};if(t.lt!==void 0&&t.lt<=n.key)n.key=t.lt,n.open=!0;if(t.lte!==void 0&&t.lte<n.key)n.key=t.lte,n.open=!1;return n}function we(e,t){let n=j(e,t),i=G(e,t);if(n.key>i.key||n.key===i.key&&(n.open||i.open))return null;return{lower:n,upper:i}}function w(e){return e.replaceAll(/:+$/g,"")}function F(e,t){let n=w(e),i=w(t);if(n.length===0)return i;if(i.length===0)return n;return`${n}:${i}`}class x{#e;#n;constructor(e,t){this.#e=e,this.#n=w(t)}#t(e){if(this.#n.length===0)return e;return e.length===0?`${this.#n}:`:`${this.#n}:${e}`}#i(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)}})}#o(e){if(this.#n.length===0)return e;return e.slice(this.#n.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}#r(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,F(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[n,i]of this.#e.scan(this.#t(e),this.#r(t)))yield[this.#o(n),i]}async batch(e){l("batch operations",e.length),await this.#e.batch(this.#i(e))}async conditionalBatch(e,t){return _(this.#e,e.map((n)=>({key:this.#t(n.key),expectedValue:n.expectedValue})),this.#i(t))}async has(e){return D(this.#e,this.#t(e))}async deletePrefix(e){return L(this.#e,this.#t(e))}async deleteRange(e,t){let n=this.#s(d(t));return N(this.#e,this.#t(e),n)}async*keys(e,t){for await(let n of U(this.#e,this.#t(e),this.#r(t)))yield this.#o(n)}async count(e){return I(this.#e,this.#t(e))}[Symbol.dispose](){this.#e[Symbol.dispose]()}}function H(e,t){return new x(e,t)}var Y=67108864;function z(e){if(e.type==="put")return{type:"put",key:e.key,value:m(e.value)};return{type:"delete",key:e.key}}function X(e){return{key:e.key,expectedValue:e.expectedValue===null?null:m(e.expectedValue)}}function J(e){if(!b(e)||typeof e.key!=="string"||typeof e.value!=="string")throw Error("HTTPStorage scan response contained an invalid NDJSON entry.");return{key:e.key,value:e.value}}function Z(e){if(!b(e)||typeof e.applied!=="boolean")throw Error('HTTPStorage conditional batch response must include a boolean "applied" field.');return e.applied}function g(e,t,n){if(n!==void 0)e.searchParams.set(t,String(n))}function Q(e){if(e.trim().length===0)return null;let t=J(JSON.parse(e));return[t.key,C(t.value)]}class ee{#e;#n;#t;constructor(e){this.#e=e.baseUrl instanceof URL?e.baseUrl:new URL(e.baseUrl),this.#n={...e.headers},this.#t=e.remoteConditionalBatch??!1}capabilities(){return{persistence:"remote",readAfterWrite:"eventual",scanConsistency:"best-effort",atomicBatch:!0,conditionalBatch:this.#t,boundedRangeDelete:!1}}#i(e){let t=this.#e.href.endsWith("/")?this.#e.href:`${this.#e.href}/`;return new URL(e.replace(/^\/+/,""),t)}#o(e){return this.#i(`/v1/storage/${encodeURIComponent(e)}`)}#a(e,t){let n=this.#i("/v1/storage");return n.searchParams.set("prefix",e),g(n,"limit",t.limit),g(n,"reverse",t.reverse),g(n,"gt",t.gt),g(n,"gte",t.gte),g(n,"lt",t.lt),g(n,"lte",t.lte),n}async#r(e,t={},n=[]){let i=new Headers(this.#n);for(let[s,u]of new Headers(t.headers).entries())i.set(s,u);let o=await fetch(e,{...t,headers:i});if(!o.ok&&!n.includes(o.status))throw Error(`HTTPStorage request failed: ${t.method??"GET"} ${e.pathname} returned ${String(o.status)}.`);return o}async get(e){let t=await this.#r(this.#o(e),{method:"GET"},[404]);if(t.status===404)return null;return new Uint8Array(await t.arrayBuffer())}async put(e,t){await this.#r(this.#o(e),{method:"PUT",headers:{"content-type":"application/octet-stream"},body:new Blob([new Uint8Array(t)])})}async delete(e){await this.#r(this.#o(e),{method:"DELETE"})}async*scan(e,t={}){let n=await this.#r(this.#a(e,t),{method:"GET",headers:{accept:"application/x-ndjson"}});for await(let i of O(n,{maximumBytes:Y,sizeLimitError:()=>Error("HTTPStorage scan response exceeded the maximum allowed size.")})){let o=Q(i);if(o!==null)yield o}}async batch(e){l("batch operations",e.length),await this.#r(this.#i("/v1/storage/-/batch"),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({operations:e.map(z)})})}async conditionalBatch(e,t){l("conditionalBatch conditions",e.length),l("conditionalBatch operations",t.length);let n=await this.#r(this.#i("/v1/storage/-/conditional-batch"),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({conditions:e.map(X),operations:t.map(z)})});return Z(await n.json())}has(e){return p(this,e)}async*keys(e,t){yield*c(this,e,t)}count(e){return f(this,e)}deletePrefix(e){return y(this,e)}deleteRange(e,t){return h(this,e,d(t))}scoped(e){return H(this,e)}[Symbol.dispose](){}}export{ee as HTTPStorage};
|
package/dist/index.d.ts
CHANGED
|
@@ -21,7 +21,7 @@ export type { WeftErrorCode } from './core/weft-error.ts';
|
|
|
21
21
|
export { FAULT_CODE_TO_FAILURE_CATEGORY, failureCategoryForFaultCode, isFaultCode, } from './core/fault-code.ts';
|
|
22
22
|
export type { FaultCode } from './core/fault-code.ts';
|
|
23
23
|
export { DurableActivityScopeError, DurableActivityUnsupportedError, durableActivity, } from './core/context/durable-activity.ts';
|
|
24
|
-
export { ActivityReconciliationCapabilityError, ActivityReconciliationConflictError, ActivityReconciliationIndeterminateError, ActivityResolutionError, AsyncActivityTokenNotFoundError, BulkDeleteRequiresTerminalWorkflowsError, BulkOperationConfirmationError, ENGINE_LEASE_LOST_WARNING_NAME, ENGINE_LEASE_SYNCHRONOUS_DISPOSE_WARNING_NAME, Engine, EngineCreateNameMismatchError, EngineDisposalError, EngineDisposedError, EngineLeaseAcquisitionTimeoutError, EngineLeaseCorruptedError, EngineLeaseNotHeldError, IdempotencyKeyPurgedError, PersistedDataIncompatibleError, ScheduleHandle, StartOrSignalConflictError, WorkflowAlreadyExistsError, WorkflowConcurrencyLimitExceededError, WorkflowHandle, WorkflowNotFoundError, WorkflowNotRegisteredError, WorkflowSuspendNotSupportedError, WorkflowTeardownPendingError, WorkflowTypeNotRegisteredForRecoveryError, } from './core/engine';
|
|
24
|
+
export { ActivityReconciliationCapabilityError, ActivityReconciliationConflictError, ActivityReconciliationIndeterminateError, ActivityResolutionError, AsyncActivityTokenNotFoundError, BulkDeleteRequiresTerminalWorkflowsError, BulkOperationConfirmationError, ENGINE_LEASE_LOST_WARNING_NAME, ENGINE_LEASE_SYNCHRONOUS_DISPOSE_WARNING_NAME, Engine, EngineCreateNameMismatchError, EngineDisposalError, EngineDisposedError, EngineLeaseAcquisitionTimeoutError, EngineLeaseCorruptedError, EngineLeaseNotHeldError, IdempotencyKeyPurgedError, PersistedDataCorruptError, PersistedDataIncompatibleError, ScheduleHandle, StartOrSignalConflictError, WorkflowAlreadyExistsError, WorkflowConcurrencyLimitExceededError, WorkflowHandle, WorkflowNotFoundError, WorkflowNotRegisteredError, WorkflowSuspendNotSupportedError, WorkflowTeardownPendingError, WorkflowTypeNotRegisteredForRecoveryError, } from './core/engine';
|
|
25
25
|
export { OwnershipModeMismatchError, WORKFLOW_CLAIM_LOST_WARNING_NAME, WORKFLOW_WAKE_DISCARDED_WARNING_NAME, WeftWorkflowClaimLostWarning, WeftWorkflowWakeDiscardedWarning, WorkflowClaimUnavailableError, } from './core/engine';
|
|
26
26
|
export type { EngineCreateOptions, EngineLeaseHealth, EngineStateNamespace, LeaseLostReason, RecoverAllOptions, RecoveredWorkflowInfo, RegistryAgnosticEngine, WorkflowWakeKind, } from './core/engine';
|
|
27
27
|
export { DEFAULT_CHECKPOINT_SIZE_WARNING_THRESHOLD, DEFAULT_MAX_NESTING_DEPTH, DEFAULT_POLL_INTERVAL_MS, DEFAULT_RETRY_POLICY, DEFAULT_VISIBILITY_TIMEOUT_MS, HISTORY_CIRCUIT_BREAKER_REASON, WorkflowBuilderError, query, schedule, signal, update, workflow, } from './core/types';
|
package/dist/index.js
CHANGED
package/dist/indexeddb.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
async function k(e,t){return await e.get(t)!==null}async function*C(e,t,n){for await(let[i]of e.scan(t,n))yield i}async function I(e,t){let n=0;for await(let i of C(e,t))n++;return n}async function A(e,t){let n=[];for await(let i of C(e,t))n.push({type:"delete",key:i});if(n.length===0)return 0;return await e.batch(n),n.length}async function E(e,t,n){let i=[];for await(let o of C(e,t,n))i.push({type:"delete",key:o});if(i.length===0)return 0;return await e.batch(i),i.length}function T(e,t,n){if(!e.capabilities()[t])throw Error(`Feature "${n}" requires storage capability "${t}", but this storage backend does not provide it.`)}var K="default";function r(e){return encodeURIComponent(e)}var z={workflowOwnerEpoch:(e)=>`wf-owner-epoch:${r(e)}`,workflowOwnerHolder:(e)=>`wf-owner-holder:${r(e)}`,ownershipModeMarker:()=>"ownership-mode-marker"};var O=1e4;class L 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 h(e,t){if(t>O)throw new L(e,t)}function w(e){return e.length>0?e.slice(0,-1)+String.fromCharCode(e.charCodeAt(e.length-1)+1):"ÿ"}function U(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 V(e,t){if(e===null||t===null)return e===t;if(e.byteLength!==t.byteLength)return!1;for(let n=0;n<e.byteLength;n++)if(e[n]!==t[n])return!1;return!0}async function N(e,t){if(e.has)return e.has(t);return k(e,t)}function M(e,t,n){if(e.keys)return e.keys(t,n);return C(e,t,n)}async function j(e,t){if(e.count)return e.count(t);return I(e,t)}async function q(e,t){if(e.deletePrefix)return e.deletePrefix(t);return A(e,t)}async function W(e,t,n){if(h("conditionalBatch conditions",t.length),h("conditionalBatch operations",n.length),T(e,"conditionalBatch","storageConditionalBatch"),!e.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return e.conditionalBatch(t,n)}var f=(e)=>String(e).padStart(16,"0"),Q="0",J="1",_=(e,t,n,i)=>`sig:${r(e)}:${r(t)}:${i}:${r(n)}`,me={workflow:(e)=>`wf:${r(e)}`,checkpoint:(e)=>`wf:${r(e)}:ckpt`,checkpointHistory:(e,t)=>`wf:${r(e)}:ckpt:${String(t).padStart(10,"0")}`,timelinePrefix:(e)=>`wf:${r(e)}:timeline:`,timeline:(e,t)=>`wf:${r(e)}:timeline:${String(t).padStart(10,"0")}`,schedule:(e)=>`schedule:${r(e)}`,scheduleTick:(e,t)=>`schedule-due:${String(e).padStart(16,"0")}:${r(t)}`,scheduleRun:(e)=>`schedule-run:${r(e)}`,scheduleRunLink:(e)=>`schedule-run-link:${r(e)}`,scheduleRunBySchedulePrefix:(e)=>`schedule-run-by-schedule:${r(e)}:`,scheduleRunBySchedule:(e,t)=>`schedule-run-by-schedule:${r(e)}:${r(t)}`,operation:(e,t,n)=>`op:${e}:${f(t)}:${n}`,operationInflight:(e)=>`op:inflight:${e}`,operationQueued:(e)=>`op:queued:${e}`,operationResolved:(e)=>`op:resolved:${e}`,bulkOperationAuditPrefix:()=>"audit:bulk:",bulkOperationAudit:(e,t,n)=>`audit:bulk:${f(e)}:${r(t)}:${r(n)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(e,t)=>`op:resolved-by-time:${f(e)}:${r(t)}`,asyncActivity:(e,t)=>`async-act:v1:${r(e)}:${r(t)}`,asyncActivityResolution:(e,t)=>`async-act:v1:${r(e)}:${r(t)}:resolution`,activityReconciliationPrefix:(e)=>`actrec:v1:${r(e)}:`,activityReconciliation:(e,t,n)=>`actrec:v1:${r(e)}:${r(t)}:${n}`,eventPrefix:(e)=>`ev:${r(e)}:`,event:(e,t)=>`ev:${r(e)}:${String(t).padStart(10,"0")}`,eventHead:(e)=>`ev:${r(e)}:head`,eventWatermark:(e)=>`ev:${r(e)}:watermark`,fleetEventPrefix:()=>"fleet-event:",fleetEvent:(e)=>`fleet-event:${String(e).padStart(10,"0")}`,fleetEventTail:()=>"fleet-event-tail",fleetEventByWorkflowPrefix:(e)=>`fleet-event-by-workflow:${r(e)}:`,fleetEventByWorkflow:(e,t)=>`fleet-event-by-workflow:${r(e)}:${String(t).padStart(10,"0")}`,signal:(e,t,n)=>_(e,t,n,J),startSignal:(e,t,n)=>_(e,t,n,Q),signalSequence:(e)=>`sigseq:v1:${r(e)}`,signalAcceptedResponsePrefix:(e)=>`sigres:v1:${r(e)}:`,signalAcceptedResponse:(e,t,n)=>`sigres:v1:${r(e)}:${r(t)}:${r(n)}`,deadline:(e,t)=>`wf-deadline:${f(e)}:${r(t)}`,terminalCleanup:(e,t)=>`wf-cleanup:${f(e)}:${r(t)}`,teardownTimer:(e,t)=>`wf-teardown:${f(e)}:${r(t)}`,delayedStart:(e,t)=>`wf-delayed:${f(e)}:${r(t)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(e,t)=>`wf-terminal:${f(e)}:${r(t)}`,attribute:(e)=>`attr:${r(e)}`,attributeIndex:(e,t,n)=>`idx:${e}:${t}:${r(n)}`,tagIndex:(e,t)=>`tag:${r(e)}:${r(t)}`,updatePrefix:(e)=>`upd:${r(e)}:`,update:(e,t)=>`upd:${r(e)}:${t}`,updateResponse:(e)=>`upr:${e}`,updateIdempotency:(e,t)=>`upk:${r(e)}:${t}`,startIdempotency:(e)=>`start-idem:${r(e)}`,startIdempotencySignalId:(e)=>`start-idem:${e}`,livenessPrefix:()=>"liveness:",liveness:(e)=>`liveness:${r(e)}`,leasePrefix:()=>"lease:",leaseEpoch:()=>"lease:epoch",leaseHolder:()=>"lease:holder",...z,budget:(e,t,n)=>`budget:${e}:${t}:${n}`,review:(e,t)=>`review:${r(e)}:${t}`,workflowHeaders:(e)=>`wf-headers:${r(e)}`,childCancellationPrefix:(e)=>`child-cancel:${r(e)}:`,childCancellation:(e,t)=>`child-cancel:${r(e)}:${r(t)}`,childWorkflowByParentPrefix:(e,t)=>`child-by-parent:${r(e)}:${t===void 0?"":`${r(t)}:`}`,childWorkflowByParent:(e,t,n)=>`child-by-parent:${r(e)}:${t===void 0?"":`${r(t)}:`}${r(n)}`,terminalCleanupNeeded:(e)=>`wf-cleanup-needed:${r(e)}`,workflowConcurrency:(e,t)=>`wf-concurrency:${r(e)}:${r(t)}`,workflowConcurrencyHolder:(e)=>`wf-concurrency-holder:${r(e)}`,workflowHasServices:(e)=>`wf-has-services:${r(e)}`,finalizerState:(e)=>`wf-finalizer-state:${r(e)}`,teardownOwed:(e)=>`wf-teardown-needed:${r(e)}`,teardownSucceeded:(e)=>`wf-teardown-succeeded:${r(e)}`,teardownDeadLetter:(e)=>`wf-teardown-deadletter:${r(e)}`,offload:(e,t)=>`offload:${r(e)}:${t}`,archive:(e,t)=>`archive:${r(e)}:${t}`,stateExecution:(e,t)=>`state:execution:${r(e)}:${r(t)}`,stateWorkflow:(e,t)=>`state:workflow-scope:${K}:${r(e)}:${r(t)}`,streamChunkPrefix:(e,t)=>`blob:${r(e)}:${t}:chunk:`,streamChunk:(e,t,n)=>`blob:${r(e)}:${t}:chunk:${String(n).padStart(10,"0")}`,streamTail:(e,t)=>`blob:${r(e)}:${t}:tail`,streamMetadata:(e,t)=>`blob:${r(e)}:${t}:meta`,budgetCharged:(e)=>`budget-charged:${e}`,toolEffect:(e,t,n)=>`tool-effect:${r(e)}:${t}:${n}`,workflowVisibilityStatus:(e,t)=>`wf-idx-status:${r(e)}:${r(t)}`,workflowVisibilityType:(e,t)=>`wf-idx-type:${r(e)}:${r(t)}`,workflowVisibilityCreated:(e,t)=>`wf-idx-created:${f(e)}:${r(t)}`,workflowVisibilityUpdated:(e,t)=>`wf-idx-updated:${f(e)}:${r(t)}`,workflowVisibilityDeadline:(e,t)=>`wf-idx-deadline:${f(e)}:${r(t)}`,workflowVisibilityManifest:(e)=>`wf-idx-manifest:${r(e)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"};function Z(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 R(e){let t={},n=!1;for(let o of["gt","gte","lt","lte"]){let s=e[o];if(s===void 0)continue;if(typeof s!=="string")throw Error("deleteRange bounds must be strings");t[o]=s,n=!0}if(!n)throw Error("deleteRange requires at least one of gt/gte/lt/lte; use deletePrefix to delete a whole prefix");let i=Z(e.limit);if(i!==void 0)t.limit=i;return t}async function H(e,t,n){let i=R(n);if(e.deleteRange)return e.deleteRange(t,i);return E(e,t,i)}function ee(e,t){let n={key:e,open:!1};if(t.gte!==void 0&&t.gte>n.key)n.key=t.gte,n.open=!1;if(t.gt!==void 0&&t.gt>=n.key)n.key=t.gt,n.open=!0;return n}function te(e,t){let n={key:w(e),open:!0};if(t.lt!==void 0&&t.lt<=n.key)n.key=t.lt,n.open=!0;if(t.lte!==void 0&&t.lte<n.key)n.key=t.lte,n.open=!1;return n}function F(e,t){let n=ee(e,t),i=te(e,t);if(n.key>i.key||n.key===i.key&&(n.open||i.open))return null;return{lower:n,upper:i}}function v(e){return e.replaceAll(/:+$/g,"")}function ne(e,t){let n=v(e),i=v(t);if(n.length===0)return i;if(i.length===0)return n;return`${n}:${i}`}class P{#t;#n;constructor(e,t){this.#t=e,this.#n=v(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}#s(e={}){let t=this.#o(e);if(e.reverse!==void 0)t.reverse=e.reverse;return t}#a(e){return this.#o(e)}capabilities(){return this.#t.capabilities()}scoped(e){return new P(this.#t,ne(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[n,i]of this.#t.scan(this.#e(e),this.#s(t)))yield[this.#i(n),i]}async batch(e){h("batch operations",e.length),await this.#t.batch(this.#r(e))}async conditionalBatch(e,t){return W(this.#t,e.map((n)=>({key:this.#e(n.key),expectedValue:n.expectedValue})),this.#r(t))}async has(e){return N(this.#t,this.#e(e))}async deletePrefix(e){return q(this.#t,this.#e(e))}async deleteRange(e,t){let n=this.#a(R(t));return H(this.#t,this.#e(e),n)}async*keys(e,t){for await(let n of M(this.#t,this.#e(e),this.#s(t)))yield this.#i(n)}async count(e){return j(this.#t,this.#e(e))}[Symbol.dispose](){this.#t[Symbol.dispose]()}}function G(e,t){return new P(e,t)}var l="kv";function re(e=globalThis){let{indexedDB:t,IDBKeyRange:n}=e;if(t===void 0||n===void 0)throw Error("IndexedDBStorage requires both indexedDB and IDBKeyRange runtime globals.");return{indexedDB:t,IDBKeyRange:n}}function S(e){return new Promise((t,n)=>{e.onsuccess=()=>t(e.result),e.onerror=()=>n(e.error)})}function ie(e,t){let n=null,i=null,o=null,s=(a,c)=>{let d=a??Error(c);if(i){let g=i;n=null,i=null,g(d);return}o=d};return e.onsuccess=()=>{if(!n)return;let a=n;n=null,i=null,a(e.result)},e.onerror=()=>{s(e.error,"IndexedDB cursor request failed.")},t.onerror=()=>{s(t.error,"IndexedDB transaction failed.")},t.onabort=()=>{s(t.error,"IndexedDB transaction aborted.")},()=>new Promise((a,c)=>{if(o){let d=o;o=null,c(d);return}if(n=a,i=c,e.readyState==="done"){let d=n;n=null,i=null,d?.(e.result)}})}async function*X(e,t,n,i,o,s){let{limit:a,reverse:c}=i,d=w(n),g=t.bound(n,d,!1,!0),m=c?"prev":"next",p=e.transaction(l,"readonly"),u=p.objectStore(l),y=o(u,g,m),b=ie(y,p),x=0,D=!1;try{let B=await b();while(B){if(a!==void 0&&x>=a)break;let Y=B.key;if(U(Y,i))yield s(B),x++;B.continue(),B=await b()}D=!0}finally{if(!D)try{p.abort()}catch{}}}class oe{#t;#n=null;#e;#r;constructor(e="weft",t=re()){this.#t=e,this.#r=t,this.#e=this.#i()}capabilities(){return{persistence:"local",readAfterWrite:"linearizable",scanConsistency:"best-effort",atomicBatch:!0,conditionalBatch:!0,boundedRangeDelete:!0}}#i(){let e=this.#r.indexedDB.open(this.#t,1);return e.onupgradeneeded=()=>{let t=e.result;if(!t.objectStoreNames.contains(l))t.createObjectStore(l)},S(e).then((t)=>(this.#n=t,t))}async get(e){let i=(await this.#e).transaction(l,"readonly").objectStore(l),o=await S(i.get(e));return o===void 0?null:new Uint8Array(o)}async put(e,t){let o=(await this.#e).transaction(l,"readwrite").objectStore(l);await S(o.put(t,e))}async delete(e){let i=(await this.#e).transaction(l,"readwrite").objectStore(l);await S(i.delete(e))}async has(e){let i=(await this.#e).transaction(l,"readonly").objectStore(l);return await S(i.count(e))>0}async deletePrefix(e){let t=await this.#e,n=w(e),i=this.#r.IDBKeyRange.bound(e,n,!1,!0);return new Promise((o,s)=>{let a=t.transaction(l,"readwrite"),c=a.objectStore(l),d=0,g=c.count(i);g.onsuccess=()=>{d=g.result,c.delete(i)},a.oncomplete=()=>o(d),a.onerror=()=>s(a.error)})}async deleteRange(e,t){let n=R(t),i=F(e,n);if(i===null)return 0;let o=this.#r.IDBKeyRange.bound(i.lower.key,i.upper.key,i.lower.open,i.upper.open),s=await this.#e,{limit:a}=n;return new Promise((c,d)=>{let g=s.transaction(l,"readwrite"),m=g.objectStore(l),p=0;if(a===void 0){let u=m.count(o);u.onsuccess=()=>{p=u.result,m.delete(o)}}else{let u=m.openCursor(o,"next");u.onsuccess=()=>{let y=u.result;if(y===null||p>=a)return;if(y.delete(),p++,p<a)y.continue()}}g.oncomplete=()=>c(p),g.onerror=()=>d(g.error)})}async*scan(e,t={}){let n=await this.#e;yield*X(n,this.#r.IDBKeyRange,e,t,(i,o,s)=>i.openCursor(o,s),(i)=>[i.key,new Uint8Array(i.value)])}async batch(e){if(h("batch operations",e.length),e.length===0)return;let t=await this.#e;return new Promise((n,i)=>{let o=t.transaction(l,"readwrite"),s=o.objectStore(l);for(let a of e)if(a.type==="put")s.put(a.value,a.key);else s.delete(a.key);o.oncomplete=()=>n(),o.onerror=()=>i(o.error)})}async conditionalBatch(e,t){h("conditionalBatch conditions",e.length),h("conditionalBatch operations",t.length);let n=await this.#e;return new Promise((i,o)=>{let s=n.transaction(l,"readwrite"),a=s.objectStore(l),c=!1,d=!1,g=(u,y)=>{if(c)return;c=!0,o(u??Error(y))};s.oncomplete=()=>{if(c)return;c=!0,i(!0)},s.onerror=()=>{g(s.error,"IndexedDB conditionalBatch transaction failed.")},s.onabort=()=>{if(c)return;if(c=!0,d){i(!1);return}o(s.error??Error("IndexedDB conditionalBatch transaction aborted."))};let m=()=>{for(let u of t)if(u.type==="put")a.put(u.value,u.key);else a.delete(u.key)},p=(u)=>{if(u>=e.length){m();return}let y=e[u],b=a.get(y.key);b.onsuccess=()=>{let x=b.result,D=x===void 0?null:new Uint8Array(x);if(!V(D,y.expectedValue)){d=!0,s.abort();return}p(u+1)},b.onerror=()=>{g(b.error,"IndexedDB conditionalBatch condition check failed.")}};p(0)})}async*keys(e,t={}){let n=await this.#e;yield*X(n,this.#r.IDBKeyRange,e,t,(i,o,s)=>i.openKeyCursor(o,s),(i)=>i.key)}async count(e){let t=await this.#e,n=w(e),o=t.transaction(l,"readonly").objectStore(l);return S(o.count(this.#r.IDBKeyRange.bound(e,n,!1,!0)))}scoped(e){return G(this,e)}[Symbol.dispose](){if(this.#n)this.#n.close(),this.#n=null}}export{oe as IndexedDBStorage};
|
|
1
|
+
async function k(e,t){return await e.get(t)!==null}async function*C(e,t,n){for await(let[i]of e.scan(t,n))yield i}async function I(e,t){let n=0;for await(let i of C(e,t))n++;return n}async function A(e,t){let n=[];for await(let i of C(e,t))n.push({type:"delete",key:i});if(n.length===0)return 0;return await e.batch(n),n.length}async function E(e,t,n){let i=[];for await(let o of C(e,t,n))i.push({type:"delete",key:o});if(i.length===0)return 0;return await e.batch(i),i.length}function T(e,t,n){if(!e.capabilities()[t])throw Error(`Feature "${n}" requires storage capability "${t}", but this storage backend does not provide it.`)}var K="default";function r(e){return encodeURIComponent(e)}var z={workflowOwnerEpoch:(e)=>`wf-owner-epoch:${r(e)}`,workflowOwnerHolder:(e)=>`wf-owner-holder:${r(e)}`,ownershipModeMarker:()=>"ownership-mode-marker"};var O=1e4;class L 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 m(e,t){if(t>O)throw new L(e,t)}function w(e){return e.length>0?e.slice(0,-1)+String.fromCharCode(e.charCodeAt(e.length-1)+1):"ÿ"}function U(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 V(e,t){if(e===null||t===null)return e===t;if(e.byteLength!==t.byteLength)return!1;for(let n=0;n<e.byteLength;n++)if(e[n]!==t[n])return!1;return!0}async function N(e,t){if(e.has)return e.has(t);return k(e,t)}function M(e,t,n){if(e.keys)return e.keys(t,n);return C(e,t,n)}async function W(e,t){if(e.count)return e.count(t);return I(e,t)}async function j(e,t){if(e.deletePrefix)return e.deletePrefix(t);return A(e,t)}async function q(e,t,n){if(m("conditionalBatch conditions",t.length),m("conditionalBatch operations",n.length),T(e,"conditionalBatch","storageConditionalBatch"),!e.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return e.conditionalBatch(t,n)}var f=(e)=>String(e).padStart(16,"0"),Q="0",J="1",_=(e,t,n,i)=>`sig:${r(e)}:${r(t)}:${i}:${r(n)}`,he={workflow:(e)=>`wf:${r(e)}`,checkpoint:(e)=>`wf:${r(e)}:ckpt`,checkpointHistory:(e,t)=>`wf:${r(e)}:ckpt:${String(t).padStart(10,"0")}`,timelinePrefix:(e)=>`wf:${r(e)}:timeline:`,timeline:(e,t)=>`wf:${r(e)}:timeline:${String(t).padStart(10,"0")}`,schedule:(e)=>`schedule:${r(e)}`,scheduleTick:(e,t)=>`schedule-due:${String(e).padStart(16,"0")}:${r(t)}`,scheduleRun:(e)=>`schedule-run:${r(e)}`,scheduleRunLink:(e)=>`schedule-run-link:${r(e)}`,scheduleRunBySchedulePrefix:(e)=>`schedule-run-by-schedule:${r(e)}:`,scheduleRunBySchedule:(e,t)=>`schedule-run-by-schedule:${r(e)}:${r(t)}`,operation:(e,t,n)=>`op:${e}:${f(t)}:${n}`,operationInflight:(e)=>`op:inflight:${e}`,operationQueued:(e)=>`op:queued:${e}`,operationResolved:(e)=>`op:resolved:${e}`,bulkOperationAuditPrefix:()=>"audit:bulk:",bulkOperationAudit:(e,t,n)=>`audit:bulk:${f(e)}:${r(t)}:${r(n)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(e,t)=>`op:resolved-by-time:${f(e)}:${r(t)}`,asyncActivity:(e,t)=>`async-act:v1:${r(e)}:${r(t)}`,asyncActivityResolution:(e,t)=>`async-act:v1:${r(e)}:${r(t)}:resolution`,activityReconciliationPrefix:(e)=>`actrec:v1:${r(e)}:`,activityReconciliation:(e,t,n)=>`actrec:v1:${r(e)}:${r(t)}:${n}`,eventPrefix:(e)=>`ev:${r(e)}:`,event:(e,t)=>`ev:${r(e)}:${String(t).padStart(10,"0")}`,eventHead:(e)=>`ev:${r(e)}:head`,eventWatermark:(e)=>`ev:${r(e)}:watermark`,fleetEventPrefix:()=>"fleet-event:",fleetEvent:(e)=>`fleet-event:${String(e).padStart(10,"0")}`,fleetEventTail:()=>"fleet-event-tail",fleetEventWatermark:()=>"fleet-event-watermark",fleetEventByWorkflowPrefix:(e)=>`fleet-event-by-workflow:${r(e)}:`,fleetEventByWorkflow:(e,t)=>`fleet-event-by-workflow:${r(e)}:${String(t).padStart(10,"0")}`,signal:(e,t,n)=>_(e,t,n,J),startSignal:(e,t,n)=>_(e,t,n,Q),signalSequence:(e)=>`sigseq:v1:${r(e)}`,signalAcceptedResponsePrefix:(e)=>`sigres:v1:${r(e)}:`,signalAcceptedResponse:(e,t,n)=>`sigres:v1:${r(e)}:${r(t)}:${r(n)}`,deadline:(e,t)=>`wf-deadline:${f(e)}:${r(t)}`,terminalCleanup:(e,t)=>`wf-cleanup:${f(e)}:${r(t)}`,teardownTimer:(e,t)=>`wf-teardown:${f(e)}:${r(t)}`,delayedStart:(e,t)=>`wf-delayed:${f(e)}:${r(t)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(e,t)=>`wf-terminal:${f(e)}:${r(t)}`,attribute:(e)=>`attr:${r(e)}`,attributeIndex:(e,t,n)=>`idx:${e}:${t}:${r(n)}`,tagIndex:(e,t)=>`tag:${r(e)}:${r(t)}`,updatePrefix:(e)=>`upd:${r(e)}:`,update:(e,t)=>`upd:${r(e)}:${t}`,updateResponse:(e)=>`upr:${e}`,updateIdempotency:(e,t)=>`upk:${r(e)}:${t}`,startIdempotency:(e)=>`start-idem:${r(e)}`,startIdempotencySignalId:(e)=>`start-idem:${e}`,livenessPrefix:()=>"liveness:",liveness:(e)=>`liveness:${r(e)}`,leasePrefix:()=>"lease:",leaseEpoch:()=>"lease:epoch",leaseHolder:()=>"lease:holder",...z,budget:(e,t,n)=>`budget:${e}:${t}:${n}`,review:(e,t)=>`review:${r(e)}:${t}`,workflowHeaders:(e)=>`wf-headers:${r(e)}`,childCancellationPrefix:(e)=>`child-cancel:${r(e)}:`,childCancellation:(e,t)=>`child-cancel:${r(e)}:${r(t)}`,childWorkflowByParentPrefix:(e,t)=>`child-by-parent:${r(e)}:${t===void 0?"":`${r(t)}:`}`,childWorkflowByParent:(e,t,n)=>`child-by-parent:${r(e)}:${t===void 0?"":`${r(t)}:`}${r(n)}`,terminalCleanupNeeded:(e)=>`wf-cleanup-needed:${r(e)}`,workflowConcurrency:(e,t)=>`wf-concurrency:${r(e)}:${r(t)}`,workflowConcurrencyHolder:(e)=>`wf-concurrency-holder:${r(e)}`,workflowHasServices:(e)=>`wf-has-services:${r(e)}`,finalizerState:(e)=>`wf-finalizer-state:${r(e)}`,teardownOwed:(e)=>`wf-teardown-needed:${r(e)}`,teardownSucceeded:(e)=>`wf-teardown-succeeded:${r(e)}`,teardownDeadLetter:(e)=>`wf-teardown-deadletter:${r(e)}`,offload:(e,t)=>`offload:${r(e)}:${t}`,archive:(e,t)=>`archive:${r(e)}:${t}`,stateExecution:(e,t)=>`state:execution:${r(e)}:${r(t)}`,stateWorkflow:(e,t)=>`state:workflow-scope:${K}:${r(e)}:${r(t)}`,streamChunkPrefix:(e,t)=>`blob:${r(e)}:${t}:chunk:`,streamChunk:(e,t,n)=>`blob:${r(e)}:${t}:chunk:${String(n).padStart(10,"0")}`,streamTail:(e,t)=>`blob:${r(e)}:${t}:tail`,streamMetadata:(e,t)=>`blob:${r(e)}:${t}:meta`,budgetCharged:(e)=>`budget-charged:${e}`,toolEffect:(e,t,n)=>`tool-effect:${r(e)}:${t}:${n}`,workflowVisibilityStatus:(e,t)=>`wf-idx-status:${r(e)}:${r(t)}`,workflowVisibilityType:(e,t)=>`wf-idx-type:${r(e)}:${r(t)}`,workflowVisibilityCreated:(e,t)=>`wf-idx-created:${f(e)}:${r(t)}`,workflowVisibilityUpdated:(e,t)=>`wf-idx-updated:${f(e)}:${r(t)}`,workflowVisibilityDeadline:(e,t)=>`wf-idx-deadline:${f(e)}:${r(t)}`,workflowVisibilityManifest:(e)=>`wf-idx-manifest:${r(e)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"};function Z(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 R(e){let t={},n=!1;for(let o of["gt","gte","lt","lte"]){let s=e[o];if(s===void 0)continue;if(typeof s!=="string")throw Error("deleteRange bounds must be strings");t[o]=s,n=!0}if(!n)throw Error("deleteRange requires at least one of gt/gte/lt/lte; use deletePrefix to delete a whole prefix");let i=Z(e.limit);if(i!==void 0)t.limit=i;return t}async function H(e,t,n){let i=R(n);if(e.deleteRange)return e.deleteRange(t,i);return E(e,t,i)}function ee(e,t){let n={key:e,open:!1};if(t.gte!==void 0&&t.gte>n.key)n.key=t.gte,n.open=!1;if(t.gt!==void 0&&t.gt>=n.key)n.key=t.gt,n.open=!0;return n}function te(e,t){let n={key:w(e),open:!0};if(t.lt!==void 0&&t.lt<=n.key)n.key=t.lt,n.open=!0;if(t.lte!==void 0&&t.lte<n.key)n.key=t.lte,n.open=!1;return n}function F(e,t){let n=ee(e,t),i=te(e,t);if(n.key>i.key||n.key===i.key&&(n.open||i.open))return null;return{lower:n,upper:i}}function v(e){return e.replaceAll(/:+$/g,"")}function ne(e,t){let n=v(e),i=v(t);if(n.length===0)return i;if(i.length===0)return n;return`${n}:${i}`}class P{#t;#n;constructor(e,t){this.#t=e,this.#n=v(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}#s(e={}){let t=this.#o(e);if(e.reverse!==void 0)t.reverse=e.reverse;return t}#a(e){return this.#o(e)}capabilities(){return this.#t.capabilities()}scoped(e){return new P(this.#t,ne(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[n,i]of this.#t.scan(this.#e(e),this.#s(t)))yield[this.#i(n),i]}async batch(e){m("batch operations",e.length),await this.#t.batch(this.#r(e))}async conditionalBatch(e,t){return q(this.#t,e.map((n)=>({key:this.#e(n.key),expectedValue:n.expectedValue})),this.#r(t))}async has(e){return N(this.#t,this.#e(e))}async deletePrefix(e){return j(this.#t,this.#e(e))}async deleteRange(e,t){let n=this.#a(R(t));return H(this.#t,this.#e(e),n)}async*keys(e,t){for await(let n of M(this.#t,this.#e(e),this.#s(t)))yield this.#i(n)}async count(e){return W(this.#t,this.#e(e))}[Symbol.dispose](){this.#t[Symbol.dispose]()}}function G(e,t){return new P(e,t)}var l="kv";function re(e=globalThis){let{indexedDB:t,IDBKeyRange:n}=e;if(t===void 0||n===void 0)throw Error("IndexedDBStorage requires both indexedDB and IDBKeyRange runtime globals.");return{indexedDB:t,IDBKeyRange:n}}function S(e){return new Promise((t,n)=>{e.onsuccess=()=>t(e.result),e.onerror=()=>n(e.error)})}function ie(e,t){let n=null,i=null,o=null,s=(a,c)=>{let d=a??Error(c);if(i){let g=i;n=null,i=null,g(d);return}o=d};return e.onsuccess=()=>{if(!n)return;let a=n;n=null,i=null,a(e.result)},e.onerror=()=>{s(e.error,"IndexedDB cursor request failed.")},t.onerror=()=>{s(t.error,"IndexedDB transaction failed.")},t.onabort=()=>{s(t.error,"IndexedDB transaction aborted.")},()=>new Promise((a,c)=>{if(o){let d=o;o=null,c(d);return}if(n=a,i=c,e.readyState==="done"){let d=n;n=null,i=null,d?.(e.result)}})}async function*X(e,t,n,i,o,s){let{limit:a,reverse:c}=i,d=w(n),g=t.bound(n,d,!1,!0),h=c?"prev":"next",p=e.transaction(l,"readonly"),u=p.objectStore(l),y=o(u,g,h),b=ie(y,p),x=0,D=!1;try{let B=await b();while(B){if(a!==void 0&&x>=a)break;let Y=B.key;if(U(Y,i))yield s(B),x++;B.continue(),B=await b()}D=!0}finally{if(!D)try{p.abort()}catch{}}}class oe{#t;#n=null;#e;#r;constructor(e="weft",t=re()){this.#t=e,this.#r=t,this.#e=this.#i()}capabilities(){return{persistence:"local",readAfterWrite:"linearizable",scanConsistency:"best-effort",atomicBatch:!0,conditionalBatch:!0,boundedRangeDelete:!0}}#i(){let e=this.#r.indexedDB.open(this.#t,1);return e.onupgradeneeded=()=>{let t=e.result;if(!t.objectStoreNames.contains(l))t.createObjectStore(l)},S(e).then((t)=>(this.#n=t,t))}async get(e){let i=(await this.#e).transaction(l,"readonly").objectStore(l),o=await S(i.get(e));return o===void 0?null:new Uint8Array(o)}async put(e,t){let o=(await this.#e).transaction(l,"readwrite").objectStore(l);await S(o.put(t,e))}async delete(e){let i=(await this.#e).transaction(l,"readwrite").objectStore(l);await S(i.delete(e))}async has(e){let i=(await this.#e).transaction(l,"readonly").objectStore(l);return await S(i.count(e))>0}async deletePrefix(e){let t=await this.#e,n=w(e),i=this.#r.IDBKeyRange.bound(e,n,!1,!0);return new Promise((o,s)=>{let a=t.transaction(l,"readwrite"),c=a.objectStore(l),d=0,g=c.count(i);g.onsuccess=()=>{d=g.result,c.delete(i)},a.oncomplete=()=>o(d),a.onerror=()=>s(a.error)})}async deleteRange(e,t){let n=R(t),i=F(e,n);if(i===null)return 0;let o=this.#r.IDBKeyRange.bound(i.lower.key,i.upper.key,i.lower.open,i.upper.open),s=await this.#e,{limit:a}=n;return new Promise((c,d)=>{let g=s.transaction(l,"readwrite"),h=g.objectStore(l),p=0;if(a===void 0){let u=h.count(o);u.onsuccess=()=>{p=u.result,h.delete(o)}}else{let u=h.openCursor(o,"next");u.onsuccess=()=>{let y=u.result;if(y===null||p>=a)return;if(y.delete(),p++,p<a)y.continue()}}g.oncomplete=()=>c(p),g.onerror=()=>d(g.error)})}async*scan(e,t={}){let n=await this.#e;yield*X(n,this.#r.IDBKeyRange,e,t,(i,o,s)=>i.openCursor(o,s),(i)=>[i.key,new Uint8Array(i.value)])}async batch(e){if(m("batch operations",e.length),e.length===0)return;let t=await this.#e;return new Promise((n,i)=>{let o=t.transaction(l,"readwrite"),s=o.objectStore(l);for(let a of e)if(a.type==="put")s.put(a.value,a.key);else s.delete(a.key);o.oncomplete=()=>n(),o.onerror=()=>i(o.error)})}async conditionalBatch(e,t){m("conditionalBatch conditions",e.length),m("conditionalBatch operations",t.length);let n=await this.#e;return new Promise((i,o)=>{let s=n.transaction(l,"readwrite"),a=s.objectStore(l),c=!1,d=!1,g=(u,y)=>{if(c)return;c=!0,o(u??Error(y))};s.oncomplete=()=>{if(c)return;c=!0,i(!0)},s.onerror=()=>{g(s.error,"IndexedDB conditionalBatch transaction failed.")},s.onabort=()=>{if(c)return;if(c=!0,d){i(!1);return}o(s.error??Error("IndexedDB conditionalBatch transaction aborted."))};let h=()=>{for(let u of t)if(u.type==="put")a.put(u.value,u.key);else a.delete(u.key)},p=(u)=>{if(u>=e.length){h();return}let y=e[u],b=a.get(y.key);b.onsuccess=()=>{let x=b.result,D=x===void 0?null:new Uint8Array(x);if(!V(D,y.expectedValue)){d=!0,s.abort();return}p(u+1)},b.onerror=()=>{g(b.error,"IndexedDB conditionalBatch condition check failed.")}};p(0)})}async*keys(e,t={}){let n=await this.#e;yield*X(n,this.#r.IDBKeyRange,e,t,(i,o,s)=>i.openKeyCursor(o,s),(i)=>i.key)}async count(e){let t=await this.#e,n=w(e),o=t.transaction(l,"readonly").objectStore(l);return S(o.count(this.#r.IDBKeyRange.bound(e,n,!1,!0)))}scoped(e){return G(this,e)}[Symbol.dispose](){if(this.#n)this.#n.close(),this.#n=null}}export{oe as IndexedDBStorage};
|
package/dist/json-schema.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
var h=import.meta.require;class i extends Error{code;constructor(r,e,t){super(e,t);this.code=r,this.name=r}}var c={WorkflowAlreadyExistsError:!0,BulkDeleteRequiresTerminalWorkflowsError:!0,BulkOperationConfirmationError:!0,WorkflowTypeNotRegisteredForRecoveryError:!0,EngineCreateNameMismatchError:!0,EngineDisposedError:!0,EngineDisposalError:!0,WorkflowNotFoundError:!0,WorkflowNotRegisteredError:!0,WorkflowConcurrencyLimitExceededError:!0,WorkflowSuspendNotSupportedError:!0,ActivityResolutionError:!0,BranchTopologyChangedError:!0,PersistedDataIncompatibleError:!0,WorkflowTimeoutError:!0,HttpClientError:!0,WorkerProtocolIncompatibleError:!0,UpdateTimeoutError:!0,UpdateValidationError:!0,WorkflowTerminalError:!0,WorkflowBuilderError:!0,VersionMismatchError:!0,EffectReplayConflictError:!0,ReviewTimeoutError:!0,AtomicStateConflictError:!0,StandardSchemaValidationError:!0,ActivityReconciliationCapabilityError:!0,ActivityReconciliationConflictError:!0,ActivityReconciliationIndeterminateError:!0,DurableActivityScopeError:!0,DurableActivityUnsupportedError:!0,AsyncActivityTokenNotFoundError:!0,ActivityScheduleToCloseTimeoutError:!0,ActivityPerAttemptTimeoutError:!0,PayloadSizeExceededError:!0,StartOrSignalConflictError:!0,WorkflowTeardownPendingError:!0,IdempotencyKeyPurgedError:!0,WorkerManifestBuildError:!0,OwnershipModeMismatchError:!0},g=new Set(Object.keys(c));class o extends i{fieldName;operation;issues;constructor(r){super("StandardSchemaValidationError",p(r.fieldName,r.operation,r.issues));this.fieldName=r.fieldName,this.operation=r.operation,this.issues=r.issues}}async function s(r,e,t){let n=r["~standard"];if(!u(n))throw TypeError(`Schema for ${t.fieldName} does not provide runtime validation. Attach a Standard Schema validator (Zod, Valibot, or another vendor) or supply a runtime-validating schema at this boundary.`);let a=await n.validate(e);if(a.issues===void 0)return a.value;throw new o({fieldName:t.fieldName,operation:t.operation,issues:a.issues.map(l)})}function d(r){return r.map((e)=>e.path===""?e.message:`${e.path}: ${e.message}`).join(`
|
|
2
|
+
var h=import.meta.require;class i extends Error{code;constructor(r,e,t){super(e,t);this.code=r,this.name=r}}var c={WorkflowAlreadyExistsError:!0,BulkDeleteRequiresTerminalWorkflowsError:!0,BulkOperationConfirmationError:!0,WorkflowTypeNotRegisteredForRecoveryError:!0,EngineCreateNameMismatchError:!0,EngineDisposedError:!0,EngineDisposalError:!0,WorkflowNotFoundError:!0,WorkflowNotRegisteredError:!0,WorkflowConcurrencyLimitExceededError:!0,WorkflowSuspendNotSupportedError:!0,ActivityResolutionError:!0,BranchTopologyChangedError:!0,PersistedDataIncompatibleError:!0,PersistedDataCorruptError:!0,WorkflowTimeoutError:!0,HttpClientError:!0,WorkerProtocolIncompatibleError:!0,UpdateTimeoutError:!0,UpdateValidationError:!0,WorkflowTerminalError:!0,WorkflowBuilderError:!0,VersionMismatchError:!0,EffectReplayConflictError:!0,ReviewTimeoutError:!0,AtomicStateConflictError:!0,StandardSchemaValidationError:!0,ActivityReconciliationCapabilityError:!0,ActivityReconciliationConflictError:!0,ActivityReconciliationIndeterminateError:!0,DurableActivityScopeError:!0,DurableActivityUnsupportedError:!0,AsyncActivityTokenNotFoundError:!0,ActivityScheduleToCloseTimeoutError:!0,ActivityPerAttemptTimeoutError:!0,PayloadSizeExceededError:!0,StartOrSignalConflictError:!0,WorkflowTeardownPendingError:!0,IdempotencyKeyPurgedError:!0,WorkerManifestBuildError:!0,OwnershipModeMismatchError:!0},g=new Set(Object.keys(c));class o extends i{fieldName;operation;issues;constructor(r){super("StandardSchemaValidationError",p(r.fieldName,r.operation,r.issues));this.fieldName=r.fieldName,this.operation=r.operation,this.issues=r.issues}}async function s(r,e,t){let n=r["~standard"];if(!u(n))throw TypeError(`Schema for ${t.fieldName} does not provide runtime validation. Attach a Standard Schema validator (Zod, Valibot, or another vendor) or supply a runtime-validating schema at this boundary.`);let a=await n.validate(e);if(a.issues===void 0)return a.value;throw new o({fieldName:t.fieldName,operation:t.operation,issues:a.issues.map(l)})}function d(r){return r.map((e)=>e.path===""?e.message:`${e.path}: ${e.message}`).join(`
|
|
3
3
|
`)}function u(r){return typeof r.validate==="function"}function l(r){return{message:r.message,path:f(r.path)}}function f(r){if(r===void 0||r.length===0)return"";let e="";for(let t of r)e+="/",e+=m(t);return e}function m(r){let e=S(r)?r.key:r;return E(String(e))}function S(r){return r!==null&&typeof r==="object"&&"key"in r}function E(r){return r.replace(/~/g,"~0").replace(/\//g,"~1")}function p(r,e,t){return`Validation failed for ${e===void 0?r:`${e} ${r}`}:
|
|
4
4
|
${d(t)}`}var W=d,T=o,R=s;export{T as StandardSchemaValidationError,W as formatStandardSchemaIssues,R as validateStandardSchema};
|
|
@@ -1,40 +1,8 @@
|
|
|
1
1
|
import { type Storage } from '../storage/interface.ts';
|
|
2
|
-
import { type Cursor, type
|
|
2
|
+
import { type Cursor, type FleetEventAppendOptions, type FleetEventEnvelope, type FleetEventFeedOptions, type FleetEventInput, type FleetWorkflowEventInput, type ReplayLiveSubscribeOptions } from './workflow-event-feed.ts';
|
|
3
|
+
export type { FleetEventAppendOptions, FleetEventEnvelope, FleetEventFeedOptions, FleetEventGapEnvelope, FleetEventInput, FleetWorkflowEventInput, } from './workflow-event-feed.ts';
|
|
3
4
|
/**
|
|
4
|
-
*
|
|
5
|
-
* lifecycle and system events, optionally scoped to one `workflowId`.
|
|
6
|
-
* Returned by `FleetEventFeed.replay()` / `FleetEventFeed.subscribe()`, and
|
|
7
|
-
* consumed directly by the `/v1/events/sse` REST route.
|
|
8
|
-
*
|
|
9
|
-
* @example
|
|
10
|
-
* ```ts
|
|
11
|
-
* import type { FleetEventEnvelope } from '@lostgradient/weft/server/handler';
|
|
12
|
-
*
|
|
13
|
-
* declare const envelope: FleetEventEnvelope;
|
|
14
|
-
* console.log(envelope.kind); // e.g. 'workflow:completed'
|
|
15
|
-
* console.log(envelope.workflowId); // string | undefined
|
|
16
|
-
* ```
|
|
17
|
-
*/
|
|
18
|
-
export type FleetEventEnvelope = {
|
|
19
|
-
readonly kind: FeedEventKind;
|
|
20
|
-
readonly workflowId?: string | undefined;
|
|
21
|
-
readonly sequence: number;
|
|
22
|
-
readonly cursor: Cursor;
|
|
23
|
-
readonly emittedAtMs: number;
|
|
24
|
-
readonly payload: unknown;
|
|
25
|
-
};
|
|
26
|
-
export type FleetEventInput = {
|
|
27
|
-
readonly kind: FeedEventKind;
|
|
28
|
-
readonly workflowId?: string | undefined;
|
|
29
|
-
readonly emittedAtMs: number;
|
|
30
|
-
readonly payload: unknown;
|
|
31
|
-
};
|
|
32
|
-
export type FleetWorkflowEventInput = FleetEventInput & {
|
|
33
|
-
readonly workflowId: string;
|
|
34
|
-
};
|
|
35
|
-
/**
|
|
36
|
-
* The fleet-wide event feed: append cross-workflow events, replay committed
|
|
37
|
-
* history from a cursor, then subscribe for live delivery. This is the shape
|
|
5
|
+
* Append cross-workflow events, replay history, then subscribe for live delivery. This is the shape
|
|
38
6
|
* of `HandlerOptions.fleetEventFeed` — build a real one with
|
|
39
7
|
* `createFleetEventFeed()` to drive `/v1/events/sse` through `handleRequest()`
|
|
40
8
|
* without `serve()`.
|
|
@@ -50,7 +18,7 @@ export type FleetWorkflowEventInput = FleetEventInput & {
|
|
|
50
18
|
* ```
|
|
51
19
|
*/
|
|
52
20
|
export type FleetEventFeed = {
|
|
53
|
-
append(event: FleetEventInput): Promise<FleetEventEnvelope>;
|
|
21
|
+
append(event: FleetEventInput, options?: FleetEventAppendOptions): Promise<FleetEventEnvelope>;
|
|
54
22
|
appendWorkflowEventIfPresent(event: FleetWorkflowEventInput): Promise<FleetEventEnvelope | null>;
|
|
55
23
|
replay(options?: {
|
|
56
24
|
fromCursor?: Cursor;
|
|
@@ -58,39 +26,21 @@ export type FleetEventFeed = {
|
|
|
58
26
|
}): AsyncIterable<FleetEventEnvelope>;
|
|
59
27
|
subscribe(options?: ReplayLiveSubscribeOptions<FleetEventEnvelope>): AsyncIterable<FleetEventEnvelope>;
|
|
60
28
|
snapshotTailSequence(): Promise<number>;
|
|
29
|
+
snapshotRetentionFloor(): Promise<number>;
|
|
30
|
+
retain(options: {
|
|
31
|
+
beforeSequence: number;
|
|
32
|
+
limit?: number;
|
|
33
|
+
}): Promise<number>;
|
|
61
34
|
dispose(): void;
|
|
62
35
|
};
|
|
63
36
|
/**
|
|
64
37
|
* Build a `FleetEventFeed` backed by the given `Storage` — typically
|
|
65
|
-
* `engine.storage
|
|
66
|
-
* drive `/v1/events/sse` through `handleRequest()` directly, without
|
|
67
|
-
* `serve()`. Call once per storage instance and share the returned feed
|
|
68
|
-
* across every transport that needs it.
|
|
69
|
-
*
|
|
70
|
-
* **This feed does not subscribe to `Engine` events on its own.** `serve()`
|
|
71
|
-
* bridges engine lifecycle events into it via `wireEventBroadcasting()`; a
|
|
72
|
-
* direct `handleRequest()` host that skips `serve()` is responsible for
|
|
73
|
-
* calling `fleetEventFeed.append()` (or `appendWorkflowEventIfPresent()`)
|
|
74
|
-
* itself for whatever events it wants `/v1/events/sse` to carry — e.g. from
|
|
75
|
-
* `engine.addEventListener(...)` handlers wired up separately.
|
|
76
|
-
*
|
|
38
|
+
* `engine.storage` and share it across every fleet transport.
|
|
77
39
|
* @example
|
|
78
40
|
* ```ts
|
|
79
|
-
* import {
|
|
80
|
-
* import {
|
|
81
|
-
*
|
|
82
|
-
* handleRequest,
|
|
83
|
-
* type HandlerOptions,
|
|
84
|
-
* } from '@lostgradient/weft/server/handler';
|
|
85
|
-
*
|
|
86
|
-
* const engine = new Engine({ storage: new MemoryStorage() });
|
|
87
|
-
* const fleetEventFeed = createFleetEventFeed(engine.storage);
|
|
88
|
-
* const options: HandlerOptions = { fleetEventFeed };
|
|
89
|
-
*
|
|
90
|
-
* async function handleFleetEventsSse(request: Request): Promise<Response> {
|
|
91
|
-
* return handleRequest(request, engine, options);
|
|
92
|
-
* }
|
|
93
|
-
* void handleFleetEventsSse;
|
|
41
|
+
* import { MemoryStorage } from '@lostgradient/weft';
|
|
42
|
+
* import { createFleetEventFeed } from '@lostgradient/weft/server/handler';
|
|
43
|
+
* const feed = createFleetEventFeed(new MemoryStorage());
|
|
94
44
|
* ```
|
|
95
45
|
*/
|
|
96
|
-
export declare function createFleetEventFeed(storage: Storage, feedOptions?:
|
|
46
|
+
export declare function createFleetEventFeed(storage: Storage, feedOptions?: FleetEventFeedOptions): FleetEventFeed;
|