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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tiny-oss.azure.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/aws/sha256.ts","../src/azure/signature.ts","../src/azure/host.ts","../src/azure/request.ts","../src/azure/signatureUrl.ts","../src/ops/put.ts","../src/ops/multipartUpload.ts","../src/azure/multipart.ts","../src/transports/fetch.ts","../src/transports/wx.ts","../src/ops/bindOptions.ts","../src/azure/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 { createDigest, createHMAC } from '../digest';\nimport type { DigestInterface, HMACInterface } from '../digest';\n\n/* SHA-256 Engine */\n\nclass SHA256Engine {\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(32));\n this.currentLen = 0;\n this.inLen = 0;\n this.inbuf = new Uint8Array(new ArrayBuffer(64));\n this.blockLen = 64;\n this.digestLen = 32;\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 let f = this.current[5];\n let g = this.current[6];\n let h = this.current[7];\n\n const W: number[] = new Array(64);\n for (let i = 0; i < 16; i++) {\n const j = i * 4;\n W[i] = (input[j] << 24) | (input[j + 1] << 16) | (input[j + 2] << 8) | input[j + 3];\n }\n for (let i = 16; i < 64; i++) {\n const w15 = W[i - 15];\n const w2 = W[i - 2];\n const s0 = ((w15 >>> 7) | (w15 << 25)) ^ ((w15 >>> 18) | (w15 << 14)) ^ (w15 >>> 3);\n const s1 = ((w2 >>> 17) | (w2 << 15)) ^ ((w2 >>> 19) | (w2 << 13)) ^ (w2 >>> 10);\n W[i] = (s1 + W[i - 7] + s0 + W[i - 16]) | 0;\n }\n\n for (let i = 0; i < 64; i++) {\n const S1 = ((e >>> 6) | (e << 26)) ^ ((e >>> 11) | (e << 21)) ^ ((e >>> 25) | (e << 7));\n const ch = (e & f) ^ (~e & g);\n const t1 = (h + S1 + ch + SHA256_K[i] + W[i]) | 0;\n const S0 = ((a >>> 2) | (a << 30)) ^ ((a >>> 13) | (a << 19)) ^ ((a >>> 22) | (a << 10));\n const maj = (a & b) ^ (a & c) ^ (b & c);\n const t2 = (S0 + maj) | 0;\n h = g;\n g = f;\n f = e;\n e = (d + t1) | 0;\n d = c;\n c = b;\n b = a;\n a = (t1 + t2) | 0;\n }\n\n this.current[0] = (this.current[0] + a) | 0;\n this.current[1] = (this.current[1] + b) | 0;\n this.current[2] = (this.current[2] + c) | 0;\n this.current[3] = (this.current[3] + d) | 0;\n this.current[4] = (this.current[4] + e) | 0;\n this.current[5] = (this.current[5] + f) | 0;\n this.current[6] = (this.current[6] + g) | 0;\n this.current[7] = (this.current[7] + h) | 0;\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(32));\n for (let i = 0; i < 8; i++) {\n const v = this.current[i];\n const o = i * 4;\n rv[o] = (v >>> 24) & 0xFF;\n rv[o + 1] = (v >>> 16) & 0xFF;\n rv[o + 2] = (v >>> 8) & 0xFF;\n rv[o + 3] = v & 0xFF;\n }\n return rv.buffer;\n }\n\n reset(): void {\n this.currentLen = 0;\n this.inLen = 0;\n this.current[0] = 0x6a09e667;\n this.current[1] = 0xbb67ae85;\n this.current[2] = 0x3c6ef372;\n this.current[3] = 0xa54ff53a;\n this.current[4] = 0x510e527f;\n this.current[5] = 0x9b05688c;\n this.current[6] = 0x1f83d9ab;\n this.current[7] = 0x5be0cd19;\n }\n}\n\nconst SHA256_K = new Uint32Array([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2,\n]);\n\n/** SHA-256 digest with the same interface as digest.ts's Digest.SHA1. */\nexport function sha256(): DigestInterface {\n return createDigest(SHA256Engine);\n}\n\n/** HMAC-SHA256 with the same interface as digest.ts's Digest.HMAC_SHA1. */\nexport function hmacSha256(): HMACInterface {\n return createHMAC(createDigest(SHA256Engine));\n}\n","import base64js from 'base64-js';\nimport { hmacSha256 } from '../aws/sha256';\nimport { encodeUtf8 } from '../utils';\n\n/**\n * Azure Blob Storage Shared Key authorization (Blob service, version\n * 2009-09-19 and later). The StringToSign has a fixed 12-field header\n * block (empty fields stay as empty strings, keeping their newline),\n * followed by the canonicalized x-ms-* headers and the canonicalized\n * resource. The signing key is the Base64-decoded account key.\n *\n * Reference: https://learn.microsoft.com/en-us/rest/api/storageservices/authorize-with-shared-key\n */\n\n/** URL-decode a canonicalized query value, tolerating unencoded input. */\nfunction decodeQueryValue(value: string): string {\n try {\n return decodeURIComponent(value);\n } catch {\n return value;\n }\n}\n\n/**\n * CanonicalizedHeaders: every x-ms-* header, lower-cased, sorted\n * lexicographically, whitespace collapsed, terminated by a newline.\n */\nexport function getCanonicalizedAzureHeaders(headers: Record<string, any>): string {\n const names = Object.keys(headers)\n .map((name) => name.toLowerCase())\n .filter((name) => name.indexOf('x-ms-') === 0)\n .sort();\n let result = '';\n names.forEach((name) => {\n const original = Object.keys(headers).find((key) => key.toLowerCase() === name);\n const value = String(headers[original as string]).trim();\n result += `${name}:${value}\\n`;\n });\n return result;\n}\n\nfunction comparePairs(a: [string, string], b: [string, string]): number {\n if (a[0] !== b[0]) return a[0] < b[0] ? -1 : 1;\n if (a[1] !== b[1]) return a[1] < b[1] ? -1 : 1;\n return 0;\n}\n\n/**\n * CanonicalizedResource (Shared Key format, 2009-09-19 and later):\n * \"/account\" + the encoded URI path, then every query parameter\n * (lower-cased, URL-decoded, sorted) as \"\\nname:value\" lines.\n */\nexport function getCanonicalizedAzureResource(\n account: string,\n pathname: string,\n query?: Record<string, any>\n): string {\n let result = `/${account}${pathname}`;\n if (query) {\n const pairs: Array<[string, string]> = [];\n Object.keys(query).forEach((key) => {\n const name = key.toLowerCase();\n const raw = query[key];\n // The official SDK drops parameters without a value (URLs where\n // the '=' is missing or the value is empty) before signing.\n if (raw == null || raw === '') return;\n const values = Array.isArray(raw) ? raw : [raw];\n // The official SDK lower-cases the key (no URL-decode) and\n // URL-decodes the value before signing.\n const decoded = values.map((value: any) => decodeQueryValue(value == null ? '' : String(value))).sort();\n pairs.push([name, decoded.join(',')]);\n });\n pairs.sort(comparePairs);\n pairs.forEach(([name, value]) => {\n result += `\\n${name}:${value}`;\n });\n }\n return result;\n}\n\n/**\n * Build the full StringToSign and return the Authorization header value:\n * SharedKey <account>:<base64(HMAC-SHA256(base64decode(key), StringToSign))>\n */\nexport function getSharedKeyAuthorization(options: {\n verb: string;\n headers: Record<string, any>;\n pathname: string;\n query?: Record<string, any>;\n account: string;\n accountKey: string;\n contentMd5?: string;\n contentType?: string;\n contentLength?: number;\n}): string {\n const { verb, headers, pathname, query, account, accountKey } = options;\n const contentMd5 = options.contentMd5 || '';\n const contentType = options.contentType || '';\n // Content-Length must be empty when the request body is absent or zero.\n const contentLength = options.contentLength ? String(options.contentLength) : '';\n // The Date field is empty because x-ms-date (canonicalized below) is present.\n const fields = [verb, '', '', contentLength, contentMd5, contentType, '', '', '', '', '', ''];\n const stringToSign = fields.join('\\n')\n + '\\n'\n + getCanonicalizedAzureHeaders(headers)\n + getCanonicalizedAzureResource(account, pathname, query);\n const hmac = hmacSha256();\n hmac.setKey(base64js.toByteArray(accountKey));\n hmac.update(encodeUtf8(stringToSign));\n const signature = base64js.fromByteArray(new Uint8Array(hmac.finalize()));\n return `SharedKey ${account}:${signature}`;\n}\n","import type { Options } from '../types';\n\n/**\n * Resolve the Azure Blob Storage host. An explicit endpoint wins (for\n * proxies or Azurite); otherwise the classic\n * `<account>.blob.core.windows.net` host. The account name doubles as\n * the access key ID.\n */\nexport function resolveAzureHost(options: Options): string {\n const { accessKeyId, endpoint } = options;\n if (endpoint) return endpoint;\n return `${accessKeyId}.blob.core.windows.net`;\n}\n\n/**\n * URI-escape an object name for the request path, keeping '/'\n * (mirrors the OBS and S3 path escaping). The same escaped pathname is\n * used in the request URL and the canonicalized resource, as Azure\n * requires the URI-encoded form.\n */\nexport function azureEscapePath(objectName: string): string {\n return objectName.split('/').map(encodeURIComponent).join('/');\n}\n","import { getTransport } from '../transport';\nimport { normalizeOptions, resolveTimeout, dataSize } from '../ops/request';\nimport { getSharedKeyAuthorization } from './signature';\nimport { resolveAzureHost, azureEscapePath } from './host';\nimport type { Options } from '../types';\nimport type { RequestParams } from '../protocol';\n\n/**\n * Azure Blob Storage defaults: https, 60s timeout. There is no region\n * concept in the Blob service; the account name is the access key ID\n * and the account key (base64) is the secret.\n */\nconst AZURE_DEFAULTS = {\n secure: true,\n timeout: 60000,\n};\n\n/**\n * The Blob service API version pinned for requests and SAS signatures.\n * 2020-12-06 adds the encryption-scope field to the SAS StringToSign.\n */\nexport const AZURE_API_VERSION = '2020-12-06';\n\n/**\n * Sign and send a single Azure Blob request through the configured\n * transport. Every request carries x-ms-date and x-ms-version; the\n * SharedKey Authorization covers the canonicalized x-ms-* headers, the\n * canonicalized resource (path + sorted query) and the Content-MD5 /\n * Content-Type / Content-Length fields. PUT requests that are not\n * block operations create a block blob, so x-ms-blob-type is added.\n */\nexport function request(options: Options, params: RequestParams): Promise<any> {\n const opts = normalizeOptions(options, AZURE_DEFAULTS);\n const { accessKeyId, accessKeySecret, bucket, secure } = opts;\n const headers: Record<string, any> = {\n 'x-ms-date': new Date().toUTCString(),\n 'x-ms-version': AZURE_API_VERSION,\n ...params.headers,\n };\n // Put Blob needs an explicit blob type; block operations (Put Block /\n // Put Block List) address ?comp= and must not carry it.\n if (params.verb === 'PUT' && !params.subResource) {\n headers['x-ms-blob-type'] = 'BlockBlob';\n }\n const pathname = `/${bucket}/${azureEscapePath(params.objectName)}`;\n const authorization = getSharedKeyAuthorization({\n verb: params.verb,\n headers,\n pathname,\n query: params.subResource,\n account: accessKeyId as string,\n accountKey: accessKeySecret as string,\n contentMd5: params.contentMd5,\n contentType: params.headers ? params.headers['Content-Type'] : undefined,\n contentLength: dataSize(params.data),\n });\n headers.Authorization = authorization;\n const protocol = secure ? 'https' : 'http';\n let url = `${protocol}://${resolveAzureHost(opts)}${pathname}`;\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 base64js from 'base64-js';\nimport { hmacSha256 } from '../aws/sha256';\nimport { encodeUtf8 } from '../utils';\nimport { normalizeOptions } from '../ops/request';\nimport { resolveAzureHost, azureEscapePath } from './host';\nimport { AZURE_API_VERSION } from './request';\nimport type { Options, SignatureUrlOptions } from '../types';\n\n/** Azure defaults: https, 60s timeout. */\nconst AZURE_DEFAULTS = {\n secure: true,\n timeout: 60000,\n};\n\n/** ISO 8061 without milliseconds, as the official SDK truncates it. */\nfunction truncatedIso(date: Date): string {\n const s = date.toISOString();\n return s.substring(0, s.length - 5) + 'Z';\n}\n\n/**\n * Get a signed URL for an Azure blob (service SAS, version\n * 2020-12-06), mirroring @azure/storage-blob's\n * generateBlobSASQueryParameters byte for byte:\n *\n * https://<account>.blob.core.windows.net/<container>/<blob>\n * ?sv=2020-12-06&se=<ISO 8061>&sr=b&sp=<permission>&sig=<base64>\n * [&rscc=<content-type>...]\n *\n * The string-to-sign fields must be URL-decoded; the canonical name is\n * \"/blob/<account>/<container>/<blob>\" with the un-encoded blob name.\n * The start time is omitted so the SAS is valid immediately.\n *\n * @param options client options (accessKeyId = account name,\n * accessKeySecret = base64 account key, bucket = container)\n * @param objectName blob name\n * @param urlOptions signature options, same shape as the OSS entry\n * @return SAS URL\n */\nexport function azureSignUrl(\n options: Options,\n objectName: string,\n urlOptions: SignatureUrlOptions = {}\n): string {\n const { expires = 1800, method, response } = urlOptions;\n const opts = normalizeOptions(options, AZURE_DEFAULTS);\n const { accessKeyId, accessKeySecret, bucket, secure } = opts;\n const account = accessKeyId as string;\n // GET/HEAD read; PUT writes. Azure has no separate upload-URL verb.\n const sp = method === 'PUT' ? 'w' : 'r';\n const se = truncatedIso(new Date(Date.now() + expires * 1000));\n const sr = 'b';\n const canonicalName = `/blob/${account}/${bucket}${objectName ? `/${objectName}` : ''}`;\n // Response-header overrides: rscc=cache-control, rscd=content-disposition,\n // rsce=content-encoding, rscl=content-language, rsct=content-type.\n const rscc = (response && response['cache-control']) || '';\n const rscd = (response && response['content-disposition']) || '';\n const rsce = (response && response['content-encoding']) || '';\n const rscl = (response && response['content-language']) || '';\n const rsct = (response && response['content-type']) || '';\n // Field order (version 2020-12-06): permissions, start, expiry,\n // canonical resource, identifier, IP, protocol, version, resource,\n // snapshot time, encryption scope, then the five response-header\n // overrides (rscc, rscd, rsce, rscl, rsct).\n const stringToSign = [sp, '', se, canonicalName, '', '', '', AZURE_API_VERSION, sr, '', '', rscc, rscd, rsce, rscl, rsct].join('\\n');\n const hmac = hmacSha256();\n hmac.setKey(base64js.toByteArray(accessKeySecret as string));\n hmac.update(encodeUtf8(stringToSign));\n const sig = base64js.fromByteArray(new Uint8Array(hmac.finalize()));\n const queries: Array<[string, string]> = [];\n const push = (name: string, value: string) => {\n if (value) queries.push([name, value]);\n };\n push('sv', AZURE_API_VERSION);\n push('se', se);\n push('sr', sr);\n push('sp', sp);\n push('rscc', rscc);\n push('rscd', rscd);\n push('rsce', rsce);\n push('rscl', rscl);\n push('rsct', rsct);\n push('sig', sig);\n const qs = queries.map(([name, value]) => `${name}=${encodeURIComponent(value)}`).join('&');\n const protocol = secure ? 'https' : 'http';\n const pathname = `/${bucket}/${azureEscapePath(objectName)}`;\n return `${protocol}://${resolveAzureHost(opts)}${pathname}?${qs}`;\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","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 base64js from 'base64-js';\nimport { blobToBuffer, getContentMd5, encodeUtf8 } from '../utils';\nimport { request as azureRequest } from './request';\nimport type { BlobLike, CompleteMultipartUploadResult, InitMultipartUploadResult, MultipartOptions, Options, PartInfo, UploadPartResult } from '../types';\n\n/**\n * Azure Block Blob multipart primitives. Azure has no server-side\n * upload session: the \"upload id\" is a client-generated label (kept so\n * the shared multipartUpload orchestrator can checkpoint it), each part\n * is a Put Block (?comp=block&blockid=<base64 id>) and completion is a\n * single Put Block List (?comp=blocklist) carrying the ordered block\n * ids as XML. No ETags are needed for the block list, so the part id\n * itself is returned as the \"etag\".\n */\n\n/** Fixed-width decimal part label, base64-encoded as the block id. */\nfunction blockIdFor(partNo: number): string {\n const label = String(partNo).padStart(5, '0');\n return base64js.fromByteArray(encodeUtf8(label));\n}\n\n/** A local upload id, meaningful only for checkpointing. */\nfunction localUploadId(): string {\n return `az-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 10)}`;\n}\n\n/**\n * Meta headers passed to initMultipartUpload are held per upload id and\n * merged into the final Put Block List, which is where Azure applies\n * blob metadata (there is no init request to carry them).\n */\nconst pendingMeta = new Map<string, Record<string, any>>();\n\nexport function initMultipartUpload(\n options: Options,\n objectName: string,\n multipartOptions: MultipartOptions = {}\n): Promise<InitMultipartUploadResult> {\n // Block blobs need no initiation request; the id is a client label.\n void options;\n const uploadId = localUploadId();\n if (multipartOptions.headers) pendingMeta.set(uploadId, multipartOptions.headers);\n return Promise.resolve({ name: objectName, uploadId });\n}\n\nexport 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 void uploadId;\n const partData = ArrayBuffer.isView(data) && !(data instanceof DataView)\n ? data.subarray(start, end)\n : data.slice(start, end);\n return blobToBuffer(partData).then((buf) => {\n const blockId = blockIdFor(partNo);\n const headers: Record<string, any> = {\n 'Content-Md5': getContentMd5(buf),\n ...multipartOptions.headers,\n };\n return azureRequest(options, {\n verb: 'PUT',\n objectName,\n contentMd5: headers['Content-Md5'],\n headers,\n subResource: { comp: 'block', blockid: blockId },\n data: partData,\n timeout: multipartOptions.timeout,\n }).then(() => {\n return {\n name: objectName,\n etag: blockId,\n res: undefined,\n };\n });\n });\n}\n\nexport function completeMultipartUpload(\n options: Options,\n objectName: string,\n uploadId: string,\n parts: PartInfo[],\n multipartOptions: MultipartOptions = {}\n): Promise<CompleteMultipartUploadResult> {\n const metaHeaders = pendingMeta.get(uploadId);\n pendingMeta.delete(uploadId);\n const ordered = [...parts].sort((a, b) => a.number - b.number);\n const body = '<?xml version=\"1.0\" encoding=\"utf-8\"?>'\n + '<BlockList>'\n + ordered.map((p) => `<Latest>${p.etag}</Latest>`).join('')\n + '</BlockList>';\n return azureRequest(options, {\n verb: 'PUT',\n objectName,\n headers: { ...metaHeaders, ...multipartOptions.headers },\n subResource: { comp: 'blocklist' },\n data: body,\n timeout: multipartOptions.timeout,\n }).then((res: any) => ({\n name: objectName,\n etag: (res && res.headers && res.headers.etag) || '',\n res: res ? res.data : undefined,\n }));\n}\n\n/** Export the three primitives in the shape the shared orchestrator expects. */\nexport function azureMultipartDeps() {\n return { initMultipartUpload, uploadPart, completeMultipartUpload };\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 azureRequest } from './request';\nimport { azureSignUrl } from './signatureUrl';\nimport { createPut } from '../ops/put';\nimport { createMultipartUpload } from '../ops/multipartUpload';\nimport { initMultipartUpload, uploadPart, completeMultipartUpload } from './multipart';\n\n/**\n * The Azure Blob Storage protocol (SharedKey authorization, service\n * SAS signed URLs). This entry point never references the OSS, COS,\n * OBS or AWS signers, so bundlers tree-shake them away.\n *\n * Azure has no S3-style multipart sessions, so abortMultipartUpload,\n * listParts, listUploads and uploadPartCopy are intentionally absent\n * (block blobs commit a block list instead). putSymlink is absent too.\n */\nconst AZURE_PROTOCOL: Protocol = {\n request: azureRequest,\n metaPrefix: 'x-ms-meta-',\n copySourceHeader: 'x-ms-copy-source',\n copySourceRangeHeader: 'x-ms-copy-source-range',\n listUploadsMarkerKey: 'marker',\n supportsSymlink: false,\n signUrl: azureSignUrl,\n};\n\nconst put = createPut(AZURE_PROTOCOL);\nconst multipartUpload = createMultipartUpload(AZURE_PROTOCOL, {\n initMultipartUpload,\n uploadPart,\n completeMultipartUpload,\n});\nconst signatureUrl = AZURE_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 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","fromASCII","buffer","fromInteger","v","convertToUint8Array","input","createDigest","Constructor","update","offset","copyLen","tmpInput","finalize","padding","engine","createHMAC","digest","initialized","ipad","opad","init","kbuf","resetMac","finalizeMac","finalResult","setKeyMac","k","keyInput","fallbackEncodeUtf8","next","encoder","encodeUtf8","blobToBuffer","blob","buf","assertOptions","accessKeyId","accessKeySecret","bucket","endpoint","hexToBuffer","getContentMd5","md5Buf","base64js","DEFAULT_OPTIONS","normalizeOptions","defaults","resolveTimeout","fallback","dataSize","SHA256Engine","e","f","g","h","W","w15","w2","s0","s1","S1","ch","t1","SHA256_K","S0","maj","t2","datalen","msw","lsw","zeros","pad","rv","o","hmacSha256","decodeQueryValue","getCanonicalizedAzureHeaders","names","name","original","comparePairs","getCanonicalizedAzureResource","account","pathname","query","pairs","raw","decoded","getSharedKeyAuthorization","verb","accountKey","contentMd5","contentType","contentLength","stringToSign","hmac","signature","resolveAzureHost","azureEscapePath","objectName","AZURE_DEFAULTS","AZURE_API_VERSION","request","params","opts","secure","__spreadValues","authorization","qs","truncatedIso","date","azureSignUrl","urlOptions","expires","response","sp","se","sr","canonicalName","rscc","rscd","rsce","rscl","rsct","sig","queries","push","protocol","createPut","putOptions","getFileSize","createMultipartUpload","deps","_0","_1","_2","__async","file","multipartOptions","parallel","partSize","checkpoint","progress","meta","mime","uploadId","doneParts","actualPartSize","fileSize","initHeaders","numParts","currentCheckpoint","p","uploadPartWithRetry","partNo","uploadOnce","percentage","pendingParts","dp","uploadTasks","executing","part","task","index","completeParts","self","blockIdFor","label","localUploadId","pendingMeta","initMultipartUpload","uploadPart","partData","blockId","azureRequest","completeMultipartUpload","metaHeaders","body","res","fetchTransport","total","controller","timer","text","wxRequestTransport","bindOptions","operation","args","AZURE_PROTOCOL","put","multipartUpload","signatureUrl"],"mappings":"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","x_google_ignoreList":[1,2,3,4,5]}