@rocicorp/zero 1.10.0-canary.1 → 1.10.0-canary.11

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.
Files changed (215) hide show
  1. package/out/shared/src/promise-race.d.ts +14 -0
  2. package/out/shared/src/promise-race.d.ts.map +1 -1
  3. package/out/shared/src/promise-race.js +32 -1
  4. package/out/shared/src/promise-race.js.map +1 -1
  5. package/out/zero/package.js +1 -1
  6. package/out/zero/package.js.map +1 -1
  7. package/out/zero-cache/src/auth/write-authorizer.d.ts.map +1 -1
  8. package/out/zero-cache/src/auth/write-authorizer.js +8 -1
  9. package/out/zero-cache/src/auth/write-authorizer.js.map +1 -1
  10. package/out/zero-cache/src/config/normalize.d.ts +5 -0
  11. package/out/zero-cache/src/config/normalize.d.ts.map +1 -1
  12. package/out/zero-cache/src/config/normalize.js +16 -3
  13. package/out/zero-cache/src/config/normalize.js.map +1 -1
  14. package/out/zero-cache/src/config/zero-config.d.ts +17 -5
  15. package/out/zero-cache/src/config/zero-config.d.ts.map +1 -1
  16. package/out/zero-cache/src/config/zero-config.js +34 -18
  17. package/out/zero-cache/src/config/zero-config.js.map +1 -1
  18. package/out/zero-cache/src/db/migration-lite.d.ts.map +1 -1
  19. package/out/zero-cache/src/db/migration-lite.js +5 -3
  20. package/out/zero-cache/src/db/migration-lite.js.map +1 -1
  21. package/out/zero-cache/src/db/transaction-pool.d.ts +5 -15
  22. package/out/zero-cache/src/db/transaction-pool.d.ts.map +1 -1
  23. package/out/zero-cache/src/db/transaction-pool.js +39 -73
  24. package/out/zero-cache/src/db/transaction-pool.js.map +1 -1
  25. package/out/zero-cache/src/server/change-streamer.d.ts.map +1 -1
  26. package/out/zero-cache/src/server/change-streamer.js +25 -14
  27. package/out/zero-cache/src/server/change-streamer.js.map +1 -1
  28. package/out/zero-cache/src/server/main.d.ts.map +1 -1
  29. package/out/zero-cache/src/server/main.js +4 -4
  30. package/out/zero-cache/src/server/main.js.map +1 -1
  31. package/out/zero-cache/src/server/replicator.d.ts.map +1 -1
  32. package/out/zero-cache/src/server/replicator.js +1 -1
  33. package/out/zero-cache/src/server/replicator.js.map +1 -1
  34. package/out/zero-cache/src/server/runner/run-worker.js +1 -1
  35. package/out/zero-cache/src/server/worker-urls.d.ts +0 -1
  36. package/out/zero-cache/src/server/worker-urls.d.ts.map +1 -1
  37. package/out/zero-cache/src/server/worker-urls.js +1 -2
  38. package/out/zero-cache/src/server/worker-urls.js.map +1 -1
  39. package/out/zero-cache/src/services/change-source/common/replica-schema.d.ts.map +1 -1
  40. package/out/zero-cache/src/services/change-source/common/replica-schema.js +8 -2
  41. package/out/zero-cache/src/services/change-source/common/replica-schema.js.map +1 -1
  42. package/out/zero-cache/src/services/change-source/pg/backfill-stream.d.ts.map +1 -1
  43. package/out/zero-cache/src/services/change-source/pg/backfill-stream.js +18 -4
  44. package/out/zero-cache/src/services/change-source/pg/backfill-stream.js.map +1 -1
  45. package/out/zero-cache/src/services/change-source/pg/change-source.d.ts.map +1 -1
  46. package/out/zero-cache/src/services/change-source/pg/change-source.js +12 -10
  47. package/out/zero-cache/src/services/change-source/pg/change-source.js.map +1 -1
  48. package/out/zero-cache/src/services/change-source/pg/decommission.d.ts.map +1 -1
  49. package/out/zero-cache/src/services/change-source/pg/decommission.js +20 -11
  50. package/out/zero-cache/src/services/change-source/pg/decommission.js.map +1 -1
  51. package/out/zero-cache/src/services/change-source/pg/initial-sync.d.ts.map +1 -1
  52. package/out/zero-cache/src/services/change-source/pg/initial-sync.js +51 -74
  53. package/out/zero-cache/src/services/change-source/pg/initial-sync.js.map +1 -1
  54. package/out/zero-cache/src/services/change-source/pg/logical-replication/stream.d.ts +20 -0
  55. package/out/zero-cache/src/services/change-source/pg/logical-replication/stream.d.ts.map +1 -1
  56. package/out/zero-cache/src/services/change-source/pg/logical-replication/stream.js +43 -3
  57. package/out/zero-cache/src/services/change-source/pg/logical-replication/stream.js.map +1 -1
  58. package/out/zero-cache/src/services/change-source/pg/replication-slots.d.ts +24 -1
  59. package/out/zero-cache/src/services/change-source/pg/replication-slots.d.ts.map +1 -1
  60. package/out/zero-cache/src/services/change-source/pg/replication-slots.js +35 -5
  61. package/out/zero-cache/src/services/change-source/pg/replication-slots.js.map +1 -1
  62. package/out/zero-cache/src/services/change-streamer/backup-cleanup-monitor-factory.d.ts +1 -4
  63. package/out/zero-cache/src/services/change-streamer/backup-cleanup-monitor-factory.d.ts.map +1 -1
  64. package/out/zero-cache/src/services/change-streamer/backup-cleanup-monitor-factory.js +11 -18
  65. package/out/zero-cache/src/services/change-streamer/backup-cleanup-monitor-factory.js.map +1 -1
  66. package/out/zero-cache/src/services/change-streamer/backup-monitor.d.ts.map +1 -1
  67. package/out/zero-cache/src/services/change-streamer/backup-monitor.js +8 -3
  68. package/out/zero-cache/src/services/change-streamer/backup-monitor.js.map +1 -1
  69. package/out/zero-cache/src/services/change-streamer/change-log-compare-digest.d.ts +34 -0
  70. package/out/zero-cache/src/services/change-streamer/change-log-compare-digest.d.ts.map +1 -0
  71. package/out/zero-cache/src/services/change-streamer/change-log-compare-digest.js +67 -0
  72. package/out/zero-cache/src/services/change-streamer/change-log-compare-digest.js.map +1 -0
  73. package/out/zero-cache/src/services/change-streamer/change-streamer-http.d.ts +2 -4
  74. package/out/zero-cache/src/services/change-streamer/change-streamer-http.d.ts.map +1 -1
  75. package/out/zero-cache/src/services/change-streamer/change-streamer-http.js +8 -2
  76. package/out/zero-cache/src/services/change-streamer/change-streamer-http.js.map +1 -1
  77. package/out/zero-cache/src/services/change-streamer/change-streamer-service.d.ts +34 -13
  78. package/out/zero-cache/src/services/change-streamer/change-streamer-service.d.ts.map +1 -1
  79. package/out/zero-cache/src/services/change-streamer/change-streamer-service.js +164 -35
  80. package/out/zero-cache/src/services/change-streamer/change-streamer-service.js.map +1 -1
  81. package/out/zero-cache/src/services/change-streamer/change-streamer.d.ts +3 -9
  82. package/out/zero-cache/src/services/change-streamer/change-streamer.d.ts.map +1 -1
  83. package/out/zero-cache/src/services/change-streamer/change-streamer.js.map +1 -1
  84. package/out/zero-cache/src/services/change-streamer/forwarder.js +1 -1
  85. package/out/zero-cache/src/services/change-streamer/forwarder.js.map +1 -1
  86. package/out/zero-cache/src/services/change-streamer/litestream3-prometheus-poller.d.ts.map +1 -1
  87. package/out/zero-cache/src/services/change-streamer/litestream3-prometheus-poller.js +11 -5
  88. package/out/zero-cache/src/services/change-streamer/litestream3-prometheus-poller.js.map +1 -1
  89. package/out/zero-cache/src/services/change-streamer/shard-sampling.d.ts +11 -0
  90. package/out/zero-cache/src/services/change-streamer/shard-sampling.d.ts.map +1 -0
  91. package/out/zero-cache/src/services/change-streamer/shard-sampling.js +19 -0
  92. package/out/zero-cache/src/services/change-streamer/shard-sampling.js.map +1 -0
  93. package/out/zero-cache/src/services/change-streamer/snapshot-reservations.d.ts +11 -1
  94. package/out/zero-cache/src/services/change-streamer/snapshot-reservations.d.ts.map +1 -1
  95. package/out/zero-cache/src/services/change-streamer/snapshot-reservations.js +38 -5
  96. package/out/zero-cache/src/services/change-streamer/snapshot-reservations.js.map +1 -1
  97. package/out/zero-cache/src/services/change-streamer/sqlite-change-log-catchup.d.ts +25 -1
  98. package/out/zero-cache/src/services/change-streamer/sqlite-change-log-catchup.d.ts.map +1 -1
  99. package/out/zero-cache/src/services/change-streamer/sqlite-change-log-catchup.js +95 -12
  100. package/out/zero-cache/src/services/change-streamer/sqlite-change-log-catchup.js.map +1 -1
  101. package/out/zero-cache/src/services/change-streamer/sqlite-change-log-comparator.d.ts +83 -0
  102. package/out/zero-cache/src/services/change-streamer/sqlite-change-log-comparator.d.ts.map +1 -0
  103. package/out/zero-cache/src/services/change-streamer/sqlite-change-log-comparator.js +417 -0
  104. package/out/zero-cache/src/services/change-streamer/sqlite-change-log-comparator.js.map +1 -0
  105. package/out/zero-cache/src/services/change-streamer/sqlite-change-log-read-router.d.ts +73 -0
  106. package/out/zero-cache/src/services/change-streamer/sqlite-change-log-read-router.d.ts.map +1 -0
  107. package/out/zero-cache/src/services/change-streamer/sqlite-change-log-read-router.js +157 -0
  108. package/out/zero-cache/src/services/change-streamer/sqlite-change-log-read-router.js.map +1 -0
  109. package/out/zero-cache/src/services/change-streamer/sqlite-change-log-reader.d.ts +1 -1
  110. package/out/zero-cache/src/services/change-streamer/sqlite-change-log-reader.d.ts.map +1 -1
  111. package/out/zero-cache/src/services/change-streamer/sqlite-change-log-reader.js +8 -3
  112. package/out/zero-cache/src/services/change-streamer/sqlite-change-log-reader.js.map +1 -1
  113. package/out/zero-cache/src/services/change-streamer/storer.d.ts +63 -1
  114. package/out/zero-cache/src/services/change-streamer/storer.d.ts.map +1 -1
  115. package/out/zero-cache/src/services/change-streamer/storer.js +217 -49
  116. package/out/zero-cache/src/services/change-streamer/storer.js.map +1 -1
  117. package/out/zero-cache/src/services/change-streamer/vfs-watermark-poller.d.ts +29 -0
  118. package/out/zero-cache/src/services/change-streamer/vfs-watermark-poller.d.ts.map +1 -0
  119. package/out/zero-cache/src/services/change-streamer/vfs-watermark-poller.js +154 -0
  120. package/out/zero-cache/src/services/change-streamer/vfs-watermark-poller.js.map +1 -0
  121. package/out/zero-cache/src/services/http-service.d.ts +1 -0
  122. package/out/zero-cache/src/services/http-service.d.ts.map +1 -1
  123. package/out/zero-cache/src/services/http-service.js +7 -3
  124. package/out/zero-cache/src/services/http-service.js.map +1 -1
  125. package/out/zero-cache/src/services/litestream/commands.d.ts.map +1 -1
  126. package/out/zero-cache/src/services/litestream/commands.js +8 -4
  127. package/out/zero-cache/src/services/litestream/commands.js.map +1 -1
  128. package/out/zero-cache/src/services/litestream/metrics.d.ts +1 -0
  129. package/out/zero-cache/src/services/litestream/metrics.d.ts.map +1 -1
  130. package/out/zero-cache/src/services/litestream/metrics.js +4 -1
  131. package/out/zero-cache/src/services/litestream/metrics.js.map +1 -1
  132. package/out/zero-cache/src/services/mutagen/mutagen.d.ts.map +1 -1
  133. package/out/zero-cache/src/services/mutagen/mutagen.js +1 -1
  134. package/out/zero-cache/src/services/mutagen/mutagen.js.map +1 -1
  135. package/out/zero-cache/src/services/replicator/change-log-db.d.ts +10 -0
  136. package/out/zero-cache/src/services/replicator/change-log-db.d.ts.map +1 -1
  137. package/out/zero-cache/src/services/replicator/change-log-db.js +15 -1
  138. package/out/zero-cache/src/services/replicator/change-log-db.js.map +1 -1
  139. package/out/zero-cache/src/services/replicator/sqlite-change-log-observability.d.ts +3 -2
  140. package/out/zero-cache/src/services/replicator/sqlite-change-log-observability.d.ts.map +1 -1
  141. package/out/zero-cache/src/services/replicator/sqlite-change-log-observability.js +8 -6
  142. package/out/zero-cache/src/services/replicator/sqlite-change-log-observability.js.map +1 -1
  143. package/out/zero-cache/src/services/view-syncer/client-handler.d.ts +3 -2
  144. package/out/zero-cache/src/services/view-syncer/client-handler.d.ts.map +1 -1
  145. package/out/zero-cache/src/services/view-syncer/client-handler.js +25 -17
  146. package/out/zero-cache/src/services/view-syncer/client-handler.js.map +1 -1
  147. package/out/zero-cache/src/services/view-syncer/cvr-store.d.ts.map +1 -1
  148. package/out/zero-cache/src/services/view-syncer/cvr-store.js +14 -1
  149. package/out/zero-cache/src/services/view-syncer/cvr-store.js.map +1 -1
  150. package/out/zero-cache/src/services/view-syncer/view-syncer.d.ts +3 -3
  151. package/out/zero-cache/src/services/view-syncer/view-syncer.d.ts.map +1 -1
  152. package/out/zero-cache/src/services/view-syncer/view-syncer.js +6 -2
  153. package/out/zero-cache/src/services/view-syncer/view-syncer.js.map +1 -1
  154. package/out/zero-cache/src/types/downstream.d.ts +11 -0
  155. package/out/zero-cache/src/types/downstream.d.ts.map +1 -0
  156. package/out/zero-cache/src/types/pg.d.ts.map +1 -1
  157. package/out/zero-cache/src/types/pg.js +14 -4
  158. package/out/zero-cache/src/types/pg.js.map +1 -1
  159. package/out/zero-cache/src/types/poke-chunk.d.ts +18 -0
  160. package/out/zero-cache/src/types/poke-chunk.d.ts.map +1 -0
  161. package/out/zero-cache/src/types/poke-chunk.js +57 -0
  162. package/out/zero-cache/src/types/poke-chunk.js.map +1 -0
  163. package/out/zero-cache/src/types/processes.js +1 -4
  164. package/out/zero-cache/src/types/processes.js.map +1 -1
  165. package/out/zero-cache/src/types/streams.d.ts +4 -9
  166. package/out/zero-cache/src/types/streams.d.ts.map +1 -1
  167. package/out/zero-cache/src/types/streams.js.map +1 -1
  168. package/out/zero-cache/src/types/subscription.d.ts +2 -11
  169. package/out/zero-cache/src/types/subscription.d.ts.map +1 -1
  170. package/out/zero-cache/src/types/subscription.js +4 -25
  171. package/out/zero-cache/src/types/subscription.js.map +1 -1
  172. package/out/zero-cache/src/workers/connection.d.ts +22 -4
  173. package/out/zero-cache/src/workers/connection.d.ts.map +1 -1
  174. package/out/zero-cache/src/workers/connection.js +112 -14
  175. package/out/zero-cache/src/workers/connection.js.map +1 -1
  176. package/out/zero-client/src/client/version.js +1 -1
  177. package/out/zero-client/src/client/zero-poke-handler.d.ts +7 -2
  178. package/out/zero-client/src/client/zero-poke-handler.d.ts.map +1 -1
  179. package/out/zero-client/src/client/zero-poke-handler.js +52 -2
  180. package/out/zero-client/src/client/zero-poke-handler.js.map +1 -1
  181. package/out/zero-client/src/client/zero.d.ts.map +1 -1
  182. package/out/zero-client/src/client/zero.js +38 -6
  183. package/out/zero-client/src/client/zero.js.map +1 -1
  184. package/out/zero-protocol/src/down.d.ts +1 -1
  185. package/out/zero-protocol/src/poke.d.ts +89 -7
  186. package/out/zero-protocol/src/poke.d.ts.map +1 -1
  187. package/out/zero-protocol/src/poke.js +16 -8
  188. package/out/zero-protocol/src/poke.js.map +1 -1
  189. package/out/zero-protocol/src/protocol-version.d.ts +12 -7
  190. package/out/zero-protocol/src/protocol-version.d.ts.map +1 -1
  191. package/out/zero-protocol/src/protocol-version.js.map +1 -1
  192. package/out/zql/src/ivm/memory-source.d.ts +10 -2
  193. package/out/zql/src/ivm/memory-source.d.ts.map +1 -1
  194. package/out/zql/src/ivm/memory-source.js +14 -6
  195. package/out/zql/src/ivm/memory-source.js.map +1 -1
  196. package/out/zql/src/ivm/stream.d.ts +0 -1
  197. package/out/zql/src/ivm/stream.d.ts.map +1 -1
  198. package/out/zql/src/ivm/stream.js +1 -7
  199. package/out/zql/src/ivm/stream.js.map +1 -1
  200. package/out/zql/src/ivm/union-fan-in.d.ts +1 -1
  201. package/out/zql/src/ivm/union-fan-in.d.ts.map +1 -1
  202. package/out/zql/src/ivm/union-fan-in.js +11 -2
  203. package/out/zql/src/ivm/union-fan-in.js.map +1 -1
  204. package/out/zqlite/src/db.js +2 -2
  205. package/out/zqlite/src/sqlite-cost-model.js +5 -5
  206. package/out/zqlite/src/table-source.d.ts.map +1 -1
  207. package/out/zqlite/src/table-source.js +4 -4
  208. package/out/zqlite/src/table-source.js.map +1 -1
  209. package/package.json +1 -1
  210. package/out/zero-cache/src/server/backup-watermark-poller.js +0 -31
  211. package/out/zero-cache/src/server/backup-watermark-poller.js.map +0 -1
  212. package/out/zero-cache/src/services/litestream/vfs-watermark-poller.d.ts +0 -57
  213. package/out/zero-cache/src/services/litestream/vfs-watermark-poller.d.ts.map +0 -1
  214. package/out/zero-cache/src/services/litestream/vfs-watermark-poller.js +0 -137
  215. package/out/zero-cache/src/services/litestream/vfs-watermark-poller.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"zero-poke-handler.js","names":["#replicachePoke","#onPokeError","#clientID","#lc","#pokeBuffer","#pokeLock","#schema","#serverToClient","#mutationTracker","#receivingPoke","#handlePokeError","#pokePlaybackLoopRunning","#startPlaybackLoop","#clear","#scheduledCallback","#lastScheduledTimestamp","#processPokesForFrame"],"sources":["../../../../../zero-client/src/client/zero-poke-handler.ts"],"sourcesContent":["import {Lock} from '@rocicorp/lock';\nimport type {LogContext} from '@rocicorp/logger';\nimport type {\n PatchOperationInternal,\n PokeInternal,\n} from '../../../replicache/src/impl.ts';\nimport type {PatchOperation} from '../../../replicache/src/patch-operation.ts';\nimport type {ClientID} from '../../../replicache/src/sync/ids.ts';\nimport {unreachable} from '../../../shared/src/asserts.ts';\nimport type {MutationPatch} from '../../../zero-protocol/src/mutations-patch.ts';\nimport type {\n PokeEndBody,\n PokePartBody,\n PokeStartBody,\n} from '../../../zero-protocol/src/poke.ts';\nimport type {QueriesPatchOp} from '../../../zero-protocol/src/queries-patch.ts';\nimport type {RowPatchOp} from '../../../zero-protocol/src/row-patch.ts';\nimport {\n serverToClient,\n type NameMapper,\n} from '../../../zero-schema/src/name-mapper.ts';\nimport type {Schema} from '../../../zero-types/src/schema.ts';\nimport {\n toDesiredQueriesKey,\n toGotQueriesKey,\n toMutationResponseKey,\n toPrimaryKeyString,\n} from './keys.ts';\nimport type {MutationTracker} from './mutation-tracker.ts';\n\ntype PokeAccumulator = {\n readonly pokeStart: PokeStartBody;\n readonly parts: PokePartBody[];\n readonly pokeEnd: PokeEndBody;\n};\n\n/**\n * Handles the multi-part format of zero pokes.\n * As an optimization it also debounces pokes, only poking Replicache with a\n * merged poke at most once per scheduled callback (using setTimeout).\n * This debouncing avoids wastefully computing separate diffs and IVM updates\n * for intermediate states. setTimeout is used instead of requestAnimationFrame\n * to ensure pokes are delivered even when the tab is in the background,\n * enabling notifications (sounds, favicon badges) to work correctly.\n */\nexport class PokeHandler {\n readonly #replicachePoke: (poke: PokeInternal) => Promise<void>;\n readonly #onPokeError: (error: unknown) => void;\n readonly #clientID: ClientID;\n readonly #lc: LogContext;\n #receivingPoke: Omit<PokeAccumulator, 'pokeEnd'> | undefined = undefined;\n readonly #pokeBuffer: PokeAccumulator[] = [];\n #pokePlaybackLoopRunning = false;\n #lastScheduledTimestamp = 0;\n // Serializes calls to this.#replicachePoke otherwise we can cause out of\n // order poke errors.\n readonly #pokeLock = new Lock();\n readonly #schema: Schema;\n readonly #serverToClient: NameMapper;\n readonly #mutationTracker: MutationTracker;\n\n constructor(\n replicachePoke: (poke: PokeInternal) => Promise<void>,\n onPokeError: (error: unknown) => void,\n clientID: ClientID,\n schema: Schema,\n lc: LogContext,\n mutationTracker: MutationTracker,\n ) {\n this.#replicachePoke = replicachePoke;\n this.#onPokeError = onPokeError;\n this.#clientID = clientID;\n this.#schema = schema;\n this.#serverToClient = serverToClient(schema.tables);\n this.#lc = lc.withContext('PokeHandler');\n this.#mutationTracker = mutationTracker;\n }\n\n handlePokeStart(pokeStart: PokeStartBody) {\n if (this.#receivingPoke) {\n this.#handlePokeError(\n `pokeStart ${JSON.stringify(\n pokeStart,\n )} while still receiving ${JSON.stringify(\n this.#receivingPoke.pokeStart,\n )} `,\n );\n return;\n }\n this.#receivingPoke = {\n pokeStart,\n parts: [],\n };\n }\n\n handlePokePart(pokePart: PokePartBody): number | undefined {\n if (pokePart.pokeID !== this.#receivingPoke?.pokeStart.pokeID) {\n this.#handlePokeError(\n `pokePart for ${pokePart.pokeID}, when receiving ${\n this.#receivingPoke?.pokeStart.pokeID\n }`,\n );\n return;\n }\n this.#receivingPoke.parts.push(pokePart);\n return pokePart.lastMutationIDChanges?.[this.#clientID];\n }\n\n handlePokeEnd(pokeEnd: PokeEndBody): void {\n if (pokeEnd.pokeID !== this.#receivingPoke?.pokeStart.pokeID) {\n this.#handlePokeError(\n `pokeEnd for ${pokeEnd.pokeID}, when receiving ${\n this.#receivingPoke?.pokeStart.pokeID\n }`,\n );\n return;\n }\n if (pokeEnd.cancel) {\n this.#receivingPoke = undefined;\n return;\n }\n this.#pokeBuffer.push({...this.#receivingPoke, pokeEnd});\n this.#receivingPoke = undefined;\n if (!this.#pokePlaybackLoopRunning) {\n this.#startPlaybackLoop();\n }\n }\n\n handleDisconnect(): void {\n this.#lc.debug?.('clearing due to disconnect');\n this.#clear();\n }\n\n #startPlaybackLoop() {\n this.#lc.debug?.('starting playback loop');\n this.#pokePlaybackLoopRunning = true;\n setTimeout(this.#scheduledCallback, 0);\n }\n\n #scheduledCallback = async () => {\n const lc = this.#lc.withContext(\n 'scheduledAt',\n Math.floor(performance.now()),\n );\n if (this.#pokeBuffer.length === 0) {\n lc.debug?.('stopping playback loop');\n this.#pokePlaybackLoopRunning = false;\n return;\n }\n setTimeout(this.#scheduledCallback, 0);\n const start = performance.now();\n lc.debug?.(\n 'scheduled callback fired, processing pokes. Since last callback',\n start - this.#lastScheduledTimestamp,\n );\n this.#lastScheduledTimestamp = start;\n await this.#processPokesForFrame(lc);\n lc.debug?.('processing pokes took', performance.now() - start);\n };\n\n #processPokesForFrame(lc: LogContext): Promise<void> {\n return this.#pokeLock.withLock(async () => {\n const now = Date.now();\n lc.debug?.('got poke lock at', now);\n lc.debug?.('merging', this.#pokeBuffer.length);\n try {\n const merged = mergePokes(\n this.#pokeBuffer,\n this.#schema,\n this.#serverToClient,\n );\n this.#pokeBuffer.length = 0;\n if (merged === undefined) {\n lc.debug?.('frame is empty');\n return;\n }\n const start = performance.now();\n lc.debug?.('poking replicache');\n await this.#replicachePoke(merged);\n lc.debug?.('poking replicache took', performance.now() - start);\n\n if (!('error' in merged.pullResponse)) {\n const lmid =\n merged.pullResponse.lastMutationIDChanges[this.#clientID];\n if (lmid !== undefined) {\n this.#mutationTracker.lmidAdvanced(lmid);\n }\n }\n } catch (e) {\n this.#handlePokeError(e);\n }\n });\n }\n\n #handlePokeError(e: unknown) {\n if (String(e).includes('unexpected base cookie for poke')) {\n // This can happen if cookie changes due to refresh from idb due\n // to an update arriving to different tabs in the same\n // client group at very different times. Unusual but possible.\n this.#lc.debug?.('clearing due to', e);\n } else {\n this.#lc.error?.('clearing due to unexpected poke error', e);\n }\n this.#clear();\n this.#onPokeError(e);\n }\n\n #clear() {\n this.#receivingPoke = undefined;\n this.#pokeBuffer.length = 0;\n }\n}\n\nexport function mergePokes(\n pokeBuffer: PokeAccumulator[],\n schema: Schema,\n serverToClient: NameMapper,\n):\n | (PokeInternal & {mutationResults?: MutationPatch[] | undefined})\n | undefined {\n if (pokeBuffer.length === 0) {\n return undefined;\n }\n const {baseCookie} = pokeBuffer[0].pokeStart;\n // oxlint-disable-next-line typescript/no-non-null-assertion\n const lastPoke = pokeBuffer.at(-1)!;\n const {cookie} = lastPoke.pokeEnd;\n const mergedPatch: PatchOperationInternal[] = [];\n const mergedLastMutationIDChanges: Record<string, number> = {};\n const mutationResults: MutationPatch[] = [];\n\n let prevPokeEnd = undefined;\n for (const pokeAccumulator of pokeBuffer) {\n if (\n prevPokeEnd &&\n pokeAccumulator.pokeStart.baseCookie &&\n pokeAccumulator.pokeStart.baseCookie > prevPokeEnd.cookie\n ) {\n throw Error(\n `unexpected cookie gap ${JSON.stringify(prevPokeEnd)} ${JSON.stringify(\n pokeAccumulator.pokeStart,\n )}`,\n );\n }\n prevPokeEnd = pokeAccumulator.pokeEnd;\n for (const pokePart of pokeAccumulator.parts) {\n if (pokePart.lastMutationIDChanges) {\n for (const [clientID, lastMutationID] of Object.entries(\n pokePart.lastMutationIDChanges,\n )) {\n mergedLastMutationIDChanges[clientID] = lastMutationID;\n }\n }\n if (pokePart.desiredQueriesPatches) {\n for (const [clientID, queriesPatch] of Object.entries(\n pokePart.desiredQueriesPatches,\n )) {\n for (const op of queriesPatch) {\n mergedPatch.push(\n queryPatchOpToReplicachePatchOp(op, hash =>\n toDesiredQueriesKey(clientID, hash),\n ),\n );\n }\n }\n }\n if (pokePart.gotQueriesPatch) {\n for (const op of pokePart.gotQueriesPatch) {\n mergedPatch.push(\n queryPatchOpToReplicachePatchOp(op, toGotQueriesKey),\n );\n }\n }\n if (pokePart.rowsPatch) {\n for (const p of pokePart.rowsPatch) {\n const patchOp = rowsPatchOpToReplicachePatchOp(\n p,\n schema,\n serverToClient,\n );\n if (patchOp) {\n mergedPatch.push(patchOp);\n }\n }\n }\n if (pokePart.mutationsPatch) {\n for (const op of pokePart.mutationsPatch) {\n mergedPatch.push(mutationPatchOpToReplicachePatchOp(op));\n }\n }\n }\n }\n const ret: PokeInternal & {mutationResults?: MutationPatch[] | undefined} = {\n baseCookie,\n pullResponse: {\n lastMutationIDChanges: mergedLastMutationIDChanges,\n patch: mergedPatch,\n cookie,\n },\n };\n\n // For backwards compatibility. Because we're strict on our validation,\n // zero-client must be able to parse pokes with this field before we introduce it.\n // So users can update their clients and then start using custom mutators that write responses to the db.\n if (mutationResults.length > 0) {\n ret.mutationResults = mutationResults;\n }\n return ret;\n}\n\nfunction queryPatchOpToReplicachePatchOp(\n op: QueriesPatchOp,\n toKey: (hash: string) => string,\n): PatchOperation {\n switch (op.op) {\n case 'clear':\n return op;\n case 'del':\n return {\n op: 'del',\n key: toKey(op.hash),\n };\n case 'put':\n return {\n op: 'put',\n key: toKey(op.hash),\n value: null,\n };\n default:\n unreachable(op);\n }\n}\n\nexport function mutationPatchOpToReplicachePatchOp(\n op: MutationPatch,\n): PatchOperationInternal {\n switch (op.op) {\n case 'put':\n return {\n op: 'put',\n key: toMutationResponseKey(op.mutation.id),\n value: op.mutation.result,\n };\n case 'del':\n return {\n op: 'del',\n key: toMutationResponseKey(op.id),\n };\n }\n}\n\nfunction rowsPatchOpToReplicachePatchOp(\n op: RowPatchOp,\n schema: Schema,\n serverToClient: NameMapper,\n): PatchOperationInternal | undefined {\n if (op.op === 'clear') {\n return op;\n }\n // Skip rows for tables not in the client schema. This can happen when\n // the server-side query AST references tables (e.g. issueNotifications)\n // that are not yet part of the client schema definition.\n const tableName = serverToClient.tableNameIfKnown(op.tableName);\n if (!tableName) {\n return undefined;\n }\n switch (op.op) {\n case 'del':\n return {\n op: 'del',\n key: toPrimaryKeyString(\n tableName,\n schema.tables[tableName].primaryKey,\n serverToClient.row(op.tableName, op.id),\n ),\n };\n case 'put':\n return {\n op: 'put',\n key: toPrimaryKeyString(\n tableName,\n schema.tables[tableName].primaryKey,\n serverToClient.row(op.tableName, op.value),\n ),\n value: serverToClient.row(op.tableName, op.value),\n };\n case 'update':\n return {\n op: 'update',\n key: toPrimaryKeyString(\n tableName,\n schema.tables[tableName].primaryKey,\n serverToClient.row(op.tableName, op.id),\n ),\n merge: op.merge\n ? serverToClient.row(op.tableName, op.merge)\n : undefined,\n constrain: serverToClient.columns(op.tableName, op.constrain),\n };\n default:\n unreachable(op);\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"zero-poke-handler.js","names":["#replicachePoke","#onPokeError","#clientID","#lc","#pokeBuffer","#pokeLock","#schema","#serverToClient","#mutationTracker","#receivingPoke","#handlePokeError","#pokePlaybackLoopRunning","#startPlaybackLoop","#clear","#scheduledCallback","#lastScheduledTimestamp","#processPokesForFrame"],"sources":["../../../../../zero-client/src/client/zero-poke-handler.ts"],"sourcesContent":["import {Lock} from '@rocicorp/lock';\nimport type {LogContext} from '@rocicorp/logger';\nimport type {\n PatchOperationInternal,\n PokeInternal,\n} from '../../../replicache/src/impl.ts';\nimport type {PatchOperation} from '../../../replicache/src/patch-operation.ts';\nimport type {ClientID} from '../../../replicache/src/sync/ids.ts';\nimport {unreachable} from '../../../shared/src/asserts.ts';\nimport * as v from '../../../shared/src/valita.ts';\nimport type {MutationPatch} from '../../../zero-protocol/src/mutations-patch.ts';\nimport {\n pokePartsSchema,\n type PokeEndBody,\n type PokePartBody,\n type PokeParts,\n type PokeStartBody,\n} from '../../../zero-protocol/src/poke.ts';\nimport type {QueriesPatchOp} from '../../../zero-protocol/src/queries-patch.ts';\nimport type {RowPatchOp} from '../../../zero-protocol/src/row-patch.ts';\nimport {\n serverToClient,\n type NameMapper,\n} from '../../../zero-schema/src/name-mapper.ts';\nimport type {Schema} from '../../../zero-types/src/schema.ts';\nimport {\n toDesiredQueriesKey,\n toGotQueriesKey,\n toMutationResponseKey,\n toPrimaryKeyString,\n} from './keys.ts';\nimport type {MutationTracker} from './mutation-tracker.ts';\n\ntype PokeAccumulator = {\n readonly pokeStart: PokeStartBody;\n readonly parts: PokePartBody[];\n readonly pokeEnd: PokeEndBody;\n};\n\ntype ReceivingPoke = {\n readonly pokeStart: PokeStartBody;\n readonly parts: PokePartBody[];\n readonly chunks: Uint8Array[];\n};\n\nexport type PokeEndResult = {\n readonly lastMutationIDChangeForSelf: number | undefined;\n readonly hasRows: boolean;\n};\n\n/**\n * Handles the multi-part format of zero pokes.\n * As an optimization it also debounces pokes, only poking Replicache with a\n * merged poke at most once per scheduled callback (using setTimeout).\n * This debouncing avoids wastefully computing separate diffs and IVM updates\n * for intermediate states. setTimeout is used instead of requestAnimationFrame\n * to ensure pokes are delivered even when the tab is in the background,\n * enabling notifications (sounds, favicon badges) to work correctly.\n */\nexport class PokeHandler {\n readonly #replicachePoke: (poke: PokeInternal) => Promise<void>;\n readonly #onPokeError: (error: unknown) => void;\n readonly #clientID: ClientID;\n readonly #lc: LogContext;\n #receivingPoke: ReceivingPoke | undefined = undefined;\n readonly #pokeBuffer: PokeAccumulator[] = [];\n #pokePlaybackLoopRunning = false;\n #lastScheduledTimestamp = 0;\n // Serializes calls to this.#replicachePoke otherwise we can cause out of\n // order poke errors.\n readonly #pokeLock = new Lock();\n readonly #schema: Schema;\n readonly #serverToClient: NameMapper;\n readonly #mutationTracker: MutationTracker;\n\n constructor(\n replicachePoke: (poke: PokeInternal) => Promise<void>,\n onPokeError: (error: unknown) => void,\n clientID: ClientID,\n schema: Schema,\n lc: LogContext,\n mutationTracker: MutationTracker,\n ) {\n this.#replicachePoke = replicachePoke;\n this.#onPokeError = onPokeError;\n this.#clientID = clientID;\n this.#schema = schema;\n this.#serverToClient = serverToClient(schema.tables);\n this.#lc = lc.withContext('PokeHandler');\n this.#mutationTracker = mutationTracker;\n }\n\n handlePokeStart(pokeStart: PokeStartBody) {\n if (this.#receivingPoke) {\n this.#handlePokeError(\n `pokeStart ${JSON.stringify(\n pokeStart,\n )} while still receiving ${JSON.stringify(\n this.#receivingPoke.pokeStart,\n )} `,\n );\n return;\n }\n this.#receivingPoke = {\n pokeStart,\n parts: [],\n chunks: [],\n };\n }\n\n handlePokePart(pokePart: PokePartBody): number | undefined {\n if (pokePart.pokeID !== this.#receivingPoke?.pokeStart.pokeID) {\n this.#handlePokeError(\n `pokePart for ${pokePart.pokeID}, when receiving ${\n this.#receivingPoke?.pokeStart.pokeID\n }`,\n );\n return;\n }\n if (this.#receivingPoke.chunks.length > 0) {\n this.#handlePokeError('received both pokePart and binary poke chunks');\n return;\n }\n this.#receivingPoke.parts.push(pokePart);\n return pokePart.lastMutationIDChanges?.[this.#clientID];\n }\n\n handlePokeChunk(chunk: Uint8Array): void {\n if (!this.#receivingPoke) {\n this.#handlePokeError('received a binary poke chunk without pokeStart');\n return;\n }\n if (this.#receivingPoke.parts.length > 0) {\n this.#handlePokeError('received both pokePart and binary poke chunks');\n return;\n }\n this.#receivingPoke.chunks.push(chunk);\n }\n\n handlePokeEnd(pokeEnd: PokeEndBody): PokeEndResult | undefined {\n if (pokeEnd.pokeID !== this.#receivingPoke?.pokeStart.pokeID) {\n this.#handlePokeError(\n `pokeEnd for ${pokeEnd.pokeID}, when receiving ${\n this.#receivingPoke?.pokeStart.pokeID\n }`,\n );\n return;\n }\n if (pokeEnd.cancel) {\n this.#receivingPoke = undefined;\n return;\n }\n const receivingPoke = this.#receivingPoke;\n let parts = receivingPoke.parts;\n if (receivingPoke.chunks.length > 0) {\n try {\n parts = decodePokeChunks(receivingPoke.chunks);\n } catch (e) {\n this.#handlePokeError(e);\n return;\n }\n }\n\n const result = summarizePoke(parts, this.#clientID);\n this.#pokeBuffer.push({\n pokeStart: receivingPoke.pokeStart,\n parts,\n pokeEnd,\n });\n this.#receivingPoke = undefined;\n if (!this.#pokePlaybackLoopRunning) {\n this.#startPlaybackLoop();\n }\n return result;\n }\n\n handleDisconnect(): void {\n this.#lc.debug?.('clearing due to disconnect');\n this.#clear();\n }\n\n #startPlaybackLoop() {\n this.#lc.debug?.('starting playback loop');\n this.#pokePlaybackLoopRunning = true;\n setTimeout(this.#scheduledCallback, 0);\n }\n\n #scheduledCallback = async () => {\n const lc = this.#lc.withContext(\n 'scheduledAt',\n Math.floor(performance.now()),\n );\n if (this.#pokeBuffer.length === 0) {\n lc.debug?.('stopping playback loop');\n this.#pokePlaybackLoopRunning = false;\n return;\n }\n setTimeout(this.#scheduledCallback, 0);\n const start = performance.now();\n lc.debug?.(\n 'scheduled callback fired, processing pokes. Since last callback',\n start - this.#lastScheduledTimestamp,\n );\n this.#lastScheduledTimestamp = start;\n await this.#processPokesForFrame(lc);\n lc.debug?.('processing pokes took', performance.now() - start);\n };\n\n #processPokesForFrame(lc: LogContext): Promise<void> {\n return this.#pokeLock.withLock(async () => {\n const now = Date.now();\n lc.debug?.('got poke lock at', now);\n lc.debug?.('merging', this.#pokeBuffer.length);\n try {\n const merged = mergePokes(\n this.#pokeBuffer,\n this.#schema,\n this.#serverToClient,\n );\n this.#pokeBuffer.length = 0;\n if (merged === undefined) {\n lc.debug?.('frame is empty');\n return;\n }\n const start = performance.now();\n lc.debug?.('poking replicache');\n await this.#replicachePoke(merged);\n lc.debug?.('poking replicache took', performance.now() - start);\n\n if (!('error' in merged.pullResponse)) {\n const lmid =\n merged.pullResponse.lastMutationIDChanges[this.#clientID];\n if (lmid !== undefined) {\n this.#mutationTracker.lmidAdvanced(lmid);\n }\n }\n } catch (e) {\n this.#handlePokeError(e);\n }\n });\n }\n\n #handlePokeError(e: unknown) {\n if (String(e).includes('unexpected base cookie for poke')) {\n // This can happen if cookie changes due to refresh from idb due\n // to an update arriving to different tabs in the same\n // client group at very different times. Unusual but possible.\n this.#lc.debug?.('clearing due to', e);\n } else {\n this.#lc.error?.('clearing due to unexpected poke error', e);\n }\n this.#clear();\n this.#onPokeError(e);\n }\n\n #clear() {\n this.#receivingPoke = undefined;\n this.#pokeBuffer.length = 0;\n }\n}\n\nfunction decodePokeChunks(chunks: Uint8Array[]): PokeParts {\n const decoder = new TextDecoder('utf-8', {fatal: true});\n const decoded = new Array<string>(chunks.length + 1);\n for (let i = 0; i < chunks.length; i++) {\n decoded[i] = decoder.decode(chunks[i], {stream: true});\n }\n decoded[chunks.length] = decoder.decode();\n chunks.length = 0;\n return v.parse(JSON.parse(decoded.join('')), pokePartsSchema, 'passthrough');\n}\n\nfunction summarizePoke(\n parts: PokePartBody[],\n clientID: ClientID,\n): PokeEndResult {\n let lastMutationIDChangeForSelf: number | undefined;\n let hasRows = false;\n for (const part of parts) {\n const lmid = part.lastMutationIDChanges?.[clientID];\n if (lmid !== undefined) {\n lastMutationIDChangeForSelf = lmid;\n }\n hasRows ||= Boolean(part.rowsPatch?.length);\n }\n return {lastMutationIDChangeForSelf, hasRows};\n}\n\nexport function mergePokes(\n pokeBuffer: PokeAccumulator[],\n schema: Schema,\n serverToClient: NameMapper,\n):\n | (PokeInternal & {mutationResults?: MutationPatch[] | undefined})\n | undefined {\n if (pokeBuffer.length === 0) {\n return undefined;\n }\n const {baseCookie} = pokeBuffer[0].pokeStart;\n // oxlint-disable-next-line typescript/no-non-null-assertion\n const lastPoke = pokeBuffer.at(-1)!;\n const {cookie} = lastPoke.pokeEnd;\n const mergedPatch: PatchOperationInternal[] = [];\n const mergedLastMutationIDChanges: Record<string, number> = {};\n const mutationResults: MutationPatch[] = [];\n\n let prevPokeEnd = undefined;\n for (const pokeAccumulator of pokeBuffer) {\n if (\n prevPokeEnd &&\n pokeAccumulator.pokeStart.baseCookie &&\n pokeAccumulator.pokeStart.baseCookie > prevPokeEnd.cookie\n ) {\n throw Error(\n `unexpected cookie gap ${JSON.stringify(prevPokeEnd)} ${JSON.stringify(\n pokeAccumulator.pokeStart,\n )}`,\n );\n }\n prevPokeEnd = pokeAccumulator.pokeEnd;\n for (const pokePart of pokeAccumulator.parts) {\n if (pokePart.lastMutationIDChanges) {\n for (const [clientID, lastMutationID] of Object.entries(\n pokePart.lastMutationIDChanges,\n )) {\n mergedLastMutationIDChanges[clientID] = lastMutationID;\n }\n }\n if (pokePart.desiredQueriesPatches) {\n for (const [clientID, queriesPatch] of Object.entries(\n pokePart.desiredQueriesPatches,\n )) {\n for (const op of queriesPatch) {\n mergedPatch.push(\n queryPatchOpToReplicachePatchOp(op, hash =>\n toDesiredQueriesKey(clientID, hash),\n ),\n );\n }\n }\n }\n if (pokePart.gotQueriesPatch) {\n for (const op of pokePart.gotQueriesPatch) {\n mergedPatch.push(\n queryPatchOpToReplicachePatchOp(op, toGotQueriesKey),\n );\n }\n }\n if (pokePart.rowsPatch) {\n for (const p of pokePart.rowsPatch) {\n const patchOp = rowsPatchOpToReplicachePatchOp(\n p,\n schema,\n serverToClient,\n );\n if (patchOp) {\n mergedPatch.push(patchOp);\n }\n }\n }\n if (pokePart.mutationsPatch) {\n for (const op of pokePart.mutationsPatch) {\n mergedPatch.push(mutationPatchOpToReplicachePatchOp(op));\n }\n }\n }\n }\n const ret: PokeInternal & {mutationResults?: MutationPatch[] | undefined} = {\n baseCookie,\n pullResponse: {\n lastMutationIDChanges: mergedLastMutationIDChanges,\n patch: mergedPatch,\n cookie,\n },\n };\n\n // For backwards compatibility. Because we're strict on our validation,\n // zero-client must be able to parse pokes with this field before we introduce it.\n // So users can update their clients and then start using custom mutators that write responses to the db.\n if (mutationResults.length > 0) {\n ret.mutationResults = mutationResults;\n }\n return ret;\n}\n\nfunction queryPatchOpToReplicachePatchOp(\n op: QueriesPatchOp,\n toKey: (hash: string) => string,\n): PatchOperation {\n switch (op.op) {\n case 'clear':\n return op;\n case 'del':\n return {\n op: 'del',\n key: toKey(op.hash),\n };\n case 'put':\n return {\n op: 'put',\n key: toKey(op.hash),\n value: null,\n };\n default:\n unreachable(op);\n }\n}\n\nexport function mutationPatchOpToReplicachePatchOp(\n op: MutationPatch,\n): PatchOperationInternal {\n switch (op.op) {\n case 'put':\n return {\n op: 'put',\n key: toMutationResponseKey(op.mutation.id),\n value: op.mutation.result,\n };\n case 'del':\n return {\n op: 'del',\n key: toMutationResponseKey(op.id),\n };\n }\n}\n\nfunction rowsPatchOpToReplicachePatchOp(\n op: RowPatchOp,\n schema: Schema,\n serverToClient: NameMapper,\n): PatchOperationInternal | undefined {\n if (op.op === 'clear') {\n return op;\n }\n // Skip rows for tables not in the client schema. This can happen when\n // the server-side query AST references tables (e.g. issueNotifications)\n // that are not yet part of the client schema definition.\n const tableName = serverToClient.tableNameIfKnown(op.tableName);\n if (!tableName) {\n return undefined;\n }\n switch (op.op) {\n case 'del':\n return {\n op: 'del',\n key: toPrimaryKeyString(\n tableName,\n schema.tables[tableName].primaryKey,\n serverToClient.row(op.tableName, op.id),\n ),\n };\n case 'put':\n return {\n op: 'put',\n key: toPrimaryKeyString(\n tableName,\n schema.tables[tableName].primaryKey,\n serverToClient.row(op.tableName, op.value),\n ),\n value: serverToClient.row(op.tableName, op.value),\n };\n case 'update':\n return {\n op: 'update',\n key: toPrimaryKeyString(\n tableName,\n schema.tables[tableName].primaryKey,\n serverToClient.row(op.tableName, op.id),\n ),\n merge: op.merge\n ? serverToClient.row(op.tableName, op.merge)\n : undefined,\n constrain: serverToClient.columns(op.tableName, op.constrain),\n };\n default:\n unreachable(op);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;AA2DA,IAAa,cAAb,MAAyB;CACvB;CACA;CACA;CACA;CACA,iBAA4C,KAAA;CAC5C,cAA0C,CAAC;CAC3C,2BAA2B;CAC3B,0BAA0B;CAG1B,YAAqB,IAAI,KAAK;CAC9B;CACA;CACA;CAEA,YACE,gBACA,aACA,UACA,QACA,IACA,iBACA;EACA,KAAKA,kBAAkB;EACvB,KAAKC,eAAe;EACpB,KAAKC,YAAY;EACjB,KAAKI,UAAU;EACf,KAAKC,kBAAkB,eAAe,OAAO,MAAM;EACnD,KAAKJ,MAAM,GAAG,YAAY,aAAa;EACvC,KAAKK,mBAAmB;CAC1B;CAEA,gBAAgB,WAA0B;EACxC,IAAI,KAAKC,gBAAgB;GACvB,KAAKC,iBACH,aAAa,KAAK,UAChB,SACF,EAAE,0BAA0B,KAAK,UAC/B,KAAKD,eAAe,SACtB,EAAE,EACJ;GACA;EACF;EACA,KAAKA,iBAAiB;GACpB;GACA,OAAO,CAAC;GACR,QAAQ,CAAC;EACX;CACF;CAEA,eAAe,UAA4C;EACzD,IAAI,SAAS,WAAW,KAAKA,gBAAgB,UAAU,QAAQ;GAC7D,KAAKC,iBACH,gBAAgB,SAAS,OAAO,mBAC9B,KAAKD,gBAAgB,UAAU,QAEnC;GACA;EACF;EACA,IAAI,KAAKA,eAAe,OAAO,SAAS,GAAG;GACzC,KAAKC,iBAAiB,+CAA+C;GACrE;EACF;EACA,KAAKD,eAAe,MAAM,KAAK,QAAQ;EACvC,OAAO,SAAS,wBAAwB,KAAKP;CAC/C;CAEA,gBAAgB,OAAyB;EACvC,IAAI,CAAC,KAAKO,gBAAgB;GACxB,KAAKC,iBAAiB,gDAAgD;GACtE;EACF;EACA,IAAI,KAAKD,eAAe,MAAM,SAAS,GAAG;GACxC,KAAKC,iBAAiB,+CAA+C;GACrE;EACF;EACA,KAAKD,eAAe,OAAO,KAAK,KAAK;CACvC;CAEA,cAAc,SAAiD;EAC7D,IAAI,QAAQ,WAAW,KAAKA,gBAAgB,UAAU,QAAQ;GAC5D,KAAKC,iBACH,eAAe,QAAQ,OAAO,mBAC5B,KAAKD,gBAAgB,UAAU,QAEnC;GACA;EACF;EACA,IAAI,QAAQ,QAAQ;GAClB,KAAKA,iBAAiB,KAAA;GACtB;EACF;EACA,MAAM,gBAAgB,KAAKA;EAC3B,IAAI,QAAQ,cAAc;EAC1B,IAAI,cAAc,OAAO,SAAS,GAChC,IAAI;GACF,QAAQ,iBAAiB,cAAc,MAAM;EAC/C,SAAS,GAAG;GACV,KAAKC,iBAAiB,CAAC;GACvB;EACF;EAGF,MAAM,SAAS,cAAc,OAAO,KAAKR,SAAS;EAClD,KAAKE,YAAY,KAAK;GACpB,WAAW,cAAc;GACzB;GACA;EACF,CAAC;EACD,KAAKK,iBAAiB,KAAA;EACtB,IAAI,CAAC,KAAKE,0BACR,KAAKC,mBAAmB;EAE1B,OAAO;CACT;CAEA,mBAAyB;EACvB,KAAKT,IAAI,QAAQ,4BAA4B;EAC7C,KAAKU,OAAO;CACd;CAEA,qBAAqB;EACnB,KAAKV,IAAI,QAAQ,wBAAwB;EACzC,KAAKQ,2BAA2B;EAChC,WAAW,KAAKG,oBAAoB,CAAC;CACvC;CAEA,qBAAqB,YAAY;EAC/B,MAAM,KAAK,KAAKX,IAAI,YAClB,eACA,KAAK,MAAM,YAAY,IAAI,CAAC,CAC9B;EACA,IAAI,KAAKC,YAAY,WAAW,GAAG;GACjC,GAAG,QAAQ,wBAAwB;GACnC,KAAKO,2BAA2B;GAChC;EACF;EACA,WAAW,KAAKG,oBAAoB,CAAC;EACrC,MAAM,QAAQ,YAAY,IAAI;EAC9B,GAAG,QACD,mEACA,QAAQ,KAAKC,uBACf;EACA,KAAKA,0BAA0B;EAC/B,MAAM,KAAKC,sBAAsB,EAAE;EACnC,GAAG,QAAQ,yBAAyB,YAAY,IAAI,IAAI,KAAK;CAC/D;CAEA,sBAAsB,IAA+B;EACnD,OAAO,KAAKX,UAAU,SAAS,YAAY;GACzC,MAAM,MAAM,KAAK,IAAI;GACrB,GAAG,QAAQ,oBAAoB,GAAG;GAClC,GAAG,QAAQ,WAAW,KAAKD,YAAY,MAAM;GAC7C,IAAI;IACF,MAAM,SAAS,WACb,KAAKA,aACL,KAAKE,SACL,KAAKC,eACP;IACA,KAAKH,YAAY,SAAS;IAC1B,IAAI,WAAW,KAAA,GAAW;KACxB,GAAG,QAAQ,gBAAgB;KAC3B;IACF;IACA,MAAM,QAAQ,YAAY,IAAI;IAC9B,GAAG,QAAQ,mBAAmB;IAC9B,MAAM,KAAKJ,gBAAgB,MAAM;IACjC,GAAG,QAAQ,0BAA0B,YAAY,IAAI,IAAI,KAAK;IAE9D,IAAI,EAAE,WAAW,OAAO,eAAe;KACrC,MAAM,OACJ,OAAO,aAAa,sBAAsB,KAAKE;KACjD,IAAI,SAAS,KAAA,GACX,KAAKM,iBAAiB,aAAa,IAAI;IAE3C;GACF,SAAS,GAAG;IACV,KAAKE,iBAAiB,CAAC;GACzB;EACF,CAAC;CACH;CAEA,iBAAiB,GAAY;EAC3B,IAAI,OAAO,CAAC,EAAE,SAAS,iCAAiC,GAItD,KAAKP,IAAI,QAAQ,mBAAmB,CAAC;OAErC,KAAKA,IAAI,QAAQ,yCAAyC,CAAC;EAE7D,KAAKU,OAAO;EACZ,KAAKZ,aAAa,CAAC;CACrB;CAEA,SAAS;EACP,KAAKQ,iBAAiB,KAAA;EACtB,KAAKL,YAAY,SAAS;CAC5B;AACF;AAEA,SAAS,iBAAiB,QAAiC;CACzD,MAAM,UAAU,IAAI,YAAY,SAAS,EAAC,OAAO,KAAI,CAAC;CACtD,MAAM,UAAU,IAAI,MAAc,OAAO,SAAS,CAAC;CACnD,KAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,KACjC,QAAQ,KAAK,QAAQ,OAAO,OAAO,IAAI,EAAC,QAAQ,KAAI,CAAC;CAEvD,QAAQ,OAAO,UAAU,QAAQ,OAAO;CACxC,OAAO,SAAS;CAChB,OAAO,MAAQ,KAAK,MAAM,QAAQ,KAAK,EAAE,CAAC,GAAG,iBAAiB,aAAa;AAC7E;AAEA,SAAS,cACP,OACA,UACe;CACf,IAAI;CACJ,IAAI,UAAU;CACd,KAAK,MAAM,QAAQ,OAAO;EACxB,MAAM,OAAO,KAAK,wBAAwB;EAC1C,IAAI,SAAS,KAAA,GACX,8BAA8B;EAEhC,YAAY,QAAQ,KAAK,WAAW,MAAM;CAC5C;CACA,OAAO;EAAC;EAA6B;CAAO;AAC9C;AAEA,SAAgB,WACd,YACA,QACA,gBAGY;CACZ,IAAI,WAAW,WAAW,GACxB;CAEF,MAAM,EAAC,eAAc,WAAW,GAAG;CAGnC,MAAM,EAAC,WADU,WAAW,GAAG,EACd,EAAS;CAC1B,MAAM,cAAwC,CAAC;CAC/C,MAAM,8BAAsD,CAAC;CAC7D,MAAM,kBAAmC,CAAC;CAE1C,IAAI,cAAc,KAAA;CAClB,KAAK,MAAM,mBAAmB,YAAY;EACxC,IACE,eACA,gBAAgB,UAAU,cAC1B,gBAAgB,UAAU,aAAa,YAAY,QAEnD,MAAM,MACJ,yBAAyB,KAAK,UAAU,WAAW,EAAE,GAAG,KAAK,UAC3D,gBAAgB,SAClB,GACF;EAEF,cAAc,gBAAgB;EAC9B,KAAK,MAAM,YAAY,gBAAgB,OAAO;GAC5C,IAAI,SAAS,uBACX,KAAK,MAAM,CAAC,UAAU,mBAAmB,OAAO,QAC9C,SAAS,qBACX,GACE,4BAA4B,YAAY;GAG5C,IAAI,SAAS,uBACX,KAAK,MAAM,CAAC,UAAU,iBAAiB,OAAO,QAC5C,SAAS,qBACX,GACE,KAAK,MAAM,MAAM,cACf,YAAY,KACV,gCAAgC,KAAI,SAClC,oBAAoB,UAAU,IAAI,CACpC,CACF;GAIN,IAAI,SAAS,iBACX,KAAK,MAAM,MAAM,SAAS,iBACxB,YAAY,KACV,gCAAgC,IAAI,eAAe,CACrD;GAGJ,IAAI,SAAS,WACX,KAAK,MAAM,KAAK,SAAS,WAAW;IAClC,MAAM,UAAU,+BACd,GACA,QACA,cACF;IACA,IAAI,SACF,YAAY,KAAK,OAAO;GAE5B;GAEF,IAAI,SAAS,gBACX,KAAK,MAAM,MAAM,SAAS,gBACxB,YAAY,KAAK,mCAAmC,EAAE,CAAC;EAG7D;CACF;CACA,MAAM,MAAsE;EAC1E;EACA,cAAc;GACZ,uBAAuB;GACvB,OAAO;GACP;EACF;CACF;CAKA,IAAI,gBAAgB,SAAS,GAC3B,IAAI,kBAAkB;CAExB,OAAO;AACT;AAEA,SAAS,gCACP,IACA,OACgB;CAChB,QAAQ,GAAG,IAAX;EACE,KAAK,SACH,OAAO;EACT,KAAK,OACH,OAAO;GACL,IAAI;GACJ,KAAK,MAAM,GAAG,IAAI;EACpB;EACF,KAAK,OACH,OAAO;GACL,IAAI;GACJ,KAAK,MAAM,GAAG,IAAI;GAClB,OAAO;EACT;EACF,SACE,YAAY,EAAE;CAClB;AACF;AAEA,SAAgB,mCACd,IACwB;CACxB,QAAQ,GAAG,IAAX;EACE,KAAK,OACH,OAAO;GACL,IAAI;GACJ,KAAK,sBAAsB,GAAG,SAAS,EAAE;GACzC,OAAO,GAAG,SAAS;EACrB;EACF,KAAK,OACH,OAAO;GACL,IAAI;GACJ,KAAK,sBAAsB,GAAG,EAAE;EAClC;CACJ;AACF;AAEA,SAAS,+BACP,IACA,QACA,gBACoC;CACpC,IAAI,GAAG,OAAO,SACZ,OAAO;CAKT,MAAM,YAAY,eAAe,iBAAiB,GAAG,SAAS;CAC9D,IAAI,CAAC,WACH;CAEF,QAAQ,GAAG,IAAX;EACE,KAAK,OACH,OAAO;GACL,IAAI;GACJ,KAAK,mBACH,WACA,OAAO,OAAO,WAAW,YACzB,eAAe,IAAI,GAAG,WAAW,GAAG,EAAE,CACxC;EACF;EACF,KAAK,OACH,OAAO;GACL,IAAI;GACJ,KAAK,mBACH,WACA,OAAO,OAAO,WAAW,YACzB,eAAe,IAAI,GAAG,WAAW,GAAG,KAAK,CAC3C;GACA,OAAO,eAAe,IAAI,GAAG,WAAW,GAAG,KAAK;EAClD;EACF,KAAK,UACH,OAAO;GACL,IAAI;GACJ,KAAK,mBACH,WACA,OAAO,OAAO,WAAW,YACzB,eAAe,IAAI,GAAG,WAAW,GAAG,EAAE,CACxC;GACA,OAAO,GAAG,QACN,eAAe,IAAI,GAAG,WAAW,GAAG,KAAK,IACzC,KAAA;GACJ,WAAW,eAAe,QAAQ,GAAG,WAAW,GAAG,SAAS;EAC9D;EACF,SACE,YAAY,EAAE;CAClB;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"zero.d.ts","sourceRoot":"","sources":["../../../../../zero-client/src/client/zero.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"zero.d.ts","sourceRoot":"","sources":["../../../../../zero-client/src/client/zero.ts"],"names":[],"mappings":"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"}
@@ -31,6 +31,7 @@ import { encodeSecProtocols } from "../../../zero-protocol/src/connect.js";
31
31
  import { CRUD, Custom } from "../../../zero-protocol/src/mutation-type-enum.js";
32
32
  import { mapCRUD } from "../../../zero-protocol/src/mutation.js";
33
33
  import { nullableVersionSchema } from "../../../zero-protocol/src/version.js";
34
+ import "../../../zero-protocol/src/poke.js";
34
35
  import { downstreamSchema } from "../../../zero-protocol/src/down.js";
35
36
  import "../../../zero-protocol/src/protocol-version.js";
36
37
  import { isClientMetric } from "../../../zql/src/query/metrics-delegate.js";
@@ -280,7 +281,7 @@ var Zero = class Zero {
280
281
  })).toString(36);
