strapi-provider-upload-s3-mini 1.0.0 → 1.0.1
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/index.d.ts +0 -1
- package/dist/index.js +9 -4
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +99 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +12 -3
- package/dist/tsconfig.build.tsbuildinfo +0 -1
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var s3mini = require('s3mini');
|
|
4
|
+
|
|
2
5
|
const streamToBuffer = (stream) => {
|
|
3
6
|
return new Promise((resolve, reject) => {
|
|
4
7
|
const chunks = [];
|
|
@@ -7,7 +10,7 @@ const streamToBuffer = (stream) => {
|
|
|
7
10
|
stream.on("end", () => resolve(Buffer.concat(chunks)));
|
|
8
11
|
});
|
|
9
12
|
};
|
|
10
|
-
|
|
13
|
+
var index = {
|
|
11
14
|
init(config) {
|
|
12
15
|
const key = config.key;
|
|
13
16
|
const secret = config.secret;
|
|
@@ -27,7 +30,7 @@ export default {
|
|
|
27
30
|
catch (e) {
|
|
28
31
|
// fallback to original endpoint if URL parsing fails
|
|
29
32
|
}
|
|
30
|
-
const s3 = new S3mini({
|
|
33
|
+
const s3 = new s3mini.S3mini({
|
|
31
34
|
accessKeyId: key,
|
|
32
35
|
secretAccessKey: secret,
|
|
33
36
|
endpoint: finalEndpoint,
|
|
@@ -93,4 +96,6 @@ export default {
|
|
|
93
96
|
};
|
|
94
97
|
},
|
|
95
98
|
};
|
|
96
|
-
|
|
99
|
+
|
|
100
|
+
module.exports = index;
|
|
101
|
+
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":[null],"names":["S3mini"],"mappings":"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"}
|
package/dist/index.mjs
ADDED
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { S3mini } from 's3mini';
|
|
2
|
+
|
|
3
|
+
const streamToBuffer = (stream) => {
|
|
4
|
+
return new Promise((resolve, reject) => {
|
|
5
|
+
const chunks = [];
|
|
6
|
+
stream.on("data", (chunk) => chunks.push(chunk));
|
|
7
|
+
stream.on("error", reject);
|
|
8
|
+
stream.on("end", () => resolve(Buffer.concat(chunks)));
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var index = {
|
|
12
|
+
init(config) {
|
|
13
|
+
const key = config.key;
|
|
14
|
+
const secret = config.secret;
|
|
15
|
+
const { endpoint, region, bucket, directory, cdnEndpoint } = config;
|
|
16
|
+
// Ensure endpoint includes the bucket name as a subdomain if not already present
|
|
17
|
+
// s3mini often works better with this format for DigitalOcean/Cloudflare
|
|
18
|
+
let finalEndpoint = endpoint;
|
|
19
|
+
try {
|
|
20
|
+
if (bucket && !endpoint.includes(bucket)) {
|
|
21
|
+
const url = new URL(endpoint);
|
|
22
|
+
// Avoid double bucket prefix if it's already there or if it's a generic s3 endpoint
|
|
23
|
+
if (!url.host.startsWith(`${bucket}.`)) {
|
|
24
|
+
finalEndpoint = `${url.protocol}//${bucket}.${url.host}${url.pathname}`;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
catch (e) {
|
|
29
|
+
// fallback to original endpoint if URL parsing fails
|
|
30
|
+
}
|
|
31
|
+
const s3 = new S3mini({
|
|
32
|
+
accessKeyId: key,
|
|
33
|
+
secretAccessKey: secret,
|
|
34
|
+
endpoint: finalEndpoint,
|
|
35
|
+
region,
|
|
36
|
+
});
|
|
37
|
+
const filePrefix = directory ? `${directory.replace(/\/+$/, '')}/` : '';
|
|
38
|
+
const getFileKey = (file) => {
|
|
39
|
+
const path = file.path ? `${file.path}/` : '';
|
|
40
|
+
return `${filePrefix}${path}${file.hash}${file.ext}`;
|
|
41
|
+
};
|
|
42
|
+
const getUrl = (key) => {
|
|
43
|
+
if (cdnEndpoint) {
|
|
44
|
+
return `${cdnEndpoint.replace(/\/$/, "")}/${key}`;
|
|
45
|
+
}
|
|
46
|
+
const host = endpoint.replace(/^https?:\/\//, "");
|
|
47
|
+
return `https://${bucket}.${host}/${key}`;
|
|
48
|
+
};
|
|
49
|
+
const upload = async (file) => {
|
|
50
|
+
const key = getFileKey(file);
|
|
51
|
+
let content;
|
|
52
|
+
if (file.buffer) {
|
|
53
|
+
content = file.buffer;
|
|
54
|
+
}
|
|
55
|
+
else if (file.stream) {
|
|
56
|
+
content = await streamToBuffer(file.stream);
|
|
57
|
+
}
|
|
58
|
+
else if (file.getStream) {
|
|
59
|
+
content = await streamToBuffer(file.getStream());
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
throw new Error("File buffer or stream is missing");
|
|
63
|
+
}
|
|
64
|
+
await s3.putObject(key, content, file.mime, undefined, {
|
|
65
|
+
"x-amz-acl": "public-read",
|
|
66
|
+
});
|
|
67
|
+
file.url = getUrl(key);
|
|
68
|
+
};
|
|
69
|
+
return {
|
|
70
|
+
upload(file) {
|
|
71
|
+
return upload(file);
|
|
72
|
+
},
|
|
73
|
+
uploadStream(file) {
|
|
74
|
+
return upload(file);
|
|
75
|
+
},
|
|
76
|
+
async delete(file) {
|
|
77
|
+
const key = getFileKey(file);
|
|
78
|
+
try {
|
|
79
|
+
await s3.deleteObject(key);
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
// Strapi usually expects delete to be silent if file not found
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
async check(file) {
|
|
86
|
+
const key = getFileKey(file);
|
|
87
|
+
try {
|
|
88
|
+
return await s3.objectExists(key);
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
return false;
|
|
92
|
+
}
|
|
93
|
+
},
|
|
94
|
+
};
|
|
95
|
+
},
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
export { index as default };
|
|
99
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../src/index.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "strapi-provider-upload-s3-mini",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.1",
|
|
4
4
|
"description": "S3mini provider for Strapi uploads",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
"dist"
|
|
11
11
|
],
|
|
12
12
|
"scripts": {
|
|
13
|
-
"build": "
|
|
14
|
-
"watch": "
|
|
13
|
+
"build": "rollup -c",
|
|
14
|
+
"watch": "rollup -c -w",
|
|
15
15
|
"test": "vitest run",
|
|
16
16
|
"prepublishOnly": "npm run build"
|
|
17
17
|
},
|
|
@@ -26,11 +26,20 @@
|
|
|
26
26
|
"author": "",
|
|
27
27
|
"license": "MIT",
|
|
28
28
|
"devDependencies": {
|
|
29
|
+
"@rollup/plugin-commonjs": "^29.0.0",
|
|
30
|
+
"@rollup/plugin-json": "^6.1.0",
|
|
31
|
+
"@rollup/plugin-node-resolve": "^16.0.3",
|
|
32
|
+
"@rollup/plugin-typescript": "^12.3.0",
|
|
29
33
|
"@types/node": "^20.19.30",
|
|
34
|
+
"rollup": "^4.55.1",
|
|
35
|
+
"tslib": "^2.8.1",
|
|
30
36
|
"typescript": "^5.0.0",
|
|
31
37
|
"vitest": "^4.0.17"
|
|
32
38
|
},
|
|
33
39
|
"dependencies": {
|
|
34
40
|
"s3mini": "^0.9.1"
|
|
41
|
+
},
|
|
42
|
+
"strapi": {
|
|
43
|
+
"isProvider": true
|
|
35
44
|
}
|
|
36
45
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"root":["../src/index.ts"],"version":"5.9.3"}
|