@intuned/runtime-dev 0.1.0-test.14 → 0.1.0-test.16
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/.babelrc +1 -2
- package/WebTemplate/api.ts +90 -92
- package/WebTemplate/controllers/authSessions/create.ts +2 -2
- package/WebTemplate/controllers/authSessions/store.ts +1 -1
- package/WebTemplate/controllers/runApi/helpers.ts +14 -12
- package/WebTemplate/index.playwright.ts +32 -42
- package/WebTemplate/jobs.ts +13 -2
- package/WebTemplate/utils.ts +53 -1
- package/api/test2.ts +6 -1
- package/auth-sessions/check.ts +3 -1
- package/auth-sessions/create.ts +10 -10
- package/bin/intuned-api-run +1 -1
- package/bin/intuned-auth-session-check +1 -1
- package/bin/intuned-auth-session-create +1 -1
- package/bin/intuned-auth-session-load +1 -1
- package/bin/intuned-auth-session-refresh +1 -1
- package/bin/intuned-browser-save-state +1 -1
- package/bin/intuned-browser-start +1 -1
- package/bin/intuned-build +1 -1
- package/bin/intuned-ts-check +1 -1
- package/dist/commands/api/run.js +109 -170
- package/dist/commands/auth-sessions/load.js +28 -26
- package/dist/commands/auth-sessions/run-check.js +54 -53
- package/dist/commands/auth-sessions/run-create.js +93 -96
- package/dist/commands/browser/save-state.js +14 -16
- package/dist/commands/browser/start-browser.js +11 -11
- package/dist/commands/build.js +79 -109
- package/dist/commands/common/browserUtils.js +53 -51
- package/dist/commands/common/getFirstLineNumber.js +93 -93
- package/dist/commands/common/{getFirstLineNumber.test.ts → getFirstLineNumber.test.js} +53 -48
- package/dist/commands/common/sendMessageToClient.js +9 -4
- package/dist/commands/common/tsNodeImport.d.ts +1 -0
- package/dist/commands/common/tsNodeImport.js +18 -0
- package/dist/commands/common/utils/fileUtils.js +32 -22
- package/dist/commands/common/utils/settings.js +27 -19
- package/dist/commands/common/utils/unixSocket.js +43 -43
- package/dist/commands/common/utils/webTemplate.js +30 -28
- package/dist/commands/interface/run.js +162 -139
- package/dist/commands/ts-check.js +50 -50
- package/dist/common/Logger/Logger/index.js +55 -42
- package/dist/common/Logger/Logger/types.js +5 -1
- package/dist/common/Logger/index.js +55 -42
- package/dist/common/Logger/types.js +5 -1
- package/dist/common/asyncLocalStorage/index.js +16 -8
- package/dist/common/cleanEnvironmentVariables.js +16 -12
- package/dist/common/constants.js +7 -1
- package/dist/common/contextStorageStateHelpers.js +47 -38
- package/dist/common/getPlaywrightConstructs.js +178 -197
- package/dist/common/jwtTokenManager.js +76 -79
- package/dist/common/runApi/errors.js +159 -150
- package/dist/common/runApi/index.js +240 -232
- package/dist/common/runApi/types.d.ts +19 -5
- package/dist/common/runApi/types.js +53 -56
- package/dist/common/settingsSchema.js +15 -10
- package/dist/common/telemetry.js +28 -30
- package/dist/index.js +69 -4
- package/dist/runtime/RunError.js +18 -11
- package/dist/runtime/downloadDirectory.js +19 -13
- package/dist/runtime/enums.d.js +5 -0
- package/dist/runtime/enums.d.ts +11 -1
- package/dist/runtime/enums.js +18 -12
- package/dist/runtime/executionHelpers.test.js +53 -0
- package/dist/runtime/export.d.js +5 -0
- package/dist/runtime/export.d.ts +202 -1
- package/dist/runtime/extendPayload.js +21 -15
- package/dist/runtime/extendTimeout.js +28 -21
- package/dist/runtime/index.js +53 -6
- package/dist/runtime/requestMoreInfo.js +23 -16
- package/dist/runtime/runInfo.js +21 -14
- package/package.json +4 -7
- package/dist/commands/api/run.ts +0 -105
- package/dist/commands/auth-sessions/load.ts +0 -30
- package/dist/commands/auth-sessions/run-check.ts +0 -51
- package/dist/commands/auth-sessions/run-create.ts +0 -91
- package/dist/commands/browser/save-state.ts +0 -14
- package/dist/commands/browser/start-browser.ts +0 -11
- package/dist/commands/build.ts +0 -79
- package/dist/commands/common/browserUtils.ts +0 -45
- package/dist/commands/common/getDefaultExportFromFile.d.ts +0 -1
- package/dist/commands/common/getDefaultExportFromFile.js +0 -12
- package/dist/commands/common/getDefaultExportFromFile.ts +0 -11
- package/dist/commands/common/getFirstLineNumber.ts +0 -96
- package/dist/commands/common/sendMessageToClient.ts +0 -3
- package/dist/commands/common/utils/fileUtils.ts +0 -23
- package/dist/commands/common/utils/settings.ts +0 -22
- package/dist/commands/common/utils/unixSocket.ts +0 -38
- package/dist/commands/common/utils/webTemplate.ts +0 -23
- package/dist/commands/interface/run.ts +0 -156
- package/dist/commands/ts-check.ts +0 -51
- package/dist/common/Logger/Logger/index.ts +0 -53
- package/dist/common/Logger/Logger/types.ts +0 -1
- package/dist/common/Logger/index.ts +0 -53
- package/dist/common/Logger/types.ts +0 -1
- package/dist/common/asyncLocalStorage/index.ts +0 -9
- package/dist/common/cleanEnvironmentVariables.ts +0 -10
- package/dist/common/constants.ts +0 -1
- package/dist/common/contextStorageStateHelpers.ts +0 -43
- package/dist/common/getPlaywrightConstructs.ts +0 -182
- package/dist/common/jwtTokenManager.ts +0 -71
- package/dist/common/runApi/errors.ts +0 -154
- package/dist/common/runApi/index.ts +0 -253
- package/dist/common/runApi/types.ts +0 -43
- package/dist/common/settingsSchema.ts +0 -9
- package/dist/common/telemetry.ts +0 -23
- package/dist/index.ts +0 -4
- package/dist/runtime/RunError.ts +0 -12
- package/dist/runtime/downloadDirectory.ts +0 -13
- package/dist/runtime/enums.ts +0 -12
- package/dist/runtime/executionHelpers.test.ts +0 -51
- package/dist/runtime/extendPayload.ts +0 -15
- package/dist/runtime/extendTimeout.ts +0 -24
- package/dist/runtime/index.ts +0 -6
- package/dist/runtime/requestMoreInfo.ts +0 -18
- package/dist/runtime/runInfo.ts +0 -15
|
@@ -1,47 +1,60 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.logger = void 0;
|
|
7
|
+
var _nodeUtil = require("node:util");
|
|
8
|
+
var _chalk = _interopRequireDefault(require("chalk"));
|
|
9
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
10
|
+
const format = _nodeUtil.formatWithOptions.bind(undefined, {
|
|
11
|
+
colors: true
|
|
12
|
+
});
|
|
4
13
|
const LOG_LEVEL_COLORS = {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
14
|
+
TRACE: _chalk.default.gray,
|
|
15
|
+
DEBUG: _chalk.default.blue,
|
|
16
|
+
INFO: _chalk.default.green,
|
|
17
|
+
WARN: _chalk.default.yellow,
|
|
18
|
+
ERROR: _chalk.default.red
|
|
10
19
|
};
|
|
11
20
|
class Logger {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
level,
|
|
26
|
-
message,
|
|
27
|
-
meta: meta && Object.keys(meta).length === 0 ? undefined : meta,
|
|
28
|
-
timestamp: Date.now(),
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
|
-
trace(message, meta) {
|
|
32
|
-
this.log("TRACE", message, meta);
|
|
33
|
-
}
|
|
34
|
-
debug(message, meta) {
|
|
35
|
-
this.log("DEBUG", message, meta);
|
|
36
|
-
}
|
|
37
|
-
info(message, meta) {
|
|
38
|
-
this.log("INFO", message, meta);
|
|
39
|
-
}
|
|
40
|
-
warn(message, meta) {
|
|
41
|
-
this.log("WARN", message, meta);
|
|
42
|
-
}
|
|
43
|
-
error(message, meta) {
|
|
44
|
-
this.log("ERROR", message, meta);
|
|
21
|
+
logFunction(entry) {
|
|
22
|
+
const {
|
|
23
|
+
level,
|
|
24
|
+
timestamp,
|
|
25
|
+
message,
|
|
26
|
+
meta
|
|
27
|
+
} = entry;
|
|
28
|
+
const date = new Date(timestamp);
|
|
29
|
+
const levelColor = LOG_LEVEL_COLORS[level];
|
|
30
|
+
if (meta === undefined) {
|
|
31
|
+
process.stderr.write(`${format(date)} [@intuned/sdk][${levelColor(level)}] ${message}\n`);
|
|
32
|
+
} else {
|
|
33
|
+
process.stderr.write(`${format(date)} [@intuned/sdk][${levelColor(level)}] ${message} ${format(meta)}\n`);
|
|
45
34
|
}
|
|
35
|
+
}
|
|
36
|
+
log(level, message, meta) {
|
|
37
|
+
this.logFunction({
|
|
38
|
+
level,
|
|
39
|
+
message,
|
|
40
|
+
meta: meta && Object.keys(meta).length === 0 ? undefined : meta,
|
|
41
|
+
timestamp: Date.now()
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
trace(message, meta) {
|
|
45
|
+
this.log("TRACE", message, meta);
|
|
46
|
+
}
|
|
47
|
+
debug(message, meta) {
|
|
48
|
+
this.log("DEBUG", message, meta);
|
|
49
|
+
}
|
|
50
|
+
info(message, meta) {
|
|
51
|
+
this.log("INFO", message, meta);
|
|
52
|
+
}
|
|
53
|
+
warn(message, meta) {
|
|
54
|
+
this.log("WARN", message, meta);
|
|
55
|
+
}
|
|
56
|
+
error(message, meta) {
|
|
57
|
+
this.log("ERROR", message, meta);
|
|
58
|
+
}
|
|
46
59
|
}
|
|
47
|
-
|
|
60
|
+
const logger = exports.logger = new Logger();
|
|
@@ -1,9 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.asyncLocalStorage = void 0;
|
|
7
|
+
exports.getExecutionContext = getExecutionContext;
|
|
8
|
+
exports.runWithContext = runWithContext;
|
|
9
|
+
var _async_hooks = require("async_hooks");
|
|
10
|
+
const asyncLocalStorage = exports.asyncLocalStorage = new _async_hooks.AsyncLocalStorage();
|
|
11
|
+
function runWithContext(contextData, callback, ...args) {
|
|
12
|
+
return asyncLocalStorage.run(contextData, callback, ...args);
|
|
9
13
|
}
|
|
14
|
+
function getExecutionContext() {
|
|
15
|
+
const contextData = asyncLocalStorage.getStore();
|
|
16
|
+
return contextData;
|
|
17
|
+
}
|
|
@@ -1,12 +1,16 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.cleanEnvironmentVariables = cleanEnvironmentVariables;
|
|
7
|
+
function cleanEnvironmentVariables() {
|
|
8
|
+
Object.keys(process.env).filter(i => {
|
|
9
|
+
if (i.toLocaleLowerCase().startsWith("npm")) {
|
|
10
|
+
return true;
|
|
11
|
+
}
|
|
12
|
+
if (i.toLocaleLowerCase().startsWith("fly") && i !== "FLY_ALLOC_ID") {
|
|
13
|
+
return true;
|
|
14
|
+
}
|
|
15
|
+
}).forEach(i => delete process.env[i]);
|
|
16
|
+
}
|
package/dist/common/constants.js
CHANGED
|
@@ -1 +1,7 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.AUTH_SESSIONS_FOLDER_NAME = void 0;
|
|
7
|
+
const AUTH_SESSIONS_FOLDER_NAME = exports.AUTH_SESSIONS_FOLDER_NAME = "auth-sessions";
|
|
@@ -1,41 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.getContextStorageState = getContextStorageState;
|
|
7
|
+
exports.setContextStorageState = setContextStorageState;
|
|
1
8
|
function sessionStorageToArray(storage) {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
const pages = context.pages();
|
|
11
|
-
const pagesSessions = [];
|
|
12
|
-
for (const page of pages) {
|
|
13
|
-
try {
|
|
14
|
-
const [origin, session] = await page.evaluate(() => [
|
|
15
|
-
location.origin,
|
|
16
|
-
sessionStorage,
|
|
17
|
-
]);
|
|
18
|
-
const transformed = sessionStorageToArray(session);
|
|
19
|
-
pagesSessions.push({ origin, sessionStorage: transformed });
|
|
20
|
-
}
|
|
21
|
-
catch (e) {
|
|
22
|
-
// ignore
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
return {
|
|
26
|
-
...cookiesAndLocalStorage,
|
|
27
|
-
sessionStorage: pagesSessions,
|
|
28
|
-
};
|
|
9
|
+
const result = [];
|
|
10
|
+
for (const key in storage) {
|
|
11
|
+
result.push({
|
|
12
|
+
name: key,
|
|
13
|
+
value: storage[key]
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
return result;
|
|
29
17
|
}
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
18
|
+
async function getContextStorageState(context) {
|
|
19
|
+
const cookiesAndLocalStorage = await context.storageState();
|
|
20
|
+
const pages = context.pages();
|
|
21
|
+
const pagesSessions = [];
|
|
22
|
+
for (const page of pages) {
|
|
23
|
+
try {
|
|
24
|
+
const [origin, session] = await page.evaluate(() => [location.origin, sessionStorage]);
|
|
25
|
+
const transformed = sessionStorageToArray(session);
|
|
26
|
+
pagesSessions.push({
|
|
27
|
+
origin,
|
|
28
|
+
sessionStorage: transformed
|
|
29
|
+
});
|
|
30
|
+
} catch (e) {}
|
|
31
|
+
}
|
|
32
|
+
return {
|
|
33
|
+
...cookiesAndLocalStorage,
|
|
34
|
+
sessionStorage: pagesSessions
|
|
35
|
+
};
|
|
41
36
|
}
|
|
37
|
+
async function setContextStorageState(context, storage) {
|
|
38
|
+
await context.intunedSetStorageState(storage);
|
|
39
|
+
const sessionStorage = storage.sessionStorage;
|
|
40
|
+
await context.addInitScript(storage => {
|
|
41
|
+
for (const {
|
|
42
|
+
origin,
|
|
43
|
+
sessionStorage
|
|
44
|
+
} of storage) {
|
|
45
|
+
if (window.location.origin === origin) {
|
|
46
|
+
for (const item of sessionStorage) window.sessionStorage.setItem(item.name, item.value);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}, sessionStorage);
|
|
50
|
+
}
|
|
@@ -1,212 +1,193 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.getPlaywrightConstructsForMode = getPlaywrightConstructsForMode;
|
|
7
|
+
exports.getProductionPlaywrightConstructs = getProductionPlaywrightConstructs;
|
|
8
|
+
exports.getRemotePlaywrightContext = getRemotePlaywrightContext;
|
|
9
|
+
exports.loadSessionToContext = loadSessionToContext;
|
|
10
|
+
var playwright = _interopRequireWildcard(require("@intuned/playwright-core"));
|
|
11
|
+
var _fsExtra = _interopRequireWildcard(require("fs-extra"));
|
|
12
|
+
var fs = _fsExtra;
|
|
13
|
+
var _contextStorageStateHelpers = require("./contextStorageStateHelpers.js");
|
|
14
|
+
var _path = _interopRequireWildcard(require("path"));
|
|
15
|
+
var _fileUtils = require("../commands/common/utils/fileUtils");
|
|
16
|
+
var _waitOn = _interopRequireDefault(require("wait-on"));
|
|
17
|
+
var _runtime = require("../runtime");
|
|
18
|
+
var _url = require("url");
|
|
19
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
20
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
21
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
11
22
|
async function createUserDirWithPreferences() {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
23
|
+
const playwrightTempDir = await (0, _fsExtra.mkdtemp)("/tmp/pw-");
|
|
24
|
+
const userDir = (0, _path.join)(playwrightTempDir, "userdir");
|
|
25
|
+
const defaultDir = (0, _path.join)(userDir, "Default");
|
|
26
|
+
await (0, _fsExtra.mkdir)(defaultDir, {
|
|
27
|
+
recursive: true
|
|
28
|
+
});
|
|
29
|
+
const preferences = {
|
|
30
|
+
plugins: {
|
|
31
|
+
always_open_pdf_externally: true
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
await (0, _fsExtra.writeFile)((0, _path.join)(defaultDir, "Preferences"), JSON.stringify(preferences));
|
|
35
|
+
return userDir;
|
|
36
|
+
}
|
|
37
|
+
async function getProductionPlaywrightConstructs({
|
|
38
|
+
proxy,
|
|
39
|
+
headless = true,
|
|
40
|
+
storageState,
|
|
41
|
+
downloadsPath
|
|
42
|
+
}) {
|
|
43
|
+
const extraArgs = ["--no-first-run", "--disable-sync", "--disable-translate", "--disable-features=TranslateUI", "--disable-features=NetworkService", "--lang=en"];
|
|
44
|
+
if (headless) {
|
|
45
|
+
extraArgs.push("--headless=new");
|
|
46
|
+
}
|
|
47
|
+
const executablePath = playwright.chromium.executablePath();
|
|
48
|
+
const chromium127Path = executablePath.replace("chromium-1117", "chromium-1124");
|
|
49
|
+
const isChrome127There = (0, _fsExtra.existsSync)(chromium127Path);
|
|
50
|
+
const userAgent = `Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/${isChrome127There ? 127 : 125}.0.0.0 Safari/537.36`;
|
|
51
|
+
const userDataDir = await createUserDirWithPreferences();
|
|
52
|
+
const context = await playwright.chromium.launchPersistentContext(userDataDir, {
|
|
53
|
+
headless,
|
|
54
|
+
ignoreDefaultArgs: [...getChromiumLaunchArgsToIgnore(), "--headless"],
|
|
55
|
+
proxy,
|
|
56
|
+
executablePath: isChrome127There ? chromium127Path : executablePath,
|
|
57
|
+
args: extraArgs,
|
|
58
|
+
downloadsPath,
|
|
59
|
+
userAgent
|
|
60
|
+
});
|
|
61
|
+
context.once("close", async () => {
|
|
62
|
+
try {
|
|
63
|
+
await (0, _fsExtra.rm)(userDataDir, {
|
|
16
64
|
recursive: true,
|
|
65
|
+
force: true,
|
|
66
|
+
retryDelay: 1000,
|
|
67
|
+
maxRetries: 5
|
|
68
|
+
});
|
|
69
|
+
} catch (error) {
|
|
70
|
+
console.error("Failed to remove user data dir", error);
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
if (storageState) {
|
|
74
|
+
await loadSessionToContext({
|
|
75
|
+
context,
|
|
76
|
+
session: storageState
|
|
17
77
|
});
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
78
|
+
}
|
|
79
|
+
const assetsFile = _path.default.join(_path.default.dirname((0, _url.fileURLToPath)(import.meta.url)), "./assets/browser_scripts.js");
|
|
80
|
+
await context.addInitScript({
|
|
81
|
+
path: assetsFile
|
|
82
|
+
});
|
|
83
|
+
let page = context.pages().at(0);
|
|
84
|
+
if (page) {
|
|
85
|
+
const scriptString = await (0, _fsExtra.readFile)(assetsFile, "utf8");
|
|
86
|
+
await page.evaluate(scriptString);
|
|
87
|
+
} else {
|
|
88
|
+
page = await context.newPage();
|
|
89
|
+
}
|
|
90
|
+
return {
|
|
91
|
+
page,
|
|
92
|
+
context
|
|
93
|
+
};
|
|
25
94
|
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
"--disable-features=TranslateUI",
|
|
32
|
-
"--disable-features=NetworkService",
|
|
33
|
-
"--lang=en",
|
|
34
|
-
];
|
|
35
|
-
if (headless) {
|
|
36
|
-
extraArgs.push("--headless=new");
|
|
95
|
+
const getChromiumLaunchArgsToIgnore = () => ["--disable-field-trial-config", "--disable-background-networking", "--enable-features=NetworkService,NetworkServiceInProcess", "--disable-background-timer-throttling", "--disable-backgrounding-occluded-windows", "--disable-back-forward-cache", "--disable-breakpad", "--disable-client-side-phishing-detection", "--disable-component-extensions-with-background-pages", "--disable-component-update", "--no-default-browser-check", "--disable-default-apps", "--disable-dev-shm-usage", "--disable-extensions", "--disable-features=ImprovedCookieControls,LazyFrameLoading,GlobalMediaControls,DestroyProfileOnBrowserClose,MediaRouter,DialMediaRouteProvider,AcceptCHFrame,AutoExpandDetailsElement,CertificateTransparencyComponentUpdater,AvoidUnnecessaryBeforeUnloadCheckSync,Translate,TranslateUI", "--allow-pre-commit-input", "--disable-hang-monitor", "--disable-ipc-flooding-protection", "--disable-prompt-on-repost", "--disable-renderer-backgrounding", "--force-color-profile=srgb", "--metrics-recording-only", "--no-first-run", "--enable-automation", "--password-store=basic", "--use-mock-keychain", "--no-service-autorun", "--export-tagged-pdf", "--enable-use-zoom-for-dsf=false"];
|
|
96
|
+
async function getPlaywrightConstructsForMode(mode, cdpAddress, authSession) {
|
|
97
|
+
if (mode == "playwright-standalone") {
|
|
98
|
+
if (!cdpAddress) {
|
|
99
|
+
throw new Error("cdpAddress is required");
|
|
37
100
|
}
|
|
38
|
-
const
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
const userDataDir = await createUserDirWithPreferences();
|
|
44
|
-
const context = await playwright.chromium.launchPersistentContext(userDataDir, {
|
|
45
|
-
headless,
|
|
46
|
-
ignoreDefaultArgs: [...getChromiumLaunchArgsToIgnore(), "--headless"],
|
|
47
|
-
proxy,
|
|
48
|
-
executablePath: isChrome127There ? chromium127Path : executablePath,
|
|
49
|
-
args: extraArgs,
|
|
50
|
-
downloadsPath,
|
|
51
|
-
userAgent,
|
|
52
|
-
});
|
|
53
|
-
context.once("close", async () => {
|
|
54
|
-
try {
|
|
55
|
-
await rm(userDataDir, {
|
|
56
|
-
recursive: true,
|
|
57
|
-
force: true,
|
|
58
|
-
retryDelay: 1000,
|
|
59
|
-
maxRetries: 5,
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
catch (error) {
|
|
63
|
-
console.error("Failed to remove user data dir", error);
|
|
64
|
-
}
|
|
65
|
-
});
|
|
66
|
-
if (storageState) {
|
|
67
|
-
await loadSessionToContext({ context, session: storageState });
|
|
101
|
+
const {
|
|
102
|
+
context
|
|
103
|
+
} = await getRemotePlaywrightContext(cdpAddress);
|
|
104
|
+
if (!context) {
|
|
105
|
+
throw new Error("no context found");
|
|
68
106
|
}
|
|
69
|
-
const assetsFile =
|
|
107
|
+
const assetsFile = _path.default.join(_path.default.dirname((0, _url.fileURLToPath)(import.meta.url)), "./assets/browser_scripts.js");
|
|
70
108
|
await context.addInitScript({
|
|
71
|
-
|
|
109
|
+
path: assetsFile
|
|
72
110
|
});
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
111
|
+
const pages = await context.pages();
|
|
112
|
+
let page = null;
|
|
113
|
+
if (pages.length > 0) {
|
|
114
|
+
page = pages[0];
|
|
115
|
+
const scriptString = await fs.readFile(assetsFile, "utf8");
|
|
116
|
+
await page.evaluate(scriptString);
|
|
117
|
+
} else {
|
|
118
|
+
page = await context.newPage();
|
|
77
119
|
}
|
|
78
|
-
|
|
79
|
-
|
|
120
|
+
if (authSession) {
|
|
121
|
+
await loadSessionToContext({
|
|
122
|
+
context,
|
|
123
|
+
session: authSession
|
|
124
|
+
});
|
|
80
125
|
}
|
|
81
126
|
return {
|
|
82
|
-
|
|
83
|
-
|
|
127
|
+
page,
|
|
128
|
+
context
|
|
84
129
|
};
|
|
85
|
-
}
|
|
86
|
-
const
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
"--no-default-browser-check",
|
|
98
|
-
"--disable-default-apps",
|
|
99
|
-
"--disable-dev-shm-usage",
|
|
100
|
-
"--disable-extensions",
|
|
101
|
-
"--disable-features=ImprovedCookieControls,LazyFrameLoading,GlobalMediaControls,DestroyProfileOnBrowserClose,MediaRouter,DialMediaRouteProvider,AcceptCHFrame,AutoExpandDetailsElement,CertificateTransparencyComponentUpdater,AvoidUnnecessaryBeforeUnloadCheckSync,Translate,TranslateUI",
|
|
102
|
-
"--allow-pre-commit-input",
|
|
103
|
-
"--disable-hang-monitor",
|
|
104
|
-
"--disable-ipc-flooding-protection",
|
|
105
|
-
"--disable-prompt-on-repost",
|
|
106
|
-
"--disable-renderer-backgrounding",
|
|
107
|
-
"--force-color-profile=srgb",
|
|
108
|
-
"--metrics-recording-only",
|
|
109
|
-
"--no-first-run",
|
|
110
|
-
"--enable-automation",
|
|
111
|
-
"--password-store=basic",
|
|
112
|
-
"--use-mock-keychain",
|
|
113
|
-
"--no-service-autorun",
|
|
114
|
-
"--export-tagged-pdf",
|
|
115
|
-
"--enable-use-zoom-for-dsf=false",
|
|
116
|
-
];
|
|
117
|
-
export async function getPlaywrightConstructsForMode(mode, cdpAddress, authSession) {
|
|
118
|
-
if (mode == "playwright-standalone") {
|
|
119
|
-
if (!cdpAddress) {
|
|
120
|
-
throw new Error("cdpAddress is required");
|
|
121
|
-
}
|
|
122
|
-
const { context } = await getRemotePlaywrightContext(cdpAddress);
|
|
123
|
-
if (!context) {
|
|
124
|
-
throw new Error("no context found");
|
|
125
|
-
}
|
|
126
|
-
const assetsFile = path.join(path.dirname(fileURLToPath(import.meta.url)), "./assets/browser_scripts.js");
|
|
127
|
-
await context.addInitScript({
|
|
128
|
-
path: assetsFile,
|
|
129
|
-
});
|
|
130
|
-
const pages = await context.pages();
|
|
131
|
-
let page = null;
|
|
132
|
-
if (pages.length > 0) {
|
|
133
|
-
page = pages[0];
|
|
134
|
-
const scriptString = await fs.readFile(assetsFile, "utf8");
|
|
135
|
-
await page.evaluate(scriptString);
|
|
136
|
-
}
|
|
137
|
-
else {
|
|
138
|
-
page = await context.newPage();
|
|
139
|
-
}
|
|
140
|
-
if (authSession) {
|
|
141
|
-
await loadSessionToContext({ context, session: authSession });
|
|
142
|
-
}
|
|
143
|
-
return {
|
|
144
|
-
page,
|
|
145
|
-
context,
|
|
146
|
-
};
|
|
147
|
-
}
|
|
148
|
-
const downloadsPath = getDownloadDirectoryPath();
|
|
149
|
-
if (mode === "playwright" || mode === "playwright-headless") {
|
|
150
|
-
const productionConstructs = await getProductionPlaywrightConstructs({
|
|
151
|
-
headless: mode === "playwright-headless",
|
|
152
|
-
downloadsPath,
|
|
153
|
-
});
|
|
154
|
-
if (authSession) {
|
|
155
|
-
await loadSessionToContext({
|
|
156
|
-
context: productionConstructs.context,
|
|
157
|
-
session: authSession,
|
|
158
|
-
});
|
|
159
|
-
}
|
|
160
|
-
return {
|
|
161
|
-
...productionConstructs,
|
|
162
|
-
};
|
|
163
|
-
}
|
|
164
|
-
throw "invalid mode";
|
|
165
|
-
}
|
|
166
|
-
export async function loadSessionToContext({ context, session, }) {
|
|
167
|
-
let sessionToLoad;
|
|
168
|
-
if (session.type === "state") {
|
|
169
|
-
sessionToLoad = session.state;
|
|
170
|
-
}
|
|
171
|
-
else {
|
|
172
|
-
const fullPath = getFullPathInProject(session.path);
|
|
173
|
-
sessionToLoad = await fs.readJson(fullPath);
|
|
130
|
+
}
|
|
131
|
+
const downloadsPath = (0, _runtime.getDownloadDirectoryPath)();
|
|
132
|
+
if (mode === "playwright" || mode === "playwright-headless") {
|
|
133
|
+
const productionConstructs = await getProductionPlaywrightConstructs({
|
|
134
|
+
headless: mode === "playwright-headless",
|
|
135
|
+
downloadsPath
|
|
136
|
+
});
|
|
137
|
+
if (authSession) {
|
|
138
|
+
await loadSessionToContext({
|
|
139
|
+
context: productionConstructs.context,
|
|
140
|
+
session: authSession
|
|
141
|
+
});
|
|
174
142
|
}
|
|
175
|
-
|
|
143
|
+
return {
|
|
144
|
+
...productionConstructs
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
throw "invalid mode";
|
|
176
148
|
}
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
resources: [`http-get://${cdpAddressWithoutProtocol}/json/version`],
|
|
190
|
-
delay: 100,
|
|
191
|
-
interval: 100,
|
|
192
|
-
timeout: 5000,
|
|
193
|
-
tcpTimeout: 1000,
|
|
194
|
-
window: 1000,
|
|
195
|
-
});
|
|
196
|
-
}
|
|
197
|
-
catch (error) {
|
|
198
|
-
console.error("Failed to connect to the browser");
|
|
199
|
-
// 128 is the exit code for SIGINT https://tldp.org/LDP/abs/html/exitcodes.html
|
|
200
|
-
// 9 is the SIGKILL signal
|
|
201
|
-
process.exit(128 + 9);
|
|
202
|
-
}
|
|
203
|
-
try {
|
|
204
|
-
browser = await playwright.chromium.connectOverCDP(cdpAddress);
|
|
205
|
-
}
|
|
206
|
-
catch (e) {
|
|
207
|
-
console.log(e);
|
|
208
|
-
throw new Error("failed to connect to the browser");
|
|
209
|
-
}
|
|
210
|
-
const context = browser.contexts()[0];
|
|
211
|
-
return { browser, context };
|
|
149
|
+
async function loadSessionToContext({
|
|
150
|
+
context,
|
|
151
|
+
session
|
|
152
|
+
}) {
|
|
153
|
+
let sessionToLoad;
|
|
154
|
+
if (session.type === "state") {
|
|
155
|
+
sessionToLoad = session.state;
|
|
156
|
+
} else {
|
|
157
|
+
const fullPath = (0, _fileUtils.getFullPathInProject)(session.path);
|
|
158
|
+
sessionToLoad = await fs.readJson(fullPath);
|
|
159
|
+
}
|
|
160
|
+
await (0, _contextStorageStateHelpers.setContextStorageState)(context, sessionToLoad);
|
|
212
161
|
}
|
|
162
|
+
async function getRemotePlaywrightContext(cdpAddress) {
|
|
163
|
+
const playwright = await Promise.resolve().then(() => _interopRequireWildcard(require("@intuned/playwright-core")));
|
|
164
|
+
let browser = null;
|
|
165
|
+
if (!cdpAddress) {
|
|
166
|
+
throw new Error("cdpAddress is required");
|
|
167
|
+
}
|
|
168
|
+
const cdpAddressWithoutProtocol = cdpAddress.replace("http://", "").replace("https://", "").replace("localhost", "127.0.0.1");
|
|
169
|
+
try {
|
|
170
|
+
await (0, _waitOn.default)({
|
|
171
|
+
resources: [`http-get://${cdpAddressWithoutProtocol}/json/version`],
|
|
172
|
+
delay: 100,
|
|
173
|
+
interval: 100,
|
|
174
|
+
timeout: 5000,
|
|
175
|
+
tcpTimeout: 1000,
|
|
176
|
+
window: 1000
|
|
177
|
+
});
|
|
178
|
+
} catch (error) {
|
|
179
|
+
console.error("Failed to connect to the browser");
|
|
180
|
+
process.exit(128 + 9);
|
|
181
|
+
}
|
|
182
|
+
try {
|
|
183
|
+
browser = await playwright.chromium.connectOverCDP(cdpAddress);
|
|
184
|
+
} catch (e) {
|
|
185
|
+
console.log(e);
|
|
186
|
+
throw new Error("failed to connect to the browser");
|
|
187
|
+
}
|
|
188
|
+
const context = browser.contexts()[0];
|
|
189
|
+
return {
|
|
190
|
+
browser,
|
|
191
|
+
context
|
|
192
|
+
};
|
|
193
|
+
}
|