@j-schreiber/sf-cli-security-audit 0.22.0 → 0.24.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 +3 -3
- package/lib/libs/audit-engine/auditRun.js +6 -7
- package/lib/libs/audit-engine/auditRun.js.map +1 -1
- package/lib/libs/audit-engine/index.d.ts +21 -0
- package/lib/libs/audit-engine/registry/definitions.d.ts +23 -0
- package/lib/libs/audit-engine/registry/definitions.js +8 -0
- package/lib/libs/audit-engine/registry/definitions.js.map +1 -1
- package/lib/libs/audit-engine/registry/policies/connectedApps.js +1 -1
- package/lib/libs/audit-engine/registry/policies/connectedApps.js.map +1 -1
- package/lib/libs/audit-engine/registry/policies/objects.d.ts +12 -0
- package/lib/libs/audit-engine/registry/policies/objects.js +18 -0
- package/lib/libs/audit-engine/registry/policies/objects.js.map +1 -0
- package/lib/libs/audit-engine/registry/policies/permissionSets.js +4 -4
- package/lib/libs/audit-engine/registry/policies/permissionSets.js.map +1 -1
- package/lib/libs/audit-engine/registry/policies/profiles.d.ts +0 -2
- package/lib/libs/audit-engine/registry/policies/profiles.js +0 -5
- package/lib/libs/audit-engine/registry/policies/profiles.js.map +1 -1
- package/lib/libs/audit-engine/registry/policies/settings.js +4 -2
- package/lib/libs/audit-engine/registry/policies/settings.js.map +1 -1
- package/lib/libs/audit-engine/registry/policies/users.js +3 -3
- package/lib/libs/audit-engine/registry/policies/users.js.map +1 -1
- package/lib/libs/audit-engine/registry/policy.d.ts +9 -1
- package/lib/libs/audit-engine/registry/policy.js +5 -0
- package/lib/libs/audit-engine/registry/policy.js.map +1 -1
- package/lib/libs/audit-engine/registry/roles/roleManager.d.ts +7 -1
- package/lib/libs/audit-engine/registry/roles/roleManager.js +12 -0
- package/lib/libs/audit-engine/registry/roles/roleManager.js.map +1 -1
- package/lib/libs/audit-engine/registry/roles/userRole.d.ts +24 -1
- package/lib/libs/audit-engine/registry/roles/userRole.js +53 -5
- package/lib/libs/audit-engine/registry/roles/userRole.js.map +1 -1
- package/lib/libs/audit-engine/registry/ruleRegistry.js +7 -1
- package/lib/libs/audit-engine/registry/ruleRegistry.js.map +1 -1
- package/lib/libs/audit-engine/registry/rules/enforceObjectAccessOnUser.d.ts +0 -1
- package/lib/libs/audit-engine/registry/rules/enforceObjectAccessOnUser.js +1 -7
- package/lib/libs/audit-engine/registry/rules/enforceObjectAccessOnUser.js.map +1 -1
- package/lib/libs/audit-engine/registry/rules/enforcePermissionPresets.d.ts +0 -1
- package/lib/libs/audit-engine/registry/rules/enforcePermissionPresets.js +3 -9
- package/lib/libs/audit-engine/registry/rules/enforcePermissionPresets.js.map +1 -1
- package/lib/libs/audit-engine/registry/rules/enforcePermissionsOnProfileLike.d.ts +0 -1
- package/lib/libs/audit-engine/registry/rules/enforcePermissionsOnProfileLike.js +1 -7
- package/lib/libs/audit-engine/registry/rules/enforcePermissionsOnProfileLike.js.map +1 -1
- package/lib/libs/audit-engine/registry/rules/enforcePermissionsOnUser.d.ts +0 -1
- package/lib/libs/audit-engine/registry/rules/enforcePermissionsOnUser.js +1 -7
- package/lib/libs/audit-engine/registry/rules/enforcePermissionsOnUser.js.map +1 -1
- package/lib/libs/audit-engine/registry/rules/policyRule.d.ts +2 -0
- package/lib/libs/audit-engine/registry/rules/policyRule.js.map +1 -1
- package/lib/libs/audit-engine/registry/rules/privateExternalAccessForAllObjects.d.ts +7 -0
- package/lib/libs/audit-engine/registry/rules/privateExternalAccessForAllObjects.js +34 -0
- package/lib/libs/audit-engine/registry/rules/privateExternalAccessForAllObjects.js.map +1 -0
- package/lib/libs/audit-engine/registry/shape/auditConfigShape.d.ts +21 -0
- package/lib/libs/audit-engine/registry/shape/auditConfigShape.js +7 -1
- package/lib/libs/audit-engine/registry/shape/auditConfigShape.js.map +1 -1
- package/lib/libs/audit-engine/registry/shape/shapeValidation.d.ts +2 -2
- package/lib/libs/audit-engine/registry/shape/shapeValidation.js +36 -21
- package/lib/libs/audit-engine/registry/shape/shapeValidation.js.map +1 -1
- package/lib/salesforce/connection.d.ts +13 -0
- package/lib/salesforce/connection.js +35 -1
- package/lib/salesforce/connection.js.map +1 -1
- package/lib/salesforce/describes/orgDescribe.d.ts +10 -1
- package/lib/salesforce/describes/orgDescribe.js +38 -2
- package/lib/salesforce/describes/orgDescribe.js.map +1 -1
- package/lib/salesforce/describes/orgDescribe.types.d.ts +21 -2
- package/lib/salesforce/index.d.ts +2 -0
- package/lib/salesforce/index.js +1 -0
- package/lib/salesforce/index.js.map +1 -1
- package/lib/salesforce/mdapi/constants.d.ts +1 -0
- package/lib/salesforce/mdapi/constants.js +2 -1
- package/lib/salesforce/mdapi/constants.js.map +1 -1
- package/lib/salesforce/repositories/connected-apps/connected-apps.d.ts +6 -1
- package/lib/salesforce/repositories/connected-apps/connected-apps.js.map +1 -1
- package/lib/salesforce/repositories/object-definitions/object-definitions.d.ts +17 -0
- package/lib/salesforce/repositories/object-definitions/object-definitions.js +94 -0
- package/lib/salesforce/repositories/object-definitions/object-definitions.js.map +1 -0
- package/lib/salesforce/repositories/object-definitions/object-definitions.types.d.ts +60 -0
- package/lib/salesforce/repositories/object-definitions/object-definitions.types.js +9 -0
- package/lib/salesforce/repositories/object-definitions/object-definitions.types.js.map +1 -0
- package/lib/salesforce/repositories/perm-sets/permission-sets.d.ts +6 -1
- package/lib/salesforce/repositories/perm-sets/permission-sets.js.map +1 -1
- package/lib/salesforce/resolve-entity-lifecycle-bus.d.ts +3 -1
- package/lib/salesforce/resolve-entity-lifecycle-bus.js.map +1 -1
- package/messages/auditShapeValidation.md +4 -0
- package/messages/rules.enforceClassificationPresets.md +1 -1
- package/messages/rules.objects.md +3 -0
- package/oclif.lock +1056 -1703
- package/oclif.manifest.json +1 -1
- package/package.json +22 -22
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { Messages } from '@salesforce/core';
|
|
2
|
-
import { isPermissionControl } from './schema.js';
|
|
3
2
|
Messages.importMessagesDirectoryFromMetaUrl(import.meta.url);
|
|
4
3
|
const messages = Messages.loadMessages('@j-schreiber/sf-cli-security-audit', 'auditShapeValidation');
|
|
5
4
|
export const validator = (parseResult) => {
|
|
@@ -31,35 +30,51 @@ export const validator = (parseResult) => {
|
|
|
31
30
|
}
|
|
32
31
|
return errors;
|
|
33
32
|
};
|
|
34
|
-
export function verifyRoleDefinitions(roles, orgDescribe) {
|
|
33
|
+
export async function verifyRoleDefinitions(roles, orgDescribe) {
|
|
35
34
|
const warnings = new Array();
|
|
35
|
+
const objectNames = [];
|
|
36
36
|
for (const [roleName, roleDef] of Object.entries(roles)) {
|
|
37
|
-
if (
|
|
38
|
-
|
|
37
|
+
if (roleDef.objectAccess) {
|
|
38
|
+
objectNames.push(...Object.keys(roleDef.objectAccess));
|
|
39
39
|
}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
const
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
40
|
+
if (roleDef.permissions) {
|
|
41
|
+
for (const permissionBlockName of [
|
|
42
|
+
{ listName: 'userPermissions', isValid: (permName) => orgDescribe.isValid(permName) },
|
|
43
|
+
{ listName: 'customPermissions', isValid: (permName) => orgDescribe.isValidCustomPerm(permName) },
|
|
44
|
+
]) {
|
|
45
|
+
const permBlock = roleDef.permissions[permissionBlockName.listName];
|
|
46
|
+
if (!permBlock) {
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
for (const permProp of ['allowed', 'denied', 'required']) {
|
|
50
|
+
const namedPerms = permBlock[permProp];
|
|
51
|
+
if (namedPerms) {
|
|
52
|
+
for (const permName of namedPerms) {
|
|
53
|
+
if (!permissionBlockName.isValid(permName)) {
|
|
54
|
+
warnings.push({
|
|
55
|
+
path: ['Controls', 'Roles', roleName, permissionBlockName.listName, permProp, permName],
|
|
56
|
+
message: messages.getMessage('PermissionDoesNotExistOnOrg'),
|
|
57
|
+
});
|
|
58
|
+
}
|
|
57
59
|
}
|
|
58
60
|
}
|
|
59
61
|
}
|
|
60
62
|
}
|
|
61
63
|
}
|
|
62
64
|
}
|
|
65
|
+
const describes = await orgDescribe.describeSObjects(objectNames);
|
|
66
|
+
for (const [roleName, roleDef] of Object.entries(roles)) {
|
|
67
|
+
if (roleDef.objectAccess) {
|
|
68
|
+
for (const objectName of Object.keys(roleDef.objectAccess)) {
|
|
69
|
+
if (!describes.describes[objectName.toLowerCase()]) {
|
|
70
|
+
warnings.push({
|
|
71
|
+
path: ['Controls', 'Roles', roleName, 'objectAccess', objectName],
|
|
72
|
+
message: messages.getMessage('ObjectDoesNotExistOnOrg'),
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
63
78
|
return warnings;
|
|
64
79
|
}
|
|
65
80
|
function validateRoledEntity(roles, entries, entityName) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shapeValidation.js","sourceRoot":"","sources":["../../../../../src/libs/audit-engine/registry/shape/shapeValidation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"shapeValidation.js","sourceRoot":"","sources":["../../../../../src/libs/audit-engine/registry/shape/shapeValidation.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { DescribeSObjectResult, QueryOptions, QueryResult, Record as JsForceRecord } from '@jsforce/jsforce-node';
|
|
2
|
+
import { FileProperties } from '@jsforce/jsforce-node/lib/api/metadata.js';
|
|
2
3
|
import { Connection, Logger } from '@salesforce/core';
|
|
3
4
|
import { ComponentSet, RetrieveResult } from '@salesforce/source-deploy-retrieve';
|
|
4
5
|
/**
|
|
@@ -8,6 +9,11 @@ import { ComponentSet, RetrieveResult } from '@salesforce/source-deploy-retrieve
|
|
|
8
9
|
export default class SfConnection {
|
|
9
10
|
readonly coreConnection: Connection;
|
|
10
11
|
private logger?;
|
|
12
|
+
/**
|
|
13
|
+
* Use this flag during local testing to write all
|
|
14
|
+
* query results to .jsc tmp dir.
|
|
15
|
+
*/
|
|
16
|
+
static devMode: boolean;
|
|
11
17
|
constructor(coreConnection: Connection, logger?: Logger | undefined);
|
|
12
18
|
/**
|
|
13
19
|
* Create new instance with default logger
|
|
@@ -40,6 +46,13 @@ export default class SfConnection {
|
|
|
40
46
|
* @returns
|
|
41
47
|
*/
|
|
42
48
|
retrieve(components: ComponentSet, packageName: string): Promise<RetrieveResult>;
|
|
49
|
+
/**
|
|
50
|
+
* Lists available metadata of a specific type on the target org
|
|
51
|
+
*
|
|
52
|
+
* @param type
|
|
53
|
+
* @returns
|
|
54
|
+
*/
|
|
55
|
+
listMetadata(type: string): Promise<FileProperties[]>;
|
|
43
56
|
private getLogger;
|
|
44
57
|
}
|
|
45
58
|
type ConnectionError = {
|
|
@@ -1,7 +1,11 @@
|
|
|
1
|
+
import { mkdirSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
1
3
|
import { Logger, Messages } from '@salesforce/core';
|
|
2
|
-
import {
|
|
4
|
+
import { createDigest } from '../utils.js';
|
|
5
|
+
import { RETRIEVE_CACHE, TMP_DIR } from './mdapi/constants.js';
|
|
3
6
|
Messages.importMessagesDirectoryFromMetaUrl(import.meta.url);
|
|
4
7
|
const messages = Messages.loadMessages('@j-schreiber/sf-cli-security-audit', 'salesforceConnectionErrors');
|
|
8
|
+
const DEV_MODE_WRITE_DIR = path.join(TMP_DIR, `${Date.now()}`);
|
|
5
9
|
/**
|
|
6
10
|
* Wrapper around the default `Connection` from core to add
|
|
7
11
|
* meaningful logging and error bubbling for better UX and debugging.
|
|
@@ -9,6 +13,11 @@ const messages = Messages.loadMessages('@j-schreiber/sf-cli-security-audit', 'sa
|
|
|
9
13
|
export default class SfConnection {
|
|
10
14
|
coreConnection;
|
|
11
15
|
logger;
|
|
16
|
+
/**
|
|
17
|
+
* Use this flag during local testing to write all
|
|
18
|
+
* query results to .jsc tmp dir.
|
|
19
|
+
*/
|
|
20
|
+
static devMode = false;
|
|
12
21
|
constructor(coreConnection, logger) {
|
|
13
22
|
this.coreConnection = coreConnection;
|
|
14
23
|
this.logger = logger;
|
|
@@ -40,6 +49,9 @@ export default class SfConnection {
|
|
|
40
49
|
const result = isTooling
|
|
41
50
|
? await this.coreConnection.tooling.query(soql, definitiveOpts)
|
|
42
51
|
: await this.coreConnection.query(soql, definitiveOpts);
|
|
52
|
+
if (SfConnection.devMode) {
|
|
53
|
+
writeFileSafe(path.join(DEV_MODE_WRITE_DIR, 'queries'), createDigest(soql, 16) + '.json', result);
|
|
54
|
+
}
|
|
43
55
|
return result;
|
|
44
56
|
}
|
|
45
57
|
catch (error) {
|
|
@@ -65,6 +77,9 @@ export default class SfConnection {
|
|
|
65
77
|
logger.debug('Describing: ' + sobjectName);
|
|
66
78
|
try {
|
|
67
79
|
const result = await this.coreConnection.describe(sobjectName);
|
|
80
|
+
if (SfConnection.devMode) {
|
|
81
|
+
writeFileSafe(path.join(DEV_MODE_WRITE_DIR, 'describes'), `${sobjectName}.json`, result);
|
|
82
|
+
}
|
|
68
83
|
return result;
|
|
69
84
|
}
|
|
70
85
|
catch (error) {
|
|
@@ -105,6 +120,21 @@ export default class SfConnection {
|
|
|
105
120
|
throw messages.createError('MetadataRetrieve', [details]);
|
|
106
121
|
}
|
|
107
122
|
}
|
|
123
|
+
/**
|
|
124
|
+
* Lists available metadata of a specific type on the target org
|
|
125
|
+
*
|
|
126
|
+
* @param type
|
|
127
|
+
* @returns
|
|
128
|
+
*/
|
|
129
|
+
async listMetadata(type) {
|
|
130
|
+
const logger = await this.getLogger();
|
|
131
|
+
logger.debug('List available metadata on org for: ' + type);
|
|
132
|
+
const types = await this.coreConnection.metadata.list({ type });
|
|
133
|
+
if (SfConnection.devMode) {
|
|
134
|
+
writeFileSafe(path.join(DEV_MODE_WRITE_DIR, 'metadata-list'), `${type}.json`, types);
|
|
135
|
+
}
|
|
136
|
+
return types;
|
|
137
|
+
}
|
|
108
138
|
async getLogger() {
|
|
109
139
|
if (!this.logger) {
|
|
110
140
|
this.logger = await Logger.child('jsc:sae');
|
|
@@ -127,4 +157,8 @@ function formatComponentSet(cmpSet) {
|
|
|
127
157
|
.map(([typeName, cmps]) => `[${typeName}: ${cmps.join(',')}]`)
|
|
128
158
|
.join('; ');
|
|
129
159
|
}
|
|
160
|
+
function writeFileSafe(filePath, fileName, data) {
|
|
161
|
+
mkdirSync(filePath, { recursive: true });
|
|
162
|
+
writeFileSync(path.join(filePath, fileName), JSON.stringify(data, null, 2));
|
|
163
|
+
}
|
|
130
164
|
//# sourceMappingURL=connection.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/salesforce/connection.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/salesforce/connection.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import SfConnection from '../connection.js';
|
|
2
|
-
import { Permission } from './orgDescribe.types.js';
|
|
2
|
+
import { Permission, SObjectsDescribeResult } from './orgDescribe.types.js';
|
|
3
3
|
export default class OrgDescribe {
|
|
4
|
+
private readonly con;
|
|
4
5
|
/**
|
|
5
6
|
* Caches initialised OrgDescribes by username.
|
|
6
7
|
*/
|
|
@@ -49,4 +50,12 @@ export default class OrgDescribe {
|
|
|
49
50
|
* @returns
|
|
50
51
|
*/
|
|
51
52
|
getCustomPermissions(): Permission[];
|
|
53
|
+
/**
|
|
54
|
+
* Sanitise and describe a list of sobject names and returns
|
|
55
|
+
* fully qualified sobject describes for each valid name.
|
|
56
|
+
*
|
|
57
|
+
* @param objectNames
|
|
58
|
+
* @returns
|
|
59
|
+
*/
|
|
60
|
+
describeSObjects(objectNames: string[]): Promise<SObjectsDescribeResult>;
|
|
52
61
|
}
|
|
@@ -3,13 +3,16 @@ import { CUSTOM_PERMS_QUERY } from './orgDescribe.types.js';
|
|
|
3
3
|
/** Minimum length for perm label to start fuzzy matching */
|
|
4
4
|
const FUZZY_MATCH_MIN_LENGTH = 15;
|
|
5
5
|
export default class OrgDescribe {
|
|
6
|
+
con;
|
|
6
7
|
/**
|
|
7
8
|
* Caches initialised OrgDescribes by username.
|
|
8
9
|
*/
|
|
9
10
|
static orgCache = new Map();
|
|
10
11
|
customPermissions;
|
|
11
12
|
userPermissions;
|
|
12
|
-
constructor() {
|
|
13
|
+
constructor(con) {
|
|
14
|
+
this.con = con;
|
|
15
|
+
}
|
|
13
16
|
/**
|
|
14
17
|
* Initialises a new OrgDescribe instance from an existing connection
|
|
15
18
|
* and caches it for repeated access.
|
|
@@ -22,7 +25,7 @@ export default class OrgDescribe {
|
|
|
22
25
|
if (maybeCache) {
|
|
23
26
|
return maybeCache;
|
|
24
27
|
}
|
|
25
|
-
const inst = new OrgDescribe();
|
|
28
|
+
const inst = new OrgDescribe(con);
|
|
26
29
|
inst.userPermissions = await fetchUserPermissions(con);
|
|
27
30
|
inst.customPermissions = await fetchCustomPermissions(con);
|
|
28
31
|
this.orgCache.set(con.coreConnection.instanceUrl, inst);
|
|
@@ -86,6 +89,36 @@ export default class OrgDescribe {
|
|
|
86
89
|
getCustomPermissions() {
|
|
87
90
|
return Array.from(this.customPermissions.values());
|
|
88
91
|
}
|
|
92
|
+
/**
|
|
93
|
+
* Sanitise and describe a list of sobject names and returns
|
|
94
|
+
* fully qualified sobject describes for each valid name.
|
|
95
|
+
*
|
|
96
|
+
* @param objectNames
|
|
97
|
+
* @returns
|
|
98
|
+
*/
|
|
99
|
+
async describeSObjects(objectNames) {
|
|
100
|
+
const result = { successes: [], errors: [], describes: {} };
|
|
101
|
+
const normalisedNames = normalise(objectNames);
|
|
102
|
+
const describePromises = normalisedNames.map((uniqueObjectName) => this.con.describe(uniqueObjectName));
|
|
103
|
+
const describes = await Promise.allSettled(describePromises);
|
|
104
|
+
for (const settledPromise of describes) {
|
|
105
|
+
if (settledPromise.status === 'fulfilled') {
|
|
106
|
+
result.successes.push(settledPromise.value.name);
|
|
107
|
+
result.describes[settledPromise.value.name.toLowerCase()] = settledPromise.value;
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
111
|
+
const { reason } = settledPromise;
|
|
112
|
+
const name = normalisedNames[describes.indexOf(settledPromise)];
|
|
113
|
+
const reasonMessage = hasMessage(reason) ? reason.message : 'Failed to resolve with unknown error';
|
|
114
|
+
result.errors.push({ name, reason: reasonMessage });
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return result;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
function hasMessage(obj) {
|
|
121
|
+
return typeof obj === 'object' && obj !== null && 'message' in obj;
|
|
89
122
|
}
|
|
90
123
|
async function fetchUserPermissions(con) {
|
|
91
124
|
const describePerms = await parsePermsFromDescribe(con);
|
|
@@ -108,6 +141,9 @@ async function fetchCustomPermissions(con) {
|
|
|
108
141
|
function mergeMaps(...permMaps) {
|
|
109
142
|
return new Map(permMaps.flatMap((m) => [...m]));
|
|
110
143
|
}
|
|
144
|
+
function normalise(anyStrings) {
|
|
145
|
+
return Array.from(new Set(anyStrings.map((inputString) => inputString.toLowerCase())));
|
|
146
|
+
}
|
|
111
147
|
async function parsePermsFromDescribe(con) {
|
|
112
148
|
const permSet = await con.describe('PermissionSet');
|
|
113
149
|
const describeAvailablePerms = new Map();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orgDescribe.js","sourceRoot":"","sources":["../../../src/salesforce/describes/orgDescribe.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,sCAAsC,CAAC;AAE5D,OAAO,EAAE,kBAAkB,
|
|
1
|
+
{"version":3,"file":"orgDescribe.js","sourceRoot":"","sources":["../../../src/salesforce/describes/orgDescribe.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,30 @@
|
|
|
1
|
-
import { Record } from '@jsforce/jsforce-node';
|
|
1
|
+
import { DescribeSObjectResult, Record as SfRecord } from '@jsforce/jsforce-node';
|
|
2
2
|
export declare const CUSTOM_PERMS_QUERY = "SELECT Id,MasterLabel,DeveloperName FROM CustomPermission";
|
|
3
3
|
export type Permission = {
|
|
4
4
|
name: string;
|
|
5
5
|
label?: string;
|
|
6
6
|
};
|
|
7
|
-
export type SfCustomPermission =
|
|
7
|
+
export type SfCustomPermission = SfRecord & {
|
|
8
8
|
Id: string;
|
|
9
9
|
MasterLabel: string;
|
|
10
10
|
DeveloperName: string;
|
|
11
11
|
};
|
|
12
|
+
export type SObjectsDescribeResult = {
|
|
13
|
+
/**
|
|
14
|
+
* Sanitised list of valid sobject names
|
|
15
|
+
*/
|
|
16
|
+
successes: string[];
|
|
17
|
+
/**
|
|
18
|
+
* Map of lowercase sobject names and corresponding
|
|
19
|
+
* describe results.
|
|
20
|
+
*/
|
|
21
|
+
describes: Record<string, DescribeSObjectResult>;
|
|
22
|
+
/**
|
|
23
|
+
* List of sobject names that do not exist on the target
|
|
24
|
+
* org with a reason of failure.
|
|
25
|
+
*/
|
|
26
|
+
errors: Array<{
|
|
27
|
+
name: string;
|
|
28
|
+
reason: string;
|
|
29
|
+
}>;
|
|
30
|
+
};
|
|
@@ -2,11 +2,13 @@ export { default as Users } from './repositories/users/users.js';
|
|
|
2
2
|
export { default as Profiles } from './repositories/profiles/profiles.js';
|
|
3
3
|
export { default as ConnectedApps } from './repositories/connected-apps/connected-apps.js';
|
|
4
4
|
export { default as PermissionSets } from './repositories/perm-sets/permission-sets.js';
|
|
5
|
+
export { default as Objects } from './repositories/object-definitions/object-definitions.js';
|
|
5
6
|
export { default as OrgDescribe } from './describes/orgDescribe.js';
|
|
6
7
|
export type { User, ResolveUsersOptions } from './repositories/users/user.types.js';
|
|
7
8
|
export type { Profile } from './repositories/profiles/profile.types.js';
|
|
8
9
|
export type { ConnectedApp } from './repositories/connected-apps/connected-app.types.js';
|
|
9
10
|
export type { PermissionSet } from './repositories/perm-sets/perm-sets.types.js';
|
|
11
|
+
export type { ObjectDefinition } from './repositories/object-definitions/object-definitions.types.js';
|
|
10
12
|
export { ResolveLifecycle } from './resolve-entity-lifecycle-bus.js';
|
|
11
13
|
export type { MessageEvent } from './resolve-entity-lifecycle-bus.js';
|
|
12
14
|
export { default as MDAPI } from './mdapi/mdapi.js';
|
package/lib/salesforce/index.js
CHANGED
|
@@ -3,6 +3,7 @@ export { default as Users } from './repositories/users/users.js';
|
|
|
3
3
|
export { default as Profiles } from './repositories/profiles/profiles.js';
|
|
4
4
|
export { default as ConnectedApps } from './repositories/connected-apps/connected-apps.js';
|
|
5
5
|
export { default as PermissionSets } from './repositories/perm-sets/permission-sets.js';
|
|
6
|
+
export { default as Objects } from './repositories/object-definitions/object-definitions.js';
|
|
6
7
|
export { default as OrgDescribe } from './describes/orgDescribe.js';
|
|
7
8
|
// RESOLVE EVENT BUS
|
|
8
9
|
export { ResolveLifecycle } from './resolve-entity-lifecycle-bus.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/salesforce/index.ts"],"names":[],"mappings":"AAAA,QAAQ;AACR,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iDAAiD,CAAC;AAC3F,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,6CAA6C,CAAC;AACxF,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/salesforce/index.ts"],"names":[],"mappings":"AAAA,QAAQ;AACR,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iDAAiD,CAAC;AAC3F,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,6CAA6C,CAAC;AACxF,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,yDAAyD,CAAC;AAC7F,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,4BAA4B,CAAC;AASpE,oBAAoB;AACpB,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAGrE,QAAQ;AACR,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEpD,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/salesforce/mdapi/constants.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/salesforce/mdapi/constants.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,MAAM,CAAC,MAAM,OAAO,GAAG,MAAM,CAAC;AAC9B,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC"}
|
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
import EventEmitter from 'node:events';
|
|
2
2
|
import SfConnection from '../../connection.js';
|
|
3
3
|
import { ConnectedApp, ResolveAppsOptions } from './connected-app.types.js';
|
|
4
|
-
export default class ConnectedApps extends EventEmitter
|
|
4
|
+
export default class ConnectedApps extends EventEmitter<{
|
|
5
|
+
entityresolve: [{
|
|
6
|
+
total: number;
|
|
7
|
+
resolved: number;
|
|
8
|
+
}];
|
|
9
|
+
}> {
|
|
5
10
|
private readonly con;
|
|
6
11
|
private readonly mdapi;
|
|
7
12
|
private readonly oauthTokenRepo;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connected-apps.js","sourceRoot":"","sources":["../../../../src/salesforce/repositories/connected-apps/connected-apps.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,aAAa,CAAC;AACvC,OAAO,KAAK,MAAM,sBAAsB,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAEzC,OAAO,EAIL,wBAAwB,GAIzB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,oBAAoB,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAC5G,OAAO,WAAW,MAAM,mBAAmB,CAAC;AAQ5C,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,
|
|
1
|
+
{"version":3,"file":"connected-apps.js","sourceRoot":"","sources":["../../../../src/salesforce/repositories/connected-apps/connected-apps.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { EventEmitter } from 'node:events';
|
|
2
|
+
import SfConnection from '../../connection.js';
|
|
3
|
+
import { ObjectDefinition } from './object-definitions.types.js';
|
|
4
|
+
export default class ObjectDefinitions extends EventEmitter<{
|
|
5
|
+
entityresolve: [{
|
|
6
|
+
total: number;
|
|
7
|
+
resolved: number;
|
|
8
|
+
}];
|
|
9
|
+
}> {
|
|
10
|
+
private readonly con;
|
|
11
|
+
constructor(con: SfConnection);
|
|
12
|
+
resolve(): Promise<Map<string, ObjectDefinition>>;
|
|
13
|
+
private fetchCustomObjects;
|
|
14
|
+
private fetchSharingRules;
|
|
15
|
+
private fetchEntityDefinitions;
|
|
16
|
+
private fetchToolingCustomObjects;
|
|
17
|
+
}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { EventEmitter } from 'node:events';
|
|
2
|
+
import { CUSTOM_OBJECT_BASE_QUERY, formatEntityDefinitionQuery, } from './object-definitions.types.js';
|
|
3
|
+
export default class ObjectDefinitions extends EventEmitter {
|
|
4
|
+
con;
|
|
5
|
+
constructor(con) {
|
|
6
|
+
super();
|
|
7
|
+
this.con = con;
|
|
8
|
+
}
|
|
9
|
+
async resolve() {
|
|
10
|
+
this.emit('entityresolve', { total: 0, resolved: 0 });
|
|
11
|
+
const results = new Map();
|
|
12
|
+
const customObjects = await this.fetchCustomObjects();
|
|
13
|
+
this.emit('entityresolve', { total: Object.keys(customObjects).length, resolved: 0 });
|
|
14
|
+
const sharingRules = await this.fetchSharingRules();
|
|
15
|
+
const objectNames = Array.from(new Set([...Object.keys(customObjects), ...Object.keys(sharingRules)])).sort();
|
|
16
|
+
const entityDefs = await this.fetchEntityDefinitions(objectNames);
|
|
17
|
+
const toolingCustomObjs = await this.fetchToolingCustomObjects();
|
|
18
|
+
for (const objectName of objectNames) {
|
|
19
|
+
results.set(objectName, buildObjectDefinition(objectName, Boolean(sharingRules[objectName]), toolingCustomObjs[entityDefs[objectName]?.DurableId], entityDefs[objectName], customObjects[objectName]));
|
|
20
|
+
}
|
|
21
|
+
this.emit('entityresolve', {
|
|
22
|
+
total: Object.keys(customObjects).length,
|
|
23
|
+
resolved: Object.keys(customObjects).length,
|
|
24
|
+
});
|
|
25
|
+
return results;
|
|
26
|
+
}
|
|
27
|
+
async fetchCustomObjects() {
|
|
28
|
+
const customObjects = await this.con.listMetadata('CustomObject');
|
|
29
|
+
const r = {};
|
|
30
|
+
for (const obj of customObjects) {
|
|
31
|
+
r[obj.fullName] = obj;
|
|
32
|
+
}
|
|
33
|
+
return r;
|
|
34
|
+
}
|
|
35
|
+
async fetchSharingRules() {
|
|
36
|
+
const sharingRules = await this.con.listMetadata('SharingRules');
|
|
37
|
+
const r = {};
|
|
38
|
+
for (const obj of sharingRules) {
|
|
39
|
+
r[obj.fullName] = obj;
|
|
40
|
+
}
|
|
41
|
+
return r;
|
|
42
|
+
}
|
|
43
|
+
async fetchEntityDefinitions(objectNames) {
|
|
44
|
+
const queryResult = await this.con.query(formatEntityDefinitionQuery(objectNames), true);
|
|
45
|
+
const result = {};
|
|
46
|
+
for (const entityDef of queryResult.records) {
|
|
47
|
+
result[entityDef.QualifiedApiName] = entityDef;
|
|
48
|
+
}
|
|
49
|
+
return result;
|
|
50
|
+
}
|
|
51
|
+
async fetchToolingCustomObjects() {
|
|
52
|
+
const queryResult = await this.con.query(CUSTOM_OBJECT_BASE_QUERY, true);
|
|
53
|
+
const result = {};
|
|
54
|
+
for (const def of queryResult.records) {
|
|
55
|
+
// Custom Objects return their Id with case-insensitive 18-char id, but the
|
|
56
|
+
// "DurableId" that we use from entity definition is 15-char case-sensitive.
|
|
57
|
+
// #make-it-make-sense
|
|
58
|
+
result[def.Id.substring(0, 15)] = def;
|
|
59
|
+
}
|
|
60
|
+
return result;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
function evalObjectType(entityDef) {
|
|
64
|
+
if (entityDef) {
|
|
65
|
+
return entityDef.IsCustomSetting
|
|
66
|
+
? 'CustomSetting'
|
|
67
|
+
: entityDef.QualifiedApiName.endsWith('__mdt')
|
|
68
|
+
? 'CustomMetadata'
|
|
69
|
+
: entityDef.QualifiedApiName.endsWith('__e')
|
|
70
|
+
? 'PlatformEvent'
|
|
71
|
+
: entityDef.QualifiedApiName.endsWith('__kav')
|
|
72
|
+
? 'KnowledgeArticle'
|
|
73
|
+
: 'SObject';
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
return 'Unknown';
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
function buildObjectDefinition(developerName, isSharingControllable, toolingObj, entityDef, customObjectMetadata) {
|
|
80
|
+
return {
|
|
81
|
+
customObjectId: toolingObj?.Id,
|
|
82
|
+
developerName,
|
|
83
|
+
isSharingControllable,
|
|
84
|
+
label: entityDef?.MasterLabel,
|
|
85
|
+
externalSharing: entityDef?.ExternalSharingModel ?? 'Unknown',
|
|
86
|
+
internalSharing: entityDef?.InternalSharingModel ?? 'Unknown',
|
|
87
|
+
sharingModel: toolingObj?.SharingModel ?? 'Unknown',
|
|
88
|
+
isCustom: Boolean(toolingObj),
|
|
89
|
+
type: evalObjectType(entityDef),
|
|
90
|
+
hasEntityDefinition: Boolean(entityDef),
|
|
91
|
+
hasCustomObjectMetadata: Boolean(customObjectMetadata),
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=object-definitions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"object-definitions.js","sourceRoot":"","sources":["../../../../src/salesforce/repositories/object-definitions/object-definitions.ts"],"names":[],"mappings":"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"}
|