@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 @@
|
|
|
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":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,6BAAgC;AAChC,uBAA0B;AAC1B,2BAA4C;AAM5C,MAAM,SAGF,wBAAC,MAAM,KAAK,QAAQ,WAAW;AAElC,MAAI,OAAO,UAAU,eAAe,KAAK,QAAQ,aAAa,GAAG;AAEhE,eAAO,wCAAgB,MAAM,KAA0B,QAAQ,MAAM;AAAA,EACtE;AAGA,aAAO,oCAAc,MAAM,KAAuB,QAAQ,MAAM;AACjE,GATI;AAWJ,IAAO,gBAAQ,EAAE,QAAQ,mDAAe,iDAAc,yDAAiB,sCAAU;","names":[]}
|
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
9
|
+
var __export = (target, all) => {
|
|
10
|
+
for (var name in all)
|
|
11
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
12
|
+
};
|
|
13
|
+
var __copyProps = (to, from, except, desc) => {
|
|
14
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
15
|
+
for (let key of __getOwnPropNames(from))
|
|
16
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
17
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
18
|
+
}
|
|
19
|
+
return to;
|
|
20
|
+
};
|
|
21
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
22
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
23
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
24
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
25
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
26
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
27
|
+
mod
|
|
28
|
+
));
|
|
29
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
30
|
+
var MultipartUpload_exports = {};
|
|
31
|
+
__export(MultipartUpload_exports, {
|
|
32
|
+
MultipartUpload: () => MultipartUpload
|
|
33
|
+
});
|
|
34
|
+
module.exports = __toCommonJS(MultipartUpload_exports);
|
|
35
|
+
var import_esdk_obs_browserjs = __toESM(require("esdk-obs-browserjs"), 1);
|
|
36
|
+
var import_mime = __toESM(require("mime"), 1);
|
|
37
|
+
var import_InitException = require("../../Exception/InitException");
|
|
38
|
+
var import_UploadException = require("../../Exception/UploadException");
|
|
39
|
+
var import_types = require("../../types");
|
|
40
|
+
var import_checkDataFormat = require("../../utils/checkDataFormat");
|
|
41
|
+
var import_multipart = require("../../utils/multipart");
|
|
42
|
+
var import_utils = require("./utils");
|
|
43
|
+
var import_regExpUtil = require("../../utils/regExpUtil");
|
|
44
|
+
var import_response = require("../../utils/response");
|
|
45
|
+
var import_STSUpload = require("./STSUpload");
|
|
46
|
+
var import_request = require("../../utils/request");
|
|
47
|
+
async function initMultipartUpload(key, obsClient, { bucket, expires }, options) {
|
|
48
|
+
const { SignedUrl, ActualSignedRequestHeaders } = obsClient.createSignedUrlSync({
|
|
49
|
+
Method: "POST",
|
|
50
|
+
Bucket: bucket,
|
|
51
|
+
Key: key,
|
|
52
|
+
SpecialParam: "uploads",
|
|
53
|
+
Expires: expires
|
|
54
|
+
});
|
|
55
|
+
const {
|
|
56
|
+
data: { InitiateMultipartUploadResult }
|
|
57
|
+
} = await (0, import_request.request)({
|
|
58
|
+
url: SignedUrl,
|
|
59
|
+
headers: ActualSignedRequestHeaders,
|
|
60
|
+
method: "POST",
|
|
61
|
+
xmlResponse: true,
|
|
62
|
+
...options
|
|
63
|
+
});
|
|
64
|
+
return {
|
|
65
|
+
res: InitiateMultipartUploadResult,
|
|
66
|
+
bucket: InitiateMultipartUploadResult.Bucket,
|
|
67
|
+
name: InitiateMultipartUploadResult.Key,
|
|
68
|
+
UploadId: InitiateMultipartUploadResult.UploadId
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
__name(initMultipartUpload, "initMultipartUpload");
|
|
72
|
+
async function completeMultipartUpload(name, UploadId, parts, obsClient, { bucket }, { progress, partSize }) {
|
|
73
|
+
const completeParts = parts.concat().sort((a, b) => a.number - b.number).filter((item, index, arr) => !index || item.number !== arr[index - 1].number).map((item) => ({
|
|
74
|
+
PartNumber: item.number,
|
|
75
|
+
ETag: item.etag
|
|
76
|
+
}));
|
|
77
|
+
return new Promise((resolve, reject) => {
|
|
78
|
+
obsClient.completeMultipartUpload(
|
|
79
|
+
{
|
|
80
|
+
Bucket: bucket,
|
|
81
|
+
Key: name,
|
|
82
|
+
UploadId,
|
|
83
|
+
Parts: completeParts
|
|
84
|
+
},
|
|
85
|
+
(err, result) => {
|
|
86
|
+
if (err) {
|
|
87
|
+
reject(err);
|
|
88
|
+
} else {
|
|
89
|
+
if (progress && partSize) {
|
|
90
|
+
progress(100, parts.length * partSize, parts.length * partSize, null);
|
|
91
|
+
}
|
|
92
|
+
resolve(
|
|
93
|
+
(0, import_response.normalizeSuccessResponse)(
|
|
94
|
+
result.InterfaceResult.Key,
|
|
95
|
+
import_types.PlatformType.OBS,
|
|
96
|
+
result.InterfaceResult
|
|
97
|
+
)
|
|
98
|
+
);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
);
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
__name(completeMultipartUpload, "completeMultipartUpload");
|
|
105
|
+
async function uploadPart(key, UploadId, partNo, data, obsClient, { bucket, expires }, options) {
|
|
106
|
+
const { SignedUrl, ActualSignedRequestHeaders } = obsClient.createSignedUrlSync({
|
|
107
|
+
Method: "PUT",
|
|
108
|
+
Bucket: bucket,
|
|
109
|
+
Key: key,
|
|
110
|
+
QueryParams: {
|
|
111
|
+
partNumber: `${partNo}`,
|
|
112
|
+
UploadId
|
|
113
|
+
},
|
|
114
|
+
Expires: expires
|
|
115
|
+
});
|
|
116
|
+
const result = await (0, import_request.request)({
|
|
117
|
+
url: SignedUrl,
|
|
118
|
+
method: "PUT",
|
|
119
|
+
data: data.content,
|
|
120
|
+
headers: ActualSignedRequestHeaders,
|
|
121
|
+
taskId: `${partNo}`,
|
|
122
|
+
...options
|
|
123
|
+
});
|
|
124
|
+
if (!result.headers.etag) {
|
|
125
|
+
throw new import_InitException.InitException(import_InitException.InitExceptionCode.UPLOAD_HEAD_NO_EXPOSE_ETAG);
|
|
126
|
+
}
|
|
127
|
+
return {
|
|
128
|
+
name: key,
|
|
129
|
+
etag: result.headers.etag,
|
|
130
|
+
res: result
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
__name(uploadPart, "uploadPart");
|
|
134
|
+
async function resumeMultipart(checkpoint, obsClient, params, options) {
|
|
135
|
+
const { file, fileSize, partSize, UploadId, doneParts, name } = checkpoint;
|
|
136
|
+
const internalDoneParts = doneParts.length > 0 ? [...doneParts] : [];
|
|
137
|
+
const partOffs = (0, import_multipart.divideParts)(fileSize, partSize);
|
|
138
|
+
const numParts = partOffs.length;
|
|
139
|
+
let multipartFinish = false;
|
|
140
|
+
const opt = { ...options, partSize };
|
|
141
|
+
const uploadPartJob = /* @__PURE__ */ __name((partNo) => (
|
|
142
|
+
// eslint-disable-next-line no-async-promise-executor
|
|
143
|
+
new Promise(async (resolve, reject) => {
|
|
144
|
+
try {
|
|
145
|
+
const pi = partOffs[partNo - 1];
|
|
146
|
+
const content = await (0, import_multipart.createBuffer)(file, pi.start, pi.end);
|
|
147
|
+
const data = {
|
|
148
|
+
content,
|
|
149
|
+
size: pi.end - pi.start
|
|
150
|
+
};
|
|
151
|
+
const result = await uploadPart(name, UploadId, partNo, data, obsClient, params, {
|
|
152
|
+
...opt
|
|
153
|
+
});
|
|
154
|
+
if (!multipartFinish) {
|
|
155
|
+
checkpoint.doneParts.push({
|
|
156
|
+
number: partNo,
|
|
157
|
+
etag: result.etag
|
|
158
|
+
});
|
|
159
|
+
if (typeof options.progress === "function") {
|
|
160
|
+
console.log(11);
|
|
161
|
+
options.progress(
|
|
162
|
+
doneParts.length / (numParts + 1) * 100,
|
|
163
|
+
doneParts.length * partSize,
|
|
164
|
+
fileSize,
|
|
165
|
+
checkpoint
|
|
166
|
+
);
|
|
167
|
+
}
|
|
168
|
+
resolve({
|
|
169
|
+
number: partNo,
|
|
170
|
+
etag: result.etag
|
|
171
|
+
});
|
|
172
|
+
} else {
|
|
173
|
+
resolve();
|
|
174
|
+
}
|
|
175
|
+
} catch (err) {
|
|
176
|
+
const tempErr = new Error();
|
|
177
|
+
tempErr.name = err.name;
|
|
178
|
+
tempErr.message = err.message;
|
|
179
|
+
tempErr.stack = err.stack;
|
|
180
|
+
tempErr.partNum = partNo;
|
|
181
|
+
tempErr.status = err.status;
|
|
182
|
+
reject(tempErr);
|
|
183
|
+
}
|
|
184
|
+
})
|
|
185
|
+
), "uploadPartJob");
|
|
186
|
+
const all = Array.from(new Array(numParts), (_, i) => i + 1);
|
|
187
|
+
const done = internalDoneParts.map((p) => p.number);
|
|
188
|
+
const todo = all.filter((p) => done.indexOf(p) < 0);
|
|
189
|
+
const defaultParallel = 5;
|
|
190
|
+
const parallel = opt.parallel || defaultParallel;
|
|
191
|
+
const jobErr = await (0, import_multipart.parallelSend)(
|
|
192
|
+
todo,
|
|
193
|
+
parallel,
|
|
194
|
+
(value) => new Promise((resolve, reject) => {
|
|
195
|
+
uploadPartJob(value).then((result) => {
|
|
196
|
+
if (result) {
|
|
197
|
+
internalDoneParts.push(result);
|
|
198
|
+
}
|
|
199
|
+
resolve();
|
|
200
|
+
}).catch((err) => {
|
|
201
|
+
reject(err);
|
|
202
|
+
});
|
|
203
|
+
})
|
|
204
|
+
);
|
|
205
|
+
multipartFinish = true;
|
|
206
|
+
if (jobErr && jobErr.length > 0) {
|
|
207
|
+
const error = jobErr[0];
|
|
208
|
+
if (error.status === 5001 || error.status === 5002) {
|
|
209
|
+
throw error;
|
|
210
|
+
}
|
|
211
|
+
throw new import_UploadException.UploadException(
|
|
212
|
+
import_UploadException.UploadExceptionCode.UPLOAD_MULTIPART_ERROR,
|
|
213
|
+
error.message.replace("[Uploader] ", ""),
|
|
214
|
+
error.partNum
|
|
215
|
+
);
|
|
216
|
+
}
|
|
217
|
+
return completeMultipartUpload(name, UploadId, internalDoneParts, obsClient, params, opt);
|
|
218
|
+
}
|
|
219
|
+
__name(resumeMultipart, "resumeMultipart");
|
|
220
|
+
const MultipartUpload = /* @__PURE__ */ __name(async (file, key, params, option) => {
|
|
221
|
+
const options = { ...option };
|
|
222
|
+
const {
|
|
223
|
+
endpoint,
|
|
224
|
+
region,
|
|
225
|
+
bucket,
|
|
226
|
+
dir,
|
|
227
|
+
credentials: { access, secret, security_token }
|
|
228
|
+
} = params;
|
|
229
|
+
if (!region || !bucket || !dir || !endpoint || !access || !secret || !security_token) {
|
|
230
|
+
throw new import_InitException.InitException(
|
|
231
|
+
import_InitException.InitExceptionCode.MISSING_CREDENTIALS_PARAMS_FOR_UPLOAD,
|
|
232
|
+
"volcEngine",
|
|
233
|
+
"region",
|
|
234
|
+
"bucket",
|
|
235
|
+
"dir",
|
|
236
|
+
"endpoint",
|
|
237
|
+
"access_key_id",
|
|
238
|
+
"secret_access_key",
|
|
239
|
+
"security_token"
|
|
240
|
+
);
|
|
241
|
+
}
|
|
242
|
+
const name = `${dir}${key}`;
|
|
243
|
+
const obsClient = new import_esdk_obs_browserjs.default({
|
|
244
|
+
access_key_id: access,
|
|
245
|
+
secret_access_key: secret,
|
|
246
|
+
security_token,
|
|
247
|
+
server: endpoint
|
|
248
|
+
});
|
|
249
|
+
if (!options.mime) {
|
|
250
|
+
if ((0, import_checkDataFormat.isFile)(file)) {
|
|
251
|
+
options.mime = file.type;
|
|
252
|
+
} else if ((0, import_checkDataFormat.isBlob)(file)) {
|
|
253
|
+
options.mime = file.type;
|
|
254
|
+
} else {
|
|
255
|
+
options.mime = import_mime.default.getType((0, import_regExpUtil.parseExtname)(name));
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
if (options.checkpoint && options.checkpoint.UploadId) {
|
|
259
|
+
if (file && (0, import_checkDataFormat.isFile)(file))
|
|
260
|
+
options.checkpoint.file = file;
|
|
261
|
+
if (file)
|
|
262
|
+
options.checkpoint.file = file;
|
|
263
|
+
return resumeMultipart(options.checkpoint, obsClient, params, {
|
|
264
|
+
...options
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
options.headers = options.headers || {};
|
|
268
|
+
const fileSize = file.size;
|
|
269
|
+
if (fileSize < import_utils.OBS_MIN_PART_SIZE) {
|
|
270
|
+
return (0, import_STSUpload.STSUpload)(file, key, params, { ...options });
|
|
271
|
+
}
|
|
272
|
+
if (options.partSize && !(parseInt(String(options.partSize), 10) === options.partSize)) {
|
|
273
|
+
throw new import_InitException.InitException(import_InitException.InitExceptionCode.UPLOAD_API_OPTION_PARTSIZE_MUST_INT);
|
|
274
|
+
}
|
|
275
|
+
if (options.partSize && options.partSize < import_utils.OBS_MIN_PART_SIZE) {
|
|
276
|
+
throw new import_InitException.InitException(
|
|
277
|
+
import_InitException.InitExceptionCode.UPLOAD_API_OPTION_PARTSIZE_IS_SMALL,
|
|
278
|
+
import_utils.OBS_MIN_PART_SIZE
|
|
279
|
+
);
|
|
280
|
+
}
|
|
281
|
+
const { UploadId } = await initMultipartUpload(name, obsClient, params, {
|
|
282
|
+
headers: { ...options.headers },
|
|
283
|
+
mime: options.mime
|
|
284
|
+
});
|
|
285
|
+
const partSize = (0, import_multipart.getPartSize)(fileSize, options.partSize, import_utils.OBS_MIN_PART_SIZE);
|
|
286
|
+
const checkpoint = (0, import_multipart.initCheckpoint)(file, name, fileSize, partSize, UploadId);
|
|
287
|
+
if (options && options.progress) {
|
|
288
|
+
options.progress(0, 0, fileSize, checkpoint);
|
|
289
|
+
}
|
|
290
|
+
return resumeMultipart(checkpoint, obsClient, params, { ...options });
|
|
291
|
+
}, "MultipartUpload");
|
|
292
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
293
|
+
0 && (module.exports = {
|
|
294
|
+
MultipartUpload
|
|
295
|
+
});
|
|
296
|
+
//# 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":["ObsClient","mime"]}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
9
|
+
var __export = (target, all) => {
|
|
10
|
+
for (var name in all)
|
|
11
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
12
|
+
};
|
|
13
|
+
var __copyProps = (to, from, except, desc) => {
|
|
14
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
15
|
+
for (let key of __getOwnPropNames(from))
|
|
16
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
17
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
18
|
+
}
|
|
19
|
+
return to;
|
|
20
|
+
};
|
|
21
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
22
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
23
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
24
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
25
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
26
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
27
|
+
mod
|
|
28
|
+
));
|
|
29
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
30
|
+
var STSUpload_exports = {};
|
|
31
|
+
__export(STSUpload_exports, {
|
|
32
|
+
STSUpload: () => STSUpload
|
|
33
|
+
});
|
|
34
|
+
module.exports = __toCommonJS(STSUpload_exports);
|
|
35
|
+
var import_esdk_obs_browserjs = __toESM(require("esdk-obs-browserjs"), 1);
|
|
36
|
+
var import_InitException = require("../../Exception/InitException");
|
|
37
|
+
var import_UploadException = require("../../Exception/UploadException");
|
|
38
|
+
var import_types = require("../../types");
|
|
39
|
+
var import_response = require("../../utils/response");
|
|
40
|
+
function STSUpload(file, key, params, option) {
|
|
41
|
+
const {
|
|
42
|
+
bucket,
|
|
43
|
+
credentials: { access, secret, security_token },
|
|
44
|
+
endpoint,
|
|
45
|
+
// callback,
|
|
46
|
+
dir,
|
|
47
|
+
region
|
|
48
|
+
} = params;
|
|
49
|
+
if (!bucket || !access || !secret || !security_token || !dir || !endpoint || !region) {
|
|
50
|
+
throw new import_InitException.InitException(
|
|
51
|
+
import_InitException.InitExceptionCode.MISSING_CREDENTIALS_PARAMS_FOR_UPLOAD,
|
|
52
|
+
"obs",
|
|
53
|
+
"bucket",
|
|
54
|
+
"access_key_id",
|
|
55
|
+
"secret_access_key",
|
|
56
|
+
"security_token",
|
|
57
|
+
"dir",
|
|
58
|
+
"server",
|
|
59
|
+
"region"
|
|
60
|
+
);
|
|
61
|
+
}
|
|
62
|
+
if (file?.size > 5 * 1024 * 1024 * 1024) {
|
|
63
|
+
throw new import_InitException.InitException(import_InitException.InitExceptionCode.UPLOAD_FILE_TO_BIG, key);
|
|
64
|
+
}
|
|
65
|
+
const combinedKey = `${dir}${key}`;
|
|
66
|
+
const obsClient = new import_esdk_obs_browserjs.default({
|
|
67
|
+
access_key_id: access,
|
|
68
|
+
secret_access_key: secret,
|
|
69
|
+
security_token,
|
|
70
|
+
server: endpoint
|
|
71
|
+
});
|
|
72
|
+
return new Promise((resolve, reject) => {
|
|
73
|
+
obsClient.putObject(
|
|
74
|
+
{
|
|
75
|
+
Bucket: bucket,
|
|
76
|
+
Key: combinedKey,
|
|
77
|
+
SourceFile: file
|
|
78
|
+
},
|
|
79
|
+
(err, data) => {
|
|
80
|
+
if (err) {
|
|
81
|
+
reject(new import_UploadException.UploadException(import_UploadException.UploadExceptionCode.UPLOAD_UNKNOWN_ERROR));
|
|
82
|
+
} else if (data.CommonMsg.Status < 300) {
|
|
83
|
+
resolve(
|
|
84
|
+
(0, import_response.normalizeSuccessResponse)(
|
|
85
|
+
combinedKey,
|
|
86
|
+
import_types.PlatformType.OBS,
|
|
87
|
+
data.InterfaceResult
|
|
88
|
+
)
|
|
89
|
+
);
|
|
90
|
+
} else if (data.CommonMsg.Status === 403) {
|
|
91
|
+
reject(new import_UploadException.UploadException(import_UploadException.UploadExceptionCode.UPLOAD_CREDENTIALS_IS_EXPIRED));
|
|
92
|
+
} else {
|
|
93
|
+
reject(new import_UploadException.UploadException(import_UploadException.UploadExceptionCode.UPLOAD_UNKNOWN_ERROR));
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
);
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
__name(STSUpload, "STSUpload");
|
|
100
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
101
|
+
0 && (module.exports = {
|
|
102
|
+
STSUpload
|
|
103
|
+
});
|
|
104
|
+
//# 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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAC,gCAAsB;AACvB,2BAAiD;AACjD,6BAAqD;AAMrD,mBAA6B;AAE7B,sBAAyC;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,uCAAkB;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,mCAAc,uCAAkB,oBAAoB,GAAG;AAAA,EAClE;AAEA,QAAM,cAAc,GAAG,GAAG,GAAG,GAAG;AAEhC,QAAM,YAAY,IAAI,0BAAAA,QAAU;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,uCAAgB,2CAAoB,oBAAoB,CAAC;AAAA,QACrE,WAAW,KAAK,UAAU,SAAS,KAAK;AACvC;AAAA,gBACC;AAAA,cACC;AAAA,cACA,0BAAa;AAAA,cACb,KAAK;AAAA,YACN;AAAA,UACD;AAAA,QACD,WAAW,KAAK,UAAU,WAAW,KAAK;AACzC,iBAAO,IAAI,uCAAgB,2CAAoB,6BAA6B,CAAC;AAAA,QAC9E,OAAO;AACN,iBAAO,IAAI,uCAAgB,2CAAoB,oBAAoB,CAAC;AAAA,QACrE;AAAA,MACD;AAAA,IACD;AAAA,EACD,CAAC;AACF;AAtEgB;","names":["ObsClient"]}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
9
|
+
var __export = (target, all) => {
|
|
10
|
+
for (var name in all)
|
|
11
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
12
|
+
};
|
|
13
|
+
var __copyProps = (to, from, except, desc) => {
|
|
14
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
15
|
+
for (let key of __getOwnPropNames(from))
|
|
16
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
17
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
18
|
+
}
|
|
19
|
+
return to;
|
|
20
|
+
};
|
|
21
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
22
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
23
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
24
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
25
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
26
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
27
|
+
mod
|
|
28
|
+
));
|
|
29
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
30
|
+
var defaultUpload_exports = {};
|
|
31
|
+
__export(defaultUpload_exports, {
|
|
32
|
+
default: () => defaultUpload_default
|
|
33
|
+
});
|
|
34
|
+
module.exports = __toCommonJS(defaultUpload_exports);
|
|
35
|
+
var import_mime = __toESM(require("mime"), 1);
|
|
36
|
+
var import_InitException = require("../../Exception/InitException");
|
|
37
|
+
var import_UploadException = require("../../Exception/UploadException");
|
|
38
|
+
var import_types = require("../../types");
|
|
39
|
+
var import_regExpUtil = require("../../utils/regExpUtil");
|
|
40
|
+
var import_request = require("../../utils/request");
|
|
41
|
+
var import_response = require("../../utils/response");
|
|
42
|
+
const defaultUpload = /* @__PURE__ */ __name((file, key, params, option) => {
|
|
43
|
+
const { AccessKeyId, policy, signature, host, dir, "content-type": contentType } = params;
|
|
44
|
+
if (!policy || !AccessKeyId || !signature || !host || !dir) {
|
|
45
|
+
throw new import_InitException.InitException(
|
|
46
|
+
import_InitException.InitExceptionCode.MISSING_CREDENTIALS_PARAMS_FOR_UPLOAD,
|
|
47
|
+
"volcEngine",
|
|
48
|
+
"policy",
|
|
49
|
+
"AccessKeyId",
|
|
50
|
+
"signature",
|
|
51
|
+
"host",
|
|
52
|
+
"dir"
|
|
53
|
+
);
|
|
54
|
+
}
|
|
55
|
+
if (file?.size > 5 * 1024 * 1024 * 1024) {
|
|
56
|
+
throw new import_InitException.InitException(import_InitException.InitExceptionCode.UPLOAD_FILE_TO_BIG, key);
|
|
57
|
+
}
|
|
58
|
+
const combinedKey = `${dir}${key}`;
|
|
59
|
+
const formData = new FormData();
|
|
60
|
+
formData.append("key", combinedKey);
|
|
61
|
+
if (contentType && contentType !== "") {
|
|
62
|
+
const fileMimeType = import_mime.default.getType((0, import_regExpUtil.parseExtname)(key));
|
|
63
|
+
formData.append("Content-Type", fileMimeType || contentType);
|
|
64
|
+
}
|
|
65
|
+
formData.append("policy", policy);
|
|
66
|
+
formData.append("AccessKeyId", AccessKeyId);
|
|
67
|
+
formData.append("signature", signature);
|
|
68
|
+
formData.append("file", file);
|
|
69
|
+
return (0, import_request.request)({
|
|
70
|
+
method: "post",
|
|
71
|
+
url: host,
|
|
72
|
+
data: formData,
|
|
73
|
+
headers: option?.headers ? option?.headers : {},
|
|
74
|
+
taskId: option.taskId,
|
|
75
|
+
onProgress: option?.progress ? option.progress : () => {
|
|
76
|
+
},
|
|
77
|
+
withoutWrapper: true,
|
|
78
|
+
fail: (status, reject) => {
|
|
79
|
+
if (status === 403) {
|
|
80
|
+
reject(new import_UploadException.UploadException(import_UploadException.UploadExceptionCode.UPLOAD_CREDENTIALS_IS_EXPIRED));
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}).then((res) => {
|
|
84
|
+
return (0, import_response.normalizeSuccessResponse)(combinedKey, import_types.PlatformType.OBS, res.headers);
|
|
85
|
+
});
|
|
86
|
+
}, "defaultUpload");
|
|
87
|
+
var defaultUpload_default = defaultUpload;
|
|
88
|
+
//# 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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAC,kBAAiB;AAClB,2BAAiD;AACjD,6BAAqD;AAErD,mBAA6B;AAE7B,wBAA6B;AAC7B,qBAAwB;AACxB,sBAAyC;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,uCAAkB;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,mCAAc,uCAAkB,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,YAAAA,QAAK,YAAQ,gCAAa,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,aAAO,wBAA0B;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,uCAAgB,2CAAoB,6BAA6B,CAAC;AAAA,MAC9E;AAAA,IACD;AAAA,EACD,CAAC,EAAE,KAAK,CAAC,QAAQ;AAChB,eAAO,0CAAyB,aAAa,0BAAa,KAAK,IAAI,OAAO;AAAA,EAC3E,CAAC;AACF,GA5DmF;AA8DnF,IAAO,wBAAQ;","names":["mime"]}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
9
|
+
var __export = (target, all) => {
|
|
10
|
+
for (var name in all)
|
|
11
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
12
|
+
};
|
|
13
|
+
var __copyProps = (to, from, except, desc) => {
|
|
14
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
15
|
+
for (let key of __getOwnPropNames(from))
|
|
16
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
17
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
18
|
+
}
|
|
19
|
+
return to;
|
|
20
|
+
};
|
|
21
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
22
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
23
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
24
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
25
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
26
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
27
|
+
mod
|
|
28
|
+
));
|
|
29
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
30
|
+
var OBS_exports = {};
|
|
31
|
+
__export(OBS_exports, {
|
|
32
|
+
default: () => OBS_default
|
|
33
|
+
});
|
|
34
|
+
module.exports = __toCommonJS(OBS_exports);
|
|
35
|
+
var import_MultipartUpload = require("./MultipartUpload");
|
|
36
|
+
var import_STSUpload = require("./STSUpload");
|
|
37
|
+
var import_defaultUpload = __toESM(require("./defaultUpload"), 1);
|
|
38
|
+
const upload = /* @__PURE__ */ __name((file, key, params, option) => {
|
|
39
|
+
if (Object.prototype.hasOwnProperty.call(params, "credentials")) {
|
|
40
|
+
return (0, import_MultipartUpload.MultipartUpload)(file, key, params, option);
|
|
41
|
+
}
|
|
42
|
+
return (0, import_defaultUpload.default)(file, key, params, option);
|
|
43
|
+
}, "upload");
|
|
44
|
+
var OBS_default = { upload, defaultUpload: import_defaultUpload.default, MultipartUpload: import_MultipartUpload.MultipartUpload, STSUpload: import_STSUpload.STSUpload };
|
|
45
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/modules/OBS/index.ts"],"sourcesContent":["import type {\n\tPlatformMultipartUploadOption,\n\tPlatformRequest,\n\tPlatformSimpleUploadOption,\n} from \"../../types\"\nimport type { OBS } from \"../../types/OBS\"\nimport { MultipartUpload } from \"./MultipartUpload\"\nimport { STSUpload } from \"./STSUpload\"\nimport defaultUpload from \"./defaultUpload\"\n\nconst upload: PlatformRequest<\n\tOBS.AuthParams | OBS.STSAuthParams,\n\tPlatformSimpleUploadOption | PlatformMultipartUploadOption\n> = (file, key, params, option) => {\n\tif (Object.prototype.hasOwnProperty.call(params, \"credentials\")) {\n\t\treturn MultipartUpload(file, key, <OBS.STSAuthParams>params, option)\n\t}\n\treturn defaultUpload(file, key, <OBS.AuthParams>params, option)\n}\n\nexport default { upload, defaultUpload, MultipartUpload, STSUpload }\n\n\n\n\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,6BAAgC;AAChC,uBAA0B;AAC1B,2BAA0B;AAE1B,MAAM,SAGF,wBAAC,MAAM,KAAK,QAAQ,WAAW;AAClC,MAAI,OAAO,UAAU,eAAe,KAAK,QAAQ,aAAa,GAAG;AAChE,eAAO,wCAAgB,MAAM,KAAwB,QAAQ,MAAM;AAAA,EACpE;AACA,aAAO,qBAAAA,SAAc,MAAM,KAAqB,QAAQ,MAAM;AAC/D,GALI;AAOJ,IAAO,cAAQ,EAAE,QAAQ,oCAAAA,SAAe,yDAAiB,sCAAU;","names":["defaultUpload"]}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
20
|
+
var utils_exports = {};
|
|
21
|
+
__export(utils_exports, {
|
|
22
|
+
OBS_MIN_PART_SIZE: () => OBS_MIN_PART_SIZE,
|
|
23
|
+
genCompleteMultipartUploadXMLData: () => genCompleteMultipartUploadXMLData
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(utils_exports);
|
|
26
|
+
const OBS_MIN_PART_SIZE = 100 * 1024;
|
|
27
|
+
function genCompleteMultipartUploadXMLData(completeParts) {
|
|
28
|
+
const xmlData = document.createElementNS("", "Data");
|
|
29
|
+
const CompleteMultipartUpload = document.createElementNS("", "CompleteMultipartUpload");
|
|
30
|
+
completeParts.forEach((item) => {
|
|
31
|
+
const Part = document.createElementNS("", "Part");
|
|
32
|
+
const PartNumber = document.createElementNS("", "PartNumber");
|
|
33
|
+
const ETag = document.createElementNS("", "ETag");
|
|
34
|
+
PartNumber.innerHTML = `${item.PartNumber}`;
|
|
35
|
+
ETag.innerHTML = item.ETag.replace('"', "").replace('"', "");
|
|
36
|
+
Part.appendChild(PartNumber);
|
|
37
|
+
Part.appendChild(ETag);
|
|
38
|
+
CompleteMultipartUpload.appendChild(Part);
|
|
39
|
+
});
|
|
40
|
+
xmlData.appendChild(CompleteMultipartUpload);
|
|
41
|
+
return xmlData.innerHTML;
|
|
42
|
+
}
|
|
43
|
+
__name(genCompleteMultipartUploadXMLData, "genCompleteMultipartUploadXMLData");
|
|
44
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
45
|
+
0 && (module.exports = {
|
|
46
|
+
OBS_MIN_PART_SIZE,
|
|
47
|
+
genCompleteMultipartUploadXMLData
|
|
48
|
+
});
|
|
49
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/modules/OBS/utils/index.ts"],"sourcesContent":["export const OBS_MIN_PART_SIZE = 100 * 1024\n\nexport function genCompleteMultipartUploadXMLData(\n\tcompleteParts: { PartNumber: number; ETag: string }[],\n) {\n\tconst xmlData = document.createElementNS(\"\", \"Data\")\n\tconst CompleteMultipartUpload = document.createElementNS(\"\", \"CompleteMultipartUpload\")\n\tcompleteParts.forEach((item) => {\n\t\tconst Part = document.createElementNS(\"\", \"Part\")\n\t\tconst PartNumber = document.createElementNS(\"\", \"PartNumber\")\n\t\tconst ETag = document.createElementNS(\"\", \"ETag\")\n\t\tPartNumber.innerHTML = `${item.PartNumber}`\n\t\tETag.innerHTML = item.ETag.replace('\"', \"\").replace('\"', \"\")\n\t\tPart.appendChild(PartNumber)\n\t\tPart.appendChild(ETag)\n\t\tCompleteMultipartUpload.appendChild(Part)\n\t})\n\n\txmlData.appendChild(CompleteMultipartUpload)\n\n\treturn xmlData.innerHTML\n}\n\n\n\n\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAQ,MAAM,oBAAoB,MAAM;AAEjC,SAAS,kCACf,eACC;AACD,QAAM,UAAU,SAAS,gBAAgB,IAAI,MAAM;AACnD,QAAM,0BAA0B,SAAS,gBAAgB,IAAI,yBAAyB;AACtF,gBAAc,QAAQ,CAAC,SAAS;AAC/B,UAAM,OAAO,SAAS,gBAAgB,IAAI,MAAM;AAChD,UAAM,aAAa,SAAS,gBAAgB,IAAI,YAAY;AAC5D,UAAM,OAAO,SAAS,gBAAgB,IAAI,MAAM;AAChD,eAAW,YAAY,GAAG,KAAK,UAAU;AACzC,SAAK,YAAY,KAAK,KAAK,QAAQ,KAAK,EAAE,EAAE,QAAQ,KAAK,EAAE;AAC3D,SAAK,YAAY,UAAU;AAC3B,SAAK,YAAY,IAAI;AACrB,4BAAwB,YAAY,IAAI;AAAA,EACzC,CAAC;AAED,UAAQ,YAAY,uBAAuB;AAE3C,SAAO,QAAQ;AAChB;AAnBgB;","names":[]}
|