@spscommerce/e2e-core 2.6.1 → 2.9.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/.dockerignore CHANGED
@@ -1,8 +1,10 @@
1
1
  # Ignore all files by default
2
2
  *
3
3
  # White list the required files
4
- !.yarnrc.yml
5
4
  !package.json
5
+ !pnpm-lock.yaml
6
+ !pnpm-workspace.yaml
7
+ !.npmrc
6
8
  !playwright.config.js
7
9
  !tsconfig.json
8
- !yarn.lock
10
+ !.env
package/.env CHANGED
@@ -1 +1,2 @@
1
1
  BASEURL=https://test.commerce.spscommerce.com/fulfillment/
2
+ DOTENV_CONFIG_QUIET=true
@@ -0,0 +1 @@
1
+ pnpm commitlint --edit $1
@@ -0,0 +1 @@
1
+ npx lint-staged --allow-empty
package/Dockerfile CHANGED
@@ -1,11 +1,11 @@
1
- FROM mcr.microsoft.com/playwright:v1.57.0-noble
1
+ FROM mcr.microsoft.com/playwright:v1.58.2-noble
2
2
 
3
3
  ARG BROWSER
4
4
 
5
5
  RUN mkdir e2e
6
6
  WORKDIR /e2e
7
7
  COPY . .
8
- RUN corepack enable && corepack prepare yarn@4.4.0 --activate
9
- RUN yarn
8
+ RUN corepack enable && corepack prepare pnpm@10.32.1 --activate
9
+ RUN pnpm i
10
10
  RUN if [ "$BROWSER" = "edge" ]; then npx playwright install msedge --only-shell ; fi
11
11
  RUN if [ "$BROWSER" = "chrome" ]; then npx playwright install chrome --only-shell ; fi
package/README.md CHANGED
@@ -120,7 +120,8 @@ ARG BROWSER
120
120
  RUN mkdir e2e
121
121
  WORKDIR /e2e
122
122
  COPY . .
123
- RUN yarn
123
+ RUN corepack enable && corepack prepare pnpm@10.28.0 --activate
124
+ RUN pnpm i
124
125
  RUN if [ "$BROWSER" = "edge" ]; then npx playwright install msedge; fi
125
126
  RUN if [ "$BROWSER" = "chrome" ]; then npx playwright install chrome; fi
126
127
  ```
@@ -129,7 +130,7 @@ RUN if [ "$BROWSER" = "chrome" ]; then npx playwright install chrome; fi
129
130
  > You can find exact version here: https://mcr.microsoft.com/en-us/product/playwright/tags
130
131
 
131
132
  ## Publish package
132
- If you want to publish your package to the npm registry and have changed any files from `src` folder, you must build the package first. Run the following command: `yarn build`.
133
+ If you want to publish your package to the npm registry and have changed any files from `src` folder, you must build the package first. Run the following command: `pnpm build`.
133
134
  After that, push changed files from the `lib` and `src` folders to your PR. You need to follow the [pattern](https://gist.github.com/joshbuchea/6f47e86d2510bce28f8e7f42ae84c716) of the semantic commit messages (should begin from __fix:__ or __feat:__), like:
134
135
  ```
135
136
  fix: Update Dockerfile to restore build process
@@ -0,0 +1 @@
1
+ module.exports = { extends: ['@commitlint/config-conventional'] };
package/eslint.config.mjs CHANGED
@@ -1,12 +1,12 @@
1
1
  import globals from 'globals';
2
2
  import path from 'node:path';
3
- import { fileURLToPath } from 'node:url';
4
- import { defineConfig, globalIgnores } from 'eslint/config';
3
+ import {fileURLToPath} from 'node:url';
4
+ import {defineConfig, globalIgnores} from 'eslint/config';
5
5
 
6
6
  import tsParser from '@typescript-eslint/parser';
7
7
  import typescriptEslint from '@typescript-eslint/eslint-plugin';
8
8
  import js from '@eslint/js';
9
- import { FlatCompat } from '@eslint/eslintrc';
9
+ import {FlatCompat} from '@eslint/eslintrc';
10
10
 
11
11
  const __filename = fileURLToPath(import.meta.url);
12
12
  const __dirname = path.dirname(__filename);
