@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,407 @@
1
+ import { validateMatchField } from '../matching/index.js';
2
+ import { getCsvRowInfo } from '../shared/csv.js';
3
+ export const modeKeys = ['permissionSetMode', 'permissionSetGroupMode', 'publicGroupMode', 'queueMode'];
4
+ export const assignmentListKeys = ['permissionSets', 'permissionSetGroups', 'publicGroups', 'queues'];
5
+ const reservedUserKeys = new Set(['personas', 'match', 'profile', 'role', 'fuzzyusername', 'related']);
6
+ /**
7
+ * Lightweight shape check only.
8
+ * Callers should apply object-specific Id prefix filtering at use sites.
9
+ */
10
+ export const isSalesforceId = (value) => /^[a-zA-Z0-9]{3}[a-zA-Z0-9]{12}(?:[a-zA-Z0-9]{3})?$/.test(value);
11
+ export const normalizeMode = (value) => {
12
+ if (value === undefined)
13
+ return 'additive';
14
+ if (value === 'additive' || value === 'sync')
15
+ return value;
16
+ throw new Error(`Invalid assignment mode "${String(value)}". Expected additive or sync.`);
17
+ };
18
+ export const buildFieldMap = (fields) => {
19
+ const map = new Map();
20
+ for (const field of fields)
21
+ map.set(field.name.toLowerCase(), field);
22
+ return map;
23
+ };
24
+ export const canonicalizeFieldObject = (source, fieldMap, context) => {
25
+ if (!source)
26
+ return {};
27
+ const output = {};
28
+ for (const [rawKey, value] of Object.entries(source)) {
29
+ const meta = fieldMap.get(rawKey.toLowerCase());
30
+ if (!meta)
31
+ throw new Error(`${context}: unknown User field "${rawKey}".`);
32
+ output[meta.name] = value;
33
+ }
34
+ return output;
35
+ };
36
+ export const validateExternalIdField = (externalId, fieldMap) => validateMatchField(externalId, fieldMap);
37
+ export const validateExternalIdFieldForFlag = (externalId, fieldMap) => {
38
+ if (!externalId)
39
+ return undefined;
40
+ try {
41
+ return validateExternalIdField(externalId, fieldMap);
42
+ }
43
+ catch {
44
+ throw new Error(`Invalid --external-id field "${externalId}". Must be a filterable User field.`);
45
+ }
46
+ };
47
+ const buildValidationError = (code, messageArgs) => ({
48
+ code,
49
+ messageArgs,
50
+ });
51
+ const resolveUserMatchField = (rawMatch, merged, fieldMap) => {
52
+ if (rawMatch === undefined)
53
+ return { validationErrors: [] };
54
+ if (typeof rawMatch !== 'string') {
55
+ return {
56
+ validationErrors: [buildValidationError('errorInvalidUserMatchField', [String(rawMatch)])],
57
+ };
58
+ }
59
+ try {
60
+ const meta = validateExternalIdField(rawMatch, fieldMap);
61
+ const matchField = meta.name;
62
+ const matchValue = merged[matchField];
63
+ if (typeof matchValue !== 'string' || matchValue.length === 0) {
64
+ return {
65
+ matchField,
66
+ validationErrors: [buildValidationError('errorUserMatchFieldEmpty', [matchField])],
67
+ };
68
+ }
69
+ return { matchField, validationErrors: [] };
70
+ }
71
+ catch {
72
+ return {
73
+ validationErrors: [buildValidationError('errorInvalidUserMatchField', [rawMatch])],
74
+ };
75
+ }
76
+ };
77
+ export const mergeUserFields = (personaUserAttributes, userFields) => ({
78
+ ...personaUserAttributes,
79
+ ...userFields,
80
+ });
81
+ const unionArray = (arrays) => {
82
+ const seen = new Set();
83
+ const result = [];
84
+ for (const arr of arrays) {
85
+ for (const item of arr ?? []) {
86
+ if (!seen.has(item)) {
87
+ seen.add(item);
88
+ result.push(item);
89
+ }
90
+ }
91
+ }
92
+ return result;
93
+ };
94
+ // Extracted to keep mergePersonas under the eslint complexity ceiling (max 20).
95
+ const mergePersonaAttributes = (validDefs, userOverrideFields, fieldMap) => {
96
+ const attrMap = new Map();
97
+ const attrConflicts = new Set();
98
+ for (const def of validDefs) {
99
+ for (const [rawKey, value] of Object.entries(def.userAttributes ?? {})) {
100
+ const canonicalKey = fieldMap.get(rawKey.toLowerCase())?.name ?? rawKey;
101
+ if (attrMap.has(canonicalKey) && attrMap.get(canonicalKey) !== value) {
102
+ attrConflicts.add(canonicalKey);
103
+ }
104
+ else {
105
+ attrMap.set(canonicalKey, value);
106
+ }
107
+ }
108
+ }
109
+ const errors = [];
110
+ for (const conflictKey of attrConflicts) {
111
+ if (!(conflictKey in userOverrideFields)) {
112
+ errors.push(buildValidationError('errorPersonaConflictUserAttribute', [conflictKey]));
113
+ }
114
+ }
115
+ return { userAttributes: attrMap.size > 0 ? Object.fromEntries(attrMap) : undefined, errors };
116
+ };
117
+ export const mergePersonas = (names, personas, userOverrideFields, fieldMap, hasProfileOverride = false, hasRoleOverride = false) => {
118
+ const errors = [];
119
+ const validDefs = [];
120
+ for (const name of names) {
121
+ const def = personas[name];
122
+ if (!def) {
123
+ errors.push(buildValidationError('errorUnknownPersona', [name]));
124
+ }
125
+ else {
126
+ validDefs.push(def);
127
+ }
128
+ }
129
+ const effective = {};
130
+ // Union assignment lists
131
+ for (const listKey of assignmentListKeys) {
132
+ const unioned = unionArray(validDefs.map((d) => d[listKey]));
133
+ if (unioned.length > 0)
134
+ effective[listKey] = unioned;
135
+ }
136
+ // Singular: profile
137
+ const profiles = [...new Set(validDefs.map((d) => d.profile).filter((v) => Boolean(v)))];
138
+ if (profiles.length > 1 && !hasProfileOverride) {
139
+ errors.push(buildValidationError('errorPersonaConflictProfile', [profiles.join(', ')]));
140
+ }
141
+ else if (profiles.length === 1) {
142
+ effective.profile = profiles[0];
143
+ }
144
+ // Singular: role
145
+ const roles = [...new Set(validDefs.map((d) => d.role).filter((v) => Boolean(v)))];
146
+ if (roles.length > 1 && !hasRoleOverride) {
147
+ errors.push(buildValidationError('errorPersonaConflictRole', [roles.join(', ')]));
148
+ }
149
+ else if (roles.length === 1) {
150
+ effective.role = roles[0];
151
+ }
152
+ // Modes
153
+ for (const modeKey of modeKeys) {
154
+ const modes = [...new Set(validDefs.map((d) => d[modeKey]).filter((v) => v !== undefined))];
155
+ if (modes.length > 1) {
156
+ errors.push(buildValidationError('errorPersonaConflictMode', [modeKey]));
157
+ }
158
+ else if (modes.length === 1) {
159
+ effective[modeKey] = modes[0];
160
+ }
161
+ }
162
+ const { userAttributes, errors: attrErrors } = mergePersonaAttributes(validDefs, userOverrideFields, fieldMap);
163
+ errors.push(...attrErrors);
164
+ if (userAttributes)
165
+ effective.userAttributes = userAttributes;
166
+ return { effective, errors };
167
+ };
168
+ const sanitizeAliasPart = (s) => (typeof s === 'string' ? s : '').replace(/[^a-z0-9]/gi, '');
169
+ export const buildDefaultAlias = (firstName, lastName) => {
170
+ const first = sanitizeAliasPart(firstName);
171
+ const last = sanitizeAliasPart(lastName);
172
+ if (!first && !last)
173
+ return undefined;
174
+ const firstDeficit = Math.max(0, 3 - first.length);
175
+ const lastDeficit = Math.max(0, 3 - last.length);
176
+ const firstPart = first.slice(0, 3 + lastDeficit);
177
+ const lastPart = last.slice(0, 3 + firstDeficit);
178
+ const alias = (firstPart + lastPart).toLowerCase().slice(0, 8);
179
+ return alias || undefined;
180
+ };
181
+ export const buildDefaultUsername = (email, myDomain) => typeof email === 'string' && email.length > 0 ? `${email}.${myDomain}` : undefined;
182
+ export const deriveMyDomain = (instanceUrl) => {
183
+ try {
184
+ const host = new URL(instanceUrl).hostname;
185
+ const firstLabel = host.split('.')[0];
186
+ return firstLabel || undefined;
187
+ }
188
+ catch {
189
+ return undefined;
190
+ }
191
+ };
192
+ const resolveInputKey = (fields, fallback) => (typeof fields.FederationIdentifier === 'string' && fields.FederationIdentifier) ||
193
+ (typeof fields.Username === 'string' && fields.Username) ||
194
+ (typeof fields.Email === 'string' && fields.Email) ||
195
+ fallback;
196
+ export const findFirstUserWithPersonas = (rawUsers) => {
197
+ if (!Array.isArray(rawUsers))
198
+ return undefined;
199
+ const identityFields = ['FederationIdentifier', 'Username', 'Email'];
200
+ for (const [index, rawUser] of rawUsers.entries()) {
201
+ if (!rawUser || typeof rawUser !== 'object')
202
+ continue;
203
+ const input = rawUser;
204
+ const personasKey = Object.keys(input).find((key) => key.toLowerCase() === 'personas');
205
+ if (!personasKey)
206
+ continue;
207
+ for (const identityField of identityFields) {
208
+ const fieldKey = Object.keys(input).find((key) => key.toLowerCase() === identityField.toLowerCase());
209
+ const value = fieldKey ? input[fieldKey] : undefined;
210
+ if (typeof value === 'string' && value.length > 0)
211
+ return value;
212
+ }
213
+ return String(index + 1);
214
+ }
215
+ return undefined;
216
+ };
217
+ // Reads a user-level profile/role meta key. Empty/whitespace and null are treated as
218
+ // "not provided"; any other non-string value is reported so malformed input is not silently dropped.
219
+ const extractUserRef = (value, invalidKey, errors) => {
220
+ if (value === null || value === undefined)
221
+ return undefined;
222
+ if (typeof value !== 'string') {
223
+ errors.push(buildValidationError(invalidKey, [String(value)]));
224
+ return undefined;
225
+ }
226
+ return value.trim() === '' ? undefined : value;
227
+ };
228
+ // Reads the user-level `related` meta key. Every problem is per-user: one row carrying a
229
+ // stale `related` key must not abort a batch that otherwise does not use the feature.
230
+ const resolveRelatedSelection = (rawRelated, related, errors) => {
231
+ if (rawRelated === null || rawRelated === undefined)
232
+ return undefined;
233
+ if (!Array.isArray(rawRelated) || rawRelated.some((name) => typeof name !== 'string')) {
234
+ errors.push(buildValidationError('errorInvalidRelatedKey', [JSON.stringify(rawRelated) ?? String(rawRelated)]));
235
+ return undefined;
236
+ }
237
+ const names = rawRelated;
238
+ if (names.length === 0)
239
+ return [];
240
+ if (!related?.catalogSupplied) {
241
+ errors.push(buildValidationError('errorRelatedWithoutCatalog', []));
242
+ return undefined;
243
+ }
244
+ const seen = new Set();
245
+ const selected = [];
246
+ for (const name of names) {
247
+ if (seen.has(name)) {
248
+ errors.push(buildValidationError('errorDuplicateRelationshipSelection', [name]));
249
+ continue;
250
+ }
251
+ seen.add(name);
252
+ if (!related.names.has(name)) {
253
+ errors.push(buildValidationError('errorUnknownRelationship', [name]));
254
+ continue;
255
+ }
256
+ selected.push(name);
257
+ }
258
+ return selected;
259
+ };
260
+ const attachCsvSource = (user, input) => {
261
+ const source = getCsvRowInfo(input);
262
+ if (source)
263
+ Object.defineProperty(user, 'source', { value: source, enumerable: false });
264
+ return user;
265
+ };
266
+ const canonicalizeValidUser = (input, names, personas, fieldMap, fallback, related) => {
267
+ const candidateFields = {};
268
+ const errors = [];
269
+ let profileRef;
270
+ let roleRef;
271
+ for (const [k, v] of Object.entries(input)) {
272
+ const lower = k.toLowerCase();
273
+ if (lower === 'profile')
274
+ profileRef = extractUserRef(v, 'errorInvalidUserProfile', errors);
275
+ else if (lower === 'role')
276
+ roleRef = extractUserRef(v, 'errorInvalidUserRole', errors);
277
+ else if (!reservedUserKeys.has(lower))
278
+ candidateFields[k] = v;
279
+ }
280
+ const userFields = canonicalizeFieldObject(candidateFields, fieldMap, `user personas=${names.join('+')}`);
281
+ if (profileRef !== undefined && 'ProfileId' in userFields) {
282
+ errors.push(buildValidationError('errorUserProfileConflict', []));
283
+ profileRef = undefined;
284
+ }
285
+ if (roleRef !== undefined && 'UserRoleId' in userFields) {
286
+ errors.push(buildValidationError('errorUserRoleConflict', []));
287
+ roleRef = undefined;
288
+ }
289
+ // A raw ProfileId/UserRoleId is also a user-level override, so it must suppress
290
+ // a persona profile/role conflict the same way the profile/role meta keys do.
291
+ const hasProfileOverride = profileRef !== undefined || 'ProfileId' in userFields;
292
+ const hasRoleOverride = roleRef !== undefined || 'UserRoleId' in userFields;
293
+ const { effective, errors: mergeErrors } = mergePersonas(names, personas, userFields, fieldMap, hasProfileOverride, hasRoleOverride);
294
+ const personaFields = canonicalizeFieldObject(effective.userAttributes, fieldMap, 'effective persona');
295
+ const merged = mergeUserFields(personaFields, userFields);
296
+ const rawMatch = Object.entries(input).find(([k]) => k.toLowerCase() === 'match')?.[1];
297
+ const { matchField, validationErrors: matchErrors } = resolveUserMatchField(rawMatch, merged, fieldMap);
298
+ const rawFuzzy = Object.entries(input).find(([k]) => k.toLowerCase() === 'fuzzyusername')?.[1];
299
+ let fuzzyUsername;
300
+ if (rawFuzzy === undefined || typeof rawFuzzy === 'boolean') {
301
+ fuzzyUsername = rawFuzzy;
302
+ }
303
+ else {
304
+ const displayValue = typeof rawFuzzy === 'string' ? rawFuzzy : JSON.stringify(rawFuzzy) ?? typeof rawFuzzy;
305
+ errors.push(buildValidationError('errorInvalidFuzzyUsername', [displayValue]));
306
+ }
307
+ const rawRelated = Object.entries(input).find(([k]) => k.toLowerCase() === 'related')?.[1];
308
+ const relatedErrors = [];
309
+ const selectedRelated = resolveRelatedSelection(rawRelated, related, relatedErrors);
310
+ const allErrors = [...errors, ...mergeErrors, ...matchErrors, ...relatedErrors];
311
+ const result = {
312
+ inputKey: resolveInputKey(merged, names.length > 0 ? `${names.join('+')}:${fallback}` : fallback),
313
+ personas: names,
314
+ effectivePersona: effective,
315
+ profileRef,
316
+ roleRef,
317
+ matchField,
318
+ fuzzyUsername,
319
+ related: selectedRelated,
320
+ fields: merged,
321
+ validationErrors: allErrors.length > 0 ? allErrors : undefined,
322
+ };
323
+ return attachCsvSource(result, input);
324
+ };
325
+ export const validateAndCanonicalizeUsers = (rawUsers, personas, fieldMap, personasSupplied = true, related) => {
326
+ if (!Array.isArray(rawUsers))
327
+ throw new Error('user-def.json must contain a users array.');
328
+ const users = [];
329
+ for (const rawUser of rawUsers) {
330
+ if (!rawUser || typeof rawUser !== 'object')
331
+ throw new Error('Each user entry must be an object.');
332
+ const input = rawUser;
333
+ const fallback = String(users.length + 1);
334
+ const hasLegacyPersonaKey = Object.keys(input).some((k) => k.toLowerCase() === 'persona');
335
+ if (hasLegacyPersonaKey) {
336
+ const fields = {};
337
+ for (const [k, v] of Object.entries(input)) {
338
+ if (k.toLowerCase() !== 'persona')
339
+ fields[k] = v;
340
+ }
341
+ const userFields = canonicalizeFieldObject(fields, fieldMap, 'user');
342
+ users.push(attachCsvSource({
343
+ inputKey: resolveInputKey(userFields, `unknown:${fallback}`),
344
+ personas: [],
345
+ effectivePersona: {},
346
+ fields: userFields,
347
+ validationErrors: [buildValidationError('errorLegacyPersonaKey', [])],
348
+ }, input));
349
+ continue;
350
+ }
351
+ const personaNames = input.personas;
352
+ const validNames = Array.isArray(personaNames) && personaNames.length > 0 && personaNames.every((n) => typeof n === 'string');
353
+ if (!validNames) {
354
+ if (!personasSupplied) {
355
+ users.push(canonicalizeValidUser(input, [], personas, fieldMap, fallback, related));
356
+ continue;
357
+ }
358
+ const fields = {};
359
+ for (const [k, v] of Object.entries(input)) {
360
+ if (!reservedUserKeys.has(k.toLowerCase()))
361
+ fields[k] = v;
362
+ }
363
+ const userFields = canonicalizeFieldObject(fields, fieldMap, 'user');
364
+ users.push(attachCsvSource({
365
+ inputKey: resolveInputKey(userFields, `unknown:${fallback}`),
366
+ personas: [],
367
+ effectivePersona: {},
368
+ fields: userFields,
369
+ validationErrors: [buildValidationError('errorNoPersonas', [])],
370
+ }, input));
371
+ continue;
372
+ }
373
+ users.push(canonicalizeValidUser(input, personaNames, personas, fieldMap, fallback, related));
374
+ }
375
+ return users;
376
+ };
377
+ export const validatePersonaModes = (personas) => {
378
+ for (const [personaKey, persona] of Object.entries(personas)) {
379
+ for (const modeKey of modeKeys)
380
+ normalizeMode(persona[modeKey]);
381
+ for (const listKey of assignmentListKeys) {
382
+ const candidate = persona[listKey];
383
+ if (candidate !== undefined && !Array.isArray(candidate)) {
384
+ throw new Error(`Persona "${personaKey}" has non-array ${listKey}.`);
385
+ }
386
+ }
387
+ }
388
+ };
389
+ export const practicalRequiredUserFields = [
390
+ 'Username',
391
+ 'LastName',
392
+ 'Alias',
393
+ 'TimeZoneSidKey',
394
+ 'LocaleSidKey',
395
+ 'EmailEncodingKey',
396
+ 'LanguageLocaleKey',
397
+ ];
398
+ // `profileIntended` is true when a profile was specified from any source (user `profile` meta key,
399
+ // raw `ProfileId`, or persona `profile`). When intended but unresolved, buildTarget already reports a
400
+ // reference-missing error, so we must not also report ProfileId as missing here (avoids a double error).
401
+ export const missingRequiredFieldsForInsert = (fields, profileIntended) => {
402
+ const missing = practicalRequiredUserFields.filter((field) => !fields[field]);
403
+ if (!profileIntended && !fields.ProfileId)
404
+ missing.push('ProfileId');
405
+ return missing;
406
+ };
407
+ //# sourceMappingURL=planner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"planner.js","sourceRoot":"","sources":["../../src/provisioning/planner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ import type { Connection } from '@salesforce/core';
2
+ import { type ExistingUser } from '../matching/index.js';
3
+ export type { ExistingUser } from '../matching/index.js';
4
+ import { CanonicalizedUser, UserFieldMeta } from './planner.js';
5
+ import { type PermissionSetLicenseSummary, type UserLicenseUsage } from './licenseUsage.js';
6
+ import { type UserResult } from './userPlan.js';
7
+ export type { OrderedUserResult, UserPlan, UserResult } from './userPlan.js';
8
+ export type { PermissionSetLicenseSummary, UserLicenseUsage } from './licenseUsage.js';
9
+ type JsonRecord = Record<string, unknown>;
10
+ export type ProvisionResult = {
11
+ summary: {
12
+ total: number;
13
+ created: number;
14
+ updated: number;
15
+ failed: number;
16
+ warnings: number;
17
+ };
18
+ users: UserResult[];
19
+ licenses?: UserLicenseUsage[];
20
+ permissionSetLicenses?: PermissionSetLicenseSummary;
21
+ };
22
+ export type ExistingUserMatchOptions = {
23
+ defaultExternalIdField?: string;
24
+ defaultFuzzyUsername?: boolean;
25
+ fieldMap: Map<string, UserFieldMeta>;
26
+ };
27
+ export declare const getExistingUsers: (conn: Connection, users: CanonicalizedUser[], options: ExistingUserMatchOptions) => Promise<{
28
+ existingByField: Map<string, Map<string, ExistingUser>>;
29
+ duplicates: Set<string>;
30
+ }>;
31
+ export type ProvisionUserRequest = {
32
+ connection: Connection;
33
+ usersDoc?: JsonRecord;
34
+ personasDoc?: JsonRecord;
35
+ usersPath?: string;
36
+ personasPath?: string;
37
+ inputFormat?: 'json' | 'csv';
38
+ csvListDelimiter?: string;
39
+ externalId?: string;
40
+ fuzzyUsername?: boolean;
41
+ dryRun: boolean;
42
+ personasSupplied?: boolean;
43
+ relatedDoc?: JsonRecord;
44
+ relatedPath?: string;
45
+ acknowledgeWarnings?: (warnings: string[]) => Promise<void>;
46
+ };
47
+ export declare class ProvisionUserUseCase {
48
+ private readonly userProcessConcurrency;
49
+ private runDryRun;
50
+ private runLive;
51
+ execute(request: ProvisionUserRequest): Promise<ProvisionResult>;
52
+ }