@syntax-syllogism/warden-core 0.2.0

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.
Files changed (191) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/LICENSE +21 -0
  3. package/README.md +111 -0
  4. package/lib/access/assignees.d.ts +27 -0
  5. package/lib/access/assignees.js +139 -0
  6. package/lib/access/assignees.js.map +1 -0
  7. package/lib/access/messages.d.ts +1 -0
  8. package/lib/access/messages.js +24 -0
  9. package/lib/access/messages.js.map +1 -0
  10. package/lib/access/metadata.d.ts +41 -0
  11. package/lib/access/metadata.js +168 -0
  12. package/lib/access/metadata.js.map +1 -0
  13. package/lib/access/muting.d.ts +7 -0
  14. package/lib/access/muting.js +22 -0
  15. package/lib/access/muting.js.map +1 -0
  16. package/lib/access/output.d.ts +12 -0
  17. package/lib/access/output.js +108 -0
  18. package/lib/access/output.js.map +1 -0
  19. package/lib/access/resolvers/field.d.ts +2 -0
  20. package/lib/access/resolvers/field.js +93 -0
  21. package/lib/access/resolvers/field.js.map +1 -0
  22. package/lib/access/resolvers/index.d.ts +2 -0
  23. package/lib/access/resolvers/index.js +22 -0
  24. package/lib/access/resolvers/index.js.map +1 -0
  25. package/lib/access/resolvers/object.d.ts +2 -0
  26. package/lib/access/resolvers/object.js +101 -0
  27. package/lib/access/resolvers/object.js.map +1 -0
  28. package/lib/access/resolvers/recordType.d.ts +2 -0
  29. package/lib/access/resolvers/recordType.js +181 -0
  30. package/lib/access/resolvers/recordType.js.map +1 -0
  31. package/lib/access/resolvers/setupEntity.d.ts +4 -0
  32. package/lib/access/resolvers/setupEntity.js +43 -0
  33. package/lib/access/resolvers/setupEntity.js.map +1 -0
  34. package/lib/access/resolvers/tab.d.ts +2 -0
  35. package/lib/access/resolvers/tab.js +36 -0
  36. package/lib/access/resolvers/tab.js.map +1 -0
  37. package/lib/access/reverse.d.ts +9 -0
  38. package/lib/access/reverse.js +429 -0
  39. package/lib/access/reverse.js.map +1 -0
  40. package/lib/access/soql.d.ts +6 -0
  41. package/lib/access/soql.js +31 -0
  42. package/lib/access/soql.js.map +1 -0
  43. package/lib/access/targetValidation.d.ts +7 -0
  44. package/lib/access/targetValidation.js +110 -0
  45. package/lib/access/targetValidation.js.map +1 -0
  46. package/lib/access/types.d.ts +88 -0
  47. package/lib/access/types.js +20 -0
  48. package/lib/access/types.js.map +1 -0
  49. package/lib/errors.d.ts +18 -0
  50. package/lib/errors.js +39 -0
  51. package/lib/errors.js.map +1 -0
  52. package/lib/index.d.ts +37 -0
  53. package/lib/index.js +33 -0
  54. package/lib/index.js.map +1 -0
  55. package/lib/lifecycle/assignmentState.d.ts +62 -0
  56. package/lib/lifecycle/assignmentState.js +89 -0
  57. package/lib/lifecycle/assignmentState.js.map +1 -0
  58. package/lib/lifecycle/conformance.d.ts +10 -0
  59. package/lib/lifecycle/conformance.js +59 -0
  60. package/lib/lifecycle/conformance.js.map +1 -0
  61. package/lib/lifecycle/diffOutput.d.ts +7 -0
  62. package/lib/lifecycle/diffOutput.js +94 -0
  63. package/lib/lifecycle/diffOutput.js.map +1 -0
  64. package/lib/lifecycle/dmlRunner.d.ts +30 -0
  65. package/lib/lifecycle/dmlRunner.js +45 -0
  66. package/lib/lifecycle/dmlRunner.js.map +1 -0
  67. package/lib/lifecycle/errors.d.ts +5 -0
  68. package/lib/lifecycle/errors.js +8 -0
  69. package/lib/lifecycle/errors.js.map +1 -0
  70. package/lib/lifecycle/freezeState.d.ts +28 -0
  71. package/lib/lifecycle/freezeState.js +88 -0
  72. package/lib/lifecycle/freezeState.js.map +1 -0
  73. package/lib/lifecycle/messages.d.ts +1 -0
  74. package/lib/lifecycle/messages.js +20 -0
  75. package/lib/lifecycle/messages.js.map +1 -0
  76. package/lib/lifecycle/output.d.ts +23 -0
  77. package/lib/lifecycle/output.js +148 -0
  78. package/lib/lifecycle/output.js.map +1 -0
  79. package/lib/lifecycle/snapshotState.d.ts +12 -0
  80. package/lib/lifecycle/snapshotState.js +353 -0
  81. package/lib/lifecycle/snapshotState.js.map +1 -0
  82. package/lib/lifecycle/stripApply.d.ts +3 -0
  83. package/lib/lifecycle/stripApply.js +17 -0
  84. package/lib/lifecycle/stripApply.js.map +1 -0
  85. package/lib/lifecycle/stripPlan.d.ts +75 -0
  86. package/lib/lifecycle/stripPlan.js +192 -0
  87. package/lib/lifecycle/stripPlan.js.map +1 -0
  88. package/lib/lifecycle/targeting.d.ts +32 -0
  89. package/lib/lifecycle/targeting.js +195 -0
  90. package/lib/lifecycle/targeting.js.map +1 -0
  91. package/lib/lifecycle/types.d.ts +88 -0
  92. package/lib/lifecycle/types.js +2 -0
  93. package/lib/lifecycle/types.js.map +1 -0
  94. package/lib/lifecycle/userDiff.d.ts +70 -0
  95. package/lib/lifecycle/userDiff.js +393 -0
  96. package/lib/lifecycle/userDiff.js.map +1 -0
  97. package/lib/matching/index.d.ts +53 -0
  98. package/lib/matching/index.js +181 -0
  99. package/lib/matching/index.js.map +1 -0
  100. package/lib/provisioning/assignmentPlan.d.ts +53 -0
  101. package/lib/provisioning/assignmentPlan.js +90 -0
  102. package/lib/provisioning/assignmentPlan.js.map +1 -0
  103. package/lib/provisioning/definitionReader.d.ts +38 -0
  104. package/lib/provisioning/definitionReader.js +77 -0
  105. package/lib/provisioning/definitionReader.js.map +1 -0
  106. package/lib/provisioning/errors.d.ts +9 -0
  107. package/lib/provisioning/errors.js +14 -0
  108. package/lib/provisioning/errors.js.map +1 -0
  109. package/lib/provisioning/licenseUsage.d.ts +15 -0
  110. package/lib/provisioning/licenseUsage.js +53 -0
  111. package/lib/provisioning/licenseUsage.js.map +1 -0
  112. package/lib/provisioning/messages.d.ts +4 -0
  113. package/lib/provisioning/messages.js +72 -0
  114. package/lib/provisioning/messages.js.map +1 -0
  115. package/lib/provisioning/planner.d.ts +63 -0
  116. package/lib/provisioning/planner.js +407 -0
  117. package/lib/provisioning/planner.js.map +1 -0
  118. package/lib/provisioning/provisionUserUseCase.d.ts +52 -0
  119. package/lib/provisioning/provisionUserUseCase.js +200 -0
  120. package/lib/provisioning/provisionUserUseCase.js.map +1 -0
  121. package/lib/provisioning/referenceResolution.d.ts +4 -0
  122. package/lib/provisioning/referenceResolution.js +173 -0
  123. package/lib/provisioning/referenceResolution.js.map +1 -0
  124. package/lib/provisioning/userPlan.d.ts +85 -0
  125. package/lib/provisioning/userPlan.js +162 -0
  126. package/lib/provisioning/userPlan.js.map +1 -0
  127. package/lib/provisioning/userSave.d.ts +24 -0
  128. package/lib/provisioning/userSave.js +119 -0
  129. package/lib/provisioning/userSave.js.map +1 -0
  130. package/lib/relatedRecords/apply.d.ts +18 -0
  131. package/lib/relatedRecords/apply.js +121 -0
  132. package/lib/relatedRecords/apply.js.map +1 -0
  133. package/lib/relatedRecords/catalog.d.ts +7 -0
  134. package/lib/relatedRecords/catalog.js +108 -0
  135. package/lib/relatedRecords/catalog.js.map +1 -0
  136. package/lib/relatedRecords/errors.d.ts +5 -0
  137. package/lib/relatedRecords/errors.js +8 -0
  138. package/lib/relatedRecords/errors.js.map +1 -0
  139. package/lib/relatedRecords/messages.d.ts +1 -0
  140. package/lib/relatedRecords/messages.js +2 -0
  141. package/lib/relatedRecords/messages.js.map +1 -0
  142. package/lib/relatedRecords/plan.d.ts +22 -0
  143. package/lib/relatedRecords/plan.js +271 -0
  144. package/lib/relatedRecords/plan.js.map +1 -0
  145. package/lib/relatedRecords/preflight.d.ts +29 -0
  146. package/lib/relatedRecords/preflight.js +164 -0
  147. package/lib/relatedRecords/preflight.js.map +1 -0
  148. package/lib/relatedRecords/sources.d.ts +25 -0
  149. package/lib/relatedRecords/sources.js +65 -0
  150. package/lib/relatedRecords/sources.js.map +1 -0
  151. package/lib/relatedRecords/types.d.ts +46 -0
  152. package/lib/relatedRecords/types.js +2 -0
  153. package/lib/relatedRecords/types.js.map +1 -0
  154. package/lib/shared/csv.d.ts +26 -0
  155. package/lib/shared/csv.js +237 -0
  156. package/lib/shared/csv.js.map +1 -0
  157. package/lib/shared/output.d.ts +25 -0
  158. package/lib/shared/output.js +74 -0
  159. package/lib/shared/output.js.map +1 -0
  160. package/lib/shared/prompt.d.ts +4 -0
  161. package/lib/shared/prompt.js +15 -0
  162. package/lib/shared/prompt.js.map +1 -0
  163. package/lib/shared/sfUtils.d.ts +19 -0
  164. package/lib/shared/sfUtils.js +42 -0
  165. package/lib/shared/sfUtils.js.map +1 -0
  166. package/lib/shared/userFields.d.ts +23 -0
  167. package/lib/shared/userFields.js +41 -0
  168. package/lib/shared/userFields.js.map +1 -0
  169. package/lib/spec/index.d.ts +10 -0
  170. package/lib/spec/index.js +6 -0
  171. package/lib/spec/index.js.map +1 -0
  172. package/lib/spec/parse.d.ts +32 -0
  173. package/lib/spec/parse.js +77 -0
  174. package/lib/spec/parse.js.map +1 -0
  175. package/lib/spec/personaDefinitions.d.ts +56 -0
  176. package/lib/spec/personaDefinitions.js +25 -0
  177. package/lib/spec/personaDefinitions.js.map +1 -0
  178. package/lib/spec/relatedCatalog.d.ts +61 -0
  179. package/lib/spec/relatedCatalog.js +32 -0
  180. package/lib/spec/relatedCatalog.js.map +1 -0
  181. package/lib/spec/snapshot.d.ts +42 -0
  182. package/lib/spec/snapshot.js +32 -0
  183. package/lib/spec/snapshot.js.map +1 -0
  184. package/lib/spec/usersDefinition.d.ts +19 -0
  185. package/lib/spec/usersDefinition.js +21 -0
  186. package/lib/spec/usersDefinition.js.map +1 -0
  187. package/package.json +78 -0
  188. package/schemas/persona-definitions.schema.json +108 -0
  189. package/schemas/related-catalog.schema.json +141 -0
  190. package/schemas/snapshot.schema.json +128 -0
  191. package/schemas/users-definition.schema.json +36 -0
