sfdx-deliverability-access 1.1.7 → 2.0.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 +16 -1
- package/lib/browser.d.ts +6 -0
- package/lib/browser.js +43 -0
- package/lib/browser.js.map +1 -0
- package/lib/commands/deliverability/access.d.ts +1 -0
- package/lib/commands/deliverability/access.js +61 -38
- package/lib/commands/deliverability/access.js.map +1 -1
- package/oclif.manifest.json +1 -1
- package/package.json +7 -8
package/README.md
CHANGED
|
@@ -37,10 +37,25 @@ sfdx deliverability:access --help
|
|
|
37
37
|
|
|
38
38
|
## Requirements
|
|
39
39
|
|
|
40
|
-
1. [Node.js](https://nodejs.org/en/)
|
|
40
|
+
1. [Node.js](https://nodejs.org/en/) 18 or newer (including the runtime used by Salesforce CLI)
|
|
41
41
|
1. [Salesforce CLI](https://developer.salesforce.com/docs/atlas.en-us.sfdx_setup.meta/sfdx_setup/sfdx_setup_install_cli.htm)
|
|
42
42
|
1. [Salesforce Lightning](https://www.salesforce.com/products/platform/lightning/)
|
|
43
43
|
|
|
44
|
+
## Browser setup
|
|
45
|
+
|
|
46
|
+
Puppeteer downloads a native browser automatically; **no separate Chrome is required**.
|
|
47
|
+
Installation needs network access, enabled dependency install scripts, and a writable
|
|
48
|
+
cache accessible at runtime (`~/.cache/puppeteer` or `PUPPETEER_CACHE_DIR`).
|
|
49
|
+
|
|
50
|
+
For a custom compatible executable (not the `.app` directory), use
|
|
51
|
+
`export PUPPETEER_EXECUTABLE_PATH="/path/to/browser"`.
|
|
52
|
+
|
|
53
|
+
Migrate the removed `npm_config_puppeteer_executable_path` and
|
|
54
|
+
`npm_package_config_puppeteer_executable_path` aliases to `PUPPETEER_EXECUTABLE_PATH`.
|
|
55
|
+
|
|
56
|
+
macOS error `-86` means an incompatible CPU type. Correct stale overrides and use a
|
|
57
|
+
browser matching the CLI's Node architecture (native ARM64 on Apple Silicon).
|
|
58
|
+
|
|
44
59
|
## License
|
|
45
60
|
|
|
46
61
|
This project is licensed under the MIT License - see the [LICENSE.md](LICENSE.md) file for details.
|
package/lib/browser.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import puppeteer = require('puppeteer');
|
|
2
|
+
type LaunchOptions = NonNullable<Parameters<typeof puppeteer.launch>[0]>;
|
|
3
|
+
export declare function getBrowserLaunchOptions(executablePath?: string | undefined): LaunchOptions;
|
|
4
|
+
export declare function getErrorMessage(error: unknown): string;
|
|
5
|
+
export declare function launchBrowser(): Promise<puppeteer.Browser>;
|
|
6
|
+
export {};
|
package/lib/browser.js
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.launchBrowser = exports.getErrorMessage = exports.getBrowserLaunchOptions = void 0;
|
|
4
|
+
const util_1 = require("util");
|
|
5
|
+
const puppeteer = require("puppeteer");
|
|
6
|
+
function getBrowserLaunchOptions(executablePath = process.env.PUPPETEER_EXECUTABLE_PATH) {
|
|
7
|
+
const options = {
|
|
8
|
+
headless: true,
|
|
9
|
+
args: ['--disable-web-security', '--no-sandbox'],
|
|
10
|
+
};
|
|
11
|
+
if (executablePath) {
|
|
12
|
+
options.executablePath = executablePath;
|
|
13
|
+
}
|
|
14
|
+
return options;
|
|
15
|
+
}
|
|
16
|
+
exports.getBrowserLaunchOptions = getBrowserLaunchOptions;
|
|
17
|
+
function getErrorMessage(error) {
|
|
18
|
+
if (error instanceof Error)
|
|
19
|
+
return error.message;
|
|
20
|
+
return typeof error === 'string' ? error : (0, util_1.inspect)(error, { customInspect: false, getters: false });
|
|
21
|
+
}
|
|
22
|
+
exports.getErrorMessage = getErrorMessage;
|
|
23
|
+
async function launchBrowser() {
|
|
24
|
+
const options = getBrowserLaunchOptions();
|
|
25
|
+
try {
|
|
26
|
+
return await puppeteer.launch(options);
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
const browser = options.executablePath ? `browser at "${options.executablePath}"` : 'Puppeteer-managed Chrome';
|
|
30
|
+
const message = getErrorMessage(error);
|
|
31
|
+
const systemError = error instanceof Error ? error : undefined;
|
|
32
|
+
const macHint = process.platform === 'darwin' &&
|
|
33
|
+
(systemError?.errno === -86 || /\b(?:error|errno)\s*[:=]?\s*-86\b/i.test(message))
|
|
34
|
+
? ' On macOS, spawn error -86 means the executable has an incompatible CPU type.'
|
|
35
|
+
: '';
|
|
36
|
+
throw new Error(`Unable to launch ${browser} on ${process.platform}/${process.arch}: ${message}. ` +
|
|
37
|
+
'Reinstall the plugin with browser downloads enabled, or set ' +
|
|
38
|
+
'PUPPETEER_EXECUTABLE_PATH to a compatible Chrome/Chromium executable.' +
|
|
39
|
+
macHint, { cause: error });
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
exports.launchBrowser = launchBrowser;
|
|
43
|
+
//# sourceMappingURL=browser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":";;;AAAA,+BAA+B;AAC/B,uCAAwC;AAIxC,SAAgB,uBAAuB,CACrC,iBAAqC,OAAO,CAAC,GAAG,CAAC,yBAAyB;IAE1E,MAAM,OAAO,GAAkB;QAC7B,QAAQ,EAAE,IAAI;QACd,IAAI,EAAE,CAAC,wBAAwB,EAAE,cAAc,CAAC;KACjD,CAAC;IAEF,IAAI,cAAc,EAAE;QAClB,OAAO,CAAC,cAAc,GAAG,cAAc,CAAC;KACzC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAbD,0DAaC;AAED,SAAgB,eAAe,CAAC,KAAc;IAC5C,IAAI,KAAK,YAAY,KAAK;QAAE,OAAO,KAAK,CAAC,OAAO,CAAC;IACjD,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAA,cAAO,EAAC,KAAK,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;AACtG,CAAC;AAHD,0CAGC;AAEM,KAAK,UAAU,aAAa;IACjC,MAAM,OAAO,GAAG,uBAAuB,EAAE,CAAC;IAC1C,IAAI;QACF,OAAO,MAAM,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;KACxC;IAAC,OAAO,KAAK,EAAE;QACd,MAAM,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,eAAe,OAAO,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,0BAA0B,CAAC;QAC/G,MAAM,OAAO,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;QACvC,MAAM,WAAW,GAAsC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;QAClG,MAAM,OAAO,GACX,OAAO,CAAC,QAAQ,KAAK,QAAQ;YAC7B,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,EAAE,IAAI,oCAAoC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAChF,CAAC,CAAC,+EAA+E;YACjF,CAAC,CAAC,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CACb,oBAAoB,OAAO,OAAO,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,IAAI;YAChF,8DAA8D;YAC9D,uEAAuE;YACvE,OAAO,EACT,EAAE,KAAK,EAAE,KAAK,EAAE,CACjB,CAAC;KACH;AACH,CAAC;AArBD,sCAqBC"}
|
|
@@ -5,8 +5,11 @@ const util = require("util");
|
|
|
5
5
|
const child_process_1 = require("child_process");
|
|
6
6
|
const command_1 = require("@salesforce/command");
|
|
7
7
|
const core_1 = require("@salesforce/core");
|
|
8
|
-
const
|
|
8
|
+
const browser_1 = require("../../browser");
|
|
9
9
|
const execPromise = util.promisify(child_process_1.exec);
|
|
10
|
+
const setupFrameSelector = '#setupComponent > div.setupcontent > div > div > force-aloha-page > div > iframe';
|
|
11
|
+
const accessLevelSelector = '#thePage\\:theForm\\:editBlock\\:sendEmailAccessControlSection\\:sendEmailAccessControl\\:sendEmailAccessControlSelect';
|
|
12
|
+
const navigationErrorPattern = /Execution context was destroyed|Cannot find context with specified id|frame.*detached|detached frame/i;
|
|
10
13
|
const accessValuesMap = new Map([
|
|
11
14
|
['none', '0'],
|
|
12
15
|
['n', '0'],
|
|
@@ -21,6 +24,19 @@ const accessValuesMap = new Map([
|
|
|
21
24
|
core_1.Messages.importMessagesDirectory(__dirname);
|
|
22
25
|
const messages = core_1.Messages.loadMessages('sfdx-deliverability-access', 'org');
|
|
23
26
|
class Access extends command_1.SfdxCommand {
|
|
27
|
+
static description = messages.getMessage('commandDescription');
|
|
28
|
+
static examples = messages.getMessage('examples').split(os.EOL);
|
|
29
|
+
static flagsConfig = {
|
|
30
|
+
level: command_1.flags.string({
|
|
31
|
+
char: 'l',
|
|
32
|
+
description: messages.getMessage('levelFlagDescription'),
|
|
33
|
+
}),
|
|
34
|
+
user: command_1.flags.string({
|
|
35
|
+
char: 'u',
|
|
36
|
+
description: messages.getMessage('userFlagDescription'),
|
|
37
|
+
}),
|
|
38
|
+
};
|
|
39
|
+
static requiresProject = false;
|
|
24
40
|
async run() {
|
|
25
41
|
this.ux.startSpinner('Attempting to set Email Deliverability Access Level');
|
|
26
42
|
const accessLevel = this.flags.level;
|
|
@@ -30,10 +46,10 @@ class Access extends command_1.SfdxCommand {
|
|
|
30
46
|
if (accessUrl === undefined)
|
|
31
47
|
return;
|
|
32
48
|
try {
|
|
33
|
-
|
|
49
|
+
await this.toggleDeliverability(accessUrl, accessLevelValue);
|
|
34
50
|
}
|
|
35
51
|
catch (error) {
|
|
36
|
-
this.stopSpinnerAndLogError(
|
|
52
|
+
this.stopSpinnerAndLogError(error);
|
|
37
53
|
}
|
|
38
54
|
}
|
|
39
55
|
else {
|
|
@@ -56,55 +72,62 @@ class Access extends command_1.SfdxCommand {
|
|
|
56
72
|
}
|
|
57
73
|
}
|
|
58
74
|
async toggleDeliverability(accessUrl, accessLevelValue) {
|
|
59
|
-
let browser;
|
|
60
|
-
let error;
|
|
61
75
|
this.ux.setSpinnerStatus('Launching headless browser');
|
|
76
|
+
const browser = await (0, browser_1.launchBrowser)();
|
|
62
77
|
try {
|
|
63
|
-
browser = await puppeteer.launch({
|
|
64
|
-
headless: true,
|
|
65
|
-
args: ['--disable-web-security', '--no-sandbox'],
|
|
66
|
-
});
|
|
67
78
|
const page = await browser.newPage();
|
|
68
79
|
await page.goto(accessUrl);
|
|
69
80
|
this.ux.setSpinnerStatus('Waiting for page to load');
|
|
70
|
-
const frame = await
|
|
71
|
-
const contentFrame = await frame?.contentFrame();
|
|
72
|
-
const accessLevelField = await contentFrame?.waitForSelector('#thePage\\:theForm\\:editBlock\\:sendEmailAccessControlSection\\:sendEmailAccessControl\\:sendEmailAccessControlSelect');
|
|
81
|
+
const { frame, field } = await this.waitForDeliverabilityField(page);
|
|
73
82
|
this.ux.setSpinnerStatus('Selecting Deliverability Access Level');
|
|
74
|
-
await
|
|
75
|
-
await
|
|
76
|
-
await
|
|
77
|
-
}
|
|
78
|
-
catch (err) {
|
|
79
|
-
error = String(err);
|
|
83
|
+
await field.select(accessLevelValue);
|
|
84
|
+
await frame.click('#thePage\\:theForm\\:editBlock\\:buttons\\:saveBtn');
|
|
85
|
+
await frame.waitForSelector('#thePage\\:theForm\\:successText');
|
|
80
86
|
}
|
|
81
87
|
finally {
|
|
82
|
-
await browser
|
|
83
|
-
|
|
84
|
-
|
|
88
|
+
await browser.close();
|
|
89
|
+
}
|
|
90
|
+
this.ux.stopSpinner('🎉 Email Deliverability Access Level has been set!');
|
|
91
|
+
}
|
|
92
|
+
async waitForDeliverabilityField(page) {
|
|
93
|
+
const deadline = Date.now() + 60000;
|
|
94
|
+
let navigationError;
|
|
95
|
+
while (Date.now() < deadline) {
|
|
96
|
+
const frameTimeout = deadline - Date.now();
|
|
97
|
+
if (frameTimeout <= 0)
|
|
98
|
+
break;
|
|
99
|
+
try {
|
|
100
|
+
const iframe = await page.waitForSelector(setupFrameSelector, { timeout: frameTimeout });
|
|
101
|
+
const frame = await iframe?.contentFrame();
|
|
102
|
+
const fieldTimeout = deadline - Date.now();
|
|
103
|
+
if (frame && fieldTimeout > 0) {
|
|
104
|
+
const field = await frame.waitForSelector(accessLevelSelector, { timeout: fieldTimeout });
|
|
105
|
+
if (field)
|
|
106
|
+
return { frame, field };
|
|
107
|
+
}
|
|
85
108
|
}
|
|
86
|
-
|
|
87
|
-
|
|
109
|
+
catch (error) {
|
|
110
|
+
const cause = error instanceof Error ? error.cause : undefined;
|
|
111
|
+
if (!navigationErrorPattern.test(`${(0, browser_1.getErrorMessage)(error)} ${(0, browser_1.getErrorMessage)(cause)}`))
|
|
112
|
+
throw error;
|
|
113
|
+
navigationError = error;
|
|
88
114
|
}
|
|
115
|
+
// A redirect can invalidate a handle after waitForSelector has resolved.
|
|
116
|
+
const remaining = deadline - Date.now();
|
|
117
|
+
if (remaining <= 0)
|
|
118
|
+
break;
|
|
119
|
+
this.ux.setSpinnerStatus('Waiting for setup navigation to finish');
|
|
120
|
+
await new Promise((resolve) => setTimeout(resolve, Math.min(100, remaining)));
|
|
89
121
|
}
|
|
122
|
+
throw new Error('Timed out waiting for the Deliverability setup controls after 60000 ms', {
|
|
123
|
+
cause: navigationError,
|
|
124
|
+
});
|
|
90
125
|
}
|
|
91
|
-
stopSpinnerAndLogError(
|
|
126
|
+
stopSpinnerAndLogError(error) {
|
|
92
127
|
this.ux.stopSpinner('❌ Access Level could not be set.');
|
|
93
|
-
|
|
128
|
+
const cause = error instanceof Error ? error : new Error((0, browser_1.getErrorMessage)(error), { cause: error });
|
|
129
|
+
throw new core_1.SfdxError(cause.message, undefined, undefined, undefined, cause);
|
|
94
130
|
}
|
|
95
131
|
}
|
|
96
132
|
exports.default = Access;
|
|
97
|
-
Access.description = messages.getMessage('commandDescription');
|
|
98
|
-
Access.examples = messages.getMessage('examples').split(os.EOL);
|
|
99
|
-
Access.flagsConfig = {
|
|
100
|
-
level: command_1.flags.string({
|
|
101
|
-
char: 'l',
|
|
102
|
-
description: messages.getMessage('levelFlagDescription'),
|
|
103
|
-
}),
|
|
104
|
-
user: command_1.flags.string({
|
|
105
|
-
char: 'u',
|
|
106
|
-
description: messages.getMessage('userFlagDescription'),
|
|
107
|
-
}),
|
|
108
|
-
};
|
|
109
|
-
Access.requiresProject = false;
|
|
110
133
|
//# sourceMappingURL=access.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"access.js","sourceRoot":"","sources":["../../../src/commands/deliverability/access.ts"],"names":[],"mappings":";;AAAA,yBAAyB;AACzB,6BAA6B;AAC7B,iDAAqC;AACrC,iDAAyD;AACzD,2CAAuD;
|
|
1
|
+
{"version":3,"file":"access.js","sourceRoot":"","sources":["../../../src/commands/deliverability/access.ts"],"names":[],"mappings":"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"}
|
package/oclif.manifest.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":"
|
|
1
|
+
{"version":"2.0.0","commands":{"deliverability:access":{"id":"deliverability:access","description":"Set Email Deliverability Access Level for an org.","usage":"<%= command.id %> [-l <string>] [-u <string>] [--json] [--loglevel trace|debug|info|warn|error|fatal|TRACE|DEBUG|INFO|WARN|ERROR|FATAL]","pluginName":"sfdx-deliverability-access","pluginType":"core","aliases":[],"examples":["sfdx deliverability:access --level All","sfdx deliverability:access --level None","sfdx deliverability:access --level System"],"flags":{"json":{"name":"json","type":"boolean","description":"format output as json","allowNo":false},"loglevel":{"name":"loglevel","type":"option","description":"logging level for this command invocation","required":false,"helpValue":"(trace|debug|info|warn|error|fatal|TRACE|DEBUG|INFO|WARN|ERROR|FATAL)","options":["trace","debug","info","warn","error","fatal","TRACE","DEBUG","INFO","WARN","ERROR","FATAL"],"default":"warn"},"level":{"name":"level","type":"option","char":"l","description":"No access: None, none, n, 0\nSystem email only: System, system, s, 1\nAll email: All, all, a, 2"},"user":{"name":"user","type":"option","char":"u","description":"Username or alias for the target org; overrides default target org"}},"args":[]}}}
|
package/package.json
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sfdx-deliverability-access",
|
|
3
3
|
"description": "SFDX Plugin to set Email Deliverability Access Level for an org via command line. This project uses Puppeteer and headless browsing to open Setup in the target org and set Email Deliverability Access Level to the desired value.",
|
|
4
|
-
"version": "
|
|
4
|
+
"version": "2.0.0",
|
|
5
5
|
"author": "gfarb @gfarb",
|
|
6
6
|
"bugs": "https://github.com/gfarb/sfdx-deliverability-access/issues",
|
|
7
7
|
"engines": {
|
|
8
|
-
"node": ">=
|
|
8
|
+
"node": ">=18.0.0"
|
|
9
9
|
},
|
|
10
10
|
"files": [
|
|
11
11
|
"/lib",
|
|
@@ -36,9 +36,9 @@
|
|
|
36
36
|
"repository": "gfarb/sfdx-deliverability-access",
|
|
37
37
|
"scripts": {
|
|
38
38
|
"build": "tsc -p .",
|
|
39
|
-
"lint": "eslint src/**/*.ts test/**/*.ts",
|
|
39
|
+
"lint": "eslint \"src/**/*.ts\" \"test/**/*.ts\"",
|
|
40
40
|
"postpack": "rm -f oclif.manifest.json",
|
|
41
|
-
"posttest": "
|
|
41
|
+
"posttest": "npm run lint",
|
|
42
42
|
"prepack": "rm -rf lib && tsc -b && oclif-dev manifest && oclif-dev readme",
|
|
43
43
|
"test": "nyc --extension .ts --require ts-node/register mocha --forbid-only \"test/**/*.test.ts\"",
|
|
44
44
|
"version": "oclif-dev readme && git add README.md"
|
|
@@ -49,11 +49,10 @@
|
|
|
49
49
|
"@oclif/errors": "^1",
|
|
50
50
|
"@salesforce/command": "4.2.2",
|
|
51
51
|
"@salesforce/core": "2.37.1",
|
|
52
|
-
"@types/node": "^
|
|
53
|
-
"@types/puppeteer": "^5.4.7",
|
|
52
|
+
"@types/node": "^18",
|
|
54
53
|
"install": "^0.13.0",
|
|
55
54
|
"npm": "^8.18.0",
|
|
56
|
-
"puppeteer": "^
|
|
55
|
+
"puppeteer": "^24.43.1",
|
|
57
56
|
"tslib": "^2"
|
|
58
57
|
},
|
|
59
58
|
"devDependencies": {
|
|
@@ -87,6 +86,6 @@
|
|
|
87
86
|
"pretty-quick": "^3",
|
|
88
87
|
"sinon": "13.0.1",
|
|
89
88
|
"ts-node": "^10",
|
|
90
|
-
"typescript": "
|
|
89
|
+
"typescript": "5.2.2"
|
|
91
90
|
}
|
|
92
91
|
}
|