sfdx-browserforce-plugin 4.7.1 → 4.8.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/linkedin-sales-navigator-settings/page.js +10 -12
- package/lib/plugins/linkedin-sales-navigator-settings/page.js.map +1 -1
- package/lib/plugins/security/authentication-configuration/index.d.ts +11 -0
- package/lib/plugins/security/authentication-configuration/index.e2e-spec.d.ts +1 -0
- package/lib/plugins/security/authentication-configuration/index.e2e-spec.js +107 -0
- package/lib/plugins/security/authentication-configuration/index.e2e-spec.js.map +1 -0
- package/lib/plugins/security/authentication-configuration/index.js +64 -0
- package/lib/plugins/security/authentication-configuration/index.js.map +1 -0
- package/lib/plugins/security/index.d.ts +2 -0
- package/lib/plugins/security/index.js +13 -0
- package/lib/plugins/security/index.js.map +1 -1
- package/lib/plugins/slack/index.js +22 -17
- package/lib/plugins/slack/index.js.map +1 -1
- package/oclif.manifest.json +1 -1
- package/package.json +3 -3
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { throwPageErrors } from '../../browserforce.js';
|
|
2
|
-
const ENABLE_TOGGLE = 'div[data-aura-class="setup_sales_linkedinLinkedInSetupRow"] input[type="checkbox"]';
|
|
3
|
-
const CONFIRM_CHECKBOX = 'lightning-input lightning-primitive-input-checkbox input[name="LinkedIn Sales Navigator Integration Acceptance Checkbox"]';
|
|
2
|
+
const ENABLE_TOGGLE = 'div[data-aura-class="setup_sales_linkedinLinkedInSetupRow"] input[type="checkbox"]:not(:disabled)';
|
|
3
|
+
const CONFIRM_CHECKBOX = 'lightning-input lightning-primitive-input-checkbox input[name="LinkedIn Sales Navigator Integration Acceptance Checkbox"]:not(:disabled)';
|
|
4
4
|
const ACCEPT_BUTTON = 'section[data-aura-class="setup_sales_linkedinLinkedInSetupAcceptTermsModal"] div div button:not(:disabled):nth-child(2)';
|
|
5
5
|
export class LinkedInSalesNavigatorPage {
|
|
6
6
|
page;
|
|
@@ -11,21 +11,19 @@ export class LinkedInSalesNavigatorPage {
|
|
|
11
11
|
return 'lightning/setup/LinkedInSalesNavigatorPage/home';
|
|
12
12
|
}
|
|
13
13
|
async getStatus() {
|
|
14
|
-
await this.page
|
|
15
|
-
|
|
14
|
+
const isEnabled = await this.page
|
|
15
|
+
.locator(ENABLE_TOGGLE)
|
|
16
|
+
.map((checkbox) => checkbox.checked)
|
|
17
|
+
.wait();
|
|
16
18
|
await this.page.close();
|
|
17
19
|
return isEnabled;
|
|
18
20
|
}
|
|
19
21
|
async setStatus(enable) {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
await toggle?.evaluate((input) => input.click());
|
|
22
|
+
// NOTE: Unfortunately a simple click() on the locator does not work here
|
|
23
|
+
await (await this.page.locator(ENABLE_TOGGLE).waitHandle()).evaluate((checkbox) => checkbox.click());
|
|
23
24
|
if (enable) {
|
|
24
|
-
await this.page.
|
|
25
|
-
|
|
26
|
-
await checkbox?.evaluate((input) => input.click());
|
|
27
|
-
await this.page.waitForSelector(ACCEPT_BUTTON, { visible: true });
|
|
28
|
-
await this.page.click(ACCEPT_BUTTON);
|
|
25
|
+
await (await this.page.locator(CONFIRM_CHECKBOX).waitHandle()).evaluate((checkbox) => checkbox.click());
|
|
26
|
+
await (await this.page.locator(ACCEPT_BUTTON).waitHandle()).evaluate((button) => button.click());
|
|
29
27
|
}
|
|
30
28
|
await throwPageErrors(this.page);
|
|
31
29
|
await this.page.close();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page.js","sourceRoot":"","sources":["../../../src/plugins/linkedin-sales-navigator-settings/page.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,MAAM,aAAa,
|
|
1
|
+
{"version":3,"file":"page.js","sourceRoot":"","sources":["../../../src/plugins/linkedin-sales-navigator-settings/page.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,MAAM,aAAa,GACjB,mGAAmG,CAAC;AACtG,MAAM,gBAAgB,GACpB,0IAA0I,CAAC;AAC7I,MAAM,aAAa,GACjB,yHAAyH,CAAC;AAE5H,MAAM,OAAO,0BAA0B;IAC7B,IAAI,CAAO;IAEnB,YAAY,IAAU;QACpB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAEM,MAAM,CAAC,MAAM;QAClB,OAAO,iDAAiD,CAAC;IAC3D,CAAC;IAEM,KAAK,CAAC,SAAS;QACpB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,IAAI;aAC9B,OAAO,CAAC,aAAa,CAAC;aACtB,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;aACnC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QACxB,OAAO,SAAS,CAAC;IACnB,CAAC;IAEM,KAAK,CAAC,SAAS,CAAC,MAAe;QACpC,yEAAyE;QACzE,MAAM,CACJ,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,UAAU,EAAE,CACpD,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;QAE3C,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,CACJ,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,UAAU,EAAE,CACvD,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;YAC3C,MAAM,CACJ,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,UAAU,EAAE,CACpD,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QACzC,CAAC;QAED,MAAM,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IAC1B,CAAC;CACF"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { BrowserforcePlugin } from '../../../plugin.js';
|
|
2
|
+
export type Config = {
|
|
3
|
+
services: Array<{
|
|
4
|
+
label: string;
|
|
5
|
+
enabled: boolean;
|
|
6
|
+
}>;
|
|
7
|
+
};
|
|
8
|
+
export declare class AuthenticationConfiguration extends BrowserforcePlugin {
|
|
9
|
+
retrieve(definition: Config): Promise<Config>;
|
|
10
|
+
apply(plan: Config): Promise<void>;
|
|
11
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,107 @@
|
|
|
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 { AuthenticationConfiguration } from './index.js';
|
|
6
|
+
const __dirname = fileURLToPath(new URL('.', import.meta.url));
|
|
7
|
+
describe(AuthenticationConfiguration.name, function () {
|
|
8
|
+
let plugin;
|
|
9
|
+
before(() => {
|
|
10
|
+
plugin = new AuthenticationConfiguration(global.bf);
|
|
11
|
+
});
|
|
12
|
+
describe('authentication configuration', () => {
|
|
13
|
+
const configRetrieveSingle = {
|
|
14
|
+
services: [
|
|
15
|
+
{ label: 'Login Form', enabled: true }
|
|
16
|
+
]
|
|
17
|
+
};
|
|
18
|
+
const configRmoveSingle = {
|
|
19
|
+
services: [
|
|
20
|
+
{ label: 'Login Form', enabled: false }
|
|
21
|
+
]
|
|
22
|
+
};
|
|
23
|
+
const configApplyMultiple = {
|
|
24
|
+
services: [
|
|
25
|
+
{ label: 'Login Form', enabled: false },
|
|
26
|
+
{ label: 'TestAuthMethod', enabled: true }
|
|
27
|
+
]
|
|
28
|
+
};
|
|
29
|
+
const configApplyMissing = {
|
|
30
|
+
services: [
|
|
31
|
+
{ label: 'FakeAuthMethod', enabled: true }
|
|
32
|
+
]
|
|
33
|
+
};
|
|
34
|
+
const resetTestState = {
|
|
35
|
+
services: [
|
|
36
|
+
{ label: 'Login Form', enabled: true },
|
|
37
|
+
{ label: 'TestAuthMethod', enabled: false }
|
|
38
|
+
]
|
|
39
|
+
};
|
|
40
|
+
it('should retrieve the single enabled Login Form auth', async () => {
|
|
41
|
+
const res = await plugin.retrieve(configRetrieveSingle);
|
|
42
|
+
assert.deepStrictEqual(res, configRetrieveSingle);
|
|
43
|
+
});
|
|
44
|
+
it('should not do anything when the configuration is already set', async () => {
|
|
45
|
+
const res = await plugin.run(configRetrieveSingle);
|
|
46
|
+
assert.deepStrictEqual(res, { message: 'no action necessary' });
|
|
47
|
+
});
|
|
48
|
+
it('should throw an error when trying to remove the only enabled service', async () => {
|
|
49
|
+
let err;
|
|
50
|
+
try {
|
|
51
|
+
await plugin.apply(configRmoveSingle);
|
|
52
|
+
}
|
|
53
|
+
catch (e) {
|
|
54
|
+
err = e;
|
|
55
|
+
}
|
|
56
|
+
assert.throws(() => {
|
|
57
|
+
throw err;
|
|
58
|
+
}, /You must select at least one authentication service/);
|
|
59
|
+
});
|
|
60
|
+
it('should deploy an AuthProvider for testing', () => {
|
|
61
|
+
const sourceDeployCmd = child.spawnSync('sf', [
|
|
62
|
+
'project',
|
|
63
|
+
'deploy',
|
|
64
|
+
'start',
|
|
65
|
+
'-d',
|
|
66
|
+
path.join(__dirname, 'sfdx-source'),
|
|
67
|
+
'--json'
|
|
68
|
+
]);
|
|
69
|
+
assert.deepStrictEqual(sourceDeployCmd.status, 0, sourceDeployCmd.output.toString());
|
|
70
|
+
});
|
|
71
|
+
it('should update multiple auth services', async () => {
|
|
72
|
+
await plugin.apply(configApplyMultiple);
|
|
73
|
+
const res = await plugin.retrieve(configApplyMultiple);
|
|
74
|
+
assert.deepStrictEqual(res, configApplyMultiple);
|
|
75
|
+
});
|
|
76
|
+
it('should throw an error when trying to apply a missing service', async () => {
|
|
77
|
+
let err;
|
|
78
|
+
try {
|
|
79
|
+
await plugin.apply(configApplyMissing);
|
|
80
|
+
}
|
|
81
|
+
catch (e) {
|
|
82
|
+
err = e;
|
|
83
|
+
}
|
|
84
|
+
assert.throws(() => {
|
|
85
|
+
throw err;
|
|
86
|
+
}, /not found/);
|
|
87
|
+
});
|
|
88
|
+
it('should reset auth services back to default', async () => {
|
|
89
|
+
await plugin.apply(resetTestState);
|
|
90
|
+
const res = await plugin.retrieve(resetTestState);
|
|
91
|
+
assert.deepStrictEqual(res, resetTestState);
|
|
92
|
+
});
|
|
93
|
+
it('should remove the testing AuthProvider', () => {
|
|
94
|
+
const sourceDeployCmd = child.spawnSync('sf', [
|
|
95
|
+
'project',
|
|
96
|
+
'delete',
|
|
97
|
+
'source',
|
|
98
|
+
'--metadata',
|
|
99
|
+
'AuthProvider:TestAuthMethod',
|
|
100
|
+
'--no-prompt',
|
|
101
|
+
'--json'
|
|
102
|
+
]);
|
|
103
|
+
assert.deepStrictEqual(sourceDeployCmd.status, 0, sourceDeployCmd.output.toString());
|
|
104
|
+
});
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
//# sourceMappingURL=index.e2e-spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.e2e-spec.js","sourceRoot":"","sources":["../../../../src/plugins/security/authentication-configuration/index.e2e-spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { BrowserforcePlugin } from '../../../plugin.js';
|
|
2
|
+
const PATHS = {
|
|
3
|
+
EDIT_VIEW: 'lightning/setup/OrgDomain/page?address=%2Fdomainname%2FEditLogin.apexp'
|
|
4
|
+
};
|
|
5
|
+
const SELECTORS = {
|
|
6
|
+
SETUP_FORM: 'form[id="BrandSetup:brandSetupForm"]',
|
|
7
|
+
SERVICE_CHECKBOX: 'input.authOption[type="checkbox"]',
|
|
8
|
+
SAVE_BUTTON: 'input[id$=":Save"]',
|
|
9
|
+
ERROR_SPAN: '[id="BrandSetup:brandSetupForm:settingsDetail:es1:es14:authError"]'
|
|
10
|
+
};
|
|
11
|
+
export class AuthenticationConfiguration extends BrowserforcePlugin {
|
|
12
|
+
async retrieve(definition) {
|
|
13
|
+
const page = await this.browserforce.openPage(PATHS.EDIT_VIEW);
|
|
14
|
+
const frameOrPage = await this.browserforce.waitForSelectorInFrameOrPage(page, SELECTORS.SETUP_FORM);
|
|
15
|
+
await frameOrPage.waitForSelector(SELECTORS.SERVICE_CHECKBOX);
|
|
16
|
+
const services = await frameOrPage.$$eval(SELECTORS.SERVICE_CHECKBOX, (inputs, definedServices) => inputs
|
|
17
|
+
.map((cb) => {
|
|
18
|
+
const labelElement = document.querySelector(`label[for="${cb.id}"]`);
|
|
19
|
+
const label = labelElement ? labelElement.textContent.trim() : cb.id;
|
|
20
|
+
return {
|
|
21
|
+
label,
|
|
22
|
+
enabled: cb.checked
|
|
23
|
+
};
|
|
24
|
+
})
|
|
25
|
+
.filter((service) => definedServices.some((definedService) => definedService.label === service.label)), definition.services);
|
|
26
|
+
await page.close();
|
|
27
|
+
return { services };
|
|
28
|
+
}
|
|
29
|
+
async apply(plan) {
|
|
30
|
+
const page = await this.browserforce.openPage(PATHS.EDIT_VIEW);
|
|
31
|
+
const frameOrPage = await this.browserforce.waitForSelectorInFrameOrPage(page, SELECTORS.SETUP_FORM);
|
|
32
|
+
await frameOrPage.waitForSelector(SELECTORS.SERVICE_CHECKBOX);
|
|
33
|
+
for (const svc of plan.services) {
|
|
34
|
+
const checkboxId = await frameOrPage.$$eval(SELECTORS.SERVICE_CHECKBOX, (inputs, serviceName) => {
|
|
35
|
+
for (const inp of inputs) {
|
|
36
|
+
const labelElement = document.querySelector(`label[for="${inp.id}"]`);
|
|
37
|
+
if (labelElement && labelElement.textContent.trim() === serviceName) {
|
|
38
|
+
return inp.id;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return null;
|
|
42
|
+
}, svc.label);
|
|
43
|
+
if (!checkboxId) {
|
|
44
|
+
throw new Error(`Authentication service "${svc.label}" not found`);
|
|
45
|
+
}
|
|
46
|
+
const selector = `[id="${checkboxId}"]`;
|
|
47
|
+
const isChecked = await frameOrPage.$eval(selector, (el) => el.checked);
|
|
48
|
+
if (svc.enabled !== isChecked) {
|
|
49
|
+
await frameOrPage.click(selector);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
const anyChecked = await frameOrPage.$$eval(SELECTORS.SERVICE_CHECKBOX, (inputs) => inputs.some((cb) => cb.checked));
|
|
53
|
+
if (!anyChecked) {
|
|
54
|
+
throw new Error('Change failed: “You must select at least one authentication service.”');
|
|
55
|
+
}
|
|
56
|
+
await frameOrPage.waitForSelector(SELECTORS.SAVE_BUTTON);
|
|
57
|
+
await Promise.all([
|
|
58
|
+
frameOrPage.waitForNavigation({ waitUntil: 'networkidle0' }),
|
|
59
|
+
frameOrPage.click(SELECTORS.SAVE_BUTTON)
|
|
60
|
+
]);
|
|
61
|
+
await page.close();
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/plugins/security/authentication-configuration/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,11 +3,13 @@ import { Config as CertificateAndKeyManagementConfig } from './certificate-and-k
|
|
|
3
3
|
import { Config as IdentityProviderConfig } from './identity-provider/index.js';
|
|
4
4
|
import { Config as LoginAccessPoliciesConfig } from './login-access-policies/index.js';
|
|
5
5
|
import { Config as SharingConfig } from './sharing/index.js';
|
|
6
|
+
import { Config as AuthenticationConfigurationConfig } from './authentication-configuration/index.js';
|
|
6
7
|
type Config = {
|
|
7
8
|
certificateAndKeyManagement?: CertificateAndKeyManagementConfig;
|
|
8
9
|
identityProvider?: IdentityProviderConfig;
|
|
9
10
|
loginAccessPolicies?: LoginAccessPoliciesConfig;
|
|
10
11
|
sharing?: SharingConfig;
|
|
12
|
+
authenticationConfiguration?: AuthenticationConfigurationConfig;
|
|
11
13
|
};
|
|
12
14
|
export declare class Security extends BrowserforcePlugin {
|
|
13
15
|
retrieve(definition?: Config): Promise<Config>;
|
|
@@ -3,6 +3,7 @@ import { CertificateAndKeyManagement } from './certificate-and-key-management/in
|
|
|
3
3
|
import { IdentityProvider } from './identity-provider/index.js';
|
|
4
4
|
import { LoginAccessPolicies } from './login-access-policies/index.js';
|
|
5
5
|
import { Sharing } from './sharing/index.js';
|
|
6
|
+
import { AuthenticationConfiguration } from './authentication-configuration/index.js';
|
|
6
7
|
export class Security extends BrowserforcePlugin {
|
|
7
8
|
async retrieve(definition) {
|
|
8
9
|
const response = {};
|
|
@@ -23,6 +24,10 @@ export class Security extends BrowserforcePlugin {
|
|
|
23
24
|
const pluginSharing = new Sharing(this.browserforce);
|
|
24
25
|
response.sharing = await pluginSharing.retrieve();
|
|
25
26
|
}
|
|
27
|
+
if (definition.authenticationConfiguration) {
|
|
28
|
+
response.authenticationConfiguration =
|
|
29
|
+
await new AuthenticationConfiguration(this.browserforce).retrieve(definition.authenticationConfiguration);
|
|
30
|
+
}
|
|
26
31
|
}
|
|
27
32
|
return response;
|
|
28
33
|
}
|
|
@@ -31,6 +36,7 @@ export class Security extends BrowserforcePlugin {
|
|
|
31
36
|
const identityProvider = new IdentityProvider(this.browserforce).diff(state.identityProvider, definition.identityProvider);
|
|
32
37
|
const loginAccessPolicies = new LoginAccessPolicies(this.browserforce).diff(state.loginAccessPolicies, definition.loginAccessPolicies);
|
|
33
38
|
const sharing = new Sharing(this.browserforce).diff(state.sharing, definition.sharing);
|
|
39
|
+
const authenticationConfiguration = new AuthenticationConfiguration(this.browserforce).diff(state.authenticationConfiguration, definition.authenticationConfiguration);
|
|
34
40
|
const response = {};
|
|
35
41
|
if (certificateAndKeyManagement !== undefined) {
|
|
36
42
|
response.certificateAndKeyManagement = certificateAndKeyManagement;
|
|
@@ -47,6 +53,9 @@ export class Security extends BrowserforcePlugin {
|
|
|
47
53
|
if (sharing !== undefined) {
|
|
48
54
|
response.sharing = sharing;
|
|
49
55
|
}
|
|
56
|
+
if (authenticationConfiguration !== undefined) {
|
|
57
|
+
response.authenticationConfiguration = authenticationConfiguration;
|
|
58
|
+
}
|
|
50
59
|
return Object.keys(response).length ? response : undefined;
|
|
51
60
|
}
|
|
52
61
|
async apply(plan) {
|
|
@@ -66,6 +75,10 @@ export class Security extends BrowserforcePlugin {
|
|
|
66
75
|
const pluginSharing = new Sharing(this.browserforce);
|
|
67
76
|
await pluginSharing.apply(plan.sharing);
|
|
68
77
|
}
|
|
78
|
+
if (plan.authenticationConfiguration) {
|
|
79
|
+
const pluginAuthConfig = new AuthenticationConfiguration(this.browserforce);
|
|
80
|
+
await pluginAuthConfig.apply(plan.authenticationConfiguration);
|
|
81
|
+
}
|
|
69
82
|
}
|
|
70
83
|
}
|
|
71
84
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/security/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EACL,2BAA2B,EAE5B,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAoC,MAAM,8BAA8B,CAAC;AAClG,OAAO,EAAE,mBAAmB,EAAuC,MAAM,kCAAkC,CAAC;AAC5G,OAAO,EAAE,OAAO,EAA2B,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/security/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EACL,2BAA2B,EAE5B,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAoC,MAAM,8BAA8B,CAAC;AAClG,OAAO,EAAE,mBAAmB,EAAuC,MAAM,kCAAkC,CAAC;AAC5G,OAAO,EAAE,OAAO,EAA2B,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,2BAA2B,EAA8C,MAAM,yCAAyC,CAAC;AAWlI,MAAM,OAAO,QAAS,SAAQ,kBAAkB;IACvC,KAAK,CAAC,QAAQ,CAAC,UAAmB;QACvC,MAAM,QAAQ,GAAW,EAAE,CAAC;QAC5B,IAAI,UAAU,EAAE,CAAC;YACf,IAAI,UAAU,CAAC,2BAA2B,EAAE,CAAC;gBAC3C,MAAM,SAAS,GAAG,IAAI,2BAA2B,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBACrE,QAAQ,CAAC,2BAA2B,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,2BAA2B,CAAC,CAAC;YAC1G,CAAC;YACD,IAAI,UAAU,CAAC,gBAAgB,EAAE,CAAC;gBAChC,MAAM,sBAAsB,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBACvE,QAAQ,CAAC,gBAAgB,GAAG,MAAM,sBAAsB,CAAC,QAAQ,EAAE,CAAC;YACtE,CAAC;YACD,IAAI,UAAU,CAAC,mBAAmB,EAAE,CAAC;gBACnC,MAAM,yBAAyB,GAAG,IAAI,mBAAmB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBAC7E,QAAQ,CAAC,mBAAmB,GAAG,MAAM,yBAAyB,CAAC,QAAQ,EAAE,CAAC;YAC5E,CAAC;YACD,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;gBACvB,MAAM,aAAa,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBACrD,QAAQ,CAAC,OAAO,GAAG,MAAM,aAAa,CAAC,QAAQ,EAAE,CAAC;YACpD,CAAC;YACD,IAAI,UAAU,CAAC,2BAA2B,EAAE,CAAC;gBAC3C,QAAQ,CAAC,2BAA2B;oBAChC,MAAM,IAAI,2BAA2B,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,2BAA2B,CAAC,CAAC;YAChH,CAAC;QACH,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEM,IAAI,CAAC,KAAa,EAAE,UAAkB;QAC3C,MAAM,2BAA2B,GAAG,IAAI,2BAA2B,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CACzF,KAAK,CAAC,2BAA2B,EACjC,UAAU,CAAC,2BAA2B,CACvC,CAAC;QACF,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CACnE,KAAK,CAAC,gBAAgB,EACtB,UAAU,CAAC,gBAAgB,CACU,CAAC;QACxC,MAAM,mBAAmB,GAAG,IAAI,mBAAmB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CACzE,KAAK,CAAC,mBAAmB,EACzB,UAAU,CAAC,mBAAmB,CACU,CAAC;QAC3C,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,UAAU,CAAC,OAAO,CAA8B,CAAC;QACpH,MAAM,2BAA2B,GAAG,IAAI,2BAA2B,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CACvF,KAAK,CAAC,2BAA2B,EACjC,UAAU,CAAC,2BAA2B,CACU,CAAC;QACrD,MAAM,QAAQ,GAAW,EAAE,CAAC;QAC5B,IAAI,2BAA2B,KAAK,SAAS,EAAE,CAAC;YAC9C,QAAQ,CAAC,2BAA2B,GAAG,2BAA2B,CAAC;QACrE,CAAC;QACD,IAAI,gBAAgB,KAAK,SAAS,EAAE,CAAC;YACnC,QAAQ,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;QAC/C,CAAC;QACD,IAAI,mBAAmB,KAAK,SAAS,EAAE,CAAC;YACtC,QAAQ,CAAC,mBAAmB,GAAG,mBAAmB,CAAC;QACrD,CAAC;QACD,IAAI,mBAAmB,KAAK,SAAS,EAAE,CAAC;YACtC,QAAQ,CAAC,mBAAmB,GAAG,mBAAmB,CAAC;QACrD,CAAC;QACD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAC;QAC7B,CAAC;QACD,IAAI,2BAA2B,KAAK,SAAS,EAAE,CAAC;YAC9C,QAAQ,CAAC,2BAA2B,GAAG,2BAA2B,CAAC;QACrE,CAAC;QACD,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7D,CAAC;IAEM,KAAK,CAAC,KAAK,CAAC,IAAY;QAC7B,IAAI,IAAI,CAAC,2BAA2B,EAAE,CAAC;YACrC,MAAM,SAAS,GAAG,IAAI,2BAA2B,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACrE,MAAM,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QAC1D,CAAC;QACD,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,MAAM,sBAAsB,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACvE,MAAM,sBAAsB,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC5D,CAAC;QACD,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC7B,MAAM,yBAAyB,GAAG,IAAI,mBAAmB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC7E,MAAM,yBAAyB,CAAC,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAClE,CAAC;QACD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,aAAa,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACrD,MAAM,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1C,CAAC;QACD,IAAI,IAAI,CAAC,2BAA2B,EAAE,CAAC;YACrC,MAAM,gBAAgB,GAAG,IAAI,2BAA2B,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;YAC3E,MAAM,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;CACF"}
|
|
@@ -1,20 +1,22 @@
|
|
|
1
1
|
import { BrowserforcePlugin } from '../../plugin.js';
|
|
2
2
|
const PATHS = {
|
|
3
|
-
BASE: 'lightning/setup/SlackSetupAssistant/home'
|
|
4
|
-
};
|
|
5
|
-
const SELECTORS = {
|
|
6
|
-
TOS_LIGHTNING_INPUT: 'setup_service-slack-setup-assistant-container setup_service-slack-agree-to-terms lightning-input',
|
|
7
|
-
SALES_CLOUD_FOR_SLACK_TOGGLE: 'setup_service-slack-setup-assistant-container setup_service-stage setup_service-steps setup_service-step lightning-input:has(lightning-primitive-input-toggle input[name="SlkSetupStepSalesCloudForSlack"])',
|
|
8
|
-
TOAST_MESSAGE: 'div[id^="toastDescription"]'
|
|
3
|
+
BASE: 'lightning/setup/SlackSetupAssistant/home',
|
|
9
4
|
};
|
|
5
|
+
const TOS_CHECKBOX = 'setup_service-slack-agree-to-terms input[type="checkbox"]';
|
|
6
|
+
const SALES_CLOUD_FOR_SLACK_CHECKBOX = 'input[type="checkbox"][name="SlkSetupStepSalesCloudForSlack"]';
|
|
7
|
+
const TOAST_MESSAGE = 'div[id^="toastDescription"]';
|
|
10
8
|
export class Slack extends BrowserforcePlugin {
|
|
11
9
|
async retrieve(definition) {
|
|
12
10
|
const page = await this.browserforce.openPage(PATHS.BASE);
|
|
13
|
-
await page.waitForSelector(SELECTORS.TOS_LIGHTNING_INPUT, { visible: true });
|
|
14
|
-
await page.waitForSelector(SELECTORS.SALES_CLOUD_FOR_SLACK_TOGGLE, { visible: true });
|
|
15
11
|
const response = {
|
|
16
|
-
agreeToTermsAndConditions: await page
|
|
17
|
-
|
|
12
|
+
agreeToTermsAndConditions: await page
|
|
13
|
+
.locator(TOS_CHECKBOX)
|
|
14
|
+
.map((checkbox) => checkbox.checked)
|
|
15
|
+
.wait(),
|
|
16
|
+
enableSalesCloudForSlack: await page
|
|
17
|
+
.locator(SALES_CLOUD_FOR_SLACK_CHECKBOX)
|
|
18
|
+
.map((checkbox) => checkbox.checked)
|
|
19
|
+
.wait(),
|
|
18
20
|
};
|
|
19
21
|
await page.close();
|
|
20
22
|
return response;
|
|
@@ -25,18 +27,21 @@ export class Slack extends BrowserforcePlugin {
|
|
|
25
27
|
}
|
|
26
28
|
const state = await this.retrieve();
|
|
27
29
|
const page = await this.browserforce.openPage(PATHS.BASE);
|
|
28
|
-
await page.waitForSelector(SELECTORS.TOS_LIGHTNING_INPUT, { visible: true });
|
|
29
30
|
if (state.agreeToTermsAndConditions !== config.agreeToTermsAndConditions) {
|
|
30
|
-
await Promise.all([
|
|
31
|
-
|
|
31
|
+
await Promise.all([
|
|
32
|
+
page.locator(TOAST_MESSAGE).wait(),
|
|
33
|
+
// NOTE: Unfortunately a simple click() on the locator does not work here
|
|
34
|
+
(await page.locator(TOS_CHECKBOX).waitHandle()).evaluate((checkbox) => checkbox.click()),
|
|
35
|
+
]);
|
|
36
|
+
await page.waitForSelector(TOAST_MESSAGE, { hidden: true });
|
|
32
37
|
}
|
|
33
|
-
await page.waitForSelector(SELECTORS.SALES_CLOUD_FOR_SLACK_TOGGLE, { visible: true });
|
|
34
38
|
if (state.enableSalesCloudForSlack !== config.enableSalesCloudForSlack) {
|
|
35
39
|
await Promise.all([
|
|
36
|
-
page.
|
|
37
|
-
|
|
40
|
+
page.locator(TOAST_MESSAGE).wait(),
|
|
41
|
+
// NOTE: Unfortunately a simple click() on the locator does not work here
|
|
42
|
+
(await page.locator(SALES_CLOUD_FOR_SLACK_CHECKBOX).waitHandle()).evaluate((checkbox) => checkbox.click()),
|
|
38
43
|
]);
|
|
39
|
-
await page.waitForSelector(
|
|
44
|
+
await page.waitForSelector(TOAST_MESSAGE, { hidden: true });
|
|
40
45
|
}
|
|
41
46
|
await page.close();
|
|
42
47
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/slack/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,MAAM,KAAK,GAAG;IACZ,IAAI,EAAE,0CAA0C;CACjD,CAAC;AACF,MAAM,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/slack/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,MAAM,KAAK,GAAG;IACZ,IAAI,EAAE,0CAA0C;CACjD,CAAC;AACF,MAAM,YAAY,GAChB,2DAA2D,CAAC;AAC9D,MAAM,8BAA8B,GAClC,+DAA+D,CAAC;AAClE,MAAM,aAAa,GAAG,6BAA6B,CAAC;AAOpD,MAAM,OAAO,KAAM,SAAQ,kBAAkB;IACpC,KAAK,CAAC,QAAQ,CAAC,UAAmB;QACvC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1D,MAAM,QAAQ,GAAG;YACf,yBAAyB,EAAE,MAAM,IAAI;iBAClC,OAAO,CAAC,YAAY,CAAC;iBACrB,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;iBACnC,IAAI,EAAE;YACT,wBAAwB,EAAE,MAAM,IAAI;iBACjC,OAAO,CAAC,8BAA8B,CAAC;iBACvC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;iBACnC,IAAI,EAAE;SACV,CAAC;QACF,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QACnB,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEM,KAAK,CAAC,KAAK,CAAC,MAAc;QAC/B,IAAI,MAAM,CAAC,yBAAyB,KAAK,KAAK,EAAE,CAAC;YAC/C,MAAM,IAAI,KAAK,CACb,yDAAyD,CAC1D,CAAC;QACJ,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1D,IAAI,KAAK,CAAC,yBAAyB,KAAK,MAAM,CAAC,yBAAyB,EAAE,CAAC;YACzE,MAAM,OAAO,CAAC,GAAG,CAAC;gBAChB,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,IAAI,EAAE;gBAClC,yEAAyE;gBACzE,CACE,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,UAAU,EAAE,CAC9C,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;aAC3C,CAAC,CAAC;YACH,MAAM,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9D,CAAC;QACD,IAAI,KAAK,CAAC,wBAAwB,KAAK,MAAM,CAAC,wBAAwB,EAAE,CAAC;YACvE,MAAM,OAAO,CAAC,GAAG,CAAC;gBAChB,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,IAAI,EAAE;gBAClC,yEAAyE;gBACzE,CACE,MAAM,IAAI,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAC,UAAU,EAAE,CAChE,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;aAC3C,CAAC,CAAC;YACH,MAAM,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9D,CAAC;QACD,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;CACF"}
|
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.8.1",
|
|
4
4
|
"description": "sfdx plugin for browser automation",
|
|
5
5
|
"author": "Matthias Rolke <mr.amtrack@gmail.com>",
|
|
6
6
|
"type": "module",
|
|
@@ -11,11 +11,11 @@
|
|
|
11
11
|
"@mdapi-issues/listmetadata-standardvalueset": "3.1.0",
|
|
12
12
|
"@salesforce/sf-plugins-core": "12.2.2",
|
|
13
13
|
"p-retry": "6.2.1",
|
|
14
|
-
"puppeteer": "24.
|
|
14
|
+
"puppeteer": "24.10.0"
|
|
15
15
|
},
|
|
16
16
|
"devDependencies": {
|
|
17
17
|
"@salesforce/dev-scripts": "11.0.2",
|
|
18
|
-
"oclif": "4.
|
|
18
|
+
"oclif": "4.18.0"
|
|
19
19
|
},
|
|
20
20
|
"files": [
|
|
21
21
|
"/bin",
|