@unchainedshop/plugins 1.2.32 → 1.2.33
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/lib/files/gridfs/gridfs-adapter.js +11 -24
- package/lib/files/gridfs/gridfs-adapter.js.map +1 -1
- package/lib/files/gridfs/gridfs-webhook.js +4 -3
- package/lib/files/gridfs/gridfs-webhook.js.map +1 -1
- package/package.json +1 -1
- package/src/files/gridfs/gridfs-adapter.ts +10 -27
- package/src/files/gridfs/gridfs-webhook.ts +4 -3
- package/src/files/gridfs/promisePipe.ts +0 -19
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import { FileAdapter, FileDirector, buildHashedFilename } from '@unchainedshop/file-upload';
|
|
2
|
-
import https from 'https';
|
|
3
|
-
import http from 'http';
|
|
4
2
|
import mimeType from 'mime-types';
|
|
5
3
|
import { URL } from 'url';
|
|
6
4
|
import { Readable } from 'stream';
|
|
5
|
+
import { pipeline } from 'stream/promises';
|
|
6
|
+
import fetch from 'node-fetch';
|
|
7
7
|
import sign from './sign';
|
|
8
|
-
import promisePipe from './promisePipe';
|
|
9
8
|
const { UNCHAINED_PUT_URL_EXPIRY, ROOT_URL } = process.env;
|
|
10
9
|
const getExpiryDate = () => new Date(new Date().getTime() + (parseInt(UNCHAINED_PUT_URL_EXPIRY, 10) || 24 * 60 * 60 * 1000));
|
|
11
10
|
const bufferToStream = (buffer) => {
|
|
@@ -14,22 +13,6 @@ const bufferToStream = (buffer) => {
|
|
|
14
13
|
stream.push(null);
|
|
15
14
|
return stream;
|
|
16
15
|
};
|
|
17
|
-
const createDownloadStream = async (fileUrl, headers) => {
|
|
18
|
-
const { href, protocol } = new URL(fileUrl);
|
|
19
|
-
return new Promise((resolve, reject) => {
|
|
20
|
-
try {
|
|
21
|
-
if (protocol === 'http:') {
|
|
22
|
-
http.get(href, { headers }, resolve);
|
|
23
|
-
}
|
|
24
|
-
else {
|
|
25
|
-
https.get(href, { headers }, resolve);
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
catch (e) {
|
|
29
|
-
reject(e);
|
|
30
|
-
}
|
|
31
|
-
});
|
|
32
|
-
};
|
|
33
16
|
export const GridFSAdapter = {
|
|
34
17
|
key: 'shop.unchained.file-upload-plugin.gridfs',
|
|
35
18
|
label: 'Uploads files to Database using GridFS',
|
|
@@ -66,14 +49,15 @@ export const GridFSAdapter = {
|
|
|
66
49
|
const expiryDate = getExpiryDate();
|
|
67
50
|
const _id = buildHashedFilename(directoryName, fileName, expiryDate);
|
|
68
51
|
const writeStream = await modules.gridfsFileUploads.createWriteStream(directoryName, _id, fileName);
|
|
69
|
-
|
|
52
|
+
await pipeline(stream, writeStream);
|
|
53
|
+
const { length } = writeStream;
|
|
70
54
|
const url = `/gridfs/${directoryName}/${_id}`;
|
|
71
55
|
return {
|
|
72
56
|
_id,
|
|
73
57
|
directoryName,
|
|
74
58
|
expiryDate: null,
|
|
75
59
|
fileName,
|
|
76
|
-
size:
|
|
60
|
+
size: length,
|
|
77
61
|
type: mimeType.lookup(fileName) || (await Promise.resolve(rawFile)).mimetype,
|
|
78
62
|
url,
|
|
79
63
|
};
|
|
@@ -83,16 +67,19 @@ export const GridFSAdapter = {
|
|
|
83
67
|
const fileName = fname || href.split('/').pop();
|
|
84
68
|
const expiryDate = getExpiryDate();
|
|
85
69
|
const _id = buildHashedFilename(directoryName, fileName, expiryDate);
|
|
86
|
-
const downloadStream = await createDownloadStream(href, headers);
|
|
87
70
|
const writeStream = await modules.gridfsFileUploads.createWriteStream(directoryName, _id, fileName);
|
|
88
|
-
const
|
|
71
|
+
const response = await fetch(href, { headers });
|
|
72
|
+
if (!response.ok)
|
|
73
|
+
throw new Error(`Unexpected response for ${href}: ${response.statusText}`);
|
|
74
|
+
await pipeline(response.body, writeStream);
|
|
75
|
+
const { length } = writeStream;
|
|
89
76
|
const url = `/gridfs/${directoryName}/${_id}`;
|
|
90
77
|
return {
|
|
91
78
|
_id,
|
|
92
79
|
directoryName,
|
|
93
80
|
expiryDate: null,
|
|
94
81
|
fileName,
|
|
95
|
-
size:
|
|
82
|
+
size: length,
|
|
96
83
|
type: mimeType.lookup(fileName),
|
|
97
84
|
url,
|
|
98
85
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gridfs-adapter.js","sourceRoot":"","sources":["../../../src/files/gridfs/gridfs-adapter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAC5F,OAAO,
|
|
1
|
+
{"version":3,"file":"gridfs-adapter.js","sourceRoot":"","sources":["../../../src/files/gridfs/gridfs-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { useMiddlewareWithCurrentContext } from '@unchainedshop/api';
|
|
2
2
|
import { log, LogLevel } from '@unchainedshop/logger';
|
|
3
3
|
import { buildHashedFilename } from '@unchainedshop/file-upload';
|
|
4
|
+
import { pipeline } from 'stream/promises';
|
|
4
5
|
import sign from './sign';
|
|
5
|
-
import promisePipe from './promisePipe';
|
|
6
6
|
const { ROOT_URL } = process.env;
|
|
7
7
|
/*
|
|
8
8
|
curl -vvv -X PUT -T /Users/pozylon/Downloads/grafik.png http://localhost:4010/gridfs/user-avatars/hans.png?e=1653059591506&s=df8626a1c9b9006249d7f1928fd530579fed57216f1bdcb83c28a8322cdc90b1
|
|
@@ -25,7 +25,8 @@ export default (app) => useMiddlewareWithCurrentContext(app, '/gridfs', async (r
|
|
|
25
25
|
}
|
|
26
26
|
const writeStream = await modules.gridfsFileUploads.createWriteStream(directoryName, fileId, fileName);
|
|
27
27
|
res.writeHead(200);
|
|
28
|
-
|
|
28
|
+
await pipeline(req, writeStream);
|
|
29
|
+
const { length } = writeStream;
|
|
29
30
|
await services.files.linkFile({ fileId, size: length }, req.unchainedContext);
|
|
30
31
|
res.end();
|
|
31
32
|
return;
|
|
@@ -38,7 +39,7 @@ export default (app) => useMiddlewareWithCurrentContext(app, '/gridfs', async (r
|
|
|
38
39
|
const fileId = fileName;
|
|
39
40
|
const readStream = await modules.gridfsFileUploads.createReadStream(directoryName, fileId);
|
|
40
41
|
res.writeHead(200);
|
|
41
|
-
await
|
|
42
|
+
await pipeline(readStream, res);
|
|
42
43
|
res.end();
|
|
43
44
|
return;
|
|
44
45
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gridfs-webhook.js","sourceRoot":"","sources":["../../../src/files/gridfs/gridfs-webhook.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,+BAA+B,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,
|
|
1
|
+
{"version":3,"file":"gridfs-webhook.js","sourceRoot":"","sources":["../../../src/files/gridfs/gridfs-webhook.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import { IFileAdapter, UploadFileData } from '@unchainedshop/types/files';
|
|
2
2
|
import { FileAdapter, FileDirector, buildHashedFilename } from '@unchainedshop/file-upload';
|
|
3
|
-
import https from 'https';
|
|
4
|
-
import http, { OutgoingHttpHeaders } from 'http';
|
|
5
3
|
import mimeType from 'mime-types';
|
|
6
4
|
import { URL } from 'url';
|
|
7
5
|
import { Readable } from 'stream';
|
|
6
|
+
import { pipeline } from 'stream/promises';
|
|
7
|
+
import fetch from 'node-fetch';
|
|
8
8
|
import sign from './sign';
|
|
9
|
-
import promisePipe from './promisePipe';
|
|
10
9
|
|
|
11
10
|
const { UNCHAINED_PUT_URL_EXPIRY, ROOT_URL } = process.env;
|
|
12
11
|
|
|
@@ -21,24 +20,6 @@ const bufferToStream = (buffer: any) => {
|
|
|
21
20
|
return stream;
|
|
22
21
|
};
|
|
23
22
|
|
|
24
|
-
const createDownloadStream = async (
|
|
25
|
-
fileUrl: string,
|
|
26
|
-
headers: OutgoingHttpHeaders,
|
|
27
|
-
): Promise<Readable> => {
|
|
28
|
-
const { href, protocol } = new URL(fileUrl);
|
|
29
|
-
return new Promise((resolve, reject) => {
|
|
30
|
-
try {
|
|
31
|
-
if (protocol === 'http:') {
|
|
32
|
-
http.get(href, { headers }, resolve);
|
|
33
|
-
} else {
|
|
34
|
-
https.get(href, { headers }, resolve);
|
|
35
|
-
}
|
|
36
|
-
} catch (e) {
|
|
37
|
-
reject(e);
|
|
38
|
-
}
|
|
39
|
-
});
|
|
40
|
-
};
|
|
41
|
-
|
|
42
23
|
export const GridFSAdapter: IFileAdapter = {
|
|
43
24
|
key: 'shop.unchained.file-upload-plugin.gridfs',
|
|
44
25
|
label: 'Uploads files to Database using GridFS',
|
|
@@ -86,8 +67,8 @@ export const GridFSAdapter: IFileAdapter = {
|
|
|
86
67
|
const _id = buildHashedFilename(directoryName, fileName, expiryDate);
|
|
87
68
|
|
|
88
69
|
const writeStream = await modules.gridfsFileUploads.createWriteStream(directoryName, _id, fileName);
|
|
89
|
-
|
|
90
|
-
const
|
|
70
|
+
await pipeline(stream, writeStream);
|
|
71
|
+
const { length } = writeStream;
|
|
91
72
|
const url = `/gridfs/${directoryName}/${_id}`;
|
|
92
73
|
|
|
93
74
|
return {
|
|
@@ -95,7 +76,7 @@ export const GridFSAdapter: IFileAdapter = {
|
|
|
95
76
|
directoryName,
|
|
96
77
|
expiryDate: null,
|
|
97
78
|
fileName,
|
|
98
|
-
size:
|
|
79
|
+
size: length,
|
|
99
80
|
type: mimeType.lookup(fileName) || (await Promise.resolve(rawFile)).mimetype,
|
|
100
81
|
url,
|
|
101
82
|
} as UploadFileData;
|
|
@@ -112,9 +93,11 @@ export const GridFSAdapter: IFileAdapter = {
|
|
|
112
93
|
const expiryDate = getExpiryDate();
|
|
113
94
|
const _id = buildHashedFilename(directoryName, fileName, expiryDate);
|
|
114
95
|
|
|
115
|
-
const downloadStream = await createDownloadStream(href, headers);
|
|
116
96
|
const writeStream = await modules.gridfsFileUploads.createWriteStream(directoryName, _id, fileName);
|
|
117
|
-
const
|
|
97
|
+
const response = await fetch(href, { headers });
|
|
98
|
+
if (!response.ok) throw new Error(`Unexpected response for ${href}: ${response.statusText}`);
|
|
99
|
+
await pipeline(response.body, writeStream);
|
|
100
|
+
const { length } = writeStream;
|
|
118
101
|
const url = `/gridfs/${directoryName}/${_id}`;
|
|
119
102
|
|
|
120
103
|
return {
|
|
@@ -122,7 +105,7 @@ export const GridFSAdapter: IFileAdapter = {
|
|
|
122
105
|
directoryName,
|
|
123
106
|
expiryDate: null,
|
|
124
107
|
fileName,
|
|
125
|
-
size:
|
|
108
|
+
size: length,
|
|
126
109
|
type: mimeType.lookup(fileName),
|
|
127
110
|
url,
|
|
128
111
|
} as UploadFileData;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { useMiddlewareWithCurrentContext } from '@unchainedshop/api';
|
|
2
2
|
import { log, LogLevel } from '@unchainedshop/logger';
|
|
3
3
|
import { buildHashedFilename } from '@unchainedshop/file-upload';
|
|
4
|
+
import { pipeline } from 'stream/promises';
|
|
4
5
|
import sign from './sign';
|
|
5
|
-
import promisePipe from './promisePipe';
|
|
6
6
|
|
|
7
7
|
const { ROOT_URL } = process.env;
|
|
8
8
|
|
|
@@ -34,7 +34,8 @@ export default (app) =>
|
|
|
34
34
|
fileName,
|
|
35
35
|
);
|
|
36
36
|
res.writeHead(200);
|
|
37
|
-
|
|
37
|
+
await pipeline(req, writeStream);
|
|
38
|
+
const { length } = writeStream;
|
|
38
39
|
await services.files.linkFile({ fileId, size: length }, req.unchainedContext);
|
|
39
40
|
res.end();
|
|
40
41
|
return;
|
|
@@ -47,7 +48,7 @@ export default (app) =>
|
|
|
47
48
|
const fileId = fileName;
|
|
48
49
|
const readStream = await modules.gridfsFileUploads.createReadStream(directoryName, fileId);
|
|
49
50
|
res.writeHead(200);
|
|
50
|
-
await
|
|
51
|
+
await pipeline(readStream, res);
|
|
51
52
|
res.end();
|
|
52
53
|
return;
|
|
53
54
|
}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
export default async (readStream, writeStream) => {
|
|
2
|
-
return new Promise((resolve, reject) => {
|
|
3
|
-
try {
|
|
4
|
-
readStream
|
|
5
|
-
.on('error', (e) => {
|
|
6
|
-
reject(e);
|
|
7
|
-
})
|
|
8
|
-
.pipe(writeStream)
|
|
9
|
-
.on('error', (e) => {
|
|
10
|
-
reject(e);
|
|
11
|
-
})
|
|
12
|
-
.on('finish', async (file) => {
|
|
13
|
-
resolve(file);
|
|
14
|
-
});
|
|
15
|
-
} catch (e) {
|
|
16
|
-
reject(e);
|
|
17
|
-
}
|
|
18
|
-
});
|
|
19
|
-
};
|