signalk-charts-provider-simple 2.4.1 → 2.4.2
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/types.d.ts
CHANGED
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,8 +25,11 @@ declare class DownloadManager extends EventEmitter {
|
|
|
25
25
|
private processQueue;
|
|
26
26
|
private processJob;
|
|
27
27
|
private cleanupPartialFiles;
|
|
28
|
+
private partFilePath;
|
|
29
|
+
private partFileSize;
|
|
28
30
|
private downloadWithRetry;
|
|
29
|
-
private
|
|
31
|
+
private downloadToFile;
|
|
32
|
+
private finalizeDownload;
|
|
30
33
|
findJobsByTargetFile(fileName: string): DownloadJob[];
|
|
31
34
|
cancelJob(jobId: string): {
|
|
32
35
|
success: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"download-manager.d.ts","sourceRoot":"","sources":["../../src/utils/download-manager.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"download-manager.d.ts","sourceRoot":"","sources":["../../src/utils/download-manager.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAMnE,qBAAa,sBAAuB,SAAQ,KAAK;gBACnC,OAAO,EAAE,MAAM;CAI5B;AAiFD,UAAU,qBAAqB;IAC7B,aAAa,EAAE,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IAClC,aAAa,EAAE,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IAClC,eAAe,EAAE,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IACpC,YAAY,EAAE,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IACjC,eAAe,EAAE,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;CACrC;AAED,cAAM,eAAgB,SAAQ,YAAY;IACxC,OAAO,CAAC,IAAI,CAA2B;IACvC,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,aAAa,CAAS;;IASrB,IAAI,CAAC,CAAC,SAAS,MAAM,qBAAqB,EACjD,KAAK,EAAE,CAAC,EACR,GAAG,IAAI,EAAE,qBAAqB,CAAC,CAAC,CAAC,GAChC,OAAO;IAID,EAAE,CAAC,CAAC,SAAS,MAAM,qBAAqB,EAC/C,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,qBAAqB,CAAC,CAAC,CAAC,KAAK,IAAI,GACpD,IAAI;IAIE,cAAc,CAAC,CAAC,SAAS,MAAM,qBAAqB,EAC3D,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,qBAAqB,CAAC,CAAC,CAAC,KAAK,IAAI,GACpD,IAAI;IAIP,SAAS,CACP,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,kBAAuB,GAC/B,MAAM;IA0BT,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAI3C,UAAU,IAAI,WAAW,EAAE;IAI3B,aAAa,IAAI,WAAW,EAAE;YAOhB,YAAY;YAiBZ,UAAU;IA4CxB,OAAO,CAAC,mBAAmB;IAgB3B,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,YAAY;YAkBN,iBAAiB;IAwE/B,OAAO,CAAC,cAAc;YA0NR,gBAAgB;IAgH9B,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,EAAE;IAYrD,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;IAkC9D,OAAO,IAAI,IAAI;CAchB;AAED,eAAO,MAAM,eAAe,iBAAwB,CAAC"}
|
|
@@ -4,6 +4,7 @@ import fs from 'fs';
|
|
|
4
4
|
import path from 'path';
|
|
5
5
|
import unzipper from 'unzipper';
|
|
6
6
|
import { EventEmitter } from 'events';
|
|
7
|
+
import { pipeline } from 'stream/promises';
|
|
7
8
|
// A download failure worth retrying: a network error, a timeout, or a 5xx
|
|
8
9
|
// server response. A 4xx (e.g. 404 for a moved/expired catalog link) is NOT
|
|
9
10
|
// transient — retrying just delays a legitimate error — so it stays a plain
|
|
@@ -14,11 +15,68 @@ export class TransientDownloadError extends Error {
|
|
|
14
15
|
this.name = 'TransientDownloadError';
|
|
15
16
|
}
|
|
16
17
|
}
|
|
17
|
-
// Bounded retry for transient download failures. Three attempts
|
|
18
|
-
// short linear backoff handles a flaky
|
|
19
|
-
//
|
|
18
|
+
// Bounded retry for transient download failures. Three consecutive attempts
|
|
19
|
+
// WITHOUT forward progress with a short linear backoff handles a flaky
|
|
20
|
+
// upstream without stalling on a genuinely-gone file; an attempt that did
|
|
21
|
+
// advance the .part file rearms the budget, so a throttled multi-GB source
|
|
22
|
+
// (mediafire stalls mid-transfer, NOAA rate-caps) can be resumed through
|
|
23
|
+
// any number of interruptions as long as bytes keep arriving.
|
|
20
24
|
const MAX_DOWNLOAD_ATTEMPTS = 3;
|
|
21
25
|
const RETRY_BACKOFF_MS = 2000;
|
|
26
|
+
// Redirect ceiling per attempt — guards against a redirect loop from a
|
|
27
|
+
// misbehaving chart source.
|
|
28
|
+
const MAX_REDIRECTS = 10;
|
|
29
|
+
// "bytes 100-999/3657588990" or "bytes */3657588990" → 3657588990.
|
|
30
|
+
function parseContentRangeTotal(header) {
|
|
31
|
+
if (!header) {
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
const m = /\/(\d+)\s*$/.exec(header);
|
|
35
|
+
return m ? parseInt(m[1], 10) : null;
|
|
36
|
+
}
|
|
37
|
+
// "bytes 100-999/3657588990" → 100. Null for "bytes */N" and malformed.
|
|
38
|
+
function parseContentRangeStart(header) {
|
|
39
|
+
if (!header) {
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
const m = /^bytes (\d+)-/.exec(header);
|
|
43
|
+
return m ? parseInt(m[1], 10) : null;
|
|
44
|
+
}
|
|
45
|
+
// Does the URL's *path* end in .zip? Query strings (chart.zip?token=...)
|
|
46
|
+
// and unparseable strings are handled; used only as a claim about what
|
|
47
|
+
// the source intended to serve — the magic-byte check on the body is the
|
|
48
|
+
// authority for how to process it.
|
|
49
|
+
function urlPathLooksLikeZip(url) {
|
|
50
|
+
if (!url) {
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
try {
|
|
54
|
+
return new URL(url).pathname.toLowerCase().endsWith('.zip');
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
return (url.split('?')[0] ?? '').toLowerCase().endsWith('.zip');
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
// ZIP magic: local file header PK\x03\x04 (or the empty-archive marker
|
|
61
|
+
// PK\x05\x06). Extension and Content-Type lie often enough (tokenized
|
|
62
|
+
// download URLs, mislabeled servers) that the file itself is the authority.
|
|
63
|
+
function isZipMagic(filePath) {
|
|
64
|
+
let fd;
|
|
65
|
+
try {
|
|
66
|
+
fd = fs.openSync(filePath, 'r');
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
try {
|
|
72
|
+
const buf = Buffer.alloc(4);
|
|
73
|
+
const n = fs.readSync(fd, buf, 0, 4, 0);
|
|
74
|
+
return n === 4 && buf[0] === 0x50 && buf[1] === 0x4b && (buf[2] === 0x03 || buf[2] === 0x05);
|
|
75
|
+
}
|
|
76
|
+
finally {
|
|
77
|
+
fs.closeSync(fd);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
22
80
|
// cancelJob() marks a job failed with this exact error and emits job-cancelled.
|
|
23
81
|
const CANCELLED_ERROR = 'Cancelled by user';
|
|
24
82
|
function isCancelled(job) {
|
|
@@ -96,6 +154,14 @@ class DownloadManager extends EventEmitter {
|
|
|
96
154
|
job.startedAt = Date.now();
|
|
97
155
|
this.emit('job-updated', job);
|
|
98
156
|
await this.downloadWithRetry(job);
|
|
157
|
+
// A cancel that raced the last await must win over 'completed'.
|
|
158
|
+
// In-flight work has settled here, so sweep anything created after
|
|
159
|
+
// cancelJob()'s own (racy) unlink pass — extraction targets and the
|
|
160
|
+
// recreated .part file included.
|
|
161
|
+
if (isCancelled(job)) {
|
|
162
|
+
this.cleanupPartialFiles(job);
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
99
165
|
job.status = 'completed';
|
|
100
166
|
job.progress = 100;
|
|
101
167
|
job.completedAt = Date.now();
|
|
@@ -103,8 +169,11 @@ class DownloadManager extends EventEmitter {
|
|
|
103
169
|
}
|
|
104
170
|
catch (error) {
|
|
105
171
|
// A cancelled job is already in its terminal state (cancelJob set it and
|
|
106
|
-
// emitted job-cancelled); don't overwrite or re-emit job-failed.
|
|
172
|
+
// emitted job-cancelled); don't overwrite or re-emit job-failed. Do run
|
|
173
|
+
// a final cleanup: the attempt that just ended may have written files
|
|
174
|
+
// after cancelJob()'s unlink pass.
|
|
107
175
|
if (isCancelled(job)) {
|
|
176
|
+
this.cleanupPartialFiles(job);
|
|
108
177
|
return;
|
|
109
178
|
}
|
|
110
179
|
job.status = 'failed';
|
|
@@ -116,7 +185,10 @@ class DownloadManager extends EventEmitter {
|
|
|
116
185
|
}
|
|
117
186
|
}
|
|
118
187
|
cleanupPartialFiles(job) {
|
|
119
|
-
|
|
188
|
+
// Only called on a job's FINAL failure (or cancel) — never between
|
|
189
|
+
// transient retries, where the .part file is the resume state.
|
|
190
|
+
const names = job.partFile ? [...job.targetFiles, job.partFile] : job.targetFiles;
|
|
191
|
+
for (const fileName of names) {
|
|
120
192
|
const filePath = path.join(job.targetDir, fileName);
|
|
121
193
|
try {
|
|
122
194
|
fs.unlinkSync(filePath);
|
|
@@ -126,15 +198,44 @@ class DownloadManager extends EventEmitter {
|
|
|
126
198
|
// file may not exist yet
|
|
127
199
|
}
|
|
128
200
|
}
|
|
201
|
+
job.partFile = undefined;
|
|
202
|
+
}
|
|
203
|
+
partFilePath(job) {
|
|
204
|
+
// job.id is `dl_<ts>_<rand>` — already filesystem-safe, and per-job
|
|
205
|
+
// unique so concurrent jobs in the same targetDir can't collide.
|
|
206
|
+
return path.join(job.targetDir, `${job.id}.part`);
|
|
129
207
|
}
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
208
|
+
partFileSize(partPath) {
|
|
209
|
+
try {
|
|
210
|
+
return fs.statSync(partPath).size;
|
|
211
|
+
}
|
|
212
|
+
catch {
|
|
213
|
+
return 0;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
// Download to a .part file with bounded retries on TRANSIENT failures
|
|
217
|
+
// only (network error, timeout, 5xx). The .part file survives retries:
|
|
218
|
+
// a resumed attempt continues from its current size via an HTTP Range
|
|
219
|
+
// request instead of starting over. Only consecutive attempts with NO
|
|
220
|
+
// forward progress count against the budget. A 4xx (e.g. 404 for a
|
|
221
|
+
// moved/expired catalog link) throws immediately. Between attempts the
|
|
222
|
+
// URL is reset to the original (downloadToFile mutates job.url while
|
|
223
|
+
// following redirects) so a tokenized direct link gets re-resolved from
|
|
224
|
+
// its source. Once the body is complete, finalizeDownload turns the
|
|
225
|
+
// .part file into the final chart file(s).
|
|
135
226
|
async downloadWithRetry(job) {
|
|
136
227
|
const originalUrl = job.originalUrl ?? job.url;
|
|
137
|
-
|
|
228
|
+
if (!job.originalUrl) {
|
|
229
|
+
job.originalUrl = originalUrl;
|
|
230
|
+
}
|
|
231
|
+
const partPath = this.partFilePath(job);
|
|
232
|
+
job.partFile = path.basename(partPath);
|
|
233
|
+
// Shared across attempts: the Content-Type of the response the part
|
|
234
|
+
// file was written from, and the source's ETag/Last-Modified validator
|
|
235
|
+
// for If-Range resumes.
|
|
236
|
+
const state = { contentType: '', validator: '' };
|
|
237
|
+
let attemptsWithoutProgress = 0;
|
|
238
|
+
for (;;) {
|
|
138
239
|
// cancelJob() marks the job failed/'Cancelled by user' but can't abort an
|
|
139
240
|
// in-flight attempt or the backoff timer. Bail before (re)starting so a
|
|
140
241
|
// cancel during a download or backoff isn't overwritten by a later
|
|
@@ -142,229 +243,219 @@ class DownloadManager extends EventEmitter {
|
|
|
142
243
|
if (isCancelled(job)) {
|
|
143
244
|
throw new Error('Cancelled by user');
|
|
144
245
|
}
|
|
246
|
+
const bytesBefore = this.partFileSize(partPath);
|
|
145
247
|
try {
|
|
146
|
-
await this.
|
|
147
|
-
|
|
248
|
+
await this.downloadToFile(job, partPath, state);
|
|
249
|
+
break;
|
|
148
250
|
}
|
|
149
251
|
catch (error) {
|
|
150
252
|
if (isCancelled(job)) {
|
|
151
253
|
throw new Error('Cancelled by user');
|
|
152
254
|
}
|
|
153
|
-
|
|
154
|
-
if (!transient || attempt === MAX_DOWNLOAD_ATTEMPTS) {
|
|
255
|
+
if (!(error instanceof TransientDownloadError)) {
|
|
155
256
|
throw error;
|
|
156
257
|
}
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
258
|
+
// Forward progress fully rearms the budget: an attempt that moved
|
|
259
|
+
// bytes was not "without progress", so the next failure gets the
|
|
260
|
+
// whole MAX_DOWNLOAD_ATTEMPTS streak again.
|
|
261
|
+
const bytesNow = this.partFileSize(partPath);
|
|
262
|
+
attemptsWithoutProgress = bytesNow > bytesBefore ? 0 : attemptsWithoutProgress + 1;
|
|
263
|
+
if (attemptsWithoutProgress >= MAX_DOWNLOAD_ATTEMPTS) {
|
|
264
|
+
throw error;
|
|
265
|
+
}
|
|
266
|
+
console.warn(`[${job.id}] Transient download failure (${attemptsWithoutProgress}/${MAX_DOWNLOAD_ATTEMPTS} without progress): ${error.message}; resuming from ${bytesNow} bytes...`);
|
|
160
267
|
job.url = originalUrl;
|
|
161
|
-
job.downloadedBytes = 0;
|
|
162
|
-
job.progress = 0;
|
|
163
|
-
// A prior attempt may have flipped status to 'extracting' (zip ≥90%);
|
|
164
|
-
// the retry starts in the download phase again, so reset it or the UI
|
|
165
|
-
// shows "0% extracting".
|
|
166
268
|
job.status = 'downloading';
|
|
167
|
-
//
|
|
168
|
-
//
|
|
169
|
-
// retry of a partially-streamed download accumulates duplicate names.
|
|
269
|
+
// Extraction only runs after the download completes, so these are
|
|
270
|
+
// always safe to reset on a retry.
|
|
170
271
|
job.targetFiles = [];
|
|
171
272
|
job.extractedFiles = [];
|
|
172
|
-
await new Promise((r) => setTimeout(r, RETRY_BACKOFF_MS *
|
|
273
|
+
await new Promise((r) => setTimeout(r, RETRY_BACKOFF_MS * Math.max(1, attemptsWithoutProgress)));
|
|
173
274
|
}
|
|
174
275
|
}
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
if (
|
|
178
|
-
|
|
276
|
+
// A cancel that landed during the final (successful) attempt must not
|
|
277
|
+
// be overwritten by finalization/completion.
|
|
278
|
+
if (isCancelled(job)) {
|
|
279
|
+
throw new Error('Cancelled by user');
|
|
179
280
|
}
|
|
281
|
+
await this.finalizeDownload(job, partPath, state.contentType);
|
|
282
|
+
}
|
|
283
|
+
// One HTTP attempt: stream the response body onto the end of `partPath`.
|
|
284
|
+
// Sends a Range request when the part file already has bytes — with
|
|
285
|
+
// If-Range when the source gave us an ETag/Last-Modified, so a source
|
|
286
|
+
// that changed between attempts answers 200 (full body) and we rewrite
|
|
287
|
+
// instead of appending version-B bytes onto version-A data. Handles
|
|
288
|
+
// servers that ignore Range (200 → rewrite the file from scratch) and
|
|
289
|
+
// 416 (part already complete, or stale → drop it and let the retry
|
|
290
|
+
// start over). A premature connection close is a TransientDownloadError
|
|
291
|
+
// so the caller resumes; fs errors stay plain Errors and fail fast.
|
|
292
|
+
// Mutates `state` with the Content-Type and validator of the response
|
|
293
|
+
// the part file was written from.
|
|
294
|
+
downloadToFile(job, partPath, state, redirects = 0) {
|
|
180
295
|
return new Promise((resolve, reject) => {
|
|
296
|
+
const startByte = this.partFileSize(partPath);
|
|
181
297
|
const protocol = job.url.startsWith('https') ? https : http;
|
|
182
|
-
|
|
298
|
+
const headers = {};
|
|
299
|
+
if (startByte > 0) {
|
|
300
|
+
headers.Range = `bytes=${String(startByte)}-`;
|
|
301
|
+
if (state.validator) {
|
|
302
|
+
headers['If-Range'] = state.validator;
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
console.log(`[${job.id}] Starting download from: ${job.url} (offset ${String(startByte)})`);
|
|
183
306
|
const req = protocol
|
|
184
|
-
.get(job.url, { timeout: 60000 }, (response) => {
|
|
185
|
-
|
|
307
|
+
.get(job.url, { timeout: 60000, headers }, (response) => {
|
|
308
|
+
const status = response.statusCode ?? 0;
|
|
309
|
+
if (status === 301 ||
|
|
310
|
+
status === 302 ||
|
|
311
|
+
status === 303 ||
|
|
312
|
+
status === 307 ||
|
|
313
|
+
status === 308) {
|
|
186
314
|
const redirectUrl = response.headers.location;
|
|
315
|
+
response.resume(); // drain so the socket can be reused/freed
|
|
187
316
|
if (redirectUrl) {
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
317
|
+
if (redirects >= MAX_REDIRECTS) {
|
|
318
|
+
reject(new Error('Too many redirects'));
|
|
319
|
+
return;
|
|
320
|
+
}
|
|
321
|
+
// Location may be relative — resolve against the URL that
|
|
322
|
+
// produced the redirect.
|
|
323
|
+
let resolvedUrl;
|
|
324
|
+
try {
|
|
325
|
+
resolvedUrl = new URL(redirectUrl, job.url).toString();
|
|
326
|
+
}
|
|
327
|
+
catch {
|
|
328
|
+
reject(new Error(`Invalid redirect location: ${redirectUrl}`));
|
|
329
|
+
return;
|
|
330
|
+
}
|
|
331
|
+
console.log(`[${job.id}] Following redirect to: ${resolvedUrl}`);
|
|
332
|
+
job.url = resolvedUrl;
|
|
333
|
+
this.downloadToFile(job, partPath, state, redirects + 1)
|
|
334
|
+
.then(resolve)
|
|
335
|
+
.catch(reject);
|
|
191
336
|
return;
|
|
192
337
|
}
|
|
193
338
|
}
|
|
194
|
-
if (
|
|
195
|
-
|
|
339
|
+
if (status === 416) {
|
|
340
|
+
// Range not satisfiable: either the part file already holds the
|
|
341
|
+
// complete body (offset === total) or it's stale relative to
|
|
342
|
+
// the source. "bytes */<total>" disambiguates; stale parts are
|
|
343
|
+
// dropped so the retry starts from zero.
|
|
344
|
+
response.resume();
|
|
345
|
+
const total = parseContentRangeTotal(response.headers['content-range']);
|
|
346
|
+
if (total !== null && total === startByte) {
|
|
347
|
+
// state.contentType deliberately keeps the value from the
|
|
348
|
+
// response the bytes were actually written from — a 416's
|
|
349
|
+
// own Content-Type describes the error body, not the chart.
|
|
350
|
+
job.downloadedBytes = startByte;
|
|
351
|
+
job.totalBytes = total;
|
|
352
|
+
resolve();
|
|
353
|
+
return;
|
|
354
|
+
}
|
|
355
|
+
try {
|
|
356
|
+
fs.unlinkSync(partPath);
|
|
357
|
+
}
|
|
358
|
+
catch {
|
|
359
|
+
// already gone
|
|
360
|
+
}
|
|
361
|
+
reject(new TransientDownloadError(`HTTP 416 at offset ${String(startByte)}; restarting`));
|
|
362
|
+
return;
|
|
363
|
+
}
|
|
364
|
+
const resumed = status === 206 && startByte > 0;
|
|
365
|
+
if (resumed) {
|
|
366
|
+
// Trust but verify: appending a 206 body that doesn't start
|
|
367
|
+
// exactly at our offset would silently corrupt the file.
|
|
368
|
+
const rangeStart = parseContentRangeStart(response.headers['content-range']);
|
|
369
|
+
if (rangeStart !== startByte) {
|
|
370
|
+
response.resume();
|
|
371
|
+
try {
|
|
372
|
+
fs.unlinkSync(partPath);
|
|
373
|
+
}
|
|
374
|
+
catch {
|
|
375
|
+
// already gone
|
|
376
|
+
}
|
|
377
|
+
reject(new TransientDownloadError(`Server resumed at ${String(rangeStart ?? 'unknown')} instead of ${String(startByte)}; restarting`));
|
|
378
|
+
return;
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
if (status !== 200 && !resumed) {
|
|
196
382
|
response.resume(); // drain so the socket can be reused/freed
|
|
197
383
|
// 5xx = server-side hiccup, worth a retry; 4xx (incl. 404 for a
|
|
198
384
|
// moved/expired catalog link) is permanent — fail fast.
|
|
199
|
-
const msg = `HTTP ${status}`;
|
|
385
|
+
const msg = `HTTP ${String(status)}`;
|
|
200
386
|
reject(status >= 500 ? new TransientDownloadError(msg) : new Error(msg));
|
|
201
387
|
return;
|
|
202
388
|
}
|
|
203
|
-
|
|
204
|
-
|
|
389
|
+
// A 200 answer to a Range request means the server ignored the
|
|
390
|
+
// header — write the file from scratch rather than appending a
|
|
391
|
+
// second copy of the body onto the partial one.
|
|
392
|
+
const appendFrom = resumed ? startByte : 0;
|
|
393
|
+
const totalBytes = resumed
|
|
394
|
+
? (parseContentRangeTotal(response.headers['content-range']) ?? 0)
|
|
395
|
+
: parseInt(response.headers['content-length'] ?? '0') || 0;
|
|
396
|
+
job.totalBytes = totalBytes;
|
|
397
|
+
job.downloadedBytes = appendFrom;
|
|
205
398
|
const contentType = response.headers['content-type'] ?? '';
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
399
|
+
state.contentType = contentType;
|
|
400
|
+
// Remember the source's validator so the next resume can send
|
|
401
|
+
// If-Range: a changed source then answers 200 (full body) and
|
|
402
|
+
// the rewrite path below keeps the file consistent.
|
|
403
|
+
state.validator = response.headers.etag ?? response.headers['last-modified'] ?? '';
|
|
404
|
+
console.log(`[${job.id}] ${resumed ? `Resuming at byte ${String(startByte)}` : 'Downloading'}; Content-Type: ${contentType}, total: ${totalBytes > 0 ? String(totalBytes) : 'unknown'} bytes`);
|
|
405
|
+
// Archives cap at 90% — finalizeDownload owns 90-100 for the
|
|
406
|
+
// extraction phase; raw saves and direct files run to 100.
|
|
407
|
+
const looksLikeZip = !job.saveRaw &&
|
|
408
|
+
(contentType.includes('zip') ||
|
|
409
|
+
urlPathLooksLikeZip(job.originalUrl) ||
|
|
410
|
+
urlPathLooksLikeZip(job.url));
|
|
411
|
+
const cap = looksLikeZip ? 90 : 100;
|
|
412
|
+
let receivedThisAttempt = 0;
|
|
210
413
|
response.on('data', (chunk) => {
|
|
211
|
-
|
|
212
|
-
job.downloadedBytes =
|
|
213
|
-
if (
|
|
214
|
-
|
|
215
|
-
job.progress = Math.min(90, Math.floor((downloadedBytes / contentLength) * 90));
|
|
216
|
-
if (job.progress >= 90 && job.status === 'downloading') {
|
|
217
|
-
job.status = 'extracting';
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
else {
|
|
221
|
-
job.progress = Math.floor((downloadedBytes / contentLength) * 100);
|
|
222
|
-
}
|
|
414
|
+
receivedThisAttempt += chunk.length;
|
|
415
|
+
job.downloadedBytes = appendFrom + receivedThisAttempt;
|
|
416
|
+
if (job.totalBytes > 0) {
|
|
417
|
+
job.progress = Math.min(cap, Math.floor((job.downloadedBytes / job.totalBytes) * cap));
|
|
223
418
|
}
|
|
224
419
|
this.emit('job-updated', job);
|
|
225
420
|
});
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
.on('entry', (entry) => {
|
|
232
|
-
const fileName = entry.path;
|
|
233
|
-
const type = entry.type;
|
|
234
|
-
if (type === 'File' && fileName.endsWith('.mbtiles')) {
|
|
235
|
-
const targetPath = path.join(job.targetDir, path.basename(fileName));
|
|
236
|
-
const targetFileName = path.basename(fileName);
|
|
237
|
-
console.log(`[${job.id}] Extracting: ${fileName} to ${targetPath}`);
|
|
238
|
-
job.targetFiles.push(targetFileName);
|
|
239
|
-
this.emit('job-updated', job);
|
|
240
|
-
const extractPromise = new Promise((resolveExtract, rejectExtract) => {
|
|
241
|
-
const writeStream = fs.createWriteStream(targetPath);
|
|
242
|
-
// 'close' fires even after 'error' (emitClose default);
|
|
243
|
-
// don't count a failed write as an extracted file.
|
|
244
|
-
let writeFailed = false;
|
|
245
|
-
writeStream
|
|
246
|
-
.on('close', () => {
|
|
247
|
-
if (writeFailed) {
|
|
248
|
-
return;
|
|
249
|
-
}
|
|
250
|
-
console.log(`[${job.id}] Extracted: ${fileName}`);
|
|
251
|
-
job.extractedFiles.push(path.basename(fileName));
|
|
252
|
-
resolveExtract();
|
|
253
|
-
})
|
|
254
|
-
.on('error', (err) => {
|
|
255
|
-
writeFailed = true;
|
|
256
|
-
console.error(`[${job.id}] Error writing ${fileName}:`, err);
|
|
257
|
-
// pipe() unpipes on destination error and leaves the
|
|
258
|
-
// entry paused, which would stall the zip parser and
|
|
259
|
-
// keep 'finish' (where the job's failure is decided)
|
|
260
|
-
// from ever firing. Drain the entry so the stream
|
|
261
|
-
// keeps flowing and the job fails instead of hanging.
|
|
262
|
-
// The drain stream's own errors must be observed too
|
|
263
|
-
// — an unlistened 'error' on it would crash the
|
|
264
|
-
// process; the parser's error handler already fails
|
|
265
|
-
// the job for a corrupt archive.
|
|
266
|
-
void entry
|
|
267
|
-
.autodrain()
|
|
268
|
-
.promise()
|
|
269
|
-
.catch(() => undefined);
|
|
270
|
-
rejectExtract(err);
|
|
271
|
-
});
|
|
272
|
-
entry.pipe(writeStream);
|
|
273
|
-
});
|
|
274
|
-
// Observe the rejection immediately: Promise.all() below
|
|
275
|
-
// only attaches at the zip stream's 'finish', so an
|
|
276
|
-
// earlier write failure would surface as a process-level
|
|
277
|
-
// unhandled rejection (seen as plugin status "Unhandled
|
|
278
|
-
// rejection: ENOENT ..." when the quarantine dir vanished
|
|
279
|
-
// mid-extraction). The real error still propagates through
|
|
280
|
-
// Promise.all on the original promise.
|
|
281
|
-
extractPromise.catch(() => undefined);
|
|
282
|
-
extractionPromises.push(extractPromise);
|
|
283
|
-
}
|
|
284
|
-
else {
|
|
285
|
-
void entry
|
|
286
|
-
.autodrain()
|
|
287
|
-
.promise()
|
|
288
|
-
.catch(() => undefined);
|
|
289
|
-
}
|
|
290
|
-
})
|
|
291
|
-
.on('finish', () => {
|
|
292
|
-
void (async () => {
|
|
293
|
-
try {
|
|
294
|
-
await Promise.all(extractionPromises);
|
|
295
|
-
console.log(`[${job.id}] Extraction complete. Files: ${job.extractedFiles.join(', ')}`);
|
|
296
|
-
if (job.extractedFiles.length === 0) {
|
|
297
|
-
reject(new Error('No .mbtiles files found in archive'));
|
|
298
|
-
}
|
|
299
|
-
else {
|
|
300
|
-
job.progress = 100;
|
|
301
|
-
resolve();
|
|
302
|
-
}
|
|
303
|
-
}
|
|
304
|
-
catch (error) {
|
|
305
|
-
console.error(`[${job.id}] Error during extraction:`, error);
|
|
306
|
-
reject(error);
|
|
307
|
-
}
|
|
308
|
-
})();
|
|
309
|
-
})
|
|
310
|
-
.on('error', (error) => {
|
|
311
|
-
console.error(`[${job.id}] Extraction error:`, error);
|
|
312
|
-
reject(error);
|
|
313
|
-
});
|
|
314
|
-
}
|
|
315
|
-
else {
|
|
316
|
-
console.log(`[${job.id}] Processing as direct file (saveRaw: ${String(job.saveRaw)})...`);
|
|
317
|
-
let fileName;
|
|
318
|
-
if (job.saveRaw) {
|
|
319
|
-
fileName = path.basename(job.originalUrl ?? job.url).split('?')[0];
|
|
320
|
-
if (job.chartName && job.chartName.trim()) {
|
|
321
|
-
const ext = path.extname(fileName) || '.zip';
|
|
322
|
-
fileName = job.chartName.trim() + ext;
|
|
323
|
-
}
|
|
421
|
+
const fileStream = fs.createWriteStream(partPath, { flags: resumed ? 'a' : 'w' });
|
|
422
|
+
let settled = false;
|
|
423
|
+
const fail = (err) => {
|
|
424
|
+
if (settled) {
|
|
425
|
+
return;
|
|
324
426
|
}
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
427
|
+
settled = true;
|
|
428
|
+
// Whatever was flushed stays in the part file — the next
|
|
429
|
+
// attempt resumes from its on-disk size.
|
|
430
|
+
fileStream.destroy();
|
|
431
|
+
response.destroy();
|
|
432
|
+
reject(err);
|
|
433
|
+
};
|
|
434
|
+
fileStream.on('error', (err) => {
|
|
435
|
+
// fs-level failure (ENOENT/ENOSPC/perms): not transient.
|
|
436
|
+
fail(err);
|
|
437
|
+
});
|
|
438
|
+
response.on('aborted', () => {
|
|
439
|
+
fail(new TransientDownloadError('Connection closed mid-transfer'));
|
|
440
|
+
});
|
|
441
|
+
response.on('error', (err) => {
|
|
442
|
+
fail(new TransientDownloadError(err.message));
|
|
443
|
+
});
|
|
444
|
+
fileStream.on('finish', () => {
|
|
445
|
+
if (settled) {
|
|
446
|
+
return;
|
|
330
447
|
}
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
448
|
+
settled = true;
|
|
449
|
+
// Truncation guard: a keep-alive server can end the body short
|
|
450
|
+
// without an 'aborted'/'error' event.
|
|
451
|
+
const received = appendFrom + receivedThisAttempt;
|
|
452
|
+
if (job.totalBytes > 0 && received < job.totalBytes) {
|
|
453
|
+
reject(new TransientDownloadError(`Connection closed early (${String(received)} of ${String(job.totalBytes)} bytes)`));
|
|
454
|
+
return;
|
|
336
455
|
}
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
// for any future non-route caller — but it keeps the write
|
|
341
|
-
// inside targetDir regardless. Reuse the basenamed value for
|
|
342
|
-
// targetFiles so the cancel/cleanup unlink paths reference the
|
|
343
|
-
// file that was actually written.
|
|
344
|
-
const safeFileName = path.basename(fileName);
|
|
345
|
-
const targetPath = path.join(job.targetDir, safeFileName);
|
|
346
|
-
job.targetFiles.push(safeFileName);
|
|
347
|
-
this.emit('job-updated', job);
|
|
348
|
-
const fileStream = fs.createWriteStream(targetPath);
|
|
349
|
-
response.pipe(fileStream);
|
|
350
|
-
fileStream.on('finish', () => {
|
|
351
|
-
fileStream.close();
|
|
352
|
-
console.log(`[${job.id}] Downloaded: ${fileName}`);
|
|
353
|
-
job.extractedFiles.push(path.basename(targetPath));
|
|
354
|
-
job.progress = 100;
|
|
355
|
-
resolve();
|
|
356
|
-
});
|
|
357
|
-
fileStream.on('error', (error) => {
|
|
358
|
-
fs.unlink(targetPath, () => { });
|
|
359
|
-
reject(error);
|
|
360
|
-
});
|
|
361
|
-
response.on('error', () => {
|
|
362
|
-
fileStream.destroy();
|
|
363
|
-
});
|
|
364
|
-
response.on('aborted', () => {
|
|
365
|
-
fileStream.destroy();
|
|
366
|
-
});
|
|
367
|
-
}
|
|
456
|
+
resolve();
|
|
457
|
+
});
|
|
458
|
+
response.pipe(fileStream);
|
|
368
459
|
})
|
|
369
460
|
.on('error', (error) => {
|
|
370
461
|
console.error(`[${job.id}] Download error:`, error);
|
|
@@ -377,6 +468,105 @@ class DownloadManager extends EventEmitter {
|
|
|
377
468
|
});
|
|
378
469
|
});
|
|
379
470
|
}
|
|
471
|
+
// The body is fully on disk — turn the .part file into the final chart
|
|
472
|
+
// file(s). Archives are detected by magic bytes (tokenized URLs and
|
|
473
|
+
// mislabeled servers make extension/Content-Type unreliable) and
|
|
474
|
+
// extracted via the zip central directory: random access on a complete
|
|
475
|
+
// file, no streaming parser to stall, and sequential entry writes so
|
|
476
|
+
// duplicate basenames can't clobber each other from concurrent streams.
|
|
477
|
+
async finalizeDownload(job, partPath, contentType) {
|
|
478
|
+
const looksLikeZip = contentType.includes('zip') ||
|
|
479
|
+
urlPathLooksLikeZip(job.originalUrl) ||
|
|
480
|
+
urlPathLooksLikeZip(job.url);
|
|
481
|
+
if (!job.saveRaw && isZipMagic(partPath)) {
|
|
482
|
+
job.status = 'extracting';
|
|
483
|
+
job.progress = Math.max(job.progress, 90);
|
|
484
|
+
this.emit('job-updated', job);
|
|
485
|
+
const directory = await unzipper.Open.file(partPath);
|
|
486
|
+
const entries = directory.files.filter((f) => f.type === 'File' && f.path.endsWith('.mbtiles'));
|
|
487
|
+
if (entries.length === 0) {
|
|
488
|
+
fs.unlinkSync(partPath);
|
|
489
|
+
job.partFile = undefined;
|
|
490
|
+
throw new Error('No .mbtiles files found in archive');
|
|
491
|
+
}
|
|
492
|
+
let done = 0;
|
|
493
|
+
// Entry paths are flattened to basenames, so region-a/chart.mbtiles
|
|
494
|
+
// and region-b/chart.mbtiles would land on the same target — keep
|
|
495
|
+
// every chart by uniquifying collisions (chart.mbtiles, chart-2...).
|
|
496
|
+
const usedNames = new Set();
|
|
497
|
+
for (const entry of entries) {
|
|
498
|
+
let targetFileName = path.basename(entry.path);
|
|
499
|
+
if (usedNames.has(targetFileName)) {
|
|
500
|
+
const ext = path.extname(targetFileName);
|
|
501
|
+
const stem = ext ? targetFileName.slice(0, -ext.length) : targetFileName;
|
|
502
|
+
let suffix = 2;
|
|
503
|
+
while (usedNames.has(`${stem}-${String(suffix)}${ext}`)) {
|
|
504
|
+
suffix += 1;
|
|
505
|
+
}
|
|
506
|
+
targetFileName = `${stem}-${String(suffix)}${ext}`;
|
|
507
|
+
console.log(`[${job.id}] Duplicate basename in archive; extracting ${entry.path} as ${targetFileName}`);
|
|
508
|
+
}
|
|
509
|
+
usedNames.add(targetFileName);
|
|
510
|
+
const targetPath = path.join(job.targetDir, targetFileName);
|
|
511
|
+
console.log(`[${job.id}] Extracting: ${entry.path} to ${targetPath}`);
|
|
512
|
+
job.targetFiles.push(targetFileName);
|
|
513
|
+
this.emit('job-updated', job);
|
|
514
|
+
await pipeline(entry.stream(), fs.createWriteStream(targetPath));
|
|
515
|
+
job.extractedFiles.push(targetFileName);
|
|
516
|
+
done += 1;
|
|
517
|
+
job.progress = 90 + Math.floor((done / entries.length) * 10);
|
|
518
|
+
this.emit('job-updated', job);
|
|
519
|
+
}
|
|
520
|
+
console.log(`[${job.id}] Extraction complete. Files: ${job.extractedFiles.join(', ')}`);
|
|
521
|
+
fs.unlinkSync(partPath);
|
|
522
|
+
job.partFile = undefined;
|
|
523
|
+
return;
|
|
524
|
+
}
|
|
525
|
+
if (!job.saveRaw && looksLikeZip) {
|
|
526
|
+
// The source claimed a zip but the bytes aren't one (typically an
|
|
527
|
+
// HTML error page from an expired share link). Failing beats
|
|
528
|
+
// renaming junk to .mbtiles and calling the job completed.
|
|
529
|
+
fs.unlinkSync(partPath);
|
|
530
|
+
job.partFile = undefined;
|
|
531
|
+
throw new Error('Downloaded file is not a valid ZIP archive');
|
|
532
|
+
}
|
|
533
|
+
console.log(`[${job.id}] Processing as direct file (saveRaw: ${String(job.saveRaw)})...`);
|
|
534
|
+
let fileName;
|
|
535
|
+
if (job.saveRaw) {
|
|
536
|
+
fileName = path.basename(job.originalUrl ?? job.url).split('?')[0];
|
|
537
|
+
if (job.chartName && job.chartName.trim()) {
|
|
538
|
+
const ext = path.extname(fileName) || '.zip';
|
|
539
|
+
fileName = job.chartName.trim() + ext;
|
|
540
|
+
}
|
|
541
|
+
}
|
|
542
|
+
else if (job.chartName && job.chartName.trim()) {
|
|
543
|
+
fileName = job.chartName.trim();
|
|
544
|
+
if (!fileName.endsWith('.mbtiles')) {
|
|
545
|
+
fileName += '.mbtiles';
|
|
546
|
+
}
|
|
547
|
+
}
|
|
548
|
+
else {
|
|
549
|
+
fileName = path.basename(job.originalUrl ?? job.url).split('?')[0];
|
|
550
|
+
if (!fileName.endsWith('.mbtiles')) {
|
|
551
|
+
fileName += '.mbtiles';
|
|
552
|
+
}
|
|
553
|
+
}
|
|
554
|
+
// Strip any directory component before joining. The route handlers
|
|
555
|
+
// already reject unsafe chartName/chartNumber with a 400, so this only
|
|
556
|
+
// fires for any future non-route caller — but it keeps the write
|
|
557
|
+
// inside targetDir regardless. Reuse the basenamed value for
|
|
558
|
+
// targetFiles so the cancel/cleanup unlink paths reference the file
|
|
559
|
+
// that was actually written.
|
|
560
|
+
const safeFileName = path.basename(fileName);
|
|
561
|
+
const targetPath = path.join(job.targetDir, safeFileName);
|
|
562
|
+
job.targetFiles.push(safeFileName);
|
|
563
|
+
this.emit('job-updated', job);
|
|
564
|
+
fs.renameSync(partPath, targetPath);
|
|
565
|
+
job.partFile = undefined;
|
|
566
|
+
console.log(`[${job.id}] Downloaded: ${safeFileName}`);
|
|
567
|
+
job.extractedFiles.push(safeFileName);
|
|
568
|
+
job.progress = 100;
|
|
569
|
+
}
|
|
380
570
|
findJobsByTargetFile(fileName) {
|
|
381
571
|
const result = [];
|
|
382
572
|
for (const job of this.jobs.values()) {
|
|
@@ -399,8 +589,9 @@ class DownloadManager extends EventEmitter {
|
|
|
399
589
|
job.status = 'failed';
|
|
400
590
|
job.error = 'Cancelled by user';
|
|
401
591
|
job.completedAt = Date.now();
|
|
402
|
-
|
|
403
|
-
|
|
592
|
+
const cancelNames = job.partFile ? [...job.targetFiles, job.partFile] : job.targetFiles;
|
|
593
|
+
if (cancelNames.length > 0) {
|
|
594
|
+
cancelNames.forEach((fn) => {
|
|
404
595
|
const filePath = path.join(job.targetDir, fn);
|
|
405
596
|
fs.unlink(filePath, (err) => {
|
|
406
597
|
if (err && err.code !== 'ENOENT') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"download-manager.js","sourceRoot":"","sources":["../../src/utils/download-manager.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"download-manager.js","sourceRoot":"","sources":["../../src/utils/download-manager.ts"],"names":[],"mappings":"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"}
|