@liveblocks/core 3.20.0-perm2 → 3.20.0-perm3

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-perm2";
9
+ var PKG_VERSION = "3.20.0-perm3";
10
10
  var PKG_FORMAT = "cjs";
11
11
 
12
12
  // src/dupe-detection.ts
@@ -5311,29 +5311,16 @@ function hasPermissionCapabilityAccess(capabilities, resource, requiredAccess) {
5311
5311
 
5312
5312
  // src/permissions.ts
5313
5313
  var VALID_PERMISSIONS = new Set(Object.values(Permission));
5314
- var DEFAULT_PERMISSIONS = [
5315
- Permission.RoomRead,
5316
- Permission.RoomWrite
5317
- ];
5318
5314
  var ROOM_PERMISSION_OBJECT_KEYS = /* @__PURE__ */ new Set([
5319
5315
  "default",
5320
5316
  ...ROOM_PERMISSION_RESOURCES
5321
5317
  ]);
5322
- var RESOURCE_SPECIFIC_PERMISSIONS_BY_RESOURCE = {
5323
- presence: Object.values(RESOURCE_PERMISSIONS.presence).flat(),
5324
- storage: Object.values(RESOURCE_PERMISSIONS.storage).flat(),
5325
- comments: Object.values(RESOURCE_PERMISSIONS.comments).flat(),
5326
- feeds: Object.values(RESOURCE_PERMISSIONS.feeds).flat()
5327
- };
5328
- var RESOURCE_SPECIFIC_PERMISSIONS = ROOM_PERMISSION_RESOURCES.flatMap(
5329
- (resource) => RESOURCE_SPECIFIC_PERMISSIONS_BY_RESOURCE[resource]
5330
- );
5331
- function permissionForAccessLevel(resource, access) {
5318
+ function permissionForAccessLevel(resource, access, field = resource) {
5332
5319
  const levels = RESOURCE_PERMISSIONS[resource];
5333
5320
  const permissions = levels[access];
5334
5321
  if (permissions === void 0 || permissions.length === 0) {
5335
5322
  throw new Error(
5336
- `Invalid permission level for ${resource}: ${String(access)}`
5323
+ `Invalid permission level for ${field}: ${_nullishCoalesce(JSON.stringify(access), () => ( String(access)))}`
5337
5324
  );
5338
5325
  }
5339
5326
  return permissions[0];
@@ -5393,7 +5380,11 @@ function normalizeRoomPermissionObject(objectInput) {
5393
5380
  const permissions = [];
5394
5381
  if (objectInput.default !== void 0) {
5395
5382
  permissions.push(
5396
- permissionForAccessLevel(DEFAULT_PERMISSION_RESOURCE, objectInput.default)
5383
+ permissionForAccessLevel(
5384
+ DEFAULT_PERMISSION_RESOURCE,
5385
+ objectInput.default,
5386
+ "default"
5387
+ )
5397
5388
  );
5398
5389
  }
5399
5390
  for (const resource of ROOM_PERMISSION_RESOURCES) {
@@ -5429,17 +5420,37 @@ function normalizeRoomAccessesUpdateInput(input) {
5429
5420
  ])
5430
5421
  );
5431
5422
  }
5432
- function getRoomPermissionConflicts(permission) {
5433
- if (DEFAULT_PERMISSIONS.includes(permission)) {
5434
- return [...DEFAULT_PERMISSIONS, ...RESOURCE_SPECIFIC_PERMISSIONS];
5423
+ function mergePermissionCapabilities(sources) {
5424
+ return {
5425
+ creation: strongestCapabilityAccess(sources, "creation"),
5426
+ presence: strongestCapabilityAccess(sources, "presence"),
5427
+ storage: strongestCapabilityAccess(sources, "storage"),
5428
+ comments: strongestCapabilityAccess(sources, "comments"),
5429
+ feeds: strongestCapabilityAccess(sources, "feeds"),
5430
+ personal: "write"
5431
+ };
5432
+ }
5433
+ function permissionCapabilitiesToScopes(capabilities) {
5434
+ const scopes = [];
5435
+ const baseAccess = capabilities.creation;
5436
+ if (baseAccess !== "none") {
5437
+ scopes.push(
5438
+ permissionForAccessLevel(DEFAULT_PERMISSION_RESOURCE, baseAccess)
5439
+ );
5435
5440
  }
5436
- for (const resource of ROOM_PERMISSION_RESOURCES) {
5437
- const permissions = RESOURCE_SPECIFIC_PERMISSIONS_BY_RESOURCE[resource];
5438
- if (permissions.includes(permission)) {
5439
- return permissions;
5441
+ for (const capability of ROOM_PERMISSION_RESOURCES) {
5442
+ const access = capabilities[capability];
5443
+ if (access !== baseAccess) {
5444
+ scopes.push(permissionForAccessLevel(capability, access));
5440
5445
  }
5441
5446
  }
5442
- return [];
5447
+ return scopes;
5448
+ }
5449
+ function strongestCapabilityAccess(sources, resource) {
5450
+ return sources.reduce(
5451
+ (strongest, source) => strongestAccess(strongest, source[resource]),
5452
+ "none"
5453
+ );
5443
5454
  }
5444
5455
  function strongestAccess(left, right) {
5445
5456
  return ACCESS_RANKS[right] > ACCESS_RANKS[left] ? right : left;
@@ -12730,5 +12741,6 @@ detectDupes(PKG_NAME, PKG_VERSION, PKG_FORMAT);
12730
12741
 
12731
12742
 
12732
12743
 
12733
- 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.getRoomPermissionConflicts = getRoomPermissionConflicts; exports.getSubscriptionKey = getSubscriptionKey; exports.hasPermissionCapability = hasPermissionCapability; exports.hasPermissionCapabilityAccess = hasPermissionCapabilityAccess; 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.nanoid = nanoid; exports.nn = nn; exports.nodeStreamToCompactNodes = nodeStreamToCompactNodes; exports.normalizeRoomAccessesInput = normalizeRoomAccessesInput; exports.normalizeRoomAccessesUpdateInput = normalizeRoomAccessesUpdateInput; exports.normalizeRoomPermissionInput = normalizeRoomPermissionInput; exports.objectToQuery = objectToQuery; exports.patchNotificationSettings = patchNotificationSettings; exports.permissionCapabilitiesFromScopes = permissionCapabilitiesFromScopes; 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;
12744
+
12745
+ 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.hasPermissionCapability = hasPermissionCapability; exports.hasPermissionCapabilityAccess = hasPermissionCapabilityAccess; 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.mergePermissionCapabilities = mergePermissionCapabilities; 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.permissionCapabilitiesFromScopes = permissionCapabilitiesFromScopes; exports.permissionCapabilitiesToScopes = permissionCapabilitiesToScopes; 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;
12734
12746
  //# sourceMappingURL=index.cjs.map