UNPKG

ali-oss

Version:

aliyun oss(object storage service) node client

1,320 lines (1,271 loc) 1.53 MB
// Aliyun OSS SDK for JavaScript v6.23.0 // Copyright Aliyun.com, Inc. or its affiliates. All Rights Reserved. // License at https://github.com/ali-sdk/ali-oss/blob/master/LICENSE (function(global){(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.OSS = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){ "use strict"; var OSS = require('./browser/client'); OSS.Buffer = require('buffer').Buffer; OSS.urllib = require('../shims/xhr'); OSS.version = require('./browser/version').version; module.exports = OSS; },{"../shims/xhr":546,"./browser/client":3,"./browser/version":6,"buffer":103}],2:[function(require,module,exports){ "use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator")); var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); require("core-js/modules/es.object.to-string.js"); require("core-js/modules/es.regexp.to-string.js"); require("core-js/modules/web.dom-collections.for-each.js"); require("core-js/modules/es.object.keys.js"); require("core-js/modules/es.array.slice.js"); var assert = require('assert'); var _require = require('../common/utils/checkBucketName'), _checkBucketName = _require.checkBucketName; var proto = exports; function isArray(arr) { if (Array.isArray) return Array.isArray(arr); return Object.prototype.toString.call(arr) === '[object Array]'; } function toArray(obj) { if (!obj) return []; if (isArray(obj)) return obj; return [obj]; } /** * Bucket opertaions */ // TODO: OSS server currently do not support CORS requests for bucket operations // proto.listBuckets = function* listBuckets(query, options) { // // prefix, marker, max-keys // var result = yield this.request({ // method: 'GET', // query: query, // timeout: options && options.timeout, // ctx: options && options.ctx, // }); // // if (result.status === 200) { // var data = yield this.parseXML(result.data); // var buckets = data.Buckets || null; // if (buckets) { // if (buckets.Bucket) { // buckets = buckets.Bucket; // } // if (!isArray(buckets)) { // buckets = [buckets]; // } // buckets = buckets.map(function (item) { // return { // name: item.Name, // region: item.Location, // creationDate: item.CreationDate, // }; // }); // } // return { // buckets: buckets, // owner: { // id: data.Owner.ID, // displayName: data.Owner.DisplayName, // }, // isTruncated: data.IsTruncated === 'true', // nextMarker: data.NextMarker || null, // res: result.res // }; // } // // throw yield this.requestError(result); // }; proto.useBucket = function useBucket(name) { _checkBucketName(name); this.options.bucket = name; return this; }; proto.setBucket = function useBucket(name) { _checkBucketName(name); this.options.bucket = name; return this; }; proto.getBucket = function getBucket() { return this.options.bucket; }; proto.deleteBucket = /*#__PURE__*/function () { var _deleteBucket = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(name, options) { var params, result; return _regenerator.default.wrap(function _callee$(_context) { while (1) switch (_context.prev = _context.next) { case 0: params = this._bucketRequestParams('DELETE', name, '', options); _context.next = 3; return this.request(params); case 3: result = _context.sent; if (!(result.status === 200 || result.status === 204)) { _context.next = 6; break; } return _context.abrupt("return", { res: result.res }); case 6: _context.next = 8; return this.requestError(result); case 8: throw _context.sent; case 9: case "end": return _context.stop(); } }, _callee, this); })); function deleteBucket(_x, _x2) { return _deleteBucket.apply(this, arguments); } return deleteBucket; }(); // acl proto.putBucketACL = /*#__PURE__*/function () { var _putBucketACL = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(name, acl, options) { var params, result; return _regenerator.default.wrap(function _callee2$(_context2) { while (1) switch (_context2.prev = _context2.next) { case 0: params = this._bucketRequestParams('PUT', name, 'acl', options); params.headers = { 'x-oss-acl': acl }; params.successStatuses = [200]; _context2.next = 5; return this.request(params); case 5: result = _context2.sent; return _context2.abrupt("return", { bucket: result.headers.location && result.headers.location.substring(1) || null, res: result.res }); case 7: case "end": return _context2.stop(); } }, _callee2, this); })); function putBucketACL(_x3, _x4, _x5) { return _putBucketACL.apply(this, arguments); } return putBucketACL; }(); proto.getBucketACL = /*#__PURE__*/function () { var _getBucketACL = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(name, options) { var params, result; return _regenerator.default.wrap(function _callee3$(_context3) { while (1) switch (_context3.prev = _context3.next) { case 0: params = this._bucketRequestParams('GET', name, 'acl', options); params.successStatuses = [200]; params.xmlResponse = true; _context3.next = 5; return this.request(params); case 5: result = _context3.sent; return _context3.abrupt("return", { acl: result.data.AccessControlList.Grant, owner: { id: result.data.Owner.ID, displayName: result.data.Owner.DisplayName }, res: result.res }); case 7: case "end": return _context3.stop(); } }, _callee3, this); })); function getBucketACL(_x6, _x7) { return _getBucketACL.apply(this, arguments); } return getBucketACL; }(); // logging proto.putBucketLogging = /*#__PURE__*/function () { var _putBucketLogging = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4(name, prefix, options) { var params, xml, result; return _regenerator.default.wrap(function _callee4$(_context4) { while (1) switch (_context4.prev = _context4.next) { case 0: params = this._bucketRequestParams('PUT', name, 'logging', options); xml = '<?xml version="1.0" encoding="UTF-8"?>\n<BucketLoggingStatus>\n<LoggingEnabled>\n<TargetBucket>'.concat(name, "</TargetBucket>\n"); if (prefix) { xml += "<TargetPrefix>".concat(prefix, "</TargetPrefix>\n"); } xml += '</LoggingEnabled>\n</BucketLoggingStatus>'; params.content = xml; params.mime = 'xml'; params.successStatuses = [200]; _context4.next = 9; return this.request(params); case 9: result = _context4.sent; return _context4.abrupt("return", { res: result.res }); case 11: case "end": return _context4.stop(); } }, _callee4, this); })); function putBucketLogging(_x8, _x9, _x10) { return _putBucketLogging.apply(this, arguments); } return putBucketLogging; }(); proto.getBucketLogging = /*#__PURE__*/function () { var _getBucketLogging = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5(name, options) { var params, result, enable; return _regenerator.default.wrap(function _callee5$(_context5) { while (1) switch (_context5.prev = _context5.next) { case 0: params = this._bucketRequestParams('GET', name, 'logging', options); params.successStatuses = [200]; params.xmlResponse = true; _context5.next = 5; return this.request(params); case 5: result = _context5.sent; enable = result.data.LoggingEnabled; return _context5.abrupt("return", { enable: !!enable, prefix: enable && enable.TargetPrefix || null, res: result.res }); case 8: case "end": return _context5.stop(); } }, _callee5, this); })); function getBucketLogging(_x11, _x12) { return _getBucketLogging.apply(this, arguments); } return getBucketLogging; }(); proto.deleteBucketLogging = /*#__PURE__*/function () { var _deleteBucketLogging = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee6(name, options) { var params, result; return _regenerator.default.wrap(function _callee6$(_context6) { while (1) switch (_context6.prev = _context6.next) { case 0: params = this._bucketRequestParams('DELETE', name, 'logging', options); params.successStatuses = [204, 200]; _context6.next = 4; return this.request(params); case 4: result = _context6.sent; return _context6.abrupt("return", { res: result.res }); case 6: case "end": return _context6.stop(); } }, _callee6, this); })); function deleteBucketLogging(_x13, _x14) { return _deleteBucketLogging.apply(this, arguments); } return deleteBucketLogging; }(); proto.putBucketCORS = /*#__PURE__*/function () { var _putBucketCORS = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee7(name, rules, options) { var params, xml, parseOrigin, parseMethod, parseHeader, parseExposeHeader, i, l, rule, result; return _regenerator.default.wrap(function _callee7$(_context7) { while (1) switch (_context7.prev = _context7.next) { case 0: rules = rules || []; assert(rules.length, 'rules is required'); rules.forEach(function (rule) { assert(rule.allowedOrigin, 'allowedOrigin is required'); assert(rule.allowedMethod, 'allowedMethod is required'); }); params = this._bucketRequestParams('PUT', name, 'cors', options); xml = '<?xml version="1.0" encoding="UTF-8"?>\n<CORSConfiguration>'; parseOrigin = function parseOrigin(val) { xml += "<AllowedOrigin>".concat(val, "</AllowedOrigin>"); }; parseMethod = function parseMethod(val) { xml += "<AllowedMethod>".concat(val, "</AllowedMethod>"); }; parseHeader = function parseHeader(val) { xml += "<AllowedHeader>".concat(val, "</AllowedHeader>"); }; parseExposeHeader = function parseExposeHeader(val) { xml += "<ExposeHeader>".concat(val, "</ExposeHeader>"); }; for (i = 0, l = rules.length; i < l; i++) { rule = rules[i]; xml += '<CORSRule>'; toArray(rule.allowedOrigin).forEach(parseOrigin); toArray(rule.allowedMethod).forEach(parseMethod); toArray(rule.allowedHeader).forEach(parseHeader); toArray(rule.exposeHeader).forEach(parseExposeHeader); if (rule.maxAgeSeconds) { xml += "<MaxAgeSeconds>".concat(rule.maxAgeSeconds, "</MaxAgeSeconds>"); } xml += '</CORSRule>'; } xml += '</CORSConfiguration>'; params.content = xml; params.mime = 'xml'; params.successStatuses = [200]; _context7.next = 16; return this.request(params); case 16: result = _context7.sent; return _context7.abrupt("return", { res: result.res }); case 18: case "end": return _context7.stop(); } }, _callee7, this); })); function putBucketCORS(_x15, _x16, _x17) { return _putBucketCORS.apply(this, arguments); } return putBucketCORS; }(); proto.getBucketCORS = /*#__PURE__*/function () { var _getBucketCORS = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee8(name, options) { var params, result, rules, CORSRule; return _regenerator.default.wrap(function _callee8$(_context8) { while (1) switch (_context8.prev = _context8.next) { case 0: params = this._bucketRequestParams('GET', name, 'cors', options); params.successStatuses = [200]; params.xmlResponse = true; _context8.next = 5; return this.request(params); case 5: result = _context8.sent; rules = []; if (result.data && result.data.CORSRule) { CORSRule = result.data.CORSRule; if (!isArray(CORSRule)) CORSRule = [CORSRule]; CORSRule.forEach(function (rule) { var r = {}; Object.keys(rule).forEach(function (key) { r[key.slice(0, 1).toLowerCase() + key.slice(1, key.length)] = rule[key]; }); rules.push(r); }); } return _context8.abrupt("return", { rules: rules, res: result.res }); case 9: case "end": return _context8.stop(); } }, _callee8, this); })); function getBucketCORS(_x18, _x19) { return _getBucketCORS.apply(this, arguments); } return getBucketCORS; }(); proto.deleteBucketCORS = /*#__PURE__*/function () { var _deleteBucketCORS = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee9(name, options) { var params, result; return _regenerator.default.wrap(function _callee9$(_context9) { while (1) switch (_context9.prev = _context9.next) { case 0: params = this._bucketRequestParams('DELETE', name, 'cors', options); params.successStatuses = [204]; _context9.next = 4; return this.request(params); case 4: result = _context9.sent; return _context9.abrupt("return", { res: result.res }); case 6: case "end": return _context9.stop(); } }, _callee9, this); })); function deleteBucketCORS(_x20, _x21) { return _deleteBucketCORS.apply(this, arguments); } return deleteBucketCORS; }(); // referer proto.putBucketReferer = /*#__PURE__*/function () { var _putBucketReferer = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee10(name, allowEmpty, referers, options) { var params, xml, i, result; return _regenerator.default.wrap(function _callee10$(_context10) { while (1) switch (_context10.prev = _context10.next) { case 0: params = this._bucketRequestParams('PUT', name, 'referer', options); xml = '<?xml version="1.0" encoding="UTF-8"?>\n<RefererConfiguration>\n'; xml += " <AllowEmptyReferer>".concat(allowEmpty ? 'true' : 'false', "</AllowEmptyReferer>\n"); if (referers && referers.length > 0) { xml += ' <RefererList>\n'; for (i = 0; i < referers.length; i++) { xml += " <Referer>".concat(referers[i], "</Referer>\n"); } xml += ' </RefererList>\n'; } else { xml += ' <RefererList />\n'; } xml += '</RefererConfiguration>'; params.content = xml; params.mime = 'xml'; params.successStatuses = [200]; _context10.next = 10; return this.request(params); case 10: result = _context10.sent; return _context10.abrupt("return", { res: result.res }); case 12: case "end": return _context10.stop(); } }, _callee10, this); })); function putBucketReferer(_x22, _x23, _x24, _x25) { return _putBucketReferer.apply(this, arguments); } return putBucketReferer; }(); proto.getBucketReferer = /*#__PURE__*/function () { var _getBucketReferer = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee11(name, options) { var params, result, referers; return _regenerator.default.wrap(function _callee11$(_context11) { while (1) switch (_context11.prev = _context11.next) { case 0: params = this._bucketRequestParams('GET', name, 'referer', options); params.successStatuses = [200]; params.xmlResponse = true; _context11.next = 5; return this.request(params); case 5: result = _context11.sent; referers = result.data.RefererList.Referer || null; if (referers) { if (!isArray(referers)) { referers = [referers]; } } return _context11.abrupt("return", { allowEmpty: result.data.AllowEmptyReferer === 'true', referers: referers, res: result.res }); case 9: case "end": return _context11.stop(); } }, _callee11, this); })); function getBucketReferer(_x26, _x27) { return _getBucketReferer.apply(this, arguments); } return getBucketReferer; }(); proto.deleteBucketReferer = /*#__PURE__*/function () { var _deleteBucketReferer = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee12(name, options) { return _regenerator.default.wrap(function _callee12$(_context12) { while (1) switch (_context12.prev = _context12.next) { case 0: _context12.next = 2; return this.putBucketReferer(name, true, null, options); case 2: return _context12.abrupt("return", _context12.sent); case 3: case "end": return _context12.stop(); } }, _callee12, this); })); function deleteBucketReferer(_x28, _x29) { return _deleteBucketReferer.apply(this, arguments); } return deleteBucketReferer; }(); // private apis proto._bucketRequestParams = function _bucketRequestParams(method, bucket, subres, options) { return { method: method, bucket: bucket, subres: subres, additionalHeaders: options && options.additionalHeaders, timeout: options && options.timeout, ctx: options && options.ctx }; }; },{"../common/utils/checkBucketName":53,"@babel/runtime/helpers/asyncToGenerator":85,"@babel/runtime/helpers/interopRequireDefault":86,"@babel/runtime/regenerator":93,"assert":95,"core-js/modules/es.array.slice.js":319,"core-js/modules/es.object.keys.js":328,"core-js/modules/es.object.to-string.js":329,"core-js/modules/es.regexp.to-string.js":339,"core-js/modules/web.dom-collections.for-each.js":380}],3:[function(require,module,exports){ (function (Buffer,process){(function (){ "use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator")); var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); require("core-js/modules/es.function.name.js"); require("core-js/modules/es.object.assign.js"); require("core-js/modules/es.array.includes.js"); require("core-js/modules/es.regexp.exec.js"); require("core-js/modules/es.string.replace.js"); require("core-js/modules/es.array.concat.js"); require("core-js/modules/es.symbol.js"); require("core-js/modules/es.symbol.description.js"); require("core-js/modules/es.array.slice.js"); require("core-js/modules/es.object.to-string.js"); require("core-js/modules/es.promise.js"); require("core-js/modules/es.regexp.to-string.js"); var debug = require('debug')('ali-oss'); var xml = require('xml2js'); var AgentKeepalive = require('agentkeepalive'); var merge = require('merge-descriptors'); var platform = require('platform'); var utility = require('utility'); var urllib = require('urllib'); var pkg = require('./version'); var bowser = require('bowser'); var signUtils = require('../common/signUtils'); var _initOptions = require('../common/client/initOptions'); var _require = require('../common/utils/createRequest'), createRequest = _require.createRequest; var _require2 = require('../common/utils/encoder'), encoder = _require2.encoder; var _require3 = require('../common/client/getReqUrl'), getReqUrl = _require3.getReqUrl; var _require4 = require('../common/utils/setSTSToken'), setSTSToken = _require4.setSTSToken; var _require5 = require('../common/utils/retry'), retry = _require5.retry; var _require6 = require('../common/utils/isFunction'), isFunction = _require6.isFunction; var _require7 = require('../common/utils/getStandardRegion'), getStandardRegion = _require7.getStandardRegion; var globalHttpAgent = new AgentKeepalive(); function _unSupportBrowserTip() { var name = platform.name, version = platform.version; if (name && name.toLowerCase && name.toLowerCase() === 'ie' && version.split('.')[0] < 10) { // eslint-disable-next-line no-console console.warn('ali-oss does not support the current browser'); } } // check local web protocol,if https secure default set true , if http secure default set false function isHttpsWebProtocol() { // for web worker not use window.location. // eslint-disable-next-line no-restricted-globals return location && location.protocol === 'https:'; } function Client(options, ctx) { _unSupportBrowserTip(); if (!(this instanceof Client)) { return new Client(options, ctx); } if (options && options.inited) { this.options = options; } else { this.options = Client.initOptions(options); } this.options.cancelFlag = false; // cancel flag: if true need to be cancelled, default false // support custom agent and urllib client if (this.options.urllib) { this.urllib = this.options.urllib; } else { this.urllib = urllib; this.agent = this.options.agent || globalHttpAgent; } this.ctx = ctx; this.userAgent = this._getUserAgent(); this.stsTokenFreshTime = new Date(); // record the time difference between client and server this.options.amendTimeSkewed = 0; } /** * Expose `Client` */ module.exports = Client; Client.initOptions = function initOptions(options) { if (!options.stsToken) { console.warn('Please use STS Token for safety, see more details at https://help.aliyun.com/document_detail/32077.html'); } var opts = Object.assign({ secure: isHttpsWebProtocol(), // for browser compatibility disable fetch. useFetch: false }, options); return _initOptions(opts); }; /** * prototype */ var proto = Client.prototype; // mount debug on proto proto.debug = debug; /** * Object operations */ merge(proto, require('./object')); /** * Bucket operations */ merge(proto, require('./bucket')); merge(proto, require('../common/bucket/getBucketWebsite')); merge(proto, require('../common/bucket/putBucketWebsite')); merge(proto, require('../common/bucket/deleteBucketWebsite')); // lifecycle merge(proto, require('../common/bucket/getBucketLifecycle')); merge(proto, require('../common/bucket/putBucketLifecycle')); merge(proto, require('../common/bucket/deleteBucketLifecycle')); // multiversion merge(proto, require('../common/bucket/putBucketVersioning')); merge(proto, require('../common/bucket/getBucketVersioning')); // inventory merge(proto, require('../common/bucket/getBucketInventory')); merge(proto, require('../common/bucket/deleteBucketInventory')); merge(proto, require('../common/bucket/listBucketInventory')); merge(proto, require('../common/bucket/putBucketInventory')); // worm merge(proto, require('../common/bucket/abortBucketWorm')); merge(proto, require('../common/bucket/completeBucketWorm')); merge(proto, require('../common/bucket/extendBucketWorm')); merge(proto, require('../common/bucket/getBucketWorm')); merge(proto, require('../common/bucket/initiateBucketWorm')); // multipart upload merge(proto, require('./managed-upload')); /** * common multipart-copy support node and browser */ merge(proto, require('../common/multipart-copy')); /** * Multipart operations */ merge(proto, require('../common/multipart')); /** * Common module parallel */ merge(proto, require('../common/parallel')); /** * get OSS signature * @param {String} stringToSign * @return {String} the signature */ proto.signature = function signature(stringToSign) { this.debug('authorization stringToSign: %s', stringToSign, 'info'); return signUtils.computeSignature(this.options.accessKeySecret, stringToSign, this.options.headerEncoding); }; proto._getReqUrl = getReqUrl; /** * get author header * * "Authorization: OSS " + Access Key Id + ":" + Signature * * Signature = base64(hmac-sha1(Access Key Secret + "\n" * + VERB + "\n" * + CONTENT-MD5 + "\n" * + CONTENT-TYPE + "\n" * + DATE + "\n" * + CanonicalizedOSSHeaders * + CanonicalizedResource)) * * @param {String} method * @param {String} resource * @param {Object} header * @return {String} * * @api private */ proto.authorization = function authorization(method, resource, subres, headers) { var stringToSign = signUtils.buildCanonicalString(method.toUpperCase(), resource, { headers: headers, parameters: subres }); return signUtils.authorization(this.options.accessKeyId, this.options.accessKeySecret, stringToSign, this.options.headerEncoding); }; /** * get authorization header v4 * * @param {string} method * @param {Object} requestParams * @param {Object} requestParams.headers * @param {(string|string[]|Object)} [requestParams.queries] * @param {string} [bucketName] * @param {string} [objectName] * @param {string[]} [additionalHeaders] * @return {string} * * @api private */ proto.authorizationV4 = function authorizationV4(method, requestParams, bucketName, objectName, additionalHeaders) { return signUtils.authorizationV4(this.options.accessKeyId, this.options.accessKeySecret, getStandardRegion(this.options.region), method, requestParams, bucketName, objectName, additionalHeaders, this.options.headerEncoding); }; /** * request oss server * @param {Object} params * - {String} object * - {String} bucket * - {Object} [headers] * - {Object} [query] * - {Buffer} [content] * - {Stream} [stream] * - {Stream} [writeStream] * - {String} [mime] * - {Boolean} [xmlResponse] * - {Boolean} [customResponse] * - {Number} [timeout] * - {Object} [ctx] request context, default is `this.ctx` * * @api private */ proto.request = /*#__PURE__*/function () { var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(params) { var _this = this; return _regenerator.default.wrap(function _callee$(_context) { while (1) switch (_context.prev = _context.next) { case 0: if (!this.options.retryMax) { _context.next = 6; break; } _context.next = 3; return retry(request.bind(this), this.options.retryMax, { errorHandler: function errorHandler(err) { var _errHandle = function _errHandle(_err) { if (params.stream) return false; var statusErr = [-1, -2].includes(_err.status); var requestErrorRetryHandle = _this.options.requestErrorRetryHandle || function () { return true; }; return statusErr && requestErrorRetryHandle(_err); }; if (_errHandle(err)) return true; return false; } })(params); case 3: return _context.abrupt("return", _context.sent); case 6: return _context.abrupt("return", request.call(this, params)); case 7: case "end": return _context.stop(); } }, _callee, this); })); return function (_x) { return _ref.apply(this, arguments); }; }(); function request(_x2) { return _request.apply(this, arguments); } function _request() { _request = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4(params) { var reqParams, result, reqErr, useStream, err, parseData; return _regenerator.default.wrap(function _callee4$(_context4) { while (1) switch (_context4.prev = _context4.next) { case 0: if (!(this.options.stsToken && isFunction(this.options.refreshSTSToken))) { _context4.next = 3; break; } _context4.next = 3; return setSTSToken.call(this); case 3: reqParams = createRequest.call(this, params); if (!this.options.useFetch) { reqParams.params.mode = 'disable-fetch'; } useStream = !!params.stream; _context4.prev = 6; _context4.next = 9; return this.urllib.request(reqParams.url, reqParams.params); case 9: result = _context4.sent; this.debug('response %s %s, got %s, headers: %j', params.method, reqParams.url, result.status, result.headers, 'info'); _context4.next = 16; break; case 13: _context4.prev = 13; _context4.t0 = _context4["catch"](6); reqErr = _context4.t0; case 16: if (!(result && params.successStatuses && params.successStatuses.indexOf(result.status) === -1)) { _context4.next = 28; break; } _context4.next = 19; return this.requestError(result); case 19: err = _context4.sent; if (!(err.code === 'RequestTimeTooSkewed' && !useStream)) { _context4.next = 25; break; } this.options.amendTimeSkewed = +new Date(err.serverTime) - new Date(); _context4.next = 24; return this.request(params); case 24: return _context4.abrupt("return", _context4.sent); case 25: err.params = params; _context4.next = 32; break; case 28: if (!reqErr) { _context4.next = 32; break; } _context4.next = 31; return this.requestError(reqErr); case 31: err = _context4.sent; case 32: if (!err) { _context4.next = 34; break; } throw err; case 34: if (!params.xmlResponse) { _context4.next = 39; break; } _context4.next = 37; return this.parseXML(result.data); case 37: parseData = _context4.sent; result.data = parseData; case 39: return _context4.abrupt("return", result); case 40: case "end": return _context4.stop(); } }, _callee4, this, [[6, 13]]); })); return _request.apply(this, arguments); } proto._getResource = function _getResource(params) { var resource = '/'; if (params.bucket) resource += "".concat(params.bucket, "/"); if (params.object) resource += encoder(params.object, this.options.headerEncoding); return resource; }; proto._escape = function _escape(name) { return utility.encodeURIComponent(name).replace(/%2F/g, '/'); }; /* * Get User-Agent for browser & node.js * @example * aliyun-sdk-nodejs/4.1.2 Node.js 5.3.0 on Darwin 64-bit * aliyun-sdk-js/4.1.2 Safari 9.0 on Apple iPhone(iOS 9.2.1) * aliyun-sdk-js/4.1.2 Chrome 43.0.2357.134 32-bit on Windows Server 2008 R2 / 7 64-bit */ proto._getUserAgent = function _getUserAgent() { var agent = process && process.browser ? 'js' : 'nodejs'; var sdk = "aliyun-sdk-".concat(agent, "/").concat(pkg.version); var plat = platform.description; if (!plat && process) { plat = "Node.js ".concat(process.version.slice(1), " on ").concat(process.platform, " ").concat(process.arch); } return this._checkUserAgent("".concat(sdk, " ").concat(plat)); }; proto._checkUserAgent = function _checkUserAgent(ua) { var userAgent = ua.replace(/\u03b1/, 'alpha').replace(/\u03b2/, 'beta'); return userAgent; }; /* * Check Browser And Version * @param {String} [name] browser name: like IE, Chrome, Firefox * @param {String} [version] browser major version: like 10(IE 10.x), 55(Chrome 55.x), 50(Firefox 50.x) * @return {Bool} true or false * @api private */ proto.checkBrowserAndVersion = function checkBrowserAndVersion(name, version) { return bowser.name === name && bowser.version.split('.')[0] === version; }; /** * thunkify xml.parseString * @param {String|Buffer} str * * @api private */ proto.parseXML = function parseXMLThunk(str) { return new Promise(function (resolve, reject) { if (Buffer.isBuffer(str)) { str = str.toString(); } xml.parseString(str, { explicitRoot: false, explicitArray: false }, function (err, result) { if (err) { reject(err); } else { resolve(result); } }); }); }; /** * generater a request error with request response * @param {Object} result * * @api private */ proto.requestError = /*#__PURE__*/function () { var _requestError = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(result) { var _this2 = this; var err, setError, ossErr, message, _message; return _regenerator.default.wrap(function _callee3$(_context3) { while (1) switch (_context3.prev = _context3.next) { case 0: err = null; setError = /*#__PURE__*/function () { var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(message) { var info, msg; return _regenerator.default.wrap(function _callee2$(_context2) { while (1) switch (_context2.prev = _context2.next) { case 0: _context2.prev = 0; _context2.next = 3; return _this2.parseXML(message); case 3: _context2.t0 = _context2.sent; if (_context2.t0) { _context2.next = 6; break; } _context2.t0 = {}; case 6: info = _context2.t0; _context2.next = 16; break; case 9: _context2.prev = 9; _context2.t1 = _context2["catch"](0); _this2.debug(message, 'error'); _context2.t1.message += "\nraw xml: ".concat(message); _context2.t1.status = result.status; _context2.t1.requestId = result.headers && result.headers['x-oss-request-id']; return _context2.abrupt("return", _context2.t1); case 16: msg = info.Message || "unknow request error, status: ".concat(result.status); if (info.Condition) { msg += " (condition: ".concat(info.Condition, ")"); } err = new Error(msg); err.name = info.Code ? "".concat(info.Code, "Error") : 'UnknownError'; err.status = result.status; err.code = info.Code; err.ecCode = info.EC; err.requestId = info.RequestId; err.hostId = info.HostId; err.serverTime = info.ServerTime; return _context2.abrupt("return", err); case 27: case "end": return _context2.stop(); } }, _callee2, null, [[0, 9]]); })); return function setError(_x4) { return _ref2.apply(this, arguments); }; }(); if (!(!result.data || !result.data.length)) { _context3.next = 38; break; } if (!(result.status === -1 || result.status === -2)) { _context3.next = 10; break; } // -1 is net error , -2 is timeout err = new Error(result.message); err.name = result.name; err.status = result.status; err.code = result.name; _context3.next = 36; break; case 10: if (!(result.status === 404)) { _context3.next = 17; break; } err = new Error('Object not exists'); err.name = 'NoSuchKeyError'; err.status = 404; err.code = 'NoSuchKey'; _context3.next = 34; break; case 17: if (!(result.status === 412)) { _context3.next = 24; break; } err = new Error('Pre condition failed'); err.name = 'PreconditionFailedError'; err.status = 412; err.code = 'PreconditionFailed'; _context3.next = 34; break; case 24: err = new Error("Unknow error, status: ".concat(result.status)); err.name = 'UnknownError'; err.status = result.status; err.res = result; ossErr = result.headers && result.headers['x-oss-err']; if (!ossErr) { _context3.next = 34; break; } message = atob(ossErr); _context3.next = 33; return setError(message); case 33: err = _context3.sent; case 34: err.requestId = result.headers && result.headers['x-oss-request-id']; err.host = ''; case 36: _context3.next = 43; break; case 38: _message = String(result.data); this.debug('request response error data: %s', _message, 'error'); _context3.next = 42; return setError(_message); case 42: err = _context3.sent; case 43: this.debug('generate error %j', err, 'error'); return _context3.abrupt("return", err); case 45: case "end": return _context3.stop(); } }, _callee3, this); })); function requestError(_x3) { return _requestError.apply(this, arguments); } return requestError; }(); }).call(this)}).call(this,{"isBuffer":require("../../node_modules/is-buffer/index.js")},require('_process')) },{"../../node_modules/is-buffer/index.js":409,"../common/bucket/abortBucketWorm":7,"../common/bucket/completeBucketWorm":8,"../common/bucket/deleteBucketInventory":9,"../common/bucket/deleteBucketLifecycle":10,"../common/bucket/deleteBucketWebsite":11,"../common/bucket/extendBucketWorm":12,"../common/bucket/getBucketInventory":13,"../common/bucket/getBucketLifecycle":14,"../common/bucket/getBucketVersioning":15,"../common/bucket/getBucketWebsite":16,"../common/bucket/getBucketWorm":17,"../common/bucket/initiateBucketWorm":18,"../common/bucket/listBucketInventory":19,"../common/bucket/putBucketInventory":20,"../common/bucket/putBucketLifecycle":21,"../common/bucket/putBucketVersioning":22,"../common/bucket/putBucketWebsite":23,"../common/client/getReqUrl":25,"../common/client/initOptions":26,"../common/multipart":30,"../common/multipart-copy":29,"../common/parallel":51,"../common/signUtils":52,"../common/utils/createRequest":58,"../common/utils/encoder":62,"../common/utils/getStandardRegion":65,"../common/utils/isFunction":72,"../common/utils/retry":80,"../common/utils/setSTSToken":82,"./bucket":2,"./managed-upload":4,"./object":5,"./version":6,"@babel/runtime/helpers/asyncToGenerator":85,"@babel/runtime/helpers/interopRequireDefault":86,"@babel/runtime/regenerator":93,"_process":538,"agentkeepalive":94,"bowser":101,"core-js/modules/es.array.concat.js":310,"core-js/modules/es.array.includes.js":315,"core-js/modules/es.array.slice.js":319,"core-js/modules/es.function.name.js":322,"core-js/modules/es.object.assign.js":325,"core-js/modules/es.object.to-string.js":329,"core-js/modules/es.promise.js":333,"core-js/modules/es.regexp.exec.js":338,"core-js/modules/es.regexp.to-string.js":339,"core-js/modules/es.string.replace.js":345,"core-js/modules/es.symbol.description.js":351,"core-js/modules/es.symbol.js":354,"debug":536,"merge-descriptors":428,"platform":440,"urllib":546,"utility":545,"xml2js":496}],4:[function(require,module,exports){ (function (Buffer){(function (){ "use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator")); require("core-js/modules/es.function.name.js"); require("core-js/modules/es.object.to-string.js"); require("core-js/modules/es.promise.js"); require("core-js/modules/es.array.from.js"); require("core-js/modules/es.string.iterator.js"); require("core-js/modules/es.array.map.js"); require("core-js/modules/es.array.filter.js"); require("core-js/modules/es.array.find.js"); require("core-js/modules/es.array.concat.js"); require("core-js/modules/es.regexp.to-string.js"); require("core-js/modules/es.array.slice.js"); require("core-js/modules/es.array.iterator.js"); require("core-js/modules/es.array-buffer.slice.js"); require("core-js/modules/es.typed-array.uint8-array.js"); require("core-js/modules/es.typed-array.copy-within.js"); require("core-js/modules/es.typed-array.every.js"); require("core-js/modules/es.typed-array.fill.js"); require("core-js/modules/es.typed-array.filter.js"); require("core-js/modules/es.typed-array.find.js"); require("core-js/modules/es.typed-array.find-index.js"); require("core-js/modules/es.typed-array.for-each.js"); require("core-js/modules/es.typed-array.includes.js"); require("core-js/modules/es.typed-array.index-of.js"); require("core-js/modules/es.typed-array.iterator.js"); require("core-js/modules/es.typed-array.join.js"); require("core-js/modules/es.typed-array.last-index-of.js"); require("core-js/modules/es.typed-array.map.js"); require("core-js/modules/es.typed-array.reduce.js"); require("core-js/modules/es.typed-array.reduce-right.js"); require("core-js/modules/es.typed-array.reverse.js"); require("core-js/modules/es.typed-array.set.js"); require("core-js/modules/es.typed-array.slice.js"); require("core-js/modules/es.typed-array.some.js"); require("core-js/modules/es.typed-array.sort.js"); require("core-js/modules/es.typed-array.subarray.js"); require("core-js/modules/es.typed-array.to-locale-string.js"); require("core-js/modules/es.typed-array.to-string.js"); var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); // var debug = require('debug')('ali-oss:multipart'); var util = require('util'); var path = require('path'); var mime = require('mime'); var copy = require('copy-to'); var _require = require('../common/utils/isBlob'), isBlob = _require.isBlob; var _require2 = require('../common/utils/isFile'), isFile = _require2.isFile; var _require3 = require('../common/utils/isBuffer'), isBuffer = _require3.isBuffer; var proto = exports; /** * Multipart operations */ /** * Upload a file to OSS using multipart uploads * @param {String} name * @param {String|File|Buffer} file * @param {Object} options * {Object} [options.callback] The callback parameter is composed of a JSON string encoded in Base64 * {String} options.callback.url the OSS sends a callback request to this URL * {String} [options.callback.host] The host header value for initiating callback requests * {String} options.callback.body The value of the request body when a callback is initiated * {String} [options.callback.contentType] The Content-Type of the callback requests initiated * {Boolean} [options.callback.callbackSNI] Whether OSS sends SNI to the origin address specified by callbackUrl when a callback request is initiated from the client * {Object} [options.callback.customValue] Custom parameters are a map of key-values, e.g: * customValue = { * key1: 'value1', * key2: 'value2' * } */ proto.multipartUpload = /*#__PURE__*/function () { var _multipartUpload = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(name, file) { var options, minPartSize, fileSize, result, ret, initResult, uploadId, partSize, checkpoint, _args = arguments; return _regenerator.default.wrap(function _callee$(_context) { while (1) switch (_context.prev = _context.next) { case 0: options = _args.length > 2 && _args[2] !== undefined ? _args[2] : {}; this.resetCancelFlag(); options.disabledMD5 = options.disabledMD5 === undefined ? true : !!options.disabledMD5; if (!(options.checkpoint && options.checkpoint.uploadId)) { _context.next = 8; break; } if (file && isFile(file)) options.checkpoint.file = file; _context.next = 7; return this._resumeMultipart(options.checkpoint, options); case 7: return _context.abrupt("return", _context.sent); case 8: minPartSize = 100 * 1024; if (!options.mime) { if (isFile(file)) { options.mime = mime.getType(path.extname(file.name)); } else if (isBlob(file)) { options.mime = file.type; } else if (isBuffer(file)) { options.mime = ''; } else { options.mime = mime.getType(path.extname(file)); } } options.headers = options.headers || {}; this._convertMetaToHeaders(options.meta, options.headers); _context.next = 14; return this._getFileSize(file); case 14: fileSize = _context.sent; if (!(fileSize < minPartSize)) { _context.next = 26; break; } options.contentLength = fileSize; _context.next = 19; return this.put(name, file, options); case 19: result = _context.sent; if (!(options && options.progress)) { _context.next = 23; break; } _context.next = 23; return options.progress(1); case 23: ret = { res: result.res, bucket: this.options.bucket, name: name, etag: result.res.headers.etag }; if (options.headers && options.headers['x-oss-callback'] || options.callback) { ret.data = result.data; } return _context.abrupt("return", ret); case 26: if (!(options.partSize && !(parseInt(options.partSize, 10) === options.partSize))) { _context.next = 28; break; } throw new Error('partSize must be int number'); case 28: if (!(options.partSize && options.partSize < minPartSize)) { _context.next = 30; break; } throw new Error("partSize must not be smaller than ".concat(minPartSize)); case 30: _context.next = 32; return this.initMultipartUpload(name, options); case 32: initResult = _context.sent; uploadId = initResult.uploadId; partSize = this._getPartSize(fileSize, options.partSize); checkpoint = { file: file, name: name, fileSize: fileSize, partSize: partSize, uploadId: uploadId, doneParts: [] }; if (!(options && options.progress)) { _context.next = 39; break; } _context.next = 39; return options.progress(0, checkpoint, initResult.res); case 39: _context.next = 41; return this._resumeMultipart(checkpoint, options); case 41: return _context.abrupt("return", _context.sent); case 42: case "end": return _context.stop(); } }, _callee, this); })); function multipartUpload(_x, _x2) { return _multipartUpload.apply(this, arguments); } return multipartUpload; }(); /* * Resume multipart upload from checkpoint. The checkpoint will be * updated after each successful part upload. * @param {Object} checkpoint the checkpoint * @param {Object} options */ proto._resumeMultipart = /*#__PURE__*/function () { var _resumeMultipart2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(checkpoint, options) { var that, file, fileSize, partSize, uploadId, doneParts, name, in