@qrvey/assets-sharing 0.3.4-dev.2094 → 0.3.4-dev.2153

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.
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.LIMIT_PER_PAGE = exports.AppSharingStatus = exports.ACCESS_LEVEL = exports.SHARE_TYPE = exports.SHARED_ORIGIN = exports.ASSET_TYPE = exports.ORGANIZATION_QRVEY = exports.DATABASE_INFO = exports.ENVIRONMENT = void 0;
3
+ exports.LIMIT_PER_PAGE = exports.APP_SHARING_STATUS = exports.ACCESS_LEVEL = exports.SHARE_TYPE = exports.SHARED_ORIGIN = exports.ASSET_TYPE = exports.ORGANIZATION_ANONYMOUS = exports.ORGANIZATION_QRVEY = exports.DATABASE_INFO = exports.ENVIRONMENT = void 0;
4
4
  exports.ENVIRONMENT = {
5
5
  SERVER_PREFIX: process.env.SERVER_PREFIX,
6
6
  TABLE_PREFIX: process.env.TABLE_PREFIX,
@@ -13,6 +13,7 @@ exports.DATABASE_INFO = {
13
13
  TABLE_PREFIX: exports.ENVIRONMENT.TABLE_PREFIX,
14
14
  };
15
15
  exports.ORGANIZATION_QRVEY = 'org:0';
16
+ exports.ORGANIZATION_ANONYMOUS = 'anonymous';
16
17
  var ASSET_TYPE;
17
18
  (function (ASSET_TYPE) {
18
19
  ASSET_TYPE["DX"] = "DX";
@@ -46,10 +47,10 @@ var ACCESS_LEVEL;
46
47
  ACCESS_LEVEL[ACCESS_LEVEL["CAN_EDIT"] = 2] = "CAN_EDIT";
47
48
  ACCESS_LEVEL[ACCESS_LEVEL["ADMIN"] = 4] = "ADMIN";
48
49
  })(ACCESS_LEVEL || (exports.ACCESS_LEVEL = ACCESS_LEVEL = {}));
49
- var AppSharingStatus;
50
- (function (AppSharingStatus) {
51
- AppSharingStatus["PUBLIC"] = "public";
52
- AppSharingStatus["PRIVATE"] = "private";
53
- })(AppSharingStatus || (exports.AppSharingStatus = AppSharingStatus = {}));
50
+ var APP_SHARING_STATUS;
51
+ (function (APP_SHARING_STATUS) {
52
+ APP_SHARING_STATUS["PUBLIC"] = "public";
53
+ APP_SHARING_STATUS["PRIVATE"] = "private";
54
+ })(APP_SHARING_STATUS || (exports.APP_SHARING_STATUS = APP_SHARING_STATUS = {}));
54
55
  exports.LIMIT_PER_PAGE = 10;
55
56
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/common/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,WAAW,GAAG;IACvB,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa;IACxC,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY;IACtC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM;IAC1B,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO;CAC/B,CAAC;AAEW,QAAA,aAAa,GAAG;IACzB,uBAAuB,EAAE,OAAO;IAChC,aAAa,EAAE,mBAAW,CAAC,aAAa;IACxC,YAAY,EAAE,mBAAW,CAAC,YAAY;CACzC,CAAC;AAEW,QAAA,kBAAkB,GAAG,OAAO,CAAC;AAE1C,IAAY,UAGX;AAHD,WAAY,UAAU;IAClB,uBAAS,CAAA;IACT,uBAAS,CAAA;AACb,CAAC,EAHW,UAAU,0BAAV,UAAU,QAGrB;AAED,IAAY,aAIX;AAJD,WAAY,aAAa;IACrB,sCAAqB,CAAA;IACrB,sCAAqB,CAAA;IACrB,oCAAmB,CAAA;AACvB,CAAC,EAJW,aAAa,6BAAb,aAAa,QAIxB;AAED,IAAY,UAIX;AAJD,WAAY,UAAU;IAClB,2BAAa,CAAA;IACb,2BAAa,CAAA;IACb,2CAA6B,CAAA;AACjC,CAAC,EAJW,UAAU,0BAAV,UAAU,QAIrB;AAED;;;;;;;;GAQG;AACH,IAAY,YAKX;AALD,WAAY,YAAY;IACpB,+CAAQ,CAAA;IACR,qDAAW,CAAA;IACX,uDAAY,CAAA;IACZ,iDAAS,CAAA;AACb,CAAC,EALW,YAAY,4BAAZ,YAAY,QAKvB;AAED,IAAY,gBAGX;AAHD,WAAY,gBAAgB;IACxB,qCAAiB,CAAA;IACjB,uCAAmB,CAAA;AACvB,CAAC,EAHW,gBAAgB,gCAAhB,gBAAgB,QAG3B;AAYY,QAAA,cAAc,GAAG,EAAE,CAAC"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/common/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,WAAW,GAAG;IACvB,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa;IACxC,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY;IACtC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM;IAC1B,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO;CAC/B,CAAC;AAEW,QAAA,aAAa,GAAG;IACzB,uBAAuB,EAAE,OAAO;IAChC,aAAa,EAAE,mBAAW,CAAC,aAAa;IACxC,YAAY,EAAE,mBAAW,CAAC,YAAY;CACzC,CAAC;AAEW,QAAA,kBAAkB,GAAG,OAAO,CAAC;AAE7B,QAAA,sBAAsB,GAAG,WAAW,CAAC;AAElD,IAAY,UAGX;AAHD,WAAY,UAAU;IAClB,uBAAS,CAAA;IACT,uBAAS,CAAA;AACb,CAAC,EAHW,UAAU,0BAAV,UAAU,QAGrB;AAED,IAAY,aAIX;AAJD,WAAY,aAAa;IACrB,sCAAqB,CAAA;IACrB,sCAAqB,CAAA;IACrB,oCAAmB,CAAA;AACvB,CAAC,EAJW,aAAa,6BAAb,aAAa,QAIxB;AAED,IAAY,UAIX;AAJD,WAAY,UAAU;IAClB,2BAAa,CAAA;IACb,2BAAa,CAAA;IACb,2CAA6B,CAAA;AACjC,CAAC,EAJW,UAAU,0BAAV,UAAU,QAIrB;AAED;;;;;;;;GAQG;AACH,IAAY,YAKX;AALD,WAAY,YAAY;IACpB,+CAAQ,CAAA;IACR,qDAAW,CAAA;IACX,uDAAY,CAAA;IACZ,iDAAS,CAAA;AACb,CAAC,EALW,YAAY,4BAAZ,YAAY,QAKvB;AAED,IAAY,kBAGX;AAHD,WAAY,kBAAkB;IAC1B,uCAAiB,CAAA;IACjB,yCAAmB,CAAA;AACvB,CAAC,EAHW,kBAAkB,kCAAlB,kBAAkB,QAG7B;AAYY,QAAA,cAAc,GAAG,EAAE,CAAC"}
package/dist/cjs/index.js CHANGED
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.SHARE_TYPE = exports.SHARED_ORIGIN = exports.ORGANIZATION_QRVEY = exports.ASSET_TYPE = exports.ACCESS_LEVEL = exports.hasAdminRole = exports.fromTokenToUser = exports.checkOrgPermissions = exports.checkAppPermissions = exports.checkUserAccessLevel = exports.api = void 0;
6
+ exports.ORGANIZATION_ANONYMOUS = exports.APP_SHARING_STATUS = exports.SHARE_TYPE = exports.SHARED_ORIGIN = exports.ORGANIZATION_QRVEY = exports.ASSET_TYPE = exports.ACCESS_LEVEL = exports.hasAdminRole = exports.fromTokenToUser = exports.getOrgTree = exports.checkOrgPermissions = exports.checkAppPermissions = exports.checkUserAccessLevel = exports.api = void 0;
7
7
  require("reflect-metadata");
8
8
  const context_1 = require("./context");
9
9
  const fromTokenToUser_1 = require("./quser/services/fromTokenToUser");