@@ -14,25 +14,31 @@ const compat = new FlatCompat({
14
14
  baseDirectory: __dirname, recommendedConfig: js.configs.recommended, allConfig: js.configs.all
15
15
  });
16
16
 
17
- export default defineConfig([globalIgnores(["node_modules/*", "lib/*"]), {
18
- languageOptions: {
19
- globals: {
20
- ...globals.browser,
21
- ...globals.amd,
22
- ...globals.node,
17
+ export default defineConfig([
18
+ globalIgnores([
19
+ "node_modules/*",
20
+ "lib/*"
21
+ ]),
22
+ {
23
+ languageOptions: {
24
+ globals: {
25
+ ...globals.browser,
26
+ ...globals.amd,
27
+ ...globals.node,
28
+ },
29
+ parser: tsParser,
30
+ ecmaVersion: 12,
31
+ sourceType: "module",
32
+ parserOptions: {},
23
33
  },
24
- parser: tsParser,
25
- ecmaVersion: 12,
26
- sourceType: "module",
27
- parserOptions: {},
28
- },
29
34
 
30
- extends: compat.extends("eslint:recommended", "plugin:@typescript-eslint/recommended"),
35
+ extends: compat.extends("eslint:recommended", "plugin:@typescript-eslint/recommended"),
31
36
 
32
- plugins: {
33
- "@typescript-eslint": typescriptEslint,
34
- },
35
- rules: {
36
- "@typescript-eslint/no-require-imports": "off",
37
- },
38
- }]);
37
+ plugins: {
38
+ "@typescript-eslint": typescriptEslint,
39
+ },
40
+ rules: {
41
+ "@typescript-eslint/no-require-imports": "off",
42
+ },
43
+ }
44
+ ]);
@@ -15,18 +15,28 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
15
15
  }) : function(o, v) {
16
16
  o["default"] = v;
17
17
  });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
25
35
  var __importDefault = (this && this.__importDefault) || function (mod) {
26
36
  return (mod && mod.__esModule) ? mod : { "default": mod };
27
37
  };
28
- var _a;
29
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.default = globalSetup;
30
40
  const fs_1 = __importDefault(require("fs"));
31
41
  const path_1 = __importDefault(require("path"));
32
42
  const test_1 = require("@playwright/test");
