@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.
- package/CHANGELOG.md +22 -0
- package/LICENSE +21 -0
- package/README.md +111 -0
- package/lib/access/assignees.d.ts +27 -0
- package/lib/access/assignees.js +139 -0
- package/lib/access/assignees.js.map +1 -0
- package/lib/access/messages.d.ts +1 -0
- package/lib/access/messages.js +24 -0
- package/lib/access/messages.js.map +1 -0
- package/lib/access/metadata.d.ts +41 -0
- package/lib/access/metadata.js +168 -0
- package/lib/access/metadata.js.map +1 -0
- package/lib/access/muting.d.ts +7 -0
- package/lib/access/muting.js +22 -0
- package/lib/access/muting.js.map +1 -0
- package/lib/access/output.d.ts +12 -0
- package/lib/access/output.js +108 -0
- package/lib/access/output.js.map +1 -0
- package/lib/access/resolvers/field.d.ts +2 -0
- package/lib/access/resolvers/field.js +93 -0
- package/lib/access/resolvers/field.js.map +1 -0
- package/lib/access/resolvers/index.d.ts +2 -0
- package/lib/access/resolvers/index.js +22 -0
- package/lib/access/resolvers/index.js.map +1 -0
- package/lib/access/resolvers/object.d.ts +2 -0
- package/lib/access/resolvers/object.js +101 -0
- package/lib/access/resolvers/object.js.map +1 -0
- package/lib/access/resolvers/recordType.d.ts +2 -0
- package/lib/access/resolvers/recordType.js +181 -0
- package/lib/access/resolvers/recordType.js.map +1 -0
- package/lib/access/resolvers/setupEntity.d.ts +4 -0
- package/lib/access/resolvers/setupEntity.js +43 -0
- package/lib/access/resolvers/setupEntity.js.map +1 -0
- package/lib/access/resolvers/tab.d.ts +2 -0
- package/lib/access/resolvers/tab.js +36 -0
- package/lib/access/resolvers/tab.js.map +1 -0
- package/lib/access/reverse.d.ts +9 -0
- package/lib/access/reverse.js +429 -0
- package/lib/access/reverse.js.map +1 -0
- package/lib/access/soql.d.ts +6 -0
- package/lib/access/soql.js +31 -0
- package/lib/access/soql.js.map +1 -0
- package/lib/access/targetValidation.d.ts +7 -0
- package/lib/access/targetValidation.js +110 -0
- package/lib/access/targetValidation.js.map +1 -0
- package/lib/access/types.d.ts +88 -0
- package/lib/access/types.js +20 -0
- package/lib/access/types.js.map +1 -0
- package/lib/errors.d.ts +18 -0
- package/lib/errors.js +39 -0
- package/lib/errors.js.map +1 -0
- package/lib/index.d.ts +37 -0
- package/lib/index.js +33 -0
- package/lib/index.js.map +1 -0
- package/lib/lifecycle/assignmentState.d.ts +62 -0
- package/lib/lifecycle/assignmentState.js +89 -0
- package/lib/lifecycle/assignmentState.js.map +1 -0
- package/lib/lifecycle/conformance.d.ts +10 -0
- package/lib/lifecycle/conformance.js +59 -0
- package/lib/lifecycle/conformance.js.map +1 -0
- package/lib/lifecycle/diffOutput.d.ts +7 -0
- package/lib/lifecycle/diffOutput.js +94 -0
- package/lib/lifecycle/diffOutput.js.map +1 -0
- package/lib/lifecycle/dmlRunner.d.ts +30 -0
- package/lib/lifecycle/dmlRunner.js +45 -0
- package/lib/lifecycle/dmlRunner.js.map +1 -0
- package/lib/lifecycle/errors.d.ts +5 -0
- package/lib/lifecycle/errors.js +8 -0
- package/lib/lifecycle/errors.js.map +1 -0
- package/lib/lifecycle/freezeState.d.ts +28 -0
- package/lib/lifecycle/freezeState.js +88 -0
- package/lib/lifecycle/freezeState.js.map +1 -0
- package/lib/lifecycle/messages.d.ts +1 -0
- package/lib/lifecycle/messages.js +20 -0
- package/lib/lifecycle/messages.js.map +1 -0
- package/lib/lifecycle/output.d.ts +23 -0
- package/lib/lifecycle/output.js +148 -0
- package/lib/lifecycle/output.js.map +1 -0
- package/lib/lifecycle/snapshotState.d.ts +12 -0
- package/lib/lifecycle/snapshotState.js +353 -0
- package/lib/lifecycle/snapshotState.js.map +1 -0
- package/lib/lifecycle/stripApply.d.ts +3 -0
- package/lib/lifecycle/stripApply.js +17 -0
- package/lib/lifecycle/stripApply.js.map +1 -0
- package/lib/lifecycle/stripPlan.d.ts +75 -0
- package/lib/lifecycle/stripPlan.js +192 -0
- package/lib/lifecycle/stripPlan.js.map +1 -0
- package/lib/lifecycle/targeting.d.ts +32 -0
- package/lib/lifecycle/targeting.js +195 -0
- package/lib/lifecycle/targeting.js.map +1 -0
- package/lib/lifecycle/types.d.ts +88 -0
- package/lib/lifecycle/types.js +2 -0
- package/lib/lifecycle/types.js.map +1 -0
- package/lib/lifecycle/userDiff.d.ts +70 -0
- package/lib/lifecycle/userDiff.js +393 -0
- package/lib/lifecycle/userDiff.js.map +1 -0
- package/lib/matching/index.d.ts +53 -0
- package/lib/matching/index.js +181 -0
- package/lib/matching/index.js.map +1 -0
- package/lib/provisioning/assignmentPlan.d.ts +53 -0
- package/lib/provisioning/assignmentPlan.js +90 -0
- package/lib/provisioning/assignmentPlan.js.map +1 -0
- package/lib/provisioning/definitionReader.d.ts +38 -0
- package/lib/provisioning/definitionReader.js +77 -0
- package/lib/provisioning/definitionReader.js.map +1 -0
- package/lib/provisioning/errors.d.ts +9 -0
- package/lib/provisioning/errors.js +14 -0
- package/lib/provisioning/errors.js.map +1 -0
- package/lib/provisioning/licenseUsage.d.ts +15 -0
- package/lib/provisioning/licenseUsage.js +53 -0
- package/lib/provisioning/licenseUsage.js.map +1 -0
- package/lib/provisioning/messages.d.ts +4 -0
- package/lib/provisioning/messages.js +72 -0
- package/lib/provisioning/messages.js.map +1 -0
- package/lib/provisioning/planner.d.ts +63 -0
- package/lib/provisioning/planner.js +407 -0
- package/lib/provisioning/planner.js.map +1 -0
- package/lib/provisioning/provisionUserUseCase.d.ts +52 -0
- package/lib/provisioning/provisionUserUseCase.js +200 -0
- package/lib/provisioning/provisionUserUseCase.js.map +1 -0
- package/lib/provisioning/referenceResolution.d.ts +4 -0
- package/lib/provisioning/referenceResolution.js +173 -0
- package/lib/provisioning/referenceResolution.js.map +1 -0
- package/lib/provisioning/userPlan.d.ts +85 -0
- package/lib/provisioning/userPlan.js +162 -0
- package/lib/provisioning/userPlan.js.map +1 -0
- package/lib/provisioning/userSave.d.ts +24 -0
- package/lib/provisioning/userSave.js +119 -0
- package/lib/provisioning/userSave.js.map +1 -0
- package/lib/relatedRecords/apply.d.ts +18 -0
- package/lib/relatedRecords/apply.js +121 -0
- package/lib/relatedRecords/apply.js.map +1 -0
- package/lib/relatedRecords/catalog.d.ts +7 -0
- package/lib/relatedRecords/catalog.js +108 -0
- package/lib/relatedRecords/catalog.js.map +1 -0
- package/lib/relatedRecords/errors.d.ts +5 -0
- package/lib/relatedRecords/errors.js +8 -0
- package/lib/relatedRecords/errors.js.map +1 -0
- package/lib/relatedRecords/messages.d.ts +1 -0
- package/lib/relatedRecords/messages.js +2 -0
- package/lib/relatedRecords/messages.js.map +1 -0
- package/lib/relatedRecords/plan.d.ts +22 -0
- package/lib/relatedRecords/plan.js +271 -0
- package/lib/relatedRecords/plan.js.map +1 -0
- package/lib/relatedRecords/preflight.d.ts +29 -0
- package/lib/relatedRecords/preflight.js +164 -0
- package/lib/relatedRecords/preflight.js.map +1 -0
- package/lib/relatedRecords/sources.d.ts +25 -0
- package/lib/relatedRecords/sources.js +65 -0
- package/lib/relatedRecords/sources.js.map +1 -0
- package/lib/relatedRecords/types.d.ts +46 -0
- package/lib/relatedRecords/types.js +2 -0
- package/lib/relatedRecords/types.js.map +1 -0
- package/lib/shared/csv.d.ts +26 -0
- package/lib/shared/csv.js +237 -0
- package/lib/shared/csv.js.map +1 -0
- package/lib/shared/output.d.ts +25 -0
- package/lib/shared/output.js +74 -0
- package/lib/shared/output.js.map +1 -0
- package/lib/shared/prompt.d.ts +4 -0
- package/lib/shared/prompt.js +15 -0
- package/lib/shared/prompt.js.map +1 -0
- package/lib/shared/sfUtils.d.ts +19 -0
- package/lib/shared/sfUtils.js +42 -0
- package/lib/shared/sfUtils.js.map +1 -0
- package/lib/shared/userFields.d.ts +23 -0
- package/lib/shared/userFields.js +41 -0
- package/lib/shared/userFields.js.map +1 -0
- package/lib/spec/index.d.ts +10 -0
- package/lib/spec/index.js +6 -0
- package/lib/spec/index.js.map +1 -0
- package/lib/spec/parse.d.ts +32 -0
- package/lib/spec/parse.js +77 -0
- package/lib/spec/parse.js.map +1 -0
- package/lib/spec/personaDefinitions.d.ts +56 -0
- package/lib/spec/personaDefinitions.js +25 -0
- package/lib/spec/personaDefinitions.js.map +1 -0
- package/lib/spec/relatedCatalog.d.ts +61 -0
- package/lib/spec/relatedCatalog.js +32 -0
- package/lib/spec/relatedCatalog.js.map +1 -0
- package/lib/spec/snapshot.d.ts +42 -0
- package/lib/spec/snapshot.js +32 -0
- package/lib/spec/snapshot.js.map +1 -0
- package/lib/spec/usersDefinition.d.ts +19 -0
- package/lib/spec/usersDefinition.js +21 -0
- package/lib/spec/usersDefinition.js.map +1 -0
- package/package.json +78 -0
- package/schemas/persona-definitions.schema.json +108 -0
- package/schemas/related-catalog.schema.json +141 -0
- package/schemas/snapshot.schema.json +128 -0
- 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 @@
|
|
|
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 @@
|
|
|
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[]>>;
|