@@ -12,6 +12,7 @@ const checkAppPermissions_1 = __importDefault(require("./sharing/services/checkA
12
12
  const checkOrgPermissions_1 = __importDefault(require("./sharing/services/checkOrgPermissions"));
13
13
  const checkUserAccessLevel_1 = require("./sharing/services/checkUserAccessLevel");
14
14
  const delete_1 = require("./sharing/services/delete");
15
+ const getOrgTree_1 = __importDefault(require("./sharing/services/getOrgTree"));
15
16
  const list_1 = require("./sharing/services/list");
16
17
  const upsert_1 = require("./sharing/services/upsert");
17
18
  exports.api = {
@@ -25,6 +26,8 @@ const checkAppPermissions = (...args) => context_1.Context.resolve(checkAppPermi
25
26
  exports.checkAppPermissions = checkAppPermissions;
26
27
  const checkOrgPermissions = (...args) => context_1.Context.resolve(checkOrgPermissions_1.default).execute(...args);
27
28
  exports.checkOrgPermissions = checkOrgPermissions;
29
+ const getOrgTree = (...args) => context_1.Context.resolve(getOrgTree_1.default).execute(...args);
30
+ exports.getOrgTree = getOrgTree;
28
31
  const fromTokenToUser = (...args) => context_1.Context.resolve(fromTokenToUser_1.FromTokenToUser).execute(...args);
29
32
  exports.fromTokenToUser = fromTokenToUser;
30
33
  const hasAdminRole = (...args) => context_1.Context.resolve(hasAdminRole_1.HasAdminRole).execute(...args);
@@ -35,4 +38,6 @@ Object.defineProperty(exports, "ASSET_TYPE", { enumerable: true, get: function (
35
38
  Object.defineProperty(exports, "ORGANIZATION_QRVEY", { enumerable: true, get: function () { return constants_1.ORGANIZATION_QRVEY; } });
36
39
  Object.defineProperty(exports, "SHARED_ORIGIN", { enumerable: true, get: function () { return constants_1.SHARED_ORIGIN; } });
37
40
  Object.defineProperty(exports, "SHARE_TYPE", { enumerable: true, get: function () { return constants_1.SHARE_TYPE; } });
41
+ Object.defineProperty(exports, "APP_SHARING_STATUS", { enumerable: true, get: function () { return constants_1.APP_SHARING_STATUS; } });
42
+ Object.defineProperty(exports, "ORGANIZATION_ANONYMOUS", { enumerable: true, get: function () { return constants_1.ORGANIZATION_ANONYMOUS; } });
38
43
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;AAAA,4BAA0B;AAC1B,uCAAoC;AACpC,sEAAmE;AACnE,gEAA6D;AAC7D,iGAAyE;AACzE,iGAAyE;AACzE,kFAA+E;AAC/E,sDAA0D;AAC1D,kDAAsD;AACtD,sDAA0D;AAE7C,QAAA,GAAG,GAAG;IACf,MAAM,EAAE,CAAC,GAAG,IAA0C,EAAE,EAAE,CACtD,iBAAO,CAAC,OAAO,CAAC,sBAAa,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;IACnD,IAAI,EAAE,CAAC,GAAG,IAAwC,EAAE,EAAE,CAClD,iBAAO,CAAC,OAAO,CAAC,kBAAW,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;IACjD,MAAM,EAAE,CAAC,GAAG,IAA0C,EAAE,EAAE,CACtD,iBAAO,CAAC,OAAO,CAAC,sBAAa,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;CACtD,CAAC;AAEK,MAAM,oBAAoB,GAAG,CAChC,GAAG,IAAiD,EACtD,EAAE,CAAC,iBAAO,CAAC,OAAO,CAAC,2CAAoB,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;AAF/C,QAAA,oBAAoB,wBAE2B;AAErD,MAAM,mBAAmB,GAAG,CAC/B,GAAG,IAAgD,EACrD,EAAE,CAAC,iBAAO,CAAC,OAAO,CAAC,6BAAmB,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;AAF9C,QAAA,mBAAmB,uBAE2B;AAEpD,MAAM,mBAAmB,GAAG,CAC/B,GAAG,IAAgD,EACrD,EAAE,CAAC,iBAAO,CAAC,OAAO,CAAC,6BAAmB,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;AAF9C,QAAA,mBAAmB,uBAE2B;AAEpD,MAAM,eAAe,GAAG,CAC3B,GAAG,IAA4C,EACjD,EAAE,CAAC,iBAAO,CAAC,OAAO,CAAC,iCAAe,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;AAF1C,QAAA,eAAe,mBAE2B;AAEhD,MAAM,YAAY,GAAG,CAAC,GAAG,IAAyC,EAAE,EAAE,CACzE,iBAAO,CAAC,OAAO,CAAC,2BAAY,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;AADtC,QAAA,YAAY,gBAC0B;AAEnD,gDAM4B;AALxB,yGAAA,YAAY,OAAA;AACZ,uGAAA,UAAU,OAAA;AACV,+GAAA,kBAAkB,OAAA;AAClB,0GAAA,aAAa,OAAA;AACb,uGAAA,UAAU,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;AAAA,4BAA0B;AAC1B,uCAAoC;AACpC,sEAAmE;AACnE,gEAA6D;AAC7D,iGAAyE;AACzE,iGAAyE;AACzE,kFAA+E;AAC/E,sDAA0D;AAC1D,+EAAuD;AACvD,kDAAsD;AACtD,sDAA0D;AAE7C,QAAA,GAAG,GAAG;IACf,MAAM,EAAE,CAAC,GAAG,IAA0C,EAAE,EAAE,CACtD,iBAAO,CAAC,OAAO,CAAC,sBAAa,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;IACnD,IAAI,EAAE,CAAC,GAAG,IAAwC,EAAE,EAAE,CAClD,iBAAO,CAAC,OAAO,CAAC,kBAAW,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;IACjD,MAAM,EAAE,CAAC,GAAG,IAA0C,EAAE,EAAE,CACtD,iBAAO,CAAC,OAAO,CAAC,sBAAa,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;CACtD,CAAC;AAEK,MAAM,oBAAoB,GAAG,CAChC,GAAG,IAAiD,EACtD,EAAE,CAAC,iBAAO,CAAC,OAAO,CAAC,2CAAoB,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;AAF/C,QAAA,oBAAoB,wBAE2B;AAErD,MAAM,mBAAmB,GAAG,CAC/B,GAAG,IAAgD,EACrD,EAAE,CAAC,iBAAO,CAAC,OAAO,CAAC,6BAAmB,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;AAF9C,QAAA,mBAAmB,uBAE2B;AAEpD,MAAM,mBAAmB,GAAG,CAC/B,GAAG,IAAgD,EACrD,EAAE,CAAC,iBAAO,CAAC,OAAO,CAAC,6BAAmB,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;AAF9C,QAAA,mBAAmB,uBAE2B;AAEpD,MAAM,UAAU,GAAG,CAAC,GAAG,IAAuC,EAAE,EAAE,CACrE,iBAAO,CAAC,OAAO,CAAC,oBAAU,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;AADpC,QAAA,UAAU,cAC0B;AAE1C,MAAM,eAAe,GAAG,CAC3B,GAAG,IAA4C,EACjD,EAAE,CAAC,iBAAO,CAAC,OAAO,CAAC,iCAAe,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;AAF1C,QAAA,eAAe,mBAE2B;AAEhD,MAAM,YAAY,GAAG,CAAC,GAAG,IAAyC,EAAE,EAAE,CACzE,iBAAO,CAAC,OAAO,CAAC,2BAAY,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;AADtC,QAAA,YAAY,gBAC0B;AAEnD,gDAQ4B;AAPxB,yGAAA,YAAY,OAAA;AACZ,uGAAA,UAAU,OAAA;AACV,+GAAA,kBAAkB,OAAA;AAClB,0GAAA,aAAa,OAAA;AACb,uGAAA,UAAU,OAAA;AACV,+GAAA,kBAAkB,OAAA;AAClB,mHAAA,sBAAsB,OAAA"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=orgTreeResult.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orgTreeResult.js","sourceRoot":"","sources":["../../../../../src/sharing/entities/types/orgTreeResult.ts"],"names":[],"mappings":""}
@@ -17,6 +17,50 @@ class OrganizationRepository extends base_1.BaseRepository {
17
17
  const response = await super.findItem(params);
18
18
  return response;
19
19
  }
20
+ async getOrgTree(orgId, contentSharing) {
21
+ const cte = `WITH target AS (SELECT org_path FROM admin.qv_organization WHERE org_id = '${orgId}')`;
22
+ let selectClause = '';
23
+ let whereClause = `
24
+ FROM admin.qv_organization, target
25
+ WHERE (
26
+ admin.qv_organization.org_path <@ target.org_path
27
+ OR
28
+ admin.qv_organization.org_path @> target.org_path
29
+ )
30
+ AND org_id != '${orgId}'
31
+ `;
32
+ if (contentSharing === undefined) {
33
+ selectClause = `
34
+ SELECT
35
+ COALESCE(ARRAY_AGG(org_id) FILTER (WHERE effective_content_privacy = true), '{}') as db_private,
36
+ COALESCE(ARRAY_AGG(org_id) FILTER (WHERE effective_content_privacy = false), '{}') as db_public
37
+ `;
38
+ }
39
+ else {
40
+ selectClause = `SELECT COALESCE(ARRAY_AGG(org_id), '{}') as db_specific`;
41
+ whereClause += ` AND effective_content_privacy = ${contentSharing}`;
42
+ }
43
+ const fullSql = `${cte} ${selectClause} ${whereClause};`;
44
+ const result = await super.runRawQuery(fullSql, []);
45
+ const row = result[0];
46
+ if (!row)
47
+ return {
48
+ privateIds: [],
49
+ publicIds: [],
50
+ };
51
+ if (contentSharing === undefined) {
52
+ return {
53
+ privateIds: row.db_private,
54
+ publicIds: row.db_public,
55
+ };
56
+ }
57
+ else {
58
+ return {
59
+ privateIds: contentSharing ? row.db_specific : [],
60
+ publicIds: !contentSharing ? row.db_specific : [],
61
+ };
62
+ }
63
+ }
20
64
  }
21
65
  exports.OrganizationRepository = OrganizationRepository;
22
66
  //# sourceMappingURL=organization.repository.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"organization.repository.js","sourceRoot":"","sources":["../../../../src/sharing/implementations/organization.repository.ts"],"names":[],"mappings":";;;;;;AAAA,8EAAqD;AACrD,wDAA+D;AAI/D,MAAa,sBACT,SAAQ,qBAAc;IAGtB;QACI,KAAK,CAAC,4BAAiB,CAAC,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAa;QACtB,MAAM,MAAM,GAAG;YACX,OAAO,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;SAC1C,CAAC;QACF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC9C,OAAO,QAA4B,CAAC;IACxC,CAAC;CACJ;AAfD,wDAeC"}
1
+ {"version":3,"file":"organization.repository.js","sourceRoot":"","sources":["../../../../src/sharing/implementations/organization.repository.ts"],"names":[],"mappings":";;;;;;AAAA,8EAAqD;AACrD,wDAA+D;AAK/D,MAAa,sBACT,SAAQ,qBAAc;IAGtB;QACI,KAAK,CAAC,4BAAiB,CAAC,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAa;QACtB,MAAM,MAAM,GAAG;YACX,OAAO,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;SAC1C,CAAC;QACF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC9C,OAAO,QAA4B,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,UAAU,CACZ,KAAa,EACb,cAAwB;QAExB,MAAM,GAAG,GAAG,8EAA8E,KAAK,IAAI,CAAC;QAEpG,IAAI,YAAY,GAAG,EAAE,CAAC;QACtB,IAAI,WAAW,GAAG;;;;;;;yBAOD,KAAK;KACzB,CAAC;QAEE,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;YAC/B,YAAY,GAAG;;;;SAIlB,CAAC;QACF,CAAC;aAAM,CAAC;YACJ,YAAY,GAAG,yDAAyD,CAAC;YACzE,WAAW,IAAI,oCAAoC,cAAc,EAAE,CAAC;QACxE,CAAC;QAED,MAAM,OAAO,GAAG,GAAG,GAAG,IAAI,YAAY,IAAI,WAAW,GAAG,CAAC;QAEzD,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACpD,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QAEtB,IAAI,CAAC,GAAG;YACJ,OAAO;gBACH,UAAU,EAAE,EAAE;gBACd,SAAS,EAAE,EAAE;aAChB,CAAC;QAEN,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;YAC/B,OAAO;gBACH,UAAU,EAAE,GAAG,CAAC,UAAU;gBAC1B,SAAS,EAAE,GAAG,CAAC,SAAS;aAC3B,CAAC;QACN,CAAC;aAAM,CAAC;YACJ,OAAO;gBACH,UAAU,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE;gBACjD,SAAS,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE;aACpD,CAAC;QACN,CAAC;IACL,CAAC;CACJ;AAnED,wDAmEC"}
@@ -19,7 +19,7 @@ let CheckAppPermissions = class CheckAppPermissions {
19
19
  async execute({ appId, userId, }) {
20
20
  // If no user is available, block access by default
21
21
  if (!userId)
22
- return { privacy: constants_1.AppSharingStatus.PRIVATE };
22
+ return { privacy: constants_1.APP_SHARING_STATUS.PRIVATE };
23
23
  // Fetch application status and global platform configuration in parallel
24
24
  const appInfo = await this.adminRepository.getApplicationInfo({
25
25
  appId,
@@ -28,12 +28,12 @@ let CheckAppPermissions = class CheckAppPermissions {
28
28
  const platform = await this.adminRepository.getPlatformConfiguration();
29
29
  // Check if the application is shared with the current user
30
30
  if (appInfo.status !== 200)
31
- return { privacy: constants_1.AppSharingStatus.PRIVATE };
31
+ return { privacy: constants_1.APP_SHARING_STATUS.PRIVATE };
32
32
  // According to QRV-297, the LegacyMode ON will have public access, in future implementation, other options will be added.
33
33
  const hasPublicAccess = platform === null || platform === void 0 ? void 0 : platform.legacyMode;
34
34
  const privacy = hasPublicAccess
35
- ? constants_1.AppSharingStatus.PUBLIC
36
- : constants_1.AppSharingStatus.PRIVATE;
35
+ ? constants_1.APP_SHARING_STATUS.PUBLIC
36
+ : constants_1.APP_SHARING_STATUS.PRIVATE;
37
37
  return { privacy };
38
38
  }
39
39
  };
@@ -1 +1 @@
1
- {"version":3,"file":"checkAppPermissions.js","sourceRoot":"","sources":["../../../../src/sharing/services/checkAppPermissions.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,uCAA8C;AAE9C,sDAGgC;AAIjB,IAAM,mBAAmB,GAAzB,MAAM,mBAAmB;IACpC,YAEqB,eAAyC;QAAzC,oBAAe,GAAf,eAAe,CAA0B;IAC3D,CAAC;IAEJ,gBAAgB;IAChB,KAAK,CAAC,OAAO,CAAC,EACV,KAAK,EACL,MAAM,GAIT;QACG,mDAAmD;QACnD,IAAI,CAAC,MAAM;YAAE,OAAO,EAAE,OAAO,EAAE,4BAAgB,CAAC,OAAO,EAAE,CAAC;QAE1D,yEAAyE;QACzE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC;YAC1D,KAAK;YACL,MAAM;SACT,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,wBAAwB,EAAE,CAAC;QAEvE,2DAA2D;QAC3D,IAAI,OAAO,CAAC,MAAM,KAAK,GAAG;YACtB,OAAO,EAAE,OAAO,EAAE,4BAAgB,CAAC,OAAO,EAAE,CAAC;QAEjD,0HAA0H;QAC1H,MAAM,eAAe,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,UAAU,CAAC;QAE7C,MAAM,OAAO,GAAG,eAAe;YAC3B,CAAC,CAAC,4BAAgB,CAAC,MAAM;YACzB,CAAC,CAAC,4BAAgB,CAAC,OAAO,CAAC;QAE/B,OAAO,EAAE,OAAO,EAAE,CAAC;IACvB,CAAC;CACJ,CAAA;AArCoB,mBAAmB;IADvC,IAAA,qBAAU,GAAE;IAGJ,WAAA,IAAA,iBAAM,EAAC,iBAAiB,CAAC,CAAA;GAFb,mBAAmB,CAqCvC;kBArCoB,mBAAmB"}
1
+ {"version":3,"file":"checkAppPermissions.js","sourceRoot":"","sources":["../../../../src/sharing/services/checkAppPermissions.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,uCAA8C;AAE9C,sDAGgC;AAIjB,IAAM,mBAAmB,GAAzB,MAAM,mBAAmB;IACpC,YAEqB,eAAyC;QAAzC,oBAAe,GAAf,eAAe,CAA0B;IAC3D,CAAC;IAEJ,gBAAgB;IAChB,KAAK,CAAC,OAAO,CAAC,EACV,KAAK,EACL,MAAM,GAIT;QACG,mDAAmD;QACnD,IAAI,CAAC,MAAM;YAAE,OAAO,EAAE,OAAO,EAAE,8BAAkB,CAAC,OAAO,EAAE,CAAC;QAE5D,yEAAyE;QACzE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC;YAC1D,KAAK;YACL,MAAM;SACT,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,wBAAwB,EAAE,CAAC;QAEvE,2DAA2D;QAC3D,IAAI,OAAO,CAAC,MAAM,KAAK,GAAG;YACtB,OAAO,EAAE,OAAO,EAAE,8BAAkB,CAAC,OAAO,EAAE,CAAC;QAEnD,0HAA0H;QAC1H,MAAM,eAAe,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,UAAU,CAAC;QAE7C,MAAM,OAAO,GAAG,eAAe;YAC3B,CAAC,CAAC,8BAAkB,CAAC,MAAM;YAC3B,CAAC,CAAC,8BAAkB,CAAC,OAAO,CAAC;QAEjC,OAAO,EAAE,OAAO,EAAE,CAAC;IACvB,CAAC;CACJ,CAAA;AArCoB,mBAAmB;IADvC,IAAA,qBAAU,GAAE;IAGJ,WAAA,IAAA,iBAAM,EAAC,iBAAiB,CAAC,CAAA;GAFb,mBAAmB,CAqCvC;kBArCoB,mBAAmB"}
@@ -19,8 +19,8 @@ let CheckOrgPermissions = class CheckOrgPermissions {
19
19
  async execute({ orgId, }) {
20
20
  const hasPublicAccess = await this.organizationRepository.getOne(orgId);
21
21
  const privacy = (hasPublicAccess === null || hasPublicAccess === void 0 ? void 0 : hasPublicAccess.effective_content_privacy)
22
- ? constants_1.AppSharingStatus.PRIVATE
23
- : constants_1.AppSharingStatus.PUBLIC;
22
+ ? constants_1.APP_SHARING_STATUS.PRIVATE
23
+ : constants_1.APP_SHARING_STATUS.PUBLIC;
24
24
  return { privacy };
25
25
  }
26
26
  };
@@ -1 +1 @@
1
- {"version":3,"file":"checkOrgPermissions.js","sourceRoot":"","sources":["../../../../src/sharing/services/checkOrgPermissions.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,uCAA8C;AAE9C,sDAGgC;AAIjB,IAAM,mBAAmB,GAAzB,MAAM,mBAAmB;IACpC,YAEqB,sBAAuD;QAAvD,2BAAsB,GAAtB,sBAAsB,CAAiC;IACzE,CAAC;IAEJ,eAAe;IACf,KAAK,CAAC,OAAO,CAAC,EACV,KAAK,GAGR;QACG,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACxE,MAAM,OAAO,GAAG,CAAA,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,yBAAyB;YACtD,CAAC,CAAC,4BAAgB,CAAC,OAAO;YAC1B,CAAC,CAAC,4BAAgB,CAAC,MAAM,CAAC;QAE9B,OAAO,EAAE,OAAO,EAAE,CAAC;IACvB,CAAC;CACJ,CAAA;AAnBoB,mBAAmB;IADvC,IAAA,qBAAU,GAAE;IAGJ,WAAA,IAAA,iBAAM,EAAC,wBAAwB,CAAC,CAAA;GAFpB,mBAAmB,CAmBvC;kBAnBoB,mBAAmB"}
1
+ {"version":3,"file":"checkOrgPermissions.js","sourceRoot":"","sources":["../../../../src/sharing/services/checkOrgPermissions.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,uCAA8C;AAE9C,sDAGgC;AAIjB,IAAM,mBAAmB,GAAzB,MAAM,mBAAmB;IACpC,YAEqB,sBAAuD;QAAvD,2BAAsB,GAAtB,sBAAsB,CAAiC;IACzE,CAAC;IAEJ,eAAe;IACf,KAAK,CAAC,OAAO,CAAC,EACV,KAAK,GAGR;QACG,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACxE,MAAM,OAAO,GAAG,CAAA,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,yBAAyB;YACtD,CAAC,CAAC,8BAAkB,CAAC,OAAO;YAC5B,CAAC,CAAC,8BAAkB,CAAC,MAAM,CAAC;QAEhC,OAAO,EAAE,OAAO,EAAE,CAAC;IACvB,CAAC;CACJ,CAAA;AAnBoB,mBAAmB;IADvC,IAAA,qBAAU,GAAE;IAGJ,WAAA,IAAA,iBAAM,EAAC,wBAAwB,CAAC,CAAA;GAFpB,mBAAmB,CAmBvC;kBAnBoB,mBAAmB"}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
9
+ return function (target, key) { decorator(target, key, paramIndex); }
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ const tsyringe_1 = require("tsyringe");
13
+ let GetOrgTree = class GetOrgTree {
14
+ constructor(organizationRepository) {
15
+ this.organizationRepository = organizationRepository;
16
+ }
17
+ async execute(orgId, contentSharingStatus) {
18
+ return this.organizationRepository.getOrgTree(orgId, contentSharingStatus);
19
+ }
20
+ };
21
+ GetOrgTree = __decorate([
22
+ (0, tsyringe_1.injectable)(),
23
+ __param(0, (0, tsyringe_1.inject)('OrganizationRepository'))
24
+ ], GetOrgTree);
25
+ exports.default = GetOrgTree;
26
+ //# sourceMappingURL=getOrgTree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getOrgTree.js","sourceRoot":"","sources":["../../../../src/sharing/services/getOrgTree.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,uCAA8C;AAM/B,IAAM,UAAU,GAAhB,MAAM,UAAU;IAC3B,YAEqB,sBAAuD;QAAvD,2BAAsB,GAAtB,sBAAsB,CAAiC;IACzE,CAAC;IAEJ,KAAK,CAAC,OAAO,CACT,KAAa,EACb,oBAA6B;QAE7B,OAAO,IAAI,CAAC,sBAAsB,CAAC,UAAU,CACzC,KAAK,EACL,oBAAoB,CACvB,CAAC;IACN,CAAC;CACJ,CAAA;AAfoB,UAAU;IAD9B,IAAA,qBAAU,GAAE;IAGJ,WAAA,IAAA,iBAAM,EAAC,wBAAwB,CAAC,CAAA;GAFpB,UAAU,CAe9B;kBAfoB,UAAU"}
@@ -46,6 +46,7 @@ var DATABASE_INFO = {
46
46
  TABLE_PREFIX: ENVIRONMENT.TABLE_PREFIX
47
47
  };
48
48
  var ORGANIZATION_QRVEY = "org:0";
49
+ var ORGANIZATION_ANONYMOUS = "anonymous";
49
50
  var ASSET_TYPE = /* @__PURE__ */ ((ASSET_TYPE2) => {
50
51
  ASSET_TYPE2["DX"] = "DX";
51
52
  ASSET_TYPE2["DM"] = "DM";
@@ -70,6 +71,11 @@ var ACCESS_LEVEL = /* @__PURE__ */ ((ACCESS_LEVEL3) => {
70
71
  ACCESS_LEVEL3[ACCESS_LEVEL3["ADMIN"] = 4] = "ADMIN";
71
72
  return ACCESS_LEVEL3;
72
73
  })(ACCESS_LEVEL || {});
74
+ var APP_SHARING_STATUS = /* @__PURE__ */ ((APP_SHARING_STATUS2) => {
75
+ APP_SHARING_STATUS2["PUBLIC"] = "public";
76
+ APP_SHARING_STATUS2["PRIVATE"] = "private";
77
+ return APP_SHARING_STATUS2;
78
+ })(APP_SHARING_STATUS || {});
73
79
  var LIMIT_PER_PAGE = 10;
74
80
 
75
81
  // src/quser/implementations/group.model.ts
@@ -500,6 +506,48 @@ var OrganizationRepository = class extends BaseRepository {
500
506
  const response = await super.findItem(params);
501
507
  return response;
502
508
  }
509
+ async getOrgTree(orgId, contentSharing) {
510
+ const cte = `WITH target AS (SELECT org_path FROM admin.qv_organization WHERE org_id = '${orgId}')`;
511
+ let selectClause = "";
512
+ let whereClause = `
513
+ FROM admin.qv_organization, target
514
+ WHERE (
515
+ admin.qv_organization.org_path <@ target.org_path
516
+ OR
517
+ admin.qv_organization.org_path @> target.org_path
518
+ )
519
+ AND org_id != '${orgId}'
520
+ `;
521
+ if (contentSharing === void 0) {
522
+ selectClause = `
523
+ SELECT
524
+ COALESCE(ARRAY_AGG(org_id) FILTER (WHERE effective_content_privacy = true), '{}') as db_private,
525
+ COALESCE(ARRAY_AGG(org_id) FILTER (WHERE effective_content_privacy = false), '{}') as db_public
526
+ `;
527
+ } else {
528
+ selectClause = `SELECT COALESCE(ARRAY_AGG(org_id), '{}') as db_specific`;
529
+ whereClause += ` AND effective_content_privacy = ${contentSharing}`;
530
+ }
531
+ const fullSql = `${cte} ${selectClause} ${whereClause};`;
532
+ const result = await super.runRawQuery(fullSql, []);
533
+ const row = result[0];
534
+ if (!row)
535
+ return {
536
+ privateIds: [],
537
+ publicIds: []
538
+ };
539
+ if (contentSharing === void 0) {
540
+ return {
541
+ privateIds: row.db_private,
542
+ publicIds: row.db_public
543
+ };
544
+ } else {
545
+ return {
546
+ privateIds: contentSharing ? row.db_specific : [],
547
+ publicIds: !contentSharing ? row.db_specific : []
548
+ };
549
+ }
550
+ }
503
551
  };
504
552
  var SharingModel = class extends CrudSchema {
505
553
  };
@@ -893,6 +941,21 @@ DeleteSharing = __decorateClass([
893
941
  injectable(),
894
942
  __decorateParam(0, inject("SharingRepository"))
895
943
  ], DeleteSharing);
944
+ var GetOrgTree = class {
945
+ constructor(organizationRepository) {
946
+ this.organizationRepository = organizationRepository;
947
+ }
948
+ async execute(orgId, contentSharingStatus) {
949
+ return this.organizationRepository.getOrgTree(
950
+ orgId,
951
+ contentSharingStatus
952
+ );
953
+ }
954
+ };
955
+ GetOrgTree = __decorateClass([
956
+ injectable(),
957
+ __decorateParam(0, inject("OrganizationRepository"))
958
+ ], GetOrgTree);
896
959
  var ListSharing = class {
897
960
  constructor(sharingRepository, detailsRepository) {
898
961
  this.sharingRepository = sharingRepository;
@@ -1126,9 +1189,10 @@ var api = {
1126
1189
  var checkUserAccessLevel = (...args) => Context.resolve(CheckUserAccessLevel).execute(...args);
1127
1190
  var checkAppPermissions = (...args) => Context.resolve(CheckAppPermissions).execute(...args);
1128
1191
  var checkOrgPermissions = (...args) => Context.resolve(CheckOrgPermissions).execute(...args);
1192
+ var getOrgTree = (...args) => Context.resolve(GetOrgTree).execute(...args);
1129
1193
  var fromTokenToUser = (...args) => Context.resolve(FromTokenToUser).execute(...args);
1130
1194
  var hasAdminRole = (...args) => Context.resolve(HasAdminRole).execute(...args);
1131
1195
 
1132
- export { ACCESS_LEVEL, ASSET_TYPE, ORGANIZATION_QRVEY, SHARED_ORIGIN, SHARE_TYPE, api, checkAppPermissions, checkOrgPermissions, checkUserAccessLevel, fromTokenToUser, hasAdminRole };
1196
+ export { ACCESS_LEVEL, APP_SHARING_STATUS, ASSET_TYPE, ORGANIZATION_ANONYMOUS, ORGANIZATION_QRVEY, SHARED_ORIGIN, SHARE_TYPE, api, checkAppPermissions, checkOrgPermissions, checkUserAccessLevel, fromTokenToUser, getOrgTree, hasAdminRole };
1133
1197
  //# sourceMappingURL=index.mjs.map
1134
1198
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/common/constants.ts","../../src/quser/implementations/group.model.ts","../../src/common/persistence/poolClient.ts","../../src/common/persistence/base.ts","../../src/quser/implementations/group.repository.ts","../../src/quser/implementations/user.model.ts","../../src/quser/implementations/user.repository.ts","../../src/sharing/implementations/admin.repository.ts","../../src/sharing/implementations/details.model.ts","../../src/sharing/implementations/details.repository.ts","../../src/sharing/implementations/dm.model.ts","../../src/sharing/implementations/dm.repository.ts","../../src/sharing/implementations/dx.model.ts","../../src/sharing/implementations/dx.repository.ts","../../src/sharing/implementations/organization.model.ts","../../src/sharing/implementations/organization.repository.ts","../../src/sharing/implementations/sharing.model.ts","../../src/sharing/implementations/sharing.repository.ts","../../src/context.ts","../../src/common/util.ts","../../src/quser/entities/user.ts","../../src/quser/services/fromTokenToUser.ts","../../src/quser/services/hasAdminRole.ts","../../src/sharing/services/checkAppPermissions.ts","../../src/sharing/services/checkOrgPermissions.ts","../../src/sharing/entities/details.ts","../../src/sharing/services/checkUserAccessLevel.ts","../../src/sharing/services/delete.ts","../../src/sharing/services/list.ts","../../src/sharing/entities/sharing.ts","../../src/sharing/services/upsert.ts","../../src/index.ts"],"names":["ASSET_TYPE","SHARED_ORIGIN","SHARE_TYPE","ACCESS_LEVEL","CrudSchema","injectable","inject"],"mappings":"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","file":"index.mjs","sourcesContent":["export const ENVIRONMENT = {\n SERVER_PREFIX: process.env.SERVER_PREFIX,\n TABLE_PREFIX: process.env.TABLE_PREFIX,\n DOMAIN: process.env.DOMAIN,\n API_KEY: process.env.API_KEY,\n};\n\nexport const DATABASE_INFO = {\n DATA_PERSISTENCE_SCHEMA: 'admin',\n SERVER_PREFIX: ENVIRONMENT.SERVER_PREFIX,\n TABLE_PREFIX: ENVIRONMENT.TABLE_PREFIX,\n};\n\nexport const ORGANIZATION_QRVEY = 'org:0';\n\nexport enum ASSET_TYPE {\n DX = 'DX', // DASHBOARD X (Next Gen)\n DM = 'DM', // DOWNLOAD MANAGER\n}\n\nexport enum SHARED_ORIGIN {\n INTERNAL = 'INTERNAL', // for org:0\n EXTERNAL = 'EXTERNAL', // for orgs different that 0\n UNKNOWN = 'UNKNOWN', // without orgId\n}\n\nexport enum SHARE_TYPE {\n USER = 'USER',\n ROLE = 'ROLE',\n ORGANIZATION = 'ORGANIZATION',\n}\n\n/**\n * Access levels for assets.\n * Those are calculated with Base 2, so:\n * - NONE = 0 (undefined)\n * - CAN_USE = 1 (2^0)\n * - CAN_EDIT = 2 (2^1)\n * - ADMIN = 4 (2^2)\n * - (Future) SUPER = 8 (2^3)\n */\nexport enum ACCESS_LEVEL {\n NONE = 0,\n CAN_USE = 1,\n CAN_EDIT = 2,\n ADMIN = 4,\n}\n\nexport enum AppSharingStatus {\n PUBLIC = 'public',\n PRIVATE = 'private',\n}\n\nexport interface AppPermissionResponse {\n privacy: AppSharingStatus;\n}\n\nexport interface AppOwner {\n userId: string;\n appId: string;\n userEmail?: string;\n}\n\nexport const LIMIT_PER_PAGE = 10;\n","import { CrudSchema } from '@qrvey/data-persistence';\n\nimport { DATABASE_INFO } from '../../common/constants';\n\nexport class GroupModel extends CrudSchema {\n static table = {\n name: `${DATABASE_INFO.SERVER_PREFIX}Groups`,\n alias: 'qv_groups',\n };\n\n static columns = {\n groupid: {\n type: 'string',\n },\n };\n\n static schema = DATABASE_INFO.DATA_PERSISTENCE_SCHEMA;\n}\n","import { getDbPool } from '@qrvey/data-persistence';\n\nlet poolClient: any;\nexport function getPoolClient() {\n if (!poolClient) poolClient = getDbPool();\n return poolClient;\n}\n","import { CrudService, buildFilter } from '@qrvey/data-persistence';\n\nimport { getPoolClient } from './poolClient';\n\nexport class BaseRepository extends CrudService<any> {\n constructor(schema: any) {\n super(schema, getPoolClient());\n }\n\n filter(attribute: string, value: any, operator?: string) {\n return buildFilter(attribute, value, operator);\n }\n}\n","import { GroupModel } from './group.model';\nimport { BaseRepository } from '../../common/persistence/base';\nimport { RoleRepositoryInterface } from '../interfaces/rolesRepository.interface';\n\nexport class GroupRepository\n extends BaseRepository\n implements RoleRepositoryInterface\n{\n constructor() {\n super(GroupModel);\n }\n\n async getOne(identifier: string): Promise<{ groupid: string } | null> {\n const params = {\n filters: [this.filter('groupid', identifier)],\n };\n const response = await super.findItem(params);\n return response as { groupid: string };\n }\n}\n","import { CrudSchema } from '@qrvey/data-persistence';\n\nimport { DATABASE_INFO } from '../../common/constants';\n\nexport class UserModel extends CrudSchema {\n static table = {\n name: `${DATABASE_INFO.SERVER_PREFIX}Users`,\n alias: 'qv_users',\n };\n\n static columns = {\n userid: {\n type: 'string',\n primary: true,\n columnId: true,\n },\n groups: {\n type: 'array',\n },\n };\n\n static schema = DATABASE_INFO.DATA_PERSISTENCE_SCHEMA;\n}\n","import { UserModel } from './user.model';\nimport { ListInput, ListOutput } from '../../common/common.type';\nimport { BaseRepository } from '../../common/persistence/base';\nimport { BaseUser } from '../entities/types/user.type';\nimport { UserRepositoryInterface } from '../interfaces/userRepository.interface';\n\nexport class UserRepository\n extends BaseRepository\n implements UserRepositoryInterface\n{\n constructor() {\n super(UserModel);\n }\n\n async getOne(identifier: string): Promise<BaseUser | null> {\n const params = {\n filters: [this.filter('userid', identifier)],\n };\n const response = await super.findItem(params);\n return response as BaseUser;\n }\n\n async getList(\n options: ListInput<{ identifier: string; role?: string }>,\n ): Promise<ListOutput<BaseUser>> {\n const params = {\n filters: [\n this.filter('userid', options.data.identifier),\n this.filter('groups', options.data.role, 'CONTAINS'),\n ],\n };\n const response = await super.find(params);\n return response as ListOutput<BaseUser>;\n }\n}\n","import { getAttribute } from '@qrvey/utils';\n\nimport { ENVIRONMENT } from '../../common/constants';\nimport { AdminRepositoryInterface } from '../interfaces/adminRepository.interface';\n\nexport class AdminRepository implements AdminRepositoryInterface {\n async getApplicationInfo(body: { appId: string; userId: string }) {\n const url = `${ENVIRONMENT.DOMAIN}/devapi/v4/user/${body.userId}/app/${body.appId}`;\n\n const headers = {\n 'x-api-key': ENVIRONMENT.API_KEY as string,\n };\n\n const requestOptions: RequestInit = {\n method: 'GET',\n headers,\n };\n\n const response = await fetch(url, requestOptions);\n\n const data = (await response.json()) as {\n userid?: string;\n appId?: string;\n userEmail?: string;\n };\n\n return {\n status: response.status,\n data: {\n userId: data?.userid ?? body.userId,\n appId: getAttribute(data, 'appId'),\n userEmail: getAttribute(data, 'userEmail'),\n },\n };\n }\n\n async getPlatformConfiguration(): Promise<{\n status: number;\n legacyMode: boolean;\n }> {\n const url = `${ENVIRONMENT.DOMAIN}/admin/api/v5/customization/features/platform`;\n\n const headers = {\n 'x-api-key': ENVIRONMENT.API_KEY as string,\n };\n\n const requestOptions: RequestInit = {\n method: 'GET',\n headers,\n };\n\n const response = await fetch(url, requestOptions);\n\n const data = (await response.json()) as {\n Item: {\n settings: {\n legacyMode: boolean;\n };\n };\n };\n return {\n status: response.status,\n legacyMode: data?.Item?.settings?.legacyMode ?? true,\n };\n }\n}\n","import { CrudSchema } from '@qrvey/data-persistence';\n\nimport { DATABASE_INFO } from '../../common/constants';\n\nexport class SharingDetailsModel extends CrudSchema {\n static table = {\n name: `${DATABASE_INFO.SERVER_PREFIX}_sharing_details`,\n alias: `${DATABASE_INFO.TABLE_PREFIX}_sharing_details`,\n };\n\n static columns = {\n sharing_details_id: { type: 'string', primary: true },\n asset_id: { type: 'string' },\n access_level: { type: 'numeric' },\n org_id: { type: 'string' },\n shared_with: { type: 'string' },\n shared_type: { type: 'string' },\n shared_email: { type: 'string' },\n share_origin: { type: 'string' },\n created_at: { type: 'date' },\n updated_at: { type: 'date' },\n deleted_at: { type: 'date' },\n };\n\n static indexes = {\n sharingDetailsOrgId: {\n name: 'sharing_details_org_id_index',\n columns: [\n 'org_id',\n 'asset_id',\n 'sharing_details_id',\n 'shared_with',\n 'shared_type',\n 'shared_email',\n 'share_origin',\n ],\n },\n sharingDetailsSharedWithAccessLevel: {\n name: 'sharing_details_shared_with_access_level_index',\n columns: [\n 'shared_with',\n 'access_level',\n 'asset_id',\n 'sharing_details_id',\n 'org_id',\n 'shared_type',\n 'shared_email',\n 'share_origin',\n ],\n },\n sharingDetailsAccessLevelSharedWithOrgId: {\n name: 'sharing_details_access_level_shared_with_org_id_index',\n columns: [\n 'access_level',\n 'shared_with',\n 'org_id',\n 'asset_id',\n 'sharing_details_id',\n 'shared_type',\n 'shared_email',\n 'share_origin',\n ],\n },\n sharingDetailsAccessLevelOrgId: {\n name: 'sharing_details_access_level_org_id_index',\n columns: [\n 'access_level',\n 'org_id',\n 'asset_id',\n 'sharing_details_id',\n 'shared_with',\n 'shared_type',\n 'shared_email',\n 'share_origin',\n ],\n },\n sharingDetailsAssetId: {\n name: 'sharing_details_asset_id_index',\n columns: [\n 'asset_id',\n 'sharing_details_id',\n 'org_id',\n 'shared_with',\n 'shared_type',\n 'shared_email',\n 'share_origin',\n ],\n },\n };\n\n static schema = DATABASE_INFO.DATA_PERSISTENCE_SCHEMA;\n static usePool = true;\n}\n","import { IFilter } from '@qrvey/data-persistence';\n\nimport { SharingDetailsModel } from './details.model';\nimport {\n ListInput,\n ListOutput,\n Pagination,\n ParamsFromTokenToUser,\n} from '../../common/common.type';\nimport { LIMIT_PER_PAGE, ORGANIZATION_QRVEY } from '../../common/constants';\nimport { BaseRepository } from '../../common/persistence/base';\nimport { SharingDetailsTable } from '../entities/types/details.type';\nimport { SharingDetailsRepositoryInterface } from '../interfaces/detailsRepository.interface';\n\nexport class SharingDetailsRepository\n extends BaseRepository\n implements SharingDetailsRepositoryInterface\n{\n constructor() {\n super(SharingDetailsModel);\n }\n\n async getOne(sharingDetailId: string): Promise<SharingDetailsTable | null> {\n const params = {\n filters: [this.filter('sharing_details_id', sharingDetailId)],\n };\n const response = await super.findItem(params);\n return response as SharingDetailsTable;\n }\n\n async getBySharedWith(\n assetId: string,\n sharedWith: string,\n ): Promise<SharingDetailsTable | null> {\n const filterList = [\n this.filter('asset_id', assetId),\n this.filter('shared_with', sharedWith),\n ];\n const params = {\n filters: filterList,\n };\n const response = await super.findItem(params);\n return response as SharingDetailsTable;\n }\n\n async getList(\n options: ListInput<{ assetId: string; user?: ParamsFromTokenToUser }>,\n ): Promise<ListOutput<SharingDetailsTable>> {\n const assetIndex = SharingDetailsModel.indexes.sharingDetailsAssetId;\n const pagination = this.getPagination(options.pagination);\n const params: {\n pagination: any;\n index: any;\n filters?: any;\n sorting?: any;\n } = {\n pagination,\n index: {\n indexName: assetIndex.name,\n columns: assetIndex.columns,\n },\n };\n\n const filterList = [this.filter('asset_id', options.data.assetId)];\n if (options.filters) {\n options.filters.forEach((filter) => {\n filterList.push(this.filter(filter.column, filter.value));\n });\n }\n params.filters = filterList;\n\n if (options.data.user) {\n const currentFilter = this.getUserFilter(\n options.data.user,\n filterList,\n );\n params.filters = currentFilter;\n }\n\n if (options.sorting) params.sorting = options.sorting;\n\n const response = await super.find(params);\n return response as ListOutput<SharingDetailsTable>;\n }\n\n async create(details: SharingDetailsTable): Promise<SharingDetailsTable> {\n const response = (await super.create(details)) as SharingDetailsTable;\n return response;\n }\n\n async patch(\n sharingDetailId: string,\n details: SharingDetailsTable,\n ): Promise<boolean> {\n await super.update(\n [this.filter('sharing_details_id', sharingDetailId)],\n details,\n );\n return true;\n }\n\n async delete(sharingDetailId: string): Promise<boolean> {\n await super.remove([\n this.filter('sharing_details_id', sharingDetailId),\n ]);\n return true;\n }\n\n private getPagination(options?: Pagination): Pagination {\n return {\n limit: options?.limit ?? LIMIT_PER_PAGE,\n from: options?.from ?? undefined,\n };\n }\n\n private getUserFilter(\n user: ParamsFromTokenToUser,\n currentFilters?: IFilter[],\n ) {\n const { userId, roles } = user;\n const orgId = user.orgId === '' ? ORGANIZATION_QRVEY : user.orgId; //Review if this is right\n const sharing = {\n OR: [\n {\n AND: [\n this.buildFilter('shared_with', userId),\n this.buildFilter('shared_type', 'USER'),\n this.buildFilter('org_id', orgId),\n ],\n },\n {\n AND: [\n this.buildFilter('shared_with', orgId),\n this.buildFilter('shared_type', 'ORGANIZATION'),\n this.buildFilter('org_id', orgId),\n ],\n },\n ],\n };\n if (roles && roles?.length > 0) {\n sharing.OR.push({\n AND: [\n this.buildFilter('shared_with', roles, 'IN'),\n this.buildFilter('shared_type', 'ROLE'),\n this.buildFilter('org_id', orgId),\n ],\n });\n }\n const filter = [];\n if (currentFilters) filter.push(...currentFilters);\n filter.push(sharing);\n return { AND: filter };\n }\n}\n","import { CrudSchema } from '@qrvey/data-persistence';\n\nimport { DATABASE_INFO } from '../../common/constants';\n\nexport class DownloadManagerSchema extends CrudSchema {\n static table = {\n name: `${DATABASE_INFO.SERVER_PREFIX}DownloadManager`,\n alias: `${DATABASE_INFO.TABLE_PREFIX}_download_manager`,\n };\n\n static columns = {\n downloadManagerId: {\n primary: true,\n type: 'String',\n columnId: true,\n },\n };\n\n static schema = 'exports';\n static usePool = true;\n}\n","import { DownloadManagerSchema } from './dm.model';\nimport { BaseRepository } from '../../common/persistence/base';\nimport { DownloadManagerRepositoryInterface } from '../interfaces/downloadManagerRepository.interface';\n\nexport class DownloadManagerRepository\n extends BaseRepository\n implements DownloadManagerRepositoryInterface\n{\n constructor() {\n super(DownloadManagerSchema);\n }\n\n async get(\n identifier: string,\n ): Promise<{ downloadManagerId: string } | null> {\n const filterList = [this.filter('downloadManagerId', identifier)];\n const params = {\n filters: filterList,\n };\n const response = await super.findItem(params);\n return response as { downloadManagerId: string };\n }\n}\n","import { CrudSchema } from '@qrvey/data-persistence';\n\nimport { DATABASE_INFO } from '../../common/constants';\n\nexport class DashboardSchema extends CrudSchema {\n static table = {\n name: `${DATABASE_INFO.SERVER_PREFIX}_dx_dashboard`,\n alias: `${DATABASE_INFO.TABLE_PREFIX}_dashboard`,\n };\n\n static columns = {\n ResourceUID: { type: 'string', primary: true },\n dashboardId: { type: 'string' },\n contentId: { type: 'string' },\n userId: { type: 'string' },\n ownerId: { type: 'string' },\n appId: { type: 'string' },\n qvAttributes: { type: 'object' },\n };\n\n static indexes = {\n ResourceUID: {\n name: 'MetadataByResource',\n columns: ['Metadata', 'ResourceUID'],\n },\n };\n\n static schema = 'dashboard_x';\n static usePool = true;\n}\n","import { DashboardSchema } from './dx.model';\nimport { BaseRepository } from '../../common/persistence/base';\nimport { DashboardRepositoryInterface } from '../interfaces/dashboardRepository.interface';\n\nexport class DashboardRepository\n extends BaseRepository\n implements DashboardRepositoryInterface\n{\n constructor() {\n super(DashboardSchema);\n }\n\n async get(identifier: string): Promise<{ dashboardId: string } | null> {\n const uid = `DASHBOARD=${identifier}&BRANCH=MAIN`;\n const filterList = [this.filter('ResourceUID', uid)];\n const params = {\n filters: filterList,\n };\n const response = await super.findItem(params);\n return response as { dashboardId: string };\n }\n}\n","import { CrudSchema } from '@qrvey/data-persistence';\n\nimport { DATABASE_INFO } from '../../common/constants';\n\nexport default class OrganizationModel extends CrudSchema {\n static readonly table = {\n name: 'qv_organization',\n alias: `${DATABASE_INFO.TABLE_PREFIX}_organization`,\n };\n\n static readonly columns = {\n org_id: { type: 'string', primary: true },\n name: { type: 'string' },\n parent_org_id: { type: 'string' },\n org_path: { type: 'string' },\n content_privacy: { type: 'boolean' },\n effective_content_privacy: { type: 'boolean' },\n created_at: { type: 'string' },\n updated_at: { type: 'string' },\n };\n\n static readonly indexes = {\n org_path: { name: 'idx_qv_orgs_org_path_gist', columns: ['org_path'] },\n parent_org_id: {\n name: 'idx_qv_orgs_parent',\n columns: ['parent_org_id'],\n },\n };\n\n static readonly schema = DATABASE_INFO.DATA_PERSISTENCE_SCHEMA;\n static readonly usePool = true;\n}\n","import OrganizationModel from './organization.model';\nimport { BaseRepository } from '../../common/persistence/base';\nimport { OrganizationType } from '../entities/types/organization.type';\nimport { OrganizationRepositoryInterface } from '../interfaces/organizationRepository.interface';\n\nexport class OrganizationRepository\n extends BaseRepository\n implements OrganizationRepositoryInterface\n{\n constructor() {\n super(OrganizationModel);\n }\n\n async getOne(orgId: string): Promise<OrganizationType | null> {\n const params = {\n filters: [this.filter('org_id', orgId)],\n };\n const response = await super.findItem(params);\n return response as OrganizationType;\n }\n}\n","import { CrudSchema } from '@qrvey/data-persistence';\n\nimport { DATABASE_INFO } from '../../common/constants';\n\nexport class SharingModel extends CrudSchema {\n static table = {\n name: `${DATABASE_INFO.SERVER_PREFIX}_sharing`,\n alias: `${DATABASE_INFO.TABLE_PREFIX}_sharing`,\n };\n\n static columns = {\n asset_id: { type: 'string', primary: true },\n asset_type: { type: 'string' },\n created_at: { type: 'date' },\n updated_at: { type: 'date' },\n deleted_at: { type: 'date' },\n qvAttributes: { type: 'object' },\n };\n\n static indexes = {\n sharingAssetIdAssetType: {\n name: 'sharing_asset_id_asset_type_index',\n columns: ['asset_id', 'asset_type'],\n },\n sharingAssetType: {\n name: 'sharing_asset_type_index',\n columns: ['asset_type'],\n },\n };\n\n static schema = DATABASE_INFO.DATA_PERSISTENCE_SCHEMA;\n static usePool = true;\n}\n","import { SharingModel } from './sharing.model';\nimport { BaseRepository } from '../../common/persistence/base';\nimport { SharingTable } from '../entities/types/sharing.type';\nimport { SharingRepositoryInterface } from '../interfaces/sharingRepository.interface';\n\nexport class SharingRepository\n extends BaseRepository\n implements SharingRepositoryInterface\n{\n constructor() {\n super(SharingModel);\n }\n\n async getOne(assetId: string): Promise<SharingTable | null> {\n const params = {\n filters: [this.filter('asset_id', assetId)],\n };\n const response = await super.findItem(params);\n return response as SharingTable;\n }\n\n async create(sharing: SharingTable): Promise<SharingTable> {\n const response = (await super.create(sharing)) as SharingTable;\n return response;\n }\n\n async patch(assetId: string, sharing: SharingTable): Promise<boolean> {\n await super.update([this.filter('asset_id', assetId)], sharing);\n return true;\n }\n\n async delete(assetId: string): Promise<boolean> {\n await super.remove([this.filter('asset_id', assetId)]);\n return true;\n }\n}\n","import { container } from 'tsyringe';\n\nimport { GroupRepository } from './quser/implementations/group.repository';\nimport { UserRepository } from './quser/implementations/user.repository';\nimport { type RoleRepositoryInterface } from './quser/interfaces/rolesRepository.interface';\nimport { type UserRepositoryInterface } from './quser/interfaces/userRepository.interface';\nimport { AdminRepository } from './sharing/implementations/admin.repository';\nimport { SharingDetailsRepository } from './sharing/implementations/details.repository';\nimport { DownloadManagerRepository } from './sharing/implementations/dm.repository';\nimport { DashboardRepository } from './sharing/implementations/dx.repository';\nimport { OrganizationRepository } from './sharing/implementations/organization.repository';\nimport { SharingRepository } from './sharing/implementations/sharing.repository';\nimport { AdminRepositoryInterface } from './sharing/interfaces/adminRepository.interface';\nimport { type DashboardRepositoryInterface } from './sharing/interfaces/dashboardRepository.interface';\nimport { type SharingDetailsRepositoryInterface } from './sharing/interfaces/detailsRepository.interface';\nimport { type DownloadManagerRepositoryInterface } from './sharing/interfaces/downloadManagerRepository.interface';\nimport { OrganizationRepositoryInterface } from './sharing/interfaces/organizationRepository.interface';\nimport { type SharingRepositoryInterface } from './sharing/interfaces/sharingRepository.interface';\n\ncontainer.register<SharingRepositoryInterface>(\n 'SharingRepository',\n SharingRepository,\n);\ncontainer.register<SharingDetailsRepositoryInterface>(\n 'SharingDetailsRepository',\n SharingDetailsRepository,\n);\ncontainer.register<UserRepositoryInterface>('UserRepository', UserRepository);\ncontainer.register<RoleRepositoryInterface>('RoleRepository', GroupRepository);\ncontainer.register<DashboardRepositoryInterface>(\n 'dxRepository',\n DashboardRepository,\n);\ncontainer.register<DownloadManagerRepositoryInterface>(\n 'dmRepository',\n DownloadManagerRepository,\n);\ncontainer.register<OrganizationRepositoryInterface>(\n 'OrganizationRepository',\n OrganizationRepository,\n);\ncontainer.register<AdminRepositoryInterface>(\n 'AdminRepository',\n AdminRepository,\n);\n\nexport const Context = container;\n","enum LOGIN_TYPES {\n composer = 'qrveyLogin',\n openIdComposer = 'OPENID_CREATORS',\n}\n\nexport function isComposer(type: string): boolean {\n return type === LOGIN_TYPES.composer || type === LOGIN_TYPES.openIdComposer;\n}\n","import { BaseUser } from './types/user.type';\n\nexport class User {\n private userId: string;\n private email: string;\n private groups: string[];\n private organization: string;\n\n constructor(params: BaseUser) {\n this.userId = params.userid;\n this.email = params.email;\n this.groups = params.groups;\n this.organization = params.organization;\n }\n\n public get getUserId(): string {\n return this.userId;\n }\n\n public get getEmail(): string {\n return this.email;\n }\n\n public get getGroups(): string[] {\n return this.groups;\n }\n\n public get getOrganization(): string {\n return this.organization;\n }\n}\n","import { inject, injectable } from 'tsyringe';\n\nimport { ParamsFromTokenToUser } from '../../common/common.type';\nimport { ORGANIZATION_QRVEY } from '../../common/constants';\nimport { isComposer } from '../../common/util';\nimport { UserToken } from '../entities/types/user.type';\nimport { User } from '../entities/user';\nimport { UserRepositoryInterface } from '../interfaces/userRepository.interface';\n\n@injectable()\nexport class FromTokenToUser {\n constructor(\n @inject('UserRepository')\n private readonly userRepository: UserRepositoryInterface,\n ) {}\n\n public async execute({\n body,\n }: {\n body: UserToken;\n }): Promise<ParamsFromTokenToUser> {\n const current = await this.userRepository.getOne(\n body.clientId || body.userId,\n );\n if (current) {\n const user = new User(current);\n return {\n userId: user.getUserId,\n roles: user.getGroups,\n orgId: body.orgId ?? ORGANIZATION_QRVEY,\n };\n }\n\n const inComposer = isComposer(body.loginType || '');\n if (!inComposer) {\n return {\n userId: body.clientId || '',\n roles: body.roles || [],\n orgId: body.orgId || '',\n };\n }\n\n return {\n userId: '',\n roles: [],\n orgId: '',\n };\n }\n}\n","import { inject, injectable } from 'tsyringe';\n\nimport { ORGANIZATION_QRVEY } from '../../common/constants';\nimport { isComposer } from '../../common/util';\nimport { UserRepositoryInterface } from '../interfaces/userRepository.interface';\n\n@injectable()\nexport class HasAdminRole {\n constructor(\n @inject('UserRepository')\n private readonly userRepository: UserRepositoryInterface,\n ) {}\n\n public async execute({\n apiKey,\n clientId,\n orgId,\n userId,\n loginType,\n }: {\n apiKey?: string;\n clientId?: string;\n orgId?: string;\n userId?: string;\n loginType?: string;\n } = {}): Promise<boolean> {\n if (!userId) return false;\n\n const existingUser = await this.userRepository.getOne(userId);\n const isMasterKey =\n apiKey && (orgId === undefined || orgId === ORGANIZATION_QRVEY);\n if (isMasterKey && existingUser && (!clientId || clientId === userId))\n return true;\n\n const user = await this.userRepository.getList({\n data: { identifier: clientId ?? userId, role: 'administrator' },\n });\n const isAdmin = user.items.length > 0;\n\n if (isMasterKey && isAdmin) return true;\n\n const inComposer = isComposer(loginType || '');\n const isExternal =\n (!clientId && !inComposer) ||\n (orgId && orgId !== ORGANIZATION_QRVEY);\n if (isExternal) return false;\n\n if (isAdmin) return true;\n\n return false;\n }\n}\n","import { inject, injectable } from 'tsyringe';\n\nimport {\n AppPermissionResponse,\n AppSharingStatus,\n} from '../../common/constants';\nimport { AdminRepositoryInterface } from '../interfaces/adminRepository.interface';\n\n@injectable()\nexport default class CheckAppPermissions {\n constructor(\n @inject('AdminRepository')\n private readonly adminRepository: AdminRepositoryInterface,\n ) {}\n\n //TODO Need Test\n async execute({\n appId,\n userId,\n }: {\n appId: string;\n userId: string;\n }): Promise<AppPermissionResponse> {\n // If no user is available, block access by default\n if (!userId) return { privacy: AppSharingStatus.PRIVATE };\n\n // Fetch application status and global platform configuration in parallel\n const appInfo = await this.adminRepository.getApplicationInfo({\n appId,\n userId,\n });\n const platform = await this.adminRepository.getPlatformConfiguration();\n\n // Check if the application is shared with the current user\n if (appInfo.status !== 200)\n return { privacy: AppSharingStatus.PRIVATE };\n\n // According to QRV-297, the LegacyMode ON will have public access, in future implementation, other options will be added.\n const hasPublicAccess = platform?.legacyMode;\n\n const privacy = hasPublicAccess\n ? AppSharingStatus.PUBLIC\n : AppSharingStatus.PRIVATE;\n\n return { privacy };\n }\n}\n","import { inject, injectable } from 'tsyringe';\n\nimport {\n AppPermissionResponse,\n AppSharingStatus,\n} from '../../common/constants';\nimport { OrganizationRepositoryInterface } from '../interfaces/organizationRepository.interface';\n\n@injectable()\nexport default class CheckOrgPermissions {\n constructor(\n @inject('OrganizationRepository')\n private readonly organizationRepository: OrganizationRepositoryInterface,\n ) {}\n\n //TODO Need Tes\n async execute({\n orgId,\n }: {\n orgId: string;\n }): Promise<AppPermissionResponse> {\n const hasPublicAccess = await this.organizationRepository.getOne(orgId);\n const privacy = hasPublicAccess?.effective_content_privacy\n ? AppSharingStatus.PRIVATE\n : AppSharingStatus.PUBLIC;\n\n return { privacy };\n }\n}\n","import { getId } from '@qrvey/id-generator';\n\nimport {\n BaseSharingDetails,\n CreateSharingDetails,\n ResponseSharingDetails,\n SharingDetailsTable,\n UpdateSharingDetails,\n} from './types/details.type';\nimport {\n ACCESS_LEVEL,\n SHARED_ORIGIN,\n SHARE_TYPE,\n} from '../../common/constants';\n\nexport class SharingDetail {\n private sharingDetailsId: string;\n private assetId: string;\n private accessLevel: ACCESS_LEVEL;\n private accessLevelAsText: string;\n private orgId: string;\n private sharedWith: string;\n private sharedType: SHARE_TYPE;\n private sharedOrigin: SHARED_ORIGIN;\n private sharedEmail?: string;\n private createdAt: string;\n private updatedAt: string;\n private deletedAt?: string;\n\n constructor(params: BaseSharingDetails) {\n this.sharingDetailsId = params.sharingDetailsId;\n this.assetId = params.assetId;\n this.accessLevel = params.accessLevel;\n this.accessLevelAsText = this.convertAccessLevelToText(\n params.accessLevel,\n );\n this.orgId = params.orgId;\n this.sharedWith = params.sharedWith;\n this.sharedType = params.sharedType;\n this.sharedEmail = params.sharedEmail;\n this.sharedOrigin = params.sharedOrigin;\n this.createdAt = params.createdAt;\n this.updatedAt = params.updatedAt;\n this.deletedAt = params.deletedAt;\n }\n\n static create(params: CreateSharingDetails): SharingDetail {\n const now = new Date().toISOString();\n const obj: BaseSharingDetails = {\n ...params,\n sharingDetailsId: params.sharedId ?? getId(),\n createdAt: now,\n updatedAt: now,\n };\n\n return new SharingDetail(obj);\n }\n\n static parse(params: SharingDetailsTable): SharingDetail {\n return new SharingDetail({\n sharingDetailsId: params.sharing_details_id,\n assetId: params.asset_id,\n accessLevel: params.access_level as ACCESS_LEVEL,\n orgId: params.org_id,\n sharedWith: params.shared_with,\n sharedType: params.shared_type as SHARE_TYPE,\n sharedEmail: params.shared_email,\n sharedOrigin: params.share_origin as SHARED_ORIGIN,\n createdAt: params.created_at,\n updatedAt: params.updated_at,\n deletedAt: params.deleted_at,\n });\n }\n\n update(params: UpdateSharingDetails) {\n if (params.accessLevel || params.accessLevel === 0)\n this.accessLevel = params.accessLevel;\n if (params.sharedEmail) this.sharedEmail = params.sharedEmail;\n this.updatedAt = new Date().toISOString();\n }\n\n toTable(): SharingDetailsTable {\n return {\n sharing_details_id: this.sharingDetailsId,\n asset_id: this.assetId,\n access_level: this.accessLevel,\n org_id: this.orgId,\n shared_with: this.sharedWith,\n shared_type: this.sharedType,\n shared_email: this.sharedEmail,\n share_origin: this.sharedOrigin,\n created_at: this.createdAt,\n updated_at: this.updatedAt,\n deleted_at: this.deletedAt,\n };\n }\n\n toPlain(): BaseSharingDetails {\n return {\n sharingDetailsId: this.sharingDetailsId,\n assetId: this.assetId,\n accessLevel: this.accessLevel,\n orgId: this.orgId,\n sharedWith: this.sharedWith,\n sharedType: this.sharedType,\n sharedEmail: this.sharedEmail,\n sharedOrigin: this.sharedOrigin,\n createdAt: this.createdAt,\n updatedAt: this.updatedAt,\n deletedAt: this.deletedAt,\n };\n }\n\n toJSON(): ResponseSharingDetails {\n return {\n sharedId: this.sharingDetailsId,\n assetId: this.assetId,\n accessLevel: this.accessLevel,\n accessLevelAsText: this.accessLevelAsText,\n orgId: this.orgId,\n sharedWith: this.sharedWith,\n sharedType: this.sharedType,\n sharedEmail: this.sharedEmail,\n sharedOrigin: this.sharedOrigin,\n createdAt: this.createdAt,\n updatedAt: this.updatedAt,\n };\n }\n\n public get getSharingDetailsId(): string {\n return this.sharingDetailsId;\n }\n\n public get getAccessLevel(): ACCESS_LEVEL {\n return this.accessLevel;\n }\n\n public get getAccessLevelAsText(): string {\n return this.accessLevelAsText;\n }\n\n private convertAccessLevelToText(level: number): string {\n return ACCESS_LEVEL[level] ?? 'UNKNOWN';\n }\n}\n","import { inject, injectable } from 'tsyringe';\n\nimport { ACCESS_LEVEL, SHARE_TYPE } from '../../common/constants';\nimport { fromTokenToUser } from '../../index';\nimport { SharingDetail } from '../entities/details';\nimport { SharingDetailsRepositoryInterface } from '../interfaces/detailsRepository.interface';\n\n@injectable()\nexport class CheckUserAccessLevel {\n constructor(\n @inject('SharingDetailsRepository')\n private readonly detailsRepository: SharingDetailsRepositoryInterface,\n ) {}\n\n public async execute({\n userId,\n assetId,\n clientId,\n loginType,\n roles,\n orgId,\n }: {\n assetId: string;\n userId: string;\n clientId?: string;\n loginType?: string;\n roles?: string[];\n orgId?: string;\n }): Promise<{ level: ACCESS_LEVEL; levelAsText: string }> {\n const user = await fromTokenToUser({\n body: { userId, clientId, roles, orgId, loginType },\n });\n const details = await this.detailsRepository.getList({\n data: { assetId, user },\n sorting: [{ column: 'access_level', direction: 'DESC' }],\n });\n if (details.items.length === 0)\n return { level: ACCESS_LEVEL.NONE, levelAsText: 'NONE' };\n\n const priority = {\n [SHARE_TYPE.USER]: 3,\n [SHARE_TYPE.ROLE]: 2,\n [SHARE_TYPE.ORGANIZATION]: 1,\n };\n const priorityDetail = details.items.reduce((best, current) => {\n const bestPriority = priority[best.shared_type as SHARE_TYPE];\n const currentPriority = priority[current.shared_type as SHARE_TYPE];\n const isBetter =\n currentPriority > bestPriority ||\n (currentPriority === bestPriority &&\n current.access_level > best.access_level);\n\n if (isBetter) return current;\n return best;\n });\n\n const currentDetail = SharingDetail.parse(priorityDetail);\n return {\n level: currentDetail.getAccessLevel,\n levelAsText: currentDetail.getAccessLevelAsText,\n };\n }\n}\n","import { inject, injectable } from 'tsyringe';\n\nimport { SharingRepositoryInterface } from '../interfaces/sharingRepository.interface';\n\nexport interface Delete {\n assetId: string;\n}\n\n@injectable()\nexport class DeleteSharing {\n constructor(\n @inject('SharingRepository')\n private readonly sharingRepository: SharingRepositoryInterface,\n ) {}\n\n public async execute({ body }: { body: Delete }): Promise<boolean | null> {\n const { assetId } = body;\n const sharing = await this.sharingRepository.getOne(assetId);\n\n if (!sharing) return null;\n const detailSharing = await this.sharingRepository.delete(assetId);\n return detailSharing;\n }\n}\n","import { inject, injectable } from 'tsyringe';\n\nimport { Sorting } from '../../common/common.type';\nimport { SharingDetail } from '../entities/details';\nimport {\n GetSharingList,\n ListSharingDetails,\n SharingDetailsTable,\n} from '../entities/types/details.type';\nimport { SharingDetailsRepositoryInterface } from '../interfaces/detailsRepository.interface';\nimport { SharingRepositoryInterface } from '../interfaces/sharingRepository.interface';\n\n@injectable()\nexport class ListSharing {\n constructor(\n @inject('SharingRepository')\n private readonly sharingRepository: SharingRepositoryInterface,\n @inject('SharingDetailsRepository')\n private readonly detailsRepository: SharingDetailsRepositoryInterface,\n ) {}\n\n public async execute({\n body,\n }: {\n body: GetSharingList;\n }): Promise<ListSharingDetails | null> {\n const {\n data: { assetId },\n pagination,\n } = body;\n const sharing = await this.sharingRepository.getOne(assetId);\n\n if (!sharing) return null;\n\n const sorting: Array<Sorting> =\n body.sorting && body.sorting?.length > 0\n ? body.sorting\n : [{ column: 'created_at', direction: 'ASC' }];\n\n const detailSharing = await this.detailsRepository.getList({\n data: { assetId },\n pagination,\n sorting,\n });\n const items = detailSharing.items.map((item) =>\n SharingDetail.parse(item as SharingDetailsTable).toJSON(),\n );\n return {\n ...detailSharing,\n items,\n };\n }\n}\n","import {\n BaseSharing,\n CreateSharing,\n ResponseSharing,\n SharingTable,\n} from './types/sharing.type';\nimport { ASSET_TYPE } from '../../common/constants';\n\nexport class Sharing {\n private assetId: string;\n private assetType: ASSET_TYPE;\n private createdAt: string;\n private updatedAt: string;\n private deletedAt?: string;\n\n constructor(params: BaseSharing) {\n this.assetId = params.assetId;\n this.assetType = params.assetType;\n this.createdAt = params.createdAt;\n this.updatedAt = params.updatedAt;\n this.deletedAt = params.deletedAt;\n }\n\n static create(params: CreateSharing): Sharing {\n const now = new Date().toISOString();\n const obj: BaseSharing = {\n ...params,\n createdAt: now,\n updatedAt: now,\n };\n return new Sharing(obj);\n }\n\n static parse(params: SharingTable): Sharing {\n return new Sharing({\n assetId: params.asset_id,\n assetType: params.asset_type as ASSET_TYPE,\n createdAt: params.created_at,\n updatedAt: params.updated_at,\n deletedAt: params.deleted_at,\n });\n }\n\n update() {\n this.updatedAt = new Date().toISOString();\n }\n\n toTable(): SharingTable {\n return {\n asset_id: this.assetId,\n asset_type: this.assetType,\n created_at: this.createdAt,\n updated_at: this.updatedAt,\n deleted_at: this.deletedAt,\n };\n }\n\n toPlain(): BaseSharing {\n return {\n assetId: this.assetId,\n assetType: this.assetType,\n createdAt: this.createdAt,\n updatedAt: this.updatedAt,\n deletedAt: this.deletedAt,\n };\n }\n\n toJSON(): ResponseSharing {\n return {\n assetId: this.assetId,\n assetType: this.assetType,\n createdAt: this.createdAt,\n updatedAt: this.updatedAt,\n };\n }\n\n public get getAssetId(): string {\n return this.assetId;\n }\n\n public get getAssetType(): string {\n return this.assetType;\n }\n}\n","import { inject, injectable } from 'tsyringe';\n\nimport {\n ACCESS_LEVEL,\n ASSET_TYPE,\n ORGANIZATION_QRVEY,\n SHARED_ORIGIN,\n SHARE_TYPE,\n} from '../../common/constants';\nimport { RoleRepositoryInterface } from '../../quser/interfaces/rolesRepository.interface';\nimport { UserRepositoryInterface } from '../../quser/interfaces/userRepository.interface';\nimport { SharingDetail } from '../entities/details';\nimport { Sharing } from '../entities/sharing';\nimport { ResponseSharingDetails } from '../entities/types/details.type';\nimport { DashboardRepositoryInterface } from '../interfaces/dashboardRepository.interface';\nimport { SharingDetailsRepositoryInterface } from '../interfaces/detailsRepository.interface';\nimport { DownloadManagerRepositoryInterface } from '../interfaces/downloadManagerRepository.interface';\nimport { SharingRepositoryInterface } from '../interfaces/sharingRepository.interface';\n\ninterface SharingWith {\n sharedId?: string;\n sharedWith: string;\n sharedOrigin: SHARED_ORIGIN;\n accessLevel: ACCESS_LEVEL;\n orgId?: string;\n sharedEmail?: string;\n sharedType: SHARE_TYPE;\n}\n\nexport interface UpsertInterface {\n assetId: string;\n assetType: ASSET_TYPE;\n add?: Array<SharingWith>;\n remove?: Array<{\n sharedId: string;\n }>;\n}\n\n@injectable()\nexport class UpsertSharing {\n constructor(\n @inject('SharingRepository')\n private readonly sharingRepository: SharingRepositoryInterface,\n @inject('SharingDetailsRepository')\n private readonly detailsRepository: SharingDetailsRepositoryInterface,\n @inject('dxRepository')\n private readonly dxRepository: DashboardRepositoryInterface,\n @inject('dmRepository')\n private readonly dmRepository: DownloadManagerRepositoryInterface,\n @inject('UserRepository')\n private readonly userRepository: UserRepositoryInterface,\n @inject('RoleRepository')\n private readonly roleRepository: RoleRepositoryInterface,\n ) {}\n\n public async execute({\n body,\n }: {\n body: UpsertInterface;\n }): Promise<ResponseSharingDetails[]> {\n const assetId = body.assetId;\n\n const isValidAsset = await this.validateIfAssetExists(\n assetId,\n body.assetType,\n );\n if (!isValidAsset)\n throw new Error(`Asset with ID ${assetId} not found`);\n\n const sharing = await this.sharingRepository.getOne(assetId);\n let currentSharing: Sharing;\n if (sharing) {\n currentSharing = Sharing.parse(sharing);\n } else {\n const createSharing = {\n assetId,\n assetType: body.assetType,\n };\n currentSharing = Sharing.create(createSharing);\n await this.sharingRepository.create(currentSharing.toTable());\n }\n\n let updatedList: SharingDetail[] = [];\n if (body.add) updatedList = await this.addDetails(assetId, body.add);\n if (body.remove) await this.removeDetails(body.remove);\n\n currentSharing.update();\n await this.sharingRepository.patch(\n currentSharing.getAssetId,\n currentSharing.toTable(),\n );\n return updatedList.map((detail) => detail.toJSON());\n }\n\n private async validateIfAssetExists(\n assetId: string,\n assetType: ASSET_TYPE,\n ): Promise<boolean> {\n switch (assetType) {\n case ASSET_TYPE.DX: {\n const result = await this.dxRepository.get(assetId);\n if (result) return true;\n return false;\n }\n case ASSET_TYPE.DM: {\n return true;\n }\n\n default:\n return false;\n }\n }\n\n private async addDetails(\n assetId: string,\n list: Required<UpsertInterface>['add'],\n ): Promise<SharingDetail[]> {\n const sharingList: SharingDetail[] = [];\n for (const detail of list) {\n const currentDetail = await this.addSpecificDetail(assetId, detail);\n if (currentDetail) sharingList.push(currentDetail);\n }\n return sharingList;\n }\n\n private async addSpecificDetail(\n assetId: string,\n detail: SharingWith,\n ): Promise<SharingDetail | null> {\n let currentDetail: SharingDetail;\n const isValid = await this.validateIfSharedWithExist(detail);\n if (!isValid) return null;\n\n let sharingDetail = await this.detailsRepository.getBySharedWith(\n assetId,\n detail.sharedWith,\n );\n if (!sharingDetail && detail.sharedId) {\n sharingDetail = await this.detailsRepository.getOne(\n detail.sharedId,\n );\n }\n\n if (sharingDetail) {\n currentDetail = SharingDetail.parse(sharingDetail);\n currentDetail.update(detail);\n await this.detailsRepository.patch(\n currentDetail.getSharingDetailsId,\n currentDetail.toTable(),\n );\n } else {\n const createDetails = {\n assetId: assetId,\n orgId: detail.orgId ?? ORGANIZATION_QRVEY, //TODO If shareOrigin is INTERNAL then `ORGANIZATION_QRVEY` else fail\n ...detail,\n };\n currentDetail = SharingDetail.create(createDetails);\n await this.detailsRepository.create(currentDetail.toTable());\n }\n return currentDetail;\n }\n\n private async validateIfSharedWithExist(\n detail: SharingWith,\n ): Promise<boolean> {\n if (\n detail.sharedOrigin === SHARED_ORIGIN.EXTERNAL ||\n detail.sharedOrigin === SHARED_ORIGIN.UNKNOWN\n )\n return true;\n\n const isQrveyOrg =\n detail.sharedType === SHARE_TYPE.ORGANIZATION &&\n detail.sharedWith === ORGANIZATION_QRVEY;\n if (isQrveyOrg) return true; // NOTE: If more Internal Organization arrive, need to change this validation\n\n if (detail.sharedType === SHARE_TYPE.USER) {\n const user = await this.userRepository.getOne(detail.sharedWith);\n if (user) return true;\n }\n\n if (detail.sharedType === SHARE_TYPE.ROLE) {\n const role = await this.roleRepository.getOne(detail.sharedWith);\n if (role) return true;\n }\n\n return false;\n }\n\n private async removeDetails(\n list: Required<UpsertInterface>['remove'],\n ): Promise<void> {\n for (const detail of list) {\n await this.detailsRepository.delete(detail.sharedId);\n }\n }\n}\n","import 'reflect-metadata';\nimport { Context } from './context';\nimport { FromTokenToUser } from './quser/services/fromTokenToUser';\nimport { HasAdminRole } from './quser/services/hasAdminRole';\nimport CheckAppPermissions from './sharing/services/checkAppPermissions';\nimport CheckOrgPermissions from './sharing/services/checkOrgPermissions';\nimport { CheckUserAccessLevel } from './sharing/services/checkUserAccessLevel';\nimport { DeleteSharing } from './sharing/services/delete';\nimport { ListSharing } from './sharing/services/list';\nimport { UpsertSharing } from './sharing/services/upsert';\n\nexport const api = {\n upsert: (...args: Parameters<UpsertSharing['execute']>) =>\n Context.resolve(UpsertSharing).execute(...args),\n list: (...args: Parameters<ListSharing['execute']>) =>\n Context.resolve(ListSharing).execute(...args),\n delete: (...args: Parameters<DeleteSharing['execute']>) =>\n Context.resolve(DeleteSharing).execute(...args),\n};\n\nexport const checkUserAccessLevel = (\n ...args: Parameters<CheckUserAccessLevel['execute']>\n) => Context.resolve(CheckUserAccessLevel).execute(...args);\n\nexport const checkAppPermissions = (\n ...args: Parameters<CheckAppPermissions['execute']>\n) => Context.resolve(CheckAppPermissions).execute(...args);\n\nexport const checkOrgPermissions = (\n ...args: Parameters<CheckOrgPermissions['execute']>\n) => Context.resolve(CheckOrgPermissions).execute(...args);\n\nexport const fromTokenToUser = (\n ...args: Parameters<FromTokenToUser['execute']>\n) => Context.resolve(FromTokenToUser).execute(...args);\n\nexport const hasAdminRole = (...args: Parameters<HasAdminRole['execute']>) =>\n Context.resolve(HasAdminRole).execute(...args);\n\nexport {\n ACCESS_LEVEL,\n ASSET_TYPE,\n ORGANIZATION_QRVEY,\n SHARED_ORIGIN,\n SHARE_TYPE,\n} from './common/constants';\n\nexport { GetSharingList } from './sharing/entities/types/details.type';\n"]}
1
+ {"version":3,"sources":["../../src/common/constants.ts","../../src/quser/implementations/group.model.ts","../../src/common/persistence/poolClient.ts","../../src/common/persistence/base.ts","../../src/quser/implementations/group.repository.ts","../../src/quser/implementations/user.model.ts","../../src/quser/implementations/user.repository.ts","../../src/sharing/implementations/admin.repository.ts","../../src/sharing/implementations/details.model.ts","../../src/sharing/implementations/details.repository.ts","../../src/sharing/implementations/dm.model.ts","../../src/sharing/implementations/dm.repository.ts","../../src/sharing/implementations/dx.model.ts","../../src/sharing/implementations/dx.repository.ts","../../src/sharing/implementations/organization.model.ts","../../src/sharing/implementations/organization.repository.ts","../../src/sharing/implementations/sharing.model.ts","../../src/sharing/implementations/sharing.repository.ts","../../src/context.ts","../../src/common/util.ts","../../src/quser/entities/user.ts","../../src/quser/services/fromTokenToUser.ts","../../src/quser/services/hasAdminRole.ts","../../src/sharing/services/checkAppPermissions.ts","../../src/sharing/services/checkOrgPermissions.ts","../../src/sharing/entities/details.ts","../../src/sharing/services/checkUserAccessLevel.ts","../../src/sharing/services/delete.ts","../../src/sharing/services/getOrgTree.ts","../../src/sharing/services/list.ts","../../src/sharing/entities/sharing.ts","../../src/sharing/services/upsert.ts","../../src/index.ts"],"names":["ASSET_TYPE","SHARED_ORIGIN","SHARE_TYPE","ACCESS_LEVEL","APP_SHARING_STATUS","CrudSchema","injectable","inject"],"mappings":"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","file":"index.mjs","sourcesContent":["export const ENVIRONMENT = {\n SERVER_PREFIX: process.env.SERVER_PREFIX,\n TABLE_PREFIX: process.env.TABLE_PREFIX,\n DOMAIN: process.env.DOMAIN,\n API_KEY: process.env.API_KEY,\n};\n\nexport const DATABASE_INFO = {\n DATA_PERSISTENCE_SCHEMA: 'admin',\n SERVER_PREFIX: ENVIRONMENT.SERVER_PREFIX,\n TABLE_PREFIX: ENVIRONMENT.TABLE_PREFIX,\n};\n\nexport const ORGANIZATION_QRVEY = 'org:0';\n\nexport const ORGANIZATION_ANONYMOUS = 'anonymous';\n\nexport enum ASSET_TYPE {\n DX = 'DX', // DASHBOARD X (Next Gen)\n DM = 'DM', // DOWNLOAD MANAGER\n}\n\nexport enum SHARED_ORIGIN {\n INTERNAL = 'INTERNAL', // for org:0\n EXTERNAL = 'EXTERNAL', // for orgs different that 0\n UNKNOWN = 'UNKNOWN', // without orgId\n}\n\nexport enum SHARE_TYPE {\n USER = 'USER',\n ROLE = 'ROLE',\n ORGANIZATION = 'ORGANIZATION',\n}\n\n/**\n * Access levels for assets.\n * Those are calculated with Base 2, so:\n * - NONE = 0 (undefined)\n * - CAN_USE = 1 (2^0)\n * - CAN_EDIT = 2 (2^1)\n * - ADMIN = 4 (2^2)\n * - (Future) SUPER = 8 (2^3)\n */\nexport enum ACCESS_LEVEL {\n NONE = 0,\n CAN_USE = 1,\n CAN_EDIT = 2,\n ADMIN = 4,\n}\n\nexport enum APP_SHARING_STATUS {\n PUBLIC = 'public',\n PRIVATE = 'private',\n}\n\nexport interface AppPermissionResponse {\n privacy: APP_SHARING_STATUS;\n}\n\nexport interface AppOwner {\n userId: string;\n appId: string;\n userEmail?: string;\n}\n\nexport const LIMIT_PER_PAGE = 10;\n","import { CrudSchema } from '@qrvey/data-persistence';\n\nimport { DATABASE_INFO } from '../../common/constants';\n\nexport class GroupModel extends CrudSchema {\n static table = {\n name: `${DATABASE_INFO.SERVER_PREFIX}Groups`,\n alias: 'qv_groups',\n };\n\n static columns = {\n groupid: {\n type: 'string',\n },\n };\n\n static schema = DATABASE_INFO.DATA_PERSISTENCE_SCHEMA;\n}\n","import { getDbPool } from '@qrvey/data-persistence';\n\nlet poolClient: any;\nexport function getPoolClient() {\n if (!poolClient) poolClient = getDbPool();\n return poolClient;\n}\n","import { CrudService, buildFilter } from '@qrvey/data-persistence';\n\nimport { getPoolClient } from './poolClient';\n\nexport class BaseRepository extends CrudService<any> {\n constructor(schema: any) {\n super(schema, getPoolClient());\n }\n\n filter(attribute: string, value: any, operator?: string) {\n return buildFilter(attribute, value, operator);\n }\n}\n","import { GroupModel } from './group.model';\nimport { BaseRepository } from '../../common/persistence/base';\nimport { RoleRepositoryInterface } from '../interfaces/rolesRepository.interface';\n\nexport class GroupRepository\n extends BaseRepository\n implements RoleRepositoryInterface\n{\n constructor() {\n super(GroupModel);\n }\n\n async getOne(identifier: string): Promise<{ groupid: string } | null> {\n const params = {\n filters: [this.filter('groupid', identifier)],\n };\n const response = await super.findItem(params);\n return response as { groupid: string };\n }\n}\n","import { CrudSchema } from '@qrvey/data-persistence';\n\nimport { DATABASE_INFO } from '../../common/constants';\n\nexport class UserModel extends CrudSchema {\n static table = {\n name: `${DATABASE_INFO.SERVER_PREFIX}Users`,\n alias: 'qv_users',\n };\n\n static columns = {\n userid: {\n type: 'string',\n primary: true,\n columnId: true,\n },\n groups: {\n type: 'array',\n },\n };\n\n static schema = DATABASE_INFO.DATA_PERSISTENCE_SCHEMA;\n}\n","import { UserModel } from './user.model';\nimport { ListInput, ListOutput } from '../../common/common.type';\nimport { BaseRepository } from '../../common/persistence/base';\nimport { BaseUser } from '../entities/types/user.type';\nimport { UserRepositoryInterface } from '../interfaces/userRepository.interface';\n\nexport class UserRepository\n extends BaseRepository\n implements UserRepositoryInterface\n{\n constructor() {\n super(UserModel);\n }\n\n async getOne(identifier: string): Promise<BaseUser | null> {\n const params = {\n filters: [this.filter('userid', identifier)],\n };\n const response = await super.findItem(params);\n return response as BaseUser;\n }\n\n async getList(\n options: ListInput<{ identifier: string; role?: string }>,\n ): Promise<ListOutput<BaseUser>> {\n const params = {\n filters: [\n this.filter('userid', options.data.identifier),\n this.filter('groups', options.data.role, 'CONTAINS'),\n ],\n };\n const response = await super.find(params);\n return response as ListOutput<BaseUser>;\n }\n}\n","import { getAttribute } from '@qrvey/utils';\n\nimport { ENVIRONMENT } from '../../common/constants';\nimport { AdminRepositoryInterface } from '../interfaces/adminRepository.interface';\n\nexport class AdminRepository implements AdminRepositoryInterface {\n async getApplicationInfo(body: { appId: string; userId: string }) {\n const url = `${ENVIRONMENT.DOMAIN}/devapi/v4/user/${body.userId}/app/${body.appId}`;\n\n const headers = {\n 'x-api-key': ENVIRONMENT.API_KEY as string,\n };\n\n const requestOptions: RequestInit = {\n method: 'GET',\n headers,\n };\n\n const response = await fetch(url, requestOptions);\n\n const data = (await response.json()) as {\n userid?: string;\n appId?: string;\n userEmail?: string;\n };\n\n return {\n status: response.status,\n data: {\n userId: data?.userid ?? body.userId,\n appId: getAttribute(data, 'appId'),\n userEmail: getAttribute(data, 'userEmail'),\n },\n };\n }\n\n async getPlatformConfiguration(): Promise<{\n status: number;\n legacyMode: boolean;\n }> {\n const url = `${ENVIRONMENT.DOMAIN}/admin/api/v5/customization/features/platform`;\n\n const headers = {\n 'x-api-key': ENVIRONMENT.API_KEY as string,\n };\n\n const requestOptions: RequestInit = {\n method: 'GET',\n headers,\n };\n\n const response = await fetch(url, requestOptions);\n\n const data = (await response.json()) as {\n Item: {\n settings: {\n legacyMode: boolean;\n };\n };\n };\n return {\n status: response.status,\n legacyMode: data?.Item?.settings?.legacyMode ?? true,\n };\n }\n}\n","import { CrudSchema } from '@qrvey/data-persistence';\n\nimport { DATABASE_INFO } from '../../common/constants';\n\nexport class SharingDetailsModel extends CrudSchema {\n static table = {\n name: `${DATABASE_INFO.SERVER_PREFIX}_sharing_details`,\n alias: `${DATABASE_INFO.TABLE_PREFIX}_sharing_details`,\n };\n\n static columns = {\n sharing_details_id: { type: 'string', primary: true },\n asset_id: { type: 'string' },\n access_level: { type: 'numeric' },\n org_id: { type: 'string' },\n shared_with: { type: 'string' },\n shared_type: { type: 'string' },\n shared_email: { type: 'string' },\n share_origin: { type: 'string' },\n created_at: { type: 'date' },\n updated_at: { type: 'date' },\n deleted_at: { type: 'date' },\n };\n\n static indexes = {\n sharingDetailsOrgId: {\n name: 'sharing_details_org_id_index',\n columns: [\n 'org_id',\n 'asset_id',\n 'sharing_details_id',\n 'shared_with',\n 'shared_type',\n 'shared_email',\n 'share_origin',\n ],\n },\n sharingDetailsSharedWithAccessLevel: {\n name: 'sharing_details_shared_with_access_level_index',\n columns: [\n 'shared_with',\n 'access_level',\n 'asset_id',\n 'sharing_details_id',\n 'org_id',\n 'shared_type',\n 'shared_email',\n 'share_origin',\n ],\n },\n sharingDetailsAccessLevelSharedWithOrgId: {\n name: 'sharing_details_access_level_shared_with_org_id_index',\n columns: [\n 'access_level',\n 'shared_with',\n 'org_id',\n 'asset_id',\n 'sharing_details_id',\n 'shared_type',\n 'shared_email',\n 'share_origin',\n ],\n },\n sharingDetailsAccessLevelOrgId: {\n name: 'sharing_details_access_level_org_id_index',\n columns: [\n 'access_level',\n 'org_id',\n 'asset_id',\n 'sharing_details_id',\n 'shared_with',\n 'shared_type',\n 'shared_email',\n 'share_origin',\n ],\n },\n sharingDetailsAssetId: {\n name: 'sharing_details_asset_id_index',\n columns: [\n 'asset_id',\n 'sharing_details_id',\n 'org_id',\n 'shared_with',\n 'shared_type',\n 'shared_email',\n 'share_origin',\n ],\n },\n };\n\n static schema = DATABASE_INFO.DATA_PERSISTENCE_SCHEMA;\n static usePool = true;\n}\n","import { IFilter } from '@qrvey/data-persistence';\n\nimport { SharingDetailsModel } from './details.model';\nimport {\n ListInput,\n ListOutput,\n Pagination,\n ParamsFromTokenToUser,\n} from '../../common/common.type';\nimport { LIMIT_PER_PAGE, ORGANIZATION_QRVEY } from '../../common/constants';\nimport { BaseRepository } from '../../common/persistence/base';\nimport { SharingDetailsTable } from '../entities/types/details.type';\nimport { SharingDetailsRepositoryInterface } from '../interfaces/detailsRepository.interface';\n\nexport class SharingDetailsRepository\n extends BaseRepository\n implements SharingDetailsRepositoryInterface\n{\n constructor() {\n super(SharingDetailsModel);\n }\n\n async getOne(sharingDetailId: string): Promise<SharingDetailsTable | null> {\n const params = {\n filters: [this.filter('sharing_details_id', sharingDetailId)],\n };\n const response = await super.findItem(params);\n return response as SharingDetailsTable;\n }\n\n async getBySharedWith(\n assetId: string,\n sharedWith: string,\n ): Promise<SharingDetailsTable | null> {\n const filterList = [\n this.filter('asset_id', assetId),\n this.filter('shared_with', sharedWith),\n ];\n const params = {\n filters: filterList,\n };\n const response = await super.findItem(params);\n return response as SharingDetailsTable;\n }\n\n async getList(\n options: ListInput<{ assetId: string; user?: ParamsFromTokenToUser }>,\n ): Promise<ListOutput<SharingDetailsTable>> {\n const assetIndex = SharingDetailsModel.indexes.sharingDetailsAssetId;\n const pagination = this.getPagination(options.pagination);\n const params: {\n pagination: any;\n index: any;\n filters?: any;\n sorting?: any;\n } = {\n pagination,\n index: {\n indexName: assetIndex.name,\n columns: assetIndex.columns,\n },\n };\n\n const filterList = [this.filter('asset_id', options.data.assetId)];\n if (options.filters) {\n options.filters.forEach((filter) => {\n filterList.push(this.filter(filter.column, filter.value));\n });\n }\n params.filters = filterList;\n\n if (options.data.user) {\n const currentFilter = this.getUserFilter(\n options.data.user,\n filterList,\n );\n params.filters = currentFilter;\n }\n\n if (options.sorting) params.sorting = options.sorting;\n\n const response = await super.find(params);\n return response as ListOutput<SharingDetailsTable>;\n }\n\n async create(details: SharingDetailsTable): Promise<SharingDetailsTable> {\n const response = (await super.create(details)) as SharingDetailsTable;\n return response;\n }\n\n async patch(\n sharingDetailId: string,\n details: SharingDetailsTable,\n ): Promise<boolean> {\n await super.update(\n [this.filter('sharing_details_id', sharingDetailId)],\n details,\n );\n return true;\n }\n\n async delete(sharingDetailId: string): Promise<boolean> {\n await super.remove([\n this.filter('sharing_details_id', sharingDetailId),\n ]);\n return true;\n }\n\n private getPagination(options?: Pagination): Pagination {\n return {\n limit: options?.limit ?? LIMIT_PER_PAGE,\n from: options?.from ?? undefined,\n };\n }\n\n private getUserFilter(\n user: ParamsFromTokenToUser,\n currentFilters?: IFilter[],\n ) {\n const { userId, roles } = user;\n const orgId = user.orgId === '' ? ORGANIZATION_QRVEY : user.orgId; //Review if this is right\n const sharing = {\n OR: [\n {\n AND: [\n this.buildFilter('shared_with', userId),\n this.buildFilter('shared_type', 'USER'),\n this.buildFilter('org_id', orgId),\n ],\n },\n {\n AND: [\n this.buildFilter('shared_with', orgId),\n this.buildFilter('shared_type', 'ORGANIZATION'),\n this.buildFilter('org_id', orgId),\n ],\n },\n ],\n };\n if (roles && roles?.length > 0) {\n sharing.OR.push({\n AND: [\n this.buildFilter('shared_with', roles, 'IN'),\n this.buildFilter('shared_type', 'ROLE'),\n this.buildFilter('org_id', orgId),\n ],\n });\n }\n const filter = [];\n if (currentFilters) filter.push(...currentFilters);\n filter.push(sharing);\n return { AND: filter };\n }\n}\n","import { CrudSchema } from '@qrvey/data-persistence';\n\nimport { DATABASE_INFO } from '../../common/constants';\n\nexport class DownloadManagerSchema extends CrudSchema {\n static table = {\n name: `${DATABASE_INFO.SERVER_PREFIX}DownloadManager`,\n alias: `${DATABASE_INFO.TABLE_PREFIX}_download_manager`,\n };\n\n static columns = {\n downloadManagerId: {\n primary: true,\n type: 'String',\n columnId: true,\n },\n };\n\n static schema = 'exports';\n static usePool = true;\n}\n","import { DownloadManagerSchema } from './dm.model';\nimport { BaseRepository } from '../../common/persistence/base';\nimport { DownloadManagerRepositoryInterface } from '../interfaces/downloadManagerRepository.interface';\n\nexport class DownloadManagerRepository\n extends BaseRepository\n implements DownloadManagerRepositoryInterface\n{\n constructor() {\n super(DownloadManagerSchema);\n }\n\n async get(\n identifier: string,\n ): Promise<{ downloadManagerId: string } | null> {\n const filterList = [this.filter('downloadManagerId', identifier)];\n const params = {\n filters: filterList,\n };\n const response = await super.findItem(params);\n return response as { downloadManagerId: string };\n }\n}\n","import { CrudSchema } from '@qrvey/data-persistence';\n\nimport { DATABASE_INFO } from '../../common/constants';\n\nexport class DashboardSchema extends CrudSchema {\n static table = {\n name: `${DATABASE_INFO.SERVER_PREFIX}_dx_dashboard`,\n alias: `${DATABASE_INFO.TABLE_PREFIX}_dashboard`,\n };\n\n static columns = {\n ResourceUID: { type: 'string', primary: true },\n dashboardId: { type: 'string' },\n contentId: { type: 'string' },\n userId: { type: 'string' },\n ownerId: { type: 'string' },\n appId: { type: 'string' },\n qvAttributes: { type: 'object' },\n };\n\n static indexes = {\n ResourceUID: {\n name: 'MetadataByResource',\n columns: ['Metadata', 'ResourceUID'],\n },\n };\n\n static schema = 'dashboard_x';\n static usePool = true;\n}\n","import { DashboardSchema } from './dx.model';\nimport { BaseRepository } from '../../common/persistence/base';\nimport { DashboardRepositoryInterface } from '../interfaces/dashboardRepository.interface';\n\nexport class DashboardRepository\n extends BaseRepository\n implements DashboardRepositoryInterface\n{\n constructor() {\n super(DashboardSchema);\n }\n\n async get(identifier: string): Promise<{ dashboardId: string } | null> {\n const uid = `DASHBOARD=${identifier}&BRANCH=MAIN`;\n const filterList = [this.filter('ResourceUID', uid)];\n const params = {\n filters: filterList,\n };\n const response = await super.findItem(params);\n return response as { dashboardId: string };\n }\n}\n","import { CrudSchema } from '@qrvey/data-persistence';\n\nimport { DATABASE_INFO } from '../../common/constants';\n\nexport default class OrganizationModel extends CrudSchema {\n static readonly table = {\n name: 'qv_organization',\n alias: `${DATABASE_INFO.TABLE_PREFIX}_organization`,\n };\n\n static readonly columns = {\n org_id: { type: 'string', primary: true },\n name: { type: 'string' },\n parent_org_id: { type: 'string' },\n org_path: { type: 'string' },\n content_privacy: { type: 'boolean' },\n effective_content_privacy: { type: 'boolean' },\n created_at: { type: 'string' },\n updated_at: { type: 'string' },\n };\n\n static readonly indexes = {\n org_path: { name: 'idx_qv_orgs_org_path_gist', columns: ['org_path'] },\n parent_org_id: {\n name: 'idx_qv_orgs_parent',\n columns: ['parent_org_id'],\n },\n };\n\n static readonly schema = DATABASE_INFO.DATA_PERSISTENCE_SCHEMA;\n static readonly usePool = true;\n}\n","import OrganizationModel from './organization.model';\nimport { BaseRepository } from '../../common/persistence/base';\nimport { OrganizationType } from '../entities/types/organization.type';\nimport { OrgTreeResult } from '../entities/types/orgTreeResult';\nimport { OrganizationRepositoryInterface } from '../interfaces/organizationRepository.interface';\n\nexport class OrganizationRepository\n extends BaseRepository\n implements OrganizationRepositoryInterface\n{\n constructor() {\n super(OrganizationModel);\n }\n\n async getOne(orgId: string): Promise<OrganizationType | null> {\n const params = {\n filters: [this.filter('org_id', orgId)],\n };\n const response = await super.findItem(params);\n return response as OrganizationType;\n }\n\n async getOrgTree(\n orgId: string,\n contentSharing?: boolean,\n ): Promise<OrgTreeResult> {\n const cte = `WITH target AS (SELECT org_path FROM admin.qv_organization WHERE org_id = '${orgId}')`;\n\n let selectClause = '';\n let whereClause = `\n FROM admin.qv_organization, target \n WHERE (\n admin.qv_organization.org_path <@ target.org_path \n OR \n admin.qv_organization.org_path @> target.org_path\n )\n AND org_id != '${orgId}'\n `;\n\n if (contentSharing === undefined) {\n selectClause = `\n SELECT \n COALESCE(ARRAY_AGG(org_id) FILTER (WHERE effective_content_privacy = true), '{}') as db_private,\n COALESCE(ARRAY_AGG(org_id) FILTER (WHERE effective_content_privacy = false), '{}') as db_public\n `;\n } else {\n selectClause = `SELECT COALESCE(ARRAY_AGG(org_id), '{}') as db_specific`;\n whereClause += ` AND effective_content_privacy = ${contentSharing}`;\n }\n\n const fullSql = `${cte} ${selectClause} ${whereClause};`;\n\n const result = await super.runRawQuery(fullSql, []);\n const row = result[0];\n\n if (!row)\n return {\n privateIds: [],\n publicIds: [],\n };\n\n if (contentSharing === undefined) {\n return {\n privateIds: row.db_private,\n publicIds: row.db_public,\n };\n } else {\n return {\n privateIds: contentSharing ? row.db_specific : [],\n publicIds: !contentSharing ? row.db_specific : [],\n };\n }\n }\n}\n","import { CrudSchema } from '@qrvey/data-persistence';\n\nimport { DATABASE_INFO } from '../../common/constants';\n\nexport class SharingModel extends CrudSchema {\n static table = {\n name: `${DATABASE_INFO.SERVER_PREFIX}_sharing`,\n alias: `${DATABASE_INFO.TABLE_PREFIX}_sharing`,\n };\n\n static columns = {\n asset_id: { type: 'string', primary: true },\n asset_type: { type: 'string' },\n created_at: { type: 'date' },\n updated_at: { type: 'date' },\n deleted_at: { type: 'date' },\n qvAttributes: { type: 'object' },\n };\n\n static indexes = {\n sharingAssetIdAssetType: {\n name: 'sharing_asset_id_asset_type_index',\n columns: ['asset_id', 'asset_type'],\n },\n sharingAssetType: {\n name: 'sharing_asset_type_index',\n columns: ['asset_type'],\n },\n };\n\n static schema = DATABASE_INFO.DATA_PERSISTENCE_SCHEMA;\n static usePool = true;\n}\n","import { SharingModel } from './sharing.model';\nimport { BaseRepository } from '../../common/persistence/base';\nimport { SharingTable } from '../entities/types/sharing.type';\nimport { SharingRepositoryInterface } from '../interfaces/sharingRepository.interface';\n\nexport class SharingRepository\n extends BaseRepository\n implements SharingRepositoryInterface\n{\n constructor() {\n super(SharingModel);\n }\n\n async getOne(assetId: string): Promise<SharingTable | null> {\n const params = {\n filters: [this.filter('asset_id', assetId)],\n };\n const response = await super.findItem(params);\n return response as SharingTable;\n }\n\n async create(sharing: SharingTable): Promise<SharingTable> {\n const response = (await super.create(sharing)) as SharingTable;\n return response;\n }\n\n async patch(assetId: string, sharing: SharingTable): Promise<boolean> {\n await super.update([this.filter('asset_id', assetId)], sharing);\n return true;\n }\n\n async delete(assetId: string): Promise<boolean> {\n await super.remove([this.filter('asset_id', assetId)]);\n return true;\n }\n}\n","import { container } from 'tsyringe';\n\nimport { GroupRepository } from './quser/implementations/group.repository';\nimport { UserRepository } from './quser/implementations/user.repository';\nimport { type RoleRepositoryInterface } from './quser/interfaces/rolesRepository.interface';\nimport { type UserRepositoryInterface } from './quser/interfaces/userRepository.interface';\nimport { AdminRepository } from './sharing/implementations/admin.repository';\nimport { SharingDetailsRepository } from './sharing/implementations/details.repository';\nimport { DownloadManagerRepository } from './sharing/implementations/dm.repository';\nimport { DashboardRepository } from './sharing/implementations/dx.repository';\nimport { OrganizationRepository } from './sharing/implementations/organization.repository';\nimport { SharingRepository } from './sharing/implementations/sharing.repository';\nimport { AdminRepositoryInterface } from './sharing/interfaces/adminRepository.interface';\nimport { type DashboardRepositoryInterface } from './sharing/interfaces/dashboardRepository.interface';\nimport { type SharingDetailsRepositoryInterface } from './sharing/interfaces/detailsRepository.interface';\nimport { type DownloadManagerRepositoryInterface } from './sharing/interfaces/downloadManagerRepository.interface';\nimport { OrganizationRepositoryInterface } from './sharing/interfaces/organizationRepository.interface';\nimport { type SharingRepositoryInterface } from './sharing/interfaces/sharingRepository.interface';\n\ncontainer.register<SharingRepositoryInterface>(\n 'SharingRepository',\n SharingRepository,\n);\ncontainer.register<SharingDetailsRepositoryInterface>(\n 'SharingDetailsRepository',\n SharingDetailsRepository,\n);\ncontainer.register<UserRepositoryInterface>('UserRepository', UserRepository);\ncontainer.register<RoleRepositoryInterface>('RoleRepository', GroupRepository);\ncontainer.register<DashboardRepositoryInterface>(\n 'dxRepository',\n DashboardRepository,\n);\ncontainer.register<DownloadManagerRepositoryInterface>(\n 'dmRepository',\n DownloadManagerRepository,\n);\ncontainer.register<OrganizationRepositoryInterface>(\n 'OrganizationRepository',\n OrganizationRepository,\n);\ncontainer.register<AdminRepositoryInterface>(\n 'AdminRepository',\n AdminRepository,\n);\n\nexport const Context = container;\n","enum LOGIN_TYPES {\n composer = 'qrveyLogin',\n openIdComposer = 'OPENID_CREATORS',\n}\n\nexport function isComposer(type: string): boolean {\n return type === LOGIN_TYPES.composer || type === LOGIN_TYPES.openIdComposer;\n}\n","import { BaseUser } from './types/user.type';\n\nexport class User {\n private userId: string;\n private email: string;\n private groups: string[];\n private organization: string;\n\n constructor(params: BaseUser) {\n this.userId = params.userid;\n this.email = params.email;\n this.groups = params.groups;\n this.organization = params.organization;\n }\n\n public get getUserId(): string {\n return this.userId;\n }\n\n public get getEmail(): string {\n return this.email;\n }\n\n public get getGroups(): string[] {\n return this.groups;\n }\n\n public get getOrganization(): string {\n return this.organization;\n }\n}\n","import { inject, injectable } from 'tsyringe';\n\nimport { ParamsFromTokenToUser } from '../../common/common.type';\nimport { ORGANIZATION_QRVEY } from '../../common/constants';\nimport { isComposer } from '../../common/util';\nimport { UserToken } from '../entities/types/user.type';\nimport { User } from '../entities/user';\nimport { UserRepositoryInterface } from '../interfaces/userRepository.interface';\n\n@injectable()\nexport class FromTokenToUser {\n constructor(\n @inject('UserRepository')\n private readonly userRepository: UserRepositoryInterface,\n ) {}\n\n public async execute({\n body,\n }: {\n body: UserToken;\n }): Promise<ParamsFromTokenToUser> {\n const current = await this.userRepository.getOne(\n body.clientId || body.userId,\n );\n if (current) {\n const user = new User(current);\n return {\n userId: user.getUserId,\n roles: user.getGroups,\n orgId: body.orgId ?? ORGANIZATION_QRVEY,\n };\n }\n\n const inComposer = isComposer(body.loginType || '');\n if (!inComposer) {\n return {\n userId: body.clientId || '',\n roles: body.roles || [],\n orgId: body.orgId || '',\n };\n }\n\n return {\n userId: '',\n roles: [],\n orgId: '',\n };\n }\n}\n","import { inject, injectable } from 'tsyringe';\n\nimport { ORGANIZATION_QRVEY } from '../../common/constants';\nimport { isComposer } from '../../common/util';\nimport { UserRepositoryInterface } from '../interfaces/userRepository.interface';\n\n@injectable()\nexport class HasAdminRole {\n constructor(\n @inject('UserRepository')\n private readonly userRepository: UserRepositoryInterface,\n ) {}\n\n public async execute({\n apiKey,\n clientId,\n orgId,\n userId,\n loginType,\n }: {\n apiKey?: string;\n clientId?: string;\n orgId?: string;\n userId?: string;\n loginType?: string;\n } = {}): Promise<boolean> {\n if (!userId) return false;\n\n const existingUser = await this.userRepository.getOne(userId);\n const isMasterKey =\n apiKey && (orgId === undefined || orgId === ORGANIZATION_QRVEY);\n if (isMasterKey && existingUser && (!clientId || clientId === userId))\n return true;\n\n const user = await this.userRepository.getList({\n data: { identifier: clientId ?? userId, role: 'administrator' },\n });\n const isAdmin = user.items.length > 0;\n\n if (isMasterKey && isAdmin) return true;\n\n const inComposer = isComposer(loginType || '');\n const isExternal =\n (!clientId && !inComposer) ||\n (orgId && orgId !== ORGANIZATION_QRVEY);\n if (isExternal) return false;\n\n if (isAdmin) return true;\n\n return false;\n }\n}\n","import { inject, injectable } from 'tsyringe';\n\nimport {\n AppPermissionResponse,\n APP_SHARING_STATUS,\n} from '../../common/constants';\nimport { AdminRepositoryInterface } from '../interfaces/adminRepository.interface';\n\n@injectable()\nexport default class CheckAppPermissions {\n constructor(\n @inject('AdminRepository')\n private readonly adminRepository: AdminRepositoryInterface,\n ) {}\n\n //TODO Need Test\n async execute({\n appId,\n userId,\n }: {\n appId: string;\n userId: string;\n }): Promise<AppPermissionResponse> {\n // If no user is available, block access by default\n if (!userId) return { privacy: APP_SHARING_STATUS.PRIVATE };\n\n // Fetch application status and global platform configuration in parallel\n const appInfo = await this.adminRepository.getApplicationInfo({\n appId,\n userId,\n });\n const platform = await this.adminRepository.getPlatformConfiguration();\n\n // Check if the application is shared with the current user\n if (appInfo.status !== 200)\n return { privacy: APP_SHARING_STATUS.PRIVATE };\n\n // According to QRV-297, the LegacyMode ON will have public access, in future implementation, other options will be added.\n const hasPublicAccess = platform?.legacyMode;\n\n const privacy = hasPublicAccess\n ? APP_SHARING_STATUS.PUBLIC\n : APP_SHARING_STATUS.PRIVATE;\n\n return { privacy };\n }\n}\n","import { inject, injectable } from 'tsyringe';\n\nimport {\n APP_SHARING_STATUS,\n AppPermissionResponse,\n} from '../../common/constants';\nimport { OrganizationRepositoryInterface } from '../interfaces/organizationRepository.interface';\n\n@injectable()\nexport default class CheckOrgPermissions {\n constructor(\n @inject('OrganizationRepository')\n private readonly organizationRepository: OrganizationRepositoryInterface,\n ) {}\n\n //TODO Need Tes\n async execute({\n orgId,\n }: {\n orgId: string;\n }): Promise<AppPermissionResponse> {\n const hasPublicAccess = await this.organizationRepository.getOne(orgId);\n const privacy = hasPublicAccess?.effective_content_privacy\n ? APP_SHARING_STATUS.PRIVATE\n : APP_SHARING_STATUS.PUBLIC;\n\n return { privacy };\n }\n}\n","import { getId } from '@qrvey/id-generator';\n\nimport {\n BaseSharingDetails,\n CreateSharingDetails,\n ResponseSharingDetails,\n SharingDetailsTable,\n UpdateSharingDetails,\n} from './types/details.type';\nimport {\n ACCESS_LEVEL,\n SHARED_ORIGIN,\n SHARE_TYPE,\n} from '../../common/constants';\n\nexport class SharingDetail {\n private sharingDetailsId: string;\n private assetId: string;\n private accessLevel: ACCESS_LEVEL;\n private accessLevelAsText: string;\n private orgId: string;\n private sharedWith: string;\n private sharedType: SHARE_TYPE;\n private sharedOrigin: SHARED_ORIGIN;\n private sharedEmail?: string;\n private createdAt: string;\n private updatedAt: string;\n private deletedAt?: string;\n\n constructor(params: BaseSharingDetails) {\n this.sharingDetailsId = params.sharingDetailsId;\n this.assetId = params.assetId;\n this.accessLevel = params.accessLevel;\n this.accessLevelAsText = this.convertAccessLevelToText(\n params.accessLevel,\n );\n this.orgId = params.orgId;\n this.sharedWith = params.sharedWith;\n this.sharedType = params.sharedType;\n this.sharedEmail = params.sharedEmail;\n this.sharedOrigin = params.sharedOrigin;\n this.createdAt = params.createdAt;\n this.updatedAt = params.updatedAt;\n this.deletedAt = params.deletedAt;\n }\n\n static create(params: CreateSharingDetails): SharingDetail {\n const now = new Date().toISOString();\n const obj: BaseSharingDetails = {\n ...params,\n sharingDetailsId: params.sharedId ?? getId(),\n createdAt: now,\n updatedAt: now,\n };\n\n return new SharingDetail(obj);\n }\n\n static parse(params: SharingDetailsTable): SharingDetail {\n return new SharingDetail({\n sharingDetailsId: params.sharing_details_id,\n assetId: params.asset_id,\n accessLevel: params.access_level as ACCESS_LEVEL,\n orgId: params.org_id,\n sharedWith: params.shared_with,\n sharedType: params.shared_type as SHARE_TYPE,\n sharedEmail: params.shared_email,\n sharedOrigin: params.share_origin as SHARED_ORIGIN,\n createdAt: params.created_at,\n updatedAt: params.updated_at,\n deletedAt: params.deleted_at,\n });\n }\n\n update(params: UpdateSharingDetails) {\n if (params.accessLevel || params.accessLevel === 0)\n this.accessLevel = params.accessLevel;\n if (params.sharedEmail) this.sharedEmail = params.sharedEmail;\n this.updatedAt = new Date().toISOString();\n }\n\n toTable(): SharingDetailsTable {\n return {\n sharing_details_id: this.sharingDetailsId,\n asset_id: this.assetId,\n access_level: this.accessLevel,\n org_id: this.orgId,\n shared_with: this.sharedWith,\n shared_type: this.sharedType,\n shared_email: this.sharedEmail,\n share_origin: this.sharedOrigin,\n created_at: this.createdAt,\n updated_at: this.updatedAt,\n deleted_at: this.deletedAt,\n };\n }\n\n toPlain(): BaseSharingDetails {\n return {\n sharingDetailsId: this.sharingDetailsId,\n assetId: this.assetId,\n accessLevel: this.accessLevel,\n orgId: this.orgId,\n sharedWith: this.sharedWith,\n sharedType: this.sharedType,\n sharedEmail: this.sharedEmail,\n sharedOrigin: this.sharedOrigin,\n createdAt: this.createdAt,\n updatedAt: this.updatedAt,\n deletedAt: this.deletedAt,\n };\n }\n\n toJSON(): ResponseSharingDetails {\n return {\n sharedId: this.sharingDetailsId,\n assetId: this.assetId,\n accessLevel: this.accessLevel,\n accessLevelAsText: this.accessLevelAsText,\n orgId: this.orgId,\n sharedWith: this.sharedWith,\n sharedType: this.sharedType,\n sharedEmail: this.sharedEmail,\n sharedOrigin: this.sharedOrigin,\n createdAt: this.createdAt,\n updatedAt: this.updatedAt,\n };\n }\n\n public get getSharingDetailsId(): string {\n return this.sharingDetailsId;\n }\n\n public get getAccessLevel(): ACCESS_LEVEL {\n return this.accessLevel;\n }\n\n public get getAccessLevelAsText(): string {\n return this.accessLevelAsText;\n }\n\n private convertAccessLevelToText(level: number): string {\n return ACCESS_LEVEL[level] ?? 'UNKNOWN';\n }\n}\n","import { inject, injectable } from 'tsyringe';\n\nimport { ACCESS_LEVEL, SHARE_TYPE } from '../../common/constants';\nimport { fromTokenToUser } from '../../index';\nimport { SharingDetail } from '../entities/details';\nimport { SharingDetailsRepositoryInterface } from '../interfaces/detailsRepository.interface';\n\n@injectable()\nexport class CheckUserAccessLevel {\n constructor(\n @inject('SharingDetailsRepository')\n private readonly detailsRepository: SharingDetailsRepositoryInterface,\n ) {}\n\n public async execute({\n userId,\n assetId,\n clientId,\n loginType,\n roles,\n orgId,\n }: {\n assetId: string;\n userId: string;\n clientId?: string;\n loginType?: string;\n roles?: string[];\n orgId?: string;\n }): Promise<{ level: ACCESS_LEVEL; levelAsText: string }> {\n const user = await fromTokenToUser({\n body: { userId, clientId, roles, orgId, loginType },\n });\n const details = await this.detailsRepository.getList({\n data: { assetId, user },\n sorting: [{ column: 'access_level', direction: 'DESC' }],\n });\n if (details.items.length === 0)\n return { level: ACCESS_LEVEL.NONE, levelAsText: 'NONE' };\n\n const priority = {\n [SHARE_TYPE.USER]: 3,\n [SHARE_TYPE.ROLE]: 2,\n [SHARE_TYPE.ORGANIZATION]: 1,\n };\n const priorityDetail = details.items.reduce((best, current) => {\n const bestPriority = priority[best.shared_type as SHARE_TYPE];\n const currentPriority = priority[current.shared_type as SHARE_TYPE];\n const isBetter =\n currentPriority > bestPriority ||\n (currentPriority === bestPriority &&\n current.access_level > best.access_level);\n\n if (isBetter) return current;\n return best;\n });\n\n const currentDetail = SharingDetail.parse(priorityDetail);\n return {\n level: currentDetail.getAccessLevel,\n levelAsText: currentDetail.getAccessLevelAsText,\n };\n }\n}\n","import { inject, injectable } from 'tsyringe';\n\nimport { SharingRepositoryInterface } from '../interfaces/sharingRepository.interface';\n\nexport interface Delete {\n assetId: string;\n}\n\n@injectable()\nexport class DeleteSharing {\n constructor(\n @inject('SharingRepository')\n private readonly sharingRepository: SharingRepositoryInterface,\n ) {}\n\n public async execute({ body }: { body: Delete }): Promise<boolean | null> {\n const { assetId } = body;\n const sharing = await this.sharingRepository.getOne(assetId);\n\n if (!sharing) return null;\n const detailSharing = await this.sharingRepository.delete(assetId);\n return detailSharing;\n }\n}\n","import { inject, injectable } from 'tsyringe';\n\nimport { OrgTreeResult } from '../entities/types/orgTreeResult';\nimport { OrganizationRepositoryInterface } from '../interfaces/organizationRepository.interface';\n\n@injectable()\nexport default class GetOrgTree {\n constructor(\n @inject('OrganizationRepository')\n private readonly organizationRepository: OrganizationRepositoryInterface,\n ) {}\n\n async execute(\n orgId: string,\n contentSharingStatus: boolean,\n ): Promise<OrgTreeResult> {\n return this.organizationRepository.getOrgTree(\n orgId,\n contentSharingStatus,\n );\n }\n}\n","import { inject, injectable } from 'tsyringe';\n\nimport { Sorting } from '../../common/common.type';\nimport { SharingDetail } from '../entities/details';\nimport {\n GetSharingList,\n ListSharingDetails,\n SharingDetailsTable,\n} from '../entities/types/details.type';\nimport { SharingDetailsRepositoryInterface } from '../interfaces/detailsRepository.interface';\nimport { SharingRepositoryInterface } from '../interfaces/sharingRepository.interface';\n\n@injectable()\nexport class ListSharing {\n constructor(\n @inject('SharingRepository')\n private readonly sharingRepository: SharingRepositoryInterface,\n @inject('SharingDetailsRepository')\n private readonly detailsRepository: SharingDetailsRepositoryInterface,\n ) {}\n\n public async execute({\n body,\n }: {\n body: GetSharingList;\n }): Promise<ListSharingDetails | null> {\n const {\n data: { assetId },\n pagination,\n } = body;\n const sharing = await this.sharingRepository.getOne(assetId);\n\n if (!sharing) return null;\n\n const sorting: Array<Sorting> =\n body.sorting && body.sorting?.length > 0\n ? body.sorting\n : [{ column: 'created_at', direction: 'ASC' }];\n\n const detailSharing = await this.detailsRepository.getList({\n data: { assetId },\n pagination,\n sorting,\n });\n const items = detailSharing.items.map((item) =>\n SharingDetail.parse(item as SharingDetailsTable).toJSON(),\n );\n return {\n ...detailSharing,\n items,\n };\n }\n}\n","import {\n BaseSharing,\n CreateSharing,\n ResponseSharing,\n SharingTable,\n} from './types/sharing.type';\nimport { ASSET_TYPE } from '../../common/constants';\n\nexport class Sharing {\n private assetId: string;\n private assetType: ASSET_TYPE;\n private createdAt: string;\n private updatedAt: string;\n private deletedAt?: string;\n\n constructor(params: BaseSharing) {\n this.assetId = params.assetId;\n this.assetType = params.assetType;\n this.createdAt = params.createdAt;\n this.updatedAt = params.updatedAt;\n this.deletedAt = params.deletedAt;\n }\n\n static create(params: CreateSharing): Sharing {\n const now = new Date().toISOString();\n const obj: BaseSharing = {\n ...params,\n createdAt: now,\n updatedAt: now,\n };\n return new Sharing(obj);\n }\n\n static parse(params: SharingTable): Sharing {\n return new Sharing({\n assetId: params.asset_id,\n assetType: params.asset_type as ASSET_TYPE,\n createdAt: params.created_at,\n updatedAt: params.updated_at,\n deletedAt: params.deleted_at,\n });\n }\n\n update() {\n this.updatedAt = new Date().toISOString();\n }\n\n toTable(): SharingTable {\n return {\n asset_id: this.assetId,\n asset_type: this.assetType,\n created_at: this.createdAt,\n updated_at: this.updatedAt,\n deleted_at: this.deletedAt,\n };\n }\n\n toPlain(): BaseSharing {\n return {\n assetId: this.assetId,\n assetType: this.assetType,\n createdAt: this.createdAt,\n updatedAt: this.updatedAt,\n deletedAt: this.deletedAt,\n };\n }\n\n toJSON(): ResponseSharing {\n return {\n assetId: this.assetId,\n assetType: this.assetType,\n createdAt: this.createdAt,\n updatedAt: this.updatedAt,\n };\n }\n\n public get getAssetId(): string {\n return this.assetId;\n }\n\n public get getAssetType(): string {\n return this.assetType;\n }\n}\n","import { inject, injectable } from 'tsyringe';\n\nimport {\n ACCESS_LEVEL,\n ASSET_TYPE,\n ORGANIZATION_QRVEY,\n SHARED_ORIGIN,\n SHARE_TYPE,\n} from '../../common/constants';\nimport { RoleRepositoryInterface } from '../../quser/interfaces/rolesRepository.interface';\nimport { UserRepositoryInterface } from '../../quser/interfaces/userRepository.interface';\nimport { SharingDetail } from '../entities/details';\nimport { Sharing } from '../entities/sharing';\nimport { ResponseSharingDetails } from '../entities/types/details.type';\nimport { DashboardRepositoryInterface } from '../interfaces/dashboardRepository.interface';\nimport { SharingDetailsRepositoryInterface } from '../interfaces/detailsRepository.interface';\nimport { DownloadManagerRepositoryInterface } from '../interfaces/downloadManagerRepository.interface';\nimport { SharingRepositoryInterface } from '../interfaces/sharingRepository.interface';\n\ninterface SharingWith {\n sharedId?: string;\n sharedWith: string;\n sharedOrigin: SHARED_ORIGIN;\n accessLevel: ACCESS_LEVEL;\n orgId?: string;\n sharedEmail?: string;\n sharedType: SHARE_TYPE;\n}\n\nexport interface UpsertInterface {\n assetId: string;\n assetType: ASSET_TYPE;\n add?: Array<SharingWith>;\n remove?: Array<{\n sharedId: string;\n }>;\n}\n\n@injectable()\nexport class UpsertSharing {\n constructor(\n @inject('SharingRepository')\n private readonly sharingRepository: SharingRepositoryInterface,\n @inject('SharingDetailsRepository')\n private readonly detailsRepository: SharingDetailsRepositoryInterface,\n @inject('dxRepository')\n private readonly dxRepository: DashboardRepositoryInterface,\n @inject('dmRepository')\n private readonly dmRepository: DownloadManagerRepositoryInterface,\n @inject('UserRepository')\n private readonly userRepository: UserRepositoryInterface,\n @inject('RoleRepository')\n private readonly roleRepository: RoleRepositoryInterface,\n ) {}\n\n public async execute({\n body,\n }: {\n body: UpsertInterface;\n }): Promise<ResponseSharingDetails[]> {\n const assetId = body.assetId;\n\n const isValidAsset = await this.validateIfAssetExists(\n assetId,\n body.assetType,\n );\n if (!isValidAsset)\n throw new Error(`Asset with ID ${assetId} not found`);\n\n const sharing = await this.sharingRepository.getOne(assetId);\n let currentSharing: Sharing;\n if (sharing) {\n currentSharing = Sharing.parse(sharing);\n } else {\n const createSharing = {\n assetId,\n assetType: body.assetType,\n };\n currentSharing = Sharing.create(createSharing);\n await this.sharingRepository.create(currentSharing.toTable());\n }\n\n let updatedList: SharingDetail[] = [];\n if (body.add) updatedList = await this.addDetails(assetId, body.add);\n if (body.remove) await this.removeDetails(body.remove);\n\n currentSharing.update();\n await this.sharingRepository.patch(\n currentSharing.getAssetId,\n currentSharing.toTable(),\n );\n return updatedList.map((detail) => detail.toJSON());\n }\n\n private async validateIfAssetExists(\n assetId: string,\n assetType: ASSET_TYPE,\n ): Promise<boolean> {\n switch (assetType) {\n case ASSET_TYPE.DX: {\n const result = await this.dxRepository.get(assetId);\n if (result) return true;\n return false;\n }\n case ASSET_TYPE.DM: {\n return true;\n }\n\n default:\n return false;\n }\n }\n\n private async addDetails(\n assetId: string,\n list: Required<UpsertInterface>['add'],\n ): Promise<SharingDetail[]> {\n const sharingList: SharingDetail[] = [];\n for (const detail of list) {\n const currentDetail = await this.addSpecificDetail(assetId, detail);\n if (currentDetail) sharingList.push(currentDetail);\n }\n return sharingList;\n }\n\n private async addSpecificDetail(\n assetId: string,\n detail: SharingWith,\n ): Promise<SharingDetail | null> {\n let currentDetail: SharingDetail;\n const isValid = await this.validateIfSharedWithExist(detail);\n if (!isValid) return null;\n\n let sharingDetail = await this.detailsRepository.getBySharedWith(\n assetId,\n detail.sharedWith,\n );\n if (!sharingDetail && detail.sharedId) {\n sharingDetail = await this.detailsRepository.getOne(\n detail.sharedId,\n );\n }\n\n if (sharingDetail) {\n currentDetail = SharingDetail.parse(sharingDetail);\n currentDetail.update(detail);\n await this.detailsRepository.patch(\n currentDetail.getSharingDetailsId,\n currentDetail.toTable(),\n );\n } else {\n const createDetails = {\n assetId: assetId,\n orgId: detail.orgId ?? ORGANIZATION_QRVEY, //TODO If shareOrigin is INTERNAL then `ORGANIZATION_QRVEY` else fail\n ...detail,\n };\n currentDetail = SharingDetail.create(createDetails);\n await this.detailsRepository.create(currentDetail.toTable());\n }\n return currentDetail;\n }\n\n private async validateIfSharedWithExist(\n detail: SharingWith,\n ): Promise<boolean> {\n if (\n detail.sharedOrigin === SHARED_ORIGIN.EXTERNAL ||\n detail.sharedOrigin === SHARED_ORIGIN.UNKNOWN\n )\n return true;\n\n const isQrveyOrg =\n detail.sharedType === SHARE_TYPE.ORGANIZATION &&\n detail.sharedWith === ORGANIZATION_QRVEY;\n if (isQrveyOrg) return true; // NOTE: If more Internal Organization arrive, need to change this validation\n\n if (detail.sharedType === SHARE_TYPE.USER) {\n const user = await this.userRepository.getOne(detail.sharedWith);\n if (user) return true;\n }\n\n if (detail.sharedType === SHARE_TYPE.ROLE) {\n const role = await this.roleRepository.getOne(detail.sharedWith);\n if (role) return true;\n }\n\n return false;\n }\n\n private async removeDetails(\n list: Required<UpsertInterface>['remove'],\n ): Promise<void> {\n for (const detail of list) {\n await this.detailsRepository.delete(detail.sharedId);\n }\n }\n}\n","import 'reflect-metadata';\nimport { Context } from './context';\nimport { FromTokenToUser } from './quser/services/fromTokenToUser';\nimport { HasAdminRole } from './quser/services/hasAdminRole';\nimport CheckAppPermissions from './sharing/services/checkAppPermissions';\nimport CheckOrgPermissions from './sharing/services/checkOrgPermissions';\nimport { CheckUserAccessLevel } from './sharing/services/checkUserAccessLevel';\nimport { DeleteSharing } from './sharing/services/delete';\nimport GetOrgTree from './sharing/services/getOrgTree';\nimport { ListSharing } from './sharing/services/list';\nimport { UpsertSharing } from './sharing/services/upsert';\n\nexport const api = {\n upsert: (...args: Parameters<UpsertSharing['execute']>) =>\n Context.resolve(UpsertSharing).execute(...args),\n list: (...args: Parameters<ListSharing['execute']>) =>\n Context.resolve(ListSharing).execute(...args),\n delete: (...args: Parameters<DeleteSharing['execute']>) =>\n Context.resolve(DeleteSharing).execute(...args),\n};\n\nexport const checkUserAccessLevel = (\n ...args: Parameters<CheckUserAccessLevel['execute']>\n) => Context.resolve(CheckUserAccessLevel).execute(...args);\n\nexport const checkAppPermissions = (\n ...args: Parameters<CheckAppPermissions['execute']>\n) => Context.resolve(CheckAppPermissions).execute(...args);\n\nexport const checkOrgPermissions = (\n ...args: Parameters<CheckOrgPermissions['execute']>\n) => Context.resolve(CheckOrgPermissions).execute(...args);\n\nexport const getOrgTree = (...args: Parameters<GetOrgTree['execute']>) =>\n Context.resolve(GetOrgTree).execute(...args);\n\nexport const fromTokenToUser = (\n ...args: Parameters<FromTokenToUser['execute']>\n) => Context.resolve(FromTokenToUser).execute(...args);\n\nexport const hasAdminRole = (...args: Parameters<HasAdminRole['execute']>) =>\n Context.resolve(HasAdminRole).execute(...args);\n\nexport {\n ACCESS_LEVEL,\n ASSET_TYPE,\n ORGANIZATION_QRVEY,\n SHARED_ORIGIN,\n SHARE_TYPE,\n APP_SHARING_STATUS,\n ORGANIZATION_ANONYMOUS,\n} from './common/constants';\n\nexport { GetSharingList } from './sharing/entities/types/details.type';\n"]}
@@ -35,7 +35,13 @@ interface UserToken {
35
35
  loginType?: string;
36
36
  }
37
37
 
38
+ interface OrgTreeResult {
39
+ privateIds: string[];
40
+ publicIds: string[];
41
+ }
42
+
38
43
  declare const ORGANIZATION_QRVEY = "org:0";
44
+ declare const ORGANIZATION_ANONYMOUS = "anonymous";
39
45
  declare enum ASSET_TYPE {
40
46
  DX = "DX",// DASHBOARD X (Next Gen)
41
47
  DM = "DM"
@@ -65,12 +71,12 @@ declare enum ACCESS_LEVEL {
65
71
  CAN_EDIT = 2,
66
72
  ADMIN = 4
67
73
  }
68
- declare enum AppSharingStatus {
74
+ declare enum APP_SHARING_STATUS {
69
75
  PUBLIC = "public",
70
76
  PRIVATE = "private"
71
77
  }
72
78
  interface AppPermissionResponse {
73
- privacy: AppSharingStatus;
79
+ privacy: APP_SHARING_STATUS;
74
80
  }
75
81
 
76
82
  interface Delete {
@@ -146,6 +152,7 @@ declare const checkAppPermissions: (args_0: {
146
152
  declare const checkOrgPermissions: (args_0: {
147
153
  orgId: string;
148
154
  }) => Promise<AppPermissionResponse>;
155
+ declare const getOrgTree: (orgId: string, contentSharingStatus: boolean) => Promise<OrgTreeResult>;
149
156
  declare const fromTokenToUser: (args_0: {
150
157
  body: UserToken;
151
158
  }) => Promise<ParamsFromTokenToUser>;
@@ -157,4 +164,4 @@ declare const hasAdminRole: (args_0?: {
157
164
  loginType?: string;
158
165
  } | undefined) => Promise<boolean>;
159
166
 
160
- export { ACCESS_LEVEL, ASSET_TYPE, type GetSharingList, ORGANIZATION_QRVEY, SHARED_ORIGIN, SHARE_TYPE, api, checkAppPermissions, checkOrgPermissions, checkUserAccessLevel, fromTokenToUser, hasAdminRole };
167
+ export { ACCESS_LEVEL, APP_SHARING_STATUS, ASSET_TYPE, type GetSharingList, ORGANIZATION_ANONYMOUS, ORGANIZATION_QRVEY, SHARED_ORIGIN, SHARE_TYPE, api, checkAppPermissions, checkOrgPermissions, checkUserAccessLevel, fromTokenToUser, getOrgTree, hasAdminRole };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qrvey/assets-sharing",
3
- "version": "0.3.4-dev.2094",
3
+ "version": "0.3.4-dev.2153",
4
4
  "types": "dist/types/index.d.ts",
5
5
  "main": "dist/cjs/index.js",
6
6
  "exports": {
@@ -31,7 +31,7 @@
31
31
  "publish-package": "yarn prepare-publish && npm publish"
32
32
  },
33
33
  "dependencies": {
34
- "@qrvey/data-persistence": "0.5.1-bundled.1",
34
+ "@qrvey/data-persistence": "0.5.13-552",
35
35
  "@qrvey/id-generator": "^1.0.1",
36
36
  "@qrvey/utils": "1.15.0-30",
37
37
  "reflect-metadata": "0.2.2",