@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,12 @@
1
+ import type { UserAccessRow } from './types.js';
2
+ export declare const fieldCsvColumns: () => string[];
3
+ export declare const enabledCsvColumns: () => string[];
4
+ export declare const tabCsvColumns: () => string[];
5
+ export declare const recordTypeCsvColumns: () => string[];
6
+ export declare const objectCsvColumns: () => string[];
7
+ export declare const flattenAccessRow: (row: UserAccessRow, columns: string[]) => Record<string, unknown>;
8
+ export declare const renderFieldTable: (rows: UserAccessRow[], showTarget?: boolean) => string;
9
+ export declare const renderObjectTable: (rows: UserAccessRow[]) => string;
10
+ export declare const renderEnabledTable: (rows: UserAccessRow[]) => string;
11
+ export declare const renderTabTable: (rows: UserAccessRow[]) => string;
12
+ export declare const renderRecordTypeTable: (rows: UserAccessRow[]) => string;
@@ -0,0 +1,108 @@
1
+ const baseColumns = [
2
+ 'userId',
3
+ 'userName',
4
+ 'username',
5
+ 'assignmentType',
6
+ 'sourceId',
7
+ 'sourceName',
8
+ 'viaPermissionSetId',
9
+ 'viaPermissionSetName',
10
+ 'targetType',
11
+ 'targetName',
12
+ 'sourceApiName',
13
+ 'sourceLabel',
14
+ ];
15
+ export const fieldCsvColumns = () => [...baseColumns, 'read', 'edit'];
16
+ export const enabledCsvColumns = () => [...baseColumns, 'enabled'];
17
+ export const tabCsvColumns = () => [...baseColumns, 'visibility'];
18
+ export const recordTypeCsvColumns = () => [...baseColumns, 'visible', 'default'];
19
+ export const objectCsvColumns = () => [
20
+ ...baseColumns,
21
+ 'read',
22
+ 'create',
23
+ 'edit',
24
+ 'delete',
25
+ 'viewAll',
26
+ 'modifyAll',
27
+ ];
28
+ const csvValue = (row, column) => {
29
+ if (column in row.access)
30
+ return row.access[column];
31
+ return row[column] ?? '';
32
+ };
33
+ export const flattenAccessRow = (row, columns) => Object.fromEntries(columns.map((column) => [column, csvValue(row, column)]));
34
+ const formatVia = (assignmentType, sourceName, viaName) => {
35
+ if (assignmentType === 'Profile')
36
+ return `Profile: ${sourceName}`;
37
+ if (assignmentType === 'PermissionSet')
38
+ return `Permission Set: ${sourceName}`;
39
+ return viaName ? `PSG: ${sourceName} / PS: ${viaName}` : `PSG: ${sourceName}`;
40
+ };
41
+ const paddedTable = (headers, rows) => {
42
+ const widths = headers.map((header, idx) => Math.max(header.length, ...rows.map((row) => (row[idx] ?? '').length)));
43
+ const render = (cells) => cells
44
+ .map((cell, idx) => cell.padEnd(widths[idx]))
45
+ .join(' ')
46
+ .trimEnd();
47
+ return [render(headers), ...rows.map(render)].join('\n');
48
+ };
49
+ export const renderFieldTable = (rows, showTarget = false) => paddedTable([...(showTarget ? ['Target'] : []), 'User Name', 'Username', 'Read', 'Edit', 'Via'], rows.map((row) => {
50
+ if (row.access.kind !== 'field')
51
+ throw new Error('Field table received non-field access');
52
+ return [
53
+ ...(showTarget ? [row.targetName] : []),
54
+ row.userName,
55
+ row.username,
56
+ row.access.read ? 'yes' : 'no',
57
+ row.access.edit ? 'yes' : 'no',
58
+ formatVia(row.assignmentType, row.sourceName, row.viaPermissionSetName),
59
+ ];
60
+ }));
61
+ export const renderObjectTable = (rows) => paddedTable(['User Name', 'Username', 'R', 'C', 'E', 'D', 'VA', 'MA', 'Via'], rows.map((row) => {
62
+ if (row.access.kind !== 'object')
63
+ throw new Error('Object table received non-object access');
64
+ const access = row.access;
65
+ return [
66
+ row.userName,
67
+ row.username,
68
+ access.read ? 'Y' : 'N',
69
+ access.create ? 'Y' : 'N',
70
+ access.edit ? 'Y' : 'N',
71
+ access.delete ? 'Y' : 'N',
72
+ access.viewAll ? 'Y' : 'N',
73
+ access.modifyAll ? 'Y' : 'N',
74
+ formatVia(row.assignmentType, row.sourceName, row.viaPermissionSetName),
75
+ ];
76
+ }));
77
+ export const renderEnabledTable = (rows) => paddedTable(['User Name', 'Username', 'Enabled', 'Via'], rows.map((row) => {
78
+ if (row.access.kind !== 'enabled')
79
+ throw new Error('Enabled table received non-enabled access');
80
+ return [
81
+ row.userName,
82
+ row.username,
83
+ row.access.enabled ? 'yes' : 'no',
84
+ formatVia(row.assignmentType, row.sourceName, row.viaPermissionSetName),
85
+ ];
86
+ }));
87
+ export const renderTabTable = (rows) => paddedTable(['User Name', 'Username', 'Visibility', 'Via'], rows.map((row) => {
88
+ if (row.access.kind !== 'tab')
89
+ throw new Error('Tab table received non-tab access');
90
+ return [
91
+ row.userName,
92
+ row.username,
93
+ row.access.visibility,
94
+ formatVia(row.assignmentType, row.sourceName, row.viaPermissionSetName),
95
+ ];
96
+ }));
97
+ export const renderRecordTypeTable = (rows) => paddedTable(['User Name', 'Username', 'Visible', 'Default', 'Via'], rows.map((row) => {
98
+ if (row.access.kind !== 'record-type')
99
+ throw new Error('Record type table received non-record-type access');
100
+ return [
101
+ row.userName,
102
+ row.username,
103
+ row.access.visible ? 'yes' : 'no',
104
+ row.access.default === null ? 'n/a' : row.access.default ? 'yes' : 'no',
105
+ formatVia(row.assignmentType, row.sourceName, row.viaPermissionSetName),
106
+ ];
107
+ }));
108
+ //# sourceMappingURL=output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/access/output.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { AccessTargetResolver } from '../types.js';
2
+ export declare const fieldResolver: AccessTargetResolver;
@@ -0,0 +1,93 @@
1
+ import { resolveAssignees, resultFor } from '../assignees.js';
2
+ import { queryAll, queryAllInChunks } from '../soql.js';
3
+ import { combinePsgMuting, loadPsgMuting } from '../muting.js';
4
+ import { validateFieldTarget } from '../targetValidation.js';
5
+ import { fieldCsvColumns } from '../output.js';
6
+ import { UserAccessError } from '../types.js';
7
+ const truthy = (value) => value === true;
8
+ const anyAccess = (access) => access.read || access.edit;
9
+ export const fieldResolver = {
10
+ type: 'field',
11
+ validateTarget: validateFieldTarget,
12
+ async resolve(conn, target) {
13
+ if (!target.sobjectType || !target.fieldApiName)
14
+ throw new UserAccessError('errorInvalidTarget', [target.targetName]);
15
+ const qualifiedField = `${target.sobjectType}.${target.fieldApiName}`;
16
+ const warnings = [];
17
+ try {
18
+ const entitlementRows = await queryAll(conn, [
19
+ 'SELECT ParentId, Parent.Id, Parent.Name, Parent.IsOwnedByProfile, Parent.ProfileId, Parent.Profile.Name, Parent.Type, PermissionsRead, PermissionsEdit',
20
+ 'FROM FieldPermissions',
21
+ `WHERE SobjectType = '${target.sobjectType}'`,
22
+ `AND Field = '${qualifiedField}'`,
23
+ "AND Parent.Type != 'Muting'",
24
+ ].join(' '));
25
+ const grantByPermissionSetId = new Map();
26
+ const permissionSetById = new Map();
27
+ for (const row of entitlementRows) {
28
+ const access = {
29
+ kind: 'field',
30
+ read: truthy(row.PermissionsRead),
31
+ edit: truthy(row.PermissionsEdit),
32
+ };
33
+ if (!anyAccess(access))
34
+ continue;
35
+ grantByPermissionSetId.set(row.ParentId, access);
36
+ if (row.Parent)
37
+ permissionSetById.set(row.ParentId, { ...row.Parent, Id: row.ParentId });
38
+ }
39
+ if (grantByPermissionSetId.size === 0) {
40
+ warnings.push(`No explicit FieldPermissions records were found for ${qualifiedField}. Standard fields may still be visible through base object/profile behavior. This command reports explicit field-level security grants only.`);
41
+ return resultFor('field', qualifiedField, [], warnings, {
42
+ sobjectType: target.sobjectType,
43
+ fieldApiName: target.fieldApiName,
44
+ });
45
+ }
46
+ let muting = {
47
+ permissionSetIdsByGroup: new Map(),
48
+ masksByPermissionSetId: new Map(),
49
+ };
50
+ const preparePsg = async (psgIds) => {
51
+ muting = await loadPsgMuting(conn, psgIds, async (mutingSetIds) => {
52
+ const mutingRows = await queryAllInChunks(conn, mutingSetIds, (chunk) => [
53
+ 'SELECT ParentId, PermissionsRead, PermissionsEdit',
54
+ 'FROM FieldPermissions',
55
+ 'WHERE Parent.IsOwnedByProfile = false',
56
+ `AND ParentId IN (${chunk.map((id) => `'${id}'`).join(',')})`,
57
+ `AND SobjectType = '${target.sobjectType ?? ''}'`,
58
+ `AND Field = '${qualifiedField}'`,
59
+ ].join(' '));
60
+ return new Map(mutingRows.map((row) => [
61
+ row.ParentId,
62
+ { read: truthy(row.PermissionsRead), edit: truthy(row.PermissionsEdit) },
63
+ ]));
64
+ });
65
+ };
66
+ const rows = await resolveAssignees(conn, 'field', qualifiedField, grantByPermissionSetId, permissionSetById, (grant, context) => {
67
+ if (context.assignmentType === 'PermissionSet')
68
+ return grant;
69
+ const muted = combinePsgMuting(context.psgId, muting, { read: false, edit: false }, (left, right) => ({
70
+ read: left.read || right.read,
71
+ edit: left.edit || right.edit,
72
+ }));
73
+ const effective = {
74
+ kind: 'field',
75
+ read: grant.read && !muted.read,
76
+ edit: grant.edit && !muted.edit,
77
+ };
78
+ return anyAccess(effective) ? effective : undefined;
79
+ }, { preparePsg });
80
+ return resultFor('field', qualifiedField, rows, warnings, {
81
+ sobjectType: target.sobjectType,
82
+ fieldApiName: target.fieldApiName,
83
+ });
84
+ }
85
+ catch (error) {
86
+ if (error instanceof UserAccessError)
87
+ throw error;
88
+ throw new UserAccessError('errorAccessQueryFailed', [target.type, target.targetName], error);
89
+ }
90
+ },
91
+ csvColumns: fieldCsvColumns,
92
+ };
93
+ //# sourceMappingURL=field.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field.js","sourceRoot":"","sources":["../../../src/access/resolvers/field.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { AccessTargetResolver } from '../types.js';
2
+ export declare const getResolver: (type: string) => AccessTargetResolver;
@@ -0,0 +1,22 @@
1
+ import { UserAccessError } from '../types.js';
2
+ import { fieldResolver } from './field.js';
3
+ import { objectResolver } from './object.js';
4
+ import { apexClassResolver, customPermissionResolver, vfPageResolver } from './setupEntity.js';
5
+ import { tabResolver } from './tab.js';
6
+ import { recordTypeResolver } from './recordType.js';
7
+ const resolvers = {
8
+ field: fieldResolver,
9
+ object: objectResolver,
10
+ 'apex-class': apexClassResolver,
11
+ 'vf-page': vfPageResolver,
12
+ 'custom-permission': customPermissionResolver,
13
+ tab: tabResolver,
14
+ 'record-type': recordTypeResolver,
15
+ };
16
+ export const getResolver = (type) => {
17
+ const resolver = resolvers[type];
18
+ if (!resolver)
19
+ throw new UserAccessError('errorUnsupportedAccessType', [type]);
20
+ return resolver;
21
+ };
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/access/resolvers/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC/F,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,MAAM,SAAS,GAAmD;IAChE,KAAK,EAAE,aAAa;IACpB,MAAM,EAAE,cAAc;IACtB,YAAY,EAAE,iBAAiB;IAC/B,SAAS,EAAE,cAAc;IACzB,mBAAmB,EAAE,wBAAwB;IAC7C,GAAG,EAAE,WAAW;IAChB,aAAa,EAAE,kBAAkB;CAClC,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,IAAY,EAAwB,EAAE;IAChE,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAwB,CAAC,CAAC;IACrD,IAAI,CAAC,QAAQ;QAAE,MAAM,IAAI,eAAe,CAAC,4BAA4B,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/E,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { AccessTargetResolver } from '../types.js';
2
+ export declare const objectResolver: AccessTargetResolver;
@@ -0,0 +1,101 @@
1
+ import { resolveAssignees, resultFor } from '../assignees.js';
2
+ import { queryAll, queryAllInChunks } from '../soql.js';
3
+ import { combinePsgMuting, loadPsgMuting } from '../muting.js';
4
+ import { objectCsvColumns } from '../output.js';
5
+ import { validateObjectTarget } from '../targetValidation.js';
6
+ import { UserAccessError } from '../types.js';
7
+ const truthy = (value) => value === true;
8
+ const toObjectAccess = (row) => ({
9
+ kind: 'object',
10
+ read: truthy(row.PermissionsRead),
11
+ create: truthy(row.PermissionsCreate),
12
+ edit: truthy(row.PermissionsEdit),
13
+ delete: truthy(row.PermissionsDelete),
14
+ viewAll: truthy(row.PermissionsViewAllRecords),
15
+ modifyAll: truthy(row.PermissionsModifyAllRecords),
16
+ });
17
+ const anyAccess = (access) => access.read || access.create || access.edit || access.delete || access.viewAll || access.modifyAll;
18
+ export const objectResolver = {
19
+ type: 'object',
20
+ validateTarget: validateObjectTarget,
21
+ async resolve(conn, target) {
22
+ if (!target.sobjectType)
23
+ throw new UserAccessError('errorInvalidTarget', [target.targetName]);
24
+ const warnings = [];
25
+ try {
26
+ const entitlementRows = await queryAll(conn, [
27
+ 'SELECT ParentId, Parent.Id, Parent.Name, Parent.IsOwnedByProfile, Parent.ProfileId, Parent.Profile.Name, Parent.Type, PermissionsRead, PermissionsCreate, PermissionsEdit, PermissionsDelete, PermissionsViewAllRecords, PermissionsModifyAllRecords',
28
+ 'FROM ObjectPermissions',
29
+ `WHERE SobjectType = '${target.sobjectType}'`,
30
+ "AND Parent.Type != 'Muting'",
31
+ ].join(' '));
32
+ const grantByPermissionSetId = new Map();
33
+ const permissionSetById = new Map();
34
+ for (const row of entitlementRows) {
35
+ const access = toObjectAccess(row);
36
+ if (!anyAccess(access))
37
+ continue;
38
+ grantByPermissionSetId.set(row.ParentId, access);
39
+ if (row.Parent)
40
+ permissionSetById.set(row.ParentId, { ...row.Parent, Id: row.ParentId });
41
+ }
42
+ if (grantByPermissionSetId.size === 0)
43
+ return resultFor('object', target.sobjectType, [], warnings, { sobjectType: target.sobjectType });
44
+ let muting = {
45
+ permissionSetIdsByGroup: new Map(),
46
+ masksByPermissionSetId: new Map(),
47
+ };
48
+ const preparePsg = async (psgIds) => {
49
+ muting = await loadPsgMuting(conn, psgIds, async (mutingSetIds) => {
50
+ const mutingRows = await queryAllInChunks(conn, mutingSetIds, (chunk) => [
51
+ 'SELECT ParentId, PermissionsRead, PermissionsCreate, PermissionsEdit, PermissionsDelete, PermissionsViewAllRecords, PermissionsModifyAllRecords',
52
+ 'FROM ObjectPermissions',
53
+ 'WHERE Parent.IsOwnedByProfile = false',
54
+ `AND ParentId IN (${chunk.map((id) => `'${id}'`).join(',')})`,
55
+ `AND SobjectType = '${target.sobjectType ?? ''}'`,
56
+ ].join(' '));
57
+ return new Map(mutingRows.map((row) => [row.ParentId, toObjectAccess(row)]));
58
+ });
59
+ };
60
+ const rows = await resolveAssignees(conn, 'object', target.sobjectType, grantByPermissionSetId, permissionSetById, (grant, context) => {
61
+ if (context.assignmentType === 'PermissionSet')
62
+ return grant;
63
+ const muted = combinePsgMuting(context.psgId, muting, {
64
+ kind: 'object',
65
+ read: false,
66
+ create: false,
67
+ edit: false,
68
+ delete: false,
69
+ viewAll: false,
70
+ modifyAll: false,
71
+ }, (left, right) => ({
72
+ kind: 'object',
73
+ read: left.read || right.read,
74
+ create: left.create || right.create,
75
+ edit: left.edit || right.edit,
76
+ delete: left.delete || right.delete,
77
+ viewAll: left.viewAll || right.viewAll,
78
+ modifyAll: left.modifyAll || right.modifyAll,
79
+ }));
80
+ const effective = {
81
+ kind: 'object',
82
+ read: grant.read && !muted.read,
83
+ create: grant.create && !muted.create,
84
+ edit: grant.edit && !muted.edit,
85
+ delete: grant.delete && !muted.delete,
86
+ viewAll: grant.viewAll && !muted.viewAll,
87
+ modifyAll: grant.modifyAll && !muted.modifyAll,
88
+ };
89
+ return anyAccess(effective) ? effective : undefined;
90
+ }, { preparePsg });
91
+ return resultFor('object', target.sobjectType, rows, warnings, { sobjectType: target.sobjectType });
92
+ }
93
+ catch (error) {
94
+ if (error instanceof UserAccessError)
95
+ throw error;
96
+ throw new UserAccessError('errorAccessQueryFailed', [target.type, target.targetName], error);
97
+ }
98
+ },
99
+ csvColumns: objectCsvColumns,
100
+ };
101
+ //# sourceMappingURL=object.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"object.js","sourceRoot":"","sources":["../../../src/access/resolvers/object.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { AccessTargetResolver } from '../types.js';
2
+ export declare const recordTypeResolver: AccessTargetResolver;
@@ -0,0 +1,181 @@
1
+ import { resolveAssignees, resultFor } from '../assignees.js';
2
+ import { mutingPermissionSetMetadataNamesById, partialMetadataWarning, profileMetadataNamesById, readMetadataInBatches, recordTypeVisibilities, } from '../metadata.js';
3
+ import { queryAll, queryAllInChunks, soqlIn } from '../soql.js';
4
+ import { recordTypeCsvColumns } from '../output.js';
5
+ import { validateRecordTypeTarget } from '../targetValidation.js';
6
+ import { UserAccessError } from '../types.js';
7
+ const metadataFailure = (type, name, cause) => new UserAccessError('errorRecordTypeMetadataReadFailed', [type, name], cause);
8
+ const findVisibility = (metadata, type, targetName) => {
9
+ const matches = recordTypeVisibilities(metadata, type).filter((entry) => entry.recordType === targetName);
10
+ if (matches.length > 1) {
11
+ throw metadataFailure(type, metadata.fullName, new Error(`Duplicate visibility for ${targetName}.`));
12
+ }
13
+ return matches[0];
14
+ };
15
+ // eslint-disable-next-line complexity
16
+ const discoverCandidateSources = async (conn) => {
17
+ const activeUsers = await queryAll(conn, 'SELECT ProfileId FROM User WHERE IsActive = true');
18
+ const profileIds = [...new Set(activeUsers.map((user) => user.ProfileId).filter((id) => Boolean(id)))];
19
+ const profileMetadataNames = await profileMetadataNamesById(conn);
20
+ const mutingMetadataNames = await mutingPermissionSetMetadataNamesById(conn);
21
+ const profiles = await queryAllInChunks(conn, profileIds, (chunk) => `SELECT Id, Name FROM Profile WHERE Id IN (${soqlIn(chunk)})`);
22
+ const profilesById = new Map(profiles.map((profile) => [profile.Id, profile]));
23
+ const profilePermissionSets = await queryAllInChunks(conn, profileIds, (chunk) => [
24
+ 'SELECT Id, Name, Label, Type, IsOwnedByProfile, ProfileId, Profile.Name',
25
+ 'FROM PermissionSet',
26
+ 'WHERE IsOwnedByProfile = true',
27
+ `AND ProfileId IN (${soqlIn(chunk)})`,
28
+ ].join(' '));
29
+ const assignments = await queryAll(conn, [
30
+ 'SELECT PermissionSetId, PermissionSet.Type, PermissionSet.IsOwnedByProfile, PermissionSetGroupId',
31
+ 'FROM PermissionSetAssignment',
32
+ 'WHERE Assignee.IsActive = true',
33
+ ].join(' '));
34
+ const permissionSetIds = new Set();
35
+ const mutingMetadataNameByPsgId = new Map();
36
+ const psgIds = [
37
+ ...new Set(assignments.flatMap((assignment) => (assignment.PermissionSetGroupId ? [assignment.PermissionSetGroupId] : []))),
38
+ ];
39
+ for (const assignment of assignments) {
40
+ if (assignment.PermissionSetId &&
41
+ assignment.PermissionSet?.Type === 'Regular' &&
42
+ assignment.PermissionSet?.IsOwnedByProfile !== true) {
43
+ permissionSetIds.add(assignment.PermissionSetId);
44
+ }
45
+ }
46
+ const components = await queryAllInChunks(conn, psgIds, (chunk) => [
47
+ 'SELECT PermissionSetGroupId, PermissionSetId, PermissionSet.Name, PermissionSet.Type',
48
+ 'FROM PermissionSetGroupComponent',
49
+ `WHERE PermissionSetGroupId IN (${soqlIn(chunk)})`,
50
+ ].join(' '));
51
+ for (const component of components) {
52
+ // Muting permission sets are a separate object: their component rows carry a
53
+ // null PermissionSet relationship and their Ids are not returned by a
54
+ // PermissionSet SOQL query, so resolve them through the metadata listing and
55
+ // never treat them as regular permission sets.
56
+ const mutingName = mutingMetadataNames.get(component.PermissionSetId.substring(0, 15)) ??
57
+ (component.PermissionSet?.Type === 'Muting' ? component.PermissionSet?.Name ?? undefined : undefined);
58
+ if (mutingName) {
59
+ mutingMetadataNameByPsgId.set(component.PermissionSetGroupId, mutingName);
60
+ continue;
61
+ }
62
+ if (component.PermissionSet?.Type !== 'Group')
63
+ permissionSetIds.add(component.PermissionSetId);
64
+ }
65
+ const permissionSetById = new Map();
66
+ const metadataNameByPermissionSetId = new Map();
67
+ const profilePermissionSetByProfileId = new Map();
68
+ for (const permissionSet of profilePermissionSets) {
69
+ if (permissionSet.ProfileId)
70
+ profilePermissionSetByProfileId.set(permissionSet.ProfileId, permissionSet);
71
+ }
72
+ for (const profileId of profileIds) {
73
+ const profile = profilesById.get(profileId);
74
+ const profilePermissionSet = profilePermissionSetByProfileId.get(profileId);
75
+ const metadataName = profileMetadataNames.get(profileId.substring(0, 15));
76
+ // Profiles the Metadata API does not expose (Automated Process and other
77
+ // system profiles) are not auditable for record-type visibility. Their
78
+ // record Ids are absent from the metadata listing and from the SOQL Profile
79
+ // query, so skip them rather than failing the whole audit.
80
+ if (!profile || !profilePermissionSet || !metadataName)
81
+ continue;
82
+ permissionSetById.set(profilePermissionSet.Id, {
83
+ ...profilePermissionSet,
84
+ Id: profilePermissionSet.Id,
85
+ IsOwnedByProfile: true,
86
+ ProfileId: profileId,
87
+ Profile: { Name: profile.Name },
88
+ });
89
+ metadataNameByPermissionSetId.set(profilePermissionSet.Id, { type: 'Profile', fullName: metadataName });
90
+ }
91
+ if (permissionSetIds.size > 0) {
92
+ const regularPermissionSets = await queryAllInChunks(conn, [...permissionSetIds], (chunk) => [
93
+ 'SELECT Id, Name, Label, Type, IsOwnedByProfile, ProfileId, Profile.Name',
94
+ 'FROM PermissionSet',
95
+ `WHERE Id IN (${soqlIn(chunk)})`,
96
+ ].join(' '));
97
+ const regularById = new Map(regularPermissionSets.map((permissionSet) => [permissionSet.Id, permissionSet]));
98
+ const missingIds = [...permissionSetIds].filter((id) => !regularById.has(id));
99
+ if (missingIds.length > 0) {
100
+ throw metadataFailure('PermissionSet', missingIds.join(', '), new Error('Permission Set source discovery was incomplete.'));
101
+ }
102
+ for (const permissionSet of regularPermissionSets) {
103
+ if (permissionSet.Type === 'Group' || permissionSet.IsOwnedByProfile === true)
104
+ continue;
105
+ const fullName = permissionSet.Name ?? permissionSet.DeveloperName;
106
+ if (!fullName)
107
+ throw metadataFailure('PermissionSet', permissionSet.Id, new Error('Permission Set has no metadata name.'));
108
+ permissionSetById.set(permissionSet.Id, permissionSet);
109
+ metadataNameByPermissionSetId.set(permissionSet.Id, { type: 'PermissionSet', fullName });
110
+ }
111
+ }
112
+ return { permissionSetById, metadataNameByPermissionSetId, mutingMetadataNameByPsgId };
113
+ };
114
+ const grantFor = (entry, type) => {
115
+ if (type === 'Profile' && typeof entry.default !== 'boolean') {
116
+ throw metadataFailure(type, entry.recordType, new Error('Profile record type visibility has no default value.'));
117
+ }
118
+ return {
119
+ kind: 'record-type',
120
+ visible: true,
121
+ default: type === 'Profile' ? entry.default === true : null,
122
+ };
123
+ };
124
+ export const recordTypeResolver = {
125
+ type: 'record-type',
126
+ validateTarget: validateRecordTypeTarget,
127
+ async resolve(conn, target) {
128
+ if (!target.sobjectType) {
129
+ throw new UserAccessError('errorInvalidTarget', [target.targetName]);
130
+ }
131
+ try {
132
+ const sources = await discoverCandidateSources(conn);
133
+ const metadataNamesByType = new Map();
134
+ for (const source of sources.metadataNameByPermissionSetId.values()) {
135
+ const names = metadataNamesByType.get(source.type) ?? [];
136
+ names.push(source.fullName);
137
+ metadataNamesByType.set(source.type, names);
138
+ }
139
+ const { metadata: profileMetadata, missing: missingProfileNames } = await readMetadataInBatches(conn, 'Profile', [...new Set(metadataNamesByType.get('Profile') ?? [])]);
140
+ const { metadata: permissionSetMetadata, missing: missingPermissionSetNames } = await readMetadataInBatches(conn, 'PermissionSet', [...new Set(metadataNamesByType.get('PermissionSet') ?? [])]);
141
+ const mutingNames = [...new Set(sources.mutingMetadataNameByPsgId.values())];
142
+ const { metadata: mutingMetadata, missing: missingMutingNames } = await readMetadataInBatches(conn, 'MutingPermissionSet', mutingNames);
143
+ const mutedPsgIds = new Set();
144
+ for (const [psgId, fullName] of sources.mutingMetadataNameByPsgId) {
145
+ const metadata = mutingMetadata.get(fullName);
146
+ // Muting metadata the running user cannot read is reported as a partial
147
+ // result below rather than aborting; leaving the PSG unmuted may
148
+ // over-report access, which the warning calls out.
149
+ if (!metadata)
150
+ continue;
151
+ const entry = findVisibility(metadata, 'MutingPermissionSet', target.targetName);
152
+ if (entry?.visible === true)
153
+ mutedPsgIds.add(psgId);
154
+ }
155
+ const grantByPermissionSetId = new Map();
156
+ for (const [permissionSetId, source] of sources.metadataNameByPermissionSetId) {
157
+ const metadata = (source.type === 'Profile' ? profileMetadata : permissionSetMetadata).get(source.fullName);
158
+ // Sources the running user cannot read are omitted from the audit and
159
+ // reported as a partial result below rather than aborting.
160
+ if (!metadata)
161
+ continue;
162
+ const entry = findVisibility(metadata, source.type, target.targetName);
163
+ if (entry?.visible === true)
164
+ grantByPermissionSetId.set(permissionSetId, grantFor(entry, source.type));
165
+ }
166
+ const rows = await resolveAssignees(conn, 'record-type', target.targetName, grantByPermissionSetId, sources.permissionSetById, (grant, context) => (context.psgId && mutedPsgIds.has(context.psgId) ? undefined : grant));
167
+ const warnings = [];
168
+ const missingNames = [...missingProfileNames, ...missingPermissionSetNames, ...missingMutingNames];
169
+ if (missingNames.length > 0)
170
+ warnings.push(partialMetadataWarning(missingNames));
171
+ return resultFor('record-type', target.targetName, rows, warnings, { sobjectType: target.sobjectType });
172
+ }
173
+ catch (error) {
174
+ if (error instanceof UserAccessError)
175
+ throw error;
176
+ throw new UserAccessError('errorAccessQueryFailed', [target.type, target.targetName], error);
177
+ }
178
+ },
179
+ csvColumns: recordTypeCsvColumns,
180
+ };
181
+ //# sourceMappingURL=recordType.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recordType.js","sourceRoot":"","sources":["../../../src/access/resolvers/recordType.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { AccessTargetResolver } from '../types.js';
2
+ export declare const apexClassResolver: AccessTargetResolver;
3
+ export declare const vfPageResolver: AccessTargetResolver;
4
+ export declare const customPermissionResolver: AccessTargetResolver;