@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
package/src/schedules/runtime.ts
CHANGED
|
@@ -100,26 +100,6 @@ export function buildEventScheduleContext(event: DomainEvent): RuntimeEventSched
|
|
|
100
100
|
primaryId: event.payload.subject.primaryId,
|
|
101
101
|
},
|
|
102
102
|
}
|
|
103
|
-
case "action.requested":
|
|
104
|
-
return {
|
|
105
|
-
actionId: event.payload.actionId,
|
|
106
|
-
runId: event.payload.runId,
|
|
107
|
-
...actionSubjectContext(event.payload.subject),
|
|
108
|
-
params: { ...event.payload.params },
|
|
109
|
-
}
|
|
110
|
-
case "action.completed":
|
|
111
|
-
return {
|
|
112
|
-
actionId: event.payload.actionId,
|
|
113
|
-
runId: event.payload.runId,
|
|
114
|
-
...actionSubjectContext(event.payload.subject),
|
|
115
|
-
}
|
|
116
|
-
case "action.failed":
|
|
117
|
-
return {
|
|
118
|
-
actionId: event.payload.actionId,
|
|
119
|
-
runId: event.payload.runId,
|
|
120
|
-
...actionSubjectContext(event.payload.subject),
|
|
121
|
-
error: event.payload.error,
|
|
122
|
-
}
|
|
123
103
|
case "dataset.version.committed":
|
|
124
104
|
return { ...event.payload }
|
|
125
105
|
case "sync.run.finished":
|
|
@@ -131,27 +111,6 @@ export function buildEventScheduleContext(event: DomainEvent): RuntimeEventSched
|
|
|
131
111
|
}
|
|
132
112
|
}
|
|
133
113
|
|
|
134
|
-
function actionSubjectContext(subject: {
|
|
135
|
-
readonly kind: "none" | "object"
|
|
136
|
-
readonly objectTypeId?: string
|
|
137
|
-
readonly primaryId?: string
|
|
138
|
-
}): { readonly subject?: { readonly objectTypeId: string; readonly primaryId: string } } {
|
|
139
|
-
if (
|
|
140
|
-
subject.kind !== "object" ||
|
|
141
|
-
subject.objectTypeId === undefined ||
|
|
142
|
-
subject.primaryId === undefined
|
|
143
|
-
) {
|
|
144
|
-
return {}
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
return {
|
|
148
|
-
subject: {
|
|
149
|
-
objectTypeId: subject.objectTypeId,
|
|
150
|
-
primaryId: subject.primaryId,
|
|
151
|
-
},
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
|
|
155
114
|
function fieldsForEvent(event: DomainEvent): Readonly<Record<string, unknown>> {
|
|
156
115
|
if (event.topic !== "links") {
|
|
157
116
|
return {}
|
|
@@ -8,7 +8,6 @@ import type { EventScheduleCondition, EventScheduleDefinition, ScheduleDefinitio
|
|
|
8
8
|
const objectEventTypes = new Set(["object.created", "object.updated", "object.deleted"])
|
|
9
9
|
const linkEventTypes = new Set(["link.created", "link.updated", "link.deleted"])
|
|
10
10
|
const ruleEventTypes = new Set(["rule.triggered", "rule.resolved"])
|
|
11
|
-
const actionEventTypes = new Set(["action.requested", "action.completed", "action.failed"])
|
|
12
11
|
const datasetEventTypes = new Set(["dataset.version.committed"])
|
|
13
12
|
const syncEventTypes = new Set(["sync.run.finished"])
|
|
14
13
|
const pipelineEventTypes = new Set(["pipeline.run.finished"])
|
|
@@ -17,7 +16,6 @@ const linkIdentityFields = new Set(["target.objectTypeId", "target.primaryId"])
|
|
|
17
16
|
|
|
18
17
|
export interface ValidateSchedulesAtStartupOptions {
|
|
19
18
|
readonly registeredRuleIds?: ReadonlySet<string>
|
|
20
|
-
readonly registeredActionIds?: ReadonlySet<string>
|
|
21
19
|
readonly registeredDatasetIds?: ReadonlySet<string>
|
|
22
20
|
readonly registeredSyncIds?: ReadonlySet<string>
|
|
23
21
|
readonly registeredPipelineIds?: ReadonlySet<string>
|
|
@@ -138,9 +136,6 @@ function assertEventSourceShape(
|
|
|
138
136
|
case "rules":
|
|
139
137
|
assertNonEmptyString(value.ruleId, `${path} ruleId`, createError)
|
|
140
138
|
return
|
|
141
|
-
case "actions":
|
|
142
|
-
assertNonEmptyString(value.actionId, `${path} actionId`, createError)
|
|
143
|
-
return
|
|
144
139
|
case "datasets":
|
|
145
140
|
assertNonEmptyString(value.datasetId, `${path} datasetId`, createError)
|
|
146
141
|
return
|
|
@@ -154,7 +149,7 @@ function assertEventSourceShape(
|
|
|
154
149
|
return
|
|
155
150
|
default:
|
|
156
151
|
throw createError(
|
|
157
|
-
`${path} must select object, link, rule,
|
|
152
|
+
`${path} must select object, link, rule, dataset, sync, or pipeline events.`
|
|
158
153
|
)
|
|
159
154
|
}
|
|
160
155
|
}
|
|
@@ -212,15 +207,6 @@ function validateEventSchedule(
|
|
|
212
207
|
"rule"
|
|
213
208
|
)
|
|
214
209
|
return
|
|
215
|
-
case "actions":
|
|
216
|
-
validateRegisteredSource(
|
|
217
|
-
schedule,
|
|
218
|
-
source.actionId,
|
|
219
|
-
options.registeredActionIds,
|
|
220
|
-
actionEventTypes,
|
|
221
|
-
"action"
|
|
222
|
-
)
|
|
223
|
-
return
|
|
224
210
|
case "datasets":
|
|
225
211
|
validateRegisteredSource(
|
|
226
212
|
schedule,
|
|
@@ -294,7 +280,7 @@ function validateRegisteredSource(
|
|
|
294
280
|
sourceId: string | undefined,
|
|
295
281
|
registeredIds: ReadonlySet<string> | undefined,
|
|
296
282
|
supportedTypes: ReadonlySet<string>,
|
|
297
|
-
sourceKind: "rule" | "
|
|
283
|
+
sourceKind: "rule" | "dataset" | "sync" | "pipeline"
|
|
298
284
|
): void {
|
|
299
285
|
validateEventTypes(schedule, supportedTypes, sourceKind)
|
|
300
286
|
if (!registeredIds?.has(sourceId ?? "")) {
|
package/src/security/every.ts
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
*
|
|
9
9
|
* They live under one `every` namespace on purpose. Spending seven of the best identifiers in
|
|
10
10
|
* `@sixb/core` — `actions`, `workflows`, `syncs`, … — on an auxiliary subsystem collided with the
|
|
11
|
-
* primitives themselves and with
|
|
11
|
+
* primitives themselves and with client builders such as `logs.actions()`.
|
|
12
12
|
*/
|
|
13
13
|
|
|
14
14
|
import type { ActionDefinition } from "../actions/types"
|
|
@@ -1,13 +1,6 @@
|
|
|
1
1
|
import type { ActionSubject } from "../../actions"
|
|
2
2
|
import { stableJsonStringify } from "../../json"
|
|
3
|
-
import type {
|
|
4
|
-
ActionRunEffectsRecord,
|
|
5
|
-
ActionRunPhase,
|
|
6
|
-
ActionRunRecord,
|
|
7
|
-
ActionRunWritebackRecord,
|
|
8
|
-
FinishActionRunInput,
|
|
9
|
-
QueueActionRunInput,
|
|
10
|
-
} from "./types"
|
|
3
|
+
import type { ActionRunEffectsRecord, ActionRunRecord, ActionRunWritebackRecord } from "./types"
|
|
11
4
|
|
|
12
5
|
export function actionSubjectsEqual(left: ActionSubject, right: ActionSubject): boolean {
|
|
13
6
|
if (left.kind !== right.kind) return false
|
|
@@ -20,6 +13,18 @@ export function actionRunParamsEqual(left: unknown, right: unknown): boolean {
|
|
|
20
13
|
return stableJsonStringify(left) === stableJsonStringify(right)
|
|
21
14
|
}
|
|
22
15
|
|
|
16
|
+
/** Whether two runs carry the same request: the same Action, subject, and params. */
|
|
17
|
+
export function actionRunRequestsEqual(
|
|
18
|
+
left: Pick<ActionRunRecord, "actionId" | "subject" | "params">,
|
|
19
|
+
right: Pick<ActionRunRecord, "actionId" | "subject" | "params">
|
|
20
|
+
): boolean {
|
|
21
|
+
return (
|
|
22
|
+
left.actionId === right.actionId &&
|
|
23
|
+
actionSubjectsEqual(left.subject, right.subject) &&
|
|
24
|
+
actionRunParamsEqual(left.params, right.params)
|
|
25
|
+
)
|
|
26
|
+
}
|
|
27
|
+
|
|
23
28
|
export type ActionRunPhaseRecord = ActionRunWritebackRecord | ActionRunEffectsRecord
|
|
24
29
|
|
|
25
30
|
export function actionRunPhaseRecordsEqual(
|
|
@@ -29,39 +34,6 @@ export function actionRunPhaseRecordsEqual(
|
|
|
29
34
|
return actionRunParamsEqual(stripPhaseRecordCompletedAt(left), stripPhaseRecordCompletedAt(right))
|
|
30
35
|
}
|
|
31
36
|
|
|
32
|
-
export function finishActionRunPhase(
|
|
33
|
-
input: FinishActionRunInput,
|
|
34
|
-
current: ActionRunPhase | null | undefined
|
|
35
|
-
): ActionRunPhase {
|
|
36
|
-
if (input.status === "succeeded") {
|
|
37
|
-
return input.phase ?? current ?? "validation"
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
return input.error.details.phase
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
export function canRequeueActionRunAfterEnqueueFailure(
|
|
44
|
-
existing: ActionRunRecord,
|
|
45
|
-
input: QueueActionRunInput
|
|
46
|
-
): boolean {
|
|
47
|
-
return (
|
|
48
|
-
existing.status === "failed" &&
|
|
49
|
-
existing.phase === "enqueue" &&
|
|
50
|
-
existing.executionId === input.executionId &&
|
|
51
|
-
existing.error?.retryable === true &&
|
|
52
|
-
existing.actionId === input.actionId &&
|
|
53
|
-
existing.idempotencyKey === input.idempotencyKey &&
|
|
54
|
-
actionSubjectsEqual(existing.subject, input.subject) &&
|
|
55
|
-
actionRunParamsEqual(existing.params, input.params)
|
|
56
|
-
)
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
export function isTerminalActionRun(record: Pick<ActionRunRecord, "status">): boolean {
|
|
60
|
-
return (
|
|
61
|
-
record.status === "succeeded" || record.status === "failed" || record.status === "cancelled"
|
|
62
|
-
)
|
|
63
|
-
}
|
|
64
|
-
|
|
65
37
|
function stripPhaseRecordCompletedAt(
|
|
66
38
|
record: ActionRunPhaseRecord
|
|
67
39
|
): Omit<ActionRunPhaseRecord, "completedAt"> {
|
|
@@ -1,30 +1,15 @@
|
|
|
1
1
|
import type { ExecutionStorage } from "../executions"
|
|
2
2
|
import { ActionRunError } from "./errors"
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
actionRunPhaseRecordsEqual,
|
|
6
|
-
actionSubjectsEqual,
|
|
7
|
-
canRequeueActionRunAfterEnqueueFailure,
|
|
8
|
-
isTerminalActionRun,
|
|
9
|
-
} from "./idempotency"
|
|
3
|
+
import { actionSubjectsEqual } from "./idempotency"
|
|
10
4
|
import { assertActionRunExecution } from "./provider"
|
|
5
|
+
import { normalizeRecordActionRunInput, resolveActionRunEffects } from "./record"
|
|
11
6
|
import type {
|
|
12
|
-
ActionRunEffectsRecord,
|
|
13
|
-
ActionRunFailure,
|
|
14
|
-
ActionRunParams,
|
|
15
|
-
ActionRunPhase,
|
|
16
7
|
ActionRunRecord,
|
|
17
8
|
ActionRunStorage,
|
|
18
|
-
ActionRunWritebackRecord,
|
|
19
|
-
EnterActionRunPhaseInput,
|
|
20
|
-
FinishActionRunInput,
|
|
21
9
|
ListActionRunsInput,
|
|
22
10
|
ListActionRunsResult,
|
|
23
|
-
LockActionMaterializationRunInput,
|
|
24
|
-
QueueActionRunInput,
|
|
25
11
|
RecordActionEffectsInput,
|
|
26
|
-
|
|
27
|
-
StartActionRunInput,
|
|
12
|
+
RecordActionRunInput,
|
|
28
13
|
} from "./types"
|
|
29
14
|
|
|
30
15
|
type RunRootOperation = <T>(run: () => Promise<T> | T) => Promise<T>
|
|
@@ -35,74 +20,12 @@ function actionRunKey(projectId: string, id: string): string {
|
|
|
35
20
|
return JSON.stringify([projectId, id])
|
|
36
21
|
}
|
|
37
22
|
|
|
38
|
-
function assertNonBlank(value: string, fieldName: string): void {
|
|
39
|
-
if (typeof value !== "string" || value.trim().length === 0) {
|
|
40
|
-
throw new ActionRunError(`[Sixb] Action materialization ${fieldName} must be nonblank.`)
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
|
|
44
23
|
function cloneActionRunRecord(record: ActionRunRecord): ActionRunRecord {
|
|
45
24
|
return structuredClone(record)
|
|
46
25
|
}
|
|
47
26
|
|
|
48
|
-
function normalizeParams(params: ActionRunParams): ActionRunParams {
|
|
49
|
-
return structuredClone(params)
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
function normalizeSubject(subject: QueueActionRunInput["subject"]): QueueActionRunInput["subject"] {
|
|
53
|
-
return structuredClone(subject)
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
function normalizeError<TPhase extends ActionRunPhase>(
|
|
57
|
-
error: ActionRunFailure<TPhase>,
|
|
58
|
-
expectedPhase?: TPhase
|
|
59
|
-
): ActionRunFailure<TPhase> {
|
|
60
|
-
return expectedPhase === undefined
|
|
61
|
-
? (parseActionRunFailure(error) as ActionRunFailure<TPhase>)
|
|
62
|
-
: parseActionRunFailure(error, expectedPhase)
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
function normalizeWriteback(
|
|
66
|
-
input: RecordActionWritebackInput,
|
|
67
|
-
completedAt: Date
|
|
68
|
-
): ActionRunWritebackRecord {
|
|
69
|
-
if (input.status === "succeeded") {
|
|
70
|
-
return {
|
|
71
|
-
status: "succeeded",
|
|
72
|
-
completedAt,
|
|
73
|
-
result: structuredClone(input.result),
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
return {
|
|
78
|
-
status: "failed",
|
|
79
|
-
completedAt,
|
|
80
|
-
error: normalizeError(input.error, "writeback"),
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
function normalizeEffects(
|
|
85
|
-
input: RecordActionEffectsInput,
|
|
86
|
-
completedAt: Date
|
|
87
|
-
): ActionRunEffectsRecord {
|
|
88
|
-
if (input.status === "succeeded") {
|
|
89
|
-
return {
|
|
90
|
-
status: "succeeded",
|
|
91
|
-
completedAt,
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
return {
|
|
96
|
-
status: "failed",
|
|
97
|
-
completedAt,
|
|
98
|
-
error: normalizeError(input.error, "effects"),
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
|
|
102
27
|
function compareRuns(a: ActionRunRecord, b: ActionRunRecord, order: "asc" | "desc"): number {
|
|
103
|
-
const
|
|
104
|
-
const rightAt = b.startedAt ?? b.queuedAt
|
|
105
|
-
const delta = leftAt.getTime() - rightAt.getTime()
|
|
28
|
+
const delta = a.startedAt.getTime() - b.startedAt.getTime()
|
|
106
29
|
if (delta !== 0) {
|
|
107
30
|
return order === "asc" ? delta : -delta
|
|
108
31
|
}
|
|
@@ -136,235 +59,49 @@ export class InMemoryActionRunStorage implements ActionRunStorage {
|
|
|
136
59
|
}
|
|
137
60
|
}
|
|
138
61
|
|
|
139
|
-
async
|
|
140
|
-
return this.runRootOperation(() => cloneActionRunRecord(this.requireMaterializationRun(input)))
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
async queue(input: QueueActionRunInput): Promise<ActionRunRecord> {
|
|
62
|
+
async record(input: RecordActionRunInput): Promise<ActionRunRecord> {
|
|
144
63
|
return this.runRootOperation(async () => {
|
|
145
|
-
const
|
|
146
|
-
const
|
|
147
|
-
if (
|
|
64
|
+
const record = normalizeRecordActionRunInput(input)
|
|
65
|
+
const key = actionRunKey(record.projectId, record.id)
|
|
66
|
+
if (this.rows.has(key)) {
|
|
148
67
|
throw new ActionRunError(
|
|
149
|
-
`[Sixb] Action run '${
|
|
68
|
+
`[Sixb] Action run '${record.id}' is already recorded for project '${record.projectId}'.`
|
|
150
69
|
)
|
|
151
70
|
}
|
|
152
71
|
if (
|
|
153
72
|
[...this.rows.values()].some(
|
|
154
|
-
(run) =>
|
|
155
|
-
run.projectId === input.projectId &&
|
|
156
|
-
run.id !== input.id &&
|
|
157
|
-
run.executionId === input.executionId
|
|
73
|
+
(run) => run.projectId === record.projectId && run.executionId === record.executionId
|
|
158
74
|
)
|
|
159
75
|
) {
|
|
160
76
|
throw new ActionRunError(
|
|
161
|
-
`[Sixb] Execution '${
|
|
77
|
+
`[Sixb] Execution '${record.executionId}' already belongs to another Action run.`
|
|
162
78
|
)
|
|
163
79
|
}
|
|
164
80
|
await assertActionRunExecution({
|
|
165
81
|
executions: this.executions,
|
|
166
|
-
projectId:
|
|
167
|
-
executionId:
|
|
168
|
-
runId:
|
|
169
|
-
actionId:
|
|
82
|
+
projectId: record.projectId,
|
|
83
|
+
executionId: record.executionId,
|
|
84
|
+
runId: record.id,
|
|
85
|
+
actionId: record.actionId,
|
|
170
86
|
})
|
|
171
87
|
|
|
172
|
-
const record: ActionRunRecord = {
|
|
173
|
-
id: input.id,
|
|
174
|
-
projectId: input.projectId,
|
|
175
|
-
executionId: input.executionId,
|
|
176
|
-
actionId: input.actionId,
|
|
177
|
-
subject: normalizeSubject(input.subject),
|
|
178
|
-
status: "queued",
|
|
179
|
-
phase: "request",
|
|
180
|
-
queuedAt: new Date(input.queuedAt ?? new Date()),
|
|
181
|
-
params: normalizeParams(input.params),
|
|
182
|
-
idempotencyKey: input.idempotencyKey,
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
if (existing) {
|
|
186
|
-
const next: ActionRunRecord = {
|
|
187
|
-
...existing,
|
|
188
|
-
status: "queued",
|
|
189
|
-
phase: "request",
|
|
190
|
-
queuedAt: record.queuedAt,
|
|
191
|
-
startedAt: undefined,
|
|
192
|
-
finishedAt: undefined,
|
|
193
|
-
error: undefined,
|
|
194
|
-
writeback: undefined,
|
|
195
|
-
effects: undefined,
|
|
196
|
-
}
|
|
197
|
-
this.rows.set(key, structuredClone(next))
|
|
198
|
-
return cloneActionRunRecord(next)
|
|
199
|
-
}
|
|
200
|
-
|
|
201
88
|
this.rows.set(key, structuredClone(record))
|
|
202
89
|
return cloneActionRunRecord(record)
|
|
203
90
|
})
|
|
204
91
|
}
|
|
205
92
|
|
|
206
|
-
async start(input: StartActionRunInput): Promise<ActionRunRecord> {
|
|
207
|
-
return this.runRootOperation(() => {
|
|
208
|
-
const key = actionRunKey(input.projectId, input.id)
|
|
209
|
-
const existing = this.rows.get(key)
|
|
210
|
-
|
|
211
|
-
if (!existing) {
|
|
212
|
-
throw new ActionRunError(
|
|
213
|
-
`[Sixb] Action run '${input.id}' not found for project '${input.projectId}'.`
|
|
214
|
-
)
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
if (existing.status !== "queued") {
|
|
218
|
-
throw new ActionRunError(
|
|
219
|
-
`[Sixb] Action run '${input.id}' cannot start from status '${existing.status}'.`
|
|
220
|
-
)
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
const next: ActionRunRecord = {
|
|
224
|
-
...existing,
|
|
225
|
-
status: "running",
|
|
226
|
-
phase: input.phase ?? "validation",
|
|
227
|
-
startedAt: new Date(input.startedAt ?? new Date()),
|
|
228
|
-
error: undefined,
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
this.rows.set(key, structuredClone(next))
|
|
232
|
-
return cloneActionRunRecord(next)
|
|
233
|
-
})
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
async enterPhase(input: EnterActionRunPhaseInput): Promise<ActionRunRecord> {
|
|
237
|
-
return this.runRootOperation(() => {
|
|
238
|
-
const key = actionRunKey(input.projectId, input.id)
|
|
239
|
-
const existing = this.requireRunningRun(key, input.projectId, input.id, "enter phase")
|
|
240
|
-
const next: ActionRunRecord = {
|
|
241
|
-
...existing,
|
|
242
|
-
phase: input.phase,
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
this.rows.set(key, structuredClone(next))
|
|
246
|
-
return cloneActionRunRecord(next)
|
|
247
|
-
})
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
async recordWriteback(input: RecordActionWritebackInput): Promise<ActionRunRecord> {
|
|
251
|
-
return this.runRootOperation(() => {
|
|
252
|
-
const key = actionRunKey(input.projectId, input.id)
|
|
253
|
-
const existing = this.requireRunningRun(key, input.projectId, input.id, "record writeback")
|
|
254
|
-
const writeback = normalizeWriteback(input, new Date(input.completedAt ?? new Date()))
|
|
255
|
-
|
|
256
|
-
if (existing.writeback) {
|
|
257
|
-
if (actionRunPhaseRecordsEqual(existing.writeback, writeback)) {
|
|
258
|
-
return cloneActionRunRecord(existing)
|
|
259
|
-
}
|
|
260
|
-
|
|
261
|
-
throw new ActionRunError(
|
|
262
|
-
`[Sixb] Action run '${input.id}' already has a different writeback record.`
|
|
263
|
-
)
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
const next: ActionRunRecord = {
|
|
267
|
-
...existing,
|
|
268
|
-
phase: "writeback",
|
|
269
|
-
writeback,
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
this.rows.set(key, structuredClone(next))
|
|
273
|
-
return cloneActionRunRecord(next)
|
|
274
|
-
})
|
|
275
|
-
}
|
|
276
|
-
|
|
277
93
|
async recordEffects(input: RecordActionEffectsInput): Promise<ActionRunRecord> {
|
|
278
94
|
return this.runRootOperation(() => {
|
|
279
95
|
const key = actionRunKey(input.projectId, input.id)
|
|
280
|
-
const
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
if (existing.effects) {
|
|
284
|
-
if (actionRunPhaseRecordsEqual(existing.effects, effects)) {
|
|
285
|
-
return cloneActionRunRecord(existing)
|
|
286
|
-
}
|
|
287
|
-
|
|
288
|
-
throw new ActionRunError(
|
|
289
|
-
`[Sixb] Action run '${input.id}' already has a different effects record.`
|
|
290
|
-
)
|
|
291
|
-
}
|
|
292
|
-
|
|
293
|
-
const next: ActionRunRecord = {
|
|
294
|
-
...existing,
|
|
295
|
-
phase: "effects",
|
|
296
|
-
effects,
|
|
297
|
-
}
|
|
96
|
+
const { run, effects } = resolveActionRunEffects(this.rows.get(key) ?? null, input)
|
|
97
|
+
if (!effects) return cloneActionRunRecord(run)
|
|
298
98
|
|
|
99
|
+
const next: ActionRunRecord = { ...run, phase: "effects", effects }
|
|
299
100
|
this.rows.set(key, structuredClone(next))
|
|
300
101
|
return cloneActionRunRecord(next)
|
|
301
102
|
})
|
|
302
103
|
}
|
|
303
104
|
|
|
304
|
-
async finish(input: FinishActionRunInput): Promise<ActionRunRecord> {
|
|
305
|
-
return this.runRootOperation(() => {
|
|
306
|
-
const key = actionRunKey(input.projectId, input.id)
|
|
307
|
-
const existing = this.rows.get(key)
|
|
308
|
-
|
|
309
|
-
if (!existing) {
|
|
310
|
-
throw new ActionRunError(
|
|
311
|
-
`[Sixb] Action run '${input.id}' not found for project '${input.projectId}'.`
|
|
312
|
-
)
|
|
313
|
-
}
|
|
314
|
-
|
|
315
|
-
if (isTerminalActionRun(existing)) {
|
|
316
|
-
throw new ActionRunError(
|
|
317
|
-
`[Sixb] Action run '${input.id}' cannot finish from terminal status '${existing.status}'.`
|
|
318
|
-
)
|
|
319
|
-
}
|
|
320
|
-
|
|
321
|
-
const phase =
|
|
322
|
-
input.status === "succeeded" ? (input.phase ?? existing.phase) : input.error.details.phase
|
|
323
|
-
|
|
324
|
-
const base: ActionRunRecord = {
|
|
325
|
-
...existing,
|
|
326
|
-
status: input.status,
|
|
327
|
-
phase,
|
|
328
|
-
finishedAt: new Date(input.finishedAt ?? new Date()),
|
|
329
|
-
}
|
|
330
|
-
|
|
331
|
-
const next: ActionRunRecord =
|
|
332
|
-
input.status === "succeeded"
|
|
333
|
-
? {
|
|
334
|
-
...base,
|
|
335
|
-
error: undefined,
|
|
336
|
-
}
|
|
337
|
-
: {
|
|
338
|
-
...base,
|
|
339
|
-
error: normalizeError(input.error),
|
|
340
|
-
}
|
|
341
|
-
|
|
342
|
-
this.rows.set(key, structuredClone(next))
|
|
343
|
-
return cloneActionRunRecord(next)
|
|
344
|
-
})
|
|
345
|
-
}
|
|
346
|
-
|
|
347
|
-
private requireRunningRun(
|
|
348
|
-
key: string,
|
|
349
|
-
projectId: string,
|
|
350
|
-
id: string,
|
|
351
|
-
operation: string
|
|
352
|
-
): ActionRunRecord {
|
|
353
|
-
const existing = this.rows.get(key)
|
|
354
|
-
|
|
355
|
-
if (!existing) {
|
|
356
|
-
throw new ActionRunError(`[Sixb] Action run '${id}' not found for project '${projectId}'.`)
|
|
357
|
-
}
|
|
358
|
-
|
|
359
|
-
if (existing.status !== "running") {
|
|
360
|
-
throw new ActionRunError(
|
|
361
|
-
`[Sixb] Action run '${id}' cannot ${operation} from status '${existing.status}'.`
|
|
362
|
-
)
|
|
363
|
-
}
|
|
364
|
-
|
|
365
|
-
return existing
|
|
366
|
-
}
|
|
367
|
-
|
|
368
105
|
async getById(params: { projectId: string; id: string }): Promise<ActionRunRecord | null> {
|
|
369
106
|
return this.runRootOperation(() => {
|
|
370
107
|
const record = this.rows.get(actionRunKey(params.projectId, params.id))
|
|
@@ -408,12 +145,8 @@ export class InMemoryActionRunStorage implements ActionRunStorage {
|
|
|
408
145
|
: true
|
|
409
146
|
)
|
|
410
147
|
.filter((record) => (statuses ? statuses.has(record.status) : true))
|
|
411
|
-
.filter((record) =>
|
|
412
|
-
|
|
413
|
-
)
|
|
414
|
-
.filter((record) =>
|
|
415
|
-
input.startedBefore ? (record.startedAt ?? record.queuedAt) <= input.startedBefore : true
|
|
416
|
-
)
|
|
148
|
+
.filter((record) => (input.startedAfter ? record.startedAt >= input.startedAfter : true))
|
|
149
|
+
.filter((record) => (input.startedBefore ? record.startedAt <= input.startedBefore : true))
|
|
417
150
|
.sort((a, b) => compareRuns(a, b, order))
|
|
418
151
|
|
|
419
152
|
const total = filtered.length
|
|
@@ -421,30 +154,6 @@ export class InMemoryActionRunStorage implements ActionRunStorage {
|
|
|
421
154
|
return { runs, hasMore: offset + runs.length < total, total }
|
|
422
155
|
})
|
|
423
156
|
}
|
|
424
|
-
|
|
425
|
-
private requireMaterializationRun(input: LockActionMaterializationRunInput): ActionRunRecord {
|
|
426
|
-
assertNonBlank(input.projectId, "projectId")
|
|
427
|
-
assertNonBlank(input.runId, "runId")
|
|
428
|
-
assertNonBlank(input.actionId, "actionId")
|
|
429
|
-
|
|
430
|
-
const existing = this.rows.get(actionRunKey(input.projectId, input.runId))
|
|
431
|
-
if (!existing) {
|
|
432
|
-
throw new ActionRunError(
|
|
433
|
-
`[Sixb] Action run '${input.runId}' not found for project '${input.projectId}'.`
|
|
434
|
-
)
|
|
435
|
-
}
|
|
436
|
-
if (existing.actionId !== input.actionId) {
|
|
437
|
-
throw new ActionRunError(
|
|
438
|
-
`[Sixb] Action run '${input.runId}' does not belong to action '${input.actionId}'.`
|
|
439
|
-
)
|
|
440
|
-
}
|
|
441
|
-
if (existing.status !== "running") {
|
|
442
|
-
throw new ActionRunError(
|
|
443
|
-
`[Sixb] Action run '${input.runId}' cannot materialize from status '${existing.status}'.`
|
|
444
|
-
)
|
|
445
|
-
}
|
|
446
|
-
return existing
|
|
447
|
-
}
|
|
448
157
|
}
|
|
449
158
|
|
|
450
159
|
export type InMemoryActionRunStorageSnapshot = Map<string, ActionRunRecord>
|
|
@@ -1,13 +1,4 @@
|
|
|
1
1
|
export { ActionRunError } from "./errors"
|
|
2
|
-
export type { ActionRunPhaseRecord } from "./idempotency"
|
|
3
|
-
export {
|
|
4
|
-
actionRunParamsEqual,
|
|
5
|
-
actionRunPhaseRecordsEqual,
|
|
6
|
-
actionSubjectsEqual,
|
|
7
|
-
canRequeueActionRunAfterEnqueueFailure,
|
|
8
|
-
finishActionRunPhase,
|
|
9
|
-
isTerminalActionRun,
|
|
10
|
-
} from "./idempotency"
|
|
11
2
|
export { InMemoryActionRunStorage } from "./in-memory"
|
|
12
3
|
export type {
|
|
13
4
|
ActionRunEffectsRecord,
|
|
@@ -16,19 +7,13 @@ export type {
|
|
|
16
7
|
ActionRunFailureDetails,
|
|
17
8
|
ActionRunParams,
|
|
18
9
|
ActionRunPhase,
|
|
19
|
-
ActionRunPhaseStatus,
|
|
20
10
|
ActionRunRecord,
|
|
21
11
|
ActionRunStatus,
|
|
22
12
|
ActionRunStorage,
|
|
23
13
|
ActionRunWritebackRecord,
|
|
24
|
-
EnterActionRunPhaseInput,
|
|
25
|
-
FinishActionRunInput,
|
|
26
14
|
ListActionRunsInput,
|
|
27
15
|
ListActionRunsResult,
|
|
28
|
-
LockActionMaterializationRunInput,
|
|
29
|
-
QueueActionRunInput,
|
|
30
16
|
RecordActionEffectsInput,
|
|
31
|
-
|
|
32
|
-
StartActionRunInput,
|
|
17
|
+
RecordActionRunInput,
|
|
33
18
|
} from "./types"
|
|
34
19
|
export { ACTION_RUN_FAILURE_CODES, ACTION_RUN_PHASES } from "./types"
|