@juzi/file-box 1.7.0 → 1.7.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/cjs/src/config.d.ts +1 -0
- package/dist/cjs/src/config.d.ts.map +1 -1
- package/dist/cjs/src/config.js +3 -1
- package/dist/cjs/src/config.js.map +1 -1
- package/dist/cjs/src/misc.d.ts +3 -3
- package/dist/cjs/src/misc.d.ts.map +1 -1
- package/dist/cjs/src/misc.js +132 -4
- package/dist/cjs/src/misc.js.map +1 -1
- package/dist/cjs/src/misc.spec.js +9 -0
- package/dist/cjs/src/misc.spec.js.map +1 -1
- package/dist/cjs/src/version.js +1 -1
- package/dist/cjs/tests/network-timeout.spec.js +6 -2
- package/dist/cjs/tests/network-timeout.spec.js.map +1 -1
- package/dist/esm/src/config.d.ts +1 -0
- package/dist/esm/src/config.d.ts.map +1 -1
- package/dist/esm/src/config.js +2 -0
- package/dist/esm/src/config.js.map +1 -1
- package/dist/esm/src/misc.d.ts +3 -3
- package/dist/esm/src/misc.d.ts.map +1 -1
- package/dist/esm/src/misc.js +132 -4
- package/dist/esm/src/misc.js.map +1 -1
- package/dist/esm/src/misc.spec.js +9 -0
- package/dist/esm/src/misc.spec.js.map +1 -1
- package/dist/esm/src/version.js +1 -1
- package/dist/esm/tests/network-timeout.spec.js +6 -2
- package/dist/esm/tests/network-timeout.spec.js.map +1 -1
- package/package.json +1 -2
- package/src/config.ts +3 -0
- package/src/misc.spec.ts +10 -0
- package/src/misc.ts +166 -10
- package/src/version.ts +1 -1
package/dist/cjs/src/config.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/config.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,eAAO,MAAM,YAAY,QACX,CAAA"}
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/config.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,eAAO,MAAM,YAAY,QACX,CAAA;AAEd,eAAO,MAAM,eAAe,QACb,CAAA"}
|
package/dist/cjs/src/config.js
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.HTTP_TIMEOUT = exports.VERSION = void 0;
|
|
3
|
+
exports.HTTP_CHUNK_SIZE = exports.HTTP_TIMEOUT = exports.VERSION = void 0;
|
|
4
4
|
/// <reference path="./typings.d.ts" />
|
|
5
5
|
var version_js_1 = require("./version.js");
|
|
6
6
|
Object.defineProperty(exports, "VERSION", { enumerable: true, get: function () { return version_js_1.VERSION; } });
|
|
7
7
|
exports.HTTP_TIMEOUT = Number(process.env['FILEBOX_HTTP_TIMEOUT'])
|
|
8
8
|
|| 60 * 1000;
|
|
9
|
+
exports.HTTP_CHUNK_SIZE = Number(process.env['FILEBOX_HTTP_CHUNK_SIZE'])
|
|
10
|
+
|| 1024 * 512;
|
|
9
11
|
//# sourceMappingURL=config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/config.ts"],"names":[],"mappings":";;;AAAA,uCAAuC;AACvC,2CAAsC;AAA7B,qGAAA,OAAO,OAAA;AAEH,QAAA,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;OAClE,EAAE,GAAG,IAAI,CAAA"}
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/config.ts"],"names":[],"mappings":";;;AAAA,uCAAuC;AACvC,2CAAsC;AAA7B,qGAAA,OAAO,OAAA;AAEH,QAAA,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;OAClE,EAAE,GAAG,IAAI,CAAA;AAED,QAAA,eAAe,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;OACxE,IAAI,GAAG,GAAG,CAAA"}
|
package/dist/cjs/src/misc.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
/// <reference types="node" />
|
|
3
3
|
/// <reference types="node" />
|
|
4
4
|
import http from 'http';
|
|
5
|
-
import
|
|
5
|
+
import { Readable } from 'stream';
|
|
6
6
|
export declare function dataUrlToBase64(dataUrl: string): string;
|
|
7
7
|
/**
|
|
8
8
|
* Get http headers for specific `url`
|
|
@@ -12,6 +12,6 @@ export declare function dataUrlToBase64(dataUrl: string): string;
|
|
|
12
12
|
*/
|
|
13
13
|
export declare function httpHeadHeader(url: string): Promise<http.IncomingHttpHeaders>;
|
|
14
14
|
export declare function httpHeaderToFileName(headers: http.IncomingHttpHeaders): null | string;
|
|
15
|
-
export declare function httpStream(url: string, headers?: http.OutgoingHttpHeaders): Promise<
|
|
16
|
-
export declare function streamToBuffer(stream:
|
|
15
|
+
export declare function httpStream(url: string, headers?: http.OutgoingHttpHeaders): Promise<Readable>;
|
|
16
|
+
export declare function streamToBuffer(stream: Readable): Promise<Buffer>;
|
|
17
17
|
//# sourceMappingURL=misc.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"misc.d.ts","sourceRoot":"","sources":["../../../src/misc.ts"],"names":[],"mappings":";;;AAAA,OAAO,IAAI,MAAS,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"misc.d.ts","sourceRoot":"","sources":["../../../src/misc.ts"],"names":[],"mappings":";;;AAAA,OAAO,IAAI,MAAS,MAAM,CAAA;AAI1B,OAAO,EAAyB,QAAQ,EAAE,MAAM,QAAQ,CAAA;AAIxD,wBAAgB,eAAe,CAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAGxD;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAwDpF;AAED,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,IAAI,CAAC,mBAAmB,GAChC,IAAI,GAAG,MAAM,CAef;AAED,wBAAsB,UAAU,CAC9B,GAAG,EAAO,MAAM,EAChB,OAAO,GAAG,IAAI,CAAC,mBAAwB,GACtC,OAAO,CAAC,QAAQ,CAAC,CAmCnB;AAwKD,wBAAsB,cAAc,CAAE,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAUvE"}
|
package/dist/cjs/src/misc.js
CHANGED
|
@@ -7,6 +7,7 @@ exports.streamToBuffer = exports.httpStream = exports.httpHeaderToFileName = exp
|
|
|
7
7
|
const http_1 = __importDefault(require("http"));
|
|
8
8
|
const https_1 = __importDefault(require("https"));
|
|
9
9
|
const url_1 = require("url");
|
|
10
|
+
const stream_1 = require("stream");
|
|
10
11
|
const config_js_1 = require("./config.js");
|
|
11
12
|
function dataUrlToBase64(dataUrl) {
|
|
12
13
|
const dataList = dataUrl.split(',');
|
|
@@ -103,12 +104,24 @@ async function httpStream(url, headers = {}) {
|
|
|
103
104
|
options.headers = {
|
|
104
105
|
...headers,
|
|
105
106
|
};
|
|
107
|
+
const headHeaders = await httpHeadHeader(url);
|
|
108
|
+
const fileSize = Number(headHeaders['content-length']);
|
|
109
|
+
if (headHeaders['accept-ranges'] === 'bytes' && fileSize > config_js_1.HTTP_CHUNK_SIZE) {
|
|
110
|
+
return await downloadFileInChunks(get, url, options, fileSize, config_js_1.HTTP_CHUNK_SIZE);
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
return await downloadFile(get, url, options);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
exports.httpStream = httpStream;
|
|
117
|
+
async function downloadFile(get, url, options) {
|
|
106
118
|
return new Promise((resolve, reject) => {
|
|
107
119
|
let res = null;
|
|
108
|
-
const req = get(
|
|
120
|
+
const req = get(url, options, (response) => {
|
|
109
121
|
res = response;
|
|
110
122
|
resolve(res);
|
|
111
|
-
})
|
|
123
|
+
});
|
|
124
|
+
req
|
|
112
125
|
.on('error', reject)
|
|
113
126
|
.setTimeout(config_js_1.HTTP_TIMEOUT, () => {
|
|
114
127
|
const e = new Error(`FileBox: Http request timeout (${config_js_1.HTTP_TIMEOUT})!`);
|
|
@@ -121,7 +134,122 @@ async function httpStream(url, headers = {}) {
|
|
|
121
134
|
.end();
|
|
122
135
|
});
|
|
123
136
|
}
|
|
124
|
-
|
|
137
|
+
async function downloadFileInChunks(get, url, options, fileSize, chunkSize = config_js_1.HTTP_CHUNK_SIZE) {
|
|
138
|
+
const ac = new AbortController();
|
|
139
|
+
const stream = new stream_1.PassThrough();
|
|
140
|
+
const abortAc = () => {
|
|
141
|
+
if (!ac.signal.aborted) {
|
|
142
|
+
ac.abort();
|
|
143
|
+
}
|
|
144
|
+
};
|
|
145
|
+
stream
|
|
146
|
+
.once('close', abortAc)
|
|
147
|
+
.once('error', abortAc);
|
|
148
|
+
const chunksCount = Math.ceil(fileSize / chunkSize);
|
|
149
|
+
let chunksDownloaded = 0;
|
|
150
|
+
let dataTotalSize = 0;
|
|
151
|
+
const doDownloadChunk = async function (i, retries) {
|
|
152
|
+
const start = i * chunkSize;
|
|
153
|
+
const end = Math.min((i + 1) * chunkSize - 1, fileSize - 1);
|
|
154
|
+
const range = `bytes=${start}-${end}`;
|
|
155
|
+
// console.info('doDownloadChunk() range:', range)
|
|
156
|
+
if (ac.signal.aborted) {
|
|
157
|
+
stream.destroy(new Error('Signal aborted.'));
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
const requestOptions = {
|
|
161
|
+
...options,
|
|
162
|
+
signal: ac.signal,
|
|
163
|
+
timeout: config_js_1.HTTP_TIMEOUT,
|
|
164
|
+
};
|
|
165
|
+
if (!requestOptions.headers) {
|
|
166
|
+
requestOptions.headers = {};
|
|
167
|
+
}
|
|
168
|
+
requestOptions.headers['Range'] = range;
|
|
169
|
+
try {
|
|
170
|
+
const chunk = await downloadChunk(get, url, requestOptions, retries);
|
|
171
|
+
if (chunk.errored) {
|
|
172
|
+
throw new Error('chunk stream error');
|
|
173
|
+
}
|
|
174
|
+
if (chunk.closed) {
|
|
175
|
+
throw new Error('chunk stream closed');
|
|
176
|
+
}
|
|
177
|
+
if (chunk.destroyed) {
|
|
178
|
+
throw new Error('chunk stream destroyed');
|
|
179
|
+
}
|
|
180
|
+
const buf = await streamToBuffer(chunk);
|
|
181
|
+
stream.push(buf);
|
|
182
|
+
chunksDownloaded++;
|
|
183
|
+
dataTotalSize += buf.length;
|
|
184
|
+
if (chunksDownloaded === chunksCount || dataTotalSize >= fileSize) {
|
|
185
|
+
stream.push(null);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
catch (err) {
|
|
189
|
+
if (retries === 0) {
|
|
190
|
+
stream.emit('error', err);
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
await doDownloadChunk(i, retries - 1);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
};
|
|
197
|
+
const doDownloadAllChunks = async function () {
|
|
198
|
+
for (let i = 0; i < chunksCount; i++) {
|
|
199
|
+
if (ac.signal.aborted) {
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
await doDownloadChunk(i, 3);
|
|
203
|
+
}
|
|
204
|
+
};
|
|
205
|
+
void doDownloadAllChunks().catch((e) => {
|
|
206
|
+
stream.emit('error', e);
|
|
207
|
+
});
|
|
208
|
+
return stream;
|
|
209
|
+
}
|
|
210
|
+
async function downloadChunk(get, url, requestOptions, retries) {
|
|
211
|
+
return new Promise((resolve, reject) => {
|
|
212
|
+
const doRequest = (attempt) => {
|
|
213
|
+
let resolved = false;
|
|
214
|
+
const req = get(url, requestOptions, (res) => {
|
|
215
|
+
const statusCode = res.statusCode ?? 0;
|
|
216
|
+
// console.info('downloadChunk(%d) statusCode: %d rsp.headers: %o', attempt, statusCode, res.headers)
|
|
217
|
+
if (statusCode < 200 || statusCode >= 300) {
|
|
218
|
+
if (attempt < retries) {
|
|
219
|
+
void doRequest(attempt + 1);
|
|
220
|
+
}
|
|
221
|
+
else {
|
|
222
|
+
reject(new Error(`Request failed with status code ${res.statusCode}`));
|
|
223
|
+
}
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
|
+
const stream = (0, stream_1.pipeline)(res, new stream_1.PassThrough(), () => { });
|
|
227
|
+
resolve(stream);
|
|
228
|
+
resolved = true;
|
|
229
|
+
});
|
|
230
|
+
req
|
|
231
|
+
.once('error', (err) => {
|
|
232
|
+
if (resolved) {
|
|
233
|
+
return;
|
|
234
|
+
}
|
|
235
|
+
// console.error('downloadChunk(%d) req error:', attempt, err)
|
|
236
|
+
if (attempt < retries) {
|
|
237
|
+
void doRequest(attempt + 1);
|
|
238
|
+
}
|
|
239
|
+
else {
|
|
240
|
+
reject(err);
|
|
241
|
+
}
|
|
242
|
+
})
|
|
243
|
+
.setTimeout(config_js_1.HTTP_TIMEOUT, () => {
|
|
244
|
+
const e = new Error(`FileBox: Http request timeout (${config_js_1.HTTP_TIMEOUT})!`);
|
|
245
|
+
req.emit('error', e);
|
|
246
|
+
req.destroy();
|
|
247
|
+
})
|
|
248
|
+
.end();
|
|
249
|
+
};
|
|
250
|
+
void doRequest(0);
|
|
251
|
+
});
|
|
252
|
+
}
|
|
125
253
|
async function streamToBuffer(stream) {
|
|
126
254
|
return new Promise((resolve, reject) => {
|
|
127
255
|
const bufferList = [];
|
|
@@ -130,7 +258,7 @@ async function streamToBuffer(stream) {
|
|
|
130
258
|
const fullBuffer = Buffer.concat(bufferList);
|
|
131
259
|
resolve(fullBuffer);
|
|
132
260
|
});
|
|
133
|
-
stream.on('data', buffer => bufferList.push(buffer));
|
|
261
|
+
stream.on('data', (buffer) => bufferList.push(buffer));
|
|
134
262
|
});
|
|
135
263
|
}
|
|
136
264
|
exports.streamToBuffer = streamToBuffer;
|
package/dist/cjs/src/misc.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"misc.js","sourceRoot":"","sources":["../../../src/misc.ts"],"names":[],"mappings":";;;;;;AAAA,gDAA0B;AAC1B,kDAA2B;AAC3B,6BAAyB;
|
|
1
|
+
{"version":3,"file":"misc.js","sourceRoot":"","sources":["../../../src/misc.ts"],"names":[],"mappings":"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"}
|
|
@@ -48,4 +48,13 @@ const misc_js_1 = require("./misc.js");
|
|
|
48
48
|
const obj = JSON.parse(buffer.toString());
|
|
49
49
|
t.equal(obj.headers[MOL_KEY], MOL_VAL, 'should send the header right');
|
|
50
50
|
});
|
|
51
|
+
(0, tstest_1.test)('httpStream in chunks', async (t) => {
|
|
52
|
+
const URL = 'https://media.w3.org/2010/05/sintel/trailer.mp4';
|
|
53
|
+
const res = await (0, misc_js_1.httpStream)(URL);
|
|
54
|
+
let length = 0;
|
|
55
|
+
for await (const chunk of res) {
|
|
56
|
+
length += chunk.length;
|
|
57
|
+
}
|
|
58
|
+
t.equal(length, 4372373, 'should get data in chunks right');
|
|
59
|
+
});
|
|
51
60
|
//# sourceMappingURL=misc.spec.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"misc.spec.js","sourceRoot":"","sources":["../../../src/misc.spec.ts"],"names":[],"mappings":";;;AAEA,sCAAsC;AACtC,mCAA8B;AAE9B,uCAM0C;AAE1C,IAAA,aAAI,EAAC,mBAAmB,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IAClC,MAAM,MAAM,GAAG;QACb,0EAA0E;QAC1E,0EAA0E;QAC1E,0EAA0E;QAC1E,0EAA0E;KAC3E,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACV,MAAM,OAAO,GAAG;QACd,wBAAwB;QACxB,MAAM;KACP,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAEV,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,IAAA,yBAAe,EAAC,OAAO,CAAC,EAAE,gCAAgC,CAAC,CAAA;AAC7E,CAAC,CAAC,CAAA;AAEF,IAAA,aAAI,EAAC,gBAAgB,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IAC/B,MAAM,GAAG,GAAG,sDAAsD,CAAA;IAElE,MAAM,oBAAoB,GAAK,qBAAqB,CAAA;IACpD,MAAM,sBAAsB,GAAG,0CAA0C,CAAA;IAEzE,MAAM,OAAO,GAAG,MAAM,IAAA,wBAAc,EAAC,GAAG,CAAC,CAAA;IAEzC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,oBAAoB,CAAC,EAAE,sBAAsB,EAAE,8BAA8B,CAAC,CAAA;AAChG,CAAC,CAAC,CAAA;AAEF,IAAA,aAAI,EAAC,sBAAsB,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IACrC,MAAM,sBAAsB,GAAQ;QAClC,qBAAqB,EAAE,sCAAsC;KAC9D,CAAA;IACD,MAAM,yBAAyB,GAAQ;QACrC,qBAAqB,EAAE,oCAAoC;KAC5D,CAAA;IACD,MAAM,kBAAkB,GAAG,eAAe,CAAA;IAE1C,IAAI,QAAQ,GAAG,IAAA,8BAAoB,EAAC,sBAAsB,CAAC,CAAA;IAC3D,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,kBAAkB,EAAE,yCAAyC,CAAC,CAAA;IAEhF,QAAQ,GAAG,IAAA,8BAAoB,EAAC,yBAAyB,CAAC,CAAA;IAC1D,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,kBAAkB,EAAE,4CAA4C,CAAC,CAAA;AACrF,CAAC,CAAC,CAAA;AAEF,IAAA,aAAI,EAAC,YAAY,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IAC3B,MAAM,GAAG,GAAG,6BAA6B,CAAA;IAEzC,MAAM,OAAO,GAAG,KAAK,CAAA;IACrB,MAAM,OAAO,GAAG,IAAI,CAAA;IAEpB,MAAM,OAAO,GAAG,EAA+B,CAAA;IAC/C,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAA;IAE1B,MAAM,GAAG,GAAG,MAAM,IAAA,oBAAU,EAAC,GAAG,EAAE,OAAO,CAAC,CAAA;IAE1C,MAAM,MAAM,GAAG,MAAM,IAAA,wBAAc,EAAC,GAAG,CAAC,CAAA;IACxC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAA;IACzC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,8BAA8B,CAAC,CAAA;AACxE,CAAC,CAAC,CAAA"}
|
|
1
|
+
{"version":3,"file":"misc.spec.js","sourceRoot":"","sources":["../../../src/misc.spec.ts"],"names":[],"mappings":"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"}
|
package/dist/cjs/src/version.js
CHANGED
|
@@ -27,11 +27,15 @@ const config_js_1 = require("../src/config.js");
|
|
|
27
27
|
if (req.url === URL.NOT_TIMEOUT) {
|
|
28
28
|
await (0, promises_1.setTimeout)(config_js_1.HTTP_TIMEOUT * 0.5);
|
|
29
29
|
res.write(Buffer.from('This is the second chunk of data.'));
|
|
30
|
-
await (0, promises_1.setTimeout)(config_js_1.HTTP_TIMEOUT * 0.9);
|
|
31
30
|
}
|
|
32
|
-
else {
|
|
31
|
+
else if (req.url === URL.READY) {
|
|
33
32
|
await (0, promises_1.setTimeout)(config_js_1.HTTP_TIMEOUT + 100);
|
|
34
33
|
}
|
|
34
|
+
else if (req.url === URL.TIMEOUT) {
|
|
35
|
+
if (req.method === 'GET') {
|
|
36
|
+
await (0, promises_1.setTimeout)(config_js_1.HTTP_TIMEOUT + 100);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
35
39
|
// console.debug(`${new Date().toLocaleTimeString()} call res.end "${req.url}"`)
|
|
36
40
|
res.end(Buffer.from('All data end.'));
|
|
37
41
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"network-timeout.spec.js","sourceRoot":"","sources":["../../../tests/network-timeout.spec.ts"],"names":[],"mappings":";;;AAEA,+BAAmC;AAEnC,8CAA4C;AAC5C,mCAAoC;AAEpC,0CAAuC;AAEvC,gDAA+C;AAE/C,IAAA,aAAI,EAAC,iCAAiC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IAClD,MAAM,OAAO,GAAG,cAAK,CAAC,aAAa,EAAE,CAAA;IACrC,OAAO,CAAC,aAAa,CAAC;QACpB,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE;QACf,iBAAiB,EAAE,IAAI;QACvB,uBAAuB,EAAE,IAAI;QAC7B,MAAM,EAAE,CAAE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,UAAU,CAAE;KACrF,CAAC,CAAA;IACF,CAAC,CAAC,IAAI,GAAG,CAAC,CAAA;IACV,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAA;IACpE,MAAM,GAAG,GAAG;QACV,WAAW,EAAE,cAAc;QAC3B,KAAK,EAAE,QAAQ;QACf,OAAO,EAAE,UAAU;KACpB,CAAA;IAED,uDAAuD;IACvD,MAAM,MAAM,GAAG,IAAA,mBAAY,EAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QAC7C,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC,CAAA;QAE1D,IAAI,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,WAAW,EAAE;YAC/B,MAAM,IAAA,qBAAU,EAAC,wBAAY,GAAG,GAAG,CAAC,CAAA;YACpC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"network-timeout.spec.js","sourceRoot":"","sources":["../../../tests/network-timeout.spec.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/src/config.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/config.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,eAAO,MAAM,YAAY,QACX,CAAA"}
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/config.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,eAAO,MAAM,YAAY,QACX,CAAA;AAEd,eAAO,MAAM,eAAe,QACb,CAAA"}
|
package/dist/esm/src/config.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/config.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;OAClE,EAAE,GAAG,IAAI,CAAA"}
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/config.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;OAClE,EAAE,GAAG,IAAI,CAAA;AAEd,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;OACxE,IAAI,GAAG,GAAG,CAAA"}
|
package/dist/esm/src/misc.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
/// <reference types="node" />
|
|
3
3
|
/// <reference types="node" />
|
|
4
4
|
import http from 'http';
|
|
5
|
-
import
|
|
5
|
+
import { Readable } from 'stream';
|
|
6
6
|
export declare function dataUrlToBase64(dataUrl: string): string;
|
|
7
7
|
/**
|
|
8
8
|
* Get http headers for specific `url`
|
|
@@ -12,6 +12,6 @@ export declare function dataUrlToBase64(dataUrl: string): string;
|
|
|
12
12
|
*/
|
|
13
13
|
export declare function httpHeadHeader(url: string): Promise<http.IncomingHttpHeaders>;
|
|
14
14
|
export declare function httpHeaderToFileName(headers: http.IncomingHttpHeaders): null | string;
|
|
15
|
-
export declare function httpStream(url: string, headers?: http.OutgoingHttpHeaders): Promise<
|
|
16
|
-
export declare function streamToBuffer(stream:
|
|
15
|
+
export declare function httpStream(url: string, headers?: http.OutgoingHttpHeaders): Promise<Readable>;
|
|
16
|
+
export declare function streamToBuffer(stream: Readable): Promise<Buffer>;
|
|
17
17
|
//# sourceMappingURL=misc.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"misc.d.ts","sourceRoot":"","sources":["../../../src/misc.ts"],"names":[],"mappings":";;;AAAA,OAAO,IAAI,MAAS,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"misc.d.ts","sourceRoot":"","sources":["../../../src/misc.ts"],"names":[],"mappings":";;;AAAA,OAAO,IAAI,MAAS,MAAM,CAAA;AAI1B,OAAO,EAAyB,QAAQ,EAAE,MAAM,QAAQ,CAAA;AAIxD,wBAAgB,eAAe,CAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAGxD;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAwDpF;AAED,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,IAAI,CAAC,mBAAmB,GAChC,IAAI,GAAG,MAAM,CAef;AAED,wBAAsB,UAAU,CAC9B,GAAG,EAAO,MAAM,EAChB,OAAO,GAAG,IAAI,CAAC,mBAAwB,GACtC,OAAO,CAAC,QAAQ,CAAC,CAmCnB;AAwKD,wBAAsB,cAAc,CAAE,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAUvE"}
|
package/dist/esm/src/misc.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import http from 'http';
|
|
2
2
|
import https from 'https';
|
|
3
3
|
import { URL } from 'url';
|
|
4
|
-
import {
|
|
4
|
+
import { PassThrough, pipeline } from 'stream';
|
|
5
|
+
import { HTTP_CHUNK_SIZE, HTTP_TIMEOUT } from './config.js';
|
|
5
6
|
export function dataUrlToBase64(dataUrl) {
|
|
6
7
|
const dataList = dataUrl.split(',');
|
|
7
8
|
return dataList[dataList.length - 1];
|
|
@@ -94,12 +95,23 @@ export async function httpStream(url, headers = {}) {
|
|
|
94
95
|
options.headers = {
|
|
95
96
|
...headers,
|
|
96
97
|
};
|
|
98
|
+
const headHeaders = await httpHeadHeader(url);
|
|
99
|
+
const fileSize = Number(headHeaders['content-length']);
|
|
100
|
+
if (headHeaders['accept-ranges'] === 'bytes' && fileSize > HTTP_CHUNK_SIZE) {
|
|
101
|
+
return await downloadFileInChunks(get, url, options, fileSize, HTTP_CHUNK_SIZE);
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
return await downloadFile(get, url, options);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
async function downloadFile(get, url, options) {
|
|
97
108
|
return new Promise((resolve, reject) => {
|
|
98
109
|
let res = null;
|
|
99
|
-
const req = get(
|
|
110
|
+
const req = get(url, options, (response) => {
|
|
100
111
|
res = response;
|
|
101
112
|
resolve(res);
|
|
102
|
-
})
|
|
113
|
+
});
|
|
114
|
+
req
|
|
103
115
|
.on('error', reject)
|
|
104
116
|
.setTimeout(HTTP_TIMEOUT, () => {
|
|
105
117
|
const e = new Error(`FileBox: Http request timeout (${HTTP_TIMEOUT})!`);
|
|
@@ -112,6 +124,122 @@ export async function httpStream(url, headers = {}) {
|
|
|
112
124
|
.end();
|
|
113
125
|
});
|
|
114
126
|
}
|
|
127
|
+
async function downloadFileInChunks(get, url, options, fileSize, chunkSize = HTTP_CHUNK_SIZE) {
|
|
128
|
+
const ac = new AbortController();
|
|
129
|
+
const stream = new PassThrough();
|
|
130
|
+
const abortAc = () => {
|
|
131
|
+
if (!ac.signal.aborted) {
|
|
132
|
+
ac.abort();
|
|
133
|
+
}
|
|
134
|
+
};
|
|
135
|
+
stream
|
|
136
|
+
.once('close', abortAc)
|
|
137
|
+
.once('error', abortAc);
|
|
138
|
+
const chunksCount = Math.ceil(fileSize / chunkSize);
|
|
139
|
+
let chunksDownloaded = 0;
|
|
140
|
+
let dataTotalSize = 0;
|
|
141
|
+
const doDownloadChunk = async function (i, retries) {
|
|
142
|
+
const start = i * chunkSize;
|
|
143
|
+
const end = Math.min((i + 1) * chunkSize - 1, fileSize - 1);
|
|
144
|
+
const range = `bytes=${start}-${end}`;
|
|
145
|
+
// console.info('doDownloadChunk() range:', range)
|
|
146
|
+
if (ac.signal.aborted) {
|
|
147
|
+
stream.destroy(new Error('Signal aborted.'));
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
const requestOptions = {
|
|
151
|
+
...options,
|
|
152
|
+
signal: ac.signal,
|
|
153
|
+
timeout: HTTP_TIMEOUT,
|
|
154
|
+
};
|
|
155
|
+
if (!requestOptions.headers) {
|
|
156
|
+
requestOptions.headers = {};
|
|
157
|
+
}
|
|
158
|
+
requestOptions.headers['Range'] = range;
|
|
159
|
+
try {
|
|
160
|
+
const chunk = await downloadChunk(get, url, requestOptions, retries);
|
|
161
|
+
if (chunk.errored) {
|
|
162
|
+
throw new Error('chunk stream error');
|
|
163
|
+
}
|
|
164
|
+
if (chunk.closed) {
|
|
165
|
+
throw new Error('chunk stream closed');
|
|
166
|
+
}
|
|
167
|
+
if (chunk.destroyed) {
|
|
168
|
+
throw new Error('chunk stream destroyed');
|
|
169
|
+
}
|
|
170
|
+
const buf = await streamToBuffer(chunk);
|
|
171
|
+
stream.push(buf);
|
|
172
|
+
chunksDownloaded++;
|
|
173
|
+
dataTotalSize += buf.length;
|
|
174
|
+
if (chunksDownloaded === chunksCount || dataTotalSize >= fileSize) {
|
|
175
|
+
stream.push(null);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
catch (err) {
|
|
179
|
+
if (retries === 0) {
|
|
180
|
+
stream.emit('error', err);
|
|
181
|
+
}
|
|
182
|
+
else {
|
|
183
|
+
await doDownloadChunk(i, retries - 1);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
};
|
|
187
|
+
const doDownloadAllChunks = async function () {
|
|
188
|
+
for (let i = 0; i < chunksCount; i++) {
|
|
189
|
+
if (ac.signal.aborted) {
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
await doDownloadChunk(i, 3);
|
|
193
|
+
}
|
|
194
|
+
};
|
|
195
|
+
void doDownloadAllChunks().catch((e) => {
|
|
196
|
+
stream.emit('error', e);
|
|
197
|
+
});
|
|
198
|
+
return stream;
|
|
199
|
+
}
|
|
200
|
+
async function downloadChunk(get, url, requestOptions, retries) {
|
|
201
|
+
return new Promise((resolve, reject) => {
|
|
202
|
+
const doRequest = (attempt) => {
|
|
203
|
+
let resolved = false;
|
|
204
|
+
const req = get(url, requestOptions, (res) => {
|
|
205
|
+
const statusCode = res.statusCode ?? 0;
|
|
206
|
+
// console.info('downloadChunk(%d) statusCode: %d rsp.headers: %o', attempt, statusCode, res.headers)
|
|
207
|
+
if (statusCode < 200 || statusCode >= 300) {
|
|
208
|
+
if (attempt < retries) {
|
|
209
|
+
void doRequest(attempt + 1);
|
|
210
|
+
}
|
|
211
|
+
else {
|
|
212
|
+
reject(new Error(`Request failed with status code ${res.statusCode}`));
|
|
213
|
+
}
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
const stream = pipeline(res, new PassThrough(), () => { });
|
|
217
|
+
resolve(stream);
|
|
218
|
+
resolved = true;
|
|
219
|
+
});
|
|
220
|
+
req
|
|
221
|
+
.once('error', (err) => {
|
|
222
|
+
if (resolved) {
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
// console.error('downloadChunk(%d) req error:', attempt, err)
|
|
226
|
+
if (attempt < retries) {
|
|
227
|
+
void doRequest(attempt + 1);
|
|
228
|
+
}
|
|
229
|
+
else {
|
|
230
|
+
reject(err);
|
|
231
|
+
}
|
|
232
|
+
})
|
|
233
|
+
.setTimeout(HTTP_TIMEOUT, () => {
|
|
234
|
+
const e = new Error(`FileBox: Http request timeout (${HTTP_TIMEOUT})!`);
|
|
235
|
+
req.emit('error', e);
|
|
236
|
+
req.destroy();
|
|
237
|
+
})
|
|
238
|
+
.end();
|
|
239
|
+
};
|
|
240
|
+
void doRequest(0);
|
|
241
|
+
});
|
|
242
|
+
}
|
|
115
243
|
export async function streamToBuffer(stream) {
|
|
116
244
|
return new Promise((resolve, reject) => {
|
|
117
245
|
const bufferList = [];
|
|
@@ -120,7 +248,7 @@ export async function streamToBuffer(stream) {
|
|
|
120
248
|
const fullBuffer = Buffer.concat(bufferList);
|
|
121
249
|
resolve(fullBuffer);
|
|
122
250
|
});
|
|
123
|
-
stream.on('data', buffer => bufferList.push(buffer));
|
|
251
|
+
stream.on('data', (buffer) => bufferList.push(buffer));
|
|
124
252
|
});
|
|
125
253
|
}
|
|
126
254
|
//# sourceMappingURL=misc.js.map
|
package/dist/esm/src/misc.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"misc.js","sourceRoot":"","sources":["../../../src/misc.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAS,MAAM,CAAA;AAC1B,OAAO,KAAK,MAAQ,OAAO,CAAA;AAC3B,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;
|
|
1
|
+
{"version":3,"file":"misc.js","sourceRoot":"","sources":["../../../src/misc.ts"],"names":[],"mappings":"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"}
|
|
@@ -46,4 +46,13 @@ test('httpStream', async (t) => {
|
|
|
46
46
|
const obj = JSON.parse(buffer.toString());
|
|
47
47
|
t.equal(obj.headers[MOL_KEY], MOL_VAL, 'should send the header right');
|
|
48
48
|
});
|
|
49
|
+
test('httpStream in chunks', async (t) => {
|
|
50
|
+
const URL = 'https://media.w3.org/2010/05/sintel/trailer.mp4';
|
|
51
|
+
const res = await httpStream(URL);
|
|
52
|
+
let length = 0;
|
|
53
|
+
for await (const chunk of res) {
|
|
54
|
+
length += chunk.length;
|
|
55
|
+
}
|
|
56
|
+
t.equal(length, 4372373, 'should get data in chunks right');
|
|
57
|
+
});
|
|
49
58
|
//# sourceMappingURL=misc.spec.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"misc.spec.js","sourceRoot":"","sources":["../../../src/misc.spec.ts"],"names":[],"mappings":";AAEA,sCAAsC;AACtC,OAAO,EAAE,IAAI,EAAE,MAAO,QAAQ,CAAA;AAE9B,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,cAAc,EACd,UAAU,EACV,cAAc,GACf,MAA8B,WAAW,CAAA;AAE1C,IAAI,CAAC,mBAAmB,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IAClC,MAAM,MAAM,GAAG;QACb,0EAA0E;QAC1E,0EAA0E;QAC1E,0EAA0E;QAC1E,0EAA0E;KAC3E,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACV,MAAM,OAAO,GAAG;QACd,wBAAwB;QACxB,MAAM;KACP,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAEV,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,eAAe,CAAC,OAAO,CAAC,EAAE,gCAAgC,CAAC,CAAA;AAC7E,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,gBAAgB,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IAC/B,MAAM,GAAG,GAAG,sDAAsD,CAAA;IAElE,MAAM,oBAAoB,GAAK,qBAAqB,CAAA;IACpD,MAAM,sBAAsB,GAAG,0CAA0C,CAAA;IAEzE,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,CAAA;IAEzC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,oBAAoB,CAAC,EAAE,sBAAsB,EAAE,8BAA8B,CAAC,CAAA;AAChG,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,sBAAsB,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IACrC,MAAM,sBAAsB,GAAQ;QAClC,qBAAqB,EAAE,sCAAsC;KAC9D,CAAA;IACD,MAAM,yBAAyB,GAAQ;QACrC,qBAAqB,EAAE,oCAAoC;KAC5D,CAAA;IACD,MAAM,kBAAkB,GAAG,eAAe,CAAA;IAE1C,IAAI,QAAQ,GAAG,oBAAoB,CAAC,sBAAsB,CAAC,CAAA;IAC3D,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,kBAAkB,EAAE,yCAAyC,CAAC,CAAA;IAEhF,QAAQ,GAAG,oBAAoB,CAAC,yBAAyB,CAAC,CAAA;IAC1D,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,kBAAkB,EAAE,4CAA4C,CAAC,CAAA;AACrF,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,YAAY,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IAC3B,MAAM,GAAG,GAAG,6BAA6B,CAAA;IAEzC,MAAM,OAAO,GAAG,KAAK,CAAA;IACrB,MAAM,OAAO,GAAG,IAAI,CAAA;IAEpB,MAAM,OAAO,GAAG,EAA+B,CAAA;IAC/C,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAA;IAE1B,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;IAE1C,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,CAAA;IACxC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAA;IACzC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,8BAA8B,CAAC,CAAA;AACxE,CAAC,CAAC,CAAA"}
|
|
1
|
+
{"version":3,"file":"misc.spec.js","sourceRoot":"","sources":["../../../src/misc.spec.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/src/version.js
CHANGED
|
@@ -25,11 +25,15 @@ test('slow network stall HTTP_TIMEOUT', async (t) => {
|
|
|
25
25
|
if (req.url === URL.NOT_TIMEOUT) {
|
|
26
26
|
await setTimeout(HTTP_TIMEOUT * 0.5);
|
|
27
27
|
res.write(Buffer.from('This is the second chunk of data.'));
|
|
28
|
-
await setTimeout(HTTP_TIMEOUT * 0.9);
|
|
29
28
|
}
|
|
30
|
-
else {
|
|
29
|
+
else if (req.url === URL.READY) {
|
|
31
30
|
await setTimeout(HTTP_TIMEOUT + 100);
|
|
32
31
|
}
|
|
32
|
+
else if (req.url === URL.TIMEOUT) {
|
|
33
|
+
if (req.method === 'GET') {
|
|
34
|
+
await setTimeout(HTTP_TIMEOUT + 100);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
33
37
|
// console.debug(`${new Date().toLocaleTimeString()} call res.end "${req.url}"`)
|
|
34
38
|
res.end(Buffer.from('All data end.'));
|
|
35
39
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"network-timeout.spec.js","sourceRoot":"","sources":["../../../tests/network-timeout.spec.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,MAAM,CAAA;AAEnC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAEpC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAEvC,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAE/C,IAAI,CAAC,iCAAiC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IAClD,MAAM,OAAO,GAAG,KAAK,CAAC,aAAa,EAAE,CAAA;IACrC,OAAO,CAAC,aAAa,CAAC;QACpB,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE;QACf,iBAAiB,EAAE,IAAI;QACvB,uBAAuB,EAAE,IAAI;QAC7B,MAAM,EAAE,CAAE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,UAAU,CAAE;KACrF,CAAC,CAAA;IACF,CAAC,CAAC,IAAI,GAAG,CAAC,CAAA;IACV,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAA;IACpE,MAAM,GAAG,GAAG;QACV,WAAW,EAAE,cAAc;QAC3B,KAAK,EAAE,QAAQ;QACf,OAAO,EAAE,UAAU;KACpB,CAAA;IAED,uDAAuD;IACvD,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QAC7C,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC,CAAA;QAE1D,IAAI,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,WAAW,EAAE;YAC/B,MAAM,UAAU,CAAC,YAAY,GAAG,GAAG,CAAC,CAAA;YACpC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"network-timeout.spec.js","sourceRoot":"","sources":["../../../tests/network-timeout.spec.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@juzi/file-box",
|
|
3
|
-
"version": "1.7.
|
|
3
|
+
"version": "1.7.2",
|
|
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": {
|
|
@@ -57,7 +57,6 @@
|
|
|
57
57
|
"gts": "^3.1.0",
|
|
58
58
|
"pkg-jq": "^0.2.11",
|
|
59
59
|
"read-pkg-up": "^8.0.0",
|
|
60
|
-
"esquery": "1.4.0",
|
|
61
60
|
"reflect-metadata": "^0.1.13"
|
|
62
61
|
},
|
|
63
62
|
"dependencies": {
|
package/src/config.ts
CHANGED
package/src/misc.spec.ts
CHANGED
|
@@ -68,3 +68,13 @@ test('httpStream', async t => {
|
|
|
68
68
|
const obj = JSON.parse(buffer.toString())
|
|
69
69
|
t.equal(obj.headers[MOL_KEY], MOL_VAL, 'should send the header right')
|
|
70
70
|
})
|
|
71
|
+
|
|
72
|
+
test('httpStream in chunks', async (t) => {
|
|
73
|
+
const URL = 'https://media.w3.org/2010/05/sintel/trailer.mp4'
|
|
74
|
+
const res = await httpStream(URL)
|
|
75
|
+
let length = 0
|
|
76
|
+
for await (const chunk of res) {
|
|
77
|
+
length += chunk.length
|
|
78
|
+
}
|
|
79
|
+
t.equal(length, 4372373, 'should get data in chunks right')
|
|
80
|
+
})
|
package/src/misc.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import http from 'http'
|
|
2
2
|
import https from 'https'
|
|
3
3
|
import { URL } from 'url'
|
|
4
|
-
import type stream from 'stream'
|
|
5
4
|
|
|
6
|
-
import {
|
|
5
|
+
import { PassThrough, pipeline, Readable } from 'stream'
|
|
6
|
+
|
|
7
|
+
import { HTTP_CHUNK_SIZE, HTTP_TIMEOUT } from './config.js'
|
|
7
8
|
|
|
8
9
|
export function dataUrlToBase64 (dataUrl: string): string {
|
|
9
10
|
const dataList = dataUrl.split(',')
|
|
@@ -96,10 +97,10 @@ export function httpHeaderToFileName (
|
|
|
96
97
|
export async function httpStream (
|
|
97
98
|
url : string,
|
|
98
99
|
headers : http.OutgoingHttpHeaders = {},
|
|
99
|
-
): Promise<
|
|
100
|
+
): Promise<Readable> {
|
|
100
101
|
const parsedUrl = new URL(url)
|
|
101
102
|
|
|
102
|
-
const protocol
|
|
103
|
+
const protocol = parsedUrl.protocol
|
|
103
104
|
|
|
104
105
|
const options: http.RequestOptions = {}
|
|
105
106
|
|
|
@@ -123,12 +124,29 @@ export async function httpStream (
|
|
|
123
124
|
...headers,
|
|
124
125
|
}
|
|
125
126
|
|
|
126
|
-
|
|
127
|
+
const headHeaders = await httpHeadHeader(url)
|
|
128
|
+
const fileSize = Number(headHeaders['content-length'])
|
|
129
|
+
|
|
130
|
+
if (headHeaders['accept-ranges'] === 'bytes' && fileSize > HTTP_CHUNK_SIZE) {
|
|
131
|
+
return await downloadFileInChunks(get, url, options, fileSize, HTTP_CHUNK_SIZE)
|
|
132
|
+
} else {
|
|
133
|
+
return await downloadFile(get, url, options)
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
async function downloadFile (
|
|
138
|
+
get: typeof https.get,
|
|
139
|
+
url: string,
|
|
140
|
+
options: http.RequestOptions,
|
|
141
|
+
): Promise<Readable> {
|
|
142
|
+
return new Promise<Readable>((resolve, reject) => {
|
|
127
143
|
let res: http.IncomingMessage | null = null
|
|
128
|
-
const req = get(
|
|
144
|
+
const req = get(url, options, (response) => {
|
|
129
145
|
res = response
|
|
130
146
|
resolve(res)
|
|
131
147
|
})
|
|
148
|
+
|
|
149
|
+
req
|
|
132
150
|
.on('error', reject)
|
|
133
151
|
.setTimeout(HTTP_TIMEOUT, () => {
|
|
134
152
|
const e = new Error(`FileBox: Http request timeout (${HTTP_TIMEOUT})!`)
|
|
@@ -142,9 +160,147 @@ export async function httpStream (
|
|
|
142
160
|
})
|
|
143
161
|
}
|
|
144
162
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
163
|
+
async function downloadFileInChunks (
|
|
164
|
+
get: typeof https.get,
|
|
165
|
+
url: string,
|
|
166
|
+
options: http.RequestOptions,
|
|
167
|
+
fileSize: number,
|
|
168
|
+
chunkSize = HTTP_CHUNK_SIZE,
|
|
169
|
+
): Promise<Readable> {
|
|
170
|
+
const ac = new AbortController()
|
|
171
|
+
const stream = new PassThrough()
|
|
172
|
+
|
|
173
|
+
const abortAc = () => {
|
|
174
|
+
if (!ac.signal.aborted) {
|
|
175
|
+
ac.abort()
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
stream
|
|
180
|
+
.once('close', abortAc)
|
|
181
|
+
.once('error', abortAc)
|
|
182
|
+
|
|
183
|
+
const chunksCount = Math.ceil(fileSize / chunkSize)
|
|
184
|
+
let chunksDownloaded = 0
|
|
185
|
+
let dataTotalSize = 0
|
|
186
|
+
|
|
187
|
+
const doDownloadChunk = async function (i: number, retries: number) {
|
|
188
|
+
const start = i * chunkSize
|
|
189
|
+
const end = Math.min((i + 1) * chunkSize - 1, fileSize - 1)
|
|
190
|
+
const range = `bytes=${start}-${end}`
|
|
191
|
+
|
|
192
|
+
// console.info('doDownloadChunk() range:', range)
|
|
193
|
+
|
|
194
|
+
if (ac.signal.aborted) {
|
|
195
|
+
stream.destroy(new Error('Signal aborted.'))
|
|
196
|
+
return
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
const requestOptions: http.RequestOptions = {
|
|
200
|
+
...options,
|
|
201
|
+
signal: ac.signal,
|
|
202
|
+
timeout: HTTP_TIMEOUT,
|
|
203
|
+
}
|
|
204
|
+
if (!requestOptions.headers) {
|
|
205
|
+
requestOptions.headers = {}
|
|
206
|
+
}
|
|
207
|
+
requestOptions.headers['Range'] = range
|
|
208
|
+
|
|
209
|
+
try {
|
|
210
|
+
const chunk = await downloadChunk(get, url, requestOptions, retries)
|
|
211
|
+
if (chunk.errored) {
|
|
212
|
+
throw new Error('chunk stream error')
|
|
213
|
+
}
|
|
214
|
+
if (chunk.closed) {
|
|
215
|
+
throw new Error('chunk stream closed')
|
|
216
|
+
}
|
|
217
|
+
if (chunk.destroyed) {
|
|
218
|
+
throw new Error('chunk stream destroyed')
|
|
219
|
+
}
|
|
220
|
+
const buf = await streamToBuffer(chunk)
|
|
221
|
+
stream.push(buf)
|
|
222
|
+
chunksDownloaded++
|
|
223
|
+
dataTotalSize += buf.length
|
|
224
|
+
|
|
225
|
+
if (chunksDownloaded === chunksCount || dataTotalSize >= fileSize) {
|
|
226
|
+
stream.push(null)
|
|
227
|
+
}
|
|
228
|
+
} catch (err) {
|
|
229
|
+
if (retries === 0) {
|
|
230
|
+
stream.emit('error', err)
|
|
231
|
+
} else {
|
|
232
|
+
await doDownloadChunk(i, retries - 1)
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
const doDownloadAllChunks = async function () {
|
|
238
|
+
for (let i = 0; i < chunksCount; i++) {
|
|
239
|
+
if (ac.signal.aborted) {
|
|
240
|
+
return
|
|
241
|
+
}
|
|
242
|
+
await doDownloadChunk(i, 3)
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
void doDownloadAllChunks().catch((e) => {
|
|
247
|
+
stream.emit('error', e)
|
|
248
|
+
})
|
|
249
|
+
|
|
250
|
+
return stream
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
async function downloadChunk (
|
|
254
|
+
get: typeof https.get,
|
|
255
|
+
url: string,
|
|
256
|
+
requestOptions: http.RequestOptions,
|
|
257
|
+
retries: number,
|
|
258
|
+
): Promise<Readable> {
|
|
259
|
+
return new Promise<Readable>((resolve, reject) => {
|
|
260
|
+
const doRequest = (attempt: number) => {
|
|
261
|
+
let resolved = false
|
|
262
|
+
const req = get(url, requestOptions, (res) => {
|
|
263
|
+
const statusCode = res.statusCode ?? 0
|
|
264
|
+
// console.info('downloadChunk(%d) statusCode: %d rsp.headers: %o', attempt, statusCode, res.headers)
|
|
265
|
+
|
|
266
|
+
if (statusCode < 200 || statusCode >= 300) {
|
|
267
|
+
if (attempt < retries) {
|
|
268
|
+
void doRequest(attempt + 1)
|
|
269
|
+
} else {
|
|
270
|
+
reject(new Error(`Request failed with status code ${res.statusCode}`))
|
|
271
|
+
}
|
|
272
|
+
return
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
const stream = pipeline(res, new PassThrough(), () => {})
|
|
276
|
+
resolve(stream)
|
|
277
|
+
resolved = true
|
|
278
|
+
})
|
|
279
|
+
|
|
280
|
+
req
|
|
281
|
+
.once('error', (err) => {
|
|
282
|
+
if (resolved) {
|
|
283
|
+
return
|
|
284
|
+
}
|
|
285
|
+
// console.error('downloadChunk(%d) req error:', attempt, err)
|
|
286
|
+
if (attempt < retries) {
|
|
287
|
+
void doRequest(attempt + 1)
|
|
288
|
+
} else {
|
|
289
|
+
reject(err)
|
|
290
|
+
}
|
|
291
|
+
})
|
|
292
|
+
.setTimeout(HTTP_TIMEOUT, () => {
|
|
293
|
+
const e = new Error(`FileBox: Http request timeout (${HTTP_TIMEOUT})!`)
|
|
294
|
+
req.emit('error', e)
|
|
295
|
+
req.destroy()
|
|
296
|
+
})
|
|
297
|
+
.end()
|
|
298
|
+
}
|
|
299
|
+
void doRequest(0)
|
|
300
|
+
})
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
export async function streamToBuffer (stream: Readable): Promise<Buffer> {
|
|
148
304
|
return new Promise<Buffer>((resolve, reject) => {
|
|
149
305
|
const bufferList: Buffer[] = []
|
|
150
306
|
stream.once('error', reject)
|
|
@@ -152,6 +308,6 @@ export async function streamToBuffer (
|
|
|
152
308
|
const fullBuffer = Buffer.concat(bufferList)
|
|
153
309
|
resolve(fullBuffer)
|
|
154
310
|
})
|
|
155
|
-
stream.on('data', buffer => bufferList.push(buffer))
|
|
311
|
+
stream.on('data', (buffer) => bufferList.push(buffer))
|
|
156
312
|
})
|
|
157
313
|
}
|
package/src/version.ts
CHANGED