@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.
Files changed (114) hide show
  1. package/.babelrc +1 -2
  2. package/WebTemplate/api.ts +90 -92
  3. package/WebTemplate/controllers/authSessions/create.ts +2 -2
  4. package/WebTemplate/controllers/authSessions/store.ts +1 -1
  5. package/WebTemplate/controllers/runApi/helpers.ts +14 -12
  6. package/WebTemplate/index.playwright.ts +32 -42
  7. package/WebTemplate/jobs.ts +13 -2
  8. package/WebTemplate/utils.ts +53 -1
  9. package/api/test2.ts +6 -1
  10. package/auth-sessions/check.ts +3 -1
  11. package/auth-sessions/create.ts +10 -10
  12. package/bin/intuned-api-run +1 -1
  13. package/bin/intuned-auth-session-check +1 -1
  14. package/bin/intuned-auth-session-create +1 -1
  15. package/bin/intuned-auth-session-load +1 -1
  16. package/bin/intuned-auth-session-refresh +1 -1
  17. package/bin/intuned-browser-save-state +1 -1
  18. package/bin/intuned-browser-start +1 -1
  19. package/bin/intuned-build +1 -1
  20. package/bin/intuned-ts-check +1 -1
  21. package/dist/commands/api/run.js +109 -170
  22. package/dist/commands/auth-sessions/load.js +28 -26
  23. package/dist/commands/auth-sessions/run-check.js +54 -53
  24. package/dist/commands/auth-sessions/run-create.js +93 -96
  25. package/dist/commands/browser/save-state.js +14 -16
  26. package/dist/commands/browser/start-browser.js +11 -11
  27. package/dist/commands/build.js +79 -109
  28. package/dist/commands/common/browserUtils.js +53 -51
  29. package/dist/commands/common/getFirstLineNumber.js +93 -93
  30. package/dist/commands/common/{getFirstLineNumber.test.ts → getFirstLineNumber.test.js} +53 -48
  31. package/dist/commands/common/sendMessageToClient.js +9 -4
  32. package/dist/commands/common/tsNodeImport.d.ts +1 -0
  33. package/dist/commands/common/tsNodeImport.js +18 -0
  34. package/dist/commands/common/utils/fileUtils.js +32 -22
  35. package/dist/commands/common/utils/settings.js +27 -19
  36. package/dist/commands/common/utils/unixSocket.js +43 -43
  37. package/dist/commands/common/utils/webTemplate.js +30 -28
  38. package/dist/commands/interface/run.js +162 -139
  39. package/dist/commands/ts-check.js +50 -50
  40. package/dist/common/Logger/Logger/index.js +55 -42
  41. package/dist/common/Logger/Logger/types.js +5 -1
  42. package/dist/common/Logger/index.js +55 -42
  43. package/dist/common/Logger/types.js +5 -1
  44. package/dist/common/asyncLocalStorage/index.js +16 -8
  45. package/dist/common/cleanEnvironmentVariables.js +16 -12
  46. package/dist/common/constants.js +7 -1
  47. package/dist/common/contextStorageStateHelpers.js +47 -38
  48. package/dist/common/getPlaywrightConstructs.js +178 -197
  49. package/dist/common/jwtTokenManager.js +76 -79
  50. package/dist/common/runApi/errors.js +159 -150
  51. package/dist/common/runApi/index.js +240 -232
  52. package/dist/common/runApi/types.d.ts +19 -5
  53. package/dist/common/runApi/types.js +53 -56
  54. package/dist/common/settingsSchema.js +15 -10
  55. package/dist/common/telemetry.js +28 -30
  56. package/dist/index.js +69 -4
  57. package/dist/runtime/RunError.js +18 -11
  58. package/dist/runtime/downloadDirectory.js +19 -13
  59. package/dist/runtime/enums.d.js +5 -0
  60. package/dist/runtime/enums.d.ts +11 -1
  61. package/dist/runtime/enums.js +18 -12
  62. package/dist/runtime/executionHelpers.test.js +53 -0
  63. package/dist/runtime/export.d.js +5 -0
  64. package/dist/runtime/export.d.ts +202 -1
  65. package/dist/runtime/extendPayload.js +21 -15
  66. package/dist/runtime/extendTimeout.js +28 -21
  67. package/dist/runtime/index.js +53 -6
  68. package/dist/runtime/requestMoreInfo.js +23 -16
  69. package/dist/runtime/runInfo.js +21 -14
  70. package/package.json +4 -7
  71. package/dist/commands/api/run.ts +0 -105
  72. package/dist/commands/auth-sessions/load.ts +0 -30
  73. package/dist/commands/auth-sessions/run-check.ts +0 -51
  74. package/dist/commands/auth-sessions/run-create.ts +0 -91
  75. package/dist/commands/browser/save-state.ts +0 -14
  76. package/dist/commands/browser/start-browser.ts +0 -11
  77. package/dist/commands/build.ts +0 -79
  78. package/dist/commands/common/browserUtils.ts +0 -45
  79. package/dist/commands/common/getDefaultExportFromFile.d.ts +0 -1
  80. package/dist/commands/common/getDefaultExportFromFile.js +0 -12
  81. package/dist/commands/common/getDefaultExportFromFile.ts +0 -11
  82. package/dist/commands/common/getFirstLineNumber.ts +0 -96
  83. package/dist/commands/common/sendMessageToClient.ts +0 -3
  84. package/dist/commands/common/utils/fileUtils.ts +0 -23
  85. package/dist/commands/common/utils/settings.ts +0 -22
  86. package/dist/commands/common/utils/unixSocket.ts +0 -38
  87. package/dist/commands/common/utils/webTemplate.ts +0 -23
  88. package/dist/commands/interface/run.ts +0 -156
  89. package/dist/commands/ts-check.ts +0 -51
  90. package/dist/common/Logger/Logger/index.ts +0 -53
  91. package/dist/common/Logger/Logger/types.ts +0 -1
  92. package/dist/common/Logger/index.ts +0 -53
  93. package/dist/common/Logger/types.ts +0 -1
  94. package/dist/common/asyncLocalStorage/index.ts +0 -9
  95. package/dist/common/cleanEnvironmentVariables.ts +0 -10
  96. package/dist/common/constants.ts +0 -1
  97. package/dist/common/contextStorageStateHelpers.ts +0 -43
  98. package/dist/common/getPlaywrightConstructs.ts +0 -182
  99. package/dist/common/jwtTokenManager.ts +0 -71
  100. package/dist/common/runApi/errors.ts +0 -154
  101. package/dist/common/runApi/index.ts +0 -253
  102. package/dist/common/runApi/types.ts +0 -43
  103. package/dist/common/settingsSchema.ts +0 -9
  104. package/dist/common/telemetry.ts +0 -23
  105. package/dist/index.ts +0 -4
  106. package/dist/runtime/RunError.ts +0 -12
  107. package/dist/runtime/downloadDirectory.ts +0 -13
  108. package/dist/runtime/enums.ts +0 -12
  109. package/dist/runtime/executionHelpers.test.ts +0 -51
  110. package/dist/runtime/extendPayload.ts +0 -15
  111. package/dist/runtime/extendTimeout.ts +0 -24
  112. package/dist/runtime/index.ts +0 -6
  113. package/dist/runtime/requestMoreInfo.ts +0 -18
  114. package/dist/runtime/runInfo.ts +0 -15
