sfdx-browserforce-plugin 4.6.1 → 4.7.1
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/lib/plugins/customer-portal/available-custom-objects/index.js +3 -4
- package/lib/plugins/customer-portal/available-custom-objects/index.js.map +1 -1
- package/lib/plugins/history-tracking/index.d.ts +17 -0
- package/lib/plugins/history-tracking/index.e2e-spec.d.ts +1 -0
- package/lib/plugins/history-tracking/index.e2e-spec.js +106 -0
- package/lib/plugins/history-tracking/index.e2e-spec.js.map +1 -0
- package/lib/plugins/history-tracking/index.js +170 -0
- package/lib/plugins/history-tracking/index.js.map +1 -0
- package/lib/plugins/index.d.ts +2 -1
- package/lib/plugins/index.js +2 -1
- package/lib/plugins/index.js.map +1 -1
- package/oclif.manifest.json +1 -1
- package/package.json +5 -5
|
@@ -15,15 +15,14 @@ export class CustomerPortalAvailableCustomObjects extends BrowserforcePlugin {
|
|
|
15
15
|
.join(',');
|
|
16
16
|
const customObjects = await this.org
|
|
17
17
|
.getConnection()
|
|
18
|
-
.tooling.query(`SELECT Id, DeveloperName, NamespacePrefix FROM CustomObject WHERE DeveloperName IN (${availableCustomObjectList})`, { scanAll: false });
|
|
18
|
+
.tooling.query(`SELECT Id, DeveloperName, NamespacePrefix FROM CustomObject WHERE DeveloperName IN (${availableCustomObjectList}) ORDER BY CreatedDate DESC`, { scanAll: false });
|
|
19
|
+
// Note: Unfortunately scanAll=false has no impact and returns deleted CustomObjects.
|
|
20
|
+
// Workaround: Order by CreatedDate DESC to get the latest CustomObject first.
|
|
19
21
|
for (const record of customObjects?.records) {
|
|
20
22
|
if (record.NamespacePrefix === null) {
|
|
21
23
|
record.NamespacePrefix = undefined;
|
|
22
24
|
}
|
|
23
25
|
}
|
|
24
|
-
// BUG in jsforce: query acts with scanAll:true and returns deleted CustomObjects.
|
|
25
|
-
// It cannot be disabled.
|
|
26
|
-
// This will throw a timeout error waitingFor('#options_9')
|
|
27
26
|
const page = await this.browserforce.openPage('');
|
|
28
27
|
// new URLs for LEX: https://help.salesforce.com/articleView?id=FAQ-for-the-New-URL-Format-for-Lightning-Experience-and-the-Salesforce-Mobile-App&type=1
|
|
29
28
|
const isLEX = page.url().includes('/one/one.app') || page.url().includes('/lightning/');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/plugins/customer-portal/available-custom-objects/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAEzD,MAAM,SAAS,GAAG;IAChB,WAAW,EAAE,oBAAoB;IACjC,2CAA2C,EAAE,YAAY;CAC1D,CAAC;AAgBF,MAAM,OAAO,oCAAqC,SAAQ,kBAAkB;IACnE,KAAK,CAAC,QAAQ,CAAC,UAAkB;QACtC,MAAM,QAAQ,GAAW,EAAE,CAAC;QAC5B,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,yBAAyB,GAAG,UAAU;iBACzC,GAAG,CAAC,CAAC,YAAY,EAAE,EAAE;gBACpB,OAAO,IAAI,YAAY,CAAC,IAAI,GAAG,CAAC;YAClC,CAAC,CAAC;iBACD,IAAI,CAAC,GAAG,CAAC,CAAC;YACb,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,GAAG;iBACjC,aAAa,EAAE;iBACf,OAAO,CAAC,KAAK,CACZ,uFAAuF,yBAAyB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/plugins/customer-portal/available-custom-objects/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { BrowserforcePlugin } from '../../plugin.js';
|
|
2
|
+
type HistoryTrackingConfig = {
|
|
3
|
+
objectApiName: string;
|
|
4
|
+
enableHistoryTracking?: boolean;
|
|
5
|
+
fieldHistoryTracking?: FieldHistoryTrackingConfig[];
|
|
6
|
+
};
|
|
7
|
+
export type FieldHistoryTrackingConfig = {
|
|
8
|
+
fieldApiName: string;
|
|
9
|
+
enableHistoryTracking: boolean;
|
|
10
|
+
};
|
|
11
|
+
export declare class HistoryTracking extends BrowserforcePlugin {
|
|
12
|
+
retrieve(definition?: HistoryTrackingConfig[]): Promise<HistoryTrackingConfig[]>;
|
|
13
|
+
apply(plan: HistoryTrackingConfig[]): Promise<void>;
|
|
14
|
+
private getFieldSelectorByFieldApiName;
|
|
15
|
+
private getTableEnumOrIdByObjectApiName;
|
|
16
|
+
}
|
|
17
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import assert from 'assert';
|
|
2
|
+
import * as child from 'child_process';
|
|
3
|
+
import { fileURLToPath } from 'node:url';
|
|
4
|
+
import * as path from 'path';
|
|
5
|
+
import { HistoryTracking } from './index.js';
|
|
6
|
+
const __dirname = fileURLToPath(new URL('.', import.meta.url));
|
|
7
|
+
describe(HistoryTracking.name, function () {
|
|
8
|
+
let plugin;
|
|
9
|
+
before(() => {
|
|
10
|
+
plugin = new HistoryTracking(global.bf);
|
|
11
|
+
});
|
|
12
|
+
const enableHistoryTracking = [
|
|
13
|
+
{
|
|
14
|
+
objectApiName: "Account",
|
|
15
|
+
enableHistoryTracking: true,
|
|
16
|
+
fieldHistoryTracking: [
|
|
17
|
+
{
|
|
18
|
+
fieldApiName: "PersonBirthdate",
|
|
19
|
+
enableHistoryTracking: true
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
fieldApiName: "Test__pc",
|
|
23
|
+
enableHistoryTracking: true
|
|
24
|
+
}
|
|
25
|
+
]
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
objectApiName: "Opportunity",
|
|
29
|
+
enableHistoryTracking: true,
|
|
30
|
+
fieldHistoryTracking: [
|
|
31
|
+
{
|
|
32
|
+
fieldApiName: "Type",
|
|
33
|
+
enableHistoryTracking: true
|
|
34
|
+
}
|
|
35
|
+
]
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
objectApiName: "Test__c",
|
|
39
|
+
fieldHistoryTracking: [
|
|
40
|
+
{
|
|
41
|
+
fieldApiName: "Owner",
|
|
42
|
+
enableHistoryTracking: true
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
fieldApiName: "Test__c",
|
|
46
|
+
enableHistoryTracking: true
|
|
47
|
+
}
|
|
48
|
+
]
|
|
49
|
+
}
|
|
50
|
+
];
|
|
51
|
+
const disableHistoryTracking = [
|
|
52
|
+
{
|
|
53
|
+
objectApiName: "Account",
|
|
54
|
+
enableHistoryTracking: true,
|
|
55
|
+
fieldHistoryTracking: [
|
|
56
|
+
{
|
|
57
|
+
fieldApiName: "PersonBirthdate",
|
|
58
|
+
enableHistoryTracking: false
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
fieldApiName: "Test__pc",
|
|
62
|
+
enableHistoryTracking: true
|
|
63
|
+
}
|
|
64
|
+
]
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
objectApiName: "Opportunity",
|
|
68
|
+
enableHistoryTracking: false
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
objectApiName: "Test__c",
|
|
72
|
+
fieldHistoryTracking: [
|
|
73
|
+
{
|
|
74
|
+
fieldApiName: "Owner",
|
|
75
|
+
enableHistoryTracking: true
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
fieldApiName: "Test__c",
|
|
79
|
+
enableHistoryTracking: false
|
|
80
|
+
}
|
|
81
|
+
]
|
|
82
|
+
}
|
|
83
|
+
];
|
|
84
|
+
it('should create custom object and fields as a prerequisite', () => {
|
|
85
|
+
const sourceDeployCmd = child.spawnSync('sf', [
|
|
86
|
+
'project',
|
|
87
|
+
'deploy',
|
|
88
|
+
'start',
|
|
89
|
+
'-d',
|
|
90
|
+
path.join(__dirname, 'sfdx-source'),
|
|
91
|
+
'--json'
|
|
92
|
+
]);
|
|
93
|
+
assert.deepStrictEqual(sourceDeployCmd.status, 0, sourceDeployCmd.output.toString());
|
|
94
|
+
});
|
|
95
|
+
it('should enable history tracking for objects and fields', async () => {
|
|
96
|
+
await plugin.run(enableHistoryTracking);
|
|
97
|
+
const res = await plugin.retrieve(enableHistoryTracking);
|
|
98
|
+
assert.deepStrictEqual(res, enableHistoryTracking);
|
|
99
|
+
});
|
|
100
|
+
it('should disable history tracking for objects and fields', async () => {
|
|
101
|
+
await plugin.run(disableHistoryTracking);
|
|
102
|
+
const res = await plugin.retrieve(disableHistoryTracking);
|
|
103
|
+
assert.deepStrictEqual(res, disableHistoryTracking);
|
|
104
|
+
});
|
|
105
|
+
});
|
|
106
|
+
//# sourceMappingURL=index.e2e-spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.e2e-spec.js","sourceRoot":"","sources":["../../../src/plugins/history-tracking/index.e2e-spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import { BrowserforcePlugin } from '../../plugin.js';
|
|
2
|
+
const PATHS = {
|
|
3
|
+
BASE: 'ui/setup/layout/FieldHistoryTracking?pEntity={APINAME}',
|
|
4
|
+
};
|
|
5
|
+
const SELECTORS = {
|
|
6
|
+
ENABLE_HISTORY: 'input[id="enable"][type="checkbox"][name="enable"]',
|
|
7
|
+
ENABLE_FIELD_HISTORY: 'input[id="{APINAME}_fht"]',
|
|
8
|
+
SAVE_BUTTON: 'input[class="btn"][type="submit"][name="save"][title="Save"]',
|
|
9
|
+
};
|
|
10
|
+
export class HistoryTracking extends BrowserforcePlugin {
|
|
11
|
+
async retrieve(definition) {
|
|
12
|
+
const historyTrackingConfigs = [];
|
|
13
|
+
// We first need to retrieve the corresponding CustomField.TableOrEnumId for all objects
|
|
14
|
+
// This is in case we have field tracking configured for custom fields
|
|
15
|
+
const tableEnumOrIdByObjectApiName = await this.getTableEnumOrIdByObjectApiName(definition);
|
|
16
|
+
// Now we can iterate over all history tracking configurations in the definition
|
|
17
|
+
for await (const historyTrackingConfig of definition) {
|
|
18
|
+
const historyTrackingResult = { ...historyTrackingConfig };
|
|
19
|
+
// Open the object history tracking setup page
|
|
20
|
+
const page = await this.browserforce.openPage(PATHS.BASE.replace('{APINAME}', tableEnumOrIdByObjectApiName.get(historyTrackingConfig.objectApiName)));
|
|
21
|
+
// Retrieve the object history tracking
|
|
22
|
+
// If this is a custom object, this checkbox does not exist, so skip
|
|
23
|
+
if (!historyTrackingConfig.objectApiName.includes('__c')) {
|
|
24
|
+
await page.waitForSelector(SELECTORS.ENABLE_HISTORY);
|
|
25
|
+
historyTrackingResult.enableHistoryTracking = await page.$eval(SELECTORS.ENABLE_HISTORY, (el) => (el.getAttribute('checked') === 'checked' ? true : false));
|
|
26
|
+
}
|
|
27
|
+
// If we have no field history tracking, there is nothing more to do
|
|
28
|
+
if (!historyTrackingConfig.fieldHistoryTracking) {
|
|
29
|
+
historyTrackingConfigs.push(historyTrackingResult);
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
const fieldHistoryTrackingConfigs = [];
|
|
33
|
+
// If the object history tracking is false, then we already know all field history tracking is false
|
|
34
|
+
// Only so long as this is a standard object
|
|
35
|
+
if (!historyTrackingResult.enableHistoryTracking && !historyTrackingConfig.objectApiName.includes('__c')) {
|
|
36
|
+
for (const fieldHistoryTracking of historyTrackingConfig.fieldHistoryTracking) {
|
|
37
|
+
fieldHistoryTrackingConfigs.push({
|
|
38
|
+
...fieldHistoryTracking,
|
|
39
|
+
enableHistoryTracking: false,
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
historyTrackingResult.fieldHistoryTracking = fieldHistoryTrackingConfigs;
|
|
43
|
+
historyTrackingConfigs.push(historyTrackingResult);
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
// We need to determine the correct html selector for each field that is configured
|
|
47
|
+
// This is because custom fields are identified using their CustomField.Id value
|
|
48
|
+
const fieldSelectorByFieldApiName = await this.getFieldSelectorByFieldApiName(tableEnumOrIdByObjectApiName.get(historyTrackingConfig.objectApiName), historyTrackingConfig.fieldHistoryTracking);
|
|
49
|
+
// We can now retrieve the field history settings for the fields specified for the object
|
|
50
|
+
for await (const fieldHistoryTracking of historyTrackingConfig.fieldHistoryTracking) {
|
|
51
|
+
const fieldHistoryTrackingResult = { ...fieldHistoryTracking };
|
|
52
|
+
const fieldApiName = fieldSelectorByFieldApiName.get(fieldHistoryTracking.fieldApiName);
|
|
53
|
+
fieldHistoryTrackingResult.enableHistoryTracking = await page.$eval(SELECTORS.ENABLE_FIELD_HISTORY.replace('{APINAME}', fieldApiName), (el) => (el.getAttribute('checked') === 'checked' ? true : false));
|
|
54
|
+
fieldHistoryTrackingConfigs.push(fieldHistoryTrackingResult);
|
|
55
|
+
}
|
|
56
|
+
historyTrackingResult.fieldHistoryTracking = fieldHistoryTrackingConfigs;
|
|
57
|
+
historyTrackingConfigs.push(historyTrackingResult);
|
|
58
|
+
}
|
|
59
|
+
return historyTrackingConfigs;
|
|
60
|
+
}
|
|
61
|
+
async apply(plan) {
|
|
62
|
+
// We first need to retrieve the corresponding CustomField.TableOrEnumId for all objects
|
|
63
|
+
// This is in case we are configuring field tracking for custom fields
|
|
64
|
+
const tableEnumOrIdByObjectApiName = await this.getTableEnumOrIdByObjectApiName(plan);
|
|
65
|
+
// Now we can iterate over all history tracking configurations in the plan
|
|
66
|
+
for await (const historyTrackingConfig of plan) {
|
|
67
|
+
// Open the object history tracking setup page
|
|
68
|
+
const page = await this.browserforce.openPage(PATHS.BASE.replace('{APINAME}', tableEnumOrIdByObjectApiName.get(historyTrackingConfig.objectApiName)));
|
|
69
|
+
// Retrieve the object history tracking
|
|
70
|
+
// If this is a custom object, this checkbox does not exist, so skip
|
|
71
|
+
if (!historyTrackingConfig.objectApiName.includes('__c')) {
|
|
72
|
+
await page.waitForSelector(SELECTORS.ENABLE_HISTORY);
|
|
73
|
+
const historyTrackingEnabled = await page.$eval(SELECTORS.ENABLE_HISTORY, (el) => (el.getAttribute('checked') === 'checked' ? true : false));
|
|
74
|
+
if (historyTrackingConfig.enableHistoryTracking !== historyTrackingEnabled) {
|
|
75
|
+
// Click the checkbox
|
|
76
|
+
const enableHistoryTracking = await page.waitForSelector(SELECTORS.ENABLE_HISTORY);
|
|
77
|
+
await enableHistoryTracking.evaluate((node) => node.click());
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
if (historyTrackingConfig.fieldHistoryTracking) {
|
|
81
|
+
// We need to determine the correct html selector for each field that is configured
|
|
82
|
+
// This is because custom fields are identified using their CustomField.Id value
|
|
83
|
+
const fieldSelectorByFieldApiName = await this.getFieldSelectorByFieldApiName(tableEnumOrIdByObjectApiName.get(historyTrackingConfig.objectApiName), historyTrackingConfig.fieldHistoryTracking);
|
|
84
|
+
// We can now retrieve the field history settings for the fields specified for the object
|
|
85
|
+
for await (const fieldHistoryTracking of historyTrackingConfig.fieldHistoryTracking) {
|
|
86
|
+
const fieldApiName = fieldSelectorByFieldApiName.get(fieldHistoryTracking.fieldApiName);
|
|
87
|
+
const fieldSelector = SELECTORS.ENABLE_FIELD_HISTORY.replace('{APINAME}', fieldApiName);
|
|
88
|
+
const fieldHistoryTrackingEnabled = await page.$eval(fieldSelector, (el) => (el.getAttribute('checked') === 'checked' ? true : false));
|
|
89
|
+
if (fieldHistoryTracking.enableHistoryTracking !== fieldHistoryTrackingEnabled) {
|
|
90
|
+
// Click the checkbox
|
|
91
|
+
const enableFieldHistoryTracking = await page.waitForSelector(fieldSelector);
|
|
92
|
+
await enableFieldHistoryTracking.evaluate((node) => node.click());
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
// Save the settings
|
|
97
|
+
const saveButton = await page.waitForSelector(SELECTORS.SAVE_BUTTON);
|
|
98
|
+
await saveButton.evaluate((node) => node.click());
|
|
99
|
+
// Wait for the page to refresh
|
|
100
|
+
await page.waitForNavigation();
|
|
101
|
+
// Close the page
|
|
102
|
+
await page.close();
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
async getFieldSelectorByFieldApiName(tableEnumOrId, fieldHistoryTrackingConfigs) {
|
|
106
|
+
const fieldSelectorByFieldApiName = new Map();
|
|
107
|
+
const customFieldApiNames = [];
|
|
108
|
+
const personAccountFieldApiNames = [];
|
|
109
|
+
for (const fieldHistoryTrackingConfig of fieldHistoryTrackingConfigs) {
|
|
110
|
+
// If this is a person account field, we must do special handling for this
|
|
111
|
+
if (tableEnumOrId === 'Account' &&
|
|
112
|
+
fieldHistoryTrackingConfig.fieldApiName.includes('__pc')) {
|
|
113
|
+
personAccountFieldApiNames.push(`'${fieldHistoryTrackingConfig.fieldApiName.replace('__pc', '')}'`);
|
|
114
|
+
continue;
|
|
115
|
+
}
|
|
116
|
+
// If this is a custom field, we must query for the Field Id
|
|
117
|
+
if (fieldHistoryTrackingConfig.fieldApiName.includes('__c')) {
|
|
118
|
+
customFieldApiNames.push(`'${fieldHistoryTrackingConfig.fieldApiName.replace('__c', '')}'`);
|
|
119
|
+
continue;
|
|
120
|
+
}
|
|
121
|
+
// Otherwise, if this is a standard field, the Selector is the Field API Name
|
|
122
|
+
fieldSelectorByFieldApiName.set(fieldHistoryTrackingConfig.fieldApiName, fieldHistoryTrackingConfig.fieldApiName);
|
|
123
|
+
}
|
|
124
|
+
if (customFieldApiNames.length === 0 &&
|
|
125
|
+
personAccountFieldApiNames.length === 0) {
|
|
126
|
+
return fieldSelectorByFieldApiName;
|
|
127
|
+
}
|
|
128
|
+
if (personAccountFieldApiNames.length > 0) {
|
|
129
|
+
const personAccountFieldsQuery = await this.org
|
|
130
|
+
.getConnection()
|
|
131
|
+
.tooling.query(`SELECT Id, DeveloperName FROM CustomField WHERE DeveloperName IN (${personAccountFieldApiNames.join(',')}) AND TableEnumOrId = 'Contact'`);
|
|
132
|
+
for (const personAccountField of personAccountFieldsQuery.records) {
|
|
133
|
+
fieldSelectorByFieldApiName.set(`${personAccountField.DeveloperName}__pc`, personAccountField.Id.substring(0, 15));
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
if (customFieldApiNames.length > 0) {
|
|
137
|
+
const customFieldsQuery = await this.org
|
|
138
|
+
.getConnection()
|
|
139
|
+
.tooling.query(`SELECT Id, DeveloperName FROM CustomField WHERE DeveloperName IN (${customFieldApiNames.join(',')}) AND TableEnumOrId = '${tableEnumOrId}'`);
|
|
140
|
+
for (const customField of customFieldsQuery.records) {
|
|
141
|
+
fieldSelectorByFieldApiName.set(`${customField.DeveloperName}__c`, customField.Id.substring(0, 15));
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
return fieldSelectorByFieldApiName;
|
|
145
|
+
}
|
|
146
|
+
async getTableEnumOrIdByObjectApiName(historyTrackingConfigs) {
|
|
147
|
+
const tableEnumOrIdByObjectApiName = new Map();
|
|
148
|
+
const customObjectApiNames = [];
|
|
149
|
+
for (const historyTrackingConfig of historyTrackingConfigs) {
|
|
150
|
+
// If it is a custom object, the CustomField.TableEnumOrId is the Object Id
|
|
151
|
+
if (historyTrackingConfig.objectApiName.includes('__c')) {
|
|
152
|
+
customObjectApiNames.push(`'${historyTrackingConfig.objectApiName.replace('__c', '')}'`);
|
|
153
|
+
continue;
|
|
154
|
+
}
|
|
155
|
+
// Otherwise, if this is a standard object, the CustomField.TableEnumOrId is the Object API Name
|
|
156
|
+
tableEnumOrIdByObjectApiName.set(historyTrackingConfig.objectApiName, historyTrackingConfig.objectApiName);
|
|
157
|
+
}
|
|
158
|
+
if (customObjectApiNames.length === 0) {
|
|
159
|
+
return tableEnumOrIdByObjectApiName;
|
|
160
|
+
}
|
|
161
|
+
const customObjectsQuery = await this.org
|
|
162
|
+
.getConnection()
|
|
163
|
+
.tooling.query(`SELECT Id, DeveloperName FROM CustomObject WHERE DeveloperName IN (${customObjectApiNames.join(',')})`);
|
|
164
|
+
for (const customObject of customObjectsQuery.records) {
|
|
165
|
+
tableEnumOrIdByObjectApiName.set(`${customObject.DeveloperName}__c`, customObject.Id);
|
|
166
|
+
}
|
|
167
|
+
return tableEnumOrIdByObjectApiName;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/history-tracking/index.ts"],"names":[],"mappings":"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"}
|
package/lib/plugins/index.d.ts
CHANGED
|
@@ -6,6 +6,7 @@ import { DeferSharingCalculation as deferSharingCalculation } from './defer-shar
|
|
|
6
6
|
import { DensitySettings as densitySettings } from './density-settings/index.js';
|
|
7
7
|
import { EmailDeliverability as emailDeliverability } from './email-deliverability/index.js';
|
|
8
8
|
import { HighVelocitySalesSettings as highVelocitySalesSettings } from './high-velocity-sales-settings/index.js';
|
|
9
|
+
import { HistoryTracking as historyTracking } from './history-tracking/index.js';
|
|
9
10
|
import { HomePageLayouts as homePageLayouts } from './home-page-layouts/index.js';
|
|
10
11
|
import { LightningExperienceSettings as lightningExperienceSettings } from './lightning-experience-settings/index.js';
|
|
11
12
|
import { LinkedInSalesNavigatorSettings as linkedInSalesNavigatorSettings } from './linkedin-sales-navigator-settings/index.js';
|
|
@@ -21,4 +22,4 @@ import { SalesforceToSalesforce as salesforceToSalesforce } from './salesforce-t
|
|
|
21
22
|
import { Security as security } from './security/index.js';
|
|
22
23
|
import { ServiceChannels as serviceChannels } from './service-channels/index.js';
|
|
23
24
|
import { Slack as slack } from './slack/index.js';
|
|
24
|
-
export { activitySettings, communities, companyInformation, customerPortal, deferSharingCalculation, densitySettings, emailDeliverability, highVelocitySalesSettings, homePageLayouts, lightningExperienceSettings, linkedInSalesNavigatorSettings, omniChannelSettings, opportunitySplits, permissionSets, picklists, recordTypes, relateContactToMultipleAccounts, reportsAndDashboards, salesforceCpqConfig, salesforceToSalesforce, security, serviceChannels, slack };
|
|
25
|
+
export { activitySettings, communities, companyInformation, customerPortal, deferSharingCalculation, densitySettings, emailDeliverability, highVelocitySalesSettings, historyTracking, homePageLayouts, lightningExperienceSettings, linkedInSalesNavigatorSettings, omniChannelSettings, opportunitySplits, permissionSets, picklists, recordTypes, relateContactToMultipleAccounts, reportsAndDashboards, salesforceCpqConfig, salesforceToSalesforce, security, serviceChannels, slack };
|
package/lib/plugins/index.js
CHANGED
|
@@ -6,6 +6,7 @@ import { DeferSharingCalculation as deferSharingCalculation } from './defer-shar
|
|
|
6
6
|
import { DensitySettings as densitySettings } from './density-settings/index.js';
|
|
7
7
|
import { EmailDeliverability as emailDeliverability } from './email-deliverability/index.js';
|
|
8
8
|
import { HighVelocitySalesSettings as highVelocitySalesSettings } from './high-velocity-sales-settings/index.js';
|
|
9
|
+
import { HistoryTracking as historyTracking } from './history-tracking/index.js';
|
|
9
10
|
import { HomePageLayouts as homePageLayouts } from './home-page-layouts/index.js';
|
|
10
11
|
import { LightningExperienceSettings as lightningExperienceSettings } from './lightning-experience-settings/index.js';
|
|
11
12
|
import { LinkedInSalesNavigatorSettings as linkedInSalesNavigatorSettings } from './linkedin-sales-navigator-settings/index.js';
|
|
@@ -21,5 +22,5 @@ import { SalesforceToSalesforce as salesforceToSalesforce } from './salesforce-t
|
|
|
21
22
|
import { Security as security } from './security/index.js';
|
|
22
23
|
import { ServiceChannels as serviceChannels } from './service-channels/index.js';
|
|
23
24
|
import { Slack as slack } from './slack/index.js';
|
|
24
|
-
export { activitySettings, communities, companyInformation, customerPortal, deferSharingCalculation, densitySettings, emailDeliverability, highVelocitySalesSettings, homePageLayouts, lightningExperienceSettings, linkedInSalesNavigatorSettings, omniChannelSettings, opportunitySplits, permissionSets, picklists, recordTypes, relateContactToMultipleAccounts, reportsAndDashboards, salesforceCpqConfig, salesforceToSalesforce, security, serviceChannels, slack };
|
|
25
|
+
export { activitySettings, communities, companyInformation, customerPortal, deferSharingCalculation, densitySettings, emailDeliverability, highVelocitySalesSettings, historyTracking, homePageLayouts, lightningExperienceSettings, linkedInSalesNavigatorSettings, omniChannelSettings, opportunitySplits, permissionSets, picklists, recordTypes, relateContactToMultipleAccounts, reportsAndDashboards, salesforceCpqConfig, salesforceToSalesforce, security, serviceChannels, slack };
|
|
25
26
|
//# sourceMappingURL=index.js.map
|
package/lib/plugins/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/plugins/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,IAAI,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AACpF,OAAO,EAAE,WAAW,IAAI,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EAAE,kBAAkB,IAAI,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAC1F,OAAO,EAAE,cAAc,IAAI,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EAAE,uBAAuB,IAAI,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAC1G,OAAO,EAAE,eAAe,IAAI,eAAe,EAAE,MAAM,6BAA6B,CAAC;AACjF,OAAO,EAAE,mBAAmB,IAAI,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAC7F,OAAO,EAAE,yBAAyB,IAAI,yBAAyB,EAAE,MAAM,yCAAyC,CAAC;AACjH,OAAO,EAAE,eAAe,IAAI,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAClF,OAAO,EAAE,2BAA2B,IAAI,2BAA2B,EAAE,MAAM,0CAA0C,CAAC;AACtH,OAAO,EAAE,8BAA8B,IAAI,8BAA8B,EAAE,MAAM,8CAA8C,CAAC;AAChI,OAAO,EAAE,mBAAmB,IAAI,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAC9F,OAAO,EAAE,iBAAiB,IAAI,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACvF,OAAO,EAAE,cAAc,IAAI,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EAAE,SAAS,IAAI,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,WAAW,IAAI,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,EAAE,+BAA+B,IAAI,+BAA+B,EAAE,MAAM,gDAAgD,CAAC;AACpI,OAAO,EAAE,oBAAoB,IAAI,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACjG,OAAO,EAAE,mBAAmB,IAAI,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAC9F,OAAO,EAAE,sBAAsB,IAAI,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AACvG,OAAO,EAAE,QAAQ,IAAI,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,eAAe,IAAI,eAAe,EAAE,MAAM,6BAA6B,CAAC;AACjF,OAAO,EAAE,KAAK,IAAI,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAElD,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,kBAAkB,EAClB,cAAc,EACd,uBAAuB,EACvB,eAAe,EACf,mBAAmB,EACnB,yBAAyB,EACzB,eAAe,EACf,2BAA2B,EAC3B,8BAA8B,EAC9B,mBAAmB,EACnB,iBAAiB,EACjB,cAAc,EACd,SAAS,EACT,WAAW,EACX,+BAA+B,EAC/B,oBAAoB,EACpB,mBAAmB,EACnB,sBAAsB,EACtB,QAAQ,EACR,eAAe,EACf,KAAK,EACN,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/plugins/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,IAAI,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AACpF,OAAO,EAAE,WAAW,IAAI,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EAAE,kBAAkB,IAAI,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAC1F,OAAO,EAAE,cAAc,IAAI,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EAAE,uBAAuB,IAAI,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAC1G,OAAO,EAAE,eAAe,IAAI,eAAe,EAAE,MAAM,6BAA6B,CAAC;AACjF,OAAO,EAAE,mBAAmB,IAAI,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAC7F,OAAO,EAAE,yBAAyB,IAAI,yBAAyB,EAAE,MAAM,yCAAyC,CAAC;AACjH,OAAO,EAAE,eAAe,IAAI,eAAe,EAAE,MAAM,6BAA6B,CAAC;AACjF,OAAO,EAAE,eAAe,IAAI,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAClF,OAAO,EAAE,2BAA2B,IAAI,2BAA2B,EAAE,MAAM,0CAA0C,CAAC;AACtH,OAAO,EAAE,8BAA8B,IAAI,8BAA8B,EAAE,MAAM,8CAA8C,CAAC;AAChI,OAAO,EAAE,mBAAmB,IAAI,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAC9F,OAAO,EAAE,iBAAiB,IAAI,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACvF,OAAO,EAAE,cAAc,IAAI,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EAAE,SAAS,IAAI,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,WAAW,IAAI,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,EAAE,+BAA+B,IAAI,+BAA+B,EAAE,MAAM,gDAAgD,CAAC;AACpI,OAAO,EAAE,oBAAoB,IAAI,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACjG,OAAO,EAAE,mBAAmB,IAAI,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAC9F,OAAO,EAAE,sBAAsB,IAAI,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AACvG,OAAO,EAAE,QAAQ,IAAI,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,eAAe,IAAI,eAAe,EAAE,MAAM,6BAA6B,CAAC;AACjF,OAAO,EAAE,KAAK,IAAI,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAElD,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,kBAAkB,EAClB,cAAc,EACd,uBAAuB,EACvB,eAAe,EACf,mBAAmB,EACnB,yBAAyB,EACzB,eAAe,EACf,eAAe,EACf,2BAA2B,EAC3B,8BAA8B,EAC9B,mBAAmB,EACnB,iBAAiB,EACjB,cAAc,EACd,SAAS,EACT,WAAW,EACX,+BAA+B,EAC/B,oBAAoB,EACpB,mBAAmB,EACnB,sBAAsB,EACtB,QAAQ,EACR,eAAe,EACf,KAAK,EACN,CAAC"}
|
package/oclif.manifest.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sfdx-browserforce-plugin",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.7.1",
|
|
4
4
|
"description": "sfdx plugin for browser automation",
|
|
5
5
|
"author": "Matthias Rolke <mr.amtrack@gmail.com>",
|
|
6
6
|
"type": "module",
|
|
@@ -9,13 +9,13 @@
|
|
|
9
9
|
},
|
|
10
10
|
"dependencies": {
|
|
11
11
|
"@mdapi-issues/listmetadata-standardvalueset": "3.1.0",
|
|
12
|
-
"@salesforce/sf-plugins-core": "12.
|
|
12
|
+
"@salesforce/sf-plugins-core": "12.2.2",
|
|
13
13
|
"p-retry": "6.2.1",
|
|
14
|
-
"puppeteer": "
|
|
14
|
+
"puppeteer": "24.9.0"
|
|
15
15
|
},
|
|
16
16
|
"devDependencies": {
|
|
17
|
-
"@salesforce/dev-scripts": "
|
|
18
|
-
"oclif": "4.17.
|
|
17
|
+
"@salesforce/dev-scripts": "11.0.2",
|
|
18
|
+
"oclif": "4.17.46"
|
|
19
19
|
},
|
|
20
20
|
"files": [
|
|
21
21
|
"/bin",
|