@opendatalabs/personal-server-ts-core 1.34.2 → 1.35.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/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 +316 -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,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Replica membership: the owner's ServerRegistration roster at the gateway.
|
|
3
|
+
* A receiver imports only from servers that are registered now. It never
|
|
4
|
+
* accepts on an unknown roster: an unavailable answer is a Wait, not absence.
|
|
5
|
+
*/
|
|
6
|
+
/** The roster could not be read and no fresh answer is cached. Never absence. */
|
|
7
|
+
export class ReplicaRosterUnavailableError extends Error {
|
|
8
|
+
code = "replica_roster_unavailable";
|
|
9
|
+
constructor(options) {
|
|
10
|
+
super("replica_roster_unavailable", options);
|
|
11
|
+
this.name = "ReplicaRosterUnavailableError";
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
/** The longest a receiver acts on one roster answer. */
|
|
15
|
+
export const REPLICA_ROSTER_MAX_AGE_MS = 5 * 60_000;
|
|
16
|
+
const DEFAULT_MAX_ENTRIES = 1024;
|
|
17
|
+
/**
|
|
18
|
+
* A bounded roster cache. An answer, including a proven absence, is served
|
|
19
|
+
* for at most `maxAgeMs` after it was read. After that the next lookup reads
|
|
20
|
+
* the port again; if that read fails, the lookup throws
|
|
21
|
+
* ReplicaRosterUnavailableError. An expired answer is never served, so a
|
|
22
|
+
* deregistration reaches every check within `maxAgeMs` plus the gateway CDN TTL.
|
|
23
|
+
*/
|
|
24
|
+
export function createCachedReplicaRoster(port, options = {}) {
|
|
25
|
+
const maxAge = options.maxAgeMs ?? REPLICA_ROSTER_MAX_AGE_MS;
|
|
26
|
+
const maxEntries = options.maxEntries ?? DEFAULT_MAX_ENTRIES;
|
|
27
|
+
const now = options.now ?? Date.now;
|
|
28
|
+
if (!(maxAge >= 0) || !(maxEntries >= 1))
|
|
29
|
+
throw new RangeError("invalid roster cache bounds");
|
|
30
|
+
const answers = new Map();
|
|
31
|
+
const reads = new Map();
|
|
32
|
+
return {
|
|
33
|
+
async server(address, call) {
|
|
34
|
+
const key = address.toLowerCase();
|
|
35
|
+
const cached = answers.get(key);
|
|
36
|
+
if (cached && now() - cached.at < maxAge)
|
|
37
|
+
return cached.record;
|
|
38
|
+
answers.delete(key);
|
|
39
|
+
let read = reads.get(key);
|
|
40
|
+
if (!read) {
|
|
41
|
+
const startedAt = now();
|
|
42
|
+
read = port
|
|
43
|
+
.server(key, call)
|
|
44
|
+
.then((record) => {
|
|
45
|
+
answers.set(key, { record, at: startedAt });
|
|
46
|
+
while (answers.size > maxEntries)
|
|
47
|
+
answers.delete(answers.keys().next().value);
|
|
48
|
+
return record;
|
|
49
|
+
})
|
|
50
|
+
.finally(() => reads.delete(key));
|
|
51
|
+
reads.set(key, read);
|
|
52
|
+
}
|
|
53
|
+
try {
|
|
54
|
+
return await read;
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
throw error instanceof ReplicaRosterUnavailableError
|
|
58
|
+
? error
|
|
59
|
+
: new ReplicaRosterUnavailableError({ cause: error });
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
invalidate(address) {
|
|
63
|
+
if (address === undefined)
|
|
64
|
+
answers.clear();
|
|
65
|
+
else
|
|
66
|
+
answers.delete(address.toLowerCase());
|
|
67
|
+
},
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
const hex = (length) => new RegExp(`^0x[0-9a-fA-F]{${length}}$`);
|
|
71
|
+
/**
|
|
72
|
+
* GET /v1/servers/:address. Only the gateway's JSON "Server not found" 404
|
|
73
|
+
* proves absence; any other status or shape is unavailable, so a generic
|
|
74
|
+
* route or CDN 404 cannot refuse a registered server.
|
|
75
|
+
*/
|
|
76
|
+
export function createGatewayReplicaRoster(input) {
|
|
77
|
+
const base = input.gatewayUrl.replace(/\/+$/, "");
|
|
78
|
+
const get = input.fetch ?? fetch;
|
|
79
|
+
return {
|
|
80
|
+
async server(address, call) {
|
|
81
|
+
let response;
|
|
82
|
+
let body;
|
|
83
|
+
try {
|
|
84
|
+
response = await get(`${base}/v1/servers/${address.toLowerCase()}`, {
|
|
85
|
+
signal: call?.signal,
|
|
86
|
+
headers: { accept: "application/json" },
|
|
87
|
+
});
|
|
88
|
+
body = await response.json();
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
throw new ReplicaRosterUnavailableError({ cause: error });
|
|
92
|
+
}
|
|
93
|
+
if (response.status === 404 &&
|
|
94
|
+
body?.error === "Server not found")
|
|
95
|
+
return null;
|
|
96
|
+
const data = body?.data;
|
|
97
|
+
if (response.status !== 200 ||
|
|
98
|
+
!data ||
|
|
99
|
+
typeof data.id !== "string" ||
|
|
100
|
+
!hex(64).test(data.id) ||
|
|
101
|
+
typeof data.ownerAddress !== "string" ||
|
|
102
|
+
!hex(40).test(data.ownerAddress) ||
|
|
103
|
+
typeof data.serverAddress !== "string" ||
|
|
104
|
+
data.serverAddress.toLowerCase() !== address.toLowerCase() ||
|
|
105
|
+
(data.revokedAt !== null && typeof data.revokedAt !== "string"))
|
|
106
|
+
throw new ReplicaRosterUnavailableError();
|
|
107
|
+
return {
|
|
108
|
+
owner: data.ownerAddress,
|
|
109
|
+
id: data.id,
|
|
110
|
+
revokedAt: data.revokedAt,
|
|
111
|
+
};
|
|
112
|
+
},
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=roster.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"roster.js","sourceRoot":"","sources":["../../src/replication/roster.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import type { ReplicaOutcome, ReplicaPhaseOutcome } from "./outcome.js";
|
|
2
|
+
/** Delay before failure attempt n (n >= 1). */
|
|
3
|
+
export type ReplicaBackoff = (attempt: number) => number;
|
|
4
|
+
export declare const defaultReplicaBackoff: ReplicaBackoff;
|
|
5
|
+
/** Durable timing of one work item. Independent of payload and projection. */
|
|
6
|
+
export interface ReplicaWorkState {
|
|
7
|
+
/** Consecutive failures only. A Wait is a successful read and resets it. */
|
|
8
|
+
attempts: number;
|
|
9
|
+
nextEligible: number;
|
|
10
|
+
waitSince: number | null;
|
|
11
|
+
/** Highest verified finalized height observed. Never a hint. */
|
|
12
|
+
checkedBlock: string | null;
|
|
13
|
+
}
|
|
14
|
+
export declare const initialReplicaWorkState: ReplicaWorkState;
|
|
15
|
+
/** Terminal items are never due again on a timer or dependency wake. */
|
|
16
|
+
export declare const REPLICA_TERMINAL: number;
|
|
17
|
+
/** Dependency waits also rescan on this bound, so a lost wake cannot strand work. */
|
|
18
|
+
export declare const REPLICA_WAIT_FALLBACK_MS = 60000;
|
|
19
|
+
/**
|
|
20
|
+
* Pure transition from a phase verdict to the next durable state.
|
|
21
|
+
* `hints` is true when the host supplies finalized-head scheduling hints; a
|
|
22
|
+
* hint can make a parked wait eligible early but never moves a Retry deadline.
|
|
23
|
+
*/
|
|
24
|
+
export declare function settleReplicaWork(previous: ReplicaWorkState, outcome: ReplicaPhaseOutcome, now: number, options?: {
|
|
25
|
+
backoff?: ReplicaBackoff;
|
|
26
|
+
hints?: boolean;
|
|
27
|
+
}): {
|
|
28
|
+
state: ReplicaWorkState;
|
|
29
|
+
outcome: ReplicaOutcome;
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* What the coordinator knows when it selects work: its clock reading and the
|
|
33
|
+
* optional finalized-head hint. A hint only parks finality waits; it never
|
|
34
|
+
* makes anything eligible before its durable deadline.
|
|
35
|
+
*/
|
|
36
|
+
export interface ReplicaEligibility {
|
|
37
|
+
now: number;
|
|
38
|
+
/** Latest finalized-head hint, or undefined when none is known. */
|
|
39
|
+
head: bigint | undefined;
|
|
40
|
+
/** When the coordinator next refreshes the hint. Required with `head`. */
|
|
41
|
+
hintRefreshAt: number | undefined;
|
|
42
|
+
}
|
|
43
|
+
/** Durable timing of one stored item, as the eligibility policy reads it. */
|
|
44
|
+
export interface ReplicaStoredTiming {
|
|
45
|
+
/** True for a Wait whose dependency kind is finality. */
|
|
46
|
+
finalityWait: boolean;
|
|
47
|
+
nextEligible: number;
|
|
48
|
+
waitSince: number | null;
|
|
49
|
+
checkedBlock: string | null;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* When a stored item is next eligible, or undefined when it never is on a
|
|
53
|
+
* timer (terminal or owner-resolved). The one policy behind both due
|
|
54
|
+
* selection and nextWake: an item is due iff the result is <= now.
|
|
55
|
+
*
|
|
56
|
+
* A finality wait whose verified height is not below the hint is parked: a
|
|
57
|
+
* re-read cannot succeed until the hint advances (seen at the next hint
|
|
58
|
+
* refresh) or the wait reaches ten minutes, whichever is first.
|
|
59
|
+
*/
|
|
60
|
+
export declare function replicaEligibleAt(item: ReplicaStoredTiming, eligibility: ReplicaEligibility): number | undefined;
|
|
61
|
+
/**
|
|
62
|
+
* replicaEligibleAt as an SQL expression over a work table's columns, so
|
|
63
|
+
* selection filters parked and terminal rows before LIMIT. NULL = never on a
|
|
64
|
+
* timer. Inputs are numbers and a bigint only; nothing is user text.
|
|
65
|
+
*/
|
|
66
|
+
export declare function replicaEligibleAtSql(eligibility: ReplicaEligibility, columns?: {
|
|
67
|
+
outcome: string;
|
|
68
|
+
dependency: string;
|
|
69
|
+
next: string;
|
|
70
|
+
since: string;
|
|
71
|
+
checked: string;
|
|
72
|
+
}): string;
|
|
73
|
+
//# sourceMappingURL=schedule.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schedule.d.ts","sourceRoot":"","sources":["../../src/replication/schedule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAExE,+CAA+C;AAC/C,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC;AAEzD,eAAO,MAAM,qBAAqB,EAAE,cACqC,CAAC;AAE1E,8EAA8E;AAC9E,MAAM,WAAW,gBAAgB;IAC/B,4EAA4E;IAC5E,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,gEAAgE;IAChE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,eAAO,MAAM,uBAAuB,EAAE,gBAKrC,CAAC;AAEF,wEAAwE;AACxE,eAAO,MAAM,gBAAgB,QAA0B,CAAC;AAOxD,qFAAqF;AACrF,eAAO,MAAM,wBAAwB,QAAS,CAAC;AAqB/C;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,gBAAgB,EAC1B,OAAO,EAAE,mBAAmB,EAC5B,GAAG,EAAE,MAAM,EACX,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,cAAc,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO,GAC1D;IAAE,KAAK,EAAE,gBAAgB,CAAC;IAAC,OAAO,EAAE,cAAc,CAAA;CAAE,CAkItD;AAED;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,mEAAmE;IACnE,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,0EAA0E;IAC1E,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;CACnC;AAED,6EAA6E;AAC7E,MAAM,WAAW,mBAAmB;IAClC,yDAAyD;IACzD,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,mBAAmB,EACzB,WAAW,EAAE,kBAAkB,GAC9B,MAAM,GAAG,SAAS,CAgBpB;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,kBAAkB,EAC/B,OAAO,GAAE;IACP,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CAOjB,GACA,MAAM,CAWR"}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
export const defaultReplicaBackoff = (attempt) => Math.min(3_600_000, 1000 * 2 ** Math.min(Math.max(attempt, 1) - 1, 12));
|
|
2
|
+
export const initialReplicaWorkState = {
|
|
3
|
+
attempts: 0,
|
|
4
|
+
nextEligible: 0,
|
|
5
|
+
waitSince: null,
|
|
6
|
+
checkedBlock: null,
|
|
7
|
+
};
|
|
8
|
+
/** Terminal items are never due again on a timer or dependency wake. */
|
|
9
|
+
export const REPLICA_TERMINAL = Number.MAX_SAFE_INTEGER;
|
|
10
|
+
const FINALITY_POLL_MS = 2_000;
|
|
11
|
+
const FINALITY_SLOW_POLL_MS = 30_000;
|
|
12
|
+
const LONG_WAIT_MS = 600_000;
|
|
13
|
+
const FINALITY_BACKOFF_CAP_MS = 16_000;
|
|
14
|
+
const DEPENDENCY_BACKOFF_CAP_MS = 300_000;
|
|
15
|
+
const DEPENDENCY_LONG_POLL_MS = 600_000;
|
|
16
|
+
/** Dependency waits also rescan on this bound, so a lost wake cannot strand work. */
|
|
17
|
+
export const REPLICA_WAIT_FALLBACK_MS = 60_000;
|
|
18
|
+
function growingWaitDelay(age, first, cap, long) {
|
|
19
|
+
if (age >= LONG_WAIT_MS)
|
|
20
|
+
return long;
|
|
21
|
+
let interval = first;
|
|
22
|
+
let elapsed = 0;
|
|
23
|
+
while (interval < cap && age >= elapsed + interval) {
|
|
24
|
+
elapsed += interval;
|
|
25
|
+
interval = Math.min(cap, interval * 2);
|
|
26
|
+
}
|
|
27
|
+
return interval;
|
|
28
|
+
}
|
|
29
|
+
const maxHeight = (a, b) => a === null || BigInt(b) > BigInt(a) ? b : a;
|
|
30
|
+
/**
|
|
31
|
+
* Pure transition from a phase verdict to the next durable state.
|
|
32
|
+
* `hints` is true when the host supplies finalized-head scheduling hints; a
|
|
33
|
+
* hint can make a parked wait eligible early but never moves a Retry deadline.
|
|
34
|
+
*/
|
|
35
|
+
export function settleReplicaWork(previous, outcome, now, options = {}) {
|
|
36
|
+
const backoff = options.backoff ?? defaultReplicaBackoff;
|
|
37
|
+
switch (outcome.tag) {
|
|
38
|
+
case "progress":
|
|
39
|
+
return {
|
|
40
|
+
outcome,
|
|
41
|
+
state: {
|
|
42
|
+
attempts: 0,
|
|
43
|
+
nextEligible: now,
|
|
44
|
+
waitSince: null,
|
|
45
|
+
checkedBlock: previous.checkedBlock,
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
case "wait": {
|
|
49
|
+
if (outcome.dependency.kind === "registration" &&
|
|
50
|
+
outcome.dependency.reason === "own_key_conflict")
|
|
51
|
+
return {
|
|
52
|
+
outcome,
|
|
53
|
+
state: {
|
|
54
|
+
...previous,
|
|
55
|
+
nextEligible: REPLICA_TERMINAL,
|
|
56
|
+
waitSince: previous.waitSince ?? now,
|
|
57
|
+
},
|
|
58
|
+
};
|
|
59
|
+
const since = previous.waitSince ??
|
|
60
|
+
(outcome.dependency.kind === "registration_pending"
|
|
61
|
+
? outcome.dependency.since
|
|
62
|
+
: now);
|
|
63
|
+
if (outcome.dependency.kind !== "finality" &&
|
|
64
|
+
outcome.dependency.kind !== "registration_pending")
|
|
65
|
+
return {
|
|
66
|
+
outcome,
|
|
67
|
+
state: {
|
|
68
|
+
attempts: 0,
|
|
69
|
+
nextEligible: now +
|
|
70
|
+
growingWaitDelay(now - since, REPLICA_WAIT_FALLBACK_MS, DEPENDENCY_BACKOFF_CAP_MS, DEPENDENCY_LONG_POLL_MS),
|
|
71
|
+
waitSince: since,
|
|
72
|
+
checkedBlock: previous.checkedBlock,
|
|
73
|
+
},
|
|
74
|
+
};
|
|
75
|
+
if (outcome.dependency.kind === "registration_pending" &&
|
|
76
|
+
outcome.dependency.nextCheckAt !== undefined &&
|
|
77
|
+
outcome.dependency.nextCheckAt > now)
|
|
78
|
+
return {
|
|
79
|
+
outcome,
|
|
80
|
+
state: {
|
|
81
|
+
attempts: 0,
|
|
82
|
+
nextEligible: outcome.dependency.nextCheckAt,
|
|
83
|
+
waitSince: since,
|
|
84
|
+
checkedBlock: previous.checkedBlock,
|
|
85
|
+
},
|
|
86
|
+
};
|
|
87
|
+
const observed = outcome.dependency.checkedBlock;
|
|
88
|
+
if (observed === undefined)
|
|
89
|
+
return {
|
|
90
|
+
outcome,
|
|
91
|
+
state: {
|
|
92
|
+
attempts: 0,
|
|
93
|
+
nextEligible: now +
|
|
94
|
+
growingWaitDelay(now - since, FINALITY_POLL_MS, FINALITY_BACKOFF_CAP_MS, FINALITY_SLOW_POLL_MS),
|
|
95
|
+
waitSince: since,
|
|
96
|
+
checkedBlock: previous.checkedBlock,
|
|
97
|
+
},
|
|
98
|
+
};
|
|
99
|
+
const progressed = previous.checkedBlock === null ||
|
|
100
|
+
BigInt(observed) > BigInt(previous.checkedBlock);
|
|
101
|
+
const delay = options.hints === true
|
|
102
|
+
? !progressed || now - since >= LONG_WAIT_MS
|
|
103
|
+
? FINALITY_SLOW_POLL_MS
|
|
104
|
+
: FINALITY_POLL_MS
|
|
105
|
+
: growingWaitDelay(now - since, FINALITY_POLL_MS, FINALITY_BACKOFF_CAP_MS, FINALITY_SLOW_POLL_MS);
|
|
106
|
+
return {
|
|
107
|
+
outcome,
|
|
108
|
+
state: {
|
|
109
|
+
attempts: 0,
|
|
110
|
+
nextEligible: now + delay,
|
|
111
|
+
waitSince: since,
|
|
112
|
+
checkedBlock: maxHeight(previous.checkedBlock, observed),
|
|
113
|
+
},
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
case "retry": {
|
|
117
|
+
const attempts = Math.min(Number.MAX_SAFE_INTEGER - 1, previous.attempts + 1);
|
|
118
|
+
const nextEligible = now + backoff(attempts);
|
|
119
|
+
return {
|
|
120
|
+
outcome: { ...outcome, nextEligible },
|
|
121
|
+
state: {
|
|
122
|
+
attempts,
|
|
123
|
+
nextEligible,
|
|
124
|
+
waitSince: null,
|
|
125
|
+
checkedBlock: previous.checkedBlock,
|
|
126
|
+
},
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
case "quarantine":
|
|
130
|
+
case "unsupported":
|
|
131
|
+
return {
|
|
132
|
+
outcome,
|
|
133
|
+
state: { ...previous, nextEligible: REPLICA_TERMINAL },
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* When a stored item is next eligible, or undefined when it never is on a
|
|
139
|
+
* timer (terminal or owner-resolved). The one policy behind both due
|
|
140
|
+
* selection and nextWake: an item is due iff the result is <= now.
|
|
141
|
+
*
|
|
142
|
+
* A finality wait whose verified height is not below the hint is parked: a
|
|
143
|
+
* re-read cannot succeed until the hint advances (seen at the next hint
|
|
144
|
+
* refresh) or the wait reaches ten minutes, whichever is first.
|
|
145
|
+
*/
|
|
146
|
+
export function replicaEligibleAt(item, eligibility) {
|
|
147
|
+
if (item.nextEligible >= REPLICA_TERMINAL)
|
|
148
|
+
return undefined;
|
|
149
|
+
const { head, hintRefreshAt, now } = eligibility;
|
|
150
|
+
if (!item.finalityWait ||
|
|
151
|
+
head === undefined ||
|
|
152
|
+
item.checkedBlock === null ||
|
|
153
|
+
item.waitSince === null ||
|
|
154
|
+
BigInt(item.checkedBlock) < head ||
|
|
155
|
+
item.waitSince + LONG_WAIT_MS <= now)
|
|
156
|
+
return item.nextEligible;
|
|
157
|
+
return Math.max(item.nextEligible, Math.min(item.waitSince + LONG_WAIT_MS, hintRefreshAt ?? now));
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* replicaEligibleAt as an SQL expression over a work table's columns, so
|
|
161
|
+
* selection filters parked and terminal rows before LIMIT. NULL = never on a
|
|
162
|
+
* timer. Inputs are numbers and a bigint only; nothing is user text.
|
|
163
|
+
*/
|
|
164
|
+
export function replicaEligibleAtSql(eligibility, columns = {
|
|
165
|
+
outcome: "outcome",
|
|
166
|
+
dependency: "dependency",
|
|
167
|
+
next: "next_attempt",
|
|
168
|
+
since: "wait_since",
|
|
169
|
+
checked: "checked_block",
|
|
170
|
+
}) {
|
|
171
|
+
const { outcome, dependency, next, since, checked } = columns;
|
|
172
|
+
const { head, hintRefreshAt, now } = eligibility;
|
|
173
|
+
const terminal = `${next} >= ${REPLICA_TERMINAL}`;
|
|
174
|
+
if (head === undefined)
|
|
175
|
+
return `(CASE WHEN ${terminal} THEN NULL ELSE ${next} END)`;
|
|
176
|
+
const h = head.toString();
|
|
177
|
+
const parked = `(${outcome} = 'wait' AND (${dependency} LIKE 'finality:%' OR ${dependency} LIKE 'registration_pending:%') AND ${checked} IS NOT NULL AND ${since} IS NOT NULL
|
|
178
|
+
AND (length(${checked}) > ${h.length} OR (length(${checked}) = ${h.length} AND ${checked} >= '${h}'))
|
|
179
|
+
AND ${since} + ${LONG_WAIT_MS} > ${now})`;
|
|
180
|
+
return `(CASE WHEN ${terminal} THEN NULL WHEN ${parked} THEN max(${next}, min(${since} + ${LONG_WAIT_MS}, ${hintRefreshAt ?? now})) ELSE ${next} END)`;
|
|
181
|
+
}
|
|
182
|
+
//# sourceMappingURL=schedule.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schedule.js","sourceRoot":"","sources":["../../src/replication/schedule.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { type EnvelopeExpectation, type ReplicaEnvelope } from "./envelope.js";
|
|
2
|
+
import { type ReplicaFragment, type PreparedFragment, type Predecessor } from "./transport.js";
|
|
3
|
+
/** Exact wire length without reading or materializing referenced binary bytes. */
|
|
4
|
+
export declare function replicaPayloadByteLength(envelope: ReplicaEnvelope): number;
|
|
5
|
+
/** Greedy attribution in one pass. A refused op contributes neither bytes nor blobs. */
|
|
6
|
+
export declare function replicaPayloadOperationCrossings(envelope: ReplicaEnvelope, exceeds: (payloadBytes: number) => boolean): number[];
|
|
7
|
+
/** Size the uncompressed stream by groups with equal index/offset digit widths.
|
|
8
|
+
* At most twice the numeric field width groups, independent of payload length;
|
|
9
|
+
* no fragment content is allocated, encoded or encrypted during a size probe.
|
|
10
|
+
*/
|
|
11
|
+
export declare function replicaStreamCiphertextByteLength(input: {
|
|
12
|
+
owner: string;
|
|
13
|
+
writer: string;
|
|
14
|
+
batch: string;
|
|
15
|
+
sequence: number;
|
|
16
|
+
previous: Predecessor | null;
|
|
17
|
+
collectedAt: string;
|
|
18
|
+
digest: string;
|
|
19
|
+
totalBytes: number;
|
|
20
|
+
targetChunkBytes: number;
|
|
21
|
+
}, encryptedByteLength: (plaintextBytes: number) => number): number;
|
|
22
|
+
/** Byte-identical to the Node payload, including descriptor order and deduplication. */
|
|
23
|
+
export declare function encodeReplicaPayload(envelope: ReplicaEnvelope, readBlob: (id: string) => AsyncIterable<Uint8Array>): AsyncIterable<Uint8Array>;
|
|
24
|
+
export declare function hashReplicaBytes(factory: () => AsyncIterable<Uint8Array>): Promise<{
|
|
25
|
+
digest: string;
|
|
26
|
+
totalBytes: number;
|
|
27
|
+
}>;
|
|
28
|
+
export declare function fragmentReplicaStream(input: {
|
|
29
|
+
owner: string;
|
|
30
|
+
writer: string;
|
|
31
|
+
batch: string;
|
|
32
|
+
sequence: number;
|
|
33
|
+
previous: Predecessor | null;
|
|
34
|
+
collectedAt: string;
|
|
35
|
+
digest: string;
|
|
36
|
+
totalBytes: number;
|
|
37
|
+
bytes: () => AsyncIterable<Uint8Array>;
|
|
38
|
+
encrypt: (scope: string, bytes: Uint8Array) => Promise<Uint8Array>;
|
|
39
|
+
maxBlobBytes?: number;
|
|
40
|
+
targetChunkBytes?: number;
|
|
41
|
+
}): AsyncIterable<PreparedFragment>;
|
|
42
|
+
/** Consume to completion before importing: the final digest is checked at EOF. */
|
|
43
|
+
export declare function assembleReplicaStream(fragments: () => AsyncIterable<ReplicaFragment>, options?: {
|
|
44
|
+
maxBytes?: number;
|
|
45
|
+
signal?: AbortSignal;
|
|
46
|
+
}): AsyncIterable<Uint8Array>;
|
|
47
|
+
type BlobMetadata = {
|
|
48
|
+
blobId: string;
|
|
49
|
+
sha256: string;
|
|
50
|
+
sizeBytes: number;
|
|
51
|
+
};
|
|
52
|
+
type PayloadInspection = {
|
|
53
|
+
envelope: ReplicaEnvelope;
|
|
54
|
+
blobs: BlobMetadata[];
|
|
55
|
+
};
|
|
56
|
+
export interface ReplicaStreamedLimits {
|
|
57
|
+
maxOperations: number;
|
|
58
|
+
maxOperationBytes: number;
|
|
59
|
+
maxSingleBlobBytes: number;
|
|
60
|
+
maxBlobTotalBytes: number;
|
|
61
|
+
maxPayloadBytes: number;
|
|
62
|
+
}
|
|
63
|
+
export declare const DEFAULT_REPLICA_STREAMED_LIMITS: ReplicaStreamedLimits;
|
|
64
|
+
/** `undefined` expectation parses the authenticated envelope without current declaration admission. */
|
|
65
|
+
export declare function inspectReplicaPayload(factory: () => AsyncIterable<Uint8Array>, expected: EnvelopeExpectation | undefined, stage?: (blobId: string, bytes: Uint8Array, blobIndex: number) => void | Promise<void>, options?: {
|
|
66
|
+
limits?: ReplicaStreamedLimits;
|
|
67
|
+
signal?: AbortSignal;
|
|
68
|
+
reserveEnvelopeBytes?: (bytes: number) => void;
|
|
69
|
+
}): Promise<PayloadInspection>;
|
|
70
|
+
/** Inspect first, then consume this same immutable source to completion into staging. */
|
|
71
|
+
export declare function readReplicaPayloadBlob(factory: () => AsyncIterable<Uint8Array>, id: string): AsyncIterable<Uint8Array>;
|
|
72
|
+
export {};
|
|
73
|
+
//# sourceMappingURL=stream.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../src/replication/stream.ts"],"names":[],"mappings":"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"}
|