tiny-oss 0.5.1 → 1.0.0
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/README.md +459 -52
- package/UPGRADING.md +151 -0
- package/dist/aws.d.ts +208 -0
- package/dist/azure.d.ts +204 -0
- package/dist/cos.d.ts +208 -0
- package/dist/index.d.ts +209 -0
- package/dist/obs.d.ts +208 -0
- package/dist/protocol.d.ts +271 -0
- package/dist/tiny-oss.aws.es.js +1052 -0
- package/dist/tiny-oss.aws.es.js.map +1 -0
- package/dist/tiny-oss.azure.es.js +882 -0
- package/dist/tiny-oss.azure.es.js.map +1 -0
- package/dist/tiny-oss.cos.es.js +984 -0
- package/dist/tiny-oss.cos.es.js.map +1 -0
- package/dist/tiny-oss.es.js +965 -0
- package/dist/tiny-oss.es.js.map +1 -0
- package/dist/tiny-oss.obs.es.js +1048 -0
- package/dist/tiny-oss.obs.es.js.map +1 -0
- package/dist/tiny-oss.protocol.es.js +588 -0
- package/dist/tiny-oss.protocol.es.js.map +1 -0
- package/package.json +78 -64
- package/dist/tiny-oss.js +0 -1642
- package/dist/tiny-oss.js.map +0 -1
- package/dist/tiny-oss.min.js +0 -35
- package/dist/tiny-oss.min.js.map +0 -1
- package/es/TinyOSS.js +0 -209
- package/es/index.js +0 -1
- package/es/utils/ajax.js +0 -61
- package/es/utils/index.js +0 -188
- package/lib/TinyOSS.js +0 -218
- package/lib/index.js +0 -3
- package/lib/utils/ajax.js +0 -66
- package/lib/utils/index.js +0 -203
- package/types/index.d.ts +0 -89
- package/vendor/digest.js +0 -390
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tiny-oss.obs.es.js","sources":["../src/transport.ts","../node_modules/.pnpm/crypt@0.0.2/node_modules/crypt/crypt.js","../node_modules/.pnpm/charenc@0.0.2/node_modules/charenc/charenc.js","../node_modules/.pnpm/is-buffer@1.1.6/node_modules/is-buffer/index.js","../node_modules/.pnpm/md5@2.3.0/node_modules/md5/md5.js","../node_modules/.pnpm/base64-js@1.5.1/node_modules/base64-js/index.js","../src/digest.ts","../src/utils/utf8.ts","../src/utils/index.ts","../src/ops/request.ts","../src/obs/signature.ts","../src/obs/host.ts","../src/obs/request.ts","../src/obs/signatureUrl.ts","../src/ops/put.ts","../src/utils/xml.ts","../src/ops/initMultipartUpload.ts","../src/ops/uploadPart.ts","../src/ops/completeMultipartUpload.ts","../src/ops/abortMultipartUpload.ts","../src/ops/listParts.ts","../src/ops/listUploads.ts","../src/ops/uploadPartCopy.ts","../src/ops/multipartUpload.ts","../src/transports/fetch.ts","../src/transports/wx.ts","../src/ops/bindOptions.ts","../src/obs/index.ts"],"sourcesContent":["import type { Progress } from './types';\n\nexport interface TransportOptions {\n method: string;\n headers: Record<string, string>;\n data?: any;\n timeout?: number;\n /**\n * Total payload size in bytes; transports without native progress\n * events use it to fire 0%/100% synthetic events.\n */\n total?: number;\n /**\n * Upload progress. lengthComputable is false when the environment\n * cannot report intermediate progress (fetch, wx.request); such\n * adapters fire a 0% event before sending and a 100% event after.\n */\n onprogress?: (e: Progress) => void;\n}\n\nexport interface TransportResponse {\n data: string;\n headers: Record<string, string>;\n status: number;\n statusText: string;\n}\n\nexport type Transport = (url: string, options: TransportOptions) => Promise<TransportResponse>;\n\nfunction xhrTransport(url: string, options: TransportOptions): Promise<TransportResponse> {\n return new Promise((resolve, reject) => {\n const {\n method = 'get',\n data = null,\n headers = {},\n timeout = 0,\n onprogress,\n } = options;\n const xhr = new XMLHttpRequest();\n let timerId: any;\n if (timeout) {\n timerId = setTimeout(() => {\n reject(new Error(`the request timeout ${timeout}ms`));\n }, timeout);\n }\n xhr.onerror = () => {\n reject(new Error('unknown error'));\n };\n if (xhr.upload && onprogress) {\n xhr.upload.onprogress = (ev) => {\n onprogress({ loaded: ev.loaded, total: ev.total, lengthComputable: ev.lengthComputable });\n };\n }\n xhr.onreadystatechange = () => {\n if (xhr.readyState === 4) {\n if (timeout) clearTimeout(timerId);\n if (xhr.status >= 200 && xhr.status < 300) {\n // Extract response headers\n const responseHeaders: Record<string, string> = {};\n const headerString = xhr.getAllResponseHeaders();\n if (headerString) {\n const headerPairs = headerString.trim().split(/[\\r\\n]+/);\n headerPairs.forEach((line) => {\n const parts = line.split(': ');\n const header = parts.shift();\n const value = parts.join(': ');\n if (header) {\n responseHeaders[header.toLowerCase()] = value;\n }\n });\n }\n resolve({\n data: xhr.responseText,\n headers: responseHeaders,\n status: xhr.status,\n statusText: xhr.statusText,\n });\n } else {\n const err = new Error(`the request is error: ${xhr.status} ${xhr.statusText} ${xhr.responseText || ''}`);\n reject(err);\n }\n }\n };\n xhr.open(method, url, true);\n Object.keys(headers).forEach((key) => {\n xhr.setRequestHeader(key, headers[key]);\n });\n try {\n xhr.send(data);\n } catch (err) {\n reject(err);\n }\n });\n}\n\nlet current: Transport = xhrTransport;\n\n/**\n * Replace the network layer. Defaults to XMLHttpRequest; pass a\n * fetch-based adapter in Service Workers or a wx.request-based adapter\n * in WeChat mini programs.\n */\nexport function setTransport(transport: Transport): void {\n current = transport;\n}\n\nexport function getTransport(): Transport {\n return current;\n}\n","(function() {\n var base64map\n = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',\n\n crypt = {\n // Bit-wise rotation left\n rotl: function(n, b) {\n return (n << b) | (n >>> (32 - b));\n },\n\n // Bit-wise rotation right\n rotr: function(n, b) {\n return (n << (32 - b)) | (n >>> b);\n },\n\n // Swap big-endian to little-endian and vice versa\n endian: function(n) {\n // If number given, swap endian\n if (n.constructor == Number) {\n return crypt.rotl(n, 8) & 0x00FF00FF | crypt.rotl(n, 24) & 0xFF00FF00;\n }\n\n // Else, assume array and swap all items\n for (var i = 0; i < n.length; i++)\n n[i] = crypt.endian(n[i]);\n return n;\n },\n\n // Generate an array of any length of random bytes\n randomBytes: function(n) {\n for (var bytes = []; n > 0; n--)\n bytes.push(Math.floor(Math.random() * 256));\n return bytes;\n },\n\n // Convert a byte array to big-endian 32-bit words\n bytesToWords: function(bytes) {\n for (var words = [], i = 0, b = 0; i < bytes.length; i++, b += 8)\n words[b >>> 5] |= bytes[i] << (24 - b % 32);\n return words;\n },\n\n // Convert big-endian 32-bit words to a byte array\n wordsToBytes: function(words) {\n for (var bytes = [], b = 0; b < words.length * 32; b += 8)\n bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF);\n return bytes;\n },\n\n // Convert a byte array to a hex string\n bytesToHex: function(bytes) {\n for (var hex = [], i = 0; i < bytes.length; i++) {\n hex.push((bytes[i] >>> 4).toString(16));\n hex.push((bytes[i] & 0xF).toString(16));\n }\n return hex.join('');\n },\n\n // Convert a hex string to a byte array\n hexToBytes: function(hex) {\n for (var bytes = [], c = 0; c < hex.length; c += 2)\n bytes.push(parseInt(hex.substr(c, 2), 16));\n return bytes;\n },\n\n // Convert a byte array to a base-64 string\n bytesToBase64: function(bytes) {\n for (var base64 = [], i = 0; i < bytes.length; i += 3) {\n var triplet = (bytes[i] << 16) | (bytes[i + 1] << 8) | bytes[i + 2];\n for (var j = 0; j < 4; j++)\n if (i * 8 + j * 6 <= bytes.length * 8)\n base64.push(base64map.charAt((triplet >>> 6 * (3 - j)) & 0x3F));\n else\n base64.push('=');\n }\n return base64.join('');\n },\n\n // Convert a base-64 string to a byte array\n base64ToBytes: function(base64) {\n // Remove non-base-64 characters\n base64 = base64.replace(/[^A-Z0-9+\\/]/ig, '');\n\n for (var bytes = [], i = 0, imod4 = 0; i < base64.length;\n imod4 = ++i % 4) {\n if (imod4 == 0) continue;\n bytes.push(((base64map.indexOf(base64.charAt(i - 1))\n & (Math.pow(2, -2 * imod4 + 8) - 1)) << (imod4 * 2))\n | (base64map.indexOf(base64.charAt(i)) >>> (6 - imod4 * 2)));\n }\n return bytes;\n }\n };\n\n module.exports = crypt;\n})();\n","var charenc = {\n // UTF-8 encoding\n utf8: {\n // Convert a string to a byte array\n stringToBytes: function(str) {\n return charenc.bin.stringToBytes(unescape(encodeURIComponent(str)));\n },\n\n // Convert a byte array to a string\n bytesToString: function(bytes) {\n return decodeURIComponent(escape(charenc.bin.bytesToString(bytes)));\n }\n },\n\n // Binary encoding\n bin: {\n // Convert a string to a byte array\n stringToBytes: function(str) {\n for (var bytes = [], i = 0; i < str.length; i++)\n bytes.push(str.charCodeAt(i) & 0xFF);\n return bytes;\n },\n\n // Convert a byte array to a string\n bytesToString: function(bytes) {\n for (var str = [], i = 0; i < bytes.length; i++)\n str.push(String.fromCharCode(bytes[i]));\n return str.join('');\n }\n }\n};\n\nmodule.exports = charenc;\n","/*!\n * Determine if an object is a Buffer\n *\n * @author Feross Aboukhadijeh <https://feross.org>\n * @license MIT\n */\n\n// The _isBuffer check is for Safari 5-7 support, because it's missing\n// Object.prototype.constructor. Remove this eventually\nmodule.exports = function (obj) {\n return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)\n}\n\nfunction isBuffer (obj) {\n return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)\n}\n\n// For Node v0.10 support. Remove this eventually.\nfunction isSlowBuffer (obj) {\n return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))\n}\n","(function(){\r\n var crypt = require('crypt'),\r\n utf8 = require('charenc').utf8,\r\n isBuffer = require('is-buffer'),\r\n bin = require('charenc').bin,\r\n\r\n // The core\r\n md5 = function (message, options) {\r\n // Convert to byte array\r\n if (message.constructor == String)\r\n if (options && options.encoding === 'binary')\r\n message = bin.stringToBytes(message);\r\n else\r\n message = utf8.stringToBytes(message);\r\n else if (isBuffer(message))\r\n message = Array.prototype.slice.call(message, 0);\r\n else if (!Array.isArray(message) && message.constructor !== Uint8Array)\r\n message = message.toString();\r\n // else, assume byte array already\r\n\r\n var m = crypt.bytesToWords(message),\r\n l = message.length * 8,\r\n a = 1732584193,\r\n b = -271733879,\r\n c = -1732584194,\r\n d = 271733878;\r\n\r\n // Swap endian\r\n for (var i = 0; i < m.length; i++) {\r\n m[i] = ((m[i] << 8) | (m[i] >>> 24)) & 0x00FF00FF |\r\n ((m[i] << 24) | (m[i] >>> 8)) & 0xFF00FF00;\r\n }\r\n\r\n // Padding\r\n m[l >>> 5] |= 0x80 << (l % 32);\r\n m[(((l + 64) >>> 9) << 4) + 14] = l;\r\n\r\n // Method shortcuts\r\n var FF = md5._ff,\r\n GG = md5._gg,\r\n HH = md5._hh,\r\n II = md5._ii;\r\n\r\n for (var i = 0; i < m.length; i += 16) {\r\n\r\n var aa = a,\r\n bb = b,\r\n cc = c,\r\n dd = d;\r\n\r\n a = FF(a, b, c, d, m[i+ 0], 7, -680876936);\r\n d = FF(d, a, b, c, m[i+ 1], 12, -389564586);\r\n c = FF(c, d, a, b, m[i+ 2], 17, 606105819);\r\n b = FF(b, c, d, a, m[i+ 3], 22, -1044525330);\r\n a = FF(a, b, c, d, m[i+ 4], 7, -176418897);\r\n d = FF(d, a, b, c, m[i+ 5], 12, 1200080426);\r\n c = FF(c, d, a, b, m[i+ 6], 17, -1473231341);\r\n b = FF(b, c, d, a, m[i+ 7], 22, -45705983);\r\n a = FF(a, b, c, d, m[i+ 8], 7, 1770035416);\r\n d = FF(d, a, b, c, m[i+ 9], 12, -1958414417);\r\n c = FF(c, d, a, b, m[i+10], 17, -42063);\r\n b = FF(b, c, d, a, m[i+11], 22, -1990404162);\r\n a = FF(a, b, c, d, m[i+12], 7, 1804603682);\r\n d = FF(d, a, b, c, m[i+13], 12, -40341101);\r\n c = FF(c, d, a, b, m[i+14], 17, -1502002290);\r\n b = FF(b, c, d, a, m[i+15], 22, 1236535329);\r\n\r\n a = GG(a, b, c, d, m[i+ 1], 5, -165796510);\r\n d = GG(d, a, b, c, m[i+ 6], 9, -1069501632);\r\n c = GG(c, d, a, b, m[i+11], 14, 643717713);\r\n b = GG(b, c, d, a, m[i+ 0], 20, -373897302);\r\n a = GG(a, b, c, d, m[i+ 5], 5, -701558691);\r\n d = GG(d, a, b, c, m[i+10], 9, 38016083);\r\n c = GG(c, d, a, b, m[i+15], 14, -660478335);\r\n b = GG(b, c, d, a, m[i+ 4], 20, -405537848);\r\n a = GG(a, b, c, d, m[i+ 9], 5, 568446438);\r\n d = GG(d, a, b, c, m[i+14], 9, -1019803690);\r\n c = GG(c, d, a, b, m[i+ 3], 14, -187363961);\r\n b = GG(b, c, d, a, m[i+ 8], 20, 1163531501);\r\n a = GG(a, b, c, d, m[i+13], 5, -1444681467);\r\n d = GG(d, a, b, c, m[i+ 2], 9, -51403784);\r\n c = GG(c, d, a, b, m[i+ 7], 14, 1735328473);\r\n b = GG(b, c, d, a, m[i+12], 20, -1926607734);\r\n\r\n a = HH(a, b, c, d, m[i+ 5], 4, -378558);\r\n d = HH(d, a, b, c, m[i+ 8], 11, -2022574463);\r\n c = HH(c, d, a, b, m[i+11], 16, 1839030562);\r\n b = HH(b, c, d, a, m[i+14], 23, -35309556);\r\n a = HH(a, b, c, d, m[i+ 1], 4, -1530992060);\r\n d = HH(d, a, b, c, m[i+ 4], 11, 1272893353);\r\n c = HH(c, d, a, b, m[i+ 7], 16, -155497632);\r\n b = HH(b, c, d, a, m[i+10], 23, -1094730640);\r\n a = HH(a, b, c, d, m[i+13], 4, 681279174);\r\n d = HH(d, a, b, c, m[i+ 0], 11, -358537222);\r\n c = HH(c, d, a, b, m[i+ 3], 16, -722521979);\r\n b = HH(b, c, d, a, m[i+ 6], 23, 76029189);\r\n a = HH(a, b, c, d, m[i+ 9], 4, -640364487);\r\n d = HH(d, a, b, c, m[i+12], 11, -421815835);\r\n c = HH(c, d, a, b, m[i+15], 16, 530742520);\r\n b = HH(b, c, d, a, m[i+ 2], 23, -995338651);\r\n\r\n a = II(a, b, c, d, m[i+ 0], 6, -198630844);\r\n d = II(d, a, b, c, m[i+ 7], 10, 1126891415);\r\n c = II(c, d, a, b, m[i+14], 15, -1416354905);\r\n b = II(b, c, d, a, m[i+ 5], 21, -57434055);\r\n a = II(a, b, c, d, m[i+12], 6, 1700485571);\r\n d = II(d, a, b, c, m[i+ 3], 10, -1894986606);\r\n c = II(c, d, a, b, m[i+10], 15, -1051523);\r\n b = II(b, c, d, a, m[i+ 1], 21, -2054922799);\r\n a = II(a, b, c, d, m[i+ 8], 6, 1873313359);\r\n d = II(d, a, b, c, m[i+15], 10, -30611744);\r\n c = II(c, d, a, b, m[i+ 6], 15, -1560198380);\r\n b = II(b, c, d, a, m[i+13], 21, 1309151649);\r\n a = II(a, b, c, d, m[i+ 4], 6, -145523070);\r\n d = II(d, a, b, c, m[i+11], 10, -1120210379);\r\n c = II(c, d, a, b, m[i+ 2], 15, 718787259);\r\n b = II(b, c, d, a, m[i+ 9], 21, -343485551);\r\n\r\n a = (a + aa) >>> 0;\r\n b = (b + bb) >>> 0;\r\n c = (c + cc) >>> 0;\r\n d = (d + dd) >>> 0;\r\n }\r\n\r\n return crypt.endian([a, b, c, d]);\r\n };\r\n\r\n // Auxiliary functions\r\n md5._ff = function (a, b, c, d, x, s, t) {\r\n var n = a + (b & c | ~b & d) + (x >>> 0) + t;\r\n return ((n << s) | (n >>> (32 - s))) + b;\r\n };\r\n md5._gg = function (a, b, c, d, x, s, t) {\r\n var n = a + (b & d | c & ~d) + (x >>> 0) + t;\r\n return ((n << s) | (n >>> (32 - s))) + b;\r\n };\r\n md5._hh = function (a, b, c, d, x, s, t) {\r\n var n = a + (b ^ c ^ d) + (x >>> 0) + t;\r\n return ((n << s) | (n >>> (32 - s))) + b;\r\n };\r\n md5._ii = function (a, b, c, d, x, s, t) {\r\n var n = a + (c ^ (b | ~d)) + (x >>> 0) + t;\r\n return ((n << s) | (n >>> (32 - s))) + b;\r\n };\r\n\r\n // Package private blocksize\r\n md5._blocksize = 16;\r\n md5._digestsize = 16;\r\n\r\n module.exports = function (message, options) {\r\n if (message === undefined || message === null)\r\n throw new Error('Illegal argument ' + message);\r\n\r\n var digestbytes = crypt.wordsToBytes(md5(message, options));\r\n return options && options.asBytes ? digestbytes :\r\n options && options.asString ? bin.bytesToString(digestbytes) :\r\n crypt.bytesToHex(digestbytes);\r\n };\r\n\r\n})();\r\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","/*! ***** BEGIN LICENSE BLOCK *****\n *!\n *! Copyright 2011-2012, 2014 Jean-Christophe Sirot <sirot@chelonix.com>\n *!\n *! This file is part of digest.js\n *!\n *! digest.js is free software: you can redistribute it and/or modify it under\n *! the terms of the GNU General Public License as published by the Free Software\n *! Foundation, either version 3 of the License, or (at your option) any later\n *! version.\n *!\n *! digest.js is distributed in the hope that it will be useful, but\n *! WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\n *! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n *! more details.\n *!\n *! You should have received a copy of the GNU General Public License along with\n *! digest.js. If not, see http://www.gnu.org/licenses/.\n *!\n *! ***** END LICENSE BLOCK ***** */\n\n// Polyfill for ArrayBuffer.prototype.slice if not available\nif (!ArrayBuffer.prototype.slice) {\n ArrayBuffer.prototype.slice = function (this: ArrayBuffer, start: number, end?: number): ArrayBuffer {\n const that = new Uint8Array(this);\n const endValue = end === undefined ? that.length : end;\n const result = new ArrayBuffer(endValue - start);\n const resultArray = new Uint8Array(result);\n for (let i = 0; i < resultArray.length; i++) {\n resultArray[i] = that[i + start];\n }\n return result;\n };\n}\n\n/* SHA-1 Engine */\n\nclass SHA1Engine {\n current: Uint32Array;\n currentLen: number;\n inLen: number;\n inbuf: Uint8Array;\n blockLen: number;\n digestLen: number;\n\n constructor() {\n this.current = new Uint32Array(new ArrayBuffer(20));\n this.currentLen = 0;\n this.inLen = 0;\n this.inbuf = new Uint8Array(new ArrayBuffer(64));\n this.blockLen = 64;\n this.digestLen = 20;\n this.reset();\n }\n\n processBlock(input: Uint8Array): void {\n let A = this.current[0];\n let B = this.current[1];\n let C = this.current[2];\n let D = this.current[3];\n let E = this.current[4];\n\n const W: number[] = [\n input[0] << 24 | input[1] << 16 | input[2] << 8 | input[3],\n input[4] << 24 | input[5] << 16 | input[6] << 8 | input[7],\n input[8] << 24 | input[9] << 16 | input[10] << 8 | input[11],\n input[12] << 24 | input[13] << 16 | input[14] << 8 | input[15],\n input[16] << 24 | input[17] << 16 | input[18] << 8 | input[19],\n input[20] << 24 | input[21] << 16 | input[22] << 8 | input[23],\n input[24] << 24 | input[25] << 16 | input[26] << 8 | input[27],\n input[28] << 24 | input[29] << 16 | input[30] << 8 | input[31],\n input[32] << 24 | input[33] << 16 | input[34] << 8 | input[35],\n input[36] << 24 | input[37] << 16 | input[38] << 8 | input[39],\n input[40] << 24 | input[41] << 16 | input[42] << 8 | input[43],\n input[44] << 24 | input[45] << 16 | input[46] << 8 | input[47],\n input[48] << 24 | input[49] << 16 | input[50] << 8 | input[51],\n input[52] << 24 | input[53] << 16 | input[54] << 8 | input[55],\n input[56] << 24 | input[57] << 16 | input[58] << 8 | input[59],\n input[60] << 24 | input[61] << 16 | input[62] << 8 | input[63]\n ];\n let T: number;\n\n for (let i = 16; i < 80; i++) {\n W.push((((W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]) << 1) | ((W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]) >>> 31)));\n }\n\n for (let i = 0; i < 80; i++) {\n T = ((A << 5) | (A >>> 27)) + E + W[i];\n if (i < 20) {\n T += ((B & C) | (~B & D)) + 0x5A827999 | 0;\n } else if (i < 40) {\n T += (B ^ C ^ D) + 0x6ED9EBA1 | 0;\n } else if (i < 60) {\n T += ((B & C) | (B & D) | (C & D)) + 0x8F1BBCDC | 0;\n } else {\n T += (B ^ C ^ D) + 0xCA62C1D6 | 0;\n }\n E = D;\n D = C;\n C = ((B << 30) | (B >>> 2));\n B = A;\n A = T;\n }\n\n this.current[0] += A;\n this.current[1] += B;\n this.current[2] += C;\n this.current[3] += D;\n this.current[4] += E;\n this.currentLen += 64;\n }\n\n doPadding(): Uint8Array {\n const datalen = (this.inLen + this.currentLen) * 8;\n const msw = 0; // FIXME\n const lsw = datalen & 0xFFFFFFFF;\n const zeros = this.inLen <= 55 ? 55 - this.inLen : 119 - this.inLen;\n const pad = new Uint8Array(new ArrayBuffer(zeros + 1 + 8));\n pad[0] = 0x80;\n pad[pad.length - 1] = lsw & 0xFF;\n pad[pad.length - 2] = (lsw >>> 8) & 0xFF;\n pad[pad.length - 3] = (lsw >>> 16) & 0xFF;\n pad[pad.length - 4] = (lsw >>> 24) & 0xFF;\n pad[pad.length - 5] = msw & 0xFF;\n pad[pad.length - 6] = (msw >>> 8) & 0xFF;\n pad[pad.length - 7] = (msw >>> 16) & 0xFF;\n pad[pad.length - 8] = (msw >>> 24) & 0xFF;\n return pad;\n }\n\n getDigest(): ArrayBuffer {\n const rv = new Uint8Array(new ArrayBuffer(20));\n rv[3] = this.current[0] & 0xFF;\n rv[2] = (this.current[0] >>> 8) & 0xFF;\n rv[1] = (this.current[0] >>> 16) & 0xFF;\n rv[0] = (this.current[0] >>> 24) & 0xFF;\n rv[7] = this.current[1] & 0xFF;\n rv[6] = (this.current[1] >>> 8) & 0xFF;\n rv[5] = (this.current[1] >>> 16) & 0xFF;\n rv[4] = (this.current[1] >>> 24) & 0xFF;\n rv[11] = this.current[2] & 0xFF;\n rv[10] = (this.current[2] >>> 8) & 0xFF;\n rv[9] = (this.current[2] >>> 16) & 0xFF;\n rv[8] = (this.current[2] >>> 24) & 0xFF;\n rv[15] = this.current[3] & 0xFF;\n rv[14] = (this.current[3] >>> 8) & 0xFF;\n rv[13] = (this.current[3] >>> 16) & 0xFF;\n rv[12] = (this.current[3] >>> 24) & 0xFF;\n rv[19] = this.current[4] & 0xFF;\n rv[18] = (this.current[4] >>> 8) & 0xFF;\n rv[17] = (this.current[4] >>> 16) & 0xFF;\n rv[16] = (this.current[4] >>> 24) & 0xFF;\n return rv.buffer;\n }\n\n reset(): void {\n this.currentLen = 0;\n this.inLen = 0;\n this.current[0] = 0x67452301;\n this.current[1] = 0xEFCDAB89;\n this.current[2] = 0x98BADCFE;\n this.current[3] = 0x10325476;\n this.current[4] = 0xC3D2E1F0;\n }\n}\n\n\n/* Input utility functions */\n\nfunction fromASCII(s: string): Uint8Array {\n const buffer = new ArrayBuffer(s.length);\n const b = new Uint8Array(buffer);\n for (let i = 0; i < s.length; i++) {\n b[i] = s.charCodeAt(i);\n }\n return b;\n}\n\nfunction fromInteger(v: number): Uint8Array {\n const buffer = new ArrayBuffer(1);\n const b = new Uint8Array(buffer);\n b[0] = v;\n return b;\n}\n\nfunction convertToUint8Array(input: string | Uint8Array | ArrayBuffer | number): Uint8Array {\n if (input instanceof Uint8Array) {\n return input;\n } else if (input instanceof ArrayBuffer) {\n return new Uint8Array(input);\n } else if (typeof input === 'string') {\n return fromASCII(input);\n } else if (typeof input === 'number') {\n if (input > 0xFF) {\n throw new Error(\"For more than one byte, use an array buffer\");\n } else if (input < 0) {\n throw new Error(\"Input value must be positive\");\n }\n return fromInteger(input);\n } else {\n throw new Error(\"Unsupported type\");\n }\n}\n\nfunction convertToUInt32(i: number): Uint8Array {\n const tmp = new Uint8Array(new ArrayBuffer(4));\n tmp[0] = (i & 0xFF000000) >> 24;\n tmp[1] = (i & 0x00FF0000) >> 16;\n tmp[2] = (i & 0x0000FF00) >> 8;\n tmp[3] = (i & 0x000000FF);\n return tmp;\n}\n\n/* Digest implementation */\n\nexport { createDigest, createHMAC };\n\ninterface DigestEngine {\n reset(): void;\n blockLen: number;\n digestLen: number;\n inbuf: Uint8Array;\n inLen: number;\n currentLen: number;\n processBlock(input: Uint8Array): void;\n doPadding(): Uint8Array;\n getDigest(): ArrayBuffer;\n}\n\nexport interface DigestInterface {\n update(input: string | Uint8Array | ArrayBuffer | number): void;\n finalize(): ArrayBuffer;\n digest(input: string | Uint8Array | ArrayBuffer | number): ArrayBuffer;\n reset(): void;\n digestLength(): number;\n}\n\nexport interface HMACInterface {\n setKey(key: string | Uint8Array | ArrayBuffer | number): void;\n update(input: string | Uint8Array | ArrayBuffer | number): void;\n finalize(): ArrayBuffer;\n mac(input: string | Uint8Array | ArrayBuffer | number): ArrayBuffer;\n reset(): void;\n hmacLength(): number;\n}\n\nfunction createDigest(Constructor: new () => DigestEngine): DigestInterface {\n const update = function (this: DigestEngine & { update: (input: Uint8Array) => void }, input: Uint8Array): void {\n let len = input.length;\n let offset = 0;\n while (len > 0) {\n let copyLen = this.blockLen - this.inLen;\n if (copyLen > len) {\n copyLen = len;\n }\n const tmpInput = input.subarray(offset, offset + copyLen);\n this.inbuf.set(tmpInput, this.inLen);\n offset += copyLen;\n len -= copyLen;\n this.inLen += copyLen;\n if (this.inLen === this.blockLen) {\n this.processBlock(this.inbuf);\n this.inLen = 0;\n }\n }\n };\n\n const finalize = function (this: DigestEngine & { update: (input: Uint8Array) => void; finalize: () => ArrayBuffer }): ArrayBuffer {\n const padding = this.doPadding();\n this.update(padding);\n const result = this.getDigest();\n this.reset();\n return result;\n };\n\n const engine = new Constructor();\n engine.inbuf = new Uint8Array(new ArrayBuffer(engine.blockLen));\n engine.reset();\n\n // Dynamically add methods to the engine\n (engine as any).update = update;\n (engine as any).finalize = finalize;\n\n return {\n update(input: string | Uint8Array | ArrayBuffer | number): void {\n (engine as any).update(convertToUint8Array(input));\n },\n\n finalize(): ArrayBuffer {\n return (engine as any).finalize();\n },\n\n digest(input: string | Uint8Array | ArrayBuffer | number): ArrayBuffer {\n (engine as any).update(convertToUint8Array(input));\n return (engine as any).finalize();\n },\n\n reset(): void {\n engine.reset();\n },\n\n digestLength(): number {\n return engine.digestLen;\n }\n };\n}\n\n/* HMAC implementation */\n\nfunction createHMAC(digest: DigestInterface): HMACInterface {\n let initialized = false;\n let key: Uint8Array | undefined;\n let ipad: Uint8Array | undefined;\n let opad: Uint8Array | undefined;\n\n const init = function (): void {\n if (initialized) {\n return;\n }\n if (key === undefined) {\n throw new Error(\"MAC key is not defined\");\n }\n let kbuf: Uint8Array;\n if (key.byteLength > 64) { /* B = 64 */\n kbuf = new Uint8Array(digest.digest(key));\n } else {\n kbuf = new Uint8Array(key);\n }\n ipad = new Uint8Array(new ArrayBuffer(64));\n for (let i = 0; i < kbuf.length; i++) {\n ipad[i] = 0x36 ^ kbuf[i];\n }\n for (let i = kbuf.length; i < 64; i++) {\n ipad[i] = 0x36;\n }\n opad = new Uint8Array(new ArrayBuffer(64));\n for (let i = 0; i < kbuf.length; i++) {\n opad[i] = 0x5c ^ kbuf[i];\n }\n for (let i = kbuf.length; i < 64; i++) {\n opad[i] = 0x5c;\n }\n initialized = true;\n digest.update(ipad.buffer as ArrayBuffer);\n };\n\n const resetMac = function (): void {\n initialized = false;\n key = undefined;\n ipad = undefined;\n opad = undefined;\n digest.reset();\n };\n\n const finalizeMac = function (): ArrayBuffer {\n const result = digest.finalize();\n digest.reset();\n digest.update(opad!.buffer as ArrayBuffer);\n digest.update(new Uint8Array(result));\n const finalResult = digest.finalize();\n resetMac();\n return finalResult;\n };\n\n const setKeyMac = function (k: Uint8Array): void {\n key = k;\n };\n\n return {\n setKey(keyInput: string | Uint8Array | ArrayBuffer | number): void {\n setKeyMac(convertToUint8Array(keyInput));\n init();\n },\n\n update(input: string | Uint8Array | ArrayBuffer | number): void {\n digest.update(convertToUint8Array(input));\n },\n\n finalize(): ArrayBuffer {\n return finalizeMac();\n },\n\n mac(input: string | Uint8Array | ArrayBuffer | number): ArrayBuffer {\n this.update(input);\n return this.finalize();\n },\n\n reset(): void {\n resetMac();\n },\n\n hmacLength(): number {\n return digest.digestLength();\n }\n };\n}\n\nexport const Digest = {\n SHA1: function (): DigestInterface {\n return createDigest(SHA1Engine);\n },\n\n HMAC_SHA1: function (): HMACInterface {\n return createHMAC(createDigest(SHA1Engine));\n }\n};\n","/**\n * Encode a string to UTF-8 bytes without depending on platform APIs.\n *\n * Native TextEncoder is used when available (browsers, Service Workers,\n * Node). WeChat mini programs do not provide TextEncoder, so the\n * feature detection falls back to a hand-written UTF-8 encoder that\n * produces identical bytes.\n */\n\nfunction fallbackEncodeUtf8(str: string): Uint8Array {\n // Worst case: every code point needs 4 bytes.\n const bytes = new Uint8Array(str.length * 4);\n let offset = 0;\n for (let i = 0; i < str.length; i++) {\n let code = str.charCodeAt(i);\n // Combine surrogate pairs into a single code point.\n if (code >= 0xd800 && code <= 0xdbff && i + 1 < str.length) {\n const next = str.charCodeAt(i + 1);\n if (next >= 0xdc00 && next <= 0xdfff) {\n code = (code - 0xd800) * 0x400 + (next - 0xdc00) + 0x10000;\n i += 1;\n }\n }\n if (code < 0x80) {\n bytes[offset++] = code;\n } else if (code < 0x800) {\n bytes[offset++] = 0xc0 | (code >> 6);\n bytes[offset++] = 0x80 | (code & 0x3f);\n } else if (code < 0x10000) {\n bytes[offset++] = 0xe0 | (code >> 12);\n bytes[offset++] = 0x80 | ((code >> 6) & 0x3f);\n bytes[offset++] = 0x80 | (code & 0x3f);\n } else {\n bytes[offset++] = 0xf0 | (code >> 18);\n bytes[offset++] = 0x80 | ((code >> 12) & 0x3f);\n bytes[offset++] = 0x80 | ((code >> 6) & 0x3f);\n bytes[offset++] = 0x80 | (code & 0x3f);\n }\n }\n return bytes.subarray(0, offset);\n}\n\n// Detected once at module load; environments do not gain TextEncoder at\n// runtime, and caching the instance avoids re-creating it per call.\nconst encoder = typeof TextEncoder !== 'undefined' ? new TextEncoder() : null;\n\nexport function encodeUtf8(str: string): Uint8Array {\n return encoder ? encoder.encode(str) : fallbackEncodeUtf8(str);\n}\n","import md5 from 'md5';\nimport base64js from 'base64-js';\nimport { Digest } from '../digest';\nimport { encodeUtf8 } from './utf8';\n\nfunction isDate(obj: any): boolean {\n return obj instanceof Date && !isNaN(obj.getTime());\n}\n\nfunction unix(date?: string | number | Date): number {\n const now = Date.now();\n const timestamp = date ? new Date(date).getTime() : now;\n const validTimestamp = isNaN(timestamp) ? now : timestamp;\n return Math.floor(validTimestamp / 1000);\n}\n\nfunction blobToBuffer(blob: Blob | ArrayBuffer | Uint8Array | string): Promise<Uint8Array> {\n if (typeof blob === 'string') {\n return Promise.resolve(encodeUtf8(blob));\n }\n if (blob instanceof ArrayBuffer) {\n return Promise.resolve(new Uint8Array(blob));\n }\n if (ArrayBuffer.isView(blob)) {\n return Promise.resolve(new Uint8Array(blob.buffer, blob.byteOffset, blob.byteLength));\n }\n // Blob: modern browsers and Service Workers provide blob.arrayBuffer().\n return blob.arrayBuffer().then((buf) => new Uint8Array(buf));\n}\n\ninterface Options {\n accessKeyId?: string;\n accessKeySecret?: string;\n bucket?: string;\n endpoint?: string;\n}\n\nfunction assertOptions(options: Options): void {\n const { accessKeyId, accessKeySecret, bucket, endpoint } = options;\n if (!accessKeyId) throw new Error('need accessKeyId');\n if (!accessKeySecret) throw new Error('need accessKeySecret');\n if (!bucket && !endpoint) throw new Error('need bucket or endpoint');\n}\n\nfunction hexToBuffer(hex: string): Uint8Array {\n const arr = [];\n for (let i = 0; i < hex.length; i += 2) {\n arr.push(parseInt(hex[i] + hex[i + 1], 16));\n }\n return Uint8Array.from(arr);\n}\n\nfunction getContentMd5(buf: Uint8Array): string {\n const bytes = Array.prototype.slice.call(buf, 0);\n const md5Buf = hexToBuffer(md5(bytes));\n return base64js.fromByteArray(md5Buf);\n}\n\nfunction getCanonicalizedOSSHeaders(headers: Record<string, any>): string {\n let result = '';\n let headerNames = Object.keys(headers);\n headerNames = headerNames.map(name => name.toLowerCase());\n headerNames.sort();\n headerNames.forEach((name) => {\n if (name.indexOf('x-oss-') === 0) {\n result += `${name}:${headers[name]}\\n`;\n }\n });\n return result;\n}\n\nfunction getCanonicalizedResource(bucket = '', objectName = '', parameters?: Record<string, any>): string {\n let resourcePath = '';\n if (bucket) resourcePath += `/${bucket}`;\n if (objectName) {\n if (objectName.charAt(0) !== '/') resourcePath += '/';\n resourcePath += objectName;\n }\n let canonicalizedResource = `${resourcePath}`;\n let separatorString = '?';\n if (parameters) {\n const compareFunc = (entry1: string, entry2: string) => entry1 > entry2 ? 1 : (entry1 < entry2 ? -1 : 0);\n const processFunc = (key: string) => {\n canonicalizedResource += separatorString + key;\n if (parameters[key]) canonicalizedResource += `=${parameters[key]}`;\n separatorString = '&';\n };\n Object.keys(parameters).sort(compareFunc).forEach(processFunc);\n }\n return canonicalizedResource;\n}\n\ninterface SignatureOptions {\n type?: 'header' | 'url';\n verb?: string;\n contentMd5?: string;\n expires?: number;\n bucket?: string;\n objectName?: string;\n accessKeySecret: string;\n headers?: Record<string, any>;\n subResource?: Record<string, any>;\n}\n\nfunction getSignature(options: SignatureOptions): string {\n const {\n type = 'header',\n verb = '',\n contentMd5 = '',\n expires = unix() + 3600,\n bucket,\n objectName,\n accessKeySecret,\n headers = {},\n subResource,\n } = options;\n const date = headers['x-oss-date'] || '';\n const contentType = headers['Content-Type'] || '';\n const data = [verb, contentMd5, contentType];\n if (type === 'header') {\n data.push(date);\n } else {\n data.push(expires);\n }\n const canonicalizedOSSHeaders = getCanonicalizedOSSHeaders(headers);\n const canonicalizedResource = getCanonicalizedResource(bucket, objectName, subResource);\n data.push(`${canonicalizedOSSHeaders}${canonicalizedResource}`);\n const text = data.join('\\n');\n const hmac = Digest.HMAC_SHA1();\n hmac.setKey(accessKeySecret);\n hmac.update(text);\n const hashBuf = new Uint8Array(hmac.finalize());\n const signature = base64js.fromByteArray(hashBuf);\n return signature;\n}\n\nexport {\n unix,\n encodeUtf8,\n blobToBuffer,\n assertOptions,\n getContentMd5,\n getCanonicalizedOSSHeaders,\n getCanonicalizedResource,\n getSignature,\n};\n","import { getTransport } from '../transport';\nimport { assertOptions, getSignature, encodeUtf8 } from '../utils';\nimport type { Options } from '../types';\nimport type { RequestParams } from '../protocol';\n\nconst DEFAULT_OPTIONS = {\n region: 'oss-cn-hangzhou',\n internal: false,\n cname: false,\n secure: false,\n timeout: 60000,\n};\n\n/**\n * Validate and fill in defaults for client options. The result is a\n * plain object, so the functional API can be tree-shaken independently\n * of the TinyOSS class. Shared by every provider; providers may pass\n * their own defaults (e.g. OBS region 'cn-north-4').\n */\nexport function normalizeOptions(\n options: Options = {} as Options,\n defaults: Record<string, any> = DEFAULT_OPTIONS\n): Options {\n assertOptions(options);\n return Object.assign({}, defaults, options);\n}\n\n/**\n * Resolve the OSS host the requests are sent to. An explicit endpoint\n * wins over the bucket/region combination.\n */\nexport function resolveHost(options: Options): string {\n const { bucket, region, endpoint, internal } = options;\n if (endpoint) return endpoint;\n // assertOptions guarantees bucket or endpoint, and endpoint is handled above.\n let host = bucket as string;\n if (internal) host += '-internal';\n host += `.${region}.aliyuncs.com`;\n return host;\n}\n\n/**\n * Resolve the per-request timeout, honoring a per-request override and\n * tolerating string timeouts. Shared by every provider.\n */\nexport function resolveTimeout(options: Options, fallback?: number): number | undefined {\n const value = fallback || options.timeout;\n return typeof value === 'string' ? parseInt(value, 10) : value;\n}\n\n/** Total payload size in bytes, for transports that need it. Shared by every provider. */\nexport function dataSize(data: any): number | undefined {\n if (data == null) return undefined;\n if (typeof data === 'string') return encodeUtf8(data).length;\n if (data instanceof Blob) return data.size;\n if (data instanceof ArrayBuffer) return data.byteLength;\n if (ArrayBuffer.isView(data)) return data.byteLength;\n return undefined;\n}\n\n/**\n * Sign and send a single OSS request through the configured transport.\n * Headers are completed with the date, the STS token and the\n * Authorization signature, and the URL is built from the host plus the\n * sub-resource query parameters.\n */\nexport function request(options: Options, params: RequestParams): Promise<any> {\n const opts = normalizeOptions(options);\n const { accessKeyId, accessKeySecret, stsToken, bucket, secure } = opts;\n const headers: Record<string, any> = {\n 'x-oss-date': new Date().toUTCString(),\n ...params.headers,\n };\n if (stsToken) headers['x-oss-security-token'] = stsToken;\n const signature = getSignature({\n verb: params.verb,\n contentMd5: params.contentMd5,\n headers,\n bucket,\n objectName: params.objectName,\n accessKeySecret,\n subResource: params.subResource,\n });\n headers.Authorization = `OSS ${accessKeyId}:${signature}`;\n const protocol = secure ? 'https' : 'http';\n let url = `${protocol}://${resolveHost(opts)}/${params.objectName}`;\n if (params.subResource) {\n const qs = Object.keys(params.subResource)\n .map((key) => {\n const value = params.subResource![key];\n return value === '' || value == null ? key : `${key}=${encodeURIComponent(value)}`;\n })\n .join('&');\n if (qs) url += `?${qs}`;\n }\n return getTransport()(url, {\n method: params.verb,\n headers,\n data: params.data,\n timeout: params.timeout == null ? resolveTimeout(opts) : params.timeout,\n onprogress: params.onprogress,\n total: dataSize(params.data),\n });\n}\n","import { Digest } from '../digest';\nimport { encodeUtf8 } from '../utils/utf8';\nimport base64js from 'base64-js';\n\n/**\n * Huawei Cloud OBS request signature (the OBS / \"obs\" scheme), mirroring\n * the official esdk-obs-browserjs Utils.doAuth exactly:\n *\n * StringToSign = Method\\n\n * [Content-MD5]\\n\n * [Content-Type]\\n\n * \\n // date line, empty because x-obs-date is set\n * x-obs-* headers sorted // \"key:value\\n\", meta values trimmed\n * /bucket/key // URL-encoded key, '/' kept\n * ?whitelisted sub-resource query params\n * Authorization = OBS AccessKeyId:base64(HMAC-SHA1(SecretKey, StringToSign))\n *\n * Only query parameters listed in OBS_RESOURCE_PARAMS (or starting with\n * x-obs-) participate in the signature; the official SDK filters with the\n * same table.\n */\n\n/** Allowed sub-resource query parameters, verbatim from esdk-obs-browserjs utils.js. */\nconst OBS_RESOURCE_PARAMS = [\n 'inventory', 'acl', 'backtosource', 'policy', 'torrent', 'logging',\n 'location', 'storageinfo', 'quota', 'storageclass', 'storagepolicy', 'mirrorbacktosource',\n 'requestpayment', 'versions', 'versioning', 'versionid', 'uploads', 'uploadid',\n 'partnumber', 'website', 'notification', 'replication', 'lifecycle', 'deletebucket',\n 'delete', 'cors', 'restore', 'tagging', 'append', 'position',\n 'response-content-type', 'response-content-language', 'response-expires', 'response-cache-control', 'response-content-disposition', 'response-content-encoding',\n 'x-image-process', 'x-image-save-object', 'x-image-save-bucket', 'x-oss-process', 'encryption', 'obsworkflowtriggerpolicy',\n 'x-workflow-limit', 'x-workflow-prefix', 'x-workflow-start', 'x-workflow-template-name', 'x-workflow-graph-name', 'x-workflow-execution-state',\n 'x-workflow-category', 'x-workflow-prefix', 'x-workflow-create', 'directcoldaccess', 'customdomain', 'cdnnotifyconfiguration',\n 'metadata', 'dispolicy', 'obscompresspolicy', 'template_name', 'template_name_prefix', 'x-workflow-status',\n 'x-workflow-type', 'x-workflow-forbid', 'sfsacl', 'obsbucketalias', 'obsalias', 'rename',\n 'name', 'modify', 'attname', 'inventory', 'truncate', 'object-lock',\n 'x-obs-security-token', 'publicaccessblock', 'x-obs-trash', 'bucketstatus', 'policystatus', 'x-obs-callback',\n];\n\n/**\n * OBS URL encoding: encodeURIComponent plus the extra RFC 3986 chars\n * (! ' ( ) *), with '/' preserved when keepSlash is true. Matches the\n * official SDK's encodeURIWithSafe.\n */\nexport function encodeObsUrl(str: string, keepSlash = true): string {\n let out = '';\n for (let i = 0; i < str.length; i++) {\n const ch = str.charAt(i);\n out += keepSlash && ch === '/' ? '/' : encodeURIComponent(ch);\n }\n return out\n .replace(/!/g, '%21')\n .replace(/\\*/g, '%2A')\n .replace(/'/g, '%27')\n .replace(/\\(/g, '%28')\n .replace(/\\)/g, '%29');\n}\n\nexport interface ObsSignatureOptions {\n verb: string;\n contentMd5?: string;\n headers?: Record<string, any>;\n bucket?: string;\n objectName?: string;\n accessKeySecret: string;\n subResource?: Record<string, any>;\n /** Unix timestamp for pre-signed URLs; when set it replaces the date line. */\n expires?: number;\n}\n\n/**\n * The whitelisted sub-resource query string, sorted and filtered like the\n * official SDK: keys and values are decoded and used verbatim.\n */\nexport function canonicalObsQuery(subResource?: Record<string, any>): string {\n if (!subResource) return '';\n const items: string[] = [];\n Object.keys(subResource).forEach((key) => {\n const value = subResource[key];\n items.push(value === '' || value == null ? key : `${key}=${value}`);\n });\n items.sort();\n const out: string[] = [];\n for (const item of items) {\n const listvar = item.split('=');\n const key = decodeURIComponent(listvar[0]);\n if (OBS_RESOURCE_PARAMS.indexOf(key.toLowerCase()) > -1) {\n out.push(listvar.length === 2 && listvar[1] ? `${key}=${decodeURIComponent(listvar[1])}` : key);\n }\n }\n return out.length ? `?${out.join('&')}` : '';\n}\n\n/** x-obs-* headers sorted by lower-cased key; meta values are trimmed. */\nexport function canonicalObsHeaders(headers: Record<string, any>): string {\n const names = Object.keys(headers)\n .map((name) => name.toLowerCase())\n .filter((name) => name.indexOf('x-obs-') === 0)\n .sort();\n let out = '';\n for (const name of names) {\n const value = name.indexOf('x-obs-meta-') === 0\n ? String(headers[name]).trim()\n : String(headers[name]);\n out += `${name}:${value}\\n`;\n }\n return out;\n}\n\n/**\n * Build the OBS StringToSign and compute its HMAC-SHA1 base64 signature.\n * For header signing the caller sets x-obs-date, so the date line is\n * empty (the header participates via canonicalObsHeaders, exactly like\n * the official SDK). For URL signing pass `expires` instead.\n */\nexport function getObsSignature(opt: ObsSignatureOptions): string {\n const headers = opt.headers || {};\n const contentType = headers['Content-Type'] != null\n ? String(headers['Content-Type'])\n : (headers['content-type'] != null ? String(headers['content-type']) : '');\n // The official SDK reads the MD5 from the headers ('Content-MD5'); our\n // put/uploadPart ops send 'Content-Md5' (OSS casing), so accept both.\n const contentMd5 = opt.contentMd5 != null\n ? String(opt.contentMd5)\n : (headers['Content-MD5'] != null\n ? String(headers['Content-MD5'])\n : (headers['Content-Md5'] != null ? String(headers['Content-Md5']) : ''));\n const dateLine = opt.expires != null ? String(opt.expires) : '';\n const parts = [opt.verb, contentMd5, contentType, dateLine];\n let resource = opt.bucket ? `/${opt.bucket}` : '';\n if (opt.objectName) resource += `/${encodeObsUrl(opt.objectName, true)}`;\n resource += canonicalObsQuery(opt.subResource);\n // The date line is followed by a newline (from the join), then the\n // x-obs-* headers, then the resource — same layout as the official SDK.\n parts.push(canonicalObsHeaders(headers) + resource);\n const text = parts.join('\\n');\n const hmac = Digest.HMAC_SHA1();\n hmac.setKey(encodeUtf8(opt.accessKeySecret));\n hmac.update(encodeUtf8(text));\n return base64js.fromByteArray(new Uint8Array(hmac.finalize()));\n}\n","import type { Options } from '../types';\n\n/**\n * Resolve the OBS host. An explicit endpoint wins over the\n * bucket/region combination.\n */\nexport function resolveObsHost(options: Options): string {\n const { bucket, region, endpoint } = options;\n if (endpoint) return endpoint;\n return `${bucket}.obs.${region}.myhuaweicloud.com`;\n}\n","import { getTransport } from '../transport';\nimport { normalizeOptions, resolveTimeout, dataSize } from '../ops/request';\nimport { getObsSignature, encodeObsUrl } from './signature';\nimport { resolveObsHost } from './host';\nimport type { Options } from '../types';\nimport type { RequestParams } from '../protocol';\n\n/** OBS defaults: Huawei Cloud China North 4 region, http, 60s timeout. */\nconst OBS_DEFAULTS = {\n region: 'cn-north-4',\n secure: false,\n timeout: 60000,\n};\n\n/**\n * Sign and send a single OBS request through the configured transport.\n * The signature (OBS scheme) covers the x-obs-date header, the optional\n * STS token, Content-MD5/Content-Type lines and the whitelisted\n * sub-resource query parameters; the object key is URL-encoded with '/'\n * preserved, in both the signature and the request URL.\n */\nexport function request(options: Options, params: RequestParams): Promise<any> {\n const opts = normalizeOptions(options, OBS_DEFAULTS);\n const { accessKeyId, accessKeySecret, stsToken, bucket, secure } = opts;\n const headers: Record<string, any> = {\n 'x-obs-date': new Date().toUTCString(),\n ...params.headers,\n };\n if (stsToken) headers['x-obs-security-token'] = stsToken;\n const signature = getObsSignature({\n verb: params.verb,\n contentMd5: params.contentMd5,\n headers,\n bucket,\n objectName: params.objectName,\n accessKeySecret,\n subResource: params.subResource,\n });\n headers.Authorization = `OBS ${accessKeyId}:${signature}`;\n const protocol = secure ? 'https' : 'http';\n let url = `${protocol}://${resolveObsHost(opts)}/${encodeObsUrl(params.objectName, true)}`;\n if (params.subResource) {\n const qs = Object.keys(params.subResource)\n .map((key) => {\n const value = params.subResource![key];\n return value === '' || value == null ? key : `${key}=${encodeURIComponent(value)}`;\n })\n .join('&');\n if (qs) url += `?${qs}`;\n }\n return getTransport()(url, {\n method: params.verb,\n headers,\n data: params.data,\n timeout: params.timeout == null ? resolveTimeout(opts) : params.timeout,\n onprogress: params.onprogress,\n total: dataSize(params.data),\n });\n}\n","import { unix } from '../utils';\nimport { normalizeOptions } from '../ops/request';\nimport { getObsSignature, encodeObsUrl } from './signature';\nimport { resolveObsHost } from './host';\nimport type { Options, ResponseHeaderType, SignatureUrlOptions } from '../types';\n\n/** OBS defaults: Huawei Cloud China North 4 region, http, 60s timeout. */\nconst OBS_DEFAULTS = {\n region: 'cn-north-4',\n secure: false,\n timeout: 60000,\n};\n\n/**\n * Get a signed OBS URL (the OBS \"obs\" scheme), mirroring the official\n * esdk-obs-browserjs createV2SignedUrlSync:\n *\n * https://bucket.obs.region.myhuaweicloud.com/key\n * ?AccessKeyId=<ak>&Expires=<unix>&[x-obs-security-token=<token>]\n * &Signature=<base64(HMAC-SHA1)>\n *\n * The signature covers Method, optional Content-MD5/Content-Type,\n * Expires, x-obs-* headers and the whitelisted sub-resource parameters\n * (response-* response headers and x-image-process are supported).\n *\n * @param options client options\n * @param objectName object name\n * @param urlOptions signature options, same shape as the OSS entry\n * @return signed URL\n */\nexport function obsSignUrl(\n options: Options,\n objectName: string,\n urlOptions: SignatureUrlOptions = {}\n): string {\n const { expires = 1800, method, process, response } = urlOptions;\n const opts = normalizeOptions(options, OBS_DEFAULTS);\n const { accessKeyId, accessKeySecret, stsToken, bucket, secure } = opts;\n const subResource: Record<string, any> = {};\n if (process) subResource['x-image-process'] = process;\n if (response) {\n Object.keys(response).forEach((k) => {\n const key = `response-${k.toLowerCase()}`;\n subResource[key] = response[k as keyof ResponseHeaderType];\n });\n }\n const headers: Record<string, any> = {};\n Object.keys(urlOptions).forEach((key) => {\n const lowerKey = key.toLowerCase();\n const value = urlOptions[key];\n if (lowerKey.indexOf('x-obs-') === 0) {\n headers[lowerKey] = value;\n } else if (lowerKey === 'content-md5' || lowerKey === 'content-type') {\n headers[lowerKey] = value;\n } else if (lowerKey !== 'expires' && lowerKey !== 'response' && lowerKey !== 'process' && lowerKey !== 'method') {\n subResource[lowerKey] = value;\n }\n });\n const securityToken = urlOptions['security-token'] || stsToken;\n if (securityToken) subResource['x-obs-security-token'] = securityToken;\n const expireUnix = unix() + expires;\n const signature = getObsSignature({\n verb: method || 'GET',\n contentMd5: headers['content-md5'],\n headers,\n bucket,\n objectName,\n accessKeySecret,\n subResource,\n expires: expireUnix,\n });\n const protocol = secure ? 'https' : 'http';\n let url = `${protocol}://${resolveObsHost(opts)}/${encodeObsUrl(objectName, true)}`;\n const query: Record<string, string> = {\n AccessKeyId: accessKeyId,\n Expires: String(expireUnix),\n };\n Object.keys(subResource).forEach((k) => {\n query[k] = String(subResource[k]);\n });\n const keys = Object.keys(query).sort();\n const qs = keys.map((k) => {\n const v = query[k];\n return v === '' ? encodeObsUrl(k, true) : `${encodeObsUrl(k, true)}=${encodeObsUrl(v, true)}`;\n }).join('&');\n url += `?${qs}&Signature=${encodeObsUrl(signature, true)}`;\n return url;\n}\n","import { blobToBuffer, getContentMd5 } from '../utils';\nimport type { BlobLike, Options, PutOptions } from '../types';\nimport type { Protocol } from '../protocol';\n\n/**\n * Put an object.\n *\n * @param protocol provider protocol (OSS or COS)\n */\nexport function createPut(protocol: Protocol) {\n return function put(\n options: Options,\n objectName: string,\n data: BlobLike | string,\n putOptions: PutOptions = {}\n ): Promise<any> {\n return blobToBuffer(data)\n .then((buf) => {\n const contentMd5 = getContentMd5(buf);\n const contentType = typeof data === 'string'\n ? 'text/plain; charset=utf-8'\n : (data instanceof Blob ? data.type : 'application/octet-stream');\n const headers: Record<string, any> = {\n 'Content-Md5': contentMd5,\n 'Content-Type': contentType,\n };\n return protocol.request(options, {\n verb: 'PUT',\n objectName,\n contentMd5,\n headers,\n // Strings are already encoded to bytes for the MD5; send those\n // bytes to avoid encoding twice and to give the transport a size.\n data: typeof data === 'string' ? buf : data,\n onprogress: putOptions.onprogress,\n });\n });\n };\n}\n","/**\n * Minimal XML tag extraction for OSS responses.\n *\n * OSS returns fixed-shape XML without namespaces, CDATA or nested\n * complexity, so a small regex-based extractor is enough and works in\n * environments without DOMParser (WeChat mini programs, Service\n * Workers). Match DOMParser semantics: missing tags yield ''.\n */\n\n/**\n * Extract the text content of the first element with the given tag.\n */\nexport function getXmlTag(xml: string, tag: string): string {\n const match = new RegExp(`<${tag}>([\\\\s\\\\S]*?)</${tag}>`).exec(xml);\n return match ? match[1] : '';\n}\n\n/**\n * Extract the full elements (opening tag through closing tag) with the\n * given tag, in document order.\n */\nexport function getXmlTags(xml: string, tag: string): string[] {\n const regex = new RegExp(`<${tag}>[\\\\s\\\\S]*?</${tag}>`, 'g');\n const tags: string[] = [];\n let match: RegExpExecArray | null;\n while ((match = regex.exec(xml)) !== null) {\n tags.push(match[0]);\n }\n return tags;\n}\n","import { getXmlTag } from '../utils/xml';\nimport type { InitMultipartUploadResult, MultipartOptions, Options } from '../types';\nimport type { Protocol } from '../protocol';\n\n/**\n * Initialize a multipart upload.\n *\n * @param protocol provider protocol (OSS or COS)\n */\nexport function createInitMultipartUpload(protocol: Protocol) {\n return function initMultipartUpload(\n options: Options,\n objectName: string,\n multipartOptions: MultipartOptions = {}\n ): Promise<InitMultipartUploadResult> {\n const headers: Record<string, any> = { ...multipartOptions.headers };\n return protocol.request(options, {\n verb: 'POST',\n objectName,\n headers,\n subResource: { uploads: '' },\n timeout: multipartOptions.timeout,\n }).then((res: any) => {\n const uploadId = getXmlTag(res.data, 'UploadId');\n return {\n name: objectName,\n uploadId,\n res: res.data,\n };\n });\n };\n}\n","import { blobToBuffer, getContentMd5 } from '../utils';\nimport type { BlobLike, MultipartOptions, Options, UploadPartResult } from '../types';\nimport type { Protocol } from '../protocol';\n\n/**\n * Upload a part in a multipart upload.\n *\n * @param protocol provider protocol (OSS or COS)\n */\nexport function createUploadPart(protocol: Protocol) {\n return async function uploadPart(\n options: Options,\n objectName: string,\n uploadId: string,\n partNo: number,\n data: BlobLike | string,\n start: number,\n end: number,\n multipartOptions: MultipartOptions = {}\n ): Promise<UploadPartResult> {\n // Uint8Array slicing is zero-copy (subarray); other inputs slice natively.\n const partData = ArrayBuffer.isView(data) && !(data instanceof DataView)\n ? data.subarray(start, end)\n : data.slice(start, end);\n const buf = await blobToBuffer(partData);\n const contentMd5 = getContentMd5(buf);\n // Only Blob carries a type; byte inputs default to octet-stream.\n const contentType = partData instanceof Blob ? partData.type || 'application/octet-stream' : 'application/octet-stream';\n const headers: Record<string, any> = {\n 'Content-Md5': contentMd5,\n 'Content-Type': contentType,\n ...multipartOptions.headers,\n };\n return protocol.request(options, {\n verb: 'PUT',\n objectName,\n contentMd5,\n headers,\n subResource: { uploadId, partNumber: partNo.toString() },\n data: partData,\n timeout: multipartOptions.timeout,\n }).then((res: any) => {\n return {\n name: objectName,\n etag: res.headers.etag || '',\n res: res.data,\n };\n });\n };\n}\n","import { getContentMd5, encodeUtf8 } from '../utils';\nimport { getXmlTag } from '../utils/xml';\nimport type { CompleteMultipartUploadResult, MultipartOptions, Options, PartInfo } from '../types';\nimport type { Protocol } from '../protocol';\n\n/**\n * Complete a multipart upload.\n *\n * @param protocol provider protocol (OSS or COS)\n */\nexport function createCompleteMultipartUpload(protocol: Protocol) {\n return async function completeMultipartUpload(\n options: Options,\n objectName: string,\n uploadId: string,\n parts: PartInfo[],\n multipartOptions: MultipartOptions = {}\n ): Promise<CompleteMultipartUploadResult> {\n // Build complete multipart upload XML\n const xmlParts = parts\n .sort((a, b) => a.number - b.number)\n .map((part) => ` <Part><PartNumber>${part.number}</PartNumber><ETag>${part.etag}</ETag></Part>`)\n .join('\\n');\n const xml = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\\n<CompleteMultipartUpload>\\n${xmlParts}\\n</CompleteMultipartUpload>`;\n const buf = encodeUtf8(xml);\n const contentMd5 = getContentMd5(buf);\n const headers: Record<string, any> = {\n 'Content-Md5': contentMd5,\n 'Content-Type': 'application/xml',\n ...multipartOptions.headers,\n };\n return protocol.request(options, {\n verb: 'POST',\n objectName,\n contentMd5,\n headers,\n subResource: { uploadId },\n data: buf,\n timeout: multipartOptions.timeout,\n }).then((res: any) => {\n const etag = getXmlTag(res.data, 'ETag');\n return {\n name: objectName,\n etag,\n bucket: options.bucket,\n res: res.data,\n };\n });\n };\n}\n","import type { MultipartOptions, Options } from '../types';\nimport type { Protocol } from '../protocol';\n\n/**\n * Abort a multipart upload.\n *\n * @param protocol provider protocol (OSS or COS)\n */\nexport function createAbortMultipartUpload(protocol: Protocol) {\n return function abortMultipartUpload(\n options: Options,\n objectName: string,\n uploadId: string,\n multipartOptions: MultipartOptions = {}\n ): Promise<void> {\n return protocol.request(options, {\n verb: 'DELETE',\n objectName,\n headers: { ...multipartOptions.headers },\n subResource: { uploadId },\n timeout: multipartOptions.timeout,\n }).then(() => {\n return;\n });\n };\n}\n","import { getXmlTag, getXmlTags } from '../utils/xml';\nimport type { ListPartsResult, ListQuery, MultipartOptions, Options, Part } from '../types';\nimport type { Protocol } from '../protocol';\n\n/**\n * List parts of a multipart upload.\n *\n * @param protocol provider protocol (OSS or COS)\n */\nexport function createListParts(protocol: Protocol) {\n return function listParts(\n options: Options,\n objectName: string,\n uploadId: string,\n query: ListQuery = {},\n multipartOptions: MultipartOptions = {}\n ): Promise<ListPartsResult> {\n const subResource: Record<string, any> = { uploadId };\n if (query['max-parts']) subResource['max-parts'] = query['max-parts'].toString();\n if (query['part-number-marker']) subResource['part-number-marker'] = query['part-number-marker'].toString();\n return protocol.request(options, {\n verb: 'GET',\n objectName,\n headers: { ...multipartOptions.headers },\n subResource,\n timeout: multipartOptions.timeout,\n }).then((res: any) => {\n const xml = res.data;\n const isTruncated = getXmlTag(xml, 'IsTruncated') === 'true';\n const nextPartNumberMarker = parseInt(getXmlTag(xml, 'NextPartNumberMarker') || '0', 10);\n const parts: Part[] = getXmlTags(xml, 'Part').map((partXml) => ({\n PartNumber: parseInt(getXmlTag(partXml, 'PartNumber') || '0', 10),\n LastModified: getXmlTag(partXml, 'LastModified'),\n ETag: getXmlTag(partXml, 'ETag'),\n Size: parseInt(getXmlTag(partXml, 'Size') || '0', 10),\n }));\n return {\n isTruncated,\n nextPartNumberMarker,\n parts,\n res: res.data,\n };\n });\n };\n}\n","import { getXmlTag, getXmlTags } from '../utils/xml';\nimport type { ListUploadsQuery, ListUploadsResult, MultipartOptions, Options, UploadInfo } from '../types';\nimport type { Protocol } from '../protocol';\n\n/**\n * List multipart uploads.\n *\n * The marker query key is provider-specific: OSS uses `marker`, COS uses\n * `key-marker` (the protocol carries the right key).\n *\n * @param protocol provider protocol (OSS or COS)\n */\nexport function createListUploads(protocol: Protocol) {\n return function listUploads(\n options: Options,\n query: ListUploadsQuery = {},\n multipartOptions: MultipartOptions = {}\n ): Promise<ListUploadsResult> {\n const subResource: Record<string, any> = { uploads: '' };\n if (query.prefix) subResource.prefix = query.prefix;\n if (query.marker) subResource[protocol.listUploadsMarkerKey] = query.marker;\n if (query['max-uploads']) subResource['max-uploads'] = query['max-uploads'].toString();\n if (query['upload-id-marker']) subResource['upload-id-marker'] = query['upload-id-marker'];\n return protocol.request(options, {\n verb: 'GET',\n objectName: '',\n headers: { ...multipartOptions.headers },\n subResource,\n timeout: multipartOptions.timeout,\n }).then((res: any) => {\n const xml = res.data;\n const isTruncated = getXmlTag(xml, 'IsTruncated') === 'true';\n const nextKeyMarker = getXmlTag(xml, 'NextKeyMarker') || undefined;\n const nextUploadIdMarker = getXmlTag(xml, 'NextUploadIdMarker') || undefined;\n const uploads: UploadInfo[] = getXmlTags(xml, 'Upload').map((uploadXml) => ({\n uploadId: getXmlTag(uploadXml, 'UploadId'),\n name: getXmlTag(uploadXml, 'Key'),\n initiated: getXmlTag(uploadXml, 'Initiated'),\n }));\n return {\n uploads,\n isTruncated,\n nextKeyMarker,\n nextUploadIdMarker,\n res: res.data,\n };\n });\n };\n}\n","import { getXmlTag } from '../utils/xml';\nimport type { Options, SourceData, UploadPartCopyOptions, UploadPartCopyResult } from '../types';\nimport type { Protocol } from '../protocol';\n\n/**\n * Upload a part by copying from an existing object.\n *\n * @param protocol provider protocol (OSS or COS)\n */\nexport function createUploadPartCopy(protocol: Protocol) {\n return function uploadPartCopy(\n options: Options,\n objectName: string,\n uploadId: string,\n partNo: number,\n range: string,\n sourceData: SourceData,\n copyOptions: UploadPartCopyOptions = {}\n ): Promise<UploadPartCopyResult> {\n const bucket = options.bucket;\n const sourceBucket = sourceData.sourceBucket || bucket;\n const copySource = `/${sourceBucket}/${encodeURIComponent(sourceData.sourceKey)}`;\n const headers: Record<string, any> = {\n [protocol.copySourceHeader]: copySource,\n [protocol.copySourceRangeHeader]: range,\n ...copyOptions.headers,\n };\n return protocol.request(options, {\n verb: 'PUT',\n objectName,\n headers,\n subResource: { uploadId, partNumber: partNo.toString() },\n timeout: copyOptions.timeout,\n }).then((res: any) => {\n const etag = getXmlTag(res.data, 'ETag');\n const lastModified = getXmlTag(res.data, 'LastModified');\n return {\n etag,\n lastModified,\n res: res.data,\n };\n });\n };\n}\n","import { encodeUtf8 } from '../utils';\nimport type { BlobLike, Checkpoint, CompleteMultipartUploadResult, InitMultipartUploadResult, MultipartOptions, MultipartUploadOptions, Options, PartInfo, UploadPartResult } from '../types';\nimport type { Protocol } from '../protocol';\n\n/** The multipart primitives multipartUpload drives, injected by the entry point. */\nexport interface MultipartUploadDeps {\n initMultipartUpload: (\n options: Options,\n objectName: string,\n multipartOptions?: MultipartOptions\n ) => Promise<InitMultipartUploadResult>;\n uploadPart: (\n options: Options,\n objectName: string,\n uploadId: string,\n partNo: number,\n data: BlobLike | string,\n start: number,\n end: number,\n multipartOptions?: MultipartOptions\n ) => Promise<UploadPartResult>;\n completeMultipartUpload: (\n options: Options,\n objectName: string,\n uploadId: string,\n parts: PartInfo[],\n multipartOptions?: MultipartOptions\n ) => Promise<CompleteMultipartUploadResult>;\n}\n\nfunction getFileSize(data: BlobLike | string): number {\n if (typeof data === 'string') return encodeUtf8(data).length;\n if (data instanceof Blob) return data.size;\n return data.byteLength;\n}\n\n/**\n * Multipart upload with full workflow support.\n *\n * @param protocol provider protocol (OSS or COS)\n * @param deps the protocol-bound multipart primitives\n */\nexport function createMultipartUpload(protocol: Protocol, deps: MultipartUploadDeps) {\n return async function multipartUpload(\n options: Options,\n objectName: string,\n file: BlobLike | string,\n multipartOptions: MultipartUploadOptions = {}\n ): Promise<CompleteMultipartUploadResult> {\n const {\n parallel = 5,\n partSize = 1024 * 1024, // default 1MB\n checkpoint,\n progress,\n meta,\n mime,\n headers = {},\n } = multipartOptions;\n\n let uploadId: string;\n let doneParts: PartInfo[] = [];\n let actualPartSize = Math.max(partSize, 100 * 1024); // minimum 100KB\n\n const fileSize = getFileSize(file);\n if (fileSize === 0) {\n throw new Error('multipart upload requires a non-empty file');\n }\n\n // Use checkpoint if available\n if (checkpoint && checkpoint.uploadId && getFileSize(checkpoint.file) === fileSize) {\n uploadId = checkpoint.uploadId;\n doneParts = checkpoint.doneParts || [];\n // Resume with the part size the checkpoint was created with, otherwise\n // start/end ranges and the final part list would be computed wrong.\n if (checkpoint.partSize) actualPartSize = checkpoint.partSize;\n } else {\n // Initialize multipart upload\n const initHeaders: Record<string, any> = { ...headers };\n if (mime) initHeaders['Content-Type'] = mime;\n if (meta) {\n Object.keys(meta).forEach((key) => {\n initHeaders[`${protocol.metaPrefix}${key}`] = meta[key];\n });\n }\n const initResult = await deps.initMultipartUpload(options, objectName, { headers: initHeaders });\n uploadId = initResult.uploadId;\n }\n\n // Calculate parts\n const numParts = Math.ceil(fileSize / actualPartSize);\n const parts: PartInfo[] = [];\n\n // Build checkpoint object\n const currentCheckpoint: Checkpoint = {\n file,\n name: objectName,\n uploadId,\n partSize: actualPartSize,\n parts: [],\n doneParts: [...doneParts],\n };\n\n // Calculate parts to upload\n for (let i = 1; i <= numParts; i++) {\n const start = (i - 1) * actualPartSize;\n const end = Math.min(i * actualPartSize, fileSize);\n const isDone = doneParts.some((p) => p.number === i);\n if (!isDone) {\n currentCheckpoint.parts.push({ number: i, etag: '' });\n }\n parts.push({ number: i, etag: '' });\n }\n\n // Upload parts with concurrency control\n const uploadPartWithRetry = async (partNo: number, start: number, end: number): Promise<PartInfo> => {\n const uploadOnce = async (): Promise<UploadPartResult> => {\n const result = await deps.uploadPart(options, objectName, uploadId, partNo, file, start, end);\n // The browser can only read the ETag response header when the bucket\n // CORS rule exposes it; otherwise completeMultipartUpload would fail\n // with an opaque InvalidPart error.\n if (!result.etag) {\n throw new Error('cannot read the ETag of the uploaded part; make sure the bucket CORS rule exposes the ETag response header');\n }\n return result;\n };\n let result: UploadPartResult;\n try {\n result = await uploadOnce();\n } catch (err) {\n // Retry once on error\n result = await uploadOnce();\n }\n // Update checkpoint\n currentCheckpoint.doneParts.push({ number: partNo, etag: result.etag });\n // Call progress callback\n if (progress) {\n const percentage = currentCheckpoint.doneParts.length / numParts;\n progress(percentage, currentCheckpoint, result);\n }\n return { number: partNo, etag: result.etag };\n };\n\n // Upload parts in parallel with concurrency limit\n const pendingParts = currentCheckpoint.parts.filter((p) => !doneParts.some((dp) => dp.number === p.number));\n const uploadTasks: Promise<PartInfo>[] = [];\n const executing: Promise<PartInfo>[] = [];\n\n for (const part of pendingParts) {\n const start = (part.number - 1) * actualPartSize;\n const end = Math.min(part.number * actualPartSize, fileSize);\n const task = uploadPartWithRetry(part.number, start, end);\n uploadTasks.push(task);\n executing.push(task);\n // Remove the task from the in-flight pool once it settles, so the\n // next Promise.race never sees an already-resolved promise.\n task.finally(() => {\n const index = executing.indexOf(task);\n if (index > -1) executing.splice(index, 1);\n });\n if (executing.length >= parallel) {\n await Promise.race(executing);\n }\n }\n\n await Promise.all(uploadTasks);\n\n // Complete multipart upload\n const completeParts = [...doneParts, ...currentCheckpoint.doneParts]\n .filter((p, index, self) => self.findIndex((sp) => sp.number === p.number) === index);\n\n return deps.completeMultipartUpload(options, objectName, uploadId, completeParts);\n };\n}\n","import type { TransportOptions, TransportResponse } from '../transport';\n\n/**\n * fetch-based transport for Service Workers and Node.js, where\n * XMLHttpRequest is unavailable. fetch cannot report intermediate\n * upload progress, so a synthetic 0% event fires before sending and a\n * 100% event after, with lengthComputable false.\n */\nexport function fetchTransport(url: string, options: TransportOptions): Promise<TransportResponse> {\n const { method, headers, data, timeout, onprogress, total } = options;\n const controller = new AbortController();\n let timer: ReturnType<typeof setTimeout> | undefined;\n if (timeout) {\n timer = setTimeout(() => controller.abort(), timeout);\n }\n if (onprogress && total) {\n onprogress({ loaded: 0, total, lengthComputable: false });\n }\n return fetch(url, {\n method,\n headers,\n body: data as BodyInit | null | undefined,\n signal: controller.signal,\n })\n .then(async (res) => {\n const text = await res.text();\n if (res.status < 200 || res.status >= 300) {\n throw new Error(`the request is error: ${res.status} ${res.statusText} ${text}`);\n }\n if (onprogress && total) {\n onprogress({ loaded: total, total, lengthComputable: false });\n }\n const headers: Record<string, string> = {};\n res.headers.forEach((value, key) => {\n headers[key] = value;\n });\n return {\n data: text,\n headers,\n status: res.status,\n statusText: res.statusText,\n };\n })\n .finally(() => {\n if (timer) clearTimeout(timer);\n });\n}\n","import type { TransportOptions, TransportResponse } from '../transport';\n\ninterface WxRequestResponse {\n data: string;\n header: Record<string, string>;\n statusCode: number;\n}\n\ninterface WxRequestOptions {\n url: string;\n method: string;\n header: Record<string, string>;\n data?: ArrayBuffer | string;\n timeout?: number;\n success: (res: WxRequestResponse) => void;\n fail: (err: unknown) => void;\n}\n\n// The wx global only exists in the WeChat mini program runtime. The\n// typeof guard keeps the module loadable elsewhere; calling this\n// transport outside a mini program rejects.\ndeclare const wx: {\n request: (options: WxRequestOptions) => void;\n};\n\n/**\n * wx.request-based transport for WeChat mini programs. Mini programs\n * have no XMLHttpRequest and no Blob, so uploads must pass ArrayBuffer\n * (see README). wx.request cannot report intermediate upload progress,\n * so a synthetic 0% event fires before sending and a 100% event after,\n * with lengthComputable false.\n */\nexport function wxRequestTransport(url: string, options: TransportOptions): Promise<TransportResponse> {\n const { method, headers, data, timeout, onprogress, total } = options;\n if (typeof wx === 'undefined') {\n return Promise.reject(new Error('wxRequestTransport requires the WeChat mini program runtime'));\n }\n if (onprogress && total) {\n onprogress({ loaded: 0, total, lengthComputable: false });\n }\n return new Promise((resolve, reject) => {\n wx.request({\n url,\n method,\n header: headers,\n data: data instanceof Uint8Array ? (data.buffer as ArrayBuffer) : (data as string | ArrayBuffer | undefined),\n timeout,\n success: (res) => {\n if (onprogress && total) {\n onprogress({ loaded: total, total, lengthComputable: false });\n }\n resolve({ data: res.data, headers: res.header, status: res.statusCode, statusText: '' });\n },\n fail: (err) => {\n reject(err instanceof Error ? err : new Error(String(err)));\n },\n });\n });\n}\n","/**\n * Bind client options to an operation function, so callers don't have to\n * repeat the credentials on every call. The returned function keeps the\n * operation's original signature minus the leading options argument.\n *\n * Unlike a client object factory, this never references operations it\n * isn't given, so tree shaking keeps working: importing `put` plus\n * `bindOptions` still excludes the multipart code from the bundle.\n *\n * @example\n * import { put, bindOptions } from 'tiny-oss';\n * const upload = bindOptions(put, { accessKeyId, accessKeySecret, region, bucket });\n * upload('hello.txt', blob);\n */\nexport function bindOptions<O, A extends unknown[], R>(\n operation: (options: O, ...args: A) => R,\n options: O\n): (...args: A) => R {\n return (...args: A): R => operation(options, ...args);\n}\n","import type { Protocol } from '../protocol';\nimport { request as obsRequest } from './request';\nimport { obsSignUrl } from './signatureUrl';\nimport { createPut } from '../ops/put';\nimport { createInitMultipartUpload } from '../ops/initMultipartUpload';\nimport { createUploadPart } from '../ops/uploadPart';\nimport { createCompleteMultipartUpload } from '../ops/completeMultipartUpload';\nimport { createAbortMultipartUpload } from '../ops/abortMultipartUpload';\nimport { createListParts } from '../ops/listParts';\nimport { createListUploads } from '../ops/listUploads';\nimport { createUploadPartCopy } from '../ops/uploadPartCopy';\nimport { createMultipartUpload } from '../ops/multipartUpload';\n\n/**\n * The Huawei Cloud OBS protocol. This entry point never references the\n * OSS or COS signers, so bundlers tree-shake them away. putSymlink is\n * intentionally absent: OBS has no symlink API.\n */\nconst OBS_PROTOCOL: Protocol = {\n request: obsRequest,\n metaPrefix: 'x-obs-meta-',\n copySourceHeader: 'x-obs-copy-source',\n copySourceRangeHeader: 'x-obs-copy-source-range',\n listUploadsMarkerKey: 'key-marker',\n supportsSymlink: false,\n signUrl: obsSignUrl,\n};\n\nconst put = createPut(OBS_PROTOCOL);\nconst initMultipartUpload = createInitMultipartUpload(OBS_PROTOCOL);\nconst uploadPart = createUploadPart(OBS_PROTOCOL);\nconst completeMultipartUpload = createCompleteMultipartUpload(OBS_PROTOCOL);\nconst multipartUpload = createMultipartUpload(OBS_PROTOCOL, {\n initMultipartUpload,\n uploadPart,\n completeMultipartUpload,\n});\nconst abortMultipartUpload = createAbortMultipartUpload(OBS_PROTOCOL);\nconst listParts = createListParts(OBS_PROTOCOL);\nconst listUploads = createListUploads(OBS_PROTOCOL);\nconst uploadPartCopy = createUploadPartCopy(OBS_PROTOCOL);\nconst signatureUrl = OBS_PROTOCOL.signUrl;\n\nexport type {\n BlobLike,\n Checkpoint,\n CompleteMultipartUploadResult,\n HTTPMethods,\n InitMultipartUploadResult,\n ListPartsResult,\n ListQuery,\n ListUploadsQuery,\n ListUploadsResult,\n MultipartOptions,\n MultipartUploadOptions,\n ObjectCallback,\n Options,\n Part,\n PartInfo,\n Progress,\n PutOptions,\n ResponseHeaderType,\n SignatureUrlOptions,\n SourceData,\n UploadInfo,\n UploadPartCopyOptions,\n UploadPartCopyResult,\n UploadPartResult,\n} from '../types';\nexport { setTransport, getTransport } from '../transport';\nexport type { Transport, TransportOptions, TransportResponse } from '../transport';\nexport { fetchTransport } from '../transports/fetch';\nexport { wxRequestTransport } from '../transports/wx';\nexport { bindOptions } from '../ops/bindOptions';\nexport {\n put,\n initMultipartUpload,\n uploadPart,\n completeMultipartUpload,\n multipartUpload,\n abortMultipartUpload,\n listParts,\n listUploads,\n uploadPartCopy,\n signatureUrl,\n};\n"],"names":["xhrTransport","url","options","resolve","reject","method","data","headers","timeout","onprogress","xhr","timerId","ev","responseHeaders","headerString","line","parts","header","value","err","key","current","setTransport","transport","getTransport","base64map","crypt","n","b","i","bytes","words","hex","c","base64","triplet","j","imod4","cryptModule","charenc","str","charenc_1","isBuffer_1","obj","isBuffer","isSlowBuffer","require$$0","utf8","require$$1","require$$2","bin","md5","message","m","l","a","d","FF","GG","HH","II","aa","bb","cc","dd","x","s","t","md5Module","digestbytes","base64Js","byteLength","toByteArray","fromByteArray","lookup","revLookup","Arr","code","len","getLens","b64","validLen","placeHoldersLen","lens","_byteLength","tmp","arr","curByte","tripletToBase64","num","encodeChunk","uint8","start","end","output","extraBytes","maxChunkLength","len2","that","endValue","result","resultArray","SHA1Engine","input","A","B","C","D","E","W","T","datalen","msw","lsw","zeros","pad","rv","fromASCII","buffer","fromInteger","v","convertToUint8Array","createDigest","Constructor","update","offset","copyLen","tmpInput","finalize","padding","engine","createHMAC","digest","initialized","ipad","opad","init","kbuf","resetMac","finalizeMac","finalResult","setKeyMac","k","keyInput","Digest","fallbackEncodeUtf8","next","encoder","encodeUtf8","unix","date","now","timestamp","validTimestamp","blobToBuffer","blob","buf","assertOptions","accessKeyId","accessKeySecret","bucket","endpoint","hexToBuffer","getContentMd5","md5Buf","base64js","DEFAULT_OPTIONS","normalizeOptions","defaults","resolveTimeout","fallback","dataSize","OBS_RESOURCE_PARAMS","encodeObsUrl","keepSlash","out","ch","canonicalObsQuery","subResource","items","item","listvar","canonicalObsHeaders","names","name","getObsSignature","opt","contentType","contentMd5","dateLine","resource","text","hmac","resolveObsHost","region","OBS_DEFAULTS","request","params","opts","stsToken","secure","__spreadValues","signature","qs","obsSignUrl","objectName","urlOptions","expires","process","response","lowerKey","securityToken","expireUnix","query","createPut","protocol","putOptions","getXmlTag","xml","tag","match","getXmlTags","regex","tags","createInitMultipartUpload","multipartOptions","res","uploadId","createUploadPart","_0","_1","_2","_3","_4","_5","_6","__async","partNo","partData","createCompleteMultipartUpload","part","etag","createAbortMultipartUpload","createListParts","isTruncated","nextPartNumberMarker","partXml","createListUploads","nextKeyMarker","nextUploadIdMarker","uploadXml","createUploadPartCopy","range","sourceData","copyOptions","copySource","lastModified","getFileSize","createMultipartUpload","deps","file","parallel","partSize","checkpoint","progress","meta","mime","doneParts","actualPartSize","fileSize","initHeaders","numParts","currentCheckpoint","p","uploadPartWithRetry","uploadOnce","percentage","pendingParts","dp","uploadTasks","executing","task","index","completeParts","self","sp","fetchTransport","total","controller","timer","wxRequestTransport","bindOptions","operation","args","OBS_PROTOCOL","obsRequest","put","initMultipartUpload","uploadPart","completeMultipartUpload","multipartUpload","abortMultipartUpload","listParts","listUploads","uploadPartCopy","signatureUrl"],"mappings":"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","x_google_ignoreList":[1,2,3,4,5]}
|