@@ -0,0 +1,43 @@
1
+ import { resolveAssignees, resultFor } from '../assignees.js';
2
+ import { queryAll } from '../soql.js';
3
+ import { enabledCsvColumns } from '../output.js';
4
+ import { validateSetupEntityTarget } from '../targetValidation.js';
5
+ import { UserAccessError } from '../types.js';
6
+ const createResolver = (config) => ({
7
+ type: config.type,
8
+ validateTarget: (conn, target) => validateSetupEntityTarget(conn, config.type, target),
9
+ async resolve(conn, target) {
10
+ if (!target.setupEntityId)
11
+ throw new UserAccessError('errorInvalidTarget', [target.targetName]);
12
+ try {
13
+ const rows = await queryAll(conn, [
14
+ 'SELECT ParentId, Parent.Id, Parent.Name, Parent.IsOwnedByProfile, Parent.ProfileId, Parent.Profile.Name, Parent.Type',
15
+ 'FROM SetupEntityAccess',
16
+ `WHERE SetupEntityType = '${config.setupEntityType}'`,
17
+ `AND SetupEntityId = '${target.setupEntityId}'`,
18
+ ].join(' '));
19
+ const grantByPermissionSetId = new Map();
20
+ const permissionSetById = new Map();
21
+ for (const row of rows) {
22
+ grantByPermissionSetId.set(row.ParentId, { kind: 'enabled', enabled: true });
23
+ if (row.Parent)
24
+ permissionSetById.set(row.ParentId, { ...row.Parent, Id: row.ParentId });
25
+ }
26
+ const resolvedRows = await resolveAssignees(conn, config.type, target.targetName, grantByPermissionSetId, permissionSetById, (grant) => grant);
27
+ return resultFor(config.type, target.targetName, resolvedRows);
28
+ }
29
+ catch (error) {
30
+ if (error instanceof UserAccessError)
31
+ throw error;
32
+ throw new UserAccessError('errorAccessQueryFailed', [target.type, target.targetName], error);
33
+ }
34
+ },
35
+ csvColumns: enabledCsvColumns,
36
+ });
37
+ export const apexClassResolver = createResolver({ type: 'apex-class', setupEntityType: 'ApexClass' });
38
+ export const vfPageResolver = createResolver({ type: 'vf-page', setupEntityType: 'ApexPage' });
39
+ export const customPermissionResolver = createResolver({
40
+ type: 'custom-permission',
41
+ setupEntityType: 'CustomPermission',
42
+ });
43
+ //# sourceMappingURL=setupEntity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setupEntity.js","sourceRoot":"","sources":["../../../src/access/resolvers/setupEntity.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAA4B,MAAM,iBAAiB,CAAC;AACxF,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AAEnE,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAY9C,MAAM,cAAc,GAAG,CAAC,MAAyB,EAAwB,EAAE,CAAC,CAAC;IAC3E,IAAI,EAAE,MAAM,CAAC,IAAI;IACjB,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,yBAAyB,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC;IACtF,KAAK,CAAC,OAAO,CAAC,IAAgB,EAAE,MAA6B;QAC3D,IAAI,CAAC,MAAM,CAAC,aAAa;YAAE,MAAM,IAAI,eAAe,CAAC,oBAAoB,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;QAChG,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,QAAQ,CACzB,IAAI,EACJ;gBACE,sHAAsH;gBACtH,wBAAwB;gBACxB,4BAA4B,MAAM,CAAC,eAAe,GAAG;gBACrD,wBAAwB,MAAM,CAAC,aAAa,GAAG;aAChD,CAAC,IAAI,CAAC,GAAG,CAAC,CACZ,CAAC;YACF,MAAM,sBAAsB,GAAG,IAAI,GAAG,EAAyB,CAAC;YAChE,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAA+B,CAAC;YACjE,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACvB,sBAAsB,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC7E,IAAI,GAAG,CAAC,MAAM;oBAAE,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,EAAE,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC3F,CAAC;YACD,MAAM,YAAY,GAAG,MAAM,gBAAgB,CACzC,IAAI,EACJ,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,UAAU,EACjB,sBAAsB,EACtB,iBAAiB,EACjB,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CACjB,CAAC;YACF,OAAO,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;QACjE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,eAAe;gBAAE,MAAM,KAAK,CAAC;YAClD,MAAM,IAAI,eAAe,CAAC,wBAAwB,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC,CAAC;QAC/F,CAAC;IACH,CAAC;IACD,UAAU,EAAE,iBAAiB;CAC9B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG,cAAc,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,CAAC,CAAC;AACtG,MAAM,CAAC,MAAM,cAAc,GAAG,cAAc,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,eAAe,EAAE,UAAU,EAAE,CAAC,CAAC;AAC/F,MAAM,CAAC,MAAM,wBAAwB,GAAG,cAAc,CAAC;IACrD,IAAI,EAAE,mBAAmB;IACzB,eAAe,EAAE,kBAAkB;CACpC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { AccessTargetResolver } from '../types.js';
2
+ export declare const tabResolver: AccessTargetResolver;
@@ -0,0 +1,36 @@
1
+ import { resolveAssignees, resultFor } from '../assignees.js';
2
+ import { esc, queryAll } from '../soql.js';
3
+ import { tabCsvColumns } from '../output.js';
4
+ import { validateTabTarget } from '../targetValidation.js';
5
+ import { UserAccessError } from '../types.js';
6
+ const profileWarning = 'Profile-level tab visibility is not included because it is not exposed as a clean PermissionSetTabSetting data-API grant.';
7
+ export const tabResolver = {
8
+ type: 'tab',
9
+ validateTarget: validateTabTarget,
10
+ async resolve(conn, target) {
11
+ try {
12
+ const settings = await queryAll(conn, [
13
+ 'SELECT ParentId, Visibility, Parent.Id, Parent.Name, Parent.IsOwnedByProfile, Parent.ProfileId, Parent.Profile.Name, Parent.Type',
14
+ 'FROM PermissionSetTabSetting',
15
+ `WHERE Name = '${esc(target.targetName)}'`,
16
+ "AND Visibility != 'Hidden'",
17
+ ].join(' '));
18
+ const grantByPermissionSetId = new Map();
19
+ const permissionSetById = new Map();
20
+ for (const row of settings) {
21
+ grantByPermissionSetId.set(row.ParentId, { kind: 'tab', visibility: row.Visibility });
22
+ if (row.Parent)
23
+ permissionSetById.set(row.ParentId, { ...row.Parent, Id: row.ParentId });
24
+ }
25
+ const rows = await resolveAssignees(conn, 'tab', target.targetName, grantByPermissionSetId, permissionSetById, (grant) => grant);
26
+ return resultFor('tab', target.targetName, rows, [profileWarning]);
27
+ }
28
+ catch (error) {
29
+ if (error instanceof UserAccessError)
30
+ throw error;
31
+ throw new UserAccessError('errorAccessQueryFailed', [target.type, target.targetName], error);
32
+ }
33
+ },
34
+ csvColumns: tabCsvColumns,
35
+ };
36
+ //# sourceMappingURL=tab.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tab.js","sourceRoot":"","sources":["../../../src/access/resolvers/tab.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAA4B,MAAM,iBAAiB,CAAC;AACxF,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAQ9C,MAAM,cAAc,GAClB,2HAA2H,CAAC;AAE9H,MAAM,CAAC,MAAM,WAAW,GAAyB;IAC/C,IAAI,EAAE,KAAK;IACX,cAAc,EAAE,iBAAiB;IACjC,KAAK,CAAC,OAAO,CAAC,IAAgB,EAAE,MAA6B;QAC3D,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAC7B,IAAI,EACJ;gBACE,kIAAkI;gBAClI,8BAA8B;gBAC9B,iBAAiB,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG;gBAC1C,4BAA4B;aAC7B,CAAC,IAAI,CAAC,GAAG,CAAC,CACZ,CAAC;YACF,MAAM,sBAAsB,GAAG,IAAI,GAAG,EAAqB,CAAC;YAC5D,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAA+B,CAAC;YACjE,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;gBAC3B,sBAAsB,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;gBACtF,IAAI,GAAG,CAAC,MAAM;oBAAE,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,EAAE,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC3F,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,gBAAgB,CACjC,IAAI,EACJ,KAAK,EACL,MAAM,CAAC,UAAU,EACjB,sBAAsB,EACtB,iBAAiB,EACjB,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CACjB,CAAC;YACF,OAAO,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;QACrE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,eAAe;gBAAE,MAAM,KAAK,CAAC;YAClD,MAAM,IAAI,eAAe,CAAC,wBAAwB,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC,CAAC;QAC/F,CAAC;IACH,CAAC;IACD,UAAU,EAAE,aAAa;CAC1B,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { Connection } from '@salesforce/core';
2
+ import type { AccessTargetType, UserAccessResult, ValidatedAccessTarget } from './types.js';
3
+ export type ReverseAccessUser = {
4
+ Id: string;
5
+ name: string;
6
+ username: string;
7
+ };
8
+ export declare const resolveReverseAccess: (conn: Connection, user: ReverseAccessUser, target: ValidatedAccessTarget) => Promise<UserAccessResult>;
9
+ export declare const reverseCsvColumns: (type: AccessTargetType) => string[];
@@ -0,0 +1,429 @@
1
+ import { mutingPermissionSetMetadataNamesById, partialMetadataWarning, profileMetadataNamesById, readMetadataInBatches, recordTypeVisibilities, } from './metadata.js';
2
+ import { combinePsgMuting, loadPsgMuting } from './muting.js';
3
+ import { fieldCsvColumns, enabledCsvColumns, objectCsvColumns, recordTypeCsvColumns, tabCsvColumns } from './output.js';
4
+ import { queryAll, queryAllInChunks, soqlIn } from './soql.js';
5
+ import { resultFor } from './assignees.js';
6
+ import { UserAccessError } from './types.js';
7
+ const truthy = (value) => value === true;
8
+ const anyFieldAccess = (access) => access.read || access.edit;
9
+ const anyObjectAccess = (access) => access.read || access.create || access.edit || access.delete || access.viewAll || access.modifyAll;
10
+ const toFieldAccess = (row) => ({
11
+ kind: 'field',
12
+ read: truthy(row.PermissionsRead),
13
+ edit: truthy(row.PermissionsEdit),
14
+ });
15
+ const toObjectAccess = (row) => ({
16
+ kind: 'object',
17
+ read: truthy(row.PermissionsRead),
18
+ create: truthy(row.PermissionsCreate),
19
+ edit: truthy(row.PermissionsEdit),
20
+ delete: truthy(row.PermissionsDelete),
21
+ viewAll: truthy(row.PermissionsViewAllRecords),
22
+ modifyAll: truthy(row.PermissionsModifyAllRecords),
23
+ });
24
+ const addSource = (map, permissionSetId, source) => {
25
+ const sources = map.get(permissionSetId) ?? [];
26
+ const key = [source.assignmentType, source.sourceId, source.viaPermissionSetId ?? ''].join('|');
27
+ if (!sources.some((entry) => [entry.assignmentType, entry.sourceId, entry.viaPermissionSetId ?? ''].join('|') === key)) {
28
+ sources.push(source);
29
+ }
30
+ map.set(permissionSetId, sources);
31
+ };
32
+ const permissionSetSource = (id, parent) => {
33
+ const isProfile = parent?.IsOwnedByProfile === true;
34
+ return {
35
+ assignmentType: isProfile ? 'Profile' : 'PermissionSet',
36
+ sourceId: isProfile ? parent?.ProfileId ?? id : id,
37
+ sourceName: isProfile ? parent?.Profile?.Name ?? parent?.Name ?? id : parent?.Name ?? id,
38
+ sourceApiName: parent?.DeveloperName ?? parent?.Name ?? id,
39
+ sourceLabel: parent?.Profile?.Name ?? parent?.Label ?? parent?.Name ?? id,
40
+ };
41
+ };
42
+ // eslint-disable-next-line complexity
43
+ const collectGrantContext = async (conn, userId, profileMetadataNames, mutingMetadataNames) => {
44
+ const assignments = await queryAll(conn, [
45
+ 'SELECT PermissionSetId, PermissionSet.Name, PermissionSet.Label, PermissionSet.IsOwnedByProfile, PermissionSet.ProfileId, PermissionSet.Profile.Name, PermissionSet.Type, PermissionSetGroupId, PermissionSetGroup.DeveloperName, PermissionSetGroup.MasterLabel',
46
+ 'FROM PermissionSetAssignment',
47
+ `WHERE AssigneeId = '${userId}'`,
48
+ ].join(' '));
49
+ const sourcesByPermissionSetId = new Map();
50
+ const metadataNameByPermissionSetId = new Map();
51
+ const mutingMetadataNameByPsgId = new Map();
52
+ const psgIds = [
53
+ ...new Set(assignments.flatMap((assignment) => (assignment.PermissionSetGroupId ? [assignment.PermissionSetGroupId] : []))),
54
+ ];
55
+ const psgNames = new Map(assignments
56
+ .filter((assignment) => assignment.PermissionSetGroupId)
57
+ .map((assignment) => [
58
+ assignment.PermissionSetGroupId,
59
+ assignment.PermissionSetGroup?.MasterLabel ??
60
+ assignment.PermissionSetGroup?.DeveloperName ??
61
+ assignment.PermissionSetGroupId,
62
+ ]));
63
+ const directPermissionSetIds = [];
64
+ for (const assignment of assignments) {
65
+ if (!assignment.PermissionSetId ||
66
+ assignment.PermissionSet?.Type === 'Muting' ||
67
+ assignment.PermissionSet?.Type === 'Group')
68
+ continue;
69
+ directPermissionSetIds.push(assignment.PermissionSetId);
70
+ addSource(sourcesByPermissionSetId, assignment.PermissionSetId, permissionSetSource(assignment.PermissionSetId, assignment.PermissionSet));
71
+ const fullName = assignment.PermissionSet?.Name ?? assignment.PermissionSet?.DeveloperName;
72
+ if (fullName &&
73
+ (assignment.PermissionSet?.Type === 'Regular' || assignment.PermissionSet?.IsOwnedByProfile === true)) {
74
+ const isProfile = assignment.PermissionSet?.IsOwnedByProfile === true;
75
+ // Standard profiles read through a Metadata API fullName that differs from
76
+ // their SOQL Name (for example "Contract Manager" is "ContractManager"),
77
+ // so translate the profile's record Id through the metadata listing.
78
+ const profileMetadataName = assignment.PermissionSet?.ProfileId
79
+ ? profileMetadataNames.get(assignment.PermissionSet.ProfileId.substring(0, 15))
80
+ : undefined;
81
+ metadataNameByPermissionSetId.set(assignment.PermissionSetId, {
82
+ type: isProfile ? 'Profile' : 'PermissionSet',
83
+ fullName: isProfile ? profileMetadataName ?? assignment.PermissionSet?.Profile?.Name ?? fullName : fullName,
84
+ });
85
+ }
86
+ }
87
+ const components = await queryAllInChunks(conn, psgIds, (chunk) => [
88
+ 'SELECT PermissionSetGroupId, PermissionSetId, PermissionSet.Name, PermissionSet.Label, PermissionSet.Type',
89
+ 'FROM PermissionSetGroupComponent',
90
+ `WHERE PermissionSetGroupId IN (${soqlIn(chunk)})`,
91
+ ].join(' '));
92
+ const componentPermissionSetIds = [];
93
+ const componentPermissionSetsById = new Map();
94
+ const unresolvedComponentIds = [
95
+ ...new Set(components
96
+ .filter((component) => !component.PermissionSet?.Type && !mutingMetadataNames.has(component.PermissionSetId.substring(0, 15)))
97
+ .map((component) => component.PermissionSetId)),
98
+ ];
99
+ if (unresolvedComponentIds.length > 0) {
100
+ const resolvedComponents = await queryAllInChunks(conn, unresolvedComponentIds, (chunk) => [
101
+ 'SELECT Id, Name, Label, Type, IsOwnedByProfile, ProfileId, Profile.Name',
102
+ 'FROM PermissionSet',
103
+ `WHERE Id IN (${soqlIn(chunk)})`,
104
+ ].join(' '));
105
+ for (const permissionSet of resolvedComponents)
106
+ componentPermissionSetsById.set(permissionSet.Id, permissionSet);
107
+ }
108
+ for (const component of components) {
109
+ // Muting permission sets are a separate object with a null PermissionSet
110
+ // relationship and Ids absent from PermissionSet SOQL; resolve them through
111
+ // the metadata listing.
112
+ const mutingName = mutingMetadataNames.get(component.PermissionSetId.substring(0, 15)) ??
113
+ (component.PermissionSet?.Type === 'Muting' ? component.PermissionSet?.Name ?? undefined : undefined);
114
+ if (mutingName) {
115
+ mutingMetadataNameByPsgId.set(component.PermissionSetGroupId, mutingName);
116
+ continue;
117
+ }
118
+ const permissionSet = component.PermissionSet ?? componentPermissionSetsById.get(component.PermissionSetId);
119
+ if (permissionSet?.Type !== 'Regular' && permissionSet?.IsOwnedByProfile !== true)
120
+ continue;
121
+ componentPermissionSetIds.push(component.PermissionSetId);
122
+ const psgName = psgNames.get(component.PermissionSetGroupId) ?? component.PermissionSetGroupId;
123
+ addSource(sourcesByPermissionSetId, component.PermissionSetId, {
124
+ assignmentType: 'PermissionSetGroup',
125
+ sourceId: component.PermissionSetGroupId,
126
+ sourceName: psgName,
127
+ sourceApiName: psgName,
128
+ sourceLabel: psgName,
129
+ viaPermissionSetId: component.PermissionSetId,
130
+ viaPermissionSetName: permissionSet?.Name ?? component.PermissionSetId,
131
+ psgId: component.PermissionSetGroupId,
132
+ });
133
+ const fullName = permissionSet?.Name ?? permissionSet?.DeveloperName;
134
+ if (fullName)
135
+ metadataNameByPermissionSetId.set(component.PermissionSetId, { type: 'PermissionSet', fullName });
136
+ }
137
+ return {
138
+ permissionSetIds: [...new Set([...directPermissionSetIds, ...componentPermissionSetIds])],
139
+ psgIds,
140
+ sourcesByPermissionSetId,
141
+ metadataNameByPermissionSetId,
142
+ mutingMetadataNameByPsgId,
143
+ };
144
+ };
145
+ const recordTypeMetadataFailure = (type, name, cause) => new UserAccessError('errorRecordTypeMetadataReadFailed', [type, name], cause);
146
+ const recordTypeEntry = (metadata, type, targetName) => {
147
+ const entries = recordTypeVisibilities(metadata, type).filter((entry) => entry.recordType === targetName);
148
+ if (entries.length > 1) {
149
+ throw recordTypeMetadataFailure(type, metadata.fullName, new Error(`Duplicate visibility for ${targetName}.`));
150
+ }
151
+ return entries[0];
152
+ };
153
+ const fieldMuting = async (conn, target, psgIds) => loadPsgMuting(conn, psgIds, async (mutingSetIds) => {
154
+ const rows = await queryAllInChunks(conn, mutingSetIds, (chunk) => [
155
+ 'SELECT ParentId, Field, PermissionsRead, PermissionsEdit',
156
+ 'FROM FieldPermissions',
157
+ 'WHERE Parent.IsOwnedByProfile = false',
158
+ `AND ParentId IN (${soqlIn(chunk)})`,
159
+ `AND SobjectType = '${target.sobjectType ?? ''}'`,
160
+ ...(target.fieldApiName ? [`AND Field = '${target.sobjectType ?? ''}.${target.fieldApiName}'`] : []),
161
+ ].join(' '));
162
+ const masksByPermissionSetId = new Map();
163
+ for (const row of rows) {
164
+ if (!row.Field)
165
+ continue;
166
+ const masks = masksByPermissionSetId.get(row.ParentId) ?? new Map();
167
+ masks.set(row.Field, { read: truthy(row.PermissionsRead), edit: truthy(row.PermissionsEdit) });
168
+ masksByPermissionSetId.set(row.ParentId, masks);
169
+ }
170
+ return masksByPermissionSetId;
171
+ });
172
+ const objectMuting = async (conn, target, psgIds) => loadPsgMuting(conn, psgIds, async (mutingSetIds) => {
173
+ const rows = await queryAllInChunks(conn, mutingSetIds, (chunk) => [
174
+ 'SELECT ParentId, PermissionsRead, PermissionsCreate, PermissionsEdit, PermissionsDelete, PermissionsViewAllRecords, PermissionsModifyAllRecords',
175
+ 'FROM ObjectPermissions',
176
+ 'WHERE Parent.IsOwnedByProfile = false',
177
+ `AND ParentId IN (${soqlIn(chunk)})`,
178
+ `AND SobjectType = '${target.sobjectType ?? ''}'`,
179
+ ].join(' '));
180
+ return new Map(rows.map((row) => [row.ParentId, toObjectAccess(row)]));
181
+ });
182
+ const baseRow = (user, targetType, source) => ({
183
+ userId: user.Id,
184
+ userName: user.name,
185
+ username: user.username,
186
+ targetType,
187
+ assignmentType: source.assignmentType,
188
+ sourceId: source.sourceId,
189
+ sourceName: source.sourceName,
190
+ sourceApiName: source.sourceApiName,
191
+ sourceLabel: source.sourceLabel,
192
+ viaPermissionSetId: source.viaPermissionSetId,
193
+ viaPermissionSetName: source.viaPermissionSetName,
194
+ });
195
+ // eslint-disable-next-line complexity
196
+ const resolveReverse = async (conn, user, target) => {
197
+ const profileMetadataNames = target.type === 'record-type' ? await profileMetadataNamesById(conn) : new Map();
198
+ const mutingMetadataNames = target.type === 'record-type' ? await mutingPermissionSetMetadataNamesById(conn) : new Map();
199
+ const context = await collectGrantContext(conn, user.Id, profileMetadataNames, mutingMetadataNames);
200
+ if (context.permissionSetIds.length === 0) {
201
+ return resultFor(target.type, target.targetName, [], [], {
202
+ sobjectType: target.sobjectType,
203
+ fieldApiName: target.fieldApiName,
204
+ });
205
+ }
206
+ const rows = [];
207
+ const warnings = [];
208
+ if (target.type === 'record-type') {
209
+ const missingNames = context.permissionSetIds.filter((id) => !context.metadataNameByPermissionSetId.has(id));
210
+ if (missingNames.length > 0) {
211
+ throw recordTypeMetadataFailure('PermissionSet', missingNames.join(', '), new Error('Permission Set metadata names were not discovered.'));
212
+ }
213
+ const profileNames = [
214
+ ...new Set([...context.metadataNameByPermissionSetId.values()]
215
+ .filter((source) => source.type === 'Profile')
216
+ .map((source) => source.fullName)),
217
+ ];
218
+ const permissionSetNames = [
219
+ ...new Set([...context.metadataNameByPermissionSetId.values()]
220
+ .filter((source) => source.type === 'PermissionSet')
221
+ .map((source) => source.fullName)),
222
+ ];
223
+ const { metadata: profiles, missing: missingProfileNames } = await readMetadataInBatches(conn, 'Profile', profileNames);
224
+ const { metadata: permissionSets, missing: missingPermissionSetNames } = await readMetadataInBatches(conn, 'PermissionSet', permissionSetNames);
225
+ const mutingNames = [...new Set(context.mutingMetadataNameByPsgId.values())];
226
+ const { metadata: mutingPermissionSets, missing: missingMutingNames } = await readMetadataInBatches(conn, 'MutingPermissionSet', mutingNames);
227
+ const missingMetadataNames = [...missingProfileNames, ...missingPermissionSetNames, ...missingMutingNames];
228
+ if (missingMetadataNames.length > 0)
229
+ warnings.push(partialMetadataWarning(missingMetadataNames));
230
+ const mutedPsgIds = new Set();
231
+ for (const [psgId, fullName] of context.mutingMetadataNameByPsgId) {
232
+ const metadata = mutingPermissionSets.get(fullName);
233
+ // Metadata the running user cannot read is reported as a partial result
234
+ // (warning above) rather than aborting the audit.
235
+ if (!metadata)
236
+ continue;
237
+ const entry = recordTypeEntry(metadata, 'MutingPermissionSet', target.targetName);
238
+ if (entry?.visible === true)
239
+ mutedPsgIds.add(psgId);
240
+ }
241
+ for (const [permissionSetId, source] of context.metadataNameByPermissionSetId) {
242
+ const metadata = (source.type === 'Profile' ? profiles : permissionSets).get(source.fullName);
243
+ if (!metadata)
244
+ continue;
245
+ const entry = recordTypeEntry(metadata, source.type, target.targetName);
246
+ if (!entry?.visible)
247
+ continue;
248
+ if (source.type === 'Profile' && typeof entry.default !== 'boolean') {
249
+ throw recordTypeMetadataFailure(source.type, source.fullName, new Error('Profile record type visibility has no default value.'));
250
+ }
251
+ const access = {
252
+ kind: 'record-type',
253
+ visible: true,
254
+ default: source.type === 'Profile' ? entry.default === true : null,
255
+ };
256
+ for (const grantSource of context.sourcesByPermissionSetId.get(permissionSetId) ?? []) {
257
+ if (grantSource.psgId && mutedPsgIds.has(grantSource.psgId))
258
+ continue;
259
+ rows.push({ ...baseRow(user, 'record-type', grantSource), targetName: target.targetName, access });
260
+ }
261
+ }
262
+ }
263
+ else if (target.type === 'field') {
264
+ if (!target.sobjectType)
265
+ throw new UserAccessError('errorInvalidTarget', [target.targetName]);
266
+ const muting = await fieldMuting(conn, target, context.psgIds);
267
+ const grants = await queryAllInChunks(conn, context.permissionSetIds, (chunk) => [
268
+ 'SELECT ParentId, SobjectType, Field, PermissionsRead, PermissionsEdit',
269
+ 'FROM FieldPermissions',
270
+ `WHERE ParentId IN (${soqlIn(chunk)})`,
271
+ `AND SobjectType = '${target.sobjectType ?? ''}'`,
272
+ ...(target.fieldApiName ? [`AND Field = '${target.sobjectType ?? ''}.${target.fieldApiName}'`] : []),
273
+ "AND Parent.Type != 'Muting'",
274
+ ].join(' '));
275
+ for (const grant of grants) {
276
+ const rawAccess = toFieldAccess(grant);
277
+ if (!anyFieldAccess(rawAccess))
278
+ continue;
279
+ for (const source of context.sourcesByPermissionSetId.get(grant.ParentId) ?? []) {
280
+ const mutedMask = source.psgId
281
+ ? combinePsgMuting(source.psgId, muting, new Map(), (left, right) => {
282
+ const combined = new Map(left);
283
+ for (const [field, mask] of right) {
284
+ const previous = combined.get(field) ?? { read: false, edit: false };
285
+ combined.set(field, { read: previous.read || mask.read, edit: previous.edit || mask.edit });
286
+ }
287
+ return combined;
288
+ }).get(grant.Field ?? '') ?? { read: false, edit: false }
289
+ : { read: false, edit: false };
290
+ const access = {
291
+ kind: 'field',
292
+ read: rawAccess.read && !mutedMask.read,
293
+ edit: rawAccess.edit && !mutedMask.edit,
294
+ };
295
+ if (!anyFieldAccess(access))
296
+ continue;
297
+ rows.push({
298
+ ...baseRow(user, 'field', source),
299
+ targetName: grant.Field ?? `${grant.SobjectType ?? ''}.${target.fieldApiName ?? ''}`,
300
+ access,
301
+ });
302
+ }
303
+ }
304
+ }
305
+ else if (target.type === 'object') {
306
+ if (!target.sobjectType)
307
+ throw new UserAccessError('errorInvalidTarget', [target.targetName]);
308
+ const muting = await objectMuting(conn, target, context.psgIds);
309
+ const grants = await queryAllInChunks(conn, context.permissionSetIds, (chunk) => [
310
+ 'SELECT ParentId, SobjectType, PermissionsRead, PermissionsCreate, PermissionsEdit, PermissionsDelete, PermissionsViewAllRecords, PermissionsModifyAllRecords',
311
+ 'FROM ObjectPermissions',
312
+ `WHERE ParentId IN (${soqlIn(chunk)})`,
313
+ `AND SobjectType = '${target.sobjectType ?? ''}'`,
314
+ "AND Parent.Type != 'Muting'",
315
+ ].join(' '));
316
+ for (const grant of grants) {
317
+ const rawAccess = toObjectAccess(grant);
318
+ if (!anyObjectAccess(rawAccess))
319
+ continue;
320
+ for (const source of context.sourcesByPermissionSetId.get(grant.ParentId) ?? []) {
321
+ const muted = source.psgId
322
+ ? combinePsgMuting(source.psgId, muting, {
323
+ kind: 'object',
324
+ read: false,
325
+ create: false,
326
+ edit: false,
327
+ delete: false,
328
+ viewAll: false,
329
+ modifyAll: false,
330
+ }, (left, right) => ({
331
+ kind: 'object',
332
+ read: left.read || right.read,
333
+ create: left.create || right.create,
334
+ edit: left.edit || right.edit,
335
+ delete: left.delete || right.delete,
336
+ viewAll: left.viewAll || right.viewAll,
337
+ modifyAll: left.modifyAll || right.modifyAll,
338
+ }))
339
+ : {
340
+ kind: 'object',
341
+ read: false,
342
+ create: false,
343
+ edit: false,
344
+ delete: false,
345
+ viewAll: false,
346
+ modifyAll: false,
347
+ };
348
+ const access = {
349
+ kind: 'object',
350
+ read: rawAccess.read && !muted.read,
351
+ create: rawAccess.create && !muted.create,
352
+ edit: rawAccess.edit && !muted.edit,
353
+ delete: rawAccess.delete && !muted.delete,
354
+ viewAll: rawAccess.viewAll && !muted.viewAll,
355
+ modifyAll: rawAccess.modifyAll && !muted.modifyAll,
356
+ };
357
+ if (!anyObjectAccess(access))
358
+ continue;
359
+ rows.push({ ...baseRow(user, 'object', source), targetName: grant.SobjectType ?? target.sobjectType, access });
360
+ }
361
+ }
362
+ }
363
+ else if (target.type === 'apex-class' || target.type === 'vf-page' || target.type === 'custom-permission') {
364
+ const setupEntityType = target.type === 'apex-class' ? 'ApexClass' : target.type === 'vf-page' ? 'ApexPage' : 'CustomPermission';
365
+ const grants = await queryAllInChunks(conn, context.permissionSetIds, (chunk) => [
366
+ 'SELECT ParentId',
367
+ 'FROM SetupEntityAccess',
368
+ `WHERE ParentId IN (${soqlIn(chunk)})`,
369
+ `AND SetupEntityType = '${setupEntityType}'`,
370
+ `AND SetupEntityId = '${target.setupEntityId ?? ''}'`,
371
+ ].join(' '));
372
+ for (const grant of grants) {
373
+ for (const source of context.sourcesByPermissionSetId.get(grant.ParentId) ?? []) {
374
+ rows.push({
375
+ ...baseRow(user, target.type, source),
376
+ targetName: target.targetName,
377
+ access: { kind: 'enabled', enabled: true },
378
+ });
379
+ }
380
+ }
381
+ }
382
+ else {
383
+ const grants = await queryAllInChunks(conn, context.permissionSetIds, (chunk) => [
384
+ 'SELECT ParentId, Name, Visibility',
385
+ 'FROM PermissionSetTabSetting',
386
+ `WHERE ParentId IN (${soqlIn(chunk)})`,
387
+ `AND Name = '${target.targetName}'`,
388
+ "AND Visibility != 'Hidden'",
389
+ ].join(' '));
390
+ for (const grant of grants) {
391
+ for (const source of context.sourcesByPermissionSetId.get(grant.ParentId) ?? []) {
392
+ rows.push({
393
+ ...baseRow(user, 'tab', source),
394
+ targetName: target.targetName,
395
+ access: { kind: 'tab', visibility: grant.Visibility ?? '' },
396
+ });
397
+ }
398
+ }
399
+ }
400
+ if (target.type === 'tab') {
401
+ warnings.push('Profile-level tab visibility is not included because it is not exposed as a clean PermissionSetTabSetting data-API grant.');
402
+ }
403
+ return resultFor(target.type, target.targetName, rows, warnings, {
404
+ sobjectType: target.sobjectType,
405
+ fieldApiName: target.fieldApiName,
406
+ });
407
+ };
408
+ export const resolveReverseAccess = async (conn, user, target) => {
409
+ try {
410
+ return await resolveReverse(conn, user, target);
411
+ }
412
+ catch (error) {
413
+ if (error instanceof UserAccessError)
414
+ throw error;
415
+ throw new UserAccessError('errorAccessQueryFailed', [target.type, target.targetName], error);
416
+ }
417
+ };
418
+ export const reverseCsvColumns = (type) => {
419
+ if (type === 'field')
420
+ return fieldCsvColumns();
421
+ if (type === 'object')
422
+ return objectCsvColumns();
423
+ if (type === 'tab')
424
+ return tabCsvColumns();
425
+ if (type === 'record-type')
426
+ return recordTypeCsvColumns();
427
+ return enabledCsvColumns();
428
+ };
429
+ //# sourceMappingURL=reverse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reverse.js","sourceRoot":"","sources":["../../src/access/reverse.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { Connection } from '@salesforce/core';
2
+ export declare const esc: (value: string) => string;
3
+ export declare const soqlIn: (values: string[]) => string;
4
+ export declare function queryAll<T extends Record<string, unknown>>(conn: Connection, soql: string): Promise<T[]>;
5
+ export declare const chunkValues: <T>(values: T[], chunkSize?: number) => T[][];
6
+ export declare function queryAllInChunks<T extends Record<string, unknown>>(conn: Connection, values: string[], buildSoql: (chunk: string[]) => string, chunkSize?: number): Promise<T[]>;
@@ -0,0 +1,31 @@
1
+ export const esc = (value) => value.replaceAll('\\', '\\\\').replaceAll("'", "\\'");
2
+ export const soqlIn = (values) => values.map((v) => `'${esc(v)}'`).join(',');
3
+ export async function queryAll(conn, soql) {
4
+ const rows = [];
5
+ let result = (await conn.query(soql));
6
+ rows.push(...result.records);
7
+ while (!result.done && result.nextRecordsUrl) {
8
+ // eslint-disable-next-line no-await-in-loop
9
+ result = (await conn.queryMore(result.nextRecordsUrl));
10
+ rows.push(...result.records);
11
+ }
12
+ return rows;
13
+ }
14
+ export const chunkValues = (values, chunkSize = 250) => {
15
+ if (chunkSize <= 0)
16
+ throw new Error('chunkSize must be greater than 0');
17
+ const chunks = [];
18
+ for (let idx = 0; idx < values.length; idx += chunkSize)
19
+ chunks.push(values.slice(idx, idx + chunkSize));
20
+ return chunks;
21
+ };
22
+ export async function queryAllInChunks(conn, values, buildSoql, chunkSize = 250) {
23
+ if (values.length === 0)
24
+ return [];
25
+ const rows = [];
26
+ // eslint-disable-next-line no-await-in-loop
27
+ for (const chunk of chunkValues(values, chunkSize))
28
+ rows.push(...(await queryAll(conn, buildSoql(chunk))));
29
+ return rows;
30
+ }
31
+ //# sourceMappingURL=soql.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"soql.js","sourceRoot":"","sources":["../../src/access/soql.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,KAAa,EAAU,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AACpG,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,MAAgB,EAAU,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAE/F,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAoC,IAAgB,EAAE,IAAY;IAC9F,MAAM,IAAI,GAAQ,EAAE,CAAC;IACrB,IAAI,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,KAAK,CAAI,IAAI,CAAC,CAAmB,CAAC;IAC3D,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IAC7B,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;QAC7C,4CAA4C;QAC5C,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,SAAS,CAAI,MAAM,CAAC,cAAc,CAAC,CAAmB,CAAC;QAC5E,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,CAAI,MAAW,EAAE,SAAS,GAAG,GAAG,EAAS,EAAE;IACpE,IAAI,SAAS,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACxE,MAAM,MAAM,GAAU,EAAE,CAAC;IACzB,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,IAAI,SAAS;QAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC;IACzG,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,IAAgB,EAChB,MAAgB,EAChB,SAAsC,EACtC,SAAS,GAAG,GAAG;IAEf,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACnC,MAAM,IAAI,GAAQ,EAAE,CAAC;IACrB,4CAA4C;IAC5C,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC;QAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,QAAQ,CAAI,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9G,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { Connection } from '@salesforce/core';
2
+ import { type ValidatedAccessTarget } from './types.js';
3
+ export declare const validateObjectTarget: (conn: Connection, target: string) => Promise<ValidatedAccessTarget>;
4
+ export declare const validateFieldTarget: (conn: Connection, target: string) => Promise<ValidatedAccessTarget>;
5
+ export declare const validateSetupEntityTarget: (conn: Connection, type: "apex-class" | "vf-page" | "custom-permission", target: string) => Promise<ValidatedAccessTarget>;
6
+ export declare const validateTabTarget: (conn: Connection, target: string) => Promise<ValidatedAccessTarget>;
7
+ export declare const validateRecordTypeTarget: (conn: Connection, target: string) => Promise<ValidatedAccessTarget>;