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
@@ -126,6 +126,7 @@ export interface DownloadJob {
126
126
  totalBytes: number;
127
127
  extractedFiles: string[];
128
128
  targetFiles: string[];
129
+ partFile?: string;
129
130
  createdAt: number;
130
131
  startedAt?: number;
131
132
  completedAt?: number;
@@ -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":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAM/D,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAMrF,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,OAAO,CAAC;IACb,eAAe,IAAI,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,iBAAkB,SAAQ,SAAS;IAClD,MAAM,EAAE,YAAY,CAAC;CACtB;AAID,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,WAAW,CAAC;AACtD,MAAM,MAAM,SAAS,GAAG,WAAW,GAAG,MAAM,CAAC;AAE7C,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,eAAe,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,aAAa,CAAC;IAC/B,MAAM,EAAE,OAAO,CAAC;IAEhB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAC7B,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,EAAE,EAAE,WAAW,CAAC;IAChB,EAAE,EAAE,WAAW,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAC7B,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAUD,MAAM,MAAM,YAAY,GAAG,gBAAgB,CAAC;AAE5C,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,4EAA4E;IAC5E,UAAU,EAAE,MAAM,CAAC;IACnB,6BAA6B;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,4EAA4E;IAC5E,YAAY,EAAE,MAAM,CAAC;IACrB,uDAAuD;IACvD,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,YAAY,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,kEAAkE;IAClE,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAAC;CACnC;AAID,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,WAAW,EAAE,CAAC;IAC9B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAID,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,aAAa,GAAG,YAAY,GAAG,WAAW,GAAG,QAAQ,CAAC;AAEjG,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,WAAW,EAAE,MAAM,EAAE,CAAC;IAItB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AASD,YAAY,EACV,eAAe,EACf,YAAY,EACZ,WAAW,EACX,aAAa,EACb,cAAc,EACd,kBAAkB,EAClB,oBAAoB,EACrB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAEvE,MAAM,WAAW,mBAAoB,SAAQ,oBAAoB;IAC/D,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAMD,MAAM,MAAM,mBAAmB,GAAG,IAAI,GAAG,cAAc,GAAG,OAAO,GAAG,OAAO,CAAC;AAE5E,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,mBAAmB,CAAC;IAC5B,aAAa,EAAE,OAAO,CAAC;IACvB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,MAAM,MAAM,SAAS,GACjB,SAAS,GACT,KAAK,GACL,SAAS,GACT,SAAS,GACT,OAAO,GACP,WAAW,GACX,aAAa,GACb,KAAK,GACL,KAAK,GACL,SAAS,CAAC;AAEd,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,SAAS,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,uGAAuG;IACvG,eAAe,EAAE,MAAM,CAAC;CACzB;AAID,MAAM,MAAM,gBAAgB,GAC1B,UAAU,GAAG,SAAS,GAAG,YAAY,GAAG,YAAY,GAAG,WAAW,GAAG,QAAQ,CAAC;AAEhF,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,EAAE,CAAC;CACf;AAED,MAAM,MAAM,qBAAqB,GAAG,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;AAIvE,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,iBAAiB;IAChC,yEAAyE;IACzE,KAAK,EAAE,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;IACnC,2CAA2C;IAC3C,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,+DAA+D;IAC/D,WAAW,EAAE,MAAM,CAAC;IACpB,mEAAmE;IACnE,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;OAIG;IACH,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACnD;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC;IAC1B;;;;OAIG;IACH,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,IAAI,CAAC;CACpC;AAED,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAID,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAID,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;AAI5D,MAAM,MAAM,cAAc,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;AACvE,MAAM,MAAM,aAAa,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;AAIzD,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,EAAE;QACR,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;QACjB,UAAU,CAAC,EAAE,KAAK,CAAC;YAAE,CAAC,CAAC,EAAE;gBAAE,SAAS,CAAC,EAAE,MAAM,CAAA;aAAE,CAAA;SAAE,CAAC,CAAC;QACnD,WAAW,CAAC,EAAE,KAAK,CAAC;YAClB,CAAC,CAAC,EAAE;gBAAE,IAAI,CAAC,EAAE,MAAM,CAAC;gBAAC,IAAI,CAAC,EAAE,MAAM,CAAC;gBAAC,IAAI,CAAC,EAAE,MAAM,CAAC;gBAAC,IAAI,CAAC,EAAE,MAAM,CAAA;aAAE,CAAC;SACpE,CAAC,CAAC;QACH,QAAQ,CAAC,EAAE,KAAK,CAAC;YAAE,OAAO,CAAC,EAAE,KAAK,CAAC;gBAAE,CAAC,CAAC,EAAE;oBAAE,IAAI,CAAC,EAAE,MAAM,CAAA;iBAAE,CAAA;aAAE,CAAC,CAAA;SAAE,CAAC,CAAC;QACjE,QAAQ,CAAC,EAAE,KAAK,CAAC;YAAE,CAAC,CAAC,EAAE;gBAAE,KAAK,CAAC,EAAE,MAAM,CAAA;aAAE,CAAA;SAAE,CAAC,CAAC;KAC9C,CAAC;CACH;AAID,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC"}
@@ -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 downloadAndExtract;
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;AACtC,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAMnE,qBAAa,sBAAuB,SAAQ,KAAK;gBACnC,OAAO,EAAE,MAAM;CAI5B;AAcD,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;IAiCxB,OAAO,CAAC,mBAAmB;YAiBb,iBAAiB;YA2CjB,kBAAkB;IAyOhC,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;IAiC9D,OAAO,IAAI,IAAI;CAchB;AAED,eAAO,MAAM,eAAe,iBAAwB,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 total with a
18
- // short linear backoff handles a flaky upstream (the chart sources are
19
- // third-party government servers) without stalling on a genuinely-gone file.
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
- for (const fileName of job.targetFiles) {
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
- // Run downloadAndExtract with bounded retries on TRANSIENT failures only
131
- // (network error, timeout, 5xx). A 4xx (e.g. 404 for an expired catalog
132
- // link) throws immediately. Between attempts, partial files are removed and
133
- // the URL is reset to the original (downloadAndExtract mutates job.url while
134
- // following redirects).
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
- for (let attempt = 1; attempt <= MAX_DOWNLOAD_ATTEMPTS; attempt++) {
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.downloadAndExtract(job);
147
- return;
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
- const transient = error instanceof TransientDownloadError;
154
- if (!transient || attempt === MAX_DOWNLOAD_ATTEMPTS) {
255
+ if (!(error instanceof TransientDownloadError)) {
155
256
  throw error;
156
257
  }
157
- const msg = error instanceof Error ? error.message : String(error);
158
- console.warn(`[${job.id}] Transient download failure (attempt ${attempt}/${MAX_DOWNLOAD_ATTEMPTS}): ${msg}; retrying...`);
159
- this.cleanupPartialFiles(job);
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
- // downloadAndExtract pushes onto these as files/zip-entries arrive, so
168
- // clear them (after cleanupPartialFiles has used targetFiles) — else a
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 * attempt));
273
+ await new Promise((r) => setTimeout(r, RETRY_BACKOFF_MS * Math.max(1, attemptsWithoutProgress)));
173
274
  }
