@liveblocks/core 3.20.0-perm7 → 3.20.0-perm8
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 +79 -9
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +18 -1
- package/dist/index.d.ts +18 -1
- package/dist/index.js +78 -8
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
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-
|
|
9
|
+
var PKG_VERSION = "3.20.0-perm8";
|
|
10
10
|
var PKG_FORMAT = "cjs";
|
|
11
11
|
|
|
12
12
|
// src/dupe-detection.ts
|
|
@@ -5203,6 +5203,12 @@ var Permission = {
|
|
|
5203
5203
|
LegacyRoomPresenceWrite: "room:presence:write"
|
|
5204
5204
|
};
|
|
5205
5205
|
var ACCESS_LEVELS = ["none", "read", "write"];
|
|
5206
|
+
var basePermissionScopes = /* @__PURE__ */ new Set([
|
|
5207
|
+
Permission.Read,
|
|
5208
|
+
Permission.Write,
|
|
5209
|
+
Permission.RoomRead,
|
|
5210
|
+
Permission.RoomWrite
|
|
5211
|
+
]);
|
|
5206
5212
|
var ACCESS_LEVEL_RANKS = {
|
|
5207
5213
|
none: 0,
|
|
5208
5214
|
read: 1,
|
|
@@ -5394,13 +5400,54 @@ function mergeRoomPermissionScopes({
|
|
|
5394
5400
|
groupsAccesses,
|
|
5395
5401
|
userAccesses
|
|
5396
5402
|
}) {
|
|
5397
|
-
|
|
5398
|
-
|
|
5399
|
-
|
|
5400
|
-
|
|
5401
|
-
|
|
5402
|
-
|
|
5403
|
-
|
|
5403
|
+
const sources = [
|
|
5404
|
+
resolvePermissionScopes(defaultAccesses),
|
|
5405
|
+
mergeResolvedScopesByHighestAccess(
|
|
5406
|
+
groupsAccesses.map(resolvePermissionScopes)
|
|
5407
|
+
),
|
|
5408
|
+
resolvePermissionScopes(userAccesses)
|
|
5409
|
+
];
|
|
5410
|
+
const merged = {
|
|
5411
|
+
hasDefaultPermission: false,
|
|
5412
|
+
baseAccess: "none",
|
|
5413
|
+
matrix: {}
|
|
5414
|
+
};
|
|
5415
|
+
for (const source of sources) {
|
|
5416
|
+
if (source.hasDefaultPermission) {
|
|
5417
|
+
merged.hasDefaultPermission = true;
|
|
5418
|
+
merged.baseAccess = source.baseAccess;
|
|
5419
|
+
}
|
|
5420
|
+
for (const resource of ROOM_PERMISSION_RESOURCES) {
|
|
5421
|
+
const access = source.matrix[resource];
|
|
5422
|
+
if (access !== void 0) {
|
|
5423
|
+
merged.matrix[resource] = access;
|
|
5424
|
+
}
|
|
5425
|
+
}
|
|
5426
|
+
}
|
|
5427
|
+
return permissionMatrixToScopes(permissionMatrixFromResolvedScopes(merged));
|
|
5428
|
+
}
|
|
5429
|
+
function mergeResolvedScopesByHighestAccess(sources) {
|
|
5430
|
+
const merged = {
|
|
5431
|
+
hasDefaultPermission: false,
|
|
5432
|
+
baseAccess: "none",
|
|
5433
|
+
matrix: {}
|
|
5434
|
+
};
|
|
5435
|
+
for (const source of sources) {
|
|
5436
|
+
if (source.hasDefaultPermission) {
|
|
5437
|
+
merged.hasDefaultPermission = true;
|
|
5438
|
+
merged.baseAccess = strongestAccess(merged.baseAccess, source.baseAccess);
|
|
5439
|
+
}
|
|
5440
|
+
for (const resource of ROOM_PERMISSION_RESOURCES) {
|
|
5441
|
+
const access = source.matrix[resource];
|
|
5442
|
+
if (access !== void 0) {
|
|
5443
|
+
merged.matrix[resource] = strongestAccess(
|
|
5444
|
+
_nullishCoalesce(merged.matrix[resource], () => ( "none")),
|
|
5445
|
+
access
|
|
5446
|
+
);
|
|
5447
|
+
}
|
|
5448
|
+
}
|
|
5449
|
+
}
|
|
5450
|
+
return merged;
|
|
5404
5451
|
}
|
|
5405
5452
|
function permissionForAccessLevel(resource, access, field = resource) {
|
|
5406
5453
|
const levels = PERMISSIONS_BY_RESOURCE[resource];
|
|
@@ -5430,6 +5477,28 @@ function resourceMatchesRoomId(resource, roomId) {
|
|
|
5430
5477
|
function getResourceSpecificity(resource) {
|
|
5431
5478
|
return resource.replace("*", "").length;
|
|
5432
5479
|
}
|
|
5480
|
+
function validatePermissionsSet(scopes) {
|
|
5481
|
+
const unknownScopes = scopes.filter((scope) => !VALID_PERMISSIONS.has(scope));
|
|
5482
|
+
if (unknownScopes.length > 0) {
|
|
5483
|
+
return `Unknown permission scope(s): ${unknownScopes.join(", ")}`;
|
|
5484
|
+
}
|
|
5485
|
+
const baseScopes = scopes.filter((scope) => basePermissionScopes.has(scope));
|
|
5486
|
+
if (baseScopes.length !== 1) {
|
|
5487
|
+
return `Permissions must include exactly one of ${Permission.Read}, ${Permission.Write} (or the legacy aliases ${Permission.RoomRead}, ${Permission.RoomWrite}), got ${baseScopes.length === 0 ? "none" : baseScopes.join(", ")}`;
|
|
5488
|
+
}
|
|
5489
|
+
const seenFeatures = /* @__PURE__ */ new Set();
|
|
5490
|
+
for (const scope of scopes) {
|
|
5491
|
+
if (basePermissionScopes.has(scope) || scope === Permission.LegacyRoomPresenceWrite) {
|
|
5492
|
+
continue;
|
|
5493
|
+
}
|
|
5494
|
+
const feature = scope.slice(0, scope.indexOf(":"));
|
|
5495
|
+
if (seenFeatures.has(feature)) {
|
|
5496
|
+
return `Permissions can include at most one scope per feature, got multiple "${feature}" scopes`;
|
|
5497
|
+
}
|
|
5498
|
+
seenFeatures.add(feature);
|
|
5499
|
+
}
|
|
5500
|
+
return true;
|
|
5501
|
+
}
|
|
5433
5502
|
|
|
5434
5503
|
// src/protocol/AuthToken.ts
|
|
5435
5504
|
function isValidAuthTokenPayload(data) {
|
|
@@ -12718,5 +12787,6 @@ detectDupes(PKG_NAME, PKG_VERSION, PKG_FORMAT);
|
|
|
12718
12787
|
|
|
12719
12788
|
|
|
12720
12789
|
|
|
12721
|
-
|
|
12790
|
+
|
|
12791
|
+
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.validatePermissionsSet = validatePermissionsSet; exports.wait = wait; exports.warnOnce = warnOnce; exports.warnOnceIf = warnOnceIf; exports.withTimeout = withTimeout;
|
|
12722
12792
|
//# sourceMappingURL=index.cjs.map
|