@alwaysmeticulous/downloading-helpers 2.136.1 → 2.139.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.
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const fs_1 = require("fs");
7
+ const promises_1 = require("fs/promises");
8
+ const http_1 = __importDefault(require("http"));
9
+ const download_file_1 = require("../download-file");
10
+ describe("downloadFile", () => {
11
+ it("downloads a file from a URL", async () => {
12
+ const server = http_1.default.createServer((req, res) => {
13
+ res.end("Hello World");
14
+ });
15
+ try {
16
+ server.listen(1234);
17
+ await (0, download_file_1.downloadFile)("http://localhost:1234", "file.txt", {
18
+ firstDataTimeoutInMs: 1000,
19
+ downloadCompleteTimeoutInMs: 1000,
20
+ });
21
+ // Read file contents
22
+ const fileContents = await (0, promises_1.readFile)("file.txt", "utf8");
23
+ expect(fileContents).toBe("Hello World");
24
+ }
25
+ finally {
26
+ server.close();
27
+ if ((0, fs_1.existsSync)("file.txt")) {
28
+ await (0, promises_1.rm)("file.txt");
29
+ }
30
+ }
31
+ });
32
+ it("times out on a too slow file download", async () => {
33
+ const server = http_1.default.createServer((req, res) => {
34
+ res.write("Helloooooo");
35
+ setTimeout(() => {
36
+ res.end("... ... World.");
37
+ }, 1000);
38
+ });
39
+ try {
40
+ server.listen(1234);
41
+ await (0, download_file_1.downloadFile)("http://localhost:1234", "file.txt", {
42
+ firstDataTimeoutInMs: 1000,
43
+ downloadCompleteTimeoutInMs: 1,
44
+ maxDownloadContentRetries: 0,
45
+ downloadContentRetryDelay: 0,
46
+ });
47
+ throw new Error("Expected download to time out");
48
+ }
49
+ catch (e) {
50
+ expect(e.message).toEqual("Download timed out after 1ms");
51
+ }
52
+ finally {
53
+ server.close();
54
+ if ((0, fs_1.existsSync)("file.txt")) {
55
+ await (0, promises_1.rm)("file.txt");
56
+ // eslint-disable-next-line no-unsafe-finally
57
+ throw new Error("Unexpected file download");
58
+ }
59
+ }
60
+ });
61
+ it("retries downloading content on file", async () => {
62
+ let attempt = 0;
63
+ const server = http_1.default.createServer((req, res) => {
64
+ res.write("Hello");
65
+ if (attempt === 1) {
66
+ res.end(" World");
67
+ }
68
+ attempt++;
69
+ setTimeout(() => {
70
+ res.end("... ... World.");
71
+ }, 1000);
72
+ });
73
+ try {
74
+ server.listen(1234);
75
+ await (0, download_file_1.downloadFile)("http://localhost:1234", "file.txt", {
76
+ firstDataTimeoutInMs: 1000,
77
+ downloadCompleteTimeoutInMs: 20,
78
+ maxDownloadContentRetries: 1,
79
+ downloadContentRetryDelay: 0,
80
+ });
81
+ // Read file contents
82
+ const fileContents = await (0, promises_1.readFile)("file.txt", "utf8");
83
+ expect(fileContents).toBe("Hello World");
84
+ }
85
+ finally {
86
+ server.close();
87
+ if ((0, fs_1.existsSync)("file.txt")) {
88
+ await (0, promises_1.rm)("file.txt");
89
+ }
90
+ }
91
+ });
92
+ });
93
+ //# sourceMappingURL=download-file.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"download-file.spec.js","sourceRoot":"","sources":["../../../src/file-downloads/__tests__/download-file.spec.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,20 @@
1
- export declare const downloadFile: (fileUrl: string, path: string) => Promise<void>;
1
+ /**
2
+ * Warning: this function is not thread safe. Do not try downloading a file to a path that may already be in use by another process.
3
+ *
4
+ * (for example most downloads are generally done at the test run level rather than the replay level)
5
+ */
6
+ export declare const downloadFile: (fileUrl: string, path: string, opts?: {
7
+ firstDataTimeoutInMs?: number;
8
+ downloadCompleteTimeoutInMs?: number;
9
+ maxDownloadContentRetries?: number;
10
+ downloadContentRetryDelay?: number;
11
+ }) => Promise<void>;
2
12
  /**
3
13
  * Download a file from a URL and extract it to a directory.
4
14
  * The zip file will be deleted after extraction, keeping only the extracted files.
5
15
  *
6
16
  * Returns a list of the extracted files.
17
+ *
18
+ * Warning: this function is not thread safe. Do not try downloading a file to an extractPath that may already be in use by another process.
7
19
  */
