@sixb/core 0.1.15 → 0.1.17
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/dist/actions/index.js +25 -25
- package/dist/actions/types/context.d.ts +2 -2
- package/dist/actions/types/context.d.ts.map +1 -1
- package/dist/actions/worker.js +1 -1
- package/dist/agents/index.js +41 -40
- package/dist/agents/index.js.map +1 -1
- package/dist/auth/index.js +5 -5
- package/dist/authorization/index.js +2 -2
- package/dist/blob-storage/download-urls.d.ts +41 -0
- package/dist/blob-storage/download-urls.d.ts.map +1 -0
- package/dist/blob-storage/execution.d.ts +9 -1
- package/dist/blob-storage/execution.d.ts.map +1 -1
- package/dist/blob-storage/index.js +5 -3
- package/dist/blob-storage/index.js.map +1 -1
- package/dist/blob-storage/internal.d.ts +2 -0
- package/dist/blob-storage/internal.d.ts.map +1 -0
- package/dist/blob-storage/internal.js +11 -0
- package/dist/blob-storage/internal.js.map +9 -0
- package/dist/bootstrap/index.js +45 -44
- package/dist/bootstrap/index.js.map +1 -1
- package/dist/{chunk-wem5vqjw.js → chunk-10styjgk.js} +18 -13
- package/dist/{chunk-wem5vqjw.js.map → chunk-10styjgk.js.map} +3 -3
- package/dist/{chunk-hgqpcmyr.js → chunk-1hqwggsn.js} +47 -19
- package/dist/chunk-1hqwggsn.js.map +12 -0
- package/dist/{chunk-q3grgzp1.js → chunk-23xs4qp9.js} +2 -2
- package/dist/{chunk-vef6qa14.js → chunk-2am3db31.js} +2 -2
- package/dist/{chunk-fj1dvp37.js → chunk-2vhg6ysa.js} +1 -1
- package/dist/{chunk-p0nbkys4.js → chunk-33saed7g.js} +1 -1
- package/dist/{chunk-mdnw7nj8.js → chunk-3rrezgyc.js} +33 -8
- package/dist/chunk-3rrezgyc.js.map +15 -0
- package/dist/{chunk-jgwb25gc.js → chunk-4as3wt1c.js} +13 -5
- package/dist/chunk-4as3wt1c.js.map +12 -0
- package/dist/chunk-4ra628t7.js +88 -0
- package/dist/chunk-4ra628t7.js.map +10 -0
- package/dist/{chunk-mmac1mp6.js → chunk-52c5zb0z.js} +2 -2
- package/dist/{chunk-8fjmqjyx.js → chunk-5be2ath4.js} +1 -1
- package/dist/{chunk-2fv8sajb.js → chunk-5thzcb8g.js} +2 -2
- package/dist/{chunk-fjw417jf.js → chunk-5yd8cchh.js} +1143 -784
- package/dist/chunk-5yd8cchh.js.map +66 -0
- package/dist/{chunk-2tz5vnvz.js → chunk-6wbm6ymz.js} +235 -41
- package/dist/{chunk-2tz5vnvz.js.map → chunk-6wbm6ymz.js.map} +8 -6
- package/dist/{chunk-py2dw8cw.js → chunk-7ecp4v7a.js} +26 -19
- package/dist/chunk-7ecp4v7a.js.map +17 -0
- package/dist/{chunk-f85hpqnm.js → chunk-99nd4rc1.js} +3 -3
- package/dist/{chunk-f85hpqnm.js.map → chunk-99nd4rc1.js.map} +3 -3
- package/dist/{chunk-1jvq82rp.js → chunk-9g6jz9kk.js} +5 -5
- package/dist/{chunk-39tqv9hz.js → chunk-9se093qz.js} +5 -6
- package/dist/{chunk-39tqv9hz.js.map → chunk-9se093qz.js.map} +3 -4
- package/dist/{chunk-8w27xf9e.js → chunk-a7er86jd.js} +1 -1
- package/dist/{chunk-zdkcdshk.js → chunk-aq39q04r.js} +41 -3
- package/dist/{chunk-zdkcdshk.js.map → chunk-aq39q04r.js.map} +4 -3
- package/dist/chunk-b9affek3.js +261 -0
- package/dist/chunk-b9affek3.js.map +12 -0
- package/dist/{chunk-bxx3ms5t.js → chunk-c2rga5cx.js} +2 -2
- package/dist/{chunk-dsfw1bdr.js → chunk-cnb5kv05.js} +2 -2
- package/dist/chunk-d62kjtbg.js.map +2 -2
- package/dist/{chunk-dqkd3kdj.js → chunk-dam456ve.js} +234 -35
- package/dist/{chunk-dqkd3kdj.js.map → chunk-dam456ve.js.map} +7 -5
- package/dist/{chunk-n5t4mq6z.js → chunk-e67ynxcr.js} +3 -3
- package/dist/{chunk-xnx96gfy.js → chunk-ere85b8y.js} +17 -8
- package/dist/chunk-ere85b8y.js.map +15 -0
- package/dist/{chunk-k4kkp58d.js → chunk-ewqa58h9.js} +12 -2
- package/dist/chunk-ewqa58h9.js.map +11 -0
- package/dist/{chunk-6q7c68yx.js → chunk-f1xh7a32.js} +3 -3
- package/dist/{chunk-z708gemf.js → chunk-fggq3d9k.js} +450 -799
- package/dist/chunk-fggq3d9k.js.map +49 -0
- package/dist/{chunk-7jc21943.js → chunk-gf7yht60.js} +4 -4
- package/dist/chunk-h8teetr0.js +9 -0
- package/dist/chunk-h8teetr0.js.map +10 -0
- package/dist/chunk-hn2r7z41.js.map +1 -1
- package/dist/{chunk-ffwvdgk1.js → chunk-jjrn5v0p.js} +1 -1
- package/dist/{chunk-r5sc1d2b.js → chunk-jnfxmr3f.js} +1 -1
- package/dist/{chunk-y0zmae99.js → chunk-k4g51s47.js} +3 -3
- package/dist/{chunk-a0073121.js → chunk-kpx7jrmn.js} +3 -1
- package/dist/chunk-kpx7jrmn.js.map +12 -0
- package/dist/{chunk-p1683c0v.js → chunk-kyjcwqz6.js} +5 -2
- package/dist/{chunk-p1683c0v.js.map → chunk-kyjcwqz6.js.map} +3 -3
- package/dist/{chunk-3c90jvfj.js → chunk-pja9jfz6.js} +742 -583
- package/dist/chunk-pja9jfz6.js.map +19 -0
- package/dist/chunk-pqajwytd.js.map +1 -1
- package/dist/{chunk-mr60an99.js → chunk-qczk96d9.js} +22 -2
- package/dist/{chunk-mr60an99.js.map → chunk-qczk96d9.js.map} +3 -3
- package/dist/{chunk-s3csryxe.js → chunk-rj69qcrd.js} +8 -2
- package/dist/chunk-rj69qcrd.js.map +11 -0
- package/dist/{chunk-d8yes9yx.js → chunk-rpxz486p.js} +32 -5
- package/dist/{chunk-d8yes9yx.js.map → chunk-rpxz486p.js.map} +4 -4
- package/dist/{chunk-drz59ve0.js → chunk-rx7h5fdx.js} +1 -1
- package/dist/{chunk-ky7zpbtt.js → chunk-s7ftxrdr.js} +106 -8
- package/dist/chunk-s7ftxrdr.js.map +22 -0
- package/dist/{chunk-yfppyaty.js → chunk-sk0hcjsz.js} +1 -1
- package/dist/{chunk-qne45xqq.js → chunk-svabwqdq.js} +2 -2
- package/dist/{chunk-xr7y35yj.js → chunk-t9shqx3w.js} +2 -2
- package/dist/{chunk-4jph1t3v.js → chunk-tjjgy3z4.js} +27 -24
- package/dist/{chunk-4jph1t3v.js.map → chunk-tjjgy3z4.js.map} +4 -4
- package/dist/{chunk-ex8s8wsk.js → chunk-vp3z1ckh.js} +42 -10
- package/dist/{chunk-ex8s8wsk.js.map → chunk-vp3z1ckh.js.map} +7 -6
- package/dist/{chunk-adbve9zt.js → chunk-vre348sb.js} +2 -2
- package/dist/{chunk-a4g5yjm0.js → chunk-w9yycd3t.js} +1 -1
- package/dist/{chunk-g4rbm4a6.js → chunk-wt4szfec.js} +379 -331
- package/dist/chunk-wt4szfec.js.map +14 -0
- package/dist/{chunk-wd34wnsy.js → chunk-xcy5ddha.js} +6 -6
- package/dist/{chunk-3nx8vj5a.js → chunk-xyvy73tj.js} +5 -3
- package/dist/chunk-xyvy73tj.js.map +12 -0
- package/dist/datasets/write.js +1 -1
- package/dist/execution/agent.js +38 -37
- package/dist/execution/agent.js.map +1 -1
- package/dist/execution/authorized-object-reader.d.ts +3 -1
- package/dist/execution/authorized-object-reader.d.ts.map +1 -1
- package/dist/execution/primitive.js +36 -35
- package/dist/execution/primitive.js.map +2 -2
- package/dist/execution/request.js +37 -36
- package/dist/execution/request.js.map +2 -2
- package/dist/index.d.ts +8 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +62 -59
- package/dist/index.js.map +1 -1
- package/dist/lake-storage/in-memory.d.ts +5 -1
- package/dist/lake-storage/in-memory.d.ts.map +1 -1
- package/dist/lake-storage/index.d.ts +1 -1
- package/dist/lake-storage/index.d.ts.map +1 -1
- package/dist/lake-storage/index.js +2 -2
- package/dist/lake-storage/types.d.ts +26 -0
- package/dist/lake-storage/types.d.ts.map +1 -1
- package/dist/maintenance/ontology-maintenance.d.ts +5 -1
- package/dist/maintenance/ontology-maintenance.d.ts.map +1 -1
- package/dist/maintenance/types.d.ts +1 -4
- package/dist/maintenance/types.d.ts.map +1 -1
- package/dist/materialization/event-envelopes.d.ts +20 -0
- package/dist/materialization/event-envelopes.d.ts.map +1 -0
- package/dist/materialization/events.d.ts +29 -3
- package/dist/materialization/events.d.ts.map +1 -1
- package/dist/materialization/index.d.ts +4 -1
- package/dist/materialization/index.d.ts.map +1 -1
- package/dist/materialization/index.js +9 -3
- package/dist/materialization/index.js.map +1 -1
- package/dist/materializer/edits/plan.d.ts +2 -10
- package/dist/materializer/edits/plan.d.ts.map +1 -1
- package/dist/materializer/effective/build-events.d.ts +5 -21
- package/dist/materializer/effective/build-events.d.ts.map +1 -1
- package/dist/materializer/effective/vector-indexing.d.ts +2 -3
- package/dist/materializer/effective/vector-indexing.d.ts.map +1 -1
- package/dist/materializer/effective/vectors.d.ts +2 -3
- package/dist/materializer/effective/vectors.d.ts.map +1 -1
- package/dist/materializer/execution/scope.d.ts +1 -11
- package/dist/materializer/execution/scope.d.ts.map +1 -1
- package/dist/materializer/execution/work-executor.d.ts +5 -7
- package/dist/materializer/execution/work-executor.d.ts.map +1 -1
- package/dist/materializer/execution/work-records.d.ts +1 -3
- package/dist/materializer/execution/work-records.d.ts.map +1 -1
- package/dist/materializer/index.js +31 -32
- package/dist/materializer/index.js.map +1 -1
- package/dist/materializer/projections/replace.d.ts.map +1 -1
- package/dist/materializer/projections/replacement-plan.d.ts +8 -11
- package/dist/materializer/projections/replacement-plan.d.ts.map +1 -1
- package/dist/materializer/shared/batching.d.ts +5 -0
- package/dist/materializer/shared/batching.d.ts.map +1 -1
- package/dist/materializer/telemetry/plan.d.ts +2 -8
- package/dist/materializer/telemetry/plan.d.ts.map +1 -1
- package/dist/models/audio/catalog.d.ts +20 -0
- package/dist/models/audio/catalog.d.ts.map +1 -0
- package/dist/models/audio/errors.d.ts +8 -0
- package/dist/models/audio/errors.d.ts.map +1 -0
- package/dist/models/audio/file.d.ts +9 -0
- package/dist/models/audio/file.d.ts.map +1 -0
- package/dist/models/audio/runtime.d.ts +8 -0
- package/dist/models/audio/runtime.d.ts.map +1 -0
- package/dist/models/audio/types.d.ts +60 -0
- package/dist/models/audio/types.d.ts.map +1 -0
- package/dist/models/catalog.d.ts +23 -1
- package/dist/models/catalog.d.ts.map +1 -1
- package/dist/models/definitions.d.ts +1 -1
- package/dist/models/definitions.d.ts.map +1 -1
- package/dist/models/embedding-model.d.ts +4 -0
- package/dist/models/embedding-model.d.ts.map +1 -1
- package/dist/models/events.d.ts +3 -0
- package/dist/models/events.d.ts.map +1 -1
- package/dist/models/execution/index.js +22 -22
- package/dist/models/execution/model-call-admission.d.ts +6 -1
- package/dist/models/execution/model-call-admission.d.ts.map +1 -1
- package/dist/models/execution/model-call-limits.d.ts.map +1 -1
- package/dist/models/execution/model-call-recorder.d.ts.map +1 -1
- package/dist/models/execution/reranking.d.ts +4 -0
- package/dist/models/execution/reranking.d.ts.map +1 -0
- package/dist/models/execution/usage.d.ts.map +1 -1
- package/dist/models/execution.d.ts +2 -1
- package/dist/models/execution.d.ts.map +1 -1
- package/dist/models/generation-types.d.ts +2 -0
- package/dist/models/generation-types.d.ts.map +1 -1
- package/dist/models/index.d.ts +7 -1
- package/dist/models/index.d.ts.map +1 -1
- package/dist/models/index.js +7 -3
- package/dist/models/index.js.map +1 -1
- package/dist/models/pricing.d.ts +2 -2
- package/dist/models/pricing.d.ts.map +1 -1
- package/dist/models/reranking-model.d.ts +49 -0
- package/dist/models/reranking-model.d.ts.map +1 -0
- package/dist/objects/index.js +25 -25
- package/dist/objects/query/executor.d.ts +2 -1
- package/dist/objects/query/executor.d.ts.map +1 -1
- package/dist/objects/query/index.d.ts +1 -1
- package/dist/objects/query/index.d.ts.map +1 -1
- package/dist/objects/query/index.js +24 -24
- package/dist/objects/query/index.js.map +1 -1
- package/dist/objects/query/ir.d.ts +8 -1
- package/dist/objects/query/ir.d.ts.map +1 -1
- package/dist/objects/query/normalize.d.ts.map +1 -1
- package/dist/objects/query/planner.d.ts +1 -1
- package/dist/objects/query/planner.d.ts.map +1 -1
- package/dist/objects/query/primary-id.d.ts +7 -0
- package/dist/objects/query/primary-id.d.ts.map +1 -0
- package/dist/objects/query/reranking-executor.d.ts +13 -0
- package/dist/objects/query/reranking-executor.d.ts.map +1 -0
- package/dist/objects/query/reranking-limits.d.ts +3 -0
- package/dist/objects/query/reranking-limits.d.ts.map +1 -0
- package/dist/objects/query/reranking-query.d.ts +4 -0
- package/dist/objects/query/reranking-query.d.ts.map +1 -0
- package/dist/objects/query/validate.d.ts.map +1 -1
- package/dist/objects/sdk/query-builder.d.ts +8 -0
- package/dist/objects/sdk/query-builder.d.ts.map +1 -1
- package/dist/objects/sdk/query-executor.d.ts +2 -2
- package/dist/objects/sdk/query-executor.d.ts.map +1 -1
- package/dist/objects/sdk/runtime-query-executor.d.ts.map +1 -1
- package/dist/objects/vectors/indexing-dispatch.d.ts +21 -0
- package/dist/objects/vectors/indexing-dispatch.d.ts.map +1 -0
- package/dist/objects/vectors/indexing-generate.d.ts.map +1 -1
- package/dist/objects/vectors/profile.d.ts.map +1 -1
- package/dist/objects/vectors/query.d.ts +1 -1
- package/dist/objects/vectors/query.d.ts.map +1 -1
- package/dist/objects/vectors/resolve-query.d.ts.map +1 -1
- package/dist/objects/vectors/types.d.ts +1 -1
- package/dist/objects/vectors/types.d.ts.map +1 -1
- package/dist/ontology/builders.d.ts +13 -4
- package/dist/ontology/builders.d.ts.map +1 -1
- package/dist/ontology/index.d.ts +1 -1
- package/dist/ontology/index.d.ts.map +1 -1
- package/dist/ontology/index.js +3 -3
- package/dist/ontology/internal.js +2 -2
- package/dist/ontology/query-capabilities.d.ts +1 -0
- package/dist/ontology/query-capabilities.d.ts.map +1 -1
- package/dist/ontology/types.d.ts +20 -0
- package/dist/ontology/types.d.ts.map +1 -1
- package/dist/ontology/validation/query.d.ts.map +1 -1
- package/dist/ontology/vector-profiles.d.ts.map +1 -1
- package/dist/pipelines/index.js +23 -23
- package/dist/projections/internal.js +22 -22
- package/dist/query.d.ts +4 -2
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +2 -2
- package/dist/queues/in-memory.d.ts +3 -0
- package/dist/queues/in-memory.d.ts.map +1 -1
- package/dist/queues/index.js +1 -1
- package/dist/queues/types.d.ts +4 -0
- package/dist/queues/types.d.ts.map +1 -1
- package/dist/runtime/host.d.ts +1 -0
- package/dist/runtime/host.d.ts.map +1 -1
- package/dist/runtime/index.d.ts +1 -1
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/internal.d.ts +1 -0
- package/dist/runtime/internal.d.ts.map +1 -1
- package/dist/runtime/internal.js +28 -26
- package/dist/runtime/internal.js.map +1 -1
- package/dist/runtime/public-origin.d.ts +10 -0
- package/dist/runtime/public-origin.d.ts.map +1 -0
- package/dist/runtime/sixb.d.ts +1 -0
- package/dist/runtime/sixb.d.ts.map +1 -1
- package/dist/runtime/types.d.ts +12 -2
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/sandboxes/index.js +5 -5
- package/dist/shares/internal.js +19 -19
- package/dist/storage/agents/provider.js +2 -2
- package/dist/storage/ai-cost/analytics.d.ts +1 -0
- package/dist/storage/ai-cost/analytics.d.ts.map +1 -1
- package/dist/storage/ai-cost/provider.js +3 -3
- package/dist/storage/ai-cost/types.d.ts +1 -1
- package/dist/storage/ai-cost/types.d.ts.map +1 -1
- package/dist/storage/ai-cost/validation.d.ts.map +1 -1
- package/dist/storage/ai-limits/enforcement.js +2 -2
- package/dist/storage/ai-limits/in-memory.d.ts.map +1 -1
- package/dist/storage/ai-limits/provider.d.ts +7 -2
- package/dist/storage/ai-limits/provider.d.ts.map +1 -1
- package/dist/storage/ai-limits/provider.js +4 -2
- package/dist/storage/ai-limits/provider.js.map +1 -1
- package/dist/storage/ai-limits/types.d.ts +3 -0
- package/dist/storage/ai-limits/types.d.ts.map +1 -1
- package/dist/storage/ai-usage/record.d.ts.map +1 -1
- package/dist/storage/ai-usage/types.d.ts +8 -4
- package/dist/storage/ai-usage/types.d.ts.map +1 -1
- package/dist/storage/ai-usage/usage.d.ts.map +1 -1
- package/dist/storage/file-download-grants/in-memory.d.ts +11 -0
- package/dist/storage/file-download-grants/in-memory.d.ts.map +1 -0
- package/dist/storage/file-download-grants/index.d.ts +3 -0
- package/dist/storage/file-download-grants/index.d.ts.map +1 -0
- package/dist/storage/file-download-grants/record.d.ts +11 -0
- package/dist/storage/file-download-grants/record.d.ts.map +1 -0
- package/dist/storage/file-download-grants/types.d.ts +44 -0
- package/dist/storage/file-download-grants/types.d.ts.map +1 -0
- package/dist/storage/file-upload-sessions/provider.js +6 -6
- package/dist/storage/in-memory/index.d.ts +4 -0
- package/dist/storage/in-memory/index.d.ts.map +1 -1
- package/dist/storage/index.d.ts +5 -3
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +30 -30
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/internal.d.ts +1 -0
- package/dist/storage/internal.d.ts.map +1 -1
- package/dist/storage/internal.js +8 -4
- package/dist/storage/internal.js.map +1 -1
- package/dist/storage/migrations/index.d.ts +1 -1
- package/dist/storage/migrations/index.d.ts.map +1 -1
- package/dist/storage/migrations/migrate-storage.d.ts +3 -3
- package/dist/storage/migrations/migrate-storage.d.ts.map +1 -1
- package/dist/storage/migrations/types.d.ts +7 -0
- package/dist/storage/migrations/types.d.ts.map +1 -1
- package/dist/storage/objects/in-memory/query.d.ts.map +1 -1
- package/dist/storage/objects/in-memory/selected-reader.d.ts.map +1 -1
- package/dist/storage/objects/in-memory/storage.d.ts.map +1 -1
- package/dist/storage/objects/query-preparation.d.ts +39 -0
- package/dist/storage/objects/query-preparation.d.ts.map +1 -0
- package/dist/storage/objects/types.d.ts +2 -0
- package/dist/storage/objects/types.d.ts.map +1 -1
- package/dist/storage/ontology/commits.d.ts +1 -6
- package/dist/storage/ontology/commits.d.ts.map +1 -1
- package/dist/storage/ontology/in-memory/index.d.ts +4 -2
- package/dist/storage/ontology/in-memory/index.d.ts.map +1 -1
- package/dist/storage/ontology/in-memory/materializations-state.d.ts +0 -2
- package/dist/storage/ontology/in-memory/materializations-state.d.ts.map +1 -1
- package/dist/storage/ontology/in-memory/materializations-work.d.ts +1 -3
- package/dist/storage/ontology/in-memory/materializations-work.d.ts.map +1 -1
- package/dist/storage/ontology/in-memory/materializations.d.ts +23 -57
- package/dist/storage/ontology/in-memory/materializations.d.ts.map +1 -1
- package/dist/storage/ontology/in-memory/outbox.d.ts +3 -2
- package/dist/storage/ontology/in-memory/outbox.d.ts.map +1 -1
- package/dist/storage/ontology/in-memory/replacement-plans.d.ts +104 -0
- package/dist/storage/ontology/in-memory/replacement-plans.d.ts.map +1 -0
- package/dist/storage/ontology/in-memory/shared-state.d.ts +17 -2
- package/dist/storage/ontology/in-memory/shared-state.d.ts.map +1 -1
- package/dist/storage/ontology/in-memory/source-roots.d.ts +3 -1
- package/dist/storage/ontology/in-memory/source-roots.d.ts.map +1 -1
- package/dist/storage/ontology/in-memory/sources.d.ts +1 -2
- package/dist/storage/ontology/in-memory/sources.d.ts.map +1 -1
- package/dist/storage/ontology/in-memory/state-reader.d.ts +25 -0
- package/dist/storage/ontology/in-memory/state-reader.d.ts.map +1 -0
- package/dist/storage/ontology/index.d.ts +6 -3
- package/dist/storage/ontology/index.d.ts.map +1 -1
- package/dist/storage/ontology/materializations.d.ts +40 -59
- package/dist/storage/ontology/materializations.d.ts.map +1 -1
- package/dist/storage/ontology/outbox.d.ts +4 -6
- package/dist/storage/ontology/outbox.d.ts.map +1 -1
- package/dist/storage/ontology/provider-work.d.ts +114 -3
- package/dist/storage/ontology/provider-work.d.ts.map +1 -1
- package/dist/storage/ontology/provider.d.ts +14 -39
- package/dist/storage/ontology/provider.d.ts.map +1 -1
- package/dist/storage/ontology/provider.js +26 -12
- package/dist/storage/ontology/provider.js.map +1 -1
- package/dist/storage/ontology/replacement-plans.d.ts +103 -0
- package/dist/storage/ontology/replacement-plans.d.ts.map +1 -0
- package/dist/storage/ontology/sources.d.ts +0 -8
- package/dist/storage/ontology/sources.d.ts.map +1 -1
- package/dist/storage/operation-scope.d.ts.map +1 -1
- package/dist/storage/operation-scope.js +1 -1
- package/dist/storage/projection-runs/in-memory.d.ts.map +1 -1
- package/dist/storage/projection-runs/types.d.ts +2 -0
- package/dist/storage/projection-runs/types.d.ts.map +1 -1
- package/dist/storage/types.d.ts +2 -0
- package/dist/storage/types.d.ts.map +1 -1
- package/dist/storage/workflow-runs/provider.js +6 -6
- package/dist/syncs/index.js +24 -24
- package/dist/testing/ai-cost-storage-contract.d.ts.map +1 -1
- package/dist/testing/ai-limit-storage-contract.d.ts.map +1 -1
- package/dist/testing/ai-usage-storage-contract.d.ts.map +1 -1
- package/dist/testing/file-download-grant-storage-contract.d.ts +9 -0
- package/dist/testing/file-download-grant-storage-contract.d.ts.map +1 -0
- package/dist/testing/index.d.ts +1 -0
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +2548 -1489
- package/dist/testing/index.js.map +14 -13
- package/dist/testing/lake-storage-contract.d.ts.map +1 -1
- package/dist/testing/materializer-storage-contract.d.ts +14 -0
- package/dist/testing/materializer-storage-contract.d.ts.map +1 -1
- package/dist/testing/object-read-scope-contract.d.ts.map +1 -1
- package/dist/testing/ontology-contract-fixture.d.ts +5 -1
- package/dist/testing/ontology-contract-fixture.d.ts.map +1 -1
- package/dist/testing/ontology-storage-contract.d.ts.map +1 -1
- package/dist/testing/projection-run-storage-contract.d.ts.map +1 -1
- package/dist/testing/queues-contract.d.ts.map +1 -1
- package/dist/webhooks/internal.js +20 -20
- package/dist/workers/index.js +15 -17
- package/dist/workers/index.js.map +3 -3
- package/dist/workers/queue-worker.d.ts +3 -2
- package/dist/workers/queue-worker.d.ts.map +1 -1
- package/dist/workflows/index.js +42 -41
- package/dist/workflows/index.js.map +1 -1
- package/package.json +7 -1
- package/src/actions/types/context.ts +5 -2
- package/src/blob-storage/download-urls.ts +138 -0
- package/src/blob-storage/execution.ts +32 -1
- package/src/blob-storage/internal.ts +1 -0
- package/src/execution/authorized-object-reader.ts +8 -1
- package/src/index.ts +25 -0
- package/src/lake-storage/in-memory.ts +38 -9
- package/src/lake-storage/index.ts +2 -0
- package/src/lake-storage/types.ts +30 -0
- package/src/maintenance/ontology-maintenance.ts +50 -23
- package/src/maintenance/types.ts +1 -4
- package/src/materialization/event-envelopes.ts +168 -0
- package/src/materialization/events.ts +40 -4
- package/src/materialization/index.ts +9 -1
- package/src/materializer/README.md +55 -10
- package/src/materializer/edits/commit.ts +3 -19
- package/src/materializer/edits/plan.ts +20 -71
- package/src/materializer/effective/build-events.ts +42 -136
- package/src/materializer/effective/vector-indexing.ts +2 -3
- package/src/materializer/effective/vectors.ts +2 -3
- package/src/materializer/execution/scope.ts +1 -38
- package/src/materializer/execution/work-executor.ts +21 -115
- package/src/materializer/execution/work-records.ts +0 -15
- package/src/materializer/projections/replace.ts +106 -63
- package/src/materializer/projections/replacement-plan.ts +73 -218
- package/src/materializer/shared/batching.ts +7 -0
- package/src/materializer/telemetry/append.ts +2 -14
- package/src/materializer/telemetry/plan.ts +6 -43
- package/src/models/audio/catalog.ts +90 -0
- package/src/models/audio/errors.ts +19 -0
- package/src/models/audio/file.ts +78 -0
- package/src/models/audio/runtime.ts +182 -0
- package/src/models/audio/types.ts +69 -0
- package/src/models/catalog.ts +52 -5
- package/src/models/definitions.ts +8 -1
- package/src/models/embedding-model.ts +12 -0
- package/src/models/events.ts +3 -0
- package/src/models/execution/README.md +20 -1
- package/src/models/execution/embedding.ts +5 -1
- package/src/models/execution/model-call-admission.ts +6 -1
- package/src/models/execution/model-call-limits.ts +21 -11
- package/src/models/execution/model-call-recorder.ts +1 -0
- package/src/models/execution/model-call-recovery.ts +1 -0
- package/src/models/execution/reranking.ts +137 -0
- package/src/models/execution/usage.ts +1 -0
- package/src/models/execution.ts +5 -1
- package/src/models/generation-types.ts +2 -0
- package/src/models/index.ts +32 -0
- package/src/models/pricing.ts +2 -1
- package/src/models/reranking-model.ts +114 -0
- package/src/objects/query/executor.ts +42 -2
- package/src/objects/query/explain.ts +8 -0
- package/src/objects/query/index.ts +1 -0
- package/src/objects/query/ir.ts +10 -0
- package/src/objects/query/normalize.ts +2 -0
- package/src/objects/query/planner.ts +12 -1
- package/src/objects/query/primary-id.ts +56 -0
- package/src/objects/query/reranking-executor.ts +91 -0
- package/src/objects/query/reranking-limits.ts +3 -0
- package/src/objects/query/reranking-query.ts +8 -0
- package/src/objects/query/validate.ts +33 -10
- package/src/objects/sdk/query-builder.ts +15 -2
- package/src/objects/sdk/query-executor.ts +2 -2
- package/src/objects/sdk/runtime-query-executor.ts +7 -4
- package/src/objects/vectors/README.md +14 -2
- package/src/objects/vectors/handle.ts +1 -1
- package/src/objects/vectors/indexing-dispatch.ts +83 -0
- package/src/objects/vectors/indexing-generate.ts +5 -1
- package/src/objects/vectors/profile.ts +2 -0
- package/src/objects/vectors/query.ts +21 -4
- package/src/objects/vectors/resolve-query.ts +9 -5
- package/src/objects/vectors/types.ts +3 -1
- package/src/ontology/builders.ts +22 -7
- package/src/ontology/index.ts +2 -0
- package/src/ontology/query-capabilities.ts +1 -1
- package/src/ontology/types.ts +21 -0
- package/src/ontology/validation/query.ts +57 -0
- package/src/ontology/vector-profiles.ts +1 -0
- package/src/query.ts +4 -0
- package/src/queues/in-memory.ts +54 -19
- package/src/queues/types.ts +4 -0
- package/src/runtime/host.ts +28 -1
- package/src/runtime/index.ts +1 -0
- package/src/runtime/internal.ts +1 -0
- package/src/runtime/public-origin.ts +33 -0
- package/src/runtime/sixb.ts +13 -2
- package/src/runtime/types.ts +12 -2
- package/src/storage/ai-cost/analytics.ts +2 -0
- package/src/storage/ai-cost/codec.ts +2 -1
- package/src/storage/ai-cost/types.ts +1 -0
- package/src/storage/ai-cost/validation.ts +21 -8
- package/src/storage/ai-limits/in-memory.ts +10 -2
- package/src/storage/ai-limits/provider.ts +29 -2
- package/src/storage/ai-limits/types.ts +3 -0
- package/src/storage/ai-usage/record.ts +9 -0
- package/src/storage/ai-usage/types.ts +8 -4
- package/src/storage/ai-usage/usage.ts +2 -0
- package/src/storage/file-download-grants/in-memory.ts +73 -0
- package/src/storage/file-download-grants/index.ts +8 -0
- package/src/storage/file-download-grants/record.ts +47 -0
- package/src/storage/file-download-grants/types.ts +48 -0
- package/src/storage/in-memory/index.ts +13 -2
- package/src/storage/index.ts +31 -13
- package/src/storage/internal.ts +1 -0
- package/src/storage/migrations/index.ts +1 -0
- package/src/storage/migrations/migrate-storage.ts +36 -12
- package/src/storage/migrations/types.ts +8 -0
- package/src/storage/objects/in-memory/query.ts +2 -0
- package/src/storage/objects/in-memory/selected-reader.ts +1 -0
- package/src/storage/objects/in-memory/storage.ts +1 -0
- package/src/storage/objects/query-preparation.ts +77 -0
- package/src/storage/objects/types.ts +2 -0
- package/src/storage/ontology/commits.ts +1 -6
- package/src/storage/ontology/in-memory/index.ts +28 -9
- package/src/storage/ontology/in-memory/materializations-finalization.ts +35 -68
- package/src/storage/ontology/in-memory/materializations-state.ts +0 -22
- package/src/storage/ontology/in-memory/materializations-work.ts +0 -45
- package/src/storage/ontology/in-memory/materializations.ts +172 -653
- package/src/storage/ontology/in-memory/outbox.ts +37 -29
- package/src/storage/ontology/in-memory/replacement-plans.ts +697 -0
- package/src/storage/ontology/in-memory/shared-state.ts +24 -2
- package/src/storage/ontology/in-memory/source-roots.ts +7 -2
- package/src/storage/ontology/in-memory/sources.ts +7 -33
- package/src/storage/ontology/in-memory/state-reader.ts +245 -0
- package/src/storage/ontology/index.ts +19 -13
- package/src/storage/ontology/materializations.ts +45 -74
- package/src/storage/ontology/outbox.ts +4 -7
- package/src/storage/ontology/provider-header-validation.ts +0 -57
- package/src/storage/ontology/provider-work.ts +381 -90
- package/src/storage/ontology/provider.ts +74 -171
- package/src/storage/ontology/replacement-plans.ts +117 -0
- package/src/storage/ontology/sources.ts +0 -12
- package/src/storage/operation-scope.ts +33 -1
- package/src/storage/projection-runs/in-memory.ts +7 -1
- package/src/storage/projection-runs/types.ts +2 -0
- package/src/storage/types.ts +2 -0
- package/src/testing/ai-cost-storage-contract.ts +1 -0
- package/src/testing/ai-limit-storage-contract.ts +62 -0
- package/src/testing/ai-usage-storage-contract.ts +31 -0
- package/src/testing/file-download-grant-storage-contract.ts +139 -0
- package/src/testing/index.ts +4 -0
- package/src/testing/lake-storage-contract.ts +87 -1
- package/src/testing/materializer-storage-contract.ts +1008 -1
- package/src/testing/object-read-scope-contract.ts +1 -0
- package/src/testing/ontology-contract-fixture.ts +11 -87
- package/src/testing/ontology-storage-contract.ts +70 -39
- package/src/testing/projection-run-storage-contract.ts +14 -0
- package/src/testing/queues-contract.ts +59 -0
- package/src/workers/queue-worker.ts +19 -16
- package/dist/chunk-3c90jvfj.js.map +0 -15
- package/dist/chunk-3nx8vj5a.js.map +0 -12
- package/dist/chunk-7ytf06d3.js +0 -113
- package/dist/chunk-7ytf06d3.js.map +0 -10
- package/dist/chunk-a0073121.js.map +0 -12
- package/dist/chunk-fjw417jf.js.map +0 -62
- package/dist/chunk-g4rbm4a6.js.map +0 -15
- package/dist/chunk-hgqpcmyr.js.map +0 -12
- package/dist/chunk-jgwb25gc.js.map +0 -12
- package/dist/chunk-k4kkp58d.js.map +0 -11
- package/dist/chunk-ky7zpbtt.js.map +0 -19
- package/dist/chunk-mdnw7nj8.js.map +0 -15
- package/dist/chunk-py2dw8cw.js.map +0 -17
- package/dist/chunk-s3csryxe.js.map +0 -11
- package/dist/chunk-xnx96gfy.js.map +0 -15
- package/dist/chunk-z708gemf.js.map +0 -50
- package/dist/materializer/execution/plan-stream.d.ts +0 -8
- package/dist/materializer/execution/plan-stream.d.ts.map +0 -1
- package/src/materializer/execution/plan-stream.ts +0 -121
- /package/dist/{chunk-q3grgzp1.js.map → chunk-23xs4qp9.js.map} +0 -0
- /package/dist/{chunk-vef6qa14.js.map → chunk-2am3db31.js.map} +0 -0
- /package/dist/{chunk-fj1dvp37.js.map → chunk-2vhg6ysa.js.map} +0 -0
- /package/dist/{chunk-p0nbkys4.js.map → chunk-33saed7g.js.map} +0 -0
- /package/dist/{chunk-mmac1mp6.js.map → chunk-52c5zb0z.js.map} +0 -0
- /package/dist/{chunk-8fjmqjyx.js.map → chunk-5be2ath4.js.map} +0 -0
- /package/dist/{chunk-2fv8sajb.js.map → chunk-5thzcb8g.js.map} +0 -0
- /package/dist/{chunk-1jvq82rp.js.map → chunk-9g6jz9kk.js.map} +0 -0
- /package/dist/{chunk-8w27xf9e.js.map → chunk-a7er86jd.js.map} +0 -0
- /package/dist/{chunk-bxx3ms5t.js.map → chunk-c2rga5cx.js.map} +0 -0
- /package/dist/{chunk-dsfw1bdr.js.map → chunk-cnb5kv05.js.map} +0 -0
- /package/dist/{chunk-n5t4mq6z.js.map → chunk-e67ynxcr.js.map} +0 -0
- /package/dist/{chunk-6q7c68yx.js.map → chunk-f1xh7a32.js.map} +0 -0
- /package/dist/{chunk-7jc21943.js.map → chunk-gf7yht60.js.map} +0 -0
- /package/dist/{chunk-ffwvdgk1.js.map → chunk-jjrn5v0p.js.map} +0 -0
- /package/dist/{chunk-r5sc1d2b.js.map → chunk-jnfxmr3f.js.map} +0 -0
- /package/dist/{chunk-y0zmae99.js.map → chunk-k4g51s47.js.map} +0 -0
- /package/dist/{chunk-drz59ve0.js.map → chunk-rx7h5fdx.js.map} +0 -0
- /package/dist/{chunk-yfppyaty.js.map → chunk-sk0hcjsz.js.map} +0 -0
- /package/dist/{chunk-qne45xqq.js.map → chunk-svabwqdq.js.map} +0 -0
- /package/dist/{chunk-xr7y35yj.js.map → chunk-t9shqx3w.js.map} +0 -0
- /package/dist/{chunk-adbve9zt.js.map → chunk-vre348sb.js.map} +0 -0
- /package/dist/{chunk-a4g5yjm0.js.map → chunk-w9yycd3t.js.map} +0 -0
- /package/dist/{chunk-wd34wnsy.js.map → chunk-xcy5ddha.js.map} +0 -0
|
@@ -9,6 +9,7 @@ import type {
|
|
|
9
9
|
AiUsageStorage,
|
|
10
10
|
AuthStorage,
|
|
11
11
|
ExecutionStorage,
|
|
12
|
+
RecordAiModelCallInput,
|
|
12
13
|
ReserveAiModelCallInput,
|
|
13
14
|
Storage,
|
|
14
15
|
} from "../storage"
|
|
@@ -536,6 +537,65 @@ export function runAiLimitStorageContractSuite<TStorage extends AiLimitStorageCo
|
|
|
536
537
|
})
|
|
537
538
|
})
|
|
538
539
|
|
|
540
|
+
// Removal proof: drop aiLimitMeterApplies from a provider's reserve loop (admission reports
|
|
541
|
+
// missingEstimate) or from resolveAiLimitActual (the meter becomes unavailable).
|
|
542
|
+
test("token limits neither admit nor count transcription and reranking", async () => {
|
|
543
|
+
await withStorage(async (storage) => {
|
|
544
|
+
const status = async () =>
|
|
545
|
+
(
|
|
546
|
+
await storage.aiLimits.listPolicyStatuses({
|
|
547
|
+
projectId,
|
|
548
|
+
at: at("2026-08-15T12:00:01.000Z"),
|
|
549
|
+
})
|
|
550
|
+
)[0]
|
|
551
|
+
await recordUsageInput(storage.aiUsage, {
|
|
552
|
+
id: "usage-transcription",
|
|
553
|
+
callId: "transcription",
|
|
554
|
+
modelKind: "transcription",
|
|
555
|
+
usage: { audioDurationMs: 1250 },
|
|
556
|
+
})
|
|
557
|
+
await recordUsage(storage.aiUsage, "usage-language", "language", 4)
|
|
558
|
+
await storage.aiLimits.createPolicy({
|
|
559
|
+
id: "tokens",
|
|
560
|
+
projectId,
|
|
561
|
+
subject: project,
|
|
562
|
+
limit: { meter: "tokens.total", amount: 10 },
|
|
563
|
+
})
|
|
564
|
+
expect(await status()).toMatchObject({
|
|
565
|
+
accountingStatus: "complete",
|
|
566
|
+
consumption: { actual: { amount: 4 } },
|
|
567
|
+
})
|
|
568
|
+
|
|
569
|
+
const cost: AiLimitQuantity = {
|
|
570
|
+
meter: "cost.catalogEstimated",
|
|
571
|
+
amount: { currency: "USD", amountNanos: "100" },
|
|
572
|
+
}
|
|
573
|
+
await expect(
|
|
574
|
+
storage.aiLimits.reserveModelCall(
|
|
575
|
+
reservation("reranking", 0, { estimates: [cost], modelKind: "reranking" })
|
|
576
|
+
)
|
|
577
|
+
).resolves.toEqual({ status: "notRequired" })
|
|
578
|
+
await expect(
|
|
579
|
+
storage.aiLimits.reserveModelCall(reservation("language", 0, { estimates: [cost] }))
|
|
580
|
+
).resolves.toMatchObject({ status: "unavailable", reasons: ["missingEstimate"] })
|
|
581
|
+
|
|
582
|
+
await recordUsageInput(storage.aiUsage, {
|
|
583
|
+
id: "usage-reranking",
|
|
584
|
+
callId: "reranking",
|
|
585
|
+
modelKind: "reranking",
|
|
586
|
+
usage: {},
|
|
587
|
+
})
|
|
588
|
+
await storage.aiLimits.recordModelCallActuals({
|
|
589
|
+
projectId,
|
|
590
|
+
usageRecordId: "usage-reranking",
|
|
591
|
+
})
|
|
592
|
+
expect(await status()).toMatchObject({
|
|
593
|
+
accountingStatus: "complete",
|
|
594
|
+
consumption: { actual: { amount: 4 } },
|
|
595
|
+
})
|
|
596
|
+
})
|
|
597
|
+
})
|
|
598
|
+
|
|
539
599
|
test("charges actuals to the ledger occurrence month", async () => {
|
|
540
600
|
await withStorage(async (storage) => {
|
|
541
601
|
await storage.aiLimits.createPolicy({
|
|
@@ -1062,6 +1122,7 @@ async function recordUsageInput(
|
|
|
1062
1122
|
readonly executionId?: string
|
|
1063
1123
|
readonly requesterGroupIds?: readonly string[]
|
|
1064
1124
|
readonly occurredAt?: Date
|
|
1125
|
+
readonly modelKind?: RecordAiModelCallInput["modelKind"]
|
|
1065
1126
|
readonly usage: AiModelCallUsageInput
|
|
1066
1127
|
}
|
|
1067
1128
|
): Promise<void> {
|
|
@@ -1074,6 +1135,7 @@ async function recordUsageInput(
|
|
|
1074
1135
|
requesterGroupIds: input.requesterGroupIds ?? ["support"],
|
|
1075
1136
|
providerId: "test",
|
|
1076
1137
|
requestedModelId: "test/model",
|
|
1138
|
+
...(input.modelKind === undefined ? {} : { modelKind: input.modelKind }),
|
|
1077
1139
|
responseId: `response:${input.callId}`,
|
|
1078
1140
|
usage: input.usage,
|
|
1079
1141
|
occurredAt: input.occurredAt ?? at("2026-08-15T12:00:00.500Z"),
|
|
@@ -69,6 +69,37 @@ export function runAiUsageStorageContractSuite<TStorage extends AiUsageStorage>(
|
|
|
69
69
|
}
|
|
70
70
|
|
|
71
71
|
describe(label, () => {
|
|
72
|
+
// Removal proof: omit audioDurationMs from a row codec; this round trip fails.
|
|
73
|
+
test("persists transcription usage and kind without invented token totals", async () => {
|
|
74
|
+
await withStorage(async (storage) => {
|
|
75
|
+
const input = modelCallInput({
|
|
76
|
+
modelKind: "transcription",
|
|
77
|
+
usage: { audioDurationMs: 1250 },
|
|
78
|
+
})
|
|
79
|
+
await storage.recordModelCall(input)
|
|
80
|
+
const latest = await storage.getLatestForExecution({
|
|
81
|
+
projectId,
|
|
82
|
+
executionId: agentExecutionId,
|
|
83
|
+
})
|
|
84
|
+
expect(latest?.modelKind).toBe("transcription")
|
|
85
|
+
expect(latest?.usage).toEqual({ audioDurationMs: 1250, reportingStatus: "partial" })
|
|
86
|
+
expect((await storage.recordModelCall(input)).created).toBe(false)
|
|
87
|
+
expect(
|
|
88
|
+
await storage.summarizeExecution({ projectId, executionId: agentExecutionId })
|
|
89
|
+
).toMatchObject({ modelCallCount: 1, usage: { audioDurationMs: 1250 } })
|
|
90
|
+
})
|
|
91
|
+
})
|
|
92
|
+
// Removal proof: omit 'reranking' from a storage migration's model_kind check; the write fails.
|
|
93
|
+
test("persists reranking usage kind", async () => {
|
|
94
|
+
await withStorage(async (storage) => {
|
|
95
|
+
await storage.recordModelCall(modelCallInput({ modelKind: "reranking", usage: {} }))
|
|
96
|
+
const latest = await storage.getLatestForExecution({
|
|
97
|
+
projectId,
|
|
98
|
+
executionId: agentExecutionId,
|
|
99
|
+
})
|
|
100
|
+
expect(latest?.modelKind).toBe("reranking")
|
|
101
|
+
})
|
|
102
|
+
})
|
|
72
103
|
test("retains native provider IDs across reads and replay", async () => {
|
|
73
104
|
// Regression proof: omit providerIds in normalization or a storage row codec.
|
|
74
105
|
await withStorage(async (storage) => {
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import { describe, expect, test } from "bun:test"
|
|
2
|
+
import type {
|
|
3
|
+
FileDownloadGrantRecord,
|
|
4
|
+
FileDownloadGrantStorage,
|
|
5
|
+
} from "../storage/file-download-grants"
|
|
6
|
+
|
|
7
|
+
export interface FileDownloadGrantStorageContractSuiteOptions<
|
|
8
|
+
TStorage extends FileDownloadGrantStorage = FileDownloadGrantStorage,
|
|
9
|
+
> {
|
|
10
|
+
/** Returns an isolated provider capability for every test. */
|
|
11
|
+
readonly createStorage: () => TStorage | Promise<TStorage>
|
|
12
|
+
readonly cleanup?: (storage: TStorage) => void | Promise<void>
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const projectId = "file-download-grant-contract"
|
|
16
|
+
const createdAt = new Date("2026-10-05T12:00:00.000Z")
|
|
17
|
+
const hour = 60 * 60 * 1000
|
|
18
|
+
|
|
19
|
+
/** Provider-neutral persistence contract for file download grants. */
|
|
20
|
+
export function runFileDownloadGrantStorageContractSuite<TStorage extends FileDownloadGrantStorage>(
|
|
21
|
+
label: string,
|
|
22
|
+
options: FileDownloadGrantStorageContractSuiteOptions<TStorage>
|
|
23
|
+
): void {
|
|
24
|
+
const withStorage = async (run: (storage: TStorage) => Promise<void>): Promise<void> => {
|
|
25
|
+
const storage = await options.createStorage()
|
|
26
|
+
try {
|
|
27
|
+
await run(storage)
|
|
28
|
+
} finally {
|
|
29
|
+
await options.cleanup?.(storage)
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
describe(label, () => {
|
|
34
|
+
test("finds a grant by its project and token hash", async () => {
|
|
35
|
+
await withStorage(async (storage) => {
|
|
36
|
+
const grant = grantRecord()
|
|
37
|
+
await storage.create(grant)
|
|
38
|
+
|
|
39
|
+
expect(await storage.findByTokenHash({ projectId, tokenHash: grant.tokenHash })).toEqual(
|
|
40
|
+
grant
|
|
41
|
+
)
|
|
42
|
+
expect(
|
|
43
|
+
await storage.findByTokenHash({ projectId: "other-project", tokenHash: grant.tokenHash })
|
|
44
|
+
).toBeNull()
|
|
45
|
+
expect(await storage.findByTokenHash({ projectId, tokenHash: "f".repeat(64) })).toBeNull()
|
|
46
|
+
})
|
|
47
|
+
})
|
|
48
|
+
|
|
49
|
+
test("rejects a second grant with the same id or token hash", async () => {
|
|
50
|
+
await withStorage(async (storage) => {
|
|
51
|
+
await storage.create(grantRecord())
|
|
52
|
+
|
|
53
|
+
await expect(storage.create(grantRecord({ tokenHash: "b".repeat(64) }))).rejects.toThrow()
|
|
54
|
+
await expect(storage.create(grantRecord({ id: "filedownload_2" }))).rejects.toThrow()
|
|
55
|
+
await storage.create(grantRecord({ projectId: "other-project" }))
|
|
56
|
+
})
|
|
57
|
+
})
|
|
58
|
+
|
|
59
|
+
test("keeps the first revocation", async () => {
|
|
60
|
+
await withStorage(async (storage) => {
|
|
61
|
+
await storage.create(grantRecord())
|
|
62
|
+
const first = new Date(createdAt.getTime() + 1_000)
|
|
63
|
+
|
|
64
|
+
const revoked = await storage.revoke({ projectId, id: "filedownload_1", revokedAt: first })
|
|
65
|
+
const again = await storage.revoke({
|
|
66
|
+
projectId,
|
|
67
|
+
id: "filedownload_1",
|
|
68
|
+
revokedAt: new Date(first.getTime() + 1_000),
|
|
69
|
+
})
|
|
70
|
+
|
|
71
|
+
expect(revoked?.revokedAt).toEqual(first)
|
|
72
|
+
expect(again?.revokedAt).toEqual(first)
|
|
73
|
+
expect(
|
|
74
|
+
(await storage.findByTokenHash({ projectId, tokenHash: "a".repeat(64) }))?.revokedAt
|
|
75
|
+
).toEqual(first)
|
|
76
|
+
expect(
|
|
77
|
+
await storage.revoke({
|
|
78
|
+
projectId: "other-project",
|
|
79
|
+
id: "filedownload_1",
|
|
80
|
+
revokedAt: first,
|
|
81
|
+
})
|
|
82
|
+
).toBeNull()
|
|
83
|
+
})
|
|
84
|
+
})
|
|
85
|
+
|
|
86
|
+
test("deletes only the project's grants that expired before the cutoff, up to the limit", async () => {
|
|
87
|
+
await withStorage(async (storage) => {
|
|
88
|
+
const expiringAt = (hours: number) => new Date(createdAt.getTime() + hours * hour)
|
|
89
|
+
await storage.create(
|
|
90
|
+
grantRecord({ id: "g1", tokenHash: "1".repeat(64), expiresAt: expiringAt(1) })
|
|
91
|
+
)
|
|
92
|
+
await storage.create(
|
|
93
|
+
grantRecord({ id: "g2", tokenHash: "2".repeat(64), expiresAt: expiringAt(2) })
|
|
94
|
+
)
|
|
95
|
+
await storage.create(
|
|
96
|
+
grantRecord({ id: "g3", tokenHash: "3".repeat(64), expiresAt: expiringAt(3) })
|
|
97
|
+
)
|
|
98
|
+
await storage.create(
|
|
99
|
+
grantRecord({ projectId: "other-project", id: "g1", expiresAt: expiringAt(1) })
|
|
100
|
+
)
|
|
101
|
+
const cutoff = { projectId, expiredBefore: expiringAt(3) }
|
|
102
|
+
|
|
103
|
+
expect(await storage.deleteExpired({ ...cutoff, limit: 1 })).toBe(1)
|
|
104
|
+
expect(await storage.deleteExpired({ ...cutoff, limit: 10 })).toBe(1)
|
|
105
|
+
expect(await storage.deleteExpired({ ...cutoff, limit: 10 })).toBe(0)
|
|
106
|
+
|
|
107
|
+
const remaining = await Promise.all(
|
|
108
|
+
["1", "2", "3"].map((digit) =>
|
|
109
|
+
storage.findByTokenHash({ projectId, tokenHash: digit.repeat(64) })
|
|
110
|
+
)
|
|
111
|
+
)
|
|
112
|
+
expect(remaining.map((grant) => grant?.id ?? null)).toEqual([null, null, "g3"])
|
|
113
|
+
expect(
|
|
114
|
+
await storage.findByTokenHash({ projectId: "other-project", tokenHash: "a".repeat(64) })
|
|
115
|
+
).not.toBeNull()
|
|
116
|
+
})
|
|
117
|
+
})
|
|
118
|
+
})
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
function grantRecord(overrides: Partial<FileDownloadGrantRecord> = {}): FileDownloadGrantRecord {
|
|
122
|
+
const digest = "c".repeat(64)
|
|
123
|
+
return {
|
|
124
|
+
id: "filedownload_1",
|
|
125
|
+
projectId,
|
|
126
|
+
tokenHash: "a".repeat(64),
|
|
127
|
+
file: {
|
|
128
|
+
blobId: `blob_${digest}`,
|
|
129
|
+
digest: `sha256:${digest}`,
|
|
130
|
+
sizeBytes: 10,
|
|
131
|
+
fileName: "photo.jpg",
|
|
132
|
+
mediaType: "image/jpeg",
|
|
133
|
+
},
|
|
134
|
+
executionId: "execution-1",
|
|
135
|
+
createdAt,
|
|
136
|
+
expiresAt: new Date(createdAt.getTime() + hour),
|
|
137
|
+
...overrides,
|
|
138
|
+
}
|
|
139
|
+
}
|
package/src/testing/index.ts
CHANGED
|
@@ -59,6 +59,10 @@ export {
|
|
|
59
59
|
type ExecutionStorageContractSuiteOptions,
|
|
60
60
|
runExecutionStorageContractSuite,
|
|
61
61
|
} from "./execution-storage-contract"
|
|
62
|
+
export {
|
|
63
|
+
type FileDownloadGrantStorageContractSuiteOptions,
|
|
64
|
+
runFileDownloadGrantStorageContractSuite,
|
|
65
|
+
} from "./file-download-grant-storage-contract"
|
|
62
66
|
export {
|
|
63
67
|
type FileUploadSessionStorageContractSuiteOptions,
|
|
64
68
|
runFileUploadSessionStorageContractSuite,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { describe, expect, test } from "bun:test"
|
|
2
2
|
import type { FileRef } from "../blob-storage"
|
|
3
|
-
import { col, defineDataset } from "../datasets"
|
|
3
|
+
import { col, type DatasetDefinition, defineDataset } from "../datasets"
|
|
4
4
|
import { LakeStorageError } from "../lake-storage/errors"
|
|
5
5
|
import type { DatasetRow, LakeStorage } from "../lake-storage/types"
|
|
6
6
|
|
|
@@ -284,6 +284,92 @@ export function runLakeStorageContractSuite<TStorage extends LakeStorage>(
|
|
|
284
284
|
})
|
|
285
285
|
})
|
|
286
286
|
|
|
287
|
+
describe("change feed", () => {
|
|
288
|
+
const commitSnapshot = async (
|
|
289
|
+
storage: TStorage,
|
|
290
|
+
dataset: DatasetDefinition,
|
|
291
|
+
rows: readonly DatasetRow[]
|
|
292
|
+
) => {
|
|
293
|
+
const write = await storage.beginWrite({ dataset, mode: "snapshot" })
|
|
294
|
+
await write.writeRows(rows)
|
|
295
|
+
return write.commit()
|
|
296
|
+
}
|
|
297
|
+
const byDatasetId = <T extends { readonly datasetId: string }>(versions: readonly T[]) =>
|
|
298
|
+
[...versions].sort((left, right) => left.datasetId.localeCompare(right.datasetId))
|
|
299
|
+
|
|
300
|
+
test("reports the newest data version of each dataset changed after a cursor", async () => {
|
|
301
|
+
await withStorage(async (storage) => {
|
|
302
|
+
await storage.createDataset(writeDataset)
|
|
303
|
+
await storage.createDataset(nullableWriteDataset)
|
|
304
|
+
const start = await storage.listLatestVersionsSince({ cursor: null })
|
|
305
|
+
expect(start?.versions).toEqual([])
|
|
306
|
+
|
|
307
|
+
await commitSnapshot(storage, writeDataset, [{ orderId: "ord_1", customerName: "Ada" }])
|
|
308
|
+
const orders = await commitSnapshot(storage, writeDataset, [
|
|
309
|
+
{ orderId: "ord_2", customerName: "Grace" },
|
|
310
|
+
])
|
|
311
|
+
const notes = await commitSnapshot(storage, nullableWriteDataset, [
|
|
312
|
+
{ orderId: "ord_1", note: null },
|
|
313
|
+
])
|
|
314
|
+
|
|
315
|
+
const changed = await storage.listLatestVersionsSince({ cursor: start!.cursor })
|
|
316
|
+
expect(byDatasetId(changed?.versions ?? [])).toEqual([
|
|
317
|
+
{
|
|
318
|
+
datasetId: nullableWriteDataset.id,
|
|
319
|
+
versionId: notes.versionId,
|
|
320
|
+
mode: "snapshot",
|
|
321
|
+
createdAt: notes.createdAt,
|
|
322
|
+
rowCount: 1,
|
|
323
|
+
},
|
|
324
|
+
{
|
|
325
|
+
datasetId: writeDataset.id,
|
|
326
|
+
versionId: orders.versionId,
|
|
327
|
+
mode: "snapshot",
|
|
328
|
+
createdAt: orders.createdAt,
|
|
329
|
+
rowCount: 1,
|
|
330
|
+
},
|
|
331
|
+
])
|
|
332
|
+
await expect(
|
|
333
|
+
storage.listLatestVersionsSince({
|
|
334
|
+
cursor: start!.cursor,
|
|
335
|
+
datasetIds: [nullableWriteDataset.id],
|
|
336
|
+
})
|
|
337
|
+
).resolves.toMatchObject({ versions: [{ versionId: notes.versionId }] })
|
|
338
|
+
await expect(
|
|
339
|
+
storage.listLatestVersionsSince({ cursor: changed!.cursor })
|
|
340
|
+
).resolves.toEqual({ cursor: changed!.cursor, versions: [] })
|
|
341
|
+
})
|
|
342
|
+
})
|
|
343
|
+
|
|
344
|
+
test("skips unchanged writes and schema-only versions", async () => {
|
|
345
|
+
await withStorage(async (storage) => {
|
|
346
|
+
await storage.createDataset(nullableWriteDataset)
|
|
347
|
+
const rows = [{ orderId: "ord_1", note: null }]
|
|
348
|
+
await commitSnapshot(storage, nullableWriteDataset, rows)
|
|
349
|
+
const start = await storage.listLatestVersionsSince({ cursor: null })
|
|
350
|
+
|
|
351
|
+
const unchanged = await commitSnapshot(storage, nullableWriteDataset, rows)
|
|
352
|
+
expect(unchanged.outcome).toBe("unchanged")
|
|
353
|
+
if (schemaEvolution === "addNullableColumns") {
|
|
354
|
+
await storage.createDataset(
|
|
355
|
+
defineDataset(nullableWriteDataset.id, {
|
|
356
|
+
schema: [
|
|
357
|
+
col("orderId", "string"),
|
|
358
|
+
col("note", "string", { nullable: true }),
|
|
359
|
+
col("added", "string", { nullable: true }),
|
|
360
|
+
],
|
|
361
|
+
})
|
|
362
|
+
)
|
|
363
|
+
expect((await storage.getLatestVersion(nullableWriteDataset.id))?.mode).toBe("schema")
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
await expect(
|
|
367
|
+
storage.listLatestVersionsSince({ cursor: start!.cursor })
|
|
368
|
+
).resolves.toMatchObject({ versions: [] })
|
|
369
|
+
})
|
|
370
|
+
})
|
|
371
|
+
})
|
|
372
|
+
|
|
287
373
|
describe("writes and reads", () => {
|
|
288
374
|
test("cancels reads before starting and between rows", async () => {
|
|
289
375
|
// Red check: remove readRows' signal checks in the provider under test.
|