var __defProp = Object.defineProperty; var __typeError = (msg) => { throw TypeError(msg); }; var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg); var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj)); var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value); var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value); var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method); var __privateWrapper = (obj, member, setter, getter) => ({ set _(value) { __privateSet(obj, member, value, setter); }, get _() { return __privateGet(obj, member, getter); } }); import { E as D, d as P, a as q, b as K, s as G, v as V, l as x, c as T, e as J, g as k, f as Y, h as B, j as Q, k as X, m as N, n as E, C as Z, t as z, D as _, o as $, p as A, q as C, r as L, u as ee, w as j, i as te, x as R, U as y, y as M, R as v, z as W, A as se, B as re, F as ne, G as oe, H as ie, __tla as __tla_0 } from "./fullfat_bundler-C8o4MXnP.js"; let Me, Re; let __tla = Promise.all([ (() => { try { return __tla_0; } catch { } })() ]).then(async () => { var _e, _s, _o, _t, _n, _r, _ae_instances, i_fn, a_fn, _e2, _s2, _o2, _t2, _n2, _e3, _s3, _o3, _t3, _n3, _le_instances, r_fn, i_fn2, a_fn2, h_fn, _e4, _s4, _o4, _t4, _n4, _r2, _i, _a, _h, _u, _me_instances, d_fn, f_fn, _l, m_fn, c_fn, p_fn, y_fn, _e5, _s5, _o5, _t5, _n5, _r3, _i2, _pe_instances, a_fn3, _e6, _s6, _o6, _Pe_instances, t_fn, _n6, _r4; class ae extends D { constructor() { super(...arguments); __privateAdd(this, _ae_instances); __privateAdd(this, _e, /* @__PURE__ */ new Map()); __privateAdd(this, _s, /* @__PURE__ */ new Set()); __privateAdd(this, _o, /* @__PURE__ */ new Map()); __privateAdd(this, _t, /* @__PURE__ */ new Set()); __privateAdd(this, _n, /* @__PURE__ */ new Map()); __privateAdd(this, _r, P("automerge-repo:remote-heads-subscriptions")); } subscribeToRemotes(e) { __privateGet(this, _r).call(this, "subscribeToRemotes", e); const t = []; for (const s of e) __privateGet(this, _s).has(s) || (__privateGet(this, _s).add(s), t.push(s)); t.length > 0 && this.emit("change-remote-subs", { add: t, peers: Array.from(__privateGet(this, _t)) }); } unsubscribeFromRemotes(e) { __privateGet(this, _r).call(this, "subscribeToRemotes", e); const t = []; for (const s of e) __privateGet(this, _s).has(s) && (__privateGet(this, _s).delete(s), __privateGet(this, _o).has(s) || t.push(s)); t.length > 0 && this.emit("change-remote-subs", { remove: t, peers: Array.from(__privateGet(this, _t)) }); } handleControlMessage(e) { const t = [], s = [], r = []; if (__privateGet(this, _r).call(this, "handleControlMessage", e), e.add) for (const n of e.add) { let o = __privateGet(this, _o).get(n); (__privateGet(this, _s).has(n) || o) && r.push(n), o || (o = /* @__PURE__ */ new Set(), __privateGet(this, _o).set(n, o), __privateGet(this, _s).has(n) || t.push(n)), o.add(e.senderId); } if (e.remove) for (const n of e.remove) { const o = __privateGet(this, _o).get(n); o && (o.delete(e.senderId), o.size == 0 && !__privateGet(this, _s).has(n) && s.push(n)); } (t.length > 0 || s.length > 0) && this.emit("change-remote-subs", { peers: Array.from(__privateGet(this, _t)), add: t, remove: s }); for (const n of r) { const o = __privateGet(this, _n).get(e.senderId); if (o) for (const a of o) { const u = __privateGet(this, _e).get(a); if (!u) continue; const h = u.get(n); h && this.emit("notify-remote-heads", { targetId: e.senderId, documentId: a, heads: h.lastHeads, timestamp: h.lastSyncTimestamp, storageId: n }); } } } handleRemoteHeads(e) { __privateGet(this, _r).call(this, "handleRemoteHeads", e); const t = __privateMethod(this, _ae_instances, a_fn).call(this, e); for (const s of t) __privateGet(this, _s).has(s.storageId) && this.emit("remote-heads-changed", s); for (const s of t) for (const r of __privateGet(this, _t)) r !== e.senderId && this.emit("notify-remote-heads", { targetId: r, documentId: s.documentId, heads: s.remoteHeads, timestamp: s.timestamp, storageId: s.storageId }); for (const s of t) { const r = __privateGet(this, _o).get(s.storageId); if (r) for (const n of r) __privateMethod(this, _ae_instances, i_fn).call(this, n, s.documentId) && this.emit("notify-remote-heads", { targetId: n, documentId: s.documentId, heads: s.remoteHeads, timestamp: s.timestamp, storageId: s.storageId }); } } handleImmediateRemoteHeadsChanged(e, t, s) { __privateGet(this, _r).call(this, "handleLocalHeadsChanged", e, t, s); const r = __privateGet(this, _e).get(e), n = Date.now(); if (!r) __privateGet(this, _e).set(e, /* @__PURE__ */ new Map([ [ t, { lastSyncTimestamp: n, lastHeads: s } ] ])); else { const a = r.get(t); (!a || a.lastSyncTimestamp < Date.now()) && r.set(t, { lastSyncTimestamp: Date.now(), lastHeads: s }); } const o = __privateGet(this, _o).get(t); if (o) for (const a of o) __privateMethod(this, _ae_instances, i_fn).call(this, a, e) && this.emit("notify-remote-heads", { targetId: a, documentId: e, heads: s, timestamp: n, storageId: t }); } addGenerousPeer(e) { __privateGet(this, _r).call(this, "addGenerousPeer", e), __privateGet(this, _t).add(e), __privateGet(this, _s).size > 0 && this.emit("change-remote-subs", { add: Array.from(__privateGet(this, _s)), peers: [ e ] }); for (const [t, s] of __privateGet(this, _e)) for (const [r, { lastHeads: n, lastSyncTimestamp: o }] of s) this.emit("notify-remote-heads", { targetId: e, documentId: t, heads: n, timestamp: o, storageId: r }); } removePeer(e) { __privateGet(this, _r).call(this, "removePeer", e); const t = []; __privateGet(this, _t).delete(e), __privateGet(this, _n).delete(e); for (const [s, r] of __privateGet(this, _o)) r.has(e) && (r.delete(e), r.size == 0 && (t.push(s), __privateGet(this, _o).delete(s))); t.length > 0 && this.emit("change-remote-subs", { remove: t, peers: Array.from(__privateGet(this, _t)) }); } subscribePeerToDoc(e, t) { let s = __privateGet(this, _n).get(e); s || (s = /* @__PURE__ */ new Set(), __privateGet(this, _n).set(e, s)), s.add(t); const r = __privateGet(this, _e).get(t); if (r) for (const [n, o] of r) { const a = __privateGet(this, _o).get(n); a && a.has(e) && this.emit("notify-remote-heads", { targetId: e, documentId: t, heads: o.lastHeads, timestamp: o.lastSyncTimestamp, storageId: n }); } } } _e = new WeakMap(); _s = new WeakMap(); _o = new WeakMap(); _t = new WeakMap(); _n = new WeakMap(); _r = new WeakMap(); _ae_instances = new WeakSet(); i_fn = function(e, t) { const s = __privateGet(this, _n).get(e); return s && s.has(t); }; a_fn = function(e) { const t = [], { documentId: s, newHeads: r } = e; for (const [n, { heads: o, timestamp: a }] of Object.entries(r)) { if (!__privateGet(this, _s).has(n) && !__privateGet(this, _o).has(n)) continue; let u = __privateGet(this, _e).get(s); u || (u = /* @__PURE__ */ new Map(), __privateGet(this, _e).set(s, u)); const h = u.get(n); h && h.lastSyncTimestamp >= a || (u.set(n, { lastSyncTimestamp: a, lastHeads: o }), t.push({ documentId: s, storageId: n, remoteHeads: o, timestamp: a })); } return t; }; const ce = (d) => `${d.senderId}:${d.sessionId}`; class he extends D { constructor(e, t, s) { super(); __publicField(this, "peerId"); __publicField(this, "peerMetadata"); __privateAdd(this, _e2); __privateAdd(this, _s2, {}); __privateAdd(this, _o2, 0); __privateAdd(this, _t2, Math.random().toString(36).slice(2)); __privateAdd(this, _n2, {}); __publicField(this, "adapters", []); __publicField(this, "isReady", () => this.adapters.every((e) => e.isReady())); __publicField(this, "whenReady", async () => Promise.all(this.adapters.map((e) => e.whenReady()))); this.peerId = t, this.peerMetadata = s, __privateSet(this, _e2, P(`automerge-repo:network:${this.peerId}`)), e.forEach((r) => this.addNetworkAdapter(r)); } disconnect() { this.adapters.forEach((e) => e.disconnect()); } reconnect() { this.adapters.forEach((e) => e.connect(this.peerId)); } addNetworkAdapter(e) { this.adapters.push(e), e.on("peer-candidate", ({ peerId: t, peerMetadata: s }) => { __privateGet(this, _e2).call(this, `peer candidate: ${t} `), __privateGet(this, _s2)[t] || (__privateGet(this, _s2)[t] = e), this.emit("peer", { peerId: t, peerMetadata: s }); }), e.on("peer-disconnected", ({ peerId: t }) => { __privateGet(this, _e2).call(this, `peer disconnected: ${t} `), delete __privateGet(this, _s2)[t], this.emit("peer-disconnected", { peerId: t }); }), e.on("message", (t) => { if (!q(t)) { __privateGet(this, _e2).call(this, `invalid message: ${JSON.stringify(t)}`); return; } if (__privateGet(this, _e2).call(this, `message from ${t.senderId}`), K(t)) { const s = ce(t); (__privateGet(this, _n2)[s] === void 0 || t.count > __privateGet(this, _n2)[s]) && (__privateGet(this, _n2)[s] = t.count, this.emit("message", t)); return; } this.emit("message", t); }), e.on("close", () => { __privateGet(this, _e2).call(this, "adapter closed"), Object.entries(__privateGet(this, _s2)).forEach(([t, s]) => { s === e && delete __privateGet(this, _s2)[t]; }), this.adapters = this.adapters.filter((t) => t !== e); }), this.peerMetadata.then((t) => { e.connect(this.peerId, t); }).catch((t) => { __privateGet(this, _e2).call(this, "error connecting to network", t); }); } removeNetworkAdapter(e) { this.adapters = this.adapters.filter((t) => t !== e), e.disconnect(); } send(e) { const t = __privateGet(this, _s2)[e.targetId]; if (!t) { __privateGet(this, _e2).call(this, `Tried to send message but peer not found: ${e.targetId}`); return; } const r = ((n) => n.type === "ephemeral" ? "count" in n ? n : { ...n, count: ++__privateWrapper(this, _o2)._, sessionId: __privateGet(this, _t2), senderId: this.peerId } : { ...n, senderId: this.peerId })(e); __privateGet(this, _e2).call(this, "sending message %o", r), t.send(r); } } _e2 = new WeakMap(); _s2 = new WeakMap(); _o2 = new WeakMap(); _t2 = new WeakMap(); _n2 = new WeakMap(); function O(d) { let e = 0; d.forEach((r) => { e += r.length; }); const t = new Uint8Array(e); let s = 0; return d.forEach((r) => { t.set(r, s), s += r.length; }), t; } function F(d) { const e = G.hash(d); return ue(e); } function de(d) { const e = new TextEncoder(), t = O(d.map((s) => e.encode(s))); return F(t); } function ue(d) { return Array.from(d, (e) => e.toString(16).padStart(2, "0")).join(""); } class le extends D { constructor(e) { super(); __privateAdd(this, _le_instances); __privateAdd(this, _e3); __privateAdd(this, _s3, /* @__PURE__ */ new Map()); __privateAdd(this, _o3, /* @__PURE__ */ new Map()); __privateAdd(this, _t3, false); __privateAdd(this, _n3, P("automerge-repo:storage-subsystem")); __privateSet(this, _e3, e); } async id() { const e = await __privateGet(this, _e3).load([ "storage-adapter-id" ]); let t; return e ? t = new TextDecoder().decode(e) : (t = V(), await __privateGet(this, _e3).save([ "storage-adapter-id" ], new TextEncoder().encode(t))), t; } async load(e, t) { const s = [ e, t ]; return await __privateGet(this, _e3).load(s); } async save(e, t, s) { const r = [ e, t ]; await __privateGet(this, _e3).save(r, s); } async remove(e, t) { const s = [ e, t ]; await __privateGet(this, _e3).remove(s); } async loadDocData(e) { const t = await __privateGet(this, _e3).loadRange([ e, "snapshot" ]), s = await __privateGet(this, _e3).loadRange([ e, "incremental" ]), r = [], n = []; for (const o of t) o.data !== void 0 && (n.push({ key: o.key, type: "snapshot", size: o.data.length }), r.push(o.data)); for (const o of s) o.data !== void 0 && (n.push({ key: o.key, type: "incremental", size: o.data.length }), r.push(o.data)); return __privateGet(this, _o3).set(e, n), r.length === 0 ? null : O(r); } async loadDoc(e) { const t = await this.loadDocData(e); if (!t) return null; const s = performance.now(), r = x(T(), t), n = performance.now(); return this.emit("document-loaded", { documentId: e, durationMillis: n - s, ...J(r) }), __privateGet(this, _s3).set(e, k(r)), r; } async saveDoc(e, t) { if (!__privateMethod(this, _le_instances, a_fn2).call(this, e, t)) return; const s = __privateGet(this, _o3).get(e) ?? []; __privateMethod(this, _le_instances, h_fn).call(this, s) ? await __privateMethod(this, _le_instances, i_fn2).call(this, e, t, s) : await __privateMethod(this, _le_instances, r_fn).call(this, e, t), __privateGet(this, _s3).set(e, k(t)); } async removeDoc(e) { await __privateGet(this, _e3).removeRange([ e, "snapshot" ]), await __privateGet(this, _e3).removeRange([ e, "incremental" ]), await __privateGet(this, _e3).removeRange([ e, "sync-state" ]); } async loadSyncState(e, t) { const s = [ e, "sync-state", t ]; try { const r = await __privateGet(this, _e3).load(s); return r ? Q(r) : void 0; } catch { __privateGet(this, _n3).call(this, `Error loading sync state for ${e} from ${t}`); return; } } async saveSyncState(e, t, s) { const r = [ e, "sync-state", t ]; await __privateGet(this, _e3).save(r, X(s)); } } _e3 = new WeakMap(); _s3 = new WeakMap(); _o3 = new WeakMap(); _t3 = new WeakMap(); _n3 = new WeakMap(); _le_instances = new WeakSet(); r_fn = async function(e, t) { const s = __privateGet(this, _s3).get(e) ?? [], r = performance.now(), n = Y(t, s), o = performance.now(); if (this.emit("doc-saved", { documentId: e, durationMillis: o - r, sinceHeads: s }), n && n.length > 0) { const a = [ e, "incremental", F(n) ]; __privateGet(this, _n3).call(this, `Saving incremental ${a} for document ${e}`), await __privateGet(this, _e3).save(a, n), __privateGet(this, _o3).has(e) || __privateGet(this, _o3).set(e, []), __privateGet(this, _o3).get(e).push({ key: a, type: "incremental", size: n.length }), __privateGet(this, _s3).set(e, k(t)); } else return Promise.resolve(); }; i_fn2 = async function(e, t, s) { var _a2; __privateSet(this, _t3, true); const r = performance.now(), n = B(t), o = performance.now(); this.emit("doc-compacted", { documentId: e, durationMillis: o - r }); const a = de(k(t)), u = [ e, "snapshot", a ], h = new Set(s.map((c) => c.key).filter((c) => c[2] !== a)); __privateGet(this, _n3).call(this, `Saving snapshot ${u} for document ${e}`), __privateGet(this, _n3).call(this, `deleting old chunks ${Array.from(h)}`), await __privateGet(this, _e3).save(u, n); for (const c of h) await __privateGet(this, _e3).remove(c); const p = ((_a2 = __privateGet(this, _o3).get(e)) == null ? void 0 : _a2.filter((c) => !h.has(c.key))) ?? []; p.push({ key: u, type: "snapshot", size: n.length }), __privateGet(this, _o3).set(e, p), __privateSet(this, _t3, false); }; a_fn2 = function(e, t) { const s = __privateGet(this, _s3).get(e); if (!s) return true; const r = k(t); return !N(E(r), E(s)); }; h_fn = function(e) { if (__privateGet(this, _t3)) return false; let t = 0, s = 0; for (const r of e) r.type === "snapshot" ? t += r.size : s += r.size; return t < 1024 || s >= t; }; function fe() { return "peer-" + Math.random().toString(36).slice(4); } class me extends D { constructor({ storage: e, network: t = [], peerId: s = fe(), sharePolicy: r, shareConfig: n, isEphemeral: o = e === void 0, enableRemoteHeadsGossiping: a = false, denylist: u = [], saveDebounceRate: h = 100, idFactory: p } = {}) { super(); __privateAdd(this, _me_instances); __privateAdd(this, _e4); __publicField(this, "networkSubsystem"); __publicField(this, "storageSubsystem"); __privateAdd(this, _s4); __privateAdd(this, _o4); __privateAdd(this, _t4, {}); __publicField(this, "synchronizer"); __privateAdd(this, _n4, { announce: async () => true, access: async () => true }); __publicField(this, "peerMetadataByPeerId", {}); __privateAdd(this, _r2, new ae()); __privateAdd(this, _i, false); __privateAdd(this, _a, {}); __privateAdd(this, _h, {}); __privateAdd(this, _u); __privateAdd(this, _l, {}); __publicField(this, "subscribeToRemotes", (e) => { __privateGet(this, _i) ? (__privateGet(this, _e4).call(this, "subscribeToRemotes", { remotes: e }), __privateGet(this, _r2).subscribeToRemotes(e)) : __privateGet(this, _e4).call(this, "WARN: subscribeToRemotes called but remote heads gossiping is not enabled"); }); __publicField(this, "storageId", async () => { if (this.storageSubsystem) return this.storageSubsystem.id(); }); if (__privateSet(this, _i, a), __privateSet(this, _e4, P("automerge-repo:repo")), __privateSet(this, _u, p || null), r != null && n != null) throw new Error("cannot provide both sharePolicy and shareConfig at once"); r && __privateSet(this, _n4, { announce: r, access: async () => true }), n && __privateSet(this, _n4, n), this.on("delete-document", ({ documentId: i }) => { this.synchronizer.removeDocument(i), c && c.removeDoc(i).catch((f) => { __privateGet(this, _e4).call(this, "error deleting document", { documentId: i, err: f }); }); }), this.synchronizer = new Z(this, u), this.synchronizer.on("message", (i) => { __privateGet(this, _e4).call(this, `sending ${i.type} message to ${i.targetId}`), m.send(i); }), this.synchronizer.on("metrics", (i) => this.emit("doc-metrics", i)), __privateGet(this, _i) && this.synchronizer.on("open-doc", ({ peerId: i, documentId: f }) => { __privateGet(this, _r2).subscribePeerToDoc(i, f); }); const c = e ? new le(e) : void 0; c && (c.on("document-loaded", (i) => this.emit("doc-metrics", { type: "doc-loaded", ...i })), c.on("doc-compacted", (i) => this.emit("doc-metrics", { type: "doc-compacted", ...i })), c.on("doc-saved", (i) => this.emit("doc-metrics", { type: "doc-saved", ...i }))), this.storageSubsystem = c, __privateSet(this, _s4, h), this.storageSubsystem ? __privateSet(this, _o4, ({ handle: i, doc: f }) => { let l = __privateGet(this, _h)[i.documentId]; l || (l = z(({ doc: I, handle: H }) => { this.storageSubsystem.saveDoc(H.documentId, I); }, __privateGet(this, _s4)), __privateGet(this, _h)[i.documentId] = l), l({ handle: i, doc: f }); }) : __privateSet(this, _o4, () => { }); const b = (async () => ({ storageId: await (c == null ? void 0 : c.id()), isEphemeral: o }))(), m = new he(t, s, b); this.networkSubsystem = m, m.on("peer", async ({ peerId: i, peerMetadata: f }) => { __privateGet(this, _e4).call(this, "peer connected", { peerId: i }), f && (this.peerMetadataByPeerId[i] = { ...f }), __privateGet(this, _n4).announce(i).then((l) => { l && __privateGet(this, _i) && __privateGet(this, _r2).addGenerousPeer(i); }).catch((l) => { console.log("error in share policy", { err: l }); }), this.synchronizer.addPeer(i); }), m.on("peer-disconnected", ({ peerId: i }) => { this.synchronizer.removePeer(i), __privateGet(this, _r2).removePeer(i); }), m.on("message", async (i) => { __privateMethod(this, _me_instances, f_fn).call(this, i); }), this.synchronizer.on("sync-state", (i) => { var _a2; __privateMethod(this, _me_instances, m_fn).call(this, i); const f = __privateGet(this, _t4)[i.documentId], { storageId: l } = this.peerMetadataByPeerId[i.peerId] || {}; if (!l) return; const I = (_a2 = f.getSyncInfo(l)) == null ? void 0 : _a2.lastHeads; i.syncState.theirHeads && (!I || !N(I, E(i.syncState.theirHeads))) && i.syncState.theirHeads && (f.setSyncInfo(l, { lastHeads: E(i.syncState.theirHeads), lastSyncTimestamp: Date.now() }), l && __privateGet(this, _i) && __privateGet(this, _r2).handleImmediateRemoteHeadsChanged(i.documentId, l, E(i.syncState.theirHeads))); }), __privateGet(this, _i) && (__privateGet(this, _r2).on("notify-remote-heads", (i) => { this.networkSubsystem.send({ type: "remote-heads-changed", targetId: i.targetId, documentId: i.documentId, newHeads: { [i.storageId]: { heads: i.heads, timestamp: i.timestamp } } }); }), __privateGet(this, _r2).on("change-remote-subs", (i) => { __privateGet(this, _e4).call(this, "change-remote-subs", i); for (const f of i.peers) this.networkSubsystem.send({ type: "remote-subscription-change", targetId: f, add: i.add, remove: i.remove }); }), __privateGet(this, _r2).on("remote-heads-changed", ({ documentId: i, storageId: f, remoteHeads: l, timestamp: I }) => { __privateGet(this, _t4)[i].setSyncInfo(f, { lastHeads: l, lastSyncTimestamp: I }); })); } get handles() { return __privateGet(this, _t4); } get peers() { return this.synchronizer.peers; } get peerId() { return this.networkSubsystem.peerId; } get sharePolicy() { return __privateGet(this, _n4).announce; } set sharePolicy(e) { __privateGet(this, _n4).announce = e; } get shareConfig() { return __privateGet(this, _n4); } set shareConfig(e) { __privateSet(this, _n4, e); } getStorageIdOfPeer(e) { var _a2; return (_a2 = this.peerMetadataByPeerId[e]) == null ? void 0 : _a2.storageId; } create(e) { let t; e ? t = $(e) : t = A(T()); const { documentId: s } = C(L()), r = __privateMethod(this, _me_instances, c_fn).call(this, { documentId: s }); return __privateMethod(this, _me_instances, d_fn).call(this, r), r.update(() => t), r.doneLoading(), r; } async create2(e) { let t; e ? t = $(e) : t = A(T()); let { documentId: s } = C(L()); if (__privateGet(this, _u)) { const n = await __privateGet(this, _u).call(this, k(t)); s = ee(n); } const r = __privateMethod(this, _me_instances, c_fn).call(this, { documentId: s }); return __privateMethod(this, _me_instances, d_fn).call(this, r), r.update(() => t), r.doneLoading(), r; } clone(e) { if (!e.isReady()) throw new Error(`Cloned handle is not yet in ready state. (Try await handle.whenReady() first.)`); const t = e.doc(), s = this.create(); return s.update(() => j(t)), s; } findWithProgress(e, t = {}) { const { signal: s } = t, { documentId: r, heads: n } = te(e) ? C(e) : { documentId: R(e), heads: void 0 }; if (__privateGet(this, _t4)[r]) { const c = __privateGet(this, _t4)[r]; if (c.state === y) return { state: "unavailable", error: new Error(`Document ${e} is unavailable`), handle: c }; if (c.state === M) return { state: "failed", error: new Error(`Document ${e} was deleted`), handle: c }; if (c.state === v) return { state: "ready", handle: n ? c.view(n) : c }; } const o = __privateGet(this, _a)[r]; if (o) { const c = __privateGet(this, _t4)[r]; if (c && (c.state === v || c.state === y || c.state === M || c.state === "loading")) return o; } const a = __privateMethod(this, _me_instances, c_fn).call(this, { documentId: r }), u = { state: "loading", progress: 0, handle: a }, h = { subscribers: /* @__PURE__ */ new Set(), currentProgress: void 0, notify: (c) => { h.currentProgress = c, h.subscribers.forEach((b) => b(c)), __privateGet(this, _a)[r] = c; }, peek: () => h.currentProgress || u, subscribe: (c) => (h.subscribers.add(c), () => h.subscribers.delete(c)) }; h.notify(u), __privateMethod(this, _me_instances, p_fn).call(this, e, r, a, h, s ? W(new Promise(() => { }), s) : new Promise(() => { })); const p = { ...u, peek: h.peek, subscribe: h.subscribe }; return __privateGet(this, _a)[r] = p, p; } async find(e, t = {}) { const { allowableStates: s = [ "ready" ], signal: r } = t; if (r == null ? void 0 : r.aborted) throw new se(); const n = this.findWithProgress(e, { signal: r }); if ("subscribe" in n) return __privateMethod(this, _me_instances, d_fn).call(this, n.handle), new Promise((o, a) => { const u = n.subscribe((h) => { s.includes(h.handle.state) ? (u(), o(h.handle)) : h.state === "unavailable" ? (u(), a(new Error(`Document ${e} is unavailable`))) : h.state === "failed" && (u(), a(h.error)); }); }); if (n.handle.state === v) return n.handle; if (await n.handle.whenReady([ v, y ]), n.handle.state === "unavailable" && !s.includes(y)) throw new Error(`Document ${e} is unavailable`); return n.handle; } async findClassic(e, t = {}) { const s = R(e), { allowableStates: r, signal: n } = t; return W((async () => { const o = await __privateMethod(this, _me_instances, y_fn).call(this, s); if (!r && (await o.whenReady([ v, y ]), o.state === y && !(n == null ? void 0 : n.aborted))) throw new Error(`Document ${e} is unavailable`); return o; })(), n); } delete(e) { const t = R(e); __privateMethod(this, _me_instances, c_fn).call(this, { documentId: t }).delete(), delete __privateGet(this, _t4)[t], delete __privateGet(this, _a)[t], delete __privateGet(this, _h)[t], this.emit("delete-document", { documentId: t }); } async export(e) { const t = R(e), r = (await this.find(t)).doc(); return B(r); } import(e, t) { const s = t == null ? void 0 : t.docId; if (s != null) { const r = __privateMethod(this, _me_instances, c_fn).call(this, { documentId: s }); return r.update((n) => x(n, e)), __privateMethod(this, _me_instances, d_fn).call(this, r), r; } else { const r = re(e), n = this.create(); return n.update(() => j(r)), n; } } async flush(e) { if (!this.storageSubsystem) return; const t = e ? e.map((s) => __privateGet(this, _t4)[s]) : Object.values(__privateGet(this, _t4)); await Promise.all(t.map(async (s) => this.storageSubsystem.saveDoc(s.documentId, s.doc()))); } async removeFromCache(e) { if (!__privateGet(this, _t4)[e]) { __privateGet(this, _e4).call(this, `WARN: removeFromCache called but handle not found in handleCache for documentId: ${e}`); return; } const t = __privateMethod(this, _me_instances, c_fn).call(this, { documentId: e }); await t.whenReady([ v, ne, M, y ]), t.doc() ? (t.isReady() ? t.unload() : __privateGet(this, _e4).call(this, `WARN: removeFromCache called but handle for documentId: ${e} in unexpected state: ${t.state}`), delete __privateGet(this, _t4)[e], delete __privateGet(this, _a)[e], delete __privateGet(this, _h)[e], this.synchronizer.removeDocument(e)) : __privateGet(this, _e4).call(this, `WARN: removeFromCache called but doc undefined for documentId: ${e}`); } shutdown() { return this.networkSubsystem.adapters.forEach((e) => { e.disconnect(); }), this.flush(); } metrics() { return { documents: this.synchronizer.metrics() }; } shareConfigChanged() { this.synchronizer.reevaluateDocumentShare(); } } _e4 = new WeakMap(); _s4 = new WeakMap(); _o4 = new WeakMap(); _t4 = new WeakMap(); _n4 = new WeakMap(); _r2 = new WeakMap(); _i = new WeakMap(); _a = new WeakMap(); _h = new WeakMap(); _u = new WeakMap(); _me_instances = new WeakSet(); d_fn = function(e) { this.storageSubsystem && (e.listeners("heads-changed").some((s) => s === __privateGet(this, _o4)) || e.on("heads-changed", __privateGet(this, _o4))), this.synchronizer.addDocument(e); }; f_fn = function(e) { switch (e.type) { case "remote-subscription-change": __privateGet(this, _i) && __privateGet(this, _r2).handleControlMessage(e); break; case "remote-heads-changed": __privateGet(this, _i) && __privateGet(this, _r2).handleRemoteHeads(e); break; case "sync": case "request": case "ephemeral": case "doc-unavailable": this.synchronizer.receiveMessage(e).catch((t) => { console.log("error receiving message", { err: t, message: e }); }); } }; _l = new WeakMap(); m_fn = function(e) { if (!this.storageSubsystem) return; const { storageId: t, isEphemeral: s } = this.peerMetadataByPeerId[e.peerId] || {}; if (!t || s) return; let r = __privateGet(this, _l)[t]; r || (r = __privateGet(this, _l)[t] = z(({ documentId: n, syncState: o }) => { this.storageSubsystem.saveSyncState(n, t, o); }, __privateGet(this, _s4))), r(e); }; c_fn = function({ documentId: e }) { if (__privateGet(this, _t4)[e]) return __privateGet(this, _t4)[e]; if (!e) throw new Error(`Invalid documentId ${e}`); const t = new _(e); return __privateGet(this, _t4)[e] = t, t; }; p_fn = async function(e, t, s, r, n) { try { r.notify({ state: "loading", progress: 25, handle: s }); const o = await (this.storageSubsystem ? this.storageSubsystem.loadDoc(s.documentId) : Promise.resolve(null)), a = await Promise.race([ o, n ]); if (a ? (s.update(() => a), s.doneLoading(), r.notify({ state: "loading", progress: 50, handle: s })) : (await Promise.race([ this.networkSubsystem.whenReady(), n ]), s.request(), r.notify({ state: "loading", progress: 75, handle: s })), __privateMethod(this, _me_instances, d_fn).call(this, s), await Promise.race([ s.whenReady([ v, y ]), n ]), s.state === y) { const u = { state: "unavailable", handle: s }; r.notify(u); return; } if (s.state === M) throw new Error(`Document ${e} was deleted`); r.notify({ state: "ready", handle: s }); } catch (o) { r.notify({ state: "failed", error: o instanceof Error || o instanceof DOMException ? o : new Error(String(o)), handle: __privateMethod(this, _me_instances, c_fn).call(this, { documentId: t }) }); } }; y_fn = async function(e) { if (__privateGet(this, _t4)[e]) return __privateGet(this, _t4)[e]; const t = __privateMethod(this, _me_instances, c_fn).call(this, { documentId: e }), s = await (this.storageSubsystem ? this.storageSubsystem.loadDoc(t.documentId) : Promise.resolve(null)); return s ? (t.update(() => s), t.doneLoading()) : (await this.networkSubsystem.whenReady(), t.request()), __privateMethod(this, _me_instances, d_fn).call(this, t), t; }; class U extends D { constructor() { super(...arguments); __publicField(this, "peerId"); __publicField(this, "peerMetadata"); } } class pe extends U { constructor(e) { super(); __privateAdd(this, _pe_instances); __privateAdd(this, _e5); __privateAdd(this, _s5, false); __privateAdd(this, _o5, false); __privateAdd(this, _t5, () => { }); __privateAdd(this, _n5); __privateAdd(this, _r3); __privateAdd(this, _i2, []); __privateSet(this, _r3, { channelName: "broadcast", peerWaitMs: 1e3, ...e ?? {} }), __privateSet(this, _e5, new BroadcastChannel(__privateGet(this, _r3).channelName)), __privateSet(this, _n5, new Promise((t) => { __privateSet(this, _t5, () => { __privateSet(this, _o5, true), t(); }), setTimeout(() => __privateGet(this, _t5).call(this), __privateGet(this, _r3).peerWaitMs); })); } isReady() { return __privateGet(this, _o5); } whenReady() { return __privateGet(this, _n5); } connect(e, t) { this.peerId = e, this.peerMetadata = t, __privateSet(this, _s5, false), __privateGet(this, _e5).addEventListener("message", (s) => { const r = s.data; if ("targetId" in r && r.targetId !== this.peerId || __privateGet(this, _s5)) return; const { senderId: n, type: o } = r; switch (o) { case "arrive": { const { peerMetadata: a } = r; __privateGet(this, _e5).postMessage({ senderId: this.peerId, targetId: n, type: "welcome", peerMetadata: this.peerMetadata }), __privateMethod(this, _pe_instances, a_fn3).call(this, n, a); } break; case "welcome": { const { peerMetadata: a } = r; __privateMethod(this, _pe_instances, a_fn3).call(this, n, a); } break; case "leave": __privateSet(this, _i2, __privateGet(this, _i2).filter((a) => a !== n)), this.emit("peer-disconnected", { peerId: n }); break; default: if (!("data" in r)) this.emit("message", r); else { if (!r.data) throw new Error("We got a message without data, we can't send this."); const a = r.data; this.emit("message", { ...r, data: new Uint8Array(a) }); } break; } }), __privateGet(this, _e5).postMessage({ senderId: this.peerId, type: "arrive", peerMetadata: t }); } send(e) { if (__privateGet(this, _s5)) return false; "data" in e ? __privateGet(this, _e5).postMessage({ ...e, data: e.data ? e.data.buffer.slice(e.data.byteOffset, e.data.byteOffset + e.data.byteLength) : void 0 }) : __privateGet(this, _e5).postMessage(e); } disconnect() { __privateGet(this, _e5).postMessage({ senderId: this.peerId, type: "leave" }); for (const e of __privateGet(this, _i2)) this.emit("peer-disconnected", { peerId: e }); __privateSet(this, _s5, true); } } _e5 = new WeakMap(); _s5 = new WeakMap(); _o5 = new WeakMap(); _t5 = new WeakMap(); _n5 = new WeakMap(); _r3 = new WeakMap(); _i2 = new WeakMap(); _pe_instances = new WeakSet(); a_fn3 = function(e, t) { __privateGet(this, _t5).call(this), __privateGet(this, _i2).push(e), this.emit("peer-candidate", { peerId: e, peerMetadata: t }); }; class ye { constructor(e = "automerge", t = "documents") { __publicField(this, "database"); __publicField(this, "store"); __publicField(this, "dbPromise"); this.database = e, this.store = t, this.dbPromise = this.createDatabasePromise(); } createDatabasePromise() { return new Promise((e, t) => { const s = indexedDB.open(this.database, 1); s.onerror = () => { t(s.error); }, s.onupgradeneeded = (r) => { r.target.result.createObjectStore(this.store); }, s.onsuccess = (r) => { const n = r.target.result; e(n); }; }); } async load(e) { const s = (await this.dbPromise).transaction(this.store), n = s.objectStore(this.store).get(e); return new Promise((o, a) => { s.onerror = () => { a(n.error); }, n.onsuccess = (u) => { const h = u.target.result; h && typeof h == "object" && "binary" in h ? o(h.binary) : o(void 0); }; }); } async save(e, t) { const r = (await this.dbPromise).transaction(this.store, "readwrite"); return r.objectStore(this.store).put({ key: e, binary: t }, e), new Promise((o, a) => { r.onerror = () => { a(r.error); }, r.oncomplete = () => { o(); }; }); } async remove(e) { const s = (await this.dbPromise).transaction(this.store, "readwrite"); return s.objectStore(this.store).delete(e), new Promise((n, o) => { s.onerror = () => { o(s.error); }, s.oncomplete = () => { n(); }; }); } async loadRange(e) { const t = await this.dbPromise, s = e, r = [ ...e, "\uFFFF" ], n = IDBKeyRange.bound(s, r), o = t.transaction(this.store), u = o.objectStore(this.store).openCursor(n), h = []; return new Promise((p, c) => { o.onerror = () => { c(u.error); }, u.onsuccess = (b) => { const m = b.target.result; m ? (h.push({ data: m.value.binary, key: m.key }), m.continue()) : p(h); }; }); } async removeRange(e) { const t = await this.dbPromise, s = e, r = [ ...e, "\uFFFF" ], n = IDBKeyRange.bound(s, r), o = t.transaction(this.store, "readwrite"); return o.objectStore(this.store).delete(n), new Promise((u, h) => { o.onerror = () => { h(o.error); }, o.oncomplete = () => { u(); }; }); } } var w = null; typeof WebSocket < "u" ? w = WebSocket : typeof MozWebSocket < "u" ? w = MozWebSocket : typeof global < "u" ? w = global.WebSocket || global.MozWebSocket : typeof window < "u" ? w = window.WebSocket || window.MozWebSocket : typeof self < "u" && (w = self.WebSocket || self.MozWebSocket); const ge = (d) => d.type === "peer", be = (d) => d.type === "error", we = "1"; function g(d, e = "Assertion failed") { if (d === false || d === null || d === void 0) { const t = new Error(ve(e)); throw t.stack = Se(t.stack, "assert.ts"), t; } } const ve = (d) => d.split(` `).map((e) => e.trim()).join(` `), Se = (d = "", e) => d.split(` `).filter((t) => !t.includes(e)).join(` `), Ie = (d) => { const { buffer: e, byteOffset: t, byteLength: s } = d; return e.slice(t, t + s); }; class ke extends U { constructor() { super(...arguments); __publicField(this, "socket"); } } class Pe extends ke { constructor(e, t = 5e3) { super(); __privateAdd(this, _Pe_instances); __publicField(this, "url"); __publicField(this, "retryInterval"); __privateAdd(this, _e6, false); __privateAdd(this, _s6); __privateAdd(this, _o6, new Promise((e) => { __privateSet(this, _s6, e); })); __privateAdd(this, _n6); __privateAdd(this, _r4, P("automerge-repo:websocket:browser")); __publicField(this, "remotePeerId"); __publicField(this, "onOpen", () => { __privateGet(this, _r4).call(this, "open"), clearInterval(__privateGet(this, _n6)), __privateSet(this, _n6, void 0), this.join(); }); __publicField(this, "onClose", () => { __privateGet(this, _r4).call(this, "close"), this.remotePeerId && this.emit("peer-disconnected", { peerId: this.remotePeerId }), this.retryInterval > 0 && !__privateGet(this, _n6) && setTimeout(() => (g(this.peerId), this.connect(this.peerId, this.peerMetadata)), this.retryInterval); }); __publicField(this, "onMessage", (e) => { this.receiveMessage(e.data); }); __publicField(this, "onError", (e) => { if ("error" in e && e.error.code !== "ECONNREFUSED") throw e.error; __privateGet(this, _r4).call(this, "Connection failed, retrying..."); }); this.url = e, this.retryInterval = t, __privateSet(this, _r4, __privateGet(this, _r4).extend(e)); } isReady() { return __privateGet(this, _e6); } whenReady() { return __privateGet(this, _o6); } connect(e, t) { !this.socket || !this.peerId ? (__privateGet(this, _r4).call(this, "connecting"), this.peerId = e, this.peerMetadata = t ?? {}) : (__privateGet(this, _r4).call(this, "reconnecting"), g(e === this.peerId), this.socket.removeEventListener("open", this.onOpen), this.socket.removeEventListener("close", this.onClose), this.socket.removeEventListener("message", this.onMessage), this.socket.removeEventListener("error", this.onError)), __privateGet(this, _n6) || __privateSet(this, _n6, setInterval(() => { this.connect(e, t); }, this.retryInterval)), this.socket = new w(this.url), this.socket.binaryType = "arraybuffer", this.socket.addEventListener("open", this.onOpen), this.socket.addEventListener("close", this.onClose), this.socket.addEventListener("message", this.onMessage), this.socket.addEventListener("error", this.onError), setTimeout(() => __privateMethod(this, _Pe_instances, t_fn).call(this), 1e3), this.join(); } join() { g(this.peerId), g(this.socket), this.socket.readyState === w.OPEN && this.send(Ee(this.peerId, this.peerMetadata)); } disconnect() { g(this.peerId), g(this.socket); const e = this.socket; e && (e.removeEventListener("open", this.onOpen), e.removeEventListener("close", this.onClose), e.removeEventListener("message", this.onMessage), e.removeEventListener("error", this.onError), e.close()), clearInterval(__privateGet(this, _n6)), this.remotePeerId && this.emit("peer-disconnected", { peerId: this.remotePeerId }), this.socket = void 0; } send(e) { var _a2; if ("data" in e && ((_a2 = e.data) == null ? void 0 : _a2.byteLength) === 0) throw new Error("Tried to send a zero-length message"); if (g(this.peerId), !this.socket) { __privateGet(this, _r4).call(this, "Tried to send on a disconnected socket."); return; } if (this.socket.readyState !== w.OPEN) throw new Error(`Websocket not ready (${this.socket.readyState})`); const t = oe(e); this.socket.send(Ie(t)); } peerCandidate(e, t) { g(this.socket), __privateMethod(this, _Pe_instances, t_fn).call(this), this.remotePeerId = e, this.emit("peer-candidate", { peerId: e, peerMetadata: t }); } receiveMessage(e) { let t; try { t = ie(new Uint8Array(e)); } catch (s) { __privateGet(this, _r4).call(this, "error decoding message:", s); return; } if (g(this.socket), e.byteLength === 0) throw new Error("received a zero-length message"); if (ge(t)) { const { peerMetadata: s } = t; __privateGet(this, _r4).call(this, `peer: ${t.senderId}`), this.peerCandidate(t.senderId, s); } else be(t) ? __privateGet(this, _r4).call(this, `error: ${t.message}`) : this.emit("message", t); } } _e6 = new WeakMap(); _s6 = new WeakMap(); _o6 = new WeakMap(); _Pe_instances = new WeakSet(); t_fn = function() { var _a2; __privateGet(this, _e6) || (__privateSet(this, _e6, true), (_a2 = __privateGet(this, _s6)) == null ? void 0 : _a2.call(this)); }; _n6 = new WeakMap(); _r4 = new WeakMap(); function Ee(d, e) { return { type: "join", senderId: d, peerMetadata: e, supportedProtocolVersions: [ we ] }; } P("WebsocketServer"); let S = null; Re = function() { return S || (S = new me({ network: [ new Pe("wss://sync.automerge.org"), new pe() ], storage: new ye("p2p-poll-app") }), S); }; Me = function() { S && (S.shutdown(), S = null); }; }); export { __tla, Me as cleanupRepo, Re as getRepo };