8
20
  export declare const downloadAndExtractFile: (fileUrl: string, tmpZipFilePath: string, extractPath: string) => Promise<string[]>;
@@ -12,17 +12,61 @@ const axios_1 = __importDefault(require("axios"));
12
12
  const axios_retry_1 = __importDefault(require("axios-retry"));
13
13
  const extract_zip_1 = __importDefault(require("extract-zip"));
14
14
  const promisifiedFinished = (0, util_1.promisify)(stream_1.finished);
15
- const downloadFile = async (fileUrl, path) => {
15
+ /**
16
+ * Warning: this function is not thread safe. Do not try downloading a file to a path that may already be in use by another process.
17
+ *
18
+ * (for example most downloads are generally done at the test run level rather than the replay level)
19
+ */
20
+ const downloadFile = async (fileUrl, path, opts = {}) => {
21
+ var _a, _b, _c, _d;
16
22
  // Using the same timeout as the standard client in meticulous-sdk/packages/client/src/client.ts
17
- const client = axios_1.default.create({ timeout: 60000 });
23
+ const firstDataTimeoutInMs = (_a = opts.firstDataTimeoutInMs) !== null && _a !== void 0 ? _a : 60000;
24
+ const downloadCompleteTimeoutInMs = (_b = opts.downloadCompleteTimeoutInMs) !== null && _b !== void 0 ? _b : 120000;
25
+ const maxDownloadContentRetries = (_c = opts.maxDownloadContentRetries) !== null && _c !== void 0 ? _c : 3;
26
+ const downloadContentRetryDelay = (_d = opts.downloadContentRetryDelay) !== null && _d !== void 0 ? _d : 1000;
27
+ const client = axios_1.default.create({ timeout: firstDataTimeoutInMs });
18
28
  (0, axios_retry_1.default)(client, { retries: 3, shouldResetTimeout: true });
19
- const writer = (0, fs_1.createWriteStream)(path);
20
- return client
21
- .request({ method: "GET", url: fileUrl, responseType: "stream" })
22
- .then(async (response) => {
23
- response.data.pipe(writer);
24
- return promisifiedFinished(writer);
29
+ const source = axios_1.default.CancelToken.source();
30
+ const response = await client.request({
31
+ method: "GET",
32
+ url: fileUrl,
33
+ responseType: "stream",
34
+ cancelToken: source.token,
25
35
  });
36
+ const writer = (0, fs_1.createWriteStream)(path);
37
+ response.data.pipe(writer);
38
+ const timeoutId = setTimeout(async () => {
39
+ const error = `Download timed out after ${downloadCompleteTimeoutInMs}ms`;
40
+ source.cancel(error);
41
+ writer.destroy(new Error(error));
42
+ }, downloadCompleteTimeoutInMs);
43
+ try {
44
+ await promisifiedFinished(writer);
45
+ if (timeoutId) {
46
+ clearTimeout(timeoutId);
47
+ }
48
+ }
49
+ catch (err) {
50
+ if (timeoutId) {
51
+ clearTimeout(timeoutId);
52
+ }
53
+ await new Promise((resolve) => writer.close(resolve));
54
+ if ((0, fs_1.existsSync)(path)) {
55
+ // If we errored at this stage and not earlier then we've likely already written to and corrupted the file,
56
+ // so let's delete it.
57
+ await (0, promises_1.rm)(path);
58
+ }
59
+ if (maxDownloadContentRetries === 0) {
60
+ throw err;
61
+ }
62
+ // Let's try again after a short delay
63
+ await new Promise((resolve) => setTimeout(resolve, downloadContentRetryDelay));
64
+ await (0, exports.downloadFile)(fileUrl, path, {
65
+ firstDataTimeoutInMs,
66
+ downloadCompleteTimeoutInMs,
67
+ maxDownloadContentRetries: maxDownloadContentRetries - 1,
68
+ });
69
+ }
26
70
  };
27
71
  exports.downloadFile = downloadFile;
28
72
  /**
@@ -30,6 +74,8 @@ exports.downloadFile = downloadFile;
30
74
  * The zip file will be deleted after extraction, keeping only the extracted files.
31
75
  *
32
76
  * Returns a list of the extracted files.
77
+ *
78
+ * Warning: this function is not thread safe. Do not try downloading a file to an extractPath that may already be in use by another process.
33
79
  */
34
80
  const downloadAndExtractFile = async (fileUrl, filePath, extractPath) => {
35
81
  await (0, exports.downloadFile)(fileUrl, filePath);
@@ -1 +1 @@
1
- {"version":3,"file":"download-file.js","sourceRoot":"","sources":["../../src/file-downloads/download-file.ts"],"names":[],"mappings":";;;;;;AAAA,2BAAuC;AACvC,0CAAiC;AACjC,mCAAkC;AAClC,+BAAiC;AACjC,kDAA0B;AAC1B,8DAAqC;AACrC,8DAAkC;AAElC,MAAM,mBAAmB,GAAG,IAAA,gBAAS,EAAC,iBAAQ,CAAC,CAAC;AAEzC,MAAM,YAAY,GAGJ,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;IAC3C,gGAAgG;IAChG,MAAM,MAAM,GAAG,eAAK,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,KAAM,EAAE,CAAC,CAAC;IACjD,IAAA,qBAAU,EAAC,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC,CAAC;IAE7D,MAAM,MAAM,GAAG,IAAA,sBAAiB,EAAC,IAAI,CAAC,CAAC;IAEvC,OAAO,MAAM;SACV,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC;SAChE,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;QACvB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3B,OAAO,mBAAmB,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAhBW,QAAA,YAAY,gBAgBvB;AAEF;;;;;GAKG;AACI,MAAM,sBAAsB,GAIV,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE;IAChE,MAAM,IAAA,oBAAY,EAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACtC,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,IAAI;QACF,MAAM,IAAA,qBAAO,EAAC,QAAQ,EAAE;YACtB,GAAG,EAAE,WAAW;YAChB,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;SACjD,CAAC,CAAC;KACJ;YAAS;QACR,MAAM,IAAA,aAAE,EAAC,QAAQ,CAAC,CAAC;KACpB;IAED,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAlBW,QAAA,sBAAsB,0BAkBjC"}
1
+ {"version":3,"file":"download-file.js","sourceRoot":"","sources":["../../src/file-downloads/download-file.ts"],"names":[],"mappings":"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"}
@@ -2,5 +2,9 @@
2
2
  * Downloads the given 'module' JS file as an MJS file (to force correct interpretation when loading the JS file).
3
3
  *
4
4
  * The associated source map will also be downloaded if present to sit alongside the main JS file and if the base snippets URL is a localhost URL.
5
+ *
6
+ * Warning: this function is not thread safe. Do not try downloading a file to a path that may already be in use by another process.
7
+ *
8
+ * (for example most downloads are generally done at the test run level rather than the replay level)
5
9
  */
6
10
  export declare const fetchAsset: (path: string) => Promise<string>;
@@ -19,6 +19,10 @@ const ASSET_METADATA_FILE_NAME = "assets.json";
19
19
  * Downloads the given 'module' JS file as an MJS file (to force correct interpretation when loading the JS file).
20
20
  *
21
21
  * The associated source map will also be downloaded if present to sit alongside the main JS file and if the base snippets URL is a localhost URL.
22
+ *
23
+ * Warning: this function is not thread safe. Do not try downloading a file to a path that may already be in use by another process.
24
+ *
25
+ * (for example most downloads are generally done at the test run level rather than the replay level)
22
26
  */
23
27
  const fetchAsset = async (path) => {
24
28
  const snippetsBaseUrl = (0, snippets_1.getSnippetsBaseUrl)();
@@ -1 +1 @@
1
- {"version":3,"file":"replay-assets.js","sourceRoot":"","sources":["../../src/scripts/replay-assets.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"replay-assets.js","sourceRoot":"","sources":["../../src/scripts/replay-assets.ts"],"names":[],"mappings":";;;;;;AAAA,0CAAyD;AACzD,+BAAsC;AACtC,qDAGkC;AAClC,kDAA0B;AAC1B,8DAAqC;AACrC,wDAA2B;AAC3B,iDAAwD;AACxD,mEAA+D;AAC/D,yEAA6E;AAY7E,MAAM,kBAAkB,GAAG,QAAQ,CAAC;AACpC,MAAM,wBAAwB,GAAG,aAAa,CAAC;AAE/C;;;;;;;;GAQG;AACI,MAAM,UAAU,GAAG,KAAK,EAAE,IAAY,EAAmB,EAAE;IAChE,MAAM,eAAe,GAAG,IAAA,6BAAkB,GAAE,CAAC;IAC7C,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC,IAAI,CAAC;IACrD,MAAM,aAAa,GAAG,IAAA,eAAQ,EAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC3D,MAAM,sBAAsB,GAAG,uBAAuB,CAAC,aAAa,CAAC,CAAC;IAEtE,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,QAAQ,EAAE,sBAAsB,CAAC,CAAC;IAC7E,IACE,eAAe,CAAC,QAAQ,CAAC,WAAW,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,EAAE,KAAK,MAAM;QACzB,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,EAC1B;QACA,MAAM,iBAAiB,CAAC,GAAG,QAAQ,MAAM,EAAE,GAAG,aAAa,MAAM,CAAC,CAAC;KACpE;IAED,OAAO,UAAU,CAAC;AACpB,CAAC,CAAC;AAhBW,QAAA,UAAU,cAgBrB;AAEF,MAAM,iBAAiB,GAAG,KAAK,EAC7B,iBAAyB,EACzB,oBAA4B,EACX,EAAE;IACnB,MAAM,MAAM,GAAG,kBAAG,CAAC,SAAS,CAAC,+BAAsB,CAAC,CAAC;IACrD,MAAM,MAAM,GAAG,eAAK,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,KAAM,EAAE,CAAC,CAAC;IACjD,IAAA,qBAAU,EAAC,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;IAEnC,MAAM,WAAW,GAAG,MAAM,IAAA,0CAAuB,EAAC,MAAM,iBAAiB,EAAE,CAAC,CAAC;IAC7E,IAAI;QACF,MAAM,aAAa,GAAG,MAAM,iBAAiB,EAAE,CAAC;QAEhD,MAAM,IAAI,GAAG,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAE1E,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CACrC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,KAAK,oBAAoB,CACjD,CAAC;QACF,MAAM,QAAQ,GAAG,IAAA,WAAI,EAAC,MAAM,oBAAoB,EAAE,EAAE,oBAAoB,CAAC,CAAC;QAE1E,IAAI,KAAK,IAAI,IAAI,KAAK,EAAE,IAAI,IAAI,KAAK,KAAK,CAAC,IAAI,EAAE;YAC/C,MAAM,CAAC,KAAK,CAAC,GAAG,iBAAiB,kBAAkB,CAAC,CAAC;YACrD,MAAM,WAAW,EAAE,CAAC;YACpB,OAAO,QAAQ,CAAC;SACjB;QAED,MAAM,IAAA,4BAAY,EAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;QAChD,IAAI,KAAK,EAAE;YACT,MAAM,CAAC,KAAK,CAAC,GAAG,iBAAiB,UAAU,CAAC,CAAC;YAC7C,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;SACnB;aAAM;YACL,MAAM,CAAC,KAAK,CAAC,GAAG,iBAAiB,aAAa,CAAC,CAAC;YAChD,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC;gBACxB,QAAQ,EAAE,oBAAoB;gBAC9B,IAAI;gBACJ,QAAQ,EAAE,iBAAiB;aAC5B,CAAC,CAAC;SACJ;QACD,MAAM,iBAAiB,CAAC,aAAa,CAAC,CAAC;QACvC,MAAM,WAAW,EAAE,CAAC;QACpB,OAAO,QAAQ,CAAC;KACjB;IAAC,OAAO,GAAG,EAAE;QACZ,MAAM,WAAW,EAAE,CAAC;QACpB,MAAM,CAAC,KAAK,CAAC,6BAA6B,iBAAiB,EAAE,CAAC,CAAC;QAC/D,MAAM,GAAG,CAAC;KACX;AACH,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAA0B,KAAK,IAAI,EAAE;IAC7D,MAAM,SAAS,GAAG,IAAA,WAAI,EAAC,IAAA,kCAAyB,GAAE,EAAE,kBAAkB,CAAC,CAAC;IACxE,MAAM,IAAA,gBAAK,EAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAiC,KAAK,IAAI,EAAE;IACjE,MAAM,UAAU,GAAG,MAAM,iBAAiB,EAAE,CAAC;IAE7C,MAAM,gBAAgB,GAAG,MAAM,IAAA,mBAAQ,EAAC,UAAU,CAAC;SAChD,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;SAClD,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IACrB,IAAI,gBAAgB,EAAE;QACpB,OAAO,gBAAgB,CAAC;KACzB;IAED,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;AACxB,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAEF,KAAK,EAAE,aAAa,EAAE,EAAE;IAC3C,MAAM,UAAU,GAAG,IAAA,WAAI,EACrB,MAAM,oBAAoB,EAAE,EAC5B,wBAAwB,CACzB,CAAC;IAEF,MAAM,IAAA,oBAAS,EAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AACtE,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,KAAK,IAAqB,EAAE;IACpD,MAAM,SAAS,GAAG,MAAM,oBAAoB,EAAE,CAAC;IAC/C,OAAO,IAAA,WAAI,EAAC,SAAS,EAAE,wBAAwB,CAAC,CAAC;AACnD,CAAC,CAAC;AAEF,MAAM,uBAAuB,GAAG,CAAC,IAAY,EAAE,EAAE;IAC/C,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;QACxB,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;KACnC;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alwaysmeticulous/downloading-helpers",
3
- "version": "2.136.1",
3
+ "version": "2.139.0",
4
4
  "description": "Helper utilities for downloading files & scripts required to execute replays",
5
5
  "license": "ISC",
6
6
  "main": "dist/index.js",
@@ -16,12 +16,13 @@
16
16
  "lint": "eslint src --ext=ts,tsx,js --cache",
17
17
  "lint:commit": "eslint --cache $(git diff --relative --name-only --diff-filter=ACMRTUXB master | grep -E \"(.js$|.ts$|.tsx$)\")",
18
18
  "lint:fix": "eslint src --ext=ts,tsx,js --cache --fix",
19
- "depcheck": "depcheck --ignore-patterns=dist"
19
+ "depcheck": "depcheck --ignore-patterns=dist",
20
+ "test": "jest"
20
21
  },
21
22
  "dependencies": {
22
- "@alwaysmeticulous/api": "^2.133.0",
23
- "@alwaysmeticulous/client": "^2.136.1",
24
- "@alwaysmeticulous/common": "^2.134.0",
23
+ "@alwaysmeticulous/api": "^2.139.0",
24
+ "@alwaysmeticulous/client": "^2.139.0",
25
+ "@alwaysmeticulous/common": "^2.139.0",
25
26
  "axios": "^1.2.6",
26
27
  "axios-retry": "^4.1.0",
27
28
  "extract-zip": "^2.0.1",
@@ -51,5 +52,8 @@
51
52
  "bugs": {
52
53
  "url": "https://github.com/alwaysmeticulous/meticulous-sdk/issues"
53
54
  },
54
- "gitHead": "e122b0ba5a024395e3c8e2e37b56b67a558901e4"
55
+ "jest": {
56
+ "preset": "../../jest.config.js"
57
+ },
58
+ "gitHead": "229466d734551b1a13c242e83a7e0d5782461eb8"
55
59
  }