281
282
  const storageScopedUserID = userID ?? "__anonymous__";
282
283
  const replicacheOptions = {
283
- schemaVersion: `51.${hash}`,
284
+ schemaVersion: `52.${hash}`,
284
285
  logLevel: logOptions.logLevel,
285
286
  logSinks: [logOptions.logSink],
286
287
  mutators: replicacheMutators,
@@ -641,13 +642,36 @@ var Zero = class Zero {
641
642
  }
642
643
  #onMessage = (e) => {
643
644
  const lc = this.#lc;
644
- lc.debug?.("received message", e.data);
645
+ const { data } = e;
646
+ lc.debug?.("received message", data instanceof ArrayBuffer ? {
647
+ type: "binary",
648
+ byteLength: data.byteLength
649
+ } : data);
645
650
  if (this.closed) {
646
651
  lc.debug?.("ignoring message because already closed");
647
652
  return;
648
653
  }
649
654
  let downMessage;
650
- const { data } = e;
655
+ if (data instanceof ArrayBuffer) {
656
+ this.#messageCount++;
657
+ const message = new Uint8Array(data);
658
+ if (message[0] !== 0) {
659
+ this.#disconnect(lc, new ClientError({
660
+ kind: InvalidMessage$1,
661
+ message: `Unknown binary message type: ${String(message[0])}`
662
+ }));
663
+ return;
664
+ }
665
+ this.#handlePokeChunk(message.subarray(1));
666
+ return;
667
+ }
668
+ if (typeof data !== "string") {
669
+ this.#disconnect(lc, new ClientError({
670
+ kind: InvalidMessage$1,
671
+ message: "Invalid binary message received from server"
672
+ }));
673
+ return;
674
+ }
651
675
  try {
652
676
  downMessage = parse(JSON.parse(data), downstreamSchema, "passthrough");
653
677
  } catch (e) {
@@ -993,9 +1017,15 @@ var Zero = class Zero {
993
1017
  const lastMutationIDChangeForSelf = this.#pokeHandler.handlePokePart(pokeMessage[1]);
994
1018
  if (lastMutationIDChangeForSelf !== void 0) this.#lastMutationIDReceived = lastMutationIDChangeForSelf;
995
1019
  }
1020
+ #handlePokeChunk(chunk) {
1021
+ this.#abortPingTimeout();
1022
+ this.#pokeHandler.handlePokeChunk(chunk);
1023
+ }
996
1024
  #handlePokeEnd(_lc, pokeMessage) {
