@abloatai/ablo 0.26.0 → 0.28.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/CHANGELOG.md +42 -2
- package/README.md +102 -86
- package/dist/BaseSyncedStore.d.ts +85 -88
- package/dist/BaseSyncedStore.js +134 -151
- package/dist/Database.d.ts +68 -69
- package/dist/Database.js +316 -135
- package/dist/{ObjectPool.d.ts → InstanceCache.d.ts} +10 -13
- package/dist/{ObjectPool.js → InstanceCache.js} +85 -83
- package/dist/LazyReferenceCollection.d.ts +11 -15
- package/dist/LazyReferenceCollection.js +12 -16
- package/dist/Model.d.ts +54 -52
- package/dist/Model.js +78 -62
- package/dist/ModelRegistry.d.ts +21 -19
- package/dist/ModelRegistry.js +23 -27
- package/dist/NetworkMonitor.d.ts +5 -6
- package/dist/NetworkMonitor.js +5 -6
- package/dist/SyncClient.d.ts +122 -118
- package/dist/SyncClient.js +541 -245
- package/dist/adapters/alwaysOnline.d.ts +6 -8
- package/dist/adapters/alwaysOnline.js +6 -8
- package/dist/adapters/inMemoryStorage.d.ts +10 -9
- package/dist/adapters/inMemoryStorage.js +21 -9
- package/dist/agent/Agent.d.ts +27 -32
- package/dist/agent/Agent.js +18 -19
- 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} +26 -33
- package/dist/ai-sdk/index.d.ts +25 -22
- package/dist/ai-sdk/index.js +25 -22
- package/dist/ai-sdk/wrap.d.ts +6 -7
- package/dist/ai-sdk/wrap.js +1 -1
- package/dist/auth/credentialPolicy.d.ts +69 -74
- package/dist/auth/credentialPolicy.js +51 -56
- package/dist/auth/credentialSource.d.ts +6 -5
- package/dist/auth/credentialSource.js +9 -10
- package/dist/auth/index.d.ts +59 -58
- package/dist/auth/index.js +31 -37
- 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 +173 -121
- package/dist/client/Ablo.d.ts +97 -74
- package/dist/client/Ablo.js +129 -163
- package/dist/client/ApiClient.d.ts +30 -19
- package/dist/client/ApiClient.js +442 -81
- package/dist/client/auth.d.ts +47 -47
- package/dist/client/auth.js +108 -117
- package/dist/client/claimHeartbeatLoop.d.ts +50 -0
- package/dist/client/claimHeartbeatLoop.js +88 -0
- package/dist/client/consoleLogger.d.ts +5 -6
- package/dist/client/consoleLogger.js +5 -6
- package/dist/client/createInternalComponents.d.ts +16 -17
- package/dist/client/createInternalComponents.js +26 -31
- package/dist/client/createModelProxy.d.ts +130 -120
- package/dist/client/createModelProxy.js +152 -122
- package/dist/client/credentialEndpoint.d.ts +40 -42
- package/dist/client/credentialEndpoint.js +35 -36
- package/dist/client/functionalUpdate.d.ts +29 -27
- package/dist/client/functionalUpdate.js +21 -21
- package/dist/client/hostedEndpoints.d.ts +9 -12
- package/dist/client/hostedEndpoints.js +9 -12
- package/dist/client/httpClient.d.ts +59 -53
- package/dist/client/httpClient.js +29 -31
- package/dist/client/identity.d.ts +15 -20
- package/dist/client/identity.js +47 -58
- package/dist/client/modelRegistration.d.ts +5 -9
- package/dist/client/modelRegistration.js +78 -87
- package/dist/client/options.d.ts +157 -157
- package/dist/client/options.js +3 -7
- package/dist/client/registerDataSource.d.ts +9 -9
- package/dist/client/registerDataSource.js +15 -16
- package/dist/client/resourceTypes.d.ts +64 -75
- package/dist/client/resourceTypes.js +4 -10
- package/dist/client/schemaConfig.d.ts +31 -43
- package/dist/client/schemaConfig.js +38 -50
- package/dist/client/sessionMint.d.ts +16 -12
- package/dist/client/sessionMint.js +26 -31
- package/dist/client/validateAbloOptions.d.ts +12 -14
- package/dist/client/validateAbloOptions.js +8 -9
- package/dist/client/writeOptionsSchema.d.ts +18 -16
- package/dist/client/writeOptionsSchema.js +23 -20
- package/dist/client/wsMutationExecutor.d.ts +16 -20
- package/dist/client/wsMutationExecutor.js +18 -23
- package/dist/commit/contract.d.ts +493 -0
- package/dist/commit/contract.js +187 -0
- package/dist/commit/index.d.ts +6 -0
- package/dist/commit/index.js +5 -0
- package/dist/context.d.ts +6 -4
- package/dist/context.js +6 -4
- package/dist/coordination/index.d.ts +10 -8
- package/dist/coordination/index.js +14 -12
- package/dist/coordination/schema.d.ts +176 -128
- package/dist/coordination/schema.js +197 -133
- package/dist/coordination/trace.d.ts +9 -10
- package/dist/coordination/trace.js +13 -14
- package/dist/core/DatabaseManager.d.ts +5 -7
- package/dist/core/DatabaseManager.js +15 -19
- package/dist/core/QueryProcessor.d.ts +7 -9
- package/dist/core/QueryProcessor.js +22 -28
- package/dist/core/QueryView.d.ts +8 -8
- package/dist/core/QueryView.js +2 -2
- package/dist/core/StoreManager.d.ts +14 -14
- package/dist/core/StoreManager.js +33 -24
- package/dist/core/ViewRegistry.d.ts +5 -5
- package/dist/core/ViewRegistry.js +4 -4
- package/dist/core/index.d.ts +17 -12
- package/dist/core/index.js +32 -26
- package/dist/core/openIDBWithTimeout.d.ts +38 -36
- package/dist/core/openIDBWithTimeout.js +42 -43
- package/dist/core/queryUtils.d.ts +45 -0
- package/dist/core/queryUtils.js +69 -0
- package/dist/core/storeContract.d.ts +63 -61
- package/dist/core/storeContract.js +8 -12
- package/dist/environment.d.ts +28 -0
- package/dist/environment.js +21 -0
- package/dist/errorCodes.d.ts +107 -99
- package/dist/errorCodes.js +137 -134
- package/dist/errors.d.ts +160 -166
- package/dist/errors.js +155 -158
- package/dist/index.d.ts +36 -27
- package/dist/index.js +91 -86
- package/dist/interfaces/index.d.ts +102 -113
- package/dist/interfaces/index.js +5 -4
- package/dist/keys/index.d.ts +27 -29
- package/dist/keys/index.js +41 -40
- 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 +124 -131
- package/dist/mutators/UndoManager.js +177 -156
- package/dist/mutators/defineMutators.d.ts +23 -34
- 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 +104 -100
- package/dist/policy/types.js +67 -66
- package/dist/query/client.d.ts +28 -23
- package/dist/query/client.js +45 -43
- package/dist/query/types.d.ts +37 -60
- package/dist/query/types.js +13 -33
- package/dist/react/AbloProvider.d.ts +1 -1
- package/dist/react/AbloProvider.js +2 -2
- package/dist/react/context.d.ts +25 -28
- 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 +28 -25
- package/dist/react/useAblo.js +41 -17
- 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 +10 -11
- package/dist/react/useMutationFailureListener.d.ts +8 -8
- package/dist/react/useMutationFailureListener.js +8 -8
- package/dist/react/useMutators.d.ts +11 -11
- package/dist/react/useMutators.js +3 -3
- package/dist/react/useReactive.js +2 -2
- package/dist/react/useSyncStatus.d.ts +4 -6
- package/dist/react/useUndoScope.d.ts +7 -9
- package/dist/react/useUndoScope.js +1 -1
- 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 +20 -24
- package/dist/schema/ddlLock.js +18 -23
- 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 +35 -48
- package/dist/schema/generate.d.ts +12 -12
- package/dist/schema/generate.js +12 -12
- package/dist/schema/index.d.ts +3 -3
- package/dist/schema/index.js +21 -23
- package/dist/schema/model.d.ts +118 -143
- package/dist/schema/model.js +22 -33
- package/dist/schema/openapi.d.ts +10 -9
- package/dist/schema/openapi.js +5 -3
- package/dist/schema/queries.d.ts +29 -31
- package/dist/schema/queries.js +23 -25
- package/dist/schema/relation.d.ts +89 -99
- package/dist/schema/relation.js +13 -13
- package/dist/schema/residency.d.ts +16 -13
- package/dist/schema/residency.js +16 -13
- package/dist/schema/roles.d.ts +36 -43
- package/dist/schema/roles.js +31 -37
- package/dist/schema/schema.d.ts +64 -43
- package/dist/schema/schema.js +31 -32
- package/dist/schema/select.d.ts +13 -13
- package/dist/schema/select.js +13 -13
- package/dist/schema/serialize.d.ts +28 -31
- 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} +26 -49
- 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 +30 -25
- package/dist/source/adapter.js +10 -10
- package/dist/source/adapters/drizzle.d.ts +28 -23
- package/dist/source/adapters/drizzle.js +30 -25
- package/dist/source/adapters/kysely.d.ts +27 -25
- package/dist/source/adapters/kysely.js +24 -23
- package/dist/source/adapters/memory.d.ts +8 -7
- package/dist/source/adapters/memory.js +9 -8
- package/dist/source/adapters/prisma.d.ts +13 -12
- package/dist/source/adapters/prisma.js +22 -25
- package/dist/source/conformance.d.ts +18 -11
- package/dist/source/conformance.js +17 -11
- package/dist/source/connector.d.ts +31 -32
- package/dist/source/connector.js +28 -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 +46 -58
- package/dist/source/factory.js +22 -27
- package/dist/source/index.d.ts +7 -9
- package/dist/source/index.js +12 -14
- package/dist/source/migrations.d.ts +9 -9
- package/dist/source/migrations.js +9 -9
- package/dist/source/next.d.ts +9 -10
- package/dist/source/next.js +6 -7
- package/dist/source/pushQueue.d.ts +69 -47
- package/dist/source/pushQueue.js +32 -28
- package/dist/source/signing.d.ts +46 -17
- package/dist/source/signing.js +28 -11
- package/dist/source/types.d.ts +121 -104
- package/dist/source/types.js +13 -14
- package/dist/stores/ObjectStore.d.ts +24 -12
- package/dist/stores/ObjectStore.js +38 -16
- package/dist/stores/ObjectStoreContract.d.ts +14 -15
- package/dist/stores/SyncActionStore.d.ts +7 -11
- package/dist/stores/SyncActionStore.js +13 -17
- package/dist/surface.d.ts +28 -21
- package/dist/surface.js +29 -20
- package/dist/sync/{BootstrapHelper.d.ts → BootstrapFetcher.d.ts} +36 -42
- package/dist/sync/{BootstrapHelper.js → BootstrapFetcher.js} +76 -76
- package/dist/sync/ConnectionManager.d.ts +39 -50
- package/dist/sync/ConnectionManager.js +55 -66
- package/dist/sync/NetworkProbe.d.ts +24 -29
- package/dist/sync/NetworkProbe.js +63 -69
- package/dist/sync/{HydrationCoordinator.d.ts → OnDemandLoader.d.ts} +42 -41
- package/dist/sync/{HydrationCoordinator.js → OnDemandLoader.js} +59 -54
- package/dist/sync/{AreaOfInterestManager.d.ts → SubscriptionManager.d.ts} +43 -57
- package/dist/sync/{AreaOfInterestManager.js → SubscriptionManager.js} +43 -51
- package/dist/sync/SyncWebSocket.d.ts +141 -166
- package/dist/sync/SyncWebSocket.js +191 -223
- package/dist/sync/awaitClaimGrant.d.ts +18 -18
- package/dist/sync/awaitClaimGrant.js +11 -11
- package/dist/sync/bootstrapApply.d.ts +34 -24
- package/dist/sync/bootstrapApply.js +27 -19
- package/dist/sync/commitFrames.d.ts +21 -20
- package/dist/sync/commitFrames.js +18 -18
- package/dist/sync/createClaimStream.d.ts +23 -22
- package/dist/sync/createClaimStream.js +105 -23
- package/dist/sync/createPresenceStream.d.ts +19 -18
- package/dist/sync/createPresenceStream.js +25 -26
- package/dist/sync/createSnapshot.d.ts +12 -14
- package/dist/sync/createSnapshot.js +20 -26
- package/dist/sync/credentialLifecycle.d.ts +104 -104
- package/dist/sync/credentialLifecycle.js +140 -147
- package/dist/sync/deltaPipeline.d.ts +36 -34
- package/dist/sync/deltaPipeline.js +64 -65
- package/dist/sync/groupChange.d.ts +63 -61
- package/dist/sync/groupChange.js +74 -78
- package/dist/sync/heartbeat.d.ts +34 -33
- package/dist/sync/heartbeat.js +31 -31
- package/dist/sync/participants.d.ts +19 -19
- package/dist/sync/persistedPrefix.d.ts +12 -0
- package/dist/sync/persistedPrefix.js +22 -0
- package/dist/sync/schemas.d.ts +3 -2
- package/dist/sync/schemas.js +14 -10
- package/dist/sync/syncCursor.d.ts +17 -21
- package/dist/sync/syncCursor.js +17 -21
- package/dist/sync/syncPlan.d.ts +28 -36
- package/dist/sync/syncPlan.js +18 -19
- package/dist/sync/syncPosition.d.ts +54 -49
- package/dist/sync/syncPosition.js +57 -52
- package/dist/sync/wsFrameHandlers.d.ts +35 -36
- package/dist/sync/wsFrameHandlers.js +63 -67
- package/dist/testing/fixtures/bootstrap.d.ts +12 -6
- package/dist/testing/fixtures/bootstrap.js +12 -6
- package/dist/testing/fixtures/deltas.d.ts +30 -33
- package/dist/testing/fixtures/deltas.js +30 -33
- package/dist/testing/fixtures/models.d.ts +11 -10
- package/dist/testing/fixtures/models.js +11 -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 -15
- package/dist/testing/helpers/{sync-engine-harness.js → syncEngineHarness.js} +12 -10
- package/dist/testing/helpers/wait.d.ts +13 -8
- package/dist/testing/helpers/wait.js +13 -8
- package/dist/testing/index.d.ts +5 -3
- package/dist/testing/index.js +3 -2
- package/dist/testing/mocks/FakeDatabase.d.ts +18 -0
- package/dist/testing/mocks/FakeDatabase.js +10 -0
- 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 +20 -17
- package/dist/testing/mocks/MockSyncContext.js +15 -13
- package/dist/testing/mocks/MockSyncStore.d.ts +10 -10
- package/dist/testing/mocks/MockSyncStore.js +11 -11
- package/dist/testing/mocks/MockWebSocket.d.ts +28 -23
- package/dist/testing/mocks/MockWebSocket.js +22 -21
- package/dist/transactions/TransactionQueue.d.ts +244 -181
- package/dist/transactions/TransactionQueue.js +929 -423
- package/dist/transactions/TransactionStore.d.ts +6 -4
- package/dist/transactions/TransactionStore.js +6 -4
- package/dist/transactions/UnconfirmedWrites.d.ts +82 -0
- package/dist/transactions/UnconfirmedWrites.js +104 -0
- package/dist/transactions/coalesceRules.d.ts +41 -17
- package/dist/transactions/coalesceRules.js +40 -17
- package/dist/transactions/commitEnvelope.d.ts +132 -0
- package/dist/transactions/commitEnvelope.js +139 -0
- package/dist/transactions/commitOutboxStore.d.ts +32 -0
- package/dist/transactions/commitOutboxStore.js +26 -0
- package/dist/transactions/commitPayload.d.ts +63 -52
- package/dist/transactions/commitPayload.js +54 -57
- package/dist/transactions/deltaConfirmation.d.ts +20 -22
- package/dist/transactions/deltaConfirmation.js +37 -45
- package/dist/transactions/httpCommitEnvelope.d.ts +43 -0
- package/dist/transactions/httpCommitEnvelope.js +179 -0
- package/dist/transactions/optimisticApply.d.ts +49 -0
- package/dist/transactions/optimisticApply.js +65 -0
- package/dist/transactions/replayValidation.d.ts +182 -0
- package/dist/transactions/replayValidation.js +156 -0
- package/dist/types/global.d.ts +46 -41
- package/dist/types/global.js +20 -19
- package/dist/types/index.d.ts +71 -77
- package/dist/types/index.js +22 -22
- package/dist/types/modelData.d.ts +6 -8
- package/dist/types/modelData.js +5 -7
- package/dist/types/participant.d.ts +10 -11
- package/dist/types/participant.js +6 -8
- package/dist/types/streams.d.ts +208 -195
- 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} +42 -98
- 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/wire/bootstrapReason.d.ts +9 -0
- package/dist/wire/bootstrapReason.js +8 -0
- 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 +30 -31
- package/dist/wire/errorEnvelope.js +34 -40
- package/dist/wire/frames.d.ts +315 -86
- package/dist/wire/frames.js +47 -33
- package/dist/wire/index.d.ts +18 -14
- package/dist/wire/index.js +32 -27
- package/dist/wire/listEnvelope.d.ts +16 -23
- package/dist/wire/listEnvelope.js +7 -6
- package/dist/wire/protocol.d.ts +25 -32
- package/dist/wire/protocol.js +25 -32
- package/dist/wire/protocolVersion.d.ts +44 -40
- package/dist/wire/protocolVersion.js +44 -40
- package/docs/api.md +10 -10
- package/docs/coordination.md +59 -0
- package/docs/mcp.md +1 -1
- package/package.json +17 -11
- package/dist/ai-sdk/coordinated-tool.d.ts +0 -101
- package/dist/ai-sdk/coordination-context.d.ts +0 -52
- package/dist/core/query-utils.d.ts +0 -34
- package/dist/core/query-utils.js +0 -59
- package/dist/schema/sync-delta-row.js +0 -103
- package/dist/schema/sync-delta-wire.js +0 -102
- 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 -8
- package/dist/server/storage-mode.js +0 -28
- package/dist/source/connector-protocol.d.ts +0 -159
- package/dist/source/connector-protocol.js +0 -161
- package/dist/transactions/OptimisticEchoTracker.d.ts +0 -82
- package/dist/transactions/OptimisticEchoTracker.js +0 -104
- package/dist/transactions/mutation-error-handler.d.ts +0 -5
- package/dist/transactions/mutation-error-handler.js +0 -39
- package/dist/transactions/optimistic.d.ts +0 -24
- package/dist/transactions/optimistic.js +0 -45
- package/dist/transactions/persistedReplay.d.ts +0 -93
- package/dist/transactions/persistedReplay.js +0 -105
- package/dist/utils/mobx-setup.d.ts +0 -42
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* Provides methods to inject deltas, simulate disconnection/reconnection,
|
|
6
|
-
* and trigger bootstrap hints.
|
|
2
|
+
* A controllable WebSocket stand-in for sync engine tests. It reproduces the
|
|
3
|
+
* event interface of the real connection without opening a socket, so tests
|
|
4
|
+
* can drive connection changes, deltas, and bootstrap hints by hand.
|
|
7
5
|
*/
|
|
8
6
|
import type { SyncActionType } from '../../types/index.js';
|
|
9
|
-
|
|
7
|
+
import type { BootstrapReason } from '../../wire/bootstrapReason.js';
|
|
8
|
+
/** The shape of a single delta — one change the server pushes to the client. */
|
|
10
9
|
export interface MockDelta {
|
|
11
10
|
id: number;
|
|
12
11
|
modelName: string;
|
|
@@ -14,22 +13,28 @@ export interface MockDelta {
|
|
|
14
13
|
action: SyncActionType;
|
|
15
14
|
data: Record<string, unknown>;
|
|
16
15
|
}
|
|
17
|
-
/**
|
|
16
|
+
/**
|
|
17
|
+
* A hint from the server that the client has fallen too far behind and should
|
|
18
|
+
* rebuild its data from scratch rather than catch up one delta at a time.
|
|
19
|
+
*/
|
|
18
20
|
export interface MockBootstrapHint {
|
|
19
|
-
reason:
|
|
21
|
+
reason: BootstrapReason;
|
|
20
22
|
tables?: string[];
|
|
21
23
|
staleTables?: string[];
|
|
22
24
|
}
|
|
23
25
|
type EventHandler = (...args: unknown[]) => void;
|
|
24
26
|
/**
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
+
* A controllable, event-based stand-in for the sync engine's WebSocket
|
|
28
|
+
* connection. Subscribe with {@link MockWebSocket.on} exactly as production
|
|
29
|
+
* code does, then use the `simulate*` and `receive*` methods to push
|
|
30
|
+
* connection changes, deltas, and bootstrap hints. Every event the mock emits
|
|
31
|
+
* is recorded on {@link MockWebSocket.emittedEvents} for assertions.
|
|
27
32
|
*/
|
|
28
33
|
export declare class MockWebSocket {
|
|
29
34
|
private _connected;
|
|
30
35
|
private _sessionError;
|
|
31
36
|
private _listeners;
|
|
32
|
-
/**
|
|
37
|
+
/** Every event the mock has emitted, in order, for assertions. */
|
|
33
38
|
readonly emittedEvents: {
|
|
34
39
|
type: string;
|
|
35
40
|
data: unknown;
|
|
@@ -38,29 +43,29 @@ export declare class MockWebSocket {
|
|
|
38
43
|
get sessionError(): boolean;
|
|
39
44
|
on(event: string, handler: EventHandler): () => void;
|
|
40
45
|
private emit;
|
|
41
|
-
/**
|
|
46
|
+
/** Fires a successful connection, emitting the `connected` event. */
|
|
42
47
|
simulateConnect(): void;
|
|
43
|
-
/**
|
|
48
|
+
/** Drops the connection, emitting the `disconnected` event. */
|
|
44
49
|
simulateDisconnect(): void;
|
|
45
|
-
/**
|
|
50
|
+
/** Emits a `reconnecting` event carrying the attempt number and retry delay. */
|
|
46
51
|
simulateReconnecting(attempt: number, delay: number): void;
|
|
47
|
-
/**
|
|
52
|
+
/** Emits a `session_error` event, as when the server rejects the session as unauthorized. The code defaults to 401. */
|
|
48
53
|
simulateSessionError(code?: number): void;
|
|
49
|
-
/**
|
|
54
|
+
/** Emits a `reconnect_failed` event, signaling the client gave up after exhausting its retries. */
|
|
50
55
|
simulateReconnectFailed(): void;
|
|
51
|
-
/**
|
|
56
|
+
/** Delivers a single delta, emitting a `delta` event as if the server had sent it. */
|
|
52
57
|
receiveDelta(delta: MockDelta): void;
|
|
53
|
-
/**
|
|
58
|
+
/** Delivers a batch of deltas, emitting a `delta_batch` event. */
|
|
54
59
|
receiveDeltas(deltas: MockDelta[]): void;
|
|
55
|
-
/**
|
|
60
|
+
/** Emits a `bootstrap_required` hint, telling the client to rebuild its data instead of catching up. */
|
|
56
61
|
simulateBootstrapHint(hint: MockBootstrapHint): void;
|
|
57
|
-
/**
|
|
62
|
+
/** Emits a `presence_update` event carrying the given payload. */
|
|
58
63
|
simulatePresenceUpdate(data: Record<string, unknown>): void;
|
|
59
|
-
/**
|
|
64
|
+
/** Returns the payloads of every emitted event of the given type, in order. */
|
|
60
65
|
getEvents(type: string): unknown[];
|
|
61
|
-
/**
|
|
66
|
+
/** Reports whether an event of the given type has been emitted. */
|
|
62
67
|
hasEmitted(type: string): boolean;
|
|
63
|
-
/**
|
|
68
|
+
/** Clears connection state, listeners, and the record of emitted events. */
|
|
64
69
|
reset(): void;
|
|
65
70
|
}
|
|
66
71
|
export {};
|
|
@@ -1,19 +1,20 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* Provides methods to inject deltas, simulate disconnection/reconnection,
|
|
6
|
-
* and trigger bootstrap hints.
|
|
2
|
+
* A controllable WebSocket stand-in for sync engine tests. It reproduces the
|
|
3
|
+
* event interface of the real connection without opening a socket, so tests
|
|
4
|
+
* can drive connection changes, deltas, and bootstrap hints by hand.
|
|
7
5
|
*/
|
|
8
6
|
/**
|
|
9
|
-
*
|
|
10
|
-
*
|
|
7
|
+
* A controllable, event-based stand-in for the sync engine's WebSocket
|
|
8
|
+
* connection. Subscribe with {@link MockWebSocket.on} exactly as production
|
|
9
|
+
* code does, then use the `simulate*` and `receive*` methods to push
|
|
10
|
+
* connection changes, deltas, and bootstrap hints. Every event the mock emits
|
|
11
|
+
* is recorded on {@link MockWebSocket.emittedEvents} for assertions.
|
|
11
12
|
*/
|
|
12
13
|
export class MockWebSocket {
|
|
13
14
|
_connected = false;
|
|
14
15
|
_sessionError = false;
|
|
15
16
|
_listeners = new Map();
|
|
16
|
-
/**
|
|
17
|
+
/** Every event the mock has emitted, in order, for assertions. */
|
|
17
18
|
emittedEvents = [];
|
|
18
19
|
get connected() {
|
|
19
20
|
return this._connected;
|
|
@@ -22,7 +23,7 @@ export class MockWebSocket {
|
|
|
22
23
|
return this._sessionError;
|
|
23
24
|
}
|
|
24
25
|
// ─────────────────────────────────────────────
|
|
25
|
-
// Event subscription (matches
|
|
26
|
+
// Event subscription (matches the real connection's API)
|
|
26
27
|
// ─────────────────────────────────────────────
|
|
27
28
|
on(event, handler) {
|
|
28
29
|
if (!this._listeners.has(event)) {
|
|
@@ -45,28 +46,28 @@ export class MockWebSocket {
|
|
|
45
46
|
// ─────────────────────────────────────────────
|
|
46
47
|
// Test control: connection lifecycle
|
|
47
48
|
// ─────────────────────────────────────────────
|
|
48
|
-
/**
|
|
49
|
+
/** Fires a successful connection, emitting the `connected` event. */
|
|
49
50
|
simulateConnect() {
|
|
50
51
|
this._connected = true;
|
|
51
52
|
this._sessionError = false;
|
|
52
53
|
this.emit('connected');
|
|
53
54
|
}
|
|
54
|
-
/**
|
|
55
|
+
/** Drops the connection, emitting the `disconnected` event. */
|
|
55
56
|
simulateDisconnect() {
|
|
56
57
|
this._connected = false;
|
|
57
58
|
this.emit('disconnected');
|
|
58
59
|
}
|
|
59
|
-
/**
|
|
60
|
+
/** Emits a `reconnecting` event carrying the attempt number and retry delay. */
|
|
60
61
|
simulateReconnecting(attempt, delay) {
|
|
61
62
|
this.emit('reconnecting', { attempt, delay });
|
|
62
63
|
}
|
|
63
|
-
/**
|
|
64
|
+
/** Emits a `session_error` event, as when the server rejects the session as unauthorized. The code defaults to 401. */
|
|
64
65
|
simulateSessionError(code = 401) {
|
|
65
66
|
this._sessionError = true;
|
|
66
67
|
this._connected = false;
|
|
67
68
|
this.emit('session_error', { code });
|
|
68
69
|
}
|
|
69
|
-
/**
|
|
70
|
+
/** Emits a `reconnect_failed` event, signaling the client gave up after exhausting its retries. */
|
|
70
71
|
simulateReconnectFailed() {
|
|
71
72
|
this._connected = false;
|
|
72
73
|
this.emit('reconnect_failed');
|
|
@@ -74,40 +75,40 @@ export class MockWebSocket {
|
|
|
74
75
|
// ─────────────────────────────────────────────
|
|
75
76
|
// Test control: delta injection
|
|
76
77
|
// ─────────────────────────────────────────────
|
|
77
|
-
/**
|
|
78
|
+
/** Delivers a single delta, emitting a `delta` event as if the server had sent it. */
|
|
78
79
|
receiveDelta(delta) {
|
|
79
80
|
this.emit('delta', delta);
|
|
80
81
|
}
|
|
81
|
-
/**
|
|
82
|
+
/** Delivers a batch of deltas, emitting a `delta_batch` event. */
|
|
82
83
|
receiveDeltas(deltas) {
|
|
83
84
|
this.emit('delta_batch', deltas);
|
|
84
85
|
}
|
|
85
86
|
// ─────────────────────────────────────────────
|
|
86
87
|
// Test control: bootstrap hints
|
|
87
88
|
// ─────────────────────────────────────────────
|
|
88
|
-
/**
|
|
89
|
+
/** Emits a `bootstrap_required` hint, telling the client to rebuild its data instead of catching up. */
|
|
89
90
|
simulateBootstrapHint(hint) {
|
|
90
91
|
this.emit('bootstrap_required', hint);
|
|
91
92
|
}
|
|
92
93
|
// ─────────────────────────────────────────────
|
|
93
94
|
// Test control: presence
|
|
94
95
|
// ─────────────────────────────────────────────
|
|
95
|
-
/**
|
|
96
|
+
/** Emits a `presence_update` event carrying the given payload. */
|
|
96
97
|
simulatePresenceUpdate(data) {
|
|
97
98
|
this.emit('presence_update', data);
|
|
98
99
|
}
|
|
99
100
|
// ─────────────────────────────────────────────
|
|
100
101
|
// Assertions
|
|
101
102
|
// ─────────────────────────────────────────────
|
|
102
|
-
/**
|
|
103
|
+
/** Returns the payloads of every emitted event of the given type, in order. */
|
|
103
104
|
getEvents(type) {
|
|
104
105
|
return this.emittedEvents.filter((e) => e.type === type).map((e) => e.data);
|
|
105
106
|
}
|
|
106
|
-
/**
|
|
107
|
+
/** Reports whether an event of the given type has been emitted. */
|
|
107
108
|
hasEmitted(type) {
|
|
108
109
|
return this.emittedEvents.some((e) => e.type === type);
|
|
109
110
|
}
|
|
110
|
-
/**
|
|
111
|
+
/** Clears connection state, listeners, and the record of emitted events. */
|
|
111
112
|
reset() {
|
|
112
113
|
this._connected = false;
|
|
113
114
|
this._sessionError = false;
|