@sixb/core 0.1.18 → 0.1.19
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 +7 -6
- package/dist/actions/commit-edits.d.ts +7 -19
- package/dist/actions/commit-edits.d.ts.map +1 -1
- package/dist/actions/errors.d.ts +0 -3
- package/dist/actions/errors.d.ts.map +1 -1
- package/dist/actions/execution.d.ts +10 -3
- package/dist/actions/execution.d.ts.map +1 -1
- package/dist/actions/index.d.ts +6 -9
- package/dist/actions/index.d.ts.map +1 -1
- package/dist/actions/index.js +51 -50
- package/dist/actions/index.js.map +1 -1
- package/dist/actions/request.d.ts +14 -25
- package/dist/actions/request.d.ts.map +1 -1
- package/dist/actions/run/context.d.ts +40 -0
- package/dist/actions/run/context.d.ts.map +1 -0
- package/dist/actions/run/edits-commit.d.ts +31 -0
- package/dist/actions/run/edits-commit.d.ts.map +1 -0
- package/dist/actions/run/effects.d.ts +23 -0
- package/dist/actions/run/effects.d.ts.map +1 -0
- package/dist/actions/run/execute.d.ts +30 -0
- package/dist/actions/run/execute.d.ts.map +1 -0
- package/dist/actions/run/executor.d.ts +95 -0
- package/dist/actions/run/executor.d.ts.map +1 -0
- package/dist/actions/run/normalize.d.ts +36 -0
- package/dist/actions/run/normalize.d.ts.map +1 -0
- package/dist/actions/run/phase-types.d.ts +18 -0
- package/dist/actions/run/phase-types.d.ts.map +1 -0
- package/dist/actions/run/phases.d.ts +20 -0
- package/dist/actions/run/phases.d.ts.map +1 -0
- package/dist/actions/run/run-action.d.ts +25 -0
- package/dist/actions/run/run-action.d.ts.map +1 -0
- package/dist/actions/run/signals.d.ts +67 -0
- package/dist/actions/run/signals.d.ts.map +1 -0
- package/dist/actions/run/state.d.ts +47 -0
- package/dist/actions/run/state.d.ts.map +1 -0
- package/dist/actions/run/types.d.ts +54 -0
- package/dist/actions/run/types.d.ts.map +1 -0
- package/dist/actions/run/writeback.d.ts +17 -0
- package/dist/actions/run/writeback.d.ts.map +1 -0
- package/dist/actions/run-authorization.d.ts +1 -1
- package/dist/actions/run-authorization.d.ts.map +1 -1
- package/dist/actions/run-persistence.d.ts +53 -0
- package/dist/actions/run-persistence.d.ts.map +1 -0
- package/dist/actions/types/context.d.ts +10 -0
- package/dist/actions/types/context.d.ts.map +1 -1
- package/dist/agents/index.js +52 -55
- package/dist/agents/index.js.map +1 -1
- package/dist/agents/streams/index.js +2 -2
- package/dist/agents/streams/internal.js +2 -2
- package/dist/auth/index.js +11 -11
- package/dist/auth/index.js.map +1 -1
- package/dist/authorization/event-visibility.d.ts.map +1 -1
- package/dist/authorization/index.js +3 -3
- package/dist/bootstrap/index.js +46 -49
- package/dist/bootstrap/index.js.map +2 -2
- package/dist/{chunk-d0eb5yy6.js → chunk-1f7wpmyp.js} +5 -5
- package/dist/{chunk-d0eb5yy6.js.map → chunk-1f7wpmyp.js.map} +1 -1
- package/dist/{chunk-vgk3hknm.js → chunk-1k89ecfr.js} +1 -1
- package/dist/{chunk-6h5m9xjx.js → chunk-3gnrh4ve.js} +6 -10
- package/dist/{chunk-6h5m9xjx.js.map → chunk-3gnrh4ve.js.map} +4 -4
- package/dist/{chunk-htr6wjmv.js → chunk-4tcx876c.js} +15 -15
- package/dist/{chunk-htr6wjmv.js.map → chunk-4tcx876c.js.map} +1 -1
- package/dist/{chunk-za5yd58j.js → chunk-52bk93x8.js} +2 -2
- package/dist/{chunk-22v5bpz3.js → chunk-5e43w60z.js} +1 -1
- package/dist/{chunk-zxawp1n2.js → chunk-7kg3k1m9.js} +1 -1
- package/dist/{chunk-ny3xyvcn.js → chunk-7mbzgd9m.js} +3 -3
- package/dist/{chunk-b9affek3.js → chunk-7n440zgt.js} +30 -30
- package/dist/{chunk-b9affek3.js.map → chunk-7n440zgt.js.map} +4 -4
- package/dist/{chunk-kkqwzy6h.js → chunk-7t429e3f.js} +1 -1
- package/dist/{chunk-s4jhg8a3.js → chunk-80mc0971.js} +13 -13
- package/dist/{chunk-s4jhg8a3.js.map → chunk-80mc0971.js.map} +1 -1
- package/dist/{chunk-1b1f2d5f.js → chunk-85yvv5n0.js} +8 -8
- package/dist/{chunk-1b1f2d5f.js.map → chunk-85yvv5n0.js.map} +1 -1
- package/dist/{chunk-6fsr7y93.js → chunk-8mx7qw3y.js} +14 -13
- package/dist/{chunk-6fsr7y93.js.map → chunk-8mx7qw3y.js.map} +4 -4
- package/dist/{chunk-kpx7jrmn.js → chunk-91mg3nj9.js} +59 -59
- package/dist/{chunk-kpx7jrmn.js.map → chunk-91mg3nj9.js.map} +5 -5
- package/dist/{chunk-48e3cn2d.js → chunk-9gyp8hg1.js} +2 -2
- package/dist/{chunk-ewqa58h9.js → chunk-9k93ah50.js} +4 -4
- package/dist/{chunk-ewqa58h9.js.map → chunk-9k93ah50.js.map} +1 -1
- package/dist/{chunk-4wn7bxxa.js → chunk-9ybhtmg4.js} +1 -1
- package/dist/{chunk-fc5zfxy1.js → chunk-a40ad1ft.js} +5 -13
- package/dist/chunk-a40ad1ft.js.map +10 -0
- package/dist/{chunk-vz3gc1tm.js → chunk-aff7cyea.js} +62 -64
- package/dist/{chunk-vz3gc1tm.js.map → chunk-aff7cyea.js.map} +4 -4
- package/dist/{chunk-y2aq6ag9.js → chunk-b38szspf.js} +5 -14
- package/dist/chunk-b38szspf.js.map +11 -0
- package/dist/{chunk-r2y23egw.js → chunk-bkpke1sg.js} +1 -10
- package/dist/chunk-bkpke1sg.js.map +10 -0
- package/dist/{chunk-bs7sqkre.js → chunk-bpgy64fw.js} +1 -1
- package/dist/{chunk-vx2yp45y.js → chunk-c85m1hyj.js} +2 -2
- package/dist/{chunk-v6xpd60t.js → chunk-d2ync1v3.js} +5 -5
- package/dist/{chunk-fe52eczz.js → chunk-ey3pyej1.js} +6345 -2125
- package/dist/chunk-ey3pyej1.js.map +106 -0
- package/dist/{chunk-vjcd8d27.js → chunk-fa02jy15.js} +1 -1
- package/dist/{chunk-y05543x6.js → chunk-hvsb78a1.js} +4 -4
- package/dist/{chunk-y05543x6.js.map → chunk-hvsb78a1.js.map} +1 -1
- package/dist/{chunk-qq90g05n.js → chunk-j2bp5ryw.js} +53 -244
- package/dist/{chunk-qq90g05n.js.map → chunk-j2bp5ryw.js.map} +3 -3
- package/dist/{chunk-qmnnhde6.js → chunk-kg5j6fct.js} +1 -1
- package/dist/{chunk-de4z2bj6.js → chunk-kyzq4wy9.js} +6 -6
- package/dist/{chunk-wr8qp979.js → chunk-m427qgq0.js} +9 -5
- package/dist/{chunk-wr8qp979.js.map → chunk-m427qgq0.js.map} +4 -3
- package/dist/{chunk-e1c18xjx.js → chunk-nq6gpjt7.js} +4 -45
- package/dist/{chunk-e1c18xjx.js.map → chunk-nq6gpjt7.js.map} +5 -5
- package/dist/{chunk-ex496vct.js → chunk-nre82s12.js} +1 -1
- package/dist/{chunk-1hqwggsn.js → chunk-nzapm6p0.js} +1 -2
- package/dist/chunk-nzapm6p0.js.map +12 -0
- package/dist/{chunk-wt4szfec.js → chunk-pbcbn83d.js} +4 -4
- package/dist/{chunk-wt4szfec.js.map → chunk-pbcbn83d.js.map} +1 -1
- package/dist/{chunk-7hpdd6r9.js → chunk-q1vkr2ys.js} +4 -4
- package/dist/{chunk-zb77kjth.js → chunk-rhg02hxq.js} +3 -3
- package/dist/{chunk-y9jmd7e5.js → chunk-s16apyk9.js} +102 -16
- package/dist/chunk-s16apyk9.js.map +16 -0
- package/dist/{chunk-yv9czyfr.js → chunk-t6vq7bff.js} +5 -5
- package/dist/{chunk-qkvz64nd.js → chunk-tjb1mk5t.js} +2 -2
- package/dist/{chunk-p844e0rn.js → chunk-tpn40322.js} +2 -2
- package/dist/{chunk-rt9p8m9t.js → chunk-v9xd5wzd.js} +1 -1
- package/dist/{chunk-2vhg6ysa.js → chunk-vyf9kfqf.js} +1 -1
- package/dist/{chunk-k6hrnf35.js → chunk-wwdfe68s.js} +51 -4
- package/dist/chunk-wwdfe68s.js.map +11 -0
- package/dist/{chunk-f1zxad2t.js → chunk-wz0xs816.js} +6 -6
- package/dist/{chunk-f1zxad2t.js.map → chunk-wz0xs816.js.map} +1 -1
- package/dist/chunk-y0c4e6ex.js +16 -0
- package/dist/chunk-y0c4e6ex.js.map +10 -0
- package/dist/{chunk-qkbx3tf6.js → chunk-y7rqfrgg.js} +6 -13
- package/dist/{chunk-qkbx3tf6.js.map → chunk-y7rqfrgg.js.map} +4 -4
- package/dist/{chunk-dfm066qg.js → chunk-yxd3nnqt.js} +2 -29
- package/dist/chunk-yxd3nnqt.js.map +11 -0
- package/dist/{chunk-70jmg2zx.js → chunk-yzwja0mj.js} +4 -19
- package/dist/{chunk-70jmg2zx.js.map → chunk-yzwja0mj.js.map} +3 -3
- package/dist/{chunk-p0dqwj3n.js → chunk-zrmy8zvw.js} +66 -47
- package/dist/{chunk-p0dqwj3n.js.map → chunk-zrmy8zvw.js.map} +4 -4
- package/dist/deploy/index.d.ts +1 -1
- package/dist/deploy/index.d.ts.map +1 -1
- package/dist/deploy/internal.js +10 -8
- package/dist/deploy/internal.js.map +4 -4
- package/dist/deploy/services.d.ts +1 -2
- package/dist/deploy/services.d.ts.map +1 -1
- package/dist/deploy/types.d.ts +6 -5
- package/dist/deploy/types.d.ts.map +1 -1
- package/dist/deploy/validation.d.ts.map +1 -1
- package/dist/edits/index.js +3 -5
- package/dist/edits/index.js.map +1 -1
- package/dist/error-reporting/internal.js +3 -3
- package/dist/error-reporting/types.d.ts +2 -9
- package/dist/error-reporting/types.d.ts.map +1 -1
- package/dist/errors/catalog.d.ts +12 -0
- package/dist/errors/catalog.d.ts.map +1 -1
- package/dist/errors/internal.js +1 -1
- package/dist/events/definitions.d.ts +0 -5
- package/dist/events/definitions.d.ts.map +1 -1
- package/dist/events/index.d.ts +3 -3
- package/dist/events/index.d.ts.map +1 -1
- package/dist/events/index.js +6 -8
- package/dist/events/index.js.map +1 -1
- package/dist/events/scope.d.ts +0 -1
- package/dist/events/scope.d.ts.map +1 -1
- package/dist/events/scope.js +1 -1
- package/dist/events/selectors/builder.d.ts +1 -8
- package/dist/events/selectors/builder.d.ts.map +1 -1
- package/dist/events/selectors/index.d.ts +2 -2
- package/dist/events/selectors/index.d.ts.map +1 -1
- package/dist/events/selectors/index.js +2 -2
- package/dist/events/selectors/predicate.d.ts.map +1 -1
- package/dist/events/selectors/types.d.ts +2 -33
- package/dist/events/selectors/types.d.ts.map +1 -1
- package/dist/events/types/index.d.ts +1 -12
- package/dist/events/types/index.d.ts.map +1 -1
- package/dist/execution/agent.js +41 -44
- package/dist/execution/agent.js.map +1 -1
- package/dist/execution/primitive.js +57 -88
- package/dist/execution/primitive.js.map +3 -4
- package/dist/execution/request.js +35 -38
- package/dist/execution/request.js.map +2 -2
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +111 -120
- package/dist/index.js.map +1 -1
- package/dist/materialization/index.js +3 -3
- package/dist/materialization/index.js.map +1 -1
- package/dist/materialization/model.d.ts +19 -6
- package/dist/materialization/model.d.ts.map +1 -1
- package/dist/materializer/index.js +31 -31
- package/dist/materializer/index.js.map +1 -1
- package/dist/materializer/shared/normalize.d.ts.map +1 -1
- package/dist/models/execution/index.js +18 -18
- package/dist/objects/action/errors.d.ts +0 -9
- package/dist/objects/action/errors.d.ts.map +1 -1
- package/dist/objects/action/index.d.ts +3 -3
- package/dist/objects/action/index.d.ts.map +1 -1
- package/dist/objects/action/request.d.ts +2 -8
- package/dist/objects/action/request.d.ts.map +1 -1
- package/dist/objects/execution.d.ts +0 -2
- package/dist/objects/execution.d.ts.map +1 -1
- package/dist/objects/index.js +44 -29
- package/dist/objects/index.js.map +1 -1
- package/dist/objects/query/index.js +29 -29
- package/dist/objects/query/index.js.map +1 -1
- package/dist/objects/sdk/object-handle.d.ts.map +1 -1
- package/dist/objects/sdk/object-set.d.ts.map +1 -1
- package/dist/objects/service/index.d.ts +0 -1
- package/dist/objects/service/index.d.ts.map +1 -1
- package/dist/ontology/index.js +5 -5
- package/dist/ontology/index.js.map +1 -1
- package/dist/ontology/internal.js +2 -2
- package/dist/pipelines/index.js +28 -28
- package/dist/projections/internal.js +22 -22
- package/dist/projections/internal.js.map +1 -1
- package/dist/query.js +2 -2
- package/dist/queues/in-memory.d.ts +1 -2
- package/dist/queues/in-memory.d.ts.map +1 -1
- package/dist/queues/index.d.ts +1 -1
- package/dist/queues/index.d.ts.map +1 -1
- package/dist/queues/index.js +1 -1
- package/dist/queues/types.d.ts +0 -7
- package/dist/queues/types.d.ts.map +1 -1
- package/dist/runtime/host.d.ts.map +1 -1
- package/dist/runtime/internal.js +24 -25
- package/dist/runtime/internal.js.map +1 -1
- package/dist/runtime/resolve-definitions.d.ts.map +1 -1
- package/dist/runtime/types.d.ts +16 -36
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/sandboxes/index.js +5 -5
- package/dist/schedules/builders.d.ts.map +1 -1
- package/dist/schedules/index.js +3 -3
- package/dist/schedules/runtime.d.ts.map +1 -1
- package/dist/schedules/validation.d.ts +0 -1
- package/dist/schedules/validation.d.ts.map +1 -1
- package/dist/security/every.d.ts +1 -1
- package/dist/shares/internal.js +17 -17
- package/dist/storage/action-runs/failure.js +2 -2
- package/dist/storage/action-runs/idempotency.d.ts +3 -4
- package/dist/storage/action-runs/idempotency.d.ts.map +1 -1
- package/dist/storage/action-runs/in-memory.d.ts +2 -9
- package/dist/storage/action-runs/in-memory.d.ts.map +1 -1
- package/dist/storage/action-runs/index.d.ts +1 -3
- package/dist/storage/action-runs/index.d.ts.map +1 -1
- package/dist/storage/action-runs/provider.js +1 -1
- package/dist/storage/action-runs/record.d.ts +20 -0
- package/dist/storage/action-runs/record.d.ts.map +1 -0
- package/dist/storage/action-runs/types.d.ts +39 -68
- package/dist/storage/action-runs/types.d.ts.map +1 -1
- package/dist/storage/ai-limits/enforcement.js +2 -2
- package/dist/storage/connector-connections/provider.js +1 -1
- package/dist/storage/file-upload-sessions/provider.js +9 -9
- package/dist/storage/index.d.ts +2 -2
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +30 -31
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/internal.d.ts +1 -1
- package/dist/storage/internal.d.ts.map +1 -1
- package/dist/storage/internal.js +9 -12
- package/dist/storage/internal.js.map +1 -1
- package/dist/storage/objects/execution-limits.d.ts +1 -1
- package/dist/storage/objects/execution-limits.d.ts.map +1 -1
- package/dist/storage/ontology/provider.js +2 -2
- package/dist/storage/projection-runs/provider.js +2 -2
- package/dist/storage/types.d.ts +1 -1
- package/dist/storage/types.d.ts.map +1 -1
- package/dist/storage/workflow-runs/provider.js +9 -9
- package/dist/syncs/index.js +29 -29
- package/dist/testing/action-execution.d.ts +34 -4
- package/dist/testing/action-execution.d.ts.map +1 -1
- package/dist/testing/action-run-storage-contract.d.ts +11 -0
- package/dist/testing/action-run-storage-contract.d.ts.map +1 -0
- package/dist/testing/index.d.ts +2 -1
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +3202 -2860
- package/dist/testing/index.js.map +7 -6
- package/dist/testing/materializer-storage-contract.d.ts.map +1 -1
- package/dist/testing/queues-contract.d.ts.map +1 -1
- package/dist/webhooks/internal.js +23 -23
- package/dist/webhooks/internal.js.map +1 -1
- package/dist/workers/index.js +1 -1
- package/dist/workflows/index.js +48 -51
- package/dist/workflows/index.js.map +1 -1
- package/package.json +1 -7
- package/src/actions/commit-edits.ts +9 -37
- package/src/actions/errors.ts +0 -4
- package/src/actions/execution.ts +10 -10
- package/src/actions/index.ts +5 -24
- package/src/actions/request.ts +157 -295
- package/src/actions/run/context.ts +193 -0
- package/src/actions/run/edits-commit.ts +102 -0
- package/src/actions/run/effects.ts +105 -0
- package/src/actions/run/execute.ts +113 -0
- package/src/actions/run/executor.ts +314 -0
- package/src/actions/run/normalize.ts +142 -0
- package/src/actions/run/phase-types.ts +20 -0
- package/src/actions/run/phases.ts +150 -0
- package/src/actions/run/run-action.ts +170 -0
- package/src/actions/run/signals.ts +118 -0
- package/src/actions/run/state.ts +95 -0
- package/src/actions/run/types.ts +61 -0
- package/src/actions/run/writeback.ts +79 -0
- package/src/actions/run-authorization.ts +1 -1
- package/src/actions/run-persistence.ts +105 -0
- package/src/actions/types/context.ts +10 -0
- package/src/authorization/event-visibility.ts +0 -12
- package/src/deploy/index.ts +0 -1
- package/src/deploy/services.ts +2 -11
- package/src/deploy/types.ts +6 -6
- package/src/deploy/validation.ts +12 -6
- package/src/error-reporting/types.ts +2 -10
- package/src/errors/catalog.ts +13 -0
- package/src/events/definitions.ts +0 -17
- package/src/events/index.ts +0 -14
- package/src/events/scope.ts +0 -12
- package/src/events/selectors/builder.ts +0 -51
- package/src/events/selectors/index.ts +0 -6
- package/src/events/selectors/predicate.ts +0 -2
- package/src/events/selectors/types.ts +7 -65
- package/src/events/types/index.ts +0 -11
- package/src/index.ts +1 -19
- package/src/materialization/model.ts +26 -9
- package/src/materializer/README.md +6 -1
- package/src/materializer/edits/commit.ts +42 -32
- package/src/materializer/shared/normalize.ts +25 -14
- package/src/objects/action/errors.ts +0 -12
- package/src/objects/action/index.ts +3 -3
- package/src/objects/action/request.ts +2 -29
- package/src/objects/execution.ts +2 -2
- package/src/objects/sdk/object-handle.ts +3 -29
- package/src/objects/sdk/object-set.ts +5 -30
- package/src/objects/service/index.ts +0 -1
- package/src/queues/in-memory.ts +0 -6
- package/src/queues/index.ts +0 -2
- package/src/queues/types.ts +0 -11
- package/src/runtime/host.ts +5 -0
- package/src/runtime/resolve-definitions.ts +0 -1
- package/src/runtime/types.ts +16 -45
- package/src/schedules/builders.ts +1 -4
- package/src/schedules/runtime.ts +0 -41
- package/src/schedules/validation.ts +2 -16
- package/src/security/every.ts +1 -1
- package/src/storage/action-runs/idempotency.ts +13 -41
- package/src/storage/action-runs/in-memory.ts +20 -311
- package/src/storage/action-runs/index.ts +1 -16
- package/src/storage/action-runs/record.ts +130 -0
- package/src/storage/action-runs/types.ts +37 -92
- package/src/storage/index.ts +1 -9
- package/src/storage/internal.ts +1 -7
- package/src/storage/objects/execution-limits.ts +3 -2
- package/src/storage/types.ts +2 -4
- package/src/testing/action-execution.ts +73 -13
- package/src/testing/action-run-storage-contract.ts +335 -0
- package/src/testing/index.ts +8 -1
- package/src/testing/materializer-storage-contract.ts +174 -18
- package/src/testing/queues-contract.ts +0 -18
- package/dist/actions/run-dispatch.d.ts +0 -25
- package/dist/actions/run-dispatch.d.ts.map +0 -1
- package/dist/actions/worker.d.ts +0 -3
- package/dist/actions/worker.d.ts.map +0 -1
- package/dist/actions/worker.js +0 -325
- package/dist/actions/worker.js.map +0 -11
- package/dist/chunk-1hqwggsn.js.map +0 -12
- package/dist/chunk-85cd7e8c.js +0 -51
- package/dist/chunk-85cd7e8c.js.map +0 -10
- package/dist/chunk-dfm066qg.js.map +0 -11
- package/dist/chunk-fc5zfxy1.js.map +0 -11
- package/dist/chunk-fe52eczz.js.map +0 -49
- package/dist/chunk-fx93hd2n.js +0 -1614
- package/dist/chunk-fx93hd2n.js.map +0 -20
- package/dist/chunk-k6hrnf35.js.map +0 -10
- package/dist/chunk-qxvp5epv.js +0 -1329
- package/dist/chunk-qxvp5epv.js.map +0 -36
- package/dist/chunk-r2y23egw.js.map +0 -10
- package/dist/chunk-tffvfy6s.js +0 -593
- package/dist/chunk-tffvfy6s.js.map +0 -15
- package/dist/chunk-y2aq6ag9.js.map +0 -11
- package/dist/chunk-y9jmd7e5.js.map +0 -15
- package/dist/chunk-zvx7h87b.js +0 -12
- package/dist/chunk-zvx7h87b.js.map +0 -10
- package/dist/events/types/actions.d.ts +0 -39
- package/dist/events/types/actions.d.ts.map +0 -1
- package/dist/objects/service/action-service.d.ts +0 -13
- package/dist/objects/service/action-service.d.ts.map +0 -1
- package/src/actions/run-dispatch.ts +0 -282
- package/src/actions/worker.ts +0 -2
- package/src/events/types/actions.ts +0 -42
- package/src/objects/service/action-service.ts +0 -43
- /package/dist/{chunk-vgk3hknm.js.map → chunk-1k89ecfr.js.map} +0 -0
- /package/dist/{chunk-za5yd58j.js.map → chunk-52bk93x8.js.map} +0 -0
- /package/dist/{chunk-22v5bpz3.js.map → chunk-5e43w60z.js.map} +0 -0
- /package/dist/{chunk-zxawp1n2.js.map → chunk-7kg3k1m9.js.map} +0 -0
- /package/dist/{chunk-ny3xyvcn.js.map → chunk-7mbzgd9m.js.map} +0 -0
- /package/dist/{chunk-kkqwzy6h.js.map → chunk-7t429e3f.js.map} +0 -0
- /package/dist/{chunk-48e3cn2d.js.map → chunk-9gyp8hg1.js.map} +0 -0
- /package/dist/{chunk-4wn7bxxa.js.map → chunk-9ybhtmg4.js.map} +0 -0
- /package/dist/{chunk-bs7sqkre.js.map → chunk-bpgy64fw.js.map} +0 -0
- /package/dist/{chunk-vx2yp45y.js.map → chunk-c85m1hyj.js.map} +0 -0
- /package/dist/{chunk-v6xpd60t.js.map → chunk-d2ync1v3.js.map} +0 -0
- /package/dist/{chunk-vjcd8d27.js.map → chunk-fa02jy15.js.map} +0 -0
- /package/dist/{chunk-qmnnhde6.js.map → chunk-kg5j6fct.js.map} +0 -0
- /package/dist/{chunk-de4z2bj6.js.map → chunk-kyzq4wy9.js.map} +0 -0
- /package/dist/{chunk-ex496vct.js.map → chunk-nre82s12.js.map} +0 -0
- /package/dist/{chunk-7hpdd6r9.js.map → chunk-q1vkr2ys.js.map} +0 -0
- /package/dist/{chunk-zb77kjth.js.map → chunk-rhg02hxq.js.map} +0 -0
- /package/dist/{chunk-yv9czyfr.js.map → chunk-t6vq7bff.js.map} +0 -0
- /package/dist/{chunk-qkvz64nd.js.map → chunk-tjb1mk5t.js.map} +0 -0
- /package/dist/{chunk-p844e0rn.js.map → chunk-tpn40322.js.map} +0 -0
- /package/dist/{chunk-rt9p8m9t.js.map → chunk-v9xd5wzd.js.map} +0 -0
- /package/dist/{chunk-2vhg6ysa.js.map → chunk-vyf9kfqf.js.map} +0 -0
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/actions/builders/define-action.ts", "../src/shared/params/builders.ts", "../src/actions/commit-edits.ts", "../src/actions/read-facade.ts", "../src/actions/registry.ts", "../src/actions/validators.ts"],
|
|
4
|
-
"sourcesContent": [
|
|
5
|
-
"import type { ObjectTypeWithPropertyTokens } from \"../../ontology/tokens\"\nimport { ActionDefinitionError, effectsWithoutEditsMessage } from \"../errors\"\nimport type {\n ActionBuilder,\n ActionEditsHandler,\n ActionEffectsHandler,\n ActionParamsConfig,\n ActionValidator,\n ActionWritebackHandler,\n GlobalActionDefinition,\n GlobalActionEditsHandler,\n GlobalActionEffectsHandler,\n GlobalActionPhaseBuilder,\n GlobalActionValidator,\n GlobalActionWritebackHandler,\n ObjectActionDefinition,\n ObjectActionPhaseBuilder,\n} from \"../types\"\nimport { assertNonEmpty } from \"../validation\"\n\ntype ActionOptions = {\n description?: string\n}\n\nexport function defineAction<const TId extends string>(\n id: TId,\n options?: ActionOptions\n): ActionBuilder<TId> {\n assertNonEmpty(id, \"id\")\n\n return asPublicActionType<ActionBuilder<TId>>(createActionBuilder(id, options))\n}\n\nfunction createActionBuilder(id: string, options?: ActionOptions) {\n const builder = {\n params(params: ActionParamsConfig) {\n return createGlobalActionPhaseBuilder(id, params, options)\n },\n on(objectType: ObjectTypeWithPropertyTokens) {\n assertNonEmpty(objectType.id, \"target id\")\n return createObjectActionParamsBuilder(id, objectType, options)\n },\n }\n\n return builder\n}\n\nfunction createGlobalActionPhaseBuilder(\n id: string,\n params: ActionParamsConfig,\n options?: ActionOptions\n): GlobalActionPhaseBuilder<string, ActionParamsConfig> {\n const validators: GlobalActionValidator<Record<string, unknown>>[] = []\n\n const builder = {\n validate(validator: GlobalActionValidator<Record<string, unknown>>) {\n validators.push(validator)\n return builder\n },\n writeback(handler: GlobalActionWritebackHandler<Record<string, unknown>, unknown>) {\n return createGlobalDefinition({\n id,\n params,\n description: options?.description,\n validators,\n writeback: handler,\n })\n },\n edits(handler: GlobalActionEditsHandler<Record<string, unknown>, undefined>) {\n return createGlobalDefinition({\n id,\n params,\n description: options?.description,\n validators,\n edits: handler,\n })\n },\n }\n\n return asPublicActionType<GlobalActionPhaseBuilder<string, ActionParamsConfig>>(builder)\n}\n\nfunction createObjectActionParamsBuilder(\n id: string,\n objectType: ObjectTypeWithPropertyTokens,\n options?: ActionOptions\n) {\n return {\n params(params: ActionParamsConfig) {\n return createObjectActionPhaseBuilder(id, objectType, params, options)\n },\n }\n}\n\nfunction createObjectActionPhaseBuilder(\n id: string,\n objectType: ObjectTypeWithPropertyTokens,\n params: ActionParamsConfig,\n options?: ActionOptions\n): ObjectActionPhaseBuilder<string, ObjectTypeWithPropertyTokens, ActionParamsConfig> {\n const validators: ActionValidator<ObjectTypeWithPropertyTokens, Record<string, unknown>>[] = []\n\n const builder = {\n validate(validator: ActionValidator<ObjectTypeWithPropertyTokens, Record<string, unknown>>) {\n validators.push(validator)\n return builder\n },\n writeback(\n handler: ActionWritebackHandler<\n ObjectTypeWithPropertyTokens,\n Record<string, unknown>,\n unknown\n >\n ) {\n return createObjectDefinition({\n id,\n objectType,\n params,\n description: options?.description,\n validators,\n writeback: handler,\n })\n },\n edits(\n handler: ActionEditsHandler<ObjectTypeWithPropertyTokens, Record<string, unknown>, undefined>\n ) {\n return createObjectDefinition({\n id,\n objectType,\n params,\n description: options?.description,\n validators,\n edits: handler,\n })\n },\n }\n\n return asPublicActionType<\n ObjectActionPhaseBuilder<string, ObjectTypeWithPropertyTokens, ActionParamsConfig>\n >(builder)\n}\n\nfunction createGlobalDefinition(input: {\n readonly id: string\n readonly params: ActionParamsConfig\n readonly description?: string\n readonly validators: readonly unknown[]\n readonly writeback?: unknown\n readonly edits?: unknown\n readonly effects?: unknown\n}): GlobalActionDefinition {\n const definition = {\n kind: \"action\",\n id: input.id,\n binding: { kind: \"global\" },\n params: input.params,\n phases: {\n validate: [...input.validators],\n ...(input.writeback ? { writeback: input.writeback } : {}),\n ...(input.edits ? { edits: input.edits } : {}),\n ...(input.effects ? { effects: input.effects } : {}),\n },\n ...(input.description !== undefined ? { description: input.description } : {}),\n }\n\n return asPublicActionType<GlobalActionDefinition>(\n Object.assign(definition, {\n edits(handler: GlobalActionEditsHandler<Record<string, unknown>, unknown>) {\n return createGlobalDefinition({\n ...input,\n edits: handler,\n })\n },\n effects(handler: GlobalActionEffectsHandler<Record<string, unknown>, unknown>) {\n if (!input.edits) {\n throw new ActionDefinitionError(effectsWithoutEditsMessage(input.id))\n }\n return createGlobalDefinition({\n ...input,\n effects: handler,\n })\n },\n })\n )\n}\n\nfunction createObjectDefinition(input: {\n readonly id: string\n readonly objectType: ObjectTypeWithPropertyTokens\n readonly params: ActionParamsConfig\n readonly description?: string\n readonly validators: readonly unknown[]\n readonly writeback?: unknown\n readonly edits?: unknown\n readonly effects?: unknown\n}): ObjectActionDefinition {\n const definition = {\n kind: \"action\",\n id: input.id,\n binding: { kind: \"object\", objectType: input.objectType },\n params: input.params,\n phases: {\n validate: [...input.validators],\n ...(input.writeback ? { writeback: input.writeback } : {}),\n ...(input.edits ? { edits: input.edits } : {}),\n ...(input.effects ? { effects: input.effects } : {}),\n },\n ...(input.description !== undefined ? { description: input.description } : {}),\n }\n\n return asPublicActionType<ObjectActionDefinition>(\n Object.assign(definition, {\n edits(\n handler: ActionEditsHandler<ObjectTypeWithPropertyTokens, Record<string, unknown>, unknown>\n ) {\n return createObjectDefinition({\n ...input,\n edits: handler,\n })\n },\n effects(\n handler: ActionEffectsHandler<\n ObjectTypeWithPropertyTokens,\n Record<string, unknown>,\n unknown\n >\n ) {\n if (!input.edits) {\n throw new ActionDefinitionError(effectsWithoutEditsMessage(input.id))\n }\n return createObjectDefinition({\n ...input,\n effects: handler,\n })\n },\n })\n )\n}\n\n// Runtime builders are plain objects; public builder types carry phase-order inference.\nfunction asPublicActionType<TPublic>(value: unknown): TPublic {\n return value as TPublic\n}\n",
|
|
6
|
-
"import type { SchemaOrRef } from \"../../ontology\"\nimport type { QuantitativeTypeId } from \"../../ontology/units\"\nimport type { ParamConfig } from \"./types\"\n\nexport interface ParamOptions {\n readonly description?: string\n readonly semanticType?: QuantitativeTypeId\n readonly nullable?: boolean\n}\n\ntype FieldFromOptions<TOptions, TKey extends string, TFallback> =\n TOptions extends Record<TKey, infer TValue>\n ? { [K in TKey]: TValue }\n : { [K in TKey]?: TFallback }\n\ntype ParamResult<\n TSchema extends SchemaOrRef,\n TRequired extends boolean,\n TOptions extends ParamOptions | undefined,\n> = {\n schema: TSchema\n required: TRequired\n} & FieldFromOptions<TOptions, \"description\", string> &\n FieldFromOptions<TOptions, \"semanticType\", QuantitativeTypeId> &\n FieldFromOptions<TOptions, \"nullable\", boolean>\n\n/** Declare one required parameter. */\nexport function param<\n const TSchema extends SchemaOrRef,\n const TOptions extends ParamOptions | undefined = undefined,\n>(schema: TSchema, options?: TOptions): ParamResult<TSchema, true, TOptions> {\n const result: ParamConfig & { required: true } = {\n schema,\n required: true,\n ...(options?.description !== undefined ? { description: options.description } : {}),\n ...(options?.semanticType !== undefined ? { semanticType: options.semanticType } : {}),\n ...(options?.nullable !== undefined ? { nullable: options.nullable } : {}),\n }\n return result as ParamResult<TSchema, true, TOptions>\n}\n\n/** Derive an optional parameter without changing its schema or metadata. */\nexport function optional<const TParam extends ParamConfig>(\n paramConfig: TParam\n): Omit<TParam, \"required\"> & { readonly required: false } {\n return {\n ...paramConfig,\n required: false,\n }\n}\n",
|
|
7
|
-
"import type { EditBatch } from \"../edits\"\nimport { lowerEditBatch } from \"../edits\"\nimport type {\n EditCommitResult,\n EffectiveLinkChange,\n EffectiveObjectChange,\n ExpectedLinkRevision,\n ExpectedLinkScopeRevision,\n ExpectedObjectRevision,\n OntologyOperationOutcome,\n} from \"../materializer\"\nimport type { OntologyMutationRuntime } from \"../runtime/ontology-mutations\"\nimport type { Storage } from \"../storage/types\"\nimport { ActionEditCommitError } from \"./errors\"\n\n/** Exact reads an Action handler depended on, protected by row-level CAS at commit time. */\nexport interface ActionReadDependencies {\n readonly objects: readonly ExpectedObjectRevision[]\n readonly links: readonly ExpectedLinkRevision[]\n readonly linkScopes: readonly ExpectedLinkScopeRevision[]\n}\n\nconst NO_READ_DEPENDENCIES: ActionReadDependencies = { objects: [], links: [], linkScopes: [] }\n\nexport interface CommitActionEditsInput {\n readonly mutations: Pick<OntologyMutationRuntime, \"commitEdits\">\n readonly projectId: string\n readonly runId: string\n readonly actionId: string\n readonly batch: EditBatch\n readonly dependencies?: ActionReadDependencies\n}\n\n/** The authoritative ontology commit an Action run produced. */\nexport interface ActionEditCommitResult {\n readonly commitId: string\n readonly created: boolean\n readonly eventCount: number\n readonly outcomes: readonly OntologyOperationOutcome[]\n readonly changes: {\n readonly objects: readonly EffectiveObjectChange[]\n readonly links: readonly EffectiveLinkChange[]\n }\n readonly committedAt: Date\n}\n\nexport interface FindActionEditCommitInput {\n readonly storage: Pick<Storage, \"ontology\">\n readonly projectId: string\n readonly runId: string\n}\n\n/**\n * Commits one Action run's recorded edits as a single atomic ontology commit.\n *\n * The batch lowers to canonical Materializer operations and the Materializer validates the Action run\n * identity, applies managed authority, resolves effective state, writes the authoritative commit, and\n * inserts outbox facts in one transaction. Repeating the call for the same run replays that commit;\n * a divergent request for the same run is a typed idempotency conflict.\n */\nexport async function commitActionEdits(\n input: CommitActionEditsInput\n): Promise<ActionEditCommitResult> {\n const dependencies = input.dependencies ?? NO_READ_DEPENDENCIES\n const commit = await input.mutations.commitEdits({\n mode: \"atomic\",\n source: { kind: \"action\", actionId: input.actionId, runId: input.runId },\n operations: lowerEditBatch(input.batch),\n expectedObjects: dependencies.objects,\n expectedLinks: dependencies.links,\n expectedLinkScopes: dependencies.linkScopes,\n })\n return toActionEditCommitResult(commit)\n}\n\n/**\n * Resolves the authoritative commit an Action run already produced, if any.\n *\n * Resume uses the exact `{ actionRunId }` origin instead of rerunning handlers, so a redelivered run\n * returns the persisted result without recomputing an idempotency hash.\n */\nexport async function findActionEditCommit(\n input: FindActionEditCommitInput\n): Promise<ActionEditCommitResult | null> {\n const record = await input.storage.ontology.commits.getByOrigin({\n projectId: input.projectId,\n origin: { kind: \"action\", actionRunId: input.runId },\n })\n if (!record) return null\n if (record.result.kind !== \"edit\") {\n throw new ActionEditCommitError(\n `[Sixb] Action run '${input.runId}' resolved a '${record.result.kind}' commit instead of an edit commit.`\n )\n }\n return toActionEditCommitResult({ ...record.result, created: false })\n}\n\nfunction toActionEditCommitResult(commit: EditCommitResult): ActionEditCommitResult {\n return {\n commitId: commit.commitId,\n created: commit.created,\n eventCount: commit.eventCount,\n outcomes: commit.outcomes,\n changes: commit.changes,\n committedAt: new Date(commit.committedAt),\n }\n}\n",
|
|
8
|
-
"import { linkRefKey, linkScopeKey, objectRefKey } from \"../materialization/refs\"\nimport type {\n EffectiveLinkSnapshot,\n ExpectedLinkRevision,\n ExpectedLinkScopeRevision,\n ExpectedObjectRevision,\n OntologyLinkRef,\n OntologyObjectRef,\n} from \"../materializer\"\nimport { createLinkScopeFingerprint } from \"../materializer\"\nimport { decorateObjectQueryExecutor } from \"../objects/sdk/query-builder\"\nimport type { ObjectQueryExecutor } from \"../objects/sdk/query-executor\"\nimport { OntologyValidationError } from \"../ontology/errors\"\nimport type { ObjectTypeWithPropertyTokens } from \"../ontology/tokens\"\nimport {\n assertPropertyTokenBelongsToObjectType,\n assertTelemetryProperty,\n} from \"../ontology/validation\"\nimport { RuntimeError } from \"../runtime/errors\"\nimport type { ObjectReader, ObjectReadSet } from \"../runtime/types\"\nimport type {\n ExpandedLinkValue,\n ExpandedObjectRow,\n ObjectLinkRow,\n ObjectRow,\n TimeseriesHistoryBatchInput,\n TimeseriesHistoryBatchResult,\n} from \"../storage\"\nimport type { ActionReadDependencies } from \"./commit-edits\"\nimport type {\n ActionReadFacade,\n ActionTelemetryHistorySeriesInput,\n ActionTelemetryReadFacade,\n} from \"./types\"\n\n/** Runtime leaves used by the Action telemetry read adapter. */\nexport interface ActionTelemetryReadSource {\n readonly resolveObjectType: (objectTypeId: string) => ObjectTypeWithPropertyTokens\n readonly getHistoryBatch: (\n input: Omit<TimeseriesHistoryBatchInput, \"projectId\">\n ) => Promise<readonly TimeseriesHistoryBatchResult[]>\n}\n\n/**\n * Records the exact state an Action handler observed while reading.\n *\n * A handler that reads one dependency twice keeps the first observation: the commit must fail when\n * current state no longer matches what the decision was made against, and the later read may already\n * reflect the handler's own intent. Objects returned by `list()` and `query()` are fenced like\n * concrete reads, but query membership is not yet: an object that starts matching a query after the\n * read, and aggregate results (`count()`, `exists()`, `facets()`), stay unfenced. Telemetry history\n * and file content are also call-level snapshots, not edit dependencies.\n */\nexport class ActionReadRecorder {\n private readonly objects = new Map<string, ExpectedObjectRevision>()\n private readonly links = new Map<string, ExpectedLinkRevision>()\n private readonly linkScopes = new Map<string, ExpectedLinkScopeRevision>()\n\n /** Records a concrete object read, including exact absence. */\n observeObject(ref: OntologyObjectRef, row: ObjectRow | null): void {\n const key = objectRefKey(ref)\n if (this.objects.has(key)) return\n if (!row) {\n this.objects.set(key, { ref, exists: false })\n return\n }\n // Rows without materializer provenance predate the commit ledger and cannot be fenced.\n if (row.lastCommitId === undefined) return\n this.objects.set(key, {\n ref,\n exists: true,\n version: row.version,\n lastCommitId: row.lastCommitId,\n })\n }\n\n /**\n * Records every object a listing or query returned, including the objects its expansions attached.\n *\n * Rows are keyed by their own type: a traversal or subtype query returns objects of a type other\n * than the one the query started from, and the commit checks each row under its exact identity.\n */\n observeObjectRows(rows: readonly ObjectRow[]): void {\n for (const row of rows) {\n this.observeObject({ objectTypeId: row.objectTypeId, primaryId: row.primaryId }, row)\n for (const value of Object.values(row.links ?? {})) {\n this.observeObjectRows(expandedRows(value))\n }\n }\n }\n\n /**\n * Records the complete `(source, linkId)` scopes a link listing observed.\n *\n * `linkIds` names every scope the read covered so an empty scope is recorded as an empty\n * fingerprint rather than being silently omitted.\n */\n observeLinkScopes(\n source: OntologyObjectRef,\n linkIds: readonly string[],\n rows: readonly ObjectLinkRow[]\n ): void {\n const snapshotsByLinkId = new Map<string, EffectiveLinkSnapshot[]>()\n for (const linkId of linkIds) snapshotsByLinkId.set(linkId, [])\n /** Scopes holding a row that cannot be fenced, so no expectation may be recorded for them. */\n const unfenceable = new Set<string>()\n\n for (const row of rows) {\n if (row.sourceTypeId !== source.objectTypeId || row.sourceId !== source.primaryId) continue\n const snapshots = snapshotsByLinkId.get(row.linkId)\n if (!snapshots) continue\n const snapshot = toLinkSnapshot(row)\n if (!snapshot) {\n // Same rule `observeObject` applies to rows without materializer provenance: record no\n // expectation at all. A fingerprint computed over the remaining rows would describe a scope\n // the store can never reproduce, turning every such read into a guaranteed conflict.\n unfenceable.add(row.linkId)\n continue\n }\n snapshots.push(snapshot)\n this.observeLink(snapshot.ref, snapshot)\n }\n\n for (const [linkId, snapshots] of snapshotsByLinkId) {\n if (unfenceable.has(linkId)) continue\n const key = linkScopeKey(source, linkId)\n if (this.linkScopes.has(key)) continue\n this.linkScopes.set(key, {\n source,\n linkId,\n fingerprint: createLinkScopeFingerprint(snapshots),\n })\n }\n }\n\n /** Records a concrete link read, including exact absence. */\n observeLink(ref: OntologyLinkRef, snapshot: EffectiveLinkSnapshot | null): void {\n const key = linkRefKey(ref)\n if (this.links.has(key)) return\n this.links.set(\n key,\n snapshot ? { ref, exists: true, lastCommitId: snapshot.lastCommitId } : { ref, exists: false }\n )\n }\n\n dependencies(): ActionReadDependencies {\n return {\n objects: [...this.objects.values()],\n links: [...this.links.values()],\n linkScopes: [...this.linkScopes.values()],\n }\n }\n}\n\nexport interface ActionReadFacadeOptions {\n /** Records what the handler observed, so the commit can be fenced against it. */\n readonly recorder: ActionReadRecorder\n /**\n * Every link the object type carries, inherited links included.\n *\n * Inheritance is resolved by the Ontology registry, not by the imported definition, so an\n * `extends` type would otherwise report only its own links and drop inherited ones from the\n * recorded scopes.\n */\n readonly resolveLinkIds: (objectTypeId: string) => readonly string[]\n /** Canonical authorized telemetry history leaf. Omitted only by isolated facade consumers. */\n readonly telemetry?: ActionTelemetryReadSource\n}\n\n/** Exposes `reader`'s object reads to an Action handler; with `options`, each read is recorded. */\nexport function createActionReadFacade(\n reader: ObjectReader,\n options?: ActionReadFacadeOptions\n): ActionReadFacade {\n return {\n telemetry: createActionTelemetryReadFacade(options?.telemetry),\n objects<const TObjectType extends ObjectTypeWithPropertyTokens>(objectType: TObjectType) {\n const objectSet = reader.objects(objectType)\n return options ? recordObjectReads(objectType, objectSet, options) : objectSet\n },\n }\n}\n\nfunction createActionTelemetryReadFacade(\n source: ActionTelemetryReadSource | undefined\n): ActionTelemetryReadFacade {\n const facade = {\n async historyBatch(input: {\n readonly series: readonly ActionTelemetryHistorySeriesInput[]\n readonly from?: Date\n readonly to?: Date\n readonly limitPerSeries?: number\n readonly order?: \"asc\" | \"desc\"\n }) {\n if (!source) {\n throw new RuntimeError(\n \"[Sixb] Action telemetry history requires a configured telemetry read source.\"\n )\n }\n if (input.series.length === 0) {\n return []\n }\n\n const requestedSeries = input.series.map((entry) => {\n const objectType = source.resolveObjectType(entry.property.objectTypeId)\n assertPropertyTokenBelongsToObjectType(objectType, entry.property)\n const registeredProperty = objectType.properties.find(\n (property) => property.id === entry.property.id\n )\n if (!registeredProperty) {\n throw new OntologyValidationError(\n `[Sixb] Unknown property '${entry.property.id}' for object type '${objectType.id}'`\n )\n }\n assertTelemetryProperty(registeredProperty)\n return {\n objectTypeId: objectType.id,\n objectId: entry.objectId,\n propertyId: registeredProperty.id,\n }\n })\n\n const results = await source.getHistoryBatch({\n series: requestedSeries,\n ...(input.from !== undefined ? { from: input.from } : {}),\n ...(input.to !== undefined ? { to: input.to } : {}),\n ...(input.limitPerSeries !== undefined ? { limitPerSeries: input.limitPerSeries } : {}),\n ...(input.order !== undefined ? { order: input.order } : {}),\n })\n assertTelemetryBatchResultMatchesRequest(requestedSeries, results)\n\n return input.series.map((entry, index) => ({\n objectId: entry.objectId,\n property: entry.property,\n points: results[index].points.map((point) => ({\n value: point.value,\n at: point.at,\n ...(point.unit !== undefined ? { unit: point.unit } : {}),\n })),\n }))\n },\n }\n\n // Cast needed at the generic token boundary: the implementation deliberately manipulates raw\n // provider values while the public facade maps every tuple position back to its property token.\n return facade as unknown as ActionTelemetryReadFacade\n}\n\nfunction assertTelemetryBatchResultMatchesRequest(\n requested: readonly {\n readonly objectTypeId: string\n readonly objectId: string\n readonly propertyId: string\n }[],\n results: readonly TimeseriesHistoryBatchResult[]\n): void {\n if (results.length !== requested.length) {\n throw new RuntimeError(\n `[Sixb] Telemetry history provider returned ${results.length} batch results for ${requested.length} requested series.`\n )\n }\n\n for (let index = 0; index < requested.length; index += 1) {\n const expected = requested[index]\n const actual = results[index]\n if (\n actual.objectTypeId !== expected.objectTypeId ||\n actual.objectId !== expected.objectId ||\n actual.propertyId !== expected.propertyId\n ) {\n throw new RuntimeError(\n `[Sixb] Telemetry history provider returned an unexpected series at batch index ${index}.`\n )\n }\n }\n}\n\nfunction recordObjectReads<TObjectType extends ObjectTypeWithPropertyTokens>(\n objectType: TObjectType,\n objectSet: ObjectReadSet<TObjectType>,\n options: ActionReadFacadeOptions\n): ObjectReadSet<TObjectType> {\n const { recorder } = options\n const ref = (primaryId: string): OntologyObjectRef => ({\n objectTypeId: objectType.id,\n primaryId,\n })\n\n return {\n async get(id) {\n const row = await objectSet.get(id)\n recorder.observeObject(ref(id), row && storageRow(row))\n return row\n },\n query() {\n // Recording at the executor covers every terminal of every refinement, present and future.\n return decorateObjectQueryExecutor(objectSet.query(), (executor) =>\n recordingExecutor(executor, recorder)\n )\n },\n async list(input) {\n const result = await objectSet.list(input)\n recorder.observeObjectRows(result.objects.map(storageRow))\n return result\n },\n byId(id) {\n const handle = objectSet.byId(id)\n return {\n async get() {\n const row = await handle.get()\n recorder.observeObject(ref(id), row && storageRow(row))\n return row\n },\n async listLinks(link) {\n const rows = await handle.listLinks(link)\n recorder.observeLinkScopes(\n ref(id),\n link ? [link.id] : options.resolveLinkIds(objectType.id),\n rows\n )\n return rows\n },\n file: handle.file,\n }\n },\n }\n}\n\n/**\n * Delegates to `executor` and records the objects its row queries return.\n *\n * Aggregates (`count()`, `exists()`, `facets()`) return no rows to fence; protecting their result\n * needs query-level dependencies.\n */\nfunction recordingExecutor(\n executor: ObjectQueryExecutor,\n recorder: ActionReadRecorder\n): ObjectQueryExecutor {\n return {\n async list(query, listOptions) {\n const result = await executor.list(query, listOptions)\n recorder.observeObjectRows(result.objects.map(storageRow))\n return result\n },\n count: (query) => executor.count(query),\n exists: (query) => executor.exists(query),\n facets: (query, facets) => executor.facets(query, facets),\n validate: executor.validate?.bind(executor),\n explain: executor.explain?.bind(executor),\n }\n}\n\n/**\n * Runtime reads return storage rows; the SDK row types only leave out the commit fields a fence\n * needs.\n */\nfunction storageRow(row: object): ObjectRow {\n return row as ObjectRow\n}\n\nfunction expandedRows(value: ExpandedLinkValue): readonly ObjectRow[] {\n if (value === null) return []\n return isExpandedRowList(value) ? value : [value]\n}\n\n// `Array.isArray` does not narrow a readonly array out of a union.\nfunction isExpandedRowList(value: ExpandedLinkValue): value is readonly ExpandedObjectRow[] {\n return Array.isArray(value)\n}\n\nfunction toLinkSnapshot(row: ObjectLinkRow): EffectiveLinkSnapshot | null {\n // Rows without materializer provenance predate the commit ledger and cannot be fenced.\n if (row.lastCommitId === undefined) return null\n return {\n ref: {\n source: { objectTypeId: row.sourceTypeId, primaryId: row.sourceId },\n linkId: row.linkId,\n target: { objectTypeId: row.targetTypeId, primaryId: row.targetId },\n },\n ...(row.properties !== undefined\n ? { properties: row.properties as EffectiveLinkSnapshot[\"properties\"] }\n : {}),\n createdAt: row.createdAt.toISOString(),\n updatedAt: row.updatedAt.toISOString(),\n lastCommitId: row.lastCommitId,\n }\n}\n",
|
|
9
|
-
"import type { ObjectType, OntologyDefinitionCatalog } from \"../ontology\"\nimport {\n ActionDefinitionError,\n effectsWithoutEditsMessage,\n missingActionMutationMessage,\n} from \"./errors\"\nimport type { ActionDefinition, ObjectActionDefinition } from \"./types\"\nimport { isObjectActionDefinition } from \"./validation\"\n\nexport interface ActionDefinitionCatalog {\n list(): readonly ActionDefinition[]\n getById(id: string): ActionDefinition | null\n listGlobal(): readonly ActionDefinition[]\n listForType(type: ObjectType): readonly ObjectActionDefinition[]\n}\n\nexport interface ActionRegistryOptions {\n readonly actions: readonly ActionDefinition[]\n readonly ontology: OntologyDefinitionCatalog\n}\n\nexport class ActionRegistry implements ActionDefinitionCatalog {\n private readonly byId = new Map<string, ActionDefinition>()\n private readonly globalActions: ActionDefinition[] = []\n private readonly byTargetId = new Map<string, ObjectActionDefinition[]>()\n\n private readonly ontology: OntologyDefinitionCatalog\n\n constructor(options: ActionRegistryOptions) {\n this.ontology = options.ontology\n\n for (const action of options.actions) {\n const previous = this.byId.get(action.id)\n if (previous) {\n const chainDuplicate = this.getInheritanceDuplicate(action, previous)\n if (chainDuplicate) {\n throw new ActionDefinitionError(\n `Duplicate action id \"${action.id}\" in inheritance chain of \"${chainDuplicate.objectTypeId}\": defined on both \"${chainDuplicate.firstTargetId}\" and \"${chainDuplicate.secondTargetId}\".`\n )\n }\n\n throw new ActionDefinitionError(\n `Duplicate action id \"${action.id}\" declared in multiple files.`\n )\n }\n\n this.validatePhases(action)\n this.byId.set(action.id, action)\n\n if (!isObjectActionDefinition(action)) {\n this.globalActions.push(action)\n continue\n }\n\n const objectType = action.binding.objectType\n const target = this.ontology.getObjectTypeById(objectType.id)\n if (!target) {\n throw new ActionDefinitionError(\n `Action \"${action.id}\" targets unknown object type \"${objectType.id}\". Add the object type to ontology before registering the action.`\n )\n }\n\n const bucket = this.byTargetId.get(objectType.id) ?? []\n bucket.push(action)\n this.byTargetId.set(objectType.id, bucket)\n }\n }\n\n private validatePhases(action: ActionDefinition): void {\n const hasWriteback = action.phases.writeback !== undefined\n const hasEdits = action.phases.edits !== undefined\n const hasEffects = action.phases.effects !== undefined\n\n if (!hasWriteback && !hasEdits) {\n throw new ActionDefinitionError(missingActionMutationMessage(action.id))\n }\n\n if (hasEffects && !hasEdits) {\n throw new ActionDefinitionError(effectsWithoutEditsMessage(action.id))\n }\n }\n\n list(): readonly ActionDefinition[] {\n return [...this.byId.values()]\n }\n\n getById(id: string): ActionDefinition | null {\n return this.byId.get(id) ?? null\n }\n\n listGlobal(): readonly ActionDefinition[] {\n return [...this.globalActions]\n }\n\n listForType(type: ObjectType): readonly ObjectActionDefinition[] {\n this.ontology.resolveObjectType(type.id)\n\n const seen = new Set<string>()\n const result: ObjectActionDefinition[] = []\n\n for (const ancestor of this.ontology.listAncestorChain(type)) {\n for (const action of this.byTargetId.get(ancestor.id) ?? []) {\n if (seen.has(action.id)) continue\n seen.add(action.id)\n result.push(action)\n }\n }\n\n return result\n }\n\n private getInheritanceDuplicate(\n action: ActionDefinition,\n previous: ActionDefinition\n ): { objectTypeId: string; firstTargetId: string; secondTargetId: string } | null {\n if (!isObjectActionDefinition(action) || !isObjectActionDefinition(previous)) {\n return null\n }\n\n const actionObjectType = action.binding.objectType\n const previousObjectType = previous.binding.objectType\n\n if (actionObjectType.id === previousObjectType.id) {\n return null\n }\n\n const actionChain = this.ontology.listAncestorChain(actionObjectType)\n if (actionChain.some((ancestor) => ancestor.id === previousObjectType.id)) {\n return {\n objectTypeId: actionObjectType.id,\n firstTargetId: previousObjectType.id,\n secondTargetId: actionObjectType.id,\n }\n }\n\n const previousChain = this.ontology.listAncestorChain(previousObjectType)\n if (previousChain.some((ancestor) => ancestor.id === actionObjectType.id)) {\n return {\n objectTypeId: previousObjectType.id,\n firstTargetId: actionObjectType.id,\n secondTargetId: previousObjectType.id,\n }\n }\n\n return null\n }\n}\n",
|
|
10
|
-
"import { ActionValidationError } from \"../objects/action/errors\"\nimport type { ActionDefinition, ActionSubject, ActionTargetObject } from \"./types\"\nimport { isObjectActionDefinition } from \"./validation\"\n\ntype RuntimePhaseHandler = (ctx: unknown) => unknown | Promise<unknown>\n\nexport async function runActionValidators<TBaseContext extends object>(input: {\n readonly action: ActionDefinition\n readonly subject: ActionSubject\n readonly baseContext: TBaseContext\n readonly target?: ActionTargetObject | null\n}): Promise<void> {\n const validators = input.action.phases.validate as readonly RuntimePhaseHandler[]\n if (validators.length === 0) {\n return\n }\n\n if (!isObjectActionDefinition(input.action)) {\n for (const validator of validators) {\n const result = await validator(input.baseContext)\n if (isValidatorErrorResult(result)) {\n throw new ActionValidationError(result.error, {\n actionId: input.action.id,\n subject: input.subject,\n })\n }\n }\n return\n }\n\n if (!input.target) {\n throw new Error(`[Sixb] Action '${input.action.id}' requires an object target.`)\n }\n\n for (const validator of validators) {\n const result = await validator({\n ...input.baseContext,\n target: input.target,\n })\n if (isValidatorErrorResult(result)) {\n throw new ActionValidationError(result.error, {\n actionId: input.action.id,\n subject: input.subject,\n })\n }\n }\n}\n\nfunction isValidatorErrorResult(value: unknown): value is { readonly error: string } {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"error\" in value &&\n typeof value.error === \"string\"\n )\n}\n"
|
|
11
|
-
],
|
|
12
|
-
"mappings": "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",
|
|
13
|
-
"debugId": "566997B478269C6164756E2164756E21",
|
|
14
|
-
"names": []
|
|
15
|
-
}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/storage/action-runs/types.ts", "../src/storage/action-runs/failure.ts"],
|
|
4
|
-
"sourcesContent": [
|
|
5
|
-
"import type { ActionSubject } from \"../../actions\"\nimport type { SixbErrorCode, SixbFailure } from \"../../errors/types\"\nimport type { JsonValue } from \"../../json\"\n\nexport type ActionRunStatus = \"queued\" | \"running\" | \"succeeded\" | \"failed\" | \"cancelled\"\n\nexport const ACTION_RUN_PHASES = [\n \"request\",\n \"enqueue\",\n \"validation\",\n \"writeback\",\n \"edits\",\n \"commit\",\n \"effects\",\n \"cancelled\",\n] as const\n\nexport type ActionRunPhase = (typeof ACTION_RUN_PHASES)[number]\n\nexport type ActionRunParams = Readonly<Record<string, JsonValue>>\n\nexport type ActionRunPhaseStatus = \"succeeded\" | \"failed\"\n\n/** Error codes an action run or phase record can persist and expose. */\nexport const ACTION_RUN_FAILURE_CODES = [\n \"internal.unexpected\",\n \"runtime.cancelled\",\n \"queue.enqueue_failed\",\n \"action.phase_failed\",\n \"action.read_conflict\",\n] as const satisfies readonly [SixbErrorCode, ...SixbErrorCode[]]\n\nexport type ActionRunFailureCode = (typeof ACTION_RUN_FAILURE_CODES)[number]\n\nexport interface ActionRunFailureDetails<TPhase extends ActionRunPhase = ActionRunPhase> {\n readonly actionId: string\n readonly runId: string\n readonly phase: TPhase\n}\n\n/** Portable failure record with Action's required correlation details. */\nexport interface ActionRunFailure<TPhase extends ActionRunPhase = ActionRunPhase>\n extends Omit<SixbFailure<ActionRunFailureCode>, \"details\"> {\n readonly details: ActionRunFailureDetails<TPhase>\n}\n\nexport type ActionRunWritebackRecord =\n | {\n readonly status: \"succeeded\"\n readonly completedAt: Date\n readonly result: JsonValue\n readonly error?: never\n }\n | {\n readonly status: \"failed\"\n readonly completedAt: Date\n readonly result?: never\n readonly error: ActionRunFailure<\"writeback\">\n }\n\nexport type ActionRunEffectsRecord =\n | {\n readonly status: \"succeeded\"\n readonly completedAt: Date\n readonly error?: never\n }\n | {\n readonly status: \"failed\"\n readonly completedAt: Date\n readonly error: ActionRunFailure<\"effects\">\n }\n\nexport interface ActionRunRecord {\n readonly id: string\n readonly projectId: string\n readonly executionId: string\n readonly actionId: string\n readonly subject: ActionSubject\n readonly status: ActionRunStatus\n readonly phase?: ActionRunPhase\n readonly queuedAt: Date\n readonly startedAt?: Date\n readonly finishedAt?: Date\n readonly params: ActionRunParams\n readonly idempotencyKey: string\n readonly writeback?: ActionRunWritebackRecord\n readonly effects?: ActionRunEffectsRecord\n readonly error?: ActionRunFailure\n}\n\nexport interface QueueActionRunInput {\n readonly id: string\n readonly projectId: string\n readonly executionId: string\n readonly actionId: string\n readonly subject: ActionSubject\n readonly params: ActionRunParams\n readonly idempotencyKey: string\n readonly queuedAt?: Date\n}\n\nexport interface StartActionRunInput {\n readonly id: string\n readonly projectId: string\n readonly startedAt?: Date\n readonly phase?: Extract<ActionRunPhase, \"validation\">\n}\n\nexport interface EnterActionRunPhaseInput {\n readonly id: string\n readonly projectId: string\n readonly phase: Extract<\n ActionRunPhase,\n \"validation\" | \"writeback\" | \"edits\" | \"commit\" | \"effects\"\n >\n}\n\nexport type RecordActionWritebackInput =\n | {\n readonly id: string\n readonly projectId: string\n readonly status: \"succeeded\"\n readonly completedAt?: Date\n readonly result: JsonValue\n }\n | {\n readonly id: string\n readonly projectId: string\n readonly status: \"failed\"\n readonly completedAt?: Date\n readonly error: ActionRunFailure<\"writeback\">\n }\n\nexport type RecordActionEffectsInput =\n | {\n readonly id: string\n readonly projectId: string\n readonly status: \"succeeded\"\n readonly completedAt?: Date\n }\n | {\n readonly id: string\n readonly projectId: string\n readonly status: \"failed\"\n readonly completedAt?: Date\n readonly error: ActionRunFailure<\"effects\">\n }\n\nexport type FinishActionRunInput =\n | {\n readonly id: string\n readonly projectId: string\n readonly status: \"succeeded\"\n readonly finishedAt?: Date\n readonly phase?: ActionRunPhase\n }\n | {\n readonly id: string\n readonly projectId: string\n readonly status: \"failed\" | \"cancelled\"\n readonly finishedAt?: Date\n readonly error: ActionRunFailure\n }\n\nexport interface ListActionRunsInput {\n readonly projectId: string\n readonly actionId?: string\n readonly actionIds?: readonly string[]\n readonly subject?: ActionSubject\n readonly objectTypeId?: string\n readonly objectTypeIds?: readonly string[]\n readonly primaryId?: string\n readonly statuses?: readonly ActionRunStatus[]\n readonly startedAfter?: Date\n readonly startedBefore?: Date\n readonly limit?: number\n readonly offset?: number\n readonly order?: \"asc\" | \"desc\"\n}\n\nexport interface ListActionRunsResult {\n readonly runs: readonly ActionRunRecord[]\n readonly hasMore: boolean\n readonly total: number\n}\n\nexport interface LockActionMaterializationRunInput {\n readonly projectId: string\n readonly actionId: string\n readonly runId: string\n}\n\nexport interface ActionRunStorage {\n /** Transactional fence for Action identity and running state before a new ontology commit. */\n lockForMaterialization(input: LockActionMaterializationRunInput): Promise<ActionRunRecord>\n queue(input: QueueActionRunInput): Promise<ActionRunRecord>\n start(input: StartActionRunInput): Promise<ActionRunRecord>\n enterPhase(input: EnterActionRunPhaseInput): Promise<ActionRunRecord>\n recordWriteback(input: RecordActionWritebackInput): Promise<ActionRunRecord>\n recordEffects(input: RecordActionEffectsInput): Promise<ActionRunRecord>\n finish(input: FinishActionRunInput): Promise<ActionRunRecord>\n getById(params: { projectId: string; id: string }): Promise<ActionRunRecord | null>\n list(input: ListActionRunsInput): Promise<ListActionRunsResult>\n}\n",
|
|
6
|
-
"import { parseSixbFailure } from \"../../errors/internal\"\nimport { isPlainRecord } from \"../../json\"\nimport {\n ACTION_RUN_FAILURE_CODES,\n ACTION_RUN_PHASES,\n type ActionRunFailure,\n type ActionRunFailureDetails,\n type ActionRunPhase,\n} from \"./types\"\n\n/** Serializes the canonical failure plus Action's typed lifecycle extension. */\nexport function serializeActionRunFailure<TPhase extends ActionRunPhase>(\n failure: ActionRunFailure<TPhase>,\n expectedPhase?: TPhase\n): string {\n const parsed =\n expectedPhase === undefined\n ? parseActionRunFailure(failure)\n : parseActionRunFailure(failure, expectedPhase)\n return JSON.stringify(parsed)\n}\n\n/** Validates and detaches an Action failure read from a storage boundary. */\nexport function parseActionRunFailure<TPhase extends ActionRunPhase>(\n value: unknown,\n expectedPhase: TPhase\n): ActionRunFailure<TPhase>\nexport function parseActionRunFailure(value: unknown): ActionRunFailure\nexport function parseActionRunFailure(\n value: unknown,\n expectedPhase?: ActionRunPhase\n): ActionRunFailure {\n const candidate = parseStoredActionRunFailureValue(value)\n const failure = parseSixbFailure(candidate, ACTION_RUN_FAILURE_CODES)\n const details = failure.details\n if (\n !isPlainRecord(details) ||\n typeof details.actionId !== \"string\" ||\n typeof details.runId !== \"string\" ||\n typeof details.phase !== \"string\" ||\n !(ACTION_RUN_PHASES as readonly string[]).includes(details.phase)\n ) {\n throw new Error(\n \"[Sixb] Stored failure is invalid: Action details must contain actionId, runId, and a known phase.\"\n )\n }\n if (expectedPhase !== undefined && details.phase !== expectedPhase) {\n throw new Error(`[Sixb] Stored Action ${expectedPhase} failure has phase '${details.phase}'.`)\n }\n\n return {\n ...failure,\n details: details as unknown as ActionRunFailureDetails,\n }\n}\n\nfunction parseStoredActionRunFailureValue(value: unknown): unknown {\n if (typeof value !== \"string\") return value\n try {\n return JSON.parse(value) as unknown\n } catch {\n throw new Error(\"[Sixb] Stored failure is invalid: value is not valid JSON.\")\n }\n}\n"
|
|
7
|
-
],
|
|
8
|
-
"mappings": ";;;;;;;;;AAMO,IAAM,qBAAoB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AASO,IAAM,4BAA2B;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;ACnBO,SAAS,0BAAwD,CACtE,SACA,eACQ;AAAA,EACR,MAAM,SACJ,kBAAkB,YACd,uBAAsB,OAAO,IAC7B,uBAAsB,SAAS,aAAa;AAAA,EAClD,OAAO,KAAK,UAAU,MAAM;AAAA;AASvB,SAAS,sBAAqB,CACnC,OACA,eACkB;AAAA,EAClB,MAAM,YAAY,iCAAiC,KAAK;AAAA,EACxD,MAAM,UAAU,kBAAiB,WAAW,yBAAwB;AAAA,EACpE,MAAM,UAAU,QAAQ;AAAA,EACxB,IACE,CAAC,cAAc,OAAO,KACtB,OAAO,QAAQ,aAAa,YAC5B,OAAO,QAAQ,UAAU,YACzB,OAAO,QAAQ,UAAU,YACzB,CAAE,mBAAwC,SAAS,QAAQ,KAAK,GAChE;AAAA,IACA,MAAM,IAAI,MACR,mGACF;AAAA,EACF;AAAA,EACA,IAAI,kBAAkB,aAAa,QAAQ,UAAU,eAAe;AAAA,IAClE,MAAM,IAAI,MAAM,wBAAwB,oCAAoC,QAAQ,SAAS;AAAA,EAC/F;AAAA,EAEA,OAAO;AAAA,OACF;AAAA,IACH;AAAA,EACF;AAAA;AAGF,SAAS,gCAAgC,CAAC,OAAyB;AAAA,EACjE,IAAI,OAAO,UAAU;AAAA,IAAU,OAAO;AAAA,EACtC,IAAI;AAAA,IACF,OAAO,KAAK,MAAM,KAAK;AAAA,IACvB,MAAM;AAAA,IACN,MAAM,IAAI,MAAM,4DAA4D;AAAA;AAAA;",
|
|
9
|
-
"debugId": "4C1D77261542AF7164756E2164756E21",
|
|
10
|
-
"names": []
|
|
11
|
-
}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/storage/action-runs/idempotency.ts", "../src/storage/errors.ts", "../src/storage/file-download-grants/record.ts", "../src/storage/pipeline-runs/idempotency.ts", "../src/storage/sync-runs/idempotency.ts", "../src/storage/transaction.ts"],
|
|
4
|
-
"sourcesContent": [
|
|
5
|
-
"import type { ActionSubject } from \"../../actions\"\nimport { stableJsonStringify } from \"../../json\"\nimport type {\n ActionRunEffectsRecord,\n ActionRunPhase,\n ActionRunRecord,\n ActionRunWritebackRecord,\n FinishActionRunInput,\n QueueActionRunInput,\n} from \"./types\"\n\nexport function actionSubjectsEqual(left: ActionSubject, right: ActionSubject): boolean {\n if (left.kind !== right.kind) return false\n if (left.kind === \"none\") return true\n if (right.kind === \"none\") return false\n return left.objectTypeId === right.objectTypeId && left.primaryId === right.primaryId\n}\n\nexport function actionRunParamsEqual(left: unknown, right: unknown): boolean {\n return stableJsonStringify(left) === stableJsonStringify(right)\n}\n\nexport type ActionRunPhaseRecord = ActionRunWritebackRecord | ActionRunEffectsRecord\n\nexport function actionRunPhaseRecordsEqual(\n left: ActionRunPhaseRecord,\n right: ActionRunPhaseRecord\n): boolean {\n return actionRunParamsEqual(stripPhaseRecordCompletedAt(left), stripPhaseRecordCompletedAt(right))\n}\n\nexport function finishActionRunPhase(\n input: FinishActionRunInput,\n current: ActionRunPhase | null | undefined\n): ActionRunPhase {\n if (input.status === \"succeeded\") {\n return input.phase ?? current ?? \"validation\"\n }\n\n return input.error.details.phase\n}\n\nexport function canRequeueActionRunAfterEnqueueFailure(\n existing: ActionRunRecord,\n input: QueueActionRunInput\n): boolean {\n return (\n existing.status === \"failed\" &&\n existing.phase === \"enqueue\" &&\n existing.executionId === input.executionId &&\n existing.error?.retryable === true &&\n existing.actionId === input.actionId &&\n existing.idempotencyKey === input.idempotencyKey &&\n actionSubjectsEqual(existing.subject, input.subject) &&\n actionRunParamsEqual(existing.params, input.params)\n )\n}\n\nexport function isTerminalActionRun(record: Pick<ActionRunRecord, \"status\">): boolean {\n return (\n record.status === \"succeeded\" || record.status === \"failed\" || record.status === \"cancelled\"\n )\n}\n\nfunction stripPhaseRecordCompletedAt(\n record: ActionRunPhaseRecord\n): Omit<ActionRunPhaseRecord, \"completedAt\"> {\n const { completedAt: _completedAt, ...stableRecord } = record\n return stableRecord\n}\n",
|
|
6
|
-
"/**\n * Thrown when a storage lookup by primary ID finds no matching object.\n * Carries structured context so callers can discriminate without string parsing.\n */\nexport class ObjectNotFoundError extends Error {\n readonly name = \"ObjectNotFoundError\"\n\n constructor(\n readonly objectTypeId: string,\n readonly primaryId: string,\n readonly context: string\n ) {\n super(`[Sixb] ${context}: ${objectTypeId}:${primaryId}`)\n }\n}\n\nexport class ObjectStorageError extends Error {\n readonly name = \"ObjectStorageError\"\n}\n\nexport type StorageTransactionErrorCode =\n | \"nested_transaction\"\n | \"serialization_failure\"\n | \"transaction_inactive\"\n\nexport interface StorageTransactionErrorOptions {\n readonly cause?: unknown\n readonly code?: StorageTransactionErrorCode\n}\n\nexport class StorageTransactionError extends Error {\n readonly name = \"StorageTransactionError\"\n readonly code?: StorageTransactionErrorCode\n override readonly cause?: unknown\n\n constructor(message: string, options: StorageTransactionErrorOptions = {}) {\n super(message)\n this.code = options.code\n this.cause = options.cause\n }\n}\n\nexport function isStorageSerializationFailure(error: unknown): boolean {\n return error instanceof StorageTransactionError && error.code === \"serialization_failure\"\n}\n",
|
|
7
|
-
"import { isFileRef } from \"../../blob-storage\"\nimport type { FileDownloadGrantRecord } from \"./types\"\n\n/**\n * Rebuilds a grant from a provider row with camelCase keys. `file` may arrive parsed (jsonb) or\n * as text (SQLite), and timestamps as `Date` or ISO text. Fails closed on corruption: a grant that\n * cannot be read must not serve a file.\n */\nexport function parseFileDownloadGrantRow(row: {\n readonly [column: string]: unknown\n}): FileDownloadGrantRecord {\n const id = text(row.id, \"id\", String(row.id))\n const file = typeof row.file === \"string\" ? JSON.parse(row.file) : row.file\n if (!isFileRef(file)) throw corrupt(id, \"file is not a file reference\")\n\n return {\n id,\n projectId: text(row.projectId, \"projectId\", id),\n tokenHash: text(row.tokenHash, \"tokenHash\", id),\n file,\n executionId: text(row.executionId, \"executionId\", id),\n createdAt: date(row.createdAt, \"createdAt\", id),\n expiresAt: date(row.expiresAt, \"expiresAt\", id),\n ...(row.revokedAt == null ? {} : { revokedAt: date(row.revokedAt, \"revokedAt\", id) }),\n }\n}\n\nexport function cloneFileDownloadGrantRecord(\n record: FileDownloadGrantRecord\n): FileDownloadGrantRecord {\n return structuredClone(record)\n}\n\nfunction text(value: unknown, column: string, id: string): string {\n if (typeof value !== \"string\" || value.length === 0) throw corrupt(id, `${column} is not text`)\n return value\n}\n\nfunction date(value: unknown, column: string, id: string): Date {\n const parsed = value instanceof Date || typeof value === \"string\" ? new Date(value) : null\n if (!parsed || !Number.isFinite(parsed.getTime())) throw corrupt(id, `${column} is not a date`)\n return parsed\n}\n\nfunction corrupt(id: string, reason: string): Error {\n return new Error(`[Sixb] Stored file download grant '${id}' is invalid: ${reason}.`)\n}\n",
|
|
8
|
-
"import type { PipelineRunRecord, QueuePipelineRunInput } from \"./types\"\n\nexport function canRequeuePipelineRunAfterEnqueueFailure(\n existing: PipelineRunRecord,\n input: QueuePipelineRunInput\n): boolean {\n return (\n existing.status === \"failed\" &&\n existing.error?.code === \"queue.enqueue_failed\" &&\n existing.error.retryable &&\n existing.executionId === input.executionId &&\n existing.pipelineId === input.pipelineId\n )\n}\n",
|
|
9
|
-
"import type { QueueSyncRunInput, SyncRunRecord } from \"./types\"\n\nexport function canRequeueSyncRunAfterEnqueueFailure(\n existing: SyncRunRecord,\n input: QueueSyncRunInput\n): boolean {\n return (\n existing.status === \"failed\" &&\n existing.error?.code === \"queue.enqueue_failed\" &&\n existing.error.retryable &&\n existing.executionId === input.executionId &&\n existing.syncId === input.syncId &&\n existing.datasetId === input.datasetId &&\n existing.mode === input.mode &&\n existing.expectedLatestVersionId === input.expectedLatestVersionId &&\n existing.commitMessage === input.commitMessage\n )\n}\n",
|
|
10
|
-
"import { StorageTransactionError } from \"./errors\"\nimport { createObjectOperationScope } from \"./operation-scope\"\nimport type { Storage } from \"./types\"\n\ntype ObjectLike = Record<PropertyKey, unknown>\n\nexport function createTransactionStorageProxy<T extends Storage>(\n target: T,\n isActive: () => boolean\n): T {\n const proxies = new WeakMap<object, object>()\n const objectStorage = createObjectOperationScope(target.objects, {\n assertAvailable: () => assertTransactionActive(isActive),\n run: async <TResult>(operation: () => Promise<TResult> | TResult): Promise<TResult> => {\n assertTransactionActive(isActive)\n return operation()\n },\n })\n\n const wrap = <TValue extends object>(value: TValue): TValue => {\n const existing = proxies.get(value)\n if (existing) return existing as TValue\n\n const proxy = new Proxy(value as ObjectLike, {\n // The guard runs on property access and on call. Its purpose is to fail fast when a\n // transaction handle (`tx`) leaks past the transaction's lifetime — using it afterward is a\n // bug, not a recoverable state. Overhead is bounded: only the storage namespaces reachable\n // from `tx` are wrapped (a handful), not the row/link data graph, and never per-record.\n get(current, property, receiver) {\n assertTransactionActive(isActive)\n const result =\n current === target && property === \"objects\"\n ? objectStorage\n : Reflect.get(current, property, receiver)\n if (typeof result === \"function\") {\n return (...args: unknown[]) => {\n assertTransactionActive(isActive)\n return result.apply(current, args)\n }\n }\n if (result && typeof result === \"object\") {\n return wrap(result)\n }\n return result\n },\n })\n\n proxies.set(value, proxy)\n return proxy as TValue\n }\n\n return wrap(target)\n}\n\nexport function assertTransactionActive(isActive: () => boolean): void {\n if (!isActive()) {\n throw new StorageTransactionError(\n \"[Sixb] Transaction storage cannot be used after transaction completion.\",\n { code: \"transaction_inactive\" }\n )\n }\n}\n\nexport function throwNestedStorageTransaction(): never {\n throw new StorageTransactionError(\"[Sixb] Nested storage transactions are not supported yet.\", {\n code: \"nested_transaction\",\n })\n}\n"
|
|
11
|
-
],
|
|
12
|
-
"mappings": "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",
|
|
13
|
-
"debugId": "8C3E5A53727ECCEF64756E2164756E21",
|
|
14
|
-
"names": []
|
|
15
|
-
}
|
package/dist/chunk-zvx7h87b.js
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/edits/errors.ts"],
|
|
4
|
-
"sourcesContent": [
|
|
5
|
-
"export class EditBatchError extends Error {\n constructor(message: string) {\n super(message)\n this.name = \"EditBatchError\"\n }\n}\n"
|
|
6
|
-
],
|
|
7
|
-
"mappings": ";;AAAO,MAAM,wBAAuB,MAAM;AAAA,EACxC,WAAW,CAAC,SAAiB;AAAA,IAC3B,MAAM,OAAO;AAAA,IACb,KAAK,OAAO;AAAA;AAEhB;",
|
|
8
|
-
"debugId": "EB0A82B55DCF58C664756E2164756E21",
|
|
9
|
-
"names": []
|
|
10
|
-
}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import type { ActionSubject } from "../../actions";
|
|
2
|
-
import type { ActionRunFailure } from "../../storage";
|
|
3
|
-
import type { EventEnvelope } from "../envelope";
|
|
4
|
-
export interface ActionRequestedEvent extends EventEnvelope {
|
|
5
|
-
type: "action.requested";
|
|
6
|
-
topic: "actions";
|
|
7
|
-
partitionKey: string;
|
|
8
|
-
payload: {
|
|
9
|
-
actionId: string;
|
|
10
|
-
subject: ActionSubject;
|
|
11
|
-
params: Record<string, unknown>;
|
|
12
|
-
runId: string;
|
|
13
|
-
};
|
|
14
|
-
}
|
|
15
|
-
export interface ActionCompletedEvent extends EventEnvelope {
|
|
16
|
-
type: "action.completed";
|
|
17
|
-
topic: "actions";
|
|
18
|
-
partitionKey: string;
|
|
19
|
-
payload: {
|
|
20
|
-
actionId: string;
|
|
21
|
-
runId: string;
|
|
22
|
-
subject: ActionSubject;
|
|
23
|
-
finishedAt: string;
|
|
24
|
-
};
|
|
25
|
-
}
|
|
26
|
-
export interface ActionFailedEvent extends EventEnvelope {
|
|
27
|
-
type: "action.failed";
|
|
28
|
-
topic: "actions";
|
|
29
|
-
partitionKey: string;
|
|
30
|
-
payload: {
|
|
31
|
-
actionId: string;
|
|
32
|
-
runId: string;
|
|
33
|
-
subject: ActionSubject;
|
|
34
|
-
error: ActionRunFailure;
|
|
35
|
-
finishedAt: string;
|
|
36
|
-
};
|
|
37
|
-
}
|
|
38
|
-
export type ActionEvent = ActionRequestedEvent | ActionCompletedEvent | ActionFailedEvent;
|
|
39
|
-
//# sourceMappingURL=actions.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../../../src/events/types/actions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAClD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAEhD,MAAM,WAAW,oBAAqB,SAAQ,aAAa;IACzD,IAAI,EAAE,kBAAkB,CAAA;IACxB,KAAK,EAAE,SAAS,CAAA;IAChB,YAAY,EAAE,MAAM,CAAA;IACpB,OAAO,EAAE;QACP,QAAQ,EAAE,MAAM,CAAA;QAChB,OAAO,EAAE,aAAa,CAAA;QACtB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QAC/B,KAAK,EAAE,MAAM,CAAA;KACd,CAAA;CACF;AAED,MAAM,WAAW,oBAAqB,SAAQ,aAAa;IACzD,IAAI,EAAE,kBAAkB,CAAA;IACxB,KAAK,EAAE,SAAS,CAAA;IAChB,YAAY,EAAE,MAAM,CAAA;IACpB,OAAO,EAAE;QACP,QAAQ,EAAE,MAAM,CAAA;QAChB,KAAK,EAAE,MAAM,CAAA;QACb,OAAO,EAAE,aAAa,CAAA;QACtB,UAAU,EAAE,MAAM,CAAA;KACnB,CAAA;CACF;AAED,MAAM,WAAW,iBAAkB,SAAQ,aAAa;IACtD,IAAI,EAAE,eAAe,CAAA;IACrB,KAAK,EAAE,SAAS,CAAA;IAChB,YAAY,EAAE,MAAM,CAAA;IACpB,OAAO,EAAE;QACP,QAAQ,EAAE,MAAM,CAAA;QAChB,KAAK,EAAE,MAAM,CAAA;QACb,OAAO,EAAE,aAAa,CAAA;QACtB,KAAK,EAAE,gBAAgB,CAAA;QACvB,UAAU,EAAE,MAAM,CAAA;KACnB,CAAA;CACF;AAED,MAAM,MAAM,WAAW,GAAG,oBAAoB,GAAG,oBAAoB,GAAG,iBAAiB,CAAA"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Service layer for action operations.
|
|
3
|
-
*
|
|
4
|
-
* Resolves objectTypeId to a typed context and delegates to the leaf function.
|
|
5
|
-
*/
|
|
6
|
-
import type { RequestActionResult } from "../../actions/request";
|
|
7
|
-
import type { ExecutionContext } from "../../execution";
|
|
8
|
-
import type { SixbRuntimeContext } from "../../runtime/types";
|
|
9
|
-
import type { ActionRunRecord } from "../../storage";
|
|
10
|
-
import { type RequestActionAndWaitOptions, type RequestActionOptions } from "../action";
|
|
11
|
-
export declare function requestAction(runtime: SixbRuntimeContext, execution: ExecutionContext, objectTypeId: string, primaryId: string, actionId: string, params?: Record<string, unknown>, options?: RequestActionOptions): Promise<RequestActionResult>;
|
|
12
|
-
export declare function requestActionAndWait(runtime: SixbRuntimeContext, execution: ExecutionContext, objectTypeId: string, primaryId: string, actionId: string, params?: Record<string, unknown>, options?: RequestActionAndWaitOptions): Promise<ActionRunRecord>;
|
|
13
|
-
//# sourceMappingURL=action-service.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"action-service.d.ts","sourceRoot":"","sources":["../../../src/objects/service/action-service.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAChE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AACvD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AAC7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AACpD,OAAO,EACL,KAAK,2BAA2B,EAChC,KAAK,oBAAoB,EAG1B,MAAM,WAAW,CAAA;AAGlB,wBAAsB,aAAa,CACjC,OAAO,EAAE,kBAAkB,EAC3B,SAAS,EAAE,gBAAgB,EAC3B,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,mBAAmB,CAAC,CAG9B;AAED,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,kBAAkB,EAC3B,SAAS,EAAE,gBAAgB,EAC3B,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,OAAO,CAAC,EAAE,2BAA2B,GACpC,OAAO,CAAC,eAAe,CAAC,CAG1B"}
|
|
@@ -1,282 +0,0 @@
|
|
|
1
|
-
import { randomUUID } from "node:crypto"
|
|
2
|
-
import { reportRunFailure } from "../error-reporting/capability"
|
|
3
|
-
import { createSixbError, toSixbFailure } from "../errors/internal"
|
|
4
|
-
import type { DomainEventLog } from "../events"
|
|
5
|
-
import type { Queues } from "../queues"
|
|
6
|
-
import type {
|
|
7
|
-
ActionRunFailure,
|
|
8
|
-
ActionRunParams,
|
|
9
|
-
ActionRunRecord,
|
|
10
|
-
CreateExecutionInput,
|
|
11
|
-
Storage,
|
|
12
|
-
} from "../storage"
|
|
13
|
-
import { ACTION_RUN_FAILURE_CODES, ActionRunError } from "../storage"
|
|
14
|
-
import { parseActionRunFailure } from "../storage/action-runs/failure"
|
|
15
|
-
import { actionRunParamsEqual, actionSubjectsEqual } from "../storage/action-runs/idempotency"
|
|
16
|
-
import type { RequestActionResult } from "./request"
|
|
17
|
-
import { createActionRunId, createActionRunIdempotencyKey } from "./run-id"
|
|
18
|
-
import type { ActionSubject } from "./types"
|
|
19
|
-
|
|
20
|
-
interface DispatchActionRunInput {
|
|
21
|
-
readonly errorReporterHost: object
|
|
22
|
-
readonly projectId: string
|
|
23
|
-
readonly storage: Storage
|
|
24
|
-
readonly queue: Queues["actions"]
|
|
25
|
-
readonly events: DomainEventLog
|
|
26
|
-
readonly actionId: string
|
|
27
|
-
readonly subject: ActionSubject
|
|
28
|
-
readonly params: ActionRunParams
|
|
29
|
-
readonly runId?: string
|
|
30
|
-
readonly createExecution: (executionId: string, runId: string) => Promise<CreateExecutionInput>
|
|
31
|
-
/** Runs before payload comparison or retry so an existing run cannot cross authority owners. */
|
|
32
|
-
readonly assertCanReuseExisting?: (storage: Storage, run: ActionRunRecord) => void | Promise<void>
|
|
33
|
-
/** Checks that hold only for a run this call creates; a replayed run keeps its accepted params. */
|
|
34
|
-
readonly assertNewRun?: () => Promise<void>
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
interface PreparedActionRun {
|
|
38
|
-
readonly runId: string
|
|
39
|
-
readonly idempotencyKey: string
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
type PersistedActionRun =
|
|
43
|
-
| { readonly publish: false; readonly run: ActionRunRecord }
|
|
44
|
-
| {
|
|
45
|
-
readonly publish: true
|
|
46
|
-
readonly run: ActionRunRecord
|
|
47
|
-
readonly execution: CreateExecutionInput
|
|
48
|
-
readonly queuedAt: Date
|
|
49
|
-
readonly created: boolean
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
/** Persist an Action execution and run before publishing its queue job. */
|
|
53
|
-
export async function dispatchActionRun(
|
|
54
|
-
input: DispatchActionRunInput
|
|
55
|
-
): Promise<RequestActionResult> {
|
|
56
|
-
const request = prepareActionRun(input)
|
|
57
|
-
const persisted = await persistActionRun(input, request)
|
|
58
|
-
if (!persisted.publish) return existingActionRunResult(persisted.run)
|
|
59
|
-
return publishActionRun(input, persisted)
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
function prepareActionRun(input: DispatchActionRunInput): PreparedActionRun {
|
|
63
|
-
const runId = createActionRunId(input.runId)
|
|
64
|
-
return {
|
|
65
|
-
runId,
|
|
66
|
-
idempotencyKey: createActionRunIdempotencyKey(input.projectId, runId),
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
async function persistActionRun(
|
|
71
|
-
input: DispatchActionRunInput,
|
|
72
|
-
request: PreparedActionRun
|
|
73
|
-
): Promise<PersistedActionRun> {
|
|
74
|
-
const actionRuns = requireActionRunStorage(input.storage)
|
|
75
|
-
const existing = await actionRuns.getById({ projectId: input.projectId, id: request.runId })
|
|
76
|
-
if (existing) {
|
|
77
|
-
await input.assertCanReuseExisting?.(input.storage, existing)
|
|
78
|
-
return reuseActionRun(input, existing)
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
await input.assertNewRun?.()
|
|
82
|
-
const execution = await input.createExecution(`exec_${randomUUID()}`, request.runId)
|
|
83
|
-
const queuedAt = new Date()
|
|
84
|
-
try {
|
|
85
|
-
return await input.storage.transaction(
|
|
86
|
-
async (tx): Promise<PersistedActionRun> => {
|
|
87
|
-
const transactionalRuns = requireActionRunStorage(tx)
|
|
88
|
-
const raced = await transactionalRuns.getById({
|
|
89
|
-
projectId: input.projectId,
|
|
90
|
-
id: request.runId,
|
|
91
|
-
})
|
|
92
|
-
if (raced) {
|
|
93
|
-
await input.assertCanReuseExisting?.(tx, raced)
|
|
94
|
-
assertExistingRunMatchesRequest(raced, input)
|
|
95
|
-
return { publish: false, run: raced }
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
await tx.executions.create(execution)
|
|
99
|
-
const run = await transactionalRuns.queue({
|
|
100
|
-
projectId: input.projectId,
|
|
101
|
-
id: request.runId,
|
|
102
|
-
executionId: execution.id,
|
|
103
|
-
actionId: input.actionId,
|
|
104
|
-
subject: input.subject,
|
|
105
|
-
params: input.params,
|
|
106
|
-
idempotencyKey: request.idempotencyKey,
|
|
107
|
-
queuedAt,
|
|
108
|
-
})
|
|
109
|
-
return { publish: true, run, execution, queuedAt, created: true }
|
|
110
|
-
},
|
|
111
|
-
{ isolation: "serializable" }
|
|
112
|
-
)
|
|
113
|
-
} catch (error) {
|
|
114
|
-
if (!(error instanceof ActionRunError)) throw error
|
|
115
|
-
const raced = await actionRuns.getById({ projectId: input.projectId, id: request.runId })
|
|
116
|
-
if (!raced) throw error
|
|
117
|
-
await input.assertCanReuseExisting?.(input.storage, raced)
|
|
118
|
-
assertExistingRunMatchesRequest(raced, input)
|
|
119
|
-
return { publish: false, run: raced }
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
async function reuseActionRun(
|
|
124
|
-
input: DispatchActionRunInput,
|
|
125
|
-
existing: ActionRunRecord
|
|
126
|
-
): Promise<PersistedActionRun> {
|
|
127
|
-
assertExistingRunMatchesRequest(existing, input)
|
|
128
|
-
if (!isRetryableEnqueueFailure(existing)) return { publish: false, run: existing }
|
|
129
|
-
|
|
130
|
-
const execution = await input.storage.executions.getById({
|
|
131
|
-
projectId: input.projectId,
|
|
132
|
-
id: existing.executionId,
|
|
133
|
-
})
|
|
134
|
-
if (!execution) {
|
|
135
|
-
throw new ActionRunError(
|
|
136
|
-
`[Sixb] Execution '${existing.executionId}' for Action run '${existing.id}' was not found.`
|
|
137
|
-
)
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
const queuedAt = new Date()
|
|
141
|
-
const run = await requireActionRunStorage(input.storage).queue({
|
|
142
|
-
projectId: input.projectId,
|
|
143
|
-
id: existing.id,
|
|
144
|
-
executionId: existing.executionId,
|
|
145
|
-
actionId: existing.actionId,
|
|
146
|
-
subject: existing.subject,
|
|
147
|
-
params: existing.params,
|
|
148
|
-
idempotencyKey: existing.idempotencyKey,
|
|
149
|
-
queuedAt,
|
|
150
|
-
})
|
|
151
|
-
return { publish: true, run, execution, queuedAt, created: false }
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
async function publishActionRun(
|
|
155
|
-
input: DispatchActionRunInput,
|
|
156
|
-
persisted: Extract<PersistedActionRun, { readonly publish: true }>
|
|
157
|
-
): Promise<RequestActionResult> {
|
|
158
|
-
let job: Awaited<ReturnType<Queues["actions"]["enqueue"]>>[number] | undefined
|
|
159
|
-
try {
|
|
160
|
-
const jobs = await input.queue.enqueue({
|
|
161
|
-
projectId: input.projectId,
|
|
162
|
-
jobs: [
|
|
163
|
-
{
|
|
164
|
-
id: persisted.run.id,
|
|
165
|
-
type: "action.run.requested",
|
|
166
|
-
payload: {
|
|
167
|
-
runId: persisted.run.id,
|
|
168
|
-
},
|
|
169
|
-
},
|
|
170
|
-
],
|
|
171
|
-
})
|
|
172
|
-
job = jobs[0]
|
|
173
|
-
} catch (error) {
|
|
174
|
-
await failActionRunPublication(input, persisted.run, error)
|
|
175
|
-
throw error
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
await input.events.emit(
|
|
179
|
-
{
|
|
180
|
-
events: [
|
|
181
|
-
{
|
|
182
|
-
type: "action.requested",
|
|
183
|
-
payload: {
|
|
184
|
-
actionId: persisted.run.actionId,
|
|
185
|
-
subject: persisted.run.subject,
|
|
186
|
-
params: persisted.run.params,
|
|
187
|
-
runId: persisted.run.id,
|
|
188
|
-
},
|
|
189
|
-
},
|
|
190
|
-
],
|
|
191
|
-
correlationId: persisted.execution.correlationId,
|
|
192
|
-
},
|
|
193
|
-
{ source: "Sixb" }
|
|
194
|
-
)
|
|
195
|
-
|
|
196
|
-
return {
|
|
197
|
-
runId: persisted.run.id,
|
|
198
|
-
queuedAt: persisted.queuedAt.toISOString(),
|
|
199
|
-
...(job?.id ? { jobId: job.id } : {}),
|
|
200
|
-
created: persisted.created,
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
async function failActionRunPublication(
|
|
205
|
-
input: DispatchActionRunInput,
|
|
206
|
-
run: ActionRunRecord,
|
|
207
|
-
error: unknown
|
|
208
|
-
): Promise<void> {
|
|
209
|
-
const failedAt = new Date()
|
|
210
|
-
const failure = toActionRunFailure(error, run, failedAt)
|
|
211
|
-
await requireActionRunStorage(input.storage).finish({
|
|
212
|
-
projectId: input.projectId,
|
|
213
|
-
id: run.id,
|
|
214
|
-
status: "failed",
|
|
215
|
-
finishedAt: failedAt,
|
|
216
|
-
error: failure,
|
|
217
|
-
})
|
|
218
|
-
reportRunFailure(input.errorReporterHost, error, {
|
|
219
|
-
projectId: input.projectId,
|
|
220
|
-
runKind: "action",
|
|
221
|
-
run: { runId: run.id, actionId: run.actionId },
|
|
222
|
-
failure,
|
|
223
|
-
})
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
function requireActionRunStorage(storage: Storage): NonNullable<Storage["actionRuns"]> {
|
|
227
|
-
if (!storage.actionRuns) {
|
|
228
|
-
throw new ActionRunError("[Sixb] Action run storage is not configured.")
|
|
229
|
-
}
|
|
230
|
-
return storage.actionRuns
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
function assertExistingRunMatchesRequest(
|
|
234
|
-
existing: ActionRunRecord,
|
|
235
|
-
request: Pick<DispatchActionRunInput, "actionId" | "subject" | "params">
|
|
236
|
-
): void {
|
|
237
|
-
if (
|
|
238
|
-
existing.actionId !== request.actionId ||
|
|
239
|
-
!actionSubjectsEqual(existing.subject, request.subject) ||
|
|
240
|
-
!actionRunParamsEqual(existing.params, request.params)
|
|
241
|
-
) {
|
|
242
|
-
throw new ActionRunError(
|
|
243
|
-
`[Sixb] Action run '${existing.id}' already exists with a different request payload.`
|
|
244
|
-
)
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
function isRetryableEnqueueFailure(record: ActionRunRecord): boolean {
|
|
249
|
-
return (
|
|
250
|
-
record.status === "failed" && record.phase === "enqueue" && record.error?.retryable === true
|
|
251
|
-
)
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
function existingActionRunResult(existing: ActionRunRecord): RequestActionResult {
|
|
255
|
-
return {
|
|
256
|
-
runId: existing.id,
|
|
257
|
-
queuedAt: existing.queuedAt.toISOString(),
|
|
258
|
-
created: false,
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
function toActionRunFailure(
|
|
263
|
-
error: unknown,
|
|
264
|
-
run: ActionRunRecord,
|
|
265
|
-
at: Date
|
|
266
|
-
): ActionRunFailure<"enqueue"> {
|
|
267
|
-
const enqueueError = createSixbError(
|
|
268
|
-
"queue.enqueue_failed",
|
|
269
|
-
`[Sixb] Could not enqueue Action run '${run.id}'.`,
|
|
270
|
-
{
|
|
271
|
-
cause: error,
|
|
272
|
-
details: { actionId: run.actionId, runId: run.id, phase: "enqueue" },
|
|
273
|
-
}
|
|
274
|
-
)
|
|
275
|
-
return parseActionRunFailure(
|
|
276
|
-
toSixbFailure(enqueueError, {
|
|
277
|
-
allowedCodes: ACTION_RUN_FAILURE_CODES,
|
|
278
|
-
at,
|
|
279
|
-
}),
|
|
280
|
-
"enqueue"
|
|
281
|
-
)
|
|
282
|
-
}
|
package/src/actions/worker.ts
DELETED
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import type { ActionSubject } from "../../actions"
|
|
2
|
-
import type { ActionRunFailure } from "../../storage"
|
|
3
|
-
import type { EventEnvelope } from "../envelope"
|
|
4
|
-
|
|
5
|
-
export interface ActionRequestedEvent extends EventEnvelope {
|
|
6
|
-
type: "action.requested"
|
|
7
|
-
topic: "actions"
|
|
8
|
-
partitionKey: string
|
|
9
|
-
payload: {
|
|
10
|
-
actionId: string
|
|
11
|
-
subject: ActionSubject
|
|
12
|
-
params: Record<string, unknown>
|
|
13
|
-
runId: string
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export interface ActionCompletedEvent extends EventEnvelope {
|
|
18
|
-
type: "action.completed"
|
|
19
|
-
topic: "actions"
|
|
20
|
-
partitionKey: string
|
|
21
|
-
payload: {
|
|
22
|
-
actionId: string
|
|
23
|
-
runId: string
|
|
24
|
-
subject: ActionSubject
|
|
25
|
-
finishedAt: string
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
export interface ActionFailedEvent extends EventEnvelope {
|
|
30
|
-
type: "action.failed"
|
|
31
|
-
topic: "actions"
|
|
32
|
-
partitionKey: string
|
|
33
|
-
payload: {
|
|
34
|
-
actionId: string
|
|
35
|
-
runId: string
|
|
36
|
-
subject: ActionSubject
|
|
37
|
-
error: ActionRunFailure
|
|
38
|
-
finishedAt: string
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
export type ActionEvent = ActionRequestedEvent | ActionCompletedEvent | ActionFailedEvent
|