sf-plugin-permission-sets 0.4.0 → 0.5.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/README.md +75 -41
- package/lib/adapters/connection-org-client.d.ts +7 -5
- package/lib/adapters/connection-org-client.d.ts.map +1 -1
- package/lib/adapters/connection-org-client.js +171 -89
- package/lib/adapters/connection-org-client.js.map +1 -1
- package/lib/commands/ps/apply.d.ts +1 -15
- package/lib/commands/ps/apply.d.ts.map +1 -1
- package/lib/commands/ps/apply.js +4 -75
- package/lib/commands/ps/apply.js.map +1 -1
- package/lib/commands/ps/plan.d.ts +0 -6
- package/lib/commands/ps/plan.d.ts.map +1 -1
- package/lib/commands/ps/plan.js +2 -36
- package/lib/commands/ps/plan.js.map +1 -1
- package/lib/core/diff.js +1 -1
- package/lib/core/diff.js.map +1 -1
- package/lib/core/finding.d.ts.map +1 -1
- package/lib/core/finding.js +9 -1
- package/lib/core/finding.js.map +1 -1
- package/lib/core/index.d.ts +0 -1
- package/lib/core/index.d.ts.map +1 -1
- package/lib/core/index.js +0 -1
- package/lib/core/index.js.map +1 -1
- package/lib/core/model.d.ts +8 -8
- package/lib/core/model.d.ts.map +1 -1
- package/lib/core/normalize.d.ts.map +1 -1
- package/lib/core/normalize.js +8 -5
- package/lib/core/normalize.js.map +1 -1
- package/lib/core/report.d.ts.map +1 -1
- package/lib/core/report.js +13 -5
- package/lib/core/report.js.map +1 -1
- package/lib/core/serialize.d.ts.map +1 -1
- package/lib/core/serialize.js +3 -1
- package/lib/core/serialize.js.map +1 -1
- package/lib/services/adapters/org-client.d.ts +8 -4
- package/lib/services/adapters/org-client.d.ts.map +1 -1
- package/lib/services/apply.d.ts +1 -12
- package/lib/services/apply.d.ts.map +1 -1
- package/lib/services/apply.js +1 -27
- package/lib/services/apply.js.map +1 -1
- package/lib/services/index.d.ts +0 -1
- package/lib/services/index.d.ts.map +1 -1
- package/lib/services/index.js +0 -1
- package/lib/services/index.js.map +1 -1
- package/lib/services/plan.d.ts +0 -3
- package/lib/services/plan.d.ts.map +1 -1
- package/lib/services/plan.js +2 -8
- package/lib/services/plan.js.map +1 -1
- package/lib/services/resolution.d.ts +2 -1
- package/lib/services/resolution.d.ts.map +1 -1
- package/lib/services/resolution.js +12 -1
- package/lib/services/resolution.js.map +1 -1
- package/lib/services/validate.d.ts +2 -1
- package/lib/services/validate.d.ts.map +1 -1
- package/lib/services/validate.js +10 -1
- package/lib/services/validate.js.map +1 -1
- package/messages/ps.apply.md +2 -34
- package/messages/ps.plan.md +0 -8
- package/messages/ps.validate.md +1 -1
- package/package.json +8 -4
- package/lib/core/plan-file.d.ts +0 -61
- package/lib/core/plan-file.d.ts.map +0 -1
- package/lib/core/plan-file.js +0 -74
- package/lib/core/plan-file.js.map +0 -1
package/lib/core/report.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../src/core/report.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAQ,aAAa,EAAE,MAAM,YAAY,CAAC;AAiBvD,gGAAgG;AAChG,KAAK,aAAa,GAAG;IACjB,IAAI,EAAE,aAAa,CAAC;IACpB,aAAa,EAAE,OAAO,CAAC;CAC1B,CAAC;
|
|
1
|
+
{"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../src/core/report.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAQ,aAAa,EAAE,MAAM,YAAY,CAAC;AAiBvD,gGAAgG;AAChG,KAAK,aAAa,GAAG;IACjB,IAAI,EAAE,aAAa,CAAC;IACpB,aAAa,EAAE,OAAO,CAAC;CAC1B,CAAC;AAqGF;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,GAAG,MAAM,EAAE,CAoBvE"}
|
package/lib/core/report.js
CHANGED
|
@@ -31,12 +31,20 @@ function canonicalExpiration(value) {
|
|
|
31
31
|
}
|
|
32
32
|
/** An assignee line suffixed with its expiration when there is one. */
|
|
33
33
|
function withExpiry(assignee, expiration) {
|
|
34
|
-
|
|
34
|
+
if (!expiration)
|
|
35
|
+
return assignee;
|
|
36
|
+
return `${assignee} expires ${canonicalExpiration(expiration)}`;
|
|
37
|
+
}
|
|
38
|
+
/** A canonical expiration for display, with `never` standing in for no expiration. */
|
|
39
|
+
function expiryOrNever(expiration) {
|
|
40
|
+
if (!expiration)
|
|
41
|
+
return 'never';
|
|
42
|
+
return canonicalExpiration(expiration);
|
|
35
43
|
}
|
|
36
44
|
/** An update line showing the expiration transition, with `never` standing in for no expiration. */
|
|
37
45
|
function withTransition(assignee, previous, next) {
|
|
38
|
-
const from =
|
|
39
|
-
const to =
|
|
46
|
+
const from = expiryOrNever(previous);
|
|
47
|
+
const to = expiryOrNever(next);
|
|
40
48
|
return `${assignee} expires ${from} → ${to}`;
|
|
41
49
|
}
|
|
42
50
|
/** Group a diff into per-kind, per-target buckets, keeping only the operations the mode shows. */
|
|
@@ -71,7 +79,7 @@ function collectBuckets(diff, options) {
|
|
|
71
79
|
function renderBucket(bucket) {
|
|
72
80
|
const entries = [];
|
|
73
81
|
for (const assignee of [...bucket.adds.keys()].sort()) {
|
|
74
|
-
entries.push(` + ${withExpiry(assignee, bucket.adds.get(assignee))}`);
|
|
82
|
+
entries.push(` + ${withExpiry(assignee, bucket.adds.get(assignee) ?? null)}`);
|
|
75
83
|
}
|
|
76
84
|
for (const assignee of [...bucket.updates.keys()].sort()) {
|
|
77
85
|
const change = bucket.updates.get(assignee);
|
|
@@ -80,7 +88,7 @@ function renderBucket(bucket) {
|
|
|
80
88
|
for (const assignee of [...bucket.removes].sort())
|
|
81
89
|
entries.push(` - ${assignee}`);
|
|
82
90
|
for (const assignee of [...bucket.unchanged.keys()].sort()) {
|
|
83
|
-
entries.push(` = ${withExpiry(assignee, bucket.unchanged.get(assignee))}`);
|
|
91
|
+
entries.push(` = ${withExpiry(assignee, bucket.unchanged.get(assignee) ?? null)}`);
|
|
84
92
|
}
|
|
85
93
|
return entries;
|
|
86
94
|
}
|
package/lib/core/report.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/core/report.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAS1C,uFAAuF;AACvF,MAAM,UAAU,GAAyB;IACrC,aAAa,EAAE,iBAAiB;IAChC,kBAAkB,EAAE,uBAAuB;IAC3C,oBAAoB,EAAE,yBAAyB;CAClD,CAAC;AAQF,SAAS,SAAS,CAAC,MAA0C,EAAE,IAAU,EAAE,MAAc;IACrF,IAAI,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACZ,QAAQ,GAAG,IAAI,GAAG,EAAE,CAAC;QACrB,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC/B,CAAC;IAED,IAAI,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAClC,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,MAAM,GAAG,EAAE,IAAI,EAAE,IAAI,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;QAC3F,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC;AAED;;;GAGG;AACH,SAAS,mBAAmB,CAAC,KAAa;IACtC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACjC,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;QAAE,OAAO,KAAK,CAAC;IAEvC,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC;IACjC,OAAO,OAAO,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;AAC3D,CAAC;AAED,uEAAuE;AACvE,SAAS,UAAU,CAAC,QAAgB,EAAE,
|
|
1
|
+
{"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/core/report.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serialize.d.ts","sourceRoot":"","sources":["../../src/core/serialize.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAS/C;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,iBAAiB,EAAE,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"serialize.d.ts","sourceRoot":"","sources":["../../src/core/serialize.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAS/C;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,iBAAiB,EAAE,GAAG,MAAM,CAmC7E"}
|
package/lib/core/serialize.js
CHANGED
|
@@ -21,7 +21,9 @@ export function serializeAssignments(assignments) {
|
|
|
21
21
|
}
|
|
22
22
|
const entries = [...expirationByTarget.keys()].sort().map((target) => {
|
|
23
23
|
const expiration = expirationByTarget.get(target);
|
|
24
|
-
|
|
24
|
+
if (!expiration)
|
|
25
|
+
return target;
|
|
26
|
+
return { name: target, expiration };
|
|
25
27
|
});
|
|
26
28
|
if (entries.length > 0) {
|
|
27
29
|
entry[key] = entries;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serialize.js","sourceRoot":"","sources":["../../src/core/serialize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAEjC,OAAO,EAAE,QAAQ,EAAY,MAAM,gBAAgB,CAAC;AAQpD;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,WAAgC;IACjE,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC5F,MAAM,KAAK,GAAwB,EAAE,CAAC;IAEtC,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAgC,EAAE,CAAC;QAE9C,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,QAAQ,EAAE,CAAC;YACjC,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAC/B,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,KAAK,QAAQ,IAAI,UAAU,CAAC,IAAI,KAAK,IAAI,CAC/E,CAAC;YAEF,MAAM,kBAAkB,GAAG,IAAI,GAAG,
|
|
1
|
+
{"version":3,"file":"serialize.js","sourceRoot":"","sources":["../../src/core/serialize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAEjC,OAAO,EAAE,QAAQ,EAAY,MAAM,gBAAgB,CAAC;AAQpD;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,WAAgC;IACjE,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC5F,MAAM,KAAK,GAAwB,EAAE,CAAC;IAEtC,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAgC,EAAE,CAAC;QAE9C,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,QAAQ,EAAE,CAAC;YACjC,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAC/B,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,KAAK,QAAQ,IAAI,UAAU,CAAC,IAAI,KAAK,IAAI,CAC/E,CAAC;YAEF,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAyB,CAAC;YAC5D,KAAK,MAAM,UAAU,IAAI,QAAQ,EAAE,CAAC;gBAChC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC7C,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC;gBACrE,CAAC;YACL,CAAC;YAED,MAAM,OAAO,GAAsB,CAAC,GAAG,kBAAkB,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;gBACpF,MAAM,UAAU,GAAG,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBAClD,IAAI,CAAC,UAAU;oBAAE,OAAO,MAAM,CAAC;gBAE/B,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;YACxC,CAAC,CAAC,CAAC;YAEH,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrB,KAAK,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;YACzB,CAAC;QACL,CAAC;QAED,KAAK,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC;IAC5B,CAAC;IAED,OAAO,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;AAChC,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ActualAssignment, AssignmentFilter, AssignmentOutcome, AssignmentUpdate, DesiredAssignment,
|
|
1
|
+
import { ActualAssignment, AssignmentFilter, AssignmentOutcome, AssignmentUpdate, DesiredAssignment, OrgTarget, OrgUser, ResolvedAddition, TargetRef } from '../../core/index.js';
|
|
2
2
|
/**
|
|
3
3
|
* Port: the org operations a service needs, in domain terms. Declared here, by the
|
|
4
4
|
* consumer, so services depend on the abstraction and the adapter implements it.
|
|
@@ -6,12 +6,16 @@ import { ActualAssignment, AssignmentFilter, AssignmentOutcome, AssignmentUpdate
|
|
|
6
6
|
export interface OrgClient {
|
|
7
7
|
/** The users that exist in the org, among the given usernames. */
|
|
8
8
|
findUsers(usernames: string[]): Promise<OrgUser[]>;
|
|
9
|
-
/** The
|
|
10
|
-
|
|
9
|
+
/** The permission sets (with ids) that exist in the org, among the given names. */
|
|
10
|
+
findPermissionSets(names: string[]): Promise<OrgTarget[]>;
|
|
11
|
+
/** The permission set groups (with ids) that exist in the org, among the given developer names. */
|
|
12
|
+
findPermissionSetGroups(names: string[]): Promise<OrgTarget[]>;
|
|
13
|
+
/** The permission set licenses (with ids) that exist in the org, among the given developer names. */
|
|
14
|
+
findPermissionSetLicenses(names: string[]): Promise<OrgTarget[]>;
|
|
11
15
|
/** Every assignable permission set, group, and license assignment held by active users, narrowed by the filter. */
|
|
12
16
|
listAssignments(filter?: AssignmentFilter): Promise<DesiredAssignment[]>;
|
|
13
17
|
/** The current assignments of the given managed targets, with their record ids. */
|
|
14
|
-
|
|
18
|
+
listCurrentAssignments(targets: TargetRef[]): Promise<ActualAssignment[]>;
|
|
15
19
|
/** Insert the given assignments, reporting per-record success or failure. */
|
|
16
20
|
addAssignments(additions: ResolvedAddition[]): Promise<AssignmentOutcome[]>;
|
|
17
21
|
/** Update the expiration of the given assignments, reporting per-record success or failure. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"org-client.d.ts","sourceRoot":"","sources":["../../../src/services/adapters/org-client.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,
|
|
1
|
+
{"version":3,"file":"org-client.d.ts","sourceRoot":"","sources":["../../../src/services/adapters/org-client.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,SAAS,EACT,OAAO,EACP,gBAAgB,EAChB,SAAS,EACZ,MAAM,qBAAqB,CAAC;AAE7B;;;GAGG;AACH,MAAM,WAAW,SAAS;IACtB,kEAAkE;IAClE,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IACnD,mFAAmF;IACnF,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IAC1D,mGAAmG;IACnG,uBAAuB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IAC/D,qGAAqG;IACrG,yBAAyB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IACjE,mHAAmH;IACnH,eAAe,CAAC,MAAM,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACzE,mFAAmF;IACnF,sBAAsB,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAC1E,6EAA6E;IAC7E,cAAc,CAAC,SAAS,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAC5E,+FAA+F;IAC/F,iBAAiB,CAAC,OAAO,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAC7E,0FAA0F;IAC1F,iBAAiB,CAAC,QAAQ,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;CACjF"}
|
package/lib/services/apply.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AssignmentOutcome, Diff,
|
|
1
|
+
import { AssignmentOutcome, Diff, Finding } from '../core/index.js';
|
|
2
2
|
import { OrgClient } from './adapters/index.js';
|
|
3
3
|
export type ApplyMode = 'additive' | 'destructive' | 'sync';
|
|
4
4
|
/** How the service asks its caller to approve a destructive batch before applying it. */
|
|
@@ -8,11 +8,6 @@ export type ApplyInput = {
|
|
|
8
8
|
maxDeletes: number;
|
|
9
9
|
dryRun: boolean;
|
|
10
10
|
};
|
|
11
|
-
/** The inputs a saved-plan apply needs. The mode is already baked into the plan. */
|
|
12
|
-
export type ApplyPlanInput = {
|
|
13
|
-
maxDeletes: number;
|
|
14
|
-
dryRun: boolean;
|
|
15
|
-
};
|
|
16
11
|
/** How a run ended, so the command can report and set the exit code. */
|
|
17
12
|
export type ApplyStatus = 'applied' | 'dry-run' | 'declined' | 'max-deletes-exceeded' | 'invalid';
|
|
18
13
|
export type ApplyResult = {
|
|
@@ -39,12 +34,6 @@ export declare class ApplyService {
|
|
|
39
34
|
private readonly confirmDeletions;
|
|
40
35
|
constructor(org: OrgClient, confirmDeletions: ConfirmDeletions);
|
|
41
36
|
run(files: string[], input: ApplyInput): Promise<ApplyResult>;
|
|
42
|
-
/**
|
|
43
|
-
* Apply a saved plan verbatim: no load, resolve, or diff. The plan is already
|
|
44
|
-
* mode-scoped and resolved, so there is no drift and no findings. maxDeletes and
|
|
45
|
-
* the deletion confirmation still guard the run.
|
|
46
|
-
*/
|
|
47
|
-
runPlan(plan: SavedPlan, input: ApplyPlanInput): Promise<ApplyResult>;
|
|
48
37
|
private executeResolved;
|
|
49
38
|
}
|
|
50
39
|
//# sourceMappingURL=apply.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apply.d.ts","sourceRoot":"","sources":["../../src/services/apply.ts"],"names":[],"mappings":"AAAA,OAAO,EAKH,iBAAiB,EAEjB,IAAI,EAEJ,
|
|
1
|
+
{"version":3,"file":"apply.d.ts","sourceRoot":"","sources":["../../src/services/apply.ts"],"names":[],"mappings":"AAAA,OAAO,EAKH,iBAAiB,EAEjB,IAAI,EAEJ,OAAO,EAEV,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAGhD,MAAM,MAAM,SAAS,GAAG,UAAU,GAAG,aAAa,GAAG,MAAM,CAAC;AAE5D,yFAAyF;AACzF,MAAM,MAAM,gBAAgB,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAEnE,MAAM,MAAM,UAAU,GAAG;IACrB,IAAI,EAAE,SAAS,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,wEAAwE;AACxE,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,GAAG,sBAAsB,GAAG,SAAS,CAAC;AAElG,MAAM,MAAM,WAAW,GAAG;IACtB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,IAAI,EAAE,IAAI,CAAC;IACX,+DAA+D;IAC/D,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1D,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;CACnB,CAAC;AAiBF;;;;GAIG;AACH,qBAAa,YAAY;IAEjB,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,gBAAgB;gBADhB,GAAG,EAAE,SAAS,EACd,gBAAgB,EAAE,gBAAgB;IAG1C,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC;YAqD5D,eAAe;CAiBhC"}
|
package/lib/services/apply.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { loadFiles, diffAssignments, scopeToMode, countFindings, } from '../core/index.js';
|
|
2
2
|
import { ResolutionService, managedTargets, resolveAdditions } from './resolution.js';
|
|
3
|
-
const noDrift = { adds: 0, updates: 0, removes: 0 };
|
|
4
3
|
const emptyDiff = { toAdd: [], toUpdate: [], toRemove: [], unchanged: [] };
|
|
5
4
|
/** An aborted-before-any-change result, carrying the findings that explain why. */
|
|
6
5
|
function invalidResult(files, findings) {
|
|
@@ -42,7 +41,7 @@ export class ApplyService {
|
|
|
42
41
|
if (findingCounts.errors > 0) {
|
|
43
42
|
return invalidResult(loaded.files, findings);
|
|
44
43
|
}
|
|
45
|
-
const actual = await this.org.
|
|
44
|
+
const actual = await this.org.listCurrentAssignments(managedTargets(resolution));
|
|
46
45
|
const diff = diffAssignments(loaded.assignments, actual);
|
|
47
46
|
const { mode, maxDeletes, dryRun } = input;
|
|
48
47
|
const { additions, updates, removals, drift } = scopeToMode(diff, mode);
|
|
@@ -70,31 +69,6 @@ export class ApplyService {
|
|
|
70
69
|
const failed = outcomes.some((outcome) => !outcome.success);
|
|
71
70
|
return { files: loaded.files, findings, diff, drift, outcomes, status: 'applied', failed };
|
|
72
71
|
}
|
|
73
|
-
/**
|
|
74
|
-
* Apply a saved plan verbatim: no load, resolve, or diff. The plan is already
|
|
75
|
-
* mode-scoped and resolved, so there is no drift and no findings. maxDeletes and
|
|
76
|
-
* the deletion confirmation still guard the run.
|
|
77
|
-
*/
|
|
78
|
-
async runPlan(plan, input) {
|
|
79
|
-
const diff = { toAdd: plan.add, toUpdate: plan.update, toRemove: plan.remove, unchanged: [] };
|
|
80
|
-
const { maxDeletes, dryRun } = input;
|
|
81
|
-
const base = { files: [], findings: [], diff, drift: noDrift, outcomes: [] };
|
|
82
|
-
if (plan.remove.length > maxDeletes) {
|
|
83
|
-
return { ...base, status: 'max-deletes-exceeded', failed: true };
|
|
84
|
-
}
|
|
85
|
-
if (dryRun) {
|
|
86
|
-
return { ...base, status: 'dry-run', failed: false };
|
|
87
|
-
}
|
|
88
|
-
if (plan.remove.length > 0) {
|
|
89
|
-
const confirmed = await this.confirmDeletions(plan.remove.length);
|
|
90
|
-
if (!confirmed) {
|
|
91
|
-
return { ...base, status: 'declined', failed: false };
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
const outcomes = await this.executeResolved(plan.add, plan.update, plan.remove);
|
|
95
|
-
const failed = outcomes.some((outcome) => !outcome.success);
|
|
96
|
-
return { ...base, outcomes, status: 'applied', failed };
|
|
97
|
-
}
|
|
98
72
|
async executeResolved(additions, updates, removals) {
|
|
99
73
|
const [added, updated, removed] = await Promise.all([
|
|
100
74
|
additions.length > 0 ? this.org.addAssignments(additions) : Promise.resolve([]),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apply.js","sourceRoot":"","sources":["../../src/services/apply.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,SAAS,EACT,eAAe,EACf,WAAW,
|
|
1
|
+
{"version":3,"file":"apply.js","sourceRoot":"","sources":["../../src/services/apply.ts"],"names":[],"mappings":"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"}
|
package/lib/services/index.d.ts
CHANGED
|
@@ -2,6 +2,5 @@ export { ApplyService, ConfirmDeletions, ApplyResult } from './apply.js';
|
|
|
2
2
|
export { CheckService } from './check.js';
|
|
3
3
|
export { ExportService } from './export.js';
|
|
4
4
|
export { PlanService } from './plan.js';
|
|
5
|
-
export { Resolution, resolveAdditions } from './resolution.js';
|
|
6
5
|
export { ValidateService } from './validate.js';
|
|
7
6
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC"}
|
package/lib/services/index.js
CHANGED
|
@@ -2,6 +2,5 @@ export { ApplyService } from './apply.js';
|
|
|
2
2
|
export { CheckService } from './check.js';
|
|
3
3
|
export { ExportService } from './export.js';
|
|
4
4
|
export { PlanService } from './plan.js';
|
|
5
|
-
export { resolveAdditions } from './resolution.js';
|
|
6
5
|
export { ValidateService } from './validate.js';
|
|
7
6
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAiC,MAAM,YAAY,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAiC,MAAM,YAAY,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC"}
|
package/lib/services/plan.d.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { Diff, Finding } from '../core/index.js';
|
|
2
2
|
import { OrgClient } from './adapters/index.js';
|
|
3
|
-
import { Resolution } from './resolution.js';
|
|
4
3
|
export type PlanMode = 'additive' | 'destructive' | 'sync';
|
|
5
4
|
/** How a run ended, so the command can report and set the exit code. */
|
|
6
5
|
export type PlanStatus = 'planned' | 'invalid';
|
|
@@ -14,8 +13,6 @@ export type PlanResult = {
|
|
|
14
13
|
updates: number;
|
|
15
14
|
removes: number;
|
|
16
15
|
};
|
|
17
|
-
/** The resolved id maps, so callers can freeze a plan without re-resolving. */
|
|
18
|
-
resolution: Resolution;
|
|
19
16
|
status: PlanStatus;
|
|
20
17
|
};
|
|
21
18
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../src/services/plan.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,IAAI,EAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../src/services/plan.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,IAAI,EAAE,OAAO,EAAiB,MAAM,kBAAkB,CAAC;AAC5F,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAGhD,MAAM,MAAM,QAAQ,GAAG,UAAU,GAAG,aAAa,GAAG,MAAM,CAAC;AAE3D,wEAAwE;AACxE,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;AAE/C,MAAM,MAAM,UAAU,GAAG;IACrB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,IAAI,EAAE,IAAI,CAAC;IACX,iEAAiE;IACjE,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1D,MAAM,EAAE,UAAU,CAAC;CACtB,CAAC;AAeF;;;;;GAKG;AACH,qBAAa,WAAW;IACD,OAAO,CAAC,QAAQ,CAAC,GAAG;gBAAH,GAAG,EAAE,SAAS;IAErC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC;CA4BzE"}
|
package/lib/services/plan.js
CHANGED
|
@@ -1,11 +1,6 @@
|
|
|
1
1
|
import { loadFiles, diffAssignments, countFindings } from '../core/index.js';
|
|
2
2
|
import { ResolutionService, managedTargets } from './resolution.js';
|
|
3
3
|
const emptyDiff = { toAdd: [], toUpdate: [], toRemove: [], unchanged: [] };
|
|
4
|
-
const emptyResolution = {
|
|
5
|
-
findings: [],
|
|
6
|
-
userIds: new Map(),
|
|
7
|
-
targetIds: {},
|
|
8
|
-
};
|
|
9
4
|
/** An aborted-before-the-diff result, carrying the findings that explain why. */
|
|
10
5
|
function invalidResult(files, findings) {
|
|
11
6
|
return {
|
|
@@ -13,7 +8,6 @@ function invalidResult(files, findings) {
|
|
|
13
8
|
findings,
|
|
14
9
|
diff: emptyDiff,
|
|
15
10
|
drift: { adds: 0, updates: 0, removes: 0 },
|
|
16
|
-
resolution: emptyResolution,
|
|
17
11
|
status: 'invalid',
|
|
18
12
|
};
|
|
19
13
|
}
|
|
@@ -44,14 +38,14 @@ export class PlanService {
|
|
|
44
38
|
if (findingCounts.errors > 0) {
|
|
45
39
|
return invalidResult(loaded.files, findings);
|
|
46
40
|
}
|
|
47
|
-
const actual = await this.org.
|
|
41
|
+
const actual = await this.org.listCurrentAssignments(managedTargets(resolution));
|
|
48
42
|
const diff = diffAssignments(loaded.assignments, actual);
|
|
49
43
|
const drift = {
|
|
50
44
|
adds: mode === 'destructive' ? diff.toAdd.length : 0,
|
|
51
45
|
updates: mode === 'destructive' ? diff.toUpdate.length : 0,
|
|
52
46
|
removes: mode === 'additive' ? diff.toRemove.length : 0,
|
|
53
47
|
};
|
|
54
|
-
return { files: loaded.files, findings, diff, drift,
|
|
48
|
+
return { files: loaded.files, findings, diff, drift, status: 'planned' };
|
|
55
49
|
}
|
|
56
50
|
}
|
|
57
51
|
//# sourceMappingURL=plan.js.map
|
package/lib/services/plan.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../../src/services/plan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../../src/services/plan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,eAAe,EAAiB,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAE5F,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAgBpE,MAAM,SAAS,GAAS,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;AAEjF,iFAAiF;AACjF,SAAS,aAAa,CAAC,KAAe,EAAE,QAAmB;IACvD,OAAO;QACH,KAAK;QACL,QAAQ;QACR,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE;QAC1C,MAAM,EAAE,SAAS;KACpB,CAAC;AACN,CAAC;AAED;;;;;GAKG;AACH,MAAM,OAAO,WAAW;IACgB;IAApC,YAAoC,GAAc;QAAd,QAAG,GAAH,GAAG,CAAW;IAAG,CAAC;IAE/C,KAAK,CAAC,GAAG,CAAC,KAAe,EAAE,IAAc;QAC5C,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,KAAK,CAAC,CAAC;QACtC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAClD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,OAAO,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QACxD,CAAC;QAED,MAAM,iBAAiB,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC1D,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QACnE,MAAM,QAAQ,GAAG;YACb,GAAG,MAAM,CAAC,QAAQ;YAClB,GAAG,UAAU,CAAC,QAAQ;SACzB,CAAC;QACF,MAAM,aAAa,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;QAC9C,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,OAAO,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACjD,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,sBAAsB,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;QACjF,MAAM,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QACzD,MAAM,KAAK,GAAG;YACV,IAAI,EAAE,IAAI,KAAK,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACpD,OAAO,EAAE,IAAI,KAAK,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC1D,OAAO,EAAE,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;SAC1D,CAAC;QAEF,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IAC7E,CAAC;CACJ"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DesiredAssignment, Kind, ResolvedAddition, TargetRef, Finding } from '../core/index.js';
|
|
1
|
+
import { DesiredAssignment, Kind, OrgTarget, ResolvedAddition, TargetRef, Finding } from '../core/index.js';
|
|
2
2
|
import { OrgClient } from './adapters/index.js';
|
|
3
3
|
export type Resolution = {
|
|
4
4
|
findings: Finding[];
|
|
@@ -13,5 +13,6 @@ export declare class ResolutionService {
|
|
|
13
13
|
private readonly org;
|
|
14
14
|
constructor(org: OrgClient);
|
|
15
15
|
run(assignments: DesiredAssignment[]): Promise<Resolution>;
|
|
16
|
+
findTargetsOfKind(kind: Kind, names: string[]): Promise<OrgTarget[]>;
|
|
16
17
|
}
|
|
17
18
|
//# sourceMappingURL=resolution.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolution.d.ts","sourceRoot":"","sources":["../../src/services/resolution.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,iBAAiB,EACjB,IAAI,
|
|
1
|
+
{"version":3,"file":"resolution.d.ts","sourceRoot":"","sources":["../../src/services/resolution.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,iBAAiB,EACjB,IAAI,EACJ,SAAS,EAET,gBAAgB,EAChB,SAAS,EACT,OAAO,EAQV,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD,MAAM,MAAM,UAAU,GAAG;IACrB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CAChD,CAAC;AAEF,wBAAgB,cAAc,CAAC,UAAU,EAAE,UAAU,GAAG,SAAS,EAAE,CAQlE;AAED,2FAA2F;AAC3F,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,iBAAiB,EAAE,EAAE,UAAU,EAAE,UAAU,GAAG,gBAAgB,EAAE,CAM3G;AAED,gGAAgG;AAChG,qBAAa,iBAAiB;IACP,OAAO,CAAC,QAAQ,CAAC,GAAG;gBAAH,GAAG,EAAE,SAAS;IAErC,GAAG,CAAC,WAAW,EAAE,iBAAiB,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC;IAuCvE,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;CAOvE"}
|
|
@@ -27,7 +27,9 @@ export class ResolutionService {
|
|
|
27
27
|
const targetsByKind = kinds.map((kind) => ({ kind, targets: distinctTargets(assignments, kind) }));
|
|
28
28
|
const usersTask = usernames.length > 0 ? this.org.findUsers(usernames) : Promise.resolve([]);
|
|
29
29
|
const targetsTask = Promise.all(targetsByKind.map(async ({ kind, targets }) => {
|
|
30
|
-
|
|
30
|
+
if (targets.length === 0)
|
|
31
|
+
return { kind, targets, found: [] };
|
|
32
|
+
const found = await this.findTargetsOfKind(kind, targets);
|
|
31
33
|
return { kind, targets, found };
|
|
32
34
|
}));
|
|
33
35
|
const [foundUsers, perKind] = await Promise.all([
|
|
@@ -44,5 +46,14 @@ export class ResolutionService {
|
|
|
44
46
|
}
|
|
45
47
|
return { findings, userIds: indexUsersById(foundUsers), targetIds };
|
|
46
48
|
}
|
|
49
|
+
findTargetsOfKind(kind, names) {
|
|
50
|
+
if (kind === 'permissionSet')
|
|
51
|
+
return this.org.findPermissionSets(names);
|
|
52
|
+
if (kind === 'permissionSetGroup')
|
|
53
|
+
return this.org.findPermissionSetGroups(names);
|
|
54
|
+
if (kind === 'permissionSetLicense')
|
|
55
|
+
return this.org.findPermissionSetLicenses(names);
|
|
56
|
+
throw new Error(`Unsupported kind: ${String(kind)}`);
|
|
57
|
+
}
|
|
47
58
|
}
|
|
48
59
|
//# sourceMappingURL=resolution.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolution.js","sourceRoot":"","sources":["../../src/services/resolution.ts"],"names":[],"mappings":"AAAA,OAAO,EAQH,KAAK,EACL,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,eAAe,EACf,cAAc,EACd,gBAAgB,GACnB,MAAM,kBAAkB,CAAC;AAS1B,MAAM,UAAU,cAAc,CAAC,UAAsB;IACjD,MAAM,IAAI,GAAgB,EAAE,CAAC;IAC7B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACvB,KAAK,MAAM,EAAE,IAAI,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;YACnD,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QAC5B,CAAC;IACL,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,gBAAgB,CAAC,SAA8B,EAAE,UAAsB;IACnF,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAChC,GAAG,QAAQ;QACX,UAAU,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE;QACzE,QAAQ,EAAE,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE;KACzF,CAAC,CAAC,CAAC;AACR,CAAC;AAED,gGAAgG;AAChG,MAAM,OAAO,iBAAiB;IACU;IAApC,YAAoC,GAAc;QAAd,QAAG,GAAH,GAAG,CAAW;
|
|
1
|
+
{"version":3,"file":"resolution.js","sourceRoot":"","sources":["../../src/services/resolution.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DesiredAssignment, Finding } from '../core/index.js';
|
|
1
|
+
import { DesiredAssignment, Finding, Kind, OrgTarget } from '../core/index.js';
|
|
2
2
|
import { OrgClient } from './adapters/index.js';
|
|
3
3
|
export type ValidateResult = {
|
|
4
4
|
files: string[];
|
|
@@ -17,5 +17,6 @@ export declare class ValidateService {
|
|
|
17
17
|
private resolve;
|
|
18
18
|
private evaluateUserRefs;
|
|
19
19
|
private evaluateTargetRefs;
|
|
20
|
+
findTargetsOfKind(kind: Kind, names: string[]): Promise<OrgTarget[]>;
|
|
20
21
|
}
|
|
21
22
|
//# sourceMappingURL=validate.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/services/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAOH,iBAAiB,EACjB,OAAO,
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/services/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAOH,iBAAiB,EACjB,OAAO,EACP,IAAI,EAEJ,SAAS,EACZ,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD,MAAM,MAAM,cAAc,GAAG;IACzB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,EAAE,iBAAiB,EAAE,CAAC;IACjC,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,oEAAoE;AACpE,qBAAa,eAAe;IACL,OAAO,CAAC,QAAQ,CAAC,GAAG;gBAAH,GAAG,EAAE,SAAS;IAErC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC;IAoB1D,iFAAiF;YACnE,OAAO;YAmBP,gBAAgB;YAKhB,kBAAkB;IAShC,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;CAOvE"}
|
package/lib/services/validate.js
CHANGED
|
@@ -43,8 +43,17 @@ export class ValidateService {
|
|
|
43
43
|
return evaluateUsers(usernames, found);
|
|
44
44
|
}
|
|
45
45
|
async evaluateTargetRefs(kind, targets) {
|
|
46
|
-
const found = await this.
|
|
46
|
+
const found = await this.findTargetsOfKind(kind, targets);
|
|
47
47
|
return evaluateTargets(kind, targets, found.map((target) => target.name));
|
|
48
48
|
}
|
|
49
|
+
findTargetsOfKind(kind, names) {
|
|
50
|
+
if (kind === 'permissionSet')
|
|
51
|
+
return this.org.findPermissionSets(names);
|
|
52
|
+
if (kind === 'permissionSetGroup')
|
|
53
|
+
return this.org.findPermissionSetGroups(names);
|
|
54
|
+
if (kind === 'permissionSetLicense')
|
|
55
|
+
return this.org.findPermissionSetLicenses(names);
|
|
56
|
+
throw new Error(`Unsupported kind: ${String(kind)}`);
|
|
57
|
+
}
|
|
49
58
|
}
|
|
50
59
|
//# sourceMappingURL=validate.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/services/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,SAAS,EACT,KAAK,EACL,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,eAAe,EAIf,aAAa,
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/services/validate.ts"],"names":[],"mappings":"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"}
|
package/messages/ps.apply.md
CHANGED
|
@@ -8,15 +8,11 @@ Load the files, resolve every user and target against the org, diff the desired
|
|
|
8
8
|
|
|
9
9
|
# flags.file.summary
|
|
10
10
|
|
|
11
|
-
YAML file or glob to apply. Repeatable.
|
|
12
|
-
|
|
13
|
-
# flags.plan.summary
|
|
14
|
-
|
|
15
|
-
Apply a saved plan file from plan --out, running the reviewed change set verbatim. Provide either this or --file.
|
|
11
|
+
YAML file or glob to apply. Repeatable.
|
|
16
12
|
|
|
17
13
|
# flags.mode.summary
|
|
18
14
|
|
|
19
|
-
Which half of the reconcile to run: additive adds missing assignments and updates expirations, destructive removes only, sync does both.
|
|
15
|
+
Which half of the reconcile to run: additive adds missing assignments and updates expirations, destructive removes only, sync does both.
|
|
20
16
|
|
|
21
17
|
# flags.max-deletes.summary
|
|
22
18
|
|
|
@@ -34,10 +30,6 @@ List assignments that already match, instead of only counting them.
|
|
|
34
30
|
|
|
35
31
|
Skip the deletion confirmation prompt. Required to delete in JSON or other non-interactive runs.
|
|
36
32
|
|
|
37
|
-
# info.applyingPlan
|
|
38
|
-
|
|
39
|
-
Applying saved plan (mode %s).
|
|
40
|
-
|
|
41
33
|
# confirm.delete
|
|
42
34
|
|
|
43
35
|
This will remove %s assignment(s) from the org. Continue?
|
|
@@ -62,30 +54,6 @@ Aborted at the confirmation prompt. Nothing was changed.
|
|
|
62
54
|
|
|
63
55
|
failed to %s %s on %s: %s
|
|
64
56
|
|
|
65
|
-
# error.sourceConflict
|
|
66
|
-
|
|
67
|
-
Pass either --file or --plan, not both. --plan runs a saved plan; --file reads and diffs the YAML now.
|
|
68
|
-
|
|
69
|
-
# error.sourceMissing
|
|
70
|
-
|
|
71
|
-
Provide a source to apply: --file <glob> to read the YAML now, or --plan <file> to run a saved plan.
|
|
72
|
-
|
|
73
|
-
# error.modeWithPlan
|
|
74
|
-
|
|
75
|
-
--mode cannot be combined with --plan. A saved plan already carries the mode it was computed for. Re-run plan with the mode you want to get a new plan.
|
|
76
|
-
|
|
77
|
-
# error.planRead
|
|
78
|
-
|
|
79
|
-
Could not read the plan file: %s
|
|
80
|
-
|
|
81
|
-
# error.planInvalid
|
|
82
|
-
|
|
83
|
-
The plan file %s is not a valid plan: %s. Regenerate it with plan --out.
|
|
84
|
-
|
|
85
|
-
# error.planOrg
|
|
86
|
-
|
|
87
|
-
This plan was built for org %s but the target org is %s. Regenerate the plan against the target org.
|
|
88
|
-
|
|
89
57
|
# error.invalid
|
|
90
58
|
|
|
91
59
|
The files do not resolve cleanly against the org. Fix the errors above, then re-run.
|
package/messages/ps.plan.md
CHANGED
|
@@ -18,14 +18,6 @@ Which half of the reconcile to preview: additive adds and updates expirations, d
|
|
|
18
18
|
|
|
19
19
|
List assignments that already match, instead of only counting them.
|
|
20
20
|
|
|
21
|
-
# flags.out.summary
|
|
22
|
-
|
|
23
|
-
Write the computed change set to a plan file that apply can run verbatim with --plan.
|
|
24
|
-
|
|
25
|
-
# summary.wrotePlan
|
|
26
|
-
|
|
27
|
-
Wrote a plan with %s change(s) to %s. Apply it with: ps apply --plan %s
|
|
28
|
-
|
|
29
21
|
# header.title
|
|
30
22
|
|
|
31
23
|
Permission Set Assignments Plan
|
package/messages/ps.validate.md
CHANGED
|
@@ -22,7 +22,7 @@ Validation found problems. See the output above.
|
|
|
22
22
|
|
|
23
23
|
- Validate every file under permissions against the dev org:
|
|
24
24
|
|
|
25
|
-
<%= config.bin %> <%= command.id %> --file "permissions
|
|
25
|
+
<%= config.bin %> <%= command.id %> --file "permissions/*.yml" --target-org dev
|
|
26
26
|
|
|
27
27
|
- Validate specific files against a named org:
|
|
28
28
|
|
package/package.json
CHANGED
|
@@ -99,7 +99,7 @@
|
|
|
99
99
|
"files": [
|
|
100
100
|
"src/**/*.ts",
|
|
101
101
|
"messages/**",
|
|
102
|
-
"
|
|
102
|
+
"eslint.config.js",
|
|
103
103
|
"**/tsconfig.json"
|
|
104
104
|
],
|
|
105
105
|
"output": []
|
|
@@ -110,11 +110,15 @@
|
|
|
110
110
|
"compile"
|
|
111
111
|
],
|
|
112
112
|
"env": {
|
|
113
|
-
"FORCE_COLOR": "2"
|
|
113
|
+
"FORCE_COLOR": "2",
|
|
114
|
+
"PS_TARGET_ORG": {
|
|
115
|
+
"external": true
|
|
116
|
+
}
|
|
114
117
|
},
|
|
115
118
|
"files": [
|
|
116
119
|
"test/**",
|
|
117
|
-
"vitest.config.js"
|
|
120
|
+
"vitest.config.js",
|
|
121
|
+
".env"
|
|
118
122
|
],
|
|
119
123
|
"output": []
|
|
120
124
|
}
|
|
@@ -122,5 +126,5 @@
|
|
|
122
126
|
"exports": "./lib/index.js",
|
|
123
127
|
"type": "module",
|
|
124
128
|
"author": "Isaac Ferreira",
|
|
125
|
-
"version": "0.
|
|
129
|
+
"version": "0.5.0"
|
|
126
130
|
}
|