@rocicorp/zero 1.10.0-canary.0 → 1.10.0-canary.2
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/out/replicache/src/db/commit.js +1 -4
- package/out/replicache/src/db/commit.js.map +1 -1
- package/out/replicache/src/db/read.d.ts +1 -0
- package/out/replicache/src/db/read.d.ts.map +1 -1
- package/out/replicache/src/db/read.js +1 -4
- package/out/replicache/src/db/read.js.map +1 -1
- package/out/replicache/src/db/write.d.ts +2 -1
- package/out/replicache/src/db/write.d.ts.map +1 -1
- package/out/replicache/src/db/write.js +4 -51
- package/out/replicache/src/db/write.js.map +1 -1
- package/out/replicache/src/persist/clients.d.ts +1 -0
- package/out/replicache/src/persist/clients.d.ts.map +1 -1
- package/out/replicache/src/persist/clients.js +4 -31
- package/out/replicache/src/persist/clients.js.map +1 -1
- package/out/replicache/src/process-env.d.ts +28 -0
- package/out/replicache/src/process-env.d.ts.map +1 -0
- package/out/replicache/src/replicache-impl.d.ts.map +1 -1
- package/out/replicache/src/replicache-impl.js.map +1 -1
- package/out/replicache/src/scan-iterator.js +2 -14
- package/out/replicache/src/scan-iterator.js.map +1 -1
- package/out/replicache/src/subscriptions.d.ts +1 -0
- package/out/replicache/src/subscriptions.d.ts.map +1 -1
- package/out/replicache/src/subscriptions.js +2 -10
- package/out/replicache/src/subscriptions.js.map +1 -1
- package/out/replicache/src/transactions.d.ts +1 -0
- package/out/replicache/src/transactions.d.ts.map +1 -1
- package/out/replicache/src/transactions.js +2 -4
- package/out/replicache/src/transactions.js.map +1 -1
- package/out/z2s/src/compiler.d.ts.map +1 -1
- package/out/z2s/src/compiler.js +1 -22
- package/out/z2s/src/compiler.js.map +1 -1
- package/out/zero/package.js +3 -3
- package/out/zero/package.js.map +1 -1
- package/out/zero-cache/src/config/normalize.d.ts +1 -0
- package/out/zero-cache/src/config/normalize.d.ts.map +1 -1
- package/out/zero-cache/src/config/normalize.js +10 -1
- package/out/zero-cache/src/config/normalize.js.map +1 -1
- package/out/zero-cache/src/config/zero-config.d.ts +52 -1
- package/out/zero-cache/src/config/zero-config.d.ts.map +1 -1
- package/out/zero-cache/src/config/zero-config.js +171 -22
- package/out/zero-cache/src/config/zero-config.js.map +1 -1
- package/out/zero-cache/src/custom/fetch.js +1 -1
- package/out/zero-cache/src/custom/fetch.js.map +1 -1
- package/out/zero-cache/src/db/delete-lite-db.js +2 -1
- package/out/zero-cache/src/db/delete-lite-db.js.map +1 -1
- package/out/zero-cache/src/db/migration-lite.d.ts.map +1 -1
- package/out/zero-cache/src/db/migration-lite.js +5 -2
- package/out/zero-cache/src/db/migration-lite.js.map +1 -1
- package/out/zero-cache/src/db/migration.d.ts.map +1 -1
- package/out/zero-cache/src/db/migration.js +4 -2
- package/out/zero-cache/src/db/migration.js.map +1 -1
- package/out/zero-cache/src/db/sqlite-corruption.d.ts +3 -2
- package/out/zero-cache/src/db/sqlite-corruption.d.ts.map +1 -1
- package/out/zero-cache/src/db/sqlite-corruption.js +13 -8
- package/out/zero-cache/src/db/sqlite-corruption.js.map +1 -1
- package/out/zero-cache/src/observability/metrics.d.ts +6 -1
- package/out/zero-cache/src/observability/metrics.d.ts.map +1 -1
- package/out/zero-cache/src/observability/metrics.js +20 -2
- package/out/zero-cache/src/observability/metrics.js.map +1 -1
- package/out/zero-cache/src/server/backup-watermark-poller.js +31 -0
- package/out/zero-cache/src/server/backup-watermark-poller.js.map +1 -0
- package/out/zero-cache/src/server/change-streamer.d.ts.map +1 -1
- package/out/zero-cache/src/server/change-streamer.js +91 -31
- package/out/zero-cache/src/server/change-streamer.js.map +1 -1
- package/out/zero-cache/src/server/main.d.ts.map +1 -1
- package/out/zero-cache/src/server/main.js +6 -16
- package/out/zero-cache/src/server/main.js.map +1 -1
- package/out/zero-cache/src/server/replicator.d.ts.map +1 -1
- package/out/zero-cache/src/server/replicator.js +48 -5
- package/out/zero-cache/src/server/replicator.js.map +1 -1
- package/out/zero-cache/src/server/runner/run-worker.js +2 -1
- package/out/zero-cache/src/server/runner/run-worker.js.map +1 -1
- package/out/zero-cache/src/server/syncer.d.ts.map +1 -1
- package/out/zero-cache/src/server/syncer.js +1 -1
- package/out/zero-cache/src/server/syncer.js.map +1 -1
- package/out/zero-cache/src/server/worker-urls.d.ts +1 -1
- package/out/zero-cache/src/server/worker-urls.js +2 -2
- package/out/zero-cache/src/server/worker-urls.js.map +1 -1
- package/out/zero-cache/src/services/change-source/change-source.d.ts +4 -2
- package/out/zero-cache/src/services/change-source/change-source.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/common/replica-restore.d.ts +35 -0
- package/out/zero-cache/src/services/change-source/common/replica-restore.d.ts.map +1 -0
- package/out/zero-cache/src/services/change-source/common/replica-restore.js +34 -0
- package/out/zero-cache/src/services/change-source/common/replica-restore.js.map +1 -0
- package/out/zero-cache/src/services/change-source/common/replica-schema.d.ts +2 -0
- package/out/zero-cache/src/services/change-source/common/replica-schema.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/common/replica-schema.js +73 -1
- package/out/zero-cache/src/services/change-source/common/replica-schema.js.map +1 -1
- package/out/zero-cache/src/services/change-source/custom/change-source.d.ts +2 -6
- package/out/zero-cache/src/services/change-source/custom/change-source.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/custom/change-source.js +14 -5
- package/out/zero-cache/src/services/change-source/custom/change-source.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/backfill-stream.js +4 -7
- package/out/zero-cache/src/services/change-source/pg/backfill-stream.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/change-source.d.ts +7 -7
- package/out/zero-cache/src/services/change-source/pg/change-source.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/change-source.js +82 -25
- package/out/zero-cache/src/services/change-source/pg/change-source.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/initial-sync.d.ts +9 -1
- package/out/zero-cache/src/services/change-source/pg/initial-sync.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/initial-sync.js +12 -4
- package/out/zero-cache/src/services/change-source/pg/initial-sync.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/logical-replication/stream.d.ts +45 -2
- package/out/zero-cache/src/services/change-source/pg/logical-replication/stream.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/logical-replication/stream.js +59 -8
- package/out/zero-cache/src/services/change-source/pg/logical-replication/stream.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/replication-slots.d.ts +4 -2
- package/out/zero-cache/src/services/change-source/pg/replication-slots.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/replication-slots.js +7 -4
- package/out/zero-cache/src/services/change-source/pg/replication-slots.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/schema/init.d.ts +0 -5
- package/out/zero-cache/src/services/change-source/pg/schema/init.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/schema/init.js +29 -41
- package/out/zero-cache/src/services/change-source/pg/schema/init.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/schema/shard.d.ts +35 -16
- package/out/zero-cache/src/services/change-source/pg/schema/shard.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/schema/shard.js +77 -7
- package/out/zero-cache/src/services/change-source/pg/schema/shard.js.map +1 -1
- package/out/zero-cache/src/services/change-source/protocol/current/data.d.ts +2 -1
- package/out/zero-cache/src/services/change-source/protocol/current/data.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/protocol/current/data.js +5 -13
- package/out/zero-cache/src/services/change-source/protocol/current/data.js.map +1 -1
- package/out/zero-cache/src/services/change-source/protocol/current/downstream.d.ts +6 -3
- package/out/zero-cache/src/services/change-source/protocol/current/downstream.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/protocol/current/schema-change-tags.d.ts +6 -0
- package/out/zero-cache/src/services/change-source/protocol/current/schema-change-tags.d.ts.map +1 -0
- package/out/zero-cache/src/services/change-source/protocol/current/schema-change-tags.js +21 -0
- package/out/zero-cache/src/services/change-source/protocol/current/schema-change-tags.js.map +1 -0
- package/out/zero-cache/src/services/change-source/protocol/current/status.d.ts +1 -0
- package/out/zero-cache/src/services/change-source/protocol/current/status.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/protocol/current/upstream.d.ts +1 -0
- package/out/zero-cache/src/services/change-source/protocol/current/upstream.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/backup-cleanup-monitor-factory.d.ts +5 -6
- package/out/zero-cache/src/services/change-streamer/backup-cleanup-monitor-factory.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/backup-cleanup-monitor-factory.js +32 -9
- package/out/zero-cache/src/services/change-streamer/backup-cleanup-monitor-factory.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/backup-monitor.d.ts +15 -5
- package/out/zero-cache/src/services/change-streamer/backup-monitor.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/backup-monitor.js +66 -0
- package/out/zero-cache/src/services/change-streamer/backup-monitor.js.map +1 -0
- package/out/zero-cache/src/services/change-streamer/broadcast.d.ts +68 -78
- package/out/zero-cache/src/services/change-streamer/broadcast.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/broadcast.js +84 -92
- package/out/zero-cache/src/services/change-streamer/broadcast.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/change-log-codec.d.ts +19 -0
- package/out/zero-cache/src/services/change-streamer/change-log-codec.d.ts.map +1 -0
- package/out/zero-cache/src/services/change-streamer/change-log-codec.js +50 -0
- package/out/zero-cache/src/services/change-streamer/change-log-codec.js.map +1 -0
- package/out/zero-cache/src/services/change-streamer/change-log-initializer.d.ts +141 -0
- package/out/zero-cache/src/services/change-streamer/change-log-initializer.d.ts.map +1 -0
- package/out/zero-cache/src/services/change-streamer/change-log-initializer.js +270 -0
- package/out/zero-cache/src/services/change-streamer/change-log-initializer.js.map +1 -0
- package/out/zero-cache/src/services/change-streamer/change-log-transaction-hash.d.ts +19 -0
- package/out/zero-cache/src/services/change-streamer/change-log-transaction-hash.d.ts.map +1 -0
- package/out/zero-cache/src/services/change-streamer/change-log-transaction-hash.js +39 -0
- package/out/zero-cache/src/services/change-streamer/change-log-transaction-hash.js.map +1 -0
- package/out/zero-cache/src/services/change-streamer/change-streamer-http.d.ts +3 -4
- package/out/zero-cache/src/services/change-streamer/change-streamer-http.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/change-streamer-http.js +12 -17
- package/out/zero-cache/src/services/change-streamer/change-streamer-http.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/change-streamer-service.d.ts +69 -24
- package/out/zero-cache/src/services/change-streamer/change-streamer-service.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/change-streamer-service.js +333 -66
- package/out/zero-cache/src/services/change-streamer/change-streamer-service.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/change-streamer.d.ts +56 -13
- package/out/zero-cache/src/services/change-streamer/change-streamer.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/change-streamer.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/error-type-enum.d.ts +8 -0
- package/out/zero-cache/src/services/change-streamer/error-type-enum.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/forwarder.d.ts +14 -3
- package/out/zero-cache/src/services/change-streamer/forwarder.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/forwarder.js +41 -11
- package/out/zero-cache/src/services/change-streamer/forwarder.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/{litestream3-backup-monitor.d.ts → litestream3-prometheus-poller.d.ts} +19 -45
- package/out/zero-cache/src/services/change-streamer/litestream3-prometheus-poller.d.ts.map +1 -0
- package/out/zero-cache/src/services/change-streamer/{litestream3-backup-monitor.js → litestream3-prometheus-poller.js} +57 -171
- package/out/zero-cache/src/services/change-streamer/litestream3-prometheus-poller.js.map +1 -0
- package/out/zero-cache/src/services/change-streamer/replica-poller.d.ts +15 -0
- package/out/zero-cache/src/services/change-streamer/replica-poller.d.ts.map +1 -0
- package/out/zero-cache/src/services/change-streamer/replica-poller.js +55 -0
- package/out/zero-cache/src/services/change-streamer/replica-poller.js.map +1 -0
- package/out/zero-cache/src/services/change-streamer/schema/tables.d.ts +5 -1
- package/out/zero-cache/src/services/change-streamer/schema/tables.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/schema/tables.js +2 -1
- package/out/zero-cache/src/services/change-streamer/schema/tables.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/snapshot-reservations.d.ts +14 -0
- package/out/zero-cache/src/services/change-streamer/snapshot-reservations.d.ts.map +1 -0
- package/out/zero-cache/src/services/change-streamer/snapshot-reservations.js +86 -0
- package/out/zero-cache/src/services/change-streamer/snapshot-reservations.js.map +1 -0
- package/out/zero-cache/src/services/change-streamer/snapshot.d.ts +4 -1
- package/out/zero-cache/src/services/change-streamer/snapshot.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/snapshot.js +39 -14
- package/out/zero-cache/src/services/change-streamer/snapshot.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-catchup.d.ts +75 -0
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-catchup.d.ts.map +1 -0
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-catchup.js +261 -0
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-catchup.js.map +1 -0
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-purge-scheduler.d.ts +121 -0
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-purge-scheduler.d.ts.map +1 -0
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-purge-scheduler.js +391 -0
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-purge-scheduler.js.map +1 -0
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-reader.d.ts +62 -0
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-reader.d.ts.map +1 -0
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-reader.js +159 -0
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-reader.js.map +1 -0
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-writer.d.ts +109 -0
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-writer.d.ts.map +1 -0
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-writer.js +258 -0
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-writer.js.map +1 -0
- package/out/zero-cache/src/services/change-streamer/storer.d.ts +28 -12
- package/out/zero-cache/src/services/change-streamer/storer.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/storer.js +116 -121
- package/out/zero-cache/src/services/change-streamer/storer.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/subscriber.d.ts +61 -10
- package/out/zero-cache/src/services/change-streamer/subscriber.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/subscriber.js +101 -8
- package/out/zero-cache/src/services/change-streamer/subscriber.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/upstream-acker.d.ts +34 -0
- package/out/zero-cache/src/services/change-streamer/upstream-acker.d.ts.map +1 -0
- package/out/zero-cache/src/services/change-streamer/upstream-acker.js +86 -0
- package/out/zero-cache/src/services/change-streamer/upstream-acker.js.map +1 -0
- package/out/zero-cache/src/services/life-cycle.d.ts +1 -1
- package/out/zero-cache/src/services/life-cycle.d.ts.map +1 -1
- package/out/zero-cache/src/services/life-cycle.js +4 -3
- package/out/zero-cache/src/services/life-cycle.js.map +1 -1
- package/out/zero-cache/src/services/litestream/commands.d.ts +12 -11
- package/out/zero-cache/src/services/litestream/commands.d.ts.map +1 -1
- package/out/zero-cache/src/services/litestream/commands.js +107 -148
- package/out/zero-cache/src/services/litestream/commands.js.map +1 -1
- package/out/zero-cache/src/services/litestream/config-v5.yml +42 -0
- package/out/zero-cache/src/services/litestream/config.yml +3 -2
- package/out/zero-cache/src/services/litestream/metrics.d.ts +4 -4
- package/out/zero-cache/src/services/litestream/metrics.d.ts.map +1 -1
- package/out/zero-cache/src/services/litestream/metrics.js +7 -10
- package/out/zero-cache/src/services/litestream/metrics.js.map +1 -1
- package/out/zero-cache/src/services/litestream/vfs-watermark-poller.d.ts +57 -0
- package/out/zero-cache/src/services/litestream/vfs-watermark-poller.d.ts.map +1 -0
- package/out/zero-cache/src/services/litestream/vfs-watermark-poller.js +137 -0
- package/out/zero-cache/src/services/litestream/vfs-watermark-poller.js.map +1 -0
- package/out/zero-cache/src/services/mutagen/mutagen.d.ts.map +1 -1
- package/out/zero-cache/src/services/mutagen/mutagen.js +4 -1
- package/out/zero-cache/src/services/mutagen/mutagen.js.map +1 -1
- package/out/zero-cache/src/services/replicator/change-log-cookies.d.ts +169 -0
- package/out/zero-cache/src/services/replicator/change-log-cookies.d.ts.map +1 -0
- package/out/zero-cache/src/services/replicator/change-log-cookies.js +434 -0
- package/out/zero-cache/src/services/replicator/change-log-cookies.js.map +1 -0
- package/out/zero-cache/src/services/replicator/change-log-db.d.ts +358 -0
- package/out/zero-cache/src/services/replicator/change-log-db.d.ts.map +1 -0
- package/out/zero-cache/src/services/replicator/change-log-db.js +477 -0
- package/out/zero-cache/src/services/replicator/change-log-db.js.map +1 -0
- package/out/zero-cache/src/services/replicator/change-log-stream-writer.d.ts +55 -0
- package/out/zero-cache/src/services/replicator/change-log-stream-writer.d.ts.map +1 -0
- package/out/zero-cache/src/services/replicator/change-log-stream-writer.js +150 -0
- package/out/zero-cache/src/services/replicator/change-log-stream-writer.js.map +1 -0
- package/out/zero-cache/src/services/replicator/change-processor.d.ts +6 -0
- package/out/zero-cache/src/services/replicator/change-processor.d.ts.map +1 -1
- package/out/zero-cache/src/services/replicator/change-processor.js +70 -25
- package/out/zero-cache/src/services/replicator/change-processor.js.map +1 -1
- package/out/zero-cache/src/services/replicator/incremental-sync.d.ts +1 -1
- package/out/zero-cache/src/services/replicator/incremental-sync.d.ts.map +1 -1
- package/out/zero-cache/src/services/replicator/incremental-sync.js +19 -6
- package/out/zero-cache/src/services/replicator/incremental-sync.js.map +1 -1
- package/out/zero-cache/src/services/replicator/notifier.d.ts +0 -22
- package/out/zero-cache/src/services/replicator/notifier.d.ts.map +1 -1
- package/out/zero-cache/src/services/replicator/notifier.js +7 -1
- package/out/zero-cache/src/services/replicator/notifier.js.map +1 -1
- package/out/zero-cache/src/services/replicator/replicator.d.ts +17 -2
- package/out/zero-cache/src/services/replicator/replicator.d.ts.map +1 -1
- package/out/zero-cache/src/services/replicator/replicator.js +9 -3
- package/out/zero-cache/src/services/replicator/replicator.js.map +1 -1
- package/out/zero-cache/src/services/replicator/reporter/recorder.d.ts +27 -0
- package/out/zero-cache/src/services/replicator/reporter/recorder.d.ts.map +1 -1
- package/out/zero-cache/src/services/replicator/reporter/recorder.js +32 -0
- package/out/zero-cache/src/services/replicator/reporter/recorder.js.map +1 -1
- package/out/zero-cache/src/services/replicator/reporter/report-schema.d.ts +1 -1
- package/out/zero-cache/src/services/replicator/schema/backfilling.d.ts +119 -0
- package/out/zero-cache/src/services/replicator/schema/backfilling.d.ts.map +1 -0
- package/out/zero-cache/src/services/replicator/schema/backfilling.js +214 -0
- package/out/zero-cache/src/services/replicator/schema/backfilling.js.map +1 -0
- package/out/zero-cache/src/services/replicator/schema/change-log.d.ts +3 -3
- package/out/zero-cache/src/services/replicator/schema/column-metadata.js +1 -1
- package/out/zero-cache/src/services/replicator/schema/column-metadata.js.map +1 -1
- package/out/zero-cache/src/services/replicator/schema/replication-state.d.ts +1 -1
- package/out/zero-cache/src/services/replicator/schema/replication-state.d.ts.map +1 -1
- package/out/zero-cache/src/services/replicator/schema/replication-state.js +9 -5
- package/out/zero-cache/src/services/replicator/schema/replication-state.js.map +1 -1
- package/out/zero-cache/src/services/replicator/sqlite-change-log-observability.d.ts +131 -0
- package/out/zero-cache/src/services/replicator/sqlite-change-log-observability.d.ts.map +1 -0
- package/out/zero-cache/src/services/replicator/sqlite-change-log-observability.js +413 -0
- package/out/zero-cache/src/services/replicator/sqlite-change-log-observability.js.map +1 -0
- package/out/zero-cache/src/services/replicator/sqlite-change-log-purger.d.ts +120 -0
- package/out/zero-cache/src/services/replicator/sqlite-change-log-purger.d.ts.map +1 -0
- package/out/zero-cache/src/services/replicator/sqlite-change-log-purger.js +283 -0
- package/out/zero-cache/src/services/replicator/sqlite-change-log-purger.js.map +1 -0
- package/out/zero-cache/src/services/replicator/write-worker.js +23 -12
- package/out/zero-cache/src/services/replicator/write-worker.js.map +1 -1
- package/out/zero-cache/src/services/run-ast.d.ts.map +1 -1
- package/out/zero-cache/src/services/run-ast.js +2 -1
- package/out/zero-cache/src/services/run-ast.js.map +1 -1
- package/out/zero-cache/src/services/running-state.d.ts +1 -1
- package/out/zero-cache/src/services/running-state.d.ts.map +1 -1
- package/out/zero-cache/src/services/running-state.js +1 -0
- package/out/zero-cache/src/services/running-state.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/e2e-serving-lag.d.ts +53 -0
- package/out/zero-cache/src/services/view-syncer/e2e-serving-lag.d.ts.map +1 -0
- package/out/zero-cache/src/services/view-syncer/e2e-serving-lag.js +68 -0
- package/out/zero-cache/src/services/view-syncer/e2e-serving-lag.js.map +1 -0
- package/out/zero-cache/src/services/view-syncer/pipeline-driver.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/pipeline-driver.js +18 -3
- package/out/zero-cache/src/services/view-syncer/pipeline-driver.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/snapshotter.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/snapshotter.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/view-syncer.d.ts +11 -1
- package/out/zero-cache/src/services/view-syncer/view-syncer.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/view-syncer.js +64 -6
- package/out/zero-cache/src/services/view-syncer/view-syncer.js.map +1 -1
- package/out/zero-cache/src/types/processes.d.ts +1 -2
- package/out/zero-cache/src/types/processes.d.ts.map +1 -1
- package/out/zero-cache/src/types/processes.js +1 -25
- package/out/zero-cache/src/types/processes.js.map +1 -1
- package/out/zero-cache/src/types/streams.d.ts +21 -0
- package/out/zero-cache/src/types/streams.d.ts.map +1 -1
- package/out/zero-cache/src/types/streams.js +25 -4
- package/out/zero-cache/src/types/streams.js.map +1 -1
- package/out/zero-cache/src/types/subscription.d.ts +11 -0
- package/out/zero-cache/src/types/subscription.d.ts.map +1 -1
- package/out/zero-cache/src/types/subscription.js +27 -0
- package/out/zero-cache/src/types/subscription.js.map +1 -1
- package/out/zero-cache/src/workers/connection.d.ts +1 -0
- package/out/zero-cache/src/workers/connection.d.ts.map +1 -1
- package/out/zero-cache/src/workers/connection.js +24 -2
- package/out/zero-cache/src/workers/connection.js.map +1 -1
- package/out/zero-cache/src/workers/replicator.d.ts +25 -0
- package/out/zero-cache/src/workers/replicator.d.ts.map +1 -1
- package/out/zero-cache/src/workers/replicator.js +33 -1
- package/out/zero-cache/src/workers/replicator.js.map +1 -1
- package/out/zero-cache/src/workers/syncer.d.ts +12 -0
- package/out/zero-cache/src/workers/syncer.d.ts.map +1 -1
- package/out/zero-cache/src/workers/syncer.js +75 -0
- package/out/zero-cache/src/workers/syncer.js.map +1 -1
- package/out/zero-client/src/client/version.js +1 -1
- package/out/zero-client/src/client/zero.d.ts +6 -7
- package/out/zero-client/src/client/zero.d.ts.map +1 -1
- package/out/zero-client/src/client/zero.js +156 -101
- package/out/zero-client/src/client/zero.js.map +1 -1
- package/out/zero-schema/src/builder/table-builder.d.ts +23 -0
- package/out/zero-schema/src/builder/table-builder.d.ts.map +1 -1
- package/out/zero-schema/src/builder/table-builder.js +18 -0
- package/out/zero-schema/src/builder/table-builder.js.map +1 -1
- package/out/zero-server/src/custom.js +10 -3
- package/out/zero-server/src/custom.js.map +1 -1
- package/out/zero-server/src/schema.d.ts +8 -0
- package/out/zero-server/src/schema.d.ts.map +1 -1
- package/out/zero-server/src/schema.js +63 -24
- package/out/zero-server/src/schema.js.map +1 -1
- package/out/zero-types/src/schema.d.ts +11 -0
- package/out/zero-types/src/schema.d.ts.map +1 -1
- package/out/zql/src/mutate/crud.d.ts +10 -8
- package/out/zql/src/mutate/crud.d.ts.map +1 -1
- package/out/zql/src/mutate/crud.js.map +1 -1
- package/out/zql/src/query/query-delegate-base.d.ts.map +1 -1
- package/out/zql/src/query/query-delegate-base.js +5 -1
- package/out/zql/src/query/query-delegate-base.js.map +1 -1
- package/out/zql/src/query/query-impl.d.ts +2 -2
- package/out/zql/src/query/query-impl.d.ts.map +1 -1
- package/out/zql/src/query/query-impl.js.map +1 -1
- package/out/zql/src/query/query.d.ts +83 -14
- package/out/zql/src/query/query.d.ts.map +1 -1
- package/out/zql/src/query/static-query.d.ts +1 -1
- package/out/zql/src/query/static-query.d.ts.map +1 -1
- package/out/zqlite/src/db.js +2 -2
- package/out/zqlite/src/resolve-scalar-subqueries.d.ts +15 -0
- package/out/zqlite/src/resolve-scalar-subqueries.d.ts.map +1 -1
- package/out/zqlite/src/resolve-scalar-subqueries.js +33 -14
- package/out/zqlite/src/resolve-scalar-subqueries.js.map +1 -1
- package/out/zqlite/src/sqlite-cost-model.js +5 -5
- package/out/zqlite/src/table-source.js +3 -3
- package/package.json +3 -3
- package/out/replicache/src/db/index.js +0 -91
- package/out/replicache/src/db/index.js.map +0 -1
- package/out/replicache/src/lazy.d.ts +0 -2
- package/out/replicache/src/lazy.d.ts.map +0 -1
- package/out/replicache/src/lazy.js +0 -12
- package/out/replicache/src/lazy.js.map +0 -1
- package/out/zero-cache/src/server/backup-watermark-reader.js +0 -35
- package/out/zero-cache/src/server/backup-watermark-reader.js.map +0 -1
- package/out/zero-cache/src/services/change-streamer/litestream3-backup-monitor.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/litestream3-backup-monitor.js.map +0 -1
- package/out/zero-cache/src/services/change-streamer/replica-monitor.d.ts +0 -16
- package/out/zero-cache/src/services/change-streamer/replica-monitor.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/replica-monitor.js +0 -54
- package/out/zero-cache/src/services/change-streamer/replica-monitor.js.map +0 -1
- package/out/zero-cache/src/services/change-streamer/vfs-backup-monitor.d.ts +0 -25
- package/out/zero-cache/src/services/change-streamer/vfs-backup-monitor.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/vfs-backup-monitor.js +0 -159
- package/out/zero-cache/src/services/change-streamer/vfs-backup-monitor.js.map +0 -1
- package/out/zero-cache/src/services/litestream/vfs-watermark-reader.d.ts +0 -44
- package/out/zero-cache/src/services/litestream/vfs-watermark-reader.d.ts.map +0 -1
- package/out/zero-cache/src/services/litestream/vfs-watermark-reader.js +0 -65
- package/out/zero-cache/src/services/litestream/vfs-watermark-reader.js.map +0 -1
- package/out/zero-cache/src/services/litestream/vfs-watermark-worker-source.d.ts +0 -11
- package/out/zero-cache/src/services/litestream/vfs-watermark-worker-source.d.ts.map +0 -1
- package/out/zero-cache/src/services/litestream/vfs-watermark-worker-source.js +0 -74
- package/out/zero-cache/src/services/litestream/vfs-watermark-worker-source.js.map +0 -1
- package/out/zero-cache/src/services/litestream/vfs-watermark-worker.d.ts +0 -42
- package/out/zero-cache/src/services/litestream/vfs-watermark-worker.d.ts.map +0 -1
- package/out/zero-cache/src/services/litestream/vfs-watermark-worker.js +0 -117
- package/out/zero-cache/src/services/litestream/vfs-watermark-worker.js.map +0 -1
|
@@ -125,9 +125,8 @@ export declare class Zero<const S extends BaseDefaultSchema = DefaultSchema, MD
|
|
|
125
125
|
/**
|
|
126
126
|
* Executes a query once and returns the results.
|
|
127
127
|
*
|
|
128
|
-
* By default,
|
|
129
|
-
*
|
|
130
|
-
* run immediately with whatever data is available locally.
|
|
128
|
+
* By default, runs immediately with whatever data is available locally.
|
|
129
|
+
* Use `{type: 'complete'}` to wait for fresh results from the server.
|
|
131
130
|
*
|
|
132
131
|
* @param query - The query to execute
|
|
133
132
|
* @param runOptions - Options controlling query execution
|
|
@@ -135,11 +134,11 @@ export declare class Zero<const S extends BaseDefaultSchema = DefaultSchema, MD
|
|
|
135
134
|
*
|
|
136
135
|
* @example
|
|
137
136
|
* ```ts
|
|
138
|
-
* //
|
|
137
|
+
* // Run with local data only
|
|
139
138
|
* const users = await zero.run(userQuery);
|
|
140
139
|
*
|
|
141
|
-
* //
|
|
142
|
-
* const
|
|
140
|
+
* // Wait for server sync
|
|
141
|
+
* const freshUsers = await zero.run(userQuery, {type: 'complete'});
|
|
143
142
|
* ```
|
|
144
143
|
*/
|
|
145
144
|
run<TTable extends keyof S['tables'] & string, TInput extends ReadonlyJSONValue | undefined, TOutput extends ReadonlyJSONValue | undefined, TReturn>(query: QueryOrQueryRequest<TTable, TInput, TOutput, S, TReturn, C>, runOptions?: RunOptions): Promise<HumanReadable<TReturn>>;
|
|
@@ -322,7 +321,7 @@ export declare class OnlineManager extends Subscribable<boolean> {
|
|
|
322
321
|
setOnline(online: boolean): void;
|
|
323
322
|
get online(): boolean;
|
|
324
323
|
}
|
|
325
|
-
export declare function createSocket(rep: ReplicacheImpl, queryManager: QueryManager, deleteClientsManager: DeleteClientsManager, socketOrigin: WSString, baseCookie: NullableVersion, clientID: string, clientGroupID: string, clientSchema: ClientSchema, userID: string | undefined, auth: string | undefined, lmid: number, wsid: string, debugPerf: boolean, lc: LogContext, userPushURL: string | undefined, userPushHeaders: Record<string, string> | undefined, userQueryURL: string | undefined, userQueryHeaders: Record<string, string> | undefined, additionalConnectParams: Record<string, string> | undefined, activeClientsManager: Pick<ActiveClientsManager, 'activeClients'>, maxHeaderLength?: number): Promise<[
|
|
324
|
+
export declare function createSocket(rep: ReplicacheImpl, queryManager: QueryManager, deleteClientsManager: DeleteClientsManager, socketOrigin: WSString, baseCookie: NullableVersion, clientID: string, clientGroupID: string, clientSchema: ClientSchema, userID: string | undefined, auth: string | undefined, lmid: number, wsid: string, debugPerf: boolean, lc: LogContext, userPushURL: string | undefined, userPushHeaders: Record<string, string> | undefined, userQueryURL: string | undefined, userQueryHeaders: Record<string, string> | undefined, additionalConnectParams: Record<string, string> | undefined, activeClientsManager: Pick<ActiveClientsManager, 'activeClients'>, maxHeaderLength?: number, onEvent?: (event: string) => void): Promise<[
|
|
326
325
|
WebSocket,
|
|
327
326
|
Map<string, UpQueriesPatchOp> | undefined,
|
|
328
327
|
DeleteClientsBody | undefined
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zero.d.ts","sourceRoot":"","sources":["../../../../../zero-client/src/client/zero.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAA8B,MAAM,kBAAkB,CAAC;AACzE,OAAO,EAAC,KAAK,QAAQ,EAAW,MAAM,oBAAoB,CAAC;AAG3D,OAAO,EACL,cAAc,EAEf,MAAM,iCAAiC,CAAC;AAGzC,OAAO,KAAK,EAAC,MAAM,EAAe,MAAM,mCAAmC,CAAC;AAC5E,OAAO,KAAK,EAAC,MAAM,EAAe,MAAM,mCAAmC,CAAC;AAE5E,OAAO,KAAK,EACV,aAAa,EACb,QAAQ,EACT,MAAM,qCAAqC,CAAC;AAG7C,OAAO,KAAK,EACV,WAAW,EAEZ,MAAM,kCAAkC,CAAC;AAU1C,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,6BAA6B,CAAC;AAMnE,OAAO,EAAC,YAAY,EAAC,MAAM,qCAAqC,CAAC;AAIjE,OAAO,EAAC,KAAK,YAAY,EAAC,MAAM,6CAA6C,CAAC;AAG9E,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,8CAA8C,CAAC;AA8BpF,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,6CAA6C,CAAC;AAElF,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,uCAAuC,CAAC;AAO3E,OAAO,KAAK,EACV,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,aAAa,EACd,MAAM,0CAA0C,CAAC;AAClD,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,mCAAmC,CAAC;AAC9D,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,8BAA8B,CAAC;AAK9D,OAAO,KAAK,EAEV,aAAa,EACd,MAAM,oCAAoC,CAAC;AAO5C,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,0CAA0C,CAAC;AAC5E,OAAO,EACL,KAAK,mBAAmB,EAEzB,MAAM,0CAA0C,CAAC;AAClD,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,UAAU,EAChB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAC,sBAAsB,EAAC,MAAM,wCAAwC,CAAC;AACnF,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,sCAAsC,CAAC;AAGpE,OAAO,EAAC,oBAAoB,EAAC,MAAM,6BAA6B,CAAC;AAEjE,OAAO,EACL,iBAAiB,EAGlB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAC,KAAK,UAAU,EAAiB,MAAM,iBAAiB,CAAC;AAEhE,OAAO,EACL,KAAK,YAAY,EAIlB,MAAM,WAAW,CAAC;AACnB,OAAO,KAAK,EAAC,iBAAiB,EAAE,aAAa,EAAC,MAAM,aAAa,CAAC;AAClE,OAAO,EAAC,oBAAoB,EAAC,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"zero.d.ts","sourceRoot":"","sources":["../../../../../zero-client/src/client/zero.ts"],"names":[],"mappings":"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"}
|
|
@@ -37,7 +37,7 @@ import { isClientMetric } from "../../../zql/src/query/metrics-delegate.js";
|
|
|
37
37
|
import { nanoid } from "../util/nanoid.js";
|
|
38
38
|
import { ActiveClientsManager } from "./active-clients-manager.js";
|
|
39
39
|
import { AbruptClose, CleanClose, ClientClosed, ConnectTimeout, Hidden, Internal, InvalidMessage as InvalidMessage$1, NoSocketOrigin, PingTimeout, PullTimeout, UnexpectedBaseCookie } from "./client-error-kind-enum.js";
|
|
40
|
-
import { ClientError, NO_STATUS_TRANSITION, getBackoffParams, getErrorConnectionTransition, isAuthError, isClientError, isServerError } from "./error.js";
|
|
40
|
+
import { ClientError, NO_STATUS_TRANSITION, getBackoffParams, getErrorConnectionTransition, isAuthError, isClientError, isServerError, isZeroError } from "./error.js";
|
|
41
41
|
import { ConnectionManager, throwIfConnectionError } from "./connection-manager.js";
|
|
42
42
|
import { ConnectionImpl } from "./connection.js";
|
|
43
43
|
import { IVMSourceBranch } from "./ivm-branch.js";
|
|
@@ -61,6 +61,11 @@ import { PokeHandler } from "./zero-poke-handler.js";
|
|
|
61
61
|
import { ZeroRep, fromReplicacheAuthToken, toReplicacheAuthToken } from "./zero-rep.js";
|
|
62
62
|
import { resolver } from "@rocicorp/resolver";
|
|
63
63
|
import { LogContext } from "@rocicorp/logger";
|
|
64
|
+
function connectionReadyResolver() {
|
|
65
|
+
const ready = resolver();
|
|
66
|
+
ready.promise.catch(() => {});
|
|
67
|
+
return ready;
|
|
68
|
+
}
|
|
64
69
|
var RUN_LOOP_INTERVAL_MS = 5e3;
|
|
65
70
|
/**
|
|
66
71
|
* Default timeout for ping operations. Controls both:
|
|
@@ -85,10 +90,6 @@ var DEFAULT_DISCONNECT_TIMEOUT_MS = 60 * 1e3;
|
|
|
85
90
|
*/
|
|
86
91
|
var CONNECT_TIMEOUT_MS = 1e4;
|
|
87
92
|
var CHECK_CONNECTIVITY_ON_ERROR_FREQUENCY = 6;
|
|
88
|
-
var NULL_LAST_MUTATION_ID_SENT = {
|
|
89
|
-
clientID: "",
|
|
90
|
-
id: -1
|
|
91
|
-
};
|
|
92
93
|
var DEFAULT_QUERY_CHANGE_THROTTLE_MS = 10;
|
|
93
94
|
function convertOnUpdateNeededReason(reason) {
|
|
94
95
|
return { type: reason.type };
|
|
@@ -150,7 +151,30 @@ var Zero = class Zero {
|
|
|
150
151
|
* established.
|
|
151
152
|
*/
|
|
152
153
|
#deletedClients;
|
|
153
|
-
|
|
154
|
+
/**
|
|
155
|
+
* The highest mutation ID we have sent on the current connection, for each
|
|
156
|
+
* client in our client group.
|
|
157
|
+
*
|
|
158
|
+
* The mutations we push are the client group's local commit chain, so they
|
|
159
|
+
* include mutations made by every tab in the group, not just this one. The
|
|
160
|
+
* order of that chain changes from one push to the next: when we persist our
|
|
161
|
+
* own mutations they move to the end of the chain, behind whatever the other
|
|
162
|
+
* tabs persisted in the meantime. So a mutation from another tab can end up
|
|
163
|
+
* in front of one we already sent, which means we cannot decide what to send
|
|
164
|
+
* next by remembering a single position in the chain. Remembering the last ID
|
|
165
|
+
* we sent for each client works no matter how the chain is ordered: we never
|
|
166
|
+
* skip a mutation, and we never leave a hole in a client's run of mutation
|
|
167
|
+
* IDs (the server rejects a hole as an invalid push).
|
|
168
|
+
*
|
|
169
|
+
* Cleared whenever the connection is established or torn down. The server
|
|
170
|
+
* does remember what it has processed, in a last mutation ID per client, and
|
|
171
|
+
* it ignores anything it has already applied. But we don't know which of our
|
|
172
|
+
* sends actually made it across before the socket died, so we start over and
|
|
173
|
+
* let the server drop the duplicates. The only mutations we don't resend are
|
|
174
|
+
* the ones the server has acknowledged in a poke, because those have already
|
|
175
|
+
* been rebased out of the commit chain.
|
|
176
|
+
*/
|
|
177
|
+
#lastMutationIDsSent = /* @__PURE__ */ new Map();
|
|
154
178
|
#onPong = () => void 0;
|
|
155
179
|
#onlineManager;
|
|
156
180
|
#onUpdateNeeded;
|
|
@@ -178,12 +202,8 @@ var Zero = class Zero {
|
|
|
178
202
|
#lastMutationIDReceived = 0;
|
|
179
203
|
#socket = void 0;
|
|
180
204
|
#socketResolver = resolver();
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
* It rejects if we hit an error or timeout before the connected message.
|
|
184
|
-
* Used by push/pull helpers to queue work until the connection is usable.
|
|
185
|
-
*/
|
|
186
|
-
#connectResolver = resolver();
|
|
205
|
+
#connectionReadyResolver = connectionReadyResolver();
|
|
206
|
+
#currentConnectAttempt;
|
|
187
207
|
#closeAbortController = new AbortController();
|
|
188
208
|
#visibilityWatcher;
|
|
189
209
|
#connectionManager;
|
|
@@ -427,9 +447,8 @@ var Zero = class Zero {
|
|
|
427
447
|
/**
|
|
428
448
|
* Executes a query once and returns the results.
|
|
429
449
|
*
|
|
430
|
-
* By default,
|
|
431
|
-
*
|
|
432
|
-
* run immediately with whatever data is available locally.
|
|
450
|
+
* By default, runs immediately with whatever data is available locally.
|
|
451
|
+
* Use `{type: 'complete'}` to wait for fresh results from the server.
|
|
433
452
|
*
|
|
434
453
|
* @param query - The query to execute
|
|
435
454
|
* @param runOptions - Options controlling query execution
|
|
@@ -437,11 +456,11 @@ var Zero = class Zero {
|
|
|
437
456
|
*
|
|
438
457
|
* @example
|
|
439
458
|
* ```ts
|
|
440
|
-
* //
|
|
459
|
+
* // Run with local data only
|
|
441
460
|
* const users = await zero.run(userQuery);
|
|
442
461
|
*
|
|
443
|
-
* //
|
|
444
|
-
* const
|
|
462
|
+
* // Wait for server sync
|
|
463
|
+
* const freshUsers = await zero.run(userQuery, {type: 'complete'});
|
|
445
464
|
* ```
|
|
446
465
|
*/
|
|
447
466
|
run(query, runOptions) {
|
|
@@ -713,7 +732,6 @@ var Zero = class Zero {
|
|
|
713
732
|
kind: InvalidMessage$1,
|
|
714
733
|
message: "A WebSocket message exceeded the server message size limit. This is usually caused by a mutation's args containing a large value such as a base64-encoded image. Consider uploading large files to object storage and storing only the URL in Zero." + (this.#recentSentMessages.length > 0 ? "\nRecent sent messages:\n" + JSON.stringify(this.#recentSentMessages, null, 2) : "")
|
|
715
734
|
});
|
|
716
|
-
this.#connectResolver.reject(messageTooLargeError);
|
|
717
735
|
this.#disconnect(lc, messageTooLargeError);
|
|
718
736
|
await this.#rep.disableClientGroup();
|
|
719
737
|
this.#onClientStateNotFound(InvalidMessage, messageTooLargeError.message);
|
|
@@ -725,7 +743,6 @@ var Zero = class Zero {
|
|
|
725
743
|
kind: AbruptClose,
|
|
726
744
|
message: "WebSocket connection closed abruptly"
|
|
727
745
|
});
|
|
728
|
-
this.#connectResolver.reject(closeError);
|
|
729
746
|
this.#disconnect(lc, closeError);
|
|
730
747
|
}
|
|
731
748
|
} catch (e) {
|
|
@@ -734,22 +751,19 @@ var Zero = class Zero {
|
|
|
734
751
|
kind: Internal,
|
|
735
752
|
message: getErrorMessage(e)
|
|
736
753
|
}, { cause: e });
|
|
737
|
-
this.#connectResolver.reject(internalError);
|
|
738
754
|
this.#disconnect(lc, internalError);
|
|
739
755
|
}
|
|
740
756
|
};
|
|
741
757
|
async #handleErrorMessage(lc, downMessage) {
|
|
742
758
|
const [, { kind, message }] = downMessage;
|
|
743
759
|
if (kind === "MutationRateLimited") {
|
|
744
|
-
this.#
|
|
760
|
+
this.#lastMutationIDsSent.clear();
|
|
745
761
|
lc.error?.(kind, "Mutation rate limited", { message });
|
|
746
762
|
return;
|
|
747
763
|
}
|
|
748
764
|
lc.info?.(`${kind}: ${message}}`);
|
|
749
765
|
const error = new ProtocolError(downMessage[1]);
|
|
750
766
|
lc.error?.(`${error.kind}:\n\n${error.errorBody.message}`, error);
|
|
751
|
-
lc.debug?.("Rejecting connect resolver due to error", error);
|
|
752
|
-
this.#connectResolver.reject(error);
|
|
753
767
|
this.#disconnect(lc, error);
|
|
754
768
|
if (kind === "VersionNotSupported") this.#onUpdateNeeded({
|
|
755
769
|
type: kind,
|
|
@@ -770,9 +784,11 @@ var Zero = class Zero {
|
|
|
770
784
|
}
|
|
771
785
|
}
|
|
772
786
|
async #handleConnectedMessage(lc, connectedMessage) {
|
|
787
|
+
const attempt = must(this.#currentConnectAttempt, "Connected message received without an active connection attempt");
|
|
773
788
|
const now = Date.now();
|
|
774
789
|
const [, connectBody] = connectedMessage;
|
|
775
790
|
lc = addWebSocketIDToLogContext(connectBody.wsid, lc);
|
|
791
|
+
this.#addConnectEvent(lc, attempt, "processing the server acknowledgement");
|
|
776
792
|
if (this.#connectedCount === 0) this.#checkConnectivity("firstConnect");
|
|
777
793
|
else if (this.#connectErrorCount > 0) this.#checkConnectivity("connectAfterError");
|
|
778
794
|
this.#connectedCount++;
|
|
@@ -804,7 +820,7 @@ var Zero = class Zero {
|
|
|
804
820
|
connectedCount: this.#connectedCount,
|
|
805
821
|
proceedingConnectErrorCount
|
|
806
822
|
});
|
|
807
|
-
this.#
|
|
823
|
+
this.#lastMutationIDsSent.clear();
|
|
808
824
|
lc.debug?.("Resolving connect resolver");
|
|
809
825
|
must(this.#socket);
|
|
810
826
|
const queriesPatch = await this.#rep.query((tx) => this.#queryManager.getQueriesPatch(tx, this.#initConnectionQueries));
|
|
@@ -838,29 +854,26 @@ var Zero = class Zero {
|
|
|
838
854
|
this.#initConnectionQueries = void 0;
|
|
839
855
|
maybeSendDeletedClients();
|
|
840
856
|
this.#connectionManager.connected();
|
|
841
|
-
|
|
857
|
+
attempt.connected.resolve();
|
|
842
858
|
}
|
|
843
859
|
/**
|
|
844
860
|
* Starts a new connection. This will create the WebSocket that does the HTTP
|
|
845
861
|
* request to the server.
|
|
846
862
|
*
|
|
847
|
-
* {@link #
|
|
863
|
+
* {@link #connectAttempt} will throw an assertion error if the
|
|
848
864
|
* {@link #connectionManager} status is not {@link ConnectionManagerState.Disconnected}
|
|
849
865
|
* or {@link ConnectionManagerState.Connecting}.
|
|
850
866
|
* Callers MUST check the connection status before calling this method and log
|
|
851
867
|
* an error as needed.
|
|
852
868
|
*
|
|
853
|
-
* The
|
|
854
|
-
*
|
|
855
|
-
* {@link ConnectedMessage}, you should await the {@link #connectResolver}
|
|
856
|
-
* promise. The {@link #connectResolver} promise rejects if an error message
|
|
857
|
-
* is received before the connected message is received or if the connection
|
|
858
|
-
* attempt times out.
|
|
869
|
+
* The returned promise resolves after receiving the {@link ConnectedMessage}
|
|
870
|
+
* and rejects if setup, the socket, or the connection handshake fails.
|
|
859
871
|
*/
|
|
860
|
-
async #
|
|
872
|
+
async #connectAttempt(lc, additionalConnectParams, attempt) {
|
|
861
873
|
if (this.closed) return;
|
|
862
874
|
assert(this.#server, "No server provided");
|
|
863
|
-
|
|
875
|
+
const socketOrigin = toWSString(this.#server);
|
|
876
|
+
assert(this.#connectionManager.is("disconnected") || this.#connectionManager.is("connecting"), "connectAttempt() called from invalid state: " + this.#connectionManager.state.name);
|
|
864
877
|
const wsid = nanoid();
|
|
865
878
|
lc = addWebSocketIDToLogContext(wsid, lc);
|
|
866
879
|
lc.info?.("Connecting...", { navigatorOnline: localNavigator?.onLine });
|
|
@@ -869,24 +882,24 @@ var Zero = class Zero {
|
|
|
869
882
|
const now = Date.now();
|
|
870
883
|
this.#connectStart = now;
|
|
871
884
|
if (this.#totalToConnectStart === void 0) this.#totalToConnectStart = now;
|
|
872
|
-
|
|
873
|
-
this.#
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
885
|
+
const { signal } = attempt.controller;
|
|
886
|
+
this.#addConnectEvent(lc, attempt, "reading the cookie");
|
|
887
|
+
const connectCookie = parse(await this.#rep.cookie, nullableVersionSchema, "passthrough");
|
|
888
|
+
this.#addConnectEvent(lc, attempt, "reading the client group ID");
|
|
889
|
+
const clientGroupID = await this.clientGroupID;
|
|
890
|
+
this.#addConnectEvent(lc, attempt, "initializing active clients");
|
|
891
|
+
const activeClientsManager = await this.#activeClientsManager;
|
|
892
|
+
if (signal.aborted) throw signal.reason;
|
|
893
|
+
const [ws, initConnectionQueries, deletedClients] = await createSocket(this.#rep, this.#queryManager, this.#deleteClientsManager, socketOrigin, connectCookie, this.clientID, clientGroupID, this.#clientSchema, this.userID, fromReplicacheAuthToken(this.#rep.auth), this.#lastMutationIDReceived, wsid, this.#options.logLevel === "debug", lc, this.#options.mutateURL, this.#options.mutateHeaders, this.#options.queryURL ?? this.#options.getQueriesURL, this.#options.queryHeaders, additionalConnectParams, activeClientsManager, this.#options.maxHeaderLength, (event) => this.#addConnectEvent(lc, attempt, event));
|
|
894
|
+
if (signal.aborted) {
|
|
895
|
+
ws.close();
|
|
896
|
+
throw signal.reason;
|
|
897
|
+
}
|
|
898
|
+
if (this.closed) {
|
|
899
|
+
ws.close();
|
|
900
|
+
return;
|
|
901
|
+
}
|
|
902
|
+
this.#connectCookie = connectCookie;
|
|
890
903
|
this.#initConnectionQueries = initConnectionQueries;
|
|
891
904
|
this.#deletedClients = deletedClients;
|
|
892
905
|
ws.addEventListener("message", this.#onMessage);
|
|
@@ -894,17 +907,19 @@ var Zero = class Zero {
|
|
|
894
907
|
ws.addEventListener("close", this.#onClose);
|
|
895
908
|
this.#socket = ws;
|
|
896
909
|
this.#socketResolver.resolve(ws);
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
910
|
+
this.#addConnectEvent(lc, attempt, "waiting for the server acknowledgement");
|
|
911
|
+
lc.debug?.("Waiting for connection to be acknowledged");
|
|
912
|
+
await attempt.connected.promise;
|
|
913
|
+
if (signal.aborted) throw signal.reason;
|
|
914
|
+
this.#mutationTracker.onConnected(this.#lastMutationIDReceived);
|
|
915
|
+
this.#rep.push().catch(() => {});
|
|
916
|
+
}
|
|
917
|
+
#addConnectEvent(lc, attempt, event) {
|
|
918
|
+
attempt.events.push([/* @__PURE__ */ new Date(), event]);
|
|
919
|
+
lc.debug?.("Connect event", event);
|
|
906
920
|
}
|
|
907
921
|
#disconnect(lc, reason, closeCode) {
|
|
922
|
+
this.#currentConnectAttempt?.controller.abort(reason);
|
|
908
923
|
if (shouldReportConnectError(reason)) {
|
|
909
924
|
this.#connectErrorCount++;
|
|
910
925
|
this.#metrics.lastConnectError.set(getLastConnectErrorValue(reason));
|
|
@@ -938,8 +953,6 @@ var Zero = class Zero {
|
|
|
938
953
|
default: unreachable(connectionStatus);
|
|
939
954
|
}
|
|
940
955
|
this.#socketResolver = resolver();
|
|
941
|
-
lc.debug?.("Creating new connect resolver");
|
|
942
|
-
this.#connectResolver = resolver();
|
|
943
956
|
this.#messageCount = 0;
|
|
944
957
|
this.#connectStart = void 0;
|
|
945
958
|
this.#connectedAt = 0;
|
|
@@ -948,7 +961,7 @@ var Zero = class Zero {
|
|
|
948
961
|
this.#socket?.removeEventListener("close", this.#onClose);
|
|
949
962
|
this.#socket?.close(closeCode);
|
|
950
963
|
this.#socket = void 0;
|
|
951
|
-
this.#
|
|
964
|
+
this.#lastMutationIDsSent.clear();
|
|
952
965
|
this.#pokeHandler.handleDisconnect();
|
|
953
966
|
this.#queryManager.clearGotQueriesAuthoritative();
|
|
954
967
|
const transition = getErrorConnectionTransition(reason);
|
|
@@ -1010,16 +1023,15 @@ var Zero = class Zero {
|
|
|
1010
1023
|
}
|
|
1011
1024
|
async #pusher(req, requestID) {
|
|
1012
1025
|
assert(req.pushVersion === 1, "Expected pushVersion 1");
|
|
1013
|
-
await this.#
|
|
1026
|
+
await this.#connectionReadyResolver.promise;
|
|
1014
1027
|
const lc = this.#lc.withContext("requestID", requestID);
|
|
1015
1028
|
lc.debug?.(`pushing ${req.mutations.length} mutations`);
|
|
1016
1029
|
assert(this.#socket, "Expected socket to be connected for push");
|
|
1017
1030
|
const isMutationRecoveryPush = req.clientGroupID !== await this.clientGroupID;
|
|
1018
|
-
const
|
|
1019
|
-
lc.debug?.(isMutationRecoveryPush ? "pushing for recovery" : "pushing",
|
|
1031
|
+
const toSend = isMutationRecoveryPush ? req.mutations : req.mutations.filter((m) => m.id > (this.#lastMutationIDsSent.get(m.clientID) ?? 0));
|
|
1032
|
+
lc.debug?.(isMutationRecoveryPush ? "pushing for recovery" : "pushing", toSend.length, "mutations of", req.mutations.length, "mutations.");
|
|
1020
1033
|
const now = Date.now();
|
|
1021
|
-
for (
|
|
1022
|
-
const m = req.mutations[i];
|
|
1034
|
+
for (const m of toSend) {
|
|
1023
1035
|
const timestamp = now - Math.round(performance.now() - m.timestamp);
|
|
1024
1036
|
const zeroM = m.name === "_zero_crud" ? {
|
|
1025
1037
|
type: CRUD,
|
|
@@ -1045,10 +1057,7 @@ var Zero = class Zero {
|
|
|
1045
1057
|
traceparent: this.#options.getTraceparent?.()
|
|
1046
1058
|
}];
|
|
1047
1059
|
this.#send(msg);
|
|
1048
|
-
if (!isMutationRecoveryPush) this.#
|
|
1049
|
-
clientID: m.clientID,
|
|
1050
|
-
id: m.id
|
|
1051
|
-
};
|
|
1060
|
+
if (!isMutationRecoveryPush) this.#lastMutationIDsSent.set(m.clientID, m.id);
|
|
1052
1061
|
}
|
|
1053
1062
|
return { httpRequestInfo: {
|
|
1054
1063
|
errorMessage: "",
|
|
@@ -1098,8 +1107,45 @@ var Zero = class Zero {
|
|
|
1098
1107
|
break;
|
|
1099
1108
|
}
|
|
1100
1109
|
if (reloadScheduled()) break;
|
|
1101
|
-
|
|
1102
|
-
|
|
1110
|
+
const ready = this.#connectionReadyResolver;
|
|
1111
|
+
assert(this.#currentConnectAttempt === void 0, "Connection attempt already active");
|
|
1112
|
+
const attempt = {
|
|
1113
|
+
controller: new AbortController(),
|
|
1114
|
+
connected: resolver(),
|
|
1115
|
+
events: []
|
|
1116
|
+
};
|
|
1117
|
+
this.#currentConnectAttempt = attempt;
|
|
1118
|
+
this.#addConnectEvent(lc, attempt, "starting the connection");
|
|
1119
|
+
const canceled = resolver();
|
|
1120
|
+
const abortHandler = () => canceled.reject(attempt.controller.signal.reason);
|
|
1121
|
+
attempt.controller.signal.addEventListener("abort", abortHandler, { once: true });
|
|
1122
|
+
const timeoutID = setTimeout(() => {
|
|
1123
|
+
lc.debug?.("Connection attempt timed out");
|
|
1124
|
+
this.#disconnect(lc, new ClientError({
|
|
1125
|
+
kind: ConnectTimeout,
|
|
1126
|
+
message: `Connection attempt timed out after ${CONNECT_TIMEOUT_MS / 1e3} seconds. Connect events: ${JSON.stringify(attempt.events)}`
|
|
1127
|
+
}));
|
|
1128
|
+
}, CONNECT_TIMEOUT_MS);
|
|
1129
|
+
try {
|
|
1130
|
+
try {
|
|
1131
|
+
await Promise.race([this.#connectAttempt(lc, additionalConnectParams, attempt), canceled.promise]);
|
|
1132
|
+
} catch (ex) {
|
|
1133
|
+
const error = isZeroError(ex) ? ex : new ClientError({
|
|
1134
|
+
kind: Internal,
|
|
1135
|
+
message: getErrorMessage(ex)
|
|
1136
|
+
}, { cause: ex });
|
|
1137
|
+
if (!attempt.controller.signal.aborted) this.#disconnect(lc, error);
|
|
1138
|
+
ready.reject(error);
|
|
1139
|
+
if (this.#connectionReadyResolver === ready) this.#connectionReadyResolver = connectionReadyResolver();
|
|
1140
|
+
throw error;
|
|
1141
|
+
}
|
|
1142
|
+
ready.resolve();
|
|
1143
|
+
additionalConnectParams = void 0;
|
|
1144
|
+
} finally {
|
|
1145
|
+
clearTimeout(timeoutID);
|
|
1146
|
+
attempt.controller.signal.removeEventListener("abort", abortHandler);
|
|
1147
|
+
if (this.#currentConnectAttempt === attempt) this.#currentConnectAttempt = void 0;
|
|
1148
|
+
}
|
|
1103
1149
|
throwIfConnectionError(this.#connectionManager.state);
|
|
1104
1150
|
assert(this.#socket, "Expected socket after reconnection");
|
|
1105
1151
|
lc = getLogContext();
|
|
@@ -1107,32 +1153,37 @@ var Zero = class Zero {
|
|
|
1107
1153
|
break;
|
|
1108
1154
|
}
|
|
1109
1155
|
case Connected: {
|
|
1156
|
+
const ready = this.#connectionReadyResolver;
|
|
1110
1157
|
const controller = new AbortController();
|
|
1111
1158
|
this.#abortPingTimeout = () => controller.abort();
|
|
1112
1159
|
const [pingTimeoutPromise, pingTimeoutAborted] = sleepWithAbort(this.pingTimeoutMs, controller.signal);
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
|
|
1160
|
+
try {
|
|
1161
|
+
const raceResult = await promiseRace({
|
|
1162
|
+
waitForPing: pingTimeoutPromise,
|
|
1163
|
+
waitForPingAborted: pingTimeoutAborted,
|
|
1164
|
+
tabHidden: this.#visibilityWatcher.waitForHidden(),
|
|
1165
|
+
stateChange: this.#connectionManager.waitForStateChange()
|
|
1166
|
+
});
|
|
1167
|
+
switch (raceResult.key) {
|
|
1168
|
+
case "waitForPing":
|
|
1169
|
+
await this.#ping(lc);
|
|
1170
|
+
break;
|
|
1171
|
+
case "waitForPingAborted": break;
|
|
1172
|
+
case "tabHidden": {
|
|
1173
|
+
const hiddenError = new ClientError({
|
|
1174
|
+
kind: Hidden,
|
|
1175
|
+
message: "Connection closed because tab was hidden"
|
|
1176
|
+
});
|
|
1177
|
+
this.#disconnect(lc, hiddenError);
|
|
1178
|
+
break;
|
|
1179
|
+
}
|
|
1180
|
+
case "stateChange":
|
|
1181
|
+
throwIfConnectionError(raceResult.result);
|
|
1182
|
+
break;
|
|
1183
|
+
default: unreachable(raceResult);
|
|
1131
1184
|
}
|
|
1132
|
-
|
|
1133
|
-
|
|
1134
|
-
break;
|
|
1135
|
-
default: unreachable(raceResult);
|
|
1185
|
+
} finally {
|
|
1186
|
+
if (!this.#connectionManager.is("connected") && this.#connectionReadyResolver === ready) this.#connectionReadyResolver = connectionReadyResolver();
|
|
1136
1187
|
}
|
|
1137
1188
|
break;
|
|
1138
1189
|
}
|
|
@@ -1213,7 +1264,7 @@ var Zero = class Zero {
|
|
|
1213
1264
|
errorMessage: "",
|
|
1214
1265
|
httpStatusCode: 200
|
|
1215
1266
|
} };
|
|
1216
|
-
await this.#
|
|
1267
|
+
await this.#connectionReadyResolver.promise;
|
|
1217
1268
|
assert(this.#socket, "Expected socket to be connected for mutation recovery pull");
|
|
1218
1269
|
lc.debug?.("Pull is for mutation recovery");
|
|
1219
1270
|
const cookie = parse(req.cookie, nullableVersionSchema, "passthrough");
|
|
@@ -1340,7 +1391,7 @@ var Zero = class Zero {
|
|
|
1340
1391
|
*/
|
|
1341
1392
|
get inspector() {
|
|
1342
1393
|
BUNDLE_SIZE: return this.#inspector ??= new Inspector(this.#rep, this.#queryManager, this.#zeroContext, async () => {
|
|
1343
|
-
await this.#
|
|
1394
|
+
await this.#connectionReadyResolver.promise;
|
|
1344
1395
|
return must(this.#socket);
|
|
1345
1396
|
});
|
|
1346
1397
|
}
|
|
@@ -1388,11 +1439,14 @@ var OnlineManager = class extends Subscribable {
|
|
|
1388
1439
|
return this.#online;
|
|
1389
1440
|
}
|
|
1390
1441
|
};
|
|
1391
|
-
async function createSocket(rep, queryManager, deleteClientsManager, socketOrigin, baseCookie, clientID, clientGroupID, clientSchema, userID, auth, lmid, wsid, debugPerf, lc, userPushURL, userPushHeaders, userQueryURL, userQueryHeaders, additionalConnectParams, activeClientsManager, maxHeaderLength = 1024 * 8) {
|
|
1442
|
+
async function createSocket(rep, queryManager, deleteClientsManager, socketOrigin, baseCookie, clientID, clientGroupID, clientSchema, userID, auth, lmid, wsid, debugPerf, lc, userPushURL, userPushHeaders, userQueryURL, userQueryHeaders, additionalConnectParams, activeClientsManager, maxHeaderLength = 1024 * 8, onEvent) {
|
|
1443
|
+
onEvent?.("reading the profile ID");
|
|
1392
1444
|
const url = await createConnectionURL(socketOrigin, clientID, clientGroupID, userID, baseCookie, lmid, wsid, rep, debugPerf, additionalConnectParams, lc);
|
|
1393
1445
|
const WS = mustGetBrowserGlobal("WebSocket");
|
|
1394
1446
|
const queriesPatchP = rep.query((tx) => queryManager.getQueriesPatch(tx));
|
|
1447
|
+
onEvent?.("reading deleted clients");
|
|
1395
1448
|
let deletedClients = convertDeletedClientsToBody(await deleteClientsManager.getDeletedClients(), clientGroupID);
|
|
1449
|
+
onEvent?.("reading desired queries");
|
|
1396
1450
|
let queriesPatch = await queriesPatchP;
|
|
1397
1451
|
const { activeClients } = activeClientsManager;
|
|
1398
1452
|
let secProtocol = encodeSecProtocols(["initConnection", {
|
|
@@ -1410,6 +1464,7 @@ async function createSocket(rep, queryManager, deleteClientsManager, socketOrigi
|
|
|
1410
1464
|
if (secProtocol.length > maxHeaderLength) lc.warn?.(`Encoded auth token length (${secProtocol.length}) exceeds ZeroOptions.maxHeaderLength (${maxHeaderLength}). This may cause connection failures.`);
|
|
1411
1465
|
queriesPatch = void 0;
|
|
1412
1466
|
} else deletedClients = void 0;
|
|
1467
|
+
onEvent?.("creating the WebSocket");
|
|
1413
1468
|
return [
|
|
1414
1469
|
new WS(url.toString(), secProtocol),
|
|
1415
1470
|
queriesPatch,
|