@abloatai/transaction 0.57.0 → 0.58.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CONVENTIONS.md +51 -41
- package/README.md +3 -1
- package/dist/ai-sdk/modelTools.d.ts +3 -3
- package/dist/ai-sdk/modelTools.d.ts.map +1 -1
- package/dist/ai-sdk/modelTools.js +1 -1
- package/dist/ai-sdk/modelTools.js.map +1 -1
- package/dist/ai-sdk/updateTool.d.ts +5 -7
- package/dist/ai-sdk/updateTool.d.ts.map +1 -1
- package/dist/ai-sdk/updateTool.js +3 -5
- package/dist/ai-sdk/updateTool.js.map +1 -1
- package/dist/auth/capability.d.ts +5 -0
- package/dist/auth/capability.d.ts.map +1 -1
- package/dist/auth/capability.js +5 -0
- package/dist/auth/capability.js.map +1 -1
- package/dist/auth/capabilityLifecycle.d.ts +1 -1
- package/dist/auth/capabilityLifecycle.d.ts.map +1 -1
- package/dist/auth/credentialPolicy.d.ts +1 -1
- package/dist/auth/credentialPolicy.d.ts.map +1 -1
- package/dist/auth/identity.d.ts +3 -3
- package/dist/auth/identity.d.ts.map +1 -1
- package/dist/auth/identity.js +5 -5
- package/dist/auth/identity.js.map +1 -1
- package/dist/auth/index.d.ts +4 -208
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +4 -330
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/runtime.d.ts +218 -0
- package/dist/auth/runtime.d.ts.map +1 -0
- package/dist/auth/runtime.js +336 -0
- package/dist/auth/runtime.js.map +1 -0
- package/dist/auth/sessionMint.d.ts +1 -1
- package/dist/auth/sessionMint.d.ts.map +1 -1
- package/dist/auth/sessionMint.js +2 -1
- package/dist/auth/sessionMint.js.map +1 -1
- package/dist/branches.d.ts +25 -21
- package/dist/branches.d.ts.map +1 -1
- package/dist/branches.js +3 -0
- package/dist/branches.js.map +1 -1
- package/dist/{coordination/awaitClaimGrant.d.ts → claims/awaitGrant.d.ts} +1 -1
- package/dist/claims/awaitGrant.d.ts.map +1 -0
- package/dist/{coordination/awaitClaimGrant.js → claims/awaitGrant.js} +4 -4
- package/dist/claims/awaitGrant.js.map +1 -0
- package/dist/{wire/claims.d.ts → claims/contract.d.ts} +1 -1
- package/dist/claims/contract.d.ts.map +1 -0
- package/dist/{wire/claims.js → claims/contract.js} +2 -2
- package/dist/claims/contract.js.map +1 -0
- package/dist/{wire/claimEvent.d.ts → claims/eventContract.d.ts} +1 -1
- package/dist/claims/eventContract.d.ts.map +1 -0
- package/dist/{wire/claimEvent.js → claims/eventContract.js} +1 -1
- package/dist/claims/eventContract.js.map +1 -0
- package/dist/{coordination → claims}/events.d.ts +7 -11
- package/dist/claims/events.d.ts.map +1 -0
- package/dist/claims/events.js +8 -0
- package/dist/claims/events.js.map +1 -0
- package/dist/{coordination/claimHeartbeatLoop.d.ts → claims/heartbeat.d.ts} +1 -1
- package/dist/claims/heartbeat.d.ts.map +1 -0
- package/dist/{coordination/claimHeartbeatLoop.js → claims/heartbeat.js} +1 -1
- package/dist/claims/heartbeat.js.map +1 -0
- package/dist/claims/index.d.ts +17 -0
- package/dist/claims/index.d.ts.map +1 -0
- package/dist/claims/index.js +16 -0
- package/dist/claims/index.js.map +1 -0
- package/dist/claims/lifetime.d.ts +26 -0
- package/dist/claims/lifetime.d.ts.map +1 -0
- package/dist/claims/lifetime.js +62 -0
- package/dist/claims/lifetime.js.map +1 -0
- package/dist/{coordination → claims}/locator.d.ts +1 -1
- package/dist/claims/locator.d.ts.map +1 -0
- package/dist/{coordination → claims}/locator.js +2 -2
- package/dist/claims/locator.js.map +1 -0
- package/dist/{coordination/claimMeta.d.ts → claims/meta.d.ts} +1 -1
- package/dist/claims/meta.d.ts.map +1 -0
- package/dist/{coordination/claimMeta.js → claims/meta.js} +1 -1
- package/dist/claims/meta.js.map +1 -0
- package/dist/claims/routes.d.ts +59 -0
- package/dist/claims/routes.d.ts.map +1 -0
- package/dist/claims/routes.js +69 -0
- package/dist/claims/routes.js.map +1 -0
- package/dist/claims/targetConflict.d.ts.map +1 -0
- package/dist/claims/targetConflict.js.map +1 -0
- package/dist/{coordination → claims}/trace.d.ts +2 -2
- package/dist/claims/trace.d.ts.map +1 -0
- package/dist/{coordination → claims}/trace.js +5 -5
- package/dist/claims/trace.js.map +1 -0
- package/dist/{ablo.d.ts → client/ablo.d.ts} +6 -15
- package/dist/client/ablo.d.ts.map +1 -0
- package/dist/{ablo.js → client/ablo.js} +2 -2
- package/dist/client/ablo.js.map +1 -0
- package/dist/{transactionLayer.d.ts → client/contract.d.ts} +12 -14
- package/dist/client/contract.d.ts.map +1 -0
- package/dist/{transactionLayer.js → client/contract.js} +4 -5
- package/dist/client/contract.js.map +1 -0
- package/dist/{headlessClient.d.ts → client/headless.d.ts} +4 -4
- package/dist/client/headless.d.ts.map +1 -0
- package/dist/{headlessClient.js → client/headless.js} +8 -10
- package/dist/{headlessClient.js.map → client/headless.js.map} +1 -1
- package/dist/client/index.d.ts +11 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +11 -0
- package/dist/client/index.js.map +1 -0
- package/dist/{resources → client/resources}/functionalUpdate.d.ts +4 -4
- package/dist/client/resources/functionalUpdate.d.ts.map +1 -0
- package/dist/{resources → client/resources}/functionalUpdate.js +3 -3
- package/dist/client/resources/functionalUpdate.js.map +1 -0
- package/dist/{resources → client/resources}/httpResources.d.ts +51 -57
- package/dist/client/resources/httpResources.d.ts.map +1 -0
- package/dist/{resources → client/resources}/httpResources.js +1 -1
- package/dist/client/resources/httpResources.js.map +1 -0
- package/dist/{resources → client/resources}/modelCreate.d.ts +1 -1
- package/dist/client/resources/modelCreate.d.ts.map +1 -0
- package/dist/{resources → client/resources}/modelCreate.js +1 -1
- package/dist/client/resources/modelCreate.js.map +1 -0
- package/dist/{resources → client/resources}/modelOperations.d.ts +35 -51
- package/dist/client/resources/modelOperations.d.ts.map +1 -0
- package/dist/{resources → client/resources}/modelOperations.js +1 -1
- package/dist/client/resources/modelOperations.js.map +1 -0
- package/dist/{resources → client/resources}/mutationOptions.d.ts +4 -17
- package/dist/client/resources/mutationOptions.d.ts.map +1 -0
- package/dist/client/resources/mutationOptions.js.map +1 -0
- package/dist/client/resources/where.d.ts.map +1 -0
- package/dist/{resources → client/resources}/where.js +1 -1
- package/dist/client/resources/where.js.map +1 -0
- package/dist/{resources → client/resources}/writeOptionsSchema.d.ts +2 -35
- package/dist/client/resources/writeOptionsSchema.d.ts.map +1 -0
- package/dist/{resources → client/resources}/writeOptionsSchema.js +5 -18
- package/dist/client/resources/writeOptionsSchema.js.map +1 -0
- package/dist/{transactions → commit}/confirmation/commitEnvelope.d.ts +1 -37
- package/dist/commit/confirmation/commitEnvelope.d.ts.map +1 -0
- package/dist/{transactions → commit}/confirmation/commitEnvelope.js +2 -7
- package/dist/commit/confirmation/commitEnvelope.js.map +1 -0
- package/dist/commit/confirmation/httpCommitEnvelope.d.ts.map +1 -0
- package/dist/{transactions → commit}/confirmation/httpCommitEnvelope.js +1 -1
- package/dist/commit/confirmation/httpCommitEnvelope.js.map +1 -0
- package/dist/commit/confirmation/idempotencyKey.d.ts.map +1 -0
- package/dist/commit/confirmation/idempotencyKey.js.map +1 -0
- package/dist/{transactions → commit}/confirmation/pendingWrite.d.ts +2 -33
- package/dist/commit/confirmation/pendingWrite.d.ts.map +1 -0
- package/dist/{transactions → commit}/confirmation/pendingWrite.js +1 -1
- package/dist/commit/confirmation/pendingWrite.js.map +1 -0
- package/dist/commit/contract.d.ts +1404 -0
- package/dist/commit/contract.d.ts.map +1 -0
- package/dist/{wire/commit.js → commit/contract.js} +13 -20
- package/dist/commit/contract.js.map +1 -0
- package/dist/{durableWrites.d.ts → commit/durableWrites.d.ts} +6 -6
- package/dist/commit/durableWrites.d.ts.map +1 -0
- package/dist/{durableWrites.js → commit/durableWrites.js} +5 -5
- package/dist/commit/durableWrites.js.map +1 -0
- package/dist/{transport/httpCommitRequest.d.ts → commit/httpRequest.d.ts} +6 -6
- package/dist/commit/httpRequest.d.ts.map +1 -0
- package/dist/{transport/httpCommitRequest.js → commit/httpRequest.js} +2 -3
- package/dist/commit/httpRequest.js.map +1 -0
- package/dist/commit/index.d.ts +17 -0
- package/dist/commit/index.d.ts.map +1 -0
- package/dist/commit/index.js +17 -0
- package/dist/commit/index.js.map +1 -0
- package/dist/{readSetContext.d.ts → commit/readSetContext.d.ts} +7 -15
- package/dist/commit/readSetContext.d.ts.map +1 -0
- package/dist/{readSetContext.js → commit/readSetContext.js} +10 -25
- package/dist/commit/readSetContext.js.map +1 -0
- package/dist/{commitRecordRuntime.d.ts → commit/recordRuntime.d.ts} +3 -5
- package/dist/commit/recordRuntime.d.ts.map +1 -0
- package/dist/{commitRecordRuntime.js → commit/recordRuntime.js} +13 -54
- package/dist/commit/recordRuntime.js.map +1 -0
- package/dist/coordination/index.d.ts +6 -8
- package/dist/coordination/index.d.ts.map +1 -1
- package/dist/coordination/index.js +3 -9
- package/dist/coordination/index.js.map +1 -1
- package/dist/coordination/schema.d.ts +11 -459
- package/dist/coordination/schema.d.ts.map +1 -1
- package/dist/coordination/schema.js +13 -261
- package/dist/coordination/schema.js.map +1 -1
- package/dist/errorCodes.d.ts +15 -9
- package/dist/errorCodes.d.ts.map +1 -1
- package/dist/errorCodes.js +13 -6
- package/dist/errorCodes.js.map +1 -1
- package/dist/errorObservation.d.ts +2 -2
- package/dist/errors.d.ts +3 -2
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +27 -11
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +7 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/internal/read-set.d.ts +3 -3
- package/dist/internal/read-set.d.ts.map +1 -1
- package/dist/internal/read-set.js +2 -2
- package/dist/internal/read-set.js.map +1 -1
- package/dist/observability.d.ts +4 -4
- package/dist/observability.d.ts.map +1 -1
- package/dist/observability.js +2 -2
- package/dist/{wire/delta.d.ts → observation/contract.d.ts} +8 -8
- package/dist/observation/contract.d.ts.map +1 -0
- package/dist/{wire/delta.js → observation/contract.js} +3 -3
- package/dist/observation/contract.js.map +1 -0
- package/dist/{wire/feedCursor.d.ts → observation/cursor.d.ts} +1 -1
- package/dist/observation/cursor.d.ts.map +1 -0
- package/dist/{wire/feedCursor.js → observation/cursor.js} +1 -1
- package/dist/observation/cursor.js.map +1 -0
- package/dist/{wire/deltaDelivery.d.ts → observation/deliveryContract.d.ts} +1 -1
- package/dist/observation/deliveryContract.d.ts.map +1 -0
- package/dist/{wire/deltaDelivery.js → observation/deliveryContract.js} +1 -1
- package/dist/observation/deliveryContract.js.map +1 -0
- package/dist/{wire/feedEvent.d.ts → observation/feedContract.d.ts} +10 -10
- package/dist/observation/feedContract.d.ts.map +1 -0
- package/dist/{wire/feedEvent.js → observation/feedContract.js} +4 -4
- package/dist/observation/feedContract.js.map +1 -0
- package/dist/observation/httpFeed.d.ts +4 -0
- package/dist/observation/httpFeed.d.ts.map +1 -0
- package/dist/{transport → observation}/httpFeed.js +1 -1
- package/dist/{transport → observation}/httpFeed.js.map +1 -1
- package/dist/observation/index.d.ts +13 -0
- package/dist/observation/index.d.ts.map +1 -0
- package/dist/observation/index.js +13 -0
- package/dist/observation/index.js.map +1 -0
- package/dist/{log → observation/persistence}/syncDeltaRow.d.ts +8 -8
- package/dist/observation/persistence/syncDeltaRow.d.ts.map +1 -0
- package/dist/{log → observation/persistence}/syncDeltaRow.js +4 -4
- package/dist/observation/persistence/syncDeltaRow.js.map +1 -0
- package/dist/pricing.d.ts +20 -12
- package/dist/pricing.d.ts.map +1 -1
- package/dist/pricing.js +46 -26
- package/dist/pricing.js.map +1 -1
- package/dist/schema/index.d.ts +5 -6
- package/dist/schema/index.d.ts.map +1 -1
- package/dist/schema/index.js +4 -7
- package/dist/schema/index.js.map +1 -1
- package/dist/schema/model.d.ts +0 -27
- package/dist/schema/model.d.ts.map +1 -1
- package/dist/schema/model.js +0 -2
- package/dist/schema/model.js.map +1 -1
- package/dist/schema/openapi.d.ts.map +1 -1
- package/dist/schema/openapi.js +45 -6
- package/dist/schema/openapi.js.map +1 -1
- package/dist/schema/schema.d.ts +11 -3
- package/dist/schema/schema.d.ts.map +1 -1
- package/dist/schema/schema.js +9 -2
- package/dist/schema/schema.js.map +1 -1
- package/dist/schema/serialize.d.ts +1 -4
- package/dist/schema/serialize.d.ts.map +1 -1
- package/dist/schema/serialize.js +0 -4
- package/dist/schema/serialize.js.map +1 -1
- package/dist/schema/tenancy.d.ts +1 -1
- package/dist/server/adapter.d.ts +1 -1
- package/dist/server/adapter.d.ts.map +1 -1
- package/dist/server/commit.d.ts +6 -14
- package/dist/server/commit.d.ts.map +1 -1
- package/dist/server/index.d.ts +1 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +1 -1
- package/dist/server/index.js.map +1 -1
- package/dist/server/storageMode.d.ts +1 -1
- package/dist/source/{adapter.d.ts → adapters/adapter.d.ts} +10 -4
- package/dist/source/adapters/adapter.d.ts.map +1 -0
- package/dist/source/adapters/adapter.js.map +1 -0
- package/dist/source/adapters/adapterFactory.d.ts.map +1 -0
- package/dist/source/{adapterFactory.js → adapters/adapterFactory.js} +1 -1
- package/dist/source/adapters/adapterFactory.js.map +1 -0
- package/dist/source/adapters/adapterProfile.d.ts.map +1 -0
- package/dist/source/adapters/adapterProfile.js.map +1 -0
- package/dist/source/{conformance.d.ts → adapters/conformance.d.ts} +1 -1
- package/dist/source/adapters/conformance.d.ts.map +1 -0
- package/dist/source/{conformance.js → adapters/conformance.js} +1 -1
- package/dist/source/adapters/conformance.js.map +1 -0
- package/dist/source/{contract.d.ts → adapters/contract.d.ts} +8 -77
- package/dist/source/adapters/contract.d.ts.map +1 -0
- package/dist/source/{contract.js → adapters/contract.js} +12 -57
- package/dist/source/adapters/contract.js.map +1 -0
- package/dist/source/adapters/drizzle.d.ts +1 -1
- package/dist/source/adapters/drizzle.d.ts.map +1 -1
- package/dist/source/adapters/drizzle.js +21 -23
- package/dist/source/adapters/drizzle.js.map +1 -1
- package/dist/source/adapters/idempotency.d.ts.map +1 -0
- package/dist/source/{idempotency.js → adapters/idempotency.js} +2 -2
- package/dist/source/adapters/idempotency.js.map +1 -0
- package/dist/source/adapters/index.d.ts +21 -0
- package/dist/source/adapters/index.d.ts.map +1 -0
- package/dist/source/adapters/index.js +21 -0
- package/dist/source/adapters/index.js.map +1 -0
- package/dist/source/adapters/kysely.d.ts +1 -1
- package/dist/source/adapters/kysely.d.ts.map +1 -1
- package/dist/source/adapters/kysely.js +18 -20
- package/dist/source/adapters/kysely.js.map +1 -1
- package/dist/source/adapters/kyselyMutationCore.d.ts +2 -2
- package/dist/source/adapters/kyselyMutationCore.d.ts.map +1 -1
- package/dist/source/adapters/kyselyMutationCore.js +1 -1
- package/dist/source/adapters/kyselyMutationCore.js.map +1 -1
- package/dist/source/adapters/memory.d.ts +3 -3
- package/dist/source/adapters/memory.d.ts.map +1 -1
- package/dist/source/adapters/memory.js +19 -7
- package/dist/source/adapters/memory.js.map +1 -1
- package/dist/source/adapters/migration.d.ts +8 -0
- package/dist/source/adapters/migration.d.ts.map +1 -0
- package/dist/source/adapters/migration.js +9 -0
- package/dist/source/adapters/migration.js.map +1 -0
- package/dist/source/{migrations.d.ts → adapters/migrations.d.ts} +3 -4
- package/dist/source/adapters/migrations.d.ts.map +1 -0
- package/dist/source/{migrations.js → adapters/migrations.js} +4 -52
- package/dist/source/adapters/migrations.js.map +1 -0
- package/dist/source/adapters/prisma.d.ts +1 -1
- package/dist/source/adapters/prisma.d.ts.map +1 -1
- package/dist/source/adapters/prisma.js +21 -28
- package/dist/source/adapters/prisma.js.map +1 -1
- package/dist/source/{subjectAuthorization.d.ts → adapters/subjectAuthorization.d.ts} +1 -1
- package/dist/source/adapters/subjectAuthorization.d.ts.map +1 -0
- package/dist/source/{subjectAuthorization.js → adapters/subjectAuthorization.js} +2 -2
- package/dist/source/adapters/subjectAuthorization.js.map +1 -0
- package/dist/source/{connector.d.ts → connector/client.d.ts} +6 -1
- package/dist/source/connector/client.d.ts.map +1 -0
- package/dist/source/{connector.js → connector/client.js} +28 -11
- package/dist/source/connector/client.js.map +1 -0
- package/dist/source/connector/index.d.ts +4 -0
- package/dist/source/connector/index.d.ts.map +1 -0
- package/dist/source/connector/index.js +4 -0
- package/dist/source/connector/index.js.map +1 -0
- package/dist/source/{connectorProtocol.d.ts → connector/protocol.d.ts} +8 -1
- package/dist/source/connector/protocol.d.ts.map +1 -0
- package/dist/source/{connectorProtocol.js → connector/protocol.js} +10 -3
- package/dist/source/connector/protocol.js.map +1 -0
- package/dist/source/delivery/index.d.ts +3 -0
- package/dist/source/delivery/index.d.ts.map +1 -0
- package/dist/source/delivery/index.js +3 -0
- package/dist/source/delivery/index.js.map +1 -0
- package/dist/source/{pushQueue.d.ts → delivery/pushQueue.d.ts} +1 -1
- package/dist/source/delivery/pushQueue.d.ts.map +1 -0
- package/dist/source/{pushQueue.js → delivery/pushQueue.js} +1 -1
- package/dist/source/delivery/pushQueue.js.map +1 -0
- package/dist/source/{factory.d.ts → endpoint/factory.d.ts} +3 -3
- package/dist/source/endpoint/factory.d.ts.map +1 -0
- package/dist/source/{factory.js → endpoint/factory.js} +9 -4
- package/dist/source/endpoint/factory.js.map +1 -0
- package/dist/source/endpoint/index.d.ts +5 -0
- package/dist/source/endpoint/index.d.ts.map +1 -0
- package/dist/source/endpoint/index.js +5 -0
- package/dist/source/endpoint/index.js.map +1 -0
- package/dist/source/{next.d.ts → endpoint/next.d.ts} +2 -2
- package/dist/source/endpoint/next.d.ts.map +1 -0
- package/dist/source/{next.js → endpoint/next.js} +1 -1
- package/dist/source/endpoint/next.js.map +1 -0
- package/dist/source/{signing.d.ts → endpoint/signing.d.ts} +1 -1
- package/dist/source/endpoint/signing.d.ts.map +1 -0
- package/dist/source/{signing.js → endpoint/signing.js} +1 -1
- package/dist/source/endpoint/signing.js.map +1 -0
- package/dist/source/index.d.ts +14 -12
- package/dist/source/index.d.ts.map +1 -1
- package/dist/source/index.js +13 -11
- package/dist/source/index.js.map +1 -1
- package/dist/source/outbox/contract.d.ts +50 -0
- package/dist/source/outbox/contract.d.ts.map +1 -0
- package/dist/source/outbox/contract.js +50 -0
- package/dist/source/outbox/contract.js.map +1 -0
- package/dist/source/outbox/envelope.d.ts +9 -0
- package/dist/source/outbox/envelope.d.ts.map +1 -0
- package/dist/source/outbox/envelope.js +36 -0
- package/dist/source/outbox/envelope.js.map +1 -0
- package/dist/source/outbox/index.d.ts +11 -0
- package/dist/source/outbox/index.d.ts.map +1 -0
- package/dist/source/outbox/index.js +11 -0
- package/dist/source/outbox/index.js.map +1 -0
- package/dist/source/outbox/migrations.d.ts +4 -0
- package/dist/source/outbox/migrations.d.ts.map +1 -0
- package/dist/source/outbox/migrations.js +67 -0
- package/dist/source/outbox/migrations.js.map +1 -0
- package/dist/source/outbox/retention.d.ts +3 -0
- package/dist/source/outbox/retention.d.ts.map +1 -0
- package/dist/source/outbox/retention.js +3 -0
- package/dist/source/outbox/retention.js.map +1 -0
- package/dist/source/types.d.ts +16 -17
- package/dist/source/types.d.ts.map +1 -1
- package/dist/source/types.js +1 -0
- package/dist/source/types.js.map +1 -1
- package/dist/syncLog/contract.d.ts +19 -2
- package/dist/syncLog/contract.d.ts.map +1 -1
- package/dist/syncLog/contract.js +19 -2
- package/dist/syncLog/contract.js.map +1 -1
- package/dist/transport/{credentialLifecycle.d.ts → connection/credentialLifecycle.d.ts} +3 -3
- package/dist/transport/connection/credentialLifecycle.d.ts.map +1 -0
- package/dist/transport/{credentialLifecycle.js → connection/credentialLifecycle.js} +2 -2
- package/dist/transport/connection/credentialLifecycle.js.map +1 -0
- package/dist/transport/connection/index.d.ts +5 -0
- package/dist/transport/connection/index.d.ts.map +1 -0
- package/dist/transport/connection/index.js +5 -0
- package/dist/transport/connection/index.js.map +1 -0
- package/dist/transport/{connectionManager.d.ts → connection/manager.d.ts} +13 -5
- package/dist/transport/connection/manager.d.ts.map +1 -0
- package/dist/transport/{connectionManager.js → connection/manager.js} +6 -4
- package/dist/transport/connection/manager.js.map +1 -0
- package/dist/transport/{networkProbe.d.ts → connection/networkProbe.d.ts} +2 -2
- package/dist/transport/connection/networkProbe.d.ts.map +1 -0
- package/dist/transport/{networkProbe.js → connection/networkProbe.js} +4 -4
- package/dist/transport/connection/networkProbe.js.map +1 -0
- package/dist/transport/{httpClient.d.ts → http/client.d.ts} +26 -45
- package/dist/transport/http/client.d.ts.map +1 -0
- package/dist/transport/{httpClient.js → http/client.js} +84 -124
- package/dist/transport/http/client.js.map +1 -0
- package/dist/transport/{httpTransportHelpers.d.ts → http/helpers.d.ts} +5 -5
- package/dist/transport/http/helpers.d.ts.map +1 -0
- package/dist/transport/{httpTransportHelpers.js → http/helpers.js} +5 -5
- package/dist/transport/http/helpers.js.map +1 -0
- package/dist/transport/http/index.d.ts +6 -0
- package/dist/transport/http/index.d.ts.map +1 -0
- package/dist/transport/http/index.js +6 -0
- package/dist/transport/http/index.js.map +1 -0
- package/dist/transport/{httpOptions.d.ts → http/options.d.ts} +7 -7
- package/dist/transport/{httpOptions.d.ts.map → http/options.d.ts.map} +1 -1
- package/dist/transport/{httpOptions.js → http/options.js} +1 -1
- package/dist/transport/http/options.js.map +1 -0
- package/dist/transport/http/subscription.d.ts +16 -0
- package/dist/transport/http/subscription.d.ts.map +1 -0
- package/dist/transport/http/subscription.js +146 -0
- package/dist/transport/http/subscription.js.map +1 -0
- package/dist/transport/{httpTransport.d.ts → http/transport.d.ts} +9 -6
- package/dist/transport/http/transport.d.ts.map +1 -0
- package/dist/transport/{httpTransport.js → http/transport.js} +95 -93
- package/dist/transport/http/transport.js.map +1 -0
- package/dist/transport/index.d.ts +8 -0
- package/dist/transport/index.d.ts.map +1 -0
- package/dist/transport/index.js +8 -0
- package/dist/transport/index.js.map +1 -0
- package/dist/transport/{commitFrames.d.ts → websocket/commitFrames.d.ts} +8 -20
- package/dist/transport/websocket/commitFrames.d.ts.map +1 -0
- package/dist/transport/{commitFrames.js → websocket/commitFrames.js} +6 -25
- package/dist/transport/websocket/commitFrames.js.map +1 -0
- package/dist/transport/{wsFrameHandlers.d.ts → websocket/frameHandlers.d.ts} +5 -5
- package/dist/transport/websocket/frameHandlers.d.ts.map +1 -0
- package/dist/transport/{wsFrameHandlers.js → websocket/frameHandlers.js} +10 -51
- package/dist/transport/websocket/frameHandlers.js.map +1 -0
- package/dist/transport/{heartbeat.d.ts → websocket/heartbeat.d.ts} +1 -1
- package/dist/transport/websocket/heartbeat.d.ts.map +1 -0
- package/dist/transport/{heartbeat.js → websocket/heartbeat.js} +2 -2
- package/dist/transport/websocket/heartbeat.js.map +1 -0
- package/dist/transport/websocket/index.d.ts +6 -0
- package/dist/transport/websocket/index.d.ts.map +1 -0
- package/dist/transport/websocket/index.js +6 -0
- package/dist/transport/websocket/index.js.map +1 -0
- package/dist/transport/{wsTransport.d.ts → websocket/transport.d.ts} +13 -25
- package/dist/transport/websocket/transport.d.ts.map +1 -0
- package/dist/transport/{wsTransport.js → websocket/transport.js} +14 -14
- package/dist/transport/websocket/transport.js.map +1 -0
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/streams.d.ts +8 -48
- package/dist/types/streams.d.ts.map +1 -1
- package/dist/types/streams.js +2 -2
- package/dist/wire/accountResponses.d.ts +4 -72
- package/dist/wire/accountResponses.d.ts.map +1 -1
- package/dist/wire/accountResponses.js +2 -10
- package/dist/wire/accountResponses.js.map +1 -1
- package/dist/wire/frames.d.ts +6 -83
- package/dist/wire/frames.d.ts.map +1 -1
- package/dist/wire/frames.js +4 -11
- package/dist/wire/frames.js.map +1 -1
- package/dist/wire/inboundFrames.d.ts +6 -131
- package/dist/wire/inboundFrames.d.ts.map +1 -1
- package/dist/wire/inboundFrames.js +3 -3
- package/dist/wire/inboundFrames.js.map +1 -1
- package/dist/wire/index.d.ts +17 -15
- package/dist/wire/index.d.ts.map +1 -1
- package/dist/wire/index.js +11 -8
- package/dist/wire/index.js.map +1 -1
- package/dist/wire/modelMutations.d.ts +1 -32
- package/dist/wire/modelMutations.d.ts.map +1 -1
- package/dist/wire/modelMutations.js +1 -8
- package/dist/wire/modelMutations.js.map +1 -1
- package/package.json +130 -10
- package/src/ai-sdk/modelTools.ts +5 -5
- package/src/ai-sdk/updateTool.ts +5 -7
- package/src/auth/capability.ts +5 -0
- package/src/auth/capabilityLifecycle.ts +1 -1
- package/src/auth/credentialPolicy.ts +1 -1
- package/src/auth/identity.ts +7 -7
- package/src/auth/index.ts +4 -663
- package/src/auth/runtime.ts +669 -0
- package/src/auth/sessionMint.ts +3 -2
- package/src/branches.ts +3 -0
- package/src/{coordination/awaitClaimGrant.ts → claims/awaitGrant.ts} +4 -4
- package/src/{wire/claims.ts → claims/contract.ts} +1 -1
- package/src/{coordination → claims}/events.ts +7 -11
- package/src/claims/index.ts +21 -0
- package/src/claims/lifetime.ts +78 -0
- package/src/{coordination → claims}/locator.ts +3 -3
- package/src/claims/routes.ts +81 -0
- package/src/{coordination → claims}/trace.ts +5 -5
- package/src/{ablo.ts → client/ablo.ts} +8 -20
- package/src/{transactionLayer.ts → client/contract.ts} +11 -13
- package/src/{headlessClient.ts → client/headless.ts} +13 -15
- package/src/client/index.ts +10 -0
- package/src/{resources → client/resources}/functionalUpdate.ts +4 -4
- package/src/{resources → client/resources}/httpResources.ts +48 -68
- package/src/{resources → client/resources}/modelCreate.ts +2 -2
- package/src/{resources → client/resources}/modelOperations.ts +46 -55
- package/src/{resources → client/resources}/mutationOptions.ts +4 -17
- package/src/{resources → client/resources}/where.ts +1 -1
- package/src/{resources → client/resources}/writeOptionsSchema.ts +7 -27
- package/src/{transactions → commit}/confirmation/commitEnvelope.ts +2 -12
- package/src/{transactions → commit}/confirmation/httpCommitEnvelope.ts +1 -1
- package/src/{transactions → commit}/confirmation/pendingWrite.ts +1 -1
- package/src/{wire/commit.ts → commit/contract.ts} +11 -25
- package/src/{durableWrites.ts → commit/durableWrites.ts} +7 -7
- package/src/{transport/httpCommitRequest.ts → commit/httpRequest.ts} +6 -7
- package/src/commit/index.ts +16 -0
- package/src/{readSetContext.ts → commit/readSetContext.ts} +16 -41
- package/src/{commitRecordRuntime.ts → commit/recordRuntime.ts} +12 -67
- package/src/coordination/index.ts +4 -52
- package/src/coordination/schema.ts +15 -302
- package/src/errorCodes.ts +56 -10
- package/src/errors.ts +32 -10
- package/src/index.ts +8 -8
- package/src/internal/read-set.ts +3 -6
- package/src/observability.ts +4 -4
- package/src/{wire/delta.ts → observation/contract.ts} +2 -2
- package/src/{wire/feedEvent.ts → observation/feedContract.ts} +3 -4
- package/src/{transport → observation}/httpFeed.ts +3 -3
- package/src/observation/index.ts +12 -0
- package/src/{log → observation/persistence}/syncDeltaRow.ts +6 -7
- package/src/pricing.ts +46 -25
- package/src/schema/index.ts +4 -20
- package/src/schema/model.ts +0 -33
- package/src/schema/openapi.ts +47 -7
- package/src/schema/schema.ts +23 -3
- package/src/schema/serialize.ts +0 -8
- package/src/server/adapter.ts +1 -1
- package/src/server/commit.ts +6 -14
- package/src/server/index.ts +1 -1
- package/src/source/{adapter.ts → adapters/adapter.ts} +9 -5
- package/src/source/{adapterFactory.ts → adapters/adapterFactory.ts} +1 -1
- package/src/source/{conformance.ts → adapters/conformance.ts} +1 -1
- package/src/source/{contract.ts → adapters/contract.ts} +16 -64
- package/src/source/adapters/drizzle.ts +29 -27
- package/src/source/{idempotency.ts → adapters/idempotency.ts} +2 -2
- package/src/source/adapters/index.ts +20 -0
- package/src/source/adapters/kysely.ts +32 -25
- package/src/source/adapters/kyselyMutationCore.ts +3 -3
- package/src/source/adapters/memory.ts +25 -9
- package/src/source/adapters/migration.ts +11 -0
- package/src/source/{migrations.ts → adapters/migrations.ts} +6 -54
- package/src/source/adapters/prisma.ts +33 -32
- package/src/source/{subjectAuthorization.ts → adapters/subjectAuthorization.ts} +2 -2
- package/src/source/{connector.ts → connector/client.ts} +35 -12
- package/src/source/connector/index.ts +3 -0
- package/src/source/{connectorProtocol.ts → connector/protocol.ts} +10 -2
- package/src/source/delivery/index.ts +2 -0
- package/src/source/{pushQueue.ts → delivery/pushQueue.ts} +2 -2
- package/src/source/{factory.ts → endpoint/factory.ts} +13 -8
- package/src/source/endpoint/index.ts +4 -0
- package/src/source/{next.ts → endpoint/next.ts} +2 -2
- package/src/source/{signing.ts → endpoint/signing.ts} +1 -1
- package/src/source/index.ts +22 -19
- package/src/source/outbox/contract.ts +56 -0
- package/src/source/outbox/envelope.ts +47 -0
- package/src/source/outbox/index.ts +15 -0
- package/src/source/outbox/migrations.ts +71 -0
- package/src/source/outbox/retention.ts +2 -0
- package/src/source/types.ts +17 -17
- package/src/syncLog/contract.ts +19 -2
- package/src/transport/{credentialLifecycle.ts → connection/credentialLifecycle.ts} +3 -3
- package/src/transport/connection/index.ts +4 -0
- package/src/transport/{connectionManager.ts → connection/manager.ts} +13 -4
- package/src/transport/{networkProbe.ts → connection/networkProbe.ts} +4 -4
- package/src/transport/{httpClient.ts → http/client.ts} +128 -209
- package/src/transport/{httpTransportHelpers.ts → http/helpers.ts} +7 -7
- package/src/transport/http/index.ts +5 -0
- package/src/transport/{httpOptions.ts → http/options.ts} +6 -6
- package/src/transport/http/subscription.ts +174 -0
- package/src/transport/{httpTransport.ts → http/transport.ts} +127 -113
- package/src/transport/index.ts +7 -0
- package/src/transport/{commitFrames.ts → websocket/commitFrames.ts} +14 -46
- package/src/transport/{wsFrameHandlers.ts → websocket/frameHandlers.ts} +11 -54
- package/src/transport/{heartbeat.ts → websocket/heartbeat.ts} +2 -2
- package/src/transport/websocket/index.ts +5 -0
- package/src/transport/{wsTransport.ts → websocket/transport.ts} +16 -30
- package/src/types/index.ts +2 -6
- package/src/types/streams.ts +7 -61
- package/src/webhooks/events.ts +1 -1
- package/src/wire/accountResponses.ts +3 -12
- package/src/wire/frames.ts +5 -15
- package/src/wire/inboundFrames.ts +3 -3
- package/src/wire/index.ts +19 -15
- package/src/wire/modelMutations.ts +1 -14
- package/dist/ablo.d.ts.map +0 -1
- package/dist/ablo.js.map +0 -1
- package/dist/commitRecordRuntime.d.ts.map +0 -1
- package/dist/commitRecordRuntime.js.map +0 -1
- package/dist/coordination/awaitClaimGrant.d.ts.map +0 -1
- package/dist/coordination/awaitClaimGrant.js.map +0 -1
- package/dist/coordination/claimHeartbeatLoop.d.ts.map +0 -1
- package/dist/coordination/claimHeartbeatLoop.js.map +0 -1
- package/dist/coordination/claimMeta.d.ts.map +0 -1
- package/dist/coordination/claimMeta.js.map +0 -1
- package/dist/coordination/events.d.ts.map +0 -1
- package/dist/coordination/events.js +0 -8
- package/dist/coordination/events.js.map +0 -1
- package/dist/coordination/locator.d.ts.map +0 -1
- package/dist/coordination/locator.js.map +0 -1
- package/dist/coordination/targetConflict.d.ts.map +0 -1
- package/dist/coordination/targetConflict.js.map +0 -1
- package/dist/coordination/trace.d.ts.map +0 -1
- package/dist/coordination/trace.js.map +0 -1
- package/dist/durableWrites.d.ts.map +0 -1
- package/dist/durableWrites.js.map +0 -1
- package/dist/headlessClient.d.ts.map +0 -1
- package/dist/log/syncDeltaRow.d.ts.map +0 -1
- package/dist/log/syncDeltaRow.js.map +0 -1
- package/dist/policy/types.d.ts +0 -226
- package/dist/policy/types.d.ts.map +0 -1
- package/dist/policy/types.js +0 -127
- package/dist/policy/types.js.map +0 -1
- package/dist/readSetContext.d.ts.map +0 -1
- package/dist/readSetContext.js.map +0 -1
- package/dist/resources/functionalUpdate.d.ts.map +0 -1
- package/dist/resources/functionalUpdate.js.map +0 -1
- package/dist/resources/httpResources.d.ts.map +0 -1
- package/dist/resources/httpResources.js.map +0 -1
- package/dist/resources/modelCreate.d.ts.map +0 -1
- package/dist/resources/modelCreate.js.map +0 -1
- package/dist/resources/modelOperations.d.ts.map +0 -1
- package/dist/resources/modelOperations.js.map +0 -1
- package/dist/resources/mutationOptions.d.ts.map +0 -1
- package/dist/resources/mutationOptions.js.map +0 -1
- package/dist/resources/where.d.ts.map +0 -1
- package/dist/resources/where.js.map +0 -1
- package/dist/resources/writeOptionsSchema.d.ts.map +0 -1
- package/dist/resources/writeOptionsSchema.js.map +0 -1
- package/dist/schema/coordination.d.ts +0 -113
- package/dist/schema/coordination.d.ts.map +0 -1
- package/dist/schema/coordination.js +0 -134
- package/dist/schema/coordination.js.map +0 -1
- package/dist/source/adapter.d.ts.map +0 -1
- package/dist/source/adapter.js.map +0 -1
- package/dist/source/adapterFactory.d.ts.map +0 -1
- package/dist/source/adapterFactory.js.map +0 -1
- package/dist/source/adapterProfile.d.ts.map +0 -1
- package/dist/source/adapterProfile.js.map +0 -1
- package/dist/source/conformance.d.ts.map +0 -1
- package/dist/source/conformance.js.map +0 -1
- package/dist/source/connector.d.ts.map +0 -1
- package/dist/source/connector.js.map +0 -1
- package/dist/source/connectorProtocol.d.ts.map +0 -1
- package/dist/source/connectorProtocol.js.map +0 -1
- package/dist/source/contract.d.ts.map +0 -1
- package/dist/source/contract.js.map +0 -1
- package/dist/source/drizzle.d.ts +0 -2
- package/dist/source/drizzle.d.ts.map +0 -1
- package/dist/source/drizzle.js +0 -2
- package/dist/source/drizzle.js.map +0 -1
- package/dist/source/factory.d.ts.map +0 -1
- package/dist/source/factory.js.map +0 -1
- package/dist/source/idempotency.d.ts.map +0 -1
- package/dist/source/idempotency.js.map +0 -1
- package/dist/source/kysely.d.ts +0 -3
- package/dist/source/kysely.d.ts.map +0 -1
- package/dist/source/kysely.js +0 -3
- package/dist/source/kysely.js.map +0 -1
- package/dist/source/migrations.d.ts.map +0 -1
- package/dist/source/migrations.js.map +0 -1
- package/dist/source/next.d.ts.map +0 -1
- package/dist/source/next.js.map +0 -1
- package/dist/source/pushQueue.d.ts.map +0 -1
- package/dist/source/pushQueue.js.map +0 -1
- package/dist/source/signing.d.ts.map +0 -1
- package/dist/source/signing.js.map +0 -1
- package/dist/source/subjectAuthorization.d.ts.map +0 -1
- package/dist/source/subjectAuthorization.js.map +0 -1
- package/dist/transactionLayer.d.ts.map +0 -1
- package/dist/transactionLayer.js.map +0 -1
- package/dist/transactions/confirmation/commitEnvelope.d.ts.map +0 -1
- package/dist/transactions/confirmation/commitEnvelope.js.map +0 -1
- package/dist/transactions/confirmation/httpCommitEnvelope.d.ts.map +0 -1
- package/dist/transactions/confirmation/httpCommitEnvelope.js.map +0 -1
- package/dist/transactions/confirmation/idempotencyKey.d.ts.map +0 -1
- package/dist/transactions/confirmation/idempotencyKey.js.map +0 -1
- package/dist/transactions/confirmation/pendingWrite.d.ts.map +0 -1
- package/dist/transactions/confirmation/pendingWrite.js.map +0 -1
- package/dist/transport/commitFrames.d.ts.map +0 -1
- package/dist/transport/commitFrames.js.map +0 -1
- package/dist/transport/connectionManager.d.ts.map +0 -1
- package/dist/transport/connectionManager.js.map +0 -1
- package/dist/transport/credentialLifecycle.d.ts.map +0 -1
- package/dist/transport/credentialLifecycle.js.map +0 -1
- package/dist/transport/heartbeat.d.ts.map +0 -1
- package/dist/transport/heartbeat.js.map +0 -1
- package/dist/transport/httpClient.d.ts.map +0 -1
- package/dist/transport/httpClient.js.map +0 -1
- package/dist/transport/httpCommitRequest.d.ts.map +0 -1
- package/dist/transport/httpCommitRequest.js.map +0 -1
- package/dist/transport/httpFeed.d.ts +0 -4
- package/dist/transport/httpFeed.d.ts.map +0 -1
- package/dist/transport/httpOptions.js.map +0 -1
- package/dist/transport/httpTransport.d.ts.map +0 -1
- package/dist/transport/httpTransport.js.map +0 -1
- package/dist/transport/httpTransportHelpers.d.ts.map +0 -1
- package/dist/transport/httpTransportHelpers.js.map +0 -1
- package/dist/transport/networkProbe.d.ts.map +0 -1
- package/dist/transport/networkProbe.js.map +0 -1
- package/dist/transport/wsFrameHandlers.d.ts.map +0 -1
- package/dist/transport/wsFrameHandlers.js.map +0 -1
- package/dist/transport/wsTransport.d.ts.map +0 -1
- package/dist/transport/wsTransport.js.map +0 -1
- package/dist/wire/claimEvent.d.ts.map +0 -1
- package/dist/wire/claimEvent.js.map +0 -1
- package/dist/wire/claims.d.ts.map +0 -1
- package/dist/wire/claims.js.map +0 -1
- package/dist/wire/commit.d.ts +0 -2866
- package/dist/wire/commit.d.ts.map +0 -1
- package/dist/wire/commit.js.map +0 -1
- package/dist/wire/delta.d.ts.map +0 -1
- package/dist/wire/delta.js.map +0 -1
- package/dist/wire/deltaDelivery.d.ts.map +0 -1
- package/dist/wire/deltaDelivery.js.map +0 -1
- package/dist/wire/feedCursor.d.ts.map +0 -1
- package/dist/wire/feedCursor.js.map +0 -1
- package/dist/wire/feedEvent.d.ts.map +0 -1
- package/dist/wire/feedEvent.js.map +0 -1
- package/src/policy/types.ts +0 -300
- package/src/schema/coordination.ts +0 -161
- package/src/source/drizzle.ts +0 -1
- package/src/source/kysely.ts +0 -2
- /package/dist/{coordination → claims}/targetConflict.d.ts +0 -0
- /package/dist/{coordination → claims}/targetConflict.js +0 -0
- /package/dist/{resources → client/resources}/mutationOptions.js +0 -0
- /package/dist/{resources → client/resources}/where.d.ts +0 -0
- /package/dist/{transactions → commit}/confirmation/httpCommitEnvelope.d.ts +0 -0
- /package/dist/{transactions → commit}/confirmation/idempotencyKey.d.ts +0 -0
- /package/dist/{transactions → commit}/confirmation/idempotencyKey.js +0 -0
- /package/dist/source/{adapter.js → adapters/adapter.js} +0 -0
- /package/dist/source/{adapterFactory.d.ts → adapters/adapterFactory.d.ts} +0 -0
- /package/dist/source/{adapterProfile.d.ts → adapters/adapterProfile.d.ts} +0 -0
- /package/dist/source/{adapterProfile.js → adapters/adapterProfile.js} +0 -0
- /package/dist/source/{idempotency.d.ts → adapters/idempotency.d.ts} +0 -0
- /package/src/{wire/claimEvent.ts → claims/eventContract.ts} +0 -0
- /package/src/{coordination/claimHeartbeatLoop.ts → claims/heartbeat.ts} +0 -0
- /package/src/{coordination/claimMeta.ts → claims/meta.ts} +0 -0
- /package/src/{coordination → claims}/targetConflict.ts +0 -0
- /package/src/{transactions → commit}/confirmation/idempotencyKey.ts +0 -0
- /package/src/{wire/feedCursor.ts → observation/cursor.ts} +0 -0
- /package/src/{wire/deltaDelivery.ts → observation/deliveryContract.ts} +0 -0
- /package/src/source/{adapterProfile.ts → adapters/adapterProfile.ts} +0 -0
|
@@ -16,13 +16,13 @@ import {
|
|
|
16
16
|
AbloNotFoundError,
|
|
17
17
|
claimedError,
|
|
18
18
|
translateHttpError,
|
|
19
|
-
} from '
|
|
19
|
+
} from '../../errors.js';
|
|
20
20
|
import { z } from 'zod';
|
|
21
21
|
import {
|
|
22
22
|
reconcileFunctionalUpdate,
|
|
23
23
|
type ModelUpdater,
|
|
24
24
|
type FunctionalUpdateOptions,
|
|
25
|
-
} from '
|
|
25
|
+
} from '../../client/resources/functionalUpdate.js';
|
|
26
26
|
import {
|
|
27
27
|
assertBrowserSafety,
|
|
28
28
|
readProcessEnv,
|
|
@@ -33,41 +33,42 @@ import {
|
|
|
33
33
|
resolveBootstrapBaseUrl,
|
|
34
34
|
rejectRemovedDatabaseUrlOption,
|
|
35
35
|
warnIfCliKeyMismatch,
|
|
36
|
-
} from '
|
|
37
|
-
import { PROTOCOL_VERSION, PROTOCOL_VERSION_HEADER } from '
|
|
36
|
+
} from '../../auth/apiKey.js';
|
|
37
|
+
import { PROTOCOL_VERSION, PROTOCOL_VERSION_HEADER } from '../../wire/protocolVersion.js';
|
|
38
38
|
import {
|
|
39
39
|
commitRecordSchema,
|
|
40
40
|
commitRecordListSchema,
|
|
41
41
|
commitRecordListOptionsSchema,
|
|
42
42
|
commitRecordWhereSchema,
|
|
43
43
|
type CommitReceiptWire,
|
|
44
|
-
} from '
|
|
45
|
-
import { logListResponseSchema } from '
|
|
44
|
+
} from '../../commit/contract.js';
|
|
45
|
+
import { logListResponseSchema } from '../../observation/feedContract.js';
|
|
46
46
|
import {
|
|
47
47
|
claimAcquireResponseSchema,
|
|
48
48
|
claimHeartbeatBatchReplySchema,
|
|
49
49
|
claimHeartbeatReplySchema,
|
|
50
50
|
claimListResponseSchema,
|
|
51
51
|
claimStateSchema,
|
|
52
|
+
DEFAULT_CLAIM_TTL_MS,
|
|
52
53
|
type ClaimHeartbeatReply,
|
|
53
54
|
type ClaimListResponse,
|
|
54
55
|
type ClaimQueuedResponse,
|
|
55
56
|
type ClaimRequest,
|
|
56
57
|
type ClaimState,
|
|
57
58
|
type ClaimTargetBody,
|
|
58
|
-
} from '
|
|
59
|
+
} from '../../claims/contract.js';
|
|
59
60
|
import {
|
|
60
61
|
modelListResponseSchema,
|
|
61
62
|
modelReadResponseSchema,
|
|
62
|
-
} from '
|
|
63
|
-
import { toMs } from '
|
|
63
|
+
} from '../../wire/modelResponses.js';
|
|
64
|
+
import { toMs } from '../../utils/duration.js';
|
|
64
65
|
import {
|
|
65
66
|
heartbeatCadenceMs,
|
|
66
67
|
resolveHeartbeatOptions,
|
|
67
68
|
resolveHeartbeatPlan,
|
|
68
69
|
startClaimHeartbeatLoop,
|
|
69
|
-
} from '
|
|
70
|
-
import type { HttpClientConfig } from './
|
|
70
|
+
} from '../../claims/heartbeat.js';
|
|
71
|
+
import type { HttpClientConfig } from './options.js';
|
|
71
72
|
import type {
|
|
72
73
|
ClaimedOptions,
|
|
73
74
|
CommitCreateOptions,
|
|
@@ -79,7 +80,7 @@ import type {
|
|
|
79
80
|
HttpClaimsResource,
|
|
80
81
|
HttpTransportModel,
|
|
81
82
|
ModelClaim,
|
|
82
|
-
ModelMutationOptions,
|
|
83
|
+
InternalModelMutationOptions as ModelMutationOptions,
|
|
83
84
|
ModelReadOptions,
|
|
84
85
|
HttpTransportRead,
|
|
85
86
|
HttpTransportList,
|
|
@@ -88,64 +89,68 @@ import type {
|
|
|
88
89
|
CreateSessionParams,
|
|
89
90
|
AbloSession,
|
|
90
91
|
SessionResource,
|
|
91
|
-
} from '
|
|
92
|
-
import { mintSession } from '
|
|
92
|
+
} from '../../client/resources/httpResources.js';
|
|
93
|
+
import { mintSession } from '../../auth/sessionMint.js';
|
|
93
94
|
import {
|
|
94
95
|
revokeCapability,
|
|
95
96
|
rotateCapability,
|
|
96
|
-
} from '
|
|
97
|
-
import { parseIdentityResolveResponse } from '
|
|
98
|
-
import type { EffectiveAuthority } from '
|
|
97
|
+
} from '../../auth/capabilityLifecycle.js';
|
|
98
|
+
import { parseIdentityResolveResponse } from '../../auth/schemas.js';
|
|
99
|
+
import type { EffectiveAuthority } from '../../auth/capability.js';
|
|
99
100
|
|
|
100
101
|
import {
|
|
101
102
|
claimFromModelClaim,
|
|
102
103
|
heldHeartbeatReply,
|
|
103
104
|
parseSuccessfulCommitResponse,
|
|
104
|
-
} from './
|
|
105
|
-
import type { SchemaRecord } from '
|
|
105
|
+
} from './helpers.js';
|
|
106
|
+
import type { SchemaRecord } from '../../schema/schema.js';
|
|
106
107
|
import type {
|
|
107
108
|
ClaimLookupParams,
|
|
108
109
|
ClaimOptions,
|
|
109
110
|
ClaimParams,
|
|
110
111
|
ClaimSkipParams,
|
|
112
|
+
ClaimSkipOptions,
|
|
111
113
|
ClaimReorderParams,
|
|
112
|
-
ModelTrackParams,
|
|
113
|
-
ModelTrackResult,
|
|
114
114
|
ModelCreateManyParams,
|
|
115
115
|
ServerReadOptions,
|
|
116
116
|
ResolvedClaimContentionOptions,
|
|
117
117
|
ClaimQueueView,
|
|
118
|
-
} from '
|
|
118
|
+
} from '../../client/resources/modelOperations.js';
|
|
119
119
|
import {
|
|
120
120
|
claimAttemptFailure,
|
|
121
121
|
claimQueueView,
|
|
122
122
|
emitClaimStatus,
|
|
123
123
|
resolveClaimContentionOptions,
|
|
124
|
-
} from '
|
|
125
|
-
import type { Duration } from '
|
|
126
|
-
import
|
|
127
|
-
import {
|
|
128
|
-
import type { BatchFence } from '../coordination/locator.js';
|
|
124
|
+
} from '../../client/resources/modelOperations.js';
|
|
125
|
+
import type { Duration } from '../../utils/duration.js';
|
|
126
|
+
import { claimDescription, partName } from '../../coordination/schema.js';
|
|
127
|
+
import type { BatchFence } from '../../claims/locator.js';
|
|
129
128
|
import {
|
|
130
129
|
subTarget,
|
|
131
130
|
streamTarget,
|
|
132
131
|
batchFence,
|
|
133
132
|
claimIdFor,
|
|
134
133
|
fenceTokenFor,
|
|
135
|
-
} from '
|
|
136
|
-
import { declaredMeta, wireMeta } from '
|
|
137
|
-
import type {
|
|
138
|
-
|
|
134
|
+
} from '../../claims/locator.js';
|
|
135
|
+
import { declaredMeta, wireMeta } from '../../claims/meta.js';
|
|
136
|
+
import type {
|
|
137
|
+
Claim,
|
|
138
|
+
ClaimHeartbeat,
|
|
139
|
+
ClaimHeartbeatOptions,
|
|
140
|
+
HeldClaim,
|
|
141
|
+
HeldLease,
|
|
142
|
+
} from '../../types/streams.js';
|
|
143
|
+
import type { CoordinationObservability } from '../../observability.js';
|
|
139
144
|
import {
|
|
140
145
|
assertWriteOptions,
|
|
141
146
|
assertWriteTarget,
|
|
142
|
-
} from '
|
|
147
|
+
} from '../../client/resources/writeOptionsSchema.js';
|
|
143
148
|
import {
|
|
144
149
|
createModelId,
|
|
145
150
|
resolveCreatedRows,
|
|
146
151
|
resolveCreateId,
|
|
147
|
-
} from '
|
|
148
|
-
import { normalizeWhere } from '
|
|
152
|
+
} from '../../client/resources/modelCreate.js';
|
|
153
|
+
import { normalizeWhere } from '../../client/resources/where.js';
|
|
149
154
|
import {
|
|
150
155
|
createDurableHttpCommitEnvelope,
|
|
151
156
|
canonicalHttpCommitBody,
|
|
@@ -154,15 +159,16 @@ import {
|
|
|
154
159
|
isHttpCommitReplayExpired,
|
|
155
160
|
type DurableHttpCommitEnvelope,
|
|
156
161
|
type DurableHttpCommitMethod,
|
|
157
|
-
} from '
|
|
158
|
-
import type { CommitOutboxScope } from '
|
|
162
|
+
} from '../../commit/confirmation/httpCommitEnvelope.js';
|
|
163
|
+
import type { CommitOutboxScope } from '../../commit/confirmation/commitEnvelope.js';
|
|
159
164
|
import {
|
|
160
165
|
createClientTxId,
|
|
161
166
|
normalizeCommitOperations,
|
|
162
167
|
replicationLagTimeout,
|
|
163
168
|
type ExactHttpCommitRequest,
|
|
164
|
-
} from '
|
|
165
|
-
import { resolveDurableWrites } from '
|
|
169
|
+
} from '../../commit/httpRequest.js';
|
|
170
|
+
import { resolveDurableWrites } from '../../commit/durableWrites.js';
|
|
171
|
+
import { createHttpReadOnChange, type HttpReadOnChange } from './subscription.js';
|
|
166
172
|
|
|
167
173
|
/** @internal Private options for the schema-agnostic HTTP protocol transport. */
|
|
168
174
|
export type HttpTransportOptions = Omit<HttpClientConfig, 'schema'> & {
|
|
@@ -190,12 +196,6 @@ export type HttpTransportOptions = Omit<HttpClientConfig, 'schema'> & {
|
|
|
190
196
|
/** @internal Default per-request deadline for the private HTTP transport. */
|
|
191
197
|
export const DEFAULT_REQUEST_TIMEOUT_MS = 30_000;
|
|
192
198
|
const HTTP_CONFIRMATION_POLL_INTERVAL_MS = 250;
|
|
193
|
-
/**
|
|
194
|
-
* The server's acquire window, mirrored here as the client-side default for a
|
|
195
|
-
* claim that names no `ttl` — it sets the auto-heartbeat cadence.
|
|
196
|
-
*/
|
|
197
|
-
const DEFAULT_CLAIM_TTL_MS = 60_000;
|
|
198
|
-
|
|
199
199
|
// NOTE: end-user / agent session minting is `ablo.sessions.create(...)` (typed
|
|
200
200
|
// against the schema, see Ablo.ts `CreateSessionParams`). There is no separate
|
|
201
201
|
// `ephemeralKeys` resource — `sessions` is the one front door for both.
|
|
@@ -207,6 +207,8 @@ export interface HttpTransport {
|
|
|
207
207
|
/** Drains scheduled commits and active requests. */
|
|
208
208
|
dispose(): Promise<void>;
|
|
209
209
|
purge(): Promise<void>;
|
|
210
|
+
/** @internal Live check used only by `context().onChange`. */
|
|
211
|
+
readonly onChange: HttpReadOnChange;
|
|
210
212
|
readonly commits: CommitResource;
|
|
211
213
|
/**
|
|
212
214
|
* Claim-ticket operations keyed by `claimId` — the id a queued acquire
|
|
@@ -279,8 +281,7 @@ export function createHttpTransport(options: HttpTransportOptions): HttpTranspor
|
|
|
279
281
|
const isConflict =
|
|
280
282
|
code === 'stale_context' ||
|
|
281
283
|
code === 'claim_conflict' ||
|
|
282
|
-
code === 'entity_claimed'
|
|
283
|
-
(typeof code === 'string' && code.startsWith('policy:'));
|
|
284
|
+
code === 'entity_claimed';
|
|
284
285
|
if (!isConflict) return;
|
|
285
286
|
const rawConflicts = errorRecord?.conflicts;
|
|
286
287
|
const rows =
|
|
@@ -326,6 +327,7 @@ export function createHttpTransport(options: HttpTransportOptions): HttpTranspor
|
|
|
326
327
|
let activeRequests = 0;
|
|
327
328
|
let requestIdleWaiters: Array<() => void> = [];
|
|
328
329
|
let disposePromise: Promise<void> | null = null;
|
|
330
|
+
const readChangeControllers = new Set<AbortController>();
|
|
329
331
|
|
|
330
332
|
function requestStarted(): void {
|
|
331
333
|
activeRequests += 1;
|
|
@@ -447,7 +449,24 @@ export function createHttpTransport(options: HttpTransportOptions): HttpTranspor
|
|
|
447
449
|
return target.toString();
|
|
448
450
|
}
|
|
449
451
|
|
|
452
|
+
function subscriptionEndpoint(): string {
|
|
453
|
+
const target = new URL(endpoint('/v1/subscriptions'));
|
|
454
|
+
const partition = effectiveAuthority?.deliveryPartition;
|
|
455
|
+
if (partition) {
|
|
456
|
+
target.searchParams.set('deliveryPartition', `${partition.index}-${partition.count}`);
|
|
457
|
+
}
|
|
458
|
+
return target.toString();
|
|
459
|
+
}
|
|
460
|
+
|
|
450
461
|
const requestTimeoutMs = options.timeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS;
|
|
462
|
+
const onChange = createHttpReadOnChange({
|
|
463
|
+
fetch: fetchImpl,
|
|
464
|
+
endpoint: subscriptionEndpoint,
|
|
465
|
+
authHeaders,
|
|
466
|
+
prepare: ready,
|
|
467
|
+
register: (controller) => readChangeControllers.add(controller),
|
|
468
|
+
unregister: (controller) => readChangeControllers.delete(controller),
|
|
469
|
+
});
|
|
451
470
|
|
|
452
471
|
/**
|
|
453
472
|
* Issues one request and returns its decoded body without a contract.
|
|
@@ -1255,11 +1274,9 @@ export function createHttpTransport(options: HttpTransportOptions): HttpTranspor
|
|
|
1255
1274
|
{
|
|
1256
1275
|
idempotencyKey: commitOptions.idempotencyKey,
|
|
1257
1276
|
readAt: commitOptions.readAt,
|
|
1258
|
-
onStale: commitOptions.onStale,
|
|
1259
1277
|
wait: commitOptions.wait,
|
|
1260
1278
|
claim: commitOptions.claim,
|
|
1261
1279
|
reads: commitOptions.reads,
|
|
1262
|
-
track: commitOptions.track,
|
|
1263
1280
|
},
|
|
1264
1281
|
'commits.create'
|
|
1265
1282
|
);
|
|
@@ -1271,14 +1288,12 @@ export function createHttpTransport(options: HttpTransportOptions): HttpTranspor
|
|
|
1271
1288
|
{
|
|
1272
1289
|
...commitOptions,
|
|
1273
1290
|
readAt: commitOptions.readAt ?? claim?.readAt ?? null,
|
|
1274
|
-
onStale: commitOptions.onStale ?? (claim?.readAt !== undefined ? 'reject' : null),
|
|
1275
1291
|
},
|
|
1276
1292
|
batchFence(claim?.target, claim?.fenceToken)
|
|
1277
1293
|
);
|
|
1278
1294
|
const requestBody = {
|
|
1279
1295
|
operations,
|
|
1280
1296
|
reads: commitOptions.reads,
|
|
1281
|
-
track: commitOptions.track,
|
|
1282
1297
|
};
|
|
1283
1298
|
const wait = commitOptions.wait ?? 'confirmed';
|
|
1284
1299
|
let body: CommitResponse;
|
|
@@ -1314,9 +1329,6 @@ export function createHttpTransport(options: HttpTransportOptions): HttpTranspor
|
|
|
1314
1329
|
id: body.id ?? body.clientTxId,
|
|
1315
1330
|
status: body.status,
|
|
1316
1331
|
lastSyncId: body.lastSyncId,
|
|
1317
|
-
...(body.notifications && body.notifications.length > 0
|
|
1318
|
-
? { notifications: body.notifications }
|
|
1319
|
-
: {}),
|
|
1320
1332
|
...(body.missingIds && body.missingIds.length > 0 ? { missingIds: body.missingIds } : {}),
|
|
1321
1333
|
...(body.operationResults && body.operationResults.length > 0
|
|
1322
1334
|
? { operationResults: body.operationResults }
|
|
@@ -1430,7 +1442,7 @@ export function createHttpTransport(options: HttpTransportOptions): HttpTranspor
|
|
|
1430
1442
|
};
|
|
1431
1443
|
}
|
|
1432
1444
|
|
|
1433
|
-
async function
|
|
1445
|
+
async function readModel<T>(
|
|
1434
1446
|
modelName: string,
|
|
1435
1447
|
params: ModelReadOptions & { readonly id: string }
|
|
1436
1448
|
): Promise<HttpTransportRead<T>> {
|
|
@@ -1443,7 +1455,7 @@ export function createHttpTransport(options: HttpTransportOptions): HttpTranspor
|
|
|
1443
1455
|
);
|
|
1444
1456
|
|
|
1445
1457
|
// A miss is `data: undefined`, not a thrown error. The WebSocket client's
|
|
1446
|
-
// `
|
|
1458
|
+
// `read` returns `T | undefined` for a missing row; throwing only here
|
|
1447
1459
|
// made the obvious read ("does this row exist?") a hard edge that an agent
|
|
1448
1460
|
// had to wrap in try/catch. Both transports agree: an absent row means absent
|
|
1449
1461
|
// data. Callers branch on `.data` (the documented `.data?.x` usage).
|
|
@@ -1479,12 +1491,10 @@ export function createHttpTransport(options: HttpTransportOptions): HttpTranspor
|
|
|
1479
1491
|
options && {
|
|
1480
1492
|
idempotencyKey: options.idempotencyKey,
|
|
1481
1493
|
readAt: options.readAt,
|
|
1482
|
-
onStale: options.onStale,
|
|
1483
1494
|
claim: options.claim,
|
|
1484
1495
|
claimRef: options.claimRef,
|
|
1485
1496
|
fenceToken: options.fenceToken,
|
|
1486
1497
|
reads: options.reads,
|
|
1487
|
-
track: options.track,
|
|
1488
1498
|
},
|
|
1489
1499
|
`${modelName} ${action}`
|
|
1490
1500
|
);
|
|
@@ -1510,10 +1520,8 @@ export function createHttpTransport(options: HttpTransportOptions): HttpTranspor
|
|
|
1510
1520
|
const readAt = options?.readAt ?? claimHandle?.readAt;
|
|
1511
1521
|
const requestBody: Record<string, unknown> = {
|
|
1512
1522
|
claim: normalizeClaimId(options?.claimRef) ?? claimHandle?.id,
|
|
1513
|
-
onStale: options?.onStale ?? (claimHandle?.readAt !== undefined ? 'reject' : undefined),
|
|
1514
1523
|
readAt,
|
|
1515
1524
|
reads: options?.reads,
|
|
1516
|
-
track: options?.track,
|
|
1517
1525
|
// The claim's fencing token (Option B), so the per-model HTTP write door
|
|
1518
1526
|
// fences the same as the WS proxy and `commits.create`.
|
|
1519
1527
|
fenceToken: options?.fenceToken ?? claimHandle?.fenceToken,
|
|
@@ -1680,9 +1688,23 @@ export function createHttpTransport(options: HttpTransportOptions): HttpTranspor
|
|
|
1680
1688
|
params: ClaimSkipParams<Fields>
|
|
1681
1689
|
): Promise<HeldClaim<T> | null>;
|
|
1682
1690
|
function claimImpl(params: ClaimParams<Fields>): Promise<HeldClaim<T>>;
|
|
1691
|
+
function claimImpl(
|
|
1692
|
+
id: string,
|
|
1693
|
+
opts: ClaimSkipOptions<Fields>
|
|
1694
|
+
): Promise<HeldLease | null>;
|
|
1695
|
+
function claimImpl(id: string, opts?: ClaimOptions<Fields>): Promise<HeldLease>;
|
|
1683
1696
|
async function claimImpl(
|
|
1684
|
-
|
|
1685
|
-
|
|
1697
|
+
idOrParams: string | ClaimParams<Fields>,
|
|
1698
|
+
opts?: ClaimOptions<Fields>,
|
|
1699
|
+
): Promise<HeldClaim<T> | HeldLease | null> {
|
|
1700
|
+
// The row-free form names a key by id alone. Ablo has never held that
|
|
1701
|
+
// row, so there is no snapshot to take after the grant and no `data` on
|
|
1702
|
+
// the handle: the lease is the whole answer. The object form re-reads
|
|
1703
|
+
// the row under the lease and hands back a `HeldClaim`.
|
|
1704
|
+
const rowFree = typeof idOrParams === 'string';
|
|
1705
|
+
const params: ClaimParams<Fields> = rowFree
|
|
1706
|
+
? { ...(opts ?? {}), id: idOrParams }
|
|
1707
|
+
: idOrParams;
|
|
1686
1708
|
let acquired: { id: string; fenceToken?: number };
|
|
1687
1709
|
try {
|
|
1688
1710
|
acquired = await acquireClaim(params);
|
|
@@ -1709,16 +1731,6 @@ export function createHttpTransport(options: HttpTransportOptions): HttpTranspor
|
|
|
1709
1731
|
id: params.id,
|
|
1710
1732
|
description: claimDescription(params),
|
|
1711
1733
|
});
|
|
1712
|
-
const { data, stamp } = await retrieveModel<T>(name, { id: params.id });
|
|
1713
|
-
// A held claim hands back a snapshot; the typed `HeldClaim.data` is `T`.
|
|
1714
|
-
// `retrieve` now reports a miss as `undefined` rather than throwing, but a
|
|
1715
|
-
// claim on a row that doesn't exist has nothing to hold — surface it.
|
|
1716
|
-
if (data === undefined) {
|
|
1717
|
-
throw new AbloNotFoundError(
|
|
1718
|
-
`Cannot claim ${name}/${params.id}: it does not exist (or is outside this credential's scope).`,
|
|
1719
|
-
[params.id]
|
|
1720
|
-
);
|
|
1721
|
-
}
|
|
1722
1734
|
// One reading of the heartbeat options — cadence and callbacks from
|
|
1723
1735
|
// whichever spelling the caller used (plan object, shorthand, or the
|
|
1724
1736
|
// deprecated flat callbacks).
|
|
@@ -1758,10 +1770,9 @@ export function createHttpTransport(options: HttpTransportOptions): HttpTranspor
|
|
|
1758
1770
|
// way. `subTarget` is wire-shaped by contract, including here, where the
|
|
1759
1771
|
// value happens to have started out declared.
|
|
1760
1772
|
const { meta, ...narrowed } = subTarget(params, name);
|
|
1761
|
-
|
|
1773
|
+
const lease: HeldLease = {
|
|
1762
1774
|
object: 'claim',
|
|
1763
1775
|
id: claimId,
|
|
1764
|
-
readAt: stamp,
|
|
1765
1776
|
...(fenceToken !== undefined ? { fenceToken } : {}),
|
|
1766
1777
|
target: {
|
|
1767
1778
|
...streamTarget({ model: name, id: params.id }),
|
|
@@ -1769,7 +1780,6 @@ export function createHttpTransport(options: HttpTransportOptions): HttpTranspor
|
|
|
1769
1780
|
...(meta !== undefined ? { meta: declaredMeta(meta) } : {}),
|
|
1770
1781
|
},
|
|
1771
1782
|
description: claimDescription(params),
|
|
1772
|
-
data,
|
|
1773
1783
|
release,
|
|
1774
1784
|
revoke: () => {
|
|
1775
1785
|
void release().catch(() => {});
|
|
@@ -1777,6 +1787,24 @@ export function createHttpTransport(options: HttpTransportOptions): HttpTranspor
|
|
|
1777
1787
|
heartbeat,
|
|
1778
1788
|
[Symbol.asyncDispose]: release,
|
|
1779
1789
|
};
|
|
1790
|
+
if (rowFree) return lease;
|
|
1791
|
+
|
|
1792
|
+
const { data, stamp } = await readModel<T>(name, { id: params.id });
|
|
1793
|
+
// A held claim hands back a snapshot; the typed `HeldClaim.data` is `T`.
|
|
1794
|
+
// `retrieve` reports a miss as `undefined`, and a claim on a row that does
|
|
1795
|
+
// not exist has nothing to hold. The grant came BEFORE this read, so the
|
|
1796
|
+
// miss must give the lease back first: otherwise the key stays held under
|
|
1797
|
+
// this credential until the TTL lapses, behind no handle anyone can
|
|
1798
|
+
// release, and every other participant is refused for the duration.
|
|
1799
|
+
if (data === undefined) {
|
|
1800
|
+
await release().catch(() => undefined);
|
|
1801
|
+
throw new AbloNotFoundError(
|
|
1802
|
+
`Cannot claim ${name}/${params.id}: it does not exist (or is outside this credential's scope). ` +
|
|
1803
|
+
`To hold a key before its row exists, claim it by id alone: claim('${params.id}') returns a lease without a snapshot.`,
|
|
1804
|
+
[params.id]
|
|
1805
|
+
);
|
|
1806
|
+
}
|
|
1807
|
+
return { ...lease, readAt: stamp, data };
|
|
1780
1808
|
}
|
|
1781
1809
|
const claimsForEntity = (
|
|
1782
1810
|
params: ClaimLookupParams<T>
|
|
@@ -1788,7 +1816,7 @@ export function createHttpTransport(options: HttpTransportOptions): HttpTranspor
|
|
|
1788
1816
|
{ method: 'GET' },
|
|
1789
1817
|
claimListResponseSchema
|
|
1790
1818
|
);
|
|
1791
|
-
const claim = Object.assign(claimImpl, {
|
|
1819
|
+
const claim: HttpClaimApi<T, Fields> = Object.assign(claimImpl, {
|
|
1792
1820
|
release: releaseClaim,
|
|
1793
1821
|
state: async (params: ClaimLookupParams<T>): Promise<Claim | null> => {
|
|
1794
1822
|
const res = await claimsForEntity(params);
|
|
@@ -1796,6 +1824,19 @@ export function createHttpTransport(options: HttpTransportOptions): HttpTranspor
|
|
|
1796
1824
|
const first = res.data.find((row) => row.status !== 'queued');
|
|
1797
1825
|
return first ? claimFromModelClaim(first) : null;
|
|
1798
1826
|
},
|
|
1827
|
+
// Every holder, from the same one read `state` takes its first entry
|
|
1828
|
+
// from: the server lists holders before waiters, and the caller's own
|
|
1829
|
+
// lease before its peers'. (This member was missing for as long as the
|
|
1830
|
+
// namespace was cast to its type instead of typed as it.)
|
|
1831
|
+
list: async (params: ClaimLookupParams<T>) => {
|
|
1832
|
+
const res = await claimsForEntity(params);
|
|
1833
|
+
return {
|
|
1834
|
+
object: 'list' as const,
|
|
1835
|
+
data: res.data
|
|
1836
|
+
.filter((row) => row.status !== 'queued')
|
|
1837
|
+
.map(claimFromModelClaim),
|
|
1838
|
+
};
|
|
1839
|
+
},
|
|
1799
1840
|
queue: async (
|
|
1800
1841
|
params: ClaimLookupParams<T>
|
|
1801
1842
|
): Promise<ClaimQueueView> => {
|
|
@@ -1816,7 +1857,7 @@ export function createHttpTransport(options: HttpTransportOptions): HttpTranspor
|
|
|
1816
1857
|
}),
|
|
1817
1858
|
});
|
|
1818
1859
|
},
|
|
1819
|
-
})
|
|
1860
|
+
});
|
|
1820
1861
|
|
|
1821
1862
|
const withMutationClaim = async <R>(
|
|
1822
1863
|
id: string,
|
|
@@ -1834,7 +1875,7 @@ export function createHttpTransport(options: HttpTransportOptions): HttpTranspor
|
|
|
1834
1875
|
// handle. The result was mutual exclusion without lost-update
|
|
1835
1876
|
// detection, on the transport agents run, under code that reads as
|
|
1836
1877
|
// though it had both. The reactive client binds the same three values
|
|
1837
|
-
// from the claim it holds; a caller's own `readAt
|
|
1878
|
+
// from the claim it holds; a caller's own `readAt` wins.
|
|
1838
1879
|
return run({
|
|
1839
1880
|
...input,
|
|
1840
1881
|
claimRef: { id: claimInput.id },
|
|
@@ -1844,9 +1885,6 @@ export function createHttpTransport(options: HttpTransportOptions): HttpTranspor
|
|
|
1844
1885
|
...(input?.readAt === undefined && claimInput.readAt !== undefined
|
|
1845
1886
|
? { readAt: claimInput.readAt }
|
|
1846
1887
|
: {}),
|
|
1847
|
-
...(input?.onStale === undefined && claimInput.readAt !== undefined
|
|
1848
|
-
? { onStale: 'reject' as const }
|
|
1849
|
-
: {}),
|
|
1850
1888
|
claim: undefined,
|
|
1851
1889
|
});
|
|
1852
1890
|
}
|
|
@@ -1892,7 +1930,7 @@ export function createHttpTransport(options: HttpTransportOptions): HttpTranspor
|
|
|
1892
1930
|
): Promise<CommitReceipt | undefined> {
|
|
1893
1931
|
// Functional form: update(id, current => next). The SDK owns the
|
|
1894
1932
|
// read-fresh → compute → compare-and-swap → reconcile loop; correctness
|
|
1895
|
-
// rides on the row's watermark (readAt
|
|
1933
|
+
// rides on the row's watermark (`readAt`), so no claim
|
|
1896
1934
|
// or per-participant identity is needed and contention never clobbers.
|
|
1897
1935
|
if (typeof arg === 'string') {
|
|
1898
1936
|
const id = arg;
|
|
@@ -1907,13 +1945,12 @@ export function createHttpTransport(options: HttpTransportOptions): HttpTranspor
|
|
|
1907
1945
|
model: name,
|
|
1908
1946
|
id,
|
|
1909
1947
|
readFresh: async () => {
|
|
1910
|
-
const read = await
|
|
1948
|
+
const read = await readModel<T>(name, { id });
|
|
1911
1949
|
return { data: read.data, stamp: read.stamp };
|
|
1912
1950
|
},
|
|
1913
1951
|
writeNext: (patch, readAt) =>
|
|
1914
1952
|
mutateModel('update', name, id, patch, {
|
|
1915
1953
|
readAt,
|
|
1916
|
-
onStale: 'reject',
|
|
1917
1954
|
}),
|
|
1918
1955
|
});
|
|
1919
1956
|
}
|
|
@@ -1926,11 +1963,8 @@ export function createHttpTransport(options: HttpTransportOptions): HttpTranspor
|
|
|
1926
1963
|
|
|
1927
1964
|
return {
|
|
1928
1965
|
claim,
|
|
1929
|
-
|
|
1930
|
-
return
|
|
1931
|
-
},
|
|
1932
|
-
retrieve(params: ModelReadOptions & { readonly id: string }): Promise<HttpTransportRead<T>> {
|
|
1933
|
-
return retrieveModel<T>(name, params);
|
|
1966
|
+
read(params: ModelReadOptions & { readonly id: string }): Promise<HttpTransportRead<T>> {
|
|
1967
|
+
return readModel<T>(name, params);
|
|
1934
1968
|
},
|
|
1935
1969
|
list(options?: ServerReadOptions<T>): ReturnType<typeof listModel<T>> {
|
|
1936
1970
|
return listModel<T>(name, options);
|
|
@@ -1957,7 +1991,7 @@ export function createHttpTransport(options: HttpTransportOptions): HttpTranspor
|
|
|
1957
1991
|
params.data,
|
|
1958
1992
|
options,
|
|
1959
1993
|
async () => {
|
|
1960
|
-
const read = await
|
|
1994
|
+
const read = await readModel<T>(name, { id });
|
|
1961
1995
|
if (read.data === undefined) {
|
|
1962
1996
|
throw new AbloNotFoundError(
|
|
1963
1997
|
`create ${name}/${id} did not yield a readable row (the write did not confirm).`,
|
|
@@ -2024,7 +2058,7 @@ export function createHttpTransport(options: HttpTransportOptions): HttpTranspor
|
|
|
2024
2058
|
ids,
|
|
2025
2059
|
operationResults: receipt.operationResults,
|
|
2026
2060
|
readRow: async (id) => {
|
|
2027
|
-
const read = await
|
|
2061
|
+
const read = await readModel<T>(name, { id });
|
|
2028
2062
|
return read.data;
|
|
2029
2063
|
},
|
|
2030
2064
|
});
|
|
@@ -2036,29 +2070,6 @@ export function createHttpTransport(options: HttpTransportOptions): HttpTranspor
|
|
|
2036
2070
|
return mutateModel('delete', name, params.id, undefined, options);
|
|
2037
2071
|
});
|
|
2038
2072
|
},
|
|
2039
|
-
async track(params: ModelTrackParams): Promise<ModelTrackResult> {
|
|
2040
|
-
const dependency: TrackDependency = {
|
|
2041
|
-
model: name.toLowerCase(),
|
|
2042
|
-
id: params.id,
|
|
2043
|
-
...(params.readAt !== undefined ? { readAt: params.readAt } : {}),
|
|
2044
|
-
};
|
|
2045
|
-
// A track carries no write, so it rides the commit lane as a
|
|
2046
|
-
// zero-operation body — the shape `/v1/commits` accepts for registering
|
|
2047
|
-
// a premise without one. Going through the same durable lane as every
|
|
2048
|
-
// other commit means a disconnect replays the registration rather than
|
|
2049
|
-
// dropping it, and a notification that had already fired is not lost to
|
|
2050
|
-
// a retry.
|
|
2051
|
-
const body = await dispatchHttpCommit({
|
|
2052
|
-
path: '/v1/commits',
|
|
2053
|
-
method: 'POST',
|
|
2054
|
-
idempotencyKey: createClientTxId(),
|
|
2055
|
-
body: { track: [dependency] },
|
|
2056
|
-
wait: 'confirmed',
|
|
2057
|
-
});
|
|
2058
|
-
return body.notifications && body.notifications.length > 0
|
|
2059
|
-
? { notifications: body.notifications }
|
|
2060
|
-
: {};
|
|
2061
|
-
},
|
|
2062
2073
|
};
|
|
2063
2074
|
}
|
|
2064
2075
|
|
|
@@ -2073,6 +2084,8 @@ export function createHttpTransport(options: HttpTransportOptions): HttpTranspor
|
|
|
2073
2084
|
}),
|
|
2074
2085
|
dispose() {
|
|
2075
2086
|
if (!disposePromise) {
|
|
2087
|
+
for (const controller of readChangeControllers) controller.abort();
|
|
2088
|
+
readChangeControllers.clear();
|
|
2076
2089
|
const scheduledCommits = httpCommitLane;
|
|
2077
2090
|
disposePromise = (async () => {
|
|
2078
2091
|
await scheduledCommits;
|
|
@@ -2082,6 +2095,7 @@ export function createHttpTransport(options: HttpTransportOptions): HttpTranspor
|
|
|
2082
2095
|
return disposePromise;
|
|
2083
2096
|
},
|
|
2084
2097
|
async purge() {},
|
|
2098
|
+
onChange,
|
|
2085
2099
|
commits,
|
|
2086
2100
|
claims,
|
|
2087
2101
|
logs,
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transport mechanisms. Business meaning belongs to commit, claims, and
|
|
3
|
+
* observation; this boundary owns only HTTP, WebSocket, and connection runtime.
|
|
4
|
+
*/
|
|
5
|
+
export * from './http/index.js';
|
|
6
|
+
export * from './websocket/index.js';
|
|
7
|
+
export * from './connection/index.js';
|