@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 @@
1
+ {"version":3,"file":"userPlan.js","sourceRoot":"","sources":["../../src/provisioning/userPlan.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { Connection } from '@salesforce/core';
2
+ import { type ResolvedRefs } from './assignmentPlan.js';
3
+ import { type OrderedUserResult, type UserPlan } from './userPlan.js';
4
+ export type UserSaveOutcome = {
5
+ plan: UserPlan;
6
+ success: boolean;
7
+ id?: string;
8
+ errors: string[];
9
+ };
10
+ export declare const executeBulkUserSaves: (conn: Connection, plans: UserPlan[]) => Promise<UserSaveOutcome[]>;
11
+ /** Report a user's related plans as unattempted — the run never reached the related DML stage. */
12
+ export declare const markRelatedUnapplied: (plan: UserPlan) => UserPlan;
13
+ export declare const queryFrozenLoginIds: (conn: Connection, userId: string) => Promise<string[]>;
14
+ export declare const planDryRunResult: (options: {
15
+ conn: Connection;
16
+ plan: UserPlan;
17
+ refs: ResolvedRefs;
18
+ }) => Promise<OrderedUserResult>;
19
+ export declare const applySavedPlan: (options: {
20
+ conn: Connection;
21
+ outcome: UserSaveOutcome;
22
+ refs: ResolvedRefs;
23
+ message?: (key: string, args?: string[]) => string;
24
+ }) => Promise<OrderedUserResult>;
@@ -0,0 +1,119 @@
1
+ import { loadAssignmentState } from '../lifecycle/assignmentState.js';
2
+ import { toDryRunResults, toUnappliedResults } from '../relatedRecords/apply.js';
3
+ import { asArray, esc, formatSaveError, pushErrors } from '../shared/sfUtils.js';
4
+ import { computeAssignmentDeltaFromState, hasAssignmentIntent, toDmlPlan, } from './assignmentPlan.js';
5
+ import { toUserResult } from './userPlan.js';
6
+ import { provisioningMessage } from './messages.js';
7
+ const DRY_RUN_CREATE_ID = 'dry-run-create';
8
+ const appendAssignmentActions = (actions, dmlPlan) => {
9
+ const addActionIfAny = (values, action) => {
10
+ if (values.length > 0)
11
+ actions.push(action);
12
+ };
13
+ addActionIfAny(dmlPlan.permissionSets.adds, 'wouldAssignPermissionSet');
14
+ addActionIfAny(dmlPlan.permissionSets.removes, 'wouldRemovePermissionSet');
15
+ addActionIfAny(dmlPlan.permissionSetGroups.adds, 'wouldAssignPermissionSetGroup');
16
+ addActionIfAny(dmlPlan.permissionSetGroups.removes, 'wouldRemovePermissionSetGroup');
17
+ addActionIfAny(dmlPlan.publicGroups.adds, 'wouldAddPublicGroupMember');
18
+ addActionIfAny(dmlPlan.publicGroups.removes, 'wouldRemovePublicGroupMember');
19
+ addActionIfAny(dmlPlan.queues.adds, 'wouldAddQueueMember');
20
+ addActionIfAny(dmlPlan.queues.removes, 'wouldRemoveQueueMember');
21
+ };
22
+ const performAssignmentDml = async (conn, userId, dmlPlan, actions, errors) => {
23
+ const runDml = async (values, action, op) => {
24
+ if (values.length === 0)
25
+ return;
26
+ const saveResults = asArray(await op());
27
+ if (saveResults.some((saveResult) => saveResult.success))
28
+ actions.push(action);
29
+ pushErrors(errors, saveResults);
30
+ };
31
+ await runDml(dmlPlan.permissionSets.adds, 'assignedPermissionSet', () => conn.sobject('PermissionSetAssignment').create(dmlPlan.permissionSets.adds.map((id) => ({ AssigneeId: userId, PermissionSetId: id })), { allOrNone: false }));
32
+ await runDml(dmlPlan.permissionSets.removes, 'removedPermissionSet', () => conn.sobject('PermissionSetAssignment').delete(dmlPlan.permissionSets.removes, { allOrNone: false }));
33
+ await runDml(dmlPlan.permissionSetGroups.adds, 'assignedPermissionSetGroup', () => conn.sobject('PermissionSetAssignment').create(dmlPlan.permissionSetGroups.adds.map((id) => ({ AssigneeId: userId, PermissionSetGroupId: id })), { allOrNone: false }));
34
+ await runDml(dmlPlan.permissionSetGroups.removes, 'removedPermissionSetGroup', () => conn.sobject('PermissionSetAssignment').delete(dmlPlan.permissionSetGroups.removes, { allOrNone: false }));
35
+ await runDml(dmlPlan.publicGroups.adds, 'addedPublicGroupMember', () => conn.sobject('GroupMember').create(dmlPlan.publicGroups.adds.map((groupId) => ({ GroupId: groupId, UserOrGroupId: userId })), { allOrNone: false }));
36
+ await runDml(dmlPlan.publicGroups.removes, 'removedPublicGroupMember', () => conn.sobject('GroupMember').delete(dmlPlan.publicGroups.removes, { allOrNone: false }));
37
+ await runDml(dmlPlan.queues.adds, 'addedQueueMember', () => conn.sobject('GroupMember').create(dmlPlan.queues.adds.map((groupId) => ({ GroupId: groupId, UserOrGroupId: userId })), { allOrNone: false }));
38
+ await runDml(dmlPlan.queues.removes, 'removedQueueMember', () => conn.sobject('GroupMember').delete(dmlPlan.queues.removes, { allOrNone: false }));
39
+ };
40
+ const applyAssignments = async (conn, userId, persona, refs, dryRun, actions, errors) => {
41
+ if (!hasAssignmentIntent(persona, refs))
42
+ return;
43
+ const state = userId === DRY_RUN_CREATE_ID
44
+ ? undefined
45
+ : await loadAssignmentState(conn, [userId], { permissionSetAssignments: true, groupMemberships: true });
46
+ const assignmentRows = state?.psaByUserId.get(userId) ?? [];
47
+ const membershipRows = state?.groupByUserId.get(userId) ?? [];
48
+ const delta = computeAssignmentDeltaFromState(persona, refs, assignmentRows, membershipRows);
49
+ const dmlPlan = toDmlPlan(delta, assignmentRows, membershipRows);
50
+ if (dryRun) {
51
+ appendAssignmentActions(actions, dmlPlan);
52
+ return;
53
+ }
54
+ await performAssignmentDml(conn, userId, dmlPlan, actions, errors);
55
+ };
56
+ export const executeBulkUserSaves = async (conn, plans) => {
57
+ const validPlans = plans.filter((plan) => plan.errors.length === 0);
58
+ const createPlans = validPlans.filter((plan) => !plan.existing);
59
+ const updatePlans = validPlans.filter((plan) => Boolean(plan.existing));
60
+ const outcomes = [];
61
+ if (createPlans.length > 0) {
62
+ const createResults = asArray(await conn.sobject('User').create(createPlans.map((plan) => plan.target), { allOrNone: false }));
63
+ outcomes.push(...createPlans.map((plan, idx) => ({
64
+ plan,
65
+ success: createResults[idx]?.success === true && Boolean(createResults[idx]?.id),
66
+ id: createResults[idx]?.id,
67
+ errors: (createResults[idx]?.errors ?? []).map((error) => formatSaveError(error)),
68
+ })));
69
+ }
70
+ if (updatePlans.length > 0) {
71
+ const updateResults = asArray(await conn.sobject('User').update(updatePlans.map((plan) => ({ ...plan.target, Id: plan.existing.Id })), { allOrNone: false }));
72
+ outcomes.push(...updatePlans.map((plan, idx) => ({
73
+ plan,
74
+ success: updateResults[idx]?.success === true && Boolean(updateResults[idx]?.id),
75
+ id: updateResults[idx]?.id ?? plan.existing.Id,
76
+ errors: (updateResults[idx]?.errors ?? []).map((error) => formatSaveError(error)),
77
+ })));
78
+ }
79
+ return outcomes;
80
+ };
81
+ /** Report a user's related plans as unattempted — the run never reached the related DML stage. */
82
+ export const markRelatedUnapplied = (plan) => {
83
+ if (plan.relatedPlans)
84
+ plan.relatedResults = toUnappliedResults(plan.relatedPlans);
85
+ return plan;
86
+ };
87
+ export const queryFrozenLoginIds = async (conn, userId) => (await conn.query(`SELECT Id FROM UserLogin WHERE UserId = '${esc(userId)}' AND IsFrozen = true`)).records.map((row) => row.Id);
88
+ export const planDryRunResult = async (options) => {
89
+ const { conn, plan, refs } = options;
90
+ if (plan.relatedPlans)
91
+ plan.relatedResults = toDryRunResults(plan.relatedPlans);
92
+ if (plan.errors.length > 0)
93
+ return toUserResult(plan, 'failed', { includeExistingId: false });
94
+ const dryRunId = plan.existing?.Id ?? DRY_RUN_CREATE_ID;
95
+ if (plan.existing && (await queryFrozenLoginIds(conn, plan.existing.Id)).length > 0)
96
+ plan.actions.push('wouldUnfreeze');
97
+ await applyAssignments(conn, dryRunId, plan.effectivePersona, refs, true, plan.actions, plan.errors);
98
+ return toUserResult(plan, 'planned');
99
+ };
100
+ export const applySavedPlan = async (options) => {
101
+ const { conn, outcome, refs, message = provisioningMessage } = options;
102
+ const { plan, id } = outcome;
103
+ if (!id)
104
+ return toUserResult(plan, 'failed', { includeExistingId: false, errors: [message('errorMissingSaveId')] });
105
+ const frozenIds = await queryFrozenLoginIds(conn, id);
106
+ if (frozenIds.length > 0) {
107
+ const unfreezeResult = await conn.sobject('UserLogin').update(frozenIds.map((loginId) => ({ Id: loginId, IsFrozen: false })), { allOrNone: false });
108
+ const unfreezeErrors = [];
109
+ pushErrors(unfreezeErrors, unfreezeResult);
110
+ if (unfreezeErrors.length > 0)
111
+ plan.errors.push(...unfreezeErrors);
112
+ else
113
+ plan.actions.push('unfrozen');
114
+ }
115
+ await applyAssignments(conn, id, plan.effectivePersona, refs, false, plan.actions, plan.errors);
116
+ const status = plan.errors.length > 0 ? 'failed' : plan.existing ? 'updated' : 'created';
117
+ return toUserResult(plan, status, { id });
118
+ };
119
+ //# sourceMappingURL=userSave.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"userSave.js","sourceRoot":"","sources":["../../src/provisioning/userSave.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { Connection } from '@salesforce/core';
2
+ import type { RelatedRecordPlan, RelatedRecordResult } from './types.js';
3
+ export type RelatedApplyEntry = {
4
+ planId: string;
5
+ relatedPlans: RelatedRecordPlan[];
6
+ savedUserId: string;
7
+ };
8
+ /** Dry-run rendering: no DML, and no `recordId` for a record that does not exist yet. */
9
+ export declare const toDryRunResults: (plans: RelatedRecordPlan[]) => RelatedRecordResult[];
10
+ /** Results for plans a live run never reached (user validation errors or a failed User save). */
11
+ export declare const toUnappliedResults: (plans: RelatedRecordPlan[]) => RelatedRecordResult[];
12
+ /**
13
+ * Apply every `after`-phase related record for the batch as bulk DML per sObject.
14
+ *
15
+ * Failures are pushed onto the owning `UserPlan`'s errors so the existing status
16
+ * derivation reports that user failed — without undoing the already-saved User.
17
+ */
18
+ export declare const applyRelatedPhase: (conn: Connection, entries: RelatedApplyEntry[], phase: "after") => Promise<Map<string, RelatedRecordResult[]>>;
@@ -0,0 +1,121 @@
1
+ import { asArray, batch, formatSaveError } from '../shared/sfUtils.js';
2
+ import { RELATED_DML_CHUNK_SIZE } from './plan.js';
3
+ const baseResult = (plan) => ({
4
+ relationship: plan.relationship,
5
+ phase: plan.phase,
6
+ sobject: plan.sobject,
7
+ });
8
+ /** Dry-run rendering: no DML, and no `recordId` for a record that does not exist yet. */
9
+ export const toDryRunResults = (plans) => plans.map((plan) => {
10
+ if (plan.status === 'failed') {
11
+ return { ...baseResult(plan), action: 'wouldSkip', status: 'failed', error: plan.errors.join('; ') };
12
+ }
13
+ if (plan.status === 'skipped')
14
+ return { ...baseResult(plan), action: 'wouldSkip', status: 'skipped' };
15
+ return plan.existingId
16
+ ? {
17
+ ...baseResult(plan),
18
+ recordId: plan.existingId,
19
+ action: Object.keys(plan.fields).length === 0 && plan.pendingUserIdFields.length === 0 ? 'matched' : 'wouldUpdate',
20
+ status: 'planned',
21
+ }
22
+ : { ...baseResult(plan), action: 'wouldCreate', status: 'planned' };
23
+ });
24
+ /** Results for plans a live run never reached (user validation errors or a failed User save). */
25
+ export const toUnappliedResults = (plans) => plans.map((plan) => plan.status === 'failed'
26
+ ? { ...baseResult(plan), action: 'skipped', status: 'failed', error: plan.errors.join('; ') }
27
+ : { ...baseResult(plan), action: 'skipped', status: 'skipped' });
28
+ const buildPayload = (plan, savedUserId) => {
29
+ const fields = { ...plan.fields };
30
+ for (const name of plan.pendingUserIdFields)
31
+ fields[name] = savedUserId;
32
+ if (plan.existingId)
33
+ return { ...fields, Id: plan.existingId };
34
+ return plan.recordTypeId ? { ...fields, RecordTypeId: plan.recordTypeId } : fields;
35
+ };
36
+ const isMatchedWithoutChanges = (plan) => Boolean(plan.existingId) && Object.keys(plan.fields).length === 0 && plan.pendingUserIdFields.length === 0;
37
+ const recordOutcome = (write, saveResult, resultsByPlanId) => {
38
+ const { plan } = write;
39
+ const isUpdate = Boolean(plan.existingId);
40
+ const succeeded = saveResult?.success === true && Boolean(saveResult.id ?? plan.existingId);
41
+ const results = resultsByPlanId.get(write.planId) ?? [];
42
+ if (succeeded) {
43
+ results.push({
44
+ ...baseResult(plan),
45
+ recordId: saveResult?.id ?? plan.existingId,
46
+ action: isUpdate ? 'updated' : 'created',
47
+ status: 'applied',
48
+ });
49
+ }
50
+ else {
51
+ const errors = (saveResult?.errors ?? []).map((error) => formatSaveError(error));
52
+ const error = errors.length > 0 ? errors.join('; ') : 'Related record save returned no result.';
53
+ plan.errors.push(error);
54
+ plan.status = 'failed';
55
+ results.push({
56
+ ...baseResult(plan),
57
+ ...(plan.existingId ? { recordId: plan.existingId } : {}),
58
+ action: 'skipped',
59
+ status: 'failed',
60
+ error,
61
+ });
62
+ }
63
+ resultsByPlanId.set(write.planId, results);
64
+ };
65
+ const runPartitionedDml = async (writes, operation, resultsByPlanId) => {
66
+ const partitions = batch(writes, RELATED_DML_CHUNK_SIZE);
67
+ for (const partition of partitions) {
68
+ // Ordered requests: each partition is at most 200 records, matching the User save shape.
69
+ // eslint-disable-next-line no-await-in-loop
70
+ const saveResults = asArray(await operation(partition.map((write) => write.payload)));
71
+ partition.forEach((write, idx) => recordOutcome(write, saveResults[idx], resultsByPlanId));
72
+ }
73
+ };
74
+ /**
75
+ * Apply every `after`-phase related record for the batch as bulk DML per sObject.
76
+ *
77
+ * Failures are pushed onto the owning `UserPlan`'s errors so the existing status
78
+ * derivation reports that user failed — without undoing the already-saved User.
79
+ */
80
+ export const applyRelatedPhase = async (conn, entries, phase) => {
81
+ const resultsByPlanId = new Map();
82
+ const writes = [];
83
+ for (const entry of entries) {
84
+ for (const plan of entry.relatedPlans) {
85
+ if (plan.phase !== phase)
86
+ continue;
87
+ if (plan.status !== 'planned') {
88
+ resultsByPlanId.set(entry.planId, (resultsByPlanId.get(entry.planId) ?? []).concat(toUnappliedResults([plan])));
89
+ continue;
90
+ }
91
+ if (isMatchedWithoutChanges(plan)) {
92
+ resultsByPlanId.set(entry.planId, (resultsByPlanId.get(entry.planId) ?? []).concat({
93
+ ...baseResult(plan),
94
+ recordId: plan.existingId,
95
+ action: 'matched',
96
+ status: 'applied',
97
+ }));
98
+ continue;
99
+ }
100
+ writes.push({ planId: entry.planId, plan, payload: buildPayload(plan, entry.savedUserId) });
101
+ }
102
+ }
103
+ if (writes.length === 0)
104
+ return resultsByPlanId;
105
+ const sobjects = [...new Set(writes.map((write) => write.plan.sobject))];
106
+ for (const sobject of sobjects) {
107
+ const forSobject = writes.filter((write) => write.plan.sobject === sobject);
108
+ const creates = forSobject.filter((write) => !write.plan.existingId);
109
+ const updates = forSobject.filter((write) => Boolean(write.plan.existingId));
110
+ /* eslint-disable no-await-in-loop */
111
+ if (creates.length > 0) {
112
+ await runPartitionedDml(creates, (payloads) => conn.sobject(sobject).create(payloads, { allOrNone: false }), resultsByPlanId);
113
+ }
114
+ if (updates.length > 0) {
115
+ await runPartitionedDml(updates, (payloads) => conn.sobject(sobject).update(payloads, { allOrNone: false }), resultsByPlanId);
116
+ }
117
+ /* eslint-enable no-await-in-loop */
118
+ }
119
+ return resultsByPlanId;
120
+ };
121
+ //# sourceMappingURL=apply.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply.js","sourceRoot":"","sources":["../../src/relatedRecords/apply.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { UserFieldMeta } from '../provisioning/planner.js';
2
+ import type { RelatedCatalog, RelatedMessage } from './types.js';
3
+ /**
4
+ * Validate a `--related-def` document. A malformed catalog is an operator error rather
5
+ * than a row error, so every problem here throws and aborts the run.
6
+ */
7
+ export declare const assertValidRelatedCatalog: (doc: Record<string, unknown>, userFieldMap: Map<string, UserFieldMeta>, message?: RelatedMessage) => RelatedCatalog;
@@ -0,0 +1,108 @@
1
+ import { parseRelatedCatalog } from '../spec/parse.js';
2
+ import { isSourceExpr, parseSource } from './sources.js';
3
+ import { RelatedRecordsError } from './errors.js';
4
+ import { relatedRecordsMessage } from './messages.js';
5
+ /** Not writable through the Account API; catalogs that try get a dedicated error. */
6
+ const UNWRITABLE_FIELDS = new Set(['personcontactid']);
7
+ const RELATIONSHIP_MODES = ['setIfEmpty', 'sync'];
8
+ const isPlainObject = (value) => Boolean(value) && typeof value === 'object' && !Array.isArray(value);
9
+ const isNonEmptyString = (value) => typeof value === 'string' && value.trim().length > 0;
10
+ const fail = (message, key, args) => {
11
+ throw new RelatedRecordsError(key, message(key, args));
12
+ };
13
+ const assertUserSource = (from, name, fieldName, userFieldMap, message, options) => {
14
+ const parsed = parseSource(from);
15
+ if (parsed.kind === 'context')
16
+ fail(message, 'errorRelatedContextUnsupported', [name, fieldName]);
17
+ if (parsed.kind === 'invalid')
18
+ fail(message, 'errorRelationshipInvalidFrom', [name, fieldName, String(from)]);
19
+ if (parsed.kind === 'userId' && !options.allowUserId) {
20
+ fail(message, 'errorRelationshipMatchFromUserId', [name]);
21
+ }
22
+ if (parsed.kind === 'userField' && !userFieldMap.has(parsed.field.toLowerCase())) {
23
+ fail(message, 'errorRelationshipUnknownUserField', [name, fieldName, parsed.field]);
24
+ }
25
+ };
26
+ const assertValidFields = (raw, name, userFieldMap, message = relatedRecordsMessage) => {
27
+ if (!isPlainObject(raw) || Object.keys(raw).length === 0) {
28
+ fail(message, 'errorRelationshipInvalidFields', [name]);
29
+ }
30
+ const fields = {};
31
+ for (const [fieldName, expr] of Object.entries(raw)) {
32
+ if (UNWRITABLE_FIELDS.has(fieldName.toLowerCase())) {
33
+ fail(message, 'errorRelationshipUnwritableField', [name, fieldName]);
34
+ }
35
+ if (!isSourceExpr(expr))
36
+ fail(message, 'errorRelationshipInvalidSource', [name, fieldName]);
37
+ const source = expr;
38
+ if ('from' in source) {
39
+ assertUserSource(source.from, name, fieldName, userFieldMap, message, { allowUserId: true });
40
+ }
41
+ fields[fieldName] = source;
42
+ }
43
+ return fields;
44
+ };
45
+ const assertValidPhase = (raw, name, message) => {
46
+ if (raw === undefined || raw === null)
47
+ fail(message, 'errorRelationshipMissingPhase', [name]);
48
+ if (raw === 'before')
49
+ fail(message, 'errorPhaseBeforeUnsupported', [name]);
50
+ if (raw !== 'after')
51
+ fail(message, 'errorRelationshipInvalidPhase', [name, String(raw)]);
52
+ return 'after';
53
+ };
54
+ const assertValidRecordType = (raw, name, message) => {
55
+ if (raw === undefined || raw === null)
56
+ return undefined;
57
+ if (!isPlainObject(raw) || !isNonEmptyString(raw.developerName)) {
58
+ fail(message, 'errorRelationshipInvalidRecordType', [name]);
59
+ }
60
+ return { developerName: raw.developerName };
61
+ };
62
+ const assertValidMode = (raw, name, message) => {
63
+ if (raw === undefined || raw === null)
64
+ return 'setIfEmpty';
65
+ if (!RELATIONSHIP_MODES.includes(raw)) {
66
+ fail(message, 'errorRelationshipInvalidMode', [name, String(raw)]);
67
+ }
68
+ return raw;
69
+ };
70
+ const assertValidRelationship = (name, raw, userFieldMap, message) => {
71
+ if (!isPlainObject(raw))
72
+ fail(message, 'errorRelationshipInvalidDefinition', [name]);
73
+ const def = raw;
74
+ if ('linkUser' in def)
75
+ fail(message, 'errorLinkUserUnsupported', [name]);
76
+ if (!isNonEmptyString(def.sobject))
77
+ fail(message, 'errorRelationshipInvalidSobject', [name]);
78
+ const phase = assertValidPhase(def.phase, name, message);
79
+ const match = def.match;
80
+ if (!isPlainObject(match) || !isNonEmptyString(match.field) || !isNonEmptyString(match.from)) {
81
+ fail(message, 'errorRelationshipInvalidMatch', [name]);
82
+ }
83
+ const matchDef = match;
84
+ assertUserSource(matchDef.from, name, 'match.from', userFieldMap, message, { allowUserId: false });
85
+ return {
86
+ sobject: def.sobject,
87
+ phase,
88
+ recordType: assertValidRecordType(def.recordType, name, message),
89
+ match: { field: matchDef.field, from: matchDef.from },
90
+ fields: assertValidFields(def.fields, name, userFieldMap, message),
91
+ mode: assertValidMode(def.mode, name, message),
92
+ };
93
+ };
94
+ /**
95
+ * Validate a `--related-def` document. A malformed catalog is an operator error rather
96
+ * than a row error, so every problem here throws and aborts the run.
97
+ */
98
+ export const assertValidRelatedCatalog = (doc, userFieldMap, message = relatedRecordsMessage) => {
99
+ const parsed = parseRelatedCatalog(doc);
100
+ const relationships = {};
101
+ for (const [name, raw] of Object.entries(parsed.relationships)) {
102
+ relationships[name] = assertValidRelationship(name, raw, userFieldMap, message);
103
+ }
104
+ return parsed.schemaVersion === undefined
105
+ ? { relationships }
106
+ : { schemaVersion: parsed.schemaVersion, relationships };
107
+ };
108
+ //# sourceMappingURL=catalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/relatedRecords/catalog.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { WardenError } from '../errors.js';
2
+ export type RelatedRecordsErrorCode = 'errorInvalidRelatedCatalog' | 'errorRelationshipInvalidDefinition' | 'errorRelationshipInvalidSobject' | 'errorRelationshipMissingPhase' | 'errorRelationshipInvalidPhase' | 'errorPhaseBeforeUnsupported' | 'errorLinkUserUnsupported' | 'errorRelatedContextUnsupported' | 'errorRelationshipInvalidMatch' | 'errorRelationshipMatchFromUserId' | 'errorRelationshipInvalidFields' | 'errorRelationshipInvalidSource' | 'errorRelationshipInvalidFrom' | 'errorRelationshipUnknownUserField' | 'errorRelationshipUnwritableField' | 'errorRelationshipInvalidMode' | 'errorRelationshipInvalidRecordType';
3
+ export declare class RelatedRecordsError extends WardenError<RelatedRecordsErrorCode> {
4
+ constructor(code: RelatedRecordsErrorCode, message: string, data?: unknown);
5
+ }
@@ -0,0 +1,8 @@
1
+ import { WardenError } from '../errors.js';
2
+ export class RelatedRecordsError extends WardenError {
3
+ constructor(code, message, data) {
4
+ super(code, message, data);
5
+ this.name = 'RelatedRecordsError';
6
+ }
7
+ }
8
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/relatedRecords/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAqB3C,MAAM,OAAO,mBAAoB,SAAQ,WAAoC;IAC3E,YAAmB,IAA6B,EAAE,OAAe,EAAE,IAAc;QAC/E,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QAC3B,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF"}
@@ -0,0 +1 @@
1
+ export { provisioningMessage as relatedRecordsMessage } from '../provisioning/messages.js';
@@ -0,0 +1,2 @@
1
+ export { provisioningMessage as relatedRecordsMessage } from '../provisioning/messages.js';
2
+ //# sourceMappingURL=messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/relatedRecords/messages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,IAAI,qBAAqB,EAAE,MAAM,6BAA6B,CAAC"}
@@ -0,0 +1,22 @@
1
+ import type { Connection } from '@salesforce/core';
2
+ import type { CanonicalizedUser, UserFieldMeta } from '../provisioning/planner.js';
3
+ import type { RelatedPreflightResult } from './preflight.js';
4
+ import type { RelatedCatalog, RelatedMessage, RelatedRecordPlan } from './types.js';
5
+ /** Salesforce accepts at most 200 records per create/update request. */
6
+ export declare const RELATED_DML_CHUNK_SIZE = 200;
7
+ /**
8
+ * Build every user's `after`-phase related-record plans for the batch.
9
+ *
10
+ * Matching is a read, so this is safe in a dry run; the returned plans carry no DML.
11
+ */
12
+ export declare const buildRelatedPlans: (options: {
13
+ conn: Connection;
14
+ users: Array<{
15
+ user: CanonicalizedUser;
16
+ order: number;
17
+ }>;
18
+ catalog: RelatedCatalog;
19
+ preflight: RelatedPreflightResult;
20
+ userFieldMap: Map<string, UserFieldMeta>;
21
+ message?: RelatedMessage;
22
+ }) => Promise<Map<number, RelatedRecordPlan[]>>;