@rocicorp/zero 0.22.2025063000 → 0.22.2025070200
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/{chunk-CESYRWV4.js → chunk-43L7S6AU.js} +46 -34
- package/out/{chunk-CESYRWV4.js.map → chunk-43L7S6AU.js.map} +4 -4
- package/out/{chunk-WOYR3FAT.js → chunk-HTNKB2W7.js} +248 -53
- package/out/{chunk-WOYR3FAT.js.map → chunk-HTNKB2W7.js.map} +4 -4
- package/out/{chunk-J67XJRPS.js → chunk-ODTJYJ37.js} +3 -3
- package/out/{inspector-LF6RTN44.js → inspector-WSEHHWA3.js} +7 -3
- package/out/{inspector-LF6RTN44.js.map → inspector-WSEHHWA3.js.map} +2 -2
- package/out/react.js +2 -2
- package/out/solid.js +111 -99
- package/out/solid.js.map +4 -4
- package/out/zero-cache/src/config/zero-config.d.ts +8 -0
- package/out/zero-cache/src/config/zero-config.d.ts.map +1 -1
- package/out/zero-cache/src/config/zero-config.js +9 -0
- package/out/zero-cache/src/config/zero-config.js.map +1 -1
- package/out/zero-cache/src/server/change-streamer.d.ts.map +1 -1
- package/out/zero-cache/src/server/change-streamer.js +2 -2
- package/out/zero-cache/src/server/change-streamer.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/copy-runner.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/copy-runner.js +4 -3
- package/out/zero-cache/src/services/change-source/pg/copy-runner.js.map +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +4 -4
- package/out/zero-cache/src/services/change-streamer/change-streamer-service.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/storer.d.ts +1 -1
- package/out/zero-cache/src/services/change-streamer/storer.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/storer.js +10 -3
- package/out/zero-cache/src/services/change-streamer/storer.js.map +1 -1
- package/out/zero-cache/src/services/mutagen/pusher.d.ts +6 -2
- package/out/zero-cache/src/services/mutagen/pusher.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/cvr-store.js +8 -8
- package/out/zero-cache/src/services/view-syncer/cvr-store.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/cvr.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/cvr.js +13 -23
- package/out/zero-cache/src/services/view-syncer/cvr.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/schema/types.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/schema/types.js +3 -0
- package/out/zero-cache/src/services/view-syncer/schema/types.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/view-syncer.d.ts +0 -3
- 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 +29 -28
- package/out/zero-cache/src/services/view-syncer/view-syncer.js.map +1 -1
- package/out/zero-cache/src/workers/connection.d.ts.map +1 -1
- package/out/zero-cache/src/workers/connection.js +1 -25
- package/out/zero-cache/src/workers/connection.js.map +1 -1
- package/out/zero-cache/src/workers/syncer-ws-message-handler.d.ts.map +1 -1
- package/out/zero-cache/src/workers/syncer-ws-message-handler.js +1 -1
- package/out/zero-cache/src/workers/syncer-ws-message-handler.js.map +1 -1
- package/out/zero-client/src/client/active-clients-manager.d.ts +49 -0
- package/out/zero-client/src/client/active-clients-manager.d.ts.map +1 -0
- package/out/zero-client/src/client/inspector/types.d.ts +4 -2
- package/out/zero-client/src/client/inspector/types.d.ts.map +1 -1
- package/out/zero-client/src/client/zero.d.ts +2 -1
- package/out/zero-client/src/client/zero.d.ts.map +1 -1
- package/out/zero-protocol/src/close-connection.d.ts +4 -0
- package/out/zero-protocol/src/close-connection.d.ts.map +1 -1
- package/out/zero-protocol/src/close-connection.js +2 -0
- package/out/zero-protocol/src/close-connection.js.map +1 -1
- package/out/zero-protocol/src/connect.d.ts +14 -0
- package/out/zero-protocol/src/connect.d.ts.map +1 -1
- package/out/zero-protocol/src/connect.js +7 -0
- package/out/zero-protocol/src/connect.js.map +1 -1
- package/out/zero-protocol/src/down.d.ts +3 -1
- package/out/zero-protocol/src/down.d.ts.map +1 -1
- package/out/zero-protocol/src/inspect-down.d.ts +12 -4
- package/out/zero-protocol/src/inspect-down.d.ts.map +1 -1
- package/out/zero-protocol/src/inspect-down.js +7 -1
- package/out/zero-protocol/src/inspect-down.js.map +1 -1
- package/out/zero-protocol/src/protocol-version.d.ts +1 -1
- package/out/zero-protocol/src/protocol-version.d.ts.map +1 -1
- package/out/zero-protocol/src/protocol-version.js +3 -1
- package/out/zero-protocol/src/protocol-version.js.map +1 -1
- package/out/zero-protocol/src/up.d.ts +1 -0
- package/out/zero-protocol/src/up.d.ts.map +1 -1
- package/out/zero-solid/src/mod.d.ts +2 -2
- package/out/zero-solid/src/mod.d.ts.map +1 -1
- package/out/zero-solid/src/solid-view.d.ts +8 -6
- package/out/zero-solid/src/solid-view.d.ts.map +1 -1
- package/out/zero-solid/src/{create-query.d.ts → use-query.d.ts} +7 -7
- package/out/zero-solid/src/use-query.d.ts.map +1 -0
- package/out/zero-solid/src/use-zero.d.ts +11 -0
- package/out/zero-solid/src/use-zero.d.ts.map +1 -0
- package/out/zero.js +3 -3
- package/out/zql/src/ivm/take.d.ts.map +1 -1
- package/out/zql/src/ivm/take.js +6 -0
- package/out/zql/src/ivm/take.js.map +1 -1
- package/out/zql/src/query/query-impl.d.ts +3 -3
- package/out/zql/src/query/query-impl.d.ts.map +1 -1
- package/out/zql/src/query/query-impl.js +4 -4
- package/out/zql/src/query/query-impl.js.map +1 -1
- package/out/zql/src/query/query.d.ts +1 -1
- package/out/zql/src/query/ttl.d.ts +4 -0
- package/out/zql/src/query/ttl.d.ts.map +1 -1
- package/out/zql/src/query/ttl.js +12 -1
- package/out/zql/src/query/ttl.js.map +1 -1
- package/out/zqlite/src/table-source.d.ts.map +1 -1
- package/out/zqlite/src/table-source.js +12 -8
- package/out/zqlite/src/table-source.js.map +1 -1
- package/package.json +3 -3
- package/out/shared/src/ref-count.d.ts +0 -16
- package/out/shared/src/ref-count.d.ts.map +0 -1
- package/out/zero-solid/src/create-query.d.ts.map +0 -1
- package/out/zero-solid/src/create-zero.d.ts +0 -3
- package/out/zero-solid/src/create-zero.d.ts.map +0 -1
- /package/out/{chunk-J67XJRPS.js.map → chunk-ODTJYJ37.js.map} +0 -0
|
@@ -126,7 +126,7 @@ import {
|
|
|
126
126
|
withWrite,
|
|
127
127
|
withWriteNoImplicitCommit,
|
|
128
128
|
wrapIterable
|
|
129
|
-
} from "./chunk-
|
|
129
|
+
} from "./chunk-43L7S6AU.js";
|
|
130
130
|
import {
|
|
131
131
|
__export
|
|
132
132
|
} from "./chunk-424PT5DM.js";
|
|
@@ -5841,7 +5841,7 @@ var SchemaVersionNotSupported2 = "SchemaVersionNotSupported";
|
|
|
5841
5841
|
|
|
5842
5842
|
// ../zero-client/src/client/zero.ts
|
|
5843
5843
|
import "@rocicorp/logger";
|
|
5844
|
-
import { resolver as
|
|
5844
|
+
import { resolver as resolver9 } from "@rocicorp/resolver";
|
|
5845
5845
|
|
|
5846
5846
|
// ../zero-protocol/src/delete-clients.ts
|
|
5847
5847
|
var deleteClientsBodySchema = valita_exports.union(
|
|
@@ -5900,7 +5900,14 @@ var initConnectionBodySchema = valita_exports.object({
|
|
|
5900
5900
|
desiredQueriesPatch: upQueriesPatchSchema,
|
|
5901
5901
|
clientSchema: clientSchemaSchema.optional(),
|
|
5902
5902
|
deleted: deleteClientsBodySchema.optional(),
|
|
5903
|
-
userPushParams: userPushParamsSchema.optional()
|
|
5903
|
+
userPushParams: userPushParamsSchema.optional(),
|
|
5904
|
+
/**
|
|
5905
|
+
* `activeClients` is an optional array of client IDs that are currently active
|
|
5906
|
+
* in the client group. This is used to inform the server about the clients
|
|
5907
|
+
* that are currently active (aka running, aka alive), so it can inactive
|
|
5908
|
+
* queries from inactive clients.
|
|
5909
|
+
*/
|
|
5910
|
+
activeClients: valita_exports.array(valita_exports.string()).optional()
|
|
5904
5911
|
});
|
|
5905
5912
|
var initConnectionMessageSchema = valita_exports.tuple([
|
|
5906
5913
|
valita_exports.literal("initConnection"),
|
|
@@ -6241,7 +6248,7 @@ var downstreamSchema = valita_exports.union(
|
|
|
6241
6248
|
);
|
|
6242
6249
|
|
|
6243
6250
|
// ../zero-protocol/src/protocol-version.ts
|
|
6244
|
-
var PROTOCOL_VERSION =
|
|
6251
|
+
var PROTOCOL_VERSION = 20;
|
|
6245
6252
|
var MIN_SERVER_SUPPORTED_SYNC_PROTOCOL = 6;
|
|
6246
6253
|
assert(MIN_SERVER_SUPPORTED_SYNC_PROTOCOL < PROTOCOL_VERSION);
|
|
6247
6254
|
|
|
@@ -6338,6 +6345,201 @@ function send(ws, data) {
|
|
|
6338
6345
|
ws.send(JSON.stringify(data));
|
|
6339
6346
|
}
|
|
6340
6347
|
|
|
6348
|
+
// ../zero-client/src/client/active-clients-manager.ts
|
|
6349
|
+
import { resolver as resolver7 } from "@rocicorp/resolver";
|
|
6350
|
+
var keyPrefix = "zero-active";
|
|
6351
|
+
function toLockName(clientGroupID, clientID) {
|
|
6352
|
+
return `${keyPrefix}/${clientGroupID}/${clientID}`;
|
|
6353
|
+
}
|
|
6354
|
+
function toBroadcastChannelName(clientGroupID) {
|
|
6355
|
+
return `${keyPrefix}/${clientGroupID}`;
|
|
6356
|
+
}
|
|
6357
|
+
function fromLockName(lockKey) {
|
|
6358
|
+
if (!lockKey || !lockKey.startsWith(keyPrefix)) {
|
|
6359
|
+
return void 0;
|
|
6360
|
+
}
|
|
6361
|
+
const parts = lockKey.slice(keyPrefix.length).split("/");
|
|
6362
|
+
if (parts.length !== 3) {
|
|
6363
|
+
return void 0;
|
|
6364
|
+
}
|
|
6365
|
+
return {
|
|
6366
|
+
clientGroupID: parts[1],
|
|
6367
|
+
clientID: parts[2]
|
|
6368
|
+
};
|
|
6369
|
+
}
|
|
6370
|
+
function ignoreAbortError(e) {
|
|
6371
|
+
if (e instanceof Error && e.name === "AbortError") {
|
|
6372
|
+
return;
|
|
6373
|
+
}
|
|
6374
|
+
throw e;
|
|
6375
|
+
}
|
|
6376
|
+
var ActiveClientsManager = class _ActiveClientsManager {
|
|
6377
|
+
clientGroupID;
|
|
6378
|
+
clientID;
|
|
6379
|
+
#resolver = resolver7();
|
|
6380
|
+
#lockManager;
|
|
6381
|
+
#activeClients = /* @__PURE__ */ new Set();
|
|
6382
|
+
/**
|
|
6383
|
+
* A callback that is called when a client is added to the client group.
|
|
6384
|
+
* It receives the client ID of the added client.
|
|
6385
|
+
*/
|
|
6386
|
+
onAdd;
|
|
6387
|
+
/**
|
|
6388
|
+
* A callback that is called when a client is deleted from the client group.
|
|
6389
|
+
* It receives the client ID of the deleted client.
|
|
6390
|
+
*/
|
|
6391
|
+
onDelete;
|
|
6392
|
+
/**
|
|
6393
|
+
* Creates an instance of `ActiveClientsManager` for the specified client
|
|
6394
|
+
* group and client ID. It will return a promise that resolves when the
|
|
6395
|
+
* instance is ready to use, which means that it has successfully acquired the
|
|
6396
|
+
* exclusive lock for the client and has retrieved the list of active clients.
|
|
6397
|
+
*/
|
|
6398
|
+
static async create(clientGroupID, clientID, signal) {
|
|
6399
|
+
const instance = new _ActiveClientsManager(clientGroupID, clientID, signal);
|
|
6400
|
+
await instance.#init(clientGroupID, clientID, signal);
|
|
6401
|
+
return instance;
|
|
6402
|
+
}
|
|
6403
|
+
constructor(clientGroupID, clientID, signal) {
|
|
6404
|
+
this.clientGroupID = clientGroupID;
|
|
6405
|
+
this.clientID = clientID;
|
|
6406
|
+
this.#lockManager = getClientLockManager(signal);
|
|
6407
|
+
this.#activeClients.add(clientID);
|
|
6408
|
+
}
|
|
6409
|
+
async #init(clientGroupID, clientID, signal) {
|
|
6410
|
+
const name = toLockName(clientGroupID, clientID);
|
|
6411
|
+
const channel = new bc(toBroadcastChannelName(clientGroupID));
|
|
6412
|
+
channel.addEventListener(
|
|
6413
|
+
"message",
|
|
6414
|
+
(e) => {
|
|
6415
|
+
const client = fromLockName(e.data);
|
|
6416
|
+
if (client?.clientGroupID === this.clientGroupID) {
|
|
6417
|
+
this.#addClient(client.clientID);
|
|
6418
|
+
}
|
|
6419
|
+
},
|
|
6420
|
+
{ signal }
|
|
6421
|
+
);
|
|
6422
|
+
this.#lockManager.request(name, "exclusive", () => this.#resolver.promise).catch(ignoreAbortError);
|
|
6423
|
+
signal.addEventListener(
|
|
6424
|
+
"abort",
|
|
6425
|
+
() => {
|
|
6426
|
+
this.#lockManager.release(name, () => this.#resolver.resolve());
|
|
6427
|
+
channel.close();
|
|
6428
|
+
},
|
|
6429
|
+
{ once: true }
|
|
6430
|
+
);
|
|
6431
|
+
for (const clientID2 of await this.#getActiveClients()) {
|
|
6432
|
+
if (clientID2 !== this.clientID) {
|
|
6433
|
+
this.#addClient(clientID2);
|
|
6434
|
+
}
|
|
6435
|
+
}
|
|
6436
|
+
if (!signal.aborted) {
|
|
6437
|
+
channel.postMessage(name);
|
|
6438
|
+
}
|
|
6439
|
+
}
|
|
6440
|
+
get activeClients() {
|
|
6441
|
+
return this.#activeClients;
|
|
6442
|
+
}
|
|
6443
|
+
async #getActiveClients() {
|
|
6444
|
+
const activeClients = /* @__PURE__ */ new Set();
|
|
6445
|
+
for await (const lockName of this.#lockManager.queryExclusive()) {
|
|
6446
|
+
const client = fromLockName(lockName);
|
|
6447
|
+
if (client?.clientGroupID === this.clientGroupID) {
|
|
6448
|
+
activeClients.add(client.clientID);
|
|
6449
|
+
}
|
|
6450
|
+
}
|
|
6451
|
+
return activeClients;
|
|
6452
|
+
}
|
|
6453
|
+
/**
|
|
6454
|
+
* This gets called when a new client is added to the client group.
|
|
6455
|
+
*
|
|
6456
|
+
* It will request a shared lock for the client, and when the exclusive lock
|
|
6457
|
+
* is released, it will notify that the client has been deactivated.
|
|
6458
|
+
*/
|
|
6459
|
+
#addSharedLockForOtherClient(clientID) {
|
|
6460
|
+
const name = toLockName(this.clientGroupID, clientID);
|
|
6461
|
+
this.#lockManager.request(name, "shared", () => this.#removeClient(clientID)).catch(ignoreAbortError);
|
|
6462
|
+
}
|
|
6463
|
+
#addClient(clientID) {
|
|
6464
|
+
if (!this.#activeClients.has(clientID)) {
|
|
6465
|
+
this.#activeClients.add(clientID);
|
|
6466
|
+
this.#addSharedLockForOtherClient(clientID);
|
|
6467
|
+
this.onAdd?.(clientID);
|
|
6468
|
+
}
|
|
6469
|
+
}
|
|
6470
|
+
#removeClient(clientID) {
|
|
6471
|
+
if (this.#activeClients.delete(clientID)) {
|
|
6472
|
+
this.onDelete?.(clientID);
|
|
6473
|
+
}
|
|
6474
|
+
}
|
|
6475
|
+
};
|
|
6476
|
+
function getClientLockManager(signal) {
|
|
6477
|
+
const locks = getBrowserGlobal("navigator")?.locks;
|
|
6478
|
+
if (locks) {
|
|
6479
|
+
return new NativeClientLockManager(locks, signal);
|
|
6480
|
+
}
|
|
6481
|
+
return new MockClientLockManager();
|
|
6482
|
+
}
|
|
6483
|
+
var NativeClientLockManager = class {
|
|
6484
|
+
#locks;
|
|
6485
|
+
#signal;
|
|
6486
|
+
constructor(locks, signal) {
|
|
6487
|
+
this.#locks = locks;
|
|
6488
|
+
this.#signal = signal;
|
|
6489
|
+
}
|
|
6490
|
+
request(name, mode, fn) {
|
|
6491
|
+
return this.#locks.request(name, { mode, signal: this.#signal }, fn);
|
|
6492
|
+
}
|
|
6493
|
+
release(_name, fn) {
|
|
6494
|
+
fn();
|
|
6495
|
+
}
|
|
6496
|
+
async *queryExclusive() {
|
|
6497
|
+
const snapshot = await this.#locks.query();
|
|
6498
|
+
for (const lock of [
|
|
6499
|
+
...snapshot.held ?? [],
|
|
6500
|
+
...snapshot.pending ?? []
|
|
6501
|
+
]) {
|
|
6502
|
+
if (lock.mode === "exclusive" && lock.name) {
|
|
6503
|
+
yield lock.name;
|
|
6504
|
+
}
|
|
6505
|
+
}
|
|
6506
|
+
}
|
|
6507
|
+
};
|
|
6508
|
+
var mockLockNames = /* @__PURE__ */ new Set();
|
|
6509
|
+
var mockListeners = /* @__PURE__ */ new Set();
|
|
6510
|
+
var MockClientLockManager = class {
|
|
6511
|
+
#listeners = /* @__PURE__ */ new Set();
|
|
6512
|
+
request(name, mode, fn) {
|
|
6513
|
+
if (mode === "exclusive") {
|
|
6514
|
+
mockLockNames.add(name);
|
|
6515
|
+
} else {
|
|
6516
|
+
mode;
|
|
6517
|
+
const listener = (removed) => {
|
|
6518
|
+
if (removed === name) {
|
|
6519
|
+
mockListeners.delete(listener);
|
|
6520
|
+
return fn();
|
|
6521
|
+
}
|
|
6522
|
+
};
|
|
6523
|
+
mockListeners.add(listener);
|
|
6524
|
+
this.#listeners.add(listener);
|
|
6525
|
+
}
|
|
6526
|
+
return Promise.resolve();
|
|
6527
|
+
}
|
|
6528
|
+
release(name, fn) {
|
|
6529
|
+
mockLockNames.delete(name);
|
|
6530
|
+
for (const listener of mockListeners) {
|
|
6531
|
+
listener(name);
|
|
6532
|
+
}
|
|
6533
|
+
for (const listener of this.#listeners) {
|
|
6534
|
+
mockListeners.delete(listener);
|
|
6535
|
+
}
|
|
6536
|
+
fn();
|
|
6537
|
+
}
|
|
6538
|
+
async *queryExclusive() {
|
|
6539
|
+
yield* mockLockNames;
|
|
6540
|
+
}
|
|
6541
|
+
};
|
|
6542
|
+
|
|
6341
6543
|
// ../zero-client/src/client/connection-state-enum.ts
|
|
6342
6544
|
var Disconnected = 0;
|
|
6343
6545
|
var Connecting = 1;
|
|
@@ -8331,7 +8533,7 @@ function makeMessage(message, context, logLevel) {
|
|
|
8331
8533
|
}
|
|
8332
8534
|
|
|
8333
8535
|
// ../zero-client/src/client/version.ts
|
|
8334
|
-
var version2 = "0.22.
|
|
8536
|
+
var version2 = "0.22.2025070200";
|
|
8335
8537
|
|
|
8336
8538
|
// ../zero-client/src/client/log-options.ts
|
|
8337
8539
|
var LevelFilterLogSink = class {
|
|
@@ -8626,7 +8828,7 @@ var State = class {
|
|
|
8626
8828
|
};
|
|
8627
8829
|
|
|
8628
8830
|
// ../zero-client/src/client/mutation-tracker.ts
|
|
8629
|
-
import { resolver as
|
|
8831
|
+
import { resolver as resolver8 } from "@rocicorp/resolver";
|
|
8630
8832
|
var transientPushErrorTypes = [
|
|
8631
8833
|
"zeroPusher",
|
|
8632
8834
|
"http",
|
|
@@ -8656,7 +8858,7 @@ var MutationTracker = class {
|
|
|
8656
8858
|
}
|
|
8657
8859
|
trackMutation() {
|
|
8658
8860
|
const id = nextEphemeralID();
|
|
8659
|
-
const mutationResolver =
|
|
8861
|
+
const mutationResolver = resolver8();
|
|
8660
8862
|
this.#outstandingMutations.set(id, {
|
|
8661
8863
|
resolver: mutationResolver
|
|
8662
8864
|
});
|
|
@@ -9684,12 +9886,12 @@ var Zero = class _Zero {
|
|
|
9684
9886
|
};
|
|
9685
9887
|
#zeroContext;
|
|
9686
9888
|
queryDelegate;
|
|
9687
|
-
#connectResolver =
|
|
9889
|
+
#connectResolver = resolver9();
|
|
9688
9890
|
#pendingPullsByRequestID = /* @__PURE__ */ new Map();
|
|
9689
9891
|
#lastMutationIDReceived = 0;
|
|
9690
9892
|
#socket = void 0;
|
|
9691
|
-
#socketResolver =
|
|
9692
|
-
#connectionStateChangeResolver =
|
|
9893
|
+
#socketResolver = resolver9();
|
|
9894
|
+
#connectionStateChangeResolver = resolver9();
|
|
9693
9895
|
/**
|
|
9694
9896
|
* This resolver is only used for rejections. It is awaited in the connected
|
|
9695
9897
|
* state (including when waiting for a pong). It is rejected when we get an
|
|
@@ -9700,13 +9902,14 @@ var Zero = class _Zero {
|
|
|
9700
9902
|
#visibilityWatcher;
|
|
9701
9903
|
// We use an accessor pair to allow the subclass to override the setter.
|
|
9702
9904
|
#connectionState = Disconnected;
|
|
9905
|
+
#activeClientsManager;
|
|
9703
9906
|
#setConnectionState(state) {
|
|
9704
9907
|
if (state === this.#connectionState) {
|
|
9705
9908
|
return;
|
|
9706
9909
|
}
|
|
9707
9910
|
this.#connectionState = state;
|
|
9708
9911
|
this.#connectionStateChangeResolver.resolve(state);
|
|
9709
|
-
this.#connectionStateChangeResolver =
|
|
9912
|
+
this.#connectionStateChangeResolver = resolver9();
|
|
9710
9913
|
if (false) {
|
|
9711
9914
|
asTestZero(this)[onSetConnectionStateSymbol]?.(state);
|
|
9712
9915
|
}
|
|
@@ -9893,6 +10096,12 @@ var Zero = class _Zero {
|
|
|
9893
10096
|
this.userID = userID;
|
|
9894
10097
|
this.#lc = lc.withContext("clientID", rep.clientID);
|
|
9895
10098
|
this.#mutationTracker.clientID = rep.clientID;
|
|
10099
|
+
this.#activeClientsManager = makeActiveClientsManager(
|
|
10100
|
+
rep.clientGroupID,
|
|
10101
|
+
this.clientID,
|
|
10102
|
+
this.#closeAbortController.signal,
|
|
10103
|
+
(clientID) => this.#deleteClientsManager.onClientsDeleted([clientID], [])
|
|
10104
|
+
);
|
|
9896
10105
|
const onUpdateNeededCallback = (reason, serverErrorMsg) => {
|
|
9897
10106
|
if (onUpdateNeeded) {
|
|
9898
10107
|
onUpdateNeeded(reason);
|
|
@@ -10124,21 +10333,12 @@ var Zero = class _Zero {
|
|
|
10124
10333
|
const lc = this.#lc.withContext("close");
|
|
10125
10334
|
lc.debug?.("Closing Zero instance. Stack:", new Error().stack);
|
|
10126
10335
|
if (this.#connectionState !== Disconnected) {
|
|
10127
|
-
let closeReason = JSON.stringify([
|
|
10128
|
-
"closeConnection",
|
|
10129
|
-
[]
|
|
10130
|
-
]);
|
|
10131
|
-
if (closeReason.length > 123) {
|
|
10132
|
-
lc.warn?.("Close reason is too long. Removing it.");
|
|
10133
|
-
closeReason = "";
|
|
10134
|
-
}
|
|
10135
10336
|
this.#disconnect(
|
|
10136
10337
|
lc,
|
|
10137
10338
|
{
|
|
10138
10339
|
client: "ClientClosed"
|
|
10139
10340
|
},
|
|
10140
|
-
CLOSE_CODE_NORMAL
|
|
10141
|
-
closeReason
|
|
10341
|
+
CLOSE_CODE_NORMAL
|
|
10142
10342
|
);
|
|
10143
10343
|
}
|
|
10144
10344
|
lc.debug?.("Aborting closeAbortController due to close()");
|
|
@@ -10148,15 +10348,6 @@ var Zero = class _Zero {
|
|
|
10148
10348
|
this.#unexpose();
|
|
10149
10349
|
return ret;
|
|
10150
10350
|
}
|
|
10151
|
-
#onPageHide = (e) => {
|
|
10152
|
-
if (e.persisted) {
|
|
10153
|
-
this.#lc.debug?.("Ignoring pagehide event because it was persisted");
|
|
10154
|
-
} else {
|
|
10155
|
-
this.#lc.debug?.("Closing client because we got a clean close");
|
|
10156
|
-
this.close().catch(() => {
|
|
10157
|
-
});
|
|
10158
|
-
}
|
|
10159
|
-
};
|
|
10160
10351
|
#onMessage = (e) => {
|
|
10161
10352
|
const lc = this.#lc;
|
|
10162
10353
|
lc.debug?.("received message", e.data);
|
|
@@ -10417,7 +10608,8 @@ var Zero = class _Zero {
|
|
|
10417
10608
|
lc,
|
|
10418
10609
|
this.#options.push,
|
|
10419
10610
|
this.#options.maxHeaderLength,
|
|
10420
|
-
additionalConnectParams
|
|
10611
|
+
additionalConnectParams,
|
|
10612
|
+
await this.#activeClientsManager
|
|
10421
10613
|
);
|
|
10422
10614
|
if (this.closed) {
|
|
10423
10615
|
return;
|
|
@@ -10429,10 +10621,6 @@ var Zero = class _Zero {
|
|
|
10429
10621
|
ws.addEventListener("close", this.#onClose);
|
|
10430
10622
|
this.#socket = ws;
|
|
10431
10623
|
this.#socketResolver.resolve(ws);
|
|
10432
|
-
getBrowserGlobal("window")?.addEventListener?.(
|
|
10433
|
-
"pagehide",
|
|
10434
|
-
this.#onPageHide
|
|
10435
|
-
);
|
|
10436
10624
|
try {
|
|
10437
10625
|
lc.debug?.("Waiting for connection to be acknowledged");
|
|
10438
10626
|
await this.#connectResolver.promise;
|
|
@@ -10447,7 +10635,7 @@ var Zero = class _Zero {
|
|
|
10447
10635
|
);
|
|
10448
10636
|
}
|
|
10449
10637
|
}
|
|
10450
|
-
#disconnect(lc, reason, closeCode
|
|
10638
|
+
#disconnect(lc, reason, closeCode) {
|
|
10451
10639
|
if (this.#connectionState === Connecting) {
|
|
10452
10640
|
this.#connectErrorCount++;
|
|
10453
10641
|
}
|
|
@@ -10491,9 +10679,9 @@ var Zero = class _Zero {
|
|
|
10491
10679
|
lc.error?.("disconnect() called while disconnected");
|
|
10492
10680
|
break;
|
|
10493
10681
|
}
|
|
10494
|
-
this.#socketResolver =
|
|
10682
|
+
this.#socketResolver = resolver9();
|
|
10495
10683
|
lc.debug?.("Creating new connect resolver");
|
|
10496
|
-
this.#connectResolver =
|
|
10684
|
+
this.#connectResolver = resolver9();
|
|
10497
10685
|
this.#setConnectionState(Disconnected);
|
|
10498
10686
|
this.#messageCount = 0;
|
|
10499
10687
|
this.#connectStart = void 0;
|
|
@@ -10501,14 +10689,10 @@ var Zero = class _Zero {
|
|
|
10501
10689
|
this.#socket?.removeEventListener("message", this.#onMessage);
|
|
10502
10690
|
this.#socket?.removeEventListener("open", this.#onOpen);
|
|
10503
10691
|
this.#socket?.removeEventListener("close", this.#onClose);
|
|
10504
|
-
this.#socket?.close(closeCode
|
|
10692
|
+
this.#socket?.close(closeCode);
|
|
10505
10693
|
this.#socket = void 0;
|
|
10506
10694
|
this.#lastMutationIDSent = NULL_LAST_MUTATION_ID_SENT;
|
|
10507
10695
|
this.#pokeHandler.handleDisconnect();
|
|
10508
|
-
getBrowserGlobal("window")?.removeEventListener?.(
|
|
10509
|
-
"pagehide",
|
|
10510
|
-
this.#onPageHide
|
|
10511
|
-
);
|
|
10512
10696
|
}
|
|
10513
10697
|
#handlePokeStart(_lc, pokeMessage) {
|
|
10514
10698
|
this.#abortPingTimeout();
|
|
@@ -10544,12 +10728,12 @@ var Zero = class _Zero {
|
|
|
10544
10728
|
const body = pullResponseMessage[1];
|
|
10545
10729
|
lc = lc.withContext("requestID", body.requestID);
|
|
10546
10730
|
lc.debug?.("Handling pull response", body);
|
|
10547
|
-
const
|
|
10548
|
-
if (!
|
|
10731
|
+
const resolver10 = this.#pendingPullsByRequestID.get(body.requestID);
|
|
10732
|
+
if (!resolver10) {
|
|
10549
10733
|
lc.debug?.("No resolver found");
|
|
10550
10734
|
return;
|
|
10551
10735
|
}
|
|
10552
|
-
|
|
10736
|
+
resolver10.resolve(pullResponseMessage[1]);
|
|
10553
10737
|
}
|
|
10554
10738
|
async #pusher(req, requestID) {
|
|
10555
10739
|
assert(req.pushVersion === 1);
|
|
@@ -10680,7 +10864,7 @@ var Zero = class _Zero {
|
|
|
10680
10864
|
PING_INTERVAL_MS,
|
|
10681
10865
|
controller.signal
|
|
10682
10866
|
);
|
|
10683
|
-
this.#rejectMessageError =
|
|
10867
|
+
this.#rejectMessageError = resolver9();
|
|
10684
10868
|
const PING = 0;
|
|
10685
10869
|
const HIDDEN = 2;
|
|
10686
10870
|
const raceResult = await promiseRace([
|
|
@@ -10790,7 +10974,7 @@ var Zero = class _Zero {
|
|
|
10790
10974
|
}
|
|
10791
10975
|
];
|
|
10792
10976
|
send(socket, pullRequestMessage);
|
|
10793
|
-
const pullResponseResolver =
|
|
10977
|
+
const pullResponseResolver = resolver9();
|
|
10794
10978
|
this.#pendingPullsByRequestID.set(requestID, pullResponseResolver);
|
|
10795
10979
|
try {
|
|
10796
10980
|
const TIMEOUT = 0;
|
|
@@ -10848,7 +11032,7 @@ var Zero = class _Zero {
|
|
|
10848
11032
|
*/
|
|
10849
11033
|
async #ping(lc, messageErrorRejectionPromise) {
|
|
10850
11034
|
lc.debug?.("pinging");
|
|
10851
|
-
const { promise, resolve } =
|
|
11035
|
+
const { promise, resolve } = resolver9();
|
|
10852
11036
|
this.#onPong = resolve;
|
|
10853
11037
|
const pingMessage = ["ping", {}];
|
|
10854
11038
|
const t0 = performance.now();
|
|
@@ -10894,7 +11078,7 @@ var Zero = class _Zero {
|
|
|
10894
11078
|
*/
|
|
10895
11079
|
async inspect() {
|
|
10896
11080
|
BUNDLE_SIZE: {
|
|
10897
|
-
const m = await import("./inspector-
|
|
11081
|
+
const m = await import("./inspector-WSEHHWA3.js");
|
|
10898
11082
|
return m.newInspector(this.#rep, this.#schema, async () => {
|
|
10899
11083
|
await this.#connectResolver.promise;
|
|
10900
11084
|
return this.#socket;
|
|
@@ -10902,7 +11086,7 @@ var Zero = class _Zero {
|
|
|
10902
11086
|
}
|
|
10903
11087
|
}
|
|
10904
11088
|
};
|
|
10905
|
-
async function createSocket(rep, queryManager, deleteClientsManager, socketOrigin, baseCookie, clientID, clientGroupID, clientSchema, userID, auth, lmid, wsid, debugPerf, lc, userPushParams, maxHeaderLength = 1024 * 8, additionalConnectParams) {
|
|
11089
|
+
async function createSocket(rep, queryManager, deleteClientsManager, socketOrigin, baseCookie, clientID, clientGroupID, clientSchema, userID, auth, lmid, wsid, debugPerf, lc, userPushParams, maxHeaderLength = 1024 * 8, additionalConnectParams, activeClientsManager) {
|
|
10906
11090
|
const url = new URL(
|
|
10907
11091
|
appendPath(socketOrigin, `/sync/v${PROTOCOL_VERSION}/connect`)
|
|
10908
11092
|
);
|
|
@@ -10931,6 +11115,7 @@ async function createSocket(rep, queryManager, deleteClientsManager, socketOrigi
|
|
|
10931
11115
|
const queriesPatchP = rep.query((tx) => queryManager.getQueriesPatch(tx));
|
|
10932
11116
|
let deletedClients = await deleteClientsManager.getDeletedClients();
|
|
10933
11117
|
let queriesPatch = await queriesPatchP;
|
|
11118
|
+
const { activeClients } = activeClientsManager;
|
|
10934
11119
|
let secProtocol = encodeSecProtocols(
|
|
10935
11120
|
[
|
|
10936
11121
|
"initConnection",
|
|
@@ -10940,7 +11125,8 @@ async function createSocket(rep, queryManager, deleteClientsManager, socketOrigi
|
|
|
10940
11125
|
// The clientSchema only needs to be sent for the very first request.
|
|
10941
11126
|
// Henceforth it is stored with the CVR and verified automatically.
|
|
10942
11127
|
...baseCookie === null ? { clientSchema } : {},
|
|
10943
|
-
userPushParams
|
|
11128
|
+
userPushParams,
|
|
11129
|
+
activeClients: [...activeClients]
|
|
10944
11130
|
}
|
|
10945
11131
|
],
|
|
10946
11132
|
auth
|
|
@@ -11001,6 +11187,15 @@ var CloseError = class extends Error {
|
|
|
11001
11187
|
};
|
|
11002
11188
|
function assertValidRunOptions2(_options) {
|
|
11003
11189
|
}
|
|
11190
|
+
async function makeActiveClientsManager(clientGroupID, clientID, signal, onDelete) {
|
|
11191
|
+
const manager = await ActiveClientsManager.create(
|
|
11192
|
+
await clientGroupID,
|
|
11193
|
+
clientID,
|
|
11194
|
+
signal
|
|
11195
|
+
);
|
|
11196
|
+
manager.onDelete = onDelete;
|
|
11197
|
+
return manager;
|
|
11198
|
+
}
|
|
11004
11199
|
|
|
11005
11200
|
export {
|
|
11006
11201
|
getDefaultPuller,
|
|
@@ -11021,4 +11216,4 @@ export {
|
|
|
11021
11216
|
update_needed_reason_type_enum_exports,
|
|
11022
11217
|
Zero
|
|
11023
11218
|
};
|
|
11024
|
-
//# sourceMappingURL=chunk-
|
|
11219
|
+
//# sourceMappingURL=chunk-HTNKB2W7.js.map
|