@juzi/file-box 1.7.4 → 1.7.6

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.
@@ -1,8 +1,22 @@
1
+ import assert from 'assert';
2
+ import { randomUUID } from 'crypto';
3
+ import { once } from 'events';
4
+ import { createReadStream, createWriteStream } from 'fs';
5
+ import { rm } from 'fs/promises';
1
6
  import http from 'http';
2
7
  import https from 'https';
8
+ import { tmpdir } from 'os';
9
+ import { join } from 'path';
3
10
  import { URL } from 'url';
4
- import { PassThrough, pipeline } from 'stream';
5
- import { HTTP_CHUNK_SIZE, HTTP_TIMEOUT } from './config.js';
11
+ import { HTTP_CHUNK_SIZE, HTTP_TIMEOUT, NO_SLICE_DOWN } from './config.js';
12
+ const protocolMap = {
13
+ 'http:': { agent: http.globalAgent, request: http.request },
14
+ 'https:': { agent: https.globalAgent, request: https.request },
15
+ };
16
+ function getProtocol(protocol) {
17
+ assert(protocolMap[protocol], new Error('unknown protocol: ' + protocol));
18
+ return protocolMap[protocol];
19
+ }
6
20
  export function dataUrlToBase64(dataUrl) {
7
21
  const dataList = dataUrl.split(',');
8
22
  return dataList[dataList.length - 1];
@@ -20,7 +34,10 @@ export async function httpHeadHeader(url) {
20
34
  if (REDIRECT_TTL-- <= 0) {
21
35
  throw new Error(`ttl expired! too many(>${REDIRECT_TTL}) 302 redirection.`);
22
36
  }
23
- const res = await _headHeader(url);
37
+ const res = await fetch(url, {
38
+ method: 'HEAD',
39
+ });
40
+ res.destroy();
24
41
  if (!/^3/.test(String(res.statusCode))) {
25
42
  if (originUrl !== url) {
26
43
  res.headers.location = url;
@@ -33,37 +50,6 @@ export async function httpHeadHeader(url) {
33
50
  }
34
51
  url = res.headers.location;
35
52
  }
36
- async function _headHeader(destUrl) {
37
- const parsedUrl = new URL(destUrl);
38
- const options = {
39
- method: 'HEAD',
40
- // method : 'GET',
41
- };
42
- let request;
43
- if (parsedUrl.protocol === 'https:') {
44
- request = https.request;
45
- }
46
- else if (parsedUrl.protocol === 'http:') {
47
- request = http.request;
48
- }
49
- else {
50
- throw new Error('unknown protocol: ' + parsedUrl.protocol);
51
- }
52
- return new Promise((resolve, reject) => {
53
- let res;
54
- const req = request(parsedUrl, options, (response) => {
55
- res = response;
56
- resolve(res);
57
- })
58
- .on('error', reject)
59
- .setTimeout(HTTP_TIMEOUT, () => {
60
- const e = new Error(`FileBox: Http request timeout (${HTTP_TIMEOUT})!`);
61
- req.emit('error', e);
62
- req.destroy();
63
- })
64
- .end();
65
- });
66
- }
67
53
  }
68
54
  export function httpHeaderToFileName(headers) {
69
55
  const contentDisposition = headers['content-disposition'];
@@ -81,181 +67,93 @@ export async function httpStream(url, headers = {}) {
81
67
  const headHeaders = await httpHeadHeader(url);
82
68
  if (headHeaders.location) {
83
69
  url = headHeaders.location;
70
+ const { protocol } = new URL(url);
71
+ getProtocol(protocol);
84
72
  }
85
- const parsedUrl = new URL(url);
86
- const protocol = parsedUrl.protocol;
87
- const options = {};
88
- let get;
89
- if (!protocol) {
90
- throw new Error('protocol is empty');
91
- }
92
- if (protocol.match(/^https:/i)) {
93
- get = https.get;
94
- options.agent = https.globalAgent;
95
- }
96
- else if (protocol.match(/^http:/i)) {
97
- get = http.get;
98
- options.agent = http.globalAgent;
99
- }
100
- else {
101
- throw new Error('protocol unknown: ' + protocol);
102
- }
103
- options.headers = {
104
- ...headers,
73
+ const options = {
74
+ headers: { ...headers },
75
+ method: 'GET',
105
76
  };
106
77
  const fileSize = Number(headHeaders['content-length']);
107
- if (headHeaders['accept-ranges'] === 'bytes' && fileSize > HTTP_CHUNK_SIZE) {
108
- return await downloadFileInChunks(get, url, options, fileSize, HTTP_CHUNK_SIZE);
78
+ if (!NO_SLICE_DOWN && headHeaders['accept-ranges'] === 'bytes' && fileSize > HTTP_CHUNK_SIZE) {
79
+ return await downloadFileInChunks(url, options, fileSize, HTTP_CHUNK_SIZE);
109
80
  }
110
81
  else {
111
- return await downloadFile(get, url, options);
82
+ return await fetch(url, options);
112
83
  }
113
84
  }
114
- async function downloadFile(get, url, options) {
115
- return new Promise((resolve, reject) => {
116
- let res = null;
117
- const req = get(url, options, (response) => {
118
- res = response;
119
- resolve(res);
120
- });
121
- req
122
- .on('error', reject)
123
- .setTimeout(HTTP_TIMEOUT, () => {
124
- const e = new Error(`FileBox: Http request timeout (${HTTP_TIMEOUT})!`);
125
- if (res) {
126
- res.emit('error', e);
127
- }
128
- req.emit('error', e);
129
- req.destroy();
130
- })
131
- .end();
132
- });
85
+ async function fetch(url, options) {
86
+ const { protocol } = new URL(url);
87
+ const { request, agent } = getProtocol(protocol);
88
+ const opts = {
89
+ agent,
90
+ ...options,
91
+ };
92
+ const req = request(url, opts)
93
+ .setTimeout(HTTP_TIMEOUT)
94
+ .once('timeout', () => {
95
+ req.destroy(new Error(`FileBox: Http request timeout (${HTTP_TIMEOUT})!`));
96
+ })
97
+ .end();
98
+ const [res] = (await once(req, 'response'));
99
+ return res;
133
100
  }
134
- async function downloadFileInChunks(get, url, options, fileSize, chunkSize = HTTP_CHUNK_SIZE) {
135
- const ac = new AbortController();
136
- const stream = new PassThrough();
137
- const abortAc = () => {
138
- if (!ac.signal.aborted) {
139
- ac.abort();
140
- }
101
+ async function downloadFileInChunks(url, options, fileSize, chunkSize = HTTP_CHUNK_SIZE) {
102
+ const tmpFile = join(tmpdir(), `filebox-${randomUUID()}`);
103
+ const writeStream = createWriteStream(tmpFile);
104
+ const allowStatusCode = [200, 206];
105
+ const requestBaseOptions = {
106
+ headers: {},
107
+ ...options,
108
+ timeout: HTTP_TIMEOUT,
141
109
  };
142
- stream
143
- .once('close', abortAc)
144
- .once('error', abortAc);
145
- const chunksCount = Math.ceil(fileSize / chunkSize);
146
- let chunksDownloaded = 0;
147
- let dataTotalSize = 0;
148
- const doDownloadChunk = async function (i, retries) {
149
- const start = i * chunkSize;
150
- const end = Math.min((i + 1) * chunkSize - 1, fileSize - 1);
110
+ let chunkSeq = 0;
111
+ let start = 0;
112
+ let end = 0;
113
+ let downSize = 0;
114
+ let retries = 3;
115
+ while (downSize < fileSize) {
116
+ end = Math.min(start + chunkSize, fileSize - 1);
151
117
  const range = `bytes=${start}-${end}`;
152
- // console.info('doDownloadChunk() range:', range)
153
- if (ac.signal.aborted) {
154
- stream.destroy(new Error('Signal aborted.'));
155
- return;
156
- }
157
- const requestOptions = {
158
- ...options,
159
- signal: ac.signal,
160
- timeout: HTTP_TIMEOUT,
161
- };
162
- if (!requestOptions.headers) {
163
- requestOptions.headers = {};
164
- }
118
+ const requestOptions = Object.assign({}, requestBaseOptions);
119
+ assert(requestOptions.headers, 'Errors that should not happen: Invalid headers');
165
120
  requestOptions.headers['Range'] = range;
166
121
  try {
167
- const chunk = await downloadChunk(get, url, requestOptions, retries);
168
- if (chunk.errored) {
169
- throw new Error('chunk stream error');
170
- }
171
- if (chunk.closed) {
172
- throw new Error('chunk stream closed');
173
- }
174
- if (chunk.destroyed) {
175
- throw new Error('chunk stream destroyed');
176
- }
177
- const buf = await streamToBuffer(chunk);
178
- stream.push(buf);
179
- chunksDownloaded++;
180
- dataTotalSize += buf.length;
181
- if (chunksDownloaded === chunksCount || dataTotalSize >= fileSize) {
182
- stream.push(null);
122
+ const res = await fetch(url, options);
123
+ assert(allowStatusCode.includes(res.statusCode ?? 0), `Request failed with status code ${res.statusCode}`);
124
+ assert(Number(res.headers['content-length']) > 0, 'Server returned 0 bytes of data');
125
+ for await (const chunk of res) {
126
+ assert(Buffer.isBuffer(chunk));
127
+ downSize += chunk.length;
128
+ writeStream.write(chunk);
183
129
  }
130
+ res.destroy();
184
131
  }
185
- catch (err) {
186
- if (retries === 0) {
187
- stream.emit('error', err);
188
- }
189
- else {
190
- await doDownloadChunk(i, retries - 1);
132
+ catch (error) {
133
+ const err = error;
134
+ if (--retries <= 0) {
135
+ void rm(tmpFile, { force: true });
136
+ writeStream.close();
137
+ throw new Error(`Download file with chunk failed! ${err.message}`, { cause: err });
191
138
  }
192
139
  }
193
- };
194
- const doDownloadAllChunks = async function () {
195
- for (let i = 0; i < chunksCount; i++) {
196
- if (ac.signal.aborted) {
197
- return;
198
- }
199
- await doDownloadChunk(i, 3);
200
- }
201
- };
202
- void doDownloadAllChunks().catch((e) => {
203
- stream.emit('error', e);
204
- });
205
- return stream;
206
- }
207
- async function downloadChunk(get, url, requestOptions, retries) {
208
- return new Promise((resolve, reject) => {
209
- const doRequest = (attempt) => {
210
- let resolved = false;
211
- const req = get(url, requestOptions, (res) => {
212
- const statusCode = res.statusCode ?? 0;
213
- // console.info('downloadChunk(%d) statusCode: %d rsp.headers: %o', attempt, statusCode, res.headers)
214
- if (statusCode < 200 || statusCode >= 300) {
215
- if (attempt < retries) {
216
- void doRequest(attempt + 1);
217
- }
218
- else {
219
- reject(new Error(`Request failed with status code ${res.statusCode}`));
220
- }
221
- return;
222
- }
223
- const stream = pipeline(res, new PassThrough(), () => { });
224
- resolve(stream);
225
- resolved = true;
226
- });
227
- req
228
- .once('error', (err) => {
229
- if (resolved) {
230
- return;
231
- }
232
- // console.error('downloadChunk(%d) req error:', attempt, err)
233
- if (attempt < retries) {
234
- void doRequest(attempt + 1);
235
- }
236
- else {
237
- reject(err);
238
- }
239
- })
240
- .setTimeout(HTTP_TIMEOUT, () => {
241
- const e = new Error(`FileBox: Http request timeout (${HTTP_TIMEOUT})!`);
242
- req.emit('error', e);
243
- req.destroy();
244
- })
245
- .end();
246
- };
247
- void doRequest(0);
140
+ chunkSeq++;
141
+ start = downSize;
142
+ }
143
+ writeStream.close();
144
+ const readStream = createReadStream(tmpFile);
145
+ readStream
146
+ .once('end', () => readStream.close())
147
+ .once('close', () => {
148
+ void rm(tmpFile, { force: true });
248
149
  });
150
+ return readStream;
249
151
  }
250
152
  export async function streamToBuffer(stream) {
251
- return new Promise((resolve, reject) => {
252
- const bufferList = [];
253
- stream.once('error', reject);
254
- stream.once('end', () => {
255
- const fullBuffer = Buffer.concat(bufferList);
256
- resolve(fullBuffer);
257
- });
258
- stream.on('data', (buffer) => bufferList.push(buffer));
259
- });
153
+ const chunks = [];
154
+ for await (const chunk of stream) {
155
+ chunks.push(chunk);
156
+ }
157
+ return Buffer.concat(chunks);
260
158
  }
261
159
  //# sourceMappingURL=misc.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"misc.js","sourceRoot":"","sources":["../../../src/misc.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"misc.js","sourceRoot":"","sources":["../../../src/misc.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  /**
2
- * This file was auto generated from scripts/generate-version.sh
2
+ * This file will be overwrite when we publish NPM module
3
+ * by scripts/generate_version.ts
3
4
  */
4
- export declare const VERSION: string;
5
+ export declare const VERSION = "0.0.0";
5
6
  //# sourceMappingURL=version.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../../src/version.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,OAAO,EAAE,MAAgB,CAAA"}
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../../src/version.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,OAAO,UAAU,CAAA"}
@@ -1,5 +1,6 @@
1
1
  /**
2
- * This file was auto generated from scripts/generate-version.sh
2
+ * This file will be overwrite when we publish NPM module
3
+ * by scripts/generate_version.ts
3
4
  */
4
- export const VERSION = '1.7.4';
5
+ export const VERSION = '0.0.0';
5
6
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../../../src/version.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,MAAM,OAAO,GAAW,OAAO,CAAA"}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../../src/version.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@juzi/file-box",
3
- "version": "1.7.4",
3
+ "version": "1.7.6",
4
4
  "description": "Pack a File into Box for easy move/transfer between servers no matter of where it is.(local path, remote url, or cloud storage)",
5
5
  "type": "module",
6
6
  "exports": {
@@ -52,12 +52,15 @@
52
52
  "@chatie/tsconfig": "^4.6.2",
53
53
  "@types/isomorphic-fetch": "0.0.35",
54
54
  "@types/mime": "^2.0.3",
55
+ "@types/node": "^18.18.7",
55
56
  "@types/qrcode": "^1.4.1",
56
57
  "@types/uuid": "^8.3.3",
58
+ "eslint-plugin-n": "^16.2.0",
57
59
  "gts": "^3.1.0",
58
60
  "pkg-jq": "^0.2.11",
59
61
  "read-pkg-up": "^8.0.0",
60
- "reflect-metadata": "^0.1.13"
62
+ "reflect-metadata": "^0.1.13",
63
+ "tap": "^16.3.9"
61
64
  },
62
65
  "dependencies": {
63
66
  "brolog": "^1.14.2",
@@ -81,4 +84,4 @@
81
84
  "pre-push": "npx git-scripts-pre-push"
82
85
  }
83
86
  }
84
- }
87
+ }
package/src/config.ts CHANGED
@@ -1,8 +1,13 @@
1
1
  /// <reference path="./typings.d.ts" />
2
2
  export { VERSION } from './version.js'
3
3
 
4
- export const HTTP_TIMEOUT = Number(process.env['FILEBOX_HTTP_TIMEOUT'])
4
+ export const HTTP_REQUEST_TIMEOUT = Number(process.env['FILEBOX_HTTP_REQUEST_TIMEOUT'])
5
+ || 10 * 1000
6
+
7
+ export const HTTP_RESPONSE_TIMEOUT = Number(process.env['FILEBOX_HTTP_RESPONSE_TIMEOUT'] ?? process.env['FILEBOX_HTTP_TIMEOUT'])
5
8
  || 60 * 1000
6
9
 
10
+ export const NO_SLICE_DOWN = process.env['FILEBOX_NO_SLICE_DOWN'] === 'true'
11
+
7
12
  export const HTTP_CHUNK_SIZE = Number(process.env['FILEBOX_HTTP_CHUNK_SIZE'])
8
13
  || 1024 * 512