@liveblocks/core 2.17.0-usrnotsettings2 → 2.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -6,7 +6,7 @@ var __export = (target, all) => {
6
6
 
7
7
  // src/version.ts
8
8
  var PKG_NAME = "@liveblocks/core";
9
- var PKG_VERSION = "2.17.0-usrnotsettings2";
9
+ var PKG_VERSION = "2.17.0";
10
10
  var PKG_FORMAT = "cjs";
11
11
 
12
12
  // src/dupe-detection.ts
@@ -181,12 +181,6 @@ function raise(msg) {
181
181
  function entries(obj) {
182
182
  return Object.entries(obj);
183
183
  }
184
- function keys(obj) {
185
- return Object.keys(obj);
186
- }
187
- function values(obj) {
188
- return Object.values(obj);
189
- }
190
184
  function mapValues(obj, mapFn) {
191
185
  const result = {};
192
186
  for (const pair of Object.entries(obj)) {
@@ -1064,9 +1058,9 @@ function urljoin(baseUrl, path, params) {
1064
1058
  }
1065
1059
  return url2.toString();
1066
1060
  }
1067
- function url(strings, ...values2) {
1061
+ function url(strings, ...values) {
1068
1062
  return strings.reduce(
1069
- (result, str, i) => result + encodeURIComponent(_nullishCoalesce(values2[i - 1], () => ( ""))) + str
1063
+ (result, str, i) => result + encodeURIComponent(_nullishCoalesce(values[i - 1], () => ( ""))) + str
1070
1064
  );
1071
1065
  }
1072
1066
 
@@ -1562,6 +1556,29 @@ function createApiClient({
1562
1556
  }
1563
1557
  );
1564
1558
  }
1559
+ async function executeContextualPrompt(options) {
1560
+ const result = await httpClient.post(
1561
+ url`/v2/c/rooms/${options.roomId}/ai/contextual-prompt`,
1562
+ await authManager.getAuthValue({
1563
+ requestedScope: "room:read",
1564
+ roomId: options.roomId
1565
+ }),
1566
+ {
1567
+ prompt: options.prompt,
1568
+ context: {
1569
+ beforeSelection: options.context.beforeSelection,
1570
+ selection: options.context.selection,
1571
+ afterSelection: options.context.afterSelection
1572
+ },
1573
+ previous: options.previous
1574
+ },
1575
+ { signal: options.signal }
1576
+ );
1577
+ if (!result || result.content.length === 0) {
1578
+ throw new Error("No content returned from server");
1579
+ }
1580
+ return result.content[0].text;
1581
+ }
1565
1582
  async function listTextVersions(options) {
1566
1583
  const result = await httpClient.get(
1567
1584
  url`/v2/c/rooms/${options.roomId}/versions`,
@@ -1711,24 +1728,9 @@ function createApiClient({
1711
1728
  await authManager.getAuthValue({ requestedScope: "comments:read" })
1712
1729
  );
1713
1730
  }
1714
- async function getUserNotificationSettings(options) {
1715
- return httpClient.get(
1716
- url`/v2/c/notification-settings`,
1717
- await authManager.getAuthValue({ requestedScope: "comments:read" }),
1718
- void 0,
1719
- { signal: _optionalChain([options, 'optionalAccess', _18 => _18.signal]) }
1720
- );
1721
- }
1722
- async function updateUserNotificationSettings(settings) {
1723
- return httpClient.post(
1724
- url`/v2/c/notification-settings`,
1725
- await authManager.getAuthValue({ requestedScope: "comments:read" }),
1726
- settings
1727
- );
1728
- }
1729
1731
  async function getUserThreads_experimental(options) {
1730
1732
  let query;
1731
- if (_optionalChain([options, 'optionalAccess', _19 => _19.query])) {
1733
+ if (_optionalChain([options, 'optionalAccess', _18 => _18.query])) {
1732
1734
  query = objectToQuery(options.query);
1733
1735
  }
1734
1736
  const PAGE_SIZE = 50;
@@ -1736,7 +1738,7 @@ function createApiClient({
1736
1738
  url`/v2/c/threads`,
1737
1739
  await authManager.getAuthValue({ requestedScope: "comments:read" }),
1738
1740
  {
1739
- cursor: _optionalChain([options, 'optionalAccess', _20 => _20.cursor]),
1741
+ cursor: _optionalChain([options, 'optionalAccess', _19 => _19.cursor]),
1740
1742
  query,
1741
1743
  limit: PAGE_SIZE
1742
1744
  }
@@ -1788,10 +1790,10 @@ function createApiClient({
1788
1790
  removeReaction,
1789
1791
  markThreadAsResolved,
1790
1792
  markThreadAsUnresolved,
1791
- markRoomInboxNotificationAsRead,
1792
1793
  // Room notifications
1793
- getNotificationSettings,
1794
+ markRoomInboxNotificationAsRead,
1794
1795
  updateNotificationSettings,
1796
+ getNotificationSettings,
1795
1797
  // Room text editor
1796
1798
  createTextMention,
1797
1799
  deleteTextMention,
@@ -1815,11 +1817,11 @@ function createApiClient({
1815
1817
  markInboxNotificationAsRead,
1816
1818
  deleteAllInboxNotifications,
1817
1819
  deleteInboxNotification,
1818
- getUserNotificationSettings,
1819
- updateUserNotificationSettings,
1820
1820
  // User threads
1821
1821
  getUserThreads_experimental,
1822
- getUserThreadsSince_experimental
1822
+ getUserThreadsSince_experimental,
1823
+ // AI
1824
+ executeContextualPrompt
1823
1825
  };
1824
1826
  }
1825
1827
  function getBearerTokenFromAuthValue(authValue) {
@@ -1863,7 +1865,7 @@ var HttpClient = class {
1863
1865
  // These headers are default, but can be overriden by custom headers
1864
1866
  "Content-Type": "application/json; charset=utf-8",
1865
1867
  // Possible header overrides
1866
- ..._optionalChain([options, 'optionalAccess', _21 => _21.headers]),
1868
+ ..._optionalChain([options, 'optionalAccess', _20 => _20.headers]),
1867
1869
  // Cannot be overriden by custom headers
1868
1870
  Authorization: `Bearer ${getBearerTokenFromAuthValue(authValue)}`,
1869
1871
  "X-LB-Client": PKG_VERSION || "dev"
@@ -2338,7 +2340,7 @@ var FSM = class {
2338
2340
  });
2339
2341
  }
2340
2342
  #getTargetFn(eventName) {
2341
- return _optionalChain([this, 'access', _22 => _22.#allowedTransitions, 'access', _23 => _23.get, 'call', _24 => _24(this.currentState), 'optionalAccess', _25 => _25.get, 'call', _26 => _26(eventName)]);
2343
+ return _optionalChain([this, 'access', _21 => _21.#allowedTransitions, 'access', _22 => _22.get, 'call', _23 => _23(this.currentState), 'optionalAccess', _24 => _24.get, 'call', _25 => _25(eventName)]);
2342
2344
  }
2343
2345
  /**
2344
2346
  * Exits the current state, and executes any necessary cleanup functions.
@@ -2355,7 +2357,7 @@ var FSM = class {
2355
2357
  this.#currentContext.allowPatching((patchableContext) => {
2356
2358
  levels = _nullishCoalesce(levels, () => ( this.#cleanupStack.length));
2357
2359
  for (let i = 0; i < levels; i++) {
2358
- _optionalChain([this, 'access', _27 => _27.#cleanupStack, 'access', _28 => _28.pop, 'call', _29 => _29(), 'optionalCall', _30 => _30(patchableContext)]);
2360
+ _optionalChain([this, 'access', _26 => _26.#cleanupStack, 'access', _27 => _27.pop, 'call', _28 => _28(), 'optionalCall', _29 => _29(patchableContext)]);
2359
2361
  }
2360
2362
  });
2361
2363
  }
@@ -2371,7 +2373,7 @@ var FSM = class {
2371
2373
  this.#currentContext.allowPatching((patchableContext) => {
2372
2374
  for (const pattern of enterPatterns) {
2373
2375
  const enterFn = this.#enterFns.get(pattern);
2374
- const cleanupFn = _optionalChain([enterFn, 'optionalCall', _31 => _31(patchableContext)]);
2376
+ const cleanupFn = _optionalChain([enterFn, 'optionalCall', _30 => _30(patchableContext)]);
2375
2377
  if (typeof cleanupFn === "function") {
2376
2378
  this.#cleanupStack.push(cleanupFn);
2377
2379
  } else {
@@ -2765,7 +2767,7 @@ function createConnectionStateMachine(delegates, options) {
2765
2767
  }
2766
2768
  function waitForActorId(event) {
2767
2769
  const serverMsg = tryParseJson(event.data);
2768
- if (_optionalChain([serverMsg, 'optionalAccess', _32 => _32.type]) === 104 /* ROOM_STATE */) {
2770
+ if (_optionalChain([serverMsg, 'optionalAccess', _31 => _31.type]) === 104 /* ROOM_STATE */) {
2769
2771
  didReceiveActor();
2770
2772
  }
2771
2773
  }
@@ -2874,12 +2876,12 @@ function createConnectionStateMachine(delegates, options) {
2874
2876
  const sendHeartbeat = {
2875
2877
  target: "@ok.awaiting-pong",
2876
2878
  effect: (ctx) => {
2877
- _optionalChain([ctx, 'access', _33 => _33.socket, 'optionalAccess', _34 => _34.send, 'call', _35 => _35("ping")]);
2879
+ _optionalChain([ctx, 'access', _32 => _32.socket, 'optionalAccess', _33 => _33.send, 'call', _34 => _34("ping")]);
2878
2880
  }
2879
2881
  };
2880
2882
  const maybeHeartbeat = () => {
2881
2883
  const doc = typeof document !== "undefined" ? document : void 0;
2882
- const canZombie = _optionalChain([doc, 'optionalAccess', _36 => _36.visibilityState]) === "hidden" && delegates.canZombie();
2884
+ const canZombie = _optionalChain([doc, 'optionalAccess', _35 => _35.visibilityState]) === "hidden" && delegates.canZombie();
2883
2885
  return canZombie ? "@idle.zombie" : sendHeartbeat;
2884
2886
  };
2885
2887
  machine.addTimedTransition("@ok.connected", HEARTBEAT_INTERVAL, maybeHeartbeat).addTransitions("@ok.connected", {
@@ -2918,7 +2920,7 @@ function createConnectionStateMachine(delegates, options) {
2918
2920
  // socket, or not. So always check to see if the socket is still OPEN or
2919
2921
  // not. When still OPEN, don't transition.
2920
2922
  EXPLICIT_SOCKET_ERROR: (_, context) => {
2921
- if (_optionalChain([context, 'access', _37 => _37.socket, 'optionalAccess', _38 => _38.readyState]) === 1) {
2923
+ if (_optionalChain([context, 'access', _36 => _36.socket, 'optionalAccess', _37 => _37.readyState]) === 1) {
2922
2924
  return null;
2923
2925
  }
2924
2926
  return {
@@ -2970,17 +2972,17 @@ function createConnectionStateMachine(delegates, options) {
2970
2972
  machine.send({ type: "NAVIGATOR_ONLINE" });
2971
2973
  }
2972
2974
  function onVisibilityChange() {
2973
- if (_optionalChain([doc, 'optionalAccess', _39 => _39.visibilityState]) === "visible") {
2975
+ if (_optionalChain([doc, 'optionalAccess', _38 => _38.visibilityState]) === "visible") {
2974
2976
  machine.send({ type: "WINDOW_GOT_FOCUS" });
2975
2977
  }
2976
2978
  }
2977
- _optionalChain([win, 'optionalAccess', _40 => _40.addEventListener, 'call', _41 => _41("online", onNetworkBackOnline)]);
2978
- _optionalChain([win, 'optionalAccess', _42 => _42.addEventListener, 'call', _43 => _43("offline", onNetworkOffline)]);
2979
- _optionalChain([root, 'optionalAccess', _44 => _44.addEventListener, 'call', _45 => _45("visibilitychange", onVisibilityChange)]);
2979
+ _optionalChain([win, 'optionalAccess', _39 => _39.addEventListener, 'call', _40 => _40("online", onNetworkBackOnline)]);
2980
+ _optionalChain([win, 'optionalAccess', _41 => _41.addEventListener, 'call', _42 => _42("offline", onNetworkOffline)]);
2981
+ _optionalChain([root, 'optionalAccess', _43 => _43.addEventListener, 'call', _44 => _44("visibilitychange", onVisibilityChange)]);
2980
2982
  return () => {
2981
- _optionalChain([root, 'optionalAccess', _46 => _46.removeEventListener, 'call', _47 => _47("visibilitychange", onVisibilityChange)]);
2982
- _optionalChain([win, 'optionalAccess', _48 => _48.removeEventListener, 'call', _49 => _49("online", onNetworkBackOnline)]);
2983
- _optionalChain([win, 'optionalAccess', _50 => _50.removeEventListener, 'call', _51 => _51("offline", onNetworkOffline)]);
2983
+ _optionalChain([root, 'optionalAccess', _45 => _45.removeEventListener, 'call', _46 => _46("visibilitychange", onVisibilityChange)]);
2984
+ _optionalChain([win, 'optionalAccess', _47 => _47.removeEventListener, 'call', _48 => _48("online", onNetworkBackOnline)]);
2985
+ _optionalChain([win, 'optionalAccess', _49 => _49.removeEventListener, 'call', _50 => _50("offline", onNetworkOffline)]);
2984
2986
  teardownSocket(ctx.socket);
2985
2987
  };
2986
2988
  });
@@ -3069,7 +3071,7 @@ var ManagedSocket = class {
3069
3071
  * message if this is somehow impossible.
3070
3072
  */
3071
3073
  send(data) {
3072
- const socket = _optionalChain([this, 'access', _52 => _52.#machine, 'access', _53 => _53.context, 'optionalAccess', _54 => _54.socket]);
3074
+ const socket = _optionalChain([this, 'access', _51 => _51.#machine, 'access', _52 => _52.context, 'optionalAccess', _53 => _53.socket]);
3073
3075
  if (socket === null) {
3074
3076
  warn("Cannot send: not connected yet", data);
3075
3077
  } else if (socket.readyState !== 1) {
@@ -3173,7 +3175,7 @@ function createAuthManager(authOptions, onAuthenticate) {
3173
3175
  return void 0;
3174
3176
  }
3175
3177
  async function makeAuthRequest(options) {
3176
- const fetcher = _nullishCoalesce(_optionalChain([authOptions, 'access', _55 => _55.polyfills, 'optionalAccess', _56 => _56.fetch]), () => ( (typeof window === "undefined" ? void 0 : window.fetch)));
3178
+ const fetcher = _nullishCoalesce(_optionalChain([authOptions, 'access', _54 => _54.polyfills, 'optionalAccess', _55 => _55.fetch]), () => ( (typeof window === "undefined" ? void 0 : window.fetch)));
3177
3179
  if (authentication.type === "private") {
3178
3180
  if (fetcher === void 0) {
3179
3181
  throw new StopRetrying(
@@ -3189,7 +3191,7 @@ function createAuthManager(authOptions, onAuthenticate) {
3189
3191
  "The same Liveblocks auth token was issued from the backend before. Caching Liveblocks tokens is not supported."
3190
3192
  );
3191
3193
  }
3192
- _optionalChain([onAuthenticate, 'optionalCall', _57 => _57(parsed.parsed)]);
3194
+ _optionalChain([onAuthenticate, 'optionalCall', _56 => _56(parsed.parsed)]);
3193
3195
  return parsed;
3194
3196
  }
3195
3197
  if (authentication.type === "custom") {
@@ -3197,7 +3199,7 @@ function createAuthManager(authOptions, onAuthenticate) {
3197
3199
  if (response && typeof response === "object") {
3198
3200
  if (typeof response.token === "string") {
3199
3201
  const parsed = parseAuthToken(response.token);
3200
- _optionalChain([onAuthenticate, 'optionalCall', _58 => _58(parsed.parsed)]);
3202
+ _optionalChain([onAuthenticate, 'optionalCall', _57 => _57(parsed.parsed)]);
3201
3203
  return parsed;
3202
3204
  } else if (typeof response.error === "string") {
3203
3205
  const reason = `Authentication failed: ${"reason" in response && typeof response.reason === "string" ? response.reason : "Forbidden"}`;
@@ -3358,7 +3360,7 @@ function sendToPanel(message, options) {
3358
3360
  ...message,
3359
3361
  source: "liveblocks-devtools-client"
3360
3362
  };
3361
- if (!(_optionalChain([options, 'optionalAccess', _59 => _59.force]) || _bridgeActive)) {
3363
+ if (!(_optionalChain([options, 'optionalAccess', _58 => _58.force]) || _bridgeActive)) {
3362
3364
  return;
3363
3365
  }
3364
3366
  window.postMessage(fullMsg, "*");
@@ -3366,7 +3368,7 @@ function sendToPanel(message, options) {
3366
3368
  var eventSource = makeEventSource();
3367
3369
  if (process.env.NODE_ENV !== "production" && typeof window !== "undefined") {
3368
3370
  window.addEventListener("message", (event) => {
3369
- if (event.source === window && _optionalChain([event, 'access', _60 => _60.data, 'optionalAccess', _61 => _61.source]) === "liveblocks-devtools-panel") {
3371
+ if (event.source === window && _optionalChain([event, 'access', _59 => _59.data, 'optionalAccess', _60 => _60.source]) === "liveblocks-devtools-panel") {
3370
3372
  eventSource.notify(event.data);
3371
3373
  } else {
3372
3374
  }
@@ -3508,7 +3510,7 @@ function fullSync(room) {
3508
3510
  msg: "room::sync::full",
3509
3511
  roomId: room.id,
3510
3512
  status: room.getStatus(),
3511
- storage: _nullishCoalesce(_optionalChain([root, 'optionalAccess', _62 => _62.toTreeNode, 'call', _63 => _63("root"), 'access', _64 => _64.payload]), () => ( null)),
3513
+ storage: _nullishCoalesce(_optionalChain([root, 'optionalAccess', _61 => _61.toTreeNode, 'call', _62 => _62("root"), 'access', _63 => _63.payload]), () => ( null)),
3512
3514
  me,
3513
3515
  others
3514
3516
  });
@@ -3932,7 +3934,7 @@ var LiveRegister = class _LiveRegister extends AbstractCrdt {
3932
3934
  return [
3933
3935
  {
3934
3936
  type: 8 /* CREATE_REGISTER */,
3935
- opId: _optionalChain([pool, 'optionalAccess', _65 => _65.generateOpId, 'call', _66 => _66()]),
3937
+ opId: _optionalChain([pool, 'optionalAccess', _64 => _64.generateOpId, 'call', _65 => _65()]),
3936
3938
  id: this._id,
3937
3939
  parentId,
3938
3940
  parentKey,
@@ -4038,7 +4040,7 @@ var LiveList = class _LiveList extends AbstractCrdt {
4038
4040
  const ops = [];
4039
4041
  const op = {
4040
4042
  id: this._id,
4041
- opId: _optionalChain([pool, 'optionalAccess', _67 => _67.generateOpId, 'call', _68 => _68()]),
4043
+ opId: _optionalChain([pool, 'optionalAccess', _66 => _66.generateOpId, 'call', _67 => _67()]),
4042
4044
  type: 2 /* CREATE_LIST */,
4043
4045
  parentId,
4044
4046
  parentKey
@@ -4309,7 +4311,7 @@ var LiveList = class _LiveList extends AbstractCrdt {
4309
4311
  #applyInsertUndoRedo(op) {
4310
4312
  const { id, parentKey: key } = op;
4311
4313
  const child = creationOpToLiveNode(op);
4312
- if (_optionalChain([this, 'access', _69 => _69._pool, 'optionalAccess', _70 => _70.getNode, 'call', _71 => _71(id)]) !== void 0) {
4314
+ if (_optionalChain([this, 'access', _68 => _68._pool, 'optionalAccess', _69 => _69.getNode, 'call', _70 => _70(id)]) !== void 0) {
4313
4315
  return { modified: false };
4314
4316
  }
4315
4317
  child._attach(id, nn(this._pool));
@@ -4317,8 +4319,8 @@ var LiveList = class _LiveList extends AbstractCrdt {
4317
4319
  const existingItemIndex = this._indexOfPosition(key);
4318
4320
  let newKey = key;
4319
4321
  if (existingItemIndex !== -1) {
4320
- const before2 = _optionalChain([this, 'access', _72 => _72.#items, 'access', _73 => _73[existingItemIndex], 'optionalAccess', _74 => _74._parentPos]);
4321
- const after2 = _optionalChain([this, 'access', _75 => _75.#items, 'access', _76 => _76[existingItemIndex + 1], 'optionalAccess', _77 => _77._parentPos]);
4322
+ const before2 = _optionalChain([this, 'access', _71 => _71.#items, 'access', _72 => _72[existingItemIndex], 'optionalAccess', _73 => _73._parentPos]);
4323
+ const after2 = _optionalChain([this, 'access', _74 => _74.#items, 'access', _75 => _75[existingItemIndex + 1], 'optionalAccess', _76 => _76._parentPos]);
4322
4324
  newKey = makePosition(before2, after2);
4323
4325
  child._setParentLink(this, newKey);
4324
4326
  }
@@ -4332,7 +4334,7 @@ var LiveList = class _LiveList extends AbstractCrdt {
4332
4334
  #applySetUndoRedo(op) {
4333
4335
  const { id, parentKey: key } = op;
4334
4336
  const child = creationOpToLiveNode(op);
4335
- if (_optionalChain([this, 'access', _78 => _78._pool, 'optionalAccess', _79 => _79.getNode, 'call', _80 => _80(id)]) !== void 0) {
4337
+ if (_optionalChain([this, 'access', _77 => _77._pool, 'optionalAccess', _78 => _78.getNode, 'call', _79 => _79(id)]) !== void 0) {
4336
4338
  return { modified: false };
4337
4339
  }
4338
4340
  this.#unacknowledgedSets.set(key, nn(op.opId));
@@ -4453,7 +4455,7 @@ var LiveList = class _LiveList extends AbstractCrdt {
4453
4455
  } else {
4454
4456
  this.#items[existingItemIndex]._setParentLink(
4455
4457
  this,
4456
- makePosition(newKey, _optionalChain([this, 'access', _81 => _81.#items, 'access', _82 => _82[existingItemIndex + 1], 'optionalAccess', _83 => _83._parentPos]))
4458
+ makePosition(newKey, _optionalChain([this, 'access', _80 => _80.#items, 'access', _81 => _81[existingItemIndex + 1], 'optionalAccess', _82 => _82._parentPos]))
4457
4459
  );
4458
4460
  const previousIndex = this.#items.indexOf(child);
4459
4461
  child._setParentLink(this, newKey);
@@ -4478,7 +4480,7 @@ var LiveList = class _LiveList extends AbstractCrdt {
4478
4480
  if (existingItemIndex !== -1) {
4479
4481
  this.#items[existingItemIndex]._setParentLink(
4480
4482
  this,
4481
- makePosition(newKey, _optionalChain([this, 'access', _84 => _84.#items, 'access', _85 => _85[existingItemIndex + 1], 'optionalAccess', _86 => _86._parentPos]))
4483
+ makePosition(newKey, _optionalChain([this, 'access', _83 => _83.#items, 'access', _84 => _84[existingItemIndex + 1], 'optionalAccess', _85 => _85._parentPos]))
4482
4484
  );
4483
4485
  }
4484
4486
  child._setParentLink(this, newKey);
@@ -4497,7 +4499,7 @@ var LiveList = class _LiveList extends AbstractCrdt {
4497
4499
  if (existingItemIndex !== -1) {
4498
4500
  this.#items[existingItemIndex]._setParentLink(
4499
4501
  this,
4500
- makePosition(newKey, _optionalChain([this, 'access', _87 => _87.#items, 'access', _88 => _88[existingItemIndex + 1], 'optionalAccess', _89 => _89._parentPos]))
4502
+ makePosition(newKey, _optionalChain([this, 'access', _86 => _86.#items, 'access', _87 => _87[existingItemIndex + 1], 'optionalAccess', _88 => _88._parentPos]))
4501
4503
  );
4502
4504
  }
4503
4505
  child._setParentLink(this, newKey);
@@ -4524,7 +4526,7 @@ var LiveList = class _LiveList extends AbstractCrdt {
4524
4526
  if (existingItemIndex !== -1) {
4525
4527
  this.#items[existingItemIndex]._setParentLink(
4526
4528
  this,
4527
- makePosition(newKey, _optionalChain([this, 'access', _90 => _90.#items, 'access', _91 => _91[existingItemIndex + 1], 'optionalAccess', _92 => _92._parentPos]))
4529
+ makePosition(newKey, _optionalChain([this, 'access', _89 => _89.#items, 'access', _90 => _90[existingItemIndex + 1], 'optionalAccess', _91 => _91._parentPos]))
4528
4530
  );
4529
4531
  }
4530
4532
  child._setParentLink(this, newKey);
@@ -4582,7 +4584,7 @@ var LiveList = class _LiveList extends AbstractCrdt {
4582
4584
  * @param element The element to add to the end of the LiveList.
4583
4585
  */
4584
4586
  push(element) {
4585
- _optionalChain([this, 'access', _93 => _93._pool, 'optionalAccess', _94 => _94.assertStorageIsWritable, 'call', _95 => _95()]);
4587
+ _optionalChain([this, 'access', _92 => _92._pool, 'optionalAccess', _93 => _93.assertStorageIsWritable, 'call', _94 => _94()]);
4586
4588
  return this.insert(element, this.length);
4587
4589
  }
4588
4590
  /**
@@ -4591,7 +4593,7 @@ var LiveList = class _LiveList extends AbstractCrdt {
4591
4593
  * @param index The index at which you want to insert the element.
4592
4594
  */
4593
4595
  insert(element, index) {
4594
- _optionalChain([this, 'access', _96 => _96._pool, 'optionalAccess', _97 => _97.assertStorageIsWritable, 'call', _98 => _98()]);
4596
+ _optionalChain([this, 'access', _95 => _95._pool, 'optionalAccess', _96 => _96.assertStorageIsWritable, 'call', _97 => _97()]);
4595
4597
  if (index < 0 || index > this.#items.length) {
4596
4598
  throw new Error(
4597
4599
  `Cannot insert list item at index "${index}". index should be between 0 and ${this.#items.length}`
@@ -4621,7 +4623,7 @@ var LiveList = class _LiveList extends AbstractCrdt {
4621
4623
  * @param targetIndex The index where the element should be after moving.
4622
4624
  */
4623
4625
  move(index, targetIndex) {
4624
- _optionalChain([this, 'access', _99 => _99._pool, 'optionalAccess', _100 => _100.assertStorageIsWritable, 'call', _101 => _101()]);
4626
+ _optionalChain([this, 'access', _98 => _98._pool, 'optionalAccess', _99 => _99.assertStorageIsWritable, 'call', _100 => _100()]);
4625
4627
  if (targetIndex < 0) {
4626
4628
  throw new Error("targetIndex cannot be less than 0");
4627
4629
  }
@@ -4679,7 +4681,7 @@ var LiveList = class _LiveList extends AbstractCrdt {
4679
4681
  * @param index The index of the element to delete
4680
4682
  */
4681
4683
  delete(index) {
4682
- _optionalChain([this, 'access', _102 => _102._pool, 'optionalAccess', _103 => _103.assertStorageIsWritable, 'call', _104 => _104()]);
4684
+ _optionalChain([this, 'access', _101 => _101._pool, 'optionalAccess', _102 => _102.assertStorageIsWritable, 'call', _103 => _103()]);
4683
4685
  if (index < 0 || index >= this.#items.length) {
4684
4686
  throw new Error(
4685
4687
  `Cannot delete list item at index "${index}". index should be between 0 and ${this.#items.length - 1}`
@@ -4712,7 +4714,7 @@ var LiveList = class _LiveList extends AbstractCrdt {
4712
4714
  }
4713
4715
  }
4714
4716
  clear() {
4715
- _optionalChain([this, 'access', _105 => _105._pool, 'optionalAccess', _106 => _106.assertStorageIsWritable, 'call', _107 => _107()]);
4717
+ _optionalChain([this, 'access', _104 => _104._pool, 'optionalAccess', _105 => _105.assertStorageIsWritable, 'call', _106 => _106()]);
4716
4718
  if (this._pool) {
4717
4719
  const ops = [];
4718
4720
  const reverseOps = [];
@@ -4746,7 +4748,7 @@ var LiveList = class _LiveList extends AbstractCrdt {
4746
4748
  }
4747
4749
  }
4748
4750
  set(index, item) {
4749
- _optionalChain([this, 'access', _108 => _108._pool, 'optionalAccess', _109 => _109.assertStorageIsWritable, 'call', _110 => _110()]);
4751
+ _optionalChain([this, 'access', _107 => _107._pool, 'optionalAccess', _108 => _108.assertStorageIsWritable, 'call', _109 => _109()]);
4750
4752
  if (index < 0 || index >= this.#items.length) {
4751
4753
  throw new Error(
4752
4754
  `Cannot set list item at index "${index}". index should be between 0 and ${this.#items.length - 1}`
@@ -4892,7 +4894,7 @@ var LiveList = class _LiveList extends AbstractCrdt {
4892
4894
  #shiftItemPosition(index, key) {
4893
4895
  const shiftedPosition = makePosition(
4894
4896
  key,
4895
- this.#items.length > index + 1 ? _optionalChain([this, 'access', _111 => _111.#items, 'access', _112 => _112[index + 1], 'optionalAccess', _113 => _113._parentPos]) : void 0
4897
+ this.#items.length > index + 1 ? _optionalChain([this, 'access', _110 => _110.#items, 'access', _111 => _111[index + 1], 'optionalAccess', _112 => _112._parentPos]) : void 0
4896
4898
  );
4897
4899
  this.#items[index]._setParentLink(this, shiftedPosition);
4898
4900
  }
@@ -5017,7 +5019,7 @@ var LiveMap = class _LiveMap extends AbstractCrdt {
5017
5019
  const ops = [];
5018
5020
  const op = {
5019
5021
  id: this._id,
5020
- opId: _optionalChain([pool, 'optionalAccess', _114 => _114.generateOpId, 'call', _115 => _115()]),
5022
+ opId: _optionalChain([pool, 'optionalAccess', _113 => _113.generateOpId, 'call', _114 => _114()]),
5021
5023
  type: 7 /* CREATE_MAP */,
5022
5024
  parentId,
5023
5025
  parentKey
@@ -5152,7 +5154,7 @@ var LiveMap = class _LiveMap extends AbstractCrdt {
5152
5154
  * @param value The value of the element to add. Should be serializable to JSON.
5153
5155
  */
5154
5156
  set(key, value) {
5155
- _optionalChain([this, 'access', _116 => _116._pool, 'optionalAccess', _117 => _117.assertStorageIsWritable, 'call', _118 => _118()]);
5157
+ _optionalChain([this, 'access', _115 => _115._pool, 'optionalAccess', _116 => _116.assertStorageIsWritable, 'call', _117 => _117()]);
5156
5158
  const oldValue = this.#map.get(key);
5157
5159
  if (oldValue) {
5158
5160
  oldValue._detach();
@@ -5198,7 +5200,7 @@ var LiveMap = class _LiveMap extends AbstractCrdt {
5198
5200
  * @returns true if an element existed and has been removed, or false if the element does not exist.
5199
5201
  */
5200
5202
  delete(key) {
5201
- _optionalChain([this, 'access', _119 => _119._pool, 'optionalAccess', _120 => _120.assertStorageIsWritable, 'call', _121 => _121()]);
5203
+ _optionalChain([this, 'access', _118 => _118._pool, 'optionalAccess', _119 => _119.assertStorageIsWritable, 'call', _120 => _120()]);
5202
5204
  const item = this.#map.get(key);
5203
5205
  if (item === void 0) {
5204
5206
  return false;
@@ -5377,7 +5379,7 @@ var LiveObject = class _LiveObject extends AbstractCrdt {
5377
5379
  if (this._id === void 0) {
5378
5380
  throw new Error("Cannot serialize item is not attached");
5379
5381
  }
5380
- const opId = _optionalChain([pool, 'optionalAccess', _122 => _122.generateOpId, 'call', _123 => _123()]);
5382
+ const opId = _optionalChain([pool, 'optionalAccess', _121 => _121.generateOpId, 'call', _122 => _122()]);
5381
5383
  const ops = [];
5382
5384
  const op = {
5383
5385
  type: 4 /* CREATE_OBJECT */,
@@ -5649,7 +5651,7 @@ var LiveObject = class _LiveObject extends AbstractCrdt {
5649
5651
  * @param value The value of the property to add
5650
5652
  */
5651
5653
  set(key, value) {
5652
- _optionalChain([this, 'access', _124 => _124._pool, 'optionalAccess', _125 => _125.assertStorageIsWritable, 'call', _126 => _126()]);
5654
+ _optionalChain([this, 'access', _123 => _123._pool, 'optionalAccess', _124 => _124.assertStorageIsWritable, 'call', _125 => _125()]);
5653
5655
  this.update({ [key]: value });
5654
5656
  }
5655
5657
  /**
@@ -5664,7 +5666,7 @@ var LiveObject = class _LiveObject extends AbstractCrdt {
5664
5666
  * @param key The key of the property to delete
5665
5667
  */
5666
5668
  delete(key) {
5667
- _optionalChain([this, 'access', _127 => _127._pool, 'optionalAccess', _128 => _128.assertStorageIsWritable, 'call', _129 => _129()]);
5669
+ _optionalChain([this, 'access', _126 => _126._pool, 'optionalAccess', _127 => _127.assertStorageIsWritable, 'call', _128 => _128()]);
5668
5670
  const keyAsString = key;
5669
5671
  const oldValue = this.#map.get(keyAsString);
5670
5672
  if (oldValue === void 0) {
@@ -5717,7 +5719,7 @@ var LiveObject = class _LiveObject extends AbstractCrdt {
5717
5719
  * @param patch The object used to overrides properties
5718
5720
  */
5719
5721
  update(patch) {
5720
- _optionalChain([this, 'access', _130 => _130._pool, 'optionalAccess', _131 => _131.assertStorageIsWritable, 'call', _132 => _132()]);
5722
+ _optionalChain([this, 'access', _129 => _129._pool, 'optionalAccess', _130 => _130.assertStorageIsWritable, 'call', _131 => _131()]);
5721
5723
  if (this._pool === void 0 || this._id === void 0) {
5722
5724
  for (const key in patch) {
5723
5725
  const newValue = patch[key];
@@ -6343,7 +6345,7 @@ function defaultMessageFromContext(context) {
6343
6345
  }
6344
6346
 
6345
6347
  // src/room.ts
6346
- var MAX_SOCKET_MESSAGE_SIZE = 1024 * 1024 - 1024;
6348
+ var MAX_SOCKET_MESSAGE_SIZE = 1024 * 1024 - 512;
6347
6349
  function makeIdFactory(connectionId) {
6348
6350
  let count = 0;
6349
6351
  return () => `${connectionId}:${count++}`;
@@ -6366,15 +6368,15 @@ function installBackgroundTabSpy() {
6366
6368
  const doc = typeof document !== "undefined" ? document : void 0;
6367
6369
  const inBackgroundSince = { current: null };
6368
6370
  function onVisibilityChange() {
6369
- if (_optionalChain([doc, 'optionalAccess', _133 => _133.visibilityState]) === "hidden") {
6371
+ if (_optionalChain([doc, 'optionalAccess', _132 => _132.visibilityState]) === "hidden") {
6370
6372
  inBackgroundSince.current = _nullishCoalesce(inBackgroundSince.current, () => ( Date.now()));
6371
6373
  } else {
6372
6374
  inBackgroundSince.current = null;
6373
6375
  }
6374
6376
  }
6375
- _optionalChain([doc, 'optionalAccess', _134 => _134.addEventListener, 'call', _135 => _135("visibilitychange", onVisibilityChange)]);
6377
+ _optionalChain([doc, 'optionalAccess', _133 => _133.addEventListener, 'call', _134 => _134("visibilitychange", onVisibilityChange)]);
6376
6378
  const unsub = () => {
6377
- _optionalChain([doc, 'optionalAccess', _136 => _136.removeEventListener, 'call', _137 => _137("visibilitychange", onVisibilityChange)]);
6379
+ _optionalChain([doc, 'optionalAccess', _135 => _135.removeEventListener, 'call', _136 => _136("visibilitychange", onVisibilityChange)]);
6378
6380
  };
6379
6381
  return [inBackgroundSince, unsub];
6380
6382
  }
@@ -6559,7 +6561,7 @@ function createRoom(options, config) {
6559
6561
  }
6560
6562
  },
6561
6563
  assertStorageIsWritable: () => {
6562
- const scopes = _optionalChain([context, 'access', _138 => _138.dynamicSessionInfoSig, 'access', _139 => _139.get, 'call', _140 => _140(), 'optionalAccess', _141 => _141.scopes]);
6564
+ const scopes = _optionalChain([context, 'access', _137 => _137.dynamicSessionInfoSig, 'access', _138 => _138.get, 'call', _139 => _139(), 'optionalAccess', _140 => _140.scopes]);
6563
6565
  if (scopes === void 0) {
6564
6566
  return;
6565
6567
  }
@@ -6612,24 +6614,88 @@ function createRoom(options, config) {
6612
6614
  async function createTextVersion() {
6613
6615
  return httpClient.createTextVersion({ roomId });
6614
6616
  }
6617
+ async function executeContextualPrompt(options2) {
6618
+ return httpClient.executeContextualPrompt({
6619
+ roomId,
6620
+ ...options2
6621
+ });
6622
+ }
6623
+ function* chunkOps(msg) {
6624
+ const { ops, ...rest } = msg;
6625
+ if (ops.length < 2) {
6626
+ throw new Error("Cannot split ops into smaller chunks");
6627
+ }
6628
+ const mid = Math.floor(ops.length / 2);
6629
+ const firstHalf = ops.slice(0, mid);
6630
+ const secondHalf = ops.slice(mid);
6631
+ for (const halfOps of [firstHalf, secondHalf]) {
6632
+ const half = { ops: halfOps, ...rest };
6633
+ const text = JSON.stringify([half]);
6634
+ if (!isTooBigForWebSocket(text)) {
6635
+ yield text;
6636
+ } else {
6637
+ yield* chunkOps(half);
6638
+ }
6639
+ }
6640
+ }
6641
+ function* chunkMessages(messages) {
6642
+ if (messages.length < 2) {
6643
+ if (messages[0].type === 201 /* UPDATE_STORAGE */) {
6644
+ yield* chunkOps(messages[0]);
6645
+ return;
6646
+ } else {
6647
+ throw new Error(
6648
+ "Cannot split into chunks smaller than the allowed message size"
6649
+ );
6650
+ }
6651
+ }
6652
+ const mid = Math.floor(messages.length / 2);
6653
+ const firstHalf = messages.slice(0, mid);
6654
+ const secondHalf = messages.slice(mid);
6655
+ for (const half of [firstHalf, secondHalf]) {
6656
+ const text = JSON.stringify(half);
6657
+ if (!isTooBigForWebSocket(text)) {
6658
+ yield text;
6659
+ } else {
6660
+ yield* chunkMessages(half);
6661
+ }
6662
+ }
6663
+ }
6664
+ function isTooBigForWebSocket(text) {
6665
+ if (text.length * 4 < MAX_SOCKET_MESSAGE_SIZE) {
6666
+ return false;
6667
+ }
6668
+ return new TextEncoder().encode(text).length >= MAX_SOCKET_MESSAGE_SIZE;
6669
+ }
6615
6670
  function sendMessages(messages) {
6616
- const serializedPayload = JSON.stringify(messages);
6617
- const nonce = _optionalChain([context, 'access', _142 => _142.dynamicSessionInfoSig, 'access', _143 => _143.get, 'call', _144 => _144(), 'optionalAccess', _145 => _145.nonce]);
6618
- if (config.unstable_fallbackToHTTP && nonce) {
6619
- const size = new TextEncoder().encode(serializedPayload).length;
6620
- if (size > MAX_SOCKET_MESSAGE_SIZE) {
6671
+ const strategy = _nullishCoalesce(config.largeMessageStrategy, () => ( "default"));
6672
+ const text = JSON.stringify(messages);
6673
+ if (!isTooBigForWebSocket(text)) {
6674
+ return managedSocket.send(text);
6675
+ }
6676
+ switch (strategy) {
6677
+ case "default": {
6678
+ error2("Message is too large for websockets, not sending. Configure largeMessageStrategy option to deal with this.");
6679
+ return;
6680
+ }
6681
+ case "split": {
6682
+ warn("Message is too large for websockets, splitting into smaller chunks");
6683
+ for (const chunk2 of chunkMessages(messages)) {
6684
+ managedSocket.send(chunk2);
6685
+ }
6686
+ return;
6687
+ }
6688
+ case "experimental-fallback-to-http": {
6689
+ warn("Message is too large for websockets, so sending over HTTP instead");
6690
+ const nonce = _nullishCoalesce(_optionalChain([context, 'access', _141 => _141.dynamicSessionInfoSig, 'access', _142 => _142.get, 'call', _143 => _143(), 'optionalAccess', _144 => _144.nonce]), () => ( raise("Session is not authorized to send message over HTTP")));
6621
6691
  void httpClient.sendMessages({ roomId, nonce, messages }).then((resp) => {
6622
6692
  if (!resp.ok && resp.status === 403) {
6623
6693
  managedSocket.reconnect();
6624
6694
  }
6625
6695
  });
6626
- warn(
6627
- "Message was too large for websockets and sent over HTTP instead"
6628
- );
6629
6696
  return;
6630
6697
  }
6631
6698
  }
6632
- managedSocket.send(serializedPayload);
6633
6699
  }
6634
6700
  const self = DerivedSignal.from(
6635
6701
  context.staticSessionInfoSig,
@@ -6672,7 +6738,7 @@ function createRoom(options, config) {
6672
6738
  } else {
6673
6739
  context.root = LiveObject._fromItems(message.items, pool);
6674
6740
  }
6675
- const canWrite = _nullishCoalesce(_optionalChain([self, 'access', _146 => _146.get, 'call', _147 => _147(), 'optionalAccess', _148 => _148.canWrite]), () => ( true));
6741
+ const canWrite = _nullishCoalesce(_optionalChain([self, 'access', _145 => _145.get, 'call', _146 => _146(), 'optionalAccess', _147 => _147.canWrite]), () => ( true));
6676
6742
  const stackSizeBefore = context.undoStack.length;
6677
6743
  for (const key in context.initialStorage) {
6678
6744
  if (context.root.get(key) === void 0) {
@@ -6875,7 +6941,7 @@ function createRoom(options, config) {
6875
6941
  }
6876
6942
  context.myPresence.patch(patch);
6877
6943
  if (context.activeBatch) {
6878
- if (_optionalChain([options2, 'optionalAccess', _149 => _149.addToHistory])) {
6944
+ if (_optionalChain([options2, 'optionalAccess', _148 => _148.addToHistory])) {
6879
6945
  context.activeBatch.reverseOps.unshift({
6880
6946
  type: "presence",
6881
6947
  data: oldValues
@@ -6884,7 +6950,7 @@ function createRoom(options, config) {
6884
6950
  context.activeBatch.updates.presence = true;
6885
6951
  } else {
6886
6952
  flushNowOrSoon();
6887
- if (_optionalChain([options2, 'optionalAccess', _150 => _150.addToHistory])) {
6953
+ if (_optionalChain([options2, 'optionalAccess', _149 => _149.addToHistory])) {
6888
6954
  addToUndoStack([{ type: "presence", data: oldValues }]);
6889
6955
  }
6890
6956
  notify({ presence: true });
@@ -7081,7 +7147,7 @@ function createRoom(options, config) {
7081
7147
  if (process.env.NODE_ENV !== "production") {
7082
7148
  const traces = /* @__PURE__ */ new Set();
7083
7149
  for (const opId of message.opIds) {
7084
- const trace = _optionalChain([context, 'access', _151 => _151.opStackTraces, 'optionalAccess', _152 => _152.get, 'call', _153 => _153(opId)]);
7150
+ const trace = _optionalChain([context, 'access', _150 => _150.opStackTraces, 'optionalAccess', _151 => _151.get, 'call', _152 => _152(opId)]);
7085
7151
  if (trace) {
7086
7152
  traces.add(trace);
7087
7153
  }
@@ -7215,7 +7281,7 @@ ${Array.from(traces).join("\n\n")}`
7215
7281
  const unacknowledgedOps = new Map(context.unacknowledgedOps);
7216
7282
  createOrUpdateRootFromMessage(message);
7217
7283
  applyAndSendOps(unacknowledgedOps);
7218
- _optionalChain([_resolveStoragePromise, 'optionalCall', _154 => _154()]);
7284
+ _optionalChain([_resolveStoragePromise, 'optionalCall', _153 => _153()]);
7219
7285
  notifyStorageStatus();
7220
7286
  eventHub.storageDidLoad.notify();
7221
7287
  }
@@ -7437,8 +7503,8 @@ ${Array.from(traces).join("\n\n")}`
7437
7503
  async function getThreads(options2) {
7438
7504
  return httpClient.getThreads({
7439
7505
  roomId,
7440
- query: _optionalChain([options2, 'optionalAccess', _155 => _155.query]),
7441
- cursor: _optionalChain([options2, 'optionalAccess', _156 => _156.cursor])
7506
+ query: _optionalChain([options2, 'optionalAccess', _154 => _154.query]),
7507
+ cursor: _optionalChain([options2, 'optionalAccess', _155 => _155.cursor])
7442
7508
  });
7443
7509
  }
7444
7510
  async function getThread(threadId) {
@@ -7539,7 +7605,7 @@ ${Array.from(traces).join("\n\n")}`
7539
7605
  function getNotificationSettings(options2) {
7540
7606
  return httpClient.getNotificationSettings({
7541
7607
  roomId,
7542
- signal: _optionalChain([options2, 'optionalAccess', _157 => _157.signal])
7608
+ signal: _optionalChain([options2, 'optionalAccess', _156 => _156.signal])
7543
7609
  });
7544
7610
  }
7545
7611
  function updateNotificationSettings(settings) {
@@ -7561,7 +7627,7 @@ ${Array.from(traces).join("\n\n")}`
7561
7627
  {
7562
7628
  [kInternal]: {
7563
7629
  get presenceBuffer() {
7564
- return deepClone(_nullishCoalesce(_optionalChain([context, 'access', _158 => _158.buffer, 'access', _159 => _159.presenceUpdates, 'optionalAccess', _160 => _160.data]), () => ( null)));
7630
+ return deepClone(_nullishCoalesce(_optionalChain([context, 'access', _157 => _157.buffer, 'access', _158 => _158.presenceUpdates, 'optionalAccess', _159 => _159.data]), () => ( null)));
7565
7631
  },
7566
7632
  // prettier-ignore
7567
7633
  get undoStack() {
@@ -7576,9 +7642,9 @@ ${Array.from(traces).join("\n\n")}`
7576
7642
  return context.yjsProvider;
7577
7643
  },
7578
7644
  setYjsProvider(newProvider) {
7579
- _optionalChain([context, 'access', _161 => _161.yjsProvider, 'optionalAccess', _162 => _162.off, 'call', _163 => _163("status", yjsStatusDidChange)]);
7645
+ _optionalChain([context, 'access', _160 => _160.yjsProvider, 'optionalAccess', _161 => _161.off, 'call', _162 => _162("status", yjsStatusDidChange)]);
7580
7646
  context.yjsProvider = newProvider;
7581
- _optionalChain([newProvider, 'optionalAccess', _164 => _164.on, 'call', _165 => _165("status", yjsStatusDidChange)]);
7647
+ _optionalChain([newProvider, 'optionalAccess', _163 => _163.on, 'call', _164 => _164("status", yjsStatusDidChange)]);
7582
7648
  context.yjsProviderDidChange.notify();
7583
7649
  },
7584
7650
  yjsProviderDidChange: context.yjsProviderDidChange.observable,
@@ -7596,6 +7662,8 @@ ${Array.from(traces).join("\n\n")}`
7596
7662
  getTextVersion,
7597
7663
  // create a version
7598
7664
  createTextVersion,
7665
+ // execute a contextual prompt
7666
+ executeContextualPrompt,
7599
7667
  // Support for the Liveblocks browser extension
7600
7668
  getSelf_forDevTools: () => selfAsTreeNode.get(),
7601
7669
  getOthers_forDevTools: () => others_forDevTools.get(),
@@ -7618,7 +7686,7 @@ ${Array.from(traces).join("\n\n")}`
7618
7686
  disconnect: () => managedSocket.disconnect(),
7619
7687
  destroy: () => {
7620
7688
  syncSourceForStorage.destroy();
7621
- _optionalChain([context, 'access', _166 => _166.yjsProvider, 'optionalAccess', _167 => _167.off, 'call', _168 => _168("status", yjsStatusDidChange)]);
7689
+ _optionalChain([context, 'access', _165 => _165.yjsProvider, 'optionalAccess', _166 => _166.off, 'call', _167 => _167("status", yjsStatusDidChange)]);
7622
7690
  syncSourceForYjs.destroy();
7623
7691
  uninstallBgTabSpy();
7624
7692
  managedSocket.destroy();
@@ -7762,7 +7830,7 @@ function makeClassicSubscribeFn(roomId, events, errorEvents) {
7762
7830
  }
7763
7831
  if (isLiveNode(first)) {
7764
7832
  const node = first;
7765
- if (_optionalChain([options, 'optionalAccess', _169 => _169.isDeep])) {
7833
+ if (_optionalChain([options, 'optionalAccess', _168 => _168.isDeep])) {
7766
7834
  const storageCallback = second;
7767
7835
  return subscribeToLiveStructureDeeply(node, storageCallback);
7768
7836
  } else {
@@ -7841,8 +7909,8 @@ function createClient(options) {
7841
7909
  const userId = token.k === "sec-legacy" /* SECRET_LEGACY */ ? token.id : token.uid;
7842
7910
  currentUserId.set(() => userId);
7843
7911
  });
7844
- const fetchPolyfill = _optionalChain([clientOptions, 'access', _170 => _170.polyfills, 'optionalAccess', _171 => _171.fetch]) || /* istanbul ignore next */
7845
- _optionalChain([globalThis, 'access', _172 => _172.fetch, 'optionalAccess', _173 => _173.bind, 'call', _174 => _174(globalThis)]);
7912
+ const fetchPolyfill = _optionalChain([clientOptions, 'access', _169 => _169.polyfills, 'optionalAccess', _170 => _170.fetch]) || /* istanbul ignore next */
7913
+ _optionalChain([globalThis, 'access', _171 => _171.fetch, 'optionalAccess', _172 => _172.bind, 'call', _173 => _173(globalThis)]);
7846
7914
  const httpClient = createApiClient({
7847
7915
  baseUrl,
7848
7916
  fetchPolyfill,
@@ -7893,14 +7961,14 @@ function createClient(options) {
7893
7961
  createSocket: makeCreateSocketDelegateForRoom(
7894
7962
  roomId,
7895
7963
  baseUrl,
7896
- _optionalChain([clientOptions, 'access', _175 => _175.polyfills, 'optionalAccess', _176 => _176.WebSocket])
7964
+ _optionalChain([clientOptions, 'access', _174 => _174.polyfills, 'optionalAccess', _175 => _175.WebSocket])
7897
7965
  ),
7898
7966
  authenticate: makeAuthDelegateForRoom(roomId, authManager)
7899
7967
  })),
7900
7968
  enableDebugLogging: clientOptions.enableDebugLogging,
7901
7969
  baseUrl,
7902
7970
  errorEventSource: liveblocksErrorSource,
7903
- unstable_fallbackToHTTP: !!clientOptions.unstable_fallbackToHTTP,
7971
+ largeMessageStrategy: _nullishCoalesce(clientOptions.largeMessageStrategy, () => ( (clientOptions.unstable_fallbackToHTTP ? "experimental-fallback-to-http" : void 0))),
7904
7972
  unstable_streamData: !!clientOptions.unstable_streamData,
7905
7973
  roomHttpClient: httpClient,
7906
7974
  createSyncSource
@@ -7916,7 +7984,7 @@ function createClient(options) {
7916
7984
  const shouldConnect = _nullishCoalesce(options2.autoConnect, () => ( true));
7917
7985
  if (shouldConnect) {
7918
7986
  if (typeof atob === "undefined") {
7919
- if (_optionalChain([clientOptions, 'access', _177 => _177.polyfills, 'optionalAccess', _178 => _178.atob]) === void 0) {
7987
+ if (_optionalChain([clientOptions, 'access', _176 => _176.polyfills, 'optionalAccess', _177 => _177.atob]) === void 0) {
7920
7988
  throw new Error(
7921
7989
  "You need to polyfill atob to use the client in your environment. Please follow the instructions at https://liveblocks.io/docs/errors/liveblocks-client/atob-polyfill"
7922
7990
  );
@@ -7928,7 +7996,7 @@ function createClient(options) {
7928
7996
  return leaseRoom(newRoomDetails);
7929
7997
  }
7930
7998
  function getRoom(roomId) {
7931
- const room = _optionalChain([roomsById, 'access', _179 => _179.get, 'call', _180 => _180(roomId), 'optionalAccess', _181 => _181.room]);
7999
+ const room = _optionalChain([roomsById, 'access', _178 => _178.get, 'call', _179 => _179(roomId), 'optionalAccess', _180 => _180.room]);
7932
8000
  return room ? room : null;
7933
8001
  }
7934
8002
  function logout() {
@@ -7948,7 +8016,7 @@ function createClient(options) {
7948
8016
  const batchedResolveUsers = new Batch(
7949
8017
  async (batchedUserIds) => {
7950
8018
  const userIds = batchedUserIds.flat();
7951
- const users = await _optionalChain([resolveUsers, 'optionalCall', _182 => _182({ userIds })]);
8019
+ const users = await _optionalChain([resolveUsers, 'optionalCall', _181 => _181({ userIds })]);
7952
8020
  warnIfNoResolveUsers();
7953
8021
  return _nullishCoalesce(users, () => ( userIds.map(() => void 0)));
7954
8022
  },
@@ -7966,7 +8034,7 @@ function createClient(options) {
7966
8034
  const batchedResolveRoomsInfo = new Batch(
7967
8035
  async (batchedRoomIds) => {
7968
8036
  const roomIds = batchedRoomIds.flat();
7969
- const roomsInfo = await _optionalChain([resolveRoomsInfo, 'optionalCall', _183 => _183({ roomIds })]);
8037
+ const roomsInfo = await _optionalChain([resolveRoomsInfo, 'optionalCall', _182 => _182({ roomIds })]);
7970
8038
  warnIfNoResolveRoomsInfo();
7971
8039
  return _nullishCoalesce(roomsInfo, () => ( roomIds.map(() => void 0)));
7972
8040
  },
@@ -8019,7 +8087,7 @@ function createClient(options) {
8019
8087
  }
8020
8088
  };
8021
8089
  const win = typeof window !== "undefined" ? window : void 0;
8022
- _optionalChain([win, 'optionalAccess', _184 => _184.addEventListener, 'call', _185 => _185("beforeunload", maybePreventClose)]);
8090
+ _optionalChain([win, 'optionalAccess', _183 => _183.addEventListener, 'call', _184 => _184("beforeunload", maybePreventClose)]);
8023
8091
  }
8024
8092
  const client = Object.defineProperty(
8025
8093
  {
@@ -8034,9 +8102,6 @@ function createClient(options) {
8034
8102
  markInboxNotificationAsRead: httpClient.markInboxNotificationAsRead,
8035
8103
  deleteAllInboxNotifications: httpClient.deleteAllInboxNotifications,
8036
8104
  deleteInboxNotification: httpClient.deleteInboxNotification,
8037
- // Public channel notification settings API
8038
- getNotificationSettings: httpClient.getUserNotificationSettings,
8039
- updateNotificationSettings: httpClient.updateUserNotificationSettings,
8040
8105
  // Advanced resolvers APIs
8041
8106
  resolvers: {
8042
8107
  invalidateUsers: invalidateResolvedUsers,
@@ -8147,7 +8212,7 @@ var commentBodyElementsTypes = {
8147
8212
  mention: "inline"
8148
8213
  };
8149
8214
  function traverseCommentBody(body, elementOrVisitor, possiblyVisitor) {
8150
- if (!body || !_optionalChain([body, 'optionalAccess', _186 => _186.content])) {
8215
+ if (!body || !_optionalChain([body, 'optionalAccess', _185 => _185.content])) {
8151
8216
  return;
8152
8217
  }
8153
8218
  const element = typeof elementOrVisitor === "string" ? elementOrVisitor : void 0;
@@ -8157,13 +8222,13 @@ function traverseCommentBody(body, elementOrVisitor, possiblyVisitor) {
8157
8222
  for (const block of body.content) {
8158
8223
  if (type === "all" || type === "block") {
8159
8224
  if (guard(block)) {
8160
- _optionalChain([visitor, 'optionalCall', _187 => _187(block)]);
8225
+ _optionalChain([visitor, 'optionalCall', _186 => _186(block)]);
8161
8226
  }
8162
8227
  }
8163
8228
  if (type === "all" || type === "inline") {
8164
8229
  for (const inline of block.children) {
8165
8230
  if (guard(inline)) {
8166
- _optionalChain([visitor, 'optionalCall', _188 => _188(inline)]);
8231
+ _optionalChain([visitor, 'optionalCall', _187 => _187(inline)]);
8167
8232
  }
8168
8233
  }
8169
8234
  }
@@ -8188,7 +8253,7 @@ async function resolveUsersInCommentBody(body, resolveUsers) {
8188
8253
  userIds
8189
8254
  });
8190
8255
  for (const [index, userId] of userIds.entries()) {
8191
- const user = _optionalChain([users, 'optionalAccess', _189 => _189[index]]);
8256
+ const user = _optionalChain([users, 'optionalAccess', _188 => _188[index]]);
8192
8257
  if (user) {
8193
8258
  resolvedUsers.set(userId, user);
8194
8259
  }
@@ -8233,9 +8298,9 @@ function escapeHtml(value) {
8233
8298
  var HtmlSafeString = class {
8234
8299
  #strings;
8235
8300
  #values;
8236
- constructor(strings, values2) {
8301
+ constructor(strings, values) {
8237
8302
  this.#strings = strings;
8238
- this.#values = values2;
8303
+ this.#values = values;
8239
8304
  }
8240
8305
  toString() {
8241
8306
  return this.#strings.reduce((result, str, i) => {
@@ -8243,8 +8308,8 @@ var HtmlSafeString = class {
8243
8308
  });
8244
8309
  }
8245
8310
  };
8246
- function html(strings, ...values2) {
8247
- return new HtmlSafeString(strings, values2);
8311
+ function html(strings, ...values) {
8312
+ return new HtmlSafeString(strings, values);
8248
8313
  }
8249
8314
  var markdownEscapables = {
8250
8315
  _: "\\_",
@@ -8289,9 +8354,9 @@ function escapeMarkdown(value) {
8289
8354
  var MarkdownSafeString = class {
8290
8355
  #strings;
8291
8356
  #values;
8292
- constructor(strings, values2) {
8357
+ constructor(strings, values) {
8293
8358
  this.#strings = strings;
8294
- this.#values = values2;
8359
+ this.#values = values;
8295
8360
  }
8296
8361
  toString() {
8297
8362
  return this.#strings.reduce((result, str, i) => {
@@ -8299,8 +8364,8 @@ var MarkdownSafeString = class {
8299
8364
  });
8300
8365
  }
8301
8366
  };
8302
- function markdown(strings, ...values2) {
8303
- return new MarkdownSafeString(strings, values2);
8367
+ function markdown(strings, ...values) {
8368
+ return new MarkdownSafeString(strings, values);
8304
8369
  }
8305
8370
  function toAbsoluteUrl(url2) {
8306
8371
  if (url2.startsWith("http://") || url2.startsWith("https://")) {
@@ -8315,7 +8380,7 @@ var stringifyCommentBodyPlainElements = {
8315
8380
  text: ({ element }) => element.text,
8316
8381
  link: ({ element }) => _nullishCoalesce(element.text, () => ( element.url)),
8317
8382
  mention: ({ element, user }) => {
8318
- return `@${_nullishCoalesce(_optionalChain([user, 'optionalAccess', _190 => _190.name]), () => ( element.id))}`;
8383
+ return `@${_nullishCoalesce(_optionalChain([user, 'optionalAccess', _189 => _189.name]), () => ( element.id))}`;
8319
8384
  }
8320
8385
  };
8321
8386
  var stringifyCommentBodyHtmlElements = {
@@ -8345,7 +8410,7 @@ var stringifyCommentBodyHtmlElements = {
8345
8410
  return html`<a href="${href}" target="_blank" rel="noopener noreferrer">${_nullishCoalesce(element.text, () => ( element.url))}</a>`;
8346
8411
  },
8347
8412
  mention: ({ element, user }) => {
8348
- return html`<span data-mention>@${_nullishCoalesce(_optionalChain([user, 'optionalAccess', _191 => _191.name]), () => ( element.id))}</span>`;
8413
+ return html`<span data-mention>@${_nullishCoalesce(_optionalChain([user, 'optionalAccess', _190 => _190.name]), () => ( element.id))}</span>`;
8349
8414
  }
8350
8415
  };
8351
8416
  var stringifyCommentBodyMarkdownElements = {
@@ -8375,19 +8440,19 @@ var stringifyCommentBodyMarkdownElements = {
8375
8440
  return markdown`[${_nullishCoalesce(element.text, () => ( element.url))}](${href})`;
8376
8441
  },
8377
8442
  mention: ({ element, user }) => {
8378
- return markdown`@${_nullishCoalesce(_optionalChain([user, 'optionalAccess', _192 => _192.name]), () => ( element.id))}`;
8443
+ return markdown`@${_nullishCoalesce(_optionalChain([user, 'optionalAccess', _191 => _191.name]), () => ( element.id))}`;
8379
8444
  }
8380
8445
  };
8381
8446
  async function stringifyCommentBody(body, options) {
8382
- const format = _nullishCoalesce(_optionalChain([options, 'optionalAccess', _193 => _193.format]), () => ( "plain"));
8383
- const separator = _nullishCoalesce(_optionalChain([options, 'optionalAccess', _194 => _194.separator]), () => ( (format === "markdown" ? "\n\n" : "\n")));
8447
+ const format = _nullishCoalesce(_optionalChain([options, 'optionalAccess', _192 => _192.format]), () => ( "plain"));
8448
+ const separator = _nullishCoalesce(_optionalChain([options, 'optionalAccess', _193 => _193.separator]), () => ( (format === "markdown" ? "\n\n" : "\n")));
8384
8449
  const elements = {
8385
8450
  ...format === "html" ? stringifyCommentBodyHtmlElements : format === "markdown" ? stringifyCommentBodyMarkdownElements : stringifyCommentBodyPlainElements,
8386
- ..._optionalChain([options, 'optionalAccess', _195 => _195.elements])
8451
+ ..._optionalChain([options, 'optionalAccess', _194 => _194.elements])
8387
8452
  };
8388
8453
  const resolvedUsers = await resolveUsersInCommentBody(
8389
8454
  body,
8390
- _optionalChain([options, 'optionalAccess', _196 => _196.resolveUsers])
8455
+ _optionalChain([options, 'optionalAccess', _195 => _195.resolveUsers])
8391
8456
  );
8392
8457
  const blocks = body.content.flatMap((block, blockIndex) => {
8393
8458
  switch (block.type) {
@@ -8678,12 +8743,12 @@ function legacy_patchImmutableNode(state, path, update) {
8678
8743
  }
8679
8744
  const newState = Object.assign({}, state);
8680
8745
  for (const key in update.updates) {
8681
- if (_optionalChain([update, 'access', _197 => _197.updates, 'access', _198 => _198[key], 'optionalAccess', _199 => _199.type]) === "update") {
8746
+ if (_optionalChain([update, 'access', _196 => _196.updates, 'access', _197 => _197[key], 'optionalAccess', _198 => _198.type]) === "update") {
8682
8747
  const val = update.node.get(key);
8683
8748
  if (val !== void 0) {
8684
8749
  newState[key] = lsonToJson(val);
8685
8750
  }
8686
- } else if (_optionalChain([update, 'access', _200 => _200.updates, 'access', _201 => _201[key], 'optionalAccess', _202 => _202.type]) === "delete") {
8751
+ } else if (_optionalChain([update, 'access', _199 => _199.updates, 'access', _200 => _200[key], 'optionalAccess', _201 => _201.type]) === "delete") {
8687
8752
  delete newState[key];
8688
8753
  }
8689
8754
  }
@@ -8744,12 +8809,12 @@ function legacy_patchImmutableNode(state, path, update) {
8744
8809
  }
8745
8810
  const newState = Object.assign({}, state);
8746
8811
  for (const key in update.updates) {
8747
- if (_optionalChain([update, 'access', _203 => _203.updates, 'access', _204 => _204[key], 'optionalAccess', _205 => _205.type]) === "update") {
8812
+ if (_optionalChain([update, 'access', _202 => _202.updates, 'access', _203 => _203[key], 'optionalAccess', _204 => _204.type]) === "update") {
8748
8813
  const value = update.node.get(key);
8749
8814
  if (value !== void 0) {
8750
8815
  newState[key] = lsonToJson(value);
8751
8816
  }
8752
- } else if (_optionalChain([update, 'access', _206 => _206.updates, 'access', _207 => _207[key], 'optionalAccess', _208 => _208.type]) === "delete") {
8817
+ } else if (_optionalChain([update, 'access', _205 => _205.updates, 'access', _206 => _206[key], 'optionalAccess', _207 => _207.type]) === "delete") {
8753
8818
  delete newState[key];
8754
8819
  }
8755
8820
  }
@@ -8820,9 +8885,9 @@ function makePoller(callback, intervalMs, options) {
8820
8885
  const startTime = performance.now();
8821
8886
  const doc = typeof document !== "undefined" ? document : void 0;
8822
8887
  const win = typeof window !== "undefined" ? window : void 0;
8823
- const maxStaleTimeMs = _nullishCoalesce(_optionalChain([options, 'optionalAccess', _209 => _209.maxStaleTimeMs]), () => ( Number.POSITIVE_INFINITY));
8888
+ const maxStaleTimeMs = _nullishCoalesce(_optionalChain([options, 'optionalAccess', _208 => _208.maxStaleTimeMs]), () => ( Number.POSITIVE_INFINITY));
8824
8889
  const context = {
8825
- inForeground: _optionalChain([doc, 'optionalAccess', _210 => _210.visibilityState]) !== "hidden",
8890
+ inForeground: _optionalChain([doc, 'optionalAccess', _209 => _209.visibilityState]) !== "hidden",
8826
8891
  lastSuccessfulPollAt: startTime,
8827
8892
  count: 0,
8828
8893
  backoff: 0
@@ -8900,11 +8965,11 @@ function makePoller(callback, intervalMs, options) {
8900
8965
  pollNowIfStale();
8901
8966
  }
8902
8967
  function onVisibilityChange() {
8903
- setInForeground(_optionalChain([doc, 'optionalAccess', _211 => _211.visibilityState]) !== "hidden");
8968
+ setInForeground(_optionalChain([doc, 'optionalAccess', _210 => _210.visibilityState]) !== "hidden");
8904
8969
  }
8905
- _optionalChain([doc, 'optionalAccess', _212 => _212.addEventListener, 'call', _213 => _213("visibilitychange", onVisibilityChange)]);
8906
- _optionalChain([win, 'optionalAccess', _214 => _214.addEventListener, 'call', _215 => _215("online", onVisibilityChange)]);
8907
- _optionalChain([win, 'optionalAccess', _216 => _216.addEventListener, 'call', _217 => _217("focus", pollNowIfStale)]);
8970
+ _optionalChain([doc, 'optionalAccess', _211 => _211.addEventListener, 'call', _212 => _212("visibilitychange", onVisibilityChange)]);
8971
+ _optionalChain([win, 'optionalAccess', _213 => _213.addEventListener, 'call', _214 => _214("online", onVisibilityChange)]);
8972
+ _optionalChain([win, 'optionalAccess', _215 => _215.addEventListener, 'call', _216 => _216("focus", pollNowIfStale)]);
8908
8973
  fsm.start();
8909
8974
  return {
8910
8975
  inc,
@@ -9026,11 +9091,6 @@ var SortedList = class _SortedList {
9026
9091
  }
9027
9092
  };
9028
9093
 
9029
- // src/protocol/UserNotificationSettings.ts
9030
- function isNotificationChannelEnabled(settings) {
9031
- return values(settings).every((enabled) => enabled === true);
9032
- }
9033
-
9034
9094
  // src/types/Others.ts
9035
9095
  var TextEditorType = /* @__PURE__ */ ((TextEditorType2) => {
9036
9096
  TextEditorType2["Lexical"] = "lexical";
@@ -9128,8 +9188,5 @@ var NotificationsApiError = HttpError;
9128
9188
 
9129
9189
 
9130
9190
 
9131
-
9132
-
9133
-
9134
- exports.ClientMsgCode = ClientMsgCode; exports.CommentsApiError = CommentsApiError; exports.CrdtType = CrdtType; exports.DefaultMap = DefaultMap; exports.DerivedSignal = DerivedSignal; exports.HttpError = HttpError; exports.LiveList = LiveList; exports.LiveMap = LiveMap; exports.LiveObject = LiveObject; exports.LiveblocksError = LiveblocksError; exports.MutableSignal = MutableSignal; exports.NotificationsApiError = NotificationsApiError; exports.OpCode = OpCode; exports.Permission = Permission; exports.Promise_withResolvers = Promise_withResolvers; exports.ServerMsgCode = ServerMsgCode; exports.Signal = Signal; exports.SortedList = SortedList; exports.TextEditorType = TextEditorType; exports.WebsocketCloseCodes = WebsocketCloseCodes; exports.ackOp = ackOp; exports.asPos = asPos; exports.assert = assert; exports.assertNever = assertNever; exports.autoRetry = autoRetry; exports.b64decode = b64decode; exports.batch = batch; exports.chunk = chunk; exports.cloneLson = cloneLson; exports.compactObject = compactObject; exports.console = fancy_console_exports; exports.convertToCommentData = convertToCommentData; exports.convertToCommentUserReaction = convertToCommentUserReaction; exports.convertToInboxNotificationData = convertToInboxNotificationData; exports.convertToThreadData = convertToThreadData; exports.createClient = createClient; exports.createCommentAttachmentId = createCommentAttachmentId; exports.createCommentId = createCommentId; exports.createInboxNotificationId = createInboxNotificationId; exports.createThreadId = createThreadId; exports.deprecate = deprecate; exports.deprecateIf = deprecateIf; exports.detectDupes = detectDupes; exports.entries = entries; exports.errorIf = errorIf; exports.freeze = freeze; exports.generateCommentUrl = generateCommentUrl; exports.getMentionedIdsFromCommentBody = getMentionedIdsFromCommentBody; exports.html = html; exports.htmlSafe = htmlSafe; exports.isChildCrdt = isChildCrdt; exports.isCommentBodyLink = isCommentBodyLink; exports.isCommentBodyMention = isCommentBodyMention; exports.isCommentBodyText = isCommentBodyText; exports.isJsonArray = isJsonArray; exports.isJsonObject = isJsonObject; exports.isJsonScalar = isJsonScalar; exports.isLiveNode = isLiveNode; exports.isNotificationChannelEnabled = isNotificationChannelEnabled; exports.isPlainObject = isPlainObject; exports.isRootCrdt = isRootCrdt; exports.isStartsWithOperator = isStartsWithOperator; exports.kInternal = kInternal; exports.keys = keys; exports.legacy_patchImmutableObject = legacy_patchImmutableObject; exports.lsonToJson = lsonToJson; exports.makeEventSource = makeEventSource; exports.makePoller = makePoller; exports.makePosition = makePosition; exports.mapValues = mapValues; exports.memoizeOnSuccess = memoizeOnSuccess; exports.nanoid = nanoid; exports.nn = nn; exports.objectToQuery = objectToQuery; exports.patchLiveObjectKey = patchLiveObjectKey; exports.raise = raise; exports.resolveUsersInCommentBody = resolveUsersInCommentBody; exports.shallow = shallow; exports.stringify = stringify; exports.stringifyCommentBody = stringifyCommentBody; exports.throwUsageError = throwUsageError; exports.toAbsoluteUrl = toAbsoluteUrl; exports.toPlainLson = toPlainLson; exports.tryParseJson = tryParseJson; exports.url = url; exports.urljoin = urljoin; exports.wait = wait; exports.withTimeout = withTimeout;
9191
+ exports.ClientMsgCode = ClientMsgCode; exports.CommentsApiError = CommentsApiError; exports.CrdtType = CrdtType; exports.DefaultMap = DefaultMap; exports.DerivedSignal = DerivedSignal; exports.HttpError = HttpError; exports.LiveList = LiveList; exports.LiveMap = LiveMap; exports.LiveObject = LiveObject; exports.LiveblocksError = LiveblocksError; exports.MutableSignal = MutableSignal; exports.NotificationsApiError = NotificationsApiError; exports.OpCode = OpCode; exports.Permission = Permission; exports.Promise_withResolvers = Promise_withResolvers; exports.ServerMsgCode = ServerMsgCode; exports.Signal = Signal; exports.SortedList = SortedList; exports.TextEditorType = TextEditorType; exports.WebsocketCloseCodes = WebsocketCloseCodes; exports.ackOp = ackOp; exports.asPos = asPos; exports.assert = assert; exports.assertNever = assertNever; exports.autoRetry = autoRetry; exports.b64decode = b64decode; exports.batch = batch; exports.chunk = chunk; exports.cloneLson = cloneLson; exports.compactObject = compactObject; exports.console = fancy_console_exports; exports.convertToCommentData = convertToCommentData; exports.convertToCommentUserReaction = convertToCommentUserReaction; exports.convertToInboxNotificationData = convertToInboxNotificationData; exports.convertToThreadData = convertToThreadData; exports.createClient = createClient; exports.createCommentAttachmentId = createCommentAttachmentId; exports.createCommentId = createCommentId; exports.createInboxNotificationId = createInboxNotificationId; exports.createThreadId = createThreadId; exports.deprecate = deprecate; exports.deprecateIf = deprecateIf; exports.detectDupes = detectDupes; exports.errorIf = errorIf; exports.freeze = freeze; exports.generateCommentUrl = generateCommentUrl; exports.getMentionedIdsFromCommentBody = getMentionedIdsFromCommentBody; exports.html = html; exports.htmlSafe = htmlSafe; exports.isChildCrdt = isChildCrdt; exports.isCommentBodyLink = isCommentBodyLink; exports.isCommentBodyMention = isCommentBodyMention; exports.isCommentBodyText = isCommentBodyText; exports.isJsonArray = isJsonArray; exports.isJsonObject = isJsonObject; exports.isJsonScalar = isJsonScalar; exports.isLiveNode = isLiveNode; exports.isPlainObject = isPlainObject; exports.isRootCrdt = isRootCrdt; exports.isStartsWithOperator = isStartsWithOperator; exports.kInternal = kInternal; exports.legacy_patchImmutableObject = legacy_patchImmutableObject; exports.lsonToJson = lsonToJson; exports.makeEventSource = makeEventSource; exports.makePoller = makePoller; exports.makePosition = makePosition; exports.mapValues = mapValues; exports.memoizeOnSuccess = memoizeOnSuccess; exports.nanoid = nanoid; exports.nn = nn; exports.objectToQuery = objectToQuery; exports.patchLiveObjectKey = patchLiveObjectKey; exports.raise = raise; exports.resolveUsersInCommentBody = resolveUsersInCommentBody; exports.shallow = shallow; exports.stringify = stringify; exports.stringifyCommentBody = stringifyCommentBody; exports.throwUsageError = throwUsageError; exports.toAbsoluteUrl = toAbsoluteUrl; exports.toPlainLson = toPlainLson; exports.tryParseJson = tryParseJson; exports.url = url; exports.urljoin = urljoin; exports.wait = wait; exports.withTimeout = withTimeout;
9135
9192
  //# sourceMappingURL=index.js.map