@graphrefly/ts 0.0.1 → 0.0.3
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 +197 -117
- package/dist/actions-types-CH-XCU9O.d.cts +657 -0
- package/dist/actions-types-w2iPQTkv.d.ts +657 -0
- package/dist/adapters/index.cjs +5157 -2951
- package/dist/adapters/index.cjs.map +1 -1
- package/dist/adapters/index.d.cts +207 -70
- package/dist/adapters/index.d.ts +207 -70
- package/dist/adapters/index.js +3738 -1688
- package/dist/adapters/index.js.map +1 -1
- package/dist/adapters/nestjs/microservices.cjs +841 -0
- package/dist/adapters/nestjs/microservices.cjs.map +1 -0
- package/dist/adapters/nestjs/microservices.d.cts +45 -0
- package/dist/adapters/nestjs/microservices.d.ts +45 -0
- package/dist/adapters/nestjs/microservices.js +206 -0
- package/dist/adapters/nestjs/microservices.js.map +1 -0
- package/dist/adapters/nestjs/native.cjs +1391 -0
- package/dist/adapters/nestjs/native.cjs.map +1 -0
- package/dist/adapters/nestjs/native.d.cts +111 -0
- package/dist/adapters/nestjs/native.d.ts +111 -0
- package/dist/adapters/nestjs/native.js +577 -0
- package/dist/adapters/nestjs/native.js.map +1 -0
- package/dist/adapters/nestjs/websockets.cjs +924 -0
- package/dist/adapters/nestjs/websockets.cjs.map +1 -0
- package/dist/adapters/nestjs/websockets.d.cts +47 -0
- package/dist/adapters/nestjs/websockets.d.ts +47 -0
- package/dist/adapters/nestjs/websockets.js +286 -0
- package/dist/adapters/nestjs/websockets.js.map +1 -0
- package/dist/adapters/nestjs.cjs +1085 -0
- package/dist/adapters/nestjs.cjs.map +1 -0
- package/dist/adapters/nestjs.d.cts +385 -0
- package/dist/adapters/nestjs.d.ts +385 -0
- package/dist/adapters/nestjs.js +112 -0
- package/dist/adapters/nestjs.js.map +1 -0
- package/dist/adapters/observe-storage.d.cts +3 -3
- package/dist/adapters/observe-storage.d.ts +3 -3
- package/dist/adapters/observe-storage.js +4 -4
- package/dist/adapters/react.cjs.map +1 -1
- package/dist/adapters/react.d.cts +2 -2
- package/dist/adapters/react.d.ts +2 -2
- package/dist/adapters/react.js +1 -1
- package/dist/adapters/solid.cjs.map +1 -1
- package/dist/adapters/solid.d.cts +2 -2
- package/dist/adapters/solid.d.ts +2 -2
- package/dist/adapters/solid.js +1 -1
- package/dist/adapters/svelte.cjs.map +1 -1
- package/dist/adapters/svelte.d.cts +2 -2
- package/dist/adapters/svelte.d.ts +2 -2
- package/dist/adapters/svelte.js +1 -1
- package/dist/adapters/vue.cjs.map +1 -1
- package/dist/adapters/vue.d.cts +2 -2
- package/dist/adapters/vue.d.ts +2 -2
- package/dist/adapters/vue.js +1 -1
- package/dist/{agent-runtime-BesGDZcB.d.ts → agent-runtime-types-core-CKwrBDyi.d.ts} +171 -320
- package/dist/{agent-runtime-DZTJ3C-p.d.cts → agent-runtime-types-core-bfl4m0vM.d.cts} +171 -320
- package/dist/agent-runtime-types-tool-BLPV3azj.d.cts +695 -0
- package/dist/agent-runtime-types-tool-hwqvVqNt.d.ts +695 -0
- package/dist/agentic-memory-retention-CLwI76JK.d.ts +14 -0
- package/dist/agentic-memory-retention-Cz8GR6ie.d.cts +14 -0
- package/dist/{agentic-memory-DfuVZ-lY.d.cts → agentic-memory-types-JDr7MPhh.d.cts} +13 -57
- package/dist/{agentic-memory-BmRCvh0d.d.ts → agentic-memory-types-khYJgzKL.d.ts} +13 -57
- package/dist/{capability-admission-B0BzqAm5.d.cts → capability-admission-B8RNFyaZ.d.cts} +3 -3
- package/dist/{capability-admission-g0mn9hpq.d.ts → capability-admission-Dkw1Xz3r.d.ts} +3 -3
- package/dist/chunk-2KUAG2GZ.js +9693 -0
- package/dist/chunk-2KUAG2GZ.js.map +1 -0
- package/dist/{chunk-CZNV3VXM.js → chunk-3J7UPZL5.js} +11 -11
- package/dist/{chunk-HKK2JD7Z.js → chunk-3LYI6ADX.js} +12 -125
- package/dist/chunk-3LYI6ADX.js.map +1 -0
- package/dist/{chunk-YXMZ2N6J.js → chunk-4M37FH2I.js} +1071 -1025
- package/dist/chunk-4M37FH2I.js.map +1 -0
- package/dist/{chunk-YDSIVHRR.js → chunk-4NWSNI4K.js} +1598 -1584
- package/dist/chunk-4NWSNI4K.js.map +1 -0
- package/dist/{chunk-Z2ANQ6JW.js → chunk-4Q77MMJY.js} +2 -2
- package/dist/{chunk-SS2A464I.js → chunk-54WPEODM.js} +3 -3
- package/dist/chunk-54WPEODM.js.map +1 -0
- package/dist/chunk-6E76H4OU.js +132 -0
- package/dist/chunk-6E76H4OU.js.map +1 -0
- package/dist/chunk-7GOTIIQ7.js +819 -0
- package/dist/chunk-7GOTIIQ7.js.map +1 -0
- package/dist/{chunk-V7CIJE4B.js → chunk-DKFWDTVY.js} +92 -9
- package/dist/chunk-DKFWDTVY.js.map +1 -0
- package/dist/{chunk-FBUU43PM.js → chunk-E4QCH32M.js} +448 -446
- package/dist/chunk-E4QCH32M.js.map +1 -0
- package/dist/{chunk-XKXWK2KP.js → chunk-GXU6WFEJ.js} +1157 -1021
- package/dist/chunk-GXU6WFEJ.js.map +1 -0
- package/dist/{chunk-K3FXTC3I.js → chunk-HJACH5PU.js} +3 -3
- package/dist/{chunk-GTPCOEOZ.js → chunk-IDMLXLLG.js} +3 -3
- package/dist/{chunk-DKP56CSW.js → chunk-JKAYLDQV.js} +2 -2
- package/dist/{chunk-4VLAQHZI.js → chunk-K7FB3JTD.js} +17 -1
- package/dist/chunk-K7FB3JTD.js.map +1 -0
- package/dist/{chunk-43BKLFZU.js → chunk-KFURM6FM.js} +10 -10
- package/dist/{chunk-H75VXTGT.js → chunk-L6LDXRWE.js} +3 -3
- package/dist/{chunk-H75VXTGT.js.map → chunk-L6LDXRWE.js.map} +1 -1
- package/dist/chunk-MCOFHMUU.js +4131 -0
- package/dist/chunk-MCOFHMUU.js.map +1 -0
- package/dist/chunk-MQEQMS7B.js +1009 -0
- package/dist/chunk-MQEQMS7B.js.map +1 -0
- package/dist/chunk-MTELVIYR.js +1421 -0
- package/dist/chunk-MTELVIYR.js.map +1 -0
- package/dist/{chunk-3JR3EDB2.js → chunk-NNDIFUKX.js} +121 -115
- package/dist/chunk-NNDIFUKX.js.map +1 -0
- package/dist/{chunk-2747WN4Y.js → chunk-PUSRRALM.js} +3 -3
- package/dist/{chunk-QFY4AFY4.js → chunk-PVC7WDKI.js} +58 -52
- package/dist/chunk-PVC7WDKI.js.map +1 -0
- package/dist/{chunk-VTHLCFN4.js → chunk-RAHNUYA5.js} +2 -2
- package/dist/chunk-TQPCAIQI.js +612 -0
- package/dist/chunk-TQPCAIQI.js.map +1 -0
- package/dist/{chunk-IXZBUWSP.js → chunk-UEMN5URK.js} +2 -2
- package/dist/chunk-WOS7RJYZ.js +1320 -0
- package/dist/chunk-WOS7RJYZ.js.map +1 -0
- package/dist/{chunk-6PHB5CJS.js → chunk-ZLFRB6FI.js} +2 -2
- package/dist/composition/index.cjs +1228 -1076
- package/dist/composition/index.cjs.map +1 -1
- package/dist/composition/index.d.cts +3 -3
- package/dist/composition/index.d.ts +3 -3
- package/dist/composition/index.js +4 -4
- package/dist/core/index.cjs +1198 -1046
- package/dist/core/index.cjs.map +1 -1
- package/dist/core/index.d.cts +23 -2
- package/dist/core/index.d.ts +23 -2
- package/dist/core/index.js +2 -2
- package/dist/cqrs/index.d.cts +3 -3
- package/dist/cqrs/index.d.ts +3 -3
- package/dist/cqrs/messaging.d.cts +4 -4
- package/dist/cqrs/messaging.d.ts +4 -4
- package/dist/cqrs/work-queue.d.cts +5 -5
- package/dist/cqrs/work-queue.d.ts +5 -5
- package/dist/data-structures/index.cjs +1226 -1074
- package/dist/data-structures/index.cjs.map +1 -1
- package/dist/data-structures/index.d.cts +8 -7
- package/dist/data-structures/index.d.ts +8 -7
- package/dist/data-structures/index.js +6 -5
- package/dist/{describe-DYMw_l1C.d.cts → describe-BumQ-3_0.d.cts} +1 -1
- package/dist/{describe-BpyJuWkw.d.ts → describe-cYr_Z5zm.d.ts} +1 -1
- package/dist/executors/tool-provider-adapters.cjs +3091 -0
- package/dist/executors/tool-provider-adapters.cjs.map +1 -0
- package/dist/executors/tool-provider-adapters.d.cts +174 -0
- package/dist/executors/tool-provider-adapters.d.ts +174 -0
- package/dist/executors/tool-provider-adapters.js +1336 -0
- package/dist/executors/tool-provider-adapters.js.map +1 -0
- package/dist/executors/tool-provider-runtime.cjs +5178 -0
- package/dist/executors/tool-provider-runtime.cjs.map +1 -0
- package/dist/executors/tool-provider-runtime.d.cts +17 -0
- package/dist/executors/tool-provider-runtime.d.ts +17 -0
- package/dist/executors/tool-provider-runtime.js +15 -0
- package/dist/executors/tool-provider-runtime.js.map +1 -0
- package/dist/executors/tool-provider.cjs +6392 -0
- package/dist/executors/tool-provider.cjs.map +1 -0
- package/dist/executors/tool-provider.d.cts +60 -0
- package/dist/executors/tool-provider.d.ts +60 -0
- package/dist/executors/tool-provider.js +89 -0
- package/dist/executors/tool-provider.js.map +1 -0
- package/dist/executors/work-queue.d.cts +6 -6
- package/dist/executors/work-queue.d.ts +6 -6
- package/dist/graph/index.cjs +1499 -1341
- package/dist/graph/index.cjs.map +1 -1
- package/dist/graph/index.d.cts +9 -8
- package/dist/graph/index.d.ts +9 -8
- package/dist/graph/index.js +23 -22
- package/dist/{graph-DCEWh4T2.d.cts → graph-C1C-wb0L.d.cts} +266 -137
- package/dist/{graph-D-1-SQeC.d.ts → graph-CS0b4V9B.d.ts} +266 -137
- package/dist/{index-72VZC0-E.d.cts → index-DLrNopda.d.cts} +151 -10
- package/dist/{index-Bmxeu0nK.d.ts → index-DzJni3_6.d.ts} +151 -10
- package/dist/index.cjs +3397 -3140
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +12 -9
- package/dist/index.d.ts +12 -9
- package/dist/index.js +110 -109
- package/dist/inspection/boundary.d.cts +4 -4
- package/dist/inspection/boundary.d.ts +4 -4
- package/dist/measurements-BWAnochv.d.ts +294 -0
- package/dist/measurements-B_gJfD8h.d.cts +294 -0
- package/dist/messaging/index.cjs +57 -51
- package/dist/messaging/index.cjs.map +1 -1
- package/dist/messaging/index.d.cts +11 -276
- package/dist/messaging/index.d.ts +11 -276
- package/dist/messaging/index.js +1 -1
- package/dist/operators/index.cjs +1228 -1076
- package/dist/operators/index.cjs.map +1 -1
- package/dist/operators/index.d.cts +5 -5
- package/dist/operators/index.d.ts +5 -5
- package/dist/operators/index.js +5 -5
- package/dist/orchestration/index.cjs +8844 -6071
- package/dist/orchestration/index.cjs.map +1 -1
- package/dist/orchestration/index.d.cts +171 -224
- package/dist/orchestration/index.d.ts +171 -224
- package/dist/orchestration/index.js +42 -991
- package/dist/orchestration/index.js.map +1 -1
- package/dist/orchestration/messaging.d.cts +5 -8
- package/dist/orchestration/messaging.d.ts +5 -8
- package/dist/orchestration/work-queue.cjs +1243 -5
- package/dist/orchestration/work-queue.cjs.map +1 -1
- package/dist/orchestration/work-queue.d.cts +121 -10
- package/dist/orchestration/work-queue.d.ts +121 -10
- package/dist/orchestration/work-queue.js +1067 -4
- package/dist/orchestration/work-queue.js.map +1 -1
- package/dist/patterns/event-flow.cjs +6 -20
- package/dist/patterns/event-flow.cjs.map +1 -1
- package/dist/patterns/event-flow.d.cts +4 -4
- package/dist/patterns/event-flow.d.ts +4 -4
- package/dist/patterns/event-flow.js +2 -2
- package/dist/patterns/index.cjs +453 -465
- package/dist/patterns/index.cjs.map +1 -1
- package/dist/patterns/index.d.cts +6 -5
- package/dist/patterns/index.d.ts +6 -5
- package/dist/patterns/index.js +3 -3
- package/dist/process-types-BB7oRhX3.d.cts +200 -0
- package/dist/process-types-QNhyoYJ8.d.ts +200 -0
- package/dist/{reactive-collection-DNV0-gFi.d.cts → reactive-collection-BYlWvtnp.d.cts} +4 -34
- package/dist/{reactive-collection-BAmfrGjd.d.ts → reactive-collection-efOEdGFN.d.ts} +4 -34
- package/dist/{reactive-collection-storage-BNEldDyi.d.cts → reactive-collection-storage-BjoLsoiC.d.cts} +5 -5
- package/dist/{reactive-collection-storage-YZsAQsWK.d.ts → reactive-collection-storage-DwW6UuK_.d.ts} +5 -5
- package/dist/{reactive-map-DRD1LJ2H.d.cts → reactive-map-BHacbIqz.d.cts} +7 -2
- package/dist/{reactive-map-EsDiCmJk.d.ts → reactive-map-DN4Jyqnf.d.ts} +7 -2
- package/dist/render/index.d.cts +2 -2
- package/dist/render/index.d.ts +2 -2
- package/dist/scheduled-readiness-BmqXxnzX.d.ts +91 -0
- package/dist/scheduled-readiness-CYSw7KDE.d.cts +91 -0
- package/dist/semantic-memory-graph-B_LwbM-E.d.cts +30 -0
- package/dist/semantic-memory-graph-rsFNNhwn.d.ts +30 -0
- package/dist/{semantic-memory-graph-DKuNzuWw.d.cts → semantic-memory-graph-types-Y73bbwVI.d.cts} +2 -28
- package/dist/{semantic-memory-graph-uwbwJdhe.d.ts → semantic-memory-graph-types-safmPkuX.d.ts} +2 -28
- package/dist/solutions/index.cjs +6353 -6169
- package/dist/solutions/index.cjs.map +1 -1
- package/dist/solutions/index.d.cts +12 -10
- package/dist/solutions/index.d.ts +12 -10
- package/dist/solutions/index.js +5 -5
- package/dist/solutions/reactive-layout/browser/index.cjs +116 -108
- package/dist/solutions/reactive-layout/browser/index.cjs.map +1 -1
- package/dist/solutions/reactive-layout/browser/index.d.cts +4 -4
- package/dist/solutions/reactive-layout/browser/index.d.ts +4 -4
- package/dist/solutions/reactive-layout/browser/index.js +3 -3
- package/dist/solutions/reactive-layout/index.cjs +3578 -3350
- package/dist/solutions/reactive-layout/index.cjs.map +1 -1
- package/dist/solutions/reactive-layout/index.d.cts +32 -576
- package/dist/solutions/reactive-layout/index.d.ts +32 -576
- package/dist/solutions/reactive-layout/index.js +65 -5
- package/dist/solutions/reactive-layout/node-canvas/index.cjs +127 -117
- package/dist/solutions/reactive-layout/node-canvas/index.cjs.map +1 -1
- package/dist/solutions/reactive-layout/node-canvas/index.d.cts +4 -4
- package/dist/solutions/reactive-layout/node-canvas/index.d.ts +4 -4
- package/dist/solutions/reactive-layout/node-canvas/index.js +3 -3
- package/dist/solutions/reactive-layout/react-native/index.cjs +127 -117
- package/dist/solutions/reactive-layout/react-native/index.cjs.map +1 -1
- package/dist/solutions/reactive-layout/react-native/index.d.cts +4 -4
- package/dist/solutions/reactive-layout/react-native/index.d.ts +4 -4
- package/dist/solutions/reactive-layout/react-native/index.js +3 -3
- package/dist/solutions/reactive-layout/skia/index.cjs +127 -117
- package/dist/solutions/reactive-layout/skia/index.cjs.map +1 -1
- package/dist/solutions/reactive-layout/skia/index.d.cts +4 -4
- package/dist/solutions/reactive-layout/skia/index.d.ts +4 -4
- package/dist/solutions/reactive-layout/skia/index.js +3 -3
- package/dist/solutions/work-item/actions.cjs +1609 -1428
- package/dist/solutions/work-item/actions.cjs.map +1 -1
- package/dist/solutions/work-item/actions.d.cts +23 -184
- package/dist/solutions/work-item/actions.d.ts +23 -184
- package/dist/solutions/work-item/actions.js +1558 -934
- package/dist/solutions/work-item/actions.js.map +1 -1
- package/dist/solutions/work-item/scheduling.cjs +9181 -1838
- package/dist/solutions/work-item/scheduling.cjs.map +1 -1
- package/dist/solutions/work-item/scheduling.d.cts +1763 -328
- package/dist/solutions/work-item/scheduling.d.ts +1763 -328
- package/dist/solutions/work-item/scheduling.js +117 -3
- package/dist/solutions/work-item/work-queue.d.cts +7 -7
- package/dist/solutions/work-item/work-queue.d.ts +7 -7
- package/dist/sources/browser.cjs +1318 -1083
- package/dist/sources/browser.cjs.map +1 -1
- package/dist/sources/browser.d.cts +22 -6
- package/dist/sources/browser.d.ts +22 -6
- package/dist/sources/browser.js +4 -4
- package/dist/sources/browser.js.map +1 -1
- package/dist/sources/index.cjs +1318 -1083
- package/dist/sources/index.cjs.map +1 -1
- package/dist/sources/index.d.cts +4 -4
- package/dist/sources/index.d.ts +4 -4
- package/dist/sources/index.js +4 -4
- package/dist/sources/node.d.cts +3 -3
- package/dist/sources/node.d.ts +3 -3
- package/dist/storage/browser.cjs +16 -0
- package/dist/storage/browser.cjs.map +1 -1
- package/dist/storage/browser.js +3 -3
- package/dist/storage/index.cjs +16 -0
- package/dist/storage/index.cjs.map +1 -1
- package/dist/storage/index.d.cts +5 -4
- package/dist/storage/index.d.ts +5 -4
- package/dist/storage/index.js +6 -6
- package/dist/storage/node.cjs +16 -0
- package/dist/storage/node.cjs.map +1 -1
- package/dist/storage/node.js +3 -3
- package/dist/{store-C-joM4gh.d.ts → store-6_CHF6Ge.d.ts} +1 -1
- package/dist/{store-CNJwmT-h.d.cts → store-BljX8RkQ.d.cts} +1 -1
- package/dist/types-BAw2QVVE.d.cts +274 -0
- package/dist/types-BUbbbh4f.d.cts +34 -0
- package/dist/types-CMnzoL54.d.cts +457 -0
- package/dist/{types-CcPIn7sy.d.cts → types-CTN3XoMl.d.cts} +57 -108
- package/dist/types-CV_ohy5T.d.cts +357 -0
- package/dist/{types-BsJvElYZ.d.ts → types-DChxk1vK.d.ts} +57 -108
- package/dist/types-DRu7SnLV.d.ts +274 -0
- package/dist/types-DeID_FRl.d.ts +34 -0
- package/dist/types-IhKH0hGW.d.ts +357 -0
- package/dist/types-ePlD2uyT.d.ts +457 -0
- package/dist/{work-item-runtime-qaVgsL0T.d.cts → work-item-runtime-types-BTxLskN5.d.cts} +3 -93
- package/dist/{work-item-runtime-C3M79vE9.d.ts → work-item-runtime-types-DAsZbb2y.d.ts} +3 -93
- package/dist/work-queue/index.cjs +957 -953
- package/dist/work-queue/index.cjs.map +1 -1
- package/dist/work-queue/index.d.cts +9 -357
- package/dist/work-queue/index.d.ts +9 -357
- package/dist/work-queue/index.js +957 -953
- package/dist/work-queue/index.js.map +1 -1
- package/package.json +611 -513
- package/dist/chunk-3JR3EDB2.js.map +0 -1
- package/dist/chunk-4VLAQHZI.js.map +0 -1
- package/dist/chunk-6XAIOL3X.js +0 -2407
- package/dist/chunk-6XAIOL3X.js.map +0 -1
- package/dist/chunk-FBUU43PM.js.map +0 -1
- package/dist/chunk-HKK2JD7Z.js.map +0 -1
- package/dist/chunk-PC3BTTBE.js +0 -3217
- package/dist/chunk-PC3BTTBE.js.map +0 -1
- package/dist/chunk-QFY4AFY4.js.map +0 -1
- package/dist/chunk-SS2A464I.js.map +0 -1
- package/dist/chunk-V7CIJE4B.js.map +0 -1
- package/dist/chunk-XKXWK2KP.js.map +0 -1
- package/dist/chunk-YDSIVHRR.js.map +0 -1
- package/dist/chunk-YXMZ2N6J.js.map +0 -1
- /package/dist/{chunk-CZNV3VXM.js.map → chunk-3J7UPZL5.js.map} +0 -0
- /package/dist/{chunk-Z2ANQ6JW.js.map → chunk-4Q77MMJY.js.map} +0 -0
- /package/dist/{chunk-K3FXTC3I.js.map → chunk-HJACH5PU.js.map} +0 -0
- /package/dist/{chunk-GTPCOEOZ.js.map → chunk-IDMLXLLG.js.map} +0 -0
- /package/dist/{chunk-DKP56CSW.js.map → chunk-JKAYLDQV.js.map} +0 -0
- /package/dist/{chunk-43BKLFZU.js.map → chunk-KFURM6FM.js.map} +0 -0
- /package/dist/{chunk-2747WN4Y.js.map → chunk-PUSRRALM.js.map} +0 -0
- /package/dist/{chunk-VTHLCFN4.js.map → chunk-RAHNUYA5.js.map} +0 -0
- /package/dist/{chunk-IXZBUWSP.js.map → chunk-UEMN5URK.js.map} +0 -0
- /package/dist/{chunk-6PHB5CJS.js.map → chunk-ZLFRB6FI.js.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/work-queue/index.ts"],"sourcesContent":["/**\n * MessageBus-backed generic work queue (D299-D324).\n *\n * The queue core is graph-visible facts: commands, records, status, issues. It is intentionally\n * independent from orchestration/WorkItem/executor registries.\n */\n\nimport { depBatch } from \"../ctx/types.js\";\nimport type { DataIssue } from \"../data/index.js\";\nimport type { Graph } from \"../graph/graph.js\";\nimport type {\n\tMessageBus,\n\tMessageBusAvailablePage,\n\tMessageBusCommand,\n\tMessageBusMessage,\n\tMessageBusStatus,\n} from \"../messaging/index.js\";\nimport { attachMessageBusDeferredCommandSink } from \"../messaging/internal.js\";\nimport type { Node } from \"../node/node.js\";\nimport type { LockId, PullDemand } from \"../protocol/messages.js\";\n\nexport interface WorkQueueOptions<_T = unknown> {\n\treadonly queueId: string;\n\treadonly bus: MessageBus;\n\treadonly topic: string;\n\treadonly subscriptionId: string;\n\treadonly from?: \"earliest\" | \"latest\" | number;\n\treadonly name?: string;\n\treadonly now?: () => number;\n\treadonly leaseDurationMs?: number;\n\treadonly retry?: WorkQueueRetryPolicy;\n}\n\nexport interface WorkQueueRetryPolicy {\n\treadonly maxAttempts?: number;\n\treadonly delayMs?: number;\n}\n\ninterface WorkQueueCommandBase {\n\treadonly commandId: string;\n\treadonly queueId?: string;\n\treadonly idempotencyKey?: string;\n\treadonly correlationId?: string;\n\treadonly causationId?: string;\n\treadonly sourceRefs?: readonly string[];\n\treadonly policyRefs?: readonly string[];\n\treadonly actorRefs?: readonly string[];\n\treadonly auditRefs?: readonly string[];\n\treadonly nowMs?: number;\n}\n\nexport type WorkQueueCommand<T = unknown> =\n\t| (WorkQueueCommandBase & {\n\t\t\treadonly kind: \"submit\";\n\t\t\treadonly payload: T;\n\t\t\treadonly workId?: string;\n\t\t\treadonly priority?: number;\n\t\t\treadonly tags?: readonly string[];\n\t\t\treadonly requirements?: readonly string[];\n\t\t\treadonly notBeforeMs?: number;\n\t\t\treadonly deadlineMs?: number;\n\t })\n\t| (WorkQueueCommandBase & {\n\t\t\treadonly kind: \"claim\";\n\t\t\treadonly workerId: string;\n\t\t\treadonly requestedWorkIds?: readonly string[];\n\t\t\treadonly limit?: number;\n\t\t\treadonly leaseDurationMs?: number;\n\t })\n\t| (WorkQueueCommandBase & {\n\t\t\treadonly kind: \"renew-lease\";\n\t\t\treadonly workId: string;\n\t\t\treadonly leaseId: string;\n\t\t\treadonly attempt: number;\n\t\t\treadonly workerId: string;\n\t\t\treadonly leaseDurationMs?: number;\n\t\t\treadonly leaseExpiresAtMs?: number;\n\t })\n\t| (WorkQueueCommandBase & {\n\t\t\treadonly kind: \"release\";\n\t\t\treadonly workId: string;\n\t\t\treadonly leaseId: string;\n\t\t\treadonly attempt: number;\n\t\t\treadonly workerId: string;\n\t\t\treadonly reason?: string;\n\t })\n\t| (WorkQueueCommandBase & {\n\t\t\treadonly kind: \"complete\";\n\t\t\treadonly workId: string;\n\t\t\treadonly leaseId: string;\n\t\t\treadonly attempt: number;\n\t\t\treadonly workerId: string;\n\t\t\treadonly result?: unknown;\n\t })\n\t| (WorkQueueCommandBase & {\n\t\t\treadonly kind: \"fail\";\n\t\t\treadonly workId: string;\n\t\t\treadonly leaseId: string;\n\t\t\treadonly attempt: number;\n\t\t\treadonly workerId: string;\n\t\t\treadonly error?: unknown;\n\t\t\treadonly retryable?: boolean;\n\t })\n\t| (WorkQueueCommandBase & {\n\t\t\treadonly kind: \"cancel\";\n\t\t\treadonly workId: string;\n\t\t\treadonly reason?: string;\n\t })\n\t| (WorkQueueCommandBase & {\n\t\t\treadonly kind: \"schedule\";\n\t\t\treadonly workId: string;\n\t\t\treadonly scheduleId?: string;\n\t\t\treadonly scheduleAtMs?: number;\n\t\t\treadonly runAtMs?: number;\n\t\t\treadonly notBeforeMs: number;\n\t\t\treadonly deadlineMs?: number;\n\t\t\treadonly reason?: string;\n\t })\n\t| (WorkQueueCommandBase & {\n\t\t\treadonly kind: \"expire-leases\";\n\t\t\treadonly workIds?: readonly string[];\n\t\t\treadonly limit?: number;\n\t });\n\ninterface WorkQueueRecordBase {\n\treadonly kind: string;\n\treadonly recordSeq: number;\n\treadonly queueId: string;\n\treadonly workId?: string;\n\treadonly commandId?: string;\n\treadonly idempotencyKey?: string;\n\treadonly correlationId?: string;\n\treadonly causationId?: string;\n\treadonly sourceRefs?: readonly string[];\n\treadonly policyRefs?: readonly string[];\n\treadonly actorRefs?: readonly string[];\n\treadonly auditRefs?: readonly string[];\n\treadonly issueRefs?: readonly string[];\n\treadonly recordedAtMs: number;\n}\n\nexport type WorkQueueRecord<T = unknown> =\n\t| (WorkQueueRecordBase & {\n\t\t\treadonly kind: \"work-admitted\";\n\t\t\treadonly workId: string;\n\t\t\treadonly payload: T;\n\t\t\treadonly messageBus: {\n\t\t\t\treadonly topic: string;\n\t\t\t\treadonly seq: number;\n\t\t\t\treadonly subscriptionId: string;\n\t\t\t};\n\t\t\treadonly priority?: number;\n\t\t\treadonly tags?: readonly string[];\n\t\t\treadonly requirements?: readonly string[];\n\t\t\treadonly notBeforeMs?: number;\n\t\t\treadonly deadlineMs?: number;\n\t })\n\t| (WorkQueueRecordBase & {\n\t\t\treadonly kind: \"work-rejected\" | \"admission-rejected\";\n\t\t\treadonly workId?: string;\n\t\t\treadonly messageBus?: {\n\t\t\t\treadonly topic: string;\n\t\t\t\treadonly seq: number;\n\t\t\t\treadonly subscriptionId: string;\n\t\t\t};\n\t\t\treadonly reason: string;\n\t\t\treadonly existingWorkId?: string;\n\t })\n\t| (WorkQueueRecordBase & {\n\t\t\treadonly kind: \"work-scheduled\";\n\t\t\treadonly workId: string;\n\t\t\treadonly scheduleId?: string;\n\t\t\treadonly scheduleAtMs?: number;\n\t\t\treadonly runAtMs?: number;\n\t\t\treadonly notBeforeMs: number;\n\t\t\treadonly deadlineMs?: number;\n\t\t\treadonly reason?: string;\n\t })\n\t| (WorkQueueRecordBase & {\n\t\t\treadonly kind: \"work-claimed\";\n\t\t\treadonly workId: string;\n\t\t\treadonly leaseId: string;\n\t\t\treadonly attempt: number;\n\t\t\treadonly workerId: string;\n\t\t\treadonly claimedAtMs: number;\n\t\t\treadonly leaseExpiresAtMs: number;\n\t })\n\t| (WorkQueueRecordBase & {\n\t\t\treadonly kind: \"lease-renewed\";\n\t\t\treadonly workId: string;\n\t\t\treadonly leaseId: string;\n\t\t\treadonly attempt: number;\n\t\t\treadonly workerId: string;\n\t\t\treadonly previousLeaseExpiresAtMs: number;\n\t\t\treadonly leaseExpiresAtMs: number;\n\t\t\treadonly renewedAtMs: number;\n\t })\n\t| (WorkQueueRecordBase & {\n\t\t\treadonly kind: \"work-released\";\n\t\t\treadonly workId: string;\n\t\t\treadonly leaseId: string;\n\t\t\treadonly attempt: number;\n\t\t\treadonly workerId: string;\n\t\t\treadonly releasedAtMs: number;\n\t\t\treadonly reason?: string;\n\t })\n\t| (WorkQueueRecordBase & {\n\t\t\treadonly kind: \"lease-expired\";\n\t\t\treadonly workId: string;\n\t\t\treadonly leaseId: string;\n\t\t\treadonly attempt: number;\n\t\t\treadonly workerId: string;\n\t\t\treadonly leaseExpiresAtMs: number;\n\t\t\treadonly expiredAtMs: number;\n\t })\n\t| (WorkQueueRecordBase & {\n\t\t\treadonly kind: \"attempt-completed\" | \"work-completed\";\n\t\t\treadonly workId: string;\n\t\t\treadonly leaseId: string;\n\t\t\treadonly attempt: number;\n\t\t\treadonly workerId: string;\n\t\t\treadonly result?: unknown;\n\t })\n\t| (WorkQueueRecordBase & {\n\t\t\treadonly kind: \"attempt-failed\";\n\t\t\treadonly workId: string;\n\t\t\treadonly leaseId: string;\n\t\t\treadonly attempt: number;\n\t\t\treadonly workerId: string;\n\t\t\treadonly error?: unknown;\n\t\t\treadonly retryable?: boolean;\n\t })\n\t| (WorkQueueRecordBase & {\n\t\t\treadonly kind: \"retry-scheduled\";\n\t\t\treadonly workId: string;\n\t\t\treadonly retryAtMs: number;\n\t\t\treadonly delayMs: number;\n\t\t\treadonly reason?: string;\n\t })\n\t| (WorkQueueRecordBase & {\n\t\t\treadonly kind: \"work-dead-lettered\";\n\t\t\treadonly workId: string;\n\t\t\treadonly reason: string;\n\t\t\treadonly exhaustedAttempts?: number;\n\t })\n\t| (WorkQueueRecordBase & {\n\t\t\treadonly kind: \"work-canceled\";\n\t\t\treadonly workId: string;\n\t\t\treadonly reason?: string;\n\t\t\treadonly canceledAtMs: number;\n\t\t\treadonly canceledLeaseId?: string;\n\t\t\treadonly attempt?: number;\n\t })\n\t| (WorkQueueRecordBase & {\n\t\t\treadonly kind: \"lifecycle-rejected\" | \"admission-deduped\";\n\t\t\treadonly workId?: string;\n\t\t\treadonly messageBus?: {\n\t\t\t\treadonly topic: string;\n\t\t\t\treadonly seq: number;\n\t\t\t\treadonly subscriptionId: string;\n\t\t\t};\n\t\t\treadonly reason: string;\n\t\t\treadonly existingWorkId?: string;\n\t });\n\nexport interface WorkQueueStatus {\n\treadonly kind:\n\t\t| \"command-accepted\"\n\t\t| \"command-rejected\"\n\t\t| \"admission-accepted\"\n\t\t| \"admission-rejected\"\n\t\t| \"admission-retryable\"\n\t\t| \"projection-ready\"\n\t\t| \"projection-partial\"\n\t\t| \"projection-stale\"\n\t\t| \"maintenance-applied\"\n\t\t| \"maintenance-noop\"\n\t\t| \"policy-warning\";\n\treadonly queueId: string;\n\treadonly workId?: string;\n\treadonly commandId?: string;\n\treadonly recordSeq?: number;\n\treadonly asOfRecordSeq?: number;\n\treadonly issueCode?: string;\n\treadonly timestampMs: number;\n\treadonly details?: unknown;\n}\n\nexport interface WorkQueueAvailableItem<T = unknown> {\n\treadonly workId: string;\n\treadonly state: WorkQueueDerivedState;\n\treadonly payload: T;\n\treadonly admissionSeq: number;\n\treadonly priority?: number;\n\treadonly tags?: readonly string[];\n\treadonly requirements?: readonly string[];\n\treadonly notBeforeMs?: number;\n\treadonly retryAtMs?: number;\n\treadonly deadlineMs?: number;\n}\n\nexport interface WorkQueueAvailablePage<T = unknown> {\n\treadonly items: readonly WorkQueueAvailableItem<T>[];\n\treadonly nextAfterWorkId?: string;\n\treadonly nextAfterAdmissionSeq?: number;\n\treadonly hasMore: boolean;\n\treadonly asOfRecordSeq: number;\n}\n\nexport interface WorkQueueWorkSnapshot<T = unknown> {\n\treadonly workId: string;\n\treadonly state?: WorkQueueDerivedState;\n\treadonly payload?: T;\n\treadonly activeLease?: {\n\t\treadonly leaseId: string;\n\t\treadonly attempt: number;\n\t\treadonly workerId: string;\n\t\treadonly leaseExpiresAtMs: number;\n\t};\n\treadonly records: readonly WorkQueueRecord<T>[];\n\treadonly asOfRecordSeq: number;\n}\n\nexport interface WorkQueueDeadLetterPage<T = unknown> {\n\treadonly entries: readonly WorkQueueRecord<T>[];\n\treadonly nextAfterDeadLetterSeq?: number;\n\treadonly hasMore: boolean;\n\treadonly asOfRecordSeq: number;\n}\n\nexport interface WorkQueueAvailableParams {\n\treadonly limit?: number;\n\treadonly afterWorkId?: string;\n\treadonly afterAdmissionSeq?: number;\n\treadonly nowMs?: number;\n\treadonly includeIssues?: boolean;\n}\n\nexport interface WorkQueueDeadLetterParams {\n\treadonly limit?: number;\n\treadonly afterDeadLetterSeq?: number;\n\treadonly afterWorkId?: string;\n}\n\nexport type WorkQueueDerivedState =\n\t| \"scheduled\"\n\t| \"ready\"\n\t| \"leased\"\n\t| \"retry-wait\"\n\t| \"completed\"\n\t| \"canceled\"\n\t| \"dead-lettered\";\n\nexport interface WorkQueueProjection<TPage> {\n\treadonly snapshot: Node<TPage>;\n\treadonly snapshotPullId: LockId;\n\treadonly status: Node<WorkQueueStatus>;\n\treadonly issues: Node<DataIssue>;\n}\n\nexport interface WorkQueueAvailableProjection<T = unknown> {\n\treadonly available: Node<WorkQueueAvailablePage<T>>;\n\treadonly availablePullId: LockId;\n\treadonly status: Node<WorkQueueStatus>;\n\treadonly issues: Node<DataIssue>;\n}\n\nexport interface WorkQueue<T = unknown> {\n\treadonly commands: Node<WorkQueueCommand<T>>;\n\treadonly records: Node<WorkQueueRecord<T>>;\n\treadonly status: Node<WorkQueueStatus>;\n\treadonly issues: Node<DataIssue>;\n\tsubmit(\n\t\tpayload: T,\n\t\topts?: Omit<\n\t\t\tPartial<Extract<WorkQueueCommand<T>, { kind: \"submit\" }>>,\n\t\t\t\"kind\" | \"payload\" | \"commandId\"\n\t\t> & { commandId?: string },\n\t): unknown;\n\tclaim(\n\t\topts: Omit<Extract<WorkQueueCommand<T>, { kind: \"claim\" }>, \"kind\" | \"commandId\"> & {\n\t\t\tcommandId?: string;\n\t\t},\n\t): WorkQueueCommand<T>;\n\trenewLease(\n\t\topts: Omit<Extract<WorkQueueCommand<T>, { kind: \"renew-lease\" }>, \"kind\" | \"commandId\"> & {\n\t\t\tcommandId?: string;\n\t\t},\n\t): WorkQueueCommand<T>;\n\trelease(\n\t\topts: Omit<Extract<WorkQueueCommand<T>, { kind: \"release\" }>, \"kind\" | \"commandId\"> & {\n\t\t\tcommandId?: string;\n\t\t},\n\t): WorkQueueCommand<T>;\n\tcomplete(\n\t\topts: Omit<Extract<WorkQueueCommand<T>, { kind: \"complete\" }>, \"kind\" | \"commandId\"> & {\n\t\t\tcommandId?: string;\n\t\t},\n\t): WorkQueueCommand<T>;\n\tfail(\n\t\topts: Omit<Extract<WorkQueueCommand<T>, { kind: \"fail\" }>, \"kind\" | \"commandId\"> & {\n\t\t\tcommandId?: string;\n\t\t},\n\t): WorkQueueCommand<T>;\n\tcancel(\n\t\topts: Omit<Extract<WorkQueueCommand<T>, { kind: \"cancel\" }>, \"kind\" | \"commandId\"> & {\n\t\t\tcommandId?: string;\n\t\t},\n\t): WorkQueueCommand<T>;\n\tschedule(\n\t\topts: Omit<Extract<WorkQueueCommand<T>, { kind: \"schedule\" }>, \"kind\" | \"commandId\"> & {\n\t\t\tcommandId?: string;\n\t\t},\n\t): WorkQueueCommand<T>;\n\texpireLeases(\n\t\topts?: Omit<Extract<WorkQueueCommand<T>, { kind: \"expire-leases\" }>, \"kind\" | \"commandId\"> & {\n\t\t\tcommandId?: string;\n\t\t},\n\t): WorkQueueCommand<T>;\n\tavailable(opts?: { name?: string }): WorkQueueAvailableProjection<T>;\n\twork(workId: string, opts?: { name?: string }): WorkQueueProjection<WorkQueueWorkSnapshot<T>>;\n\tdeadLetter(opts?: { name?: string }): WorkQueueProjection<WorkQueueDeadLetterPage<T>>;\n}\n\ntype QueueEvent<T> =\n\t| { readonly kind: \"record\"; readonly record: WorkQueueRecord<T> }\n\t| { readonly kind: \"status\"; readonly status: WorkQueueStatus }\n\t| { readonly kind: \"issue\"; readonly issue: DataIssue };\n\ntype WorkQueueRecordDraft = {\n\treadonly kind: string;\n\treadonly recordedAtMs: number;\n\treadonly [key: string]: unknown;\n};\n\ninterface WorkState<T> {\n\tworkId: string;\n\tpayload: T;\n\tstate: WorkQueueDerivedState;\n\tadmissionSeq: number;\n\tpriority?: number;\n\ttags?: readonly string[];\n\trequirements?: readonly string[];\n\tnotBeforeMs?: number;\n\tretryAtMs?: number;\n\tdeadlineMs?: number;\n\tattempt: number;\n\tleaseId?: string;\n\tworkerId?: string;\n\tleaseExpiresAtMs?: number;\n\tterminalRecordSeq?: number;\n}\n\ninterface RuntimeState<T> {\n\trecordSeq: number;\n\tleaseSeq: number;\n\tworks: Map<string, WorkState<T>>;\n\tsourceSeqs: Set<string>;\n\tcommandIds: Set<string>;\n\tidempotencyKeys: Set<string>;\n\trecords: WorkQueueRecord<T>[];\n\tdeadLetters: WorkQueueRecord<T>[];\n}\n\nexport function workQueue<T = unknown>(graph: Graph, opts: WorkQueueOptions<T>): WorkQueue<T> {\n\tassertNonEmpty(opts.queueId, \"workQueue.queueId\");\n\tassertNonEmpty(opts.topic, \"workQueue.topic\");\n\tassertNonEmpty(opts.subscriptionId, \"workQueue.subscriptionId\");\n\tconst name = opts.name ?? `workQueue/${opts.queueId}`;\n\tconst now = opts.now ?? Date.now;\n\tconst leaseDurationMs = opts.leaseDurationMs ?? 30_000;\n\tconst retry = opts.retry ?? { maxAttempts: 3, delayMs: 0 };\n\tconst admission = opts.bus.subscription<T>({\n\t\ttopic: opts.topic,\n\t\tsubscriptionId: opts.subscriptionId,\n\t\tfrom: opts.from ?? \"earliest\",\n\t\tname: `${name}/admission`,\n\t});\n\tconst commands = graph.node<WorkQueueCommand<T>>(\n\t\t[],\n\t\t(ctx) => {\n\t\t\tfor (const command of depBatch(ctx, 0) ?? []) ctx.down([[\"DATA\", command]]);\n\t\t},\n\t\t{\n\t\t\tname: `${name}/commands`,\n\t\t\tfactory: \"workQueueCommands\",\n\t\t\tcompleteWhenDepsComplete: false,\n\t\t\terrorWhenDepsError: false,\n\t\t},\n\t);\n\tconst state: RuntimeState<T> = {\n\t\trecordSeq: 0,\n\t\tleaseSeq: 0,\n\t\tworks: new Map(),\n\t\tsourceSeqs: new Set(),\n\t\tcommandIds: new Set(),\n\t\tidempotencyKeys: new Set(),\n\t\trecords: [],\n\t\tdeadLetters: [],\n\t};\n\tconst admissionKick = graph.node<\"poll\">([], null, {\n\t\tname: `${name}/admissionKick`,\n\t\tfactory: \"workQueueAdmissionKick\",\n\t\tinitial: \"poll\",\n\t\tcompleteWhenDepsComplete: false,\n\t\terrorWhenDepsError: false,\n\t});\n\tconst admissionPages = graph.node<MessageBusAvailablePage<T>>(\n\t\t[admission.available, admissionKick, opts.bus.messages, opts.bus.status],\n\t\t(ctx) => {\n\t\t\tfor (const page of depBatch(ctx, 0) ?? []) {\n\t\t\t\tctx.down([[\"DATA\", page as MessageBusAvailablePage<T>]]);\n\t\t\t}\n\t\t\tlet shouldPull = (depBatch(ctx, 1)?.length ?? 0) > 0;\n\t\t\tfor (const message of depBatch(ctx, 2) ?? []) {\n\t\t\t\tif ((message as MessageBusMessage<T>).topic === opts.topic) shouldPull = true;\n\t\t\t}\n\t\t\tfor (const status of depBatch(ctx, 3) ?? []) {\n\t\t\t\tif (shouldPollAdmission(status as MessageBusStatus, opts.topic, opts.subscriptionId)) {\n\t\t\t\t\tshouldPull = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (shouldPull) {\n\t\t\t\tctx.upNext([[\"PULL\", { pullId: admission.availablePullId, params: { limit: 100 } }]], 0);\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tname: `${name}/admissionPages`,\n\t\t\tfactory: \"workQueueAdmissionPages\",\n\t\t\tpartial: true,\n\t\t\tcompleteWhenDepsComplete: false,\n\t\t\terrorWhenDepsError: false,\n\t\t},\n\t);\n\tconst runtime = graph.node<QueueEvent<T>>(\n\t\t[commands, admissionPages],\n\t\t(ctx) => {\n\t\t\tfor (const page of depBatch(ctx, 1) ?? []) {\n\t\t\t\tfor (const msg of (page as MessageBusAvailablePage<T>).messages) {\n\t\t\t\t\tfor (const event of admitMessage(opts, state, msg, now())) ctx.down([[\"DATA\", event]]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (const command of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst commandTime = commandNowMs(command as WorkQueueCommand<T>, now());\n\t\t\t\tfor (const event of reduceQueueCommand(\n\t\t\t\t\topts,\n\t\t\t\t\tstate,\n\t\t\t\t\tcommand as WorkQueueCommand<T>,\n\t\t\t\t\tcommandTime,\n\t\t\t\t\tleaseDurationMs,\n\t\t\t\t\tretry,\n\t\t\t\t)) {\n\t\t\t\t\tctx.down([[\"DATA\", event]]);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tname: `${name}/runtime`,\n\t\t\tfactory: \"workQueueRuntime\",\n\t\t\tpartial: true,\n\t\t\tcompleteWhenDepsComplete: false,\n\t\t\terrorWhenDepsError: false,\n\t\t},\n\t);\n\tconst records = graph.node<WorkQueueRecord<T>>(\n\t\t[runtime],\n\t\t(ctx) => {\n\t\t\tfor (const event of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst typed = event as QueueEvent<T>;\n\t\t\t\tif (typed.kind === \"record\") ctx.down([[\"DATA\", typed.record]]);\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tname: `${name}/records`,\n\t\t\tfactory: \"workQueueRecords\",\n\t\t\tcompleteWhenDepsComplete: false,\n\t\t\terrorWhenDepsError: false,\n\t\t},\n\t);\n\tconst status = graph.node<WorkQueueStatus>(\n\t\t[runtime],\n\t\t(ctx) => {\n\t\t\tfor (const event of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst typed = event as QueueEvent<T>;\n\t\t\t\tif (typed.kind === \"status\") ctx.down([[\"DATA\", typed.status]]);\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tname: `${name}/status`,\n\t\t\tfactory: \"workQueueStatus\",\n\t\t\tcompleteWhenDepsComplete: false,\n\t\t\terrorWhenDepsError: false,\n\t\t},\n\t);\n\tconst issues = graph.node<DataIssue>(\n\t\t[runtime],\n\t\t(ctx) => {\n\t\t\tfor (const event of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst typed = event as QueueEvent<T>;\n\t\t\t\tif (typed.kind === \"issue\") ctx.down([[\"DATA\", typed.issue]]);\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tname: `${name}/issues`,\n\t\t\tfactory: \"workQueueIssues\",\n\t\t\tcompleteWhenDepsComplete: false,\n\t\t\terrorWhenDepsError: false,\n\t\t},\n\t);\n\tconst admissionAckCommands = graph.node<MessageBusCommand>(\n\t\t[records],\n\t\t(ctx) => {\n\t\t\tfor (const record of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst command = admissionAckCommand(record as WorkQueueRecord<T>);\n\t\t\t\tif (command !== undefined) ctx.down([[\"DATA\", command]]);\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tname: `${name}/admissionAckCommands`,\n\t\t\tfactory: \"workQueueAdmissionAckCommands\",\n\t\t\tcompleteWhenDepsComplete: false,\n\t\t\terrorWhenDepsError: false,\n\t\t},\n\t);\n\tattachMessageBusDeferredCommandSink(graph, opts.bus, admissionAckCommands);\n\tgraph.retain(runtime, { reason: `${name}.workQueue.runtime` });\n\tconst queue: WorkQueue<T> = {\n\t\tcommands,\n\t\trecords,\n\t\tstatus,\n\t\tissues,\n\t\tsubmit(payload, submitOpts = {}) {\n\t\t\tconst command = opts.bus.publish(\n\t\t\t\topts.topic,\n\t\t\t\tsubmitPayload(payload, {\n\t\t\t\t\t...(submitOpts.workId === undefined ? {} : { workId: submitOpts.workId }),\n\t\t\t\t\t...(submitOpts.priority === undefined ? {} : { priority: submitOpts.priority }),\n\t\t\t\t\t...(submitOpts.tags === undefined ? {} : { tags: submitOpts.tags }),\n\t\t\t\t\t...(submitOpts.requirements === undefined\n\t\t\t\t\t\t? {}\n\t\t\t\t\t\t: { requirements: submitOpts.requirements }),\n\t\t\t\t\t...(submitOpts.notBeforeMs === undefined ? {} : { notBeforeMs: submitOpts.notBeforeMs }),\n\t\t\t\t\t...(submitOpts.deadlineMs === undefined ? {} : { deadlineMs: submitOpts.deadlineMs }),\n\t\t\t\t}),\n\t\t\t\t{\n\t\t\t\t\tcommandId: submitOpts.commandId ?? nextCommandId(opts.queueId, \"submit\"),\n\t\t\t\t\tidempotencyKey: submitOpts.idempotencyKey,\n\t\t\t\t},\n\t\t\t);\n\t\t\treturn command;\n\t\t},\n\t\tclaim(claimOpts) {\n\t\t\treturn publishQueueCommand(commands, {\n\t\t\t\t...claimOpts,\n\t\t\t\tkind: \"claim\",\n\t\t\t\tcommandId: claimOpts.commandId ?? nextCommandId(opts.queueId, \"claim\"),\n\t\t\t} as WorkQueueCommand<T>);\n\t\t},\n\t\trenewLease(renewOpts) {\n\t\t\treturn publishQueueCommand(commands, {\n\t\t\t\t...renewOpts,\n\t\t\t\tkind: \"renew-lease\",\n\t\t\t\tcommandId: renewOpts.commandId ?? nextCommandId(opts.queueId, \"renew\"),\n\t\t\t} as WorkQueueCommand<T>);\n\t\t},\n\t\trelease(releaseOpts) {\n\t\t\treturn publishQueueCommand(commands, {\n\t\t\t\t...releaseOpts,\n\t\t\t\tkind: \"release\",\n\t\t\t\tcommandId: releaseOpts.commandId ?? nextCommandId(opts.queueId, \"release\"),\n\t\t\t} as WorkQueueCommand<T>);\n\t\t},\n\t\tcomplete(completeOpts) {\n\t\t\treturn publishQueueCommand(commands, {\n\t\t\t\t...completeOpts,\n\t\t\t\tkind: \"complete\",\n\t\t\t\tcommandId: completeOpts.commandId ?? nextCommandId(opts.queueId, \"complete\"),\n\t\t\t} as WorkQueueCommand<T>);\n\t\t},\n\t\tfail(failOpts) {\n\t\t\treturn publishQueueCommand(commands, {\n\t\t\t\t...failOpts,\n\t\t\t\tkind: \"fail\",\n\t\t\t\tcommandId: failOpts.commandId ?? nextCommandId(opts.queueId, \"fail\"),\n\t\t\t} as WorkQueueCommand<T>);\n\t\t},\n\t\tcancel(cancelOpts) {\n\t\t\treturn publishQueueCommand(commands, {\n\t\t\t\t...cancelOpts,\n\t\t\t\tkind: \"cancel\",\n\t\t\t\tcommandId: cancelOpts.commandId ?? nextCommandId(opts.queueId, \"cancel\"),\n\t\t\t} as WorkQueueCommand<T>);\n\t\t},\n\t\tschedule(scheduleOpts) {\n\t\t\treturn publishQueueCommand(commands, {\n\t\t\t\t...scheduleOpts,\n\t\t\t\tkind: \"schedule\",\n\t\t\t\tcommandId: scheduleOpts.commandId ?? nextCommandId(opts.queueId, \"schedule\"),\n\t\t\t} as WorkQueueCommand<T>);\n\t\t},\n\t\texpireLeases(expireOpts = {}) {\n\t\t\treturn publishQueueCommand(commands, {\n\t\t\t\t...expireOpts,\n\t\t\t\tkind: \"expire-leases\",\n\t\t\t\tcommandId: expireOpts.commandId ?? nextCommandId(opts.queueId, \"expire\"),\n\t\t\t} as WorkQueueCommand<T>);\n\t\t},\n\t\tavailable(projectionOpts = {}) {\n\t\t\tconst availablePullId = Symbol(`${name}/available`);\n\t\t\tconst available = graph.node<WorkQueueAvailablePage<T>>(\n\t\t\t\t[records],\n\t\t\t\t(ctx) => {\n\t\t\t\t\tconst params = pullParams<WorkQueueAvailableParams>(ctx.pull);\n\t\t\t\t\tctx.down([[\"DATA\", availablePage(state, params)]]);\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: projectionOpts.name ?? `${name}/available`,\n\t\t\t\t\tfactory: \"workQueueAvailable\",\n\t\t\t\t\tpullId: availablePullId,\n\t\t\t\t\tpartial: true,\n\t\t\t\t\tcompleteWhenDepsComplete: false,\n\t\t\t\t\terrorWhenDepsError: false,\n\t\t\t\t},\n\t\t\t);\n\t\t\treturn { available, availablePullId, status, issues };\n\t\t},\n\t\twork(workId, projectionOpts = {}) {\n\t\t\tconst snapshotPullId = Symbol(`${name}/${workId}/snapshot`);\n\t\t\tconst snapshot = graph.node<WorkQueueWorkSnapshot<T>>(\n\t\t\t\t[records],\n\t\t\t\t(ctx) => {\n\t\t\t\t\tctx.down([[\"DATA\", workSnapshot(state, workId)]]);\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: projectionOpts.name ?? `${name}/${workId}`,\n\t\t\t\t\tfactory: \"workQueueWorkSnapshot\",\n\t\t\t\t\tpullId: snapshotPullId,\n\t\t\t\t\tpartial: true,\n\t\t\t\t\tcompleteWhenDepsComplete: false,\n\t\t\t\t\terrorWhenDepsError: false,\n\t\t\t\t},\n\t\t\t);\n\t\t\treturn { snapshot, snapshotPullId, status, issues };\n\t\t},\n\t\tdeadLetter(projectionOpts = {}) {\n\t\t\tconst snapshotPullId = Symbol(`${name}/deadLetter`);\n\t\t\tconst snapshot = graph.node<WorkQueueDeadLetterPage<T>>(\n\t\t\t\t[records],\n\t\t\t\t(ctx) => {\n\t\t\t\t\tconst params = pullParams<WorkQueueDeadLetterParams>(ctx.pull);\n\t\t\t\t\tctx.down([[\"DATA\", deadLetterPage(state, params)]]);\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: projectionOpts.name ?? `${name}/deadLetter`,\n\t\t\t\t\tfactory: \"workQueueDeadLetter\",\n\t\t\t\t\tpullId: snapshotPullId,\n\t\t\t\t\tpartial: true,\n\t\t\t\t\tcompleteWhenDepsComplete: false,\n\t\t\t\t\terrorWhenDepsError: false,\n\t\t\t\t},\n\t\t\t);\n\t\t\treturn { snapshot, snapshotPullId, status, issues };\n\t\t},\n\t};\n\treturn queue;\n}\n\nfunction shouldPollAdmission(\n\tstatus: MessageBusStatus,\n\ttopic: string,\n\tsubscriptionId: string,\n): boolean {\n\tif (status.topic !== topic) return false;\n\tif (status.kind === \"message-published\" || status.kind === \"retention-trimmed\") return true;\n\treturn (\n\t\tstatus.subscriptionId === subscriptionId &&\n\t\t(status.kind === \"subscription-acked\" || status.kind === \"subscription-sought\")\n\t);\n}\n\nfunction admissionAckCommand<T>(record: WorkQueueRecord<T>): MessageBusCommand | undefined {\n\tconst messageBus = admissionMessageBus(record);\n\tif (messageBus === undefined) return undefined;\n\treturn {\n\t\tkind: \"ack\",\n\t\ttopic: messageBus.topic,\n\t\tsubscriptionId: messageBus.subscriptionId,\n\t\tseq: messageBus.seq,\n\t\tcommandId: `${record.queueId}:admission-ack:${messageBus.topic}:${messageBus.subscriptionId}:${messageBus.seq}`,\n\t};\n}\n\nfunction admissionMessageBus<T>(\n\trecord: WorkQueueRecord<T>,\n): { readonly topic: string; readonly seq: number; readonly subscriptionId: string } | undefined {\n\treturn \"messageBus\" in record ? record.messageBus : undefined;\n}\n\nfunction admitMessage<T>(\n\topts: WorkQueueOptions<T>,\n\tstate: RuntimeState<T>,\n\tmessage: MessageBusMessage<T>,\n\tnowMs: number,\n): QueueEvent<T>[] {\n\tconst source = `${message.topic}:${message.seq}`;\n\tif (state.sourceSeqs.has(source)) return [];\n\tstate.sourceSeqs.add(source);\n\tconst submitted = decodeSubmittedPayload(message.payload);\n\tconst payload = submitted.payload as T;\n\tconst payloadRecord = payloadAsRecord(submitted.meta);\n\tconst workId =\n\t\ttypeof payloadRecord.workId === \"string\"\n\t\t\t? payloadRecord.workId\n\t\t\t: `${opts.queueId}:${message.topic}:${message.seq}`;\n\tif (state.works.has(workId)) {\n\t\tconst record = appendRecord(state, opts.queueId, {\n\t\t\tkind: \"admission-deduped\",\n\t\t\tworkId,\n\t\t\tmessageBus: { topic: message.topic, seq: message.seq, subscriptionId: opts.subscriptionId },\n\t\t\treason: \"duplicate-work\",\n\t\t\texistingWorkId: workId,\n\t\t\trecordedAtMs: nowMs,\n\t\t});\n\t\treturn [\n\t\t\trecordEvent(record),\n\t\t\tstatusEvent(opts.queueId, \"admission-rejected\", nowMs, {\n\t\t\t\tworkId,\n\t\t\t\trecordSeq: record.recordSeq,\n\t\t\t\tissueCode: \"duplicate-work\",\n\t\t\t}),\n\t\t];\n\t}\n\tconst work: WorkState<T> = {\n\t\tworkId,\n\t\tpayload,\n\t\tstate:\n\t\t\ttypeof payloadRecord.notBeforeMs === \"number\" && payloadRecord.notBeforeMs > nowMs\n\t\t\t\t? \"scheduled\"\n\t\t\t\t: \"ready\",\n\t\tadmissionSeq: message.seq,\n\t\tpriority: numberOrUndefined(payloadRecord.priority),\n\t\ttags: stringArrayOrUndefined(payloadRecord.tags),\n\t\trequirements: stringArrayOrUndefined(payloadRecord.requirements),\n\t\tnotBeforeMs: numberOrUndefined(payloadRecord.notBeforeMs),\n\t\tdeadlineMs: numberOrUndefined(payloadRecord.deadlineMs),\n\t\tattempt: 0,\n\t};\n\tstate.works.set(workId, work);\n\tconst record = appendRecord<T>(state, opts.queueId, {\n\t\tkind: \"work-admitted\",\n\t\tworkId,\n\t\tpayload,\n\t\tmessageBus: { topic: message.topic, seq: message.seq, subscriptionId: opts.subscriptionId },\n\t\tpriority: work.priority,\n\t\ttags: work.tags,\n\t\trequirements: work.requirements,\n\t\tnotBeforeMs: work.notBeforeMs,\n\t\tdeadlineMs: work.deadlineMs,\n\t\trecordedAtMs: nowMs,\n\t});\n\treturn [\n\t\trecordEvent(record),\n\t\tstatusEvent(opts.queueId, \"admission-accepted\", nowMs, { workId, recordSeq: record.recordSeq }),\n\t];\n}\n\nfunction reduceQueueCommand<T>(\n\topts: WorkQueueOptions<T>,\n\tstate: RuntimeState<T>,\n\tcommand: WorkQueueCommand<T>,\n\tnowMs: number,\n\tleaseDurationMs: number,\n\tretry: WorkQueueRetryPolicy,\n): QueueEvent<T>[] {\n\tconst invalid = validateQueueCommand(opts.queueId, command);\n\tif (invalid !== undefined)\n\t\treturn rejectQueueCommand<T>(opts.queueId, command, invalid.code, invalid.message, nowMs);\n\tif (state.commandIds.has(command.commandId)) {\n\t\treturn rejectQueueCommand<T>(\n\t\t\topts.queueId,\n\t\t\tcommand,\n\t\t\t\"duplicate-command\",\n\t\t\t\"duplicate commandId\",\n\t\t\tnowMs,\n\t\t);\n\t}\n\tif (command.idempotencyKey !== undefined && state.idempotencyKeys.has(command.idempotencyKey)) {\n\t\treturn rejectQueueCommand<T>(\n\t\t\topts.queueId,\n\t\t\tcommand,\n\t\t\t\"duplicate-command\",\n\t\t\t\"duplicate idempotencyKey\",\n\t\t\tnowMs,\n\t\t);\n\t}\n\tstate.commandIds.add(command.commandId);\n\tif (command.idempotencyKey !== undefined) state.idempotencyKeys.add(command.idempotencyKey);\n\tswitch (command.kind) {\n\t\tcase \"claim\":\n\t\t\treturn claimWork(opts.queueId, state, command, nowMs, leaseDurationMs);\n\t\tcase \"renew-lease\":\n\t\t\treturn renewLease(opts.queueId, state, command, nowMs, leaseDurationMs);\n\t\tcase \"release\":\n\t\t\treturn releaseWork(opts.queueId, state, command, nowMs);\n\t\tcase \"complete\":\n\t\t\treturn completeWork(opts.queueId, state, command, nowMs);\n\t\tcase \"fail\":\n\t\t\treturn failWork(opts.queueId, state, command, nowMs, retry);\n\t\tcase \"cancel\":\n\t\t\treturn cancelWork(opts.queueId, state, command, nowMs);\n\t\tcase \"schedule\":\n\t\t\treturn scheduleWork(opts.queueId, state, command, nowMs);\n\t\tcase \"expire-leases\":\n\t\t\treturn expireLeases(opts.queueId, state, command, nowMs);\n\t\tcase \"submit\":\n\t\t\treturn [\n\t\t\t\tstatusEvent(opts.queueId, \"command-accepted\", nowMs, {\n\t\t\t\t\tcommandId: command.commandId,\n\t\t\t\t\tdetails: { submitUsesMessageBus: true },\n\t\t\t\t}),\n\t\t\t];\n\t}\n}\n\nfunction claimWork<T>(\n\tqueueId: string,\n\tstate: RuntimeState<T>,\n\tcommand: Extract<WorkQueueCommand<T>, { kind: \"claim\" }>,\n\tnowMs: number,\n\tdefaultLeaseDurationMs: number,\n): QueueEvent<T>[] {\n\tconst limit = positiveLimit(command.limit ?? command.requestedWorkIds?.length ?? 1);\n\tconst requested = new Set(command.requestedWorkIds ?? []);\n\tconst events: QueueEvent<T>[] = [];\n\tfor (const work of [...state.works.values()]\n\t\t.filter((entry) => (requested.size === 0 ? true : requested.has(entry.workId)))\n\t\t.filter((entry) => isExpiredLease(entry, nowMs))) {\n\t\tevents.push(...materializeLeaseExpired(queueId, state, work, command.commandId, nowMs));\n\t}\n\tconst candidates = [...state.works.values()]\n\t\t.filter((work) => (requested.size === 0 ? true : requested.has(work.workId)))\n\t\t.filter((work) => isReady(work, nowMs))\n\t\t.sort((a, b) => a.admissionSeq - b.admissionSeq)\n\t\t.slice(0, limit);\n\tif (candidates.length === 0)\n\t\treturn [\n\t\t\t...events,\n\t\t\t...(requested.size === 0\n\t\t\t\t? rejectQueueCommand<T>(queueId, command, \"not-ready\", \"no ready work\", nowMs)\n\t\t\t\t: claimMissEvents(queueId, state, command, requested, new Set(), nowMs)),\n\t\t];\n\tconst claimed = new Set<string>();\n\tfor (const work of candidates) {\n\t\tclaimed.add(work.workId);\n\t\twork.state = \"leased\";\n\t\twork.attempt += 1;\n\t\twork.leaseId = `${work.workId}:lease:${++state.leaseSeq}`;\n\t\twork.workerId = command.workerId;\n\t\twork.leaseExpiresAtMs = nowMs + (command.leaseDurationMs ?? defaultLeaseDurationMs);\n\t\tconst record = appendRecord(state, queueId, {\n\t\t\tkind: \"work-claimed\",\n\t\t\tworkId: work.workId,\n\t\t\tcommandId: command.commandId,\n\t\t\tleaseId: work.leaseId,\n\t\t\tattempt: work.attempt,\n\t\t\tworkerId: command.workerId,\n\t\t\tclaimedAtMs: nowMs,\n\t\t\tleaseExpiresAtMs: work.leaseExpiresAtMs,\n\t\t\trecordedAtMs: nowMs,\n\t\t});\n\t\tevents.push(\n\t\t\trecordEvent(record),\n\t\t\tstatusEvent(queueId, \"command-accepted\", nowMs, {\n\t\t\t\tworkId: work.workId,\n\t\t\t\tcommandId: command.commandId,\n\t\t\t\trecordSeq: record.recordSeq,\n\t\t\t}),\n\t\t);\n\t}\n\tif (requested.size > 0) {\n\t\tevents.push(...claimMissEvents(queueId, state, command, requested, claimed, nowMs));\n\t}\n\treturn events;\n}\n\nfunction claimMissEvents<T>(\n\tqueueId: string,\n\tstate: RuntimeState<T>,\n\tcommand: Extract<WorkQueueCommand<T>, { kind: \"claim\" }>,\n\trequested: ReadonlySet<string>,\n\tclaimed: ReadonlySet<string>,\n\tnowMs: number,\n): QueueEvent<T>[] {\n\tconst events: QueueEvent<T>[] = [];\n\tfor (const workId of requested) {\n\t\tif (claimed.has(workId)) continue;\n\t\tconst work = state.works.get(workId);\n\t\tif (work === undefined) {\n\t\t\tevents.push(\n\t\t\t\t...rejectQueueCommand<T>(\n\t\t\t\t\tqueueId,\n\t\t\t\t\tcommand,\n\t\t\t\t\t\"unknown-work\",\n\t\t\t\t\t`unknown work '${workId}'`,\n\t\t\t\t\tnowMs,\n\t\t\t\t),\n\t\t\t);\n\t\t\tcontinue;\n\t\t}\n\t\tif (isReady(work, nowMs)) continue;\n\t\tconst code = isTerminal(work.state)\n\t\t\t? \"terminal-work\"\n\t\t\t: work.state === \"leased\"\n\t\t\t\t? \"already-leased\"\n\t\t\t\t: \"not-ready\";\n\t\tevents.push(\n\t\t\t...rejectQueueCommand<T>(\n\t\t\t\tqueueId,\n\t\t\t\tcommand,\n\t\t\t\tcode,\n\t\t\t\t`requested work '${workId}' is not claimable`,\n\t\t\t\tnowMs,\n\t\t\t),\n\t\t);\n\t}\n\treturn events;\n}\n\nfunction renewLease<T>(\n\tqueueId: string,\n\tstate: RuntimeState<T>,\n\tcommand: Extract<WorkQueueCommand<T>, { kind: \"renew-lease\" }>,\n\tnowMs: number,\n\tdefaultLeaseDurationMs: number,\n): QueueEvent<T>[] {\n\tconst checked = currentLease(queueId, state, command, nowMs);\n\tif (\"issue\" in checked) return [checked.issue];\n\tif (\"events\" in checked) return checked.events;\n\tconst work = checked.work;\n\tconst previous = work.leaseExpiresAtMs as number;\n\twork.leaseExpiresAtMs =\n\t\tcommand.leaseExpiresAtMs ?? nowMs + (command.leaseDurationMs ?? defaultLeaseDurationMs);\n\tconst record = appendRecord(state, queueId, {\n\t\tkind: \"lease-renewed\",\n\t\tworkId: work.workId,\n\t\tcommandId: command.commandId,\n\t\tleaseId: command.leaseId,\n\t\tattempt: command.attempt,\n\t\tworkerId: command.workerId,\n\t\tpreviousLeaseExpiresAtMs: previous,\n\t\tleaseExpiresAtMs: work.leaseExpiresAtMs,\n\t\trenewedAtMs: nowMs,\n\t\trecordedAtMs: nowMs,\n\t});\n\treturn [\n\t\trecordEvent(record),\n\t\tstatusEvent(queueId, \"command-accepted\", nowMs, {\n\t\t\tworkId: work.workId,\n\t\t\tcommandId: command.commandId,\n\t\t\trecordSeq: record.recordSeq,\n\t\t}),\n\t];\n}\n\nfunction releaseWork<T>(\n\tqueueId: string,\n\tstate: RuntimeState<T>,\n\tcommand: Extract<WorkQueueCommand<T>, { kind: \"release\" }>,\n\tnowMs: number,\n): QueueEvent<T>[] {\n\tconst checked = currentLease(queueId, state, command, nowMs);\n\tif (\"issue\" in checked) return [checked.issue];\n\tif (\"events\" in checked) return checked.events;\n\tconst work = checked.work;\n\twork.state = \"ready\";\n\twork.leaseId = undefined;\n\twork.workerId = undefined;\n\twork.leaseExpiresAtMs = undefined;\n\tconst record = appendRecord(state, queueId, {\n\t\tkind: \"work-released\",\n\t\tworkId: work.workId,\n\t\tcommandId: command.commandId,\n\t\tleaseId: command.leaseId,\n\t\tattempt: command.attempt,\n\t\tworkerId: command.workerId,\n\t\treleasedAtMs: nowMs,\n\t\treason: command.reason,\n\t\trecordedAtMs: nowMs,\n\t});\n\treturn [\n\t\trecordEvent(record),\n\t\tstatusEvent(queueId, \"command-accepted\", nowMs, {\n\t\t\tworkId: work.workId,\n\t\t\tcommandId: command.commandId,\n\t\t\trecordSeq: record.recordSeq,\n\t\t}),\n\t];\n}\n\nfunction completeWork<T>(\n\tqueueId: string,\n\tstate: RuntimeState<T>,\n\tcommand: Extract<WorkQueueCommand<T>, { kind: \"complete\" }>,\n\tnowMs: number,\n): QueueEvent<T>[] {\n\tconst checked = currentLease(queueId, state, command, nowMs);\n\tif (\"issue\" in checked) return [checked.issue];\n\tif (\"events\" in checked) return checked.events;\n\tconst work = checked.work;\n\twork.state = \"completed\";\n\tclearLease(work);\n\twork.terminalRecordSeq = state.recordSeq + 2;\n\tconst attempt = appendRecord(state, queueId, {\n\t\tkind: \"attempt-completed\",\n\t\tworkId: work.workId,\n\t\tcommandId: command.commandId,\n\t\tleaseId: command.leaseId,\n\t\tattempt: command.attempt,\n\t\tworkerId: command.workerId,\n\t\tresult: command.result,\n\t\trecordedAtMs: nowMs,\n\t});\n\tconst done = appendRecord(state, queueId, {\n\t\tkind: \"work-completed\",\n\t\tworkId: work.workId,\n\t\tcommandId: command.commandId,\n\t\tleaseId: command.leaseId,\n\t\tattempt: command.attempt,\n\t\tworkerId: command.workerId,\n\t\tresult: command.result,\n\t\trecordedAtMs: nowMs,\n\t});\n\treturn [\n\t\trecordEvent(attempt),\n\t\trecordEvent(done),\n\t\tstatusEvent(queueId, \"command-accepted\", nowMs, {\n\t\t\tworkId: work.workId,\n\t\t\tcommandId: command.commandId,\n\t\t\trecordSeq: done.recordSeq,\n\t\t}),\n\t];\n}\n\nfunction failWork<T>(\n\tqueueId: string,\n\tstate: RuntimeState<T>,\n\tcommand: Extract<WorkQueueCommand<T>, { kind: \"fail\" }>,\n\tnowMs: number,\n\tretry: WorkQueueRetryPolicy,\n): QueueEvent<T>[] {\n\tconst checked = currentLease(queueId, state, command, nowMs);\n\tif (\"issue\" in checked) return [checked.issue];\n\tif (\"events\" in checked) return checked.events;\n\tconst work = checked.work;\n\tconst failed = appendRecord(state, queueId, {\n\t\tkind: \"attempt-failed\",\n\t\tworkId: work.workId,\n\t\tcommandId: command.commandId,\n\t\tleaseId: command.leaseId,\n\t\tattempt: command.attempt,\n\t\tworkerId: command.workerId,\n\t\terror: command.error,\n\t\tretryable: command.retryable,\n\t\trecordedAtMs: nowMs,\n\t});\n\tconst maxAttempts = retry.maxAttempts ?? 3;\n\tif (command.retryable === false || work.attempt >= maxAttempts) {\n\t\twork.state = \"dead-lettered\";\n\t\tclearLease(work);\n\t\twork.retryAtMs = undefined;\n\t\tconst dead = appendRecord(state, queueId, {\n\t\t\tkind: \"work-dead-lettered\",\n\t\t\tworkId: work.workId,\n\t\t\tcommandId: command.commandId,\n\t\t\treason: command.retryable === false ? \"non-retryable\" : \"attempts-exhausted\",\n\t\t\texhaustedAttempts: work.attempt,\n\t\t\trecordedAtMs: nowMs,\n\t\t});\n\t\tstate.deadLetters.push(dead);\n\t\treturn [\n\t\t\trecordEvent(failed),\n\t\t\trecordEvent(dead),\n\t\t\tstatusEvent(queueId, \"command-accepted\", nowMs, {\n\t\t\t\tworkId: work.workId,\n\t\t\t\tcommandId: command.commandId,\n\t\t\t\trecordSeq: dead.recordSeq,\n\t\t\t}),\n\t\t];\n\t}\n\tconst delayMs = retry.delayMs ?? 0;\n\twork.state = delayMs > 0 ? \"retry-wait\" : \"ready\";\n\twork.retryAtMs = nowMs + delayMs;\n\tclearLease(work);\n\tconst retryRecord = appendRecord(state, queueId, {\n\t\tkind: \"retry-scheduled\",\n\t\tworkId: work.workId,\n\t\tcommandId: command.commandId,\n\t\tretryAtMs: work.retryAtMs,\n\t\tdelayMs,\n\t\treason: \"retry-policy\",\n\t\trecordedAtMs: nowMs,\n\t});\n\treturn [\n\t\trecordEvent(failed),\n\t\trecordEvent(retryRecord),\n\t\tstatusEvent(queueId, \"command-accepted\", nowMs, {\n\t\t\tworkId: work.workId,\n\t\t\tcommandId: command.commandId,\n\t\t\trecordSeq: retryRecord.recordSeq,\n\t\t}),\n\t];\n}\n\nfunction cancelWork<T>(\n\tqueueId: string,\n\tstate: RuntimeState<T>,\n\tcommand: Extract<WorkQueueCommand<T>, { kind: \"cancel\" }>,\n\tnowMs: number,\n): QueueEvent<T>[] {\n\tconst work = state.works.get(command.workId);\n\tif (work === undefined)\n\t\treturn [issueEvent(queueId, \"unknown-work\", \"unknown work\", nowMs, command)];\n\tif (isTerminal(work.state))\n\t\treturn [issueEvent(queueId, \"terminal-work\", \"work is terminal\", nowMs, command)];\n\twork.state = \"canceled\";\n\tconst canceledLeaseId = work.leaseId;\n\tconst attempt = work.attempt || undefined;\n\tconst record = appendRecord(state, queueId, {\n\t\tkind: \"work-canceled\",\n\t\tworkId: work.workId,\n\t\tcommandId: command.commandId,\n\t\treason: command.reason,\n\t\tcanceledAtMs: nowMs,\n\t\tcanceledLeaseId,\n\t\tattempt,\n\t\trecordedAtMs: nowMs,\n\t});\n\tclearLease(work);\n\treturn [\n\t\trecordEvent(record),\n\t\tstatusEvent(queueId, \"command-accepted\", nowMs, {\n\t\t\tworkId: work.workId,\n\t\t\tcommandId: command.commandId,\n\t\t\trecordSeq: record.recordSeq,\n\t\t}),\n\t];\n}\n\nfunction scheduleWork<T>(\n\tqueueId: string,\n\tstate: RuntimeState<T>,\n\tcommand: Extract<WorkQueueCommand<T>, { kind: \"schedule\" }>,\n\tnowMs: number,\n): QueueEvent<T>[] {\n\tconst work = state.works.get(command.workId);\n\tif (work === undefined)\n\t\treturn [issueEvent(queueId, \"unknown-work\", \"unknown work\", nowMs, command)];\n\tif (isTerminal(work.state))\n\t\treturn [issueEvent(queueId, \"terminal-work\", \"work is terminal\", nowMs, command)];\n\twork.state = \"scheduled\";\n\twork.notBeforeMs = command.notBeforeMs;\n\twork.deadlineMs = command.deadlineMs;\n\tconst record = appendRecord(state, queueId, {\n\t\tkind: \"work-scheduled\",\n\t\tworkId: work.workId,\n\t\tcommandId: command.commandId,\n\t\tscheduleId: command.scheduleId,\n\t\tscheduleAtMs: command.scheduleAtMs,\n\t\trunAtMs: command.runAtMs,\n\t\tnotBeforeMs: command.notBeforeMs,\n\t\tdeadlineMs: command.deadlineMs,\n\t\treason: command.reason,\n\t\trecordedAtMs: nowMs,\n\t});\n\treturn [\n\t\trecordEvent(record),\n\t\tstatusEvent(queueId, \"command-accepted\", nowMs, {\n\t\t\tworkId: work.workId,\n\t\t\tcommandId: command.commandId,\n\t\t\trecordSeq: record.recordSeq,\n\t\t}),\n\t];\n}\n\nfunction expireLeases<T>(\n\tqueueId: string,\n\tstate: RuntimeState<T>,\n\tcommand: Extract<WorkQueueCommand<T>, { kind: \"expire-leases\" }>,\n\tnowMs: number,\n): QueueEvent<T>[] {\n\tconst workIds = new Set(command.workIds ?? []);\n\tconst limit = positiveLimit(command.limit ?? Number.MAX_SAFE_INTEGER);\n\tconst expired = [...state.works.values()]\n\t\t.filter(\n\t\t\t(work) =>\n\t\t\t\twork.state === \"leased\" &&\n\t\t\t\twork.leaseExpiresAtMs !== undefined &&\n\t\t\t\twork.leaseExpiresAtMs <= nowMs,\n\t\t)\n\t\t.filter((work) => workIds.size === 0 || workIds.has(work.workId))\n\t\t.slice(0, limit);\n\tif (expired.length === 0)\n\t\treturn [statusEvent(queueId, \"maintenance-noop\", nowMs, { commandId: command.commandId })];\n\tconst events: QueueEvent<T>[] = [];\n\tfor (const work of expired) {\n\t\tevents.push(...materializeLeaseExpired(queueId, state, work, command.commandId, nowMs));\n\t}\n\tevents.push(\n\t\tstatusEvent(queueId, \"maintenance-applied\", nowMs, {\n\t\t\tcommandId: command.commandId,\n\t\t\tdetails: { expired: expired.length },\n\t\t}),\n\t);\n\treturn events;\n}\n\nfunction currentLease<T>(\n\tqueueId: string,\n\tstate: RuntimeState<T>,\n\tcommand: {\n\t\tcommandId?: string;\n\t\tworkId: string;\n\t\tleaseId: string;\n\t\tattempt: number;\n\t\tworkerId: string;\n\t},\n\tnowMs: number,\n): { work: WorkState<T> } | { issue: QueueEvent<T> } | { events: QueueEvent<T>[] } {\n\tconst work = state.works.get(command.workId);\n\tif (work === undefined)\n\t\treturn { issue: issueEvent(queueId, \"unknown-work\", \"unknown work\", nowMs, command) };\n\tif (isTerminal(work.state))\n\t\treturn { issue: issueEvent(queueId, \"terminal-work\", \"work is terminal\", nowMs, command) };\n\tif (work.state !== \"leased\")\n\t\treturn {\n\t\t\tissue: issueEvent(queueId, \"lease-not-current\", \"work is not leased\", nowMs, command),\n\t\t};\n\tif (work.leaseId !== command.leaseId)\n\t\treturn { issue: issueEvent(queueId, \"stale-lease\", \"lease is not current\", nowMs, command) };\n\tif (work.attempt !== command.attempt)\n\t\treturn { issue: issueEvent(queueId, \"attempt-mismatch\", \"attempt mismatch\", nowMs, command) };\n\tif (work.workerId !== command.workerId)\n\t\treturn { issue: issueEvent(queueId, \"worker-mismatch\", \"worker mismatch\", nowMs, command) };\n\tif (isExpiredLease(work, nowMs))\n\t\treturn {\n\t\t\tevents: materializeLeaseExpired(queueId, state, work, command.commandId, nowMs, {\n\t\t\t\tcommand,\n\t\t\t\tcode: \"lease-expired\",\n\t\t\t\tmessage: \"lease expired\",\n\t\t\t}),\n\t\t};\n\treturn { work };\n}\n\nfunction availablePage<T>(\n\tstate: RuntimeState<T>,\n\tparams: WorkQueueAvailableParams,\n): WorkQueueAvailablePage<T> {\n\tconst limit = positiveLimit(params.limit ?? 100);\n\tconst orderByWorkId = params.afterWorkId !== undefined && params.afterAdmissionSeq === undefined;\n\tconst all = [...state.works.values()]\n\t\t.filter((work) => isReadyForProjection(work, params.nowMs))\n\t\t.filter((work) => params.afterWorkId === undefined || work.workId > params.afterWorkId)\n\t\t.filter(\n\t\t\t(work) =>\n\t\t\t\tparams.afterAdmissionSeq === undefined || work.admissionSeq > params.afterAdmissionSeq,\n\t\t)\n\t\t.sort((a, b) =>\n\t\t\torderByWorkId\n\t\t\t\t? a.workId.localeCompare(b.workId)\n\t\t\t\t: a.admissionSeq - b.admissionSeq || a.workId.localeCompare(b.workId),\n\t\t);\n\tconst items = all.map((work) => ({\n\t\tworkId: work.workId,\n\t\tstate: work.state,\n\t\tpayload: work.payload,\n\t\tadmissionSeq: work.admissionSeq,\n\t\tpriority: work.priority,\n\t\ttags: work.tags,\n\t\trequirements: work.requirements,\n\t\tnotBeforeMs: work.notBeforeMs,\n\t\tretryAtMs: work.retryAtMs,\n\t\tdeadlineMs: work.deadlineMs,\n\t}));\n\tconst page = items.slice(0, limit);\n\treturn {\n\t\titems: page,\n\t\t...(items.length > limit && page.length > 0\n\t\t\t? { nextAfterWorkId: page[page.length - 1]?.workId }\n\t\t\t: {}),\n\t\t...(items.length > limit && page.length > 0\n\t\t\t? { nextAfterAdmissionSeq: page[page.length - 1]?.admissionSeq }\n\t\t\t: {}),\n\t\thasMore: items.length > limit,\n\t\tasOfRecordSeq: state.recordSeq,\n\t};\n}\n\nfunction workSnapshot<T>(state: RuntimeState<T>, workId: string): WorkQueueWorkSnapshot<T> {\n\tconst work = state.works.get(workId);\n\treturn {\n\t\tworkId,\n\t\tstate: work?.state,\n\t\tpayload: work?.payload,\n\t\t...(work?.state !== \"leased\" || work.leaseId === undefined\n\t\t\t? {}\n\t\t\t: {\n\t\t\t\t\tactiveLease: {\n\t\t\t\t\t\tleaseId: work.leaseId,\n\t\t\t\t\t\tattempt: work.attempt,\n\t\t\t\t\t\tworkerId: work.workerId as string,\n\t\t\t\t\t\tleaseExpiresAtMs: work.leaseExpiresAtMs as number,\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\trecords: state.records.filter((record) => record.workId === workId),\n\t\tasOfRecordSeq: state.recordSeq,\n\t};\n}\n\nfunction materializeLeaseExpired<T>(\n\tqueueId: string,\n\tstate: RuntimeState<T>,\n\twork: WorkState<T>,\n\tcommandId: string | undefined,\n\tnowMs: number,\n\trejection?: { readonly command: unknown; readonly code: string; readonly message: string },\n): QueueEvent<T>[] {\n\tconst record = appendRecord(state, queueId, {\n\t\tkind: \"lease-expired\",\n\t\tworkId: work.workId,\n\t\t...(commandId === undefined ? {} : { commandId }),\n\t\tleaseId: work.leaseId as string,\n\t\tattempt: work.attempt,\n\t\tworkerId: work.workerId as string,\n\t\tleaseExpiresAtMs: work.leaseExpiresAtMs as number,\n\t\texpiredAtMs: nowMs,\n\t\trecordedAtMs: nowMs,\n\t});\n\twork.state = \"ready\";\n\tclearLease(work);\n\tconst events: QueueEvent<T>[] = [recordEvent(record)];\n\tif (rejection !== undefined) {\n\t\tevents.push(\n\t\t\t...rejectQueueCommand<T>(\n\t\t\t\tqueueId,\n\t\t\t\trejection.command,\n\t\t\t\trejection.code,\n\t\t\t\trejection.message,\n\t\t\t\tnowMs,\n\t\t\t\tcommandId,\n\t\t\t),\n\t\t);\n\t}\n\treturn events;\n}\n\nfunction isExpiredLease<T>(work: WorkState<T>, nowMs: number): boolean {\n\treturn (\n\t\twork.state === \"leased\" && work.leaseExpiresAtMs !== undefined && work.leaseExpiresAtMs <= nowMs\n\t);\n}\n\nfunction clearLease<T>(work: WorkState<T>): void {\n\twork.leaseId = undefined;\n\twork.workerId = undefined;\n\twork.leaseExpiresAtMs = undefined;\n}\n\nfunction deadLetterPage<T>(\n\tstate: RuntimeState<T>,\n\tparams: WorkQueueDeadLetterParams,\n): WorkQueueDeadLetterPage<T> {\n\tconst limit = positiveLimit(params.limit ?? 100);\n\tconst entries = state.deadLetters.filter((record) => {\n\t\tif (params.afterDeadLetterSeq !== undefined && record.recordSeq <= params.afterDeadLetterSeq)\n\t\t\treturn false;\n\t\tif (params.afterWorkId !== undefined && (record.workId ?? \"\") <= params.afterWorkId)\n\t\t\treturn false;\n\t\treturn true;\n\t});\n\tconst page = entries.slice(0, limit);\n\treturn {\n\t\tentries: page,\n\t\t...(entries.length > limit && page.length > 0\n\t\t\t? { nextAfterDeadLetterSeq: page[page.length - 1]?.recordSeq }\n\t\t\t: {}),\n\t\thasMore: entries.length > limit,\n\t\tasOfRecordSeq: state.recordSeq,\n\t};\n}\n\nfunction appendRecord<T>(\n\tstate: RuntimeState<T>,\n\tqueueId: string,\n\trecord: WorkQueueRecordDraft,\n): WorkQueueRecord<T> {\n\tconst full = { ...record, queueId, recordSeq: ++state.recordSeq } as WorkQueueRecord<T>;\n\tstate.records.push(full);\n\treturn full;\n}\n\nfunction recordEvent<T>(record: WorkQueueRecord<T>): QueueEvent<T> {\n\treturn { kind: \"record\", record };\n}\n\nfunction statusEvent<T>(\n\tqueueId: string,\n\tkind: WorkQueueStatus[\"kind\"],\n\ttimestampMs: number,\n\tfields: Partial<WorkQueueStatus> = {},\n): QueueEvent<T> {\n\treturn {\n\t\tkind: \"status\",\n\t\tstatus: {\n\t\t\tkind,\n\t\t\tqueueId,\n\t\t\ttimestampMs,\n\t\t\t...(fields.workId === undefined ? {} : { workId: fields.workId }),\n\t\t\t...(fields.commandId === undefined ? {} : { commandId: fields.commandId }),\n\t\t\t...(fields.recordSeq === undefined ? {} : { recordSeq: fields.recordSeq }),\n\t\t\t...(fields.asOfRecordSeq === undefined ? {} : { asOfRecordSeq: fields.asOfRecordSeq }),\n\t\t\t...(fields.issueCode === undefined ? {} : { issueCode: fields.issueCode }),\n\t\t\t...(fields.details === undefined ? {} : { details: fields.details }),\n\t\t},\n\t};\n}\n\nfunction issueEvent<T>(\n\tqueueId: string,\n\tcode: string,\n\tmessage: string,\n\ttimestampMs: number,\n\tdetails: unknown,\n): QueueEvent<T> {\n\treturn {\n\t\tkind: \"issue\",\n\t\tissue: {\n\t\t\tkind: \"issue\",\n\t\t\tcode,\n\t\t\tmessage,\n\t\t\tseverity: \"error\",\n\t\t\tsource: \"workQueue\",\n\t\t\tdetails,\n\t\t\tmetadata: { queueId, timestampMs },\n\t\t},\n\t};\n}\n\nfunction rejectQueueCommand<T>(\n\tqueueId: string,\n\tcommand: unknown,\n\tcode: string,\n\tmessage: string,\n\tnowMs: number,\n\tcommandId = commandIdFrom(command),\n): QueueEvent<T>[] {\n\treturn [\n\t\tissueEvent(queueId, code, message, nowMs, command),\n\t\tstatusEvent(queueId, \"command-rejected\", nowMs, {\n\t\t\t...(commandId === undefined ? {} : { commandId }),\n\t\t\tissueCode: code,\n\t\t}),\n\t];\n}\n\nfunction validateQueueCommand(\n\tqueueId: string,\n\tcommand: unknown,\n): { readonly code: string; readonly message: string } | undefined {\n\tif (!isObjectRecord(command))\n\t\treturn { code: \"malformed-command\", message: \"command must be an object\" };\n\tif (typeof command.kind !== \"string\")\n\t\treturn { code: \"malformed-command\", message: \"command kind is required\" };\n\tif (!isWorkQueueCommandKind(command.kind))\n\t\treturn { code: \"malformed-command\", message: `unknown command kind '${command.kind}'` };\n\tif (typeof command.commandId !== \"string\" || command.commandId.length === 0)\n\t\treturn { code: \"malformed-command\", message: \"commandId must be a non-empty string\" };\n\tif (command.queueId !== undefined && command.queueId !== queueId)\n\t\treturn { code: \"queue-mismatch\", message: \"command queueId does not match this queue\" };\n\tswitch (command.kind) {\n\t\tcase \"submit\":\n\t\t\treturn command.payload === undefined\n\t\t\t\t? { code: \"malformed-command\", message: \"submit payload is required\" }\n\t\t\t\t: undefined;\n\t\tcase \"claim\":\n\t\t\tif (typeof command.workerId !== \"string\" || command.workerId.length === 0)\n\t\t\t\treturn { code: \"malformed-command\", message: \"claim workerId is required\" };\n\t\t\tif (command.limit !== undefined && !isPositiveInteger(command.limit))\n\t\t\t\treturn { code: \"malformed-command\", message: \"claim limit must be a positive integer\" };\n\t\t\tif (\n\t\t\t\tcommand.requestedWorkIds !== undefined &&\n\t\t\t\t(!Array.isArray(command.requestedWorkIds) ||\n\t\t\t\t\t!command.requestedWorkIds.every((id) => typeof id === \"string\" && id.length > 0))\n\t\t\t) {\n\t\t\t\treturn { code: \"malformed-command\", message: \"requestedWorkIds must be strings\" };\n\t\t\t}\n\t\t\tif (command.leaseDurationMs !== undefined && !isPositiveInteger(command.leaseDurationMs))\n\t\t\t\treturn {\n\t\t\t\t\tcode: \"malformed-command\",\n\t\t\t\t\tmessage: \"leaseDurationMs must be a positive integer\",\n\t\t\t\t};\n\t\t\treturn undefined;\n\t\tcase \"renew-lease\":\n\t\t\tif (command.leaseDurationMs !== undefined && !isPositiveInteger(command.leaseDurationMs))\n\t\t\t\treturn {\n\t\t\t\t\tcode: \"malformed-command\",\n\t\t\t\t\tmessage: \"leaseDurationMs must be a positive integer\",\n\t\t\t\t};\n\t\t\tif (command.leaseExpiresAtMs !== undefined && !isFiniteNumber(command.leaseExpiresAtMs))\n\t\t\t\treturn { code: \"malformed-command\", message: \"leaseExpiresAtMs must be finite\" };\n\t\t\treturn validateLeaseCommand(command);\n\t\tcase \"release\":\n\t\tcase \"complete\":\n\t\tcase \"fail\":\n\t\t\treturn validateLeaseCommand(command);\n\t\tcase \"cancel\":\n\t\t\treturn requiredString(command.workId, \"workId\");\n\t\tcase \"schedule\": {\n\t\t\tconst workIdError = requiredString(command.workId, \"workId\");\n\t\t\tif (workIdError !== undefined) return workIdError;\n\t\t\tif (!isFiniteNumber(command.notBeforeMs))\n\t\t\t\treturn { code: \"malformed-command\", message: \"notBeforeMs must be finite\" };\n\t\t\tif (command.deadlineMs !== undefined && !isFiniteNumber(command.deadlineMs))\n\t\t\t\treturn { code: \"malformed-command\", message: \"deadlineMs must be finite\" };\n\t\t\treturn undefined;\n\t\t}\n\t\tcase \"expire-leases\":\n\t\t\tif (command.limit !== undefined && !isPositiveInteger(command.limit))\n\t\t\t\treturn {\n\t\t\t\t\tcode: \"malformed-command\",\n\t\t\t\t\tmessage: \"expire-leases limit must be a positive integer\",\n\t\t\t\t};\n\t\t\tif (\n\t\t\t\tcommand.workIds !== undefined &&\n\t\t\t\t(!Array.isArray(command.workIds) ||\n\t\t\t\t\t!command.workIds.every((id) => typeof id === \"string\" && id.length > 0))\n\t\t\t) {\n\t\t\t\treturn { code: \"malformed-command\", message: \"workIds must be strings\" };\n\t\t\t}\n\t\t\treturn undefined;\n\t}\n}\n\nfunction validateLeaseCommand(\n\tcommand: Record<string, unknown>,\n): { readonly code: string; readonly message: string } | undefined {\n\tfor (const key of [\"workId\", \"leaseId\", \"workerId\"]) {\n\t\tconst err = requiredString(command[key], key);\n\t\tif (err !== undefined) return err;\n\t}\n\tif (!isPositiveInteger(command.attempt))\n\t\treturn { code: \"malformed-command\", message: \"attempt must be a positive integer\" };\n\treturn undefined;\n}\n\nfunction requiredString(\n\tvalue: unknown,\n\tname: string,\n): { readonly code: string; readonly message: string } | undefined {\n\treturn typeof value === \"string\" && value.length > 0\n\t\t? undefined\n\t\t: { code: \"malformed-command\", message: `${name} must be a non-empty string` };\n}\n\nfunction commandIdFrom(command: unknown): string | undefined {\n\treturn isObjectRecord(command) && typeof command.commandId === \"string\"\n\t\t? command.commandId\n\t\t: undefined;\n}\n\nfunction isWorkQueueCommandKind(kind: string): kind is WorkQueueCommand[\"kind\"] {\n\treturn (\n\t\tkind === \"submit\" ||\n\t\tkind === \"claim\" ||\n\t\tkind === \"renew-lease\" ||\n\t\tkind === \"release\" ||\n\t\tkind === \"complete\" ||\n\t\tkind === \"fail\" ||\n\t\tkind === \"cancel\" ||\n\t\tkind === \"schedule\" ||\n\t\tkind === \"expire-leases\"\n\t);\n}\n\nfunction isObjectRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isPositiveInteger(value: unknown): value is number {\n\treturn Number.isInteger(value) && (value as number) > 0;\n}\n\nfunction isFiniteNumber(value: unknown): value is number {\n\treturn typeof value === \"number\" && Number.isFinite(value);\n}\n\nfunction publishQueueCommand<T>(\n\tnode: Node<WorkQueueCommand<T>>,\n\tcommand: WorkQueueCommand<T>,\n): WorkQueueCommand<T> {\n\tnode.down([[\"DATA\", command]]);\n\treturn command;\n}\n\nlet commandSeq = 0;\nfunction nextCommandId(queueId: string, kind: string): string {\n\tcommandSeq += 1;\n\treturn `${queueId}:${kind}:${commandSeq}`;\n}\n\nfunction isReady<T>(work: WorkState<T>, nowMs: number): boolean {\n\tif (work.state === \"scheduled\")\n\t\treturn work.notBeforeMs !== undefined && work.notBeforeMs <= nowMs;\n\tif (work.state === \"retry-wait\") return work.retryAtMs !== undefined && work.retryAtMs <= nowMs;\n\treturn work.state === \"ready\";\n}\n\nfunction isReadyForProjection<T>(work: WorkState<T>, nowMs: number | undefined): boolean {\n\tif (work.state === \"scheduled\" || work.state === \"retry-wait\") {\n\t\treturn nowMs === undefined ? false : isReady(work, nowMs);\n\t}\n\treturn isReady(work, 0);\n}\n\nfunction isTerminal(state: WorkQueueDerivedState): boolean {\n\treturn state === \"completed\" || state === \"canceled\" || state === \"dead-lettered\";\n}\n\nfunction payloadAsRecord(value: unknown): Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value)\n\t\t? (value as Record<string, unknown>)\n\t\t: {};\n}\n\nfunction numberOrUndefined(value: unknown): number | undefined {\n\treturn typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction stringArrayOrUndefined(value: unknown): readonly string[] | undefined {\n\treturn Array.isArray(value) && value.every((entry) => typeof entry === \"string\")\n\t\t? value\n\t\t: undefined;\n}\n\nfunction pullParams<T>(pull: PullDemand | undefined): T {\n\treturn (\n\t\ttypeof pull?.params === \"object\" && pull.params !== null && !Array.isArray(pull.params)\n\t\t\t? pull.params\n\t\t\t: {}\n\t) as T;\n}\n\nconst SUBMIT_ENVELOPE = \"__graphreflyWorkQueueSubmit\";\n\nfunction submitPayload<T>(\n\tpayload: T,\n\tmeta: Record<string, unknown>,\n): T | (Record<string, unknown> & { readonly [SUBMIT_ENVELOPE]: true; readonly payload: T }) {\n\tif (Object.keys(meta).length === 0) return payload;\n\treturn { [SUBMIT_ENVELOPE]: true, payload, ...meta };\n}\n\nfunction decodeSubmittedPayload<T>(payload: T): { payload: T; meta: Record<string, unknown> } {\n\tif (\n\t\tisObjectRecord(payload) &&\n\t\tpayload[SUBMIT_ENVELOPE] === true &&\n\t\tObject.hasOwn(payload, \"payload\")\n\t) {\n\t\tconst { payload: inner, [SUBMIT_ENVELOPE]: _tag, ...meta } = payload as Record<string, unknown>;\n\t\treturn { payload: inner as T, meta };\n\t}\n\treturn { payload, meta: payloadAsRecord(payload) };\n}\n\nfunction commandNowMs<T>(command: WorkQueueCommand<T>, fallback: number): number {\n\treturn typeof command.nowMs === \"number\" && Number.isFinite(command.nowMs)\n\t\t? command.nowMs\n\t\t: fallback;\n}\n\nfunction positiveLimit(limit: number): number {\n\tif (!Number.isInteger(limit) || limit < 1)\n\t\tthrow new Error(\"workQueue: limit must be a positive integer\");\n\treturn limit;\n}\n\nfunction assertNonEmpty(value: string, owner: string): void {\n\tif (typeof value !== \"string\" || value.length === 0)\n\t\tthrow new Error(`${owner} must be a non-empty string`);\n}\n"],"mappings":"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","names":["status","record"]}
|
|
1
|
+
{"version":3,"sources":["../../src/work-queue/utils.ts","../../src/work-queue/projections.ts","../../src/work-queue/index.ts"],"sourcesContent":["import type { Node } from \"../node/node.js\";\nimport type { PullDemand } from \"../protocol/messages.js\";\nimport type { QueueEvent, RuntimeState, WorkQueueRecordDraft, WorkState } from \"./runtime-types.js\";\nimport type {\n\tWorkQueueCommand,\n\tWorkQueueDerivedState,\n\tWorkQueueRecord,\n\tWorkQueueStatus,\n} from \"./types.js\";\n\nexport function appendRecord<T>(\n\tstate: RuntimeState<T>,\n\tqueueId: string,\n\trecord: WorkQueueRecordDraft,\n): WorkQueueRecord<T> {\n\tconst full = { ...record, queueId, recordSeq: ++state.recordSeq } as WorkQueueRecord<T>;\n\tstate.records.push(full);\n\treturn full;\n}\n\nexport function recordEvent<T>(record: WorkQueueRecord<T>): QueueEvent<T> {\n\treturn { kind: \"record\", record };\n}\n\nexport function statusEvent<T>(\n\tqueueId: string,\n\tkind: WorkQueueStatus[\"kind\"],\n\ttimestampMs: number,\n\tfields: Partial<WorkQueueStatus> = {},\n): QueueEvent<T> {\n\treturn {\n\t\tkind: \"status\",\n\t\tstatus: {\n\t\t\tkind,\n\t\t\tqueueId,\n\t\t\ttimestampMs,\n\t\t\t...(fields.workId === undefined ? {} : { workId: fields.workId }),\n\t\t\t...(fields.commandId === undefined ? {} : { commandId: fields.commandId }),\n\t\t\t...(fields.recordSeq === undefined ? {} : { recordSeq: fields.recordSeq }),\n\t\t\t...(fields.asOfRecordSeq === undefined ? {} : { asOfRecordSeq: fields.asOfRecordSeq }),\n\t\t\t...(fields.issueCode === undefined ? {} : { issueCode: fields.issueCode }),\n\t\t\t...(fields.details === undefined ? {} : { details: fields.details }),\n\t\t},\n\t};\n}\n\nexport function issueEvent<T>(\n\tqueueId: string,\n\tcode: string,\n\tmessage: string,\n\ttimestampMs: number,\n\tdetails: unknown,\n): QueueEvent<T> {\n\treturn {\n\t\tkind: \"issue\",\n\t\tissue: {\n\t\t\tkind: \"issue\",\n\t\t\tcode,\n\t\t\tmessage,\n\t\t\tseverity: \"error\",\n\t\t\tsource: \"workQueue\",\n\t\t\tdetails,\n\t\t\tmetadata: { queueId, timestampMs },\n\t\t},\n\t};\n}\n\nexport function rejectQueueCommand<T>(\n\tqueueId: string,\n\tcommand: unknown,\n\tcode: string,\n\tmessage: string,\n\tnowMs: number,\n\tcommandId = commandIdFrom(command),\n): QueueEvent<T>[] {\n\treturn [\n\t\tissueEvent(queueId, code, message, nowMs, command),\n\t\tstatusEvent(queueId, \"command-rejected\", nowMs, {\n\t\t\t...(commandId === undefined ? {} : { commandId }),\n\t\t\tissueCode: code,\n\t\t}),\n\t];\n}\n\nexport function validateQueueCommand(\n\tqueueId: string,\n\tcommand: unknown,\n): { readonly code: string; readonly message: string } | undefined {\n\tif (!isObjectRecord(command))\n\t\treturn { code: \"malformed-command\", message: \"command must be an object\" };\n\tif (typeof command.kind !== \"string\")\n\t\treturn { code: \"malformed-command\", message: \"command kind is required\" };\n\tif (!isWorkQueueCommandKind(command.kind))\n\t\treturn { code: \"malformed-command\", message: `unknown command kind '${command.kind}'` };\n\tif (typeof command.commandId !== \"string\" || command.commandId.length === 0)\n\t\treturn { code: \"malformed-command\", message: \"commandId must be a non-empty string\" };\n\tif (command.queueId !== undefined && command.queueId !== queueId)\n\t\treturn { code: \"queue-mismatch\", message: \"command queueId does not match this queue\" };\n\tswitch (command.kind) {\n\t\tcase \"submit\":\n\t\t\treturn command.payload === undefined\n\t\t\t\t? { code: \"malformed-command\", message: \"submit payload is required\" }\n\t\t\t\t: undefined;\n\t\tcase \"claim\":\n\t\t\tif (typeof command.workerId !== \"string\" || command.workerId.length === 0)\n\t\t\t\treturn { code: \"malformed-command\", message: \"claim workerId is required\" };\n\t\t\tif (command.limit !== undefined && !isPositiveInteger(command.limit))\n\t\t\t\treturn { code: \"malformed-command\", message: \"claim limit must be a positive integer\" };\n\t\t\tif (\n\t\t\t\tcommand.requestedWorkIds !== undefined &&\n\t\t\t\t(!Array.isArray(command.requestedWorkIds) ||\n\t\t\t\t\t!command.requestedWorkIds.every((id) => typeof id === \"string\" && id.length > 0))\n\t\t\t) {\n\t\t\t\treturn { code: \"malformed-command\", message: \"requestedWorkIds must be strings\" };\n\t\t\t}\n\t\t\tif (command.leaseDurationMs !== undefined && !isPositiveInteger(command.leaseDurationMs))\n\t\t\t\treturn {\n\t\t\t\t\tcode: \"malformed-command\",\n\t\t\t\t\tmessage: \"leaseDurationMs must be a positive integer\",\n\t\t\t\t};\n\t\t\treturn undefined;\n\t\tcase \"renew-lease\":\n\t\t\tif (command.leaseDurationMs !== undefined && !isPositiveInteger(command.leaseDurationMs))\n\t\t\t\treturn {\n\t\t\t\t\tcode: \"malformed-command\",\n\t\t\t\t\tmessage: \"leaseDurationMs must be a positive integer\",\n\t\t\t\t};\n\t\t\tif (command.leaseExpiresAtMs !== undefined && !isFiniteNumber(command.leaseExpiresAtMs))\n\t\t\t\treturn { code: \"malformed-command\", message: \"leaseExpiresAtMs must be finite\" };\n\t\t\treturn validateLeaseCommand(command);\n\t\tcase \"release\":\n\t\tcase \"complete\":\n\t\tcase \"fail\":\n\t\t\treturn validateLeaseCommand(command);\n\t\tcase \"cancel\":\n\t\t\treturn requiredString(command.workId, \"workId\");\n\t\tcase \"schedule\": {\n\t\t\tconst workIdError = requiredString(command.workId, \"workId\");\n\t\t\tif (workIdError !== undefined) return workIdError;\n\t\t\tif (!isFiniteNumber(command.notBeforeMs))\n\t\t\t\treturn { code: \"malformed-command\", message: \"notBeforeMs must be finite\" };\n\t\t\tif (command.deadlineMs !== undefined && !isFiniteNumber(command.deadlineMs))\n\t\t\t\treturn { code: \"malformed-command\", message: \"deadlineMs must be finite\" };\n\t\t\treturn undefined;\n\t\t}\n\t\tcase \"expire-leases\":\n\t\t\tif (command.limit !== undefined && !isPositiveInteger(command.limit))\n\t\t\t\treturn {\n\t\t\t\t\tcode: \"malformed-command\",\n\t\t\t\t\tmessage: \"expire-leases limit must be a positive integer\",\n\t\t\t\t};\n\t\t\tif (\n\t\t\t\tcommand.workIds !== undefined &&\n\t\t\t\t(!Array.isArray(command.workIds) ||\n\t\t\t\t\t!command.workIds.every((id) => typeof id === \"string\" && id.length > 0))\n\t\t\t) {\n\t\t\t\treturn { code: \"malformed-command\", message: \"workIds must be strings\" };\n\t\t\t}\n\t\t\treturn undefined;\n\t}\n}\n\nexport function validateLeaseCommand(\n\tcommand: Record<string, unknown>,\n): { readonly code: string; readonly message: string } | undefined {\n\tfor (const key of [\"workId\", \"leaseId\", \"workerId\"]) {\n\t\tconst err = requiredString(command[key], key);\n\t\tif (err !== undefined) return err;\n\t}\n\tif (!isPositiveInteger(command.attempt))\n\t\treturn { code: \"malformed-command\", message: \"attempt must be a positive integer\" };\n\treturn undefined;\n}\n\nexport function requiredString(\n\tvalue: unknown,\n\tname: string,\n): { readonly code: string; readonly message: string } | undefined {\n\treturn typeof value === \"string\" && value.length > 0\n\t\t? undefined\n\t\t: { code: \"malformed-command\", message: `${name} must be a non-empty string` };\n}\n\nexport function commandIdFrom(command: unknown): string | undefined {\n\treturn isObjectRecord(command) && typeof command.commandId === \"string\"\n\t\t? command.commandId\n\t\t: undefined;\n}\n\nexport function isWorkQueueCommandKind(kind: string): kind is WorkQueueCommand[\"kind\"] {\n\treturn (\n\t\tkind === \"submit\" ||\n\t\tkind === \"claim\" ||\n\t\tkind === \"renew-lease\" ||\n\t\tkind === \"release\" ||\n\t\tkind === \"complete\" ||\n\t\tkind === \"fail\" ||\n\t\tkind === \"cancel\" ||\n\t\tkind === \"schedule\" ||\n\t\tkind === \"expire-leases\"\n\t);\n}\n\nexport function isObjectRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nexport function isPositiveInteger(value: unknown): value is number {\n\treturn Number.isInteger(value) && (value as number) > 0;\n}\n\nexport function isFiniteNumber(value: unknown): value is number {\n\treturn typeof value === \"number\" && Number.isFinite(value);\n}\n\nexport function publishQueueCommand<T>(\n\tnode: Node<WorkQueueCommand<T>>,\n\tcommand: WorkQueueCommand<T>,\n): WorkQueueCommand<T> {\n\tnode.down([[\"DATA\", command]]);\n\treturn command;\n}\n\nlet commandSeq = 0;\nexport function nextCommandId(queueId: string, kind: string): string {\n\tcommandSeq += 1;\n\treturn `${queueId}:${kind}:${commandSeq}`;\n}\n\nexport function isReady<T>(work: WorkState<T>, nowMs: number): boolean {\n\tif (work.state === \"scheduled\")\n\t\treturn work.notBeforeMs !== undefined && work.notBeforeMs <= nowMs;\n\tif (work.state === \"retry-wait\") return work.retryAtMs !== undefined && work.retryAtMs <= nowMs;\n\treturn work.state === \"ready\";\n}\n\nexport function isReadyForProjection<T>(work: WorkState<T>, nowMs: number | undefined): boolean {\n\tif (work.state === \"scheduled\" || work.state === \"retry-wait\") {\n\t\treturn nowMs === undefined ? false : isReady(work, nowMs);\n\t}\n\treturn isReady(work, 0);\n}\n\nexport function isTerminal(state: WorkQueueDerivedState): boolean {\n\treturn state === \"completed\" || state === \"canceled\" || state === \"dead-lettered\";\n}\n\nexport function payloadAsRecord(value: unknown): Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value)\n\t\t? (value as Record<string, unknown>)\n\t\t: {};\n}\n\nexport function numberOrUndefined(value: unknown): number | undefined {\n\treturn typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nexport function stringArrayOrUndefined(value: unknown): readonly string[] | undefined {\n\treturn Array.isArray(value) && value.every((entry) => typeof entry === \"string\")\n\t\t? value\n\t\t: undefined;\n}\n\nexport function pullParams<T>(pull: PullDemand | undefined): T {\n\treturn (\n\t\ttypeof pull?.params === \"object\" && pull.params !== null && !Array.isArray(pull.params)\n\t\t\t? pull.params\n\t\t\t: {}\n\t) as T;\n}\n\nconst SUBMIT_ENVELOPE = \"__graphreflyWorkQueueSubmit\";\n\nexport function submitPayload<T>(\n\tpayload: T,\n\tmeta: Record<string, unknown>,\n): T | (Record<string, unknown> & { readonly [SUBMIT_ENVELOPE]: true; readonly payload: T }) {\n\tif (Object.keys(meta).length === 0) return payload;\n\treturn { [SUBMIT_ENVELOPE]: true, payload, ...meta };\n}\n\nexport function decodeSubmittedPayload<T>(payload: T): {\n\tpayload: T;\n\tmeta: Record<string, unknown>;\n} {\n\tif (\n\t\tisObjectRecord(payload) &&\n\t\tpayload[SUBMIT_ENVELOPE] === true &&\n\t\tObject.hasOwn(payload, \"payload\")\n\t) {\n\t\tconst { payload: inner, [SUBMIT_ENVELOPE]: _tag, ...meta } = payload as Record<string, unknown>;\n\t\treturn { payload: inner as T, meta };\n\t}\n\treturn { payload, meta: payloadAsRecord(payload) };\n}\n\nexport function commandNowMs<T>(command: WorkQueueCommand<T>, fallback: number): number {\n\treturn typeof command.nowMs === \"number\" && Number.isFinite(command.nowMs)\n\t\t? command.nowMs\n\t\t: fallback;\n}\n\nexport function positiveLimit(limit: number): number {\n\tif (!Number.isInteger(limit) || limit < 1)\n\t\tthrow new Error(\"workQueue: limit must be a positive integer\");\n\treturn limit;\n}\n\nexport function assertNonEmpty(value: string, owner: string): void {\n\tif (typeof value !== \"string\" || value.length === 0)\n\t\tthrow new Error(`${owner} must be a non-empty string`);\n}\n\nexport function materializeLeaseExpired<T>(\n\tqueueId: string,\n\tstate: RuntimeState<T>,\n\twork: WorkState<T>,\n\tcommandId: string | undefined,\n\tnowMs: number,\n\trejection?: { readonly command: unknown; readonly code: string; readonly message: string },\n): QueueEvent<T>[] {\n\tconst record = appendRecord(state, queueId, {\n\t\tkind: \"lease-expired\",\n\t\tworkId: work.workId,\n\t\t...(commandId === undefined ? {} : { commandId }),\n\t\tleaseId: work.leaseId as string,\n\t\tattempt: work.attempt,\n\t\tworkerId: work.workerId as string,\n\t\tleaseExpiresAtMs: work.leaseExpiresAtMs as number,\n\t\texpiredAtMs: nowMs,\n\t\trecordedAtMs: nowMs,\n\t});\n\twork.state = \"ready\";\n\tclearLease(work);\n\tconst events: QueueEvent<T>[] = [recordEvent(record)];\n\tif (rejection !== undefined) {\n\t\tevents.push(\n\t\t\t...rejectQueueCommand<T>(\n\t\t\t\tqueueId,\n\t\t\t\trejection.command,\n\t\t\t\trejection.code,\n\t\t\t\trejection.message,\n\t\t\t\tnowMs,\n\t\t\t\tcommandId,\n\t\t\t),\n\t\t);\n\t}\n\treturn events;\n}\n\nexport function isExpiredLease<T>(work: WorkState<T>, nowMs: number): boolean {\n\treturn (\n\t\twork.state === \"leased\" && work.leaseExpiresAtMs !== undefined && work.leaseExpiresAtMs <= nowMs\n\t);\n}\n\nexport function clearLease<T>(work: WorkState<T>): void {\n\twork.leaseId = undefined;\n\twork.workerId = undefined;\n\twork.leaseExpiresAtMs = undefined;\n}\n","import type { RuntimeState } from \"./runtime-types.js\";\nimport type {\n\tWorkQueueAvailablePage,\n\tWorkQueueAvailableParams,\n\tWorkQueueDeadLetterPage,\n\tWorkQueueDeadLetterParams,\n\tWorkQueueWorkSnapshot,\n} from \"./types.js\";\nimport { isReadyForProjection, positiveLimit } from \"./utils.js\";\n\nexport function availablePage<T>(\n\tstate: RuntimeState<T>,\n\tparams: WorkQueueAvailableParams,\n): WorkQueueAvailablePage<T> {\n\tconst limit = positiveLimit(params.limit ?? 100);\n\tconst orderByWorkId = params.afterWorkId !== undefined && params.afterAdmissionSeq === undefined;\n\tconst all = [...state.works.values()]\n\t\t.filter((work) => isReadyForProjection(work, params.nowMs))\n\t\t.filter((work) => params.afterWorkId === undefined || work.workId > params.afterWorkId)\n\t\t.filter(\n\t\t\t(work) =>\n\t\t\t\tparams.afterAdmissionSeq === undefined || work.admissionSeq > params.afterAdmissionSeq,\n\t\t)\n\t\t.sort((a, b) =>\n\t\t\torderByWorkId\n\t\t\t\t? a.workId.localeCompare(b.workId)\n\t\t\t\t: a.admissionSeq - b.admissionSeq || a.workId.localeCompare(b.workId),\n\t\t);\n\tconst items = all.map((work) => ({\n\t\tworkId: work.workId,\n\t\tstate: work.state,\n\t\tpayload: work.payload,\n\t\tadmissionSeq: work.admissionSeq,\n\t\tpriority: work.priority,\n\t\ttags: work.tags,\n\t\trequirements: work.requirements,\n\t\tnotBeforeMs: work.notBeforeMs,\n\t\tretryAtMs: work.retryAtMs,\n\t\tdeadlineMs: work.deadlineMs,\n\t}));\n\tconst page = items.slice(0, limit);\n\treturn {\n\t\titems: page,\n\t\t...(items.length > limit && page.length > 0\n\t\t\t? { nextAfterWorkId: page[page.length - 1]?.workId }\n\t\t\t: {}),\n\t\t...(items.length > limit && page.length > 0\n\t\t\t? { nextAfterAdmissionSeq: page[page.length - 1]?.admissionSeq }\n\t\t\t: {}),\n\t\thasMore: items.length > limit,\n\t\tasOfRecordSeq: state.recordSeq,\n\t};\n}\n\nexport function workSnapshot<T>(state: RuntimeState<T>, workId: string): WorkQueueWorkSnapshot<T> {\n\tconst work = state.works.get(workId);\n\treturn {\n\t\tworkId,\n\t\tstate: work?.state,\n\t\tpayload: work?.payload,\n\t\t...(work?.state !== \"leased\" || work.leaseId === undefined\n\t\t\t? {}\n\t\t\t: {\n\t\t\t\t\tactiveLease: {\n\t\t\t\t\t\tleaseId: work.leaseId,\n\t\t\t\t\t\tattempt: work.attempt,\n\t\t\t\t\t\tworkerId: work.workerId as string,\n\t\t\t\t\t\tleaseExpiresAtMs: work.leaseExpiresAtMs as number,\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\trecords: state.records.filter((record) => record.workId === workId),\n\t\tasOfRecordSeq: state.recordSeq,\n\t};\n}\n\nexport function deadLetterPage<T>(\n\tstate: RuntimeState<T>,\n\tparams: WorkQueueDeadLetterParams,\n): WorkQueueDeadLetterPage<T> {\n\tconst limit = positiveLimit(params.limit ?? 100);\n\tconst entries = state.deadLetters.filter((record) => {\n\t\tif (params.afterDeadLetterSeq !== undefined && record.recordSeq <= params.afterDeadLetterSeq)\n\t\t\treturn false;\n\t\tif (params.afterWorkId !== undefined && (record.workId ?? \"\") <= params.afterWorkId)\n\t\t\treturn false;\n\t\treturn true;\n\t});\n\tconst page = entries.slice(0, limit);\n\treturn {\n\t\tentries: page,\n\t\t...(entries.length > limit && page.length > 0\n\t\t\t? { nextAfterDeadLetterSeq: page[page.length - 1]?.recordSeq }\n\t\t\t: {}),\n\t\thasMore: entries.length > limit,\n\t\tasOfRecordSeq: state.recordSeq,\n\t};\n}\n","/**\n * MessageBus-backed generic work queue (D299-D324).\n *\n * The queue core is graph-visible facts: commands, records, status, issues. It is intentionally\n * independent from orchestration/WorkItem/executor registries.\n */\n\nimport { depBatch } from \"../ctx/types.js\";\nimport type { DataIssue } from \"../data/index.js\";\nimport type { Graph } from \"../graph/graph.js\";\nimport type {\n\tMessageBusAvailablePage,\n\tMessageBusCommand,\n\tMessageBusMessage,\n\tMessageBusStatus,\n} from \"../messaging/index.js\";\nimport { attachMessageBusDeferredCommandSink } from \"../messaging/internal.js\";\nimport { availablePage, deadLetterPage, workSnapshot } from \"./projections.js\";\nimport type { QueueEvent, RuntimeState, WorkState } from \"./runtime-types.js\";\nimport type {\n\tWorkQueue,\n\tWorkQueueAvailablePage,\n\tWorkQueueAvailableParams,\n\tWorkQueueCommand,\n\tWorkQueueDeadLetterPage,\n\tWorkQueueDeadLetterParams,\n\tWorkQueueOptions,\n\tWorkQueueRecord,\n\tWorkQueueRetryPolicy,\n\tWorkQueueStatus,\n\tWorkQueueWorkSnapshot,\n} from \"./types.js\";\nimport {\n\tappendRecord,\n\tassertNonEmpty,\n\tclearLease,\n\tcommandNowMs,\n\tdecodeSubmittedPayload,\n\tisExpiredLease,\n\tisReady,\n\tissueEvent,\n\tisTerminal,\n\tmaterializeLeaseExpired,\n\tnextCommandId,\n\tnumberOrUndefined,\n\tpayloadAsRecord,\n\tpositiveLimit,\n\tpublishQueueCommand,\n\tpullParams,\n\trecordEvent,\n\trejectQueueCommand,\n\tstatusEvent,\n\tstringArrayOrUndefined,\n\tsubmitPayload,\n\tvalidateQueueCommand,\n} from \"./utils.js\";\n\nexport type {\n\tWorkQueue,\n\tWorkQueueAvailableItem,\n\tWorkQueueAvailablePage,\n\tWorkQueueAvailableParams,\n\tWorkQueueAvailableProjection,\n\tWorkQueueCommand,\n\tWorkQueueDeadLetterPage,\n\tWorkQueueDeadLetterParams,\n\tWorkQueueDerivedState,\n\tWorkQueueOptions,\n\tWorkQueueProjection,\n\tWorkQueueRecord,\n\tWorkQueueRetryPolicy,\n\tWorkQueueStatus,\n\tWorkQueueWorkSnapshot,\n} from \"./types.js\";\n\nexport function workQueue<T = unknown>(graph: Graph, opts: WorkQueueOptions<T>): WorkQueue<T> {\n\tassertNonEmpty(opts.queueId, \"workQueue.queueId\");\n\tassertNonEmpty(opts.topic, \"workQueue.topic\");\n\tassertNonEmpty(opts.subscriptionId, \"workQueue.subscriptionId\");\n\tconst name = opts.name ?? `workQueue/${opts.queueId}`;\n\tconst now = opts.now ?? Date.now;\n\tconst leaseDurationMs = opts.leaseDurationMs ?? 30_000;\n\tconst retry = opts.retry ?? { maxAttempts: 3, delayMs: 0 };\n\tconst admission = opts.bus.subscription<T>({\n\t\ttopic: opts.topic,\n\t\tsubscriptionId: opts.subscriptionId,\n\t\tfrom: opts.from ?? \"earliest\",\n\t\tname: `${name}/admission`,\n\t});\n\tconst commands = graph.node<WorkQueueCommand<T>>(\n\t\t[],\n\t\t(ctx) => {\n\t\t\tfor (const command of depBatch(ctx, 0) ?? []) ctx.down([[\"DATA\", command]]);\n\t\t},\n\t\t{\n\t\t\tname: `${name}/commands`,\n\t\t\tfactory: \"workQueueCommands\",\n\t\t\tcompleteWhenDepsComplete: false,\n\t\t\terrorWhenDepsError: false,\n\t\t},\n\t);\n\tconst state: RuntimeState<T> = {\n\t\trecordSeq: 0,\n\t\tleaseSeq: 0,\n\t\tworks: new Map(),\n\t\tsourceSeqs: new Set(),\n\t\tcommandIds: new Set(),\n\t\tidempotencyKeys: new Set(),\n\t\trecords: [],\n\t\tdeadLetters: [],\n\t};\n\tconst admissionKick = graph.node<\"poll\">([], null, {\n\t\tname: `${name}/admissionKick`,\n\t\tfactory: \"workQueueAdmissionKick\",\n\t\tinitial: \"poll\",\n\t\tcompleteWhenDepsComplete: false,\n\t\terrorWhenDepsError: false,\n\t});\n\tconst admissionPages = graph.node<MessageBusAvailablePage<T>>(\n\t\t[admission.available, admissionKick, opts.bus.messages, opts.bus.status],\n\t\t(ctx) => {\n\t\t\tfor (const page of depBatch(ctx, 0) ?? []) {\n\t\t\t\tctx.down([[\"DATA\", page as MessageBusAvailablePage<T>]]);\n\t\t\t}\n\t\t\tlet shouldPull = (depBatch(ctx, 1)?.length ?? 0) > 0;\n\t\t\tfor (const message of depBatch(ctx, 2) ?? []) {\n\t\t\t\tif ((message as MessageBusMessage<T>).topic === opts.topic) shouldPull = true;\n\t\t\t}\n\t\t\tfor (const status of depBatch(ctx, 3) ?? []) {\n\t\t\t\tif (shouldPollAdmission(status as MessageBusStatus, opts.topic, opts.subscriptionId)) {\n\t\t\t\t\tshouldPull = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (shouldPull) {\n\t\t\t\tctx.upNext([[\"PULL\", { pullId: admission.availablePullId, params: { limit: 100 } }]], 0);\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tname: `${name}/admissionPages`,\n\t\t\tfactory: \"workQueueAdmissionPages\",\n\t\t\tpartial: true,\n\t\t\tcompleteWhenDepsComplete: false,\n\t\t\terrorWhenDepsError: false,\n\t\t},\n\t);\n\tconst runtime = graph.node<QueueEvent<T>>(\n\t\t[commands, admissionPages],\n\t\t(ctx) => {\n\t\t\tfor (const page of depBatch(ctx, 1) ?? []) {\n\t\t\t\tfor (const msg of (page as MessageBusAvailablePage<T>).messages) {\n\t\t\t\t\tfor (const event of admitMessage(opts, state, msg, now())) ctx.down([[\"DATA\", event]]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (const command of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst commandTime = commandNowMs(command as WorkQueueCommand<T>, now());\n\t\t\t\tfor (const event of reduceQueueCommand(\n\t\t\t\t\topts,\n\t\t\t\t\tstate,\n\t\t\t\t\tcommand as WorkQueueCommand<T>,\n\t\t\t\t\tcommandTime,\n\t\t\t\t\tleaseDurationMs,\n\t\t\t\t\tretry,\n\t\t\t\t)) {\n\t\t\t\t\tctx.down([[\"DATA\", event]]);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tname: `${name}/runtime`,\n\t\t\tfactory: \"workQueueRuntime\",\n\t\t\tpartial: true,\n\t\t\tcompleteWhenDepsComplete: false,\n\t\t\terrorWhenDepsError: false,\n\t\t},\n\t);\n\tconst records = graph.node<WorkQueueRecord<T>>(\n\t\t[runtime],\n\t\t(ctx) => {\n\t\t\tfor (const event of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst typed = event as QueueEvent<T>;\n\t\t\t\tif (typed.kind === \"record\") ctx.down([[\"DATA\", typed.record]]);\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tname: `${name}/records`,\n\t\t\tfactory: \"workQueueRecords\",\n\t\t\tcompleteWhenDepsComplete: false,\n\t\t\terrorWhenDepsError: false,\n\t\t},\n\t);\n\tconst status = graph.node<WorkQueueStatus>(\n\t\t[runtime],\n\t\t(ctx) => {\n\t\t\tfor (const event of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst typed = event as QueueEvent<T>;\n\t\t\t\tif (typed.kind === \"status\") ctx.down([[\"DATA\", typed.status]]);\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tname: `${name}/status`,\n\t\t\tfactory: \"workQueueStatus\",\n\t\t\tcompleteWhenDepsComplete: false,\n\t\t\terrorWhenDepsError: false,\n\t\t},\n\t);\n\tconst issues = graph.node<DataIssue>(\n\t\t[runtime],\n\t\t(ctx) => {\n\t\t\tfor (const event of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst typed = event as QueueEvent<T>;\n\t\t\t\tif (typed.kind === \"issue\") ctx.down([[\"DATA\", typed.issue]]);\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tname: `${name}/issues`,\n\t\t\tfactory: \"workQueueIssues\",\n\t\t\tcompleteWhenDepsComplete: false,\n\t\t\terrorWhenDepsError: false,\n\t\t},\n\t);\n\tconst admissionAckCommands = graph.node<MessageBusCommand>(\n\t\t[records],\n\t\t(ctx) => {\n\t\t\tfor (const record of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst command = admissionAckCommand(record as WorkQueueRecord<T>);\n\t\t\t\tif (command !== undefined) ctx.down([[\"DATA\", command]]);\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tname: `${name}/admissionAckCommands`,\n\t\t\tfactory: \"workQueueAdmissionAckCommands\",\n\t\t\tcompleteWhenDepsComplete: false,\n\t\t\terrorWhenDepsError: false,\n\t\t},\n\t);\n\tattachMessageBusDeferredCommandSink(graph, opts.bus, admissionAckCommands);\n\tgraph.retain(runtime, { reason: `${name}.workQueue.runtime` });\n\tconst queue: WorkQueue<T> = {\n\t\tcommands,\n\t\trecords,\n\t\tstatus,\n\t\tissues,\n\t\tsubmit(payload, submitOpts = {}) {\n\t\t\tconst command = opts.bus.publish(\n\t\t\t\topts.topic,\n\t\t\t\tsubmitPayload(payload, {\n\t\t\t\t\t...(submitOpts.workId === undefined ? {} : { workId: submitOpts.workId }),\n\t\t\t\t\t...(submitOpts.priority === undefined ? {} : { priority: submitOpts.priority }),\n\t\t\t\t\t...(submitOpts.tags === undefined ? {} : { tags: submitOpts.tags }),\n\t\t\t\t\t...(submitOpts.requirements === undefined\n\t\t\t\t\t\t? {}\n\t\t\t\t\t\t: { requirements: submitOpts.requirements }),\n\t\t\t\t\t...(submitOpts.notBeforeMs === undefined ? {} : { notBeforeMs: submitOpts.notBeforeMs }),\n\t\t\t\t\t...(submitOpts.deadlineMs === undefined ? {} : { deadlineMs: submitOpts.deadlineMs }),\n\t\t\t\t}),\n\t\t\t\t{\n\t\t\t\t\tcommandId: submitOpts.commandId ?? nextCommandId(opts.queueId, \"submit\"),\n\t\t\t\t\tidempotencyKey: submitOpts.idempotencyKey,\n\t\t\t\t},\n\t\t\t);\n\t\t\treturn command;\n\t\t},\n\t\tclaim(claimOpts) {\n\t\t\treturn publishQueueCommand(commands, {\n\t\t\t\t...claimOpts,\n\t\t\t\tkind: \"claim\",\n\t\t\t\tcommandId: claimOpts.commandId ?? nextCommandId(opts.queueId, \"claim\"),\n\t\t\t} as WorkQueueCommand<T>);\n\t\t},\n\t\trenewLease(renewOpts) {\n\t\t\treturn publishQueueCommand(commands, {\n\t\t\t\t...renewOpts,\n\t\t\t\tkind: \"renew-lease\",\n\t\t\t\tcommandId: renewOpts.commandId ?? nextCommandId(opts.queueId, \"renew\"),\n\t\t\t} as WorkQueueCommand<T>);\n\t\t},\n\t\trelease(releaseOpts) {\n\t\t\treturn publishQueueCommand(commands, {\n\t\t\t\t...releaseOpts,\n\t\t\t\tkind: \"release\",\n\t\t\t\tcommandId: releaseOpts.commandId ?? nextCommandId(opts.queueId, \"release\"),\n\t\t\t} as WorkQueueCommand<T>);\n\t\t},\n\t\tcomplete(completeOpts) {\n\t\t\treturn publishQueueCommand(commands, {\n\t\t\t\t...completeOpts,\n\t\t\t\tkind: \"complete\",\n\t\t\t\tcommandId: completeOpts.commandId ?? nextCommandId(opts.queueId, \"complete\"),\n\t\t\t} as WorkQueueCommand<T>);\n\t\t},\n\t\tfail(failOpts) {\n\t\t\treturn publishQueueCommand(commands, {\n\t\t\t\t...failOpts,\n\t\t\t\tkind: \"fail\",\n\t\t\t\tcommandId: failOpts.commandId ?? nextCommandId(opts.queueId, \"fail\"),\n\t\t\t} as WorkQueueCommand<T>);\n\t\t},\n\t\tcancel(cancelOpts) {\n\t\t\treturn publishQueueCommand(commands, {\n\t\t\t\t...cancelOpts,\n\t\t\t\tkind: \"cancel\",\n\t\t\t\tcommandId: cancelOpts.commandId ?? nextCommandId(opts.queueId, \"cancel\"),\n\t\t\t} as WorkQueueCommand<T>);\n\t\t},\n\t\tschedule(scheduleOpts) {\n\t\t\treturn publishQueueCommand(commands, {\n\t\t\t\t...scheduleOpts,\n\t\t\t\tkind: \"schedule\",\n\t\t\t\tcommandId: scheduleOpts.commandId ?? nextCommandId(opts.queueId, \"schedule\"),\n\t\t\t} as WorkQueueCommand<T>);\n\t\t},\n\t\texpireLeases(expireOpts = {}) {\n\t\t\treturn publishQueueCommand(commands, {\n\t\t\t\t...expireOpts,\n\t\t\t\tkind: \"expire-leases\",\n\t\t\t\tcommandId: expireOpts.commandId ?? nextCommandId(opts.queueId, \"expire\"),\n\t\t\t} as WorkQueueCommand<T>);\n\t\t},\n\t\tavailable(projectionOpts = {}) {\n\t\t\tconst availablePullId = Symbol(`${name}/available`);\n\t\t\tconst available = graph.node<WorkQueueAvailablePage<T>>(\n\t\t\t\t[records],\n\t\t\t\t(ctx) => {\n\t\t\t\t\tconst params = pullParams<WorkQueueAvailableParams>(ctx.pull);\n\t\t\t\t\tctx.down([[\"DATA\", availablePage(state, params)]]);\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: projectionOpts.name ?? `${name}/available`,\n\t\t\t\t\tfactory: \"workQueueAvailable\",\n\t\t\t\t\tpullId: availablePullId,\n\t\t\t\t\tpartial: true,\n\t\t\t\t\tcompleteWhenDepsComplete: false,\n\t\t\t\t\terrorWhenDepsError: false,\n\t\t\t\t},\n\t\t\t);\n\t\t\treturn { available, availablePullId, status, issues };\n\t\t},\n\t\twork(workId, projectionOpts = {}) {\n\t\t\tconst snapshotPullId = Symbol(`${name}/${workId}/snapshot`);\n\t\t\tconst snapshot = graph.node<WorkQueueWorkSnapshot<T>>(\n\t\t\t\t[records],\n\t\t\t\t(ctx) => {\n\t\t\t\t\tctx.down([[\"DATA\", workSnapshot(state, workId)]]);\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: projectionOpts.name ?? `${name}/${workId}`,\n\t\t\t\t\tfactory: \"workQueueWorkSnapshot\",\n\t\t\t\t\tpullId: snapshotPullId,\n\t\t\t\t\tpartial: true,\n\t\t\t\t\tcompleteWhenDepsComplete: false,\n\t\t\t\t\terrorWhenDepsError: false,\n\t\t\t\t},\n\t\t\t);\n\t\t\treturn { snapshot, snapshotPullId, status, issues };\n\t\t},\n\t\tdeadLetter(projectionOpts = {}) {\n\t\t\tconst snapshotPullId = Symbol(`${name}/deadLetter`);\n\t\t\tconst snapshot = graph.node<WorkQueueDeadLetterPage<T>>(\n\t\t\t\t[records],\n\t\t\t\t(ctx) => {\n\t\t\t\t\tconst params = pullParams<WorkQueueDeadLetterParams>(ctx.pull);\n\t\t\t\t\tctx.down([[\"DATA\", deadLetterPage(state, params)]]);\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: projectionOpts.name ?? `${name}/deadLetter`,\n\t\t\t\t\tfactory: \"workQueueDeadLetter\",\n\t\t\t\t\tpullId: snapshotPullId,\n\t\t\t\t\tpartial: true,\n\t\t\t\t\tcompleteWhenDepsComplete: false,\n\t\t\t\t\terrorWhenDepsError: false,\n\t\t\t\t},\n\t\t\t);\n\t\t\treturn { snapshot, snapshotPullId, status, issues };\n\t\t},\n\t};\n\treturn queue;\n}\n\nfunction shouldPollAdmission(\n\tstatus: MessageBusStatus,\n\ttopic: string,\n\tsubscriptionId: string,\n): boolean {\n\tif (status.topic !== topic) return false;\n\tif (status.kind === \"message-published\" || status.kind === \"retention-trimmed\") return true;\n\treturn (\n\t\tstatus.subscriptionId === subscriptionId &&\n\t\t(status.kind === \"subscription-acked\" || status.kind === \"subscription-sought\")\n\t);\n}\n\nfunction admissionAckCommand<T>(record: WorkQueueRecord<T>): MessageBusCommand | undefined {\n\tconst messageBus = admissionMessageBus(record);\n\tif (messageBus === undefined) return undefined;\n\treturn {\n\t\tkind: \"ack\",\n\t\ttopic: messageBus.topic,\n\t\tsubscriptionId: messageBus.subscriptionId,\n\t\tseq: messageBus.seq,\n\t\tcommandId: `${record.queueId}:admission-ack:${messageBus.topic}:${messageBus.subscriptionId}:${messageBus.seq}`,\n\t};\n}\n\nfunction admissionMessageBus<T>(\n\trecord: WorkQueueRecord<T>,\n): { readonly topic: string; readonly seq: number; readonly subscriptionId: string } | undefined {\n\treturn \"messageBus\" in record ? record.messageBus : undefined;\n}\n\nfunction admitMessage<T>(\n\topts: WorkQueueOptions<T>,\n\tstate: RuntimeState<T>,\n\tmessage: MessageBusMessage<T>,\n\tnowMs: number,\n): QueueEvent<T>[] {\n\tconst source = `${message.topic}:${message.seq}`;\n\tif (state.sourceSeqs.has(source)) return [];\n\tstate.sourceSeqs.add(source);\n\tconst submitted = decodeSubmittedPayload(message.payload);\n\tconst payload = submitted.payload as T;\n\tconst payloadRecord = payloadAsRecord(submitted.meta);\n\tconst workId =\n\t\ttypeof payloadRecord.workId === \"string\"\n\t\t\t? payloadRecord.workId\n\t\t\t: `${opts.queueId}:${message.topic}:${message.seq}`;\n\tif (state.works.has(workId)) {\n\t\tconst record = appendRecord(state, opts.queueId, {\n\t\t\tkind: \"admission-deduped\",\n\t\t\tworkId,\n\t\t\tmessageBus: { topic: message.topic, seq: message.seq, subscriptionId: opts.subscriptionId },\n\t\t\treason: \"duplicate-work\",\n\t\t\texistingWorkId: workId,\n\t\t\trecordedAtMs: nowMs,\n\t\t});\n\t\treturn [\n\t\t\trecordEvent(record),\n\t\t\tstatusEvent(opts.queueId, \"admission-rejected\", nowMs, {\n\t\t\t\tworkId,\n\t\t\t\trecordSeq: record.recordSeq,\n\t\t\t\tissueCode: \"duplicate-work\",\n\t\t\t}),\n\t\t];\n\t}\n\tconst work: WorkState<T> = {\n\t\tworkId,\n\t\tpayload,\n\t\tstate:\n\t\t\ttypeof payloadRecord.notBeforeMs === \"number\" && payloadRecord.notBeforeMs > nowMs\n\t\t\t\t? \"scheduled\"\n\t\t\t\t: \"ready\",\n\t\tadmissionSeq: message.seq,\n\t\tpriority: numberOrUndefined(payloadRecord.priority),\n\t\ttags: stringArrayOrUndefined(payloadRecord.tags),\n\t\trequirements: stringArrayOrUndefined(payloadRecord.requirements),\n\t\tnotBeforeMs: numberOrUndefined(payloadRecord.notBeforeMs),\n\t\tdeadlineMs: numberOrUndefined(payloadRecord.deadlineMs),\n\t\tattempt: 0,\n\t};\n\tstate.works.set(workId, work);\n\tconst record = appendRecord<T>(state, opts.queueId, {\n\t\tkind: \"work-admitted\",\n\t\tworkId,\n\t\tpayload,\n\t\tmessageBus: { topic: message.topic, seq: message.seq, subscriptionId: opts.subscriptionId },\n\t\tpriority: work.priority,\n\t\ttags: work.tags,\n\t\trequirements: work.requirements,\n\t\tnotBeforeMs: work.notBeforeMs,\n\t\tdeadlineMs: work.deadlineMs,\n\t\trecordedAtMs: nowMs,\n\t});\n\treturn [\n\t\trecordEvent(record),\n\t\tstatusEvent(opts.queueId, \"admission-accepted\", nowMs, { workId, recordSeq: record.recordSeq }),\n\t];\n}\n\nfunction reduceQueueCommand<T>(\n\topts: WorkQueueOptions<T>,\n\tstate: RuntimeState<T>,\n\tcommand: WorkQueueCommand<T>,\n\tnowMs: number,\n\tleaseDurationMs: number,\n\tretry: WorkQueueRetryPolicy,\n): QueueEvent<T>[] {\n\tconst invalid = validateQueueCommand(opts.queueId, command);\n\tif (invalid !== undefined)\n\t\treturn rejectQueueCommand<T>(opts.queueId, command, invalid.code, invalid.message, nowMs);\n\tif (state.commandIds.has(command.commandId)) {\n\t\treturn rejectQueueCommand<T>(\n\t\t\topts.queueId,\n\t\t\tcommand,\n\t\t\t\"duplicate-command\",\n\t\t\t\"duplicate commandId\",\n\t\t\tnowMs,\n\t\t);\n\t}\n\tif (command.idempotencyKey !== undefined && state.idempotencyKeys.has(command.idempotencyKey)) {\n\t\treturn rejectQueueCommand<T>(\n\t\t\topts.queueId,\n\t\t\tcommand,\n\t\t\t\"duplicate-command\",\n\t\t\t\"duplicate idempotencyKey\",\n\t\t\tnowMs,\n\t\t);\n\t}\n\tstate.commandIds.add(command.commandId);\n\tif (command.idempotencyKey !== undefined) state.idempotencyKeys.add(command.idempotencyKey);\n\tswitch (command.kind) {\n\t\tcase \"claim\":\n\t\t\treturn claimWork(opts.queueId, state, command, nowMs, leaseDurationMs);\n\t\tcase \"renew-lease\":\n\t\t\treturn renewLease(opts.queueId, state, command, nowMs, leaseDurationMs);\n\t\tcase \"release\":\n\t\t\treturn releaseWork(opts.queueId, state, command, nowMs);\n\t\tcase \"complete\":\n\t\t\treturn completeWork(opts.queueId, state, command, nowMs);\n\t\tcase \"fail\":\n\t\t\treturn failWork(opts.queueId, state, command, nowMs, retry);\n\t\tcase \"cancel\":\n\t\t\treturn cancelWork(opts.queueId, state, command, nowMs);\n\t\tcase \"schedule\":\n\t\t\treturn scheduleWork(opts.queueId, state, command, nowMs);\n\t\tcase \"expire-leases\":\n\t\t\treturn expireLeases(opts.queueId, state, command, nowMs);\n\t\tcase \"submit\":\n\t\t\treturn [\n\t\t\t\tstatusEvent(opts.queueId, \"command-accepted\", nowMs, {\n\t\t\t\t\tcommandId: command.commandId,\n\t\t\t\t\tdetails: { submitUsesMessageBus: true },\n\t\t\t\t}),\n\t\t\t];\n\t}\n}\n\nfunction claimWork<T>(\n\tqueueId: string,\n\tstate: RuntimeState<T>,\n\tcommand: Extract<WorkQueueCommand<T>, { kind: \"claim\" }>,\n\tnowMs: number,\n\tdefaultLeaseDurationMs: number,\n): QueueEvent<T>[] {\n\tconst limit = positiveLimit(command.limit ?? command.requestedWorkIds?.length ?? 1);\n\tconst requested = new Set(command.requestedWorkIds ?? []);\n\tconst events: QueueEvent<T>[] = [];\n\tfor (const work of [...state.works.values()]\n\t\t.filter((entry) => (requested.size === 0 ? true : requested.has(entry.workId)))\n\t\t.filter((entry) => isExpiredLease(entry, nowMs))) {\n\t\tevents.push(...materializeLeaseExpired(queueId, state, work, command.commandId, nowMs));\n\t}\n\tconst candidates = [...state.works.values()]\n\t\t.filter((work) => (requested.size === 0 ? true : requested.has(work.workId)))\n\t\t.filter((work) => isReady(work, nowMs))\n\t\t.sort((a, b) => a.admissionSeq - b.admissionSeq)\n\t\t.slice(0, limit);\n\tif (candidates.length === 0)\n\t\treturn [\n\t\t\t...events,\n\t\t\t...(requested.size === 0\n\t\t\t\t? rejectQueueCommand<T>(queueId, command, \"not-ready\", \"no ready work\", nowMs)\n\t\t\t\t: claimMissEvents(queueId, state, command, requested, new Set(), nowMs)),\n\t\t];\n\tconst claimed = new Set<string>();\n\tfor (const work of candidates) {\n\t\tclaimed.add(work.workId);\n\t\twork.state = \"leased\";\n\t\twork.attempt += 1;\n\t\twork.leaseId = `${work.workId}:lease:${++state.leaseSeq}`;\n\t\twork.workerId = command.workerId;\n\t\twork.leaseExpiresAtMs = nowMs + (command.leaseDurationMs ?? defaultLeaseDurationMs);\n\t\tconst record = appendRecord(state, queueId, {\n\t\t\tkind: \"work-claimed\",\n\t\t\tworkId: work.workId,\n\t\t\tcommandId: command.commandId,\n\t\t\tleaseId: work.leaseId,\n\t\t\tattempt: work.attempt,\n\t\t\tworkerId: command.workerId,\n\t\t\tclaimedAtMs: nowMs,\n\t\t\tleaseExpiresAtMs: work.leaseExpiresAtMs,\n\t\t\trecordedAtMs: nowMs,\n\t\t});\n\t\tevents.push(\n\t\t\trecordEvent(record),\n\t\t\tstatusEvent(queueId, \"command-accepted\", nowMs, {\n\t\t\t\tworkId: work.workId,\n\t\t\t\tcommandId: command.commandId,\n\t\t\t\trecordSeq: record.recordSeq,\n\t\t\t}),\n\t\t);\n\t}\n\tif (requested.size > 0) {\n\t\tevents.push(...claimMissEvents(queueId, state, command, requested, claimed, nowMs));\n\t}\n\treturn events;\n}\n\nfunction claimMissEvents<T>(\n\tqueueId: string,\n\tstate: RuntimeState<T>,\n\tcommand: Extract<WorkQueueCommand<T>, { kind: \"claim\" }>,\n\trequested: ReadonlySet<string>,\n\tclaimed: ReadonlySet<string>,\n\tnowMs: number,\n): QueueEvent<T>[] {\n\tconst events: QueueEvent<T>[] = [];\n\tfor (const workId of requested) {\n\t\tif (claimed.has(workId)) continue;\n\t\tconst work = state.works.get(workId);\n\t\tif (work === undefined) {\n\t\t\tevents.push(\n\t\t\t\t...rejectQueueCommand<T>(\n\t\t\t\t\tqueueId,\n\t\t\t\t\tcommand,\n\t\t\t\t\t\"unknown-work\",\n\t\t\t\t\t`unknown work '${workId}'`,\n\t\t\t\t\tnowMs,\n\t\t\t\t),\n\t\t\t);\n\t\t\tcontinue;\n\t\t}\n\t\tif (isReady(work, nowMs)) continue;\n\t\tconst code = isTerminal(work.state)\n\t\t\t? \"terminal-work\"\n\t\t\t: work.state === \"leased\"\n\t\t\t\t? \"already-leased\"\n\t\t\t\t: \"not-ready\";\n\t\tevents.push(\n\t\t\t...rejectQueueCommand<T>(\n\t\t\t\tqueueId,\n\t\t\t\tcommand,\n\t\t\t\tcode,\n\t\t\t\t`requested work '${workId}' is not claimable`,\n\t\t\t\tnowMs,\n\t\t\t),\n\t\t);\n\t}\n\treturn events;\n}\n\nfunction renewLease<T>(\n\tqueueId: string,\n\tstate: RuntimeState<T>,\n\tcommand: Extract<WorkQueueCommand<T>, { kind: \"renew-lease\" }>,\n\tnowMs: number,\n\tdefaultLeaseDurationMs: number,\n): QueueEvent<T>[] {\n\tconst checked = currentLease(queueId, state, command, nowMs);\n\tif (\"issue\" in checked) return [checked.issue];\n\tif (\"events\" in checked) return checked.events;\n\tconst work = checked.work;\n\tconst previous = work.leaseExpiresAtMs as number;\n\twork.leaseExpiresAtMs =\n\t\tcommand.leaseExpiresAtMs ?? nowMs + (command.leaseDurationMs ?? defaultLeaseDurationMs);\n\tconst record = appendRecord(state, queueId, {\n\t\tkind: \"lease-renewed\",\n\t\tworkId: work.workId,\n\t\tcommandId: command.commandId,\n\t\tleaseId: command.leaseId,\n\t\tattempt: command.attempt,\n\t\tworkerId: command.workerId,\n\t\tpreviousLeaseExpiresAtMs: previous,\n\t\tleaseExpiresAtMs: work.leaseExpiresAtMs,\n\t\trenewedAtMs: nowMs,\n\t\trecordedAtMs: nowMs,\n\t});\n\treturn [\n\t\trecordEvent(record),\n\t\tstatusEvent(queueId, \"command-accepted\", nowMs, {\n\t\t\tworkId: work.workId,\n\t\t\tcommandId: command.commandId,\n\t\t\trecordSeq: record.recordSeq,\n\t\t}),\n\t];\n}\n\nfunction releaseWork<T>(\n\tqueueId: string,\n\tstate: RuntimeState<T>,\n\tcommand: Extract<WorkQueueCommand<T>, { kind: \"release\" }>,\n\tnowMs: number,\n): QueueEvent<T>[] {\n\tconst checked = currentLease(queueId, state, command, nowMs);\n\tif (\"issue\" in checked) return [checked.issue];\n\tif (\"events\" in checked) return checked.events;\n\tconst work = checked.work;\n\twork.state = \"ready\";\n\twork.leaseId = undefined;\n\twork.workerId = undefined;\n\twork.leaseExpiresAtMs = undefined;\n\tconst record = appendRecord(state, queueId, {\n\t\tkind: \"work-released\",\n\t\tworkId: work.workId,\n\t\tcommandId: command.commandId,\n\t\tleaseId: command.leaseId,\n\t\tattempt: command.attempt,\n\t\tworkerId: command.workerId,\n\t\treleasedAtMs: nowMs,\n\t\treason: command.reason,\n\t\trecordedAtMs: nowMs,\n\t});\n\treturn [\n\t\trecordEvent(record),\n\t\tstatusEvent(queueId, \"command-accepted\", nowMs, {\n\t\t\tworkId: work.workId,\n\t\t\tcommandId: command.commandId,\n\t\t\trecordSeq: record.recordSeq,\n\t\t}),\n\t];\n}\n\nfunction completeWork<T>(\n\tqueueId: string,\n\tstate: RuntimeState<T>,\n\tcommand: Extract<WorkQueueCommand<T>, { kind: \"complete\" }>,\n\tnowMs: number,\n): QueueEvent<T>[] {\n\tconst checked = currentLease(queueId, state, command, nowMs);\n\tif (\"issue\" in checked) return [checked.issue];\n\tif (\"events\" in checked) return checked.events;\n\tconst work = checked.work;\n\twork.state = \"completed\";\n\tclearLease(work);\n\twork.terminalRecordSeq = state.recordSeq + 2;\n\tconst attempt = appendRecord(state, queueId, {\n\t\tkind: \"attempt-completed\",\n\t\tworkId: work.workId,\n\t\tcommandId: command.commandId,\n\t\tleaseId: command.leaseId,\n\t\tattempt: command.attempt,\n\t\tworkerId: command.workerId,\n\t\tresult: command.result,\n\t\trecordedAtMs: nowMs,\n\t});\n\tconst done = appendRecord(state, queueId, {\n\t\tkind: \"work-completed\",\n\t\tworkId: work.workId,\n\t\tcommandId: command.commandId,\n\t\tleaseId: command.leaseId,\n\t\tattempt: command.attempt,\n\t\tworkerId: command.workerId,\n\t\tresult: command.result,\n\t\trecordedAtMs: nowMs,\n\t});\n\treturn [\n\t\trecordEvent(attempt),\n\t\trecordEvent(done),\n\t\tstatusEvent(queueId, \"command-accepted\", nowMs, {\n\t\t\tworkId: work.workId,\n\t\t\tcommandId: command.commandId,\n\t\t\trecordSeq: done.recordSeq,\n\t\t}),\n\t];\n}\n\nfunction failWork<T>(\n\tqueueId: string,\n\tstate: RuntimeState<T>,\n\tcommand: Extract<WorkQueueCommand<T>, { kind: \"fail\" }>,\n\tnowMs: number,\n\tretry: WorkQueueRetryPolicy,\n): QueueEvent<T>[] {\n\tconst checked = currentLease(queueId, state, command, nowMs);\n\tif (\"issue\" in checked) return [checked.issue];\n\tif (\"events\" in checked) return checked.events;\n\tconst work = checked.work;\n\tconst failed = appendRecord(state, queueId, {\n\t\tkind: \"attempt-failed\",\n\t\tworkId: work.workId,\n\t\tcommandId: command.commandId,\n\t\tleaseId: command.leaseId,\n\t\tattempt: command.attempt,\n\t\tworkerId: command.workerId,\n\t\terror: command.error,\n\t\tretryable: command.retryable,\n\t\trecordedAtMs: nowMs,\n\t});\n\tconst maxAttempts = retry.maxAttempts ?? 3;\n\tif (command.retryable === false || work.attempt >= maxAttempts) {\n\t\twork.state = \"dead-lettered\";\n\t\tclearLease(work);\n\t\twork.retryAtMs = undefined;\n\t\tconst dead = appendRecord(state, queueId, {\n\t\t\tkind: \"work-dead-lettered\",\n\t\t\tworkId: work.workId,\n\t\t\tcommandId: command.commandId,\n\t\t\treason: command.retryable === false ? \"non-retryable\" : \"attempts-exhausted\",\n\t\t\texhaustedAttempts: work.attempt,\n\t\t\trecordedAtMs: nowMs,\n\t\t});\n\t\tstate.deadLetters.push(dead);\n\t\treturn [\n\t\t\trecordEvent(failed),\n\t\t\trecordEvent(dead),\n\t\t\tstatusEvent(queueId, \"command-accepted\", nowMs, {\n\t\t\t\tworkId: work.workId,\n\t\t\t\tcommandId: command.commandId,\n\t\t\t\trecordSeq: dead.recordSeq,\n\t\t\t}),\n\t\t];\n\t}\n\tconst delayMs = retry.delayMs ?? 0;\n\twork.state = delayMs > 0 ? \"retry-wait\" : \"ready\";\n\twork.retryAtMs = nowMs + delayMs;\n\tclearLease(work);\n\tconst retryRecord = appendRecord(state, queueId, {\n\t\tkind: \"retry-scheduled\",\n\t\tworkId: work.workId,\n\t\tcommandId: command.commandId,\n\t\tretryAtMs: work.retryAtMs,\n\t\tdelayMs,\n\t\treason: \"retry-policy\",\n\t\trecordedAtMs: nowMs,\n\t});\n\treturn [\n\t\trecordEvent(failed),\n\t\trecordEvent(retryRecord),\n\t\tstatusEvent(queueId, \"command-accepted\", nowMs, {\n\t\t\tworkId: work.workId,\n\t\t\tcommandId: command.commandId,\n\t\t\trecordSeq: retryRecord.recordSeq,\n\t\t}),\n\t];\n}\n\nfunction cancelWork<T>(\n\tqueueId: string,\n\tstate: RuntimeState<T>,\n\tcommand: Extract<WorkQueueCommand<T>, { kind: \"cancel\" }>,\n\tnowMs: number,\n): QueueEvent<T>[] {\n\tconst work = state.works.get(command.workId);\n\tif (work === undefined)\n\t\treturn [issueEvent(queueId, \"unknown-work\", \"unknown work\", nowMs, command)];\n\tif (isTerminal(work.state))\n\t\treturn [issueEvent(queueId, \"terminal-work\", \"work is terminal\", nowMs, command)];\n\twork.state = \"canceled\";\n\tconst canceledLeaseId = work.leaseId;\n\tconst attempt = work.attempt || undefined;\n\tconst record = appendRecord(state, queueId, {\n\t\tkind: \"work-canceled\",\n\t\tworkId: work.workId,\n\t\tcommandId: command.commandId,\n\t\treason: command.reason,\n\t\tcanceledAtMs: nowMs,\n\t\tcanceledLeaseId,\n\t\tattempt,\n\t\trecordedAtMs: nowMs,\n\t});\n\tclearLease(work);\n\treturn [\n\t\trecordEvent(record),\n\t\tstatusEvent(queueId, \"command-accepted\", nowMs, {\n\t\t\tworkId: work.workId,\n\t\t\tcommandId: command.commandId,\n\t\t\trecordSeq: record.recordSeq,\n\t\t}),\n\t];\n}\n\nfunction scheduleWork<T>(\n\tqueueId: string,\n\tstate: RuntimeState<T>,\n\tcommand: Extract<WorkQueueCommand<T>, { kind: \"schedule\" }>,\n\tnowMs: number,\n): QueueEvent<T>[] {\n\tconst work = state.works.get(command.workId);\n\tif (work === undefined)\n\t\treturn [issueEvent(queueId, \"unknown-work\", \"unknown work\", nowMs, command)];\n\tif (isTerminal(work.state))\n\t\treturn [issueEvent(queueId, \"terminal-work\", \"work is terminal\", nowMs, command)];\n\twork.state = \"scheduled\";\n\twork.notBeforeMs = command.notBeforeMs;\n\twork.deadlineMs = command.deadlineMs;\n\tconst record = appendRecord(state, queueId, {\n\t\tkind: \"work-scheduled\",\n\t\tworkId: work.workId,\n\t\tcommandId: command.commandId,\n\t\tscheduleId: command.scheduleId,\n\t\tscheduleAtMs: command.scheduleAtMs,\n\t\trunAtMs: command.runAtMs,\n\t\tnotBeforeMs: command.notBeforeMs,\n\t\tdeadlineMs: command.deadlineMs,\n\t\treason: command.reason,\n\t\trecordedAtMs: nowMs,\n\t});\n\treturn [\n\t\trecordEvent(record),\n\t\tstatusEvent(queueId, \"command-accepted\", nowMs, {\n\t\t\tworkId: work.workId,\n\t\t\tcommandId: command.commandId,\n\t\t\trecordSeq: record.recordSeq,\n\t\t}),\n\t];\n}\n\nfunction expireLeases<T>(\n\tqueueId: string,\n\tstate: RuntimeState<T>,\n\tcommand: Extract<WorkQueueCommand<T>, { kind: \"expire-leases\" }>,\n\tnowMs: number,\n): QueueEvent<T>[] {\n\tconst workIds = new Set(command.workIds ?? []);\n\tconst limit = positiveLimit(command.limit ?? Number.MAX_SAFE_INTEGER);\n\tconst expired = [...state.works.values()]\n\t\t.filter(\n\t\t\t(work) =>\n\t\t\t\twork.state === \"leased\" &&\n\t\t\t\twork.leaseExpiresAtMs !== undefined &&\n\t\t\t\twork.leaseExpiresAtMs <= nowMs,\n\t\t)\n\t\t.filter((work) => workIds.size === 0 || workIds.has(work.workId))\n\t\t.slice(0, limit);\n\tif (expired.length === 0)\n\t\treturn [statusEvent(queueId, \"maintenance-noop\", nowMs, { commandId: command.commandId })];\n\tconst events: QueueEvent<T>[] = [];\n\tfor (const work of expired) {\n\t\tevents.push(...materializeLeaseExpired(queueId, state, work, command.commandId, nowMs));\n\t}\n\tevents.push(\n\t\tstatusEvent(queueId, \"maintenance-applied\", nowMs, {\n\t\t\tcommandId: command.commandId,\n\t\t\tdetails: { expired: expired.length },\n\t\t}),\n\t);\n\treturn events;\n}\n\nfunction currentLease<T>(\n\tqueueId: string,\n\tstate: RuntimeState<T>,\n\tcommand: {\n\t\tcommandId?: string;\n\t\tworkId: string;\n\t\tleaseId: string;\n\t\tattempt: number;\n\t\tworkerId: string;\n\t},\n\tnowMs: number,\n): { work: WorkState<T> } | { issue: QueueEvent<T> } | { events: QueueEvent<T>[] } {\n\tconst work = state.works.get(command.workId);\n\tif (work === undefined)\n\t\treturn { issue: issueEvent(queueId, \"unknown-work\", \"unknown work\", nowMs, command) };\n\tif (isTerminal(work.state))\n\t\treturn { issue: issueEvent(queueId, \"terminal-work\", \"work is terminal\", nowMs, command) };\n\tif (work.state !== \"leased\")\n\t\treturn {\n\t\t\tissue: issueEvent(queueId, \"lease-not-current\", \"work is not leased\", nowMs, command),\n\t\t};\n\tif (work.leaseId !== command.leaseId)\n\t\treturn { issue: issueEvent(queueId, \"stale-lease\", \"lease is not current\", nowMs, command) };\n\tif (work.attempt !== command.attempt)\n\t\treturn { issue: issueEvent(queueId, \"attempt-mismatch\", \"attempt mismatch\", nowMs, command) };\n\tif (work.workerId !== command.workerId)\n\t\treturn { issue: issueEvent(queueId, \"worker-mismatch\", \"worker mismatch\", nowMs, command) };\n\tif (isExpiredLease(work, nowMs))\n\t\treturn {\n\t\t\tevents: materializeLeaseExpired(queueId, state, work, command.commandId, nowMs, {\n\t\t\t\tcommand,\n\t\t\t\tcode: \"lease-expired\",\n\t\t\t\tmessage: \"lease expired\",\n\t\t\t}),\n\t\t};\n\treturn { work };\n}\n"],"mappings":"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","names":["status","record"]}
|