@lostgradient/weft 0.20.0 → 0.22.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 +2 -2
- package/dist/cli/generated/operation-catalog.snapshot.json +207 -80
- package/dist/cli/generated/operation-client.generated.d.ts +120 -43
- package/dist/client/http-client-storage.js +1 -1
- package/dist/core/engine/activity-reconciliation.d.ts +2 -2
- package/dist/core/engine/activity-reconciliation.js +12 -8
- package/dist/core/engine/async-activity-completion.js +12 -4
- package/dist/core/engine/async-activity-records.d.ts +11 -1
- package/dist/core/engine/async-activity-records.js +4 -3
- package/dist/core/engine/attributes-tags.d.ts +11 -1
- package/dist/core/engine/attributes-tags.js +4 -3
- package/dist/core/engine/bulk-operations-purge.js +5 -2
- package/dist/core/engine/bulk-operations.js +17 -5
- package/dist/core/engine/callback-creators-bundles.js +1 -1
- package/dist/core/engine/callback-creators-core.js +4 -2
- package/dist/core/engine/checkpoint-io.js +1 -1
- package/dist/core/engine/child-workflow.js +2 -1
- package/dist/core/engine/completed-review-storage.js +1 -1
- package/dist/core/engine/condition-waiters.d.ts +45 -3
- package/dist/core/engine/condition-waiters.js +12 -3
- package/dist/core/engine/disposal.js +6 -0
- package/dist/core/engine/engine-internal-types.d.ts +12 -4
- package/dist/core/engine/fenced-write.d.ts +46 -15
- package/dist/core/engine/fenced-write.js +39 -6
- package/dist/core/engine/finalizer-state.d.ts +3 -1
- package/dist/core/engine/handle-result.d.ts +49 -1
- package/dist/core/engine/handle-result.js +95 -20
- package/dist/core/engine/index.d.ts +13 -5
- package/dist/core/engine/index.js +155 -5
- package/dist/core/engine/inline-launch-queue.js +9 -0
- package/dist/core/engine/internals.d.ts +73 -0
- package/dist/core/engine/invoke-update-handler.d.ts +19 -0
- package/dist/core/engine/invoke-update-handler.js +7 -0
- package/dist/core/engine/lease-deposition.d.ts +132 -0
- package/dist/core/engine/lease-deposition.js +31 -0
- package/dist/core/engine/lease-errors.d.ts +80 -9
- package/dist/core/engine/lease-errors.js +28 -2
- package/dist/core/engine/lifecycle/resume.js +3 -1
- package/dist/core/engine/lifecycle/standalone-claim-acquire.d.ts +33 -0
- package/dist/core/engine/lifecycle/standalone-claim-acquire.js +25 -0
- package/dist/core/engine/lifecycle/start-commit.js +20 -6
- package/dist/core/engine/lifecycle/transition.d.ts +15 -1
- package/dist/core/engine/lifecycle/transition.js +6 -3
- package/dist/core/engine/operations-activity.js +1 -1
- package/dist/core/engine/operations-time.js +21 -7
- package/dist/core/engine/owner-side-signal-poll.d.ts +132 -0
- package/dist/core/engine/owner-side-signal-poll.js +22 -0
- package/dist/core/engine/owner-side-update-poll.d.ts +116 -0
- package/dist/core/engine/owner-side-update-poll.js +22 -0
- package/dist/core/engine/ownership-bootstrap.d.ts +280 -0
- package/dist/core/engine/ownership-bootstrap.js +89 -0
- package/dist/core/engine/ownership-mode-marker.d.ts +82 -0
- package/dist/core/engine/ownership-mode-marker.js +52 -0
- package/dist/core/engine/ownership-options.d.ts +22 -6
- package/dist/core/engine/ownership-options.js +42 -12
- package/dist/core/engine/pending-updates.js +35 -24
- package/dist/core/engine/queries.d.ts +70 -0
- package/dist/core/engine/queries.js +58 -4
- package/dist/core/engine/schedules.js +1 -1
- package/dist/core/engine/signals.d.ts +11 -1
- package/dist/core/engine/signals.js +11 -7
- package/dist/core/engine/sleep-timer-acknowledgements.d.ts +68 -0
- package/dist/core/engine/sleep-timer-acknowledgements.js +19 -0
- package/dist/core/engine/storage-io.d.ts +58 -10
- package/dist/core/engine/storage-io.js +27 -9
- package/dist/core/engine/termination/cleanup.d.ts +5 -4
- package/dist/core/engine/termination/complete.js +23 -4
- package/dist/core/engine/termination/finalizer-claim.js +4 -4
- package/dist/core/engine/termination/state-commit-callbacks.d.ts +15 -0
- package/dist/core/engine/termination/state-commit-callbacks.js +0 -0
- package/dist/core/engine/termination/suspend.js +1 -1
- package/dist/core/engine/update-validation.d.ts +28 -0
- package/dist/core/engine/update-validation.js +37 -0
- package/dist/core/engine/updates.d.ts +17 -16
- package/dist/core/engine/updates.js +24 -47
- package/dist/core/engine/wake-ownership-check.d.ts +86 -0
- package/dist/core/engine/wake-ownership-check.js +19 -0
- package/dist/core/engine/wake-ownership-guard.d.ts +46 -0
- package/dist/core/engine/wake-ownership-guard.js +23 -0
- package/dist/core/engine/workflow-claim-codec.d.ts +64 -0
- package/dist/core/engine/workflow-claim-codec.js +44 -0
- package/dist/core/engine/workflow-claim-cooldown.d.ts +60 -0
- package/dist/core/engine/workflow-claim-cooldown.js +17 -0
- package/dist/core/engine/workflow-claim-fold.d.ts +82 -0
- package/dist/core/engine/workflow-claim-fold.js +53 -0
- package/dist/core/engine/workflow-claim-metrics.d.ts +131 -0
- package/dist/core/engine/workflow-claim-metrics.js +62 -0
- package/dist/core/engine/workflow-claim-reclaim-scan.d.ts +96 -0
- package/dist/core/engine/workflow-claim-reclaim-scan.js +66 -0
- package/dist/core/engine/workflow-claim-reclaim-target.d.ts +107 -0
- package/dist/core/engine/workflow-claim-reclaim-target.js +155 -0
- package/dist/core/engine/workflow-claim-registry.d.ts +227 -0
- package/dist/core/engine/workflow-claim-registry.js +198 -0
- package/dist/core/engine/workflow-claim-renewal-interval.d.ts +50 -0
- package/dist/core/engine/workflow-claim-renewal-interval.js +132 -0
- package/dist/core/engine/workflow-claim-renewal-subpasses.d.ts +265 -0
- package/dist/core/engine/workflow-claim-renewal-subpasses.js +104 -0
- package/dist/core/engine/workflow-claim-renewal-task.d.ts +159 -0
- package/dist/core/engine/workflow-claim-renewal-task.js +65 -0
- package/dist/core/engine/workflow-claim-transitions.d.ts +186 -0
- package/dist/core/engine/workflow-claim-transitions.js +120 -0
- package/dist/core/inline-execution-strategy.d.ts +20 -0
- package/dist/core/inline-execution-strategy.js +15 -4
- package/dist/core/scheduler/scheduler-class.js +3 -3
- package/dist/core/scheduler/timer-sources.d.ts +13 -0
- package/dist/core/scheduler/timer-sources.js +1 -1
- package/dist/core/types/options.d.ts +17 -1
- package/dist/core/weft-error.d.ts +1 -1
- package/dist/core/weft-error.js +2 -1
- package/dist/http.js +2 -2
- package/dist/index.d.ts +2 -1
- package/dist/index.js +8 -0
- package/dist/indexeddb.js +1 -1
- package/dist/json-schema.js +3 -3
- package/dist/observability/index.js +2 -2
- package/dist/server/operations/get-task-diagnostics.d.ts +115 -25
- package/dist/server/operations/get-task-diagnostics.js +93 -7
- package/dist/storage/auto.js +1 -1
- package/dist/storage/bun-sql.js +115 -2
- package/dist/storage/compressed-storage.js +1 -1
- package/dist/storage/http.js +1 -1
- package/dist/storage/index.d.ts +38 -35
- package/dist/storage/interface.d.ts +87 -125
- package/dist/storage/interface.js +1 -1
- package/dist/storage/key-encoding.d.ts +51 -0
- package/dist/storage/key-encoding.js +13 -0
- package/dist/storage/key-prefixes.d.ts +1 -1
- package/dist/storage/key-prefixes.js +3 -0
- package/dist/storage/lmdb.js +1 -1
- package/dist/storage/memory.js +1 -1
- package/dist/storage/neon.js +4 -4
- package/dist/storage/node-sqlite.js +115 -2
- package/dist/storage/ownership-keys.d.ts +55 -0
- package/dist/storage/ownership-keys.js +6 -0
- package/dist/storage/postgres.js +4 -4
- 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/dist/worker/protocol.js +1 -1
- package/package.json +3 -2
package/dist/web-extension.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
function E(F){let J=[];for(let X=0;X<F.length;X+=512)J.push(String.fromCharCode(...F.subarray(X,X+512)));return btoa(J.join(""))}function K(F){let J=atob(F),X=new Uint8Array(J.length);for(let Z=0;Z<J.length;Z+=1)X[Z]=J.charCodeAt(Z);return X}function G(F){return typeof F==="object"&&F!==null&&!Array.isArray(F)}async function j(F,J){return await F.get(J)!==null}async function*V(F,J,X){for await(let[Z]of F.scan(J,X))yield Z}async function L(F,J){let X=0;for await(let Z of V(F,J))X++;return X}async function D(F,J){let X=[];for await(let Z of V(F,J))X.push({type:"delete",key:Z});if(X.length===0)return 0;return await F.batch(X),X.length}async function C(F,J,X){let Z=[];for await(let H of V(F,J,X))Z.push({type:"delete",key:H});if(Z.length===0)return 0;return await F.batch(Z),Z.length}function h(F,J,X){if(!F.capabilities()[J])throw Error(`Feature "${X}" requires storage capability "${J}", but this storage backend does not provide it.`)}var B=1e4;class b extends Error{code="StorageBatchOperationLimitExceededError";cap=B;count;target;constructor(F,J){super(`${F} count ${J} exceeds MAX_BATCH_OPERATIONS (${B}).`);this.name="StorageBatchOperationLimitExceededError",this.target=F,this.count=J}}function U(F,J){if(J>B)throw new b(F,J)}function v(F){return F.length>0?F.slice(0,-1)+String.fromCharCode(F.charCodeAt(F.length-1)+1):"ÿ"}function x(F,J={}){if(J.gt!==void 0&&F<=J.gt)return!1;if(J.gte!==void 0&&F<J.gte)return!1;if(J.lt!==void 0&&F>=J.lt)return!1;if(J.lte!==void 0&&F>J.lte)return!1;return!0}function QF(F,J){if(F===null||J===null)return F===J;if(F.byteLength!==J.byteLength)return!1;for(let X=0;X<F.byteLength;X++)if(F[X]!==J[X])return!1;return!0}async function m(F,J){if(F.has)return F.has(J);return j(F,J)}function I(F,J,X){if(F.keys)return F.keys(J,X);return V(F,J,X)}async function g(F,J){if(F.count)return F.count(J);return L(F,J)}async function y(F,J){if(F.deletePrefix)return F.deletePrefix(J);return D(F,J)}async function u(F,J,X){if(U("conditionalBatch conditions",J.length),U("conditionalBatch operations",X.length),h(F,"conditionalBatch","storageConditionalBatch"),!F.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return F.conditionalBatch(J,X)}function p(F){if(F===void 0)return;if(typeof F!=="number"||!Number.isInteger(F)||F<0)throw Error("deleteRange limit must be a finite non-negative integer");return F===0?0:F}function Q(F){let J={},X=!1;for(let H of["gt","gte","lt","lte"]){let $=F[H];if($===void 0)continue;if(typeof $!=="string")throw Error("deleteRange bounds must be strings");J[H]=$,X=!0}if(!X)throw Error("deleteRange requires at least one of gt/gte/lt/lte; use deletePrefix to delete a whole prefix");let Z=p(F.limit);if(Z!==void 0)J.limit=Z;return J}async function c(F,J,X){let Z=Q(X);if(F.deleteRange)return F.deleteRange(J,Z);return C(F,J,Z)}function n(F,J){let X={key:F,open:!1};if(J.gte!==void 0&&J.gte>X.key)X.key=J.gte,X.open=!1;if(J.gt!==void 0&&J.gt>=X.key)X.key=J.gt,X.open=!0;return X}function s(F,J){let X={key:v(F),open:!0};if(J.lt!==void 0&&J.lt<=X.key)X.key=J.lt,X.open=!0;if(J.lte!==void 0&&J.lte<X.key)X.key=J.lte,X.open=!1;return X}function jF(F,J){let X=n(F,J),Z=s(F,J);if(X.key>Z.key||X.key===Z.key&&(X.open||Z.open))return null;return{lower:X,upper:Z}}function T(F){return F.replaceAll(/:+$/g,"")}function a(F,J){let X=T(F),Z=T(J);if(X.length===0)return Z;if(Z.length===0)return X;return`${X}:${Z}`}class A{#J;#X;constructor(F,J){this.#J=F,this.#X=T(J)}#F(F){if(this.#X.length===0)return F;return F.length===0?`${this.#X}:`:`${this.#X}:${F}`}#Z(F){return F.map((J)=>{if(J.type==="put")return{type:"put",key:this.#F(J.key),value:J.value};return{type:"delete",key:this.#F(J.key)}})}#H(F){if(this.#X.length===0)return F;return F.slice(this.#X.length+1)}#$(F){let J={};if(F.limit!==void 0)J.limit=F.limit;if(F.gt!==void 0)J.gt=this.#F(F.gt);if(F.gte!==void 0)J.gte=this.#F(F.gte);if(F.lt!==void 0)J.lt=this.#F(F.lt);if(F.lte!==void 0)J.lte=this.#F(F.lte);return J}#M(F={}){let J=this.#$(F);if(F.reverse!==void 0)J.reverse=F.reverse;return J}#U(F){return this.#$(F)}capabilities(){return this.#J.capabilities()}scoped(F){return new A(this.#J,a(this.#X,F))}async get(F){return this.#J.get(this.#F(F))}async put(F,J){await this.#J.put(this.#F(F),J)}async delete(F){await this.#J.delete(this.#F(F))}async*scan(F,J){for await(let[X,Z]of this.#J.scan(this.#F(F),this.#M(J)))yield[this.#H(X),Z]}async batch(F){U("batch operations",F.length),await this.#J.batch(this.#Z(F))}async conditionalBatch(F,J){return u(this.#J,F.map((X)=>({key:this.#F(X.key),expectedValue:X.expectedValue})),this.#Z(J))}async has(F){return m(this.#J,this.#F(F))}async deletePrefix(F){return y(this.#J,this.#F(F))}async deleteRange(F,J){let X=this.#U(Q(J));return c(this.#J,this.#F(F),X)}async*keys(F,J){for await(let X of I(this.#J,this.#F(F),this.#M(J)))yield this.#H(X)}async count(F){return g(this.#J,this.#F(F))}[Symbol.dispose](){this.#J[Symbol.dispose]()}}function w(F,J){return new A(F,J)}var d=1,_="__weftStorageKeyspace",i=102400,r=8192;function t(F){return typeof F==="object"&&F!==null&&"then"in F&&typeof F.then==="function"}function P(F){if(!G(F))return!1;if(F.__weftStorage!==d)return!1;return typeof F.value==="string"}function o(F){if(!G(F))return!1;return Object.values(F).every(P)}function z(F){if(F!==_)return;throw Error(`WebExtensionStorage key "${_}" is reserved for adapter metadata.`)}function e(F){for(let J of F)z(J.key)}function f(F){return{__weftStorage:d,value:E(F)}}function k(F){if(!P(F))return null;return K(F.value)}function FF(F){return P(F)}function R(F){return new TextEncoder().encode(JSON.stringify(F)).byteLength}function JF(F){if(!G(F))return!1;if(F.runtime!==void 0&&!G(F.runtime))return!1;return F.storage===void 0||G(F.storage)}function XF(F){if(F!==void 0){if(!JF(F))throw Error("WebExtensionStorage injected namespace must be an object.");return F}let J=globalThis,X=J.browser??J.chrome;if(X?.storage===void 0)throw Error("WebExtensionStorage requires globalThis.browser.storage or globalThis.chrome.storage.");return X}function ZF(F,J){let X=F.storage?.[J];if(X===void 0)throw Error(`WebExtensionStorage area "${J}" is not available.`);return X}function $F(F){if(F==="session")return"ephemeral";if(F==="sync"||F==="managed")return"remote";return"local"}function HF(F){let J=F.runtime?.lastError?.message;return J===void 0?null:Error(J)}async function O(F,J,X){return new Promise((Z,H)=>{let $=!1,N=(M)=>{if($)return;let S=HF(F);if($=!0,S!==null)H(S);else Z(M)},W=(M)=>{if($)return;$=!0,H(M)},l=(M)=>N(M),q;try{q=J(l)}catch{try{q=X()}catch(M){W(M);return}}if(t(q))q.then(N,W)})}class Y{static#J=new WeakMap;#X;#F;#Z;#H;#$;constructor(F={},J){this.#Z=F.area??"local",this.#H=$F(this.#Z),this.#X=XF(J),this.#F=ZF(this.#X,this.#Z),this.#$=()=>{},this.#X.storage?.onChanged?.addListener?.(this.#$)}capabilities(){return{persistence:this.#H,readAfterWrite:"session",scanConsistency:"best-effort",atomicBatch:!1,conditionalBatch:!1,boundedRangeDelete:!1}}async#M(F){return O(this.#X,(J)=>this.#F.get(F,J),()=>this.#F.get(F))}async#U(F){await O(this.#X,(J)=>this.#F.set(F,J),()=>this.#F.set(F))}async#Y(F){if(this.#F.getBytesInUse===void 0)return null;return O(this.#X,(J)=>this.#F.getBytesInUse?.(F,J),()=>this.#F.getBytesInUse?.(F))}async#V(){let J=(await this.#M(_))[_];if(J===void 0)return{};if(!o(J))throw Error("WebExtensionStorage keyspace is not a valid storage envelope map.");return{...J}}async#N(F){let J={[_]:F};await this.#j(J),await this.#U(J)}async#Q(F){let J=Y.#J.get(this.#F)??Promise.resolve(),X={},Z=new Promise(($)=>{X.release=$}),H=J.catch(()=>{return}).then(()=>Z);Y.#J.set(this.#F,H),await J.catch(()=>{return});try{return await F()}finally{if(X.release?.(),Y.#J.get(this.#F)===H)Y.#J.delete(this.#F)}}#G(){if(this.#Z==="managed")throw Error('WebExtensionStorage area "managed" is read-only.')}#_(F){let J=this.#F.QUOTA_BYTES_PER_ITEM??r;for(let[X,Z]of Object.entries(F)){let H=R({[X]:Z});if(H>J)throw Error(`WebExtensionStorage sync item quota exceeded for "${X}": ${String(H)} > ${String(J)}.`)}}async#q(F){let J=Object.keys(F),X=await this.#Y(null),Z=await this.#Y(J);if(X!==null&&Z!==null)return X-Z+R(F);let H=await this.#M(null);return R({...H,...F})}async#j(F){if(this.#Z!=="sync")return;this.#_(F);let J=this.#F.QUOTA_BYTES??i,X=await this.#q(F);if(X>J)throw Error(`WebExtensionStorage sync total quota exceeded: ${String(X)} > ${String(J)}.`)}async get(F){z(F);let J=await this.#V();return k(J[F])}async put(F,J){this.#G(),z(F),await this.#Q(async()=>{let X=await this.#V();X[F]=f(J),await this.#N(X)})}async delete(F){this.#G(),z(F),await this.#Q(async()=>{let J=await this.#V();if(!(F in J))return;delete J[F],await this.#N(J)})}async*scan(F,J={}){let X=await this.#V(),Z=Object.keys(X).filter(($)=>$.startsWith(F)).filter(($)=>x($,J)).filter(($)=>FF(X[$])).toSorted();if(J.reverse)Z=Z.toReversed();let H=0;for(let $ of Z){if(J.limit!==void 0&&H>=J.limit)break;let N=k(X[$]);if(N===null)continue;yield[$,N],H+=1}}async batch(F){if(U("batch operations",F.length),this.#G(),F.length===0)return;e(F),await this.#Q(async()=>{let J=await this.#V();for(let X of F)if(X.type==="put")J[X.key]=f(X.value);else delete J[X.key];await this.#N(J)})}has(F){return j(this,F)}async*keys(F,J){yield*V(this,F,J)}count(F){return L(this,F)}async deletePrefix(F){return this.#G(),D(this,F)}async deleteRange(F,J){let X=Q(J);return this.#G(),C(this,F,X)}scoped(F){return w(this,F)}[Symbol.dispose](){this.#X.storage?.onChanged?.removeListener?.(this.#$)}}export{Y as WebExtensionStorage};
|
|
1
|
+
function A(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 T(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 g(e){return typeof e==="object"&&e!==null&&!Array.isArray(e)}async function m(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 b(e,t){let n=0;for await(let i of c(e,t))n++;return n}async function S(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 w(e,t,n){let i=[];for await(let s of c(e,t,n))i.push({type:"delete",key:s});if(i.length===0)return 0;return await e.batch(i),i.length}function D(e,t,n){if(!e.capabilities()[t])throw Error(`Feature "${n}" requires storage capability "${t}", but this storage backend does not provide it.`)}var _="default";function r(e){return encodeURIComponent(e)}var W={workflowOwnerEpoch:(e)=>`wf-owner-epoch:${r(e)}`,workflowOwnerHolder:(e)=>`wf-owner-holder:${r(e)}`,ownershipModeMarker:()=>"ownership-mode-marker"};var v=1e4;class N extends Error{code="StorageBatchOperationLimitExceededError";cap=v;count;target;constructor(e,t){super(`${e} count ${t} exceeds MAX_BATCH_OPERATIONS (${v}).`);this.name="StorageBatchOperationLimitExceededError",this.target=e,this.count=t}}function u(e,t){if(t>v)throw new N(e,t)}function U(e){return e.length>0?e.slice(0,-1)+String.fromCharCode(e.charCodeAt(e.length-1)+1):"ÿ"}function L(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 Re(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 K(e,t){if(e.has)return e.has(t);return m(e,t)}function z(e,t,n){if(e.keys)return e.keys(t,n);return c(e,t,n)}async function M(e,t){if(e.count)return e.count(t);return b(e,t)}async function H(e,t){if(e.deletePrefix)return e.deletePrefix(t);return S(e,t)}async function V(e,t,n){if(u("conditionalBatch conditions",t.length),u("conditionalBatch operations",n.length),D(e,"conditionalBatch","storageConditionalBatch"),!e.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return e.conditionalBatch(t,n)}var a=(e)=>String(e).padStart(16,"0"),X="0",Z="1",I=(e,t,n,i)=>`sig:${r(e)}:${r(t)}:${i}:${r(n)}`,Pe={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)=>I(e,t,n,Z),startSignal:(e,t,n)=>I(e,t,n,X),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",...W,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:${_}:${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 J(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={},n=!1;for(let s of["gt","gte","lt","lte"]){let o=e[s];if(o===void 0)continue;if(typeof o!=="string")throw Error("deleteRange bounds must be strings");t[s]=o,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=J(e.limit);if(i!==void 0)t.limit=i;return t}async function Y(e,t,n){let i=f(n);if(e.deleteRange)return e.deleteRange(t,i);return w(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:U(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 Ae(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 E(e){return e.replaceAll(/:+$/g,"")}function ne(e,t){let n=E(e),i=E(t);if(n.length===0)return i;if(i.length===0)return n;return`${n}:${i}`}class k{#t;#n;constructor(e,t){this.#t=e,this.#n=E(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)}})}#o(e){if(this.#n.length===0)return e;return e.slice(this.#n.length+1)}#i(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.#i(e);if(e.reverse!==void 0)t.reverse=e.reverse;return t}#c(e){return this.#i(e)}capabilities(){return this.#t.capabilities()}scoped(e){return new k(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.#o(n),i]}async batch(e){u("batch operations",e.length),await this.#t.batch(this.#r(e))}async conditionalBatch(e,t){return V(this.#t,e.map((n)=>({key:this.#e(n.key),expectedValue:n.expectedValue})),this.#r(t))}async has(e){return K(this.#t,this.#e(e))}async deletePrefix(e){return H(this.#t,this.#e(e))}async deleteRange(e,t){let n=this.#c(f(t));return Y(this.#t,this.#e(e),n)}async*keys(e,t){for await(let n of z(this.#t,this.#e(e),this.#s(t)))yield this.#o(n)}async count(e){return M(this.#t,this.#e(e))}[Symbol.dispose](){this.#t[Symbol.dispose]()}}function q(e,t){return new k(e,t)}var G=1,y="__weftStorageKeyspace",re=102400,ie=8192;function oe(e){return typeof e==="object"&&e!==null&&"then"in e&&typeof e.then==="function"}function O(e){if(!g(e))return!1;if(e.__weftStorage!==G)return!1;return typeof e.value==="string"}function se(e){if(!g(e))return!1;return Object.values(e).every(O)}function x(e){if(e!==y)return;throw Error(`WebExtensionStorage key "${y}" is reserved for adapter metadata.`)}function ae(e){for(let t of e)x(t.key)}function j(e){return{__weftStorage:G,value:A(e)}}function Q(e){if(!O(e))return null;return T(e.value)}function le(e){return O(e)}function R(e){return new TextEncoder().encode(JSON.stringify(e)).byteLength}function ce(e){if(!g(e))return!1;if(e.runtime!==void 0&&!g(e.runtime))return!1;return e.storage===void 0||g(e.storage)}function ge(e){if(e!==void 0){if(!ce(e))throw Error("WebExtensionStorage injected namespace must be an object.");return e}let t=globalThis,n=t.browser??t.chrome;if(n?.storage===void 0)throw Error("WebExtensionStorage requires globalThis.browser.storage or globalThis.chrome.storage.");return n}function ue(e,t){let n=e.storage?.[t];if(n===void 0)throw Error(`WebExtensionStorage area "${t}" is not available.`);return n}function de(e){if(e==="session")return"ephemeral";if(e==="sync"||e==="managed")return"remote";return"local"}function fe(e){let t=e.runtime?.lastError?.message;return t===void 0?null:Error(t)}async function P(e,t,n){return new Promise((i,s)=>{let o=!1,d=(l)=>{if(o)return;let B=fe(e);if(o=!0,B!==null)s(B);else i(l)},C=(l)=>{if(o)return;o=!0,s(l)},F=(l)=>d(l),h;try{h=t(F)}catch{try{h=n()}catch(l){C(l);return}}if(oe(h))h.then(d,C)})}class p{static#t=new WeakMap;#n;#e;#r;#o;#i;constructor(e={},t){this.#r=e.area??"local",this.#o=de(this.#r),this.#n=ge(t),this.#e=ue(this.#n,this.#r),this.#i=()=>{},this.#n.storage?.onChanged?.addListener?.(this.#i)}capabilities(){return{persistence:this.#o,readAfterWrite:"session",scanConsistency:"best-effort",atomicBatch:!1,conditionalBatch:!1,boundedRangeDelete:!1}}async#s(e){return P(this.#n,(t)=>this.#e.get(e,t),()=>this.#e.get(e))}async#c(e){await P(this.#n,(t)=>this.#e.set(e,t),()=>this.#e.set(e))}async#d(e){if(this.#e.getBytesInUse===void 0)return null;return P(this.#n,(t)=>this.#e.getBytesInUse?.(e,t),()=>this.#e.getBytesInUse?.(e))}async#a(){let t=(await this.#s(y))[y];if(t===void 0)return{};if(!se(t))throw Error("WebExtensionStorage keyspace is not a valid storage envelope map.");return{...t}}async#g(e){let t={[y]:e};await this.#y(t),await this.#c(t)}async#u(e){let t=p.#t.get(this.#e)??Promise.resolve(),n={},i=new Promise((o)=>{n.release=o}),s=t.catch(()=>{return}).then(()=>i);p.#t.set(this.#e,s),await t.catch(()=>{return});try{return await e()}finally{if(n.release?.(),p.#t.get(this.#e)===s)p.#t.delete(this.#e)}}#l(){if(this.#r==="managed")throw Error('WebExtensionStorage area "managed" is read-only.')}#f(e){let t=this.#e.QUOTA_BYTES_PER_ITEM??ie;for(let[n,i]of Object.entries(e)){let s=R({[n]:i});if(s>t)throw Error(`WebExtensionStorage sync item quota exceeded for "${n}": ${String(s)} > ${String(t)}.`)}}async#p(e){let t=Object.keys(e),n=await this.#d(null),i=await this.#d(t);if(n!==null&&i!==null)return n-i+R(e);let s=await this.#s(null);return R({...s,...e})}async#y(e){if(this.#r!=="sync")return;this.#f(e);let t=this.#e.QUOTA_BYTES??re,n=await this.#p(e);if(n>t)throw Error(`WebExtensionStorage sync total quota exceeded: ${String(n)} > ${String(t)}.`)}async get(e){x(e);let t=await this.#a();return Q(t[e])}async put(e,t){this.#l(),x(e),await this.#u(async()=>{let n=await this.#a();n[e]=j(t),await this.#g(n)})}async delete(e){this.#l(),x(e),await this.#u(async()=>{let t=await this.#a();if(!(e in t))return;delete t[e],await this.#g(t)})}async*scan(e,t={}){let n=await this.#a(),i=Object.keys(n).filter((o)=>o.startsWith(e)).filter((o)=>L(o,t)).filter((o)=>le(n[o])).toSorted();if(t.reverse)i=i.toReversed();let s=0;for(let o of i){if(t.limit!==void 0&&s>=t.limit)break;let d=Q(n[o]);if(d===null)continue;yield[o,d],s+=1}}async batch(e){if(u("batch operations",e.length),this.#l(),e.length===0)return;ae(e),await this.#u(async()=>{let t=await this.#a();for(let n of e)if(n.type==="put")t[n.key]=j(n.value);else delete t[n.key];await this.#g(t)})}has(e){return m(this,e)}async*keys(e,t){yield*c(this,e,t)}count(e){return b(this,e)}async deletePrefix(e){return this.#l(),S(this,e)}async deleteRange(e,t){let n=f(t);return this.#l(),w(this,e,n)}scoped(e){return q(this,e)}[Symbol.dispose](){this.#n.storage?.onChanged?.removeListener?.(this.#i)}}export{p as WebExtensionStorage};
|
package/dist/worker/protocol.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
var t=import.meta.require,l=(z,B,Q)=>{if(B!=null){if(typeof B!=="object"&&typeof B!=="function")throw TypeError('Object expected to be assigned to "using" declaration');let Y;if(Q)Y=B[Symbol.asyncDispose];if(Y===void 0)Y=B[Symbol.dispose];if(typeof Y!=="function")throw TypeError("Object not disposable");z.push([Q,Y,B])}else if(Q)z.push([Q]);return B},a=(z,B,Q)=>{let Y=($)=>B=Q?new SuppressedError($,B,"An error was suppressed during disposal"):(Q=!0,$),Z=($)=>{while($=z.pop())try{var x=$[1]&&$[1].call($[2]);if($[0])return Promise.resolve(x).then(Z,(b)=>(Y(b),Z()))}catch(b){Y(b)}if(Q)throw B};return Z()};function j(z){return z!==null&&typeof z==="object"&&!Array.isArray(z)}function H(z){if(z===null||typeof z==="string"||typeof z==="boolean"||typeof z==="number"&&Number.isFinite(z))return!0;if(Array.isArray(z))return z.every(H);if(!j(z))return!1;return Object.values(z).every(H)}function U(z){return typeof z==="string"&&z.length>0}function K(z){return Array.isArray(z)&&z.every(U)}function N(z){if(!j(z))return!1;return Object.values(z).every((B)=>typeof B==="string")}function G(z){return typeof z==="number"&&Number.isFinite(z)}function X(z,B,Q){return{ok:!1,error:{code:z,message:B,...Q!==void 0?{requestedProtocolVersion:Q}:{}}}}function L(z,B,Q){let Y={};for(let[Z,$,x,b]of Q){let J=B[Z];if(J===void 0){if($)return{ok:!1,error:X(z,b)};continue}if(!x(J))return{ok:!1,error:X(z,b)};Y[Z]=J}return{ok:!0,values:Y}}var D=3,h=3,C=3,W=[3];var F={$ref:"#/$defs/jsonValue"},I={type:"object",additionalProperties:F},M={type:"object",additionalProperties:{type:"string"}},q={const:D},f={register:{type:"object",additionalProperties:!1,required:["type","protocolVersion","workerId","manifest"],properties:{type:{const:"register"},protocolVersion:q,workerId:{type:"string",minLength:1},manifest:{type:"object"},concurrency:{type:"number",minimum:1,maximum:1000},startedAt:{type:"number"}}},heartbeat:{type:"object",additionalProperties:!1,required:["type","workerId"],properties:{type:{const:"heartbeat"},workerId:{type:"string",minLength:1}}},taskResult:{oneOf:[{type:"object",additionalProperties:!1,required:["type","operationId","status","value","attemptToken"],properties:{type:{const:"taskResult"},operationId:{type:"string",minLength:1},status:{const:"completed"},value:F,attemptToken:{type:"string",minLength:1}}},{type:"object",additionalProperties:!1,required:["type","operationId","status","error","attemptToken"],properties:{type:{const:"taskResult"},operationId:{type:"string",minLength:1},status:{const:"failed"},error:{type:"string"},attemptToken:{type:"string",minLength:1}}},{type:"object",additionalProperties:!1,required:["type","operationId","status","error","attemptToken"],properties:{type:{const:"taskResult"},operationId:{type:"string",minLength:1},status:{const:"cancelled"},error:{type:"string"},cancelled:{const:!0},attemptToken:{type:"string",minLength:1}}}]},task:{type:"object",additionalProperties:!1,required:["type","operationId","activityName","input","attemptToken"],properties:{type:{const:"task"},operationId:{type:"string",minLength:1},activityName:{type:"string",minLength:1},input:F,attempt:{type:"number",minimum:1},headers:M,workflowExecutionToken:{type:"string",minLength:1},attemptToken:{type:"string",minLength:1}}},cancel:{type:"object",additionalProperties:!1,required:["type","operationId"],properties:{type:{const:"cancel"},operationId:{type:"string",minLength:1}}},shutdown:{type:"object",additionalProperties:!1,required:["type"],properties:{type:{const:"shutdown"}}},registerAck:{type:"object",additionalProperties:!1,required:["type","protocolVersion","workerId","queue","concurrency","acceptedManifestDigest","serverCapabilities"],properties:{type:{const:"registerAck"},protocolVersion:q,workerId:{type:"string",minLength:1},queue:{type:"string",minLength:1},concurrency:{type:"number",minimum:1,maximum:1000},acceptedManifestDigest:{type:"string",minLength:1},serverCapabilities:{type:"array",items:{type:"string",minLength:1}}}},registerError:{type:"object",additionalProperties:!1,required:["type","code","message","supportedProtocolVersions"],properties:{type:{const:"registerError"},code:{enum:["invalid_registration","unsupported_protocol_version","deployment_conflict","registration_rejected"]},message:{type:"string"},supportedProtocolVersions:{type:"array",items:{type:"number"}},requestedProtocolVersion:{type:"number"}}},protocolError:{type:"object",additionalProperties:!1,required:["type","code","message"],properties:{type:{const:"protocolError"},code:{enum:["invalid_json","invalid_message","unknown_message_type","registration_required"]},message:{type:"string"}}}},P={$schema:"https://json-schema.org/draft/2020-12/schema",$id:`https://weft.dev/schemas/remote-worker-protocol.v${String(D)}.json`,title:`Weft RemoteWorker Protocol v${String(D)}`,oneOf:Object.keys(f).map((z)=>({$ref:`#/$defs/messages/${z}`})),$defs:{jsonValue:{oneOf:[{type:"null"},{type:"boolean"},{type:"number"},{type:"string"},{type:"array",items:{$ref:"#/$defs/jsonValue"}},{type:"object",additionalProperties:{$ref:"#/$defs/jsonValue"}}]},jsonObject:I,messages:f}};function w(z){let B=z.attemptToken;if(!U(B))return X("invalid_message","taskResult.attemptToken must be a non-empty string");return{ok:!0,message:{attemptToken:B}}}function g(z,B){let Q=B.value;if(!H(Q))return X("invalid_message","completed taskResult.value must be valid JSON");let Y=w(B);if(!Y.ok)return Y;return{ok:!0,message:{type:"taskResult",operationId:z,status:"completed",value:Q,...Y.message}}}function y(z,B){let Q=B.error;if(typeof Q!=="string")return X("invalid_message","failed taskResult.error must be a string");let Y=w(B);if(!Y.ok)return Y;return{ok:!0,message:{type:"taskResult",operationId:z,status:"failed",error:Q,...Y.message}}}function T(z,B){let Q=B.error;if(typeof Q!=="string")return X("invalid_message","cancelled taskResult.error must be a string");let Y=B.cancelled;if(Y!==void 0&&Y!==!0)return X("invalid_message","taskResult.cancelled must be true when present");let Z=w(B);if(!Z.ok)return Z;return{ok:!0,message:{type:"taskResult",operationId:z,status:"cancelled",error:Q,...Y===!0?{cancelled:Y}:{},...Z.message}}}var _={completed:g,failed:y,cancelled:T};function V(z){return z==="completed"||z==="failed"||z==="cancelled"}function A(z){let B=z.operationId;if(!U(B))return X("invalid_message","taskResult.operationId must be a non-empty string");let Q=z.status;if(!V(Q))return X("invalid_message","taskResult.status must be completed, failed, or cancelled");return _[Q](B,z)}var k=new Set(["register","heartbeat","taskResult"]),S=new Set(["registerAck","registerError","protocolError","task","cancel","shutdown"]);function m(z){if(z===D)return{ok:!0,message:z};let B=G(z)?z:void 0;return X("unsupported_protocol_version",`Unsupported RemoteWorker protocol version: ${String(z)}`,B)}var O=[["workerId",!0,U,"register.workerId must be a non-empty string"],["manifest",!0,j,"register.manifest must be a JSON object"],["concurrency",!1,G,"register.concurrency must be a finite number"],["startedAt",!1,G,"register.startedAt must be a finite number when present"]];function E(z){let B=m(z.protocolVersion);if(!B.ok)return B;let Q=L("invalid_registration",z,O);if(!Q.ok)return Q.error;return{ok:!0,message:{type:"register",protocolVersion:B.message,...Q.values}}}function R(z){let B=z.workerId;if(!U(B))return X("invalid_message","heartbeat.workerId must be a non-empty string");return{ok:!0,message:{type:"heartbeat",workerId:B}}}var p=[["operationId",!0,U,"task.operationId must be a non-empty string"],["activityName",!0,U,"task.activityName must be a non-empty string"],["input",!0,H,"task.input must be valid JSON"],["attempt",!1,G,"task.attempt must be a finite number"],["headers",!1,N,"task.headers must be a string map"],["workflowExecutionToken",!1,U,"task.workflowExecutionToken must be a non-empty string"],["attemptToken",!0,U,"task.attemptToken must be a non-empty string"]];function n(z){let B=L("invalid_message",z,p);if(!B.ok)return B.error;return{ok:!0,message:{type:"task",...B.values}}}function i(z){let B=z.operationId;if(!U(B))return X("invalid_message","cancel.operationId must be a non-empty string");return{ok:!0,message:{type:"cancel",operationId:B}}}function v(){return{ok:!0,message:{type:"shutdown"}}}function d(z){let B=z.protocolVersion;if(B!==D)return X("invalid_message",`registerAck.protocolVersion must be ${String(D)}`);let{workerId:Q,queue:Y,concurrency:Z,acceptedManifestDigest:$,serverCapabilities:x}=z;if(!U(Q))return X("invalid_message","registerAck.workerId must be a non-empty string");if(!U(Y))return X("invalid_message","registerAck.queue must be a non-empty string");if(typeof Z!=="number"||!Number.isFinite(Z))return X("invalid_message","registerAck.concurrency must be a finite number");if(!U($))return X("invalid_message","registerAck.acceptedManifestDigest must be a non-empty string");if(!K(x))return X("invalid_message","registerAck.serverCapabilities must be an array of non-empty strings");return{ok:!0,message:{type:"registerAck",protocolVersion:B,workerId:Q,queue:Y,concurrency:Z,acceptedManifestDigest:$,serverCapabilities:x}}}function u(z){return z==="invalid_registration"||z==="unsupported_protocol_version"||z==="deployment_conflict"||z==="registration_rejected"}function s(z){let{code:B,message:Q,supportedProtocolVersions:Y,requestedProtocolVersion:Z}=z;if(!u(B))return X("invalid_message","registerError.code is not recognized");if(typeof Q!=="string")return X("invalid_message","registerError.message must be a string");if(!Array.isArray(Y)||!Y.every((x)=>G(x)))return X("invalid_message","registerError.supportedProtocolVersions is invalid");if(Z!==void 0&&!G(Z))return X("invalid_message","registerError.requestedProtocolVersion must be a finite number");return{ok:!0,message:{type:"registerError",code:B,message:Q,supportedProtocolVersions:Y,...Z!==void 0?{requestedProtocolVersion:Z}:{}}}}function c(z){let{code:B,message:Q}=z;if(B!=="invalid_json"&&B!=="invalid_message"&&B!=="unknown_message_type"&&B!=="registration_required")return X("invalid_message","protocolError.code is not recognized");if(typeof Q!=="string")return X("invalid_message","protocolError.message must be a string");return{ok:!0,message:{type:"protocolError",code:B,message:Q}}}function xz(z){if(!j(z))return X("invalid_message","Worker protocol message must be a JSON object");let B=z.type;if(typeof B!=="string")return X("invalid_message","Worker protocol message.type must be a string");if(!k.has(B))return X("unknown_message_type",`Unknown worker message type: ${B}`);switch(B){case"register":return E(z);case"heartbeat":return R(z);case"taskResult":return A(z);default:return X("unknown_message_type",`Unknown worker message type: ${B}`)}}function Dz(z){if(!j(z))return X("invalid_message","Server protocol message must be a JSON object");let B=z.type;if(typeof B!=="string")return X("invalid_message","Server protocol message.type must be a string");if(!S.has(B))return X("unknown_message_type",`Unknown server message type: ${B}`);switch(B){case"registerAck":return d(z);case"registerError":return s(z);case"protocolError":return c(z);case"task":return n(z);case"cancel":return i(z);case"shutdown":return v();default:return X("unknown_message_type",`Unknown server message type: ${B}`)}}export{xz as parseWorkerToServerMessage,Dz as parseServerToWorkerMessage,H as isRemoteWorkerJsonValue,W as REMOTE_WORKER_SUPPORTED_PROTOCOL_VERSIONS,D as REMOTE_WORKER_PROTOCOL_VERSION,P as REMOTE_WORKER_PROTOCOL_JSON_SCHEMA,h as REMOTE_WORKER_MIN_PROTOCOL_VERSION,f as REMOTE_WORKER_MESSAGE_SCHEMAS,C as REMOTE_WORKER_MAX_PROTOCOL_VERSION};
|
|
2
|
+
var X=import.meta.require;function p(e){return e!==null&&typeof e==="object"&&!Array.isArray(e)}function l(e){if(e===null||typeof e==="string"||typeof e==="boolean"||typeof e==="number"&&Number.isFinite(e))return!0;if(Array.isArray(e))return e.every(l);if(!p(e))return!1;return Object.values(e).every(l)}function a(e){return typeof e==="string"&&e.length>0}function _(e){return Array.isArray(e)&&e.every(a)}function E(e){if(!p(e))return!1;return Object.values(e).every((t)=>typeof t==="string")}function u(e){return typeof e==="number"&&Number.isFinite(e)}function r(e,t,s){return{ok:!1,error:{code:e,message:t,...s!==void 0?{requestedProtocolVersion:s}:{}}}}function d(e,t,s){let o={};for(let[n,g,c,f]of s){let m=t[n];if(m===void 0){if(g)return{ok:!1,error:r(e,f)};continue}if(!c(m))return{ok:!1,error:r(e,f)};o[n]=m}return{ok:!0,values:o}}var i=3,M=3,O=3,T=[3];var R={$ref:"#/$defs/jsonValue"},S={type:"object",additionalProperties:R},w={type:"object",additionalProperties:{type:"string"}},P={const:i},k={register:{type:"object",additionalProperties:!1,required:["type","protocolVersion","workerId","manifest"],properties:{type:{const:"register"},protocolVersion:P,workerId:{type:"string",minLength:1},manifest:{type:"object"},concurrency:{type:"number",minimum:1,maximum:1000},startedAt:{type:"number"}}},heartbeat:{type:"object",additionalProperties:!1,required:["type","workerId"],properties:{type:{const:"heartbeat"},workerId:{type:"string",minLength:1}}},taskResult:{oneOf:[{type:"object",additionalProperties:!1,required:["type","operationId","status","value","attemptToken"],properties:{type:{const:"taskResult"},operationId:{type:"string",minLength:1},status:{const:"completed"},value:R,attemptToken:{type:"string",minLength:1}}},{type:"object",additionalProperties:!1,required:["type","operationId","status","error","attemptToken"],properties:{type:{const:"taskResult"},operationId:{type:"string",minLength:1},status:{const:"failed"},error:{type:"string"},attemptToken:{type:"string",minLength:1}}},{type:"object",additionalProperties:!1,required:["type","operationId","status","error","attemptToken"],properties:{type:{const:"taskResult"},operationId:{type:"string",minLength:1},status:{const:"cancelled"},error:{type:"string"},cancelled:{const:!0},attemptToken:{type:"string",minLength:1}}}]},task:{type:"object",additionalProperties:!1,required:["type","operationId","activityName","input","attemptToken"],properties:{type:{const:"task"},operationId:{type:"string",minLength:1},activityName:{type:"string",minLength:1},input:R,attempt:{type:"number",minimum:1},headers:w,workflowExecutionToken:{type:"string",minLength:1},attemptToken:{type:"string",minLength:1}}},cancel:{type:"object",additionalProperties:!1,required:["type","operationId"],properties:{type:{const:"cancel"},operationId:{type:"string",minLength:1}}},shutdown:{type:"object",additionalProperties:!1,required:["type"],properties:{type:{const:"shutdown"}}},registerAck:{type:"object",additionalProperties:!1,required:["type","protocolVersion","workerId","queue","concurrency","acceptedManifestDigest","serverCapabilities"],properties:{type:{const:"registerAck"},protocolVersion:P,workerId:{type:"string",minLength:1},queue:{type:"string",minLength:1},concurrency:{type:"number",minimum:1,maximum:1000},acceptedManifestDigest:{type:"string",minLength:1},serverCapabilities:{type:"array",items:{type:"string",minLength:1}}}},registerError:{type:"object",additionalProperties:!1,required:["type","code","message","supportedProtocolVersions"],properties:{type:{const:"registerError"},code:{enum:["invalid_registration","unsupported_protocol_version","deployment_conflict","registration_rejected"]},message:{type:"string"},supportedProtocolVersions:{type:"array",items:{type:"number"}},requestedProtocolVersion:{type:"number"}}},protocolError:{type:"object",additionalProperties:!1,required:["type","code","message"],properties:{type:{const:"protocolError"},code:{enum:["invalid_json","invalid_message","unknown_message_type","registration_required"]},message:{type:"string"}}}},W={$schema:"https://json-schema.org/draft/2020-12/schema",$id:`https://weft.dev/schemas/remote-worker-protocol.v${String(i)}.json`,title:`Weft RemoteWorker Protocol v${String(i)}`,oneOf:Object.keys(k).map((e)=>({$ref:`#/$defs/messages/${e}`})),$defs:{jsonValue:{oneOf:[{type:"null"},{type:"boolean"},{type:"number"},{type:"string"},{type:"array",items:{$ref:"#/$defs/jsonValue"}},{type:"object",additionalProperties:{$ref:"#/$defs/jsonValue"}}]},jsonObject:S,messages:k}};function y(e){let t=e.attemptToken;if(!a(t))return r("invalid_message","taskResult.attemptToken must be a non-empty string");return{ok:!0,message:{attemptToken:t}}}function h(e,t){let s=t.value;if(!l(s))return r("invalid_message","completed taskResult.value must be valid JSON");let o=y(t);if(!o.ok)return o;return{ok:!0,message:{type:"taskResult",operationId:e,status:"completed",value:s,...o.message}}}function v(e,t){let s=t.error;if(typeof s!=="string")return r("invalid_message","failed taskResult.error must be a string");let o=y(t);if(!o.ok)return o;return{ok:!0,message:{type:"taskResult",operationId:e,status:"failed",error:s,...o.message}}}function V(e,t){let s=t.error;if(typeof s!=="string")return r("invalid_message","cancelled taskResult.error must be a string");let o=t.cancelled;if(o!==void 0&&o!==!0)return r("invalid_message","taskResult.cancelled must be true when present");let n=y(t);if(!n.ok)return n;return{ok:!0,message:{type:"taskResult",operationId:e,status:"cancelled",error:s,...o===!0?{cancelled:o}:{},...n.message}}}var I={completed:h,failed:v,cancelled:V};function C(e){return e==="completed"||e==="failed"||e==="cancelled"}function b(e){let t=e.operationId;if(!a(t))return r("invalid_message","taskResult.operationId must be a non-empty string");let s=e.status;if(!C(s))return r("invalid_message","taskResult.status must be completed, failed, or cancelled");return I[s](t,e)}var j=new Set(["register","heartbeat","taskResult"]),A=new Set(["registerAck","registerError","protocolError","task","cancel","shutdown"]);function L(e){if(e===i)return{ok:!0,message:e};let t=u(e)?e:void 0;return r("unsupported_protocol_version",`Unsupported RemoteWorker protocol version: ${String(e)}`,t)}var N=[["workerId",!0,a,"register.workerId must be a non-empty string"],["manifest",!0,p,"register.manifest must be a JSON object"],["concurrency",!1,u,"register.concurrency must be a finite number"],["startedAt",!1,u,"register.startedAt must be a finite number when present"]];function x(e){let t=L(e.protocolVersion);if(!t.ok)return t;let s=d("invalid_registration",e,N);if(!s.ok)return s.error;return{ok:!0,message:{type:"register",protocolVersion:t.message,...s.values}}}function F(e){let t=e.workerId;if(!a(t))return r("invalid_message","heartbeat.workerId must be a non-empty string");return{ok:!0,message:{type:"heartbeat",workerId:t}}}var q=[["operationId",!0,a,"task.operationId must be a non-empty string"],["activityName",!0,a,"task.activityName must be a non-empty string"],["input",!0,l,"task.input must be valid JSON"],["attempt",!1,u,"task.attempt must be a finite number"],["headers",!1,E,"task.headers must be a string map"],["workflowExecutionToken",!1,a,"task.workflowExecutionToken must be a non-empty string"],["attemptToken",!0,a,"task.attemptToken must be a non-empty string"]];function J(e){let t=d("invalid_message",e,q);if(!t.ok)return t.error;return{ok:!0,message:{type:"task",...t.values}}}function K(e){let t=e.operationId;if(!a(t))return r("invalid_message","cancel.operationId must be a non-empty string");return{ok:!0,message:{type:"cancel",operationId:t}}}function D(){return{ok:!0,message:{type:"shutdown"}}}function H(e){let t=e.protocolVersion;if(t!==i)return r("invalid_message",`registerAck.protocolVersion must be ${String(i)}`);let{workerId:s,queue:o,concurrency:n,acceptedManifestDigest:g,serverCapabilities:c}=e;if(!a(s))return r("invalid_message","registerAck.workerId must be a non-empty string");if(!a(o))return r("invalid_message","registerAck.queue must be a non-empty string");if(typeof n!=="number"||!Number.isFinite(n))return r("invalid_message","registerAck.concurrency must be a finite number");if(!a(g))return r("invalid_message","registerAck.acceptedManifestDigest must be a non-empty string");if(!_(c))return r("invalid_message","registerAck.serverCapabilities must be an array of non-empty strings");return{ok:!0,message:{type:"registerAck",protocolVersion:t,workerId:s,queue:o,concurrency:n,acceptedManifestDigest:g,serverCapabilities:c}}}function U(e){return e==="invalid_registration"||e==="unsupported_protocol_version"||e==="deployment_conflict"||e==="registration_rejected"}function G(e){let{code:t,message:s,supportedProtocolVersions:o,requestedProtocolVersion:n}=e;if(!U(t))return r("invalid_message","registerError.code is not recognized");if(typeof s!=="string")return r("invalid_message","registerError.message must be a string");if(!Array.isArray(o)||!o.every((c)=>u(c)))return r("invalid_message","registerError.supportedProtocolVersions is invalid");if(n!==void 0&&!u(n))return r("invalid_message","registerError.requestedProtocolVersion must be a finite number");return{ok:!0,message:{type:"registerError",code:t,message:s,supportedProtocolVersions:o,...n!==void 0?{requestedProtocolVersion:n}:{}}}}function z(e){let{code:t,message:s}=e;if(t!=="invalid_json"&&t!=="invalid_message"&&t!=="unknown_message_type"&&t!=="registration_required")return r("invalid_message","protocolError.code is not recognized");if(typeof s!=="string")return r("invalid_message","protocolError.message must be a string");return{ok:!0,message:{type:"protocolError",code:t,message:s}}}function ie(e){if(!p(e))return r("invalid_message","Worker protocol message must be a JSON object");let t=e.type;if(typeof t!=="string")return r("invalid_message","Worker protocol message.type must be a string");if(!j.has(t))return r("unknown_message_type",`Unknown worker message type: ${t}`);switch(t){case"register":return x(e);case"heartbeat":return F(e);case"taskResult":return b(e);default:return r("unknown_message_type",`Unknown worker message type: ${t}`)}}function ue(e){if(!p(e))return r("invalid_message","Server protocol message must be a JSON object");let t=e.type;if(typeof t!=="string")return r("invalid_message","Server protocol message.type must be a string");if(!A.has(t))return r("unknown_message_type",`Unknown server message type: ${t}`);switch(t){case"registerAck":return H(e);case"registerError":return G(e);case"protocolError":return z(e);case"task":return J(e);case"cancel":return K(e);case"shutdown":return D();default:return r("unknown_message_type",`Unknown server message type: ${t}`)}}export{O as REMOTE_WORKER_MAX_PROTOCOL_VERSION,k as REMOTE_WORKER_MESSAGE_SCHEMAS,M as REMOTE_WORKER_MIN_PROTOCOL_VERSION,W as REMOTE_WORKER_PROTOCOL_JSON_SCHEMA,i as REMOTE_WORKER_PROTOCOL_VERSION,T as REMOTE_WORKER_SUPPORTED_PROTOCOL_VERSIONS,l as isRemoteWorkerJsonValue,ue as parseServerToWorkerMessage,ie as parseWorkerToServerMessage};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lostgradient/weft",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.22.0",
|
|
4
4
|
"description": "A Bun-native durable execution engine with pluggable key-value storage.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"bun",
|
|
@@ -274,7 +274,7 @@
|
|
|
274
274
|
"@electric-sql/pglite": "^0.5.1",
|
|
275
275
|
"@libsql/client": "^0.17.2",
|
|
276
276
|
"@neondatabase/serverless": "^1.1.0",
|
|
277
|
-
"@types/bun": "
|
|
277
|
+
"@types/bun": "1.3.13",
|
|
278
278
|
"@types/pg": "^8.11.0",
|
|
279
279
|
"better-sqlite3": "^12.8.0",
|
|
280
280
|
"chalk": "^5.6.2",
|
|
@@ -290,6 +290,7 @@
|
|
|
290
290
|
"prettier": "^3.8.1",
|
|
291
291
|
"prettier-plugin-organize-imports": "^4.3.0",
|
|
292
292
|
"sort-package-json": "^3.6.1",
|
|
293
|
+
"typescript": "5.8.3",
|
|
293
294
|
"valibot": "^1.4.0"
|
|
294
295
|
},
|
|
295
296
|
"peerDependencies": {
|