@liveblocks/core 3.20.0-perm5 → 3.20.0-perm7

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.cjs 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 = "3.20.0-perm5";
9
+ var PKG_VERSION = "3.20.0-perm7";
10
10
  var PKG_FORMAT = "cjs";
11
11
 
12
12
  // src/dupe-detection.ts
@@ -5167,7 +5167,7 @@ function createReceivingToolInvocation(invocationId, name, partialArgsText = "")
5167
5167
  };
5168
5168
  }
5169
5169
 
5170
- // src/protocol/Permissions.ts
5170
+ // src/permissions.ts
5171
5171
  var Permission = {
5172
5172
  /**
5173
5173
  * Default permission for a room.
@@ -5202,24 +5202,13 @@ var Permission = {
5202
5202
  */
5203
5203
  LegacyRoomPresenceWrite: "room:presence:write"
5204
5204
  };
5205
- var ACCESS_LEVELS = [
5206
- "none",
5207
- "read",
5208
- "write"
5209
- ];
5210
- var ACCESS_RANKS = {
5205
+ var ACCESS_LEVELS = ["none", "read", "write"];
5206
+ var ACCESS_LEVEL_RANKS = {
5211
5207
  none: 0,
5212
5208
  read: 1,
5213
5209
  write: 2
5214
5210
  };
5215
- var NO_PERMISSION_MATRIX = {
5216
- room: "none",
5217
- storage: "none",
5218
- comments: "none",
5219
- feeds: "none",
5220
- personal: "write"
5221
- };
5222
- var RESOURCE_PERMISSIONS = {
5211
+ var PERMISSIONS_BY_RESOURCE = {
5223
5212
  room: {
5224
5213
  read: [Permission.Read, Permission.RoomRead],
5225
5214
  write: [Permission.Write, Permission.RoomWrite]
@@ -5243,14 +5232,25 @@ var RESOURCE_PERMISSIONS = {
5243
5232
  none: [Permission.FeedsNone]
5244
5233
  }
5245
5234
  };
5246
- var DEFAULT_PERMISSION_RESOURCE = "room";
5235
+ var NO_PERMISSION_MATRIX = {
5236
+ room: "none",
5237
+ storage: "none",
5238
+ comments: "none",
5239
+ feeds: "none",
5240
+ personal: "none"
5241
+ };
5242
+ var BASE_PERMISSION_RESOURCE = "room";
5247
5243
  var ROOM_PERMISSION_RESOURCES = [
5248
5244
  "storage",
5249
5245
  "comments",
5250
5246
  "feeds"
5251
5247
  ];
5248
+ var VALID_PERMISSIONS = new Set(Object.values(Permission));
5249
+ function isPermission(permission) {
5250
+ return VALID_PERMISSIONS.has(permission);
5251
+ }
5252
5252
  function resolveResourceAccess(scopes, resource) {
5253
- const permissions = RESOURCE_PERMISSIONS[resource];
5253
+ const permissions = PERMISSIONS_BY_RESOURCE[resource];
5254
5254
  let resourceAccess;
5255
5255
  for (const access of ACCESS_LEVELS) {
5256
5256
  const scopedPermissions = permissions[access];
@@ -5260,13 +5260,14 @@ function resolveResourceAccess(scopes, resource) {
5260
5260
  }
5261
5261
  return resourceAccess;
5262
5262
  }
5263
- function resolveFullPermissionMatrix(resolved) {
5263
+ function permissionMatrixFromResolvedScopes(resolved) {
5264
5264
  if (!resolved.hasDefaultPermission) {
5265
- return NO_PERMISSION_MATRIX;
5265
+ return { ...NO_PERMISSION_MATRIX };
5266
5266
  }
5267
5267
  const matrix = {
5268
5268
  ...NO_PERMISSION_MATRIX,
5269
- [DEFAULT_PERMISSION_RESOURCE]: resolved.baseAccess
5269
+ [BASE_PERMISSION_RESOURCE]: resolved.baseAccess,
5270
+ personal: "write"
5270
5271
  };
5271
5272
  for (const resource of ROOM_PERMISSION_RESOURCES) {
5272
5273
  matrix[resource] = _nullishCoalesce(resolved.matrix[resource], () => ( resolved.baseAccess));
@@ -5274,9 +5275,9 @@ function resolveFullPermissionMatrix(resolved) {
5274
5275
  return matrix;
5275
5276
  }
5276
5277
  function permissionMatrixFromScopes(scopes) {
5277
- return resolveFullPermissionMatrix(resolvePermissionMatrix(scopes));
5278
+ return permissionMatrixFromResolvedScopes(resolvePermissionScopes(scopes));
5278
5279
  }
5279
- function resolvePermissionMatrix(scopes) {
5280
+ function resolvePermissionScopes(scopes) {
5280
5281
  const hasDefaultPermission = scopes.includes(Permission.Write) || scopes.includes(Permission.Read) || scopes.includes(Permission.RoomWrite) || scopes.includes(Permission.RoomRead);
5281
5282
  const baseAccess = scopes.includes(Permission.Write) || scopes.includes(Permission.RoomWrite) ? "write" : scopes.includes(Permission.Read) || scopes.includes(Permission.RoomRead) ? "read" : "none";
5282
5283
  const matrix = {};
@@ -5288,26 +5289,9 @@ function resolvePermissionMatrix(scopes) {
5288
5289
  }
5289
5290
  return { hasDefaultPermission, baseAccess, matrix };
5290
5291
  }
5291
- function hasPermissionAccess(source, resource, requiredAccess) {
5292
- const matrix = isPermissionScopes(source) ? permissionMatrixFromScopes(source) : source;
5292
+ function hasPermissionAccess(matrix, resource, requiredAccess) {
5293
5293
  const access = _nullishCoalesce(matrix[resource], () => ( "none"));
5294
- return ACCESS_RANKS[access] >= ACCESS_RANKS[requiredAccess];
5295
- }
5296
- function isPermissionScopes(source) {
5297
- return Array.isArray(source);
5298
- }
5299
-
5300
- // src/permissions.ts
5301
- var VALID_PERMISSIONS = new Set(Object.values(Permission));
5302
- function permissionForAccessLevel(resource, access, field = resource) {
5303
- const levels = RESOURCE_PERMISSIONS[resource];
5304
- const permissions = levels[access];
5305
- if (permissions === void 0 || permissions.length === 0) {
5306
- throw new Error(
5307
- `Invalid permission level for ${field}: ${_nullishCoalesce(JSON.stringify(access), () => ( String(access)))}`
5308
- );
5309
- }
5310
- return permissions[0];
5294
+ return ACCESS_LEVEL_RANKS[access] >= ACCESS_LEVEL_RANKS[requiredAccess];
5311
5295
  }
5312
5296
  function resolveRoomPermissionMatrix(permissions, roomId) {
5313
5297
  const matchedPermissions = permissions.filter(
@@ -5321,7 +5305,7 @@ function resolveRoomPermissionMatrix(permissions, roomId) {
5321
5305
  const explicitMatrix = {};
5322
5306
  const explicitSpecificity = {};
5323
5307
  for (const permission of matchedPermissions) {
5324
- const resolved = resolvePermissionMatrix(permission.scopes);
5308
+ const resolved = resolvePermissionScopes(permission.scopes);
5325
5309
  const specificity = getResourceSpecificity(permission.resource);
5326
5310
  if (resolved.hasDefaultPermission) {
5327
5311
  hasDefaultPermission = true;
@@ -5343,61 +5327,59 @@ function resolveRoomPermissionMatrix(permissions, roomId) {
5343
5327
  }
5344
5328
  }
5345
5329
  }
5346
- return resolveFullPermissionMatrix({
5330
+ return permissionMatrixFromResolvedScopes({
5347
5331
  hasDefaultPermission,
5348
5332
  baseAccess,
5349
5333
  matrix: explicitMatrix
5350
5334
  });
5351
5335
  }
5352
- function normalizeRoomPermissionInput(input) {
5353
- if (!Array.isArray(input)) {
5336
+ function normalizeRoomPermissions(permissions) {
5337
+ if (!Array.isArray(permissions)) {
5354
5338
  throw new Error("Permission list must be an array");
5355
5339
  }
5356
- return input.map((permission) => {
5357
- if (!VALID_PERMISSIONS.has(permission)) {
5340
+ return permissions.map((permission) => {
5341
+ if (!isPermission(permission)) {
5358
5342
  throw new Error(`Not a valid permission: ${permission}`);
5359
5343
  }
5360
5344
  return permission;
5361
5345
  });
5362
5346
  }
5363
- function normalizeRoomAccessesInput(input) {
5364
- if (input === void 0) {
5347
+ function normalizeRoomAccesses(accesses) {
5348
+ if (accesses === void 0) {
5365
5349
  return void 0;
5366
5350
  }
5367
5351
  return Object.fromEntries(
5368
- Object.entries(input).map(([id, permissions]) => [
5352
+ Object.entries(accesses).map(([id, permissions]) => [
5369
5353
  id,
5370
- normalizeRoomPermissionInput(permissions)
5354
+ normalizeRoomPermissions(permissions)
5371
5355
  ])
5372
5356
  );
5373
5357
  }
5374
- function normalizeRoomAccessesUpdateInput(input) {
5375
- if (input === void 0) {
5358
+ function normalizeUpdateRoomAccesses(accesses) {
5359
+ if (accesses === void 0) {
5376
5360
  return void 0;
5377
5361
  }
5378
5362
  return Object.fromEntries(
5379
- Object.entries(input).map(([id, permissions]) => [
5363
+ Object.entries(accesses).map(([id, permissions]) => [
5380
5364
  id,
5381
- permissions === null ? null : normalizeRoomPermissionInput(permissions)
5365
+ permissions === null ? null : normalizeRoomPermissions(permissions)
5382
5366
  ])
5383
5367
  );
5384
5368
  }
5385
- function mergePermissionMatrices(sources) {
5369
+ function mergePermissionMatrices(matrices) {
5386
5370
  return {
5387
- room: strongestMatrixAccess(sources, "room"),
5388
- storage: strongestMatrixAccess(sources, "storage"),
5389
- comments: strongestMatrixAccess(sources, "comments"),
5390
- feeds: strongestMatrixAccess(sources, "feeds"),
5391
- personal: "write"
5371
+ room: strongestMatrixAccess(matrices, "room"),
5372
+ storage: strongestMatrixAccess(matrices, "storage"),
5373
+ comments: strongestMatrixAccess(matrices, "comments"),
5374
+ feeds: strongestMatrixAccess(matrices, "feeds"),
5375
+ personal: strongestMatrixAccess(matrices, "personal")
5392
5376
  };
5393
5377
  }
5394
5378
  function permissionMatrixToScopes(matrix) {
5395
5379
  const scopes = [];
5396
5380
  const baseAccess = matrix.room;
5397
5381
  if (baseAccess !== "none") {
5398
- scopes.push(
5399
- permissionForAccessLevel(DEFAULT_PERMISSION_RESOURCE, baseAccess)
5400
- );
5382
+ scopes.push(permissionForAccessLevel(BASE_PERMISSION_RESOURCE, baseAccess));
5401
5383
  }
5402
5384
  for (const resource of ROOM_PERMISSION_RESOURCES) {
5403
5385
  const access = matrix[resource];
@@ -5407,14 +5389,37 @@ function permissionMatrixToScopes(matrix) {
5407
5389
  }
5408
5390
  return scopes;
5409
5391
  }
5410
- function strongestMatrixAccess(sources, resource) {
5411
- return sources.reduce(
5412
- (strongest, source) => strongestAccess(strongest, source[resource]),
5392
+ function mergeRoomPermissionScopes({
5393
+ defaultAccesses,
5394
+ groupsAccesses,
5395
+ userAccesses
5396
+ }) {
5397
+ return permissionMatrixToScopes(
5398
+ mergePermissionMatrices([
5399
+ permissionMatrixFromScopes(defaultAccesses),
5400
+ ...groupsAccesses.map(permissionMatrixFromScopes),
5401
+ permissionMatrixFromScopes(userAccesses)
5402
+ ])
5403
+ );
5404
+ }
5405
+ function permissionForAccessLevel(resource, access, field = resource) {
5406
+ const levels = PERMISSIONS_BY_RESOURCE[resource];
5407
+ const permissions = levels[access];
5408
+ if (permissions === void 0 || permissions.length === 0) {
5409
+ throw new Error(
5410
+ `Invalid permission level for ${field}: ${_nullishCoalesce(JSON.stringify(access), () => ( String(access)))}`
5411
+ );
5412
+ }
5413
+ return permissions[0];
5414
+ }
5415
+ function strongestMatrixAccess(matrices, resource) {
5416
+ return matrices.reduce(
5417
+ (strongest, matrix) => strongestAccess(strongest, matrix[resource]),
5413
5418
  "none"
5414
5419
  );
5415
5420
  }
5416
5421
  function strongestAccess(left, right) {
5417
- return ACCESS_RANKS[right] > ACCESS_RANKS[left] ? right : left;
5422
+ return ACCESS_LEVEL_RANKS[right] > ACCESS_LEVEL_RANKS[left] ? right : left;
5418
5423
  }
5419
5424
  function resourceMatchesRoomId(resource, roomId) {
5420
5425
  if (resource.includes("*")) {
@@ -5592,7 +5597,7 @@ function makeCachedToken(token, expiresAt) {
5592
5597
  function getAuthTokenPermissionScopes(permissions) {
5593
5598
  return Object.entries(permissions).map(([resource, scopes]) => ({
5594
5599
  resource,
5595
- scopes
5600
+ scopes: normalizeRoomPermissions(scopes)
5596
5601
  }));
5597
5602
  }
5598
5603
  function cachedTokenSatisfiesRequest(cachedToken, request) {
@@ -9500,15 +9505,15 @@ var ClientMsgCode = Object.freeze({
9500
9505
 
9501
9506
  // src/refs/ManagedOthers.ts
9502
9507
  function makeUser(conn, presence) {
9503
- const { connectionId, id, info } = conn;
9504
- const canWrite = hasPermissionAccess(conn.scopes, "storage", "write");
9508
+ const { connectionId, id, info, access } = conn;
9509
+ const { canWrite, canComment } = access;
9505
9510
  return freeze(
9506
9511
  compactObject({
9507
9512
  connectionId,
9508
9513
  id,
9509
9514
  info,
9510
9515
  canWrite,
9511
- canComment: hasPermissionAccess(conn.scopes, "comments", "write"),
9516
+ canComment,
9512
9517
  isReadOnly: !canWrite,
9513
9518
  // Deprecated, kept for backward-compatibility
9514
9519
  presence
@@ -9579,7 +9584,7 @@ var ManagedOthers = class {
9579
9584
  * Records a known connection. This records the connection ID and the
9580
9585
  * associated metadata.
9581
9586
  */
9582
- setConnection(connectionId, metaUserId, metaUserInfo, scopes) {
9587
+ setConnection(connectionId, metaUserId, metaUserInfo, access) {
9583
9588
  this.#internal.mutate((state) => {
9584
9589
  state.connections.set(
9585
9590
  connectionId,
@@ -9587,7 +9592,7 @@ var ManagedOthers = class {
9587
9592
  connectionId,
9588
9593
  id: metaUserId,
9589
9594
  info: metaUserInfo,
9590
- scopes
9595
+ access
9591
9596
  })
9592
9597
  );
9593
9598
  if (!state.presences.has(connectionId)) {
@@ -9740,6 +9745,14 @@ function defaultMessageFromContext(context) {
9740
9745
 
9741
9746
  // src/room.ts
9742
9747
  var FEEDS_TIMEOUT = 5e3;
9748
+ function connectionAccessFromScopes(scopes) {
9749
+ const roomPermissions = normalizeRoomPermissions(scopes);
9750
+ const matrix = permissionMatrixFromScopes(roomPermissions);
9751
+ return {
9752
+ canWrite: hasPermissionAccess(matrix, "storage", "write"),
9753
+ canComment: hasPermissionAccess(matrix, "comments", "write")
9754
+ };
9755
+ }
9743
9756
  function makeIdFactory(connectionId) {
9744
9757
  let count = 0;
9745
9758
  return () => `${connectionId}:${count++}`;
@@ -9964,8 +9977,8 @@ function createRoom(options, config) {
9964
9977
  }
9965
9978
  }
9966
9979
  function isStorageWritable() {
9967
- const scopes = _optionalChain([context, 'access', _224 => _224.dynamicSessionInfoSig, 'access', _225 => _225.get, 'call', _226 => _226(), 'optionalAccess', _227 => _227.scopes]);
9968
- return scopes !== void 0 ? hasPermissionAccess(scopes, "storage", "write") : true;
9980
+ const permissionMatrix = _optionalChain([context, 'access', _224 => _224.dynamicSessionInfoSig, 'access', _225 => _225.get, 'call', _226 => _226(), 'optionalAccess', _227 => _227.permissionMatrix]);
9981
+ return permissionMatrix !== void 0 ? hasPermissionAccess(permissionMatrix, "storage", "write") : true;
9969
9982
  }
9970
9983
  const eventHub = {
9971
9984
  status: makeEventSource(),
@@ -10027,7 +10040,7 @@ function createRoom(options, config) {
10027
10040
  return null;
10028
10041
  } else {
10029
10042
  const canWrite = hasPermissionAccess(
10030
- dynamicSession.scopes,
10043
+ dynamicSession.permissionMatrix,
10031
10044
  "storage",
10032
10045
  "write"
10033
10046
  );
@@ -10038,7 +10051,7 @@ function createRoom(options, config) {
10038
10051
  presence: myPresence,
10039
10052
  canWrite,
10040
10053
  canComment: hasPermissionAccess(
10041
- dynamicSession.scopes,
10054
+ dynamicSession.permissionMatrix,
10042
10055
  "comments",
10043
10056
  "write"
10044
10057
  )
@@ -10330,7 +10343,9 @@ function createRoom(options, config) {
10330
10343
  context.dynamicSessionInfoSig.set({
10331
10344
  actor: message.actor,
10332
10345
  nonce: message.nonce,
10333
- scopes: message.scopes,
10346
+ permissionMatrix: permissionMatrixFromScopes(
10347
+ normalizeRoomPermissions(message.scopes)
10348
+ ),
10334
10349
  meta: message.meta
10335
10350
  });
10336
10351
  context.idFactory = makeIdFactory(message.actor);
@@ -10351,7 +10366,7 @@ function createRoom(options, config) {
10351
10366
  connectionId,
10352
10367
  user.id,
10353
10368
  user.info,
10354
- user.scopes
10369
+ connectionAccessFromScopes(user.scopes)
10355
10370
  );
10356
10371
  }
10357
10372
  return { type: "reset" };
@@ -10371,7 +10386,7 @@ function createRoom(options, config) {
10371
10386
  message.actor,
10372
10387
  message.id,
10373
10388
  message.info,
10374
- message.scopes
10389
+ connectionAccessFromScopes(message.scopes)
10375
10390
  );
10376
10391
  context.buffer.messages.push({
10377
10392
  type: ClientMsgCode.UPDATE_PRESENCE,
@@ -11737,7 +11752,6 @@ function createClient(options) {
11737
11752
  ),
11738
11753
  authenticate: async () => {
11739
11754
  const resp = await authManager.getAuthValue({
11740
- // TODO: Should we have permissions for AI Copilots?
11741
11755
  resource: "personal",
11742
11756
  access: "write"
11743
11757
  });
@@ -12703,5 +12717,6 @@ detectDupes(PKG_NAME, PKG_VERSION, PKG_FORMAT);
12703
12717
 
12704
12718
 
12705
12719
 
12706
- exports.ClientMsgCode = ClientMsgCode; exports.CrdtType = CrdtType; exports.DefaultMap = DefaultMap; exports.Deque = Deque; exports.DerivedSignal = DerivedSignal; exports.FeedRequestErrorCode = FeedRequestErrorCode; exports.HttpError = HttpError; exports.LiveList = LiveList; exports.LiveMap = LiveMap; exports.LiveObject = LiveObject; exports.LiveblocksError = LiveblocksError; exports.MENTION_CHARACTER = MENTION_CHARACTER; exports.MutableSignal = MutableSignal; 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.asPos = asPos; exports.assert = assert; exports.assertNever = assertNever; exports.autoRetry = autoRetry; exports.b64decode = b64decode; exports.batch = batch; exports.checkBounds = checkBounds; exports.chunk = chunk; exports.cloneLson = cloneLson; exports.compactNodesToNodeStream = compactNodesToNodeStream; exports.compactObject = compactObject; exports.console = fancy_console_exports; exports.convertToCommentData = convertToCommentData; exports.convertToCommentUserReaction = convertToCommentUserReaction; exports.convertToGroupData = convertToGroupData; exports.convertToInboxNotificationData = convertToInboxNotificationData; exports.convertToSubscriptionData = convertToSubscriptionData; exports.convertToThreadData = convertToThreadData; exports.convertToUserSubscriptionData = convertToUserSubscriptionData; exports.createClient = createClient; exports.createCommentAttachmentId = createCommentAttachmentId; exports.createCommentId = createCommentId; exports.createInboxNotificationId = createInboxNotificationId; exports.createManagedPool = createManagedPool; exports.createNotificationSettings = createNotificationSettings; exports.createThreadId = createThreadId; exports.deepLiveify = deepLiveify; exports.defineAiTool = defineAiTool; exports.deprecate = deprecate; exports.deprecateIf = deprecateIf; exports.detectDupes = detectDupes; exports.entries = entries; exports.errorIf = errorIf; exports.findLastIndex = findLastIndex; exports.freeze = freeze; exports.generateUrl = generateUrl; exports.getMentionsFromCommentBody = getMentionsFromCommentBody; exports.getSubscriptionKey = getSubscriptionKey; exports.hasPermissionAccess = hasPermissionAccess; exports.html = html; exports.htmlSafe = htmlSafe; exports.isCommentBodyLink = isCommentBodyLink; exports.isCommentBodyMention = isCommentBodyMention; exports.isCommentBodyText = isCommentBodyText; exports.isJsonArray = isJsonArray; exports.isJsonObject = isJsonObject; exports.isJsonScalar = isJsonScalar; exports.isListStorageNode = isListStorageNode; exports.isLiveNode = isLiveNode; exports.isMapStorageNode = isMapStorageNode; exports.isNotificationChannelEnabled = isNotificationChannelEnabled; exports.isNumberOperator = isNumberOperator; exports.isObjectStorageNode = isObjectStorageNode; exports.isPlainObject = isPlainObject; exports.isRegisterStorageNode = isRegisterStorageNode; exports.isRootStorageNode = isRootStorageNode; exports.isStartsWithOperator = isStartsWithOperator; exports.isUrl = isUrl; exports.kInternal = kInternal; exports.keys = keys; exports.makeAbortController = makeAbortController; exports.makeEventSource = makeEventSource; exports.makePoller = makePoller; exports.makePosition = makePosition; exports.mapValues = mapValues; exports.memoizeOnSuccess = memoizeOnSuccess; exports.mergePermissionMatrices = mergePermissionMatrices; exports.nanoid = nanoid; exports.nn = nn; exports.nodeStreamToCompactNodes = nodeStreamToCompactNodes; exports.normalizeRoomAccessesInput = normalizeRoomAccessesInput; exports.normalizeRoomAccessesUpdateInput = normalizeRoomAccessesUpdateInput; exports.normalizeRoomPermissionInput = normalizeRoomPermissionInput; exports.objectToQuery = objectToQuery; exports.patchNotificationSettings = patchNotificationSettings; exports.permissionMatrixFromScopes = permissionMatrixFromScopes; exports.permissionMatrixToScopes = permissionMatrixToScopes; exports.raise = raise; exports.resolveMentionsInCommentBody = resolveMentionsInCommentBody; exports.sanitizeUrl = sanitizeUrl; exports.shallow = shallow; exports.shallow2 = shallow2; exports.stableStringify = stableStringify; exports.stringifyCommentBody = stringifyCommentBody; exports.throwUsageError = throwUsageError; exports.toPlainLson = toPlainLson; exports.tryParseJson = tryParseJson; exports.url = url; exports.urljoin = urljoin; exports.wait = wait; exports.warnOnce = warnOnce; exports.warnOnceIf = warnOnceIf; exports.withTimeout = withTimeout;
12720
+
12721
+ exports.ClientMsgCode = ClientMsgCode; exports.CrdtType = CrdtType; exports.DefaultMap = DefaultMap; exports.Deque = Deque; exports.DerivedSignal = DerivedSignal; exports.FeedRequestErrorCode = FeedRequestErrorCode; exports.HttpError = HttpError; exports.LiveList = LiveList; exports.LiveMap = LiveMap; exports.LiveObject = LiveObject; exports.LiveblocksError = LiveblocksError; exports.MENTION_CHARACTER = MENTION_CHARACTER; exports.MutableSignal = MutableSignal; 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.asPos = asPos; exports.assert = assert; exports.assertNever = assertNever; exports.autoRetry = autoRetry; exports.b64decode = b64decode; exports.batch = batch; exports.checkBounds = checkBounds; exports.chunk = chunk; exports.cloneLson = cloneLson; exports.compactNodesToNodeStream = compactNodesToNodeStream; exports.compactObject = compactObject; exports.console = fancy_console_exports; exports.convertToCommentData = convertToCommentData; exports.convertToCommentUserReaction = convertToCommentUserReaction; exports.convertToGroupData = convertToGroupData; exports.convertToInboxNotificationData = convertToInboxNotificationData; exports.convertToSubscriptionData = convertToSubscriptionData; exports.convertToThreadData = convertToThreadData; exports.convertToUserSubscriptionData = convertToUserSubscriptionData; exports.createClient = createClient; exports.createCommentAttachmentId = createCommentAttachmentId; exports.createCommentId = createCommentId; exports.createInboxNotificationId = createInboxNotificationId; exports.createManagedPool = createManagedPool; exports.createNotificationSettings = createNotificationSettings; exports.createThreadId = createThreadId; exports.deepLiveify = deepLiveify; exports.defineAiTool = defineAiTool; exports.deprecate = deprecate; exports.deprecateIf = deprecateIf; exports.detectDupes = detectDupes; exports.entries = entries; exports.errorIf = errorIf; exports.findLastIndex = findLastIndex; exports.freeze = freeze; exports.generateUrl = generateUrl; exports.getMentionsFromCommentBody = getMentionsFromCommentBody; exports.getSubscriptionKey = getSubscriptionKey; exports.hasPermissionAccess = hasPermissionAccess; exports.html = html; exports.htmlSafe = htmlSafe; exports.isCommentBodyLink = isCommentBodyLink; exports.isCommentBodyMention = isCommentBodyMention; exports.isCommentBodyText = isCommentBodyText; exports.isJsonArray = isJsonArray; exports.isJsonObject = isJsonObject; exports.isJsonScalar = isJsonScalar; exports.isListStorageNode = isListStorageNode; exports.isLiveNode = isLiveNode; exports.isMapStorageNode = isMapStorageNode; exports.isNotificationChannelEnabled = isNotificationChannelEnabled; exports.isNumberOperator = isNumberOperator; exports.isObjectStorageNode = isObjectStorageNode; exports.isPlainObject = isPlainObject; exports.isRegisterStorageNode = isRegisterStorageNode; exports.isRootStorageNode = isRootStorageNode; exports.isStartsWithOperator = isStartsWithOperator; exports.isUrl = isUrl; exports.kInternal = kInternal; exports.keys = keys; exports.makeAbortController = makeAbortController; exports.makeEventSource = makeEventSource; exports.makePoller = makePoller; exports.makePosition = makePosition; exports.mapValues = mapValues; exports.memoizeOnSuccess = memoizeOnSuccess; exports.mergePermissionMatrices = mergePermissionMatrices; exports.mergeRoomPermissionScopes = mergeRoomPermissionScopes; exports.nanoid = nanoid; exports.nn = nn; exports.nodeStreamToCompactNodes = nodeStreamToCompactNodes; exports.normalizeRoomAccesses = normalizeRoomAccesses; exports.normalizeRoomPermissions = normalizeRoomPermissions; exports.normalizeUpdateRoomAccesses = normalizeUpdateRoomAccesses; exports.objectToQuery = objectToQuery; exports.patchNotificationSettings = patchNotificationSettings; exports.permissionMatrixFromScopes = permissionMatrixFromScopes; exports.permissionMatrixToScopes = permissionMatrixToScopes; exports.raise = raise; exports.resolveMentionsInCommentBody = resolveMentionsInCommentBody; exports.sanitizeUrl = sanitizeUrl; exports.shallow = shallow; exports.shallow2 = shallow2; exports.stableStringify = stableStringify; exports.stringifyCommentBody = stringifyCommentBody; exports.throwUsageError = throwUsageError; exports.toPlainLson = toPlainLson; exports.tryParseJson = tryParseJson; exports.url = url; exports.urljoin = urljoin; exports.wait = wait; exports.warnOnce = warnOnce; exports.warnOnceIf = warnOnceIf; exports.withTimeout = withTimeout;
12707
12722
  //# sourceMappingURL=index.cjs.map