997
1025
  this.#abortPingTimeout();
998
- this.#pokeHandler.handlePokeEnd(pokeMessage[1]);
1026
+ const result = this.#pokeHandler.handlePokeEnd(pokeMessage[1]);
1027
+ if (result?.hasRows) resetBackoff();
1028
+ if (result?.lastMutationIDChangeForSelf !== void 0) this.#lastMutationIDReceived = result.lastMutationIDChangeForSelf;
999
1029
  }
1000
1030
  #onPokeError(error) {
1001
1031
  const lc = this.#lc;
@@ -1465,14 +1495,16 @@ async function createSocket(rep, queryManager, deleteClientsManager, socketOrigi
1465
1495
  queriesPatch = void 0;
1466
1496
  } else deletedClients = void 0;
1467
1497
  onEvent?.("creating the WebSocket");
1498
+ const socket = new WS(url.toString(), secProtocol);
1499
+ socket.binaryType = "arraybuffer";
1468
1500
  return [
1469
- new WS(url.toString(), secProtocol),
1501
+ socket,
1470
1502
  queriesPatch,
1471
1503
  skipEmptyDeletedClients(deletedClients)
1472
1504
  ];
1473
1505
  }
1474
1506
  async function createConnectionURL(socketOrigin, clientID, clientGroupID, userID, baseCookie, lmid, wsid, rep, debugPerf, additionalConnectParams, lc) {
1475
- const url = new URL(appendPath(socketOrigin, `/sync/v51/connect`));
1507
+ const url = new URL(appendPath(socketOrigin, `/sync/v52/connect`));
1476
1508
  const { searchParams } = url;
1477
1509
  searchParams.set("clientID", clientID);
1478
1510
  searchParams.set("clientGroupID", clientGroupID);