@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,353 @@
1
+ import { mkdir, readFile, writeFile } from 'node:fs/promises';
2
+ import { dirname } from 'node:path';
3
+ import { detectInputFormat, readCsvRows, restoreCsvFormula, serializeCsv } from '../shared/csv.js';
4
+ import { soqlIn } from '../shared/sfUtils.js';
5
+ import { parseSnapshot } from '../spec/parse.js';
6
+ import { LifecycleError } from './errors.js';
7
+ const unique = (values) => [...new Set(values.filter((value) => Boolean(value)))].sort();
8
+ const resolveMissingNames = async (conn, table, references, nameField) => {
9
+ const names = new Map();
10
+ for (const reference of references) {
11
+ if (reference.id && reference.name)
12
+ names.set(reference.id, reference.name);
13
+ }
14
+ const missingIds = unique(references.filter((reference) => reference.id && !reference.name).map((reference) => reference.id));
15
+ if (missingIds.length === 0)
16
+ return names;
17
+ const rows = (await conn.query(`SELECT Id, ${nameField} FROM ${table} WHERE Id IN (${soqlIn(missingIds)})`)).records;
18
+ for (const row of rows) {
19
+ const name = row[nameField];
20
+ if (name)
21
+ names.set(row.Id, name);
22
+ }
23
+ return names;
24
+ };
25
+ const mapPsaNames = (rows, idToName, getId) => unique(rows.map((row) => idToName.get(String(getId(row) ?? ''))));
26
+ const mapGroupNames = (rows, idToName) => unique(rows.map((row) => idToName.get(row.GroupId)));
27
+ export const buildSnapshotFile = async (conn, targets, state, org) => {
28
+ const psaRows = [...state.psaByUserId.values()].flat();
29
+ const groupRows = [...state.groupByUserId.values()].flat();
30
+ const pslRows = [...state.pslByUserId.values()].flat();
31
+ const permissionSetNames = await resolveMissingNames(conn, 'PermissionSet', psaRows
32
+ .filter((row) => row.PermissionSetGroupId == null && row.PermissionSet?.IsOwnedByProfile !== true)
33
+ .map((row) => ({ id: row.PermissionSetId, name: row.PermissionSet?.Name })), 'Name');
34
+ const permissionSetGroupNames = await resolveMissingNames(conn, 'PermissionSetGroup', psaRows
35
+ .filter((row) => row.PermissionSetGroupId != null)
36
+ .map((row) => ({ id: row.PermissionSetGroupId, name: row.PermissionSetGroup?.DeveloperName })), 'DeveloperName');
37
+ const groupNames = await resolveMissingNames(conn, 'Group', groupRows.map((row) => ({ id: row.GroupId, name: row.Group?.DeveloperName })), 'DeveloperName');
38
+ const permissionSetLicenseNames = await resolveMissingNames(conn, 'PermissionSetLicense', pslRows.map((row) => ({ id: row.PermissionSetLicenseId, name: row.PermissionSetLicense?.DeveloperName })), 'DeveloperName');
39
+ return {
40
+ snapshotVersion: 1,
41
+ capturedAt: new Date().toISOString(),
42
+ org,
43
+ users: targets.map((target) => {
44
+ const targetPsaRows = state.psaByUserId.get(target.Id) ?? [];
45
+ const targetGroupRows = state.groupByUserId.get(target.Id) ?? [];
46
+ const targetPslRows = state.pslByUserId.get(target.Id) ?? [];
47
+ return {
48
+ match: target.field,
49
+ matchValue: target.value,
50
+ userId: target.Id,
51
+ name: target.name,
52
+ username: target.username,
53
+ email: target.email,
54
+ profile: target.profile,
55
+ role: target.role,
56
+ IsActive: target.IsActive,
57
+ IsFrozen: state.userLoginByUserId.get(target.Id)?.[0]?.IsFrozen ?? false,
58
+ permissionSets: mapPsaNames(targetPsaRows.filter((row) => row.PermissionSetGroupId == null && row.PermissionSet?.IsOwnedByProfile !== true), permissionSetNames, (row) => row.PermissionSetId),
59
+ permissionSetGroups: mapPsaNames(targetPsaRows.filter((row) => row.PermissionSetGroupId != null), permissionSetGroupNames, (row) => row.PermissionSetGroupId),
60
+ publicGroups: mapGroupNames(targetGroupRows.filter((row) => row.Group?.Type === 'Regular'), groupNames),
61
+ queues: mapGroupNames(targetGroupRows.filter((row) => row.Group?.Type === 'Queue'), groupNames),
62
+ permissionSetLicenses: unique(targetPslRows.map((row) => permissionSetLicenseNames.get(row.PermissionSetLicenseId))),
63
+ };
64
+ }),
65
+ };
66
+ };
67
+ export const snapshotCsvColumns = [
68
+ 'snapshotVersion',
69
+ 'capturedAt',
70
+ 'org',
71
+ 'match',
72
+ 'matchValue',
73
+ 'userId',
74
+ 'userName',
75
+ 'username',
76
+ 'email',
77
+ 'profile',
78
+ 'role',
79
+ 'isActive',
80
+ 'isFrozen',
81
+ 'category',
82
+ 'name',
83
+ ];
84
+ const snapshotAssignmentCategories = [
85
+ ['permissionSets', 'permissionSet'],
86
+ ['permissionSetGroups', 'permissionSetGroup'],
87
+ ['publicGroups', 'publicGroup'],
88
+ ['queues', 'queue'],
89
+ ['permissionSetLicenses', 'permissionSetLicense'],
90
+ ];
91
+ const emptySnapshotCategory = 'emptySnapshot';
92
+ export const serializeSnapshotCsv = (snapshot) => {
93
+ if (snapshot.users.length === 0) {
94
+ return serializeCsv([
95
+ {
96
+ snapshotVersion: snapshot.snapshotVersion,
97
+ capturedAt: encodeSnapshotCsvValue(snapshot.capturedAt ?? ''),
98
+ org: encodeSnapshotCsvValue(snapshot.org ?? ''),
99
+ match: '',
100
+ matchValue: '',
101
+ userId: '',
102
+ userName: '',
103
+ username: '',
104
+ email: '',
105
+ profile: '',
106
+ role: '',
107
+ isActive: '',
108
+ isFrozen: '',
109
+ category: emptySnapshotCategory,
110
+ name: '',
111
+ },
112
+ ], [...snapshotCsvColumns]);
113
+ }
114
+ const rows = snapshot.users.flatMap((user) => {
115
+ const assignments = snapshotAssignmentCategories.flatMap(([field, category]) => unique(user[field]).map((name) => ({ category, name })));
116
+ const categories = assignments.length > 0 ? assignments : [{ category: 'none', name: '' }];
117
+ return categories.map(({ category, name }) => ({
118
+ snapshotVersion: snapshot.snapshotVersion,
119
+ capturedAt: encodeSnapshotCsvValue(snapshot.capturedAt ?? ''),
120
+ org: encodeSnapshotCsvValue(snapshot.org ?? ''),
121
+ match: encodeSnapshotCsvValue(user.match),
122
+ matchValue: encodeSnapshotCsvValue(user.matchValue),
123
+ userId: encodeSnapshotCsvValue(user.userId),
124
+ userName: encodeSnapshotCsvValue(user.name ?? ''),
125
+ username: encodeSnapshotCsvValue(user.username ?? ''),
126
+ email: encodeSnapshotCsvValue(user.email ?? ''),
127
+ profile: encodeSnapshotCsvValue(user.profile ?? ''),
128
+ role: encodeSnapshotCsvValue(user.role ?? ''),
129
+ isActive: user.IsActive,
130
+ isFrozen: user.IsFrozen,
131
+ category: encodeSnapshotCsvValue(category),
132
+ name: encodeSnapshotCsvValue(name),
133
+ }));
134
+ });
135
+ return serializeCsv(rows, [...snapshotCsvColumns]);
136
+ };
137
+ // A doubled leading apostrophe marks a literal apostrophe; a single one remains
138
+ // the shared writer's formula-protection prefix.
139
+ const encodeSnapshotCsvValue = (value) => (value.startsWith("'") ? `'${value}` : value);
140
+ const snapshotCsvValue = (row, indexes, column) => {
141
+ const value = row[indexes.get(column) ?? -1] ?? '';
142
+ return value.startsWith("''") ? value.slice(1) : restoreCsvFormula(value);
143
+ };
144
+ const parseSnapshotBoolean = (value, rowLine, field) => {
145
+ if (value === 'true' || value === '1')
146
+ return true;
147
+ if (value === 'false' || value === '0')
148
+ return false;
149
+ throw new Error(`Snapshot CSV row ${rowLine} must contain ${field} as true or false.`);
150
+ };
151
+ const optionalSnapshotValue = (value) => (value.length > 0 ? value : undefined);
152
+ // CSV validation combines file metadata, user identity, lifecycle state, and assignment rows by design.
153
+ // eslint-disable-next-line complexity
154
+ const deserializeSnapshotCsvUnchecked = (source, path = '<snapshot>') => {
155
+ const rows = readCsvRows(source, path, ',');
156
+ if (rows.length === 0)
157
+ throw new Error(`Snapshot CSV ${path} must contain a header and at least one user row.`);
158
+ const header = rows[0];
159
+ if (header.cells.length !== snapshotCsvColumns.length) {
160
+ throw new Error(`Snapshot CSV ${path}:${header.line} must contain ${snapshotCsvColumns.length} columns in the snapshot format.`);
161
+ }
162
+ const indexes = new Map();
163
+ header.cells.forEach((cell, index) => {
164
+ const column = cell.trim();
165
+ if (!snapshotCsvColumns.includes(column)) {
166
+ throw new Error(`Snapshot CSV ${path}:${header.line} has unknown column "${cell}".`);
167
+ }
168
+ if (indexes.has(column))
169
+ throw new Error(`Snapshot CSV ${path}:${header.line} repeats column "${cell}".`);
170
+ indexes.set(column, index);
171
+ });
172
+ const missingColumns = snapshotCsvColumns.filter((column) => !indexes.has(column));
173
+ if (missingColumns.length > 0) {
174
+ throw new Error(`Snapshot CSV ${path}:${header.line} is missing column "${missingColumns[0]}".`);
175
+ }
176
+ if (rows.length === 1) {
177
+ throw new Error(`Snapshot CSV ${path} must contain an empty-snapshot row with metadata.`);
178
+ }
179
+ let metadata;
180
+ const users = new Map();
181
+ const metadataFields = ['snapshotVersion', 'capturedAt', 'org'];
182
+ const identityFields = ['userName', 'username', 'email', 'profile', 'role'];
183
+ for (const row of rows.slice(1)) {
184
+ if (row.cells.length !== snapshotCsvColumns.length) {
185
+ throw new Error(`Snapshot CSV ${path}:${row.line} must contain ${snapshotCsvColumns.length} cells but found ${row.cells.length}.`);
186
+ }
187
+ const version = snapshotCsvValue(row.cells, indexes, 'snapshotVersion');
188
+ const capturedAt = optionalSnapshotValue(snapshotCsvValue(row.cells, indexes, 'capturedAt'));
189
+ const org = optionalSnapshotValue(snapshotCsvValue(row.cells, indexes, 'org'));
190
+ const currentMetadata = { snapshotVersion: Number(version), capturedAt, org };
191
+ if (currentMetadata.snapshotVersion !== 1 || !Number.isInteger(currentMetadata.snapshotVersion)) {
192
+ throw new Error(`Snapshot CSV ${path}:${row.line} must contain snapshotVersion 1.`);
193
+ }
194
+ if (!metadata) {
195
+ metadata = { snapshotVersion: 1, capturedAt, org, rowLine: row.line };
196
+ }
197
+ else {
198
+ for (const field of metadataFields) {
199
+ if (metadata[field] !== currentMetadata[field]) {
200
+ throw new Error(`Snapshot CSV ${path}:${row.line} conflicts with metadata from row ${metadata.rowLine} for ${field}.`);
201
+ }
202
+ }
203
+ }
204
+ const category = snapshotCsvValue(row.cells, indexes, 'category');
205
+ const name = snapshotCsvValue(row.cells, indexes, 'name');
206
+ if (category === emptySnapshotCategory) {
207
+ if (rows.length !== 2) {
208
+ throw new Error(`Snapshot CSV ${path}:${row.line} empty-snapshot row must be the only data row.`);
209
+ }
210
+ const emptyColumns = [
211
+ 'match',
212
+ 'matchValue',
213
+ 'userId',
214
+ 'userName',
215
+ 'username',
216
+ 'email',
217
+ 'profile',
218
+ 'role',
219
+ 'isActive',
220
+ 'isFrozen',
221
+ 'name',
222
+ ];
223
+ for (const column of emptyColumns) {
224
+ if (snapshotCsvValue(row.cells, indexes, column).length > 0) {
225
+ throw new Error(`Snapshot CSV ${path}:${row.line} empty-snapshot row must leave ${column} empty.`);
226
+ }
227
+ }
228
+ continue;
229
+ }
230
+ const match = snapshotCsvValue(row.cells, indexes, 'match');
231
+ const matchValue = snapshotCsvValue(row.cells, indexes, 'matchValue');
232
+ const userId = snapshotCsvValue(row.cells, indexes, 'userId');
233
+ const isActive = parseSnapshotBoolean(snapshotCsvValue(row.cells, indexes, 'isActive'), row.line, 'isActive');
234
+ const isFrozen = parseSnapshotBoolean(snapshotCsvValue(row.cells, indexes, 'isFrozen'), row.line, 'isFrozen');
235
+ if (!match || !matchValue || !userId) {
236
+ throw new Error(`Snapshot CSV ${path}:${row.line} must include match, matchValue, and userId.`);
237
+ }
238
+ const assignmentField = snapshotAssignmentCategories.find(([, value]) => value === category)?.[0];
239
+ if (category !== 'none' && !assignmentField) {
240
+ throw new Error(`Snapshot CSV ${path}:${row.line} has unknown category "${category}".`);
241
+ }
242
+ if (category === 'none' && name.length > 0) {
243
+ throw new Error(`Snapshot CSV ${path}:${row.line} must leave name empty for category none.`);
244
+ }
245
+ if (assignmentField && name.length === 0) {
246
+ throw new Error(`Snapshot CSV ${path}:${row.line} must include name for category ${category}.`);
247
+ }
248
+ const key = JSON.stringify([match, matchValue, userId]);
249
+ let state = users.get(key);
250
+ if (!state) {
251
+ state = {
252
+ entry: {
253
+ match,
254
+ matchValue,
255
+ userId,
256
+ name: optionalSnapshotValue(snapshotCsvValue(row.cells, indexes, 'userName')),
257
+ username: optionalSnapshotValue(snapshotCsvValue(row.cells, indexes, 'username')),
258
+ email: optionalSnapshotValue(snapshotCsvValue(row.cells, indexes, 'email')),
259
+ profile: optionalSnapshotValue(snapshotCsvValue(row.cells, indexes, 'profile')),
260
+ role: optionalSnapshotValue(snapshotCsvValue(row.cells, indexes, 'role')),
261
+ IsActive: isActive,
262
+ IsFrozen: isFrozen,
263
+ permissionSets: [],
264
+ permissionSetGroups: [],
265
+ publicGroups: [],
266
+ queues: [],
267
+ permissionSetLicenses: [],
268
+ },
269
+ hasNone: false,
270
+ hasAssignment: false,
271
+ rowLine: row.line,
272
+ };
273
+ for (const field of ['name', 'username', 'email', 'profile', 'role']) {
274
+ if (state.entry[field] === undefined)
275
+ delete state.entry[field];
276
+ }
277
+ users.set(key, state);
278
+ }
279
+ if (state.entry.IsActive !== isActive || state.entry.IsFrozen !== isFrozen) {
280
+ throw new Error(`Snapshot CSV ${path}:${row.line} conflicts with lifecycle state from row ${state.rowLine}.`);
281
+ }
282
+ for (const field of identityFields) {
283
+ const value = optionalSnapshotValue(snapshotCsvValue(row.cells, indexes, field));
284
+ const entryField = field === 'userName' ? 'name' : field;
285
+ const existing = state.entry[entryField];
286
+ if (value && existing && value !== existing) {
287
+ throw new Error(`Snapshot CSV ${path}:${row.line} conflicts with ${field} from row ${state.rowLine}.`);
288
+ }
289
+ if (value && !existing)
290
+ state.entry[entryField] = value;
291
+ }
292
+ if (category === 'none') {
293
+ if (state.hasAssignment)
294
+ throw new Error(`Snapshot CSV ${path}:${row.line} mixes none with assignments.`);
295
+ state.hasNone = true;
296
+ }
297
+ else if (assignmentField) {
298
+ if (state.hasNone)
299
+ throw new Error(`Snapshot CSV ${path}:${row.line} mixes assignments with none.`);
300
+ state.hasAssignment = true;
301
+ state.entry[assignmentField] = unique([...state.entry[assignmentField], name]);
302
+ }
303
+ }
304
+ const snapshot = {
305
+ snapshotVersion: 1,
306
+ ...(metadata?.capturedAt !== undefined ? { capturedAt: metadata.capturedAt } : {}),
307
+ ...(metadata?.org ? { org: metadata.org } : {}),
308
+ users: [...users.values()].map(({ entry }) => entry),
309
+ };
310
+ return assertSnapshotFile(snapshot);
311
+ };
312
+ const snapshotValidationError = (error, path) => new LifecycleError('errorInvalidSnapshot', error instanceof Error ? error.message : String(error), path ? { path, cause: error } : { cause: error });
313
+ export const deserializeSnapshotCsv = (source, path = '<snapshot>') => {
314
+ try {
315
+ return deserializeSnapshotCsvUnchecked(source, path);
316
+ }
317
+ catch (error) {
318
+ if (error instanceof LifecycleError)
319
+ throw error;
320
+ throw snapshotValidationError(error, path);
321
+ }
322
+ };
323
+ export const writeSnapshotFile = async (path, snapshot) => {
324
+ await mkdir(dirname(path), { recursive: true });
325
+ const contents = detectInputFormat(path) === 'csv'
326
+ ? `${serializeSnapshotCsv(snapshot)}\n`
327
+ : `${JSON.stringify(snapshot, null, 2)}\n`;
328
+ await writeFile(path, contents, 'utf8');
329
+ };
330
+ export const readSnapshotFile = async (path) => {
331
+ const source = await readFile(path, 'utf8');
332
+ if (detectInputFormat(path) === 'csv')
333
+ return deserializeSnapshotCsv(source, path);
334
+ try {
335
+ return assertSnapshotFile(JSON.parse(source));
336
+ }
337
+ catch (error) {
338
+ if (error instanceof LifecycleError)
339
+ throw error;
340
+ throw snapshotValidationError(error, path);
341
+ }
342
+ };
343
+ export const assertSnapshotFile = (value) => {
344
+ try {
345
+ return parseSnapshot(value);
346
+ }
347
+ catch (error) {
348
+ if (error instanceof LifecycleError)
349
+ throw error;
350
+ throw snapshotValidationError(error);
351
+ }
352
+ };
353
+ //# sourceMappingURL=snapshotState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshotState.js","sourceRoot":"","sources":["../../src/lifecycle/snapshotState.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Connection } from '@salesforce/core';
2
+ import type { StripTargetState } from './stripPlan.js';
3
+ export declare const applyStripState: (conn: Connection, state: StripTargetState) => Promise<void>;
@@ -0,0 +1,17 @@
1
+ import { runAssignmentDeletes, runRecordUpdate } from './dmlRunner.js';
2
+ const runStripStep = async (conn, result, step) => {
3
+ if (step.kind === 'update') {
4
+ await runRecordUpdate({ conn, result, sobject: step.sobject, rows: [step.row], actionKey: step.actionKey });
5
+ return;
6
+ }
7
+ await runAssignmentDeletes({
8
+ conn,
9
+ result,
10
+ sobject: step.sobject,
11
+ ids: step.ids,
12
+ actionKey: step.actionKey,
13
+ items: step.items,
14
+ });
15
+ };
16
+ export const applyStripState = async (conn, state) => state.steps.reduce((chain, step) => chain.then(() => runStripStep(conn, state.result, step)), Promise.resolve());
17
+ //# sourceMappingURL=stripApply.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stripApply.js","sourceRoot":"","sources":["../../src/lifecycle/stripApply.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAIvE,MAAM,YAAY,GAAG,KAAK,EAAE,IAAgB,EAAE,MAA2B,EAAE,IAAe,EAAiB,EAAE;IAC3G,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC3B,MAAM,eAAe,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;QAC5G,OAAO;IACT,CAAC;IACD,MAAM,oBAAoB,CAAC;QACzB,IAAI;QACJ,MAAM;QACN,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,KAAK,EAAE,IAAI,CAAC,KAAK;KAClB,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,EAAE,IAAgB,EAAE,KAAuB,EAAiB,EAAE,CAChG,KAAK,CAAC,KAAK,CAAC,MAAM,CAChB,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,EACzE,OAAO,CAAC,OAAO,EAAE,CAClB,CAAC"}
@@ -0,0 +1,75 @@
1
+ import type { Connection } from '@salesforce/core';
2
+ import type { UserFieldMeta } from '../provisioning/planner.js';
3
+ import { type GroupMemberRow, type PermissionSetAssignmentRow, type PermissionSetLicenseAssignRow, type UserLoginRow } from './assignmentState.js';
4
+ import { type TargetSelectionFlags } from './targeting.js';
5
+ import type { LabelBundle, LifecycleResult, LifecycleUserResult, ResolvedTargetUser } from './types.js';
6
+ export type StripFlags = TargetSelectionFlags<string> & Record<string, unknown>;
7
+ export type StripStep = {
8
+ kind: 'update';
9
+ sobject: 'UserLogin';
10
+ row: {
11
+ Id: string;
12
+ IsFrozen: boolean;
13
+ };
14
+ actionKey: 'frozen';
15
+ } | {
16
+ kind: 'delete';
17
+ sobject: 'PermissionSetAssignment' | 'GroupMember' | 'PermissionSetLicenseAssign';
18
+ ids: string[];
19
+ actionKey: 'removedPermissionSet' | 'removedPermissionSetGroup' | 'removedPublicGroupMember' | 'removedQueueMember' | 'removedPermissionSetLicense';
20
+ items: LabelBundle[];
21
+ } | {
22
+ kind: 'update';
23
+ sobject: 'User';
24
+ row: {
25
+ Id: string;
26
+ IsActive: boolean;
27
+ };
28
+ actionKey: 'deactivated';
29
+ };
30
+ export type StripTargetState = {
31
+ target: ResolvedTargetUser;
32
+ result: LifecycleUserResult;
33
+ steps: StripStep[];
34
+ hasDml: boolean;
35
+ };
36
+ export type TargetAssignmentRows = {
37
+ psa: PermissionSetAssignmentRow[];
38
+ group: GroupMemberRow[];
39
+ psl: PermissionSetLicenseAssignRow[];
40
+ };
41
+ type StripCategoryRow = {
42
+ Id: string;
43
+ };
44
+ type DeleteStripStep = Extract<StripStep, {
45
+ kind: 'delete';
46
+ }>;
47
+ type StripCategory<Row extends StripCategoryRow> = {
48
+ select: (state: TargetAssignmentRows) => Row[];
49
+ sobject: DeleteStripStep['sobject'];
50
+ skipFlag: string;
51
+ skipKey: string;
52
+ dryRunKey: string;
53
+ actionKey: DeleteStripStep['actionKey'];
54
+ toItem: (row: Row) => LabelBundle | undefined;
55
+ rowId: (row: Row) => string;
56
+ };
57
+ type ErasedStripCategory = StripCategory<StripCategoryRow>;
58
+ export declare const STRIP_CATEGORIES: readonly [ErasedStripCategory, ErasedStripCategory, ErasedStripCategory, ErasedStripCategory, ErasedStripCategory];
59
+ export declare const buildTargetState: (options: {
60
+ target: ResolvedTargetUser;
61
+ loginRows: UserLoginRow[];
62
+ rows: TargetAssignmentRows;
63
+ flags: StripFlags;
64
+ message?: (key: string) => string;
65
+ }) => StripTargetState;
66
+ export declare const executeStrip: (options: {
67
+ conn: Connection;
68
+ fieldMap: Map<string, UserFieldMeta>;
69
+ flags: StripFlags;
70
+ interactive: boolean;
71
+ message?: (key: string, args?: string[]) => string;
72
+ confirm: (message: string) => Promise<boolean>;
73
+ warn: (message: string) => void;
74
+ }) => Promise<LifecycleResult>;
75
+ export {};