@bedelightful/upload-sdk 0.0.7
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/LICENSE +8 -0
- package/README.md +132 -0
- package/dist/es/Exception/BaseException.js +14 -0
- package/dist/es/Exception/BaseException.js.map +1 -0
- package/dist/es/Exception/DownloadException.js +40 -0
- package/dist/es/Exception/DownloadException.js.map +1 -0
- package/dist/es/Exception/HttpException.js +50 -0
- package/dist/es/Exception/HttpException.js.map +1 -0
- package/dist/es/Exception/InitException.js +49 -0
- package/dist/es/Exception/InitException.js.map +1 -0
- package/dist/es/Exception/UploadException.js +50 -0
- package/dist/es/Exception/UploadException.js.map +1 -0
- package/dist/es/index.d.ts +867 -0
- package/dist/es/index.js +162 -0
- package/dist/es/index.js.map +1 -0
- package/dist/es/modules/Kodo/defaultUpload.js +38 -0
- package/dist/es/modules/Kodo/defaultUpload.js.map +1 -0
- package/dist/es/modules/Kodo/index.js +8 -0
- package/dist/es/modules/Kodo/index.js.map +1 -0
- package/dist/es/modules/Local/index.js +31 -0
- package/dist/es/modules/Local/index.js.map +1 -0
- package/dist/es/modules/MinIO/MultipartUpload.js +335 -0
- package/dist/es/modules/MinIO/MultipartUpload.js.map +1 -0
- package/dist/es/modules/MinIO/STSUpload.js +10 -0
- package/dist/es/modules/MinIO/STSUpload.js.map +1 -0
- package/dist/es/modules/MinIO/defaultUpload.js +124 -0
- package/dist/es/modules/MinIO/defaultUpload.js.map +1 -0
- package/dist/es/modules/MinIO/index.js +16 -0
- package/dist/es/modules/MinIO/index.js.map +1 -0
- package/dist/es/modules/OBS/MultipartUpload.js +269 -0
- package/dist/es/modules/OBS/MultipartUpload.js.map +1 -0
- package/dist/es/modules/OBS/STSUpload.js +71 -0
- package/dist/es/modules/OBS/STSUpload.js.map +1 -0
- package/dist/es/modules/OBS/defaultUpload.js +59 -0
- package/dist/es/modules/OBS/defaultUpload.js.map +1 -0
- package/dist/es/modules/OBS/index.js +16 -0
- package/dist/es/modules/OBS/index.js.map +1 -0
- package/dist/es/modules/OBS/utils/index.js +25 -0
- package/dist/es/modules/OBS/utils/index.js.map +1 -0
- package/dist/es/modules/OSS/MultipartUpload.js +232 -0
- package/dist/es/modules/OSS/MultipartUpload.js.map +1 -0
- package/dist/es/modules/OSS/STSUpload.js +48 -0
- package/dist/es/modules/OSS/STSUpload.js.map +1 -0
- package/dist/es/modules/OSS/defaultUpload.js +53 -0
- package/dist/es/modules/OSS/defaultUpload.js.map +1 -0
- package/dist/es/modules/OSS/index.js +16 -0
- package/dist/es/modules/OSS/index.js.map +1 -0
- package/dist/es/modules/OSS/utils/helper.js +137 -0
- package/dist/es/modules/OSS/utils/helper.js.map +1 -0
- package/dist/es/modules/OSS/utils/signature.js +96 -0
- package/dist/es/modules/OSS/utils/signature.js.map +1 -0
- package/dist/es/modules/TOS/MultipartUpload.js +288 -0
- package/dist/es/modules/TOS/MultipartUpload.js.map +1 -0
- package/dist/es/modules/TOS/STSUpload.js +92 -0
- package/dist/es/modules/TOS/STSUpload.js.map +1 -0
- package/dist/es/modules/TOS/defaultUpload.js +65 -0
- package/dist/es/modules/TOS/defaultUpload.js.map +1 -0
- package/dist/es/modules/TOS/index.js +16 -0
- package/dist/es/modules/TOS/index.js.map +1 -0
- package/dist/es/modules/TOS/utils/TosClientError.js +15 -0
- package/dist/es/modules/TOS/utils/TosClientError.js.map +1 -0
- package/dist/es/modules/TOS/utils/index.js +38 -0
- package/dist/es/modules/TOS/utils/index.js.map +1 -0
- package/dist/es/modules/TOS/utils/signatureV4.js +269 -0
- package/dist/es/modules/TOS/utils/signatureV4.js.map +1 -0
- package/dist/es/modules/TOS/utils/signatureV4Credentials.js +21 -0
- package/dist/es/modules/TOS/utils/signatureV4Credentials.js.map +1 -0
- package/dist/es/modules/TOS/utils/universal/crypto.browser.js +56 -0
- package/dist/es/modules/TOS/utils/universal/crypto.browser.js.map +1 -0
- package/dist/es/modules/TOS/utils/utils.js +18 -0
- package/dist/es/modules/TOS/utils/utils.js.map +1 -0
- package/dist/es/modules/index.js +20 -0
- package/dist/es/modules/index.js.map +1 -0
- package/dist/es/types/Kodo.js +1 -0
- package/dist/es/types/Kodo.js.map +1 -0
- package/dist/es/types/Local.js +1 -0
- package/dist/es/types/Local.js.map +1 -0
- package/dist/es/types/MinIO.js +1 -0
- package/dist/es/types/MinIO.js.map +1 -0
- package/dist/es/types/OBS.js +8 -0
- package/dist/es/types/OBS.js.map +1 -0
- package/dist/es/types/OSS.js +1 -0
- package/dist/es/types/OSS.js.map +1 -0
- package/dist/es/types/TOS.js +1 -0
- package/dist/es/types/TOS.js.map +1 -0
- package/dist/es/types/error.js +1 -0
- package/dist/es/types/error.js.map +1 -0
- package/dist/es/types/index.js +13 -0
- package/dist/es/types/index.js.map +1 -0
- package/dist/es/types/log.js +1 -0
- package/dist/es/types/log.js.map +1 -0
- package/dist/es/types/request.js +1 -0
- package/dist/es/types/request.js.map +1 -0
- package/dist/es/utils/EventEmitter.js +32 -0
- package/dist/es/utils/EventEmitter.js.map +1 -0
- package/dist/es/utils/UploadManger.js +276 -0
- package/dist/es/utils/UploadManger.js.map +1 -0
- package/dist/es/utils/UploadTask.js +13 -0
- package/dist/es/utils/UploadTask.js.map +1 -0
- package/dist/es/utils/checkDataFormat.js +41 -0
- package/dist/es/utils/checkDataFormat.js.map +1 -0
- package/dist/es/utils/global.js +83 -0
- package/dist/es/utils/global.js.map +1 -0
- package/dist/es/utils/index.js +20 -0
- package/dist/es/utils/index.js.map +1 -0
- package/dist/es/utils/logPubSub.js +59 -0
- package/dist/es/utils/logPubSub.js.map +1 -0
- package/dist/es/utils/multipart.js +159 -0
- package/dist/es/utils/multipart.js.map +1 -0
- package/dist/es/utils/nanoid.js +10 -0
- package/dist/es/utils/nanoid.js.map +1 -0
- package/dist/es/utils/regExpUtil.js +21 -0
- package/dist/es/utils/regExpUtil.js.map +1 -0
- package/dist/es/utils/request.js +234 -0
- package/dist/es/utils/request.js.map +1 -0
- package/dist/es/utils/response.js +20 -0
- package/dist/es/utils/response.js.map +1 -0
- package/dist/index.d.ts +867 -0
- package/dist/index.js +60913 -0
- package/dist/index.js.map +1 -0
- package/dist/index.min.js +130 -0
- package/dist/index.min.js.map +1 -0
- package/dist/lib/Exception/BaseException.js +37 -0
- package/dist/lib/Exception/BaseException.js.map +1 -0
- package/dist/lib/Exception/DownloadException.js +65 -0
- package/dist/lib/Exception/DownloadException.js.map +1 -0
- package/dist/lib/Exception/HttpException.js +75 -0
- package/dist/lib/Exception/HttpException.js.map +1 -0
- package/dist/lib/Exception/InitException.js +73 -0
- package/dist/lib/Exception/InitException.js.map +1 -0
- package/dist/lib/Exception/UploadException.js +75 -0
- package/dist/lib/Exception/UploadException.js.map +1 -0
- package/dist/lib/index.d.cts +867 -0
- package/dist/lib/index.js +203 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/lib/modules/Kodo/defaultUpload.js +61 -0
- package/dist/lib/modules/Kodo/defaultUpload.js.map +1 -0
- package/dist/lib/modules/Kodo/index.js +28 -0
- package/dist/lib/modules/Kodo/index.js.map +1 -0
- package/dist/lib/modules/Local/index.js +50 -0
- package/dist/lib/modules/Local/index.js.map +1 -0
- package/dist/lib/modules/MinIO/MultipartUpload.js +357 -0
- package/dist/lib/modules/MinIO/MultipartUpload.js.map +1 -0
- package/dist/lib/modules/MinIO/STSUpload.js +33 -0
- package/dist/lib/modules/MinIO/STSUpload.js.map +1 -0
- package/dist/lib/modules/MinIO/defaultUpload.js +158 -0
- package/dist/lib/modules/MinIO/defaultUpload.js.map +1 -0
- package/dist/lib/modules/MinIO/index.js +35 -0
- package/dist/lib/modules/MinIO/index.js.map +1 -0
- package/dist/lib/modules/OBS/MultipartUpload.js +296 -0
- package/dist/lib/modules/OBS/MultipartUpload.js.map +1 -0
- package/dist/lib/modules/OBS/STSUpload.js +104 -0
- package/dist/lib/modules/OBS/STSUpload.js.map +1 -0
- package/dist/lib/modules/OBS/defaultUpload.js +88 -0
- package/dist/lib/modules/OBS/defaultUpload.js.map +1 -0
- package/dist/lib/modules/OBS/index.js +45 -0
- package/dist/lib/modules/OBS/index.js.map +1 -0
- package/dist/lib/modules/OBS/utils/index.js +49 -0
- package/dist/lib/modules/OBS/utils/index.js.map +1 -0
- package/dist/lib/modules/OSS/MultipartUpload.js +259 -0
- package/dist/lib/modules/OSS/MultipartUpload.js.map +1 -0
- package/dist/lib/modules/OSS/STSUpload.js +71 -0
- package/dist/lib/modules/OSS/STSUpload.js.map +1 -0
- package/dist/lib/modules/OSS/defaultUpload.js +76 -0
- package/dist/lib/modules/OSS/defaultUpload.js.map +1 -0
- package/dist/lib/modules/OSS/index.js +35 -0
- package/dist/lib/modules/OSS/index.js.map +1 -0
- package/dist/lib/modules/OSS/utils/helper.js +173 -0
- package/dist/lib/modules/OSS/utils/helper.js.map +1 -0
- package/dist/lib/modules/OSS/utils/signature.js +132 -0
- package/dist/lib/modules/OSS/utils/signature.js.map +1 -0
- package/dist/lib/modules/TOS/MultipartUpload.js +315 -0
- package/dist/lib/modules/TOS/MultipartUpload.js.map +1 -0
- package/dist/lib/modules/TOS/STSUpload.js +125 -0
- package/dist/lib/modules/TOS/STSUpload.js.map +1 -0
- package/dist/lib/modules/TOS/defaultUpload.js +94 -0
- package/dist/lib/modules/TOS/defaultUpload.js.map +1 -0
- package/dist/lib/modules/TOS/index.js +45 -0
- package/dist/lib/modules/TOS/index.js.map +1 -0
- package/dist/lib/modules/TOS/utils/TosClientError.js +34 -0
- package/dist/lib/modules/TOS/utils/TosClientError.js.map +1 -0
- package/dist/lib/modules/TOS/utils/index.js +64 -0
- package/dist/lib/modules/TOS/utils/index.js.map +1 -0
- package/dist/lib/modules/TOS/utils/signatureV4.js +294 -0
- package/dist/lib/modules/TOS/utils/signatureV4.js.map +1 -0
- package/dist/lib/modules/TOS/utils/signatureV4Credentials.js +44 -0
- package/dist/lib/modules/TOS/utils/signatureV4Credentials.js.map +1 -0
- package/dist/lib/modules/TOS/utils/universal/crypto.browser.js +93 -0
- package/dist/lib/modules/TOS/utils/universal/crypto.browser.js.map +1 -0
- package/dist/lib/modules/TOS/utils/utils.js +42 -0
- package/dist/lib/modules/TOS/utils/utils.js.map +1 -0
- package/dist/lib/modules/index.js +50 -0
- package/dist/lib/modules/index.js.map +1 -0
- package/dist/lib/types/Kodo.js +17 -0
- package/dist/lib/types/Kodo.js.map +1 -0
- package/dist/lib/types/Local.js +17 -0
- package/dist/lib/types/Local.js.map +1 -0
- package/dist/lib/types/MinIO.js +17 -0
- package/dist/lib/types/MinIO.js.map +1 -0
- package/dist/lib/types/OBS.js +32 -0
- package/dist/lib/types/OBS.js.map +1 -0
- package/dist/lib/types/OSS.js +17 -0
- package/dist/lib/types/OSS.js.map +1 -0
- package/dist/lib/types/TOS.js +17 -0
- package/dist/lib/types/TOS.js.map +1 -0
- package/dist/lib/types/error.js +17 -0
- package/dist/lib/types/error.js.map +1 -0
- package/dist/lib/types/index.js +37 -0
- package/dist/lib/types/index.js.map +1 -0
- package/dist/lib/types/log.js +17 -0
- package/dist/lib/types/log.js.map +1 -0
- package/dist/lib/types/request.js +17 -0
- package/dist/lib/types/request.js.map +1 -0
- package/dist/lib/utils/EventEmitter.js +51 -0
- package/dist/lib/utils/EventEmitter.js.map +1 -0
- package/dist/lib/utils/UploadManger.js +309 -0
- package/dist/lib/utils/UploadManger.js.map +1 -0
- package/dist/lib/utils/UploadTask.js +32 -0
- package/dist/lib/utils/UploadTask.js.map +1 -0
- package/dist/lib/utils/checkDataFormat.js +70 -0
- package/dist/lib/utils/checkDataFormat.js.map +1 -0
- package/dist/lib/utils/global.js +106 -0
- package/dist/lib/utils/global.js.map +1 -0
- package/dist/lib/utils/index.js +44 -0
- package/dist/lib/utils/index.js.map +1 -0
- package/dist/lib/utils/logPubSub.js +78 -0
- package/dist/lib/utils/logPubSub.js.map +1 -0
- package/dist/lib/utils/multipart.js +197 -0
- package/dist/lib/utils/multipart.js.map +1 -0
- package/dist/lib/utils/nanoid.js +33 -0
- package/dist/lib/utils/nanoid.js.map +1 -0
- package/dist/lib/utils/regExpUtil.js +44 -0
- package/dist/lib/utils/regExpUtil.js.map +1 -0
- package/dist/lib/utils/request.js +264 -0
- package/dist/lib/utils/request.js.map +1 -0
- package/dist/lib/utils/response.js +43 -0
- package/dist/lib/utils/response.js.map +1 -0
- package/dist/package.json +120 -0
- package/package.json +120 -0
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
|
+
import { signedUpload } from "./defaultUpload";
|
|
4
|
+
const STSUpload = /* @__PURE__ */ __name(async (file, key, params, option) => {
|
|
5
|
+
return signedUpload(file, key, params, option);
|
|
6
|
+
}, "STSUpload");
|
|
7
|
+
export {
|
|
8
|
+
STSUpload
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=STSUpload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/modules/MinIO/STSUpload.ts"],"sourcesContent":["import type { PlatformRequest, PlatformSimpleUploadOption } from \"../../types\"\nimport type { MinIO } from \"../../types/MinIO\"\nimport { signedUpload } from \"./defaultUpload\"\n\n/**\n * @description: STS upload for small files using PUT Object\n * This is essentially a wrapper around signedUpload for consistency with other platforms\n * @param {File | Blob} file File to upload\n * @param {String} key Object key\n * @param {MinIO.STSAuthParams} params Credentials parameters\n * @param {PlatformSimpleUploadOption} option Upload options\n */\nexport const STSUpload: PlatformRequest<MinIO.STSAuthParams, PlatformSimpleUploadOption> = async (\n\tfile,\n\tkey,\n\tparams,\n\toption,\n) => {\n\treturn signedUpload(file, key, params, option)\n}\n\n\n\n\n\n"],"mappings":";;AAEA,SAAS,oBAAoB;AAUtB,MAAM,YAA8E,8BAC1F,MACA,KACA,QACA,WACI;AACJ,SAAO,aAAa,MAAM,KAAK,QAAQ,MAAM;AAC9C,GAP2F;","names":[]}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
|
+
import { PutObjectCommand, S3Client } from "@aws-sdk/client-s3";
|
|
4
|
+
import mime from "mime";
|
|
5
|
+
import { InitException, InitExceptionCode } from "../../Exception/InitException";
|
|
6
|
+
import { UploadException, UploadExceptionCode } from "../../Exception/UploadException";
|
|
7
|
+
import { PlatformType } from "../../types";
|
|
8
|
+
import { parseExtname } from "../../utils/regExpUtil";
|
|
9
|
+
import { request } from "../../utils/request";
|
|
10
|
+
import { normalizeSuccessResponse } from "../../utils/response";
|
|
11
|
+
function createS3Client(params) {
|
|
12
|
+
const { endpoint, region, credentials } = params;
|
|
13
|
+
const { access_key_id, secret_access_key, session_token } = credentials;
|
|
14
|
+
return new S3Client({
|
|
15
|
+
region,
|
|
16
|
+
endpoint,
|
|
17
|
+
credentials: {
|
|
18
|
+
accessKeyId: access_key_id,
|
|
19
|
+
secretAccessKey: secret_access_key,
|
|
20
|
+
sessionToken: session_token
|
|
21
|
+
},
|
|
22
|
+
// Force path-style for MinIO compatibility
|
|
23
|
+
forcePathStyle: true
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
__name(createS3Client, "createS3Client");
|
|
27
|
+
const defaultUpload = /* @__PURE__ */ __name(async (file, key, params, option) => {
|
|
28
|
+
const { url, fields = {}, dir } = params;
|
|
29
|
+
const combinedKey = `${dir}${key}`;
|
|
30
|
+
const formData = new FormData();
|
|
31
|
+
formData.append("key", combinedKey);
|
|
32
|
+
Object.entries(fields).forEach(([fieldKey, fieldValue]) => {
|
|
33
|
+
formData.append(fieldKey, String(fieldValue));
|
|
34
|
+
});
|
|
35
|
+
formData.append("file", file);
|
|
36
|
+
return request({
|
|
37
|
+
method: "POST",
|
|
38
|
+
url,
|
|
39
|
+
data: formData,
|
|
40
|
+
taskId: option.taskId,
|
|
41
|
+
onProgress: option?.progress ? option.progress : () => {
|
|
42
|
+
},
|
|
43
|
+
withoutWrapper: true,
|
|
44
|
+
fail: (status, reject) => {
|
|
45
|
+
if (status === 403) {
|
|
46
|
+
reject(new UploadException(UploadExceptionCode.UPLOAD_CREDENTIALS_IS_EXPIRED));
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}).then((res) => {
|
|
50
|
+
return normalizeSuccessResponse(combinedKey, PlatformType.Minio, res.headers);
|
|
51
|
+
});
|
|
52
|
+
}, "defaultUpload");
|
|
53
|
+
const signedUpload = /* @__PURE__ */ __name(async (file, key, params, option) => {
|
|
54
|
+
const {
|
|
55
|
+
bucket,
|
|
56
|
+
region,
|
|
57
|
+
dir,
|
|
58
|
+
credentials,
|
|
59
|
+
endpoint
|
|
60
|
+
} = params;
|
|
61
|
+
if (!bucket || !region || !dir || !endpoint || !credentials || !credentials.access_key_id || !credentials.secret_access_key) {
|
|
62
|
+
throw new InitException(
|
|
63
|
+
InitExceptionCode.MISSING_CREDENTIALS_PARAMS_FOR_UPLOAD,
|
|
64
|
+
"s3",
|
|
65
|
+
"bucket",
|
|
66
|
+
"region",
|
|
67
|
+
"dir",
|
|
68
|
+
"endpoint",
|
|
69
|
+
"credentials.access_key_id",
|
|
70
|
+
"credentials.secret_access_key"
|
|
71
|
+
);
|
|
72
|
+
}
|
|
73
|
+
if (file?.size > 5 * 1024 * 1024 * 1024) {
|
|
74
|
+
throw new InitException(InitExceptionCode.UPLOAD_FILE_TO_BIG, key);
|
|
75
|
+
}
|
|
76
|
+
const objectKey = `${dir}${key}`;
|
|
77
|
+
let contentType = null;
|
|
78
|
+
const fileMimeType = mime.getType(parseExtname(key));
|
|
79
|
+
if (fileMimeType) {
|
|
80
|
+
contentType = fileMimeType;
|
|
81
|
+
}
|
|
82
|
+
const s3Client = createS3Client(params);
|
|
83
|
+
try {
|
|
84
|
+
const fileBuffer = await file.arrayBuffer();
|
|
85
|
+
const command = new PutObjectCommand({
|
|
86
|
+
Bucket: bucket,
|
|
87
|
+
Key: objectKey,
|
|
88
|
+
Body: new Uint8Array(fileBuffer),
|
|
89
|
+
ContentType: contentType || void 0
|
|
90
|
+
});
|
|
91
|
+
if (option?.progress) {
|
|
92
|
+
option.progress(0, 0, file.size, null);
|
|
93
|
+
}
|
|
94
|
+
const response = await s3Client.send(command);
|
|
95
|
+
if (option?.progress) {
|
|
96
|
+
option.progress(100, file.size, file.size, null);
|
|
97
|
+
}
|
|
98
|
+
return normalizeSuccessResponse(objectKey, PlatformType.Minio, {
|
|
99
|
+
etag: response.ETag || ""
|
|
100
|
+
});
|
|
101
|
+
} catch (error) {
|
|
102
|
+
if (error.name === "InvalidAccessKeyId" || error.name === "SignatureDoesNotMatch" || error.$metadata?.httpStatusCode === 403) {
|
|
103
|
+
const errorDetails = [
|
|
104
|
+
"MinIO/S3 upload authentication failed.",
|
|
105
|
+
"Possible causes:",
|
|
106
|
+
"1. Access Key ID or Secret Access Key is incorrect",
|
|
107
|
+
"2. Region or endpoint configuration mismatch",
|
|
108
|
+
"3. System time difference exceeds 15 minutes",
|
|
109
|
+
"4. Credentials do not have permission to upload to this bucket/path",
|
|
110
|
+
"5. Session token has expired (for temporary credentials)"
|
|
111
|
+
].join(" ");
|
|
112
|
+
throw new UploadException(
|
|
113
|
+
UploadExceptionCode.UPLOAD_CREDENTIALS_IS_EXPIRED,
|
|
114
|
+
errorDetails
|
|
115
|
+
);
|
|
116
|
+
}
|
|
117
|
+
throw error;
|
|
118
|
+
}
|
|
119
|
+
}, "signedUpload");
|
|
120
|
+
export {
|
|
121
|
+
defaultUpload,
|
|
122
|
+
signedUpload
|
|
123
|
+
};
|
|
124
|
+
//# sourceMappingURL=defaultUpload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/modules/MinIO/defaultUpload.ts"],"sourcesContent":["import { PutObjectCommand, S3Client } from \"@aws-sdk/client-s3\"\nimport mime from \"mime\"\nimport { InitException, InitExceptionCode } from \"../../Exception/InitException\"\nimport { UploadException, UploadExceptionCode } from \"../../Exception/UploadException\"\nimport type { PlatformRequest, PlatformSimpleUploadOption } from \"../../types\"\nimport { PlatformType } from \"../../types\"\nimport type { MinIO } from \"../../types/MinIO\"\nimport { parseExtname } from \"../../utils/regExpUtil\"\nimport { request } from \"../../utils/request\"\nimport { normalizeSuccessResponse } from \"../../utils/response\"\n\n/**\n * Create S3Client instance with provided credentials\n */\nfunction createS3Client(params: MinIO.STSAuthParams): S3Client {\n\tconst { endpoint, region, credentials } = params\n\tconst { access_key_id, secret_access_key, session_token } = credentials\n\n\treturn new S3Client({\n\t\tregion,\n\t\tendpoint,\n\t\tcredentials: {\n\t\t\taccessKeyId: access_key_id,\n\t\t\tsecretAccessKey: secret_access_key,\n\t\t\tsessionToken: session_token,\n\t\t},\n\t\t// Force path-style for MinIO compatibility\n\t\tforcePathStyle: true,\n\t})\n}\n\n/**\n * @description: Simple upload using pre-signed URL\n * @param {File | Blob} file File to upload\n * @param {String} key Object key\n * @param {MinIO.AuthParams} params Pre-signed URL parameters\n * @param {PlatformSimpleUploadOption} option Upload options\n */\nexport const defaultUpload: PlatformRequest<MinIO.AuthParams, PlatformSimpleUploadOption> = async (\n\tfile,\n\tkey,\n\tparams,\n\toption,\n) => {\n\tconst { url, fields = {}, dir } = params\n\n\tconst combinedKey = `${dir}${key}`\n\n\tconst formData = new FormData()\n\n\tformData.append('key', combinedKey)\n\n\t// Add form fields in the correct order (policy-based fields first)\n\tObject.entries(fields).forEach(([fieldKey, fieldValue]) => {\n\t\tformData.append(fieldKey, String(fieldValue))\n\t})\n\n\t// File must be added last in POST form upload\n\tformData.append(\"file\", file)\n\n\t// Send POST request\n\treturn request<MinIO.PostResponse>({\n\t\tmethod: \"POST\",\n\t\turl: url,\n\t\tdata: formData,\n\t\ttaskId: option.taskId,\n\t\tonProgress: option?.progress ? option.progress : () => {},\n\t\twithoutWrapper: true,\n\t\tfail: (status, reject) => {\n\t\t\tif (status === 403) {\n\t\t\t\treject(new UploadException(UploadExceptionCode.UPLOAD_CREDENTIALS_IS_EXPIRED))\n\t\t\t}\n\t\t},\n\t}).then((res) => {\n\t\treturn normalizeSuccessResponse(combinedKey, PlatformType.Minio, res.headers)\n\t})\n}\n\n/**\n * @description: Simple upload using AccessKey/SecretKey with AWS SDK\n * @param {File | Blob} file File to upload\n * @param {String} key Object key\n * @param {MinIO.STSAuthParams} params Credentials parameters\n * @param {PlatformSimpleUploadOption} option Upload options\n */\nexport const signedUpload: PlatformRequest<MinIO.STSAuthParams, PlatformSimpleUploadOption> = async (\n\tfile,\n\tkey,\n\tparams,\n\toption,\n) => {\n\tconst {\n\t\tbucket,\n\t\tregion,\n\t\tdir,\n\t\tcredentials,\n\t\tendpoint,\n\t} = params\n\n\tif (!bucket || !region || !dir || !endpoint || !credentials || \n\t !credentials.access_key_id || !credentials.secret_access_key) {\n\t\tthrow new InitException(\n\t\t\tInitExceptionCode.MISSING_CREDENTIALS_PARAMS_FOR_UPLOAD,\n\t\t\t\"s3\",\n\t\t\t\"bucket\",\n\t\t\t\"region\",\n\t\t\t\"dir\",\n\t\t\t\"endpoint\",\n\t\t\t\"credentials.access_key_id\",\n\t\t\t\"credentials.secret_access_key\",\n\t\t)\n\t}\n\n\t// S3 PUT Object upload limit is 5GB\n\tif (file?.size > 5 * 1024 * 1024 * 1024) {\n\t\tthrow new InitException(InitExceptionCode.UPLOAD_FILE_TO_BIG, key)\n\t}\n\n\tconst objectKey = `${dir}${key}`\n\n\t// Determine content type\n\tlet contentType: string | null = null\n\tconst fileMimeType = mime.getType(parseExtname(key))\n\tif (fileMimeType) {\n\t\tcontentType = fileMimeType\n\t}\n\n\t// Create S3 client\n\tconst s3Client = createS3Client(params)\n\n\ttry {\n\t\t// Convert File/Blob to ArrayBuffer for AWS SDK\n\t\tconst fileBuffer = await file.arrayBuffer()\n\n\t\t// Create PutObject command\n\t\tconst command = new PutObjectCommand({\n\t\t\tBucket: bucket,\n\t\t\tKey: objectKey,\n\t\t\tBody: new Uint8Array(fileBuffer),\n\t\t\tContentType: contentType || undefined,\n\t\t})\n\n\t\t// Execute upload with progress tracking\n\t\t// Note: AWS SDK doesn't natively support progress for PutObject in browser\n\t\t// We'll simulate it by reporting 0% -> 100% on completion\n\t\tif (option?.progress) {\n\t\t\toption.progress(0, 0, file.size, null)\n\t\t}\n\n\t\tconst response = await s3Client.send(command)\n\n\t\tif (option?.progress) {\n\t\t\toption.progress(100, file.size, file.size, null)\n\t\t}\n\n\t\t// Return normalized response\n\t\treturn normalizeSuccessResponse(objectKey, PlatformType.Minio, {\n\t\t\tetag: response.ETag || \"\",\n\t\t})\n\t} catch (error: any) {\n\t\t// Handle AWS SDK errors\n\t\tif (error.name === \"InvalidAccessKeyId\" || error.name === \"SignatureDoesNotMatch\" || error.$metadata?.httpStatusCode === 403) {\n\t\t\tconst errorDetails = [\n\t\t\t\t\"MinIO/S3 upload authentication failed.\",\n\t\t\t\t\"Possible causes:\",\n\t\t\t\t\"1. Access Key ID or Secret Access Key is incorrect\",\n\t\t\t\t\"2. Region or endpoint configuration mismatch\",\n\t\t\t\t\"3. System time difference exceeds 15 minutes\",\n\t\t\t\t\"4. Credentials do not have permission to upload to this bucket/path\",\n\t\t\t\t\"5. Session token has expired (for temporary credentials)\",\n\t\t\t].join(\" \")\n\t\t\t\n\t\t\tthrow new UploadException(\n\t\t\t\tUploadExceptionCode.UPLOAD_CREDENTIALS_IS_EXPIRED,\n\t\t\t\terrorDetails,\n\t\t\t)\n\t\t}\n\t\t\n\t\t// Re-throw other errors\n\t\tthrow error\n\t}\n}\n\n\n\n\n\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
|
+
import { MultipartUpload } from "./MultipartUpload";
|
|
4
|
+
import { STSUpload } from "./STSUpload";
|
|
5
|
+
import { defaultUpload, signedUpload } from "./defaultUpload";
|
|
6
|
+
const upload = /* @__PURE__ */ __name((file, key, params, option) => {
|
|
7
|
+
if (Object.prototype.hasOwnProperty.call(params, "credentials")) {
|
|
8
|
+
return MultipartUpload(file, key, params, option);
|
|
9
|
+
}
|
|
10
|
+
return defaultUpload(file, key, params, option);
|
|
11
|
+
}, "upload");
|
|
12
|
+
var MinIO_default = { upload, defaultUpload, signedUpload, MultipartUpload, STSUpload };
|
|
13
|
+
export {
|
|
14
|
+
MinIO_default as default
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/modules/MinIO/index.ts"],"sourcesContent":["import type {\n\tPlatformMultipartUploadOption,\n\tPlatformRequest,\n\tPlatformSimpleUploadOption,\n} from \"../../types\"\nimport type { MinIO } from \"../../types/MinIO\"\nimport { MultipartUpload } from \"./MultipartUpload\"\nimport { STSUpload } from \"./STSUpload\"\nimport { defaultUpload, signedUpload } from \"./defaultUpload\"\n\n/**\n * S3 upload main entry point\n * Automatically selects the appropriate upload method based on authentication parameters\n */\nconst upload: PlatformRequest<\n\tMinIO.AuthParams | MinIO.STSAuthParams,\n\tPlatformSimpleUploadOption | PlatformMultipartUploadOption\n> = (file, key, params, option) => {\n\t// Check if using STS credentials (AccessKey/SecretKey)\n\tif (Object.prototype.hasOwnProperty.call(params, \"credentials\")) {\n\t\t// Use multipart upload for STS credentials\n\t\treturn MultipartUpload(file, key, <MinIO.STSAuthParams>params, option)\n\t}\n\n\t// Use pre-signed URL upload\n\treturn defaultUpload(file, key, <MinIO.AuthParams>params, option)\n}\n\nexport default { upload, defaultUpload, signedUpload, MultipartUpload, STSUpload }\n\n\n\n\n\n"],"mappings":";;AAMA,SAAS,uBAAuB;AAChC,SAAS,iBAAiB;AAC1B,SAAS,eAAe,oBAAoB;AAM5C,MAAM,SAGF,wBAAC,MAAM,KAAK,QAAQ,WAAW;AAElC,MAAI,OAAO,UAAU,eAAe,KAAK,QAAQ,aAAa,GAAG;AAEhE,WAAO,gBAAgB,MAAM,KAA0B,QAAQ,MAAM;AAAA,EACtE;AAGA,SAAO,cAAc,MAAM,KAAuB,QAAQ,MAAM;AACjE,GATI;AAWJ,IAAO,gBAAQ,EAAE,QAAQ,eAAe,cAAc,iBAAiB,UAAU;","names":[]}
|
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
|
+
import ObsClient from "esdk-obs-browserjs";
|
|
4
|
+
import mime from "mime";
|
|
5
|
+
import { InitException, InitExceptionCode } from "../../Exception/InitException";
|
|
6
|
+
import { UploadException, UploadExceptionCode } from "../../Exception/UploadException";
|
|
7
|
+
import { PlatformType } from "../../types";
|
|
8
|
+
import { isBlob, isFile } from "../../utils/checkDataFormat";
|
|
9
|
+
import {
|
|
10
|
+
createBuffer,
|
|
11
|
+
divideParts,
|
|
12
|
+
getPartSize,
|
|
13
|
+
initCheckpoint,
|
|
14
|
+
parallelSend
|
|
15
|
+
} from "../../utils/multipart";
|
|
16
|
+
import { OBS_MIN_PART_SIZE } from "./utils";
|
|
17
|
+
import { parseExtname } from "../../utils/regExpUtil";
|
|
18
|
+
import { normalizeSuccessResponse } from "../../utils/response";
|
|
19
|
+
import { STSUpload } from "./STSUpload";
|
|
20
|
+
import { request } from "../../utils/request";
|
|
21
|
+
async function initMultipartUpload(key, obsClient, { bucket, expires }, options) {
|
|
22
|
+
const { SignedUrl, ActualSignedRequestHeaders } = obsClient.createSignedUrlSync({
|
|
23
|
+
Method: "POST",
|
|
24
|
+
Bucket: bucket,
|
|
25
|
+
Key: key,
|
|
26
|
+
SpecialParam: "uploads",
|
|
27
|
+
Expires: expires
|
|
28
|
+
});
|
|
29
|
+
const {
|
|
30
|
+
data: { InitiateMultipartUploadResult }
|
|
31
|
+
} = await request({
|
|
32
|
+
url: SignedUrl,
|
|
33
|
+
headers: ActualSignedRequestHeaders,
|
|
34
|
+
method: "POST",
|
|
35
|
+
xmlResponse: true,
|
|
36
|
+
...options
|
|
37
|
+
});
|
|
38
|
+
return {
|
|
39
|
+
res: InitiateMultipartUploadResult,
|
|
40
|
+
bucket: InitiateMultipartUploadResult.Bucket,
|
|
41
|
+
name: InitiateMultipartUploadResult.Key,
|
|
42
|
+
UploadId: InitiateMultipartUploadResult.UploadId
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
__name(initMultipartUpload, "initMultipartUpload");
|
|
46
|
+
async function completeMultipartUpload(name, UploadId, parts, obsClient, { bucket }, { progress, partSize }) {
|
|
47
|
+
const completeParts = parts.concat().sort((a, b) => a.number - b.number).filter((item, index, arr) => !index || item.number !== arr[index - 1].number).map((item) => ({
|
|
48
|
+
PartNumber: item.number,
|
|
49
|
+
ETag: item.etag
|
|
50
|
+
}));
|
|
51
|
+
return new Promise((resolve, reject) => {
|
|
52
|
+
obsClient.completeMultipartUpload(
|
|
53
|
+
{
|
|
54
|
+
Bucket: bucket,
|
|
55
|
+
Key: name,
|
|
56
|
+
UploadId,
|
|
57
|
+
Parts: completeParts
|
|
58
|
+
},
|
|
59
|
+
(err, result) => {
|
|
60
|
+
if (err) {
|
|
61
|
+
reject(err);
|
|
62
|
+
} else {
|
|
63
|
+
if (progress && partSize) {
|
|
64
|
+
progress(100, parts.length * partSize, parts.length * partSize, null);
|
|
65
|
+
}
|
|
66
|
+
resolve(
|
|
67
|
+
normalizeSuccessResponse(
|
|
68
|
+
result.InterfaceResult.Key,
|
|
69
|
+
PlatformType.OBS,
|
|
70
|
+
result.InterfaceResult
|
|
71
|
+
)
|
|
72
|
+
);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
);
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
__name(completeMultipartUpload, "completeMultipartUpload");
|
|
79
|
+
async function uploadPart(key, UploadId, partNo, data, obsClient, { bucket, expires }, options) {
|
|
80
|
+
const { SignedUrl, ActualSignedRequestHeaders } = obsClient.createSignedUrlSync({
|
|
81
|
+
Method: "PUT",
|
|
82
|
+
Bucket: bucket,
|
|
83
|
+
Key: key,
|
|
84
|
+
QueryParams: {
|
|
85
|
+
partNumber: `${partNo}`,
|
|
86
|
+
UploadId
|
|
87
|
+
},
|
|
88
|
+
Expires: expires
|
|
89
|
+
});
|
|
90
|
+
const result = await request({
|
|
91
|
+
url: SignedUrl,
|
|
92
|
+
method: "PUT",
|
|
93
|
+
data: data.content,
|
|
94
|
+
headers: ActualSignedRequestHeaders,
|
|
95
|
+
taskId: `${partNo}`,
|
|
96
|
+
...options
|
|
97
|
+
});
|
|
98
|
+
if (!result.headers.etag) {
|
|
99
|
+
throw new InitException(InitExceptionCode.UPLOAD_HEAD_NO_EXPOSE_ETAG);
|
|
100
|
+
}
|
|
101
|
+
return {
|
|
102
|
+
name: key,
|
|
103
|
+
etag: result.headers.etag,
|
|
104
|
+
res: result
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
__name(uploadPart, "uploadPart");
|
|
108
|
+
async function resumeMultipart(checkpoint, obsClient, params, options) {
|
|
109
|
+
const { file, fileSize, partSize, UploadId, doneParts, name } = checkpoint;
|
|
110
|
+
const internalDoneParts = doneParts.length > 0 ? [...doneParts] : [];
|
|
111
|
+
const partOffs = divideParts(fileSize, partSize);
|
|
112
|
+
const numParts = partOffs.length;
|
|
113
|
+
let multipartFinish = false;
|
|
114
|
+
const opt = { ...options, partSize };
|
|
115
|
+
const uploadPartJob = /* @__PURE__ */ __name((partNo) => (
|
|
116
|
+
// eslint-disable-next-line no-async-promise-executor
|
|
117
|
+
new Promise(async (resolve, reject) => {
|
|
118
|
+
try {
|
|
119
|
+
const pi = partOffs[partNo - 1];
|
|
120
|
+
const content = await createBuffer(file, pi.start, pi.end);
|
|
121
|
+
const data = {
|
|
122
|
+
content,
|
|
123
|
+
size: pi.end - pi.start
|
|
124
|
+
};
|
|
125
|
+
const result = await uploadPart(name, UploadId, partNo, data, obsClient, params, {
|
|
126
|
+
...opt
|
|
127
|
+
});
|
|
128
|
+
if (!multipartFinish) {
|
|
129
|
+
checkpoint.doneParts.push({
|
|
130
|
+
number: partNo,
|
|
131
|
+
etag: result.etag
|
|
132
|
+
});
|
|
133
|
+
if (typeof options.progress === "function") {
|
|
134
|
+
console.log(11);
|
|
135
|
+
options.progress(
|
|
136
|
+
doneParts.length / (numParts + 1) * 100,
|
|
137
|
+
doneParts.length * partSize,
|
|
138
|
+
fileSize,
|
|
139
|
+
checkpoint
|
|
140
|
+
);
|
|
141
|
+
}
|
|
142
|
+
resolve({
|
|
143
|
+
number: partNo,
|
|
144
|
+
etag: result.etag
|
|
145
|
+
});
|
|
146
|
+
} else {
|
|
147
|
+
resolve();
|
|
148
|
+
}
|
|
149
|
+
} catch (err) {
|
|
150
|
+
const tempErr = new Error();
|
|
151
|
+
tempErr.name = err.name;
|
|
152
|
+
tempErr.message = err.message;
|
|
153
|
+
tempErr.stack = err.stack;
|
|
154
|
+
tempErr.partNum = partNo;
|
|
155
|
+
tempErr.status = err.status;
|
|
156
|
+
reject(tempErr);
|
|
157
|
+
}
|
|
158
|
+
})
|
|
159
|
+
), "uploadPartJob");
|
|
160
|
+
const all = Array.from(new Array(numParts), (_, i) => i + 1);
|
|
161
|
+
const done = internalDoneParts.map((p) => p.number);
|
|
162
|
+
const todo = all.filter((p) => done.indexOf(p) < 0);
|
|
163
|
+
const defaultParallel = 5;
|
|
164
|
+
const parallel = opt.parallel || defaultParallel;
|
|
165
|
+
const jobErr = await parallelSend(
|
|
166
|
+
todo,
|
|
167
|
+
parallel,
|
|
168
|
+
(value) => new Promise((resolve, reject) => {
|
|
169
|
+
uploadPartJob(value).then((result) => {
|
|
170
|
+
if (result) {
|
|
171
|
+
internalDoneParts.push(result);
|
|
172
|
+
}
|
|
173
|
+
resolve();
|
|
174
|
+
}).catch((err) => {
|
|
175
|
+
reject(err);
|
|
176
|
+
});
|
|
177
|
+
})
|
|
178
|
+
);
|
|
179
|
+
multipartFinish = true;
|
|
180
|
+
if (jobErr && jobErr.length > 0) {
|
|
181
|
+
const error = jobErr[0];
|
|
182
|
+
if (error.status === 5001 || error.status === 5002) {
|
|
183
|
+
throw error;
|
|
184
|
+
}
|
|
185
|
+
throw new UploadException(
|
|
186
|
+
UploadExceptionCode.UPLOAD_MULTIPART_ERROR,
|
|
187
|
+
error.message.replace("[Uploader] ", ""),
|
|
188
|
+
error.partNum
|
|
189
|
+
);
|
|
190
|
+
}
|
|
191
|
+
return completeMultipartUpload(name, UploadId, internalDoneParts, obsClient, params, opt);
|
|
192
|
+
}
|
|
193
|
+
__name(resumeMultipart, "resumeMultipart");
|
|
194
|
+
const MultipartUpload = /* @__PURE__ */ __name(async (file, key, params, option) => {
|
|
195
|
+
const options = { ...option };
|
|
196
|
+
const {
|
|
197
|
+
endpoint,
|
|
198
|
+
region,
|
|
199
|
+
bucket,
|
|
200
|
+
dir,
|
|
201
|
+
credentials: { access, secret, security_token }
|
|
202
|
+
} = params;
|
|
203
|
+
if (!region || !bucket || !dir || !endpoint || !access || !secret || !security_token) {
|
|
204
|
+
throw new InitException(
|
|
205
|
+
InitExceptionCode.MISSING_CREDENTIALS_PARAMS_FOR_UPLOAD,
|
|
206
|
+
"volcEngine",
|
|
207
|
+
"region",
|
|
208
|
+
"bucket",
|
|
209
|
+
"dir",
|
|
210
|
+
"endpoint",
|
|
211
|
+
"access_key_id",
|
|
212
|
+
"secret_access_key",
|
|
213
|
+
"security_token"
|
|
214
|
+
);
|
|
215
|
+
}
|
|
216
|
+
const name = `${dir}${key}`;
|
|
217
|
+
const obsClient = new ObsClient({
|
|
218
|
+
access_key_id: access,
|
|
219
|
+
secret_access_key: secret,
|
|
220
|
+
security_token,
|
|
221
|
+
server: endpoint
|
|
222
|
+
});
|
|
223
|
+
if (!options.mime) {
|
|
224
|
+
if (isFile(file)) {
|
|
225
|
+
options.mime = file.type;
|
|
226
|
+
} else if (isBlob(file)) {
|
|
227
|
+
options.mime = file.type;
|
|
228
|
+
} else {
|
|
229
|
+
options.mime = mime.getType(parseExtname(name));
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
if (options.checkpoint && options.checkpoint.UploadId) {
|
|
233
|
+
if (file && isFile(file))
|
|
234
|
+
options.checkpoint.file = file;
|
|
235
|
+
if (file)
|
|
236
|
+
options.checkpoint.file = file;
|
|
237
|
+
return resumeMultipart(options.checkpoint, obsClient, params, {
|
|
238
|
+
...options
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
options.headers = options.headers || {};
|
|
242
|
+
const fileSize = file.size;
|
|
243
|
+
if (fileSize < OBS_MIN_PART_SIZE) {
|
|
244
|
+
return STSUpload(file, key, params, { ...options });
|
|
245
|
+
}
|
|
246
|
+
if (options.partSize && !(parseInt(String(options.partSize), 10) === options.partSize)) {
|
|
247
|
+
throw new InitException(InitExceptionCode.UPLOAD_API_OPTION_PARTSIZE_MUST_INT);
|
|
248
|
+
}
|
|
249
|
+
if (options.partSize && options.partSize < OBS_MIN_PART_SIZE) {
|
|
250
|
+
throw new InitException(
|
|
251
|
+
InitExceptionCode.UPLOAD_API_OPTION_PARTSIZE_IS_SMALL,
|
|
252
|
+
OBS_MIN_PART_SIZE
|
|
253
|
+
);
|
|
254
|
+
}
|
|
255
|
+
const { UploadId } = await initMultipartUpload(name, obsClient, params, {
|
|
256
|
+
headers: { ...options.headers },
|
|
257
|
+
mime: options.mime
|
|
258
|
+
});
|
|
259
|
+
const partSize = getPartSize(fileSize, options.partSize, OBS_MIN_PART_SIZE);
|
|
260
|
+
const checkpoint = initCheckpoint(file, name, fileSize, partSize, UploadId);
|
|
261
|
+
if (options && options.progress) {
|
|
262
|
+
options.progress(0, 0, fileSize, checkpoint);
|
|
263
|
+
}
|
|
264
|
+
return resumeMultipart(checkpoint, obsClient, params, { ...options });
|
|
265
|
+
}, "MultipartUpload");
|
|
266
|
+
export {
|
|
267
|
+
MultipartUpload
|
|
268
|
+
};
|
|
269
|
+
//# sourceMappingURL=MultipartUpload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/modules/OBS/MultipartUpload.ts"],"sourcesContent":["import ObsClient from \"esdk-obs-browserjs\"\nimport mime from \"mime\"\nimport { InitException, InitExceptionCode } from \"../../Exception/InitException\"\nimport { UploadException, UploadExceptionCode } from \"../../Exception/UploadException\"\nimport type {\n\tCheckpoint,\n\tDonePart,\n\tNormalSuccessResponse,\n\tPlatformMultipartUploadOption,\n\tPlatformRequest,\n} from \"../../types\"\nimport { PlatformType } from \"../../types\"\nimport type { ErrorType } from \"../../types/error\"\nimport type { OBS } from \"../../types/OBS\"\nimport { isBlob, isFile } from \"../../utils/checkDataFormat\"\nimport {\n\tcreateBuffer,\n\tdivideParts,\n\tgetPartSize,\n\tinitCheckpoint,\n\tparallelSend,\n} from \"../../utils/multipart\"\nimport { OBS_MIN_PART_SIZE } from \"./utils\"\nimport { parseExtname } from \"../../utils/regExpUtil\"\nimport { normalizeSuccessResponse } from \"../../utils/response\"\nimport { STSUpload } from \"./STSUpload\"\nimport type { DataWrapperWithHeaders } from \"../../types/request\"\nimport { request } from \"../../utils/request\"\n\n/**\n * Multipart upload initialization to obtain UploadId from OBS\n * @param key File name (with path)\n * @param obsClient OBS upload client\n * @param param2 Upload credential info\n * @param param3 Upload configuration\n * @returns\n */\nasync function initMultipartUpload(\n\tkey: string,\n\tobsClient: ObsClient,\n\t{ bucket, expires }: OBS.STSAuthParams,\n\toptions: OBS.InitMultipartUploadOption,\n) {\n\tconst { SignedUrl, ActualSignedRequestHeaders } = obsClient.createSignedUrlSync({\n\t\tMethod: \"POST\",\n\t\tBucket: bucket,\n\t\tKey: key,\n\t\tSpecialParam: \"uploads\",\n\t\tExpires: expires,\n\t})\n\n\tconst {\n\t\tdata: { InitiateMultipartUploadResult },\n\t} = await request<DataWrapperWithHeaders<OBS.InitMultipartUploadResponse>>({\n\t\turl: SignedUrl,\n\t\theaders: ActualSignedRequestHeaders,\n\t\tmethod: \"POST\",\n\t\txmlResponse: true,\n\t\t...options,\n\t})\n\n\treturn {\n\t\tres: InitiateMultipartUploadResult,\n\t\tbucket: InitiateMultipartUploadResult.Bucket,\n\t\tname: InitiateMultipartUploadResult.Key,\n\t\tUploadId: InitiateMultipartUploadResult.UploadId,\n\t}\n}\n\n/**\n * After multipart upload is done, call this to complete it\n * @param name File name\n * @param UploadId Upload ID\n * @param parts Uploaded parts\n * @param obsClient OBS upload client\n * @param param4 Upload credential\n * @returns\n */\nasync function completeMultipartUpload(\n\tname: string,\n\tUploadId: string,\n\tparts: Array<OBS.UploadPart>,\n\tobsClient: ObsClient,\n\t{ bucket }: OBS.STSAuthParams,\n\t{ progress, partSize }: PlatformMultipartUploadOption,\n) {\n\tconst completeParts = parts\n\t\t.concat()\n\t\t.sort((a, b) => a.number - b.number)\n\t\t.filter((item, index, arr) => !index || item.number !== arr[index - 1].number)\n\t\t.map((item) => ({\n\t\t\tPartNumber: item.number,\n\t\t\tETag: item.etag,\n\t\t}))\n\n\treturn new Promise<NormalSuccessResponse>((resolve, reject) => {\n\t\tobsClient.completeMultipartUpload(\n\t\t\t{\n\t\t\t\tBucket: bucket,\n\t\t\t\tKey: name,\n\t\t\t\tUploadId: UploadId,\n\t\t\t\tParts: completeParts,\n\t\t\t},\n\t\t\t(err: unknown, result: OBS.CompleteMultipartUploadResponse) => {\n\t\t\t\tif (err) {\n\t\t\t\t\treject(err)\n\t\t\t\t} else {\n\t\t\t\t\tif (progress && partSize) {\n\t\t\t\t\t\tprogress(100, parts.length * partSize, parts.length * partSize, null)\n\t\t\t\t\t}\n\n\t\t\t\t\tresolve(\n\t\t\t\t\t\tnormalizeSuccessResponse(\n\t\t\t\t\t\t\tresult.InterfaceResult.Key,\n\t\t\t\t\t\t\tPlatformType.OBS,\n\t\t\t\t\t\t\tresult.InterfaceResult,\n\t\t\t\t\t\t),\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t},\n\t\t)\n\t})\n}\n\n/**\n * Used to upload a specific part\n * @param key File name (with path)\n * @param UploadId Upload ID\n * @param partNo Part number\n * @param data Part content\n * @param obsClient OBS upload client\n * @param param5 Upload credential\n * @returns\n */\nasync function uploadPart(\n\tkey: string,\n\tUploadId: string,\n\tpartNo: number,\n\tdata: OBS.PartInfo,\n\tobsClient: ObsClient,\n\t{ bucket, expires }: OBS.STSAuthParams,\n\toptions: PlatformMultipartUploadOption,\n) {\n\tconst { SignedUrl, ActualSignedRequestHeaders } = obsClient.createSignedUrlSync({\n\t\tMethod: \"PUT\",\n\t\tBucket: bucket,\n\t\tKey: key,\n\t\tQueryParams: {\n\t\t\tpartNumber: `${partNo}`,\n\t\t\tUploadId,\n\t\t},\n\t\tExpires: expires,\n\t})\n\n\tconst result = await request<OBS.UploadPartResponse>({\n\t\turl: SignedUrl,\n\t\tmethod: \"PUT\",\n\t\tdata: data.content,\n\t\theaders: ActualSignedRequestHeaders,\n\t\ttaskId: `${partNo}`,\n\t\t...options,\n\t})\n\n\tif (!result.headers.etag) {\n\t\tthrow new InitException(InitExceptionCode.UPLOAD_HEAD_NO_EXPOSE_ETAG)\n\t}\n\n\treturn {\n\t\tname: key,\n\t\tetag: result.headers.etag,\n\t\tres: result,\n\t}\n}\n\n/**\n * Used for multipart upload or ResumeCheckpoint resume\n * @param checkpoint Checkpoint\n * @param obsClient OBS upload client\n * @param params Upload credential\n * @param options Upload configuration\n * @returns\n */\nasync function resumeMultipart(\n\tcheckpoint: Checkpoint,\n\tobsClient: ObsClient,\n\tparams: OBS.STSAuthParams,\n\toptions: PlatformMultipartUploadOption,\n) {\n\tconst { file, fileSize, partSize, UploadId, doneParts, name } = checkpoint\n\tconst internalDoneParts = doneParts.length > 0 ? [...doneParts] : []\n\tconst partOffs = divideParts(fileSize, partSize)\n\tconst numParts = partOffs.length\n\tlet multipartFinish = false\n\tconst opt = { ...options, partSize }\n\tconst uploadPartJob = (partNo: number): Promise<void | DonePart> =>\n\t\t// eslint-disable-next-line no-async-promise-executor\n\t\tnew Promise(async (resolve, reject) => {\n\t\t\ttry {\n\t\t\t\tconst pi = partOffs[partNo - 1]\n\t\t\t\tconst content = await createBuffer(file, pi.start, pi.end)\n\t\t\t\tconst data = {\n\t\t\t\t\tcontent,\n\t\t\t\t\tsize: pi.end - pi.start,\n\t\t\t\t}\n\n\t\t\t\tconst result = await uploadPart(name, UploadId, partNo, data, obsClient, params, {\n\t\t\t\t\t...opt,\n\t\t\t\t})\n\n\t\t\t\tif (!multipartFinish) {\n\t\t\t\t\tcheckpoint.doneParts.push({\n\t\t\t\t\t\tnumber: partNo,\n\t\t\t\t\t\tetag: result.etag,\n\t\t\t\t\t})\n\n\t\t\t\t\tif (typeof options.progress === \"function\") {\n\t\t\t\t\t\tconsole.log(11)\n\t\t\t\t\t\toptions.progress(\n\t\t\t\t\t\t\t(doneParts.length / (numParts + 1)) * 100,\n\t\t\t\t\t\t\tdoneParts.length * partSize,\n\t\t\t\t\t\t\tfileSize,\n\t\t\t\t\t\t\tcheckpoint,\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\n\t\t\t\t\tresolve({\n\t\t\t\t\t\tnumber: partNo,\n\t\t\t\t\t\tetag: result.etag,\n\t\t\t\t\t})\n\t\t\t\t} else {\n\t\t\t\t\tresolve()\n\t\t\t\t}\n\t\t\t} catch (err: any) {\n\t\t\t\tconst tempErr = new Error() as unknown as ErrorType.UploadPartException\n\t\t\t\ttempErr.name = err.name\n\t\t\t\ttempErr.message = err.message\n\t\t\t\ttempErr.stack = err.stack\n\t\t\t\ttempErr.partNum = partNo\n\t\t\t\ttempErr.status = err.status\n\n\t\t\t\treject(tempErr)\n\t\t\t}\n\t\t})\n\n\tconst all = Array.from(new Array(numParts), (_, i) => i + 1)\n\tconst done = internalDoneParts.map((p) => p.number)\n\tconst todo = all.filter((p) => done.indexOf(p) < 0)\n\tconst defaultParallel = 5\n\tconst parallel = opt.parallel || defaultParallel\n\t// upload in parallel\n\tconst jobErr: ErrorType.UploadPartException[] = await parallelSend(\n\t\ttodo,\n\t\tparallel,\n\t\t(value) =>\n\t\t\tnew Promise((resolve, reject) => {\n\t\t\t\tuploadPartJob(value)\n\t\t\t\t\t.then((result: DonePart | void) => {\n\t\t\t\t\t\tif (result) {\n\t\t\t\t\t\t\tinternalDoneParts.push(result)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tresolve()\n\t\t\t\t\t})\n\t\t\t\t\t.catch((err) => {\n\t\t\t\t\t\treject(err)\n\t\t\t\t\t})\n\t\t\t}),\n\t)\n\n\tmultipartFinish = true\n\n\tif (jobErr && jobErr.length > 0) {\n\t\tconst error = jobErr[0]\n\t\t// 5001 Cancel upload, 5002 Pause upload\n\t\tif (error.status === 5001 || error.status === 5002) {\n\t\t\tthrow error as Error\n\t\t}\n\t\tthrow new UploadException(\n\t\t\tUploadExceptionCode.UPLOAD_MULTIPART_ERROR,\n\t\t\terror.message.replace(\"[Uploader] \", \"\"),\n\t\t\terror.partNum,\n\t\t)\n\t}\n\n\treturn completeMultipartUpload(name, UploadId, internalDoneParts, obsClient, params, opt)\n}\n\n/**\n * Multipart upload interface, e.g., for part upload or Checkpoint resume\n * @param file File\n * @param key File name\n * @param params Credential parameters\n * @param option Upload parameters\n * @returns\n */\nexport const MultipartUpload: PlatformRequest<\n\tOBS.STSAuthParams,\n\tPlatformMultipartUploadOption\n> = async (\n\tfile: File | Blob,\n\tkey: string,\n\tparams: OBS.STSAuthParams,\n\toption: PlatformMultipartUploadOption,\n) => {\n\tconst options = { ...option }\n\tconst {\n\t\tendpoint,\n\t\tregion,\n\t\tbucket,\n\t\tdir,\n\t\tcredentials: { access, secret, security_token },\n\t} = params\n\n\tif (!region || !bucket || !dir || !endpoint || !access || !secret || !security_token) {\n\t\tthrow new InitException(\n\t\t\tInitExceptionCode.MISSING_CREDENTIALS_PARAMS_FOR_UPLOAD,\n\t\t\t\"volcEngine\",\n\t\t\t\"region\",\n\t\t\t\"bucket\",\n\t\t\t\"dir\",\n\t\t\t\"endpoint\",\n\t\t\t\"access_key_id\",\n\t\t\t\"secret_access_key\",\n\t\t\t\"security_token\",\n\t\t)\n\t}\n\n\tconst name = `${dir}${key}`\n\n\tconst obsClient = new ObsClient({\n\t\taccess_key_id: access,\n\t\tsecret_access_key: secret,\n\t\tsecurity_token,\n\t\tserver: endpoint,\n\t})\n\n\t// Generate File type\n\tif (!options.mime) {\n\t\tif (isFile(file)) {\n\t\t\toptions.mime = file.type\n\t\t} else if (isBlob(file)) {\n\t\t\toptions.mime = file.type\n\t\t} else {\n\t\t\toptions.mime = mime.getType(parseExtname(name))\n\t\t}\n\t}\n\n\tif (options.checkpoint && options.checkpoint.UploadId) {\n\t\tif (file && isFile(file)) options.checkpoint.file = file\n\t\tif (file) options.checkpoint.file = file\n\n\t\treturn resumeMultipart(options.checkpoint, obsClient, params, {\n\t\t\t...options,\n\t\t})\n\t}\n\n\toptions.headers = options.headers || {}\n\n\tconst fileSize = file.size\n\tif (fileSize < OBS_MIN_PART_SIZE) {\n\t\treturn STSUpload(file, key, params, { ...options })\n\t}\n\tif (options.partSize && !(parseInt(String(options.partSize), 10) === options.partSize)) {\n\t\tthrow new InitException(InitExceptionCode.UPLOAD_API_OPTION_PARTSIZE_MUST_INT)\n\t}\n\n\tif (options.partSize && options.partSize < OBS_MIN_PART_SIZE) {\n\t\tthrow new InitException(\n\t\t\tInitExceptionCode.UPLOAD_API_OPTION_PARTSIZE_IS_SMALL,\n\t\t\tOBS_MIN_PART_SIZE,\n\t\t)\n\t}\n\n\t// Initialize multipart upload\n\tconst { UploadId } = await initMultipartUpload(name, obsClient, params, {\n\t\theaders: { ...options.headers },\n\t\tmime: options.mime,\n\t})\n\n\t// Get part size\n\tconst partSize = getPartSize(fileSize, <number>options.partSize, OBS_MIN_PART_SIZE)\n\n\tconst checkpoint = initCheckpoint(file, name, fileSize, partSize, UploadId)\n\n\tif (options && options.progress) {\n\t\toptions.progress(0, 0, fileSize, checkpoint)\n\t}\n\n\treturn resumeMultipart(checkpoint, obsClient, params, { ...options })\n}\n\n\n\n\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
|
+
import ObsClient from "esdk-obs-browserjs";
|
|
4
|
+
import { InitException, InitExceptionCode } from "../../Exception/InitException";
|
|
5
|
+
import { UploadException, UploadExceptionCode } from "../../Exception/UploadException";
|
|
6
|
+
import { PlatformType } from "../../types";
|
|
7
|
+
import { normalizeSuccessResponse } from "../../utils/response";
|
|
8
|
+
function STSUpload(file, key, params, option) {
|
|
9
|
+
const {
|
|
10
|
+
bucket,
|
|
11
|
+
credentials: { access, secret, security_token },
|
|
12
|
+
endpoint,
|
|
13
|
+
// callback,
|
|
14
|
+
dir,
|
|
15
|
+
region
|
|
16
|
+
} = params;
|
|
17
|
+
if (!bucket || !access || !secret || !security_token || !dir || !endpoint || !region) {
|
|
18
|
+
throw new InitException(
|
|
19
|
+
InitExceptionCode.MISSING_CREDENTIALS_PARAMS_FOR_UPLOAD,
|
|
20
|
+
"obs",
|
|
21
|
+
"bucket",
|
|
22
|
+
"access_key_id",
|
|
23
|
+
"secret_access_key",
|
|
24
|
+
"security_token",
|
|
25
|
+
"dir",
|
|
26
|
+
"server",
|
|
27
|
+
"region"
|
|
28
|
+
);
|
|
29
|
+
}
|
|
30
|
+
if (file?.size > 5 * 1024 * 1024 * 1024) {
|
|
31
|
+
throw new InitException(InitExceptionCode.UPLOAD_FILE_TO_BIG, key);
|
|
32
|
+
}
|
|
33
|
+
const combinedKey = `${dir}${key}`;
|
|
34
|
+
const obsClient = new ObsClient({
|
|
35
|
+
access_key_id: access,
|
|
36
|
+
secret_access_key: secret,
|
|
37
|
+
security_token,
|
|
38
|
+
server: endpoint
|
|
39
|
+
});
|
|
40
|
+
return new Promise((resolve, reject) => {
|
|
41
|
+
obsClient.putObject(
|
|
42
|
+
{
|
|
43
|
+
Bucket: bucket,
|
|
44
|
+
Key: combinedKey,
|
|
45
|
+
SourceFile: file
|
|
46
|
+
},
|
|
47
|
+
(err, data) => {
|
|
48
|
+
if (err) {
|
|
49
|
+
reject(new UploadException(UploadExceptionCode.UPLOAD_UNKNOWN_ERROR));
|
|
50
|
+
} else if (data.CommonMsg.Status < 300) {
|
|
51
|
+
resolve(
|
|
52
|
+
normalizeSuccessResponse(
|
|
53
|
+
combinedKey,
|
|
54
|
+
PlatformType.OBS,
|
|
55
|
+
data.InterfaceResult
|
|
56
|
+
)
|
|
57
|
+
);
|
|
58
|
+
} else if (data.CommonMsg.Status === 403) {
|
|
59
|
+
reject(new UploadException(UploadExceptionCode.UPLOAD_CREDENTIALS_IS_EXPIRED));
|
|
60
|
+
} else {
|
|
61
|
+
reject(new UploadException(UploadExceptionCode.UPLOAD_UNKNOWN_ERROR));
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
);
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
__name(STSUpload, "STSUpload");
|
|
68
|
+
export {
|
|
69
|
+
STSUpload
|
|
70
|
+
};
|
|
71
|
+
//# sourceMappingURL=STSUpload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/modules/OBS/STSUpload.ts"],"sourcesContent":["import ObsClient from \"esdk-obs-browserjs\"\nimport { InitException, InitExceptionCode } from \"../../Exception/InitException\"\nimport { UploadException, UploadExceptionCode } from \"../../Exception/UploadException\"\nimport type {\n\tNormalSuccessResponse,\n\tPlatformMultipartUploadOption,\n\tPlatformSimpleUploadOption,\n} from \"../../types\"\nimport { PlatformType } from \"../../types\"\nimport type { OBS } from \"../../types/OBS\"\nimport { normalizeSuccessResponse } from \"../../utils/response\"\n\n/**\n * Huawei Cloud PUT upload\n * @param file File\n * @param key File name\n * @param params Upload credential parameters\n * @param option Upload configuration\n * @returns\n */\nexport function STSUpload(\n\tfile: File | Blob,\n\tkey: string,\n\tparams: OBS.STSAuthParams,\n\t// @ts-ignore\n\toption: PlatformSimpleUploadOption | PlatformMultipartUploadOption,\n): Promise<NormalSuccessResponse> {\n\tconst {\n\t\tbucket,\n\t\tcredentials: { access, secret, security_token },\n\t\tendpoint,\n\t\t// callback,\n\t\tdir,\n\t\tregion,\n\t} = params\n\n\tif (!bucket || !access || !secret || !security_token || !dir || !endpoint || !region) {\n\t\tthrow new InitException(\n\t\t\tInitExceptionCode.MISSING_CREDENTIALS_PARAMS_FOR_UPLOAD,\n\t\t\t\"obs\",\n\t\t\t\"bucket\",\n\t\t\t\"access_key_id\",\n\t\t\t\"secret_access_key\",\n\t\t\t\"security_token\",\n\t\t\t\"dir\",\n\t\t\t\"server\",\n\t\t\t\"region\",\n\t\t)\n\t}\n\n\t// Huawei Cloud PutObject upload limit 5GB\n\tif (file?.size > 5 * 1024 * 1024 * 1024) {\n\t\tthrow new InitException(InitExceptionCode.UPLOAD_FILE_TO_BIG, key)\n\t}\n\n\tconst combinedKey = `${dir}${key}`\n\n\tconst obsClient = new ObsClient({\n\t\taccess_key_id: access,\n\t\tsecret_access_key: secret,\n\t\tsecurity_token,\n\t\tserver: endpoint,\n\t})\n\n\treturn new Promise((resolve, reject) => {\n\t\tobsClient.putObject(\n\t\t\t{\n\t\t\t\tBucket: bucket,\n\t\t\t\tKey: combinedKey,\n\t\t\t\tSourceFile: file,\n\t\t\t},\n\t\t\t(err: any, data: OBS.PutResponseData) => {\n\t\t\t\tif (err) {\n\t\t\t\t\treject(new UploadException(UploadExceptionCode.UPLOAD_UNKNOWN_ERROR))\n\t\t\t\t} else if (data.CommonMsg.Status < 300) {\n\t\t\t\t\tresolve(\n\t\t\t\t\t\tnormalizeSuccessResponse(\n\t\t\t\t\t\t\tcombinedKey,\n\t\t\t\t\t\t\tPlatformType.OBS,\n\t\t\t\t\t\t\tdata.InterfaceResult,\n\t\t\t\t\t\t),\n\t\t\t\t\t)\n\t\t\t\t} else if (data.CommonMsg.Status === 403) {\n\t\t\t\t\treject(new UploadException(UploadExceptionCode.UPLOAD_CREDENTIALS_IS_EXPIRED))\n\t\t\t\t} else {\n\t\t\t\t\treject(new UploadException(UploadExceptionCode.UPLOAD_UNKNOWN_ERROR))\n\t\t\t\t}\n\t\t\t},\n\t\t)\n\t})\n}\n\n\n\n\n"],"mappings":";;AAAC,OAAO,eAAe;AACvB,SAAS,eAAe,yBAAyB;AACjD,SAAS,iBAAiB,2BAA2B;AAMrD,SAAS,oBAAoB;AAE7B,SAAS,gCAAgC;AAUlC,SAAS,UACf,MACA,KACA,QAEA,QACiC;AACjC,QAAM;AAAA,IACL;AAAA,IACA,aAAa,EAAE,QAAQ,QAAQ,eAAe;AAAA,IAC9C;AAAA;AAAA,IAEA;AAAA,IACA;AAAA,EACD,IAAI;AAEJ,MAAI,CAAC,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,kBAAkB,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ;AACrF,UAAM,IAAI;AAAA,MACT,kBAAkB;AAAA,MAClB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,EACD;AAGA,MAAI,MAAM,OAAO,IAAI,OAAO,OAAO,MAAM;AACxC,UAAM,IAAI,cAAc,kBAAkB,oBAAoB,GAAG;AAAA,EAClE;AAEA,QAAM,cAAc,GAAG,GAAG,GAAG,GAAG;AAEhC,QAAM,YAAY,IAAI,UAAU;AAAA,IAC/B,eAAe;AAAA,IACf,mBAAmB;AAAA,IACnB;AAAA,IACA,QAAQ;AAAA,EACT,CAAC;AAED,SAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACvC,cAAU;AAAA,MACT;AAAA,QACC,QAAQ;AAAA,QACR,KAAK;AAAA,QACL,YAAY;AAAA,MACb;AAAA,MACA,CAAC,KAAU,SAA8B;AACxC,YAAI,KAAK;AACR,iBAAO,IAAI,gBAAgB,oBAAoB,oBAAoB,CAAC;AAAA,QACrE,WAAW,KAAK,UAAU,SAAS,KAAK;AACvC;AAAA,YACC;AAAA,cACC;AAAA,cACA,aAAa;AAAA,cACb,KAAK;AAAA,YACN;AAAA,UACD;AAAA,QACD,WAAW,KAAK,UAAU,WAAW,KAAK;AACzC,iBAAO,IAAI,gBAAgB,oBAAoB,6BAA6B,CAAC;AAAA,QAC9E,OAAO;AACN,iBAAO,IAAI,gBAAgB,oBAAoB,oBAAoB,CAAC;AAAA,QACrE;AAAA,MACD;AAAA,IACD;AAAA,EACD,CAAC;AACF;AAtEgB;","names":[]}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
|
+
import mime from "mime";
|
|
4
|
+
import { InitException, InitExceptionCode } from "../../Exception/InitException";
|
|
5
|
+
import { UploadException, UploadExceptionCode } from "../../Exception/UploadException";
|
|
6
|
+
import { PlatformType } from "../../types";
|
|
7
|
+
import { parseExtname } from "../../utils/regExpUtil";
|
|
8
|
+
import { request } from "../../utils/request";
|
|
9
|
+
import { normalizeSuccessResponse } from "../../utils/response";
|
|
10
|
+
const defaultUpload = /* @__PURE__ */ __name((file, key, params, option) => {
|
|
11
|
+
const { AccessKeyId, policy, signature, host, dir, "content-type": contentType } = params;
|
|
12
|
+
if (!policy || !AccessKeyId || !signature || !host || !dir) {
|
|
13
|
+
throw new InitException(
|
|
14
|
+
InitExceptionCode.MISSING_CREDENTIALS_PARAMS_FOR_UPLOAD,
|
|
15
|
+
"volcEngine",
|
|
16
|
+
"policy",
|
|
17
|
+
"AccessKeyId",
|
|
18
|
+
"signature",
|
|
19
|
+
"host",
|
|
20
|
+
"dir"
|
|
21
|
+
);
|
|
22
|
+
}
|
|
23
|
+
if (file?.size > 5 * 1024 * 1024 * 1024) {
|
|
24
|
+
throw new InitException(InitExceptionCode.UPLOAD_FILE_TO_BIG, key);
|
|
25
|
+
}
|
|
26
|
+
const combinedKey = `${dir}${key}`;
|
|
27
|
+
const formData = new FormData();
|
|
28
|
+
formData.append("key", combinedKey);
|
|
29
|
+
if (contentType && contentType !== "") {
|
|
30
|
+
const fileMimeType = mime.getType(parseExtname(key));
|
|
31
|
+
formData.append("Content-Type", fileMimeType || contentType);
|
|
32
|
+
}
|
|
33
|
+
formData.append("policy", policy);
|
|
34
|
+
formData.append("AccessKeyId", AccessKeyId);
|
|
35
|
+
formData.append("signature", signature);
|
|
36
|
+
formData.append("file", file);
|
|
37
|
+
return request({
|
|
38
|
+
method: "post",
|
|
39
|
+
url: host,
|
|
40
|
+
data: formData,
|
|
41
|
+
headers: option?.headers ? option?.headers : {},
|
|
42
|
+
taskId: option.taskId,
|
|
43
|
+
onProgress: option?.progress ? option.progress : () => {
|
|
44
|
+
},
|
|
45
|
+
withoutWrapper: true,
|
|
46
|
+
fail: (status, reject) => {
|
|
47
|
+
if (status === 403) {
|
|
48
|
+
reject(new UploadException(UploadExceptionCode.UPLOAD_CREDENTIALS_IS_EXPIRED));
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}).then((res) => {
|
|
52
|
+
return normalizeSuccessResponse(combinedKey, PlatformType.OBS, res.headers);
|
|
53
|
+
});
|
|
54
|
+
}, "defaultUpload");
|
|
55
|
+
var defaultUpload_default = defaultUpload;
|
|
56
|
+
export {
|
|
57
|
+
defaultUpload_default as default
|
|
58
|
+
};
|
|
59
|
+
//# sourceMappingURL=defaultUpload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/modules/OBS/defaultUpload.ts"],"sourcesContent":["import mime from \"mime\"\nimport { InitException, InitExceptionCode } from \"../../Exception/InitException\"\nimport { UploadException, UploadExceptionCode } from \"../../Exception/UploadException\"\nimport type { PlatformRequest, PlatformSimpleUploadOption } from \"../../types\"\nimport { PlatformType } from \"../../types\"\nimport type { TOS } from \"../../types/TOS\"\nimport { parseExtname } from \"../../utils/regExpUtil\"\nimport { request } from \"../../utils/request\"\nimport { normalizeSuccessResponse } from \"../../utils/response\"\nimport type { OBS } from \"../../types/OBS\"\n\n/**\n * @description: Simple upload POST request\n * @param {File | Blob} file File\n * @param {String} key File name\n * @param {TOS.AuthParams} params Upload credential info\n * @param {PlatformSimpleUploadOption} option Configuration field\n */\nconst defaultUpload: PlatformRequest<OBS.AuthParams, PlatformSimpleUploadOption> = (\n\tfile,\n\tkey,\n\tparams,\n\toption,\n) => {\n\tconst { AccessKeyId, policy, signature, host, dir, \"content-type\": contentType } = params\n\n\tif (!policy || !AccessKeyId || !signature || !host || !dir) {\n\t\tthrow new InitException(\n\t\t\tInitExceptionCode.MISSING_CREDENTIALS_PARAMS_FOR_UPLOAD,\n\t\t\t\"volcEngine\",\n\t\t\t\"policy\",\n\t\t\t\"AccessKeyId\",\n\t\t\t\"signature\",\n\t\t\t\"host\",\n\t\t\t\"dir\",\n\t\t)\n\t}\n\n\t// Huawei Cloud PostObject upload limit 5GB\n\tif (file?.size > 5 * 1024 * 1024 * 1024) {\n\t\tthrow new InitException(InitExceptionCode.UPLOAD_FILE_TO_BIG, key)\n\t}\n\n\tconst combinedKey = `${dir}${key}`\n\n\t// Wrap the FormData object\n\tconst formData = new FormData()\n\tformData.append(\"key\", combinedKey)\n\n\t// If the backend returns a contentType check such as 'image/' meaning it must start with \"image/\"\n\tif (contentType && contentType !== \"\") {\n\t\t// Get file mime\n\t\tconst fileMimeType = mime.getType(parseExtname(key))\n\t\tformData.append(\"Content-Type\", fileMimeType || contentType)\n\t}\n\n\tformData.append(\"policy\", policy)\n\tformData.append(\"AccessKeyId\", AccessKeyId)\n\tformData.append(\"signature\", signature)\n\tformData.append(\"file\", file)\n\n\t// Send request\n\treturn request<TOS.PostResponse>({\n\t\tmethod: \"post\",\n\t\turl: host,\n\t\tdata: formData,\n\t\theaders: option?.headers ? option?.headers : {},\n\t\ttaskId: option.taskId,\n\t\tonProgress: option?.progress ? option.progress : () => {},\n\t\twithoutWrapper: true,\n\t\tfail: (status, reject) => {\n\t\t\tif (status === 403) {\n\t\t\t\treject(new UploadException(UploadExceptionCode.UPLOAD_CREDENTIALS_IS_EXPIRED))\n\t\t\t}\n\t\t},\n\t}).then((res) => {\n\t\treturn normalizeSuccessResponse(combinedKey, PlatformType.OBS, res.headers)\n\t})\n}\n\nexport default defaultUpload\n\n\n\n\n"],"mappings":";;AAAC,OAAO,UAAU;AAClB,SAAS,eAAe,yBAAyB;AACjD,SAAS,iBAAiB,2BAA2B;AAErD,SAAS,oBAAoB;AAE7B,SAAS,oBAAoB;AAC7B,SAAS,eAAe;AACxB,SAAS,gCAAgC;AAUzC,MAAM,gBAA6E,wBAClF,MACA,KACA,QACA,WACI;AACJ,QAAM,EAAE,aAAa,QAAQ,WAAW,MAAM,KAAK,gBAAgB,YAAY,IAAI;AAEnF,MAAI,CAAC,UAAU,CAAC,eAAe,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK;AAC3D,UAAM,IAAI;AAAA,MACT,kBAAkB;AAAA,MAClB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,EACD;AAGA,MAAI,MAAM,OAAO,IAAI,OAAO,OAAO,MAAM;AACxC,UAAM,IAAI,cAAc,kBAAkB,oBAAoB,GAAG;AAAA,EAClE;AAEA,QAAM,cAAc,GAAG,GAAG,GAAG,GAAG;AAGhC,QAAM,WAAW,IAAI,SAAS;AAC9B,WAAS,OAAO,OAAO,WAAW;AAGlC,MAAI,eAAe,gBAAgB,IAAI;AAEtC,UAAM,eAAe,KAAK,QAAQ,aAAa,GAAG,CAAC;AACnD,aAAS,OAAO,gBAAgB,gBAAgB,WAAW;AAAA,EAC5D;AAEA,WAAS,OAAO,UAAU,MAAM;AAChC,WAAS,OAAO,eAAe,WAAW;AAC1C,WAAS,OAAO,aAAa,SAAS;AACtC,WAAS,OAAO,QAAQ,IAAI;AAG5B,SAAO,QAA0B;AAAA,IAChC,QAAQ;AAAA,IACR,KAAK;AAAA,IACL,MAAM;AAAA,IACN,SAAS,QAAQ,UAAU,QAAQ,UAAU,CAAC;AAAA,IAC9C,QAAQ,OAAO;AAAA,IACf,YAAY,QAAQ,WAAW,OAAO,WAAW,MAAM;AAAA,IAAC;AAAA,IACxD,gBAAgB;AAAA,IAChB,MAAM,CAAC,QAAQ,WAAW;AACzB,UAAI,WAAW,KAAK;AACnB,eAAO,IAAI,gBAAgB,oBAAoB,6BAA6B,CAAC;AAAA,MAC9E;AAAA,IACD;AAAA,EACD,CAAC,EAAE,KAAK,CAAC,QAAQ;AAChB,WAAO,yBAAyB,aAAa,aAAa,KAAK,IAAI,OAAO;AAAA,EAC3E,CAAC;AACF,GA5DmF;AA8DnF,IAAO,wBAAQ;","names":[]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
|
+
import { MultipartUpload } from "./MultipartUpload";
|
|
4
|
+
import { STSUpload } from "./STSUpload";
|
|
5
|
+
import defaultUpload from "./defaultUpload";
|
|
6
|
+
const upload = /* @__PURE__ */ __name((file, key, params, option) => {
|
|
7
|
+
if (Object.prototype.hasOwnProperty.call(params, "credentials")) {
|
|
8
|
+
return MultipartUpload(file, key, params, option);
|
|
9
|
+
}
|
|
10
|
+
return defaultUpload(file, key, params, option);
|
|
11
|
+
}, "upload");
|
|
12
|
+
var OBS_default = { upload, defaultUpload, MultipartUpload, STSUpload };
|
|
13
|
+
export {
|
|
14
|
+
OBS_default as default
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=index.js.map
|