@7365admin1/core 3.52.8 → 3.52.9
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/CHANGELOG.md +6 -0
- package/dist/index.d.ts +30 -3
- package/dist/index.js +44 -15
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +43 -15
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
- package/test/camera-view.util.test.mjs +132 -0
package/dist/index.mjs
CHANGED
|
@@ -13433,20 +13433,7 @@ async function resolveInviteActor(userId) {
|
|
|
13433
13433
|
members.map((m) => m.role?.toString?.() ?? "").filter((r) => r && ObjectId25.isValid(r))
|
|
13434
13434
|
)
|
|
13435
13435
|
);
|
|
13436
|
-
const orgLevelRoleIds =
|
|
13437
|
-
if (memberRoleIds.length) {
|
|
13438
|
-
const memberRoles = await db2.collection("roles").find(
|
|
13439
|
-
{
|
|
13440
|
-
_id: { $in: memberRoleIds.map((r) => new ObjectId25(r)) },
|
|
13441
|
-
...LIVE_ROLE
|
|
13442
|
-
},
|
|
13443
|
-
{ projection: { site: 1 } }
|
|
13444
|
-
).toArray();
|
|
13445
|
-
for (const role of memberRoles) {
|
|
13446
|
-
if (!role.site)
|
|
13447
|
-
orgLevelRoleIds.add(role._id.toString());
|
|
13448
|
-
}
|
|
13449
|
-
}
|
|
13436
|
+
const orgLevelRoleIds = await orgLevelRoles(db2, memberRoleIds);
|
|
13450
13437
|
return {
|
|
13451
13438
|
id,
|
|
13452
13439
|
name: user?.name ?? adminMember?.name ?? "",
|
|
@@ -13490,6 +13477,25 @@ async function hasOrgInvitation(userId, orgId) {
|
|
|
13490
13477
|
);
|
|
13491
13478
|
return Boolean(invite);
|
|
13492
13479
|
}
|
|
13480
|
+
async function orgLevelRoles(db2, roles) {
|
|
13481
|
+
const ids2 = Array.from(
|
|
13482
|
+
new Set(
|
|
13483
|
+
roles.map((role) => role?.toString?.() ?? "").filter((role) => role && ObjectId25.isValid(role))
|
|
13484
|
+
)
|
|
13485
|
+
);
|
|
13486
|
+
const orgLevel = /* @__PURE__ */ new Set();
|
|
13487
|
+
if (!ids2.length)
|
|
13488
|
+
return orgLevel;
|
|
13489
|
+
const docs = await db2.collection("roles").find(
|
|
13490
|
+
{ _id: { $in: ids2.map((id) => new ObjectId25(id)) }, ...LIVE_ROLE },
|
|
13491
|
+
{ projection: { site: 1 } }
|
|
13492
|
+
).toArray();
|
|
13493
|
+
for (const role of docs) {
|
|
13494
|
+
if (!role.site)
|
|
13495
|
+
orgLevel.add(role._id.toString());
|
|
13496
|
+
}
|
|
13497
|
+
return orgLevel;
|
|
13498
|
+
}
|
|
13493
13499
|
|
|
13494
13500
|
// src/services/service-provider-invite.service.ts
|
|
13495
13501
|
import {
|
|
@@ -23884,6 +23890,13 @@ function cameraGrant(params) {
|
|
|
23884
23890
|
return atSite;
|
|
23885
23891
|
const atOrg = org ? params.memberships.find(
|
|
23886
23892
|
(membership) => !idOf(membership.siteId) && idOf(membership.org) === org
|
|
23893
|
+
) ?? // Owner rule, 2026-09-02, reconciled with the LIST half (`orgSiteScope`):
|
|
23894
|
+
// an ORGANISATION-LEVEL role reaches every site of its own organisation
|
|
23895
|
+
// even when its membership row also names a `siteId`. Asked SECOND so a
|
|
23896
|
+
// site-less membership still grants first and nobody's granting row — and
|
|
23897
|
+
// so nobody's permissions — changes.
|
|
23898
|
+
params.memberships.find(
|
|
23899
|
+
(membership) => membership.orgLevelRole === true && idOf(membership.org) === org
|
|
23887
23900
|
) : void 0;
|
|
23888
23901
|
if (atOrg)
|
|
23889
23902
|
return atOrg;
|
|
@@ -25351,11 +25364,22 @@ function useCameraViewService() {
|
|
|
25351
25364
|
engagedOrgs.add(String(engagement.org));
|
|
25352
25365
|
}
|
|
25353
25366
|
}
|
|
25367
|
+
const siteOrg = idText(params.site?.orgId ?? params.site?.org);
|
|
25368
|
+
const widenable = memberships.filter(
|
|
25369
|
+
(membership) => idText(membership.siteId) && idText(membership.siteId) !== String(params.siteObjectId) && siteOrg && idText(membership.org) === siteOrg
|
|
25370
|
+
);
|
|
25371
|
+
const orgLevel = widenable.length ? await orgLevelRoles(
|
|
25372
|
+
params.db,
|
|
25373
|
+
widenable.map((membership) => membership.role)
|
|
25374
|
+
) : /* @__PURE__ */ new Set();
|
|
25354
25375
|
const grant = cameraGrant({
|
|
25355
25376
|
cameraSite: params.siteObjectId,
|
|
25356
25377
|
// `orgId` is the real field; `org` is kept as a fallback only.
|
|
25357
25378
|
cameraOrg: params.site?.orgId ?? params.site?.org,
|
|
25358
|
-
memberships
|
|
25379
|
+
memberships: orgLevel.size ? memberships.map((membership) => ({
|
|
25380
|
+
...membership,
|
|
25381
|
+
orgLevelRole: orgLevel.has(idText(membership.role))
|
|
25382
|
+
})) : memberships,
|
|
25359
25383
|
engagedOrgs
|
|
25360
25384
|
});
|
|
25361
25385
|
return { memberships, grant };
|
|
@@ -25939,6 +25963,9 @@ function maxConcurrentGrabs() {
|
|
|
25939
25963
|
}
|
|
25940
25964
|
var inFlightGrabs = 0;
|
|
25941
25965
|
var LAST_FRAME_TTL_SECONDS = 60 * 60;
|
|
25966
|
+
function idText(value) {
|
|
25967
|
+
return value ? String(value) : "";
|
|
25968
|
+
}
|
|
25942
25969
|
|
|
25943
25970
|
// src/utils/site-reach.util.ts
|
|
25944
25971
|
async function requireSiteReach(req, site, permission) {
|
|
@@ -91869,6 +91896,7 @@ export {
|
|
|
91869
91896
|
occasionForStatus,
|
|
91870
91897
|
occurrence_book_namespace_collection,
|
|
91871
91898
|
online_forms_namespace_collection,
|
|
91899
|
+
orgLevelRoles,
|
|
91872
91900
|
orgSchema,
|
|
91873
91901
|
orgSiteScope,
|
|
91874
91902
|
overnight_parking_requests_namespace_collection,
|