@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,77 @@
|
|
|
1
|
+
import { DefinitionError } from '../provisioning/errors.js';
|
|
2
|
+
import { personaDefinitionsFileSchema } from './personaDefinitions.js';
|
|
3
|
+
import { relatedCatalogSchema } from './relatedCatalog.js';
|
|
4
|
+
import { snapshotFileSchema } from './snapshot.js';
|
|
5
|
+
import { usersDefinitionFileSchema } from './usersDefinition.js';
|
|
6
|
+
const issuesFrom = (issues) => issues.map(({ path, message }) => ({
|
|
7
|
+
path: path.filter((part) => typeof part === 'string' || typeof part === 'number'),
|
|
8
|
+
message,
|
|
9
|
+
}));
|
|
10
|
+
const issueText = (issues) => issues.map(({ path, message }) => `${path.length > 0 ? path.join('.') : '$'}: ${message}`).join('\n');
|
|
11
|
+
const versionIssue = (path) => ({
|
|
12
|
+
path,
|
|
13
|
+
message: 'Unsupported schemaVersion; this reader supports version 1.',
|
|
14
|
+
});
|
|
15
|
+
const unsupportedSchemaVersion = (input) => {
|
|
16
|
+
if (!input || typeof input !== 'object' || !('schemaVersion' in input))
|
|
17
|
+
return undefined;
|
|
18
|
+
const schemaVersion = input.schemaVersion;
|
|
19
|
+
if (typeof schemaVersion !== 'number' || !Number.isInteger(schemaVersion) || schemaVersion <= 1)
|
|
20
|
+
return undefined;
|
|
21
|
+
const issues = [versionIssue(['schemaVersion'])];
|
|
22
|
+
return {
|
|
23
|
+
ok: false,
|
|
24
|
+
issues,
|
|
25
|
+
error: new DefinitionError('schema-version-unsupported', issueText(issues), { issues }),
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
const parseSchema = (schema, input) => {
|
|
29
|
+
const parsed = schema.safeParse(input);
|
|
30
|
+
if (!parsed.success) {
|
|
31
|
+
const issues = issuesFrom(parsed.error.issues);
|
|
32
|
+
return {
|
|
33
|
+
ok: false,
|
|
34
|
+
issues,
|
|
35
|
+
error: new DefinitionError('schema-invalid', issueText(issues), { issues }),
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
return { ok: true, data: parsed.data, issues: [] };
|
|
39
|
+
};
|
|
40
|
+
const parseVersionedSchema = (schema, input) => {
|
|
41
|
+
const unsupported = unsupportedSchemaVersion(input);
|
|
42
|
+
return unsupported ?? parseSchema(schema, input);
|
|
43
|
+
};
|
|
44
|
+
const parseOrThrow = (result) => {
|
|
45
|
+
if (!result.ok)
|
|
46
|
+
throw result.error;
|
|
47
|
+
return result.data;
|
|
48
|
+
};
|
|
49
|
+
const parseText = (parse, text, label) => {
|
|
50
|
+
try {
|
|
51
|
+
return parse(JSON.parse(text));
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
if (error instanceof SyntaxError) {
|
|
55
|
+
const issues = [{ path: [], message: `Invalid JSON: ${error.message}` }];
|
|
56
|
+
return {
|
|
57
|
+
ok: false,
|
|
58
|
+
issues,
|
|
59
|
+
error: new DefinitionError('schema-invalid', `${label}: ${issueText(issues)}`, { issues }),
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
throw error;
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
export const safeParsePersonaDefinitions = (input) => parseVersionedSchema(personaDefinitionsFileSchema, input);
|
|
66
|
+
export const parsePersonaDefinitions = (input) => parseOrThrow(safeParsePersonaDefinitions(input));
|
|
67
|
+
export const validatePersonaDefinitionsText = (text) => parseText((input) => parseVersionedSchema(personaDefinitionsFileSchema, input), text, 'Persona definitions');
|
|
68
|
+
export const safeParseUsersDefinition = (input) => parseVersionedSchema(usersDefinitionFileSchema, input);
|
|
69
|
+
export const parseUsersDefinition = (input) => parseOrThrow(safeParseUsersDefinition(input));
|
|
70
|
+
export const validateUsersDefinitionText = (text) => parseText((input) => parseVersionedSchema(usersDefinitionFileSchema, input), text, 'Users definition');
|
|
71
|
+
export const safeParseRelatedCatalog = (input) => parseVersionedSchema(relatedCatalogSchema, input);
|
|
72
|
+
export const parseRelatedCatalog = (input) => parseOrThrow(safeParseRelatedCatalog(input));
|
|
73
|
+
export const validateRelatedCatalogText = (text) => parseText((input) => parseVersionedSchema(relatedCatalogSchema, input), text, 'Related catalog');
|
|
74
|
+
export const safeParseSnapshot = (input) => parseSchema(snapshotFileSchema, input);
|
|
75
|
+
export const parseSnapshot = (input) => parseOrThrow(safeParseSnapshot(input));
|
|
76
|
+
export const validateSnapshotText = (text) => parseText((input) => parseSchema(snapshotFileSchema, input), text, 'Snapshot');
|
|
77
|
+
//# sourceMappingURL=parse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/spec/parse.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const personaSchema: z.ZodObject<{
|
|
3
|
+
profile: z.ZodOptional<z.ZodString>;
|
|
4
|
+
role: z.ZodOptional<z.ZodString>;
|
|
5
|
+
permissionSetMode: z.ZodOptional<z.ZodEnum<{
|
|
6
|
+
additive: "additive";
|
|
7
|
+
sync: "sync";
|
|
8
|
+
}>>;
|
|
9
|
+
permissionSetGroupMode: z.ZodOptional<z.ZodEnum<{
|
|
10
|
+
additive: "additive";
|
|
11
|
+
sync: "sync";
|
|
12
|
+
}>>;
|
|
13
|
+
publicGroupMode: z.ZodOptional<z.ZodEnum<{
|
|
14
|
+
additive: "additive";
|
|
15
|
+
sync: "sync";
|
|
16
|
+
}>>;
|
|
17
|
+
queueMode: z.ZodOptional<z.ZodEnum<{
|
|
18
|
+
additive: "additive";
|
|
19
|
+
sync: "sync";
|
|
20
|
+
}>>;
|
|
21
|
+
permissionSets: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
22
|
+
permissionSetGroups: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
23
|
+
publicGroups: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
24
|
+
queues: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
25
|
+
userAttributes: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
26
|
+
}, z.core.$loose>;
|
|
27
|
+
export declare const personaDefinitionsFileSchema: z.ZodObject<{
|
|
28
|
+
schemaVersion: z.ZodOptional<z.ZodLiteral<1>>;
|
|
29
|
+
personas: z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
30
|
+
profile: z.ZodOptional<z.ZodString>;
|
|
31
|
+
role: z.ZodOptional<z.ZodString>;
|
|
32
|
+
permissionSetMode: z.ZodOptional<z.ZodEnum<{
|
|
33
|
+
additive: "additive";
|
|
34
|
+
sync: "sync";
|
|
35
|
+
}>>;
|
|
36
|
+
permissionSetGroupMode: z.ZodOptional<z.ZodEnum<{
|
|
37
|
+
additive: "additive";
|
|
38
|
+
sync: "sync";
|
|
39
|
+
}>>;
|
|
40
|
+
publicGroupMode: z.ZodOptional<z.ZodEnum<{
|
|
41
|
+
additive: "additive";
|
|
42
|
+
sync: "sync";
|
|
43
|
+
}>>;
|
|
44
|
+
queueMode: z.ZodOptional<z.ZodEnum<{
|
|
45
|
+
additive: "additive";
|
|
46
|
+
sync: "sync";
|
|
47
|
+
}>>;
|
|
48
|
+
permissionSets: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
49
|
+
permissionSetGroups: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
50
|
+
publicGroups: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
51
|
+
queues: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
52
|
+
userAttributes: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
53
|
+
}, z.core.$loose>>;
|
|
54
|
+
}, z.core.$loose>;
|
|
55
|
+
export type PersonaDefinition = z.infer<typeof personaSchema>;
|
|
56
|
+
export type PersonaDefinitionsFile = z.infer<typeof personaDefinitionsFileSchema>;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
const schemaVersionSchema = z.literal(1).optional().describe('Supported file schema version. Omit it for version 1.');
|
|
3
|
+
const assignmentModeSchema = z.enum(['additive', 'sync']).describe('How assignments are applied.');
|
|
4
|
+
export const personaSchema = z
|
|
5
|
+
.looseObject({
|
|
6
|
+
profile: z.string().optional().describe('Profile name or Salesforce Id.'),
|
|
7
|
+
role: z.string().optional().describe('Role name or Salesforce Id.'),
|
|
8
|
+
permissionSetMode: assignmentModeSchema.optional().describe('Permission Set assignment mode.'),
|
|
9
|
+
permissionSetGroupMode: assignmentModeSchema.optional().describe('Permission Set Group assignment mode.'),
|
|
10
|
+
publicGroupMode: assignmentModeSchema.optional().describe('Public Group assignment mode.'),
|
|
11
|
+
queueMode: assignmentModeSchema.optional().describe('Queue assignment mode.'),
|
|
12
|
+
permissionSets: z.array(z.string()).optional().describe('Permission Set names or Salesforce Ids.'),
|
|
13
|
+
permissionSetGroups: z.array(z.string()).optional().describe('Permission Set Group names or Salesforce Ids.'),
|
|
14
|
+
publicGroups: z.array(z.string()).optional().describe('Public Group names or Salesforce Ids.'),
|
|
15
|
+
queues: z.array(z.string()).optional().describe('Queue names or Salesforce Ids.'),
|
|
16
|
+
userAttributes: z.record(z.string(), z.unknown()).optional().describe('User fields applied by this persona.'),
|
|
17
|
+
})
|
|
18
|
+
.describe('A reusable set of User fields and assignments. Unknown metadata keys are preserved.');
|
|
19
|
+
export const personaDefinitionsFileSchema = z
|
|
20
|
+
.looseObject({
|
|
21
|
+
schemaVersion: schemaVersionSchema,
|
|
22
|
+
personas: z.record(z.string(), personaSchema).describe('Persona definitions keyed by persona name.'),
|
|
23
|
+
})
|
|
24
|
+
.describe('A Warden persona definitions file.');
|
|
25
|
+
//# sourceMappingURL=personaDefinitions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"personaDefinitions.js","sourceRoot":"","sources":["../../src/spec/personaDefinitions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,mBAAmB,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uDAAuD,CAAC,CAAC;AAEtH,MAAM,oBAAoB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,8BAA8B,CAAC,CAAC;AAEnG,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC;KAC3B,WAAW,CAAC;IACX,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;IACzE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;IACnE,iBAAiB,EAAE,oBAAoB,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;IAC9F,sBAAsB,EAAE,oBAAoB,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;IACzG,eAAe,EAAE,oBAAoB,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;IAC1F,SAAS,EAAE,oBAAoB,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;IAC7E,cAAc,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;IAClG,mBAAmB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC;IAC7G,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;IAC9F,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;IACjF,cAAc,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;CAC9G,CAAC;KACD,QAAQ,CAAC,qFAAqF,CAAC,CAAC;AAEnG,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC;KAC1C,WAAW,CAAC;IACX,aAAa,EAAE,mBAAmB;IAClC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,aAAa,CAAC,CAAC,QAAQ,CAAC,4CAA4C,CAAC;CACrG,CAAC;KACD,QAAQ,CAAC,oCAAoC,CAAC,CAAC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
declare const sourceExprSchema: z.ZodUnion<readonly [z.ZodObject<{
|
|
3
|
+
from: z.ZodString;
|
|
4
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
5
|
+
value: z.ZodUnknown;
|
|
6
|
+
}, z.core.$strict>]>;
|
|
7
|
+
export declare const relationshipDefSchema: z.ZodObject<{
|
|
8
|
+
sobject: z.ZodString;
|
|
9
|
+
phase: z.ZodEnum<{
|
|
10
|
+
before: "before";
|
|
11
|
+
after: "after";
|
|
12
|
+
}>;
|
|
13
|
+
recordType: z.ZodNullable<z.ZodOptional<z.ZodObject<{
|
|
14
|
+
developerName: z.ZodString;
|
|
15
|
+
}, z.core.$loose>>>;
|
|
16
|
+
match: z.ZodObject<{
|
|
17
|
+
field: z.ZodString;
|
|
18
|
+
from: z.ZodString;
|
|
19
|
+
}, z.core.$loose>;
|
|
20
|
+
fields: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodObject<{
|
|
21
|
+
from: z.ZodString;
|
|
22
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
23
|
+
value: z.ZodUnknown;
|
|
24
|
+
}, z.core.$strict>]>>;
|
|
25
|
+
mode: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
|
|
26
|
+
sync: "sync";
|
|
27
|
+
setIfEmpty: "setIfEmpty";
|
|
28
|
+
}>>>;
|
|
29
|
+
}, z.core.$loose>;
|
|
30
|
+
export declare const relatedCatalogSchema: z.ZodObject<{
|
|
31
|
+
schemaVersion: z.ZodOptional<z.ZodLiteral<1>>;
|
|
32
|
+
relationships: z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
33
|
+
sobject: z.ZodString;
|
|
34
|
+
phase: z.ZodEnum<{
|
|
35
|
+
before: "before";
|
|
36
|
+
after: "after";
|
|
37
|
+
}>;
|
|
38
|
+
recordType: z.ZodNullable<z.ZodOptional<z.ZodObject<{
|
|
39
|
+
developerName: z.ZodString;
|
|
40
|
+
}, z.core.$loose>>>;
|
|
41
|
+
match: z.ZodObject<{
|
|
42
|
+
field: z.ZodString;
|
|
43
|
+
from: z.ZodString;
|
|
44
|
+
}, z.core.$loose>;
|
|
45
|
+
fields: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodObject<{
|
|
46
|
+
from: z.ZodString;
|
|
47
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
48
|
+
value: z.ZodUnknown;
|
|
49
|
+
}, z.core.$strict>]>>;
|
|
50
|
+
mode: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
|
|
51
|
+
sync: "sync";
|
|
52
|
+
setIfEmpty: "setIfEmpty";
|
|
53
|
+
}>>>;
|
|
54
|
+
}, z.core.$loose>>;
|
|
55
|
+
}, z.core.$loose>;
|
|
56
|
+
export type SourceExpr = z.infer<typeof sourceExprSchema>;
|
|
57
|
+
export type RelationshipDef = z.infer<typeof relationshipDefSchema>;
|
|
58
|
+
export type RelationshipMode = NonNullable<RelationshipDef['mode']>;
|
|
59
|
+
export type RelationshipPhase = RelationshipDef['phase'];
|
|
60
|
+
export type RelatedCatalog = z.infer<typeof relatedCatalogSchema>;
|
|
61
|
+
export {};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
const schemaVersionSchema = z.literal(1).optional().describe('Supported file schema version. Omit it for version 1.');
|
|
3
|
+
const sourceExprSchema = z.union([
|
|
4
|
+
z.strictObject({ from: z.string().describe('A source such as user.Department or user.Id.') }),
|
|
5
|
+
z.strictObject({ value: z.unknown().describe('A literal value.') }),
|
|
6
|
+
]);
|
|
7
|
+
export const relationshipDefSchema = z
|
|
8
|
+
.looseObject({
|
|
9
|
+
sobject: z.string().describe('Target Salesforce object API name.'),
|
|
10
|
+
phase: z.enum(['before', 'after']).describe('When the relationship is applied.'),
|
|
11
|
+
recordType: z
|
|
12
|
+
.looseObject({ developerName: z.string().describe('Record Type developer name.') })
|
|
13
|
+
.optional()
|
|
14
|
+
.nullable()
|
|
15
|
+
.describe('Optional target record type.'),
|
|
16
|
+
match: z
|
|
17
|
+
.looseObject({
|
|
18
|
+
field: z.string().describe('Target field used to find an existing record.'),
|
|
19
|
+
from: z.string().describe('User source used for the target match.'),
|
|
20
|
+
})
|
|
21
|
+
.describe('Target match configuration.'),
|
|
22
|
+
fields: z.record(z.string(), sourceExprSchema).describe('Target fields and their source expressions.'),
|
|
23
|
+
mode: z.enum(['setIfEmpty', 'sync']).nullish().describe('How configured fields are updated.'),
|
|
24
|
+
})
|
|
25
|
+
.describe('A reusable related-record relationship.');
|
|
26
|
+
export const relatedCatalogSchema = z
|
|
27
|
+
.looseObject({
|
|
28
|
+
schemaVersion: schemaVersionSchema,
|
|
29
|
+
relationships: z.record(z.string(), relationshipDefSchema).describe('Relationships keyed by name.'),
|
|
30
|
+
})
|
|
31
|
+
.describe('A Warden related-record catalog.');
|
|
32
|
+
//# sourceMappingURL=relatedCatalog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relatedCatalog.js","sourceRoot":"","sources":["../../src/spec/relatedCatalog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,mBAAmB,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uDAAuD,CAAC,CAAC;AAEtH,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC;IAC/B,CAAC,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC,EAAE,CAAC;IAC7F,CAAC,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;CACpE,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC;KACnC,WAAW,CAAC;IACX,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;IAClE,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,mCAAmC,CAAC;IAChF,UAAU,EAAE,CAAC;SACV,WAAW,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC,EAAE,CAAC;SAClF,QAAQ,EAAE;SACV,QAAQ,EAAE;SACV,QAAQ,CAAC,8BAA8B,CAAC;IAC3C,KAAK,EAAE,CAAC;SACL,WAAW,CAAC;QACX,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC;QAC3E,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;KACpE,CAAC;SACD,QAAQ,CAAC,6BAA6B,CAAC;IAC1C,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,gBAAgB,CAAC,CAAC,QAAQ,CAAC,6CAA6C,CAAC;IACtG,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;CAC9F,CAAC;KACD,QAAQ,CAAC,yCAAyC,CAAC,CAAC;AAEvD,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC;KAClC,WAAW,CAAC;IACX,aAAa,EAAE,mBAAmB;IAClC,aAAa,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,qBAAqB,CAAC,CAAC,QAAQ,CAAC,8BAA8B,CAAC;CACpG,CAAC;KACD,QAAQ,CAAC,kCAAkC,CAAC,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const userSnapshotEntrySchema: z.ZodObject<{
|
|
3
|
+
match: z.ZodString;
|
|
4
|
+
matchValue: z.ZodString;
|
|
5
|
+
userId: z.ZodString;
|
|
6
|
+
name: z.ZodOptional<z.ZodString>;
|
|
7
|
+
username: z.ZodOptional<z.ZodString>;
|
|
8
|
+
email: z.ZodOptional<z.ZodString>;
|
|
9
|
+
profile: z.ZodOptional<z.ZodString>;
|
|
10
|
+
role: z.ZodOptional<z.ZodString>;
|
|
11
|
+
IsActive: z.ZodBoolean;
|
|
12
|
+
IsFrozen: z.ZodBoolean;
|
|
13
|
+
permissionSets: z.ZodArray<z.ZodString>;
|
|
14
|
+
permissionSetGroups: z.ZodArray<z.ZodString>;
|
|
15
|
+
publicGroups: z.ZodArray<z.ZodString>;
|
|
16
|
+
queues: z.ZodArray<z.ZodString>;
|
|
17
|
+
permissionSetLicenses: z.ZodArray<z.ZodString>;
|
|
18
|
+
}, z.core.$loose>;
|
|
19
|
+
export declare const snapshotFileSchema: z.ZodObject<{
|
|
20
|
+
snapshotVersion: z.ZodLiteral<1>;
|
|
21
|
+
capturedAt: z.ZodOptional<z.ZodString>;
|
|
22
|
+
org: z.ZodOptional<z.ZodString>;
|
|
23
|
+
users: z.ZodArray<z.ZodObject<{
|
|
24
|
+
match: z.ZodString;
|
|
25
|
+
matchValue: z.ZodString;
|
|
26
|
+
userId: z.ZodString;
|
|
27
|
+
name: z.ZodOptional<z.ZodString>;
|
|
28
|
+
username: z.ZodOptional<z.ZodString>;
|
|
29
|
+
email: z.ZodOptional<z.ZodString>;
|
|
30
|
+
profile: z.ZodOptional<z.ZodString>;
|
|
31
|
+
role: z.ZodOptional<z.ZodString>;
|
|
32
|
+
IsActive: z.ZodBoolean;
|
|
33
|
+
IsFrozen: z.ZodBoolean;
|
|
34
|
+
permissionSets: z.ZodArray<z.ZodString>;
|
|
35
|
+
permissionSetGroups: z.ZodArray<z.ZodString>;
|
|
36
|
+
publicGroups: z.ZodArray<z.ZodString>;
|
|
37
|
+
queues: z.ZodArray<z.ZodString>;
|
|
38
|
+
permissionSetLicenses: z.ZodArray<z.ZodString>;
|
|
39
|
+
}, z.core.$loose>>;
|
|
40
|
+
}, z.core.$loose>;
|
|
41
|
+
export type UserSnapshotEntry = z.infer<typeof userSnapshotEntrySchema>;
|
|
42
|
+
export type UserSnapshotFile = z.infer<typeof snapshotFileSchema>;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
const optionalSnapshotText = z.string().optional();
|
|
3
|
+
export const userSnapshotEntrySchema = z
|
|
4
|
+
.looseObject({
|
|
5
|
+
match: z.string().min(1).describe('User field used to identify the snapshot entry.'),
|
|
6
|
+
matchValue: z.string().min(1).describe('Value used with the match field.'),
|
|
7
|
+
userId: z.string().min(1).describe('Salesforce User Id.'),
|
|
8
|
+
name: optionalSnapshotText.describe('User name at capture time.'),
|
|
9
|
+
username: optionalSnapshotText.describe('User username at capture time.'),
|
|
10
|
+
email: optionalSnapshotText.describe('User email at capture time.'),
|
|
11
|
+
profile: optionalSnapshotText.describe('User profile at capture time.'),
|
|
12
|
+
role: optionalSnapshotText.describe('User role at capture time.'),
|
|
13
|
+
IsActive: z.boolean().describe('Whether the User was active at capture time.'),
|
|
14
|
+
IsFrozen: z.boolean().describe('Whether the User login was frozen at capture time.'),
|
|
15
|
+
permissionSets: z.array(z.string()).describe('Permission Set names.'),
|
|
16
|
+
permissionSetGroups: z.array(z.string()).describe('Permission Set Group names.'),
|
|
17
|
+
publicGroups: z.array(z.string()).describe('Public Group names.'),
|
|
18
|
+
queues: z.array(z.string()).describe('Queue names.'),
|
|
19
|
+
permissionSetLicenses: z.array(z.string()).describe('Permission Set License names.'),
|
|
20
|
+
})
|
|
21
|
+
.describe('A User assignment snapshot entry.');
|
|
22
|
+
export const snapshotFileSchema = z
|
|
23
|
+
.looseObject({
|
|
24
|
+
snapshotVersion: z.literal(1).describe('Snapshot format version.'),
|
|
25
|
+
// Optional: version-1 JSON snapshots written before this schema existed
|
|
26
|
+
// were accepted without it, and the reader must keep accepting them.
|
|
27
|
+
capturedAt: z.string().optional().describe('Capture timestamp in ISO format.'),
|
|
28
|
+
org: z.string().optional().describe('Optional org alias or username.'),
|
|
29
|
+
users: z.array(userSnapshotEntrySchema).describe('Captured User state.'),
|
|
30
|
+
})
|
|
31
|
+
.describe('A Warden User snapshot file.');
|
|
32
|
+
//# sourceMappingURL=snapshot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../src/spec/snapshot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC;AAEnD,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC;KACrC,WAAW,CAAC;IACX,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,iDAAiD,CAAC;IACpF,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,kCAAkC,CAAC;IAC1E,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC;IACzD,IAAI,EAAE,oBAAoB,CAAC,QAAQ,CAAC,4BAA4B,CAAC;IACjE,QAAQ,EAAE,oBAAoB,CAAC,QAAQ,CAAC,gCAAgC,CAAC;IACzE,KAAK,EAAE,oBAAoB,CAAC,QAAQ,CAAC,6BAA6B,CAAC;IACnE,OAAO,EAAE,oBAAoB,CAAC,QAAQ,CAAC,+BAA+B,CAAC;IACvE,IAAI,EAAE,oBAAoB,CAAC,QAAQ,CAAC,4BAA4B,CAAC;IACjE,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;IAC9E,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,oDAAoD,CAAC;IACpF,cAAc,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC;IACrE,mBAAmB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,6BAA6B,CAAC;IAChF,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC;IACjE,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC;IACpD,qBAAqB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,+BAA+B,CAAC;CACrF,CAAC;KACD,QAAQ,CAAC,mCAAmC,CAAC,CAAC;AAEjD,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC;KAChC,WAAW,CAAC;IACX,eAAe,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;IAClE,wEAAwE;IACxE,qEAAqE;IACrE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;IAC9E,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;IACtE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC,QAAQ,CAAC,sBAAsB,CAAC;CACzE,CAAC;KACD,QAAQ,CAAC,8BAA8B,CAAC,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const userInputSchema: z.ZodObject<{
|
|
3
|
+
personas: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
4
|
+
}, z.core.$loose>;
|
|
5
|
+
export declare const usersDefinitionFileSchema: z.ZodObject<{
|
|
6
|
+
schemaVersion: z.ZodOptional<z.ZodLiteral<1>>;
|
|
7
|
+
users: z.ZodArray<z.ZodObject<{
|
|
8
|
+
personas: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
9
|
+
}, z.core.$loose>>;
|
|
10
|
+
}, z.core.$loose>;
|
|
11
|
+
/**
|
|
12
|
+
* CSV has no JSON Schema because its User columns come from Salesforce describe metadata.
|
|
13
|
+
* The fixed metadata columns are `personas`, `match`, and `fuzzyUsername`; all other
|
|
14
|
+
* columns are User API names. `personas` is a semicolon-delimited list by default,
|
|
15
|
+
* configurable with `csvListDelimiter`.
|
|
16
|
+
*/
|
|
17
|
+
export declare const USERS_CSV_COLUMNS: readonly ["personas", "match", "fuzzyUsername"];
|
|
18
|
+
export type UserInput = z.infer<typeof userInputSchema>;
|
|
19
|
+
export type UsersDefinitionFile = z.infer<typeof usersDefinitionFileSchema>;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
const schemaVersionSchema = z.literal(1).optional().describe('Supported file schema version. Omit it for version 1.');
|
|
3
|
+
export const userInputSchema = z
|
|
4
|
+
.looseObject({
|
|
5
|
+
personas: z.array(z.string()).optional().describe('Persona names to merge for this user.'),
|
|
6
|
+
})
|
|
7
|
+
.describe('A User field record with optional Warden metadata.');
|
|
8
|
+
export const usersDefinitionFileSchema = z
|
|
9
|
+
.looseObject({
|
|
10
|
+
schemaVersion: schemaVersionSchema,
|
|
11
|
+
users: z.array(userInputSchema).describe('User definitions.'),
|
|
12
|
+
})
|
|
13
|
+
.describe('A Warden JSON users definition file.');
|
|
14
|
+
/**
|
|
15
|
+
* CSV has no JSON Schema because its User columns come from Salesforce describe metadata.
|
|
16
|
+
* The fixed metadata columns are `personas`, `match`, and `fuzzyUsername`; all other
|
|
17
|
+
* columns are User API names. `personas` is a semicolon-delimited list by default,
|
|
18
|
+
* configurable with `csvListDelimiter`.
|
|
19
|
+
*/
|
|
20
|
+
export const USERS_CSV_COLUMNS = ['personas', 'match', 'fuzzyUsername'];
|
|
21
|
+
//# sourceMappingURL=usersDefinition.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usersDefinition.js","sourceRoot":"","sources":["../../src/spec/usersDefinition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,mBAAmB,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uDAAuD,CAAC,CAAC;AAEtH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC;KAC7B,WAAW,CAAC;IACX,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;CAC3F,CAAC;KACD,QAAQ,CAAC,oDAAoD,CAAC,CAAC;AAElE,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC;KACvC,WAAW,CAAC;IACX,aAAa,EAAE,mBAAmB;IAClC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC;CAC9D,CAAC;KACD,QAAQ,CAAC,sCAAsC,CAAC,CAAC;AAEpD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,UAAU,EAAE,OAAO,EAAE,eAAe,CAAU,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@syntax-syllogism/warden-core",
|
|
3
|
+
"description": "Shared Warden engine: the user-lifecycle library behind the warden CLI, VS Code extension, and SFDX package.",
|
|
4
|
+
"version": "0.2.0",
|
|
5
|
+
"author": "Jake Richter <j.p.richter@gmail.com>",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"homepage": "https://github.com/Syntax-Syllogism/warden-core#readme",
|
|
8
|
+
"bugs": "https://github.com/Syntax-Syllogism/warden-core/issues",
|
|
9
|
+
"repository": {
|
|
10
|
+
"type": "git",
|
|
11
|
+
"url": "git+https://github.com/Syntax-Syllogism/warden-core.git"
|
|
12
|
+
},
|
|
13
|
+
"keywords": [
|
|
14
|
+
"salesforce",
|
|
15
|
+
"sf",
|
|
16
|
+
"sfdx",
|
|
17
|
+
"warden",
|
|
18
|
+
"user lifecycle"
|
|
19
|
+
],
|
|
20
|
+
"type": "module",
|
|
21
|
+
"engines": {
|
|
22
|
+
"node": ">=22.0.0"
|
|
23
|
+
},
|
|
24
|
+
"files": [
|
|
25
|
+
"/lib",
|
|
26
|
+
"/schemas",
|
|
27
|
+
"/conformance",
|
|
28
|
+
"/CHANGELOG.md",
|
|
29
|
+
"/LICENSE"
|
|
30
|
+
],
|
|
31
|
+
"main": "./lib/index.js",
|
|
32
|
+
"types": "./lib/index.d.ts",
|
|
33
|
+
"exports": {
|
|
34
|
+
".": {
|
|
35
|
+
"types": "./lib/index.d.ts",
|
|
36
|
+
"default": "./lib/index.js"
|
|
37
|
+
},
|
|
38
|
+
"./schemas/*": "./schemas/*"
|
|
39
|
+
},
|
|
40
|
+
"publishConfig": {
|
|
41
|
+
"access": "public"
|
|
42
|
+
},
|
|
43
|
+
"scripts": {
|
|
44
|
+
"build": "tsc -p . && node scripts/gen-json-schema.mjs",
|
|
45
|
+
"clean": "rm -rf lib",
|
|
46
|
+
"lint": "eslint src test",
|
|
47
|
+
"format": "prettier --write \"+(src|test|scripts)/**/*.+(ts|js|mjs|json)\"",
|
|
48
|
+
"format:check": "prettier --check \"+(src|test|scripts)/**/*.+(ts|js|mjs|json)\"",
|
|
49
|
+
"schemas:check": "npm run build && git diff --exit-code -- schemas/",
|
|
50
|
+
"typecheck": "tsc -p . --noEmit && tsc -p test --noEmit",
|
|
51
|
+
"test:only": "TS_NODE_PROJECT=test/tsconfig.json mocha \"test/**/*.test.ts\"",
|
|
52
|
+
"test": "npm run typecheck && npm run lint && npm run format:check && c8 npm run test:only",
|
|
53
|
+
"pack:check": "node scripts/check-pack.mjs",
|
|
54
|
+
"prepack": "npm run clean && npm run build"
|
|
55
|
+
},
|
|
56
|
+
"dependencies": {
|
|
57
|
+
"@salesforce/core": "^8",
|
|
58
|
+
"zod": "^4"
|
|
59
|
+
},
|
|
60
|
+
"devDependencies": {
|
|
61
|
+
"@salesforce/dev-config": "^4.1.0",
|
|
62
|
+
"@salesforce/prettier-config": "^0.0.4",
|
|
63
|
+
"ajv": "^8.18.0",
|
|
64
|
+
"@types/chai": "^4.3.14",
|
|
65
|
+
"@types/mocha": "^10.0.6",
|
|
66
|
+
"@types/node": "^22",
|
|
67
|
+
"@types/sinon": "^10.0.20",
|
|
68
|
+
"c8": "^11.0.0",
|
|
69
|
+
"chai": "^4.3.10",
|
|
70
|
+
"eslint": "^8.57.0",
|
|
71
|
+
"eslint-config-salesforce-typescript": "^3.3.0",
|
|
72
|
+
"mocha": "^10.4.0",
|
|
73
|
+
"prettier": "^2.8.8",
|
|
74
|
+
"sinon": "^10.0.0",
|
|
75
|
+
"ts-node": "^10.9.2",
|
|
76
|
+
"typescript": "^5.4.5"
|
|
77
|
+
}
|
|
78
|
+
}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$id": "https://raw.githubusercontent.com/Syntax-Syllogism/warden-core/release/schemas/persona-definitions.schema.json",
|
|
3
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
4
|
+
"additionalProperties": {},
|
|
5
|
+
"description": "A Warden persona definitions file.",
|
|
6
|
+
"properties": {
|
|
7
|
+
"personas": {
|
|
8
|
+
"additionalProperties": {
|
|
9
|
+
"additionalProperties": {},
|
|
10
|
+
"description": "A reusable set of User fields and assignments. Unknown metadata keys are preserved.",
|
|
11
|
+
"properties": {
|
|
12
|
+
"permissionSetGroupMode": {
|
|
13
|
+
"description": "Permission Set Group assignment mode.",
|
|
14
|
+
"enum": [
|
|
15
|
+
"additive",
|
|
16
|
+
"sync"
|
|
17
|
+
],
|
|
18
|
+
"type": "string"
|
|
19
|
+
},
|
|
20
|
+
"permissionSetGroups": {
|
|
21
|
+
"description": "Permission Set Group names or Salesforce Ids.",
|
|
22
|
+
"items": {
|
|
23
|
+
"type": "string"
|
|
24
|
+
},
|
|
25
|
+
"type": "array"
|
|
26
|
+
},
|
|
27
|
+
"permissionSetMode": {
|
|
28
|
+
"description": "Permission Set assignment mode.",
|
|
29
|
+
"enum": [
|
|
30
|
+
"additive",
|
|
31
|
+
"sync"
|
|
32
|
+
],
|
|
33
|
+
"type": "string"
|
|
34
|
+
},
|
|
35
|
+
"permissionSets": {
|
|
36
|
+
"description": "Permission Set names or Salesforce Ids.",
|
|
37
|
+
"items": {
|
|
38
|
+
"type": "string"
|
|
39
|
+
},
|
|
40
|
+
"type": "array"
|
|
41
|
+
},
|
|
42
|
+
"profile": {
|
|
43
|
+
"description": "Profile name or Salesforce Id.",
|
|
44
|
+
"type": "string"
|
|
45
|
+
},
|
|
46
|
+
"publicGroupMode": {
|
|
47
|
+
"description": "Public Group assignment mode.",
|
|
48
|
+
"enum": [
|
|
49
|
+
"additive",
|
|
50
|
+
"sync"
|
|
51
|
+
],
|
|
52
|
+
"type": "string"
|
|
53
|
+
},
|
|
54
|
+
"publicGroups": {
|
|
55
|
+
"description": "Public Group names or Salesforce Ids.",
|
|
56
|
+
"items": {
|
|
57
|
+
"type": "string"
|
|
58
|
+
},
|
|
59
|
+
"type": "array"
|
|
60
|
+
},
|
|
61
|
+
"queueMode": {
|
|
62
|
+
"description": "Queue assignment mode.",
|
|
63
|
+
"enum": [
|
|
64
|
+
"additive",
|
|
65
|
+
"sync"
|
|
66
|
+
],
|
|
67
|
+
"type": "string"
|
|
68
|
+
},
|
|
69
|
+
"queues": {
|
|
70
|
+
"description": "Queue names or Salesforce Ids.",
|
|
71
|
+
"items": {
|
|
72
|
+
"type": "string"
|
|
73
|
+
},
|
|
74
|
+
"type": "array"
|
|
75
|
+
},
|
|
76
|
+
"role": {
|
|
77
|
+
"description": "Role name or Salesforce Id.",
|
|
78
|
+
"type": "string"
|
|
79
|
+
},
|
|
80
|
+
"userAttributes": {
|
|
81
|
+
"additionalProperties": {},
|
|
82
|
+
"description": "User fields applied by this persona.",
|
|
83
|
+
"propertyNames": {
|
|
84
|
+
"type": "string"
|
|
85
|
+
},
|
|
86
|
+
"type": "object"
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
"type": "object"
|
|
90
|
+
},
|
|
91
|
+
"description": "Persona definitions keyed by persona name.",
|
|
92
|
+
"propertyNames": {
|
|
93
|
+
"type": "string"
|
|
94
|
+
},
|
|
95
|
+
"type": "object"
|
|
96
|
+
},
|
|
97
|
+
"schemaVersion": {
|
|
98
|
+
"const": 1,
|
|
99
|
+
"description": "Supported file schema version. Omit it for version 1.",
|
|
100
|
+
"type": "number"
|
|
101
|
+
}
|
|
102
|
+
},
|
|
103
|
+
"required": [
|
|
104
|
+
"personas"
|
|
105
|
+
],
|
|
106
|
+
"title": "Warden persona definitions schema",
|
|
107
|
+
"type": "object"
|
|
108
|
+
}
|