@@ -43,7 +53,7 @@ async function globalSetup() {
43
53
  // Set something up once before running auth flow
44
54
  if (process.env.SETUP_PATH) {
45
55
  if (fs_1.default.existsSync(process.env.SETUP_PATH)) {
46
- await (_a = process.env.SETUP_PATH, Promise.resolve().then(() => __importStar(require(_a))));
56
+ await Promise.resolve(`${process.env.SETUP_PATH}`).then(s => __importStar(require(s)));
47
57
  }
48
58
  else {
49
59
  throw new Error(`Provided SETUP_PATH was not found.`);
@@ -58,10 +68,22 @@ async function globalSetup() {
58
68
  traceFile = path_1.default.join(process.cwd(), 'results-e2e/auth/globalSetupProd.zip');
59
69
  }
60
70
  // Launch browser and log in if storageState.json does not exist OR auth expires soon
61
- const currentTS = new Date().getTime();
62
- if (!fs_1.default.existsSync(storageFile) ||
63
- (fs_1.default.existsSync(storageFile) &&
64
- ((JSON.parse(fs_1.default.readFileSync(storageFile, 'utf8')).origins[0].localStorage.find(o => o.name === 'expires_at').value - currentTS) / 60000) < 30)) {
71
+ let requireAuth = false;
72
+ if (!fs_1.default.existsSync(storageFile)) {
73
+ requireAuth = true;
74
+ }
75
+ else {
76
+ const storage = JSON.parse(fs_1.default.readFileSync(storageFile, 'utf8'));
77
+ const openIdProfile = storage.origins[0].localStorage.find(item => item.name.includes('openid profile email offline_access'));
78
+ const openIdData = JSON.parse(openIdProfile.value);
79
+ const expiresAt = (parseFloat(openIdData.expiresAt) || 0) * 1000; // identity refresh token lives 1 hour
80
+ const currentTS = new Date().getTime();
81
+ if (((expiresAt - currentTS) / 60000) < 10) {
82
+ // less than 10 minutes
83
+ requireAuth = true;
84
+ }
85
+ }
86
+ if (requireAuth) {
65
87
  const browser = await test_1.chromium.launch({ headless: false }); // { headless: false }
66
88
  const context = await browser.newContext({ ignoreHTTPSErrors: true });
67
89
  await context.grantPermissions(['local-network-access']);
@@ -99,5 +121,4 @@ async function globalSetup() {
99
121
  }
100
122
  return;
101
123
  }
102
- exports.default = globalSetup;
103
124
  //# sourceMappingURL=globalSetup.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"globalSetup.js","sourceRoot":"","sources":["../src/globalSetup.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"globalSetup.js","sourceRoot":"","sources":["../src/globalSetup.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.log = exports.disableLogger = exports.enableLogger = void 0;
6
+ exports.log = void 0;
7
+ exports.enableLogger = enableLogger;
8
+ exports.disableLogger = disableLogger;
7
9
  const fs_1 = __importDefault(require("fs"));
8
10
  const path_1 = __importDefault(require("path"));
9
11
  let access;
@@ -49,7 +51,6 @@ async function enableLogger(file, page) {
49
51
  });
50
52
  return;
51
53
  }
52
- exports.enableLogger = enableLogger;
53
54
  async function disableLogger() {
54
55
  // Finish error writing
55
56
  if (access) {
@@ -57,6 +58,5 @@ async function disableLogger() {
57
58
  }
58
59
  return;
59
60
  }
60
- exports.disableLogger = disableLogger;
61
61
  exports.log = console.log.bind(console);
62
62
  //# sourceMappingURL=loggerSetup.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"loggerSetup.js","sourceRoot":"","sources":["../src/loggerSetup.ts"],"names":[],"mappings":";;;;;;AAAA,4CAAoB;AACpB,gDAAwB;AAGxB,IAAI,MAAsB,CAAC;AAEpB,KAAK,UAAU,YAAY,CAAC,IAAc,EAAE,IAAU;IACzD,QAAQ;IACR,IAAI;IACJ,8CAA8C;IAC9C,0CAA0C;IAC1C,yBAAyB;IACzB,4DAA4D;IAC5D,IAAI;IACJ,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACtB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/B,MAAM,QAAQ,GAAG,GAAG,KAAK,IAAI,IAAI,EAAE,CAAC;IACpC,MAAM,eAAe,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,kBAAkB,CAAC,CAAC;IAErE,2CAA2C;IAC3C,YAAE,CAAC,SAAS,CAAC,eAAe,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEnD,kDAAkD;IAClD,MAAM,GAAG,YAAE,CAAC,iBAAiB,CAAC,GAAG,eAAe,IAAI,QAAQ,MAAM,CAAC,CAAA;IACnE,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAExE,wFAAwF;IACxF,OAAO,CAAC,GAAG,CAAC;qCACqB,OAAO,CAAC,GAAG,CAAC,SAAS,aAAa,IAAI,EAAE,CAAC,CAAC;IAE3E,oBAAoB;IACpB,IAAI;SACC,EAAE,CAAC,SAAS,EAAE,KAAK,EAAC,OAAO,EAAC,EAAE;QAC3B,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,OAAO,EAAE;YAC5B,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,gBAAgB,EAAE;gBACrC,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,IAAI,EAAE;oBAC5B,OAAO,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC;aAC1C;YACD,OAAO,CAAC,GAAG,CAAC,kBAAkB,OAAO,CAAC,IAAI,EAAE,KAAK,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;SACtE;IACL,CAAC,CAAC;SACD,EAAE,CAAC,eAAe,EAAE,OAAO,CAAC,EAAE,CAC3B,OAAO,CAAC,GAAG,CAAC,qBAAqB,OAAO,CAAC,OAAO,EAAE,CAAC,SAAS,KAAK,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;SACrF,EAAE,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,EAAE;QACrB,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IAC/D,CAAC,CAAC;SACD,EAAE,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,EAAE;QACzB,IAAI,QAAQ,CAAC,MAAM,EAAE,IAAI,GAAG,EAAE;YAC1B,OAAO,CAAC,GAAG,CAAC,uBAAuB,QAAQ,CAAC,MAAM,EAAE,KAAK,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;SAC9E;IACL,CAAC,CAAC,CAAA;IACN,OAAO;AACX,CAAC;AA9CD,oCA8CC;AAEM,KAAK,UAAU,aAAa;IAC/B,uBAAuB;IACvB,IAAI,MAAM,EAAE;QACR,MAAM,CAAC,GAAG,EAAE,CAAC;KAChB;IACD,OAAO;AACX,CAAC;AAND,sCAMC;AAEY,QAAA,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC"}
1
+ {"version":3,"file":"loggerSetup.js","sourceRoot":"","sources":["../src/loggerSetup.ts"],"names":[],"mappings":";;;;;;AAMA,oCA8CC;AAED,sCAMC;AA5DD,4CAAoB;AACpB,gDAAwB;AAGxB,IAAI,MAAsB,CAAC;AAEpB,KAAK,UAAU,YAAY,CAAC,IAAc,EAAE,IAAU;IACzD,QAAQ;IACR,IAAI;IACJ,8CAA8C;IAC9C,0CAA0C;IAC1C,yBAAyB;IACzB,4DAA4D;IAC5D,IAAI;IACJ,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACtB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/B,MAAM,QAAQ,GAAG,GAAG,KAAK,IAAI,IAAI,EAAE,CAAC;IACpC,MAAM,eAAe,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,kBAAkB,CAAC,CAAC;IAErE,2CAA2C;IAC3C,YAAE,CAAC,SAAS,CAAC,eAAe,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEnD,kDAAkD;IAClD,MAAM,GAAG,YAAE,CAAC,iBAAiB,CAAC,GAAG,eAAe,IAAI,QAAQ,MAAM,CAAC,CAAA;IACnE,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAExE,wFAAwF;IACxF,OAAO,CAAC,GAAG,CAAC;qCACqB,OAAO,CAAC,GAAG,CAAC,SAAS,aAAa,IAAI,EAAE,CAAC,CAAC;IAE3E,oBAAoB;IACpB,IAAI;SACC,EAAE,CAAC,SAAS,EAAE,KAAK,EAAC,OAAO,EAAC,EAAE;QAC3B,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,OAAO,EAAE,CAAC;YAC7B,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,gBAAgB,EAAE,CAAC;gBACtC,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,IAAI,EAAE;oBAC5B,OAAO,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC;YAC3C,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,kBAAkB,OAAO,CAAC,IAAI,EAAE,KAAK,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACvE,CAAC;IACL,CAAC,CAAC;SACD,EAAE,CAAC,eAAe,EAAE,OAAO,CAAC,EAAE,CAC3B,OAAO,CAAC,GAAG,CAAC,qBAAqB,OAAO,CAAC,OAAO,EAAE,CAAC,SAAS,KAAK,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;SACrF,EAAE,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,EAAE;QACrB,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IAC/D,CAAC,CAAC;SACD,EAAE,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,EAAE;QACzB,IAAI,QAAQ,CAAC,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,uBAAuB,QAAQ,CAAC,MAAM,EAAE,KAAK,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC/E,CAAC;IACL,CAAC,CAAC,CAAA;IACN,OAAO;AACX,CAAC;AAEM,KAAK,UAAU,aAAa;IAC/B,uBAAuB;IACvB,IAAI,MAAM,EAAE,CAAC;QACT,MAAM,CAAC,GAAG,EAAE,CAAC;IACjB,CAAC;IACD,OAAO;AACX,CAAC;AAEY,QAAA,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,13 +1,19 @@
1
1
  {
2
2
  "name": "@spscommerce/e2e-core",
3
- "version": "2.6.1",
3
+ "version": "2.9.0",
4
4
  "description": "An automation test framework which is based on Playwright.",
5
5
  "main": "./lib/index.js",
6
6
  "types": "./lib/index.d.ts",
7
+ "engines": {
8
+ "node": ">=24"
9
+ },
7
10
  "scripts": {
11
+ "clean": "find . -name 'node_modules' -type d -prune -exec rm -rf '{}' + && wait && rm -rf ./build",
12
+ "reset": "pnpm clean && pnpm store prune",
8
13
  "lint": "eslint .",
9
14
  "build": "tsc --incremental -p tsconfig.json",
10
- "test": "CONFIG_PATH=$(pwd)/.env HEADLESS=false playwright test"
15
+ "test": "CONFIG_PATH=$(pwd)/.env HEADLESS=false playwright test",
16
+ "prepare": "husky || true"
11
17
  },
12
18
  "repository": {
13
19
  "type": "git",
@@ -25,16 +31,27 @@
25
31
  "author": "SPS Commerce",
26
32
  "license": "UNLICENSED",
27
33
  "dependencies": {
28
- "@playwright/test": "1.57.0",
29
- "@types/node": "24.10.2",
34
+ "@playwright/test": "1.58.2",
35
+ "@types/node": "25.0.6",
30
36
  "@typescript-eslint/eslint-plugin": "8.49.0",
31
37
  "@typescript-eslint/parser": "8.49.0",
32
- "dotenv": "16.6.1",
33
- "eslint": "9.39.1",
38
+ "dotenv": "17.3.1",
39
+ "eslint": "9.39.4",
34
40
  "jest-expect-message": "1.1.3",
35
41
  "jest-extended": "1.2.1",
36
42
  "playwright-testrail-reporter": "1.3.3",
37
- "typescript": "4.9.5"
43
+ "typescript": "5.9.3"
44
+ },
45
+ "packageManager": "pnpm@10.32.1+sha512.a706938f0e89ac1456b6563eab4edf1d1faf3368d1191fc5c59790e96dc918e4456ab2e67d613de1043d2e8c81f87303e6b40d4ffeca9df15ef1ad567348f2be",
46
+ "devDependencies": {
47
+ "@commitlint/cli": "20.5.0",
48
+ "@commitlint/config-conventional": "20.5.0",
49
+ "husky": "9.1.7",
50
+ "lint-staged": "16.4.0"
38
51
  },
39
- "packageManager": "yarn@4.4.0+sha512.91d93b445d9284e7ed52931369bc89a663414e5582d00eea45c67ddc459a2582919eece27c412d6ffd1bd0793ff35399381cb229326b961798ce4f4cc60ddfdb"
52
+ "lint-staged": {
53
+ "*.ts": [
54
+ "eslint --max-warnings=0 --no-warn-ignored --fix"
55
+ ]
56
+ }
40
57
  }
@@ -0,0 +1 @@
1
+ nodeLinker: hoisted
@@ -28,11 +28,24 @@ export default async function globalSetup(): Promise<void> {
28
28
  traceFile = path.join(process.cwd(), 'results-e2e/auth/globalSetupProd.zip');
29
29
  }
30
30
  // Launch browser and log in if storageState.json does not exist OR auth expires soon
31
- const currentTS = new Date().getTime();
32
- if (!fs.existsSync(storageFile) ||
33
- (fs.existsSync(storageFile) &&
34
- ((JSON.parse(fs.readFileSync(storageFile, 'utf8')).origins[0].localStorage.find(o => o.name === 'expires_at').value - currentTS) / 60000) < 30)
35
- ) {
31
+ let requireAuth = false;
32
+ if (!fs.existsSync(storageFile)) {
33
+ requireAuth = true;
34
+ } else {
35
+ const storage = JSON.parse(fs.readFileSync(storageFile, 'utf8'));
36
+ const openIdProfile = storage.origins[0].localStorage.find(item =>
37
+ item.name.includes('openid profile email offline_access'),
38
+ );
39
+ const openIdData = JSON.parse(openIdProfile.value);
40
+ const expiresAt = (parseFloat(openIdData.expiresAt) || 0) * 1000; // identity refresh token lives 1 hour
41
+ const currentTS = new Date().getTime();
42
+ if (((expiresAt - currentTS) / 60000) < 10) {
43
+ // less than 10 minutes
44
+ requireAuth = true;
45
+ }
46
+ }
47
+
48
+ if (requireAuth) {
36
49
  const browser = await chromium.launch({ headless: false }); // { headless: false }
37
50
  const context = await browser.newContext({ ignoreHTTPSErrors: true });
38
51
  await context.grantPermissions(['local-network-access']);
package/.yarnrc.yml DELETED
@@ -1 +0,0 @@
1
- nodeLinker: node-modules