@abloatai/ablo 0.25.0 → 0.27.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/AGENTS.md +5 -3
- package/CHANGELOG.md +34 -0
- package/README.md +104 -88
- package/dist/BaseSyncedStore.d.ts +140 -266
- package/dist/BaseSyncedStore.js +338 -739
- package/dist/Database.d.ts +62 -77
- package/dist/Database.js +106 -127
- package/dist/{ObjectPool.d.ts → InstanceCache.d.ts} +10 -13
- package/dist/{ObjectPool.js → InstanceCache.js} +91 -83
- package/dist/LazyReferenceCollection.d.ts +11 -15
- package/dist/LazyReferenceCollection.js +16 -15
- package/dist/Model.d.ts +37 -52
- package/dist/Model.js +52 -69
- package/dist/ModelRegistry.d.ts +46 -25
- package/dist/ModelRegistry.js +32 -30
- package/dist/NetworkMonitor.d.ts +5 -6
- package/dist/NetworkMonitor.js +6 -7
- package/dist/SyncClient.d.ts +119 -109
- package/dist/SyncClient.js +303 -224
- package/dist/SyncEngineContext.d.ts +1 -3
- package/dist/SyncEngineContext.js +1 -2
- package/dist/adapters/alwaysOnline.d.ts +6 -8
- package/dist/adapters/alwaysOnline.js +6 -8
- package/dist/adapters/inMemoryStorage.d.ts +9 -9
- package/dist/adapters/inMemoryStorage.js +9 -9
- package/dist/agent/Agent.d.ts +39 -31
- package/dist/agent/Agent.js +35 -23
- package/dist/agent/index.d.ts +4 -4
- package/dist/agent/index.js +5 -5
- package/dist/agent/session.d.ts +47 -44
- package/dist/agent/session.js +37 -48
- package/dist/agent/types.d.ts +26 -31
- package/dist/agent/types.js +6 -7
- package/dist/ai-sdk/coordinatedTool.d.ts +108 -0
- package/dist/ai-sdk/{coordinated-tool.js → coordinatedTool.js} +44 -38
- package/dist/ai-sdk/coordinationContext.d.ts +46 -0
- package/dist/ai-sdk/{coordination-context.js → coordinationContext.js} +30 -31
- package/dist/ai-sdk/index.d.ts +25 -22
- package/dist/ai-sdk/index.js +25 -22
- package/dist/ai-sdk/wrap.d.ts +7 -8
- package/dist/ai-sdk/wrap.js +2 -2
- package/dist/auth/credentialPolicy.d.ts +74 -71
- package/dist/auth/credentialPolicy.js +51 -56
- package/dist/auth/credentialSource.d.ts +7 -18
- package/dist/auth/credentialSource.js +10 -18
- package/dist/auth/index.d.ts +59 -58
- package/dist/auth/index.js +34 -40
- package/dist/auth/schemas.d.ts +5 -4
- package/dist/auth/schemas.js +5 -4
- package/dist/batching/index.d.ts +19 -21
- package/dist/batching/index.js +14 -17
- package/dist/cli.cjs +483 -369
- package/dist/client/Ablo.d.ts +107 -836
- package/dist/client/Ablo.js +174 -833
- package/dist/client/ApiClient.d.ts +44 -20
- package/dist/client/ApiClient.js +193 -44
- package/dist/client/auth.d.ts +51 -60
- package/dist/client/auth.js +137 -110
- package/dist/client/claimHeartbeatLoop.d.ts +50 -0
- package/dist/client/claimHeartbeatLoop.js +88 -0
- package/dist/client/consoleLogger.d.ts +35 -0
- package/dist/client/consoleLogger.js +44 -0
- package/dist/client/createInternalComponents.d.ts +14 -17
- package/dist/client/createInternalComponents.js +26 -31
- package/dist/client/createModelProxy.d.ts +130 -120
- package/dist/client/createModelProxy.js +158 -124
- package/dist/client/credentialEndpoint.d.ts +61 -0
- package/dist/client/credentialEndpoint.js +86 -0
- package/dist/client/functionalUpdate.d.ts +29 -27
- package/dist/client/functionalUpdate.js +21 -21
- package/dist/client/hostedEndpoints.d.ts +21 -0
- package/dist/client/hostedEndpoints.js +21 -0
- package/dist/client/httpClient.d.ts +58 -54
- package/dist/client/httpClient.js +29 -31
- package/dist/client/identity.d.ts +15 -20
- package/dist/client/identity.js +49 -59
- package/dist/client/modelRegistration.d.ts +10 -0
- package/dist/client/modelRegistration.js +301 -0
- package/dist/client/options.d.ts +373 -0
- package/dist/client/options.js +6 -0
- package/dist/client/registerDataSource.d.ts +9 -9
- package/dist/client/registerDataSource.js +15 -16
- package/dist/client/resourceTypes.d.ts +333 -0
- package/dist/client/resourceTypes.js +7 -0
- package/dist/client/schemaConfig.d.ts +44 -0
- package/dist/client/schemaConfig.js +176 -0
- package/dist/client/sessionMint.d.ts +17 -13
- package/dist/client/sessionMint.js +26 -31
- package/dist/client/validateAbloOptions.d.ts +12 -14
- package/dist/client/validateAbloOptions.js +9 -10
- package/dist/client/writeOptionsSchema.d.ts +18 -16
- package/dist/client/writeOptionsSchema.js +23 -20
- package/dist/client/wsMutationExecutor.d.ts +28 -0
- package/dist/client/wsMutationExecutor.js +71 -0
- package/dist/context.d.ts +6 -4
- package/dist/context.js +6 -7
- package/dist/coordination/index.d.ts +13 -4
- package/dist/coordination/index.js +29 -4
- package/dist/coordination/schema.d.ts +176 -128
- package/dist/coordination/schema.js +197 -133
- package/dist/coordination/trace.d.ts +9 -11
- package/dist/coordination/trace.js +13 -15
- package/dist/core/DatabaseManager.d.ts +5 -8
- package/dist/core/DatabaseManager.js +38 -40
- package/dist/core/QueryProcessor.d.ts +7 -9
- package/dist/core/QueryProcessor.js +27 -34
- package/dist/core/QueryView.d.ts +17 -5
- package/dist/core/QueryView.js +6 -7
- package/dist/core/StoreManager.d.ts +14 -16
- package/dist/core/StoreManager.js +26 -25
- package/dist/core/ViewRegistry.d.ts +5 -5
- package/dist/core/ViewRegistry.js +4 -4
- package/dist/core/index.d.ts +18 -13
- package/dist/core/index.js +32 -26
- package/dist/core/openIDBWithTimeout.d.ts +38 -36
- package/dist/core/openIDBWithTimeout.js +57 -54
- package/dist/core/queryUtils.d.ts +45 -0
- package/dist/core/queryUtils.js +69 -0
- package/dist/core/storeContract.d.ts +145 -0
- package/dist/core/storeContract.js +12 -0
- package/dist/environment.d.ts +28 -0
- package/dist/environment.js +21 -0
- package/dist/errorCodes.d.ts +118 -101
- package/dist/errorCodes.js +277 -260
- package/dist/errors.d.ts +170 -165
- package/dist/errors.js +161 -151
- package/dist/index.d.ts +30 -27
- package/dist/index.js +90 -82
- package/dist/interfaces/index.d.ts +108 -133
- package/dist/interfaces/index.js +5 -4
- package/dist/keys/index.d.ts +27 -29
- package/dist/keys/index.js +59 -49
- package/dist/mutators/RecordingTransaction.d.ts +16 -16
- package/dist/mutators/RecordingTransaction.js +31 -37
- package/dist/mutators/Transaction.d.ts +18 -26
- package/dist/mutators/Transaction.js +14 -20
- package/dist/mutators/UndoManager.d.ts +122 -131
- package/dist/mutators/UndoManager.js +149 -155
- package/dist/mutators/defineMutators.d.ts +24 -37
- package/dist/mutators/defineMutators.js +14 -20
- package/dist/mutators/inverseOp.d.ts +12 -15
- package/dist/mutators/inverseOp.js +12 -15
- package/dist/mutators/mutateActions.d.ts +10 -9
- package/dist/mutators/mutateActions.js +1 -1
- package/dist/mutators/readerActions.d.ts +9 -8
- package/dist/mutators/readerActions.js +2 -2
- package/dist/mutators/undoApply.d.ts +31 -27
- package/dist/mutators/undoApply.js +26 -24
- package/dist/policy/index.d.ts +5 -3
- package/dist/policy/index.js +5 -3
- package/dist/policy/types.d.ts +105 -101
- package/dist/policy/types.js +67 -66
- package/dist/query/client.d.ts +32 -16
- package/dist/query/client.js +103 -72
- package/dist/query/types.d.ts +37 -60
- package/dist/query/types.js +13 -33
- package/dist/react/AbloProvider.d.ts +7 -11
- package/dist/react/AbloProvider.js +24 -17
- package/dist/react/context.d.ts +27 -146
- package/dist/react/context.js +9 -10
- package/dist/react/index.d.ts +41 -42
- package/dist/react/index.js +37 -38
- package/dist/react/internalContext.d.ts +17 -19
- package/dist/react/useAblo.d.ts +23 -22
- package/dist/react/useAblo.js +17 -15
- package/dist/react/useCurrentUserId.d.ts +8 -7
- package/dist/react/useCurrentUserId.js +8 -7
- package/dist/react/useErrorListener.d.ts +7 -7
- package/dist/react/useErrorListener.js +11 -12
- package/dist/react/useMutationFailureListener.d.ts +8 -8
- package/dist/react/useMutationFailureListener.js +9 -9
- package/dist/react/useMutators.d.ts +11 -11
- package/dist/react/useMutators.js +10 -4
- package/dist/react/useReactive.js +2 -3
- package/dist/react/useSyncStatus.d.ts +4 -6
- package/dist/react/useUndoScope.d.ts +7 -9
- package/dist/react/useUndoScope.js +3 -3
- package/dist/schema/coordination.d.ts +21 -25
- package/dist/schema/coordination.js +21 -25
- package/dist/schema/ddl.d.ts +43 -39
- package/dist/schema/ddl.js +75 -68
- package/dist/schema/ddlLock.d.ts +35 -0
- package/dist/schema/ddlLock.js +46 -0
- package/dist/schema/diff.d.ts +99 -61
- package/dist/schema/diff.js +43 -34
- package/dist/schema/field.d.ts +37 -42
- package/dist/schema/field.js +36 -49
- package/dist/schema/generate.d.ts +12 -12
- package/dist/schema/generate.js +12 -12
- package/dist/schema/index.d.ts +5 -4
- package/dist/schema/index.js +29 -21
- package/dist/schema/model.d.ts +121 -146
- package/dist/schema/model.js +24 -35
- package/dist/schema/openapi.d.ts +10 -9
- package/dist/schema/openapi.js +7 -1
- package/dist/schema/queries.d.ts +30 -32
- package/dist/schema/queries.js +24 -25
- package/dist/schema/relation.d.ts +89 -99
- package/dist/schema/relation.js +13 -13
- package/dist/schema/residency.d.ts +38 -0
- package/dist/schema/residency.js +30 -0
- package/dist/schema/roles.d.ts +45 -27
- package/dist/schema/roles.js +52 -21
- package/dist/schema/schema.d.ts +36 -45
- package/dist/schema/schema.js +42 -39
- package/dist/schema/select.d.ts +13 -13
- package/dist/schema/select.js +13 -13
- package/dist/schema/serialize.d.ts +36 -39
- package/dist/schema/serialize.js +27 -31
- package/dist/schema/sugar.d.ts +17 -32
- package/dist/schema/sugar.js +14 -29
- package/dist/schema/{sync-delta-row.d.ts → syncDeltaRow.d.ts} +27 -50
- package/dist/schema/syncDeltaRow.js +89 -0
- package/dist/schema/tenancy.d.ts +44 -46
- package/dist/schema/tenancy.js +46 -48
- package/dist/server/adapter.d.ts +58 -58
- package/dist/server/adapter.js +13 -14
- package/dist/server/commit.d.ts +60 -64
- package/dist/server/index.d.ts +9 -10
- package/dist/server/index.js +1 -1
- package/dist/server/readConfig.d.ts +70 -0
- package/dist/server/readConfig.js +8 -0
- package/dist/server/storageMode.d.ts +23 -0
- package/dist/server/storageMode.js +17 -0
- package/dist/source/adapter.d.ts +31 -26
- package/dist/source/adapter.js +10 -10
- package/dist/source/adapters/drizzle.d.ts +28 -23
- package/dist/source/adapters/drizzle.js +34 -28
- package/dist/source/adapters/kysely.d.ts +27 -25
- package/dist/source/adapters/kysely.js +28 -26
- package/dist/source/adapters/memory.d.ts +8 -7
- package/dist/source/adapters/memory.js +10 -9
- package/dist/source/adapters/prisma.d.ts +13 -12
- package/dist/source/adapters/prisma.js +27 -29
- package/dist/source/conformance.d.ts +18 -11
- package/dist/source/conformance.js +27 -19
- package/dist/source/connector.d.ts +31 -32
- package/dist/source/connector.js +30 -28
- package/dist/source/connectorProtocol.d.ts +160 -0
- package/dist/source/connectorProtocol.js +162 -0
- package/dist/source/contract.d.ts +26 -27
- package/dist/source/contract.js +28 -29
- package/dist/source/factory.d.ts +94 -0
- package/dist/source/factory.js +268 -0
- package/dist/source/index.d.ts +10 -462
- package/dist/source/index.js +17 -421
- package/dist/source/migrations.d.ts +9 -9
- package/dist/source/migrations.js +9 -9
- package/dist/source/next.d.ts +10 -11
- package/dist/source/next.js +7 -8
- package/dist/source/pushQueue.d.ts +70 -48
- package/dist/source/pushQueue.js +36 -29
- package/dist/source/signing.d.ts +88 -0
- package/dist/source/signing.js +159 -0
- package/dist/source/types.d.ts +351 -0
- package/dist/source/types.js +43 -0
- package/dist/stores/ObjectStore.d.ts +11 -12
- package/dist/stores/ObjectStore.js +34 -35
- package/dist/stores/ObjectStoreContract.d.ts +12 -15
- package/dist/stores/SyncActionStore.d.ts +8 -12
- package/dist/stores/SyncActionStore.js +77 -46
- package/dist/surface.d.ts +28 -21
- package/dist/surface.js +28 -20
- package/dist/sync/{BootstrapHelper.d.ts → BootstrapFetcher.d.ts} +37 -45
- package/dist/sync/{BootstrapHelper.js → BootstrapFetcher.js} +101 -80
- package/dist/sync/ConnectionManager.d.ts +47 -50
- package/dist/sync/ConnectionManager.js +74 -70
- package/dist/sync/NetworkProbe.d.ts +27 -31
- package/dist/sync/NetworkProbe.js +67 -72
- package/dist/sync/{HydrationCoordinator.d.ts → OnDemandLoader.d.ts} +49 -36
- package/dist/sync/{HydrationCoordinator.js → OnDemandLoader.js} +79 -54
- package/dist/sync/{AreaOfInterestManager.d.ts → SubscriptionManager.d.ts} +45 -59
- package/dist/sync/{AreaOfInterestManager.js → SubscriptionManager.js} +44 -52
- package/dist/sync/SyncWebSocket.d.ts +175 -250
- package/dist/sync/SyncWebSocket.js +431 -769
- package/dist/sync/awaitClaimGrant.d.ts +18 -18
- package/dist/sync/awaitClaimGrant.js +38 -30
- package/dist/sync/bootstrapApply.d.ts +70 -0
- package/dist/sync/bootstrapApply.js +73 -0
- package/dist/sync/commitFrames.d.ts +44 -0
- package/dist/sync/commitFrames.js +94 -0
- package/dist/sync/createClaimStream.d.ts +23 -22
- package/dist/sync/createClaimStream.js +108 -25
- package/dist/sync/createPresenceStream.d.ts +19 -18
- package/dist/sync/createPresenceStream.js +25 -26
- package/dist/sync/createSnapshot.d.ts +13 -17
- package/dist/sync/createSnapshot.js +20 -26
- package/dist/sync/credentialLifecycle.d.ts +175 -0
- package/dist/sync/credentialLifecycle.js +322 -0
- package/dist/sync/deltaPipeline.d.ts +113 -0
- package/dist/sync/deltaPipeline.js +261 -0
- package/dist/sync/groupChange.d.ts +113 -0
- package/dist/sync/groupChange.js +242 -0
- package/dist/sync/heartbeat.d.ts +63 -0
- package/dist/sync/heartbeat.js +91 -0
- package/dist/sync/participants.d.ts +27 -27
- package/dist/sync/schemas.d.ts +3 -2
- package/dist/sync/schemas.js +14 -10
- package/dist/sync/syncCursor.d.ts +40 -0
- package/dist/sync/syncCursor.js +55 -0
- package/dist/sync/syncPlan.d.ts +54 -0
- package/dist/sync/syncPlan.js +50 -0
- package/dist/sync/syncPosition.d.ts +54 -49
- package/dist/sync/syncPosition.js +57 -52
- package/dist/sync/wsFrameHandlers.d.ts +116 -0
- package/dist/sync/wsFrameHandlers.js +374 -0
- package/dist/testing/fixtures/bootstrap.d.ts +21 -17
- package/dist/testing/fixtures/bootstrap.js +12 -6
- package/dist/testing/fixtures/deltas.d.ts +31 -34
- package/dist/testing/fixtures/deltas.js +30 -33
- package/dist/testing/fixtures/models.d.ts +11 -10
- package/dist/testing/fixtures/models.js +12 -10
- package/dist/testing/helpers/{react-wrapper.d.ts → reactWrapper.d.ts} +13 -10
- package/dist/testing/helpers/{react-wrapper.js → reactWrapper.js} +15 -12
- package/dist/testing/helpers/{sync-engine-harness.d.ts → syncEngineHarness.d.ts} +17 -18
- package/dist/testing/helpers/{sync-engine-harness.js → syncEngineHarness.js} +14 -11
- package/dist/testing/helpers/wait.d.ts +13 -8
- package/dist/testing/helpers/wait.js +13 -8
- package/dist/testing/index.d.ts +4 -4
- package/dist/testing/index.js +3 -3
- package/dist/testing/mocks/MockMutationExecutor.d.ts +18 -17
- package/dist/testing/mocks/MockMutationExecutor.js +15 -14
- package/dist/testing/mocks/MockNetworkMonitor.d.ts +8 -8
- package/dist/testing/mocks/MockNetworkMonitor.js +8 -8
- package/dist/testing/mocks/MockSyncContext.d.ts +21 -34
- package/dist/testing/mocks/MockSyncContext.js +16 -45
- package/dist/testing/mocks/MockSyncStore.d.ts +14 -14
- package/dist/testing/mocks/MockSyncStore.js +11 -11
- package/dist/testing/mocks/MockWebSocket.d.ts +28 -24
- package/dist/testing/mocks/MockWebSocket.js +22 -21
- package/dist/transactions/TransactionQueue.d.ts +190 -221
- package/dist/transactions/TransactionQueue.js +424 -822
- package/dist/transactions/TransactionStore.d.ts +20 -0
- package/dist/transactions/TransactionStore.js +53 -0
- package/dist/transactions/UnconfirmedWrites.d.ts +82 -0
- package/dist/transactions/UnconfirmedWrites.js +104 -0
- package/dist/transactions/coalesceRules.d.ts +58 -0
- package/dist/transactions/coalesceRules.js +140 -0
- package/dist/transactions/commitPayload.d.ts +130 -0
- package/dist/transactions/commitPayload.js +143 -0
- package/dist/transactions/deltaConfirmation.d.ts +58 -0
- package/dist/transactions/deltaConfirmation.js +215 -0
- package/dist/transactions/optimisticApply.d.ts +49 -0
- package/dist/transactions/optimisticApply.js +65 -0
- package/dist/transactions/replayValidation.d.ts +99 -0
- package/dist/transactions/replayValidation.js +111 -0
- package/dist/types/global.d.ts +46 -41
- package/dist/types/global.js +20 -19
- package/dist/types/index.d.ts +74 -80
- package/dist/types/index.js +22 -27
- package/dist/types/modelData.d.ts +10 -0
- package/dist/types/modelData.js +9 -0
- package/dist/types/participant.d.ts +20 -0
- package/dist/types/participant.js +10 -0
- package/dist/types/streams.d.ts +216 -209
- package/dist/types/streams.js +7 -7
- package/dist/utils/asyncIterator.d.ts +25 -32
- package/dist/utils/asyncIterator.js +25 -32
- package/dist/utils/duration.d.ts +12 -15
- package/dist/utils/duration.js +12 -15
- package/dist/utils/mobxSetup.d.ts +53 -0
- package/dist/utils/{mobx-setup.js → mobxSetup.js} +44 -100
- package/dist/webhooks/events.d.ts +21 -16
- package/dist/webhooks/events.js +10 -8
- package/dist/webhooks/index.d.ts +5 -7
- package/dist/webhooks/index.js +5 -7
- package/dist/{schema/sync-delta-wire.d.ts → wire/delta.d.ts} +58 -41
- package/dist/wire/delta.js +114 -0
- package/dist/wire/errorEnvelope.d.ts +35 -27
- package/dist/wire/errorEnvelope.js +38 -32
- package/dist/wire/frames.d.ts +150 -67
- package/dist/wire/frames.js +48 -1
- package/dist/wire/index.d.ts +18 -13
- package/dist/wire/index.js +36 -13
- package/dist/wire/listEnvelope.d.ts +16 -23
- package/dist/wire/listEnvelope.js +7 -6
- package/dist/wire/protocol.d.ts +38 -0
- package/dist/wire/protocol.js +38 -0
- package/dist/wire/protocolVersion.d.ts +60 -0
- package/dist/wire/protocolVersion.js +67 -0
- package/docs/api-keys.md +4 -3
- package/docs/coordination.md +59 -0
- package/docs/examples/existing-python-backend.md +3 -3
- package/docs/identity.md +4 -4
- package/docs/integration-guide.md +1 -1
- package/docs/react.md +1 -1
- package/docs/sessions.md +5 -7
- package/package.json +24 -21
- package/dist/ai-sdk/coordinated-tool.d.ts +0 -101
- package/dist/ai-sdk/coordination-context.d.ts +0 -52
- package/dist/client/index.d.ts +0 -36
- package/dist/client/index.js +0 -33
- package/dist/config/index.d.ts +0 -10
- package/dist/config/index.js +0 -12
- package/dist/core/query-utils.d.ts +0 -34
- package/dist/core/query-utils.js +0 -59
- package/dist/interfaces/headless.d.ts +0 -95
- package/dist/interfaces/headless.js +0 -41
- package/dist/query/index.d.ts +0 -6
- package/dist/query/index.js +0 -5
- package/dist/realtime/index.d.ts +0 -10
- package/dist/realtime/index.js +0 -9
- package/dist/schema/plane.d.ts +0 -23
- package/dist/schema/plane.js +0 -19
- package/dist/schema/sync-delta-row.js +0 -103
- package/dist/schema/sync-delta-wire.js +0 -102
- package/dist/server/next.d.ts +0 -51
- package/dist/server/next.js +0 -47
- package/dist/server/read-config.d.ts +0 -67
- package/dist/server/read-config.js +0 -8
- package/dist/server/storage-mode.d.ts +0 -1
- package/dist/server/storage-mode.js +0 -18
- package/dist/source/connector-protocol.d.ts +0 -159
- package/dist/source/connector-protocol.js +0 -161
- package/dist/sync/OfflineFlush.d.ts +0 -9
- package/dist/sync/OfflineFlush.js +0 -22
- package/dist/sync/OfflineTransactionStore.d.ts +0 -37
- package/dist/sync/OfflineTransactionStore.js +0 -263
- package/dist/transactions/OptimisticEchoTracker.d.ts +0 -82
- package/dist/transactions/OptimisticEchoTracker.js +0 -104
- package/dist/transactions/index.d.ts +0 -16
- package/dist/transactions/index.js +0 -7
- package/dist/transactions/mutation-error-handler.d.ts +0 -5
- package/dist/transactions/mutation-error-handler.js +0 -39
- package/dist/utils/mobx-setup.d.ts +0 -42
|
@@ -1,37 +1,32 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* never
|
|
2
|
+
* Mints a session token. This is the single implementation behind
|
|
3
|
+
* `sessions.create`, shared by the schema-aware client and the schemaless HTTP
|
|
4
|
+
* client so the two never disagree on how a token is produced.
|
|
5
5
|
*
|
|
6
|
-
* Minting is a
|
|
7
|
-
* holding a secret `sk_` exchanges it for a short-lived scoped
|
|
8
|
-
*
|
|
9
|
-
* (scoped to exactly the operations named in `can`). The two arms map to the
|
|
10
|
-
* server's two mint doors:
|
|
6
|
+
* Minting is a plain control-plane HTTP call — no socket, no synced data. A
|
|
7
|
+
* backend holding a secret key (`sk_`) exchanges it for a short-lived, scoped
|
|
8
|
+
* token whose kind depends on the session requested:
|
|
11
9
|
*
|
|
12
|
-
* `{ user }` → POST /auth/ephemeral-keys
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
10
|
+
* `{ user }` → POST /auth/ephemeral-keys, returning an `ek_` key that carries
|
|
11
|
+
* full end-user authority. This is the only route that mints a
|
|
12
|
+
* user session; the capability route rejects a `user`
|
|
13
|
+
* participant with `invalid_participant_kind`.
|
|
14
|
+
* `{ agent }` → POST /auth/capability, returning an `rk_` key scoped to exactly
|
|
15
|
+
* the operations named in `can`. For example
|
|
16
|
+
* `can: { tasks: ['update'] }` becomes the wire allowlist entry
|
|
17
|
+
* `tasks.update`, which the server matches against the model's
|
|
18
|
+
* registered names.
|
|
21
19
|
*
|
|
22
|
-
* The caller supplies the resolved
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
* Type-only imports of `CreateSessionParams` / `AbloSession` keep this module a
|
|
27
|
-
* leaf (no runtime cycle back to `Ablo.ts`): at runtime it depends on `auth` +
|
|
28
|
-
* `schema` only.
|
|
20
|
+
* The caller supplies the already-resolved secret key and base URL in
|
|
21
|
+
* {@link MintSessionContext}. Choosing which key to pass — the original secret
|
|
22
|
+
* key, not a derived key that an earlier exchange may have produced — is the
|
|
23
|
+
* caller's responsibility.
|
|
29
24
|
*/
|
|
30
25
|
import { exchangeApiKey, mintUserSessionKey } from '../auth/index.js';
|
|
31
26
|
/**
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
27
|
+
* Mints a session token from an already-resolved secret key and base URL.
|
|
28
|
+
* Routes the `{ user }` or `{ agent }` request to the matching mint endpoint
|
|
29
|
+
* and reshapes the response into an {@link AbloSession}.
|
|
35
30
|
*/
|
|
36
31
|
export async function mintSession(params, ctx) {
|
|
37
32
|
const { apiKey, baseUrl } = ctx;
|
|
@@ -64,10 +59,10 @@ export async function mintSession(params, ctx) {
|
|
|
64
59
|
};
|
|
65
60
|
}
|
|
66
61
|
const operations = Object.entries(params.can).flatMap(([model, ops]) => {
|
|
67
|
-
// Translate the schema key the developer used in `can`
|
|
68
|
-
//
|
|
69
|
-
//
|
|
70
|
-
//
|
|
62
|
+
// Translate the schema key the developer used in `can` into the wire type
|
|
63
|
+
// name the server checks — see `modelTypenames` above. Falls back to the
|
|
64
|
+
// key itself when no map is supplied (the schemaless client) or the key is
|
|
65
|
+
// absent from it.
|
|
71
66
|
const ns = ctx.modelTypenames?.[model] ?? model;
|
|
72
67
|
return (ops ?? []).map((op) => `${ns.toLowerCase()}.${op}`);
|
|
73
68
|
});
|
|
@@ -1,22 +1,20 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
2
|
+
* Validates the options passed when constructing a client, before any
|
|
3
|
+
* connection is attempted. Returns the first problem it finds as an
|
|
4
|
+
* {@link AbloError}, or null when every check passes. The caller records that
|
|
5
|
+
* error on the client's sync status, so a misconfiguration surfaces through the
|
|
6
|
+
* normal status channel rather than throwing at the call site.
|
|
6
7
|
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* because the error messages reference URLs and would mislead if a
|
|
11
|
-
* URL was actually present.
|
|
8
|
+
* The order of checks matters: a missing `url` is reported before any identity
|
|
9
|
+
* problem, because the identity error messages mention the URL and would
|
|
10
|
+
* mislead if the URL were the thing actually missing.
|
|
12
11
|
*/
|
|
13
12
|
import { AbloError } from '../errors.js';
|
|
14
13
|
/**
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
* `AbloOptions` so a real options object satisfies this shape.
|
|
14
|
+
* The subset of client options this validator reads. It is declared as its own
|
|
15
|
+
* interface, structurally compatible with the full options type, so a real
|
|
16
|
+
* options object satisfies it without the validator having to depend on the
|
|
17
|
+
* complete type.
|
|
20
18
|
*/
|
|
21
19
|
export interface ValidatableAbloOptions {
|
|
22
20
|
readonly schema?: {
|
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
2
|
+
* Validates the options passed when constructing a client, before any
|
|
3
|
+
* connection is attempted. Returns the first problem it finds as an
|
|
4
|
+
* {@link AbloError}, or null when every check passes. The caller records that
|
|
5
|
+
* error on the client's sync status, so a misconfiguration surfaces through the
|
|
6
|
+
* normal status channel rather than throwing at the call site.
|
|
6
7
|
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* because the error messages reference URLs and would mislead if a
|
|
11
|
-
* URL was actually present.
|
|
8
|
+
* The order of checks matters: a missing `url` is reported before any identity
|
|
9
|
+
* problem, because the identity error messages mention the URL and would
|
|
10
|
+
* mislead if the URL were the thing actually missing.
|
|
12
11
|
*/
|
|
13
|
-
import { AbloValidationError } from '../errors.js';
|
|
12
|
+
import { AbloError, AbloValidationError } from '../errors.js';
|
|
14
13
|
export function validateAbloOptions(input) {
|
|
15
14
|
const { options, url, configuredApiKey, configuredAuthToken } = input;
|
|
16
15
|
const kind = options.kind ?? 'user';
|
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* HTTP
|
|
5
|
-
* caller
|
|
6
|
-
* typed
|
|
2
|
+
* The Zod schema for write options — the settings accepted by every write
|
|
3
|
+
* entry point, including `ablo.<model>.create/update/delete`, `commits.create`,
|
|
4
|
+
* and the HTTP write routes. Each of those boundaries validates against this
|
|
5
|
+
* one schema, so a caller who passes, say, `onStale: 'rejct'` fails right away
|
|
6
|
+
* with a typed {@link AbloValidationError} at the call site instead of silently
|
|
7
|
+
* or with a 400 from the server.
|
|
7
8
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
9
|
+
* The schema is the runtime counterpart of the {@link MutationOptions}
|
|
10
|
+
* interface. A compile-time check at the bottom of this file asserts that the
|
|
11
|
+
* two describe the same shape, so they cannot drift apart.
|
|
11
12
|
*
|
|
12
|
-
* Validation
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
13
|
+
* Validation only inspects; it never transforms. Callers keep the exact options
|
|
14
|
+
* object they passed in. This matters because the `claim` field can hold a live
|
|
15
|
+
* claim handle whose `release` and `revoke` functions must survive, so the code
|
|
16
|
+
* asserts the shape rather than replacing the value with a parsed copy.
|
|
16
17
|
*/
|
|
17
18
|
import { z } from 'zod';
|
|
18
19
|
export declare const onStaleModeSchema: z.ZodEnum<{
|
|
@@ -40,9 +41,10 @@ export declare const writeOptionsSchema: z.ZodObject<{
|
|
|
40
41
|
}, z.core.$strip>;
|
|
41
42
|
export type WriteOptionsInput = z.infer<typeof writeOptionsSchema>;
|
|
42
43
|
/**
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
* `param` pointing at the offending
|
|
46
|
-
*
|
|
44
|
+
* Validates a write-options object against {@link writeOptionsSchema}. On
|
|
45
|
+
* failure it throws a typed {@link AbloValidationError} — with
|
|
46
|
+
* `code: 'write_options_invalid'` and a `param` pointing at the offending
|
|
47
|
+
* field — and on success returns nothing, leaving the caller's original object
|
|
48
|
+
* untouched. A `null` or `undefined` value passes.
|
|
47
49
|
*/
|
|
48
50
|
export declare function assertWriteOptions(value: unknown, context?: string): void;
|
|
@@ -1,24 +1,26 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* HTTP
|
|
5
|
-
* caller
|
|
6
|
-
* typed
|
|
2
|
+
* The Zod schema for write options — the settings accepted by every write
|
|
3
|
+
* entry point, including `ablo.<model>.create/update/delete`, `commits.create`,
|
|
4
|
+
* and the HTTP write routes. Each of those boundaries validates against this
|
|
5
|
+
* one schema, so a caller who passes, say, `onStale: 'rejct'` fails right away
|
|
6
|
+
* with a typed {@link AbloValidationError} at the call site instead of silently
|
|
7
|
+
* or with a 400 from the server.
|
|
7
8
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
9
|
+
* The schema is the runtime counterpart of the {@link MutationOptions}
|
|
10
|
+
* interface. A compile-time check at the bottom of this file asserts that the
|
|
11
|
+
* two describe the same shape, so they cannot drift apart.
|
|
11
12
|
*
|
|
12
|
-
* Validation
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
13
|
+
* Validation only inspects; it never transforms. Callers keep the exact options
|
|
14
|
+
* object they passed in. This matters because the `claim` field can hold a live
|
|
15
|
+
* claim handle whose `release` and `revoke` functions must survive, so the code
|
|
16
|
+
* asserts the shape rather than replacing the value with a parsed copy.
|
|
16
17
|
*/
|
|
17
18
|
import { z } from 'zod';
|
|
18
19
|
import { AbloValidationError } from '../errors.js';
|
|
19
20
|
export const onStaleModeSchema = z.enum(['reject', 'overwrite', 'notify']);
|
|
20
21
|
export const writeOptionsSchema = z.object({
|
|
21
|
-
/**
|
|
22
|
+
/** Idempotency key the server records in `mutation_log` to make retries
|
|
23
|
+
* safe; `null` opts out of that protection. */
|
|
22
24
|
idempotencyKey: z.string().min(1).max(255).nullish(),
|
|
23
25
|
/** Human-readable audit tag, persisted to `mutation_log.label`. */
|
|
24
26
|
label: z.string().max(255).optional(),
|
|
@@ -28,17 +30,18 @@ export const writeOptionsSchema = z.object({
|
|
|
28
30
|
readAt: z.number().int().nonnegative().nullish(),
|
|
29
31
|
/** What the server does when the target moved past `readAt`. */
|
|
30
32
|
onStale: onStaleModeSchema.nullish(),
|
|
31
|
-
/**
|
|
32
|
-
* handle
|
|
33
|
+
/** The claim this write belongs to — either a claim id, or a live claim
|
|
34
|
+
* handle whose `release`/`revoke` functions are preserved untouched. */
|
|
33
35
|
claim: z.union([z.string(), z.looseObject({ id: z.string() })]).nullish(),
|
|
34
|
-
/**
|
|
36
|
+
/** Reserved wire-compatibility field; current clients always send `null`. */
|
|
35
37
|
causedByTaskId: z.string().nullish(),
|
|
36
38
|
});
|
|
37
39
|
/**
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
* `param` pointing at the offending
|
|
41
|
-
*
|
|
40
|
+
* Validates a write-options object against {@link writeOptionsSchema}. On
|
|
41
|
+
* failure it throws a typed {@link AbloValidationError} — with
|
|
42
|
+
* `code: 'write_options_invalid'` and a `param` pointing at the offending
|
|
43
|
+
* field — and on success returns nothing, leaving the caller's original object
|
|
44
|
+
* untouched. A `null` or `undefined` value passes.
|
|
42
45
|
*/
|
|
43
46
|
export function assertWriteOptions(value, context) {
|
|
44
47
|
if (value == null)
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The default {@link MutationExecutor}. It sends each change as a `commit`
|
|
3
|
+
* frame over the sync engine's own WebSocket, resolving that socket lazily at
|
|
4
|
+
* commit time because it does not exist yet when the executor is created. A
|
|
5
|
+
* client wires this up automatically unless you supply your own executor.
|
|
6
|
+
*/
|
|
7
|
+
import type { StaleNotification, ReadDependency } from '../coordination/schema.js';
|
|
8
|
+
import type { MutationExecutor, MutationOperation } from '../interfaces/index.js';
|
|
9
|
+
/**
|
|
10
|
+
* Creates the default mutation executor, which sends each change as a `commit`
|
|
11
|
+
* frame over the sync engine's own WebSocket. The engine owns its socket, so
|
|
12
|
+
* you pass a URL and credentials rather than transport callbacks.
|
|
13
|
+
*
|
|
14
|
+
* The factory takes a `getWs` accessor instead of a socket directly because the
|
|
15
|
+
* socket is created later during client startup and does not exist yet when
|
|
16
|
+
* this executor is constructed. The accessor is called at commit time to reach
|
|
17
|
+
* the ready socket.
|
|
18
|
+
*
|
|
19
|
+
* When set, `options.idempotencyKey` is sent as the wire-level `clientTxId`, so
|
|
20
|
+
* retrying a call with the same key is safe; otherwise the executor generates
|
|
21
|
+
* one.
|
|
22
|
+
*/
|
|
23
|
+
export declare function createDefaultMutationExecutor(getWs: () => {
|
|
24
|
+
sendCommit?: (operations: readonly MutationOperation[], clientTxId: string, timeoutMs?: number, causedByTaskId?: string | null, reads?: readonly ReadDependency[] | null) => Promise<{
|
|
25
|
+
lastSyncId: number;
|
|
26
|
+
notifications?: StaleNotification[];
|
|
27
|
+
}>;
|
|
28
|
+
} | null): MutationExecutor;
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The default {@link MutationExecutor}. It sends each change as a `commit`
|
|
3
|
+
* frame over the sync engine's own WebSocket, resolving that socket lazily at
|
|
4
|
+
* commit time because it does not exist yet when the executor is created. A
|
|
5
|
+
* client wires this up automatically unless you supply your own executor.
|
|
6
|
+
*/
|
|
7
|
+
import { AbloError, AbloConnectionError } from '../errors.js';
|
|
8
|
+
// ── Default mutation executor (wire: `commit` frame over WebSocket) ──────
|
|
9
|
+
/**
|
|
10
|
+
* Creates the default mutation executor, which sends each change as a `commit`
|
|
11
|
+
* frame over the sync engine's own WebSocket. The engine owns its socket, so
|
|
12
|
+
* you pass a URL and credentials rather than transport callbacks.
|
|
13
|
+
*
|
|
14
|
+
* The factory takes a `getWs` accessor instead of a socket directly because the
|
|
15
|
+
* socket is created later during client startup and does not exist yet when
|
|
16
|
+
* this executor is constructed. The accessor is called at commit time to reach
|
|
17
|
+
* the ready socket.
|
|
18
|
+
*
|
|
19
|
+
* When set, `options.idempotencyKey` is sent as the wire-level `clientTxId`, so
|
|
20
|
+
* retrying a call with the same key is safe; otherwise the executor generates
|
|
21
|
+
* one.
|
|
22
|
+
*/
|
|
23
|
+
export function createDefaultMutationExecutor(getWs) {
|
|
24
|
+
async function commit(operations, options) {
|
|
25
|
+
const ws = getWs();
|
|
26
|
+
if (!ws?.sendCommit) {
|
|
27
|
+
throw new AbloConnectionError('SyncWebSocket not ready for commit. The engine must finish bootstrap ' +
|
|
28
|
+
'before mutations can be sent.', { code: 'ws_not_ready' });
|
|
29
|
+
}
|
|
30
|
+
const clientTxId = options?.idempotencyKey ??
|
|
31
|
+
(typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function'
|
|
32
|
+
? crypto.randomUUID()
|
|
33
|
+
: `tx_${Date.now()}_${Math.random().toString(36).slice(2, 10)}`);
|
|
34
|
+
try {
|
|
35
|
+
return await ws.sendCommit(operations, clientTxId, undefined, // use sendCommit's built-in 15s default; no per-call override
|
|
36
|
+
options?.causedByTaskId, options?.reads);
|
|
37
|
+
}
|
|
38
|
+
catch (err) {
|
|
39
|
+
// Wrap transport-level failures as connection errors so the transaction
|
|
40
|
+
// queue's retry classifier treats them as transient and retries them.
|
|
41
|
+
if (err instanceof AbloError)
|
|
42
|
+
throw err;
|
|
43
|
+
if (err instanceof Error) {
|
|
44
|
+
if (/not connected|timed out|connection|ECONN/i.test(err.message)) {
|
|
45
|
+
const wrapped = new AbloConnectionError(err.message, { cause: err });
|
|
46
|
+
// Preserve any `diagnostics` snapshot the underlying SyncWebSocket
|
|
47
|
+
// attached to the rejection. Without this, the wrapped error
|
|
48
|
+
// bottoms out at "AbloConnectionError: not connected" with no
|
|
49
|
+
// attribution to which close code / heartbeat trip / session
|
|
50
|
+
// error caused it. See SyncWebSocket.notConnectedError().
|
|
51
|
+
if (err &&
|
|
52
|
+
typeof err === 'object' &&
|
|
53
|
+
'diagnostics' in err &&
|
|
54
|
+
err.diagnostics) {
|
|
55
|
+
wrapped.diagnostics = err.diagnostics;
|
|
56
|
+
}
|
|
57
|
+
throw wrapped;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
throw err;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return {
|
|
64
|
+
commit,
|
|
65
|
+
executeCreate: (model, id, input, _txId, options) => commit([{ type: 'CREATE', model: model.toLowerCase(), id, input }], options).then(() => { }),
|
|
66
|
+
executeUpdate: (model, id, data, _txId, options) => commit([{ type: 'UPDATE', model: model.toLowerCase(), id, input: data }], options),
|
|
67
|
+
executeDelete: (model, id, _txId, options) => commit([{ type: 'DELETE', model: model.toLowerCase(), id }], options).then(() => { }),
|
|
68
|
+
executeArchive: (model, id, _txId, options) => commit([{ type: 'ARCHIVE', model: model.toLowerCase(), id }], options).then(() => { }),
|
|
69
|
+
executeUnarchive: (model, id, _txId, options) => commit([{ type: 'UNARCHIVE', model: model.toLowerCase(), id }], options).then(() => { }),
|
|
70
|
+
};
|
|
71
|
+
}
|
package/dist/context.d.ts
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Module-level context
|
|
2
|
+
* Module-level accessor for the sync engine's shared context.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* The context is set once, during initialization, by {@link initSyncEngine}.
|
|
5
|
+
* Code throughout the package reaches its shared dependencies — logger,
|
|
6
|
+
* observability, online-status detector, configuration, and the mutation
|
|
7
|
+
* executor — through {@link getContext} instead of receiving them through every
|
|
8
|
+
* constructor.
|
|
7
9
|
*/
|
|
8
10
|
import type { SyncEngineContext } from './SyncEngineContext.js';
|
|
9
11
|
/**
|
package/dist/context.js
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Module-level context
|
|
2
|
+
* Module-level accessor for the sync engine's shared context.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* The context is set once, during initialization, by {@link initSyncEngine}.
|
|
5
|
+
* Code throughout the package reaches its shared dependencies — logger,
|
|
6
|
+
* observability, online-status detector, configuration, and the mutation
|
|
7
|
+
* executor — through {@link getContext} instead of receiving them through every
|
|
8
|
+
* constructor.
|
|
7
9
|
*/
|
|
8
10
|
import { noopLogger, noopObservability, browserOnlineStatus, defaultSessionErrorDetector, emptyConfig, } from './SyncEngineContext.js';
|
|
9
11
|
let _context = null;
|
|
@@ -52,7 +54,4 @@ const _fallback = {
|
|
|
52
54
|
executeArchive: () => Promise.resolve(),
|
|
53
55
|
executeUnarchive: () => Promise.resolve(),
|
|
54
56
|
},
|
|
55
|
-
mutationDispatcher: {
|
|
56
|
-
dispatch: () => Promise.resolve(),
|
|
57
|
-
},
|
|
58
57
|
};
|
|
@@ -1,6 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* `@abloatai/ablo/coordination`
|
|
3
|
-
* coordination layers
|
|
4
|
-
*
|
|
2
|
+
* The `@abloatai/ablo/coordination` entry point. It re-exports the wire
|
|
3
|
+
* schemas and inferred types for the three coordination layers: presence (who
|
|
4
|
+
* is currently active), claims (taking exclusive hold of a target before
|
|
5
|
+
* writing it), and stale-context guards (rejecting a write that was based on an
|
|
6
|
+
* out-of-date read). The definitions themselves live in the sibling schema
|
|
7
|
+
* module.
|
|
8
|
+
*
|
|
9
|
+
* Exports are listed by name rather than re-exported wholesale, so every symbol
|
|
10
|
+
* that becomes part of this package's public API is a deliberate choice.
|
|
5
11
|
*/
|
|
6
|
-
export
|
|
12
|
+
export { targetRangeSchema, participantKindSchema, wireParticipantKindSchema, participantKindFromWire, descriptionFromMeta, targetRefSchema, onStaleModeSchema, writeGuardSchema, staleNotificationSchema, readDependencySchema, claimStatusSchema, wireClaimSummarySchema, claimErrorSchema, wireClaimSchema, claimRejectionSchema, modelTargetSchema, modelClaimSchema, claimBeginPayloadSchema, claimAbandonPayloadSchema, claimReorderPayloadSchema, claimHeartbeatPayloadSchema, claimHeartbeatAckPayloadSchema, claimHeartbeatBatchPayloadSchema, claimHeartbeatBatchAckPayloadSchema, updateSubscriptionPayloadSchema, subscriptionAckPayloadSchema, commitOperationTypeSchema, commitOperationSchema, presenceKindSchema, presenceActivitySchema, presenceUpdateFrameSchema, } from './schema.js';
|
|
13
|
+
export { defaultPolicy, capabilityPreemptPolicy, interpretConflictAxis } from '../policy/types.js';
|
|
14
|
+
export type { Conflict, ConflictAxis, ConflictDecision, ConflictKind, ConflictOperation, ConflictPolicy, StaleContextConflict, ClaimHeldConflict, } from '../policy/types.js';
|
|
15
|
+
export type { TargetRange, ParticipantKind, TargetRef, OnStaleMode, WriteGuard, StaleNotification, ReadDependency, ClaimStatus, WireClaimSummary, ClaimError, WireClaim, ClaimRejection, ModelTarget, ModelClaim, ClaimBeginPayload, ClaimAbandonPayload, ClaimReorderPayload, ClaimHeartbeatPayload, ClaimHeartbeatAckPayload, ClaimHeartbeatBatchPayload, ClaimHeartbeatBatchAckPayload, UpdateSubscriptionPayload, SubscriptionAckPayload, CommitOperationType, CommitOperation, AnyCommitOperation, PresenceKind, PresenceActivity, PresenceUpdateFrame, } from './schema.js';
|
|
@@ -1,6 +1,31 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* `@abloatai/ablo/coordination`
|
|
3
|
-
* coordination layers
|
|
4
|
-
*
|
|
2
|
+
* The `@abloatai/ablo/coordination` entry point. It re-exports the wire
|
|
3
|
+
* schemas and inferred types for the three coordination layers: presence (who
|
|
4
|
+
* is currently active), claims (taking exclusive hold of a target before
|
|
5
|
+
* writing it), and stale-context guards (rejecting a write that was based on an
|
|
6
|
+
* out-of-date read). The definitions themselves live in the sibling schema
|
|
7
|
+
* module.
|
|
8
|
+
*
|
|
9
|
+
* Exports are listed by name rather than re-exported wholesale, so every symbol
|
|
10
|
+
* that becomes part of this package's public API is a deliberate choice.
|
|
5
11
|
*/
|
|
6
|
-
|
|
12
|
+
// Runtime schemas + helpers.
|
|
13
|
+
export {
|
|
14
|
+
// Shared primitives
|
|
15
|
+
targetRangeSchema, participantKindSchema, wireParticipantKindSchema, participantKindFromWire, descriptionFromMeta, targetRefSchema,
|
|
16
|
+
// Layer 3 — optimistic stale-context
|
|
17
|
+
onStaleModeSchema, writeGuardSchema, staleNotificationSchema, readDependencySchema,
|
|
18
|
+
// Layer 2 — pessimistic claim / claim-lease
|
|
19
|
+
claimStatusSchema, wireClaimSummarySchema, claimErrorSchema, wireClaimSchema, claimRejectionSchema, modelTargetSchema, modelClaimSchema, claimBeginPayloadSchema, claimAbandonPayloadSchema, claimReorderPayloadSchema, claimHeartbeatPayloadSchema, claimHeartbeatAckPayloadSchema, claimHeartbeatBatchPayloadSchema, claimHeartbeatBatchAckPayloadSchema,
|
|
20
|
+
// Read interest — area-of-interest navigation
|
|
21
|
+
updateSubscriptionPayloadSchema, subscriptionAckPayloadSchema,
|
|
22
|
+
// Commit operation — carries the optimistic write-guard
|
|
23
|
+
commitOperationTypeSchema, commitOperationSchema,
|
|
24
|
+
// Layer 1 — presence
|
|
25
|
+
presenceKindSchema, presenceActivitySchema, presenceUpdateFrameSchema, } from './schema.js';
|
|
26
|
+
// Conflict-policy runtime — the engine detects a conflict, and the policy
|
|
27
|
+
// decides what to do about it. These are re-exported here so that server-side
|
|
28
|
+
// code can reach both the coordination vocabulary and its default conflict
|
|
29
|
+
// resolution from this one subpath, without importing the full client from the
|
|
30
|
+
// package root.
|
|
31
|
+
export { defaultPolicy, capabilityPreemptPolicy, interpretConflictAxis } from '../policy/types.js';
|