@opendatalabs/personal-server-ts-core 1.34.2 → 1.35.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/additions/durable.d.ts +32 -2
- package/dist/additions/durable.d.ts.map +1 -1
- package/dist/additions/durable.js +237 -88
- package/dist/additions/durable.js.map +1 -1
- package/dist/additions/version-inventory.d.ts +4 -0
- package/dist/additions/version-inventory.d.ts.map +1 -1
- package/dist/additions/version-inventory.js +11 -1
- package/dist/additions/version-inventory.js.map +1 -1
- package/dist/api/index.d.ts +18 -1
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +172 -4
- package/dist/api/index.js.map +1 -1
- package/dist/api/oura-collection-requirements.d.ts +16 -0
- package/dist/api/oura-collection-requirements.d.ts.map +1 -0
- package/dist/api/oura-collection-requirements.js +70 -0
- package/dist/api/oura-collection-requirements.js.map +1 -0
- package/dist/api/scope-upload-batches.d.ts +18 -0
- package/dist/api/scope-upload-batches.d.ts.map +1 -0
- package/dist/api/scope-upload-batches.js +71 -0
- package/dist/api/scope-upload-batches.js.map +1 -0
- package/dist/api/scope-uploads.d.ts +112 -0
- package/dist/api/scope-uploads.d.ts.map +1 -0
- package/dist/api/scope-uploads.js +369 -0
- package/dist/api/scope-uploads.js.map +1 -0
- package/dist/client.d.ts +70 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +1 -0
- package/dist/client.js.map +1 -1
- package/dist/contracts/data.d.ts +8 -0
- package/dist/contracts/data.d.ts.map +1 -1
- package/dist/contracts/data.js +31 -1
- package/dist/contracts/data.js.map +1 -1
- package/dist/contracts/grants.d.ts.map +1 -1
- package/dist/contracts/grants.js +3 -0
- package/dist/contracts/grants.js.map +1 -1
- package/dist/contracts/index.d.ts +3 -1
- package/dist/contracts/index.d.ts.map +1 -1
- package/dist/contracts/index.js +3 -1
- package/dist/contracts/index.js.map +1 -1
- package/dist/contracts/oura-collection-requirements.d.ts +17 -0
- package/dist/contracts/oura-collection-requirements.d.ts.map +1 -0
- package/dist/contracts/oura-collection-requirements.js +49 -0
- package/dist/contracts/oura-collection-requirements.js.map +1 -0
- package/dist/legacy-projection/bindings.d.ts +1 -7
- package/dist/legacy-projection/bindings.d.ts.map +1 -1
- package/dist/legacy-projection/bindings.js +162 -28
- package/dist/legacy-projection/bindings.js.map +1 -1
- package/dist/legacy-projection/index.d.ts +6 -5
- package/dist/legacy-projection/index.d.ts.map +1 -1
- package/dist/legacy-projection/index.js +9 -21
- package/dist/legacy-projection/index.js.map +1 -1
- package/dist/legacy-projection/oura-browser-bindings.d.ts +2 -0
- package/dist/legacy-projection/oura-browser-bindings.d.ts.map +1 -1
- package/dist/legacy-projection/oura-browser-bindings.js +2 -0
- package/dist/legacy-projection/oura-browser-bindings.js.map +1 -1
- package/dist/legacy-projection/strava-browser-bindings.d.ts +3 -0
- package/dist/legacy-projection/strava-browser-bindings.d.ts.map +1 -0
- package/dist/legacy-projection/strava-browser-bindings.js +32 -0
- package/dist/legacy-projection/strava-browser-bindings.js.map +1 -0
- package/dist/legacy-projection/types.d.ts +44 -12
- package/dist/legacy-projection/types.d.ts.map +1 -1
- package/dist/mcp/connection-api.d.ts +11 -1
- package/dist/mcp/connection-api.d.ts.map +1 -1
- package/dist/mcp/connection-api.js +94 -9
- package/dist/mcp/connection-api.js.map +1 -1
- package/dist/mcp/index.d.ts +1 -0
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +1 -0
- package/dist/mcp/index.js.map +1 -1
- package/dist/mcp/server.d.ts +9 -0
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +19 -6
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/store.d.ts +10 -1
- package/dist/mcp/store.d.ts.map +1 -1
- package/dist/mcp/store.js +51 -0
- package/dist/mcp/store.js.map +1 -1
- package/dist/mcp/tools.d.ts +52 -2
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +395 -11
- package/dist/mcp/tools.js.map +1 -1
- package/dist/mcp/types.d.ts +36 -2
- package/dist/mcp/types.d.ts.map +1 -1
- package/dist/mcp/types.js +12 -0
- package/dist/mcp/types.js.map +1 -1
- package/dist/mcp/write-client.d.ts +81 -0
- package/dist/mcp/write-client.d.ts.map +1 -0
- package/dist/mcp/write-client.js +140 -0
- package/dist/mcp/write-client.js.map +1 -0
- package/dist/oura/history-policy.d.ts +12 -0
- package/dist/oura/history-policy.d.ts.map +1 -0
- package/dist/oura/history-policy.js +54 -0
- package/dist/oura/history-policy.js.map +1 -0
- package/dist/oura/index.d.ts +51 -0
- package/dist/oura/index.d.ts.map +1 -0
- package/dist/oura/index.js +315 -0
- package/dist/oura/index.js.map +1 -0
- package/dist/pdpp/approval.d.ts +1 -1
- package/dist/pdpp/approval.d.ts.map +1 -1
- package/dist/pdpp/approval.js +29 -10
- package/dist/pdpp/approval.js.map +1 -1
- package/dist/pdpp/declaration-limits.d.ts +7 -0
- package/dist/pdpp/declaration-limits.d.ts.map +1 -0
- package/dist/pdpp/declaration-limits.js +7 -0
- package/dist/pdpp/declaration-limits.js.map +1 -0
- package/dist/pdpp/declaration.d.ts +2 -1
- package/dist/pdpp/declaration.d.ts.map +1 -1
- package/dist/pdpp/declaration.js +2 -1
- package/dist/pdpp/declaration.js.map +1 -1
- package/dist/pdpp/index.d.ts +3 -2
- package/dist/pdpp/index.d.ts.map +1 -1
- package/dist/pdpp/index.js +3 -2
- package/dist/pdpp/index.js.map +1 -1
- package/dist/pdpp/issuance.d.ts.map +1 -1
- package/dist/pdpp/issuance.js +6 -2
- package/dist/pdpp/issuance.js.map +1 -1
- package/dist/pdpp/resolve.d.ts +12 -1
- package/dist/pdpp/resolve.d.ts.map +1 -1
- package/dist/pdpp/resolve.js +156 -58
- package/dist/pdpp/resolve.js.map +1 -1
- package/dist/pdpp/selection.d.ts +30 -1
- package/dist/pdpp/selection.d.ts.map +1 -1
- package/dist/pdpp/selection.js +77 -26
- package/dist/pdpp/selection.js.map +1 -1
- package/dist/pdpp/time.d.ts +39 -0
- package/dist/pdpp/time.d.ts.map +1 -0
- package/dist/pdpp/time.js +173 -0
- package/dist/pdpp/time.js.map +1 -0
- package/dist/pdpp/tokens.d.ts.map +1 -1
- package/dist/pdpp/tokens.js +4 -2
- package/dist/pdpp/tokens.js.map +1 -1
- package/dist/pdpp/types.d.ts +18 -2
- package/dist/pdpp/types.d.ts.map +1 -1
- package/dist/pdpp/types.js +7 -0
- package/dist/pdpp/types.js.map +1 -1
- package/dist/policy/reserved-scopes.d.ts +7 -0
- package/dist/policy/reserved-scopes.d.ts.map +1 -1
- package/dist/policy/reserved-scopes.js +12 -1
- package/dist/policy/reserved-scopes.js.map +1 -1
- package/dist/ports/index.d.ts +85 -1
- package/dist/ports/index.d.ts.map +1 -1
- package/dist/ports/index.js.map +1 -1
- package/dist/ports/pdpp-auth.d.ts +17 -27
- package/dist/ports/pdpp-auth.d.ts.map +1 -1
- package/dist/ports/pdpp-auth.js +14 -28
- package/dist/ports/pdpp-auth.js.map +1 -1
- package/dist/publication/publish.d.ts +96 -0
- package/dist/publication/publish.d.ts.map +1 -0
- package/dist/publication/publish.js +261 -0
- package/dist/publication/publish.js.map +1 -0
- package/dist/replication/completion.d.ts +20 -0
- package/dist/replication/completion.d.ts.map +1 -0
- package/dist/replication/completion.js +73 -0
- package/dist/replication/completion.js.map +1 -0
- package/dist/replication/coordinator-state.d.ts +29 -0
- package/dist/replication/coordinator-state.d.ts.map +1 -0
- package/dist/replication/coordinator-state.js +88 -0
- package/dist/replication/coordinator-state.js.map +1 -0
- package/dist/replication/coordinator-state.test-utils.d.ts +32 -0
- package/dist/replication/coordinator-state.test-utils.d.ts.map +1 -0
- package/dist/replication/coordinator-state.test-utils.js +113 -0
- package/dist/replication/coordinator-state.test-utils.js.map +1 -0
- package/dist/replication/coordinator.d.ts +264 -0
- package/dist/replication/coordinator.d.ts.map +1 -0
- package/dist/replication/coordinator.js +499 -0
- package/dist/replication/coordinator.js.map +1 -0
- package/dist/replication/copies.d.ts +126 -0
- package/dist/replication/copies.d.ts.map +1 -0
- package/dist/replication/copies.js +437 -0
- package/dist/replication/copies.js.map +1 -0
- package/dist/replication/copy-promotion.d.ts +132 -0
- package/dist/replication/copy-promotion.d.ts.map +1 -0
- package/dist/replication/copy-promotion.js +126 -0
- package/dist/replication/copy-promotion.js.map +1 -0
- package/dist/replication/door.d.ts +33 -0
- package/dist/replication/door.d.ts.map +1 -0
- package/dist/replication/door.js +10 -0
- package/dist/replication/door.js.map +1 -0
- package/dist/replication/dpv2.d.ts +141 -0
- package/dist/replication/dpv2.d.ts.map +1 -0
- package/dist/replication/dpv2.js +320 -0
- package/dist/replication/dpv2.js.map +1 -0
- package/dist/replication/effects.d.ts +68 -0
- package/dist/replication/effects.d.ts.map +1 -0
- package/dist/replication/effects.js +89 -0
- package/dist/replication/effects.js.map +1 -0
- package/dist/replication/engine.d.ts +378 -0
- package/dist/replication/engine.d.ts.map +1 -0
- package/dist/replication/engine.js +3197 -0
- package/dist/replication/engine.js.map +1 -0
- package/dist/replication/envelope.d.ts +481 -0
- package/dist/replication/envelope.d.ts.map +1 -0
- package/dist/replication/envelope.js +192 -0
- package/dist/replication/envelope.js.map +1 -0
- package/dist/replication/evidence.d.ts +118 -0
- package/dist/replication/evidence.d.ts.map +1 -0
- package/dist/replication/evidence.js +198 -0
- package/dist/replication/evidence.js.map +1 -0
- package/dist/replication/finality.d.ts +16 -0
- package/dist/replication/finality.d.ts.map +1 -0
- package/dist/replication/finality.js +11 -0
- package/dist/replication/finality.js.map +1 -0
- package/dist/replication/fixtures.d.ts +16 -0
- package/dist/replication/fixtures.d.ts.map +1 -0
- package/dist/replication/fixtures.js +47 -0
- package/dist/replication/fixtures.js.map +1 -0
- package/dist/replication/host-config.d.ts +52 -0
- package/dist/replication/host-config.d.ts.map +1 -0
- package/dist/replication/host-config.js +111 -0
- package/dist/replication/host-config.js.map +1 -0
- package/dist/replication/host-driver.d.ts +95 -0
- package/dist/replication/host-driver.d.ts.map +1 -0
- package/dist/replication/host-driver.js +202 -0
- package/dist/replication/host-driver.js.map +1 -0
- package/dist/replication/host-ports.d.ts +48 -0
- package/dist/replication/host-ports.d.ts.map +1 -0
- package/dist/replication/host-ports.js +69 -0
- package/dist/replication/host-ports.js.map +1 -0
- package/dist/replication/identity.d.ts +13 -0
- package/dist/replication/identity.d.ts.map +1 -0
- package/dist/replication/identity.js +22 -0
- package/dist/replication/identity.js.map +1 -0
- package/dist/replication/limits.d.ts +124 -0
- package/dist/replication/limits.d.ts.map +1 -0
- package/dist/replication/limits.js +182 -0
- package/dist/replication/limits.js.map +1 -0
- package/dist/replication/merge-plan.d.ts +92 -0
- package/dist/replication/merge-plan.d.ts.map +1 -0
- package/dist/replication/merge-plan.js +229 -0
- package/dist/replication/merge-plan.js.map +1 -0
- package/dist/replication/namespace.d.ts +4 -0
- package/dist/replication/namespace.d.ts.map +1 -0
- package/dist/replication/namespace.js +7 -0
- package/dist/replication/namespace.js.map +1 -0
- package/dist/replication/outcome.d.ts +178 -0
- package/dist/replication/outcome.d.ts.map +1 -0
- package/dist/replication/outcome.js +83 -0
- package/dist/replication/outcome.js.map +1 -0
- package/dist/replication/payload.d.ts +39 -0
- package/dist/replication/payload.d.ts.map +1 -0
- package/dist/replication/payload.js +137 -0
- package/dist/replication/payload.js.map +1 -0
- package/dist/replication/preparation.d.ts +42 -0
- package/dist/replication/preparation.d.ts.map +1 -0
- package/dist/replication/preparation.js +118 -0
- package/dist/replication/preparation.js.map +1 -0
- package/dist/replication/rebaseline.d.ts +33 -0
- package/dist/replication/rebaseline.d.ts.map +1 -0
- package/dist/replication/rebaseline.js +40 -0
- package/dist/replication/rebaseline.js.map +1 -0
- package/dist/replication/rebinding.d.ts +43 -0
- package/dist/replication/rebinding.d.ts.map +1 -0
- package/dist/replication/rebinding.js +52 -0
- package/dist/replication/rebinding.js.map +1 -0
- package/dist/replication/receive.d.ts +57 -0
- package/dist/replication/receive.d.ts.map +1 -0
- package/dist/replication/receive.js +114 -0
- package/dist/replication/receive.js.map +1 -0
- package/dist/replication/record-reducer.d.ts +16 -0
- package/dist/replication/record-reducer.d.ts.map +1 -0
- package/dist/replication/record-reducer.js +52 -0
- package/dist/replication/record-reducer.js.map +1 -0
- package/dist/replication/revision.d.ts +24 -0
- package/dist/replication/revision.d.ts.map +1 -0
- package/dist/replication/revision.js +35 -0
- package/dist/replication/revision.js.map +1 -0
- package/dist/replication/roster.d.ts +53 -0
- package/dist/replication/roster.d.ts.map +1 -0
- package/dist/replication/roster.js +115 -0
- package/dist/replication/roster.js.map +1 -0
- package/dist/replication/schedule.d.ts +73 -0
- package/dist/replication/schedule.d.ts.map +1 -0
- package/dist/replication/schedule.js +182 -0
- package/dist/replication/schedule.js.map +1 -0
- package/dist/replication/stream.d.ts +73 -0
- package/dist/replication/stream.d.ts.map +1 -0
- package/dist/replication/stream.js +542 -0
- package/dist/replication/stream.js.map +1 -0
- package/dist/replication/transport.d.ts +236 -0
- package/dist/replication/transport.d.ts.map +1 -0
- package/dist/replication/transport.js +440 -0
- package/dist/replication/transport.js.map +1 -0
- package/dist/replication/visibility-engine.d.ts +337 -0
- package/dist/replication/visibility-engine.d.ts.map +1 -0
- package/dist/replication/visibility-engine.js +602 -0
- package/dist/replication/visibility-engine.js.map +1 -0
- package/dist/replication/visibility-policy.d.ts +26 -0
- package/dist/replication/visibility-policy.d.ts.map +1 -0
- package/dist/replication/visibility-policy.js +33 -0
- package/dist/replication/visibility-policy.js.map +1 -0
- package/dist/replication/writer-identity-store.d.ts +100 -0
- package/dist/replication/writer-identity-store.d.ts.map +1 -0
- package/dist/replication/writer-identity-store.js +218 -0
- package/dist/replication/writer-identity-store.js.map +1 -0
- package/dist/replication/writer-identity.d.ts +252 -0
- package/dist/replication/writer-identity.d.ts.map +1 -0
- package/dist/replication/writer-identity.js +281 -0
- package/dist/replication/writer-identity.js.map +1 -0
- package/dist/replication/writer-identity.test-utils.d.ts +24 -0
- package/dist/replication/writer-identity.test-utils.d.ts.map +1 -0
- package/dist/replication/writer-identity.test-utils.js +86 -0
- package/dist/replication/writer-identity.test-utils.js.map +1 -0
- package/dist/schemas/server-config.d.ts +13 -0
- package/dist/schemas/server-config.d.ts.map +1 -1
- package/dist/schemas/server-config.js +24 -0
- package/dist/schemas/server-config.js.map +1 -1
- package/dist/storage/adapters/index.d.ts +3 -1
- package/dist/storage/adapters/index.d.ts.map +1 -1
- package/dist/storage/adapters/index.js +2 -0
- package/dist/storage/adapters/index.js.map +1 -1
- package/dist/storage/adapters/interface.d.ts +18 -1
- package/dist/storage/adapters/interface.d.ts.map +1 -1
- package/dist/storage/adapters/interface.js +13 -1
- package/dist/storage/adapters/interface.js.map +1 -1
- package/dist/storage/adapters/sdk.d.ts +2 -1
- package/dist/storage/adapters/sdk.d.ts.map +1 -1
- package/dist/storage/adapters/sdk.js +21 -3
- package/dist/storage/adapters/sdk.js.map +1 -1
- package/dist/storage/adapters/vana-audience.d.ts +17 -5
- package/dist/storage/adapters/vana-audience.d.ts.map +1 -1
- package/dist/storage/adapters/vana-audience.js +24 -9
- package/dist/storage/adapters/vana-audience.js.map +1 -1
- package/dist/storage/adapters/vana.d.ts +2 -2
- package/dist/storage/adapters/vana.d.ts.map +1 -1
- package/dist/storage/adapters/vana.js +30 -22
- package/dist/storage/adapters/vana.js.map +1 -1
- package/dist/storage/canonical-legacy-projection.d.ts +1 -1
- package/dist/storage/canonical-legacy-projection.d.ts.map +1 -1
- package/dist/storage/canonical-legacy-projection.js +13 -15
- package/dist/storage/canonical-legacy-projection.js.map +1 -1
- package/dist/storage/legacy-projection.d.ts.map +1 -1
- package/dist/storage/legacy-projection.js +16 -1
- package/dist/storage/legacy-projection.js.map +1 -1
- package/dist/storage/legacy-scope-coverage-exceptions.d.ts +5 -0
- package/dist/storage/legacy-scope-coverage-exceptions.d.ts.map +1 -1
- package/dist/storage/legacy-scope-coverage-exceptions.js +4 -0
- package/dist/storage/legacy-scope-coverage-exceptions.js.map +1 -1
- package/dist/storage/legacy-scope-coverage.d.ts.map +1 -1
- package/dist/storage/legacy-scope-coverage.js +14 -1
- package/dist/storage/legacy-scope-coverage.js.map +1 -1
- package/dist/storage/legacy-scope-entity-keys.d.ts +14 -1
- package/dist/storage/legacy-scope-entity-keys.d.ts.map +1 -1
- package/dist/storage/legacy-scope-entity-keys.js +18 -1
- package/dist/storage/legacy-scope-entity-keys.js.map +1 -1
- package/dist/storage/legacy-scope-view.d.ts +57 -5
- package/dist/storage/legacy-scope-view.d.ts.map +1 -1
- package/dist/storage/legacy-scope-view.js +644 -318
- package/dist/storage/legacy-scope-view.js.map +1 -1
- package/dist/storage/pdpp-records/cursor.d.ts +47 -2
- package/dist/storage/pdpp-records/cursor.d.ts.map +1 -1
- package/dist/storage/pdpp-records/cursor.js +7 -0
- package/dist/storage/pdpp-records/cursor.js.map +1 -1
- package/dist/storage/pdpp-records/enforcement.d.ts +3 -16
- package/dist/storage/pdpp-records/enforcement.d.ts.map +1 -1
- package/dist/storage/pdpp-records/enforcement.js +40 -13
- package/dist/storage/pdpp-records/enforcement.js.map +1 -1
- package/dist/storage/pdpp-records/index.d.ts +2 -0
- package/dist/storage/pdpp-records/index.d.ts.map +1 -1
- package/dist/storage/pdpp-records/index.js +1 -0
- package/dist/storage/pdpp-records/index.js.map +1 -1
- package/dist/storage/pdpp-records/interface.d.ts +8 -1
- package/dist/storage/pdpp-records/interface.d.ts.map +1 -1
- package/dist/storage/pdpp-records/list-page.d.ts +35 -0
- package/dist/storage/pdpp-records/list-page.d.ts.map +1 -0
- package/dist/storage/pdpp-records/list-page.js +106 -0
- package/dist/storage/pdpp-records/list-page.js.map +1 -0
- package/dist/storage/pdpp-records/memory-store.d.ts.map +1 -1
- package/dist/storage/pdpp-records/memory-store.js +95 -99
- package/dist/storage/pdpp-records/memory-store.js.map +1 -1
- package/dist/storage/pdpp-records/portable.d.ts +3 -0
- package/dist/storage/pdpp-records/portable.d.ts.map +1 -1
- package/dist/storage/pdpp-records/portable.js +3 -0
- package/dist/storage/pdpp-records/portable.js.map +1 -1
- package/dist/storage/pdpp-records/replication-journal.d.ts +20 -0
- package/dist/storage/pdpp-records/replication-journal.d.ts.map +1 -0
- package/dist/storage/pdpp-records/replication-journal.js +2 -0
- package/dist/storage/pdpp-records/replication-journal.js.map +1 -0
- package/dist/storage/pdpp-records/stream-declaration.d.ts +0 -2
- package/dist/storage/pdpp-records/stream-declaration.d.ts.map +1 -1
- package/dist/storage/pdpp-records/stream-declaration.js +0 -9
- package/dist/storage/pdpp-records/stream-declaration.js.map +1 -1
- package/dist/storage/pdpp-records/sync-selection.d.ts +4 -0
- package/dist/storage/pdpp-records/sync-selection.d.ts.map +1 -0
- package/dist/storage/pdpp-records/sync-selection.js +37 -0
- package/dist/storage/pdpp-records/sync-selection.js.map +1 -0
- package/dist/storage/pdpp-records/types.d.ts +64 -0
- package/dist/storage/pdpp-records/types.d.ts.map +1 -1
- package/dist/storage/pdpp-records/types.js.map +1 -1
- package/dist/sync/delete-data-port.d.ts +15 -0
- package/dist/sync/delete-data-port.d.ts.map +1 -1
- package/dist/sync/delete-data-port.js +19 -7
- package/dist/sync/delete-data-port.js.map +1 -1
- package/dist/sync/index.d.ts +2 -1
- package/dist/sync/index.d.ts.map +1 -1
- package/dist/sync/index.js +2 -1
- package/dist/sync/index.js.map +1 -1
- package/dist/sync/pending-blob-deletions.d.ts +18 -2
- package/dist/sync/pending-blob-deletions.d.ts.map +1 -1
- package/dist/sync/pending-blob-deletions.js +69 -23
- package/dist/sync/pending-blob-deletions.js.map +1 -1
- package/dist/sync/workers/delete.d.ts.map +1 -1
- package/dist/sync/workers/delete.js +332 -142
- package/dist/sync/workers/delete.js.map +1 -1
- package/dist/sync/workers/download.d.ts.map +1 -1
- package/dist/sync/workers/download.js +53 -5
- package/dist/sync/workers/download.js.map +1 -1
- package/dist/sync/workers/upload.d.ts +24 -5
- package/dist/sync/workers/upload.d.ts.map +1 -1
- package/dist/sync/workers/upload.js +160 -275
- package/dist/sync/workers/upload.js.map +1 -1
- package/dist/test-utils/memory-storage.d.ts.map +1 -1
- package/dist/test-utils/memory-storage.js +17 -2
- package/dist/test-utils/memory-storage.js.map +1 -1
- package/package.json +24 -2
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { ReplicaCoordinatorConflict, } from "./coordinator.js";
|
|
2
|
+
/** Sequence without awaiting, so a synchronous harness stays synchronous. */
|
|
3
|
+
const then = (value, next) => value instanceof Promise ? value.then(next) : next(value);
|
|
4
|
+
export function replicaCoordinatorStateContract({ test, expect }, open) {
|
|
5
|
+
const check = (name, run) => test(name, async () => {
|
|
6
|
+
const h = await open();
|
|
7
|
+
try {
|
|
8
|
+
await run(h);
|
|
9
|
+
}
|
|
10
|
+
finally {
|
|
11
|
+
await h.close();
|
|
12
|
+
}
|
|
13
|
+
});
|
|
14
|
+
/** Expect `run` to throw or reject, optionally with a type or message. */
|
|
15
|
+
async function throws(run, expected) {
|
|
16
|
+
let thrown;
|
|
17
|
+
try {
|
|
18
|
+
await run();
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
thrown = error ?? new Error("thrown nullish");
|
|
22
|
+
}
|
|
23
|
+
expect(thrown !== undefined).toBe(true);
|
|
24
|
+
if (typeof expected === "string")
|
|
25
|
+
expect(String(thrown.message).includes(expected)).toBe(true);
|
|
26
|
+
else if (expected)
|
|
27
|
+
expect(thrown instanceof expected).toBe(true);
|
|
28
|
+
}
|
|
29
|
+
/** One commit through either port kind, awaiting what is asynchronous. */
|
|
30
|
+
async function commit(port, expected, next, checkpoint) {
|
|
31
|
+
if ("async" in port && port.async)
|
|
32
|
+
return port.commit(expected, next, async (context) => checkpoint(context));
|
|
33
|
+
return port.commit(expected, next, () => {
|
|
34
|
+
const result = checkpoint(undefined);
|
|
35
|
+
if (result instanceof Promise)
|
|
36
|
+
throw new Error("synchronous harness returned a promise");
|
|
37
|
+
return result;
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
const rotation = {
|
|
41
|
+
nextPhase: "import",
|
|
42
|
+
writers: { publish: "writer-a" },
|
|
43
|
+
};
|
|
44
|
+
check("persists cursor, checkpoint and revision together across adapter recreation", async (h) => {
|
|
45
|
+
await h.acquire("a");
|
|
46
|
+
const port = h.port("a");
|
|
47
|
+
const initial = await port.load();
|
|
48
|
+
expect(initial.version).toBe(0);
|
|
49
|
+
expect(initial.writers).toEqual({});
|
|
50
|
+
const committed = await commit(port, initial, rotation, (tx) => then(h.checkpoint("one", tx), () => 7));
|
|
51
|
+
expect(committed.result).toBe(7);
|
|
52
|
+
expect(await h.receipts()).toEqual(["one"]);
|
|
53
|
+
expect(await h.port("a").load()).toEqual({
|
|
54
|
+
...rotation,
|
|
55
|
+
owner: "a",
|
|
56
|
+
version: 1,
|
|
57
|
+
});
|
|
58
|
+
committed.state.writers.publish = "mutated-return";
|
|
59
|
+
expect((await h.port("a").load()).writers.publish).toBe("writer-a");
|
|
60
|
+
});
|
|
61
|
+
check("a throwing checkpoint rolls back both receipt and cursor", async (h) => {
|
|
62
|
+
await h.acquire("a");
|
|
63
|
+
const port = h.port("a");
|
|
64
|
+
const initial = await port.load();
|
|
65
|
+
await throws(() => commit(port, initial, rotation, (tx) => then(h.checkpoint("lost", tx), () => {
|
|
66
|
+
throw new Error("rollback");
|
|
67
|
+
})), "rollback");
|
|
68
|
+
expect(await h.receipts()).toEqual([]);
|
|
69
|
+
expect(await port.load()).toEqual(initial);
|
|
70
|
+
});
|
|
71
|
+
check("a cursor-write failure cannot leave a durable receipt", async (h) => {
|
|
72
|
+
await h.acquire("a");
|
|
73
|
+
const port = h.port("a");
|
|
74
|
+
const initial = await port.load();
|
|
75
|
+
await h.failCursorWrites(true);
|
|
76
|
+
await throws(() => commit(port, initial, rotation, (tx) => h.checkpoint("lost", tx)));
|
|
77
|
+
expect(await h.receipts()).toEqual([]);
|
|
78
|
+
expect(await port.load()).toEqual(initial);
|
|
79
|
+
await h.failCursorWrites(false);
|
|
80
|
+
await commit(port, initial, rotation, (tx) => h.checkpoint("retry", tx));
|
|
81
|
+
expect(await h.receipts()).toEqual(["retry"]);
|
|
82
|
+
expect((await port.load()).version).toBe(1);
|
|
83
|
+
});
|
|
84
|
+
check("a stale revision never runs a checkpoint", async (h) => {
|
|
85
|
+
await h.acquire("a");
|
|
86
|
+
const port = h.port("a");
|
|
87
|
+
const old = await port.load();
|
|
88
|
+
await commit(port, old, rotation, (tx) => h.checkpoint("new", tx));
|
|
89
|
+
await throws(() => commit(port, old, rotation, (tx) => h.checkpoint("stale", tx)), ReplicaCoordinatorConflict);
|
|
90
|
+
expect(await h.receipts()).toEqual(["new"]);
|
|
91
|
+
});
|
|
92
|
+
check("active owners contend; a recovered owner rejects old receipts", async (h) => {
|
|
93
|
+
await h.acquire("a");
|
|
94
|
+
const old = await h.port("a").load();
|
|
95
|
+
await throws(() => h.acquire("b"));
|
|
96
|
+
await throws(() => h.port("b").load(), ReplicaCoordinatorConflict);
|
|
97
|
+
await h.recover("b");
|
|
98
|
+
const next = h.port("b");
|
|
99
|
+
await commit(next, await next.load(), rotation, (tx) => h.checkpoint("b", tx));
|
|
100
|
+
await throws(() => commit(h.port("a"), old, rotation, (tx) => h.checkpoint("late-a", tx)), ReplicaCoordinatorConflict);
|
|
101
|
+
expect(await h.receipts()).toEqual(["b"]);
|
|
102
|
+
expect((await next.load()).version).toBe(1);
|
|
103
|
+
});
|
|
104
|
+
check("ownership changed inside a checkpoint rolls back the whole transaction", async (h) => {
|
|
105
|
+
await h.acquire("a");
|
|
106
|
+
const port = h.port("a");
|
|
107
|
+
const initial = await port.load();
|
|
108
|
+
await throws(() => commit(port, initial, rotation, (tx) => then(h.checkpoint("lost", tx), () => h.recover("b", tx))), ReplicaCoordinatorConflict);
|
|
109
|
+
expect(await h.receipts()).toEqual([]);
|
|
110
|
+
expect(await port.load()).toEqual(initial);
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=coordinator-state.test-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coordinator-state.test-utils.js","sourceRoot":"","sources":["../../src/replication/coordinator-state.test-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
import { type ReplicaAdmission, type ReplicaCause, type ReplicaDependency, type ReplicaOutcome, type ReplicaPhase, type ReplicaPhaseOutcome, type ReplicaProblem, type ReplicaQuarantineProof, type ReplicaReceipt } from "./outcome.js";
|
|
2
|
+
import { type ReplicaBackoff, type ReplicaEligibility, type ReplicaWorkState } from "./schedule.js";
|
|
3
|
+
type MaybePromise<T> = T | Promise<T>;
|
|
4
|
+
export interface ReplicaWorkItem {
|
|
5
|
+
id: string;
|
|
6
|
+
phase: ReplicaPhase;
|
|
7
|
+
writer: string;
|
|
8
|
+
state: ReplicaWorkState;
|
|
9
|
+
/** Admission estimate for byte budgets. */
|
|
10
|
+
bytes?: number;
|
|
11
|
+
/**
|
|
12
|
+
* The resumable unit this attempt covers, e.g. the next fragment of a
|
|
13
|
+
* batch. A step admits an item once per part, so an item that commits one
|
|
14
|
+
* unit per attempt can take further units in the same step, each charged
|
|
15
|
+
* on its own. Runs of one item never overlap, whatever their part.
|
|
16
|
+
*/
|
|
17
|
+
part?: string;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* The result of one attempt. `plan` is this attempt's transactional effect
|
|
21
|
+
* (checkpoint, receipt, custody). It runs only inside the commit of this very
|
|
22
|
+
* attempt, so a discarded attempt (deadline, abort) leaves no trace. A plan
|
|
23
|
+
* may refine the verdict from what it committed.
|
|
24
|
+
*/
|
|
25
|
+
export interface ReplicaAttempt<P = () => ReplicaPhaseOutcome | void> {
|
|
26
|
+
outcome: ReplicaPhaseOutcome;
|
|
27
|
+
/** Node plans are callbacks; shared-engine plans are storage effects. */
|
|
28
|
+
plan?: P;
|
|
29
|
+
/** Release short-lived resources after this attempt is committed or discarded. */
|
|
30
|
+
release?: () => void;
|
|
31
|
+
}
|
|
32
|
+
/** Turns a verdict into its durable outcome and state, at settlement time. */
|
|
33
|
+
export type ReplicaSettle = (verdict: ReplicaPhaseOutcome) => {
|
|
34
|
+
outcome: ReplicaOutcome;
|
|
35
|
+
state: ReplicaWorkState;
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* One phase's durable work: a storage adapter. The coordinator owns the
|
|
39
|
+
* clock, eligibility, budgets, deadlines and transitions; the adapter owns
|
|
40
|
+
* selection SQL rendered from the shared eligibility policy and atomic
|
|
41
|
+
* persistence.
|
|
42
|
+
*/
|
|
43
|
+
export interface ReplicaPhaseHandler<I extends ReplicaWorkItem = ReplicaWorkItem> {
|
|
44
|
+
phase: ReplicaPhase;
|
|
45
|
+
/**
|
|
46
|
+
* Eligible items (see replicaEligibleAt): at most perWriter per writer,
|
|
47
|
+
* every writer's first item before any writer's second, and writers in
|
|
48
|
+
* cyclic order starting after `after` (the writer this phase served last).
|
|
49
|
+
* Oldest first within a writer.
|
|
50
|
+
*/
|
|
51
|
+
due(eligibility: ReplicaEligibility, limit: {
|
|
52
|
+
total: number;
|
|
53
|
+
perWriter: number;
|
|
54
|
+
after?: string;
|
|
55
|
+
}): I[];
|
|
56
|
+
/** Must honour `signal`: after abort it performs no further effect. */
|
|
57
|
+
run(item: I, signal: AbortSignal): Promise<ReplicaAttempt>;
|
|
58
|
+
/**
|
|
59
|
+
* In ONE transaction: run `attempt.plan` (if any), settle the verdict with
|
|
60
|
+
* `settle`, persist outcome and state. Return the persisted outcome. A throw
|
|
61
|
+
* persists nothing.
|
|
62
|
+
*/
|
|
63
|
+
commit(item: I, attempt: ReplicaAttempt, settle: ReplicaSettle): ReplicaOutcome;
|
|
64
|
+
/** Problem recorded when a plan's transaction fails. */
|
|
65
|
+
commitProblem?: ReplicaProblem;
|
|
66
|
+
/**
|
|
67
|
+
* Earliest eligibility of this phase's durable deadlines (retries, waits),
|
|
68
|
+
* by the same policy as `due`; undefined when none. Polling sources and
|
|
69
|
+
* sweeps that run on the host's cadence report only their deadlines.
|
|
70
|
+
*/
|
|
71
|
+
earliest(eligibility: ReplicaEligibility): number | undefined;
|
|
72
|
+
/** Make waits on this dependency key due now. Idempotent. */
|
|
73
|
+
wake?(key: string, now: number): number;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* A phase handler whose storage may answer asynchronously (PS-Lite's native
|
|
77
|
+
* transaction). A handler that returns plain values runs exactly as a
|
|
78
|
+
* synchronous one: the coordinator awaits only what is a promise.
|
|
79
|
+
*/
|
|
80
|
+
export interface AsyncReplicaPhaseHandler<I extends ReplicaWorkItem = ReplicaWorkItem, C = unknown, P = unknown> {
|
|
81
|
+
phase: ReplicaPhase;
|
|
82
|
+
/**
|
|
83
|
+
* Eligible items (see replicaEligibleAt): at most perWriter per writer,
|
|
84
|
+
* every writer's first item before any writer's second, and writers in
|
|
85
|
+
* cyclic order starting after `after` (the writer this phase served last).
|
|
86
|
+
* Oldest first within a writer.
|
|
87
|
+
*/
|
|
88
|
+
due(eligibility: ReplicaEligibility, limit: {
|
|
89
|
+
total: number;
|
|
90
|
+
perWriter: number;
|
|
91
|
+
after?: string;
|
|
92
|
+
}): MaybePromise<I[]>;
|
|
93
|
+
/** Must honour `signal`: after abort it performs no further effect. */
|
|
94
|
+
run(item: I, signal: AbortSignal): Promise<ReplicaAttempt<P>>;
|
|
95
|
+
/**
|
|
96
|
+
* In ONE transaction: run `attempt.plan` (if any), settle the verdict with
|
|
97
|
+
* `settle`, persist outcome and state. Return the persisted outcome. A throw
|
|
98
|
+
* persists nothing. `context` is the durable state port's transaction,
|
|
99
|
+
* so the attempt and the rotation commit together.
|
|
100
|
+
*/
|
|
101
|
+
commit(item: I, attempt: ReplicaAttempt<P>, settle: ReplicaSettle, context: C): MaybePromise<ReplicaOutcome>;
|
|
102
|
+
/** Problem recorded when a plan's transaction fails. */
|
|
103
|
+
commitProblem?: ReplicaProblem;
|
|
104
|
+
/**
|
|
105
|
+
* Earliest eligibility of this phase's durable deadlines (retries, waits),
|
|
106
|
+
* by the same policy as `due`; undefined when none. Polling sources and
|
|
107
|
+
* sweeps that run on the host's cadence report only their deadlines.
|
|
108
|
+
*/
|
|
109
|
+
earliest(eligibility: ReplicaEligibility): MaybePromise<number | undefined>;
|
|
110
|
+
/** Make waits on this dependency key due now. Idempotent. */
|
|
111
|
+
wake?(key: string, now: number): MaybePromise<number>;
|
|
112
|
+
}
|
|
113
|
+
/** A finalized-head hint source. Optional: it can only park finality waits. */
|
|
114
|
+
export interface ReplicaHintPort {
|
|
115
|
+
head(signal: AbortSignal): Promise<bigint>;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Await `start()` unless `signal` aborts first. After abort the caller sees a
|
|
119
|
+
* rejection at once, so it performs no further effect; the underlying call
|
|
120
|
+
* may still finish, and its value is dropped.
|
|
121
|
+
*/
|
|
122
|
+
export declare function abortable<T>(signal: AbortSignal, start: () => Promise<T>): Promise<T>;
|
|
123
|
+
export interface ReplicaBudget {
|
|
124
|
+
/** Positive safe integer. Counts admitted attempts, not all storage work. */
|
|
125
|
+
units: number;
|
|
126
|
+
/** Positive safe integer; omitted means the finite default below. */
|
|
127
|
+
bytes?: number;
|
|
128
|
+
}
|
|
129
|
+
export declare const REPLICA_STEP_BYTES: number;
|
|
130
|
+
export declare const REPLICA_REPORT_LIMIT = 256;
|
|
131
|
+
export declare const REPLICA_ATTEMPT_TIMEOUT_MS = 30000;
|
|
132
|
+
export interface ReplicaStep {
|
|
133
|
+
/** Nonnegative safe-integer milliseconds on the host's scheduling clock. */
|
|
134
|
+
now: number;
|
|
135
|
+
budget: ReplicaBudget;
|
|
136
|
+
signal?: AbortSignal;
|
|
137
|
+
}
|
|
138
|
+
/** Validate before storage, hints, selection or any other effect. */
|
|
139
|
+
export declare function validateReplicaStep(context: ReplicaStep): void;
|
|
140
|
+
/** Stable phase names survive a reordered host construction across restart. */
|
|
141
|
+
export interface ReplicaRotation {
|
|
142
|
+
nextPhase?: ReplicaPhase;
|
|
143
|
+
writers: Partial<Record<ReplicaPhase, string>>;
|
|
144
|
+
}
|
|
145
|
+
export interface ReplicaCoordinatorState extends ReplicaRotation {
|
|
146
|
+
/** Opaque exclusive-owner fence, never a PID or wall-clock lease in core. */
|
|
147
|
+
owner: string;
|
|
148
|
+
/** Monotonic compare-and-swap revision within this durable repository. */
|
|
149
|
+
version: number;
|
|
150
|
+
}
|
|
151
|
+
export declare class ReplicaCoordinatorConflict extends Error {
|
|
152
|
+
constructor();
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* A host adapter must use the SAME transaction for `checkpoint` and rotation.
|
|
156
|
+
* Check current ownership and revision before calling checkpoint, and again
|
|
157
|
+
* before commit. On any throw, neither the checkpoint nor cursor may persist.
|
|
158
|
+
* The callback is synchronous and must not escape or run after commit returns.
|
|
159
|
+
* Every adapter must pass `replicaCoordinatorStateContract`.
|
|
160
|
+
*/
|
|
161
|
+
export interface ReplicaCoordinatorStatePort {
|
|
162
|
+
load(): ReplicaCoordinatorState;
|
|
163
|
+
commit<T>(expected: ReplicaCoordinatorState, next: ReplicaRotation, checkpoint: () => T): {
|
|
164
|
+
state: ReplicaCoordinatorState;
|
|
165
|
+
result: T;
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* The same port over an asynchronous transaction (PS-Lite's native one).
|
|
170
|
+
* `checkpoint` receives that transaction and the port awaits it before the
|
|
171
|
+
* rotation is written; the same ownership, revision and rollback rules
|
|
172
|
+
* apply. The callback must not escape or run after commit settles.
|
|
173
|
+
*/
|
|
174
|
+
export interface AsyncReplicaCoordinatorStatePort<C> {
|
|
175
|
+
readonly async: true;
|
|
176
|
+
load(): Promise<ReplicaCoordinatorState>;
|
|
177
|
+
commit<T>(expected: ReplicaCoordinatorState, next: ReplicaRotation, checkpoint: (context: C) => Promise<T>): Promise<{
|
|
178
|
+
state: ReplicaCoordinatorState;
|
|
179
|
+
result: T;
|
|
180
|
+
}>;
|
|
181
|
+
}
|
|
182
|
+
/** Thrown when a synchronous port is handed an asynchronous checkpoint. */
|
|
183
|
+
export declare class ReplicaAsyncCheckpointError extends Error {
|
|
184
|
+
constructor();
|
|
185
|
+
}
|
|
186
|
+
export interface ProgressReport {
|
|
187
|
+
/** Diagnostics may be incomplete because the fixed entry cap was reached. */
|
|
188
|
+
diagnosticsTruncated?: boolean;
|
|
189
|
+
receipts: ReplicaReceipt[];
|
|
190
|
+
waits: {
|
|
191
|
+
id: string;
|
|
192
|
+
phase: ReplicaPhase;
|
|
193
|
+
dependency: ReplicaDependency;
|
|
194
|
+
ageMs?: number;
|
|
195
|
+
}[];
|
|
196
|
+
problems: {
|
|
197
|
+
id: string;
|
|
198
|
+
phase: ReplicaPhase;
|
|
199
|
+
problem: ReplicaProblem;
|
|
200
|
+
cause?: ReplicaCause;
|
|
201
|
+
nextEligible: number;
|
|
202
|
+
}[];
|
|
203
|
+
quarantines: {
|
|
204
|
+
id: string;
|
|
205
|
+
phase: ReplicaPhase;
|
|
206
|
+
proof: ReplicaQuarantineProof;
|
|
207
|
+
}[];
|
|
208
|
+
unsupported: {
|
|
209
|
+
id: string;
|
|
210
|
+
phase: ReplicaPhase;
|
|
211
|
+
admission: ReplicaAdmission;
|
|
212
|
+
}[];
|
|
213
|
+
/** `now` when admitted work remains; else the earliest durable deadline. */
|
|
214
|
+
nextWake: number | undefined;
|
|
215
|
+
}
|
|
216
|
+
/** Options shared by both coordinator factories. */
|
|
217
|
+
export interface ReplicaCoordinatorOptions {
|
|
218
|
+
quantum?: Partial<Record<ReplicaPhase, number>>;
|
|
219
|
+
/** Items per writer in one selection round. Defaults to one. */
|
|
220
|
+
perWriter?: number;
|
|
221
|
+
backoff?: ReplicaBackoff;
|
|
222
|
+
/** Settlement clock. Defaults to the step's `now`. */
|
|
223
|
+
clock?: () => number;
|
|
224
|
+
/** Optional finalized-head hint, read at most every `hintRefreshMs`. */
|
|
225
|
+
hint?: ReplicaHintPort;
|
|
226
|
+
hintRefreshMs?: number;
|
|
227
|
+
/** Positive integer per-run timeout in ms (default 30s); late results are discarded. */
|
|
228
|
+
deadlineMs?: number;
|
|
229
|
+
/**
|
|
230
|
+
* Sweeps that are never finished (e.g. revalidating imported slots). Under
|
|
231
|
+
* a finite budget they keep their reserved share but take leftover units
|
|
232
|
+
* only after every other phase, so a sweep cannot crowd out progress.
|
|
233
|
+
*/
|
|
234
|
+
background?: readonly ReplicaPhase[];
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Selects due work fairly and turns phase verdicts into durable transitions.
|
|
238
|
+
* The host schedules step(); it never runs another semantic retry loop.
|
|
239
|
+
*/
|
|
240
|
+
export declare function createReplicaCoordinator(input: ReplicaCoordinatorOptions & {
|
|
241
|
+
phases: ReplicaPhaseHandler[];
|
|
242
|
+
/** Required for restart fairness; omission is an in-memory-only test seam. */
|
|
243
|
+
state?: ReplicaCoordinatorStatePort;
|
|
244
|
+
}): {
|
|
245
|
+
step: (context: ReplicaStep) => Promise<ProgressReport>;
|
|
246
|
+
onDependencyChanged(key: string, now: number): number;
|
|
247
|
+
};
|
|
248
|
+
/**
|
|
249
|
+
* The coordinator over handlers and a state port that may answer
|
|
250
|
+
* asynchronously. Plain values keep the synchronous path, so a synchronous
|
|
251
|
+
* host (Node) behaves exactly as under `createReplicaCoordinator`. With a
|
|
252
|
+
* synchronous port, an asynchronous checkpoint is refused inside its
|
|
253
|
+
* transaction, never committed half-done.
|
|
254
|
+
*/
|
|
255
|
+
export declare function createAsyncReplicaCoordinator<C>(input: ReplicaCoordinatorOptions & {
|
|
256
|
+
phases: AsyncReplicaPhaseHandler<any, C, any>[];
|
|
257
|
+
/** Required for restart fairness; omission is an in-memory-only test seam. */
|
|
258
|
+
state?: ReplicaCoordinatorStatePort | AsyncReplicaCoordinatorStatePort<C>;
|
|
259
|
+
}): {
|
|
260
|
+
step(context: ReplicaStep): Promise<ProgressReport>;
|
|
261
|
+
onDependencyChanged(key: string, now: number): MaybePromise<number>;
|
|
262
|
+
};
|
|
263
|
+
export {};
|
|
264
|
+
//# sourceMappingURL=coordinator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coordinator.d.ts","sourceRoot":"","sources":["../../src/replication/coordinator.ts"],"names":[],"mappings":"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"}
|