@moontaiworks/fanbox-dl 1.3.3 → 1.3.5
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/dist/cjs/downloader/asset/download.d.ts.map +1 -1
- package/dist/cjs/downloader/asset/download.js +3 -2
- package/dist/cjs/downloader/asset/download.js.map +1 -1
- package/dist/cjs/downloader/creator/sync.js +1 -1
- package/dist/cjs/downloader/creator/sync.js.map +1 -1
- package/dist/cjs/downloader/fs/path-manager.d.ts.map +1 -1
- package/dist/cjs/downloader/fs/path-manager.js +5 -2
- package/dist/cjs/downloader/fs/path-manager.js.map +1 -1
- package/dist/cjs/transport/worker.d.ts.map +1 -1
- package/dist/cjs/transport/worker.js +96 -61
- package/dist/cjs/transport/worker.js.map +1 -1
- package/dist/esm/downloader/asset/download.d.ts.map +1 -1
- package/dist/esm/downloader/asset/download.js +3 -2
- package/dist/esm/downloader/asset/download.js.map +1 -1
- package/dist/esm/downloader/creator/sync.js +1 -1
- package/dist/esm/downloader/creator/sync.js.map +1 -1
- package/dist/esm/downloader/fs/path-manager.d.ts.map +1 -1
- package/dist/esm/downloader/fs/path-manager.js +5 -2
- package/dist/esm/downloader/fs/path-manager.js.map +1 -1
- package/dist/esm/transport/worker.d.ts.map +1 -1
- package/dist/esm/transport/worker.js +96 -61
- package/dist/esm/transport/worker.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"download.d.ts","sourceRoot":"","sources":["../../../../src/downloader/asset/download.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAEnC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAE9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,UAAU,iBAAiB;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,aAAa,CAAC;CAC1B;AAED,UAAU,oBAAoB;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,YAAY,CAAC;CAC5B;AAkBD,wBAAsB,aAAa,CACjC,EAAE,OAAY,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,iBAAiB,EACtD,EAAE,WAAW,EAAE,gBAAgB,EAAE,YAAY,EAAE,EAAE,oBAAoB;;;
|
|
1
|
+
{"version":3,"file":"download.d.ts","sourceRoot":"","sources":["../../../../src/downloader/asset/download.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAEnC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAE9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,UAAU,iBAAiB;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,aAAa,CAAC;CAC1B;AAED,UAAU,oBAAoB;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,YAAY,CAAC;CAC5B;AAkBD,wBAAsB,aAAa,CACjC,EAAE,OAAY,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,iBAAiB,EACtD,EAAE,WAAW,EAAE,gBAAgB,EAAE,YAAY,EAAE,EAAE,oBAAoB;;;GAoDtE"}
|
|
@@ -32,12 +32,13 @@ async function downloadAsset({ headers = {}, logger, transport }, { destination,
|
|
|
32
32
|
logger.debug(`Downloading ${mediaContent.type} asset ${mediaContent.id} to ${destination}`);
|
|
33
33
|
await (0, promises_1.mkdir)(node_path_1.default.dirname(destination), { recursive: true });
|
|
34
34
|
const tempFilePath = destination + ".part";
|
|
35
|
+
const currentHeaders = { ...headers };
|
|
35
36
|
const { size: downloadedBytes } = await (0, filesystem_js_1.filesize)(tempFilePath);
|
|
36
37
|
if (downloadedBytes > 0) {
|
|
37
38
|
logger.debug(`Resuming download of ${mediaContent.type} asset ${mediaContent.id} to ${tempFilePath} from byte ${downloadedBytes}`);
|
|
38
|
-
|
|
39
|
+
currentHeaders.Range = `bytes=${downloadedBytes}-`;
|
|
39
40
|
}
|
|
40
|
-
const response = await transport.fetch(new Request(mediaContent.url, { headers }));
|
|
41
|
+
const response = await transport.fetch(new Request(mediaContent.url, { headers: currentHeaders }));
|
|
41
42
|
if (!response.ok) {
|
|
42
43
|
throw new AssetDownloadError(response, mediaContent.url, await response.text());
|
|
43
44
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"download.js","sourceRoot":"","sources":["../../../../src/downloader/asset/download.ts"],"names":[],"mappings":";;;;;AAwCA,
|
|
1
|
+
{"version":3,"file":"download.js","sourceRoot":"","sources":["../../../../src/downloader/asset/download.ts"],"names":[],"mappings":"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"}
|
|
@@ -27,7 +27,7 @@ async function syncCreator({ client, headers, logger, manifest, pathManager, tra
|
|
|
27
27
|
status: "failed",
|
|
28
28
|
updatedDatetime: postSummary.updatedDatetime,
|
|
29
29
|
};
|
|
30
|
-
logger.error({ err }, `Error occurred while
|
|
30
|
+
logger.error({ err }, `Error occurred while fetch post manifest of ${index}/${postSummaries.length} post ${postSummary.id}, skipping.`);
|
|
31
31
|
await manifest.save();
|
|
32
32
|
});
|
|
33
33
|
if (!post)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../../../src/downloader/creator/sync.ts"],"names":[],"mappings":";;AAkBA,kCAgFC;AA5FD,6CAA6D;AAC7D,2DAA2D;AAWpD,KAAK,UAAU,WAAW,CAAC,EAChC,MAAM,EACN,OAAO,EACP,MAAM,EACN,QAAQ,EACR,WAAW,EACX,SAAS,GACO;IAChB,MAAM,aAAa,GAAG,MAAM,IAAA,wCAAoB,EAC9C,EAAE,MAAM,EAAE,MAAM,EAAE,EAClB,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,CAClC,CAAC;IACF,MAAM,CAAC,IAAI,CACT,oBAAoB,aAAa,CAAC,MAAM,sBAAsB,QAAQ,CAAC,SAAS,EAAE,CACnF,CAAC;IAEF,MAAM,eAAe,GAAoB,EAAE,CAAC;IAE5C,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,WAAW,IAAI,aAAa,EAAE,CAAC;QACxC,MAAM,CAAC,KAAK,CACV,gBAAgB,EAAE,KAAK,IAAI,aAAa,CAAC,MAAM,SAAS,WAAW,CAAC,EAAE,gBAAgB,QAAQ,CAAC,SAAS,EAAE,CAC3G,CAAC;QACF,MAAM,cAAc,GAAG,IAAA,0BAAgB,EAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,WAAW,CAAC,CAAC;QAC3E,IAAI,cAAc,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACxC,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC;YAChD,SAAS;QACX,CAAC;QAKD,MAAM,eAAe,GAAG,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACtD,MAAM,IAAI,GAAG,MAAM,MAAM;aACtB,OAAO,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,EAAE,CAAC;aACnC,KAAK,CAAC,KAAK,EAAE,GAAY,EAAE,EAAE;YAC5B,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG;gBAC/B,MAAM,EAAE,EAAE;gBACV,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC;gBAClB,EAAE,EAAE,WAAW,CAAC,EAAE;gBAClB,UAAU,EAAE,WAAW,CAAC,YAAY;gBACpC,MAAM,EAAE,QAAQ;gBAChB,eAAe,EAAE,WAAW,CAAC,eAAe;aAClB,CAAC;YAC7B,MAAM,CAAC,KAAK,CACV,EAAE,GAAG,EAAE,EACP,
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../../../src/downloader/creator/sync.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"path-manager.d.ts","sourceRoot":"","sources":["../../../../src/downloader/fs/path-manager.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAElD,UAAU,kBAAkB;IAC1B,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;
|
|
1
|
+
{"version":3,"file":"path-manager.d.ts","sourceRoot":"","sources":["../../../../src/downloader/fs/path-manager.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAElD,UAAU,kBAAkB;IAC1B,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAKD,qBAAa,WAAW;;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;gBAGD,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,kBAAkB;IAMvD,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;IAYpD,GAAG,CAAC,IAAI,EAAE,MAAM;IAOhB,IAAI,CAAC,IAAI,EAAE,MAAM;IAIjB,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,mBAAmB,GAAG,OAAO,CAAC;CAO5D"}
|
|
@@ -14,6 +14,7 @@ var _PathManager_flatPosts;
|
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
exports.PathManager = void 0;
|
|
16
16
|
const node_path_1 = require("node:path");
|
|
17
|
+
const INVALID_FILENAME_CHARS = /[<>:"/\\|?*\x00-\x1F]/g;
|
|
17
18
|
class PathManager {
|
|
18
19
|
constructor({ flatPosts, rootPath }) {
|
|
19
20
|
_PathManager_flatPosts.set(this, void 0);
|
|
@@ -22,7 +23,8 @@ class PathManager {
|
|
|
22
23
|
this.name = (0, node_path_1.basename)(this.path);
|
|
23
24
|
}
|
|
24
25
|
asset(index, name, extension) {
|
|
25
|
-
const
|
|
26
|
+
const sanitizedName = name.replace(INVALID_FILENAME_CHARS, "-");
|
|
27
|
+
const fileName = `${index}-${sanitizedName}.${extension}`;
|
|
26
28
|
if (__classPrivateFieldGet(this, _PathManager_flatPosts, "f")) {
|
|
27
29
|
const parent = (0, node_path_1.dirname)(this.path);
|
|
28
30
|
return (0, node_path_1.join)(parent, `${this.name}.${fileName}`);
|
|
@@ -40,7 +42,8 @@ class PathManager {
|
|
|
40
42
|
}
|
|
41
43
|
post(post) {
|
|
42
44
|
const date = post.publishedDatetime.split("T")[0];
|
|
43
|
-
const
|
|
45
|
+
const sanitizedTitle = post.title.replace(INVALID_FILENAME_CHARS, "-");
|
|
46
|
+
const title = `${date}-${post.id}-${sanitizedTitle}`;
|
|
44
47
|
return this.dir(title);
|
|
45
48
|
}
|
|
46
49
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"path-manager.js","sourceRoot":"","sources":["../../../../src/downloader/fs/path-manager.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,yCAA6D;
|
|
1
|
+
{"version":3,"file":"path-manager.js","sourceRoot":"","sources":["../../../../src/downloader/fs/path-manager.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,yCAA6D;AAU7D,MAAM,sBAAsB,GAAG,wBAAwB,CAAC;AAExD,MAAa,WAAW;IAKtB,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAsB;QAFvD,yCAAoB;QAGlB,IAAI,CAAC,IAAI,GAAG,IAAA,mBAAO,EAAC,QAAQ,CAAC,CAAC;QAC9B,uBAAA,IAAI,0BAAc,SAAS,MAAA,CAAC;QAC5B,IAAI,CAAC,IAAI,GAAG,IAAA,oBAAQ,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,KAAa,EAAE,IAAY,EAAE,SAAiB;QAClD,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAAE,GAAG,CAAC,CAAC;QAChE,MAAM,QAAQ,GAAG,GAAG,KAAK,IAAI,aAAa,IAAI,SAAS,EAAE,CAAC;QAE1D,IAAI,uBAAA,IAAI,8BAAW,EAAE,CAAC;YACpB,MAAM,MAAM,GAAG,IAAA,mBAAO,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClC,OAAO,IAAA,gBAAI,EAAC,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,IAAI,QAAQ,EAAE,CAAC,CAAC;QAClD,CAAC;QAED,OAAO,IAAA,gBAAI,EAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACnC,CAAC;IAED,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,WAAW,CAAC;YACrB,SAAS,EAAE,uBAAA,IAAI,8BAAW;YAC1B,QAAQ,EAAE,IAAA,gBAAI,EAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC;SAChC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,IAAY;QACf,OAAO,IAAA,gBAAI,EAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED,IAAI,CAAC,IAAsD;QACzD,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAClD,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,sBAAsB,EAAE,GAAG,CAAC,CAAC;QACvE,MAAM,KAAK,GAAG,GAAG,IAAI,IAAI,IAAI,CAAC,EAAE,IAAI,cAAc,EAAE,CAAC;QAErD,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;CACF;AAzCD,kCAyCC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../../src/transport/worker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAEnC,OAAO,EAAkB,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhE,MAAM,WAAW,mBAAmB;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,aAAa,CAAC;CAC3B;
|
|
1
|
+
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../../src/transport/worker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAEnC,OAAO,EAAkB,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhE,MAAM,WAAW,mBAAmB;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,aAAa,CAAC;CAC3B;AAqFD,qBAAa,aAAa;;gBAWtB,EAAE,MAAM,EAAE,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,EAC9B,EACE,WAAiB,EACjB,UAAiB,EACjB,UAAc,EACd,gBAAgB,EAChB,SAAgC,GACjC,GAAE,mBAAwB;IAoBvB,KAAK,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,GAAG;CA8F5C"}
|
|
@@ -1,86 +1,86 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
3
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
4
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
5
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
6
|
+
};
|
|
2
7
|
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
3
8
|
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
4
9
|
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
5
10
|
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
6
11
|
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
7
12
|
};
|
|
8
|
-
var
|
|
9
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
10
|
-
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
11
|
-
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
12
|
-
};
|
|
13
|
-
var _ConcurrencyLimiter_active, _ConcurrencyLimiter_logger, _ConcurrencyLimiter_queue, _TimeLimiter_availableAt, _TimeLimiter_logger, _RequestWorker_instances, _RequestWorker_concurrencyLimiter, _RequestWorker_logger, _RequestWorker_maxRetries, _RequestWorker_rateLimitPauseMs, _RequestWorker_timeLimiter, _RequestWorker_transport, _RequestWorker_fetch;
|
|
13
|
+
var _ConcurrentLimiter_activeRequests, _ConcurrentLimiter_logger, _TimeRateLimiter_logger, _TimeRateLimiter_nextAvailableAt, _RequestWorker_instances, _RequestWorker_concurrentLimiter, _RequestWorker_logger, _RequestWorker_maxRetries, _RequestWorker_pendingRequests, _RequestWorker_rateLimitPauseMs, _RequestWorker_scheduledPump, _RequestWorker_timeRateLimiter, _RequestWorker_transport, _RequestWorker_fetch, _RequestWorker_pump, _RequestWorker_schedulePump;
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
exports.RequestWorker = void 0;
|
|
16
16
|
const http2_js_1 = require("./http2.js");
|
|
17
|
-
class
|
|
17
|
+
class ConcurrentLimiter {
|
|
18
|
+
get activeRequests() {
|
|
19
|
+
return __classPrivateFieldGet(this, _ConcurrentLimiter_activeRequests, "f");
|
|
20
|
+
}
|
|
18
21
|
constructor({ logger }, concurrency) {
|
|
19
22
|
this.concurrency = concurrency;
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
23
|
+
_ConcurrentLimiter_activeRequests.set(this, 0);
|
|
24
|
+
_ConcurrentLimiter_logger.set(this, void 0);
|
|
25
|
+
__classPrivateFieldSet(this, _ConcurrentLimiter_logger, logger, "f");
|
|
26
|
+
__classPrivateFieldGet(this, _ConcurrentLimiter_logger, "f").trace(`Initialized ConcurrentLimiter with max ${concurrency} concurrent requests`);
|
|
27
|
+
}
|
|
28
|
+
acquire() {
|
|
29
|
+
if (!this.canAcquire())
|
|
30
|
+
return false;
|
|
31
|
+
__classPrivateFieldSet(this, _ConcurrentLimiter_activeRequests, __classPrivateFieldGet(this, _ConcurrentLimiter_activeRequests, "f") + 1, "f");
|
|
32
|
+
return true;
|
|
33
|
+
}
|
|
34
|
+
canAcquire() {
|
|
35
|
+
if (__classPrivateFieldGet(this, _ConcurrentLimiter_activeRequests, "f") < this.concurrency)
|
|
36
|
+
return true;
|
|
37
|
+
__classPrivateFieldGet(this, _ConcurrentLimiter_logger, "f").trace(`Concurrency limit reached (${__classPrivateFieldGet(this, _ConcurrentLimiter_activeRequests, "f")}/${this.concurrency}), dropping new concurrent request.`);
|
|
38
|
+
return false;
|
|
33
39
|
}
|
|
34
40
|
release() {
|
|
35
|
-
|
|
36
|
-
__classPrivateFieldSet(this, _ConcurrencyLimiter_active, (_a = __classPrivateFieldGet(this, _ConcurrencyLimiter_active, "f"), --_a), "f");
|
|
37
|
-
if (__classPrivateFieldGet(this, _ConcurrencyLimiter_queue, "f").length > 0) {
|
|
38
|
-
const next = __classPrivateFieldGet(this, _ConcurrencyLimiter_queue, "f").shift();
|
|
39
|
-
if (next) {
|
|
40
|
-
__classPrivateFieldGet(this, _ConcurrencyLimiter_logger, "f").trace(`Concurrency limit released (${__classPrivateFieldGet(this, _ConcurrencyLimiter_active, "f")}/${this.concurrency}), processing next request.`);
|
|
41
|
-
next();
|
|
42
|
-
}
|
|
43
|
-
}
|
|
41
|
+
__classPrivateFieldSet(this, _ConcurrentLimiter_activeRequests, __classPrivateFieldGet(this, _ConcurrentLimiter_activeRequests, "f") - 1, "f");
|
|
44
42
|
}
|
|
45
43
|
}
|
|
46
|
-
|
|
47
|
-
class
|
|
44
|
+
_ConcurrentLimiter_activeRequests = new WeakMap(), _ConcurrentLimiter_logger = new WeakMap();
|
|
45
|
+
class TimeRateLimiter {
|
|
46
|
+
get nextAvailableAt() {
|
|
47
|
+
return __classPrivateFieldGet(this, _TimeRateLimiter_nextAvailableAt, "f");
|
|
48
|
+
}
|
|
48
49
|
constructor({ logger }, intervalMs) {
|
|
49
50
|
this.intervalMs = intervalMs;
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
__classPrivateFieldSet(this,
|
|
53
|
-
__classPrivateFieldGet(this,
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
__classPrivateFieldGet(this,
|
|
57
|
-
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
__classPrivateFieldGet(this, _TimeLimiter_logger, "f").trace(`Time limiter continued at ${new Date(__classPrivateFieldGet(this, _TimeLimiter_availableAt, "f")).toISOString()}.`);
|
|
66
|
-
}
|
|
67
|
-
this.setNextAvailableAt(Date.now() + this.intervalMs);
|
|
51
|
+
_TimeRateLimiter_logger.set(this, void 0);
|
|
52
|
+
_TimeRateLimiter_nextAvailableAt.set(this, 0);
|
|
53
|
+
__classPrivateFieldSet(this, _TimeRateLimiter_logger, logger, "f");
|
|
54
|
+
__classPrivateFieldGet(this, _TimeRateLimiter_logger, "f").trace(`Initialized TimeRateLimiter with interval ${intervalMs}ms`);
|
|
55
|
+
}
|
|
56
|
+
postponeUntil(availableAt) {
|
|
57
|
+
__classPrivateFieldSet(this, _TimeRateLimiter_nextAvailableAt, Math.max(__classPrivateFieldGet(this, _TimeRateLimiter_nextAvailableAt, "f"), availableAt), "f");
|
|
58
|
+
__classPrivateFieldGet(this, _TimeRateLimiter_logger, "f").trace(`Setting next available time to ${new Date(__classPrivateFieldGet(this, _TimeRateLimiter_nextAvailableAt, "f")).toISOString()}.`);
|
|
59
|
+
}
|
|
60
|
+
reserveNextStart() {
|
|
61
|
+
__classPrivateFieldSet(this, _TimeRateLimiter_nextAvailableAt, Math.max(__classPrivateFieldGet(this, _TimeRateLimiter_nextAvailableAt, "f"), Date.now()) + this.intervalMs, "f");
|
|
62
|
+
__classPrivateFieldGet(this, _TimeRateLimiter_logger, "f").trace(`Setting next available time to ${new Date(__classPrivateFieldGet(this, _TimeRateLimiter_nextAvailableAt, "f")).toISOString()}.`);
|
|
63
|
+
}
|
|
64
|
+
waitMs() {
|
|
65
|
+
return __classPrivateFieldGet(this, _TimeRateLimiter_nextAvailableAt, "f") - Date.now();
|
|
68
66
|
}
|
|
69
67
|
}
|
|
70
|
-
|
|
68
|
+
_TimeRateLimiter_logger = new WeakMap(), _TimeRateLimiter_nextAvailableAt = new WeakMap();
|
|
71
69
|
class RequestWorker {
|
|
72
|
-
constructor({ logger }, { concurrency =
|
|
70
|
+
constructor({ logger }, { concurrency = 100, intervalMs = 1000, maxRetries = 3, rateLimitPauseMs, transport = new http2_js_1.Http2Transport(), } = {}) {
|
|
73
71
|
_RequestWorker_instances.add(this);
|
|
74
|
-
|
|
72
|
+
_RequestWorker_concurrentLimiter.set(this, void 0);
|
|
75
73
|
_RequestWorker_logger.set(this, void 0);
|
|
76
74
|
_RequestWorker_maxRetries.set(this, void 0);
|
|
75
|
+
_RequestWorker_pendingRequests.set(this, []);
|
|
77
76
|
_RequestWorker_rateLimitPauseMs.set(this, void 0);
|
|
78
|
-
|
|
77
|
+
_RequestWorker_scheduledPump.set(this, void 0);
|
|
78
|
+
_RequestWorker_timeRateLimiter.set(this, void 0);
|
|
79
79
|
_RequestWorker_transport.set(this, void 0);
|
|
80
80
|
__classPrivateFieldSet(this, _RequestWorker_logger, logger, "f");
|
|
81
81
|
__classPrivateFieldSet(this, _RequestWorker_transport, transport, "f");
|
|
82
|
-
__classPrivateFieldSet(this,
|
|
83
|
-
__classPrivateFieldSet(this,
|
|
82
|
+
__classPrivateFieldSet(this, _RequestWorker_concurrentLimiter, new ConcurrentLimiter({ logger }, concurrency), "f");
|
|
83
|
+
__classPrivateFieldSet(this, _RequestWorker_timeRateLimiter, new TimeRateLimiter({ logger }, intervalMs), "f");
|
|
84
84
|
__classPrivateFieldSet(this, _RequestWorker_maxRetries, maxRetries, "f");
|
|
85
85
|
__classPrivateFieldSet(this, _RequestWorker_rateLimitPauseMs, rateLimitPauseMs, "f");
|
|
86
86
|
logger.trace({
|
|
@@ -92,16 +92,16 @@ class RequestWorker {
|
|
|
92
92
|
}, "Initialized RequestWorker");
|
|
93
93
|
}
|
|
94
94
|
async fetch(request) {
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
__classPrivateFieldGet(this,
|
|
95
|
+
return new Promise((resolve, reject) => {
|
|
96
|
+
__classPrivateFieldGet(this, _RequestWorker_pendingRequests, "f").push({ reject, request, resolve });
|
|
97
|
+
__classPrivateFieldGet(this, _RequestWorker_logger, "f").trace(`Queued request into ${__classPrivateFieldGet(this, _RequestWorker_pendingRequests, "f").length} requests with ${__classPrivateFieldGet(this, _RequestWorker_concurrentLimiter, "f").activeRequests}/${__classPrivateFieldGet(this, _RequestWorker_concurrentLimiter, "f").concurrency} active requests.`);
|
|
98
|
+
__classPrivateFieldGet(this, _RequestWorker_instances, "m", _RequestWorker_pump).call(this);
|
|
98
99
|
});
|
|
99
100
|
}
|
|
100
101
|
}
|
|
101
102
|
exports.RequestWorker = RequestWorker;
|
|
102
|
-
|
|
103
|
+
_RequestWorker_concurrentLimiter = new WeakMap(), _RequestWorker_logger = new WeakMap(), _RequestWorker_maxRetries = new WeakMap(), _RequestWorker_pendingRequests = new WeakMap(), _RequestWorker_rateLimitPauseMs = new WeakMap(), _RequestWorker_scheduledPump = new WeakMap(), _RequestWorker_timeRateLimiter = new WeakMap(), _RequestWorker_transport = new WeakMap(), _RequestWorker_instances = new WeakSet(), _RequestWorker_fetch = async function _RequestWorker_fetch(request, retryRemains = __classPrivateFieldGet(this, _RequestWorker_maxRetries, "f")) {
|
|
103
104
|
__classPrivateFieldGet(this, _RequestWorker_logger, "f").info(`Fetching request with max ${retryRemains} retries to ${request instanceof Request ? request.url : request.toString()}`);
|
|
104
|
-
await __classPrivateFieldGet(this, _RequestWorker_timeLimiter, "f").wait();
|
|
105
105
|
const requestObj = request instanceof Request ? request.clone() : new Request(request);
|
|
106
106
|
const response = await __classPrivateFieldGet(this, _RequestWorker_transport, "f").fetch(requestObj);
|
|
107
107
|
if (response.ok)
|
|
@@ -110,8 +110,8 @@ _RequestWorker_concurrencyLimiter = new WeakMap(), _RequestWorker_logger = new W
|
|
|
110
110
|
const retryAfter = __classPrivateFieldGet(this, _RequestWorker_rateLimitPauseMs, "f") ?? parseRetryAfter(response) ?? 60000;
|
|
111
111
|
const availableAt = Date.now() + retryAfter;
|
|
112
112
|
__classPrivateFieldGet(this, _RequestWorker_logger, "f").warn(`Received 429 Too Many Requests. Pausing requests until ${new Date(availableAt).toISOString()}.`);
|
|
113
|
+
__classPrivateFieldGet(this, _RequestWorker_timeRateLimiter, "f").postponeUntil(availableAt);
|
|
113
114
|
await sleep(retryAfter);
|
|
114
|
-
__classPrivateFieldGet(this, _RequestWorker_timeLimiter, "f").setNextAvailableAt(availableAt);
|
|
115
115
|
}
|
|
116
116
|
if (retryRemains <= 0) {
|
|
117
117
|
const url = request instanceof Request ? request.url : request.toString();
|
|
@@ -119,6 +119,41 @@ _RequestWorker_concurrencyLimiter = new WeakMap(), _RequestWorker_logger = new W
|
|
|
119
119
|
return response;
|
|
120
120
|
}
|
|
121
121
|
return __classPrivateFieldGet(this, _RequestWorker_instances, "m", _RequestWorker_fetch).call(this, request, retryRemains - 1);
|
|
122
|
+
}, _RequestWorker_pump = function _RequestWorker_pump() {
|
|
123
|
+
if (__classPrivateFieldGet(this, _RequestWorker_pendingRequests, "f").length === 0)
|
|
124
|
+
return;
|
|
125
|
+
if (!__classPrivateFieldGet(this, _RequestWorker_concurrentLimiter, "f").canAcquire()) {
|
|
126
|
+
__classPrivateFieldGet(this, _RequestWorker_logger, "f").trace(`Concurrency limit reached (${__classPrivateFieldGet(this, _RequestWorker_concurrentLimiter, "f").activeRequests}/${__classPrivateFieldGet(this, _RequestWorker_concurrentLimiter, "f").concurrency}).`);
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
const waitMs = __classPrivateFieldGet(this, _RequestWorker_timeRateLimiter, "f").waitMs();
|
|
130
|
+
if (waitMs > 0) {
|
|
131
|
+
__classPrivateFieldGet(this, _RequestWorker_instances, "m", _RequestWorker_schedulePump).call(this, waitMs);
|
|
132
|
+
__classPrivateFieldGet(this, _RequestWorker_logger, "f").trace(`Waiting for request scheduler for ${waitMs}ms, until ${new Date(__classPrivateFieldGet(this, _RequestWorker_timeRateLimiter, "f").nextAvailableAt).toISOString()}.`);
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
const next = __classPrivateFieldGet(this, _RequestWorker_pendingRequests, "f").shift();
|
|
136
|
+
if (!next) {
|
|
137
|
+
__classPrivateFieldGet(this, _RequestWorker_logger, "f").trace(`No pending requests to process.`);
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
__classPrivateFieldGet(this, _RequestWorker_concurrentLimiter, "f").acquire();
|
|
141
|
+
__classPrivateFieldGet(this, _RequestWorker_timeRateLimiter, "f").reserveNextStart();
|
|
142
|
+
__classPrivateFieldGet(this, _RequestWorker_logger, "f").trace(`Processing queued request with ${__classPrivateFieldGet(this, _RequestWorker_concurrentLimiter, "f").activeRequests}/${__classPrivateFieldGet(this, _RequestWorker_concurrentLimiter, "f").concurrency} active requests and ${__classPrivateFieldGet(this, _RequestWorker_pendingRequests, "f").length} pending requests.`);
|
|
143
|
+
void __classPrivateFieldGet(this, _RequestWorker_instances, "m", _RequestWorker_fetch).call(this, next.request)
|
|
144
|
+
.then(next.resolve, next.reject)
|
|
145
|
+
.finally(() => {
|
|
146
|
+
__classPrivateFieldGet(this, _RequestWorker_concurrentLimiter, "f").release();
|
|
147
|
+
__classPrivateFieldGet(this, _RequestWorker_instances, "m", _RequestWorker_pump).call(this);
|
|
148
|
+
});
|
|
149
|
+
}, _RequestWorker_schedulePump = function _RequestWorker_schedulePump(waitMs) {
|
|
150
|
+
if (__classPrivateFieldGet(this, _RequestWorker_scheduledPump, "f"))
|
|
151
|
+
return;
|
|
152
|
+
__classPrivateFieldGet(this, _RequestWorker_logger, "f").trace(`Waiting for request scheduler for ${waitMs}ms, until ${new Date(__classPrivateFieldGet(this, _RequestWorker_timeRateLimiter, "f").nextAvailableAt).toISOString()}.`);
|
|
153
|
+
__classPrivateFieldSet(this, _RequestWorker_scheduledPump, setTimeout(() => {
|
|
154
|
+
__classPrivateFieldSet(this, _RequestWorker_scheduledPump, undefined, "f");
|
|
155
|
+
__classPrivateFieldGet(this, _RequestWorker_instances, "m", _RequestWorker_pump).call(this);
|
|
156
|
+
}, waitMs), "f");
|
|
122
157
|
};
|
|
123
158
|
function parseRetryAfter(response, now = Date.now()) {
|
|
124
159
|
const retryAfter = response.headers.get("Retry-After");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../../../src/transport/worker.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAEA,yCAAgE;
|
|
1
|
+
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../../../src/transport/worker.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"download.d.ts","sourceRoot":"","sources":["../../../../src/downloader/asset/download.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAEnC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAE9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,UAAU,iBAAiB;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,aAAa,CAAC;CAC1B;AAED,UAAU,oBAAoB;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,YAAY,CAAC;CAC5B;AAkBD,wBAAsB,aAAa,CACjC,EAAE,OAAY,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,iBAAiB,EACtD,EAAE,WAAW,EAAE,gBAAgB,EAAE,YAAY,EAAE,EAAE,oBAAoB;;;
|
|
1
|
+
{"version":3,"file":"download.d.ts","sourceRoot":"","sources":["../../../../src/downloader/asset/download.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAEnC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAE9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,UAAU,iBAAiB;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,aAAa,CAAC;CAC1B;AAED,UAAU,oBAAoB;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,YAAY,CAAC;CAC5B;AAkBD,wBAAsB,aAAa,CACjC,EAAE,OAAY,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,iBAAiB,EACtD,EAAE,WAAW,EAAE,gBAAgB,EAAE,YAAY,EAAE,EAAE,oBAAoB;;;GAoDtE"}
|
|
@@ -26,12 +26,13 @@ export async function downloadAsset({ headers = {}, logger, transport }, { desti
|
|
|
26
26
|
logger.debug(`Downloading ${mediaContent.type} asset ${mediaContent.id} to ${destination}`);
|
|
27
27
|
await mkdir(path.dirname(destination), { recursive: true });
|
|
28
28
|
const tempFilePath = destination + ".part";
|
|
29
|
+
const currentHeaders = { ...headers };
|
|
29
30
|
const { size: downloadedBytes } = await filesize(tempFilePath);
|
|
30
31
|
if (downloadedBytes > 0) {
|
|
31
32
|
logger.debug(`Resuming download of ${mediaContent.type} asset ${mediaContent.id} to ${tempFilePath} from byte ${downloadedBytes}`);
|
|
32
|
-
|
|
33
|
+
currentHeaders.Range = `bytes=${downloadedBytes}-`;
|
|
33
34
|
}
|
|
34
|
-
const response = await transport.fetch(new Request(mediaContent.url, { headers }));
|
|
35
|
+
const response = await transport.fetch(new Request(mediaContent.url, { headers: currentHeaders }));
|
|
35
36
|
if (!response.ok) {
|
|
36
37
|
throw new AssetDownloadError(response, mediaContent.url, await response.text());
|
|
37
38
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"download.js","sourceRoot":"","sources":["../../../../src/downloader/asset/download.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAC9D,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAKhD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAevD,MAAM,kBAAmB,SAAQ,KAAK;IAMpC,YAAmB,QAAkB,EAAE,GAAW,EAAE,IAAa;QAC/D,KAAK,CAAC,0BAA0B,QAAQ,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC;QAC1D,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;QACjC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;QAC9B,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC;QACtC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;CACF;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,EAAE,OAAO,GAAG,EAAE,EAAE,MAAM,EAAE,SAAS,EAAqB,EACtD,EAAE,WAAW,EAAE,gBAAgB,EAAE,YAAY,EAAwB;IAErE,IAAI,MAAM,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;QAC9B,MAAM,CAAC,KAAK,CAAC,SAAS,YAAY,CAAC,EAAE,sBAAsB,WAAW,EAAE,CAAC,CAAC;QAC1E,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAClD,QAAQ,CAAC,WAAW,CAAC;YACrB,QAAQ,CAAC,WAAW,CAAC;SACtB,CAAC,CAAC;QAEH,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAC3B,CAAC;IAED,MAAM,CAAC,KAAK,CACV,eAAe,YAAY,CAAC,IAAI,UAAU,YAAY,CAAC,EAAE,OAAO,WAAW,EAAE,CAC9E,CAAC;IACF,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,MAAM,YAAY,GAAG,WAAW,GAAG,OAAO,CAAC;IAE3C,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,MAAM,QAAQ,CAAC,YAAY,CAAC,CAAC;IAC/D,IAAI,eAAe,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,CAAC,KAAK,CACV,wBAAwB,YAAY,CAAC,IAAI,UAAU,YAAY,CAAC,EAAE,OAAO,YAAY,cAAc,eAAe,EAAE,CACrH,CAAC;QACF,
|
|
1
|
+
{"version":3,"file":"download.js","sourceRoot":"","sources":["../../../../src/downloader/asset/download.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,7 +24,7 @@ export async function syncCreator({ client, headers, logger, manifest, pathManag
|
|
|
24
24
|
status: "failed",
|
|
25
25
|
updatedDatetime: postSummary.updatedDatetime,
|
|
26
26
|
};
|
|
27
|
-
logger.error({ err }, `Error occurred while
|
|
27
|
+
logger.error({ err }, `Error occurred while fetch post manifest of ${index}/${postSummaries.length} post ${postSummary.id}, skipping.`);
|
|
28
28
|
await manifest.save();
|
|
29
29
|
});
|
|
30
30
|
if (!post)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../../../src/downloader/creator/sync.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAW3D,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,EAChC,MAAM,EACN,OAAO,EACP,MAAM,EACN,QAAQ,EACR,WAAW,EACX,SAAS,GACO;IAChB,MAAM,aAAa,GAAG,MAAM,oBAAoB,CAC9C,EAAE,MAAM,EAAE,MAAM,EAAE,EAClB,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,CAClC,CAAC;IACF,MAAM,CAAC,IAAI,CACT,oBAAoB,aAAa,CAAC,MAAM,sBAAsB,QAAQ,CAAC,SAAS,EAAE,CACnF,CAAC;IAEF,MAAM,eAAe,GAAoB,EAAE,CAAC;IAE5C,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,WAAW,IAAI,aAAa,EAAE,CAAC;QACxC,MAAM,CAAC,KAAK,CACV,gBAAgB,EAAE,KAAK,IAAI,aAAa,CAAC,MAAM,SAAS,WAAW,CAAC,EAAE,gBAAgB,QAAQ,CAAC,SAAS,EAAE,CAC3G,CAAC;QACF,MAAM,cAAc,GAAG,gBAAgB,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,WAAW,CAAC,CAAC;QAC3E,IAAI,cAAc,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACxC,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC;YAChD,SAAS;QACX,CAAC;QAKD,MAAM,eAAe,GAAG,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACtD,MAAM,IAAI,GAAG,MAAM,MAAM;aACtB,OAAO,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,EAAE,CAAC;aACnC,KAAK,CAAC,KAAK,EAAE,GAAY,EAAE,EAAE;YAC5B,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG;gBAC/B,MAAM,EAAE,EAAE;gBACV,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC;gBAClB,EAAE,EAAE,WAAW,CAAC,EAAE;gBAClB,UAAU,EAAE,WAAW,CAAC,YAAY;gBACpC,MAAM,EAAE,QAAQ;gBAChB,eAAe,EAAE,WAAW,CAAC,eAAe;aAClB,CAAC;YAC7B,MAAM,CAAC,KAAK,CACV,EAAE,GAAG,EAAE,EACP,
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../../../src/downloader/creator/sync.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"path-manager.d.ts","sourceRoot":"","sources":["../../../../src/downloader/fs/path-manager.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAElD,UAAU,kBAAkB;IAC1B,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;
|
|
1
|
+
{"version":3,"file":"path-manager.d.ts","sourceRoot":"","sources":["../../../../src/downloader/fs/path-manager.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAElD,UAAU,kBAAkB;IAC1B,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAKD,qBAAa,WAAW;;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;gBAGD,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,kBAAkB;IAMvD,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;IAYpD,GAAG,CAAC,IAAI,EAAE,MAAM;IAOhB,IAAI,CAAC,IAAI,EAAE,MAAM;IAIjB,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,mBAAmB,GAAG,OAAO,CAAC;CAO5D"}
|
|
@@ -11,6 +11,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
11
11
|
};
|
|
12
12
|
var _PathManager_flatPosts;
|
|
13
13
|
import { basename, dirname, join, resolve } from "node:path";
|
|
14
|
+
const INVALID_FILENAME_CHARS = /[<>:"/\\|?*\x00-\x1F]/g;
|
|
14
15
|
export class PathManager {
|
|
15
16
|
constructor({ flatPosts, rootPath }) {
|
|
16
17
|
_PathManager_flatPosts.set(this, void 0);
|
|
@@ -19,7 +20,8 @@ export class PathManager {
|
|
|
19
20
|
this.name = basename(this.path);
|
|
20
21
|
}
|
|
21
22
|
asset(index, name, extension) {
|
|
22
|
-
const
|
|
23
|
+
const sanitizedName = name.replace(INVALID_FILENAME_CHARS, "-");
|
|
24
|
+
const fileName = `${index}-${sanitizedName}.${extension}`;
|
|
23
25
|
if (__classPrivateFieldGet(this, _PathManager_flatPosts, "f")) {
|
|
24
26
|
const parent = dirname(this.path);
|
|
25
27
|
return join(parent, `${this.name}.${fileName}`);
|
|
@@ -37,7 +39,8 @@ export class PathManager {
|
|
|
37
39
|
}
|
|
38
40
|
post(post) {
|
|
39
41
|
const date = post.publishedDatetime.split("T")[0];
|
|
40
|
-
const
|
|
42
|
+
const sanitizedTitle = post.title.replace(INVALID_FILENAME_CHARS, "-");
|
|
43
|
+
const title = `${date}-${post.id}-${sanitizedTitle}`;
|
|
41
44
|
return this.dir(title);
|
|
42
45
|
}
|
|
43
46
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"path-manager.js","sourceRoot":"","sources":["../../../../src/downloader/fs/path-manager.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"path-manager.js","sourceRoot":"","sources":["../../../../src/downloader/fs/path-manager.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAU7D,MAAM,sBAAsB,GAAG,wBAAwB,CAAC;AAExD,MAAM,OAAO,WAAW;IAKtB,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAsB;QAFvD,yCAAoB;QAGlB,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC9B,uBAAA,IAAI,0BAAc,SAAS,MAAA,CAAC;QAC5B,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,KAAa,EAAE,IAAY,EAAE,SAAiB;QAClD,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAAE,GAAG,CAAC,CAAC;QAChE,MAAM,QAAQ,GAAG,GAAG,KAAK,IAAI,aAAa,IAAI,SAAS,EAAE,CAAC;QAE1D,IAAI,uBAAA,IAAI,8BAAW,EAAE,CAAC;YACpB,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClC,OAAO,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,IAAI,QAAQ,EAAE,CAAC,CAAC;QAClD,CAAC;QAED,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACnC,CAAC;IAED,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,WAAW,CAAC;YACrB,SAAS,EAAE,uBAAA,IAAI,8BAAW;YAC1B,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC;SAChC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,IAAY;QACf,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED,IAAI,CAAC,IAAsD;QACzD,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAClD,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,sBAAsB,EAAE,GAAG,CAAC,CAAC;QACvE,MAAM,KAAK,GAAG,GAAG,IAAI,IAAI,IAAI,CAAC,EAAE,IAAI,cAAc,EAAE,CAAC;QAErD,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../../src/transport/worker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAEnC,OAAO,EAAkB,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhE,MAAM,WAAW,mBAAmB;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,aAAa,CAAC;CAC3B;
|
|
1
|
+
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../../src/transport/worker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAEnC,OAAO,EAAkB,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhE,MAAM,WAAW,mBAAmB;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,aAAa,CAAC;CAC3B;AAqFD,qBAAa,aAAa;;gBAWtB,EAAE,MAAM,EAAE,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,EAC9B,EACE,WAAiB,EACjB,UAAiB,EACjB,UAAc,EACd,gBAAgB,EAChB,SAAgC,GACjC,GAAE,mBAAwB;IAoBvB,KAAK,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,GAAG;CA8F5C"}
|
|
@@ -1,83 +1,83 @@
|
|
|
1
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
2
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
3
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
4
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
5
|
+
};
|
|
1
6
|
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
2
7
|
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
3
8
|
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
4
9
|
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
5
10
|
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
6
11
|
};
|
|
7
|
-
var
|
|
8
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
9
|
-
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
10
|
-
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
11
|
-
};
|
|
12
|
-
var _ConcurrencyLimiter_active, _ConcurrencyLimiter_logger, _ConcurrencyLimiter_queue, _TimeLimiter_availableAt, _TimeLimiter_logger, _RequestWorker_instances, _RequestWorker_concurrencyLimiter, _RequestWorker_logger, _RequestWorker_maxRetries, _RequestWorker_rateLimitPauseMs, _RequestWorker_timeLimiter, _RequestWorker_transport, _RequestWorker_fetch;
|
|
12
|
+
var _ConcurrentLimiter_activeRequests, _ConcurrentLimiter_logger, _TimeRateLimiter_logger, _TimeRateLimiter_nextAvailableAt, _RequestWorker_instances, _RequestWorker_concurrentLimiter, _RequestWorker_logger, _RequestWorker_maxRetries, _RequestWorker_pendingRequests, _RequestWorker_rateLimitPauseMs, _RequestWorker_scheduledPump, _RequestWorker_timeRateLimiter, _RequestWorker_transport, _RequestWorker_fetch, _RequestWorker_pump, _RequestWorker_schedulePump;
|
|
13
13
|
import { Http2Transport } from "./http2.js";
|
|
14
|
-
class
|
|
14
|
+
class ConcurrentLimiter {
|
|
15
|
+
get activeRequests() {
|
|
16
|
+
return __classPrivateFieldGet(this, _ConcurrentLimiter_activeRequests, "f");
|
|
17
|
+
}
|
|
15
18
|
constructor({ logger }, concurrency) {
|
|
16
19
|
this.concurrency = concurrency;
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
20
|
+
_ConcurrentLimiter_activeRequests.set(this, 0);
|
|
21
|
+
_ConcurrentLimiter_logger.set(this, void 0);
|
|
22
|
+
__classPrivateFieldSet(this, _ConcurrentLimiter_logger, logger, "f");
|
|
23
|
+
__classPrivateFieldGet(this, _ConcurrentLimiter_logger, "f").trace(`Initialized ConcurrentLimiter with max ${concurrency} concurrent requests`);
|
|
24
|
+
}
|
|
25
|
+
acquire() {
|
|
26
|
+
if (!this.canAcquire())
|
|
27
|
+
return false;
|
|
28
|
+
__classPrivateFieldSet(this, _ConcurrentLimiter_activeRequests, __classPrivateFieldGet(this, _ConcurrentLimiter_activeRequests, "f") + 1, "f");
|
|
29
|
+
return true;
|
|
30
|
+
}
|
|
31
|
+
canAcquire() {
|
|
32
|
+
if (__classPrivateFieldGet(this, _ConcurrentLimiter_activeRequests, "f") < this.concurrency)
|
|
33
|
+
return true;
|
|
34
|
+
__classPrivateFieldGet(this, _ConcurrentLimiter_logger, "f").trace(`Concurrency limit reached (${__classPrivateFieldGet(this, _ConcurrentLimiter_activeRequests, "f")}/${this.concurrency}), dropping new concurrent request.`);
|
|
35
|
+
return false;
|
|
30
36
|
}
|
|
31
37
|
release() {
|
|
32
|
-
|
|
33
|
-
__classPrivateFieldSet(this, _ConcurrencyLimiter_active, (_a = __classPrivateFieldGet(this, _ConcurrencyLimiter_active, "f"), --_a), "f");
|
|
34
|
-
if (__classPrivateFieldGet(this, _ConcurrencyLimiter_queue, "f").length > 0) {
|
|
35
|
-
const next = __classPrivateFieldGet(this, _ConcurrencyLimiter_queue, "f").shift();
|
|
36
|
-
if (next) {
|
|
37
|
-
__classPrivateFieldGet(this, _ConcurrencyLimiter_logger, "f").trace(`Concurrency limit released (${__classPrivateFieldGet(this, _ConcurrencyLimiter_active, "f")}/${this.concurrency}), processing next request.`);
|
|
38
|
-
next();
|
|
39
|
-
}
|
|
40
|
-
}
|
|
38
|
+
__classPrivateFieldSet(this, _ConcurrentLimiter_activeRequests, __classPrivateFieldGet(this, _ConcurrentLimiter_activeRequests, "f") - 1, "f");
|
|
41
39
|
}
|
|
42
40
|
}
|
|
43
|
-
|
|
44
|
-
class
|
|
41
|
+
_ConcurrentLimiter_activeRequests = new WeakMap(), _ConcurrentLimiter_logger = new WeakMap();
|
|
42
|
+
class TimeRateLimiter {
|
|
43
|
+
get nextAvailableAt() {
|
|
44
|
+
return __classPrivateFieldGet(this, _TimeRateLimiter_nextAvailableAt, "f");
|
|
45
|
+
}
|
|
45
46
|
constructor({ logger }, intervalMs) {
|
|
46
47
|
this.intervalMs = intervalMs;
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
__classPrivateFieldSet(this,
|
|
50
|
-
__classPrivateFieldGet(this,
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
__classPrivateFieldGet(this,
|
|
54
|
-
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
__classPrivateFieldGet(this, _TimeLimiter_logger, "f").trace(`Time limiter continued at ${new Date(__classPrivateFieldGet(this, _TimeLimiter_availableAt, "f")).toISOString()}.`);
|
|
63
|
-
}
|
|
64
|
-
this.setNextAvailableAt(Date.now() + this.intervalMs);
|
|
48
|
+
_TimeRateLimiter_logger.set(this, void 0);
|
|
49
|
+
_TimeRateLimiter_nextAvailableAt.set(this, 0);
|
|
50
|
+
__classPrivateFieldSet(this, _TimeRateLimiter_logger, logger, "f");
|
|
51
|
+
__classPrivateFieldGet(this, _TimeRateLimiter_logger, "f").trace(`Initialized TimeRateLimiter with interval ${intervalMs}ms`);
|
|
52
|
+
}
|
|
53
|
+
postponeUntil(availableAt) {
|
|
54
|
+
__classPrivateFieldSet(this, _TimeRateLimiter_nextAvailableAt, Math.max(__classPrivateFieldGet(this, _TimeRateLimiter_nextAvailableAt, "f"), availableAt), "f");
|
|
55
|
+
__classPrivateFieldGet(this, _TimeRateLimiter_logger, "f").trace(`Setting next available time to ${new Date(__classPrivateFieldGet(this, _TimeRateLimiter_nextAvailableAt, "f")).toISOString()}.`);
|
|
56
|
+
}
|
|
57
|
+
reserveNextStart() {
|
|
58
|
+
__classPrivateFieldSet(this, _TimeRateLimiter_nextAvailableAt, Math.max(__classPrivateFieldGet(this, _TimeRateLimiter_nextAvailableAt, "f"), Date.now()) + this.intervalMs, "f");
|
|
59
|
+
__classPrivateFieldGet(this, _TimeRateLimiter_logger, "f").trace(`Setting next available time to ${new Date(__classPrivateFieldGet(this, _TimeRateLimiter_nextAvailableAt, "f")).toISOString()}.`);
|
|
60
|
+
}
|
|
61
|
+
waitMs() {
|
|
62
|
+
return __classPrivateFieldGet(this, _TimeRateLimiter_nextAvailableAt, "f") - Date.now();
|
|
65
63
|
}
|
|
66
64
|
}
|
|
67
|
-
|
|
65
|
+
_TimeRateLimiter_logger = new WeakMap(), _TimeRateLimiter_nextAvailableAt = new WeakMap();
|
|
68
66
|
export class RequestWorker {
|
|
69
|
-
constructor({ logger }, { concurrency =
|
|
67
|
+
constructor({ logger }, { concurrency = 100, intervalMs = 1000, maxRetries = 3, rateLimitPauseMs, transport = new Http2Transport(), } = {}) {
|
|
70
68
|
_RequestWorker_instances.add(this);
|
|
71
|
-
|
|
69
|
+
_RequestWorker_concurrentLimiter.set(this, void 0);
|
|
72
70
|
_RequestWorker_logger.set(this, void 0);
|
|
73
71
|
_RequestWorker_maxRetries.set(this, void 0);
|
|
72
|
+
_RequestWorker_pendingRequests.set(this, []);
|
|
74
73
|
_RequestWorker_rateLimitPauseMs.set(this, void 0);
|
|
75
|
-
|
|
74
|
+
_RequestWorker_scheduledPump.set(this, void 0);
|
|
75
|
+
_RequestWorker_timeRateLimiter.set(this, void 0);
|
|
76
76
|
_RequestWorker_transport.set(this, void 0);
|
|
77
77
|
__classPrivateFieldSet(this, _RequestWorker_logger, logger, "f");
|
|
78
78
|
__classPrivateFieldSet(this, _RequestWorker_transport, transport, "f");
|
|
79
|
-
__classPrivateFieldSet(this,
|
|
80
|
-
__classPrivateFieldSet(this,
|
|
79
|
+
__classPrivateFieldSet(this, _RequestWorker_concurrentLimiter, new ConcurrentLimiter({ logger }, concurrency), "f");
|
|
80
|
+
__classPrivateFieldSet(this, _RequestWorker_timeRateLimiter, new TimeRateLimiter({ logger }, intervalMs), "f");
|
|
81
81
|
__classPrivateFieldSet(this, _RequestWorker_maxRetries, maxRetries, "f");
|
|
82
82
|
__classPrivateFieldSet(this, _RequestWorker_rateLimitPauseMs, rateLimitPauseMs, "f");
|
|
83
83
|
logger.trace({
|
|
@@ -89,15 +89,15 @@ export class RequestWorker {
|
|
|
89
89
|
}, "Initialized RequestWorker");
|
|
90
90
|
}
|
|
91
91
|
async fetch(request) {
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
__classPrivateFieldGet(this,
|
|
92
|
+
return new Promise((resolve, reject) => {
|
|
93
|
+
__classPrivateFieldGet(this, _RequestWorker_pendingRequests, "f").push({ reject, request, resolve });
|
|
94
|
+
__classPrivateFieldGet(this, _RequestWorker_logger, "f").trace(`Queued request into ${__classPrivateFieldGet(this, _RequestWorker_pendingRequests, "f").length} requests with ${__classPrivateFieldGet(this, _RequestWorker_concurrentLimiter, "f").activeRequests}/${__classPrivateFieldGet(this, _RequestWorker_concurrentLimiter, "f").concurrency} active requests.`);
|
|
95
|
+
__classPrivateFieldGet(this, _RequestWorker_instances, "m", _RequestWorker_pump).call(this);
|
|
95
96
|
});
|
|
96
97
|
}
|
|
97
98
|
}
|
|
98
|
-
|
|
99
|
+
_RequestWorker_concurrentLimiter = new WeakMap(), _RequestWorker_logger = new WeakMap(), _RequestWorker_maxRetries = new WeakMap(), _RequestWorker_pendingRequests = new WeakMap(), _RequestWorker_rateLimitPauseMs = new WeakMap(), _RequestWorker_scheduledPump = new WeakMap(), _RequestWorker_timeRateLimiter = new WeakMap(), _RequestWorker_transport = new WeakMap(), _RequestWorker_instances = new WeakSet(), _RequestWorker_fetch = async function _RequestWorker_fetch(request, retryRemains = __classPrivateFieldGet(this, _RequestWorker_maxRetries, "f")) {
|
|
99
100
|
__classPrivateFieldGet(this, _RequestWorker_logger, "f").info(`Fetching request with max ${retryRemains} retries to ${request instanceof Request ? request.url : request.toString()}`);
|
|
100
|
-
await __classPrivateFieldGet(this, _RequestWorker_timeLimiter, "f").wait();
|
|
101
101
|
const requestObj = request instanceof Request ? request.clone() : new Request(request);
|
|
102
102
|
const response = await __classPrivateFieldGet(this, _RequestWorker_transport, "f").fetch(requestObj);
|
|
103
103
|
if (response.ok)
|
|
@@ -106,8 +106,8 @@ _RequestWorker_concurrencyLimiter = new WeakMap(), _RequestWorker_logger = new W
|
|
|
106
106
|
const retryAfter = __classPrivateFieldGet(this, _RequestWorker_rateLimitPauseMs, "f") ?? parseRetryAfter(response) ?? 60000;
|
|
107
107
|
const availableAt = Date.now() + retryAfter;
|
|
108
108
|
__classPrivateFieldGet(this, _RequestWorker_logger, "f").warn(`Received 429 Too Many Requests. Pausing requests until ${new Date(availableAt).toISOString()}.`);
|
|
109
|
+
__classPrivateFieldGet(this, _RequestWorker_timeRateLimiter, "f").postponeUntil(availableAt);
|
|
109
110
|
await sleep(retryAfter);
|
|
110
|
-
__classPrivateFieldGet(this, _RequestWorker_timeLimiter, "f").setNextAvailableAt(availableAt);
|
|
111
111
|
}
|
|
112
112
|
if (retryRemains <= 0) {
|
|
113
113
|
const url = request instanceof Request ? request.url : request.toString();
|
|
@@ -115,6 +115,41 @@ _RequestWorker_concurrencyLimiter = new WeakMap(), _RequestWorker_logger = new W
|
|
|
115
115
|
return response;
|
|
116
116
|
}
|
|
117
117
|
return __classPrivateFieldGet(this, _RequestWorker_instances, "m", _RequestWorker_fetch).call(this, request, retryRemains - 1);
|
|
118
|
+
}, _RequestWorker_pump = function _RequestWorker_pump() {
|
|
119
|
+
if (__classPrivateFieldGet(this, _RequestWorker_pendingRequests, "f").length === 0)
|
|
120
|
+
return;
|
|
121
|
+
if (!__classPrivateFieldGet(this, _RequestWorker_concurrentLimiter, "f").canAcquire()) {
|
|
122
|
+
__classPrivateFieldGet(this, _RequestWorker_logger, "f").trace(`Concurrency limit reached (${__classPrivateFieldGet(this, _RequestWorker_concurrentLimiter, "f").activeRequests}/${__classPrivateFieldGet(this, _RequestWorker_concurrentLimiter, "f").concurrency}).`);
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
const waitMs = __classPrivateFieldGet(this, _RequestWorker_timeRateLimiter, "f").waitMs();
|
|
126
|
+
if (waitMs > 0) {
|
|
127
|
+
__classPrivateFieldGet(this, _RequestWorker_instances, "m", _RequestWorker_schedulePump).call(this, waitMs);
|
|
128
|
+
__classPrivateFieldGet(this, _RequestWorker_logger, "f").trace(`Waiting for request scheduler for ${waitMs}ms, until ${new Date(__classPrivateFieldGet(this, _RequestWorker_timeRateLimiter, "f").nextAvailableAt).toISOString()}.`);
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
const next = __classPrivateFieldGet(this, _RequestWorker_pendingRequests, "f").shift();
|
|
132
|
+
if (!next) {
|
|
133
|
+
__classPrivateFieldGet(this, _RequestWorker_logger, "f").trace(`No pending requests to process.`);
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
__classPrivateFieldGet(this, _RequestWorker_concurrentLimiter, "f").acquire();
|
|
137
|
+
__classPrivateFieldGet(this, _RequestWorker_timeRateLimiter, "f").reserveNextStart();
|
|
138
|
+
__classPrivateFieldGet(this, _RequestWorker_logger, "f").trace(`Processing queued request with ${__classPrivateFieldGet(this, _RequestWorker_concurrentLimiter, "f").activeRequests}/${__classPrivateFieldGet(this, _RequestWorker_concurrentLimiter, "f").concurrency} active requests and ${__classPrivateFieldGet(this, _RequestWorker_pendingRequests, "f").length} pending requests.`);
|
|
139
|
+
void __classPrivateFieldGet(this, _RequestWorker_instances, "m", _RequestWorker_fetch).call(this, next.request)
|
|
140
|
+
.then(next.resolve, next.reject)
|
|
141
|
+
.finally(() => {
|
|
142
|
+
__classPrivateFieldGet(this, _RequestWorker_concurrentLimiter, "f").release();
|
|
143
|
+
__classPrivateFieldGet(this, _RequestWorker_instances, "m", _RequestWorker_pump).call(this);
|
|
144
|
+
});
|
|
145
|
+
}, _RequestWorker_schedulePump = function _RequestWorker_schedulePump(waitMs) {
|
|
146
|
+
if (__classPrivateFieldGet(this, _RequestWorker_scheduledPump, "f"))
|
|
147
|
+
return;
|
|
148
|
+
__classPrivateFieldGet(this, _RequestWorker_logger, "f").trace(`Waiting for request scheduler for ${waitMs}ms, until ${new Date(__classPrivateFieldGet(this, _RequestWorker_timeRateLimiter, "f").nextAvailableAt).toISOString()}.`);
|
|
149
|
+
__classPrivateFieldSet(this, _RequestWorker_scheduledPump, setTimeout(() => {
|
|
150
|
+
__classPrivateFieldSet(this, _RequestWorker_scheduledPump, undefined, "f");
|
|
151
|
+
__classPrivateFieldGet(this, _RequestWorker_instances, "m", _RequestWorker_pump).call(this);
|
|
152
|
+
}, waitMs), "f");
|
|
118
153
|
};
|
|
119
154
|
function parseRetryAfter(response, now = Date.now()) {
|
|
120
155
|
const retryAfter = response.headers.get("Retry-After");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../../../src/transport/worker.ts"],"names":[],"mappings":";;;;;;;;;;;;AAEA,OAAO,EAAE,cAAc,EAAsB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../../../src/transport/worker.ts"],"names":[],"mappings":"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"}
|