174
275
  }
175
- }
176
- async downloadAndExtract(job) {
177
- if (!job.originalUrl) {
178
- job.originalUrl = job.url;
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
- console.log(`[${job.id}] Starting download from: ${job.url}`);
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
- if (response.statusCode === 301 || response.statusCode === 302) {
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
- console.log(`[${job.id}] Following redirect to: ${redirectUrl}`);
189
- job.url = redirectUrl;
190
- this.downloadAndExtract(job).then(resolve).catch(reject);
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 (response.statusCode !== 200) {
195
- const status = response.statusCode ?? 0;
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
- const contentLength = parseInt(response.headers['content-length'] ?? '0');
204
- job.totalBytes = contentLength;
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
- console.log(`[${job.id}] Content-Type: ${contentType}, Size: ${contentLength} bytes`);
207
- let downloadedBytes = 0;
208
- const isZip = !job.saveRaw &&
209
- (contentType.includes('zip') || (job.originalUrl ?? job.url).endsWith('.zip'));
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
- downloadedBytes += chunk.length;
212
- job.downloadedBytes = downloadedBytes;
213
- if (contentLength > 0) {
214
- if (isZip) {
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
- if (isZip) {
227
- console.log(`[${job.id}] Processing as ZIP file...`);
228
- const extractionPromises = [];
229
- response
230
- .pipe(unzipper.Parse())
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
- else if (job.chartName && job.chartName.trim()) {
326
- fileName = job.chartName.trim();
327
- if (!fileName.endsWith('.mbtiles')) {
328
- fileName += '.mbtiles';
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
- else {
332
- fileName = path.basename(job.originalUrl ?? job.url).split('?')[0];
333
- if (!fileName.endsWith('.mbtiles')) {
334
- fileName += '.mbtiles';
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
- // Strip any directory component before joining, the same way
338
- // the ZIP branch above does. The route handlers already reject
339
- // unsafe chartName/chartNumber with a 400, so this only fires
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
- if (job.targetFiles && job.targetFiles.length > 0) {
403
- job.targetFiles.forEach((fn) => {
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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "signalk-charts-provider-simple",
3
- "version": "2.4.1",
3
+ "version": "2.4.2",
4
4
  "description": "Simple Signal K chart provider for local MBTiles with web and download management",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",