@@ -1,47 +1,60 @@
1
- import { formatWithOptions } from "node:util";
2
- import chalk from "chalk";
3
- const format = formatWithOptions.bind(undefined, { colors: true });
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
- TRACE: chalk.gray,
6
- DEBUG: chalk.blue,
7
- INFO: chalk.green,
8
- WARN: chalk.yellow,
9
- ERROR: chalk.red,
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
- logFunction(entry) {
13
- const { level, timestamp, message, meta } = entry;
14
- const date = new Date(timestamp);
15
- const levelColor = LOG_LEVEL_COLORS[level];
16
- if (meta === undefined) {
17
- process.stderr.write(`${format(date)} [@intuned/sdk][${levelColor(level)}] ${message}\n`);
18
- }
19
- else {
20
- process.stderr.write(`${format(date)} [@intuned/sdk][${levelColor(level)}] ${message} ${format(meta)}\n`);
21
- }
22
- }
23
- log(level, message, meta) {
24
- this.logFunction({
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
- export const logger = new Logger();
60
+ const logger = exports.logger = new Logger();
@@ -1 +1,5 @@
1
- export {};
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
@@ -1,9 +1,17 @@
1
- import { AsyncLocalStorage } from "async_hooks";
2
- export const asyncLocalStorage = new AsyncLocalStorage();
3
- export function runWithContext(contextData, callback, ...args) {
4
- return asyncLocalStorage.run(contextData, callback, ...args);
5
- }
6
- export function getExecutionContext() {
7
- const contextData = asyncLocalStorage.getStore();
8
- return contextData;
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
- export function cleanEnvironmentVariables() {
2
- Object.keys(process.env)
3
- .filter((i) => {
4
- if (i.toLocaleLowerCase().startsWith("npm")) {
5
- return true;
6
- }
7
- if (i.toLocaleLowerCase().startsWith("fly") && i !== "FLY_ALLOC_ID") {
8
- return true;
9
- }
10
- })
11
- .forEach((i) => delete process.env[i]);
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
+ }
@@ -1 +1,7 @@
1
- export const AUTH_SESSIONS_FOLDER_NAME = "auth-sessions";
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
- const result = [];
3
- for (const key in storage) {
4
- result.push({ name: key, value: storage[key] });
5
- }
6
- return result;
7
- }
8
- export async function getContextStorageState(context) {
9
- const cookiesAndLocalStorage = await context.storageState();
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
- export async function setContextStorageState(context, storage) {
31
- await context.intunedSetStorageState(storage);
32
- const sessionStorage = storage.sessionStorage;
33
- await context.addInitScript((storage) => {
34
- for (const { origin, sessionStorage } of storage) {
35
- if (window.location.origin === origin) {
36
- for (const item of sessionStorage)
37
- window.sessionStorage.setItem(item.name, item.value);
38
- }
39
- }
40
- }, sessionStorage);
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
- import * as playwright from "@intuned/playwright-core";
2
- import { existsSync, mkdir, mkdtemp, rm, writeFile, readFile } from "fs-extra";
3
- import { setContextStorageState, } from "./contextStorageStateHelpers.js";
4
- import { join } from "path";
5
- import path from "path";
6
- import * as fs from "fs-extra";
7
- import { getFullPathInProject } from "../commands/common/utils/fileUtils";
8
- import waitOn from "wait-on";
9
- import { getDownloadDirectoryPath } from "../runtime";
10
- import { fileURLToPath } from "url";
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
- const playwrightTempDir = await mkdtemp("/tmp/pw-");
13
- const userDir = join(playwrightTempDir, "userdir");
14
- const defaultDir = join(userDir, "Default");
15
- await mkdir(defaultDir, {
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
- const preferences = {
19
- plugins: {
20
- always_open_pdf_externally: true,
21
- },
22
- };
23
- await writeFile(join(defaultDir, "Preferences"), JSON.stringify(preferences));
24
- return userDir;
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
- export async function getProductionPlaywrightConstructs({ proxy, headless = true, storageState, downloadsPath, }) {
27
- const extraArgs = [
28
- "--no-first-run",
29
- "--disable-sync",
30
- "--disable-translate",
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 executablePath = playwright.chromium.executablePath();
39
- // use chromium 127 instead of 125, this depends on the docker image playwright version.
40
- const chromium127Path = executablePath.replace("chromium-1117", "chromium-1124");
41
- const isChrome127There = existsSync(chromium127Path);
42
- 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`;
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 = path.join(path.dirname(fileURLToPath(import.meta.url)), "./assets/browser_scripts.js");
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
- path: assetsFile,
109
+ path: assetsFile
72
110
  });
73
- let page = context.pages().at(0);
74
- if (page) {
75
- const scriptString = await readFile(assetsFile, "utf8");
76
- await page.evaluate(scriptString);
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
- else {
79
- page = await context.newPage();
120
+ if (authSession) {
121
+ await loadSessionToContext({
122
+ context,
123
+ session: authSession
124
+ });
80
125
  }
81
126
  return {
82
- page,
83
- context,
127
+ page,
128
+ context
84
129
  };
85
- }
86
- const getChromiumLaunchArgsToIgnore = () => [
87
- "--disable-field-trial-config",
88
- "--disable-background-networking",
89
- "--enable-features=NetworkService,NetworkServiceInProcess",
90
- "--disable-background-timer-throttling",
91
- "--disable-backgrounding-occluded-windows",
92
- "--disable-back-forward-cache",
93
- "--disable-breakpad",
94
- "--disable-client-side-phishing-detection",
95
- "--disable-component-extensions-with-background-pages",
96
- "--disable-component-update",
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
- await setContextStorageState(context, sessionToLoad);
143
+ return {
144
+ ...productionConstructs
145
+ };
146
+ }
147
+ throw "invalid mode";
176
148
  }
177
- export async function getRemotePlaywrightContext(cdpAddress) {
178
- const playwright = await import("@intuned/playwright-core");
179
- let browser = null;
180
- if (!cdpAddress) {
181
- throw new Error("cdpAddress is required");
182
- }
183
- const cdpAddressWithoutProtocol = cdpAddress
184
- .replace("http://", "")
185
- .replace("https://", "")
186
- .replace("localhost", "127.0.0.1");
187
- try {
188
- await waitOn({
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
+ }