From cb734f939217d7355b73df15a9d66469c2e86ef9 Mon Sep 17 00:00:00 2001 From: chrisftian Date: Wed, 31 May 2023 15:26:09 +0800 Subject: [PATCH 01/11] =?UTF-8?q?feat:=20=E6=94=AF=E6=8C=81postBucketInven?= =?UTF-8?q?tory=EF=BC=9B=E4=BC=98=E5=8C=96d.ts?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- demo/demo.js | 50 +++++++++++++++++++++++++- dist/cos-js-sdk-v5.js | 26 +++++++++++--- dist/cos-js-sdk-v5.min.js | 2 +- index.d.ts | 54 ++++++++++++++++++++++------ jest.config.js | 2 +- package.json | 5 ++- src/base.js | 23 ++++++++++-- test/test.js | 74 ++++++++++++++++++++++++++++++++++----- 8 files changed, 205 insertions(+), 31 deletions(-) diff --git a/demo/demo.js b/demo/demo.js index c005e91..5c2a07a 100644 --- a/demo/demo.js +++ b/demo/demo.js @@ -923,7 +923,6 @@ function deleteBucketLogging() { } function putBucketInventory() { - var AppId = config.Bucket.substr(config.Bucket.lastIndexOf('-') + 1); cos.putBucketInventory( { Bucket: config.Bucket, // Bucket 格式:test-1250000000 @@ -966,6 +965,54 @@ function putBucketInventory() { ); } +function postBucketInventory() { + cos.postBucketInventory( + { + Bucket: config.Bucket, // Bucket 格式:test-1250000000 + Region: config.Region, + Id: 'inventory_test6', + InventoryConfiguration: { + Id: 'inventory_test6', + Destination: { + COSBucketDestination: { + Format: 'CSV', + AccountId: config.Uin, + Bucket: 'qcs::cos:' + config.Region + '::' + config.Bucket, + Prefix: 'inventory6', + Encryption: { + SSECOS: '', + }, + }, + }, + Filter: { + Prefix: 'myPrefix', + // Period: { + // StartTime: new Date('2023-05-01').getTime()/1000, + // EndTime: new Date('2023-05-31').getTime()/1000, + // }, + // And: { + // Prefix: 'myPrefix', + // Tag: [{ Key: 'test1', Value: '1'}, { Key: 'test2', Value: '2' }] + // } + }, + IncludedObjectVersions: 'All', + OptionalFields: [ + 'Size', + 'LastModifiedDate', + 'ETag', + 'StorageClass', + 'IsMultipartUploaded', + 'ReplicationStatus', + 'Tag', + ], + }, + }, + function (err, data) { + logger.log('postBucketInventory:', err || data); + }, + ); +} + function getBucketInventory() { cos.getBucketInventory( { @@ -4673,6 +4720,7 @@ function postSnapshot() { 'getBucketLogging', 'deleteBucketLogging', 'putBucketInventory', + 'postBucketInventory', 'getBucketInventory', 'deleteBucketInventory', 'listBucketInventory', diff --git a/dist/cos-js-sdk-v5.js b/dist/cos-js-sdk-v5.js index 6db18c2..94b8d04 100644 --- a/dist/cos-js-sdk-v5.js +++ b/dist/cos-js-sdk-v5.js @@ -6948,7 +6948,7 @@ module.exports = function(module) { /*! exports provided: name, version, description, main, types, scripts, repository, keywords, author, license, bugs, homepage, dependencies, devDependencies, default */ /***/ (function(module) { -module.exports = JSON.parse("{\"name\":\"cos-js-sdk-v5\",\"version\":\"1.4.17\",\"description\":\"JavaScript SDK for [腾讯云对象存储](https://cloud.tencent.com/product/cos)\",\"main\":\"dist/cos-js-sdk-v5.js\",\"types\":\"index.d.ts\",\"scripts\":{\"prettier\":\"prettier --write src demo/demo.js test/test.js server/sts.js\",\"server\":\"node server/sts.js\",\"dev\":\"cross-env NODE_ENV=development webpack -w --mode=development\",\"build\":\"cross-env NODE_ENV=production webpack --mode=production\",\"cos-auth.min.js\":\"uglifyjs ./demo/common/cos-auth.js -o ./demo/common/cos-auth.min.js -c -m\",\"test\":\"jest --coverage\"},\"repository\":{\"type\":\"git\",\"url\":\"git+https://github.com/tencentyun/cos-js-sdk-v5.git\"},\"keywords\":[],\"author\":\"carsonxu\",\"license\":\"ISC\",\"bugs\":{\"url\":\"https://github.com/tencentyun/cos-js-sdk-v5/issues\"},\"homepage\":\"https://github.com/tencentyun/cos-js-sdk-v5#readme\",\"dependencies\":{\"@xmldom/xmldom\":\"^0.8.6\"},\"devDependencies\":{\"@babel/core\":\"7.17.9\",\"@babel/plugin-transform-runtime\":\"7.18.10\",\"@babel/preset-env\":\"7.16.11\",\"babel-loader\":\"8.2.5\",\"body-parser\":\"^1.18.3\",\"cross-env\":\"^5.2.0\",\"express\":\"^4.16.4\",\"jest\":\"^29.3.1\",\"jest-environment-jsdom\":\"^29.3.1\",\"jest-localstorage-mock\":\"^2.4.26\",\"prettier\":\"2.8.8\",\"qcloud-cos-sts\":\"^3.0.2\",\"request\":\"^2.87.0\",\"terser-webpack-plugin\":\"4.2.3\",\"uglifyjs\":\"^2.4.11\",\"webpack\":\"4.46.0\",\"webpack-cli\":\"4.10.0\"}}"); +module.exports = JSON.parse("{\"name\":\"cos-js-sdk-v5\",\"version\":\"1.4.18\",\"description\":\"JavaScript SDK for [腾讯云对象存储](https://cloud.tencent.com/product/cos)\",\"main\":\"dist/cos-js-sdk-v5.js\",\"types\":\"index.d.ts\",\"scripts\":{\"prettier\":\"prettier --write src demo/demo.js test/test.js server/sts.js index.d.ts\",\"server\":\"node server/sts.js\",\"dev\":\"cross-env NODE_ENV=development webpack -w --mode=development\",\"build\":\"cross-env NODE_ENV=production webpack --mode=production\",\"cos-auth.min.js\":\"uglifyjs ./demo/common/cos-auth.js -o ./demo/common/cos-auth.min.js -c -m\",\"test\":\"jest --runInBand --coverage\"},\"repository\":{\"type\":\"git\",\"url\":\"git+https://github.com/tencentyun/cos-js-sdk-v5.git\"},\"keywords\":[],\"author\":\"carsonxu\",\"license\":\"ISC\",\"bugs\":{\"url\":\"https://github.com/tencentyun/cos-js-sdk-v5/issues\"},\"homepage\":\"https://github.com/tencentyun/cos-js-sdk-v5#readme\",\"dependencies\":{\"@xmldom/xmldom\":\"^0.8.6\"},\"devDependencies\":{\"@babel/core\":\"7.17.9\",\"@babel/plugin-transform-runtime\":\"7.18.10\",\"@babel/preset-env\":\"7.16.11\",\"babel-loader\":\"8.2.5\",\"body-parser\":\"^1.18.3\",\"cross-env\":\"^5.2.0\",\"express\":\"^4.16.4\",\"jest\":\"^29.3.1\",\"jest-environment-jsdom\":\"^29.3.1\",\"prettier\":\"2.8.8\",\"qcloud-cos-sts\":\"^3.0.2\",\"request\":\"^2.87.0\",\"terser-webpack-plugin\":\"4.2.3\",\"uglifyjs\":\"^2.4.11\",\"webpack\":\"4.46.0\",\"webpack-cli\":\"4.10.0\"}}"); /***/ }), @@ -10007,7 +10007,7 @@ function getBucketLogging(params, callback) { */ -function putBucketInventory(params, callback) { +function submitBucketInventory(method, params, callback) { var InventoryConfiguration = util.clone(params['InventoryConfiguration']); if (InventoryConfiguration.OptionalFields) { @@ -10032,9 +10032,10 @@ function putBucketInventory(params, callback) { var headers = params.Headers; headers['Content-Type'] = 'application/xml'; headers['Content-MD5'] = util.b64(util.md5(xml)); + var action = method === 'PUT' ? 'name/cos:PutBucketInventory' : 'name/cos:PostBucketInventory'; submitRequest.call(this, { - Action: 'name/cos:PutBucketInventory', - method: 'PUT', + Action: action, + method: method, Bucket: params.Bucket, Region: params.Region, body: xml, @@ -10058,6 +10059,22 @@ function putBucketInventory(params, callback) { }); }); } +/** + * 创建一个清单任务 +*/ + + +function putBucketInventory(params, callback) { + return submitBucketInventory.call(this, 'PUT', params, callback); +} +/** + * 创建一个一次性清单任务 会立即执行 +*/ + + +function postBucketInventory(params, callback) { + return submitBucketInventory.call(this, 'POST', params, callback); +} /** * 获取 Bucket 的清单任务信息 * @param {Object} params 参数对象,必须 @@ -12527,6 +12544,7 @@ var API_MAP = { getBucketLogging: getBucketLogging, putBucketInventory: putBucketInventory, // BucketInventory + postBucketInventory: postBucketInventory, getBucketInventory: getBucketInventory, listBucketInventory: listBucketInventory, deleteBucketInventory: deleteBucketInventory, diff --git a/dist/cos-js-sdk-v5.min.js b/dist/cos-js-sdk-v5.min.js index cb3bcc3..d3873d7 100644 --- a/dist/cos-js-sdk-v5.min.js +++ b/dist/cos-js-sdk-v5.min.js @@ -1 +1 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.COS=t():e.COS=t()}(this,(function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/dist/",n(n.s=10)}([function(e,t){function n(t){return e.exports=n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},e.exports.__esModule=!0,e.exports.default=e.exports,n(t)}e.exports=n,e.exports.__esModule=!0,e.exports.default=e.exports},function(e,t,n){"use strict";(function(t){var r=n(0),o=n(12),i=n(15),a=n(16),s=n(21),c=n(6);function u(e){return encodeURIComponent(e).replace(/!/g,"%21").replace(/'/g,"%27").replace(/\(/g,"%28").replace(/\)/g,"%29").replace(/\*/g,"%2A")}function l(e,t){var n=[];for(var r in e)e.hasOwnProperty(r)&&n.push(t?u(r).toLowerCase():r);return n.sort((function(e,t){return(e=e.toLowerCase())===(t=t.toLowerCase())?0:e>t?1:-1}))}var d,p=["cache-control","content-disposition","content-encoding","content-length","content-md5","expect","expires","host","if-match","if-modified-since","if-none-match","if-unmodified-since","origin","range","transfer-encoding"],f=function(e,t,n){var r=t/8,o=e.slice(n,n+r);return new Uint8Array(o).reverse(),new{8:Uint8Array,16:Uint16Array,32:Uint32Array}[t](o)[0]},h=function(e,t,n,r){var o=e.slice(t,n),i="";return new Uint8Array(o).forEach((function(e){i+=String.fromCharCode(e)})),r&&(i=decodeURIComponent(escape(i))),i},m=function(){},g=function(e){var t={};for(var n in e)e.hasOwnProperty(n)&&void 0!==e[n]&&null!==e[n]&&(t[n]=e[n]);return t},y=(d=function(e,t){e=e.split("."),t=t.split(".");for(var n=0;nparseInt(t[n])?1:-1;return 0},function(e){if(!e)return!1;var t=(e.match(/Chrome\/([.\d]+)/)||[])[1],n=(e.match(/QBCore\/([.\d]+)/)||[])[1],r=(e.match(/QQBrowser\/([.\d]+)/)||[])[1];return t&&d(t,"53.0.2785.116")<0&&n&&d(n,"3.53.991.400")<0&&r&&d(r,"9.0.2524.400")<=0||!1}("undefined"!=typeof navigator&&navigator.userAgent)),v=1048576;function C(e){return T(e,(function(e){return"object"===r(e)&&null!==e?C(e):e}))}function k(e,t){return b(t,(function(n,r){e[r]=t[r]})),e}function S(e){return e instanceof Array}function b(e,t){for(var n in e)e.hasOwnProperty(n)&&t(e[n],n)}function T(e,t){var n=S(e)?[]:{};for(var r in e)e.hasOwnProperty(r)&&(n[r]=t(e[r],r));return n}var R=function(e,t){var n=t.Bucket,r=t.Region,o=t.Key,i=this.options.Domain,a=!i||"string"==typeof i&&i.indexOf("{Bucket}")>-1,s=!i||"string"==typeof i&&i.indexOf("{Region}")>-1;if(e.indexOf("Bucket")>-1||"deleteMultipleObject"===e||"multipartList"===e||"listObjectVersions"===e){if(a&&!n)return"Bucket";if(s&&!r)return"Region"}else if(e.indexOf("Object")>-1||e.indexOf("multipart")>-1||"sliceUploadFile"===e||"abortUploadTask"===e){if(a&&!n)return"Bucket";if(s&&!r)return"Region";if(!o)return"Key"}return!1},E=function(e,t){if(t=k({},t),"getAuth"!==e&&"getV4Auth"!==e&&"getObjectUrl"!==e){var n=t.Headers||{};if(t&&"object"===r(t)){!function(){for(var e in t)t.hasOwnProperty(e)&&e.indexOf("x-cos-")>-1&&(n[e]=t[e])}();I.each({"x-cos-mfa":"MFA","Content-MD5":"ContentMD5","Content-Length":"ContentLength","Content-Type":"ContentType",Expect:"Expect",Expires:"Expires","Cache-Control":"CacheControl","Content-Disposition":"ContentDisposition","Content-Encoding":"ContentEncoding",Range:"Range","If-Modified-Since":"IfModifiedSince","If-Unmodified-Since":"IfUnmodifiedSince","If-Match":"IfMatch","If-None-Match":"IfNoneMatch","x-cos-copy-source":"CopySource","x-cos-copy-source-Range":"CopySourceRange","x-cos-metadata-directive":"MetadataDirective","x-cos-copy-source-If-Modified-Since":"CopySourceIfModifiedSince","x-cos-copy-source-If-Unmodified-Since":"CopySourceIfUnmodifiedSince","x-cos-copy-source-If-Match":"CopySourceIfMatch","x-cos-copy-source-If-None-Match":"CopySourceIfNoneMatch","x-cos-acl":"ACL","x-cos-grant-read":"GrantRead","x-cos-grant-write":"GrantWrite","x-cos-grant-full-control":"GrantFullControl","x-cos-grant-read-acp":"GrantReadAcp","x-cos-grant-write-acp":"GrantWriteAcp","x-cos-storage-class":"StorageClass","x-cos-traffic-limit":"TrafficLimit","x-cos-mime-limit":"MimeLimit","x-cos-server-side-encryption-customer-algorithm":"SSECustomerAlgorithm","x-cos-server-side-encryption-customer-key":"SSECustomerKey","x-cos-server-side-encryption-customer-key-MD5":"SSECustomerKeyMD5","x-cos-server-side-encryption":"ServerSideEncryption","x-cos-server-side-encryption-cos-kms-key-id":"SSEKMSKeyId","x-cos-server-side-encryption-context":"SSEContext","Pic-Operations":"PicOperations"},(function(e,r){void 0!==t[e]&&(n[r]=t[e])})),t.Headers=g(n)}}return t},w=function(e){return Date.now()+(e||0)},x="object"===("undefined"==typeof navigator?"undefined":r(navigator))&&!!navigator.userAgent.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/),A="object"===("undefined"==typeof navigator?"undefined":r(navigator))&&/\sQQ/i.test(navigator.userAgent),I={noop:m,formatParams:E,apiWrapper:function(e,t){return function(n,r){var o,i=this;if("function"==typeof n&&(r=n,n={}),n=E(e,n),i.options.EnableTracker)if("sliceUploadFile"===n.calledBySdk)o=n.tracker&&n.tracker.generateSubTracker({apiName:e});else if(["uploadFile","uploadFiles"].includes(e))o=null;else{var a=-1;n.Body&&(a="string"==typeof n.Body?n.Body.length:n.Body.size||n.Body.byteLength||-1),o=new c({bucket:n.Bucket,region:n.Region,apiName:e,fileKey:n.Key,fileSize:a,deepTracker:i.options.DeepTracker,customId:i.options.CustomId,delay:i.options.TrackerDelay})}n.tracker=o;var s=function(e){return e&&e.headers&&(e.headers["x-cos-request-id"]&&(e.RequestId=e.headers["x-cos-request-id"]),e.headers["x-ci-request-id"]&&(e.RequestId=e.headers["x-ci-request-id"]),e.headers["x-cos-version-id"]&&(e.VersionId=e.headers["x-cos-version-id"]),e.headers["x-cos-delete-marker"]&&(e.DeleteMarker=e.headers["x-cos-delete-marker"])),e},u=function(e,t){o&&o.formatResult(e,t),r&&r(s(e),s(t))},l=function(){if("getService"!==e&&"abortUploadTask"!==e){var t=R.call(i,e,n);if(t)return"missing param "+t;if(n.Region){if(i.options.CompatibilityMode){if(!/^([a-z\d-.]+)$/.test(n.Region))return"Region format error."}else{if(n.Region.indexOf("cos.")>-1)return'param Region should not be start with "cos."';if(!/^([a-z\d-]+)$/.test(n.Region))return"Region format error."}!i.options.CompatibilityMode&&-1===n.Region.indexOf("-")&&"yfb"!==n.Region&&"default"!==n.Region&&n.Region}if(n.Bucket){if(!/^([a-z\d-]+)-(\d+)$/.test(n.Bucket))if(n.AppId)n.Bucket=n.Bucket+"-"+n.AppId;else{if(!i.options.AppId)return'Bucket should format as "test-1250000000".';n.Bucket=n.Bucket+"-"+i.options.AppId}n.AppId&&delete n.AppId}!i.options.UseRawKey&&n.Key&&"/"===n.Key.substr(0,1)&&(n.Key=n.Key.substr(1))}}(),d=["getAuth","getObjectUrl"].includes(e);if("function"==typeof Promise&&!d&&!r)return new Promise((function(e,o){if(r=function(t,n){t?o(t):e(n)},l)return u(I.error(new Error(l)));t.call(i,n,u)}));if(l)return u(I.error(new Error(l)));var p=t.call(i,n,u);return d?p:void 0}},xml2json:a,json2xml:s,md5:o,clearKey:g,fileSlice:function(e,t,n,r,o){var i;if(e.slice?i=e.slice(t,n):e.mozSlice?i=e.mozSlice(t,n):e.webkitSlice&&(i=e.webkitSlice(t,n)),r&&y){var a=new FileReader;a.onload=function(e){i=null,o(new Blob([a.result]))},a.readAsArrayBuffer(i)}else o(i)},getBodyMd5:function(e,t,n,r){n=n||m,e?"string"==typeof t?n(I.md5(t,!0)):Blob&&t instanceof Blob?I.getFileMd5(t,(function(e,t){n(t)}),r):n():n()},getFileMd5:function(e,t,n){var r=e.size,i=0,a=o.getCtx();!function o(s){if(s>=r){var c=a.digest("hex");t(null,c)}else{var u=Math.min(r,s+v);I.fileSlice(e,s,u,!1,(function(e){!function(e,t){var n,r=new FileReader;FileReader.prototype.readAsBinaryString?(n=FileReader.prototype.readAsBinaryString,r.onload=function(){t(this.result)}):FileReader.prototype.readAsArrayBuffer&&(n=function(e){var n="",r=new FileReader;r.onload=function(e){for(var o=new Uint8Array(r.result),i=o.byteLength,a=0;a-1||p.indexOf(r)>-1)&&(t[n]=e[n])}return t}(C(e.Headers||e.headers||{})),u=e.Key||"";e.UseRawKey?t=e.Pathname||e.pathname||"/"+u:0!==(t=e.Pathname||e.pathname||u).indexOf("/")&&(t="/"+t);var d=!1!==e.ForceSignHost;if(!c.Host&&!c.host&&e.Bucket&&e.Region&&d&&(c.Host=e.Bucket+".cos."+e.Region+".myqcloud.com"),!n)throw new Error("missing param SecretId");if(!r)throw new Error("missing param SecretKey");var f=Math.round(w(e.SystemClockOffset)/1e3)-1,h=f,m=e.Expires||e.expires;h+=void 0===m?900:1*m||0;var g=n,y=o||f+";"+h,v=o||f+";"+h,k=l(c,!0).join(";").toLowerCase(),S=l(s,!0).join(";").toLowerCase(),b=i.HmacSHA1(v,r).toString(),T=[a,t,I.obj2str(s,!0),I.obj2str(c,!0),""].join("\n"),R=["sha1",y,i.SHA1(T).toString(),""].join("\n");return["q-sign-algorithm=sha1","q-ak="+g,"q-sign-time="+y,"q-key-time="+v,"q-header-list="+k,"q-url-param-list="+S,"q-signature="+i.HmacSHA1(R,b).toString()].join("&")},parseSelectPayload:function(e){for(var t={},n=h(e),r={records:[]};e.byteLength;){var o,i=f(e,32,0),a=f(e,32,4),s=i-a-16,c=0;for(e=e.slice(12);c1)for(var n=1;n=0))throw new I(x,new Error(e.tagName+"@"+n));for(var o=t.length-1;r"==e&&">")||"&"==e&&"&"||'"'==e&&"""||"&#"+e.charCodeAt()+";"}function j(e,t){if(t(e))return!0;if(e=e.firstChild)do{if(j(e,t))return!0}while(e=e.nextSibling)}function F(){this.ownerDocument=this}function K(e,t,n,r){e&&e._inc++,n.namespaceURI===i.XMLNS&&delete t._nsMap[n.prefix?n.localName:""]}function q(e,t,n){if(e&&e._inc){e._inc++;var r=t.childNodes;if(n)r[r.length++]=n;else{for(var o=t.firstChild,i=0;o;)r[i++]=o,o=o.nextSibling;r.length=i,delete r[r.length]}}}function z(e,t){var n=t.previousSibling,r=t.nextSibling;return n?n.nextSibling=r:e.firstChild=r,r?r.previousSibling=n:e.lastChild=n,t.parentNode=null,t.previousSibling=null,t.nextSibling=null,q(e.ownerDocument,e),t}function G(e){return e&&e.nodeType===H.DOCUMENT_TYPE_NODE}function V(e){return e&&e.nodeType===H.ELEMENT_NODE}function X(e){return e&&e.nodeType===H.TEXT_NODE}function W(e,t){var n=e.childNodes||[];if(o(n,V)||G(t))return!1;var r=o(n,G);return!(t&&r&&n.indexOf(r)>n.indexOf(t))}function Q(e,t){var n=e.childNodes||[];if(o(n,(function(e){return V(e)&&e!==t})))return!1;var r=o(n,G);return!(t&&r&&n.indexOf(r)>n.indexOf(t))}function J(e,t,n){if(!function(e){return e&&(e.nodeType===H.DOCUMENT_NODE||e.nodeType===H.DOCUMENT_FRAGMENT_NODE||e.nodeType===H.ELEMENT_NODE)}(e))throw new I(w,"Unexpected parent node type "+e.nodeType);if(n&&n.parentNode!==e)throw new I(x,"child not in parent");if(!function(e){return e&&(V(e)||X(e)||G(e)||e.nodeType===H.DOCUMENT_FRAGMENT_NODE||e.nodeType===H.COMMENT_NODE||e.nodeType===H.PROCESSING_INSTRUCTION_NODE)}(t)||G(t)&&e.nodeType!==H.DOCUMENT_NODE)throw new I(w,"Unexpected node type "+t.nodeType+" for parent node type "+e.nodeType)}function $(e,t,n){var r=e.childNodes||[],i=t.childNodes||[];if(t.nodeType===H.DOCUMENT_FRAGMENT_NODE){var a=i.filter(V);if(a.length>1||o(i,X))throw new I(w,"More than one element or text in fragment");if(1===a.length&&!W(e,n))throw new I(w,"Element in fragment can not be inserted before doctype")}if(V(t)&&!W(e,n))throw new I(w,"Only one element can be added and only after doctype");if(G(t)){if(o(r,G))throw new I(w,"Only one doctype is allowed");var s=o(r,V);if(n&&r.indexOf(s)1||o(i,X))throw new I(w,"More than one element or text in fragment");if(1===a.length&&!Q(e,n))throw new I(w,"Element in fragment can not be inserted before doctype")}if(V(t)&&!Q(e,n))throw new I(w,"Only one element can be added and only after doctype");if(G(t)){if(o(r,(function(e){return G(e)&&e!==n})))throw new I(w,"Only one doctype is allowed");var s=o(r,V);if(n&&r.indexOf(s)=0;T--){if(""===(R=o[T]).prefix&&R.namespace===e.namespaceURI){d=R.namespace;break}}if(d!==e.namespaceURI)for(T=o.length-1;T>=0;T--){var R;if((R=o[T]).namespace===e.namespaceURI){R.prefix&&(l=R.prefix+":"+u);break}}}t.push("<",l);for(var E=0;E"),n&&/^script$/i.test(u))for(;c;)c.data?t.push(c.data):ge(c,t,n,r,o.slice()),c=c.nextSibling;else for(;c;)ge(c,t,n,r,o.slice()),c=c.nextSibling;t.push("")}else t.push("/>");return;case k:case b:for(c=e.firstChild;c;)ge(c,t,n,r,o.slice()),c=c.nextSibling;return;case f:return me(t,e.name,e.value);case h:return t.push(e.data.replace(/[<&>]/g,L));case m:return t.push("");case C:return t.push("\x3c!--",e.data,"--\x3e");case S:var I=e.publicId,O=e.systemId;if(t.push("");else if(O&&"."!=O)t.push(" SYSTEM ",O,">");else{var B=e.internalSubset;B&&t.push(" [",B,"]"),t.push(">")}return;case v:return t.push("");case g:return t.push("&",e.nodeName,";");default:t.push("??",e.nodeName)}}function ye(e,t,n){var r;switch(t.nodeType){case p:(r=t.cloneNode(!1)).ownerDocument=e;case b:break;case f:n=!0}if(r||(r=t.cloneNode(!1)),r.ownerDocument=e,r.parentNode=null,n)for(var o=t.firstChild;o;)r.appendChild(ye(e,o,n)),o=o.nextSibling;return r}function ve(e,t,n){var r=new t.constructor;for(var o in t)if(Object.prototype.hasOwnProperty.call(t,o)){var i=t[o];"object"!=typeof i&&i!=r[o]&&(r[o]=i)}switch(t.childNodes&&(r.childNodes=new O),r.ownerDocument=e,r.nodeType){case p:var a=t.attributes,s=r.attributes=new P,c=a.length;s._ownerElement=r;for(var u=0;u0},lookupPrefix:function(e){for(var t=this;t;){var n=t._nsMap;if(n)for(var r in n)if(Object.prototype.hasOwnProperty.call(n,r)&&n[r]===e)return r;t=t.nodeType==f?t.ownerDocument:t.parentNode}return null},lookupNamespaceURI:function(e){for(var t=this;t;){var n=t._nsMap;if(n&&Object.prototype.hasOwnProperty.call(n,e))return n[e];t=t.nodeType==f?t.ownerDocument:t.parentNode}return null},isDefaultNamespace:function(e){return null==this.lookupPrefix(e)}},u(d,H),u(d,H.prototype),F.prototype={nodeName:"#document",nodeType:k,doctype:null,documentElement:null,_inc:1,insertBefore:function(e,t){if(e.nodeType==b){for(var n=e.firstChild;n;){var r=n.nextSibling;this.insertBefore(n,t),n=r}return e}return Z(this,e,t),e.ownerDocument=this,null===this.documentElement&&e.nodeType===p&&(this.documentElement=e),e},removeChild:function(e){return this.documentElement==e&&(this.documentElement=null),z(this,e)},replaceChild:function(e,t){Z(this,e,t,Y),e.ownerDocument=this,t&&this.removeChild(t),V(e)&&(this.documentElement=e)},importNode:function(e,t){return ye(this,e,t)},getElementById:function(e){var t=null;return j(this.documentElement,(function(n){if(n.nodeType==p&&n.getAttribute("id")==e)return t=n,!0})),t},getElementsByClassName:function(e){var t=c(e);return new B(this,(function(n){var r=[];return t.length>0&&j(n.documentElement,(function(o){if(o!==n&&o.nodeType===p){var i=o.getAttribute("class");if(i){var a=e===i;if(!a){var s=c(i);a=t.every((u=s,function(e){return u&&-1!==u.indexOf(e)}))}a&&r.push(o)}}var u})),r}))},createElement:function(e){var t=new ee;return t.ownerDocument=this,t.nodeName=e,t.tagName=e,t.localName=e,t.childNodes=new O,(t.attributes=new P)._ownerElement=t,t},createDocumentFragment:function(){var e=new le;return e.ownerDocument=this,e.childNodes=new O,e},createTextNode:function(e){var t=new re;return t.ownerDocument=this,t.appendData(e),t},createComment:function(e){var t=new oe;return t.ownerDocument=this,t.appendData(e),t},createCDATASection:function(e){var t=new ie;return t.ownerDocument=this,t.appendData(e),t},createProcessingInstruction:function(e,t){var n=new de;return n.ownerDocument=this,n.tagName=n.target=e,n.nodeValue=n.data=t,n},createAttribute:function(e){var t=new te;return t.ownerDocument=this,t.name=e,t.nodeName=e,t.localName=e,t.specified=!0,t},createEntityReference:function(e){var t=new ue;return t.ownerDocument=this,t.nodeName=e,t},createElementNS:function(e,t){var n=new ee,r=t.split(":"),o=n.attributes=new P;return n.childNodes=new O,n.ownerDocument=this,n.nodeName=t,n.tagName=t,n.namespaceURI=e,2==r.length?(n.prefix=r[0],n.localName=r[1]):n.localName=t,o._ownerElement=n,n},createAttributeNS:function(e,t){var n=new te,r=t.split(":");return n.ownerDocument=this,n.nodeName=t,n.name=t,n.namespaceURI=e,n.specified=!0,2==r.length?(n.prefix=r[0],n.localName=r[1]):n.localName=t,n}},l(F,H),ee.prototype={nodeType:p,hasAttribute:function(e){return null!=this.getAttributeNode(e)},getAttribute:function(e){var t=this.getAttributeNode(e);return t&&t.value||""},getAttributeNode:function(e){return this.attributes.getNamedItem(e)},setAttribute:function(e,t){var n=this.ownerDocument.createAttribute(e);n.value=n.nodeValue=""+t,this.setAttributeNode(n)},removeAttribute:function(e){var t=this.getAttributeNode(e);t&&this.removeAttributeNode(t)},appendChild:function(e){return e.nodeType===b?this.insertBefore(e,null):function(e,t){return t.parentNode&&t.parentNode.removeChild(t),t.parentNode=e,t.previousSibling=e.lastChild,t.nextSibling=null,t.previousSibling?t.previousSibling.nextSibling=t:e.firstChild=t,e.lastChild=t,q(e.ownerDocument,e,t),t}(this,e)},setAttributeNode:function(e){return this.attributes.setNamedItem(e)},setAttributeNodeNS:function(e){return this.attributes.setNamedItemNS(e)},removeAttributeNode:function(e){return this.attributes.removeNamedItem(e.nodeName)},removeAttributeNS:function(e,t){var n=this.getAttributeNodeNS(e,t);n&&this.removeAttributeNode(n)},hasAttributeNS:function(e,t){return null!=this.getAttributeNodeNS(e,t)},getAttributeNS:function(e,t){var n=this.getAttributeNodeNS(e,t);return n&&n.value||""},setAttributeNS:function(e,t,n){var r=this.ownerDocument.createAttributeNS(e,t);r.value=r.nodeValue=""+n,this.setAttributeNode(r)},getAttributeNodeNS:function(e,t){return this.attributes.getNamedItemNS(e,t)},getElementsByTagName:function(e){return new B(this,(function(t){var n=[];return j(t,(function(r){r===t||r.nodeType!=p||"*"!==e&&r.tagName!=e||n.push(r)})),n}))},getElementsByTagNameNS:function(e,t){return new B(this,(function(n){var r=[];return j(n,(function(o){o===n||o.nodeType!==p||"*"!==e&&o.namespaceURI!==e||"*"!==t&&o.localName!=t||r.push(o)})),r}))}},F.prototype.getElementsByTagName=ee.prototype.getElementsByTagName,F.prototype.getElementsByTagNameNS=ee.prototype.getElementsByTagNameNS,l(ee,H),te.prototype.nodeType=f,l(te,H),ne.prototype={data:"",substringData:function(e,t){return this.data.substring(e,e+t)},appendData:function(e){e=this.data+e,this.nodeValue=this.data=e,this.length=e.length},insertData:function(e,t){this.replaceData(e,0,t)},appendChild:function(e){throw new Error(E[w])},deleteData:function(e,t){this.replaceData(e,t,"")},replaceData:function(e,t,n){n=this.data.substring(0,e)+n+this.data.substring(e+t),this.nodeValue=this.data=n,this.length=n.length}},l(ne,H),re.prototype={nodeName:"#text",nodeType:h,splitText:function(e){var t=this.data,n=t.substring(e);t=t.substring(0,e),this.data=this.nodeValue=t,this.length=t.length;var r=this.ownerDocument.createTextNode(n);return this.parentNode&&this.parentNode.insertBefore(r,this.nextSibling),r}},l(re,ne),oe.prototype={nodeName:"#comment",nodeType:C},l(oe,ne),ie.prototype={nodeName:"#cdata-section",nodeType:m},l(ie,ne),ae.prototype.nodeType=S,l(ae,H),se.prototype.nodeType=T,l(se,H),ce.prototype.nodeType=y,l(ce,H),ue.prototype.nodeType=g,l(ue,H),le.prototype.nodeName="#document-fragment",le.prototype.nodeType=b,l(le,H),de.prototype.nodeType=v,l(de,H),pe.prototype.serializeToString=function(e,t,n){return fe.call(e,t,n)},H.prototype.toString=fe;try{if(Object.defineProperty){function ke(e){switch(e.nodeType){case p:case b:var t=[];for(e=e.firstChild;e;)7!==e.nodeType&&8!==e.nodeType&&t.push(ke(e)),e=e.nextSibling;return t.join("");default:return e.nodeValue}}Object.defineProperty(B.prototype,"length",{get:function(){return _(this),this.$$length}}),Object.defineProperty(H.prototype,"textContent",{get:function(){return ke(this)},set:function(e){switch(this.nodeType){case p:case b:for(;this.firstChild;)this.removeChild(this.firstChild);(e||String(e))&&this.appendChild(this.ownerDocument.createTextNode(e));break;default:this.data=e,this.value=e,this.nodeValue=e}}}),Ce=function(e,t,n){e["$$"+t]=n}}}catch(Se){}t.DocumentType=ae,t.DOMException=I,t.DOMImplementation=M,t.Element=ee,t.Node=H,t.NodeList=O,t.XMLSerializer=pe},function(e,t,n){var r=n(22),o=n(23),i=n(0),a=n(7),s=null,c=function(e){if(!s){var t=n(24);s=new t({appkey:"0AND0VEVB24UBGDU",versionCode:a.version,channelID:"js_sdk",openid:"openid",unionid:"unid",strictMode:!1,delay:e,sessionDuration:6e4})}return s},u=function(){var e=function(){return(65536*(1+Math.random())|0).toString(16).substring(1)};return e()+e()+"-"+e()+"-"+e()+"-"+e()+"-"+e()+e()+e()},l=function(){if("object"===("undefined"==typeof navigator?"undefined":i(navigator))){var e=navigator.connection||navigator.mozConnection||navigator.webkitConnection;return(null==e?void 0:e.type)||(null==e?void 0:e.effectiveType)||"unknown"}return"unknown"},d=function(){if("object"!==("undefined"==typeof navigator?"undefined":i(navigator)))return"unknown os";var e=navigator.userAgent.toLowerCase(),t=/macintosh|mac os x/i.test(navigator.userAgent);return e.indexOf("win32")>=0||e.indexOf("wow32")>=0?"win32":e.indexOf("win64")>=0||e.indexOf("wow64")>=0?"win64":t?"mac":"unknown os"},p=function(){return!("object"!==("undefined"==typeof navigator?"undefined":i(navigator))||!navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i))},f=function(){return!("object"!==("undefined"==typeof navigator?"undefined":i(navigator))||!navigator.userAgent.match(/(Android|Adr|Linux)/i))},h=function(){return!("object"!==("undefined"==typeof navigator?"undefined":i(navigator))||!navigator.userAgent.match(/(iPhone|iPod|iPad|iOS)/i))},m=function(){if("object"!==("undefined"==typeof navigator?"undefined":i(navigator)))return"unknown device";var e=navigator.userAgent.toLowerCase();if(e.includes("app/tencent_wemeet"))return"tencent_wemeet";if(e.indexOf("maxthon")>=0){var t=e.match(/maxthon\/([\d.]+)/),n=t&&t[1]||"";return"傲游浏览器 ".concat(n).trim()}if(e.indexOf("qqbrowser")>=0){var r=e.match(/qqbrowser\/([\d.]+)/),o=r&&r[1]||"";return"QQ浏览器 ".concat(o).trim()}if(e.indexOf("se 2.x")>=0)return"搜狗浏览器";if(e.indexOf("wxwork")>=0)return"微信内置浏览器";if(e.indexOf("msie")>=0){var a=e.match(/msie ([\d.]+)/),s=a&&a[1]||"";return"IE ".concat(s).trim()}if(e.indexOf("firefox")>=0){var c=e.match(/firefox\/([\d.]+)/),u=c&&c[1]||"";return"Firefox ".concat(u).trim()}if(e.indexOf("chrome")>=0){var l=e.match(/chrome\/([\d.]+)/),d=l&&l[1]||"";return"Chrome ".concat(d).trim()}if(e.indexOf("opera")>=0){var p=e.match(/opera.([\d.]+)/),f=p&&p[1]||"";return"Opera ".concat(f).trim()}if(e.indexOf("safari")>=0){var h=e.match(/version\/([\d.]+)/),m=h&&h[1]||"";return"Safari ".concat(m).trim()}if(e.indexOf("edge")>=0){var g=e.match(/edge\/([\d.]+)/),y=g&&g[1]||"";return"edge ".concat(y).trim()}return e.substr(0,200)},g={isMobile:p(),isBrowser:!p(),mobileOsType:f()?"android":h?"ios":"other_mobile",pcOsType:d()},y={deviceType:g.isMobile?"mobile":g.isBrowser?"browser":"unknown",devicePlatform:g.isMobile?g.mobileOsType:g.pcOsType,deviceName:m()},v=["multipartInit","multipartUpload","multipartComplete","multipartList","multipartListPart","multipartAbort"],C=["putObject","postObject","appendObject","sliceUploadFile","uploadFile","uploadFiles"].concat(v),k=["getObject"];function S(e){return e.replace(/([A-Z])/g,"_$1").toLowerCase()}var b=function(){"use strict";function e(t){r(this,e);var n=t.parent,o=t.traceId,i=t.bucket,s=t.region,l=t.apiName,d=t.fileKey,p=t.fileSize,f=t.accelerate,h=t.customId,m=t.delay,g=t.deepTracker,v=i&&i.substr(i.lastIndexOf("-")+1)||"";this.parent=n,this.deepTracker=g,this.delay=m,this.params={cossdkVersion:a.version,region:s,networkType:"",host:"",accelerate:f?"Y":"N",requestPath:d||"",size:p||-1,httpMd5:0,httpSign:0,httpFull:0,name:l||"",result:"",tookTime:0,errorNode:"",errorCode:"",errorMessage:"",errorRequestId:"",errorStatusCode:0,errorServiceName:"",tracePlatform:"cos-js-sdk-v5",traceId:o||u(),bucket:i,appid:v,partNumber:0,retryTimes:0,reqUrl:"",customId:h||"",deviceType:y.deviceType,devicePlatform:y.devicePlatform,deviceName:y.deviceName,md5StartTime:0,md5EndTime:0,signStartTime:0,signEndTime:0,httpStartTime:0,httpEndTime:0,startTime:(new Date).getTime(),endTime:0},this.beacon=c(m)}return o(e,[{key:"formatResult",value:function(e,t){var n,r,o,i,a,s,c=(new Date).getTime()-this.params.startTime,u=l(),d=e?(null==e?void 0:e.code)||(null==e||null===(n=e.error)||void 0===n?void 0:n.code)||(null==e||null===(r=e.error)||void 0===r?void 0:r.Code):"",p=e?(null==e?void 0:e.message)||(null==e||null===(o=e.error)||void 0===o?void 0:o.message)||(null==e||null===(i=e.error)||void 0===i?void 0:i.Message):"",f=e?(null==e?void 0:e.resource)||(null==e||null===(a=e.error)||void 0===a?void 0:a.resource)||(null==e||null===(s=e.error)||void 0===s?void 0:s.Resource):"",h=e?null==e?void 0:e.statusCode:t.statusCode,m=e?(null==e?void 0:e.headers)&&(null==e?void 0:e.headers["x-cos-request-id"]):(null==t?void 0:t.headers)&&(null==t?void 0:t.headers["x-cos-request-id"]),g=e?m?"Server":"Client":"";if(Object.assign(this.params,{tookTime:c,networkType:u,httpMd5:this.params.md5EndTime-this.params.md5StartTime,httpSign:this.params.signEndTime-this.params.signStartTime,httpFull:this.params.httpEndTime-this.params.httpStartTime,result:e?"Fail":"Success",errorType:g,errorCode:d,errorStatusCode:h,errorMessage:p,errorServiceName:f,errorRequestId:m}),!e||d&&p||(this.params.fullError=e?JSON.stringify(e):""),"getObject"===this.params.name&&(this.params.size=t?t.headers&&t.headers["content-length"]:-1),this.params.reqUrl)try{var y=/^http(s)?:\/\/(.*?)\//.exec(this.params.reqUrl);this.params.host=y[2]}catch(e){this.params.host=this.params.reqUrl}this.sendEvents()}},{key:"setParams",value:function(e){Object.assign(this.params,e)}},{key:"sendEvents",value:function(){if(!v.includes(this.params.name)||this.deepTracker){var e,t=(e=this.params.name,C.includes(e)?"cos_upload":k.includes(e)?"cos_download":"base_service"),n=function(e){var t={},n="Success"===e.result?["tracePlatform","cossdkVersion","region","bucket","appid","networkType","host","accelerate","requestPath","partNumber","size","name","result","tookTime","errorRequestId","retryTimes","reqUrl","customId","deviceType","devicePlatform","deviceName"]:["tracePlatform","cossdkVersion","region","networkType","host","accelerate","requestPath","size","httpMd5","httpSign","httpFull","name","result","tookTime","errorNode","errorCode","errorMessage","errorRequestId","errorStatusCode","errorServiceName","errorType","traceId","bucket","appid","partNumber","retryTimes","reqUrl","customId","fullError","deviceType","devicePlatform","deviceName"];for(var r in e)n.includes(r)&&(t[S(r)]=e[r]);return t}(this.params);this.beacon||(this.beacon=c(this.delay||5e3)),0===this.delay?this.beacon&&this.beacon.onDirectUserAction(t,n):this.beacon&&this.beacon.onUserAction(t,n)}}},{key:"generateSubTracker",value:function(t){return Object.assign(t,{parent:this,deepTracker:this.deepTracker,traceId:this.params.traceId,bucket:this.params.bucket,region:this.params.region,fileKey:this.params.requestPath,customId:this.params.customId,delay:this.delay}),new e(t)}}]),e}();e.exports=b},function(e){e.exports=JSON.parse('{"name":"cos-js-sdk-v5","version":"1.4.17","description":"JavaScript SDK for [腾讯云对象存储](https://cloud.tencent.com/product/cos)","main":"dist/cos-js-sdk-v5.js","types":"index.d.ts","scripts":{"prettier":"prettier --write src demo/demo.js test/test.js server/sts.js","server":"node server/sts.js","dev":"cross-env NODE_ENV=development webpack -w --mode=development","build":"cross-env NODE_ENV=production webpack --mode=production","cos-auth.min.js":"uglifyjs ./demo/common/cos-auth.js -o ./demo/common/cos-auth.min.js -c -m","test":"jest --coverage"},"repository":{"type":"git","url":"git+https://github.com/tencentyun/cos-js-sdk-v5.git"},"keywords":[],"author":"carsonxu","license":"ISC","bugs":{"url":"https://github.com/tencentyun/cos-js-sdk-v5/issues"},"homepage":"https://github.com/tencentyun/cos-js-sdk-v5#readme","dependencies":{"@xmldom/xmldom":"^0.8.6"},"devDependencies":{"@babel/core":"7.17.9","@babel/plugin-transform-runtime":"7.18.10","@babel/preset-env":"7.16.11","babel-loader":"8.2.5","body-parser":"^1.18.3","cross-env":"^5.2.0","express":"^4.16.4","jest":"^29.3.1","jest-environment-jsdom":"^29.3.1","jest-localstorage-mock":"^2.4.26","prettier":"2.8.8","qcloud-cos-sts":"^3.0.2","request":"^2.87.0","terser-webpack-plugin":"4.2.3","uglifyjs":"^2.4.11","webpack":"4.46.0","webpack-cli":"4.10.0"}}')},function(e,t){var n=function(e){var t={},n=function(e){return!t[e]&&(t[e]=[]),t[e]};e.on=function(e,t){n(e).push(t)},e.off=function(e,t){for(var r=n(e),o=r.length-1;o>=0;o--)t===r[o]&&r.splice(o,1)},e.emit=function(e,t){for(var r=n(e).map((function(e){return e})),o=0;o=0;n--){var o=r[n][2];(!o||o+2592e3=0;o--){var i=r[o];i[0]===e&&i[1]===t&&r.splice(o,1)}r.unshift([e,t,Math.round(Date.now()/1e3)]),r.length>n&&r.splice(n),l()}},removeUploadId:function(e){u.call(this),delete d.using[e];for(var t=r.length-1;t>=0;t--)r[t][1]===e&&r.splice(t,1);l()}};e.exports=d},function(e,t,n){var r=n(11);e.exports=r},function(e,t,n){"use strict";var r=n(1),o=n(8),i=n(25),a=n(26),s=n(28),c=n(7),u={AppId:"",SecretId:"",SecretKey:"",SecurityToken:"",ChunkRetryTimes:2,FileParallelLimit:3,ChunkParallelLimit:3,ChunkSize:1048576,SliceSize:1048576,CopyChunkParallelLimit:20,CopyChunkSize:10485760,CopySliceSize:10485760,MaxPartNumber:1e4,ProgressInterval:1e3,Domain:"",ServiceDomain:"",Protocol:"",CompatibilityMode:!1,ForcePathStyle:!1,UseRawKey:!1,Timeout:0,CorrectClockSkew:!0,SystemClockOffset:0,UploadCheckContentMd5:!1,UploadQueueSize:1e4,UploadAddMetaMd5:!1,UploadIdCacheLimit:50,UseAccelerate:!1,ForceSignHost:!0,EnableTracker:!1,DeepTracker:!1,TrackerDelay:5e3,CustomId:""},l=function(e){this.options=r.extend(r.clone(u),e||{}),this.options.FileParallelLimit=Math.max(1,this.options.FileParallelLimit),this.options.ChunkParallelLimit=Math.max(1,this.options.ChunkParallelLimit),this.options.ChunkRetryTimes=Math.max(0,this.options.ChunkRetryTimes),this.options.ChunkSize=Math.max(1048576,this.options.ChunkSize),this.options.CopyChunkParallelLimit=Math.max(1,this.options.CopyChunkParallelLimit),this.options.CopyChunkSize=Math.max(1048576,this.options.CopyChunkSize),this.options.CopySliceSize=Math.max(0,this.options.CopySliceSize),this.options.MaxPartNumber=Math.max(1024,Math.min(1e4,this.options.MaxPartNumber)),this.options.Timeout=Math.max(0,this.options.Timeout),this.options.AppId,this.options.SecretId&&this.options.SecretId.indexOf(" "),this.options.SecretKey&&this.options.SecretKey.indexOf(" "),r.isNode(),o.init(this),i.init(this)};a.init(l,i),s.init(l,i),l.util={md5:r.md5,xml2json:r.xml2json,json2xml:r.json2xml},l.getAuthorization=r.getAuth,l.version=c.version,e.exports=l},function(module,exports,__webpack_require__){(function(process,global,module){var __WEBPACK_AMD_DEFINE_RESULT__,_typeof=__webpack_require__(0);(function(){"use strict";var ERROR="input is invalid type",WINDOW="object"===("undefined"==typeof window?"undefined":_typeof(window)),root=WINDOW?window:{};root.JS_MD5_NO_WINDOW&&(WINDOW=!1);var WEB_WORKER=!WINDOW&&"object"===("undefined"==typeof self?"undefined":_typeof(self)),NODE_JS=!root.JS_MD5_NO_NODE_JS&&"object"===(void 0===process?"undefined":_typeof(process))&&process.versions&&process.versions.node;NODE_JS?root=global:WEB_WORKER&&(root=self);var COMMON_JS=!root.JS_MD5_NO_COMMON_JS&&"object"===_typeof(module)&&module.exports,AMD=__webpack_require__(14),ARRAY_BUFFER=!root.JS_MD5_NO_ARRAY_BUFFER&&"undefined"!=typeof ArrayBuffer,HEX_CHARS="0123456789abcdef".split(""),EXTRA=[128,32768,8388608,-2147483648],SHIFT=[0,8,16,24],OUTPUT_TYPES=["hex","array","digest","buffer","arrayBuffer","base64"],BASE64_ENCODE_CHAR="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""),blocks=[],buffer8;if(ARRAY_BUFFER){var buffer=new ArrayBuffer(68);buffer8=new Uint8Array(buffer),blocks=new Uint32Array(buffer)}!root.JS_MD5_NO_NODE_JS&&Array.isArray||(Array.isArray=function(e){return"[object Array]"===Object.prototype.toString.call(e)}),!ARRAY_BUFFER||!root.JS_MD5_NO_ARRAY_BUFFER_IS_VIEW&&ArrayBuffer.isView||(ArrayBuffer.isView=function(e){return"object"===_typeof(e)&&e.buffer&&e.buffer.constructor===ArrayBuffer});var createOutputMethod=function(e){return function(t,n){return new Md5(!0).update(t,n)[e]()}},createMethod=function(){var e=createOutputMethod("hex");NODE_JS&&(e=nodeWrap(e)),e.getCtx=e.create=function(){return new Md5},e.update=function(t){return e.create().update(t)};for(var t=0;t>6,s[r++]=128|63&n):n<55296||n>=57344?(s[r++]=224|n>>12,s[r++]=128|n>>6&63,s[r++]=128|63&n):(n=65536+((1023&n)<<10|1023&e.charCodeAt(++o)),s[r++]=240|n>>18,s[r++]=128|n>>12&63,s[r++]=128|n>>6&63,s[r++]=128|63&n);else for(r=this.start;o>2]|=n<>2]|=(192|n>>6)<>2]|=(128|63&n)<=57344?(a[r>>2]|=(224|n>>12)<>2]|=(128|n>>6&63)<>2]|=(128|63&n)<>2]|=(240|n>>18)<>2]|=(128|n>>12&63)<>2]|=(128|n>>6&63)<>2]|=(128|63&n)<=64?(this.start=r-64,this.hash(),this.hashed=!0):this.start=r}return this.bytes>4294967295&&(this.hBytes+=this.bytes/4294967296<<0,this.bytes=this.bytes%4294967296),this}},Md5.prototype.finalize=function(){if(!this.finalized){this.finalized=!0;var e=this.blocks,t=this.lastByteIndex;e[t>>2]|=EXTRA[3&t],t>=56&&(this.hashed||this.hash(),e[0]=e[16],e[16]=e[1]=e[2]=e[3]=e[4]=e[5]=e[6]=e[7]=e[8]=e[9]=e[10]=e[11]=e[12]=e[13]=e[14]=e[15]=0),e[14]=this.bytes<<3,e[15]=this.hBytes<<3|this.bytes>>>29,this.hash()}},Md5.prototype.hash=function(){var e,t,n,r,o,i,a=this.blocks;this.first?t=((t=((e=((e=a[0]-680876937)<<7|e>>>25)-271733879<<0)^(n=((n=(-271733879^(r=((r=(-1732584194^2004318071&e)+a[1]-117830708)<<12|r>>>20)+e<<0)&(-271733879^e))+a[2]-1126478375)<<17|n>>>15)+r<<0)&(r^e))+a[3]-1316259209)<<22|t>>>10)+n<<0:(e=this.h0,t=this.h1,n=this.h2,t=((t+=((e=((e+=((r=this.h3)^t&(n^r))+a[0]-680876936)<<7|e>>>25)+t<<0)^(n=((n+=(t^(r=((r+=(n^e&(t^n))+a[1]-389564586)<<12|r>>>20)+e<<0)&(e^t))+a[2]+606105819)<<17|n>>>15)+r<<0)&(r^e))+a[3]-1044525330)<<22|t>>>10)+n<<0),t=((t+=((e=((e+=(r^t&(n^r))+a[4]-176418897)<<7|e>>>25)+t<<0)^(n=((n+=(t^(r=((r+=(n^e&(t^n))+a[5]+1200080426)<<12|r>>>20)+e<<0)&(e^t))+a[6]-1473231341)<<17|n>>>15)+r<<0)&(r^e))+a[7]-45705983)<<22|t>>>10)+n<<0,t=((t+=((e=((e+=(r^t&(n^r))+a[8]+1770035416)<<7|e>>>25)+t<<0)^(n=((n+=(t^(r=((r+=(n^e&(t^n))+a[9]-1958414417)<<12|r>>>20)+e<<0)&(e^t))+a[10]-42063)<<17|n>>>15)+r<<0)&(r^e))+a[11]-1990404162)<<22|t>>>10)+n<<0,t=((t+=((e=((e+=(r^t&(n^r))+a[12]+1804603682)<<7|e>>>25)+t<<0)^(n=((n+=(t^(r=((r+=(n^e&(t^n))+a[13]-40341101)<<12|r>>>20)+e<<0)&(e^t))+a[14]-1502002290)<<17|n>>>15)+r<<0)&(r^e))+a[15]+1236535329)<<22|t>>>10)+n<<0,t=((t+=((r=((r+=(t^n&((e=((e+=(n^r&(t^n))+a[1]-165796510)<<5|e>>>27)+t<<0)^t))+a[6]-1069501632)<<9|r>>>23)+e<<0)^e&((n=((n+=(e^t&(r^e))+a[11]+643717713)<<14|n>>>18)+r<<0)^r))+a[0]-373897302)<<20|t>>>12)+n<<0,t=((t+=((r=((r+=(t^n&((e=((e+=(n^r&(t^n))+a[5]-701558691)<<5|e>>>27)+t<<0)^t))+a[10]+38016083)<<9|r>>>23)+e<<0)^e&((n=((n+=(e^t&(r^e))+a[15]-660478335)<<14|n>>>18)+r<<0)^r))+a[4]-405537848)<<20|t>>>12)+n<<0,t=((t+=((r=((r+=(t^n&((e=((e+=(n^r&(t^n))+a[9]+568446438)<<5|e>>>27)+t<<0)^t))+a[14]-1019803690)<<9|r>>>23)+e<<0)^e&((n=((n+=(e^t&(r^e))+a[3]-187363961)<<14|n>>>18)+r<<0)^r))+a[8]+1163531501)<<20|t>>>12)+n<<0,t=((t+=((r=((r+=(t^n&((e=((e+=(n^r&(t^n))+a[13]-1444681467)<<5|e>>>27)+t<<0)^t))+a[2]-51403784)<<9|r>>>23)+e<<0)^e&((n=((n+=(e^t&(r^e))+a[7]+1735328473)<<14|n>>>18)+r<<0)^r))+a[12]-1926607734)<<20|t>>>12)+n<<0,t=((t+=((i=(r=((r+=((o=t^n)^(e=((e+=(o^r)+a[5]-378558)<<4|e>>>28)+t<<0))+a[8]-2022574463)<<11|r>>>21)+e<<0)^e)^(n=((n+=(i^t)+a[11]+1839030562)<<16|n>>>16)+r<<0))+a[14]-35309556)<<23|t>>>9)+n<<0,t=((t+=((i=(r=((r+=((o=t^n)^(e=((e+=(o^r)+a[1]-1530992060)<<4|e>>>28)+t<<0))+a[4]+1272893353)<<11|r>>>21)+e<<0)^e)^(n=((n+=(i^t)+a[7]-155497632)<<16|n>>>16)+r<<0))+a[10]-1094730640)<<23|t>>>9)+n<<0,t=((t+=((i=(r=((r+=((o=t^n)^(e=((e+=(o^r)+a[13]+681279174)<<4|e>>>28)+t<<0))+a[0]-358537222)<<11|r>>>21)+e<<0)^e)^(n=((n+=(i^t)+a[3]-722521979)<<16|n>>>16)+r<<0))+a[6]+76029189)<<23|t>>>9)+n<<0,t=((t+=((i=(r=((r+=((o=t^n)^(e=((e+=(o^r)+a[9]-640364487)<<4|e>>>28)+t<<0))+a[12]-421815835)<<11|r>>>21)+e<<0)^e)^(n=((n+=(i^t)+a[15]+530742520)<<16|n>>>16)+r<<0))+a[2]-995338651)<<23|t>>>9)+n<<0,t=((t+=((r=((r+=(t^((e=((e+=(n^(t|~r))+a[0]-198630844)<<6|e>>>26)+t<<0)|~n))+a[7]+1126891415)<<10|r>>>22)+e<<0)^((n=((n+=(e^(r|~t))+a[14]-1416354905)<<15|n>>>17)+r<<0)|~e))+a[5]-57434055)<<21|t>>>11)+n<<0,t=((t+=((r=((r+=(t^((e=((e+=(n^(t|~r))+a[12]+1700485571)<<6|e>>>26)+t<<0)|~n))+a[3]-1894986606)<<10|r>>>22)+e<<0)^((n=((n+=(e^(r|~t))+a[10]-1051523)<<15|n>>>17)+r<<0)|~e))+a[1]-2054922799)<<21|t>>>11)+n<<0,t=((t+=((r=((r+=(t^((e=((e+=(n^(t|~r))+a[8]+1873313359)<<6|e>>>26)+t<<0)|~n))+a[15]-30611744)<<10|r>>>22)+e<<0)^((n=((n+=(e^(r|~t))+a[6]-1560198380)<<15|n>>>17)+r<<0)|~e))+a[13]+1309151649)<<21|t>>>11)+n<<0,t=((t+=((r=((r+=(t^((e=((e+=(n^(t|~r))+a[4]-145523070)<<6|e>>>26)+t<<0)|~n))+a[11]-1120210379)<<10|r>>>22)+e<<0)^((n=((n+=(e^(r|~t))+a[2]+718787259)<<15|n>>>17)+r<<0)|~e))+a[9]-343485551)<<21|t>>>11)+n<<0,this.first?(this.h0=e+1732584193<<0,this.h1=t-271733879<<0,this.h2=n-1732584194<<0,this.h3=r+271733878<<0,this.first=!1):(this.h0=this.h0+e<<0,this.h1=this.h1+t<<0,this.h2=this.h2+n<<0,this.h3=this.h3+r<<0)},Md5.prototype.hex=function(){this.finalize();var e=this.h0,t=this.h1,n=this.h2,r=this.h3;return HEX_CHARS[e>>4&15]+HEX_CHARS[15&e]+HEX_CHARS[e>>12&15]+HEX_CHARS[e>>8&15]+HEX_CHARS[e>>20&15]+HEX_CHARS[e>>16&15]+HEX_CHARS[e>>28&15]+HEX_CHARS[e>>24&15]+HEX_CHARS[t>>4&15]+HEX_CHARS[15&t]+HEX_CHARS[t>>12&15]+HEX_CHARS[t>>8&15]+HEX_CHARS[t>>20&15]+HEX_CHARS[t>>16&15]+HEX_CHARS[t>>28&15]+HEX_CHARS[t>>24&15]+HEX_CHARS[n>>4&15]+HEX_CHARS[15&n]+HEX_CHARS[n>>12&15]+HEX_CHARS[n>>8&15]+HEX_CHARS[n>>20&15]+HEX_CHARS[n>>16&15]+HEX_CHARS[n>>28&15]+HEX_CHARS[n>>24&15]+HEX_CHARS[r>>4&15]+HEX_CHARS[15&r]+HEX_CHARS[r>>12&15]+HEX_CHARS[r>>8&15]+HEX_CHARS[r>>20&15]+HEX_CHARS[r>>16&15]+HEX_CHARS[r>>28&15]+HEX_CHARS[r>>24&15]},Md5.prototype.toString=Md5.prototype.hex,Md5.prototype.digest=function(e){if("hex"===e)return this.hex();this.finalize();var t=this.h0,n=this.h1,r=this.h2,o=this.h3;return[255&t,t>>8&255,t>>16&255,t>>24&255,255&n,n>>8&255,n>>16&255,n>>24&255,255&r,r>>8&255,r>>16&255,r>>24&255,255&o,o>>8&255,o>>16&255,o>>24&255]},Md5.prototype.array=Md5.prototype.digest,Md5.prototype.arrayBuffer=function(){this.finalize();var e=new ArrayBuffer(16),t=new Uint32Array(e);return t[0]=this.h0,t[1]=this.h1,t[2]=this.h2,t[3]=this.h3,e},Md5.prototype.buffer=Md5.prototype.arrayBuffer,Md5.prototype.base64=function(){for(var e,t,n,r="",o=this.array(),i=0;i<15;)e=o[i++],t=o[i++],n=o[i++],r+=BASE64_ENCODE_CHAR[e>>>2]+BASE64_ENCODE_CHAR[63&(e<<4|t>>>4)]+BASE64_ENCODE_CHAR[63&(t<<2|n>>>6)]+BASE64_ENCODE_CHAR[63&n];return e=o[i],r+=BASE64_ENCODE_CHAR[e>>>2]+BASE64_ENCODE_CHAR[e<<4&63]+"=="};var exports=createMethod();COMMON_JS?module.exports=exports:(root.md5=exports,AMD&&(__WEBPACK_AMD_DEFINE_RESULT__=function(){return exports}.call(exports,__webpack_require__,exports,module),void 0===__WEBPACK_AMD_DEFINE_RESULT__||(module.exports=__WEBPACK_AMD_DEFINE_RESULT__)))})()}).call(this,__webpack_require__(3),__webpack_require__(13),__webpack_require__(4)(module))},function(e,t){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(e){"object"==typeof window&&(n=window)}e.exports=n},function(e,t){(function(t){e.exports=t}).call(this,{})},function(e,t,n){(function(e){var t,r,o,i,a,s,c,u=n(0),l=l||function(e,t){var n={},r=n.lib={},o=function(){},i=r.Base={extend:function(e){o.prototype=this;var t=new o;return e&&t.mixIn(e),t.hasOwnProperty("init")||(t.init=function(){t.$super.init.apply(this,arguments)}),t.init.prototype=t,t.$super=this,t},create:function(){var e=this.extend();return e.init.apply(e,arguments),e},init:function(){},mixIn:function(e){for(var t in e)e.hasOwnProperty(t)&&(this[t]=e[t]);e.hasOwnProperty("toString")&&(this.toString=e.toString)},clone:function(){return this.init.prototype.extend(this)}},a=r.WordArray=i.extend({init:function(e,t){e=this.words=e||[],this.sigBytes=null!=t?t:4*e.length},toString:function(e){return(e||c).stringify(this)},concat:function(e){var t=this.words,n=e.words,r=this.sigBytes;if(e=e.sigBytes,this.clamp(),r%4)for(var o=0;o>>2]|=(n[o>>>2]>>>24-o%4*8&255)<<24-(r+o)%4*8;else if(65535>>2]=n[o>>>2];else t.push.apply(t,n);return this.sigBytes+=e,this},clamp:function(){var t=this.words,n=this.sigBytes;t[n>>>2]&=4294967295<<32-n%4*8,t.length=e.ceil(n/4)},clone:function(){var e=i.clone.call(this);return e.words=this.words.slice(0),e},random:function(t){for(var n=[],r=0;r>>2]>>>24-r%4*8&255;n.push((o>>>4).toString(16)),n.push((15&o).toString(16))}return n.join("")},parse:function(e){for(var t=e.length,n=[],r=0;r>>3]|=parseInt(e.substr(r,2),16)<<24-r%8*4;return new a.init(n,t/2)}},u=s.Latin1={stringify:function(e){var t=e.words;e=e.sigBytes;for(var n=[],r=0;r>>2]>>>24-r%4*8&255));return n.join("")},parse:function(e){for(var t=e.length,n=[],r=0;r>>2]|=(255&e.charCodeAt(r))<<24-r%4*8;return new a.init(n,t)}},l=s.Utf8={stringify:function(e){try{return decodeURIComponent(escape(u.stringify(e)))}catch(e){throw Error("Malformed UTF-8 data")}},parse:function(e){return u.parse(unescape(encodeURIComponent(e)))}},d=r.BufferedBlockAlgorithm=i.extend({reset:function(){this._data=new a.init,this._nDataBytes=0},_append:function(e){"string"==typeof e&&(e=l.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(t){var n=this._data,r=n.words,o=n.sigBytes,i=this.blockSize,s=o/(4*i);if(t=(s=t?e.ceil(s):e.max((0|s)-this._minBufferSize,0))*i,o=e.min(4*t,o),t){for(var c=0;cu;u++){if(16>u)i[u]=0|e[t+u];else{var l=i[u-3]^i[u-8]^i[u-14]^i[u-16];i[u]=l<<1|l>>>31}l=(r<<5|r>>>27)+c+i[u],l=20>u?l+(1518500249+(o&a|~o&s)):40>u?l+(1859775393+(o^a^s)):60>u?l+((o&a|o&s|a&s)-1894007588):l+((o^a^s)-899497514),c=s,s=a,a=o<<30|o>>>2,o=r,r=l}n[0]=n[0]+r|0,n[1]=n[1]+o|0,n[2]=n[2]+a|0,n[3]=n[3]+s|0,n[4]=n[4]+c|0},_doFinalize:function(){var e=this._data,t=e.words,n=8*this._nDataBytes,r=8*e.sigBytes;return t[r>>>5]|=128<<24-r%32,t[14+(r+64>>>9<<4)]=Math.floor(n/4294967296),t[15+(r+64>>>9<<4)]=n,e.sigBytes=4*t.length,this._process(),this._hash},clone:function(){var e=o.clone.call(this);return e._hash=this._hash.clone(),e}}),t.SHA1=o._createHelper(a),t.HmacSHA1=o._createHmacHelper(a),function(){var e=l,t=e.enc.Utf8;e.algo.HMAC=e.lib.Base.extend({init:function(e,n){e=this._hasher=new e.init,"string"==typeof n&&(n=t.parse(n));var r=e.blockSize,o=4*r;n.sigBytes>o&&(n=e.finalize(n)),n.clamp();for(var i=this._oKey=n.clone(),a=this._iKey=n.clone(),s=i.words,c=a.words,u=0;u>>2]>>>24-i%4*8&255)<<16|(t[i+1>>>2]>>>24-(i+1)%4*8&255)<<8|t[i+2>>>2]>>>24-(i+2)%4*8&255,s=0;s<4&&i+.75*s>>6*(3-s)&63));var c=r.charAt(64);if(c)for(;o.length%4;)o.push(c);return o.join("")},parse:function(e){var t=e.length,n=this._map,r=n.charAt(64);if(r){var o=e.indexOf(r);-1!=o&&(t=o)}for(var i=[],a=0,s=0;s>>6-s%4*2;i[a>>>2]|=(u|l)<<24-a%4*8,a++}return c.create(i,a)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="},"object"===u(e)?e.exports=l:window.CryptoJS=l}).call(this,n(4)(e))},function(e,t,n){var r=n(17).DOMParser,o=function(){this.version="1.3.5";var e={mergeCDATA:!0,normalize:!0,stripElemPrefix:!0},t=new RegExp(/(?!xmlns)^.*:/);new RegExp(/^\s+|\s+$/g);return this.grokType=function(e){return/^\s*$/.test(e)?null:/^(?:true|false)$/i.test(e)?"true"===e.toLowerCase():isFinite(e)?parseFloat(e):e},this.parseString=function(e,t){if(e){var n=this.stringToXML(e);return n.getElementsByTagName("parsererror").length?null:this.parseXML(n,t)}return null},this.parseXML=function(n,r){for(var i in r)e[i]=r[i];var a={},s=0,c="";if(n.childNodes.length)for(var u,l,d,p=0;p=t+n||t?new java.lang.String(e,t,n)+"":e}function g(e,t){e.currentElement?e.currentElement.appendChild(t):e.doc.appendChild(t)}p.prototype.parseFromString=function(e,t){var n=this.options,r=new l,o=n.domBuilder||new f,a=n.errorHandler,s=n.locator,u=n.xmlns||{},p=/\/x?html?$/.test(t),h=p?i.HTML_ENTITIES:i.XML_ENTITIES;s&&o.setDocumentLocator(s),r.errorHandler=function(e,t,n){if(!e){if(t instanceof f)return t;e=t}var r={},o=e instanceof Function;function i(t){var i=e[t];!i&&o&&(i=2==e.length?function(n){e(t,n)}:e),r[t]=i&&function(e){i("[xmldom "+t+"]\t"+e+function(e){if(e)return"\n@"+(e.systemId||"")+"#[line:"+e.lineNumber+",col:"+e.columnNumber+"]"}(n))}||function(){}}return n=n||{},i("warning"),i("error"),i("fatalError"),r}(a,o,s),r.domBuilder=n.domBuilder||o,p&&(u[""]=c.HTML),u.xml=u.xml||c.XML;var m=n.normalizeLineEndings||d;return e&&"string"==typeof e?r.parse(m(e),u,h):r.errorHandler.error("invalid doc source"),o.doc},f.prototype={startDocument:function(){this.doc=(new s).createDocument(null,null,null),this.locator&&(this.doc.documentURI=this.locator.systemId)},startElement:function(e,t,n,r){var o=this.doc,i=o.createElementNS(e,n||t),a=r.length;g(this,i),this.currentElement=i,this.locator&&h(this.locator,i);for(var s=0;s",lt:"<",quot:'"'}),t.HTML_ENTITIES=r({lt:"<",gt:">",amp:"&",quot:'"',apos:"'",Agrave:"À",Aacute:"Á",Acirc:"Â",Atilde:"Ã",Auml:"Ä",Aring:"Å",AElig:"Æ",Ccedil:"Ç",Egrave:"È",Eacute:"É",Ecirc:"Ê",Euml:"Ë",Igrave:"Ì",Iacute:"Í",Icirc:"Î",Iuml:"Ï",ETH:"Ð",Ntilde:"Ñ",Ograve:"Ò",Oacute:"Ó",Ocirc:"Ô",Otilde:"Õ",Ouml:"Ö",Oslash:"Ø",Ugrave:"Ù",Uacute:"Ú",Ucirc:"Û",Uuml:"Ü",Yacute:"Ý",THORN:"Þ",szlig:"ß",agrave:"à",aacute:"á",acirc:"â",atilde:"ã",auml:"ä",aring:"å",aelig:"æ",ccedil:"ç",egrave:"è",eacute:"é",ecirc:"ê",euml:"ë",igrave:"ì",iacute:"í",icirc:"î",iuml:"ï",eth:"ð",ntilde:"ñ",ograve:"ò",oacute:"ó",ocirc:"ô",otilde:"õ",ouml:"ö",oslash:"ø",ugrave:"ù",uacute:"ú",ucirc:"û",uuml:"ü",yacute:"ý",thorn:"þ",yuml:"ÿ",nbsp:" ",iexcl:"¡",cent:"¢",pound:"£",curren:"¤",yen:"¥",brvbar:"¦",sect:"§",uml:"¨",copy:"©",ordf:"ª",laquo:"«",not:"¬",shy:"­­",reg:"®",macr:"¯",deg:"°",plusmn:"±",sup2:"²",sup3:"³",acute:"´",micro:"µ",para:"¶",middot:"·",cedil:"¸",sup1:"¹",ordm:"º",raquo:"»",frac14:"¼",frac12:"½",frac34:"¾",iquest:"¿",times:"×",divide:"÷",forall:"∀",part:"∂",exist:"∃",empty:"∅",nabla:"∇",isin:"∈",notin:"∉",ni:"∋",prod:"∏",sum:"∑",minus:"−",lowast:"∗",radic:"√",prop:"∝",infin:"∞",ang:"∠",and:"∧",or:"∨",cap:"∩",cup:"∪",int:"∫",there4:"∴",sim:"∼",cong:"≅",asymp:"≈",ne:"≠",equiv:"≡",le:"≤",ge:"≥",sub:"⊂",sup:"⊃",nsub:"⊄",sube:"⊆",supe:"⊇",oplus:"⊕",otimes:"⊗",perp:"⊥",sdot:"⋅",Alpha:"Α",Beta:"Β",Gamma:"Γ",Delta:"Δ",Epsilon:"Ε",Zeta:"Ζ",Eta:"Η",Theta:"Θ",Iota:"Ι",Kappa:"Κ",Lambda:"Λ",Mu:"Μ",Nu:"Ν",Xi:"Ξ",Omicron:"Ο",Pi:"Π",Rho:"Ρ",Sigma:"Σ",Tau:"Τ",Upsilon:"Υ",Phi:"Φ",Chi:"Χ",Psi:"Ψ",Omega:"Ω",alpha:"α",beta:"β",gamma:"γ",delta:"δ",epsilon:"ε",zeta:"ζ",eta:"η",theta:"θ",iota:"ι",kappa:"κ",lambda:"λ",mu:"μ",nu:"ν",xi:"ξ",omicron:"ο",pi:"π",rho:"ρ",sigmaf:"ς",sigma:"σ",tau:"τ",upsilon:"υ",phi:"φ",chi:"χ",psi:"ψ",omega:"ω",thetasym:"ϑ",upsih:"ϒ",piv:"ϖ",OElig:"Œ",oelig:"œ",Scaron:"Š",scaron:"š",Yuml:"Ÿ",fnof:"ƒ",circ:"ˆ",tilde:"˜",ensp:" ",emsp:" ",thinsp:" ",zwnj:"‌",zwj:"‍",lrm:"‎",rlm:"‏",ndash:"–",mdash:"—",lsquo:"‘",rsquo:"’",sbquo:"‚",ldquo:"“",rdquo:"”",bdquo:"„",dagger:"†",Dagger:"‡",bull:"•",hellip:"…",permil:"‰",prime:"′",Prime:"″",lsaquo:"‹",rsaquo:"›",oline:"‾",euro:"€",trade:"™",larr:"←",uarr:"↑",rarr:"→",darr:"↓",harr:"↔",crarr:"↵",lceil:"⌈",rceil:"⌉",lfloor:"⌊",rfloor:"⌋",loz:"◊",spades:"♠",clubs:"♣",hearts:"♥",diams:"♦"}),t.entityMap=t.HTML_ENTITIES},function(e,t,n){var r=n(2).NAMESPACE,o=/[A-Z_a-z\xC0-\xD6\xD8-\xF6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/,i=new RegExp("[\\-\\.0-9"+o.source.slice(1,-1)+"\\u00B7\\u0300-\\u036F\\u203F-\\u2040]"),a=new RegExp("^"+o.source+i.source+"*(?::"+o.source+i.source+"*)?$");function s(e,t){this.message=e,this.locator=t,Error.captureStackTrace&&Error.captureStackTrace(this,s)}function c(){}function u(e,t){return t.lineNumber=e.lineNumber,t.columnNumber=e.columnNumber,t}function l(e,t,n,o,i,a){function s(e,t,r){n.attributeNames.hasOwnProperty(e)&&a.fatalError("Attribute "+e+" redefined"),n.addValue(e,t.replace(/[\t\n\r]/g," ").replace(/&#?\w+;/g,i),r)}for(var c,u=++t,l=0;;){var d=e.charAt(u);switch(d){case"=":if(1===l)c=e.slice(t,u),l=3;else{if(2!==l)throw new Error("attribute equal must after attrName");l=3}break;case"'":case'"':if(3===l||1===l){if(1===l&&(a.warning('attribute value must after "="'),c=e.slice(t,u)),t=u+1,!((u=e.indexOf(d,t))>0))throw new Error("attribute value no end '"+d+"' match");s(c,p=e.slice(t,u),t-1),l=5}else{if(4!=l)throw new Error('attribute value must after "="');s(c,p=e.slice(t,u),t),a.warning('attribute "'+c+'" missed start quot('+d+")!!"),t=u+1,l=5}break;case"/":switch(l){case 0:n.setTagName(e.slice(t,u));case 5:case 6:case 7:l=7,n.closed=!0;case 4:case 1:case 2:break;default:throw new Error("attribute invalid close char('/')")}break;case"":return a.error("unexpected end of input"),0==l&&n.setTagName(e.slice(t,u)),u;case">":switch(l){case 0:n.setTagName(e.slice(t,u));case 5:case 6:case 7:break;case 4:case 1:"/"===(p=e.slice(t,u)).slice(-1)&&(n.closed=!0,p=p.slice(0,-1));case 2:2===l&&(p=c),4==l?(a.warning('attribute "'+p+'" missed quot(")!'),s(c,p,t)):(r.isHTML(o[""])&&p.match(/^(?:disabled|checked|selected)$/i)||a.warning('attribute "'+p+'" missed value!! "'+p+'" instead!!'),s(p,p,t));break;case 3:throw new Error("attribute value missed!!")}return u;case"€":d=" ";default:if(d<=" ")switch(l){case 0:n.setTagName(e.slice(t,u)),l=6;break;case 1:c=e.slice(t,u),l=2;break;case 4:var p=e.slice(t,u);a.warning('attribute "'+p+'" missed quot(")!!'),s(c,p,t);case 5:l=6}else switch(l){case 2:n.tagName;r.isHTML(o[""])&&c.match(/^(?:disabled|checked|selected)$/i)||a.warning('attribute "'+c+'" missed value!! "'+c+'" instead2!!'),s(c,c,t),t=u,l=1;break;case 5:a.warning('attribute space is required"'+c+'"!!');case 6:l=1,t=u;break;case 3:l=4,t=u;break;case 7:throw new Error("elements closed character '/' and '>' must be connected to")}}u++}}function d(e,t,n){for(var o=e.tagName,i=null,a=e.length;a--;){var s=e[a],c=s.qName,u=s.value;if((f=c.indexOf(":"))>0)var l=s.prefix=c.slice(0,f),d=c.slice(f+1),p="xmlns"===l&&d;else d=c,l=null,p="xmlns"===c&&"";s.localName=d,!1!==p&&(null==i&&(i={},h(n,n={})),n[p]=i[p]=u,s.uri=r.XMLNS,t.startPrefixMapping(p,u))}for(a=e.length;a--;){(l=(s=e[a]).prefix)&&("xml"===l&&(s.uri=r.XML),"xmlns"!==l&&(s.uri=n[l||""]))}var f;(f=o.indexOf(":"))>0?(l=e.prefix=o.slice(0,f),d=e.localName=o.slice(f+1)):(l=null,d=e.localName=o);var m=e.uri=n[l||""];if(t.startElement(m,d,o,e),!e.closed)return e.currentNSMap=n,e.localNSMap=i,!0;if(t.endElement(m,d,o),i)for(l in i)Object.prototype.hasOwnProperty.call(i,l)&&t.endPrefixMapping(l)}function p(e,t,n,r,o){if(/^(?:script|textarea)$/i.test(n)){var i=e.indexOf("",t),a=e.substring(t+1,i);if(/[&<]/.test(a))return/^script$/i.test(n)?(o.characters(a,0,a.length),i):(a=a.replace(/&#?\w+;/g,r),o.characters(a,0,a.length),i)}return t+1}function f(e,t,n,r){var o=r[n];return null==o&&((o=e.lastIndexOf(""))t?(n.comment(e,t+4,o-t-4),o+3):(r.error("Unclosed comment"),-1):-1;if("CDATA["==e.substr(t+3,6)){var o=e.indexOf("]]>",t+9);return n.startCDATA(),n.characters(e,t+9,o-t-9),n.endCDATA(),o+3}var i=function(e,t){var n,r=[],o=/'[^']+'|"[^"]+"|[^\s<>\/=]+=?|(\/?\s*>|<)/g;o.lastIndex=t,o.exec(e);for(;n=o.exec(e);)if(r.push(n),n[1])return r}(e,t),a=i.length;if(a>1&&/!doctype/i.test(i[0][0])){var s=i[1][0],c=!1,u=!1;a>3&&(/^public$/i.test(i[2][0])?(c=i[3][0],u=a>4&&i[4][0]):/^system$/i.test(i[2][0])&&(u=i[3][0]));var l=i[a-1];return n.startDTD(s,c,u),n.endDTD(),l.index+l[0].length}return-1}function g(e,t,n){var r=e.indexOf("?>",t);if(r){var o=e.substring(t,r).match(/^<\?(\S*)\s*([\s\S]*?)\s*$/);if(o){o[0].length;return n.processingInstruction(o[1],o[2]),r+2}return-1}return-1}function y(){this.attributeNames={}}s.prototype=new Error,s.prototype.name=s.name,c.prototype={parse:function(e,t,n){var o=this.domBuilder;o.startDocument(),h(t,t={}),function(e,t,n,o,i){function a(e){if(e>65535){var t=55296+((e-=65536)>>10),n=56320+(1023&e);return String.fromCharCode(t,n)}return String.fromCharCode(e)}function c(e){var t=e.slice(1,-1);return Object.hasOwnProperty.call(n,t)?n[t]:"#"===t.charAt(0)?a(parseInt(t.substr(1).replace("x","0x"))):(i.error("entity not found:"+e),e)}function h(t){if(t>E){var n=e.substring(E,t).replace(/&#?\w+;/g,c);b&&v(E),o.characters(n,0,t-E),E=t}}function v(t,n){for(;t>=k&&(n=S.exec(e));)C=n.index,k=C+n[0].length,b.lineNumber++;b.columnNumber=t-C+1}var C=0,k=0,S=/.*(?:\r\n?|\n)|.*$/g,b=o.locator,T=[{currentNSMap:t}],R={},E=0;for(;;){try{var w=e.indexOf("<",E);if(w<0){if(!e.substr(E).match(/^\s*$/)){var x=o.doc,A=x.createTextNode(e.substr(E));x.appendChild(A),o.currentElement=A}return}switch(w>E&&h(w),e.charAt(w+1)){case"/":var I=e.indexOf(">",w+3),O=e.substring(w+2,I).replace(/[ \t\n\r]+$/g,""),B=T.pop();I<0?(O=e.substring(w+2).replace(/[\s<].*/,""),i.error("end tag name: "+O+" is not complete:"+B.tagName),I=w+1+O.length):O.match(/\sE?E=I:h(Math.max(w,E)+1)}}(e,t,n,o,this.errorHandler),o.endDocument()}},y.prototype={setTagName:function(e){if(!a.test(e))throw new Error("invalid tagName:"+e);this.tagName=e},addValue:function(e,t,n){if(!a.test(e))throw new Error("invalid attribute:"+e);this.attributeNames[e]=this.length,this[this.length++]={qName:e,value:t,offset:n}},length:0,getLocalName:function(e){return this[e].localName},getLocator:function(e){return this[e].locator},getQName:function(e){return this[e].qName},getURI:function(e){return this[e].uri},getValue:function(e){return this[e].value}},t.XMLReader=c,t.ParseError=s},function(e,t,n){var r=n(0),o="a-zA-Z_À-ÖØ-öø-ÿͰ-ͽͿ-῿‌-‍⁰-↏Ⰰ-⿿、-퟿豈-﷏ﷰ-�",i=new RegExp("^([^"+o+"])|^((x|X)(m|M)(l|L))|([^"+o+"-.0-9·̀-ͯ‿⁀])","g"),a=/[^\x09\x0A\x0D\x20-\xFF\x85\xA0-\uD7FF\uE000-\uFDCF\uFDE0-\uFFFD]/gm,s=function(e){var t=[];if(e instanceof Object)for(var n in e)e.hasOwnProperty(n)&&t.push(n);return t},c=function(e,t){var n=function(e,n,r,o,a){var s=void 0!==t.indent?t.indent:"\t",c=t.prettyPrint?"\n"+new Array(o).join(s):"";t.removeIllegalNameCharacters&&(e=e.replace(i,"_"));var u=[c,"<",e,r||""];return n&&n.length>0?(u.push(">"),u.push(n),a&&u.push(c),u.push("")):u.push("/>"),u.join("")};return function e(o,i,c){var u=r(o);switch((Array.isArray?Array.isArray(o):o instanceof Array)?u="array":o instanceof Date&&(u="date"),u){case"array":var l=[];return o.map((function(t){l.push(e(t,1,c+1))})),t.prettyPrint&&l.push("\n"),l.join("");case"date":return o.toJSON?o.toJSON():o+"";case"object":var d=[];for(var p in o)if(o.hasOwnProperty(p))if(o[p]instanceof Array)for(var f=0;f0&&d.push("\n"),d.join("");case"function":return o();default:return t.escape?(""+o).replace(/&/g,"&").replace(//g,">").replace(/'/g,"'").replace(/"/g,""").replace(a,""):""+o}}(e,0,0)},u=function(e){var t=['"),t.join("")};e.exports=function(e,t){if(t||(t={xmlHeader:{standalone:!0},prettyPrint:!0,indent:" ",escape:!0}),"string"==typeof e)try{e=JSON.parse(e.toString())}catch(e){return!1}var n="",o="";return t&&("object"==r(t)?(t.xmlHeader&&(n=u(!!t.xmlHeader.standalone)),void 0!==t.docType&&(o="")):n=u()),[n,(t=t||{}).prettyPrint&&o?"\n":"",o,c(e,t)].join("").replace(/\n{2,}/g,"\n").replace(/\s+$/g,"")}},function(e,t){e.exports=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},e.exports.__esModule=!0,e.exports.default=e.exports},function(e,t){function n(e,t){for(var n=0;n0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]60*this.strategy.requestInterval*1e3},e.prototype.getUploadUrl=function(){return this.strategy.httpsUploadUrl+"?appkey="+this.appkey},e.prototype.isBlackEvent=function(e){return-1!=this.strategy.blacklist.indexOf(e)},e.prototype.isEventUpOnOff=function(){return this.strategy.isEventUpOnOff},e.prototype.isSampleEvent=function(e){return!!Object.prototype.hasOwnProperty.call(this.realSample,e)&&this.realSample[e]this.duration)return this.createSession();t=r.sessionId,n=r.sessionStart,this.getSessionStackDepth=0}catch(e){}return{sessionId:t,sessionStart:n}},e.prototype.createSession=function(){var e=Date.now(),t={sessionId:this.appkey+"_"+e.toString(),sessionStart:e};this.storage.setItem(v,JSON.stringify(t)),this.storage.setItem(a,e.toString());var n="is_new_user",r=this.storage.getItem(n);return this.getSessionStackDepth<=1&&this.beacon.onDirectUserAction("rqd_applaunched",{A21:r?"N":"Y"}),this.storage.setItem(n,JSON.stringify(!1)),t},e}();function k(){var e=navigator.userAgent,t=e.indexOf("compatible")>-1&&e.indexOf("MSIE")>-1,n=e.indexOf("Edge")>-1&&!t,r=e.indexOf("Trident")>-1&&e.indexOf("rv:11.0")>-1;if(t){new RegExp("MSIE (\\d+\\.\\d+);").test(e);var o=parseFloat(RegExp.$1);return 7==o?7:8==o?8:9==o?9:10==o?10:6}return n?-2:r?11:-1}var S,b,T=function(){return(T=Object.assign||function(e){for(var t,n=1,r=arguments.length;n0||!window.indexedDB||/X5Lite/.test(navigator.userAgent)?(this.store=new A(t),this.dbEventCount=this.store.getCount()):(this.store=new x(e),this.getCount().then((function(e){n.dbEventCount=e})).catch((function(e){})))}return e.prototype.getCount=function(){return n(this,void 0,void 0,(function(){return r(this,(function(e){switch(e.label){case 0:return e.trys.push([0,2,,3]),[4,this.store.getCount()];case 1:return[2,e.sent()];case 2:return e.sent(),[2,Promise.reject()];case 3:return[2]}}))}))},e.prototype.insertEvent=function(e,t){return n(this,void 0,void 0,(function(){var n,o;return r(this,(function(r){switch(r.label){case 0:if(this.dbEventCount>=1e4)return[2,Promise.reject()];n=f(e.mapValue),r.label=1;case 1:return r.trys.push([1,3,,4]),this.dbEventCount++,[4,this.store.setItem(n,e)];case 2:return[2,r.sent()];case 3:return o=r.sent(),t&&t(o,e),this.dbEventCount--,[2,Promise.reject()];case 4:return[2]}}))}))},e.prototype.getEvents=function(){return n(this,void 0,void 0,(function(){var e;return r(this,(function(t){switch(t.label){case 0:e=[],t.label=1;case 1:return t.trys.push([1,3,,4]),[4,this.store.iterate((function(t){e.push(t)}))];case 2:case 3:return t.sent(),[2,Promise.all(e)];case 4:return[2]}}))}))},e.prototype.removeEvent=function(e){return n(this,void 0,void 0,(function(){var t;return r(this,(function(n){switch(n.label){case 0:t=f(e.mapValue),n.label=1;case 1:return n.trys.push([1,3,,4]),this.dbEventCount--,[4,this.store.removeItem(t)];case 2:return[2,n.sent()];case 3:return n.sent(),this.dbEventCount++,[2,Promise.reject()];case 4:return[2]}}))}))},e}(),O=function(){return(O=Object.assign||function(e){for(var t,n=1,r=arguments.length;n0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&i<8,t.isUnderIE8||(t.isUnderIE=i>0,e.needInitQimei&&function(e,t){var n;(void 0===n&&(n=Date.now()+"-"+Math.random()),new Promise((function(e,t){if(document.getElementById(n))e(void 0);else{var r=document.getElementsByTagName("head")[0],o=document.createElement("script");o.onload=function(){return function(){o.onload=null,e(void 0)}},o.onerror=function(e){o.onerror=null,r.removeChild(o),t(e)},o.src="https://tun-cos-1258344701.file.myqcloud.com/fp.js",o.id=n,r.appendChild(o)}}))).then((function(){(new Fingerprint).getQimei36(e,t)})).catch((function(e){}))}(e.appkey,(function(e){t.qimei36=e.q36})),t.network=new q(e),t.storage=new z(e.appkey),t.initCommonInfo(e),t.store=new I(e.appkey,t.storage),t.errorReport=new g(t.config,t.commonInfo,"web",t.network),t.strategy=new y(null==e.needQueryConfig||e.needQueryConfig,t.config,t.commonInfo,t.storage,t.network),t.logidStartTime=t.storage.getItem(G),t.logidStartTime||(t.logidStartTime=Date.now().toString(),t.storage.setItem(G,t.logidStartTime)),r=t.logidStartTime,o=Date.now()-Number.parseFloat(r),Math.floor(o/864e5)>=365&&t.storage.clear(),t.initSession(e),t.onDirectUserAction("rqd_js_init",{}),setTimeout((function(){return t.lifeCycle.emit("init")}),0),t.initDelayTime=e.delay?e.delay:1e3,t.cycleTask(t.initDelayTime)),t}return function(t,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}(r,n),r.prototype.initSession=function(e){var t=18e5;e.sessionDuration&&e.sessionDuration>3e4&&(t=e.sessionDuration),this.beaconSession=new C(this.storage,t,this)},r.prototype.initCommonInfo=function(e){var t=Number(this.storage.getItem(a));try{var n=JSON.parse(this.storage.getItem(s));(Date.now()-t>3e4||!n)&&this.storage.setItem(s,JSON.stringify([]))}catch(e){}e.uploadUrl&&(this.uploadUrl=e.uploadUrl+"?appkey="+e.appkey);var r=[window.screen.width,window.screen.height];window.devicePixelRatio&&r.push(window.devicePixelRatio),this.commonInfo={deviceId:this.storage.createDeviceId(),language:navigator&&navigator.language||"zh_CN",query:window.location.search,userAgent:navigator.userAgent,pixel:r.join("*"),channelID:e.channelID?String(e.channelID):"",openid:e.openid?String(e.openid):"",unid:e.unionid?String(e.unionid):"",sdkVersion:V},this.config.appVersion=e.versionCode?String(e.versionCode):"",this.config.strictMode=e.strictMode},r.prototype.cycleTask=function(e){var t=this;this.intervalID=window.setInterval((function(){t.pauseSearching||t.store.getEvents().then((function(e){0==e.length&&(t.pauseSearching=!0);var n=[],r=JSON.parse(t.storage.getItem(s));r||(r=[]),e&&e.forEach((function(e){var t=f(e.mapValue);-1==r.indexOf(t)&&(n.push(e),r.push(t))})),0!=n.length&&(t.storage.setItem(s,JSON.stringify(r)),t._normalLogPipeline(t.assembleData(n)))})).catch((function(e){}))}),e)},r.prototype.onReport=function(e,t,n){var r=this;if(this.isUnderIE8)this.errorReport.reportError("601","UnderIE8");else{this.pauseSearching=!1;var o=this.generateData(e,t,n);if(n&&0==this.delayTime&&!this.underWeakNet)this._normalLogPipeline(this.assembleData(o));else{var i=o.shift();i&&this.store.insertEvent(i,(function(e){e&&r.errorReport.reportError("604","insertEvent fail!")})).catch((function(e){r._normalLogPipeline(r.assembleData(o))}))}}},r.prototype.onSendBeacon=function(e,t){if(this.isUnderIE)this.errorReport.reportError("605","UnderIE");else{this.pauseSearching=!1;var n=this.assembleData(this.generateData(e,t,!0));"function"==typeof navigator.sendBeacon&&navigator.sendBeacon(this.uploadUrl||this.strategy.getUploadUrl(),JSON.stringify(n))}},r.prototype.generateData=function(e,n,r){var o=[],i="4.5.14-web_"+(r?"direct_log_id":"normal_log_id"),a=Number(this.storage.getItem(i));return a=a||1,n=t(t({},n),{A99:r?"Y":"N",A100:a.toString(),A72:V,A88:this.logidStartTime}),a++,this.storage.setItem(i,a.toString()),o.push({eventCode:e,eventTime:Date.now().toString(),mapValue:d(n,this.config.strictMode)}),o},r.prototype.assembleData=function(e){var n=this.beaconSession.getSession();return{appVersion:this.config.appVersion?p(this.config.appVersion):"",sdkId:"js",sdkVersion:V,mainAppKey:this.config.appkey,platformId:3,common:d(t(t({},this.additionalParams),{A2:this.commonInfo.deviceId,A8:this.commonInfo.openid,A12:this.commonInfo.language,A17:this.commonInfo.pixel,A23:this.commonInfo.channelID,A50:this.commonInfo.unid,A76:n.sessionId,A101:this.commonInfo.userAgent,A102:window.location.href,A104:document.referrer,A119:this.commonInfo.query,A153:this.qimei36}),!1),events:e}},r.prototype.monitorUploadFailed=function(){this.uselessCycleTaskNum++,this.uselessCycleTaskNum>=5&&(window.clearInterval(this.intervalID),this.cycleTask(6e4),this.underWeakNet=!0)},r.prototype.doCustomCycleTask=function(){this.uselessCycleTaskNum>=5&&(window.clearInterval(this.intervalID),this.cycleTask(this.initDelayTime)),this.uselessCycleTaskNum=0,this.underWeakNet=!1},r}(m)},"object"==a(t)&&void 0!==e?e.exports=i():void 0===(o="function"==typeof(r=i)?r.call(t,n,t,e):r)||(e.exports=o)},function(e,t,n){var r=n(9),o=n(1),i={};e.exports.transferToTaskMethod=function(e,t){i[t]=e[t],e[t]=function(e,n){e.SkipTask?i[t].call(this,e,n):this._addTask(t,e,n)}},e.exports.init=function(e){var t,n,a=[],s={},c=0,u=0,l=function(e){var t={id:e.id,Bucket:e.Bucket,Region:e.Region,Key:e.Key,FilePath:e.FilePath,state:e.state,loaded:e.loaded,size:e.size,speed:e.speed,percent:e.percent,hashPercent:e.hashPercent,error:e.error};return e.FilePath&&(t.FilePath=e.FilePath),e._custom&&(t._custom=e._custom),t},d=(n=function(){t=0,e.emit("task-list-update",{list:o.map(a,l)}),e.emit("list-update",{list:o.map(a,l)})},function(){t||(t=setTimeout(n))}),p=function(){if(!(a.length<=e.options.UploadQueueSize)){for(var t=0;te.options.UploadQueueSize;){var n="waiting"===a[t].state||"checking"===a[t].state||"uploading"===a[t].state;a[t]&&n?t++:(s[a[t].id]&&delete s[a[t].id],a.splice(t,1),u--)}d()}},f=function t(){if(!(c>=e.options.FileParallelLimit)){for(;a[u]&&"waiting"!==a[u].state;)u++;if(!(u>=a.length)){var n=a[u];u++,c++,n.state="checking",n.params.onTaskStart&&n.params.onTaskStart(l(n)),!n.params.UploadData&&(n.params.UploadData={});var r=o.formatParams(n.api,n.params);i[n.api].call(e,r,(function(r,o){e._isRunningTask(n.id)&&("checking"!==n.state&&"uploading"!==n.state||(n.state=r?"error":"success",r&&(n.error=r),c--,d(),t(),n.callback&&n.callback(r,o),"success"===n.state&&(n.params&&(delete n.params.UploadData,delete n.params.Body,delete n.params),delete n.callback)),p())})),d(),setTimeout(t)}}},h=function(t,n){var o=s[t];if(o){var i=o&&"waiting"===o.state,a=o&&("checking"===o.state||"uploading"===o.state);if("canceled"===n&&"canceled"!==o.state||"paused"===n&&i||"paused"===n&&a){if("paused"===n&&o.params.Body&&"function"==typeof o.params.Body.pipe)return;o.state=n,e.emit("inner-kill-task",{TaskId:t,toState:n});try{var u=o&&o.params&&o.params.UploadData.UploadId}catch(e){}"canceled"===n&&u&&r.removeUsing(u),d(),a&&(c--,f()),"canceled"===n&&(o.params&&(delete o.params.UploadData,delete o.params.Body,delete o.params),delete o.callback)}p()}};e._addTasks=function(t){o.each(t,(function(t){e._addTask(t.api,t.params,t.callback,!0)})),d()};e._addTask=function(t,n,r,i){n=o.formatParams(t,n);var c=o.uuid();n.TaskId=c,n.onTaskReady&&n.onTaskReady(c),n.TaskReady&&(n.TaskReady(c),!1);var u={params:n,callback:r,api:t,index:a.length,id:c,Bucket:n.Bucket,Region:n.Region,Key:n.Key,FilePath:n.FilePath||"",state:"waiting",loaded:0,size:0,speed:0,percent:0,hashPercent:0,error:null,_custom:n._custom},l=n.onHashProgress;n.onHashProgress=function(t){e._isRunningTask(u.id)&&(u.hashPercent=t.percent,l&&l(t),d())};var h=n.onProgress;return n.onProgress=function(t){e._isRunningTask(u.id)&&("checking"===u.state&&(u.state="uploading"),u.loaded=t.loaded,u.speed=t.speed,u.percent=t.percent,h&&h(t),d())},o.getFileSize(t,n,(function(e,t){if(e)return r(o.error(e));s[c]=u,a.push(u),u.size=t,!i&&d(),f(),p()})),c},e._isRunningTask=function(e){var t=s[e];return!(!t||"checking"!==t.state&&"uploading"!==t.state)},e.getTaskList=function(){return o.map(a,l)},e.cancelTask=function(e){h(e,"canceled")},e.pauseTask=function(e){h(e,"paused")},e.restartTask=function(e){var t=s[e];!t||"paused"!==t.state&&"error"!==t.state||(t.state="waiting",d(),u=Math.min(u,t.index),f())},e.isUploadRunning=function(){return c||u-1?"{Region}.myqcloud.com":"cos.{Region}.myqcloud.com",e.ForcePathStyle||(s="{Bucket}."+s)),s=(s=s.replace(/\{\{AppId\}\}/gi,a).replace(/\{\{Bucket\}\}/gi,o).replace(/\{\{Region\}\}/gi,t).replace(/\{\{.*?\}\}/gi,"")).replace(/\{AppId\}/gi,a).replace(/\{BucketName\}/gi,o).replace(/\{Bucket\}/gi,n).replace(/\{Region\}/gi,t).replace(/\{.*?\}/gi,""),/^[a-zA-Z]+:\/\//.test(s)||(s=u+"//"+s),"/"===s.slice(-1)&&(s=s.slice(0,-1));var l=s;return e.ForcePathStyle&&(l+="/"+n),l+="/",c&&(l+=i.camSafeUrlEncode(c).replace(/%2F/g,"/")),e.isLocation&&(l=l.replace(/^https?:\/\//,"")),l}var u=function(e){if(!e.Bucket||!e.Region)return"";var t=void 0===e.UseAccelerate?this.options.UseAccelerate:e.UseAccelerate,n=(e.Url||c({ForcePathStyle:this.options.ForcePathStyle,protocol:this.options.Protocol,domain:this.options.Domain,bucket:e.Bucket,region:t?"accelerate":e.Region})).replace(/^https?:\/\/([^/]+)(\/.*)?$/,"$1");return new RegExp("^([a-z\\d-]+-\\d+\\.)?(cos|cosv6|ci|pic)\\.([a-z\\d-]+)\\.myqcloud\\.com$").test(n)?n:""};function l(e,t){var n=i.clone(e.Headers),r="";i.each(n,(function(e,t){(""===e||["content-type","cache-control","expires"].indexOf(t.toLowerCase())>-1)&&delete n[t],"host"===t.toLowerCase()&&(r=e)}));var o=!1!==e.ForceSignHost;!r&&e.SignHost&&o&&(n.Host=e.SignHost);var a=!1,s=function(e,n){a||(a=!0,n&&n.XCosSecurityToken&&!n.SecurityToken&&((n=i.clone(n)).SecurityToken=n.XCosSecurityToken,delete n.XCosSecurityToken),t&&t(e,n))},c=this,u=e.Bucket||"",l=e.Region||"",d=e.Key||"";c.options.ForcePathStyle&&u&&(d=u+"/"+d);var p="/"+d,f={},h=e.Scope;if(!h){var m=e.Action||"",g=e.ResourceKey||e.Key||"";h=e.Scope||[{action:m,bucket:u,region:l,prefix:g}]}var y=i.md5(JSON.stringify(h));c._StsCache=c._StsCache||[],function(){var e,t;for(e=c._StsCache.length-1;e>=0;e--){t=c._StsCache[e];var n=Math.round(i.getSkewTime(c.options.SystemClockOffset)/1e3)+30;if(t.StartTime&&n=t.ExpiredTime)c._StsCache.splice(e,1);else if(!t.ScopeLimit||t.ScopeLimit&&t.ScopeKey===y){f=t;break}}}();var v,C=function(){var t="";f.StartTime&&e.Expires?t=f.StartTime+";"+(f.StartTime+1*e.Expires):f.StartTime&&f.ExpiredTime&&(t=f.StartTime+";"+f.ExpiredTime);var r={Authorization:i.getAuth({SecretId:f.TmpSecretId,SecretKey:f.TmpSecretKey,Method:e.Method,Pathname:p,Query:e.Query,Headers:n,Expires:e.Expires,UseRawKey:c.options.UseRawKey,SystemClockOffset:c.options.SystemClockOffset,KeyTime:t,ForceSignHost:o}),SecurityToken:f.SecurityToken||f.XCosSecurityToken||"",Token:f.Token||"",ClientIP:f.ClientIP||"",ClientUA:f.ClientUA||""};s(null,r)},k=function(e){if(e.Authorization){var t=!1,n=e.Authorization;if(n)if(n.indexOf(" ")>-1)t=!1;else if(n.indexOf("q-sign-algorithm=")>-1&&n.indexOf("q-ak=")>-1&&n.indexOf("q-sign-time=")>-1&&n.indexOf("q-key-time=")>-1&&n.indexOf("q-url-param-list=")>-1)t=!0;else try{(n=atob(n)).indexOf("a=")>-1&&n.indexOf("k=")>-1&&n.indexOf("t=")>-1&&n.indexOf("r=")>-1&&n.indexOf("b=")>-1&&(t=!0)}catch(e){}if(!t)return i.error(new Error("getAuthorization callback params format error"))}else{if(!e.TmpSecretId)return i.error(new Error('getAuthorization callback params missing "TmpSecretId"'));if(!e.TmpSecretKey)return i.error(new Error('getAuthorization callback params missing "TmpSecretKey"'));if(!e.SecurityToken&&!e.XCosSecurityToken)return i.error(new Error('getAuthorization callback params missing "SecurityToken"'));if(!e.ExpiredTime)return i.error(new Error('getAuthorization callback params missing "ExpiredTime"'));if(e.ExpiredTime&&10!==e.ExpiredTime.toString().length)return i.error(new Error('getAuthorization callback params "ExpiredTime" should be 10 digits'));if(e.StartTime&&10!==e.StartTime.toString().length)return i.error(new Error('getAuthorization callback params "StartTime" should be 10 StartTime'))}return!1};if(f.ExpiredTime&&f.ExpiredTime-i.getSkewTime(c.options.SystemClockOffset)/1e3>60)C();else if(c.options.getAuthorization)c.options.getAuthorization.call(c,{Bucket:u,Region:l,Method:e.Method,Key:d,Pathname:p,Query:e.Query,Headers:n,Scope:h,SystemClockOffset:c.options.SystemClockOffset,ForceSignHost:o},(function(e){"string"==typeof e&&(e={Authorization:e});var t=k(e);if(t)return s(t);e.Authorization?s(null,e):((f=e||{}).Scope=h,f.ScopeKey=y,c._StsCache.push(f),C())}));else{if(!c.options.getSTS)return v={Authorization:i.getAuth({SecretId:e.SecretId||c.options.SecretId,SecretKey:e.SecretKey||c.options.SecretKey,Method:e.Method,Pathname:p,Query:e.Query,Headers:n,Expires:e.Expires,UseRawKey:c.options.UseRawKey,SystemClockOffset:c.options.SystemClockOffset,ForceSignHost:o}),SecurityToken:c.options.SecurityToken||c.options.XCosSecurityToken},s(null,v),v;c.options.getSTS.call(c,{Bucket:u,Region:l},(function(e){(f=e||{}).Scope=h,f.ScopeKey=y,f.TmpSecretId||(f.TmpSecretId=f.SecretId),f.TmpSecretKey||(f.TmpSecretKey=f.SecretKey);var t=k(f);if(t)return s(t);c._StsCache.push(f),C()}))}return""}function d(e){var t=!1,n=!1,r=e.headers&&(e.headers.date||e.headers.Date)||e.error&&e.error.ServerTime;try{var o=e.error.Code,a=e.error.Message;("RequestTimeTooSkewed"===o||"AccessDenied"===o&&"Request has expired"===a)&&(n=!0)}catch(e){}if(e)if(n&&r){var s=Date.parse(r);this.options.CorrectClockSkew&&Math.abs(i.getSkewTime(this.options.SystemClockOffset)-s)>=3e4&&(this.options.SystemClockOffset=s-Date.now(),t=!0)}else 5===Math.floor(e.statusCode/100)&&(t=!0);return t}function p(e,t){var n=this;!e.headers&&(e.headers={}),!e.qs&&(e.qs={}),e.VersionId&&(e.qs.versionId=e.VersionId),e.qs=i.clearKey(e.qs),e.headers&&(e.headers=i.clearKey(e.headers)),e.qs&&(e.qs=i.clearKey(e.qs));var r=i.clone(e.qs);e.action&&(r[e.action]="");var o=e.url||e.Url,a=e.SignHost||u.call(this,{Bucket:e.Bucket,Region:e.Region,Url:o}),s=e.tracker;!function o(i){var c=n.options.SystemClockOffset;s&&s.setParams({signStartTime:(new Date).getTime(),retryTimes:i-1}),l.call(n,{Bucket:e.Bucket||"",Region:e.Region||"",Method:e.method,Key:e.Key,Query:r,Headers:e.headers,SignHost:a,Action:e.Action,ResourceKey:e.ResourceKey,Scope:e.Scope,ForceSignHost:n.options.ForceSignHost},(function(r,a){r?t(r):(s&&s.setParams({signEndTime:(new Date).getTime(),httpStartTime:(new Date).getTime()}),e.AuthData=a,f.call(n,e,(function(r,a){s&&s.setParams({httpEndTime:(new Date).getTime()}),r&&i<2&&(c!==n.options.SystemClockOffset||d.call(n,r))?(e.headers&&(delete e.headers.Authorization,delete e.headers.token,delete e.headers.clientIP,delete e.headers.clientUA,e.headers["x-cos-security-token"]&&delete e.headers["x-cos-security-token"],e.headers["x-ci-security-token"]&&delete e.headers["x-ci-security-token"]),o(i+1)):t(r,a)})))}))}(1)}function f(e,t){var n=this,r=e.TaskId;if(!r||n._isRunningTask(r)){var a=e.Bucket,s=e.Region,u=e.Key,l=e.method||"GET",d=e.Url||e.url,p=e.body,f=e.rawBody;n.options.UseAccelerate&&(s="accelerate"),d=d||c({ForcePathStyle:n.options.ForcePathStyle,protocol:n.options.Protocol,domain:n.options.Domain,bucket:a,region:s,object:u}),e.action&&(d=d+"?"+(i.isIOS_QQ?"".concat(e.action,"="):e.action)),e.qsStr&&(d=d.indexOf("?")>-1?d+"&"+e.qsStr:d+"?"+e.qsStr);var h={method:l,url:d,headers:e.headers,qs:e.qs,body:p},m="x-cos-security-token";if(i.isCIHost(d)&&(m="x-ci-security-token"),h.headers.Authorization=e.AuthData.Authorization,e.AuthData.Token&&(h.headers.token=e.AuthData.Token),e.AuthData.ClientIP&&(h.headers.clientIP=e.AuthData.ClientIP),e.AuthData.ClientUA&&(h.headers.clientUA=e.AuthData.ClientUA),e.AuthData.SecurityToken&&(h.headers[m]=e.AuthData.SecurityToken),h.headers&&(h.headers=i.clearKey(h.headers)),h=i.clearKey(h),e.onProgress&&"function"==typeof e.onProgress){var g=p&&(p.size||p.length)||0;h.onProgress=function(t){if(!r||n._isRunningTask(r)){var o=t?t.loaded:0;e.onProgress({loaded:o,total:g})}}}e.onDownloadProgress&&(h.onDownloadProgress=e.onDownloadProgress),e.DataType&&(h.dataType=e.DataType),this.options.Timeout&&(h.timeout=this.options.Timeout),n.options.ForcePathStyle&&(h.pathStyle=n.options.ForcePathStyle),n.emit("before-send",h);var y=h.url.includes("accelerate."),v=h.qs?Object.keys(h.qs).map((function(e){return"".concat(e,"=").concat(h.qs[e])})).join("&"):"",C=v?h.url+"?"+v:h.url;e.tracker&&e.tracker.setParams({reqUrl:C,accelerate:y?"Y":"N"}),e.tracker&&e.tracker.parent&&e.tracker.parent.setParams({reqUrl:C,accelerate:y?"Y":"N"});var k=(n.options.Request||o)(h,(function(e){if(!e||"abort"!==e.error){var o={options:h,error:e&&e.error,statusCode:e&&e.statusCode||0,statusMessage:e&&e.statusMessage||"",headers:e&&e.headers||{},body:e&&e.body};n.emit("after-receive",o);var a,s=o.error,c=o.body,u={statusCode:o.statusCode,statusMessage:o.statusMessage,headers:o.headers},l=function(e,o){if(r&&n.off("inner-kill-task",S),!a){a=!0;var s={};u&&u.statusCode&&(s.statusCode=u.statusCode),u&&u.headers&&(s.headers=u.headers),e?(e=i.extend(e||{},s),t(e,null)):(o=i.extend(o||{},s),t(null,o)),k=null}};if(s)return l(i.error(s));var d,p=u.statusCode,m=2===Math.floor(p/100);if(f&&m)return l(null,{body:c});try{d=c&&c.indexOf("<")>-1&&c.indexOf(">")>-1&&i.xml2json(c)||{}}catch(e){d={}}var g=d&&d.Error;m?l(null,d):g?l(i.error(new Error(g.Message),{code:g.Code,error:g})):p?l(i.error(new Error(u.statusMessage),{code:""+p})):p&&l(i.error(new Error("statusCode error")))}})),S=function e(t){t.TaskId===r&&(k&&k.abort&&k.abort(),n.off("inner-kill-task",e))};r&&n.on("inner-kill-task",S)}}var h={getService:function(e,t){"function"==typeof e&&(t=e,e={});var n=this.options.Protocol||(i.isBrowser&&"object"===("undefined"==typeof location?"undefined":r(location))&&"http:"===location.protocol?"http:":"https:"),o=this.options.ServiceDomain,a=e.AppId||this.options.appId,s=e.Region;o?(o=o.replace(/\{\{AppId\}\}/gi,a||"").replace(/\{\{Region\}\}/gi,s||"").replace(/\{\{.*?\}\}/gi,""),/^[a-zA-Z]+:\/\//.test(o)||(o=n+"//"+o),"/"===o.slice(-1)&&(o=o.slice(0,-1))):o=s?n+"//cos."+s+".myqcloud.com":n+"//service.cos.myqcloud.com";var c="",u=s?"cos."+s+".myqcloud.com":"service.cos.myqcloud.com";u===o.replace(/^https?:\/\/([^/]+)(\/.*)?$/,"$1")&&(c=u),p.call(this,{Action:"name/cos:GetService",url:o,method:"GET",headers:e.Headers,SignHost:c},(function(e,n){if(e)return t(e);var r=n&&n.ListAllMyBucketsResult&&n.ListAllMyBucketsResult.Buckets&&n.ListAllMyBucketsResult.Buckets.Bucket||[];r=i.isArray(r)?r:[r];var o=n&&n.ListAllMyBucketsResult&&n.ListAllMyBucketsResult.Owner||{};t(null,{Buckets:r,Owner:o,statusCode:n.statusCode,headers:n.headers})}))},putBucket:function(e,t){var n=this,r="";if(e.BucketAZConfig){var o={BucketAZConfig:e.BucketAZConfig};r=i.json2xml({CreateBucketConfiguration:o})}p.call(this,{Action:"name/cos:PutBucket",method:"PUT",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,body:r},(function(r,o){if(r)return t(r);var i=c({protocol:n.options.Protocol,domain:n.options.Domain,bucket:e.Bucket,region:e.Region,isLocation:!0});t(null,{Location:i,statusCode:o.statusCode,headers:o.headers})}))},headBucket:function(e,t){p.call(this,{Action:"name/cos:HeadBucket",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,method:"HEAD"},t)},getBucket:function(e,t){var n={};n.prefix=e.Prefix||"",n.delimiter=e.Delimiter,n.marker=e.Marker,n["max-keys"]=e.MaxKeys,n["encoding-type"]=e.EncodingType,p.call(this,{Action:"name/cos:GetBucket",ResourceKey:n.prefix,method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,qs:n},(function(e,n){if(e)return t(e);var r=n.ListBucketResult||{},o=r.Contents||[],a=r.CommonPrefixes||[];o=i.isArray(o)?o:[o],a=i.isArray(a)?a:[a];var s=i.clone(r);i.extend(s,{Contents:o,CommonPrefixes:a,statusCode:n.statusCode,headers:n.headers}),t(null,s)}))},deleteBucket:function(e,t){p.call(this,{Action:"name/cos:DeleteBucket",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,method:"DELETE"},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},putBucketAcl:function(e,t){var n=e.Headers,r="";if(e.AccessControlPolicy){var o=i.clone(e.AccessControlPolicy||{}),a=o.Grants||o.Grant;a=i.isArray(a)?a:[a],delete o.Grant,delete o.Grants,o.AccessControlList={Grant:a},r=i.json2xml({AccessControlPolicy:o}),n["Content-Type"]="application/xml",n["Content-MD5"]=i.b64(i.md5(r))}i.each(n,(function(e,t){0===t.indexOf("x-cos-grant-")&&(n[t]=s(n[t]))})),p.call(this,{Action:"name/cos:PutBucketACL",method:"PUT",Bucket:e.Bucket,Region:e.Region,headers:n,action:"acl",body:r},(function(e,n){if(e)return t(e);t(null,{statusCode:n.statusCode,headers:n.headers})}))},getBucketAcl:function(e,t){p.call(this,{Action:"name/cos:GetBucketACL",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"acl"},(function(e,n){if(e)return t(e);var r=n.AccessControlPolicy||{},o=r.Owner||{},s=r.AccessControlList.Grant||[];s=i.isArray(s)?s:[s];var c=a(r);n.headers&&n.headers["x-cos-acl"]&&(c.ACL=n.headers["x-cos-acl"]),c=i.extend(c,{Owner:o,Grants:s,statusCode:n.statusCode,headers:n.headers}),t(null,c)}))},putBucketCors:function(e,t){var n=(e.CORSConfiguration||{}).CORSRules||e.CORSRules||[];n=i.clone(i.isArray(n)?n:[n]),i.each(n,(function(e){i.each(["AllowedOrigin","AllowedHeader","AllowedMethod","ExposeHeader"],(function(t){var n=t+"s",r=e[n]||e[t]||[];delete e[n],e[t]=i.isArray(r)?r:[r]}))}));var r={CORSRule:n};e.ResponseVary&&(r.ResponseVary=e.ResponseVary);var o=i.json2xml({CORSConfiguration:r}),a=e.Headers;a["Content-Type"]="application/xml",a["Content-MD5"]=i.b64(i.md5(o)),p.call(this,{Action:"name/cos:PutBucketCORS",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:o,action:"cors",headers:a},(function(e,n){if(e)return t(e);t(null,{statusCode:n.statusCode,headers:n.headers})}))},getBucketCors:function(e,t){p.call(this,{Action:"name/cos:GetBucketCORS",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"cors"},(function(e,n){if(e)if(404===e.statusCode&&e.error&&"NoSuchCORSConfiguration"===e.error.Code){var r={CORSRules:[],statusCode:e.statusCode};e.headers&&(r.headers=e.headers),t(null,r)}else t(e);else{var o=n.CORSConfiguration||{},a=o.CORSRules||o.CORSRule||[];a=i.clone(i.isArray(a)?a:[a]);var s=o.ResponseVary;i.each(a,(function(e){i.each(["AllowedOrigin","AllowedHeader","AllowedMethod","ExposeHeader"],(function(t){var n=t+"s",r=e[n]||e[t]||[];delete e[t],e[n]=i.isArray(r)?r:[r]}))})),t(null,{CORSRules:a,ResponseVary:s,statusCode:n.statusCode,headers:n.headers})}}))},deleteBucketCors:function(e,t){p.call(this,{Action:"name/cos:DeleteBucketCORS",method:"DELETE",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"cors"},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode||e.statusCode,headers:n.headers})}))},getBucketLocation:function(e,t){p.call(this,{Action:"name/cos:GetBucketLocation",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"location"},t)},getBucketPolicy:function(e,t){p.call(this,{Action:"name/cos:GetBucketPolicy",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"policy",rawBody:!0},(function(e,n){if(e)return e.statusCode&&403===e.statusCode?t(i.error(e,{ErrorStatus:"Access Denied"})):e.statusCode&&405===e.statusCode?t(i.error(e,{ErrorStatus:"Method Not Allowed"})):e.statusCode&&404===e.statusCode?t(i.error(e,{ErrorStatus:"Policy Not Found"})):t(e);var r={};try{r=JSON.parse(n.body)}catch(e){}t(null,{Policy:r,statusCode:n.statusCode,headers:n.headers})}))},putBucketPolicy:function(e,t){var n=e.Policy;try{"string"==typeof n&&(n=JSON.parse(n))}catch(e){}if(!n||"string"==typeof n)return t(i.error(new Error("Policy format error")));var r=JSON.stringify(n);n.version||(n.version="2.0");var o=e.Headers;o["Content-Type"]="application/json",o["Content-MD5"]=i.b64(i.md5(r)),p.call(this,{Action:"name/cos:PutBucketPolicy",method:"PUT",Bucket:e.Bucket,Region:e.Region,action:"policy",body:r,headers:o},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},deleteBucketPolicy:function(e,t){p.call(this,{Action:"name/cos:DeleteBucketPolicy",method:"DELETE",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"policy"},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode||e.statusCode,headers:n.headers})}))},putBucketTagging:function(e,t){var n=e.Tagging||{},r=n.TagSet||n.Tags||e.Tags||[];r=i.clone(i.isArray(r)?r:[r]);var o=i.json2xml({Tagging:{TagSet:{Tag:r}}}),a=e.Headers;a["Content-Type"]="application/xml",a["Content-MD5"]=i.b64(i.md5(o)),p.call(this,{Action:"name/cos:PutBucketTagging",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:o,action:"tagging",headers:a},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},getBucketTagging:function(e,t){p.call(this,{Action:"name/cos:GetBucketTagging",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"tagging"},(function(e,n){if(e)if(404!==e.statusCode||!e.error||"Not Found"!==e.error&&"NoSuchTagSet"!==e.error.Code)t(e);else{var r={Tags:[],statusCode:e.statusCode};e.headers&&(r.headers=e.headers),t(null,r)}else{var o=[];try{o=n.Tagging.TagSet.Tag||[]}catch(e){}o=i.clone(i.isArray(o)?o:[o]),t(null,{Tags:o,statusCode:n.statusCode,headers:n.headers})}}))},deleteBucketTagging:function(e,t){p.call(this,{Action:"name/cos:DeleteBucketTagging",method:"DELETE",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"tagging"},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},putBucketLifecycle:function(e,t){var n=(e.LifecycleConfiguration||{}).Rules||e.Rules||[];n=i.clone(n);var r=i.json2xml({LifecycleConfiguration:{Rule:n}}),o=e.Headers;o["Content-Type"]="application/xml",o["Content-MD5"]=i.b64(i.md5(r)),p.call(this,{Action:"name/cos:PutBucketLifecycle",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:r,action:"lifecycle",headers:o},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},getBucketLifecycle:function(e,t){p.call(this,{Action:"name/cos:GetBucketLifecycle",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"lifecycle"},(function(e,n){if(e)if(404===e.statusCode&&e.error&&"NoSuchLifecycleConfiguration"===e.error.Code){var r={Rules:[],statusCode:e.statusCode};e.headers&&(r.headers=e.headers),t(null,r)}else t(e);else{var o=[];try{o=n.LifecycleConfiguration.Rule||[]}catch(e){}o=i.clone(i.isArray(o)?o:[o]),t(null,{Rules:o,statusCode:n.statusCode,headers:n.headers})}}))},deleteBucketLifecycle:function(e,t){p.call(this,{Action:"name/cos:DeleteBucketLifecycle",method:"DELETE",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"lifecycle"},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},putBucketVersioning:function(e,t){if(e.VersioningConfiguration){var n=e.VersioningConfiguration||{},r=i.json2xml({VersioningConfiguration:n}),o=e.Headers;o["Content-Type"]="application/xml",o["Content-MD5"]=i.b64(i.md5(r)),p.call(this,{Action:"name/cos:PutBucketVersioning",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:r,action:"versioning",headers:o},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))}else t(i.error(new Error("missing param VersioningConfiguration")))},getBucketVersioning:function(e,t){p.call(this,{Action:"name/cos:GetBucketVersioning",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"versioning"},(function(e,n){e||!n.VersioningConfiguration&&(n.VersioningConfiguration={}),t(e,n)}))},putBucketReplication:function(e,t){var n=i.clone(e.ReplicationConfiguration),r=i.json2xml({ReplicationConfiguration:n});r=(r=r.replace(/<(\/?)Rules>/gi,"<$1Rule>")).replace(/<(\/?)Tags>/gi,"<$1Tag>");var o=e.Headers;o["Content-Type"]="application/xml",o["Content-MD5"]=i.b64(i.md5(r)),p.call(this,{Action:"name/cos:PutBucketReplication",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:r,action:"replication",headers:o},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},getBucketReplication:function(e,t){p.call(this,{Action:"name/cos:GetBucketReplication",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"replication"},(function(e,n){if(e)if(404!==e.statusCode||!e.error||"Not Found"!==e.error&&"ReplicationConfigurationnotFoundError"!==e.error.Code)t(e);else{var r={ReplicationConfiguration:{Rules:[]},statusCode:e.statusCode};e.headers&&(r.headers=e.headers),t(null,r)}else!n.ReplicationConfiguration&&(n.ReplicationConfiguration={}),n.ReplicationConfiguration.Rule&&(n.ReplicationConfiguration.Rules=i.makeArray(n.ReplicationConfiguration.Rule),delete n.ReplicationConfiguration.Rule),t(e,n)}))},deleteBucketReplication:function(e,t){p.call(this,{Action:"name/cos:DeleteBucketReplication",method:"DELETE",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"replication"},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},putBucketWebsite:function(e,t){if(e.WebsiteConfiguration){var n=i.clone(e.WebsiteConfiguration||{}),r=n.RoutingRules||n.RoutingRule||[];r=i.isArray(r)?r:[r],delete n.RoutingRule,delete n.RoutingRules,r.length&&(n.RoutingRules={RoutingRule:r});var o=i.json2xml({WebsiteConfiguration:n}),a=e.Headers;a["Content-Type"]="application/xml",a["Content-MD5"]=i.b64(i.md5(o)),p.call(this,{Action:"name/cos:PutBucketWebsite",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:o,action:"website",headers:a},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))}else t(i.error(new Error("missing param WebsiteConfiguration")))},getBucketWebsite:function(e,t){p.call(this,{Action:"name/cos:GetBucketWebsite",method:"GET",Bucket:e.Bucket,Region:e.Region,Key:e.Key,headers:e.Headers,action:"website"},(function(e,n){if(e)if(404===e.statusCode&&"NoSuchWebsiteConfiguration"===e.error.Code){var r={WebsiteConfiguration:{},statusCode:e.statusCode};e.headers&&(r.headers=e.headers),t(null,r)}else t(e);else{var o=n.WebsiteConfiguration||{};if(o.RoutingRules){var a=i.clone(o.RoutingRules.RoutingRule||[]);a=i.makeArray(a),o.RoutingRules=a}t(null,{WebsiteConfiguration:o,statusCode:n.statusCode,headers:n.headers})}}))},deleteBucketWebsite:function(e,t){p.call(this,{Action:"name/cos:DeleteBucketWebsite",method:"DELETE",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"website"},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},putBucketReferer:function(e,t){if(e.RefererConfiguration){var n=i.clone(e.RefererConfiguration||{}),r=n.DomainList||{},o=r.Domains||r.Domain||[];(o=i.isArray(o)?o:[o]).length&&(n.DomainList={Domain:o});var a=i.json2xml({RefererConfiguration:n}),s=e.Headers;s["Content-Type"]="application/xml",s["Content-MD5"]=i.b64(i.md5(a)),p.call(this,{Action:"name/cos:PutBucketReferer",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:a,action:"referer",headers:s},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))}else t(i.error(new Error("missing param RefererConfiguration")))},getBucketReferer:function(e,t){p.call(this,{Action:"name/cos:GetBucketReferer",method:"GET",Bucket:e.Bucket,Region:e.Region,Key:e.Key,headers:e.Headers,action:"referer"},(function(e,n){if(e)if(404===e.statusCode&&"NoSuchRefererConfiguration"===e.error.Code){var r={WebsiteConfiguration:{},statusCode:e.statusCode};e.headers&&(r.headers=e.headers),t(null,r)}else t(e);else{var o=n.RefererConfiguration||{};if(o.DomainList){var a=i.makeArray(o.DomainList.Domain||[]);o.DomainList={Domains:a}}t(null,{RefererConfiguration:o,statusCode:n.statusCode,headers:n.headers})}}))},putBucketDomain:function(e,t){var n=(e.DomainConfiguration||{}).DomainRule||e.DomainRule||[];n=i.clone(n);var r=i.json2xml({DomainConfiguration:{DomainRule:n}}),o=e.Headers;o["Content-Type"]="application/xml",o["Content-MD5"]=i.b64(i.md5(r)),p.call(this,{Action:"name/cos:PutBucketDomain",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:r,action:"domain",headers:o},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},getBucketDomain:function(e,t){p.call(this,{Action:"name/cos:GetBucketDomain",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"domain"},(function(e,n){if(e)return t(e);var r=[];try{r=n.DomainConfiguration.DomainRule||[]}catch(e){}r=i.clone(i.isArray(r)?r:[r]),t(null,{DomainRule:r,statusCode:n.statusCode,headers:n.headers})}))},deleteBucketDomain:function(e,t){p.call(this,{Action:"name/cos:DeleteBucketDomain",method:"DELETE",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"domain"},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},putBucketOrigin:function(e,t){var n=(e.OriginConfiguration||{}).OriginRule||e.OriginRule||[];n=i.clone(n);var r=i.json2xml({OriginConfiguration:{OriginRule:n}}),o=e.Headers;o["Content-Type"]="application/xml",o["Content-MD5"]=i.b64(i.md5(r)),p.call(this,{Action:"name/cos:PutBucketOrigin",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:r,action:"origin",headers:o},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},getBucketOrigin:function(e,t){p.call(this,{Action:"name/cos:GetBucketOrigin",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"origin"},(function(e,n){if(e)return t(e);var r=[];try{r=n.OriginConfiguration.OriginRule||[]}catch(e){}r=i.clone(i.isArray(r)?r:[r]),t(null,{OriginRule:r,statusCode:n.statusCode,headers:n.headers})}))},deleteBucketOrigin:function(e,t){p.call(this,{Action:"name/cos:DeleteBucketOrigin",method:"DELETE",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"origin"},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},putBucketLogging:function(e,t){var n=i.json2xml({BucketLoggingStatus:e.BucketLoggingStatus||""}),r=e.Headers;r["Content-Type"]="application/xml",r["Content-MD5"]=i.b64(i.md5(n)),p.call(this,{Action:"name/cos:PutBucketLogging",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:n,action:"logging",headers:r},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},getBucketLogging:function(e,t){p.call(this,{Action:"name/cos:GetBucketLogging",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"logging"},(function(e,n){if(e)return t(e);t(null,{BucketLoggingStatus:n.BucketLoggingStatus,statusCode:n.statusCode,headers:n.headers})}))},putBucketInventory:function(e,t){var n=i.clone(e.InventoryConfiguration);if(n.OptionalFields){var r=n.OptionalFields||[];n.OptionalFields={Field:r}}if(n.Destination&&n.Destination.COSBucketDestination&&n.Destination.COSBucketDestination.Encryption){var o=n.Destination.COSBucketDestination.Encryption;Object.keys(o).indexOf("SSECOS")>-1&&(o["SSE-COS"]=o.SSECOS,delete o.SSECOS)}var a=i.json2xml({InventoryConfiguration:n}),s=e.Headers;s["Content-Type"]="application/xml",s["Content-MD5"]=i.b64(i.md5(a)),p.call(this,{Action:"name/cos:PutBucketInventory",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:a,action:"inventory",qs:{id:e.Id},headers:s},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},getBucketInventory:function(e,t){p.call(this,{Action:"name/cos:GetBucketInventory",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"inventory",qs:{id:e.Id}},(function(e,n){if(e)return t(e);var r=n.InventoryConfiguration;if(r&&r.OptionalFields&&r.OptionalFields.Field){var o=r.OptionalFields.Field;i.isArray(o)||(o=[o]),r.OptionalFields=o}if(r.Destination&&r.Destination.COSBucketDestination&&r.Destination.COSBucketDestination.Encryption){var a=r.Destination.COSBucketDestination.Encryption;Object.keys(a).indexOf("SSE-COS")>-1&&(a.SSECOS=a["SSE-COS"],delete a["SSE-COS"])}t(null,{InventoryConfiguration:r,statusCode:n.statusCode,headers:n.headers})}))},listBucketInventory:function(e,t){p.call(this,{Action:"name/cos:ListBucketInventory",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"inventory",qs:{"continuation-token":e.ContinuationToken}},(function(e,n){if(e)return t(e);var r=n.ListInventoryConfigurationResult,o=r.InventoryConfiguration||[];o=i.isArray(o)?o:[o],delete r.InventoryConfiguration,i.each(o,(function(e){if(e&&e.OptionalFields&&e.OptionalFields.Field){var t=e.OptionalFields.Field;i.isArray(t)||(t=[t]),e.OptionalFields=t}if(e.Destination&&e.Destination.COSBucketDestination&&e.Destination.COSBucketDestination.Encryption){var n=e.Destination.COSBucketDestination.Encryption;Object.keys(n).indexOf("SSE-COS")>-1&&(n.SSECOS=n["SSE-COS"],delete n["SSE-COS"])}})),r.InventoryConfigurations=o,i.extend(r,{statusCode:n.statusCode,headers:n.headers}),t(null,r)}))},deleteBucketInventory:function(e,t){p.call(this,{Action:"name/cos:DeleteBucketInventory",method:"DELETE",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"inventory",qs:{id:e.Id}},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},putBucketAccelerate:function(e,t){if(e.AccelerateConfiguration){var n={AccelerateConfiguration:e.AccelerateConfiguration||{}},r=i.json2xml(n),o={"Content-Type":"application/xml"};o["Content-MD5"]=i.b64(i.md5(r)),p.call(this,{Action:"name/cos:PutBucketAccelerate",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:r,action:"accelerate",headers:o},(function(e,n){if(e)return t(e);t(null,{statusCode:n.statusCode,headers:n.headers})}))}else t(i.error(new Error("missing param AccelerateConfiguration")))},getBucketAccelerate:function(e,t){p.call(this,{Action:"name/cos:GetBucketAccelerate",method:"GET",Bucket:e.Bucket,Region:e.Region,action:"accelerate"},(function(e,n){e||!n.AccelerateConfiguration&&(n.AccelerateConfiguration={}),t(e,n)}))},putBucketEncryption:function(e,t){var n=e.ServerSideEncryptionConfiguration||{},r=n.Rule||n.Rules||[],o=i.json2xml({ServerSideEncryptionConfiguration:{Rule:r}}),a=e.Headers;a["Content-Type"]="application/xml",a["Content-MD5"]=i.b64(i.md5(o)),p.call(this,{Action:"name/cos:PutBucketEncryption",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:o,action:"encryption",headers:a},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},getBucketEncryption:function(e,t){p.call(this,{Action:"name/cos:GetBucketEncryption",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"encryption"},(function(e,n){if(e)if(404===e.statusCode&&"NoSuchEncryptionConfiguration"===e.code){var r={EncryptionConfiguration:{Rules:[]},statusCode:e.statusCode};e.headers&&(r.headers=e.headers),t(null,r)}else t(e);else{var o=i.makeArray(n.EncryptionConfiguration&&n.EncryptionConfiguration.Rule||[]);n.EncryptionConfiguration={Rules:o},t(e,n)}}))},deleteBucketEncryption:function(e,t){p.call(this,{Action:"name/cos:DeleteBucketReplication",method:"DELETE",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"encryption"},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},getObject:function(e,t){var n=e.Query||{},r=e.QueryString||"",o=i.throttleOnProgress.call(this,0,e.onProgress),a=e.tracker;a&&a.setParams({signStartTime:(new Date).getTime()}),n["response-content-type"]=e.ResponseContentType,n["response-content-language"]=e.ResponseContentLanguage,n["response-expires"]=e.ResponseExpires,n["response-cache-control"]=e.ResponseCacheControl,n["response-content-disposition"]=e.ResponseContentDisposition,n["response-content-encoding"]=e.ResponseContentEncoding,p.call(this,{Action:"name/cos:GetObject",method:"GET",Bucket:e.Bucket,Region:e.Region,Key:e.Key,VersionId:e.VersionId,DataType:e.DataType,headers:e.Headers,qs:n,qsStr:r,rawBody:!0,onDownloadProgress:o,tracker:a},(function(n,r){if(o(null,!0),n){var a=n.statusCode;return e.Headers["If-Modified-Since"]&&a&&304===a?t(null,{NotModified:!0}):t(n)}t(null,{Body:r.body,ETag:i.attr(r.headers,"etag",""),statusCode:r.statusCode,headers:r.headers})}))},headObject:function(e,t){p.call(this,{Action:"name/cos:HeadObject",method:"HEAD",Bucket:e.Bucket,Region:e.Region,Key:e.Key,VersionId:e.VersionId,headers:e.Headers},(function(n,r){if(n){var o=n.statusCode;return e.Headers["If-Modified-Since"]&&o&&304===o?t(null,{NotModified:!0,statusCode:o}):t(n)}r.ETag=i.attr(r.headers,"etag",""),t(null,r)}))},listObjectVersions:function(e,t){var n={};n.prefix=e.Prefix||"",n.delimiter=e.Delimiter,n["key-marker"]=e.KeyMarker,n["version-id-marker"]=e.VersionIdMarker,n["max-keys"]=e.MaxKeys,n["encoding-type"]=e.EncodingType,p.call(this,{Action:"name/cos:GetBucketObjectVersions",ResourceKey:n.prefix,method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,qs:n,action:"versions"},(function(e,n){if(e)return t(e);var r=n.ListVersionsResult||{},o=r.DeleteMarker||[];o=i.isArray(o)?o:[o];var a=r.Version||[];a=i.isArray(a)?a:[a];var s=i.clone(r);delete s.DeleteMarker,delete s.Version,i.extend(s,{DeleteMarkers:o,Versions:a,statusCode:n.statusCode,headers:n.headers}),t(null,s)}))},putObject:function(e,t){var n=this,r=e.ContentLength,o=i.throttleOnProgress.call(n,r,e.onProgress),a=e.Headers;a["Cache-Control"]||a["cache-control"]||(a["Cache-Control"]=""),a["Content-Type"]||a["content-type"]||(a["Content-Type"]=e.Body&&e.Body.type||"");var s=e.UploadAddMetaMd5||n.options.UploadAddMetaMd5||n.options.UploadCheckContentMd5,u=e.tracker;s&&u&&u.setParams({md5StartTime:(new Date).getTime()}),i.getBodyMd5(s,e.Body,(function(s){s&&(u&&u.setParams({md5EndTime:(new Date).getTime()}),n.options.UploadCheckContentMd5&&(a["Content-MD5"]=i.b64(s)),(e.UploadAddMetaMd5||n.options.UploadAddMetaMd5)&&(a["x-cos-meta-md5"]=s)),void 0!==e.ContentLength&&(a["Content-Length"]=e.ContentLength),o(null,!0),p.call(n,{Action:"name/cos:PutObject",TaskId:e.TaskId,method:"PUT",Bucket:e.Bucket,Region:e.Region,Key:e.Key,headers:e.Headers,qs:e.Query,body:e.Body,onProgress:o,tracker:u},(function(a,s){if(a)return o(null,!0),t(a);o({loaded:r,total:r},!0);var u=c({ForcePathStyle:n.options.ForcePathStyle,protocol:n.options.Protocol,domain:n.options.Domain,bucket:e.Bucket,region:n.options.UseAccelerate?"accelerate":e.Region,object:e.Key});u=u.substr(u.indexOf("://")+3),s.Location=u,s.ETag=i.attr(s.headers,"etag",""),t(null,s)}))}),e.onHashProgress)},deleteObject:function(e,t){p.call(this,{Action:"name/cos:DeleteObject",method:"DELETE",Bucket:e.Bucket,Region:e.Region,Key:e.Key,headers:e.Headers,VersionId:e.VersionId,action:e.Recursive?"recursive":""},(function(e,n){if(e){var r=e.statusCode;return r&&404===r?t(null,{BucketNotFound:!0,statusCode:r}):t(e)}t(null,{statusCode:n.statusCode,headers:n.headers})}))},getObjectAcl:function(e,t){var n={};e.VersionId&&(n.versionId=e.VersionId),p.call(this,{Action:"name/cos:GetObjectACL",method:"GET",Bucket:e.Bucket,Region:e.Region,Key:e.Key,headers:e.Headers,qs:n,action:"acl"},(function(e,n){if(e)return t(e);var r=n.AccessControlPolicy||{},o=r.Owner||{},s=r.AccessControlList&&r.AccessControlList.Grant||[];s=i.isArray(s)?s:[s];var c=a(r);delete c.GrantWrite,n.headers&&n.headers["x-cos-acl"]&&(c.ACL=n.headers["x-cos-acl"]),c=i.extend(c,{Owner:o,Grants:s,statusCode:n.statusCode,headers:n.headers}),t(null,c)}))},putObjectAcl:function(e,t){var n=e.Headers,r="";if(e.AccessControlPolicy){var o=i.clone(e.AccessControlPolicy||{}),a=o.Grants||o.Grant;a=i.isArray(a)?a:[a],delete o.Grant,delete o.Grants,o.AccessControlList={Grant:a},r=i.json2xml({AccessControlPolicy:o}),n["Content-Type"]="application/xml",n["Content-MD5"]=i.b64(i.md5(r))}i.each(n,(function(e,t){0===t.indexOf("x-cos-grant-")&&(n[t]=s(n[t]))})),p.call(this,{Action:"name/cos:PutObjectACL",method:"PUT",Bucket:e.Bucket,Region:e.Region,Key:e.Key,action:"acl",headers:n,body:r},(function(e,n){if(e)return t(e);t(null,{statusCode:n.statusCode,headers:n.headers})}))},optionsObject:function(e,t){var n=e.Headers;n.Origin=e.Origin,n["Access-Control-Request-Method"]=e.AccessControlRequestMethod,n["Access-Control-Request-Headers"]=e.AccessControlRequestHeaders,p.call(this,{Action:"name/cos:OptionsObject",method:"OPTIONS",Bucket:e.Bucket,Region:e.Region,Key:e.Key,headers:n},(function(e,n){if(e)return e.statusCode&&403===e.statusCode?t(null,{OptionsForbidden:!0,statusCode:e.statusCode}):t(e);var r=n.headers||{};t(null,{AccessControlAllowOrigin:r["access-control-allow-origin"],AccessControlAllowMethods:r["access-control-allow-methods"],AccessControlAllowHeaders:r["access-control-allow-headers"],AccessControlExposeHeaders:r["access-control-expose-headers"],AccessControlMaxAge:r["access-control-max-age"],statusCode:n.statusCode,headers:n.headers})}))},putObjectCopy:function(e,t){var n=this,r=e.Headers;r["Cache-Control"]||r["cache-control"]||(r["Cache-Control"]="");var o=e.CopySource||"",a=i.getSourceParams.call(this,o);if(a){var s=a.Bucket,u=a.Region,l=decodeURIComponent(a.Key);p.call(this,{Scope:[{action:"name/cos:GetObject",bucket:s,region:u,prefix:l},{action:"name/cos:PutObject",bucket:e.Bucket,region:e.Region,prefix:e.Key}],method:"PUT",Bucket:e.Bucket,Region:e.Region,Key:e.Key,VersionId:e.VersionId,headers:e.Headers},(function(r,o){if(r)return t(r);var a=i.clone(o.CopyObjectResult||{}),s=c({ForcePathStyle:n.options.ForcePathStyle,protocol:n.options.Protocol,domain:n.options.Domain,bucket:e.Bucket,region:e.Region,object:e.Key,isLocation:!0});i.extend(a,{Location:s,statusCode:o.statusCode,headers:o.headers}),t(null,a)}))}else t(i.error(new Error("CopySource format error")))},deleteMultipleObject:function(e,t){var n=e.Objects||[],r=e.Quiet;n=i.isArray(n)?n:[n];var o=i.json2xml({Delete:{Object:n,Quiet:r||!1}}),a=e.Headers;a["Content-Type"]="application/xml",a["Content-MD5"]=i.b64(i.md5(o));var s=i.map(n,(function(t){return{action:"name/cos:DeleteObject",bucket:e.Bucket,region:e.Region,prefix:t.Key}}));p.call(this,{Scope:s,method:"POST",Bucket:e.Bucket,Region:e.Region,body:o,action:"delete",headers:a},(function(e,n){if(e)return t(e);var r=n.DeleteResult||{},o=r.Deleted||[],a=r.Error||[];o=i.isArray(o)?o:[o],a=i.isArray(a)?a:[a];var s=i.clone(r);i.extend(s,{Error:a,Deleted:o,statusCode:n.statusCode,headers:n.headers}),t(null,s)}))},restoreObject:function(e,t){var n=e.Headers;if(e.RestoreRequest){var r=e.RestoreRequest||{},o=i.json2xml({RestoreRequest:r});n["Content-Type"]="application/xml",n["Content-MD5"]=i.b64(i.md5(o)),p.call(this,{Action:"name/cos:RestoreObject",method:"POST",Bucket:e.Bucket,Region:e.Region,Key:e.Key,VersionId:e.VersionId,body:o,action:"restore",headers:n},t)}else t(i.error(new Error("missing param RestoreRequest")))},putObjectTagging:function(e,t){var n=e.Tagging||{},r=n.TagSet||n.Tags||e.Tags||[];r=i.clone(i.isArray(r)?r:[r]);var o=i.json2xml({Tagging:{TagSet:{Tag:r}}}),a=e.Headers;a["Content-Type"]="application/xml",a["Content-MD5"]=i.b64(i.md5(o)),p.call(this,{Action:"name/cos:PutObjectTagging",method:"PUT",Bucket:e.Bucket,Key:e.Key,Region:e.Region,body:o,action:"tagging",headers:a,VersionId:e.VersionId},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},getObjectTagging:function(e,t){p.call(this,{Action:"name/cos:GetObjectTagging",method:"GET",Key:e.Key,Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"tagging",VersionId:e.VersionId},(function(e,n){if(e)if(404!==e.statusCode||!e.error||"Not Found"!==e.error&&"NoSuchTagSet"!==e.error.Code)t(e);else{var r={Tags:[],statusCode:e.statusCode};e.headers&&(r.headers=e.headers),t(null,r)}else{var o=[];try{o=n.Tagging.TagSet.Tag||[]}catch(e){}o=i.clone(i.isArray(o)?o:[o]),t(null,{Tags:o,statusCode:n.statusCode,headers:n.headers})}}))},deleteObjectTagging:function(e,t){p.call(this,{Action:"name/cos:DeleteObjectTagging",method:"DELETE",Bucket:e.Bucket,Region:e.Region,Key:e.Key,headers:e.Headers,action:"tagging",VersionId:e.VersionId},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},selectObjectContent:function(e,t){if(!e.SelectType)return t(i.error(new Error("missing param SelectType")));var n=e.SelectRequest||{},r=i.json2xml({SelectRequest:n}),o=e.Headers;o["Content-Type"]="application/xml",o["Content-MD5"]=i.b64(i.md5(r)),p.call(this,{Action:"name/cos:GetObject",method:"POST",Bucket:e.Bucket,Region:e.Region,Key:e.Key,headers:e.Headers,action:"select",qs:{"select-type":e.SelectType},VersionId:e.VersionId,body:r,DataType:"arraybuffer",rawBody:!0},(function(e,n){if(e&&204===e.statusCode)return t(null,{statusCode:e.statusCode});if(e)return t(e);var r=i.parseSelectPayload(n.body);t(null,{statusCode:n.statusCode,headers:n.headers,Body:r.body,Payload:r.payload})}))},appendObject:function(e,t){var n=e.Headers;n["Cache-Control"]||n["cache-control"]||(n["Cache-Control"]=""),n["Content-Type"]||n["content-type"]||(n["Content-Type"]=e.Body&&e.Body.type||""),p.call(this,{Action:"name/cos:AppendObject",method:"POST",Bucket:e.Bucket,Region:e.Region,action:"append",Key:e.Key,body:e.Body,qs:{position:e.Position},headers:e.Headers},(function(e,n){if(e)return t(e);t(null,n)}))},uploadPartCopy:function(e,t){var n=e.CopySource||"",r=i.getSourceParams.call(this,n);if(r){var o=r.Bucket,a=r.Region,s=decodeURIComponent(r.Key);p.call(this,{Scope:[{action:"name/cos:GetObject",bucket:o,region:a,prefix:s},{action:"name/cos:PutObject",bucket:e.Bucket,region:e.Region,prefix:e.Key}],method:"PUT",Bucket:e.Bucket,Region:e.Region,Key:e.Key,VersionId:e.VersionId,qs:{partNumber:e.PartNumber,uploadId:e.UploadId},headers:e.Headers},(function(e,n){if(e)return t(e);var r=i.clone(n.CopyPartResult||{});i.extend(r,{statusCode:n.statusCode,headers:n.headers}),t(null,r)}))}else t(i.error(new Error("CopySource format error")))},multipartInit:function(e,t){var n=this,r=e.Headers,o=e.tracker;r["Cache-Control"]||r["cache-control"]||(r["Cache-Control"]=""),r["Content-Type"]||r["content-type"]||(r["Content-Type"]=e.Body&&e.Body.type||"");var a=e.Body&&(e.UploadAddMetaMd5||n.options.UploadAddMetaMd5);a&&o&&o.setParams({md5StartTime:(new Date).getTime()}),i.getBodyMd5(a,e.Body,(function(r){r&&(e.Headers["x-cos-meta-md5"]=r),a&&o&&o.setParams({md5EndTime:(new Date).getTime()}),p.call(n,{Action:"name/cos:InitiateMultipartUpload",method:"POST",Bucket:e.Bucket,Region:e.Region,Key:e.Key,action:"uploads",headers:e.Headers,qs:e.Query,tracker:o},(function(e,n){return e?(o&&o.parent&&o.parent.setParams({errorNode:"multipartInit"}),t(e)):(n=i.clone(n||{}))&&n.InitiateMultipartUploadResult?t(null,i.extend(n.InitiateMultipartUploadResult,{statusCode:n.statusCode,headers:n.headers})):void t(null,n)}))}),e.onHashProgress)},multipartUpload:function(e,t){var n=this;i.getFileSize("multipartUpload",e,(function(){var r=e.tracker,o=n.options.UploadCheckContentMd5;o&&r&&r.setParams({md5StartTime:(new Date).getTime()}),i.getBodyMd5(o,e.Body,(function(a){a&&(e.Headers["Content-MD5"]=i.b64(a)),o&&r&&r.setParams({md5EndTime:(new Date).getTime()}),r&&r.setParams({partNumber:e.PartNumber}),p.call(n,{Action:"name/cos:UploadPart",TaskId:e.TaskId,method:"PUT",Bucket:e.Bucket,Region:e.Region,Key:e.Key,qs:{partNumber:e.PartNumber,uploadId:e.UploadId},headers:e.Headers,onProgress:e.onProgress,body:e.Body||null,tracker:r},(function(e,n){if(e)return r&&r.parent&&r.parent.setParams({errorNode:"multipartUpload"}),t(e);t(null,{ETag:i.attr(n.headers,"etag",""),statusCode:n.statusCode,headers:n.headers})}))}))}))},multipartComplete:function(e,t){for(var n=this,r=e.UploadId,o=e.Parts,a=e.tracker,s=0,u=o.length;s-1?function(e){var t=e.match(/q-url-param-list.*?(?=&)/g)[0],n="q-url-param-list="+encodeURIComponent(t.replace(/q-url-param-list=/,"")).toLowerCase(),r=new RegExp(t,"g");return e.replace(r,n)}(n.Authorization):"sign="+encodeURIComponent(n.Authorization)),n.SecurityToken&&(r+="&x-cos-security-token="+n.SecurityToken),n.ClientIP&&(r+="&clientIP="+n.ClientIP),n.ClientUA&&(r+="&clientUA="+n.ClientUA),n.Token&&(r+="&token="+n.Token),a&&(r+="&"+a),setTimeout((function(){t(null,{Url:r})}))}}));return p?(s+="?"+p.Authorization+(p.SecurityToken?"&x-cos-security-token="+p.SecurityToken:""),a&&(s+="&"+a)):a&&(s+="?"+a),s},getAuth:function(e){return i.getAuth({SecretId:e.SecretId||this.options.SecretId||"",SecretKey:e.SecretKey||this.options.SecretKey||"",Bucket:e.Bucket,Region:e.Region,Method:e.Method,Key:e.Key,Query:e.Query,Headers:e.Headers,Expires:e.Expires,UseRawKey:this.options.UseRawKey,SystemClockOffset:this.options.SystemClockOffset})}};e.exports.init=function(e,t){t.transferToTaskMethod(h,"putObject"),i.each(h,(function(t,n){e.prototype[n]=i.apiWrapper(n,t),function(e,t,n){i.each(["Cors","Acl"],(function(r){if(e.slice(-r.length)===r){var o=e.slice(0,-r.length)+r.toUpperCase(),a=i.apiWrapper(e,t);n[o]=function(){a.apply(this,arguments)}}}))}(n,t,e.prototype)}))}},function(e,t,n){var r=n(0),o=function(e){switch(r(e)){case"string":return e;case"boolean":return e?"true":"false";case"number":return isFinite(e)?e:"";default:return""}},i=function(e,t,n){var r={};return t.getAllResponseHeaders().trim().split("\n").forEach((function(e){if(e){var t=e.indexOf(":"),n=e.substr(0,t).trim().toLowerCase(),o=e.substr(t+1).trim();r[n]=o}})),{error:e,statusCode:t.status,statusMessage:t.statusText,headers:r,body:n}},a=function(e,t){return t||"text"!==t?e.response:e.responseText};e.exports=function(e,t){var n,s,c,u,l=(e.method||"GET").toUpperCase(),d=e.url;if(e.qs){var p=(n=e.qs,s=s||"&",c=c||"=",null===n&&(n=void 0),"object"===r(n)?Object.keys(n).map((function(e){var t=encodeURIComponent(o(e))+c;return Array.isArray(n[e])?n[e].map((function(e){return t+encodeURIComponent(o(e))})).join(s):t+encodeURIComponent(o(n[e]))})).filter(Boolean).join(s):u?encodeURIComponent(o(u))+c+encodeURIComponent(o(n)):"");p&&(d+=(-1===d.indexOf("?")?"?":"&")+p)}var f=new XMLHttpRequest;if(f.open(l,d,!0),f.responseType=e.dataType||"text",e.xhrFields)for(var h in e.xhrFields)f[h]=e.xhrFields[h];var m=e.headers;if(m)for(var g in m)m.hasOwnProperty(g)&&"content-length"!==g.toLowerCase()&&"user-agent"!==g.toLowerCase()&&"origin"!==g.toLowerCase()&&"host"!==g.toLowerCase()&&f.setRequestHeader(g,m[g]);return e.onProgress&&f.upload&&(f.upload.onprogress=e.onProgress),e.onDownloadProgress&&(f.onprogress=e.onDownloadProgress),e.timeout&&(f.timeout=e.timeout),f.ontimeout=function(e){var n=new Error("timeout");t(i(n,f))},f.onload=function(){t(i(null,f,a(f,e.dataType)))},f.onerror=function(n){var r=a(f,e.dataType);if(r)t(i(null,f,r));else{var o=f.statusText;o||0!==f.status||(o=new Error("CORS blocked or network error")),t(i(o,f,r))}},f.send(e.body||""),f}},function(e,t,n){var r=n(0),o=n(9),i=n(29),a=n(8).EventProxy,s=n(1),c=n(6);function u(e,t){var n=e.TaskId,r=e.Bucket,c=e.Region,u=e.Key,p=e.StorageClass,f=this,h={},m=e.FileSize,g=e.SliceSize,y=Math.ceil(m/g),v=0,C=s.throttleOnProgress.call(f,m,e.onHashProgress),k=function(t,n){var r=t.length;if(0===r)return n(null,!0);if(r>y)return n(null,!1);if(r>1&&Math.max(t[0].Size,t[1].Size)!==g)return n(null,!1);!function o(i){if(i=a.length)S.emit("has_and_check_upload_id",t);else{var p=a[l];if(!s.isInArray(t,p))return o.removeUploadId.call(f,p),void i(l+1);o.using[p]?i(l+1):d.call(f,{Bucket:r,Region:c,Key:u,UploadId:p,tracker:e.tracker},(function(e,t){f._isRunningTask(n)&&(e?(o.removeUploadId.call(f,p),i(l+1)):S.emit("upload_id_available",{UploadId:p,PartList:t.PartList}))}))}}(0)}else S.emit("has_and_check_upload_id",t)})),S.on("get_remote_upload_id_list",(function(){l.call(f,{Bucket:r,Region:c,Key:u,tracker:e.tracker},(function(t,i){if(f._isRunningTask(n)){if(t)return S.emit("error",t);var a=s.filter(i.UploadList,(function(e){return e.Key===u&&(!p||e.StorageClass.toUpperCase()===p.toUpperCase())})).reverse().map((function(e){return e.UploadId||e.UploadID}));if(a.length)S.emit("seek_local_avail_upload_id",a);else{var c,l=o.getFileId(e.Body,e.ChunkSize,r,u);l&&(c=o.getUploadIdList.call(f,l))&&s.each(c,(function(e){o.removeUploadId.call(f,e)})),S.emit("no_available_upload_id")}}}))})),S.emit("get_remote_upload_id_list")}function l(e,t){var n=this,r=[],o={Bucket:e.Bucket,Region:e.Region,Prefix:e.Key,calledBySdk:e.calledBySdk||"sliceUploadFile",tracker:e.tracker};!function e(){n.multipartList(o,(function(n,i){if(n)return t(n);r.push.apply(r,i.Upload||[]),"true"===i.IsTruncated?(o.KeyMarker=i.NextKeyMarker,o.UploadIdMarker=i.NextUploadIdMarker,e()):t(null,{UploadList:r})}))}()}function d(e,t){var n=this,r=[],o={Bucket:e.Bucket,Region:e.Region,Key:e.Key,UploadId:e.UploadId,calledBySdk:"sliceUploadFile",tracker:e.tracker};!function e(){n.multipartListPart(o,(function(n,i){if(n)return t(n);r.push.apply(r,i.Part||[]),"true"===i.IsTruncated?(o.PartNumberMarker=i.NextPartNumberMarker,e()):t(null,{PartList:r})}))}()}function p(e,t){var n=this,r=e.TaskId,o=e.Bucket,a=e.Region,c=e.Key,u=e.UploadData,l=e.FileSize,d=e.SliceSize,p=Math.min(e.AsyncLimit||n.options.ChunkParallelLimit||1,256),h=e.Body,m=Math.ceil(l/d),g=0,y=e.ServerSideEncryption,v=e.Headers,C=s.filter(u.PartList,(function(e){return e.Uploaded&&(g+=e.PartNumber>=m&&l%d||d),!e.Uploaded})),k=e.onProgress;i.eachLimit(C,p,(function(t,i){if(n._isRunningTask(r)){var s=t.PartNumber,p=Math.min(l,t.PartNumber*d)-(t.PartNumber-1)*d,m=0;f.call(n,{TaskId:r,Bucket:o,Region:a,Key:c,SliceSize:d,FileSize:l,PartNumber:s,ServerSideEncryption:y,Body:h,UploadData:u,Headers:v,onProgress:function(e){g+=e.loaded-m,m=e.loaded,k({loaded:g,total:l})},tracker:e.tracker},(function(e,o){n._isRunningTask(r)&&(e||o.ETag||(e='get ETag error, please add "ETag" to CORS ExposeHeader setting.( 获取ETag失败,请在CORS ExposeHeader设置中添加ETag,请参考文档:https://cloud.tencent.com/document/product/436/13318 )'),e?g-=m:(g+=p-m,t.ETag=o.ETag),k({loaded:g,total:l}),i(e||null,o))}))}}),(function(e){if(n._isRunningTask(r))return e?t(e):void t(null,{UploadId:u.UploadId,SliceList:u.PartList})}))}function f(e,t){var n=this,r=e.TaskId,o=e.Bucket,a=e.Region,c=e.Key,u=e.FileSize,l=e.Body,d=1*e.PartNumber,p=e.SliceSize,f=e.ServerSideEncryption,h=e.UploadData,m=e.Headers||{},g=n.options.ChunkRetryTimes+1,y=p*(d-1),v=p,C=y+p;C>u&&(v=(C=u)-y);var k=["x-cos-traffic-limit","x-cos-mime-limit"],S={};s.each(m,(function(e,t){k.indexOf(t)>-1&&(S[t]=e)}));var b=h.PartList[d-1];i.retry(g,(function(t){n._isRunningTask(r)&&s.fileSlice(l,y,C,!0,(function(i){n.multipartUpload({TaskId:r,Bucket:o,Region:a,Key:c,ContentLength:v,PartNumber:d,UploadId:h.UploadId,ServerSideEncryption:f,Body:i,Headers:S,onProgress:e.onProgress,calledBySdk:"sliceUploadFile",tracker:e.tracker},(function(e,o){if(n._isRunningTask(r))return e?t(e):(b.Uploaded=!0,t(null,o))}))}))}),(function(e,o){if(n._isRunningTask(r))return t(e,o)}))}function h(e,t){var n=e.Bucket,r=e.Region,o=e.Key,a=e.UploadId,s=e.SliceList,c=this,u=this.options.ChunkRetryTimes+1,l=e.Headers,d=s.map((function(e){return{PartNumber:e.PartNumber,ETag:e.ETag}}));i.retry(u,(function(t){c.multipartComplete({Bucket:n,Region:r,Key:o,UploadId:a,Parts:d,Headers:l,calledBySdk:"sliceUploadFile",tracker:e.tracker},t)}),(function(e,n){t(e,n)}))}function m(e,t){var n=e.Bucket,r=e.Region,o=e.Key,a=e.AbortArray,s=e.AsyncLimit||1,c=this,u=0,l=new Array(a.length);i.eachLimit(a,s,(function(t,i){var a=u;if(o&&o!==t.Key)return l[a]={error:{KeyNotMatch:!0}},void i(null);var s=t.UploadId||t.UploadID;c.multipartAbort({Bucket:n,Region:r,Key:t.Key,Headers:e.Headers,UploadId:s},(function(e){var o={Bucket:n,Region:r,Key:t.Key,UploadId:s};l[a]={error:e,task:o},i(null)})),u++}),(function(e){if(e)return t(e);for(var n=[],r=[],o=0,i=l.length;oo?"sliceUploadFile":"putObject",h=e.onFileFinish;i.push({api:f,params:e,callback:function(n,r){e.tracker&&e.tracker.formatResult(n,r),h&&h(n,r,l),t&&t(n,r)}}),n._addTasks(i)},uploadFiles:function(e,t){var n=this,o=void 0===e.SliceSize?n.options.SliceSize:e.SliceSize,i=0,a=0,u=s.throttleOnProgress.call(n,a,e.onProgress),l=e.files.length,d=e.onFileFinish,p=Array(l),f=function(e,n,r){u(null,!0),d&&d(e,n,r),p[r.Index]={options:r,error:e,data:n},--l<=0&&t&&t(null,{files:p})},h=[];s.each(e.files,(function(e,t){!function(){var l=e.Body,d=l.size||l.length||0,p={Index:t,TaskId:""};if(i+=d,n.options.EnableTracker){var m=n.options.UseAccelerate||"string"==typeof n.options.Domain&&n.options.Domain.includes("accelerate.");e.tracker=new c({bucket:e.Bucket,region:e.Region,apiName:"uploadFiles",fileKey:e.Key,fileSize:d,accelerate:m,deepTracker:n.options.DeepTracker,customId:n.options.CustomId,delay:n.options.TrackerDelay})}s.each(e,(function(e,t){"object"!==r(e)&&"function"!=typeof e&&(p[t]=e)}));var g=e.onTaskReady;e.onTaskReady=function(e){p.TaskId=e,g&&g(e)};var y=0,v=e.onProgress;e.onProgress=function(e){a=a-y+e.loaded,y=e.loaded,v&&v(e),u({loaded:a,total:i})};var C=d>o?"sliceUploadFile":"putObject",k=e.onFileFinish;h.push({api:C,params:e,callback:function(t,n){e.tracker&&e.tracker.formatResult(t,n),k&&k(t,n),f&&f(t,n,p)}})}()})),n._addTasks(h)},sliceCopyFile:function(e,t){var n=new a,r=this,c=e.Bucket,u=e.Region,l=e.Key,p=e.CopySource,f=s.getSourceParams.call(this,p);if(f){var h=f.Bucket,m=f.Region,y=decodeURIComponent(f.Key),v=void 0===e.CopySliceSize?r.options.CopySliceSize:e.CopySliceSize;v=Math.max(0,v);var C,k,S=e.CopyChunkSize||this.options.CopyChunkSize,b=this.options.CopyChunkParallelLimit,T=this.options.ChunkRetryTimes+1,R=0,E=0,w={},x={},A={};n.on("copy_slice_complete",(function(n){var a={};s.each(e.Headers,(function(e,t){0===t.toLowerCase().indexOf("x-cos-meta-")&&(a[t]=e)}));var d=s.map(n.PartList,(function(e){return{PartNumber:e.PartNumber,ETag:e.ETag}}));i.retry(T,(function(e){r.multipartComplete({Bucket:c,Region:u,Key:l,UploadId:n.UploadId,Parts:d,calledBySdk:"sliceCopyFile"},e)}),(function(e,r){if(o.removeUsing(n.UploadId),e)return k(null,!0),t(e);o.removeUploadId(n.UploadId),k({loaded:C,total:C},!0),t(null,r)}))})),n.on("get_copy_data_finish",(function(e){var a=o.getCopyFileId(p,w,S,c,l);a&&o.saveUploadId(a,e.UploadId,r.options.UploadIdCacheLimit),o.setUsing(e.UploadId);var d=s.filter(e.PartList,(function(e){return e.Uploaded&&(E+=e.PartNumber>=R&&C%S||S),!e.Uploaded}));i.eachLimit(d,b,(function(t,n){var o=t.PartNumber,a=t.CopySourceRange,s=t.end-t.start;i.retry(T,(function(t){g.call(r,{Bucket:c,Region:u,Key:l,CopySource:p,UploadId:e.UploadId,PartNumber:o,CopySourceRange:a},t)}),(function(e,r){if(e)return n(e);k({loaded:E+=s,total:C}),t.ETag=r.ETag,n(e||null,r)}))}),(function(r){if(r)return o.removeUsing(e.UploadId),k(null,!0),t(r);n.emit("copy_slice_complete",e)}))})),n.on("get_chunk_size_finish",(function(){var i=function(){r.multipartInit({Bucket:c,Region:u,Key:l,Headers:A},(function(r,o){if(r)return t(r);e.UploadId=o.UploadId,n.emit("get_copy_data_finish",{UploadId:e.UploadId,PartList:e.PartList})}))},a=o.getCopyFileId(p,w,S,c,l),f=o.getUploadIdList(a);if(!a||!f)return i();!function t(a){if(a>=f.length)return i();var p=f[a];if(o.using[p])return t(a+1);d.call(r,{Bucket:c,Region:u,Key:l,UploadId:p},(function(r,i){if(r)o.removeUploadId(p),t(a+1);else{if(o.using[p])return t(a+1);var c={},u=0;s.each(i.PartList,(function(e){var t=parseInt(e.Size),n=u+t-1;c[e.PartNumber+"|"+u+"|"+n]=e.ETag,u+=t})),s.each(e.PartList,(function(e){var t=c[e.PartNumber+"|"+e.start+"|"+e.end];t&&(e.ETag=t,e.Uploaded=!0)})),n.emit("get_copy_data_finish",{UploadId:p,PartList:e.PartList})}}))}(0)})),n.on("get_file_size_finish",(function(){if(function(){for(var t=[1,2,4,8,16,32,64,128,256,512,1024,2048,4096,5120],n=1048576,o=0;on.length&&(x[t]=e)})),n.emit("get_file_size_finish")}else t(s.error(new Error('get Content-Length error, please add "Content-Length" to CORS ExposeHeader setting.( 获取Content-Length失败,请在CORS ExposeHeader设置中添加Content-Length,请参考文档:https://cloud.tencent.com/document/product/436/13318 )')))}))}else t(s.error(new Error("CopySource format error")))}};e.exports.init=function(e,t){t.transferToTaskMethod(y,"sliceUploadFile"),s.each(y,(function(t,n){e.prototype[n]=s.apiWrapper(n,t)}))}},function(e,t){var n={eachLimit:function(e,t,n,r){if(r=r||function(){},!e.length||t<=0)return r();var o=0,i=0,a=0;!function s(){if(o>=e.length)return r();for(;a=e.length?r():s())}))}()},retry:function(e,t,n){e<1?n():function r(o){t((function(t,i){t&&ot?1:-1}))}var d,p=["cache-control","content-disposition","content-encoding","content-length","content-md5","expect","expires","host","if-match","if-modified-since","if-none-match","if-unmodified-since","origin","range","transfer-encoding"],f=function(e,t,n){var r=t/8,o=e.slice(n,n+r);return new Uint8Array(o).reverse(),new{8:Uint8Array,16:Uint16Array,32:Uint32Array}[t](o)[0]},h=function(e,t,n,r){var o=e.slice(t,n),i="";return new Uint8Array(o).forEach((function(e){i+=String.fromCharCode(e)})),r&&(i=decodeURIComponent(escape(i))),i},m=function(){},g=function(e){var t={};for(var n in e)e.hasOwnProperty(n)&&void 0!==e[n]&&null!==e[n]&&(t[n]=e[n]);return t},y=(d=function(e,t){e=e.split("."),t=t.split(".");for(var n=0;nparseInt(t[n])?1:-1;return 0},function(e){if(!e)return!1;var t=(e.match(/Chrome\/([.\d]+)/)||[])[1],n=(e.match(/QBCore\/([.\d]+)/)||[])[1],r=(e.match(/QQBrowser\/([.\d]+)/)||[])[1];return t&&d(t,"53.0.2785.116")<0&&n&&d(n,"3.53.991.400")<0&&r&&d(r,"9.0.2524.400")<=0||!1}("undefined"!=typeof navigator&&navigator.userAgent)),v=1048576;function C(e){return T(e,(function(e){return"object"===r(e)&&null!==e?C(e):e}))}function k(e,t){return b(t,(function(n,r){e[r]=t[r]})),e}function S(e){return e instanceof Array}function b(e,t){for(var n in e)e.hasOwnProperty(n)&&t(e[n],n)}function T(e,t){var n=S(e)?[]:{};for(var r in e)e.hasOwnProperty(r)&&(n[r]=t(e[r],r));return n}var R=function(e,t){var n=t.Bucket,r=t.Region,o=t.Key,i=this.options.Domain,a=!i||"string"==typeof i&&i.indexOf("{Bucket}")>-1,s=!i||"string"==typeof i&&i.indexOf("{Region}")>-1;if(e.indexOf("Bucket")>-1||"deleteMultipleObject"===e||"multipartList"===e||"listObjectVersions"===e){if(a&&!n)return"Bucket";if(s&&!r)return"Region"}else if(e.indexOf("Object")>-1||e.indexOf("multipart")>-1||"sliceUploadFile"===e||"abortUploadTask"===e){if(a&&!n)return"Bucket";if(s&&!r)return"Region";if(!o)return"Key"}return!1},E=function(e,t){if(t=k({},t),"getAuth"!==e&&"getV4Auth"!==e&&"getObjectUrl"!==e){var n=t.Headers||{};if(t&&"object"===r(t)){!function(){for(var e in t)t.hasOwnProperty(e)&&e.indexOf("x-cos-")>-1&&(n[e]=t[e])}();I.each({"x-cos-mfa":"MFA","Content-MD5":"ContentMD5","Content-Length":"ContentLength","Content-Type":"ContentType",Expect:"Expect",Expires:"Expires","Cache-Control":"CacheControl","Content-Disposition":"ContentDisposition","Content-Encoding":"ContentEncoding",Range:"Range","If-Modified-Since":"IfModifiedSince","If-Unmodified-Since":"IfUnmodifiedSince","If-Match":"IfMatch","If-None-Match":"IfNoneMatch","x-cos-copy-source":"CopySource","x-cos-copy-source-Range":"CopySourceRange","x-cos-metadata-directive":"MetadataDirective","x-cos-copy-source-If-Modified-Since":"CopySourceIfModifiedSince","x-cos-copy-source-If-Unmodified-Since":"CopySourceIfUnmodifiedSince","x-cos-copy-source-If-Match":"CopySourceIfMatch","x-cos-copy-source-If-None-Match":"CopySourceIfNoneMatch","x-cos-acl":"ACL","x-cos-grant-read":"GrantRead","x-cos-grant-write":"GrantWrite","x-cos-grant-full-control":"GrantFullControl","x-cos-grant-read-acp":"GrantReadAcp","x-cos-grant-write-acp":"GrantWriteAcp","x-cos-storage-class":"StorageClass","x-cos-traffic-limit":"TrafficLimit","x-cos-mime-limit":"MimeLimit","x-cos-server-side-encryption-customer-algorithm":"SSECustomerAlgorithm","x-cos-server-side-encryption-customer-key":"SSECustomerKey","x-cos-server-side-encryption-customer-key-MD5":"SSECustomerKeyMD5","x-cos-server-side-encryption":"ServerSideEncryption","x-cos-server-side-encryption-cos-kms-key-id":"SSEKMSKeyId","x-cos-server-side-encryption-context":"SSEContext","Pic-Operations":"PicOperations"},(function(e,r){void 0!==t[e]&&(n[r]=t[e])})),t.Headers=g(n)}}return t},w=function(e){return Date.now()+(e||0)},x="object"===("undefined"==typeof navigator?"undefined":r(navigator))&&!!navigator.userAgent.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/),A="object"===("undefined"==typeof navigator?"undefined":r(navigator))&&/\sQQ/i.test(navigator.userAgent),I={noop:m,formatParams:E,apiWrapper:function(e,t){return function(n,r){var o,i=this;if("function"==typeof n&&(r=n,n={}),n=E(e,n),i.options.EnableTracker)if("sliceUploadFile"===n.calledBySdk)o=n.tracker&&n.tracker.generateSubTracker({apiName:e});else if(["uploadFile","uploadFiles"].includes(e))o=null;else{var a=-1;n.Body&&(a="string"==typeof n.Body?n.Body.length:n.Body.size||n.Body.byteLength||-1),o=new c({bucket:n.Bucket,region:n.Region,apiName:e,fileKey:n.Key,fileSize:a,deepTracker:i.options.DeepTracker,customId:i.options.CustomId,delay:i.options.TrackerDelay})}n.tracker=o;var s=function(e){return e&&e.headers&&(e.headers["x-cos-request-id"]&&(e.RequestId=e.headers["x-cos-request-id"]),e.headers["x-ci-request-id"]&&(e.RequestId=e.headers["x-ci-request-id"]),e.headers["x-cos-version-id"]&&(e.VersionId=e.headers["x-cos-version-id"]),e.headers["x-cos-delete-marker"]&&(e.DeleteMarker=e.headers["x-cos-delete-marker"])),e},u=function(e,t){o&&o.formatResult(e,t),r&&r(s(e),s(t))},l=function(){if("getService"!==e&&"abortUploadTask"!==e){var t=R.call(i,e,n);if(t)return"missing param "+t;if(n.Region){if(i.options.CompatibilityMode){if(!/^([a-z\d-.]+)$/.test(n.Region))return"Region format error."}else{if(n.Region.indexOf("cos.")>-1)return'param Region should not be start with "cos."';if(!/^([a-z\d-]+)$/.test(n.Region))return"Region format error."}!i.options.CompatibilityMode&&-1===n.Region.indexOf("-")&&"yfb"!==n.Region&&"default"!==n.Region&&n.Region}if(n.Bucket){if(!/^([a-z\d-]+)-(\d+)$/.test(n.Bucket))if(n.AppId)n.Bucket=n.Bucket+"-"+n.AppId;else{if(!i.options.AppId)return'Bucket should format as "test-1250000000".';n.Bucket=n.Bucket+"-"+i.options.AppId}n.AppId&&delete n.AppId}!i.options.UseRawKey&&n.Key&&"/"===n.Key.substr(0,1)&&(n.Key=n.Key.substr(1))}}(),d=["getAuth","getObjectUrl"].includes(e);if("function"==typeof Promise&&!d&&!r)return new Promise((function(e,o){if(r=function(t,n){t?o(t):e(n)},l)return u(I.error(new Error(l)));t.call(i,n,u)}));if(l)return u(I.error(new Error(l)));var p=t.call(i,n,u);return d?p:void 0}},xml2json:a,json2xml:s,md5:o,clearKey:g,fileSlice:function(e,t,n,r,o){var i;if(e.slice?i=e.slice(t,n):e.mozSlice?i=e.mozSlice(t,n):e.webkitSlice&&(i=e.webkitSlice(t,n)),r&&y){var a=new FileReader;a.onload=function(e){i=null,o(new Blob([a.result]))},a.readAsArrayBuffer(i)}else o(i)},getBodyMd5:function(e,t,n,r){n=n||m,e?"string"==typeof t?n(I.md5(t,!0)):Blob&&t instanceof Blob?I.getFileMd5(t,(function(e,t){n(t)}),r):n():n()},getFileMd5:function(e,t,n){var r=e.size,i=0,a=o.getCtx();!function o(s){if(s>=r){var c=a.digest("hex");t(null,c)}else{var u=Math.min(r,s+v);I.fileSlice(e,s,u,!1,(function(e){!function(e,t){var n,r=new FileReader;FileReader.prototype.readAsBinaryString?(n=FileReader.prototype.readAsBinaryString,r.onload=function(){t(this.result)}):FileReader.prototype.readAsArrayBuffer&&(n=function(e){var n="",r=new FileReader;r.onload=function(e){for(var o=new Uint8Array(r.result),i=o.byteLength,a=0;a-1||p.indexOf(r)>-1)&&(t[n]=e[n])}return t}(C(e.Headers||e.headers||{})),u=e.Key||"";e.UseRawKey?t=e.Pathname||e.pathname||"/"+u:0!==(t=e.Pathname||e.pathname||u).indexOf("/")&&(t="/"+t);var d=!1!==e.ForceSignHost;if(!c.Host&&!c.host&&e.Bucket&&e.Region&&d&&(c.Host=e.Bucket+".cos."+e.Region+".myqcloud.com"),!n)throw new Error("missing param SecretId");if(!r)throw new Error("missing param SecretKey");var f=Math.round(w(e.SystemClockOffset)/1e3)-1,h=f,m=e.Expires||e.expires;h+=void 0===m?900:1*m||0;var g=n,y=o||f+";"+h,v=o||f+";"+h,k=l(c,!0).join(";").toLowerCase(),S=l(s,!0).join(";").toLowerCase(),b=i.HmacSHA1(v,r).toString(),T=[a,t,I.obj2str(s,!0),I.obj2str(c,!0),""].join("\n"),R=["sha1",y,i.SHA1(T).toString(),""].join("\n");return["q-sign-algorithm=sha1","q-ak="+g,"q-sign-time="+y,"q-key-time="+v,"q-header-list="+k,"q-url-param-list="+S,"q-signature="+i.HmacSHA1(R,b).toString()].join("&")},parseSelectPayload:function(e){for(var t={},n=h(e),r={records:[]};e.byteLength;){var o,i=f(e,32,0),a=f(e,32,4),s=i-a-16,c=0;for(e=e.slice(12);c1)for(var n=1;n=0))throw new I(x,new Error(e.tagName+"@"+n));for(var o=t.length-1;r"==e&&">")||"&"==e&&"&"||'"'==e&&"""||"&#"+e.charCodeAt()+";"}function j(e,t){if(t(e))return!0;if(e=e.firstChild)do{if(j(e,t))return!0}while(e=e.nextSibling)}function F(){this.ownerDocument=this}function K(e,t,n,r){e&&e._inc++,n.namespaceURI===i.XMLNS&&delete t._nsMap[n.prefix?n.localName:""]}function q(e,t,n){if(e&&e._inc){e._inc++;var r=t.childNodes;if(n)r[r.length++]=n;else{for(var o=t.firstChild,i=0;o;)r[i++]=o,o=o.nextSibling;r.length=i,delete r[r.length]}}}function z(e,t){var n=t.previousSibling,r=t.nextSibling;return n?n.nextSibling=r:e.firstChild=r,r?r.previousSibling=n:e.lastChild=n,t.parentNode=null,t.previousSibling=null,t.nextSibling=null,q(e.ownerDocument,e),t}function G(e){return e&&e.nodeType===H.DOCUMENT_TYPE_NODE}function V(e){return e&&e.nodeType===H.ELEMENT_NODE}function X(e){return e&&e.nodeType===H.TEXT_NODE}function W(e,t){var n=e.childNodes||[];if(o(n,V)||G(t))return!1;var r=o(n,G);return!(t&&r&&n.indexOf(r)>n.indexOf(t))}function Q(e,t){var n=e.childNodes||[];if(o(n,(function(e){return V(e)&&e!==t})))return!1;var r=o(n,G);return!(t&&r&&n.indexOf(r)>n.indexOf(t))}function J(e,t,n){if(!function(e){return e&&(e.nodeType===H.DOCUMENT_NODE||e.nodeType===H.DOCUMENT_FRAGMENT_NODE||e.nodeType===H.ELEMENT_NODE)}(e))throw new I(w,"Unexpected parent node type "+e.nodeType);if(n&&n.parentNode!==e)throw new I(x,"child not in parent");if(!function(e){return e&&(V(e)||X(e)||G(e)||e.nodeType===H.DOCUMENT_FRAGMENT_NODE||e.nodeType===H.COMMENT_NODE||e.nodeType===H.PROCESSING_INSTRUCTION_NODE)}(t)||G(t)&&e.nodeType!==H.DOCUMENT_NODE)throw new I(w,"Unexpected node type "+t.nodeType+" for parent node type "+e.nodeType)}function $(e,t,n){var r=e.childNodes||[],i=t.childNodes||[];if(t.nodeType===H.DOCUMENT_FRAGMENT_NODE){var a=i.filter(V);if(a.length>1||o(i,X))throw new I(w,"More than one element or text in fragment");if(1===a.length&&!W(e,n))throw new I(w,"Element in fragment can not be inserted before doctype")}if(V(t)&&!W(e,n))throw new I(w,"Only one element can be added and only after doctype");if(G(t)){if(o(r,G))throw new I(w,"Only one doctype is allowed");var s=o(r,V);if(n&&r.indexOf(s)1||o(i,X))throw new I(w,"More than one element or text in fragment");if(1===a.length&&!Q(e,n))throw new I(w,"Element in fragment can not be inserted before doctype")}if(V(t)&&!Q(e,n))throw new I(w,"Only one element can be added and only after doctype");if(G(t)){if(o(r,(function(e){return G(e)&&e!==n})))throw new I(w,"Only one doctype is allowed");var s=o(r,V);if(n&&r.indexOf(s)=0;T--){if(""===(R=o[T]).prefix&&R.namespace===e.namespaceURI){d=R.namespace;break}}if(d!==e.namespaceURI)for(T=o.length-1;T>=0;T--){var R;if((R=o[T]).namespace===e.namespaceURI){R.prefix&&(l=R.prefix+":"+u);break}}}t.push("<",l);for(var E=0;E"),n&&/^script$/i.test(u))for(;c;)c.data?t.push(c.data):ge(c,t,n,r,o.slice()),c=c.nextSibling;else for(;c;)ge(c,t,n,r,o.slice()),c=c.nextSibling;t.push("")}else t.push("/>");return;case k:case b:for(c=e.firstChild;c;)ge(c,t,n,r,o.slice()),c=c.nextSibling;return;case f:return me(t,e.name,e.value);case h:return t.push(e.data.replace(/[<&>]/g,L));case m:return t.push("");case C:return t.push("\x3c!--",e.data,"--\x3e");case S:var I=e.publicId,O=e.systemId;if(t.push("");else if(O&&"."!=O)t.push(" SYSTEM ",O,">");else{var B=e.internalSubset;B&&t.push(" [",B,"]"),t.push(">")}return;case v:return t.push("");case g:return t.push("&",e.nodeName,";");default:t.push("??",e.nodeName)}}function ye(e,t,n){var r;switch(t.nodeType){case p:(r=t.cloneNode(!1)).ownerDocument=e;case b:break;case f:n=!0}if(r||(r=t.cloneNode(!1)),r.ownerDocument=e,r.parentNode=null,n)for(var o=t.firstChild;o;)r.appendChild(ye(e,o,n)),o=o.nextSibling;return r}function ve(e,t,n){var r=new t.constructor;for(var o in t)if(Object.prototype.hasOwnProperty.call(t,o)){var i=t[o];"object"!=typeof i&&i!=r[o]&&(r[o]=i)}switch(t.childNodes&&(r.childNodes=new O),r.ownerDocument=e,r.nodeType){case p:var a=t.attributes,s=r.attributes=new P,c=a.length;s._ownerElement=r;for(var u=0;u0},lookupPrefix:function(e){for(var t=this;t;){var n=t._nsMap;if(n)for(var r in n)if(Object.prototype.hasOwnProperty.call(n,r)&&n[r]===e)return r;t=t.nodeType==f?t.ownerDocument:t.parentNode}return null},lookupNamespaceURI:function(e){for(var t=this;t;){var n=t._nsMap;if(n&&Object.prototype.hasOwnProperty.call(n,e))return n[e];t=t.nodeType==f?t.ownerDocument:t.parentNode}return null},isDefaultNamespace:function(e){return null==this.lookupPrefix(e)}},u(d,H),u(d,H.prototype),F.prototype={nodeName:"#document",nodeType:k,doctype:null,documentElement:null,_inc:1,insertBefore:function(e,t){if(e.nodeType==b){for(var n=e.firstChild;n;){var r=n.nextSibling;this.insertBefore(n,t),n=r}return e}return Z(this,e,t),e.ownerDocument=this,null===this.documentElement&&e.nodeType===p&&(this.documentElement=e),e},removeChild:function(e){return this.documentElement==e&&(this.documentElement=null),z(this,e)},replaceChild:function(e,t){Z(this,e,t,Y),e.ownerDocument=this,t&&this.removeChild(t),V(e)&&(this.documentElement=e)},importNode:function(e,t){return ye(this,e,t)},getElementById:function(e){var t=null;return j(this.documentElement,(function(n){if(n.nodeType==p&&n.getAttribute("id")==e)return t=n,!0})),t},getElementsByClassName:function(e){var t=c(e);return new B(this,(function(n){var r=[];return t.length>0&&j(n.documentElement,(function(o){if(o!==n&&o.nodeType===p){var i=o.getAttribute("class");if(i){var a=e===i;if(!a){var s=c(i);a=t.every((u=s,function(e){return u&&-1!==u.indexOf(e)}))}a&&r.push(o)}}var u})),r}))},createElement:function(e){var t=new ee;return t.ownerDocument=this,t.nodeName=e,t.tagName=e,t.localName=e,t.childNodes=new O,(t.attributes=new P)._ownerElement=t,t},createDocumentFragment:function(){var e=new le;return e.ownerDocument=this,e.childNodes=new O,e},createTextNode:function(e){var t=new re;return t.ownerDocument=this,t.appendData(e),t},createComment:function(e){var t=new oe;return t.ownerDocument=this,t.appendData(e),t},createCDATASection:function(e){var t=new ie;return t.ownerDocument=this,t.appendData(e),t},createProcessingInstruction:function(e,t){var n=new de;return n.ownerDocument=this,n.tagName=n.target=e,n.nodeValue=n.data=t,n},createAttribute:function(e){var t=new te;return t.ownerDocument=this,t.name=e,t.nodeName=e,t.localName=e,t.specified=!0,t},createEntityReference:function(e){var t=new ue;return t.ownerDocument=this,t.nodeName=e,t},createElementNS:function(e,t){var n=new ee,r=t.split(":"),o=n.attributes=new P;return n.childNodes=new O,n.ownerDocument=this,n.nodeName=t,n.tagName=t,n.namespaceURI=e,2==r.length?(n.prefix=r[0],n.localName=r[1]):n.localName=t,o._ownerElement=n,n},createAttributeNS:function(e,t){var n=new te,r=t.split(":");return n.ownerDocument=this,n.nodeName=t,n.name=t,n.namespaceURI=e,n.specified=!0,2==r.length?(n.prefix=r[0],n.localName=r[1]):n.localName=t,n}},l(F,H),ee.prototype={nodeType:p,hasAttribute:function(e){return null!=this.getAttributeNode(e)},getAttribute:function(e){var t=this.getAttributeNode(e);return t&&t.value||""},getAttributeNode:function(e){return this.attributes.getNamedItem(e)},setAttribute:function(e,t){var n=this.ownerDocument.createAttribute(e);n.value=n.nodeValue=""+t,this.setAttributeNode(n)},removeAttribute:function(e){var t=this.getAttributeNode(e);t&&this.removeAttributeNode(t)},appendChild:function(e){return e.nodeType===b?this.insertBefore(e,null):function(e,t){return t.parentNode&&t.parentNode.removeChild(t),t.parentNode=e,t.previousSibling=e.lastChild,t.nextSibling=null,t.previousSibling?t.previousSibling.nextSibling=t:e.firstChild=t,e.lastChild=t,q(e.ownerDocument,e,t),t}(this,e)},setAttributeNode:function(e){return this.attributes.setNamedItem(e)},setAttributeNodeNS:function(e){return this.attributes.setNamedItemNS(e)},removeAttributeNode:function(e){return this.attributes.removeNamedItem(e.nodeName)},removeAttributeNS:function(e,t){var n=this.getAttributeNodeNS(e,t);n&&this.removeAttributeNode(n)},hasAttributeNS:function(e,t){return null!=this.getAttributeNodeNS(e,t)},getAttributeNS:function(e,t){var n=this.getAttributeNodeNS(e,t);return n&&n.value||""},setAttributeNS:function(e,t,n){var r=this.ownerDocument.createAttributeNS(e,t);r.value=r.nodeValue=""+n,this.setAttributeNode(r)},getAttributeNodeNS:function(e,t){return this.attributes.getNamedItemNS(e,t)},getElementsByTagName:function(e){return new B(this,(function(t){var n=[];return j(t,(function(r){r===t||r.nodeType!=p||"*"!==e&&r.tagName!=e||n.push(r)})),n}))},getElementsByTagNameNS:function(e,t){return new B(this,(function(n){var r=[];return j(n,(function(o){o===n||o.nodeType!==p||"*"!==e&&o.namespaceURI!==e||"*"!==t&&o.localName!=t||r.push(o)})),r}))}},F.prototype.getElementsByTagName=ee.prototype.getElementsByTagName,F.prototype.getElementsByTagNameNS=ee.prototype.getElementsByTagNameNS,l(ee,H),te.prototype.nodeType=f,l(te,H),ne.prototype={data:"",substringData:function(e,t){return this.data.substring(e,e+t)},appendData:function(e){e=this.data+e,this.nodeValue=this.data=e,this.length=e.length},insertData:function(e,t){this.replaceData(e,0,t)},appendChild:function(e){throw new Error(E[w])},deleteData:function(e,t){this.replaceData(e,t,"")},replaceData:function(e,t,n){n=this.data.substring(0,e)+n+this.data.substring(e+t),this.nodeValue=this.data=n,this.length=n.length}},l(ne,H),re.prototype={nodeName:"#text",nodeType:h,splitText:function(e){var t=this.data,n=t.substring(e);t=t.substring(0,e),this.data=this.nodeValue=t,this.length=t.length;var r=this.ownerDocument.createTextNode(n);return this.parentNode&&this.parentNode.insertBefore(r,this.nextSibling),r}},l(re,ne),oe.prototype={nodeName:"#comment",nodeType:C},l(oe,ne),ie.prototype={nodeName:"#cdata-section",nodeType:m},l(ie,ne),ae.prototype.nodeType=S,l(ae,H),se.prototype.nodeType=T,l(se,H),ce.prototype.nodeType=y,l(ce,H),ue.prototype.nodeType=g,l(ue,H),le.prototype.nodeName="#document-fragment",le.prototype.nodeType=b,l(le,H),de.prototype.nodeType=v,l(de,H),pe.prototype.serializeToString=function(e,t,n){return fe.call(e,t,n)},H.prototype.toString=fe;try{if(Object.defineProperty){function ke(e){switch(e.nodeType){case p:case b:var t=[];for(e=e.firstChild;e;)7!==e.nodeType&&8!==e.nodeType&&t.push(ke(e)),e=e.nextSibling;return t.join("");default:return e.nodeValue}}Object.defineProperty(B.prototype,"length",{get:function(){return _(this),this.$$length}}),Object.defineProperty(H.prototype,"textContent",{get:function(){return ke(this)},set:function(e){switch(this.nodeType){case p:case b:for(;this.firstChild;)this.removeChild(this.firstChild);(e||String(e))&&this.appendChild(this.ownerDocument.createTextNode(e));break;default:this.data=e,this.value=e,this.nodeValue=e}}}),Ce=function(e,t,n){e["$$"+t]=n}}}catch(Se){}t.DocumentType=ae,t.DOMException=I,t.DOMImplementation=M,t.Element=ee,t.Node=H,t.NodeList=O,t.XMLSerializer=pe},function(e,t,n){var r=n(22),o=n(23),i=n(0),a=n(7),s=null,c=function(e){if(!s){var t=n(24);s=new t({appkey:"0AND0VEVB24UBGDU",versionCode:a.version,channelID:"js_sdk",openid:"openid",unionid:"unid",strictMode:!1,delay:e,sessionDuration:6e4})}return s},u=function(){var e=function(){return(65536*(1+Math.random())|0).toString(16).substring(1)};return e()+e()+"-"+e()+"-"+e()+"-"+e()+"-"+e()+e()+e()},l=function(){if("object"===("undefined"==typeof navigator?"undefined":i(navigator))){var e=navigator.connection||navigator.mozConnection||navigator.webkitConnection;return(null==e?void 0:e.type)||(null==e?void 0:e.effectiveType)||"unknown"}return"unknown"},d=function(){if("object"!==("undefined"==typeof navigator?"undefined":i(navigator)))return"unknown os";var e=navigator.userAgent.toLowerCase(),t=/macintosh|mac os x/i.test(navigator.userAgent);return e.indexOf("win32")>=0||e.indexOf("wow32")>=0?"win32":e.indexOf("win64")>=0||e.indexOf("wow64")>=0?"win64":t?"mac":"unknown os"},p=function(){return!("object"!==("undefined"==typeof navigator?"undefined":i(navigator))||!navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i))},f=function(){return!("object"!==("undefined"==typeof navigator?"undefined":i(navigator))||!navigator.userAgent.match(/(Android|Adr|Linux)/i))},h=function(){return!("object"!==("undefined"==typeof navigator?"undefined":i(navigator))||!navigator.userAgent.match(/(iPhone|iPod|iPad|iOS)/i))},m=function(){if("object"!==("undefined"==typeof navigator?"undefined":i(navigator)))return"unknown device";var e=navigator.userAgent.toLowerCase();if(e.includes("app/tencent_wemeet"))return"tencent_wemeet";if(e.indexOf("maxthon")>=0){var t=e.match(/maxthon\/([\d.]+)/),n=t&&t[1]||"";return"傲游浏览器 ".concat(n).trim()}if(e.indexOf("qqbrowser")>=0){var r=e.match(/qqbrowser\/([\d.]+)/),o=r&&r[1]||"";return"QQ浏览器 ".concat(o).trim()}if(e.indexOf("se 2.x")>=0)return"搜狗浏览器";if(e.indexOf("wxwork")>=0)return"微信内置浏览器";if(e.indexOf("msie")>=0){var a=e.match(/msie ([\d.]+)/),s=a&&a[1]||"";return"IE ".concat(s).trim()}if(e.indexOf("firefox")>=0){var c=e.match(/firefox\/([\d.]+)/),u=c&&c[1]||"";return"Firefox ".concat(u).trim()}if(e.indexOf("chrome")>=0){var l=e.match(/chrome\/([\d.]+)/),d=l&&l[1]||"";return"Chrome ".concat(d).trim()}if(e.indexOf("opera")>=0){var p=e.match(/opera.([\d.]+)/),f=p&&p[1]||"";return"Opera ".concat(f).trim()}if(e.indexOf("safari")>=0){var h=e.match(/version\/([\d.]+)/),m=h&&h[1]||"";return"Safari ".concat(m).trim()}if(e.indexOf("edge")>=0){var g=e.match(/edge\/([\d.]+)/),y=g&&g[1]||"";return"edge ".concat(y).trim()}return e.substr(0,200)},g={isMobile:p(),isBrowser:!p(),mobileOsType:f()?"android":h?"ios":"other_mobile",pcOsType:d()},y={deviceType:g.isMobile?"mobile":g.isBrowser?"browser":"unknown",devicePlatform:g.isMobile?g.mobileOsType:g.pcOsType,deviceName:m()},v=["multipartInit","multipartUpload","multipartComplete","multipartList","multipartListPart","multipartAbort"],C=["putObject","postObject","appendObject","sliceUploadFile","uploadFile","uploadFiles"].concat(v),k=["getObject"];function S(e){return e.replace(/([A-Z])/g,"_$1").toLowerCase()}var b=function(){"use strict";function e(t){r(this,e);var n=t.parent,o=t.traceId,i=t.bucket,s=t.region,l=t.apiName,d=t.fileKey,p=t.fileSize,f=t.accelerate,h=t.customId,m=t.delay,g=t.deepTracker,v=i&&i.substr(i.lastIndexOf("-")+1)||"";this.parent=n,this.deepTracker=g,this.delay=m,this.params={cossdkVersion:a.version,region:s,networkType:"",host:"",accelerate:f?"Y":"N",requestPath:d||"",size:p||-1,httpMd5:0,httpSign:0,httpFull:0,name:l||"",result:"",tookTime:0,errorNode:"",errorCode:"",errorMessage:"",errorRequestId:"",errorStatusCode:0,errorServiceName:"",tracePlatform:"cos-js-sdk-v5",traceId:o||u(),bucket:i,appid:v,partNumber:0,retryTimes:0,reqUrl:"",customId:h||"",deviceType:y.deviceType,devicePlatform:y.devicePlatform,deviceName:y.deviceName,md5StartTime:0,md5EndTime:0,signStartTime:0,signEndTime:0,httpStartTime:0,httpEndTime:0,startTime:(new Date).getTime(),endTime:0},this.beacon=c(m)}return o(e,[{key:"formatResult",value:function(e,t){var n,r,o,i,a,s,c=(new Date).getTime()-this.params.startTime,u=l(),d=e?(null==e?void 0:e.code)||(null==e||null===(n=e.error)||void 0===n?void 0:n.code)||(null==e||null===(r=e.error)||void 0===r?void 0:r.Code):"",p=e?(null==e?void 0:e.message)||(null==e||null===(o=e.error)||void 0===o?void 0:o.message)||(null==e||null===(i=e.error)||void 0===i?void 0:i.Message):"",f=e?(null==e?void 0:e.resource)||(null==e||null===(a=e.error)||void 0===a?void 0:a.resource)||(null==e||null===(s=e.error)||void 0===s?void 0:s.Resource):"",h=e?null==e?void 0:e.statusCode:t.statusCode,m=e?(null==e?void 0:e.headers)&&(null==e?void 0:e.headers["x-cos-request-id"]):(null==t?void 0:t.headers)&&(null==t?void 0:t.headers["x-cos-request-id"]),g=e?m?"Server":"Client":"";if(Object.assign(this.params,{tookTime:c,networkType:u,httpMd5:this.params.md5EndTime-this.params.md5StartTime,httpSign:this.params.signEndTime-this.params.signStartTime,httpFull:this.params.httpEndTime-this.params.httpStartTime,result:e?"Fail":"Success",errorType:g,errorCode:d,errorStatusCode:h,errorMessage:p,errorServiceName:f,errorRequestId:m}),!e||d&&p||(this.params.fullError=e?JSON.stringify(e):""),"getObject"===this.params.name&&(this.params.size=t?t.headers&&t.headers["content-length"]:-1),this.params.reqUrl)try{var y=/^http(s)?:\/\/(.*?)\//.exec(this.params.reqUrl);this.params.host=y[2]}catch(e){this.params.host=this.params.reqUrl}this.sendEvents()}},{key:"setParams",value:function(e){Object.assign(this.params,e)}},{key:"sendEvents",value:function(){if(!v.includes(this.params.name)||this.deepTracker){var e,t=(e=this.params.name,C.includes(e)?"cos_upload":k.includes(e)?"cos_download":"base_service"),n=function(e){var t={},n="Success"===e.result?["tracePlatform","cossdkVersion","region","bucket","appid","networkType","host","accelerate","requestPath","partNumber","size","name","result","tookTime","errorRequestId","retryTimes","reqUrl","customId","deviceType","devicePlatform","deviceName"]:["tracePlatform","cossdkVersion","region","networkType","host","accelerate","requestPath","size","httpMd5","httpSign","httpFull","name","result","tookTime","errorNode","errorCode","errorMessage","errorRequestId","errorStatusCode","errorServiceName","errorType","traceId","bucket","appid","partNumber","retryTimes","reqUrl","customId","fullError","deviceType","devicePlatform","deviceName"];for(var r in e)n.includes(r)&&(t[S(r)]=e[r]);return t}(this.params);this.beacon||(this.beacon=c(this.delay||5e3)),0===this.delay?this.beacon&&this.beacon.onDirectUserAction(t,n):this.beacon&&this.beacon.onUserAction(t,n)}}},{key:"generateSubTracker",value:function(t){return Object.assign(t,{parent:this,deepTracker:this.deepTracker,traceId:this.params.traceId,bucket:this.params.bucket,region:this.params.region,fileKey:this.params.requestPath,customId:this.params.customId,delay:this.delay}),new e(t)}}]),e}();e.exports=b},function(e){e.exports=JSON.parse('{"name":"cos-js-sdk-v5","version":"1.4.18","description":"JavaScript SDK for [腾讯云对象存储](https://cloud.tencent.com/product/cos)","main":"dist/cos-js-sdk-v5.js","types":"index.d.ts","scripts":{"prettier":"prettier --write src demo/demo.js test/test.js server/sts.js index.d.ts","server":"node server/sts.js","dev":"cross-env NODE_ENV=development webpack -w --mode=development","build":"cross-env NODE_ENV=production webpack --mode=production","cos-auth.min.js":"uglifyjs ./demo/common/cos-auth.js -o ./demo/common/cos-auth.min.js -c -m","test":"jest --runInBand --coverage"},"repository":{"type":"git","url":"git+https://github.com/tencentyun/cos-js-sdk-v5.git"},"keywords":[],"author":"carsonxu","license":"ISC","bugs":{"url":"https://github.com/tencentyun/cos-js-sdk-v5/issues"},"homepage":"https://github.com/tencentyun/cos-js-sdk-v5#readme","dependencies":{"@xmldom/xmldom":"^0.8.6"},"devDependencies":{"@babel/core":"7.17.9","@babel/plugin-transform-runtime":"7.18.10","@babel/preset-env":"7.16.11","babel-loader":"8.2.5","body-parser":"^1.18.3","cross-env":"^5.2.0","express":"^4.16.4","jest":"^29.3.1","jest-environment-jsdom":"^29.3.1","prettier":"2.8.8","qcloud-cos-sts":"^3.0.2","request":"^2.87.0","terser-webpack-plugin":"4.2.3","uglifyjs":"^2.4.11","webpack":"4.46.0","webpack-cli":"4.10.0"}}')},function(e,t){var n=function(e){var t={},n=function(e){return!t[e]&&(t[e]=[]),t[e]};e.on=function(e,t){n(e).push(t)},e.off=function(e,t){for(var r=n(e),o=r.length-1;o>=0;o--)t===r[o]&&r.splice(o,1)},e.emit=function(e,t){for(var r=n(e).map((function(e){return e})),o=0;o=0;n--){var o=r[n][2];(!o||o+2592e3=0;o--){var i=r[o];i[0]===e&&i[1]===t&&r.splice(o,1)}r.unshift([e,t,Math.round(Date.now()/1e3)]),r.length>n&&r.splice(n),l()}},removeUploadId:function(e){u.call(this),delete d.using[e];for(var t=r.length-1;t>=0;t--)r[t][1]===e&&r.splice(t,1);l()}};e.exports=d},function(e,t,n){var r=n(11);e.exports=r},function(e,t,n){"use strict";var r=n(1),o=n(8),i=n(25),a=n(26),s=n(28),c=n(7),u={AppId:"",SecretId:"",SecretKey:"",SecurityToken:"",ChunkRetryTimes:2,FileParallelLimit:3,ChunkParallelLimit:3,ChunkSize:1048576,SliceSize:1048576,CopyChunkParallelLimit:20,CopyChunkSize:10485760,CopySliceSize:10485760,MaxPartNumber:1e4,ProgressInterval:1e3,Domain:"",ServiceDomain:"",Protocol:"",CompatibilityMode:!1,ForcePathStyle:!1,UseRawKey:!1,Timeout:0,CorrectClockSkew:!0,SystemClockOffset:0,UploadCheckContentMd5:!1,UploadQueueSize:1e4,UploadAddMetaMd5:!1,UploadIdCacheLimit:50,UseAccelerate:!1,ForceSignHost:!0,EnableTracker:!1,DeepTracker:!1,TrackerDelay:5e3,CustomId:""},l=function(e){this.options=r.extend(r.clone(u),e||{}),this.options.FileParallelLimit=Math.max(1,this.options.FileParallelLimit),this.options.ChunkParallelLimit=Math.max(1,this.options.ChunkParallelLimit),this.options.ChunkRetryTimes=Math.max(0,this.options.ChunkRetryTimes),this.options.ChunkSize=Math.max(1048576,this.options.ChunkSize),this.options.CopyChunkParallelLimit=Math.max(1,this.options.CopyChunkParallelLimit),this.options.CopyChunkSize=Math.max(1048576,this.options.CopyChunkSize),this.options.CopySliceSize=Math.max(0,this.options.CopySliceSize),this.options.MaxPartNumber=Math.max(1024,Math.min(1e4,this.options.MaxPartNumber)),this.options.Timeout=Math.max(0,this.options.Timeout),this.options.AppId,this.options.SecretId&&this.options.SecretId.indexOf(" "),this.options.SecretKey&&this.options.SecretKey.indexOf(" "),r.isNode(),o.init(this),i.init(this)};a.init(l,i),s.init(l,i),l.util={md5:r.md5,xml2json:r.xml2json,json2xml:r.json2xml},l.getAuthorization=r.getAuth,l.version=c.version,e.exports=l},function(module,exports,__webpack_require__){(function(process,global,module){var __WEBPACK_AMD_DEFINE_RESULT__,_typeof=__webpack_require__(0);(function(){"use strict";var ERROR="input is invalid type",WINDOW="object"===("undefined"==typeof window?"undefined":_typeof(window)),root=WINDOW?window:{};root.JS_MD5_NO_WINDOW&&(WINDOW=!1);var WEB_WORKER=!WINDOW&&"object"===("undefined"==typeof self?"undefined":_typeof(self)),NODE_JS=!root.JS_MD5_NO_NODE_JS&&"object"===(void 0===process?"undefined":_typeof(process))&&process.versions&&process.versions.node;NODE_JS?root=global:WEB_WORKER&&(root=self);var COMMON_JS=!root.JS_MD5_NO_COMMON_JS&&"object"===_typeof(module)&&module.exports,AMD=__webpack_require__(14),ARRAY_BUFFER=!root.JS_MD5_NO_ARRAY_BUFFER&&"undefined"!=typeof ArrayBuffer,HEX_CHARS="0123456789abcdef".split(""),EXTRA=[128,32768,8388608,-2147483648],SHIFT=[0,8,16,24],OUTPUT_TYPES=["hex","array","digest","buffer","arrayBuffer","base64"],BASE64_ENCODE_CHAR="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""),blocks=[],buffer8;if(ARRAY_BUFFER){var buffer=new ArrayBuffer(68);buffer8=new Uint8Array(buffer),blocks=new Uint32Array(buffer)}!root.JS_MD5_NO_NODE_JS&&Array.isArray||(Array.isArray=function(e){return"[object Array]"===Object.prototype.toString.call(e)}),!ARRAY_BUFFER||!root.JS_MD5_NO_ARRAY_BUFFER_IS_VIEW&&ArrayBuffer.isView||(ArrayBuffer.isView=function(e){return"object"===_typeof(e)&&e.buffer&&e.buffer.constructor===ArrayBuffer});var createOutputMethod=function(e){return function(t,n){return new Md5(!0).update(t,n)[e]()}},createMethod=function(){var e=createOutputMethod("hex");NODE_JS&&(e=nodeWrap(e)),e.getCtx=e.create=function(){return new Md5},e.update=function(t){return e.create().update(t)};for(var t=0;t>6,s[r++]=128|63&n):n<55296||n>=57344?(s[r++]=224|n>>12,s[r++]=128|n>>6&63,s[r++]=128|63&n):(n=65536+((1023&n)<<10|1023&e.charCodeAt(++o)),s[r++]=240|n>>18,s[r++]=128|n>>12&63,s[r++]=128|n>>6&63,s[r++]=128|63&n);else for(r=this.start;o>2]|=n<>2]|=(192|n>>6)<>2]|=(128|63&n)<=57344?(a[r>>2]|=(224|n>>12)<>2]|=(128|n>>6&63)<>2]|=(128|63&n)<>2]|=(240|n>>18)<>2]|=(128|n>>12&63)<>2]|=(128|n>>6&63)<>2]|=(128|63&n)<=64?(this.start=r-64,this.hash(),this.hashed=!0):this.start=r}return this.bytes>4294967295&&(this.hBytes+=this.bytes/4294967296<<0,this.bytes=this.bytes%4294967296),this}},Md5.prototype.finalize=function(){if(!this.finalized){this.finalized=!0;var e=this.blocks,t=this.lastByteIndex;e[t>>2]|=EXTRA[3&t],t>=56&&(this.hashed||this.hash(),e[0]=e[16],e[16]=e[1]=e[2]=e[3]=e[4]=e[5]=e[6]=e[7]=e[8]=e[9]=e[10]=e[11]=e[12]=e[13]=e[14]=e[15]=0),e[14]=this.bytes<<3,e[15]=this.hBytes<<3|this.bytes>>>29,this.hash()}},Md5.prototype.hash=function(){var e,t,n,r,o,i,a=this.blocks;this.first?t=((t=((e=((e=a[0]-680876937)<<7|e>>>25)-271733879<<0)^(n=((n=(-271733879^(r=((r=(-1732584194^2004318071&e)+a[1]-117830708)<<12|r>>>20)+e<<0)&(-271733879^e))+a[2]-1126478375)<<17|n>>>15)+r<<0)&(r^e))+a[3]-1316259209)<<22|t>>>10)+n<<0:(e=this.h0,t=this.h1,n=this.h2,t=((t+=((e=((e+=((r=this.h3)^t&(n^r))+a[0]-680876936)<<7|e>>>25)+t<<0)^(n=((n+=(t^(r=((r+=(n^e&(t^n))+a[1]-389564586)<<12|r>>>20)+e<<0)&(e^t))+a[2]+606105819)<<17|n>>>15)+r<<0)&(r^e))+a[3]-1044525330)<<22|t>>>10)+n<<0),t=((t+=((e=((e+=(r^t&(n^r))+a[4]-176418897)<<7|e>>>25)+t<<0)^(n=((n+=(t^(r=((r+=(n^e&(t^n))+a[5]+1200080426)<<12|r>>>20)+e<<0)&(e^t))+a[6]-1473231341)<<17|n>>>15)+r<<0)&(r^e))+a[7]-45705983)<<22|t>>>10)+n<<0,t=((t+=((e=((e+=(r^t&(n^r))+a[8]+1770035416)<<7|e>>>25)+t<<0)^(n=((n+=(t^(r=((r+=(n^e&(t^n))+a[9]-1958414417)<<12|r>>>20)+e<<0)&(e^t))+a[10]-42063)<<17|n>>>15)+r<<0)&(r^e))+a[11]-1990404162)<<22|t>>>10)+n<<0,t=((t+=((e=((e+=(r^t&(n^r))+a[12]+1804603682)<<7|e>>>25)+t<<0)^(n=((n+=(t^(r=((r+=(n^e&(t^n))+a[13]-40341101)<<12|r>>>20)+e<<0)&(e^t))+a[14]-1502002290)<<17|n>>>15)+r<<0)&(r^e))+a[15]+1236535329)<<22|t>>>10)+n<<0,t=((t+=((r=((r+=(t^n&((e=((e+=(n^r&(t^n))+a[1]-165796510)<<5|e>>>27)+t<<0)^t))+a[6]-1069501632)<<9|r>>>23)+e<<0)^e&((n=((n+=(e^t&(r^e))+a[11]+643717713)<<14|n>>>18)+r<<0)^r))+a[0]-373897302)<<20|t>>>12)+n<<0,t=((t+=((r=((r+=(t^n&((e=((e+=(n^r&(t^n))+a[5]-701558691)<<5|e>>>27)+t<<0)^t))+a[10]+38016083)<<9|r>>>23)+e<<0)^e&((n=((n+=(e^t&(r^e))+a[15]-660478335)<<14|n>>>18)+r<<0)^r))+a[4]-405537848)<<20|t>>>12)+n<<0,t=((t+=((r=((r+=(t^n&((e=((e+=(n^r&(t^n))+a[9]+568446438)<<5|e>>>27)+t<<0)^t))+a[14]-1019803690)<<9|r>>>23)+e<<0)^e&((n=((n+=(e^t&(r^e))+a[3]-187363961)<<14|n>>>18)+r<<0)^r))+a[8]+1163531501)<<20|t>>>12)+n<<0,t=((t+=((r=((r+=(t^n&((e=((e+=(n^r&(t^n))+a[13]-1444681467)<<5|e>>>27)+t<<0)^t))+a[2]-51403784)<<9|r>>>23)+e<<0)^e&((n=((n+=(e^t&(r^e))+a[7]+1735328473)<<14|n>>>18)+r<<0)^r))+a[12]-1926607734)<<20|t>>>12)+n<<0,t=((t+=((i=(r=((r+=((o=t^n)^(e=((e+=(o^r)+a[5]-378558)<<4|e>>>28)+t<<0))+a[8]-2022574463)<<11|r>>>21)+e<<0)^e)^(n=((n+=(i^t)+a[11]+1839030562)<<16|n>>>16)+r<<0))+a[14]-35309556)<<23|t>>>9)+n<<0,t=((t+=((i=(r=((r+=((o=t^n)^(e=((e+=(o^r)+a[1]-1530992060)<<4|e>>>28)+t<<0))+a[4]+1272893353)<<11|r>>>21)+e<<0)^e)^(n=((n+=(i^t)+a[7]-155497632)<<16|n>>>16)+r<<0))+a[10]-1094730640)<<23|t>>>9)+n<<0,t=((t+=((i=(r=((r+=((o=t^n)^(e=((e+=(o^r)+a[13]+681279174)<<4|e>>>28)+t<<0))+a[0]-358537222)<<11|r>>>21)+e<<0)^e)^(n=((n+=(i^t)+a[3]-722521979)<<16|n>>>16)+r<<0))+a[6]+76029189)<<23|t>>>9)+n<<0,t=((t+=((i=(r=((r+=((o=t^n)^(e=((e+=(o^r)+a[9]-640364487)<<4|e>>>28)+t<<0))+a[12]-421815835)<<11|r>>>21)+e<<0)^e)^(n=((n+=(i^t)+a[15]+530742520)<<16|n>>>16)+r<<0))+a[2]-995338651)<<23|t>>>9)+n<<0,t=((t+=((r=((r+=(t^((e=((e+=(n^(t|~r))+a[0]-198630844)<<6|e>>>26)+t<<0)|~n))+a[7]+1126891415)<<10|r>>>22)+e<<0)^((n=((n+=(e^(r|~t))+a[14]-1416354905)<<15|n>>>17)+r<<0)|~e))+a[5]-57434055)<<21|t>>>11)+n<<0,t=((t+=((r=((r+=(t^((e=((e+=(n^(t|~r))+a[12]+1700485571)<<6|e>>>26)+t<<0)|~n))+a[3]-1894986606)<<10|r>>>22)+e<<0)^((n=((n+=(e^(r|~t))+a[10]-1051523)<<15|n>>>17)+r<<0)|~e))+a[1]-2054922799)<<21|t>>>11)+n<<0,t=((t+=((r=((r+=(t^((e=((e+=(n^(t|~r))+a[8]+1873313359)<<6|e>>>26)+t<<0)|~n))+a[15]-30611744)<<10|r>>>22)+e<<0)^((n=((n+=(e^(r|~t))+a[6]-1560198380)<<15|n>>>17)+r<<0)|~e))+a[13]+1309151649)<<21|t>>>11)+n<<0,t=((t+=((r=((r+=(t^((e=((e+=(n^(t|~r))+a[4]-145523070)<<6|e>>>26)+t<<0)|~n))+a[11]-1120210379)<<10|r>>>22)+e<<0)^((n=((n+=(e^(r|~t))+a[2]+718787259)<<15|n>>>17)+r<<0)|~e))+a[9]-343485551)<<21|t>>>11)+n<<0,this.first?(this.h0=e+1732584193<<0,this.h1=t-271733879<<0,this.h2=n-1732584194<<0,this.h3=r+271733878<<0,this.first=!1):(this.h0=this.h0+e<<0,this.h1=this.h1+t<<0,this.h2=this.h2+n<<0,this.h3=this.h3+r<<0)},Md5.prototype.hex=function(){this.finalize();var e=this.h0,t=this.h1,n=this.h2,r=this.h3;return HEX_CHARS[e>>4&15]+HEX_CHARS[15&e]+HEX_CHARS[e>>12&15]+HEX_CHARS[e>>8&15]+HEX_CHARS[e>>20&15]+HEX_CHARS[e>>16&15]+HEX_CHARS[e>>28&15]+HEX_CHARS[e>>24&15]+HEX_CHARS[t>>4&15]+HEX_CHARS[15&t]+HEX_CHARS[t>>12&15]+HEX_CHARS[t>>8&15]+HEX_CHARS[t>>20&15]+HEX_CHARS[t>>16&15]+HEX_CHARS[t>>28&15]+HEX_CHARS[t>>24&15]+HEX_CHARS[n>>4&15]+HEX_CHARS[15&n]+HEX_CHARS[n>>12&15]+HEX_CHARS[n>>8&15]+HEX_CHARS[n>>20&15]+HEX_CHARS[n>>16&15]+HEX_CHARS[n>>28&15]+HEX_CHARS[n>>24&15]+HEX_CHARS[r>>4&15]+HEX_CHARS[15&r]+HEX_CHARS[r>>12&15]+HEX_CHARS[r>>8&15]+HEX_CHARS[r>>20&15]+HEX_CHARS[r>>16&15]+HEX_CHARS[r>>28&15]+HEX_CHARS[r>>24&15]},Md5.prototype.toString=Md5.prototype.hex,Md5.prototype.digest=function(e){if("hex"===e)return this.hex();this.finalize();var t=this.h0,n=this.h1,r=this.h2,o=this.h3;return[255&t,t>>8&255,t>>16&255,t>>24&255,255&n,n>>8&255,n>>16&255,n>>24&255,255&r,r>>8&255,r>>16&255,r>>24&255,255&o,o>>8&255,o>>16&255,o>>24&255]},Md5.prototype.array=Md5.prototype.digest,Md5.prototype.arrayBuffer=function(){this.finalize();var e=new ArrayBuffer(16),t=new Uint32Array(e);return t[0]=this.h0,t[1]=this.h1,t[2]=this.h2,t[3]=this.h3,e},Md5.prototype.buffer=Md5.prototype.arrayBuffer,Md5.prototype.base64=function(){for(var e,t,n,r="",o=this.array(),i=0;i<15;)e=o[i++],t=o[i++],n=o[i++],r+=BASE64_ENCODE_CHAR[e>>>2]+BASE64_ENCODE_CHAR[63&(e<<4|t>>>4)]+BASE64_ENCODE_CHAR[63&(t<<2|n>>>6)]+BASE64_ENCODE_CHAR[63&n];return e=o[i],r+=BASE64_ENCODE_CHAR[e>>>2]+BASE64_ENCODE_CHAR[e<<4&63]+"=="};var exports=createMethod();COMMON_JS?module.exports=exports:(root.md5=exports,AMD&&(__WEBPACK_AMD_DEFINE_RESULT__=function(){return exports}.call(exports,__webpack_require__,exports,module),void 0===__WEBPACK_AMD_DEFINE_RESULT__||(module.exports=__WEBPACK_AMD_DEFINE_RESULT__)))})()}).call(this,__webpack_require__(3),__webpack_require__(13),__webpack_require__(4)(module))},function(e,t){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(e){"object"==typeof window&&(n=window)}e.exports=n},function(e,t){(function(t){e.exports=t}).call(this,{})},function(e,t,n){(function(e){var t,r,o,i,a,s,c,u=n(0),l=l||function(e,t){var n={},r=n.lib={},o=function(){},i=r.Base={extend:function(e){o.prototype=this;var t=new o;return e&&t.mixIn(e),t.hasOwnProperty("init")||(t.init=function(){t.$super.init.apply(this,arguments)}),t.init.prototype=t,t.$super=this,t},create:function(){var e=this.extend();return e.init.apply(e,arguments),e},init:function(){},mixIn:function(e){for(var t in e)e.hasOwnProperty(t)&&(this[t]=e[t]);e.hasOwnProperty("toString")&&(this.toString=e.toString)},clone:function(){return this.init.prototype.extend(this)}},a=r.WordArray=i.extend({init:function(e,t){e=this.words=e||[],this.sigBytes=null!=t?t:4*e.length},toString:function(e){return(e||c).stringify(this)},concat:function(e){var t=this.words,n=e.words,r=this.sigBytes;if(e=e.sigBytes,this.clamp(),r%4)for(var o=0;o>>2]|=(n[o>>>2]>>>24-o%4*8&255)<<24-(r+o)%4*8;else if(65535>>2]=n[o>>>2];else t.push.apply(t,n);return this.sigBytes+=e,this},clamp:function(){var t=this.words,n=this.sigBytes;t[n>>>2]&=4294967295<<32-n%4*8,t.length=e.ceil(n/4)},clone:function(){var e=i.clone.call(this);return e.words=this.words.slice(0),e},random:function(t){for(var n=[],r=0;r>>2]>>>24-r%4*8&255;n.push((o>>>4).toString(16)),n.push((15&o).toString(16))}return n.join("")},parse:function(e){for(var t=e.length,n=[],r=0;r>>3]|=parseInt(e.substr(r,2),16)<<24-r%8*4;return new a.init(n,t/2)}},u=s.Latin1={stringify:function(e){var t=e.words;e=e.sigBytes;for(var n=[],r=0;r>>2]>>>24-r%4*8&255));return n.join("")},parse:function(e){for(var t=e.length,n=[],r=0;r>>2]|=(255&e.charCodeAt(r))<<24-r%4*8;return new a.init(n,t)}},l=s.Utf8={stringify:function(e){try{return decodeURIComponent(escape(u.stringify(e)))}catch(e){throw Error("Malformed UTF-8 data")}},parse:function(e){return u.parse(unescape(encodeURIComponent(e)))}},d=r.BufferedBlockAlgorithm=i.extend({reset:function(){this._data=new a.init,this._nDataBytes=0},_append:function(e){"string"==typeof e&&(e=l.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(t){var n=this._data,r=n.words,o=n.sigBytes,i=this.blockSize,s=o/(4*i);if(t=(s=t?e.ceil(s):e.max((0|s)-this._minBufferSize,0))*i,o=e.min(4*t,o),t){for(var c=0;cu;u++){if(16>u)i[u]=0|e[t+u];else{var l=i[u-3]^i[u-8]^i[u-14]^i[u-16];i[u]=l<<1|l>>>31}l=(r<<5|r>>>27)+c+i[u],l=20>u?l+(1518500249+(o&a|~o&s)):40>u?l+(1859775393+(o^a^s)):60>u?l+((o&a|o&s|a&s)-1894007588):l+((o^a^s)-899497514),c=s,s=a,a=o<<30|o>>>2,o=r,r=l}n[0]=n[0]+r|0,n[1]=n[1]+o|0,n[2]=n[2]+a|0,n[3]=n[3]+s|0,n[4]=n[4]+c|0},_doFinalize:function(){var e=this._data,t=e.words,n=8*this._nDataBytes,r=8*e.sigBytes;return t[r>>>5]|=128<<24-r%32,t[14+(r+64>>>9<<4)]=Math.floor(n/4294967296),t[15+(r+64>>>9<<4)]=n,e.sigBytes=4*t.length,this._process(),this._hash},clone:function(){var e=o.clone.call(this);return e._hash=this._hash.clone(),e}}),t.SHA1=o._createHelper(a),t.HmacSHA1=o._createHmacHelper(a),function(){var e=l,t=e.enc.Utf8;e.algo.HMAC=e.lib.Base.extend({init:function(e,n){e=this._hasher=new e.init,"string"==typeof n&&(n=t.parse(n));var r=e.blockSize,o=4*r;n.sigBytes>o&&(n=e.finalize(n)),n.clamp();for(var i=this._oKey=n.clone(),a=this._iKey=n.clone(),s=i.words,c=a.words,u=0;u>>2]>>>24-i%4*8&255)<<16|(t[i+1>>>2]>>>24-(i+1)%4*8&255)<<8|t[i+2>>>2]>>>24-(i+2)%4*8&255,s=0;s<4&&i+.75*s>>6*(3-s)&63));var c=r.charAt(64);if(c)for(;o.length%4;)o.push(c);return o.join("")},parse:function(e){var t=e.length,n=this._map,r=n.charAt(64);if(r){var o=e.indexOf(r);-1!=o&&(t=o)}for(var i=[],a=0,s=0;s>>6-s%4*2;i[a>>>2]|=(u|l)<<24-a%4*8,a++}return c.create(i,a)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="},"object"===u(e)?e.exports=l:window.CryptoJS=l}).call(this,n(4)(e))},function(e,t,n){var r=n(17).DOMParser,o=function(){this.version="1.3.5";var e={mergeCDATA:!0,normalize:!0,stripElemPrefix:!0},t=new RegExp(/(?!xmlns)^.*:/);new RegExp(/^\s+|\s+$/g);return this.grokType=function(e){return/^\s*$/.test(e)?null:/^(?:true|false)$/i.test(e)?"true"===e.toLowerCase():isFinite(e)?parseFloat(e):e},this.parseString=function(e,t){if(e){var n=this.stringToXML(e);return n.getElementsByTagName("parsererror").length?null:this.parseXML(n,t)}return null},this.parseXML=function(n,r){for(var i in r)e[i]=r[i];var a={},s=0,c="";if(n.childNodes.length)for(var u,l,d,p=0;p=t+n||t?new java.lang.String(e,t,n)+"":e}function g(e,t){e.currentElement?e.currentElement.appendChild(t):e.doc.appendChild(t)}p.prototype.parseFromString=function(e,t){var n=this.options,r=new l,o=n.domBuilder||new f,a=n.errorHandler,s=n.locator,u=n.xmlns||{},p=/\/x?html?$/.test(t),h=p?i.HTML_ENTITIES:i.XML_ENTITIES;s&&o.setDocumentLocator(s),r.errorHandler=function(e,t,n){if(!e){if(t instanceof f)return t;e=t}var r={},o=e instanceof Function;function i(t){var i=e[t];!i&&o&&(i=2==e.length?function(n){e(t,n)}:e),r[t]=i&&function(e){i("[xmldom "+t+"]\t"+e+function(e){if(e)return"\n@"+(e.systemId||"")+"#[line:"+e.lineNumber+",col:"+e.columnNumber+"]"}(n))}||function(){}}return n=n||{},i("warning"),i("error"),i("fatalError"),r}(a,o,s),r.domBuilder=n.domBuilder||o,p&&(u[""]=c.HTML),u.xml=u.xml||c.XML;var m=n.normalizeLineEndings||d;return e&&"string"==typeof e?r.parse(m(e),u,h):r.errorHandler.error("invalid doc source"),o.doc},f.prototype={startDocument:function(){this.doc=(new s).createDocument(null,null,null),this.locator&&(this.doc.documentURI=this.locator.systemId)},startElement:function(e,t,n,r){var o=this.doc,i=o.createElementNS(e,n||t),a=r.length;g(this,i),this.currentElement=i,this.locator&&h(this.locator,i);for(var s=0;s",lt:"<",quot:'"'}),t.HTML_ENTITIES=r({lt:"<",gt:">",amp:"&",quot:'"',apos:"'",Agrave:"À",Aacute:"Á",Acirc:"Â",Atilde:"Ã",Auml:"Ä",Aring:"Å",AElig:"Æ",Ccedil:"Ç",Egrave:"È",Eacute:"É",Ecirc:"Ê",Euml:"Ë",Igrave:"Ì",Iacute:"Í",Icirc:"Î",Iuml:"Ï",ETH:"Ð",Ntilde:"Ñ",Ograve:"Ò",Oacute:"Ó",Ocirc:"Ô",Otilde:"Õ",Ouml:"Ö",Oslash:"Ø",Ugrave:"Ù",Uacute:"Ú",Ucirc:"Û",Uuml:"Ü",Yacute:"Ý",THORN:"Þ",szlig:"ß",agrave:"à",aacute:"á",acirc:"â",atilde:"ã",auml:"ä",aring:"å",aelig:"æ",ccedil:"ç",egrave:"è",eacute:"é",ecirc:"ê",euml:"ë",igrave:"ì",iacute:"í",icirc:"î",iuml:"ï",eth:"ð",ntilde:"ñ",ograve:"ò",oacute:"ó",ocirc:"ô",otilde:"õ",ouml:"ö",oslash:"ø",ugrave:"ù",uacute:"ú",ucirc:"û",uuml:"ü",yacute:"ý",thorn:"þ",yuml:"ÿ",nbsp:" ",iexcl:"¡",cent:"¢",pound:"£",curren:"¤",yen:"¥",brvbar:"¦",sect:"§",uml:"¨",copy:"©",ordf:"ª",laquo:"«",not:"¬",shy:"­­",reg:"®",macr:"¯",deg:"°",plusmn:"±",sup2:"²",sup3:"³",acute:"´",micro:"µ",para:"¶",middot:"·",cedil:"¸",sup1:"¹",ordm:"º",raquo:"»",frac14:"¼",frac12:"½",frac34:"¾",iquest:"¿",times:"×",divide:"÷",forall:"∀",part:"∂",exist:"∃",empty:"∅",nabla:"∇",isin:"∈",notin:"∉",ni:"∋",prod:"∏",sum:"∑",minus:"−",lowast:"∗",radic:"√",prop:"∝",infin:"∞",ang:"∠",and:"∧",or:"∨",cap:"∩",cup:"∪",int:"∫",there4:"∴",sim:"∼",cong:"≅",asymp:"≈",ne:"≠",equiv:"≡",le:"≤",ge:"≥",sub:"⊂",sup:"⊃",nsub:"⊄",sube:"⊆",supe:"⊇",oplus:"⊕",otimes:"⊗",perp:"⊥",sdot:"⋅",Alpha:"Α",Beta:"Β",Gamma:"Γ",Delta:"Δ",Epsilon:"Ε",Zeta:"Ζ",Eta:"Η",Theta:"Θ",Iota:"Ι",Kappa:"Κ",Lambda:"Λ",Mu:"Μ",Nu:"Ν",Xi:"Ξ",Omicron:"Ο",Pi:"Π",Rho:"Ρ",Sigma:"Σ",Tau:"Τ",Upsilon:"Υ",Phi:"Φ",Chi:"Χ",Psi:"Ψ",Omega:"Ω",alpha:"α",beta:"β",gamma:"γ",delta:"δ",epsilon:"ε",zeta:"ζ",eta:"η",theta:"θ",iota:"ι",kappa:"κ",lambda:"λ",mu:"μ",nu:"ν",xi:"ξ",omicron:"ο",pi:"π",rho:"ρ",sigmaf:"ς",sigma:"σ",tau:"τ",upsilon:"υ",phi:"φ",chi:"χ",psi:"ψ",omega:"ω",thetasym:"ϑ",upsih:"ϒ",piv:"ϖ",OElig:"Œ",oelig:"œ",Scaron:"Š",scaron:"š",Yuml:"Ÿ",fnof:"ƒ",circ:"ˆ",tilde:"˜",ensp:" ",emsp:" ",thinsp:" ",zwnj:"‌",zwj:"‍",lrm:"‎",rlm:"‏",ndash:"–",mdash:"—",lsquo:"‘",rsquo:"’",sbquo:"‚",ldquo:"“",rdquo:"”",bdquo:"„",dagger:"†",Dagger:"‡",bull:"•",hellip:"…",permil:"‰",prime:"′",Prime:"″",lsaquo:"‹",rsaquo:"›",oline:"‾",euro:"€",trade:"™",larr:"←",uarr:"↑",rarr:"→",darr:"↓",harr:"↔",crarr:"↵",lceil:"⌈",rceil:"⌉",lfloor:"⌊",rfloor:"⌋",loz:"◊",spades:"♠",clubs:"♣",hearts:"♥",diams:"♦"}),t.entityMap=t.HTML_ENTITIES},function(e,t,n){var r=n(2).NAMESPACE,o=/[A-Z_a-z\xC0-\xD6\xD8-\xF6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/,i=new RegExp("[\\-\\.0-9"+o.source.slice(1,-1)+"\\u00B7\\u0300-\\u036F\\u203F-\\u2040]"),a=new RegExp("^"+o.source+i.source+"*(?::"+o.source+i.source+"*)?$");function s(e,t){this.message=e,this.locator=t,Error.captureStackTrace&&Error.captureStackTrace(this,s)}function c(){}function u(e,t){return t.lineNumber=e.lineNumber,t.columnNumber=e.columnNumber,t}function l(e,t,n,o,i,a){function s(e,t,r){n.attributeNames.hasOwnProperty(e)&&a.fatalError("Attribute "+e+" redefined"),n.addValue(e,t.replace(/[\t\n\r]/g," ").replace(/&#?\w+;/g,i),r)}for(var c,u=++t,l=0;;){var d=e.charAt(u);switch(d){case"=":if(1===l)c=e.slice(t,u),l=3;else{if(2!==l)throw new Error("attribute equal must after attrName");l=3}break;case"'":case'"':if(3===l||1===l){if(1===l&&(a.warning('attribute value must after "="'),c=e.slice(t,u)),t=u+1,!((u=e.indexOf(d,t))>0))throw new Error("attribute value no end '"+d+"' match");s(c,p=e.slice(t,u),t-1),l=5}else{if(4!=l)throw new Error('attribute value must after "="');s(c,p=e.slice(t,u),t),a.warning('attribute "'+c+'" missed start quot('+d+")!!"),t=u+1,l=5}break;case"/":switch(l){case 0:n.setTagName(e.slice(t,u));case 5:case 6:case 7:l=7,n.closed=!0;case 4:case 1:case 2:break;default:throw new Error("attribute invalid close char('/')")}break;case"":return a.error("unexpected end of input"),0==l&&n.setTagName(e.slice(t,u)),u;case">":switch(l){case 0:n.setTagName(e.slice(t,u));case 5:case 6:case 7:break;case 4:case 1:"/"===(p=e.slice(t,u)).slice(-1)&&(n.closed=!0,p=p.slice(0,-1));case 2:2===l&&(p=c),4==l?(a.warning('attribute "'+p+'" missed quot(")!'),s(c,p,t)):(r.isHTML(o[""])&&p.match(/^(?:disabled|checked|selected)$/i)||a.warning('attribute "'+p+'" missed value!! "'+p+'" instead!!'),s(p,p,t));break;case 3:throw new Error("attribute value missed!!")}return u;case"€":d=" ";default:if(d<=" ")switch(l){case 0:n.setTagName(e.slice(t,u)),l=6;break;case 1:c=e.slice(t,u),l=2;break;case 4:var p=e.slice(t,u);a.warning('attribute "'+p+'" missed quot(")!!'),s(c,p,t);case 5:l=6}else switch(l){case 2:n.tagName;r.isHTML(o[""])&&c.match(/^(?:disabled|checked|selected)$/i)||a.warning('attribute "'+c+'" missed value!! "'+c+'" instead2!!'),s(c,c,t),t=u,l=1;break;case 5:a.warning('attribute space is required"'+c+'"!!');case 6:l=1,t=u;break;case 3:l=4,t=u;break;case 7:throw new Error("elements closed character '/' and '>' must be connected to")}}u++}}function d(e,t,n){for(var o=e.tagName,i=null,a=e.length;a--;){var s=e[a],c=s.qName,u=s.value;if((f=c.indexOf(":"))>0)var l=s.prefix=c.slice(0,f),d=c.slice(f+1),p="xmlns"===l&&d;else d=c,l=null,p="xmlns"===c&&"";s.localName=d,!1!==p&&(null==i&&(i={},h(n,n={})),n[p]=i[p]=u,s.uri=r.XMLNS,t.startPrefixMapping(p,u))}for(a=e.length;a--;){(l=(s=e[a]).prefix)&&("xml"===l&&(s.uri=r.XML),"xmlns"!==l&&(s.uri=n[l||""]))}var f;(f=o.indexOf(":"))>0?(l=e.prefix=o.slice(0,f),d=e.localName=o.slice(f+1)):(l=null,d=e.localName=o);var m=e.uri=n[l||""];if(t.startElement(m,d,o,e),!e.closed)return e.currentNSMap=n,e.localNSMap=i,!0;if(t.endElement(m,d,o),i)for(l in i)Object.prototype.hasOwnProperty.call(i,l)&&t.endPrefixMapping(l)}function p(e,t,n,r,o){if(/^(?:script|textarea)$/i.test(n)){var i=e.indexOf("",t),a=e.substring(t+1,i);if(/[&<]/.test(a))return/^script$/i.test(n)?(o.characters(a,0,a.length),i):(a=a.replace(/&#?\w+;/g,r),o.characters(a,0,a.length),i)}return t+1}function f(e,t,n,r){var o=r[n];return null==o&&((o=e.lastIndexOf(""))t?(n.comment(e,t+4,o-t-4),o+3):(r.error("Unclosed comment"),-1):-1;if("CDATA["==e.substr(t+3,6)){var o=e.indexOf("]]>",t+9);return n.startCDATA(),n.characters(e,t+9,o-t-9),n.endCDATA(),o+3}var i=function(e,t){var n,r=[],o=/'[^']+'|"[^"]+"|[^\s<>\/=]+=?|(\/?\s*>|<)/g;o.lastIndex=t,o.exec(e);for(;n=o.exec(e);)if(r.push(n),n[1])return r}(e,t),a=i.length;if(a>1&&/!doctype/i.test(i[0][0])){var s=i[1][0],c=!1,u=!1;a>3&&(/^public$/i.test(i[2][0])?(c=i[3][0],u=a>4&&i[4][0]):/^system$/i.test(i[2][0])&&(u=i[3][0]));var l=i[a-1];return n.startDTD(s,c,u),n.endDTD(),l.index+l[0].length}return-1}function g(e,t,n){var r=e.indexOf("?>",t);if(r){var o=e.substring(t,r).match(/^<\?(\S*)\s*([\s\S]*?)\s*$/);if(o){o[0].length;return n.processingInstruction(o[1],o[2]),r+2}return-1}return-1}function y(){this.attributeNames={}}s.prototype=new Error,s.prototype.name=s.name,c.prototype={parse:function(e,t,n){var o=this.domBuilder;o.startDocument(),h(t,t={}),function(e,t,n,o,i){function a(e){if(e>65535){var t=55296+((e-=65536)>>10),n=56320+(1023&e);return String.fromCharCode(t,n)}return String.fromCharCode(e)}function c(e){var t=e.slice(1,-1);return Object.hasOwnProperty.call(n,t)?n[t]:"#"===t.charAt(0)?a(parseInt(t.substr(1).replace("x","0x"))):(i.error("entity not found:"+e),e)}function h(t){if(t>E){var n=e.substring(E,t).replace(/&#?\w+;/g,c);b&&v(E),o.characters(n,0,t-E),E=t}}function v(t,n){for(;t>=k&&(n=S.exec(e));)C=n.index,k=C+n[0].length,b.lineNumber++;b.columnNumber=t-C+1}var C=0,k=0,S=/.*(?:\r\n?|\n)|.*$/g,b=o.locator,T=[{currentNSMap:t}],R={},E=0;for(;;){try{var w=e.indexOf("<",E);if(w<0){if(!e.substr(E).match(/^\s*$/)){var x=o.doc,A=x.createTextNode(e.substr(E));x.appendChild(A),o.currentElement=A}return}switch(w>E&&h(w),e.charAt(w+1)){case"/":var I=e.indexOf(">",w+3),O=e.substring(w+2,I).replace(/[ \t\n\r]+$/g,""),B=T.pop();I<0?(O=e.substring(w+2).replace(/[\s<].*/,""),i.error("end tag name: "+O+" is not complete:"+B.tagName),I=w+1+O.length):O.match(/\sE?E=I:h(Math.max(w,E)+1)}}(e,t,n,o,this.errorHandler),o.endDocument()}},y.prototype={setTagName:function(e){if(!a.test(e))throw new Error("invalid tagName:"+e);this.tagName=e},addValue:function(e,t,n){if(!a.test(e))throw new Error("invalid attribute:"+e);this.attributeNames[e]=this.length,this[this.length++]={qName:e,value:t,offset:n}},length:0,getLocalName:function(e){return this[e].localName},getLocator:function(e){return this[e].locator},getQName:function(e){return this[e].qName},getURI:function(e){return this[e].uri},getValue:function(e){return this[e].value}},t.XMLReader=c,t.ParseError=s},function(e,t,n){var r=n(0),o="a-zA-Z_À-ÖØ-öø-ÿͰ-ͽͿ-῿‌-‍⁰-↏Ⰰ-⿿、-퟿豈-﷏ﷰ-�",i=new RegExp("^([^"+o+"])|^((x|X)(m|M)(l|L))|([^"+o+"-.0-9·̀-ͯ‿⁀])","g"),a=/[^\x09\x0A\x0D\x20-\xFF\x85\xA0-\uD7FF\uE000-\uFDCF\uFDE0-\uFFFD]/gm,s=function(e){var t=[];if(e instanceof Object)for(var n in e)e.hasOwnProperty(n)&&t.push(n);return t},c=function(e,t){var n=function(e,n,r,o,a){var s=void 0!==t.indent?t.indent:"\t",c=t.prettyPrint?"\n"+new Array(o).join(s):"";t.removeIllegalNameCharacters&&(e=e.replace(i,"_"));var u=[c,"<",e,r||""];return n&&n.length>0?(u.push(">"),u.push(n),a&&u.push(c),u.push("")):u.push("/>"),u.join("")};return function e(o,i,c){var u=r(o);switch((Array.isArray?Array.isArray(o):o instanceof Array)?u="array":o instanceof Date&&(u="date"),u){case"array":var l=[];return o.map((function(t){l.push(e(t,1,c+1))})),t.prettyPrint&&l.push("\n"),l.join("");case"date":return o.toJSON?o.toJSON():o+"";case"object":var d=[];for(var p in o)if(o.hasOwnProperty(p))if(o[p]instanceof Array)for(var f=0;f0&&d.push("\n"),d.join("");case"function":return o();default:return t.escape?(""+o).replace(/&/g,"&").replace(//g,">").replace(/'/g,"'").replace(/"/g,""").replace(a,""):""+o}}(e,0,0)},u=function(e){var t=['"),t.join("")};e.exports=function(e,t){if(t||(t={xmlHeader:{standalone:!0},prettyPrint:!0,indent:" ",escape:!0}),"string"==typeof e)try{e=JSON.parse(e.toString())}catch(e){return!1}var n="",o="";return t&&("object"==r(t)?(t.xmlHeader&&(n=u(!!t.xmlHeader.standalone)),void 0!==t.docType&&(o="")):n=u()),[n,(t=t||{}).prettyPrint&&o?"\n":"",o,c(e,t)].join("").replace(/\n{2,}/g,"\n").replace(/\s+$/g,"")}},function(e,t){e.exports=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},e.exports.__esModule=!0,e.exports.default=e.exports},function(e,t){function n(e,t){for(var n=0;n0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]60*this.strategy.requestInterval*1e3},e.prototype.getUploadUrl=function(){return this.strategy.httpsUploadUrl+"?appkey="+this.appkey},e.prototype.isBlackEvent=function(e){return-1!=this.strategy.blacklist.indexOf(e)},e.prototype.isEventUpOnOff=function(){return this.strategy.isEventUpOnOff},e.prototype.isSampleEvent=function(e){return!!Object.prototype.hasOwnProperty.call(this.realSample,e)&&this.realSample[e]this.duration)return this.createSession();t=r.sessionId,n=r.sessionStart,this.getSessionStackDepth=0}catch(e){}return{sessionId:t,sessionStart:n}},e.prototype.createSession=function(){var e=Date.now(),t={sessionId:this.appkey+"_"+e.toString(),sessionStart:e};this.storage.setItem(v,JSON.stringify(t)),this.storage.setItem(a,e.toString());var n="is_new_user",r=this.storage.getItem(n);return this.getSessionStackDepth<=1&&this.beacon.onDirectUserAction("rqd_applaunched",{A21:r?"N":"Y"}),this.storage.setItem(n,JSON.stringify(!1)),t},e}();function k(){var e=navigator.userAgent,t=e.indexOf("compatible")>-1&&e.indexOf("MSIE")>-1,n=e.indexOf("Edge")>-1&&!t,r=e.indexOf("Trident")>-1&&e.indexOf("rv:11.0")>-1;if(t){new RegExp("MSIE (\\d+\\.\\d+);").test(e);var o=parseFloat(RegExp.$1);return 7==o?7:8==o?8:9==o?9:10==o?10:6}return n?-2:r?11:-1}var S,b,T=function(){return(T=Object.assign||function(e){for(var t,n=1,r=arguments.length;n0||!window.indexedDB||/X5Lite/.test(navigator.userAgent)?(this.store=new A(t),this.dbEventCount=this.store.getCount()):(this.store=new x(e),this.getCount().then((function(e){n.dbEventCount=e})).catch((function(e){})))}return e.prototype.getCount=function(){return n(this,void 0,void 0,(function(){return r(this,(function(e){switch(e.label){case 0:return e.trys.push([0,2,,3]),[4,this.store.getCount()];case 1:return[2,e.sent()];case 2:return e.sent(),[2,Promise.reject()];case 3:return[2]}}))}))},e.prototype.insertEvent=function(e,t){return n(this,void 0,void 0,(function(){var n,o;return r(this,(function(r){switch(r.label){case 0:if(this.dbEventCount>=1e4)return[2,Promise.reject()];n=f(e.mapValue),r.label=1;case 1:return r.trys.push([1,3,,4]),this.dbEventCount++,[4,this.store.setItem(n,e)];case 2:return[2,r.sent()];case 3:return o=r.sent(),t&&t(o,e),this.dbEventCount--,[2,Promise.reject()];case 4:return[2]}}))}))},e.prototype.getEvents=function(){return n(this,void 0,void 0,(function(){var e;return r(this,(function(t){switch(t.label){case 0:e=[],t.label=1;case 1:return t.trys.push([1,3,,4]),[4,this.store.iterate((function(t){e.push(t)}))];case 2:case 3:return t.sent(),[2,Promise.all(e)];case 4:return[2]}}))}))},e.prototype.removeEvent=function(e){return n(this,void 0,void 0,(function(){var t;return r(this,(function(n){switch(n.label){case 0:t=f(e.mapValue),n.label=1;case 1:return n.trys.push([1,3,,4]),this.dbEventCount--,[4,this.store.removeItem(t)];case 2:return[2,n.sent()];case 3:return n.sent(),this.dbEventCount++,[2,Promise.reject()];case 4:return[2]}}))}))},e}(),O=function(){return(O=Object.assign||function(e){for(var t,n=1,r=arguments.length;n0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&i<8,t.isUnderIE8||(t.isUnderIE=i>0,e.needInitQimei&&function(e,t){var n;(void 0===n&&(n=Date.now()+"-"+Math.random()),new Promise((function(e,t){if(document.getElementById(n))e(void 0);else{var r=document.getElementsByTagName("head")[0],o=document.createElement("script");o.onload=function(){return function(){o.onload=null,e(void 0)}},o.onerror=function(e){o.onerror=null,r.removeChild(o),t(e)},o.src="https://tun-cos-1258344701.file.myqcloud.com/fp.js",o.id=n,r.appendChild(o)}}))).then((function(){(new Fingerprint).getQimei36(e,t)})).catch((function(e){}))}(e.appkey,(function(e){t.qimei36=e.q36})),t.network=new q(e),t.storage=new z(e.appkey),t.initCommonInfo(e),t.store=new I(e.appkey,t.storage),t.errorReport=new g(t.config,t.commonInfo,"web",t.network),t.strategy=new y(null==e.needQueryConfig||e.needQueryConfig,t.config,t.commonInfo,t.storage,t.network),t.logidStartTime=t.storage.getItem(G),t.logidStartTime||(t.logidStartTime=Date.now().toString(),t.storage.setItem(G,t.logidStartTime)),r=t.logidStartTime,o=Date.now()-Number.parseFloat(r),Math.floor(o/864e5)>=365&&t.storage.clear(),t.initSession(e),t.onDirectUserAction("rqd_js_init",{}),setTimeout((function(){return t.lifeCycle.emit("init")}),0),t.initDelayTime=e.delay?e.delay:1e3,t.cycleTask(t.initDelayTime)),t}return function(t,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}(r,n),r.prototype.initSession=function(e){var t=18e5;e.sessionDuration&&e.sessionDuration>3e4&&(t=e.sessionDuration),this.beaconSession=new C(this.storage,t,this)},r.prototype.initCommonInfo=function(e){var t=Number(this.storage.getItem(a));try{var n=JSON.parse(this.storage.getItem(s));(Date.now()-t>3e4||!n)&&this.storage.setItem(s,JSON.stringify([]))}catch(e){}e.uploadUrl&&(this.uploadUrl=e.uploadUrl+"?appkey="+e.appkey);var r=[window.screen.width,window.screen.height];window.devicePixelRatio&&r.push(window.devicePixelRatio),this.commonInfo={deviceId:this.storage.createDeviceId(),language:navigator&&navigator.language||"zh_CN",query:window.location.search,userAgent:navigator.userAgent,pixel:r.join("*"),channelID:e.channelID?String(e.channelID):"",openid:e.openid?String(e.openid):"",unid:e.unionid?String(e.unionid):"",sdkVersion:V},this.config.appVersion=e.versionCode?String(e.versionCode):"",this.config.strictMode=e.strictMode},r.prototype.cycleTask=function(e){var t=this;this.intervalID=window.setInterval((function(){t.pauseSearching||t.store.getEvents().then((function(e){0==e.length&&(t.pauseSearching=!0);var n=[],r=JSON.parse(t.storage.getItem(s));r||(r=[]),e&&e.forEach((function(e){var t=f(e.mapValue);-1==r.indexOf(t)&&(n.push(e),r.push(t))})),0!=n.length&&(t.storage.setItem(s,JSON.stringify(r)),t._normalLogPipeline(t.assembleData(n)))})).catch((function(e){}))}),e)},r.prototype.onReport=function(e,t,n){var r=this;if(this.isUnderIE8)this.errorReport.reportError("601","UnderIE8");else{this.pauseSearching=!1;var o=this.generateData(e,t,n);if(n&&0==this.delayTime&&!this.underWeakNet)this._normalLogPipeline(this.assembleData(o));else{var i=o.shift();i&&this.store.insertEvent(i,(function(e){e&&r.errorReport.reportError("604","insertEvent fail!")})).catch((function(e){r._normalLogPipeline(r.assembleData(o))}))}}},r.prototype.onSendBeacon=function(e,t){if(this.isUnderIE)this.errorReport.reportError("605","UnderIE");else{this.pauseSearching=!1;var n=this.assembleData(this.generateData(e,t,!0));"function"==typeof navigator.sendBeacon&&navigator.sendBeacon(this.uploadUrl||this.strategy.getUploadUrl(),JSON.stringify(n))}},r.prototype.generateData=function(e,n,r){var o=[],i="4.5.14-web_"+(r?"direct_log_id":"normal_log_id"),a=Number(this.storage.getItem(i));return a=a||1,n=t(t({},n),{A99:r?"Y":"N",A100:a.toString(),A72:V,A88:this.logidStartTime}),a++,this.storage.setItem(i,a.toString()),o.push({eventCode:e,eventTime:Date.now().toString(),mapValue:d(n,this.config.strictMode)}),o},r.prototype.assembleData=function(e){var n=this.beaconSession.getSession();return{appVersion:this.config.appVersion?p(this.config.appVersion):"",sdkId:"js",sdkVersion:V,mainAppKey:this.config.appkey,platformId:3,common:d(t(t({},this.additionalParams),{A2:this.commonInfo.deviceId,A8:this.commonInfo.openid,A12:this.commonInfo.language,A17:this.commonInfo.pixel,A23:this.commonInfo.channelID,A50:this.commonInfo.unid,A76:n.sessionId,A101:this.commonInfo.userAgent,A102:window.location.href,A104:document.referrer,A119:this.commonInfo.query,A153:this.qimei36}),!1),events:e}},r.prototype.monitorUploadFailed=function(){this.uselessCycleTaskNum++,this.uselessCycleTaskNum>=5&&(window.clearInterval(this.intervalID),this.cycleTask(6e4),this.underWeakNet=!0)},r.prototype.doCustomCycleTask=function(){this.uselessCycleTaskNum>=5&&(window.clearInterval(this.intervalID),this.cycleTask(this.initDelayTime)),this.uselessCycleTaskNum=0,this.underWeakNet=!1},r}(m)},"object"==a(t)&&void 0!==e?e.exports=i():void 0===(o="function"==typeof(r=i)?r.call(t,n,t,e):r)||(e.exports=o)},function(e,t,n){var r=n(9),o=n(1),i={};e.exports.transferToTaskMethod=function(e,t){i[t]=e[t],e[t]=function(e,n){e.SkipTask?i[t].call(this,e,n):this._addTask(t,e,n)}},e.exports.init=function(e){var t,n,a=[],s={},c=0,u=0,l=function(e){var t={id:e.id,Bucket:e.Bucket,Region:e.Region,Key:e.Key,FilePath:e.FilePath,state:e.state,loaded:e.loaded,size:e.size,speed:e.speed,percent:e.percent,hashPercent:e.hashPercent,error:e.error};return e.FilePath&&(t.FilePath=e.FilePath),e._custom&&(t._custom=e._custom),t},d=(n=function(){t=0,e.emit("task-list-update",{list:o.map(a,l)}),e.emit("list-update",{list:o.map(a,l)})},function(){t||(t=setTimeout(n))}),p=function(){if(!(a.length<=e.options.UploadQueueSize)){for(var t=0;te.options.UploadQueueSize;){var n="waiting"===a[t].state||"checking"===a[t].state||"uploading"===a[t].state;a[t]&&n?t++:(s[a[t].id]&&delete s[a[t].id],a.splice(t,1),u--)}d()}},f=function t(){if(!(c>=e.options.FileParallelLimit)){for(;a[u]&&"waiting"!==a[u].state;)u++;if(!(u>=a.length)){var n=a[u];u++,c++,n.state="checking",n.params.onTaskStart&&n.params.onTaskStart(l(n)),!n.params.UploadData&&(n.params.UploadData={});var r=o.formatParams(n.api,n.params);i[n.api].call(e,r,(function(r,o){e._isRunningTask(n.id)&&("checking"!==n.state&&"uploading"!==n.state||(n.state=r?"error":"success",r&&(n.error=r),c--,d(),t(),n.callback&&n.callback(r,o),"success"===n.state&&(n.params&&(delete n.params.UploadData,delete n.params.Body,delete n.params),delete n.callback)),p())})),d(),setTimeout(t)}}},h=function(t,n){var o=s[t];if(o){var i=o&&"waiting"===o.state,a=o&&("checking"===o.state||"uploading"===o.state);if("canceled"===n&&"canceled"!==o.state||"paused"===n&&i||"paused"===n&&a){if("paused"===n&&o.params.Body&&"function"==typeof o.params.Body.pipe)return;o.state=n,e.emit("inner-kill-task",{TaskId:t,toState:n});try{var u=o&&o.params&&o.params.UploadData.UploadId}catch(e){}"canceled"===n&&u&&r.removeUsing(u),d(),a&&(c--,f()),"canceled"===n&&(o.params&&(delete o.params.UploadData,delete o.params.Body,delete o.params),delete o.callback)}p()}};e._addTasks=function(t){o.each(t,(function(t){e._addTask(t.api,t.params,t.callback,!0)})),d()};e._addTask=function(t,n,r,i){n=o.formatParams(t,n);var c=o.uuid();n.TaskId=c,n.onTaskReady&&n.onTaskReady(c),n.TaskReady&&(n.TaskReady(c),!1);var u={params:n,callback:r,api:t,index:a.length,id:c,Bucket:n.Bucket,Region:n.Region,Key:n.Key,FilePath:n.FilePath||"",state:"waiting",loaded:0,size:0,speed:0,percent:0,hashPercent:0,error:null,_custom:n._custom},l=n.onHashProgress;n.onHashProgress=function(t){e._isRunningTask(u.id)&&(u.hashPercent=t.percent,l&&l(t),d())};var h=n.onProgress;return n.onProgress=function(t){e._isRunningTask(u.id)&&("checking"===u.state&&(u.state="uploading"),u.loaded=t.loaded,u.speed=t.speed,u.percent=t.percent,h&&h(t),d())},o.getFileSize(t,n,(function(e,t){if(e)return r(o.error(e));s[c]=u,a.push(u),u.size=t,!i&&d(),f(),p()})),c},e._isRunningTask=function(e){var t=s[e];return!(!t||"checking"!==t.state&&"uploading"!==t.state)},e.getTaskList=function(){return o.map(a,l)},e.cancelTask=function(e){h(e,"canceled")},e.pauseTask=function(e){h(e,"paused")},e.restartTask=function(e){var t=s[e];!t||"paused"!==t.state&&"error"!==t.state||(t.state="waiting",d(),u=Math.min(u,t.index),f())},e.isUploadRunning=function(){return c||u-1&&(a["SSE-COS"]=a.SSECOS,delete a.SSECOS)}var s=i.json2xml({InventoryConfiguration:r}),c=t.Headers;c["Content-Type"]="application/xml",c["Content-MD5"]=i.b64(i.md5(s));var u="PUT"===e?"name/cos:PutBucketInventory":"name/cos:PostBucketInventory";f.call(this,{Action:u,method:e,Bucket:t.Bucket,Region:t.Region,body:s,action:"inventory",qs:{id:t.Id},headers:c},(function(e,t){return e&&204===e.statusCode?n(null,{statusCode:e.statusCode}):e?n(e):void n(null,{statusCode:t.statusCode,headers:t.headers})}))}function s(e){var t={GrantFullControl:[],GrantWrite:[],GrantRead:[],GrantReadAcp:[],GrantWriteAcp:[],ACL:""},n={FULL_CONTROL:"GrantFullControl",WRITE:"GrantWrite",READ:"GrantRead",READ_ACP:"GrantReadAcp",WRITE_ACP:"GrantWriteAcp"},r=(e&&e.AccessControlList||{}).Grant;r&&(r=i.isArray(r)?r:[r]);var o={READ:0,WRITE:0,FULL_CONTROL:0};return r&&r.length&&i.each(r,(function(r){"qcs::cam::anyone:anyone"===r.Grantee.ID||"http://cam.qcloud.com/groups/global/AllUsers"===r.Grantee.URI?o[r.Permission]=1:r.Grantee.ID!==e.Owner.ID&&t[n[r.Permission]].push('id="'+r.Grantee.ID+'"')})),o.FULL_CONTROL||o.WRITE&&o.READ?t.ACL="public-read-write":o.READ?t.ACL="public-read":t.ACL="private",i.each(n,(function(e){t[e]=c(t[e].join(","))})),t}function c(e){var t,n,r=e.split(","),o={};for(t=0;t-1?"{Region}.myqcloud.com":"cos.{Region}.myqcloud.com",e.ForcePathStyle||(s="{Bucket}."+s)),s=(s=s.replace(/\{\{AppId\}\}/gi,a).replace(/\{\{Bucket\}\}/gi,o).replace(/\{\{Region\}\}/gi,t).replace(/\{\{.*?\}\}/gi,"")).replace(/\{AppId\}/gi,a).replace(/\{BucketName\}/gi,o).replace(/\{Bucket\}/gi,n).replace(/\{Region\}/gi,t).replace(/\{.*?\}/gi,""),/^[a-zA-Z]+:\/\//.test(s)||(s=u+"//"+s),"/"===s.slice(-1)&&(s=s.slice(0,-1));var l=s;return e.ForcePathStyle&&(l+="/"+n),l+="/",c&&(l+=i.camSafeUrlEncode(c).replace(/%2F/g,"/")),e.isLocation&&(l=l.replace(/^https?:\/\//,"")),l}var l=function(e){if(!e.Bucket||!e.Region)return"";var t=void 0===e.UseAccelerate?this.options.UseAccelerate:e.UseAccelerate,n=(e.Url||u({ForcePathStyle:this.options.ForcePathStyle,protocol:this.options.Protocol,domain:this.options.Domain,bucket:e.Bucket,region:t?"accelerate":e.Region})).replace(/^https?:\/\/([^/]+)(\/.*)?$/,"$1");return new RegExp("^([a-z\\d-]+-\\d+\\.)?(cos|cosv6|ci|pic)\\.([a-z\\d-]+)\\.myqcloud\\.com$").test(n)?n:""};function d(e,t){var n=i.clone(e.Headers),r="";i.each(n,(function(e,t){(""===e||["content-type","cache-control","expires"].indexOf(t.toLowerCase())>-1)&&delete n[t],"host"===t.toLowerCase()&&(r=e)}));var o=!1!==e.ForceSignHost;!r&&e.SignHost&&o&&(n.Host=e.SignHost);var a=!1,s=function(e,n){a||(a=!0,n&&n.XCosSecurityToken&&!n.SecurityToken&&((n=i.clone(n)).SecurityToken=n.XCosSecurityToken,delete n.XCosSecurityToken),t&&t(e,n))},c=this,u=e.Bucket||"",l=e.Region||"",d=e.Key||"";c.options.ForcePathStyle&&u&&(d=u+"/"+d);var p="/"+d,f={},h=e.Scope;if(!h){var m=e.Action||"",g=e.ResourceKey||e.Key||"";h=e.Scope||[{action:m,bucket:u,region:l,prefix:g}]}var y=i.md5(JSON.stringify(h));c._StsCache=c._StsCache||[],function(){var e,t;for(e=c._StsCache.length-1;e>=0;e--){t=c._StsCache[e];var n=Math.round(i.getSkewTime(c.options.SystemClockOffset)/1e3)+30;if(t.StartTime&&n=t.ExpiredTime)c._StsCache.splice(e,1);else if(!t.ScopeLimit||t.ScopeLimit&&t.ScopeKey===y){f=t;break}}}();var v,C=function(){var t="";f.StartTime&&e.Expires?t=f.StartTime+";"+(f.StartTime+1*e.Expires):f.StartTime&&f.ExpiredTime&&(t=f.StartTime+";"+f.ExpiredTime);var r={Authorization:i.getAuth({SecretId:f.TmpSecretId,SecretKey:f.TmpSecretKey,Method:e.Method,Pathname:p,Query:e.Query,Headers:n,Expires:e.Expires,UseRawKey:c.options.UseRawKey,SystemClockOffset:c.options.SystemClockOffset,KeyTime:t,ForceSignHost:o}),SecurityToken:f.SecurityToken||f.XCosSecurityToken||"",Token:f.Token||"",ClientIP:f.ClientIP||"",ClientUA:f.ClientUA||""};s(null,r)},k=function(e){if(e.Authorization){var t=!1,n=e.Authorization;if(n)if(n.indexOf(" ")>-1)t=!1;else if(n.indexOf("q-sign-algorithm=")>-1&&n.indexOf("q-ak=")>-1&&n.indexOf("q-sign-time=")>-1&&n.indexOf("q-key-time=")>-1&&n.indexOf("q-url-param-list=")>-1)t=!0;else try{(n=atob(n)).indexOf("a=")>-1&&n.indexOf("k=")>-1&&n.indexOf("t=")>-1&&n.indexOf("r=")>-1&&n.indexOf("b=")>-1&&(t=!0)}catch(e){}if(!t)return i.error(new Error("getAuthorization callback params format error"))}else{if(!e.TmpSecretId)return i.error(new Error('getAuthorization callback params missing "TmpSecretId"'));if(!e.TmpSecretKey)return i.error(new Error('getAuthorization callback params missing "TmpSecretKey"'));if(!e.SecurityToken&&!e.XCosSecurityToken)return i.error(new Error('getAuthorization callback params missing "SecurityToken"'));if(!e.ExpiredTime)return i.error(new Error('getAuthorization callback params missing "ExpiredTime"'));if(e.ExpiredTime&&10!==e.ExpiredTime.toString().length)return i.error(new Error('getAuthorization callback params "ExpiredTime" should be 10 digits'));if(e.StartTime&&10!==e.StartTime.toString().length)return i.error(new Error('getAuthorization callback params "StartTime" should be 10 StartTime'))}return!1};if(f.ExpiredTime&&f.ExpiredTime-i.getSkewTime(c.options.SystemClockOffset)/1e3>60)C();else if(c.options.getAuthorization)c.options.getAuthorization.call(c,{Bucket:u,Region:l,Method:e.Method,Key:d,Pathname:p,Query:e.Query,Headers:n,Scope:h,SystemClockOffset:c.options.SystemClockOffset,ForceSignHost:o},(function(e){"string"==typeof e&&(e={Authorization:e});var t=k(e);if(t)return s(t);e.Authorization?s(null,e):((f=e||{}).Scope=h,f.ScopeKey=y,c._StsCache.push(f),C())}));else{if(!c.options.getSTS)return v={Authorization:i.getAuth({SecretId:e.SecretId||c.options.SecretId,SecretKey:e.SecretKey||c.options.SecretKey,Method:e.Method,Pathname:p,Query:e.Query,Headers:n,Expires:e.Expires,UseRawKey:c.options.UseRawKey,SystemClockOffset:c.options.SystemClockOffset,ForceSignHost:o}),SecurityToken:c.options.SecurityToken||c.options.XCosSecurityToken},s(null,v),v;c.options.getSTS.call(c,{Bucket:u,Region:l},(function(e){(f=e||{}).Scope=h,f.ScopeKey=y,f.TmpSecretId||(f.TmpSecretId=f.SecretId),f.TmpSecretKey||(f.TmpSecretKey=f.SecretKey);var t=k(f);if(t)return s(t);c._StsCache.push(f),C()}))}return""}function p(e){var t=!1,n=!1,r=e.headers&&(e.headers.date||e.headers.Date)||e.error&&e.error.ServerTime;try{var o=e.error.Code,a=e.error.Message;("RequestTimeTooSkewed"===o||"AccessDenied"===o&&"Request has expired"===a)&&(n=!0)}catch(e){}if(e)if(n&&r){var s=Date.parse(r);this.options.CorrectClockSkew&&Math.abs(i.getSkewTime(this.options.SystemClockOffset)-s)>=3e4&&(this.options.SystemClockOffset=s-Date.now(),t=!0)}else 5===Math.floor(e.statusCode/100)&&(t=!0);return t}function f(e,t){var n=this;!e.headers&&(e.headers={}),!e.qs&&(e.qs={}),e.VersionId&&(e.qs.versionId=e.VersionId),e.qs=i.clearKey(e.qs),e.headers&&(e.headers=i.clearKey(e.headers)),e.qs&&(e.qs=i.clearKey(e.qs));var r=i.clone(e.qs);e.action&&(r[e.action]="");var o=e.url||e.Url,a=e.SignHost||l.call(this,{Bucket:e.Bucket,Region:e.Region,Url:o}),s=e.tracker;!function o(i){var c=n.options.SystemClockOffset;s&&s.setParams({signStartTime:(new Date).getTime(),retryTimes:i-1}),d.call(n,{Bucket:e.Bucket||"",Region:e.Region||"",Method:e.method,Key:e.Key,Query:r,Headers:e.headers,SignHost:a,Action:e.Action,ResourceKey:e.ResourceKey,Scope:e.Scope,ForceSignHost:n.options.ForceSignHost},(function(r,a){r?t(r):(s&&s.setParams({signEndTime:(new Date).getTime(),httpStartTime:(new Date).getTime()}),e.AuthData=a,h.call(n,e,(function(r,a){s&&s.setParams({httpEndTime:(new Date).getTime()}),r&&i<2&&(c!==n.options.SystemClockOffset||p.call(n,r))?(e.headers&&(delete e.headers.Authorization,delete e.headers.token,delete e.headers.clientIP,delete e.headers.clientUA,e.headers["x-cos-security-token"]&&delete e.headers["x-cos-security-token"],e.headers["x-ci-security-token"]&&delete e.headers["x-ci-security-token"]),o(i+1)):t(r,a)})))}))}(1)}function h(e,t){var n=this,r=e.TaskId;if(!r||n._isRunningTask(r)){var a=e.Bucket,s=e.Region,c=e.Key,l=e.method||"GET",d=e.Url||e.url,p=e.body,f=e.rawBody;n.options.UseAccelerate&&(s="accelerate"),d=d||u({ForcePathStyle:n.options.ForcePathStyle,protocol:n.options.Protocol,domain:n.options.Domain,bucket:a,region:s,object:c}),e.action&&(d=d+"?"+(i.isIOS_QQ?"".concat(e.action,"="):e.action)),e.qsStr&&(d=d.indexOf("?")>-1?d+"&"+e.qsStr:d+"?"+e.qsStr);var h={method:l,url:d,headers:e.headers,qs:e.qs,body:p},m="x-cos-security-token";if(i.isCIHost(d)&&(m="x-ci-security-token"),h.headers.Authorization=e.AuthData.Authorization,e.AuthData.Token&&(h.headers.token=e.AuthData.Token),e.AuthData.ClientIP&&(h.headers.clientIP=e.AuthData.ClientIP),e.AuthData.ClientUA&&(h.headers.clientUA=e.AuthData.ClientUA),e.AuthData.SecurityToken&&(h.headers[m]=e.AuthData.SecurityToken),h.headers&&(h.headers=i.clearKey(h.headers)),h=i.clearKey(h),e.onProgress&&"function"==typeof e.onProgress){var g=p&&(p.size||p.length)||0;h.onProgress=function(t){if(!r||n._isRunningTask(r)){var o=t?t.loaded:0;e.onProgress({loaded:o,total:g})}}}e.onDownloadProgress&&(h.onDownloadProgress=e.onDownloadProgress),e.DataType&&(h.dataType=e.DataType),this.options.Timeout&&(h.timeout=this.options.Timeout),n.options.ForcePathStyle&&(h.pathStyle=n.options.ForcePathStyle),n.emit("before-send",h);var y=h.url.includes("accelerate."),v=h.qs?Object.keys(h.qs).map((function(e){return"".concat(e,"=").concat(h.qs[e])})).join("&"):"",C=v?h.url+"?"+v:h.url;e.tracker&&e.tracker.setParams({reqUrl:C,accelerate:y?"Y":"N"}),e.tracker&&e.tracker.parent&&e.tracker.parent.setParams({reqUrl:C,accelerate:y?"Y":"N"});var k=(n.options.Request||o)(h,(function(e){if(!e||"abort"!==e.error){var o={options:h,error:e&&e.error,statusCode:e&&e.statusCode||0,statusMessage:e&&e.statusMessage||"",headers:e&&e.headers||{},body:e&&e.body};n.emit("after-receive",o);var a,s=o.error,c=o.body,u={statusCode:o.statusCode,statusMessage:o.statusMessage,headers:o.headers},l=function(e,o){if(r&&n.off("inner-kill-task",S),!a){a=!0;var s={};u&&u.statusCode&&(s.statusCode=u.statusCode),u&&u.headers&&(s.headers=u.headers),e?(e=i.extend(e||{},s),t(e,null)):(o=i.extend(o||{},s),t(null,o)),k=null}};if(s)return l(i.error(s));var d,p=u.statusCode,m=2===Math.floor(p/100);if(f&&m)return l(null,{body:c});try{d=c&&c.indexOf("<")>-1&&c.indexOf(">")>-1&&i.xml2json(c)||{}}catch(e){d={}}var g=d&&d.Error;m?l(null,d):g?l(i.error(new Error(g.Message),{code:g.Code,error:g})):p?l(i.error(new Error(u.statusMessage),{code:""+p})):p&&l(i.error(new Error("statusCode error")))}})),S=function e(t){t.TaskId===r&&(k&&k.abort&&k.abort(),n.off("inner-kill-task",e))};r&&n.on("inner-kill-task",S)}}var m={getService:function(e,t){"function"==typeof e&&(t=e,e={});var n=this.options.Protocol||(i.isBrowser&&"object"===("undefined"==typeof location?"undefined":r(location))&&"http:"===location.protocol?"http:":"https:"),o=this.options.ServiceDomain,a=e.AppId||this.options.appId,s=e.Region;o?(o=o.replace(/\{\{AppId\}\}/gi,a||"").replace(/\{\{Region\}\}/gi,s||"").replace(/\{\{.*?\}\}/gi,""),/^[a-zA-Z]+:\/\//.test(o)||(o=n+"//"+o),"/"===o.slice(-1)&&(o=o.slice(0,-1))):o=s?n+"//cos."+s+".myqcloud.com":n+"//service.cos.myqcloud.com";var c="",u=s?"cos."+s+".myqcloud.com":"service.cos.myqcloud.com";u===o.replace(/^https?:\/\/([^/]+)(\/.*)?$/,"$1")&&(c=u),f.call(this,{Action:"name/cos:GetService",url:o,method:"GET",headers:e.Headers,SignHost:c},(function(e,n){if(e)return t(e);var r=n&&n.ListAllMyBucketsResult&&n.ListAllMyBucketsResult.Buckets&&n.ListAllMyBucketsResult.Buckets.Bucket||[];r=i.isArray(r)?r:[r];var o=n&&n.ListAllMyBucketsResult&&n.ListAllMyBucketsResult.Owner||{};t(null,{Buckets:r,Owner:o,statusCode:n.statusCode,headers:n.headers})}))},putBucket:function(e,t){var n=this,r="";if(e.BucketAZConfig){var o={BucketAZConfig:e.BucketAZConfig};r=i.json2xml({CreateBucketConfiguration:o})}f.call(this,{Action:"name/cos:PutBucket",method:"PUT",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,body:r},(function(r,o){if(r)return t(r);var i=u({protocol:n.options.Protocol,domain:n.options.Domain,bucket:e.Bucket,region:e.Region,isLocation:!0});t(null,{Location:i,statusCode:o.statusCode,headers:o.headers})}))},headBucket:function(e,t){f.call(this,{Action:"name/cos:HeadBucket",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,method:"HEAD"},t)},getBucket:function(e,t){var n={};n.prefix=e.Prefix||"",n.delimiter=e.Delimiter,n.marker=e.Marker,n["max-keys"]=e.MaxKeys,n["encoding-type"]=e.EncodingType,f.call(this,{Action:"name/cos:GetBucket",ResourceKey:n.prefix,method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,qs:n},(function(e,n){if(e)return t(e);var r=n.ListBucketResult||{},o=r.Contents||[],a=r.CommonPrefixes||[];o=i.isArray(o)?o:[o],a=i.isArray(a)?a:[a];var s=i.clone(r);i.extend(s,{Contents:o,CommonPrefixes:a,statusCode:n.statusCode,headers:n.headers}),t(null,s)}))},deleteBucket:function(e,t){f.call(this,{Action:"name/cos:DeleteBucket",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,method:"DELETE"},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},putBucketAcl:function(e,t){var n=e.Headers,r="";if(e.AccessControlPolicy){var o=i.clone(e.AccessControlPolicy||{}),a=o.Grants||o.Grant;a=i.isArray(a)?a:[a],delete o.Grant,delete o.Grants,o.AccessControlList={Grant:a},r=i.json2xml({AccessControlPolicy:o}),n["Content-Type"]="application/xml",n["Content-MD5"]=i.b64(i.md5(r))}i.each(n,(function(e,t){0===t.indexOf("x-cos-grant-")&&(n[t]=c(n[t]))})),f.call(this,{Action:"name/cos:PutBucketACL",method:"PUT",Bucket:e.Bucket,Region:e.Region,headers:n,action:"acl",body:r},(function(e,n){if(e)return t(e);t(null,{statusCode:n.statusCode,headers:n.headers})}))},getBucketAcl:function(e,t){f.call(this,{Action:"name/cos:GetBucketACL",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"acl"},(function(e,n){if(e)return t(e);var r=n.AccessControlPolicy||{},o=r.Owner||{},a=r.AccessControlList.Grant||[];a=i.isArray(a)?a:[a];var c=s(r);n.headers&&n.headers["x-cos-acl"]&&(c.ACL=n.headers["x-cos-acl"]),c=i.extend(c,{Owner:o,Grants:a,statusCode:n.statusCode,headers:n.headers}),t(null,c)}))},putBucketCors:function(e,t){var n=(e.CORSConfiguration||{}).CORSRules||e.CORSRules||[];n=i.clone(i.isArray(n)?n:[n]),i.each(n,(function(e){i.each(["AllowedOrigin","AllowedHeader","AllowedMethod","ExposeHeader"],(function(t){var n=t+"s",r=e[n]||e[t]||[];delete e[n],e[t]=i.isArray(r)?r:[r]}))}));var r={CORSRule:n};e.ResponseVary&&(r.ResponseVary=e.ResponseVary);var o=i.json2xml({CORSConfiguration:r}),a=e.Headers;a["Content-Type"]="application/xml",a["Content-MD5"]=i.b64(i.md5(o)),f.call(this,{Action:"name/cos:PutBucketCORS",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:o,action:"cors",headers:a},(function(e,n){if(e)return t(e);t(null,{statusCode:n.statusCode,headers:n.headers})}))},getBucketCors:function(e,t){f.call(this,{Action:"name/cos:GetBucketCORS",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"cors"},(function(e,n){if(e)if(404===e.statusCode&&e.error&&"NoSuchCORSConfiguration"===e.error.Code){var r={CORSRules:[],statusCode:e.statusCode};e.headers&&(r.headers=e.headers),t(null,r)}else t(e);else{var o=n.CORSConfiguration||{},a=o.CORSRules||o.CORSRule||[];a=i.clone(i.isArray(a)?a:[a]);var s=o.ResponseVary;i.each(a,(function(e){i.each(["AllowedOrigin","AllowedHeader","AllowedMethod","ExposeHeader"],(function(t){var n=t+"s",r=e[n]||e[t]||[];delete e[t],e[n]=i.isArray(r)?r:[r]}))})),t(null,{CORSRules:a,ResponseVary:s,statusCode:n.statusCode,headers:n.headers})}}))},deleteBucketCors:function(e,t){f.call(this,{Action:"name/cos:DeleteBucketCORS",method:"DELETE",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"cors"},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode||e.statusCode,headers:n.headers})}))},getBucketLocation:function(e,t){f.call(this,{Action:"name/cos:GetBucketLocation",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"location"},t)},getBucketPolicy:function(e,t){f.call(this,{Action:"name/cos:GetBucketPolicy",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"policy",rawBody:!0},(function(e,n){if(e)return e.statusCode&&403===e.statusCode?t(i.error(e,{ErrorStatus:"Access Denied"})):e.statusCode&&405===e.statusCode?t(i.error(e,{ErrorStatus:"Method Not Allowed"})):e.statusCode&&404===e.statusCode?t(i.error(e,{ErrorStatus:"Policy Not Found"})):t(e);var r={};try{r=JSON.parse(n.body)}catch(e){}t(null,{Policy:r,statusCode:n.statusCode,headers:n.headers})}))},putBucketPolicy:function(e,t){var n=e.Policy;try{"string"==typeof n&&(n=JSON.parse(n))}catch(e){}if(!n||"string"==typeof n)return t(i.error(new Error("Policy format error")));var r=JSON.stringify(n);n.version||(n.version="2.0");var o=e.Headers;o["Content-Type"]="application/json",o["Content-MD5"]=i.b64(i.md5(r)),f.call(this,{Action:"name/cos:PutBucketPolicy",method:"PUT",Bucket:e.Bucket,Region:e.Region,action:"policy",body:r,headers:o},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},deleteBucketPolicy:function(e,t){f.call(this,{Action:"name/cos:DeleteBucketPolicy",method:"DELETE",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"policy"},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode||e.statusCode,headers:n.headers})}))},putBucketTagging:function(e,t){var n=e.Tagging||{},r=n.TagSet||n.Tags||e.Tags||[];r=i.clone(i.isArray(r)?r:[r]);var o=i.json2xml({Tagging:{TagSet:{Tag:r}}}),a=e.Headers;a["Content-Type"]="application/xml",a["Content-MD5"]=i.b64(i.md5(o)),f.call(this,{Action:"name/cos:PutBucketTagging",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:o,action:"tagging",headers:a},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},getBucketTagging:function(e,t){f.call(this,{Action:"name/cos:GetBucketTagging",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"tagging"},(function(e,n){if(e)if(404!==e.statusCode||!e.error||"Not Found"!==e.error&&"NoSuchTagSet"!==e.error.Code)t(e);else{var r={Tags:[],statusCode:e.statusCode};e.headers&&(r.headers=e.headers),t(null,r)}else{var o=[];try{o=n.Tagging.TagSet.Tag||[]}catch(e){}o=i.clone(i.isArray(o)?o:[o]),t(null,{Tags:o,statusCode:n.statusCode,headers:n.headers})}}))},deleteBucketTagging:function(e,t){f.call(this,{Action:"name/cos:DeleteBucketTagging",method:"DELETE",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"tagging"},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},putBucketLifecycle:function(e,t){var n=(e.LifecycleConfiguration||{}).Rules||e.Rules||[];n=i.clone(n);var r=i.json2xml({LifecycleConfiguration:{Rule:n}}),o=e.Headers;o["Content-Type"]="application/xml",o["Content-MD5"]=i.b64(i.md5(r)),f.call(this,{Action:"name/cos:PutBucketLifecycle",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:r,action:"lifecycle",headers:o},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},getBucketLifecycle:function(e,t){f.call(this,{Action:"name/cos:GetBucketLifecycle",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"lifecycle"},(function(e,n){if(e)if(404===e.statusCode&&e.error&&"NoSuchLifecycleConfiguration"===e.error.Code){var r={Rules:[],statusCode:e.statusCode};e.headers&&(r.headers=e.headers),t(null,r)}else t(e);else{var o=[];try{o=n.LifecycleConfiguration.Rule||[]}catch(e){}o=i.clone(i.isArray(o)?o:[o]),t(null,{Rules:o,statusCode:n.statusCode,headers:n.headers})}}))},deleteBucketLifecycle:function(e,t){f.call(this,{Action:"name/cos:DeleteBucketLifecycle",method:"DELETE",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"lifecycle"},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},putBucketVersioning:function(e,t){if(e.VersioningConfiguration){var n=e.VersioningConfiguration||{},r=i.json2xml({VersioningConfiguration:n}),o=e.Headers;o["Content-Type"]="application/xml",o["Content-MD5"]=i.b64(i.md5(r)),f.call(this,{Action:"name/cos:PutBucketVersioning",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:r,action:"versioning",headers:o},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))}else t(i.error(new Error("missing param VersioningConfiguration")))},getBucketVersioning:function(e,t){f.call(this,{Action:"name/cos:GetBucketVersioning",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"versioning"},(function(e,n){e||!n.VersioningConfiguration&&(n.VersioningConfiguration={}),t(e,n)}))},putBucketReplication:function(e,t){var n=i.clone(e.ReplicationConfiguration),r=i.json2xml({ReplicationConfiguration:n});r=(r=r.replace(/<(\/?)Rules>/gi,"<$1Rule>")).replace(/<(\/?)Tags>/gi,"<$1Tag>");var o=e.Headers;o["Content-Type"]="application/xml",o["Content-MD5"]=i.b64(i.md5(r)),f.call(this,{Action:"name/cos:PutBucketReplication",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:r,action:"replication",headers:o},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},getBucketReplication:function(e,t){f.call(this,{Action:"name/cos:GetBucketReplication",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"replication"},(function(e,n){if(e)if(404!==e.statusCode||!e.error||"Not Found"!==e.error&&"ReplicationConfigurationnotFoundError"!==e.error.Code)t(e);else{var r={ReplicationConfiguration:{Rules:[]},statusCode:e.statusCode};e.headers&&(r.headers=e.headers),t(null,r)}else!n.ReplicationConfiguration&&(n.ReplicationConfiguration={}),n.ReplicationConfiguration.Rule&&(n.ReplicationConfiguration.Rules=i.makeArray(n.ReplicationConfiguration.Rule),delete n.ReplicationConfiguration.Rule),t(e,n)}))},deleteBucketReplication:function(e,t){f.call(this,{Action:"name/cos:DeleteBucketReplication",method:"DELETE",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"replication"},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},putBucketWebsite:function(e,t){if(e.WebsiteConfiguration){var n=i.clone(e.WebsiteConfiguration||{}),r=n.RoutingRules||n.RoutingRule||[];r=i.isArray(r)?r:[r],delete n.RoutingRule,delete n.RoutingRules,r.length&&(n.RoutingRules={RoutingRule:r});var o=i.json2xml({WebsiteConfiguration:n}),a=e.Headers;a["Content-Type"]="application/xml",a["Content-MD5"]=i.b64(i.md5(o)),f.call(this,{Action:"name/cos:PutBucketWebsite",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:o,action:"website",headers:a},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))}else t(i.error(new Error("missing param WebsiteConfiguration")))},getBucketWebsite:function(e,t){f.call(this,{Action:"name/cos:GetBucketWebsite",method:"GET",Bucket:e.Bucket,Region:e.Region,Key:e.Key,headers:e.Headers,action:"website"},(function(e,n){if(e)if(404===e.statusCode&&"NoSuchWebsiteConfiguration"===e.error.Code){var r={WebsiteConfiguration:{},statusCode:e.statusCode};e.headers&&(r.headers=e.headers),t(null,r)}else t(e);else{var o=n.WebsiteConfiguration||{};if(o.RoutingRules){var a=i.clone(o.RoutingRules.RoutingRule||[]);a=i.makeArray(a),o.RoutingRules=a}t(null,{WebsiteConfiguration:o,statusCode:n.statusCode,headers:n.headers})}}))},deleteBucketWebsite:function(e,t){f.call(this,{Action:"name/cos:DeleteBucketWebsite",method:"DELETE",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"website"},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},putBucketReferer:function(e,t){if(e.RefererConfiguration){var n=i.clone(e.RefererConfiguration||{}),r=n.DomainList||{},o=r.Domains||r.Domain||[];(o=i.isArray(o)?o:[o]).length&&(n.DomainList={Domain:o});var a=i.json2xml({RefererConfiguration:n}),s=e.Headers;s["Content-Type"]="application/xml",s["Content-MD5"]=i.b64(i.md5(a)),f.call(this,{Action:"name/cos:PutBucketReferer",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:a,action:"referer",headers:s},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))}else t(i.error(new Error("missing param RefererConfiguration")))},getBucketReferer:function(e,t){f.call(this,{Action:"name/cos:GetBucketReferer",method:"GET",Bucket:e.Bucket,Region:e.Region,Key:e.Key,headers:e.Headers,action:"referer"},(function(e,n){if(e)if(404===e.statusCode&&"NoSuchRefererConfiguration"===e.error.Code){var r={WebsiteConfiguration:{},statusCode:e.statusCode};e.headers&&(r.headers=e.headers),t(null,r)}else t(e);else{var o=n.RefererConfiguration||{};if(o.DomainList){var a=i.makeArray(o.DomainList.Domain||[]);o.DomainList={Domains:a}}t(null,{RefererConfiguration:o,statusCode:n.statusCode,headers:n.headers})}}))},putBucketDomain:function(e,t){var n=(e.DomainConfiguration||{}).DomainRule||e.DomainRule||[];n=i.clone(n);var r=i.json2xml({DomainConfiguration:{DomainRule:n}}),o=e.Headers;o["Content-Type"]="application/xml",o["Content-MD5"]=i.b64(i.md5(r)),f.call(this,{Action:"name/cos:PutBucketDomain",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:r,action:"domain",headers:o},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},getBucketDomain:function(e,t){f.call(this,{Action:"name/cos:GetBucketDomain",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"domain"},(function(e,n){if(e)return t(e);var r=[];try{r=n.DomainConfiguration.DomainRule||[]}catch(e){}r=i.clone(i.isArray(r)?r:[r]),t(null,{DomainRule:r,statusCode:n.statusCode,headers:n.headers})}))},deleteBucketDomain:function(e,t){f.call(this,{Action:"name/cos:DeleteBucketDomain",method:"DELETE",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"domain"},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},putBucketOrigin:function(e,t){var n=(e.OriginConfiguration||{}).OriginRule||e.OriginRule||[];n=i.clone(n);var r=i.json2xml({OriginConfiguration:{OriginRule:n}}),o=e.Headers;o["Content-Type"]="application/xml",o["Content-MD5"]=i.b64(i.md5(r)),f.call(this,{Action:"name/cos:PutBucketOrigin",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:r,action:"origin",headers:o},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},getBucketOrigin:function(e,t){f.call(this,{Action:"name/cos:GetBucketOrigin",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"origin"},(function(e,n){if(e)return t(e);var r=[];try{r=n.OriginConfiguration.OriginRule||[]}catch(e){}r=i.clone(i.isArray(r)?r:[r]),t(null,{OriginRule:r,statusCode:n.statusCode,headers:n.headers})}))},deleteBucketOrigin:function(e,t){f.call(this,{Action:"name/cos:DeleteBucketOrigin",method:"DELETE",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"origin"},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},putBucketLogging:function(e,t){var n=i.json2xml({BucketLoggingStatus:e.BucketLoggingStatus||""}),r=e.Headers;r["Content-Type"]="application/xml",r["Content-MD5"]=i.b64(i.md5(n)),f.call(this,{Action:"name/cos:PutBucketLogging",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:n,action:"logging",headers:r},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},getBucketLogging:function(e,t){f.call(this,{Action:"name/cos:GetBucketLogging",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"logging"},(function(e,n){if(e)return t(e);t(null,{BucketLoggingStatus:n.BucketLoggingStatus,statusCode:n.statusCode,headers:n.headers})}))},putBucketInventory:function(e,t){return a.call(this,"PUT",e,t)},postBucketInventory:function(e,t){return a.call(this,"POST",e,t)},getBucketInventory:function(e,t){f.call(this,{Action:"name/cos:GetBucketInventory",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"inventory",qs:{id:e.Id}},(function(e,n){if(e)return t(e);var r=n.InventoryConfiguration;if(r&&r.OptionalFields&&r.OptionalFields.Field){var o=r.OptionalFields.Field;i.isArray(o)||(o=[o]),r.OptionalFields=o}if(r.Destination&&r.Destination.COSBucketDestination&&r.Destination.COSBucketDestination.Encryption){var a=r.Destination.COSBucketDestination.Encryption;Object.keys(a).indexOf("SSE-COS")>-1&&(a.SSECOS=a["SSE-COS"],delete a["SSE-COS"])}t(null,{InventoryConfiguration:r,statusCode:n.statusCode,headers:n.headers})}))},listBucketInventory:function(e,t){f.call(this,{Action:"name/cos:ListBucketInventory",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"inventory",qs:{"continuation-token":e.ContinuationToken}},(function(e,n){if(e)return t(e);var r=n.ListInventoryConfigurationResult,o=r.InventoryConfiguration||[];o=i.isArray(o)?o:[o],delete r.InventoryConfiguration,i.each(o,(function(e){if(e&&e.OptionalFields&&e.OptionalFields.Field){var t=e.OptionalFields.Field;i.isArray(t)||(t=[t]),e.OptionalFields=t}if(e.Destination&&e.Destination.COSBucketDestination&&e.Destination.COSBucketDestination.Encryption){var n=e.Destination.COSBucketDestination.Encryption;Object.keys(n).indexOf("SSE-COS")>-1&&(n.SSECOS=n["SSE-COS"],delete n["SSE-COS"])}})),r.InventoryConfigurations=o,i.extend(r,{statusCode:n.statusCode,headers:n.headers}),t(null,r)}))},deleteBucketInventory:function(e,t){f.call(this,{Action:"name/cos:DeleteBucketInventory",method:"DELETE",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"inventory",qs:{id:e.Id}},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},putBucketAccelerate:function(e,t){if(e.AccelerateConfiguration){var n={AccelerateConfiguration:e.AccelerateConfiguration||{}},r=i.json2xml(n),o={"Content-Type":"application/xml"};o["Content-MD5"]=i.b64(i.md5(r)),f.call(this,{Action:"name/cos:PutBucketAccelerate",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:r,action:"accelerate",headers:o},(function(e,n){if(e)return t(e);t(null,{statusCode:n.statusCode,headers:n.headers})}))}else t(i.error(new Error("missing param AccelerateConfiguration")))},getBucketAccelerate:function(e,t){f.call(this,{Action:"name/cos:GetBucketAccelerate",method:"GET",Bucket:e.Bucket,Region:e.Region,action:"accelerate"},(function(e,n){e||!n.AccelerateConfiguration&&(n.AccelerateConfiguration={}),t(e,n)}))},putBucketEncryption:function(e,t){var n=e.ServerSideEncryptionConfiguration||{},r=n.Rule||n.Rules||[],o=i.json2xml({ServerSideEncryptionConfiguration:{Rule:r}}),a=e.Headers;a["Content-Type"]="application/xml",a["Content-MD5"]=i.b64(i.md5(o)),f.call(this,{Action:"name/cos:PutBucketEncryption",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:o,action:"encryption",headers:a},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},getBucketEncryption:function(e,t){f.call(this,{Action:"name/cos:GetBucketEncryption",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"encryption"},(function(e,n){if(e)if(404===e.statusCode&&"NoSuchEncryptionConfiguration"===e.code){var r={EncryptionConfiguration:{Rules:[]},statusCode:e.statusCode};e.headers&&(r.headers=e.headers),t(null,r)}else t(e);else{var o=i.makeArray(n.EncryptionConfiguration&&n.EncryptionConfiguration.Rule||[]);n.EncryptionConfiguration={Rules:o},t(e,n)}}))},deleteBucketEncryption:function(e,t){f.call(this,{Action:"name/cos:DeleteBucketReplication",method:"DELETE",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"encryption"},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},getObject:function(e,t){var n=e.Query||{},r=e.QueryString||"",o=i.throttleOnProgress.call(this,0,e.onProgress),a=e.tracker;a&&a.setParams({signStartTime:(new Date).getTime()}),n["response-content-type"]=e.ResponseContentType,n["response-content-language"]=e.ResponseContentLanguage,n["response-expires"]=e.ResponseExpires,n["response-cache-control"]=e.ResponseCacheControl,n["response-content-disposition"]=e.ResponseContentDisposition,n["response-content-encoding"]=e.ResponseContentEncoding,f.call(this,{Action:"name/cos:GetObject",method:"GET",Bucket:e.Bucket,Region:e.Region,Key:e.Key,VersionId:e.VersionId,DataType:e.DataType,headers:e.Headers,qs:n,qsStr:r,rawBody:!0,onDownloadProgress:o,tracker:a},(function(n,r){if(o(null,!0),n){var a=n.statusCode;return e.Headers["If-Modified-Since"]&&a&&304===a?t(null,{NotModified:!0}):t(n)}t(null,{Body:r.body,ETag:i.attr(r.headers,"etag",""),statusCode:r.statusCode,headers:r.headers})}))},headObject:function(e,t){f.call(this,{Action:"name/cos:HeadObject",method:"HEAD",Bucket:e.Bucket,Region:e.Region,Key:e.Key,VersionId:e.VersionId,headers:e.Headers},(function(n,r){if(n){var o=n.statusCode;return e.Headers["If-Modified-Since"]&&o&&304===o?t(null,{NotModified:!0,statusCode:o}):t(n)}r.ETag=i.attr(r.headers,"etag",""),t(null,r)}))},listObjectVersions:function(e,t){var n={};n.prefix=e.Prefix||"",n.delimiter=e.Delimiter,n["key-marker"]=e.KeyMarker,n["version-id-marker"]=e.VersionIdMarker,n["max-keys"]=e.MaxKeys,n["encoding-type"]=e.EncodingType,f.call(this,{Action:"name/cos:GetBucketObjectVersions",ResourceKey:n.prefix,method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,qs:n,action:"versions"},(function(e,n){if(e)return t(e);var r=n.ListVersionsResult||{},o=r.DeleteMarker||[];o=i.isArray(o)?o:[o];var a=r.Version||[];a=i.isArray(a)?a:[a];var s=i.clone(r);delete s.DeleteMarker,delete s.Version,i.extend(s,{DeleteMarkers:o,Versions:a,statusCode:n.statusCode,headers:n.headers}),t(null,s)}))},putObject:function(e,t){var n=this,r=e.ContentLength,o=i.throttleOnProgress.call(n,r,e.onProgress),a=e.Headers;a["Cache-Control"]||a["cache-control"]||(a["Cache-Control"]=""),a["Content-Type"]||a["content-type"]||(a["Content-Type"]=e.Body&&e.Body.type||"");var s=e.UploadAddMetaMd5||n.options.UploadAddMetaMd5||n.options.UploadCheckContentMd5,c=e.tracker;s&&c&&c.setParams({md5StartTime:(new Date).getTime()}),i.getBodyMd5(s,e.Body,(function(s){s&&(c&&c.setParams({md5EndTime:(new Date).getTime()}),n.options.UploadCheckContentMd5&&(a["Content-MD5"]=i.b64(s)),(e.UploadAddMetaMd5||n.options.UploadAddMetaMd5)&&(a["x-cos-meta-md5"]=s)),void 0!==e.ContentLength&&(a["Content-Length"]=e.ContentLength),o(null,!0),f.call(n,{Action:"name/cos:PutObject",TaskId:e.TaskId,method:"PUT",Bucket:e.Bucket,Region:e.Region,Key:e.Key,headers:e.Headers,qs:e.Query,body:e.Body,onProgress:o,tracker:c},(function(a,s){if(a)return o(null,!0),t(a);o({loaded:r,total:r},!0);var c=u({ForcePathStyle:n.options.ForcePathStyle,protocol:n.options.Protocol,domain:n.options.Domain,bucket:e.Bucket,region:n.options.UseAccelerate?"accelerate":e.Region,object:e.Key});c=c.substr(c.indexOf("://")+3),s.Location=c,s.ETag=i.attr(s.headers,"etag",""),t(null,s)}))}),e.onHashProgress)},deleteObject:function(e,t){f.call(this,{Action:"name/cos:DeleteObject",method:"DELETE",Bucket:e.Bucket,Region:e.Region,Key:e.Key,headers:e.Headers,VersionId:e.VersionId,action:e.Recursive?"recursive":""},(function(e,n){if(e){var r=e.statusCode;return r&&404===r?t(null,{BucketNotFound:!0,statusCode:r}):t(e)}t(null,{statusCode:n.statusCode,headers:n.headers})}))},getObjectAcl:function(e,t){var n={};e.VersionId&&(n.versionId=e.VersionId),f.call(this,{Action:"name/cos:GetObjectACL",method:"GET",Bucket:e.Bucket,Region:e.Region,Key:e.Key,headers:e.Headers,qs:n,action:"acl"},(function(e,n){if(e)return t(e);var r=n.AccessControlPolicy||{},o=r.Owner||{},a=r.AccessControlList&&r.AccessControlList.Grant||[];a=i.isArray(a)?a:[a];var c=s(r);delete c.GrantWrite,n.headers&&n.headers["x-cos-acl"]&&(c.ACL=n.headers["x-cos-acl"]),c=i.extend(c,{Owner:o,Grants:a,statusCode:n.statusCode,headers:n.headers}),t(null,c)}))},putObjectAcl:function(e,t){var n=e.Headers,r="";if(e.AccessControlPolicy){var o=i.clone(e.AccessControlPolicy||{}),a=o.Grants||o.Grant;a=i.isArray(a)?a:[a],delete o.Grant,delete o.Grants,o.AccessControlList={Grant:a},r=i.json2xml({AccessControlPolicy:o}),n["Content-Type"]="application/xml",n["Content-MD5"]=i.b64(i.md5(r))}i.each(n,(function(e,t){0===t.indexOf("x-cos-grant-")&&(n[t]=c(n[t]))})),f.call(this,{Action:"name/cos:PutObjectACL",method:"PUT",Bucket:e.Bucket,Region:e.Region,Key:e.Key,action:"acl",headers:n,body:r},(function(e,n){if(e)return t(e);t(null,{statusCode:n.statusCode,headers:n.headers})}))},optionsObject:function(e,t){var n=e.Headers;n.Origin=e.Origin,n["Access-Control-Request-Method"]=e.AccessControlRequestMethod,n["Access-Control-Request-Headers"]=e.AccessControlRequestHeaders,f.call(this,{Action:"name/cos:OptionsObject",method:"OPTIONS",Bucket:e.Bucket,Region:e.Region,Key:e.Key,headers:n},(function(e,n){if(e)return e.statusCode&&403===e.statusCode?t(null,{OptionsForbidden:!0,statusCode:e.statusCode}):t(e);var r=n.headers||{};t(null,{AccessControlAllowOrigin:r["access-control-allow-origin"],AccessControlAllowMethods:r["access-control-allow-methods"],AccessControlAllowHeaders:r["access-control-allow-headers"],AccessControlExposeHeaders:r["access-control-expose-headers"],AccessControlMaxAge:r["access-control-max-age"],statusCode:n.statusCode,headers:n.headers})}))},putObjectCopy:function(e,t){var n=this,r=e.Headers;r["Cache-Control"]||r["cache-control"]||(r["Cache-Control"]="");var o=e.CopySource||"",a=i.getSourceParams.call(this,o);if(a){var s=a.Bucket,c=a.Region,l=decodeURIComponent(a.Key);f.call(this,{Scope:[{action:"name/cos:GetObject",bucket:s,region:c,prefix:l},{action:"name/cos:PutObject",bucket:e.Bucket,region:e.Region,prefix:e.Key}],method:"PUT",Bucket:e.Bucket,Region:e.Region,Key:e.Key,VersionId:e.VersionId,headers:e.Headers},(function(r,o){if(r)return t(r);var a=i.clone(o.CopyObjectResult||{}),s=u({ForcePathStyle:n.options.ForcePathStyle,protocol:n.options.Protocol,domain:n.options.Domain,bucket:e.Bucket,region:e.Region,object:e.Key,isLocation:!0});i.extend(a,{Location:s,statusCode:o.statusCode,headers:o.headers}),t(null,a)}))}else t(i.error(new Error("CopySource format error")))},deleteMultipleObject:function(e,t){var n=e.Objects||[],r=e.Quiet;n=i.isArray(n)?n:[n];var o=i.json2xml({Delete:{Object:n,Quiet:r||!1}}),a=e.Headers;a["Content-Type"]="application/xml",a["Content-MD5"]=i.b64(i.md5(o));var s=i.map(n,(function(t){return{action:"name/cos:DeleteObject",bucket:e.Bucket,region:e.Region,prefix:t.Key}}));f.call(this,{Scope:s,method:"POST",Bucket:e.Bucket,Region:e.Region,body:o,action:"delete",headers:a},(function(e,n){if(e)return t(e);var r=n.DeleteResult||{},o=r.Deleted||[],a=r.Error||[];o=i.isArray(o)?o:[o],a=i.isArray(a)?a:[a];var s=i.clone(r);i.extend(s,{Error:a,Deleted:o,statusCode:n.statusCode,headers:n.headers}),t(null,s)}))},restoreObject:function(e,t){var n=e.Headers;if(e.RestoreRequest){var r=e.RestoreRequest||{},o=i.json2xml({RestoreRequest:r});n["Content-Type"]="application/xml",n["Content-MD5"]=i.b64(i.md5(o)),f.call(this,{Action:"name/cos:RestoreObject",method:"POST",Bucket:e.Bucket,Region:e.Region,Key:e.Key,VersionId:e.VersionId,body:o,action:"restore",headers:n},t)}else t(i.error(new Error("missing param RestoreRequest")))},putObjectTagging:function(e,t){var n=e.Tagging||{},r=n.TagSet||n.Tags||e.Tags||[];r=i.clone(i.isArray(r)?r:[r]);var o=i.json2xml({Tagging:{TagSet:{Tag:r}}}),a=e.Headers;a["Content-Type"]="application/xml",a["Content-MD5"]=i.b64(i.md5(o)),f.call(this,{Action:"name/cos:PutObjectTagging",method:"PUT",Bucket:e.Bucket,Key:e.Key,Region:e.Region,body:o,action:"tagging",headers:a,VersionId:e.VersionId},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},getObjectTagging:function(e,t){f.call(this,{Action:"name/cos:GetObjectTagging",method:"GET",Key:e.Key,Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"tagging",VersionId:e.VersionId},(function(e,n){if(e)if(404!==e.statusCode||!e.error||"Not Found"!==e.error&&"NoSuchTagSet"!==e.error.Code)t(e);else{var r={Tags:[],statusCode:e.statusCode};e.headers&&(r.headers=e.headers),t(null,r)}else{var o=[];try{o=n.Tagging.TagSet.Tag||[]}catch(e){}o=i.clone(i.isArray(o)?o:[o]),t(null,{Tags:o,statusCode:n.statusCode,headers:n.headers})}}))},deleteObjectTagging:function(e,t){f.call(this,{Action:"name/cos:DeleteObjectTagging",method:"DELETE",Bucket:e.Bucket,Region:e.Region,Key:e.Key,headers:e.Headers,action:"tagging",VersionId:e.VersionId},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},selectObjectContent:function(e,t){if(!e.SelectType)return t(i.error(new Error("missing param SelectType")));var n=e.SelectRequest||{},r=i.json2xml({SelectRequest:n}),o=e.Headers;o["Content-Type"]="application/xml",o["Content-MD5"]=i.b64(i.md5(r)),f.call(this,{Action:"name/cos:GetObject",method:"POST",Bucket:e.Bucket,Region:e.Region,Key:e.Key,headers:e.Headers,action:"select",qs:{"select-type":e.SelectType},VersionId:e.VersionId,body:r,DataType:"arraybuffer",rawBody:!0},(function(e,n){if(e&&204===e.statusCode)return t(null,{statusCode:e.statusCode});if(e)return t(e);var r=i.parseSelectPayload(n.body);t(null,{statusCode:n.statusCode,headers:n.headers,Body:r.body,Payload:r.payload})}))},appendObject:function(e,t){var n=e.Headers;n["Cache-Control"]||n["cache-control"]||(n["Cache-Control"]=""),n["Content-Type"]||n["content-type"]||(n["Content-Type"]=e.Body&&e.Body.type||""),f.call(this,{Action:"name/cos:AppendObject",method:"POST",Bucket:e.Bucket,Region:e.Region,action:"append",Key:e.Key,body:e.Body,qs:{position:e.Position},headers:e.Headers},(function(e,n){if(e)return t(e);t(null,n)}))},uploadPartCopy:function(e,t){var n=e.CopySource||"",r=i.getSourceParams.call(this,n);if(r){var o=r.Bucket,a=r.Region,s=decodeURIComponent(r.Key);f.call(this,{Scope:[{action:"name/cos:GetObject",bucket:o,region:a,prefix:s},{action:"name/cos:PutObject",bucket:e.Bucket,region:e.Region,prefix:e.Key}],method:"PUT",Bucket:e.Bucket,Region:e.Region,Key:e.Key,VersionId:e.VersionId,qs:{partNumber:e.PartNumber,uploadId:e.UploadId},headers:e.Headers},(function(e,n){if(e)return t(e);var r=i.clone(n.CopyPartResult||{});i.extend(r,{statusCode:n.statusCode,headers:n.headers}),t(null,r)}))}else t(i.error(new Error("CopySource format error")))},multipartInit:function(e,t){var n=this,r=e.Headers,o=e.tracker;r["Cache-Control"]||r["cache-control"]||(r["Cache-Control"]=""),r["Content-Type"]||r["content-type"]||(r["Content-Type"]=e.Body&&e.Body.type||"");var a=e.Body&&(e.UploadAddMetaMd5||n.options.UploadAddMetaMd5);a&&o&&o.setParams({md5StartTime:(new Date).getTime()}),i.getBodyMd5(a,e.Body,(function(r){r&&(e.Headers["x-cos-meta-md5"]=r),a&&o&&o.setParams({md5EndTime:(new Date).getTime()}),f.call(n,{Action:"name/cos:InitiateMultipartUpload",method:"POST",Bucket:e.Bucket,Region:e.Region,Key:e.Key,action:"uploads",headers:e.Headers,qs:e.Query,tracker:o},(function(e,n){return e?(o&&o.parent&&o.parent.setParams({errorNode:"multipartInit"}),t(e)):(n=i.clone(n||{}))&&n.InitiateMultipartUploadResult?t(null,i.extend(n.InitiateMultipartUploadResult,{statusCode:n.statusCode,headers:n.headers})):void t(null,n)}))}),e.onHashProgress)},multipartUpload:function(e,t){var n=this;i.getFileSize("multipartUpload",e,(function(){var r=e.tracker,o=n.options.UploadCheckContentMd5;o&&r&&r.setParams({md5StartTime:(new Date).getTime()}),i.getBodyMd5(o,e.Body,(function(a){a&&(e.Headers["Content-MD5"]=i.b64(a)),o&&r&&r.setParams({md5EndTime:(new Date).getTime()}),r&&r.setParams({partNumber:e.PartNumber}),f.call(n,{Action:"name/cos:UploadPart",TaskId:e.TaskId,method:"PUT",Bucket:e.Bucket,Region:e.Region,Key:e.Key,qs:{partNumber:e.PartNumber,uploadId:e.UploadId},headers:e.Headers,onProgress:e.onProgress,body:e.Body||null,tracker:r},(function(e,n){if(e)return r&&r.parent&&r.parent.setParams({errorNode:"multipartUpload"}),t(e);t(null,{ETag:i.attr(n.headers,"etag",""),statusCode:n.statusCode,headers:n.headers})}))}))}))},multipartComplete:function(e,t){for(var n=this,r=e.UploadId,o=e.Parts,a=e.tracker,s=0,c=o.length;s-1?function(e){var t=e.match(/q-url-param-list.*?(?=&)/g)[0],n="q-url-param-list="+encodeURIComponent(t.replace(/q-url-param-list=/,"")).toLowerCase(),r=new RegExp(t,"g");return e.replace(r,n)}(n.Authorization):"sign="+encodeURIComponent(n.Authorization)),n.SecurityToken&&(r+="&x-cos-security-token="+n.SecurityToken),n.ClientIP&&(r+="&clientIP="+n.ClientIP),n.ClientUA&&(r+="&clientUA="+n.ClientUA),n.Token&&(r+="&token="+n.Token),a&&(r+="&"+a),setTimeout((function(){t(null,{Url:r})}))}}));return p?(s+="?"+p.Authorization+(p.SecurityToken?"&x-cos-security-token="+p.SecurityToken:""),a&&(s+="&"+a)):a&&(s+="?"+a),s},getAuth:function(e){return i.getAuth({SecretId:e.SecretId||this.options.SecretId||"",SecretKey:e.SecretKey||this.options.SecretKey||"",Bucket:e.Bucket,Region:e.Region,Method:e.Method,Key:e.Key,Query:e.Query,Headers:e.Headers,Expires:e.Expires,UseRawKey:this.options.UseRawKey,SystemClockOffset:this.options.SystemClockOffset})}};e.exports.init=function(e,t){t.transferToTaskMethod(m,"putObject"),i.each(m,(function(t,n){e.prototype[n]=i.apiWrapper(n,t),function(e,t,n){i.each(["Cors","Acl"],(function(r){if(e.slice(-r.length)===r){var o=e.slice(0,-r.length)+r.toUpperCase(),a=i.apiWrapper(e,t);n[o]=function(){a.apply(this,arguments)}}}))}(n,t,e.prototype)}))}},function(e,t,n){var r=n(0),o=function(e){switch(r(e)){case"string":return e;case"boolean":return e?"true":"false";case"number":return isFinite(e)?e:"";default:return""}},i=function(e,t,n){var r={};return t.getAllResponseHeaders().trim().split("\n").forEach((function(e){if(e){var t=e.indexOf(":"),n=e.substr(0,t).trim().toLowerCase(),o=e.substr(t+1).trim();r[n]=o}})),{error:e,statusCode:t.status,statusMessage:t.statusText,headers:r,body:n}},a=function(e,t){return t||"text"!==t?e.response:e.responseText};e.exports=function(e,t){var n,s,c,u,l=(e.method||"GET").toUpperCase(),d=e.url;if(e.qs){var p=(n=e.qs,s=s||"&",c=c||"=",null===n&&(n=void 0),"object"===r(n)?Object.keys(n).map((function(e){var t=encodeURIComponent(o(e))+c;return Array.isArray(n[e])?n[e].map((function(e){return t+encodeURIComponent(o(e))})).join(s):t+encodeURIComponent(o(n[e]))})).filter(Boolean).join(s):u?encodeURIComponent(o(u))+c+encodeURIComponent(o(n)):"");p&&(d+=(-1===d.indexOf("?")?"?":"&")+p)}var f=new XMLHttpRequest;if(f.open(l,d,!0),f.responseType=e.dataType||"text",e.xhrFields)for(var h in e.xhrFields)f[h]=e.xhrFields[h];var m=e.headers;if(m)for(var g in m)m.hasOwnProperty(g)&&"content-length"!==g.toLowerCase()&&"user-agent"!==g.toLowerCase()&&"origin"!==g.toLowerCase()&&"host"!==g.toLowerCase()&&f.setRequestHeader(g,m[g]);return e.onProgress&&f.upload&&(f.upload.onprogress=e.onProgress),e.onDownloadProgress&&(f.onprogress=e.onDownloadProgress),e.timeout&&(f.timeout=e.timeout),f.ontimeout=function(e){var n=new Error("timeout");t(i(n,f))},f.onload=function(){t(i(null,f,a(f,e.dataType)))},f.onerror=function(n){var r=a(f,e.dataType);if(r)t(i(null,f,r));else{var o=f.statusText;o||0!==f.status||(o=new Error("CORS blocked or network error")),t(i(o,f,r))}},f.send(e.body||""),f}},function(e,t,n){var r=n(0),o=n(9),i=n(29),a=n(8).EventProxy,s=n(1),c=n(6);function u(e,t){var n=e.TaskId,r=e.Bucket,c=e.Region,u=e.Key,p=e.StorageClass,f=this,h={},m=e.FileSize,g=e.SliceSize,y=Math.ceil(m/g),v=0,C=s.throttleOnProgress.call(f,m,e.onHashProgress),k=function(t,n){var r=t.length;if(0===r)return n(null,!0);if(r>y)return n(null,!1);if(r>1&&Math.max(t[0].Size,t[1].Size)!==g)return n(null,!1);!function o(i){if(i=a.length)S.emit("has_and_check_upload_id",t);else{var p=a[l];if(!s.isInArray(t,p))return o.removeUploadId.call(f,p),void i(l+1);o.using[p]?i(l+1):d.call(f,{Bucket:r,Region:c,Key:u,UploadId:p,tracker:e.tracker},(function(e,t){f._isRunningTask(n)&&(e?(o.removeUploadId.call(f,p),i(l+1)):S.emit("upload_id_available",{UploadId:p,PartList:t.PartList}))}))}}(0)}else S.emit("has_and_check_upload_id",t)})),S.on("get_remote_upload_id_list",(function(){l.call(f,{Bucket:r,Region:c,Key:u,tracker:e.tracker},(function(t,i){if(f._isRunningTask(n)){if(t)return S.emit("error",t);var a=s.filter(i.UploadList,(function(e){return e.Key===u&&(!p||e.StorageClass.toUpperCase()===p.toUpperCase())})).reverse().map((function(e){return e.UploadId||e.UploadID}));if(a.length)S.emit("seek_local_avail_upload_id",a);else{var c,l=o.getFileId(e.Body,e.ChunkSize,r,u);l&&(c=o.getUploadIdList.call(f,l))&&s.each(c,(function(e){o.removeUploadId.call(f,e)})),S.emit("no_available_upload_id")}}}))})),S.emit("get_remote_upload_id_list")}function l(e,t){var n=this,r=[],o={Bucket:e.Bucket,Region:e.Region,Prefix:e.Key,calledBySdk:e.calledBySdk||"sliceUploadFile",tracker:e.tracker};!function e(){n.multipartList(o,(function(n,i){if(n)return t(n);r.push.apply(r,i.Upload||[]),"true"===i.IsTruncated?(o.KeyMarker=i.NextKeyMarker,o.UploadIdMarker=i.NextUploadIdMarker,e()):t(null,{UploadList:r})}))}()}function d(e,t){var n=this,r=[],o={Bucket:e.Bucket,Region:e.Region,Key:e.Key,UploadId:e.UploadId,calledBySdk:"sliceUploadFile",tracker:e.tracker};!function e(){n.multipartListPart(o,(function(n,i){if(n)return t(n);r.push.apply(r,i.Part||[]),"true"===i.IsTruncated?(o.PartNumberMarker=i.NextPartNumberMarker,e()):t(null,{PartList:r})}))}()}function p(e,t){var n=this,r=e.TaskId,o=e.Bucket,a=e.Region,c=e.Key,u=e.UploadData,l=e.FileSize,d=e.SliceSize,p=Math.min(e.AsyncLimit||n.options.ChunkParallelLimit||1,256),h=e.Body,m=Math.ceil(l/d),g=0,y=e.ServerSideEncryption,v=e.Headers,C=s.filter(u.PartList,(function(e){return e.Uploaded&&(g+=e.PartNumber>=m&&l%d||d),!e.Uploaded})),k=e.onProgress;i.eachLimit(C,p,(function(t,i){if(n._isRunningTask(r)){var s=t.PartNumber,p=Math.min(l,t.PartNumber*d)-(t.PartNumber-1)*d,m=0;f.call(n,{TaskId:r,Bucket:o,Region:a,Key:c,SliceSize:d,FileSize:l,PartNumber:s,ServerSideEncryption:y,Body:h,UploadData:u,Headers:v,onProgress:function(e){g+=e.loaded-m,m=e.loaded,k({loaded:g,total:l})},tracker:e.tracker},(function(e,o){n._isRunningTask(r)&&(e||o.ETag||(e='get ETag error, please add "ETag" to CORS ExposeHeader setting.( 获取ETag失败,请在CORS ExposeHeader设置中添加ETag,请参考文档:https://cloud.tencent.com/document/product/436/13318 )'),e?g-=m:(g+=p-m,t.ETag=o.ETag),k({loaded:g,total:l}),i(e||null,o))}))}}),(function(e){if(n._isRunningTask(r))return e?t(e):void t(null,{UploadId:u.UploadId,SliceList:u.PartList})}))}function f(e,t){var n=this,r=e.TaskId,o=e.Bucket,a=e.Region,c=e.Key,u=e.FileSize,l=e.Body,d=1*e.PartNumber,p=e.SliceSize,f=e.ServerSideEncryption,h=e.UploadData,m=e.Headers||{},g=n.options.ChunkRetryTimes+1,y=p*(d-1),v=p,C=y+p;C>u&&(v=(C=u)-y);var k=["x-cos-traffic-limit","x-cos-mime-limit"],S={};s.each(m,(function(e,t){k.indexOf(t)>-1&&(S[t]=e)}));var b=h.PartList[d-1];i.retry(g,(function(t){n._isRunningTask(r)&&s.fileSlice(l,y,C,!0,(function(i){n.multipartUpload({TaskId:r,Bucket:o,Region:a,Key:c,ContentLength:v,PartNumber:d,UploadId:h.UploadId,ServerSideEncryption:f,Body:i,Headers:S,onProgress:e.onProgress,calledBySdk:"sliceUploadFile",tracker:e.tracker},(function(e,o){if(n._isRunningTask(r))return e?t(e):(b.Uploaded=!0,t(null,o))}))}))}),(function(e,o){if(n._isRunningTask(r))return t(e,o)}))}function h(e,t){var n=e.Bucket,r=e.Region,o=e.Key,a=e.UploadId,s=e.SliceList,c=this,u=this.options.ChunkRetryTimes+1,l=e.Headers,d=s.map((function(e){return{PartNumber:e.PartNumber,ETag:e.ETag}}));i.retry(u,(function(t){c.multipartComplete({Bucket:n,Region:r,Key:o,UploadId:a,Parts:d,Headers:l,calledBySdk:"sliceUploadFile",tracker:e.tracker},t)}),(function(e,n){t(e,n)}))}function m(e,t){var n=e.Bucket,r=e.Region,o=e.Key,a=e.AbortArray,s=e.AsyncLimit||1,c=this,u=0,l=new Array(a.length);i.eachLimit(a,s,(function(t,i){var a=u;if(o&&o!==t.Key)return l[a]={error:{KeyNotMatch:!0}},void i(null);var s=t.UploadId||t.UploadID;c.multipartAbort({Bucket:n,Region:r,Key:t.Key,Headers:e.Headers,UploadId:s},(function(e){var o={Bucket:n,Region:r,Key:t.Key,UploadId:s};l[a]={error:e,task:o},i(null)})),u++}),(function(e){if(e)return t(e);for(var n=[],r=[],o=0,i=l.length;oo?"sliceUploadFile":"putObject",h=e.onFileFinish;i.push({api:f,params:e,callback:function(n,r){e.tracker&&e.tracker.formatResult(n,r),h&&h(n,r,l),t&&t(n,r)}}),n._addTasks(i)},uploadFiles:function(e,t){var n=this,o=void 0===e.SliceSize?n.options.SliceSize:e.SliceSize,i=0,a=0,u=s.throttleOnProgress.call(n,a,e.onProgress),l=e.files.length,d=e.onFileFinish,p=Array(l),f=function(e,n,r){u(null,!0),d&&d(e,n,r),p[r.Index]={options:r,error:e,data:n},--l<=0&&t&&t(null,{files:p})},h=[];s.each(e.files,(function(e,t){!function(){var l=e.Body,d=l.size||l.length||0,p={Index:t,TaskId:""};if(i+=d,n.options.EnableTracker){var m=n.options.UseAccelerate||"string"==typeof n.options.Domain&&n.options.Domain.includes("accelerate.");e.tracker=new c({bucket:e.Bucket,region:e.Region,apiName:"uploadFiles",fileKey:e.Key,fileSize:d,accelerate:m,deepTracker:n.options.DeepTracker,customId:n.options.CustomId,delay:n.options.TrackerDelay})}s.each(e,(function(e,t){"object"!==r(e)&&"function"!=typeof e&&(p[t]=e)}));var g=e.onTaskReady;e.onTaskReady=function(e){p.TaskId=e,g&&g(e)};var y=0,v=e.onProgress;e.onProgress=function(e){a=a-y+e.loaded,y=e.loaded,v&&v(e),u({loaded:a,total:i})};var C=d>o?"sliceUploadFile":"putObject",k=e.onFileFinish;h.push({api:C,params:e,callback:function(t,n){e.tracker&&e.tracker.formatResult(t,n),k&&k(t,n),f&&f(t,n,p)}})}()})),n._addTasks(h)},sliceCopyFile:function(e,t){var n=new a,r=this,c=e.Bucket,u=e.Region,l=e.Key,p=e.CopySource,f=s.getSourceParams.call(this,p);if(f){var h=f.Bucket,m=f.Region,y=decodeURIComponent(f.Key),v=void 0===e.CopySliceSize?r.options.CopySliceSize:e.CopySliceSize;v=Math.max(0,v);var C,k,S=e.CopyChunkSize||this.options.CopyChunkSize,b=this.options.CopyChunkParallelLimit,T=this.options.ChunkRetryTimes+1,R=0,E=0,w={},x={},A={};n.on("copy_slice_complete",(function(n){var a={};s.each(e.Headers,(function(e,t){0===t.toLowerCase().indexOf("x-cos-meta-")&&(a[t]=e)}));var d=s.map(n.PartList,(function(e){return{PartNumber:e.PartNumber,ETag:e.ETag}}));i.retry(T,(function(e){r.multipartComplete({Bucket:c,Region:u,Key:l,UploadId:n.UploadId,Parts:d,calledBySdk:"sliceCopyFile"},e)}),(function(e,r){if(o.removeUsing(n.UploadId),e)return k(null,!0),t(e);o.removeUploadId(n.UploadId),k({loaded:C,total:C},!0),t(null,r)}))})),n.on("get_copy_data_finish",(function(e){var a=o.getCopyFileId(p,w,S,c,l);a&&o.saveUploadId(a,e.UploadId,r.options.UploadIdCacheLimit),o.setUsing(e.UploadId);var d=s.filter(e.PartList,(function(e){return e.Uploaded&&(E+=e.PartNumber>=R&&C%S||S),!e.Uploaded}));i.eachLimit(d,b,(function(t,n){var o=t.PartNumber,a=t.CopySourceRange,s=t.end-t.start;i.retry(T,(function(t){g.call(r,{Bucket:c,Region:u,Key:l,CopySource:p,UploadId:e.UploadId,PartNumber:o,CopySourceRange:a},t)}),(function(e,r){if(e)return n(e);k({loaded:E+=s,total:C}),t.ETag=r.ETag,n(e||null,r)}))}),(function(r){if(r)return o.removeUsing(e.UploadId),k(null,!0),t(r);n.emit("copy_slice_complete",e)}))})),n.on("get_chunk_size_finish",(function(){var i=function(){r.multipartInit({Bucket:c,Region:u,Key:l,Headers:A},(function(r,o){if(r)return t(r);e.UploadId=o.UploadId,n.emit("get_copy_data_finish",{UploadId:e.UploadId,PartList:e.PartList})}))},a=o.getCopyFileId(p,w,S,c,l),f=o.getUploadIdList(a);if(!a||!f)return i();!function t(a){if(a>=f.length)return i();var p=f[a];if(o.using[p])return t(a+1);d.call(r,{Bucket:c,Region:u,Key:l,UploadId:p},(function(r,i){if(r)o.removeUploadId(p),t(a+1);else{if(o.using[p])return t(a+1);var c={},u=0;s.each(i.PartList,(function(e){var t=parseInt(e.Size),n=u+t-1;c[e.PartNumber+"|"+u+"|"+n]=e.ETag,u+=t})),s.each(e.PartList,(function(e){var t=c[e.PartNumber+"|"+e.start+"|"+e.end];t&&(e.ETag=t,e.Uploaded=!0)})),n.emit("get_copy_data_finish",{UploadId:p,PartList:e.PartList})}}))}(0)})),n.on("get_file_size_finish",(function(){if(function(){for(var t=[1,2,4,8,16,32,64,128,256,512,1024,2048,4096,5120],n=1048576,o=0;on.length&&(x[t]=e)})),n.emit("get_file_size_finish")}else t(s.error(new Error('get Content-Length error, please add "Content-Length" to CORS ExposeHeader setting.( 获取Content-Length失败,请在CORS ExposeHeader设置中添加Content-Length,请参考文档:https://cloud.tencent.com/document/product/436/13318 )')))}))}else t(s.error(new Error("CopySource format error")))}};e.exports.init=function(e,t){t.transferToTaskMethod(y,"sliceUploadFile"),s.each(y,(function(t,n){e.prototype[n]=s.apiWrapper(n,t)}))}},function(e,t){var n={eachLimit:function(e,t,n,r){if(r=r||function(){},!e.length||t<=0)return r();var o=0,i=0,a=0;!function s(){if(o>=e.length)return r();for(;a=e.length?r():s())}))}()},retry:function(e,t,n){e<1?n():function r(o){t((function(t,i){t&&o; + /** 创建/编辑 Bucket 一次性清单任务 @see https://cloud.tencent.com/document/product/436/83382 */ + postBucketInventory( + params: COS.PostBucketInventoryParams, + callback: (err: COS.CosError, data: COS.PostBucketInventoryResult) => void, + ): void; + postBucketInventory(params: COS.PostBucketInventoryParams): Promise; + /** 获取 Bucket 的清单任务信息 @see https://cloud.tencent.com/document/product/436/33705 */ getBucketInventory( params: COS.GetBucketInventoryParams, diff --git a/jest.config.js b/jest.config.js index 2b616ec..fc5fb25 100644 --- a/jest.config.js +++ b/jest.config.js @@ -1,7 +1,7 @@ module.exports = { collectCoverage: true, // 是否显示覆盖率报告 // 告诉 jest 哪些文件需要经过单元测试测试 - collectCoverageFrom: ['**/src/*.js', '!**/src/tracker.js', '!**/src/session.js', '!**/src/async.js', '!**/src/util.js'], + collectCoverageFrom: ['**/src/*.js'], coverageThreshold: { global: { statements: 90, // 保证每个语句都执行了 diff --git a/package.json b/package.json index 7180189..d7526a6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cos-js-sdk-v5", - "version": "1.4.17", + "version": "1.4.18", "description": "JavaScript SDK for [腾讯云对象存储](https://cloud.tencent.com/product/cos)", "main": "dist/cos-js-sdk-v5.js", "types": "index.d.ts", @@ -10,7 +10,7 @@ "dev": "cross-env NODE_ENV=development webpack -w --mode=development", "build": "cross-env NODE_ENV=production webpack --mode=production", "cos-auth.min.js": "uglifyjs ./demo/common/cos-auth.js -o ./demo/common/cos-auth.min.js -c -m", - "test": "jest --coverage" + "test": "jest --runInBand --coverage" }, "repository": { "type": "git", @@ -36,7 +36,6 @@ "express": "^4.16.4", "jest": "^29.3.1", "jest-environment-jsdom": "^29.3.1", - "jest-localstorage-mock": "^2.4.26", "prettier": "2.8.8", "qcloud-cos-sts": "^3.0.2", "request": "^2.87.0", diff --git a/src/base.js b/src/base.js index ca9a7c5..e1ea551 100644 --- a/src/base.js +++ b/src/base.js @@ -1577,7 +1577,7 @@ function getBucketLogging(params, callback) { * @return {Object} err 请求失败的错误,如果请求成功,则为空。https://cloud.tencent.com/document/product/436/7730 * @return {Object} data 返回数据 */ -function putBucketInventory(params, callback) { +function submitBucketInventory(method, params, callback) { var InventoryConfiguration = util.clone(params['InventoryConfiguration']); if (InventoryConfiguration.OptionalFields) { @@ -1607,11 +1607,13 @@ function putBucketInventory(params, callback) { headers['Content-Type'] = 'application/xml'; headers['Content-MD5'] = util.b64(util.md5(xml)); + var action = method === 'PUT' ? 'name/cos:PutBucketInventory' : 'name/cos:PostBucketInventory'; + submitRequest.call( this, { - Action: 'name/cos:PutBucketInventory', - method: 'PUT', + Action: action, + method, Bucket: params.Bucket, Region: params.Region, body: xml, @@ -1635,6 +1637,20 @@ function putBucketInventory(params, callback) { ); } +/** + * 创建一个清单任务 + */ +function putBucketInventory(params, callback) { + return submitBucketInventory.call(this, 'PUT', params, callback); +} + +/** + * 创建一个一次性清单任务 会立即执行 + */ +function postBucketInventory(params, callback) { + return submitBucketInventory.call(this, 'POST', params, callback); +} + /** * 获取 Bucket 的清单任务信息 * @param {Object} params 参数对象,必须 @@ -4134,6 +4150,7 @@ var API_MAP = { putBucketLogging: putBucketLogging, // BucketLogging getBucketLogging: getBucketLogging, putBucketInventory: putBucketInventory, // BucketInventory + postBucketInventory: postBucketInventory, getBucketInventory: getBucketInventory, listBucketInventory: listBucketInventory, deleteBucketInventory: deleteBucketInventory, diff --git a/test/test.js b/test/test.js index 3234725..5ced5b0 100644 --- a/test/test.js +++ b/test/test.js @@ -2,7 +2,6 @@ * @jest-environment jsdom */ import { describe, expect, jest, test } from '@jest/globals'; -import 'jest-localstorage-mock'; import COS from '../index.js'; // config 替换成自己的桶信息 @@ -16,6 +15,30 @@ var config = { Uin: process.env.Uin, }; +// mock localStroage +var localStorageMock = (function () { + var store = {}; + return { + getItem: function (key) { + return store[key]; + }, + setItem: function (key, value) { + store[key] = value.toString(); + }, + clear: function () { + store = {}; + }, + removeItem: function (key) { + delete store[key]; + }, + }; +})(); +Object.defineProperty(window, 'localStorage', { + writable: true, + configurable: true, + value: localStorageMock, +}); + function checkEnvParams() { if (!process.env.Bucket) { console.warn('环境变量里未找到Bucket,请检查'); @@ -349,7 +372,7 @@ group('init cos', function () { Body: file, }, function (err, data) { - assert.ok(!err); + assert.ok(err); done(); }, ); @@ -358,23 +381,24 @@ group('init cos', function () { group('task 队列', function () { test('putObject() 批量上传', function (done) { + var cos = new COS({ + SecretId: config.SecretId, + SecretKey: config.SecretKey, + UploadQueueSize: 100, + }); var upload = function () { var filename = '5.txt'; - var taskId; cos.putObject( { Bucket: config.Bucket, Region: config.Region, Key: filename, Body: '12345', - TaskReady: function (id) { - taskId = id; - }, }, function (err, data) {}, ); }; - for (var i = 0; i < 12000; i++) { + for (var i = 0; i < 120; i++) { upload(); } var taskList = cos.getTaskList(); @@ -1609,7 +1633,7 @@ group('putObjectCopy() 1', function () { }, ); }); - test('捕获 object 异常', function (done, assert) { + test('捕获 object 异常', function (done) { var errFileName = '12345.txt' + Date.now().toString(36); cos.putObjectCopy( { @@ -4329,6 +4353,21 @@ group('BucketInventory', function () { ); }); + test('postBucketInventory() bucket not exist', function (done) { + cos.postBucketInventory( + { + Bucket: Date.now().toString(36) + config.Bucket, + Region: config.Region, + Id: InventoryConfiguration.Id, + InventoryConfiguration: InventoryConfiguration, + }, + function (err, data) { + assert.ok(err); + done(); + }, + ); + }); + test('getBucketInventory() bucket not exist', function (done) { cos.getBucketInventory( { @@ -4383,6 +4422,25 @@ group('BucketInventory', function () { ); }); + test('postBucketInventory()', function (done) { + var config = JSON.parse(JSON.stringify(InventoryConfiguration)); + config.Id = config.Id + Date.now().toString(36); + delete config.IsEnabled; + delete config.Schedule; + cos.postBucketInventory( + { + Bucket: config.Bucket, + Region: config.Region, + Id: config.Id, + InventoryConfiguration: config, + }, + function (err, data) { + assert.ok(!err); + done(); + }, + ); + }); + test('listBucketInventory()', function (done) { cos.listBucketInventory( { From 5d7142b38c13602391a7d2a9f70c43ecf4427ffd Mon Sep 17 00:00:00 2001 From: chrisftian Date: Wed, 31 May 2023 15:29:02 +0800 Subject: [PATCH 02/11] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=8D=95?= =?UTF-8?q?=E6=B5=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/test.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/test/test.js b/test/test.js index 5ced5b0..8d810d5 100644 --- a/test/test.js +++ b/test/test.js @@ -4423,16 +4423,16 @@ group('BucketInventory', function () { }); test('postBucketInventory()', function (done) { - var config = JSON.parse(JSON.stringify(InventoryConfiguration)); - config.Id = config.Id + Date.now().toString(36); - delete config.IsEnabled; - delete config.Schedule; + var inventoryConfig = JSON.parse(JSON.stringify(InventoryConfiguration)); + inventoryConfig.Id = inventoryConfig.Id + Date.now().toString(36); + delete inventoryConfig.IsEnabled; + delete inventoryConfig.Schedule; cos.postBucketInventory( { Bucket: config.Bucket, Region: config.Region, - Id: config.Id, - InventoryConfiguration: config, + Id: inventoryConfig.Id, + InventoryConfiguration: inventoryConfig, }, function (err, data) { assert.ok(!err); From acd848fe625317c63241526dff2e0378c3fdbbd3 Mon Sep 17 00:00:00 2001 From: chrisftian Date: Wed, 12 Jul 2023 11:04:09 +0800 Subject: [PATCH 03/11] dev/demo (merge request !15) Squash merge branch 'dev/demo' into 'master' Merge branch 'master' into dev/demo --- demo/ciDemo.js | 194 +-- demo/demo.js | 3277 +---------------------------------------------- demo/index.html | 197 +++ index.d.ts | 6 +- 4 files changed, 273 insertions(+), 3401 deletions(-) diff --git a/demo/ciDemo.js b/demo/ciDemo.js index af11576..fac65e5 100644 --- a/demo/ciDemo.js +++ b/demo/ciDemo.js @@ -1,194 +1,6 @@ -// @ts-check -// config 替换成自己的存储桶和账号信息 -var config = { - Bucket: 'test-1250000000', - Region: 'ap-guangzhou', - Uin: '10001', -}; - -var util = { - createFile: function (options) { - var buffer = new ArrayBuffer(options.size || 0); - var arr = new Uint8Array(buffer); - [].forEach.call(arr, function (char, i) { - arr[i] = 0; - }); - var opt = {}; - options.type && (opt.type = options.type); - var blob = new Blob([buffer], options); - return blob; - }, - selectLocalFile: function (onChange) { - var id = 'file_selector'; - var input = document.createElement('input'); - input.style = 'width:0;height:0;border:0;margin:0;padding:0;'; - input.type = 'file'; - input.id = id; - input.onchange = function (e) { - var files = this.files; - if (!files.length) return; - onChange && onChange(files); - document.body.removeChild(input); - }; - document.body.appendChild(input); - input.click(); - }, -}; - -// 对更多字符编码的 url encode 格式 -var camSafeUrlEncode = function (str) { - return encodeURIComponent(str) - .replace(/!/g, '%21') - .replace(/'/g, '%27') - .replace(/\(/g, '%28') - .replace(/\)/g, '%29') - .replace(/\*/g, '%2A'); -}; - -var getAuthorization = function (options, callback) { - // 格式一、(推荐)后端通过获取临时密钥给到前端,前端计算签名 - // 服务端 JS 和 PHP 例子:https://github.com/tencentyun/cos-js-sdk-v5/blob/master/server/ - // 服务端其他语言参考 COS STS SDK :https://github.com/tencentyun/qcloud-cos-sts-sdk - var url = '/sts'; // 如果是 npm run sts.js 起的 nodejs server,使用这个 - var xhr = new XMLHttpRequest(); - xhr.open('POST', url, true); - xhr.setRequestHeader('Content-Type', 'application/json'); - xhr.onload = function (e) { - try { - var data = JSON.parse(e.target.responseText); - var credentials = data.credentials; - } catch (e) {} - if (!data || !credentials) { - return logger.error('credentials invalid:\n' + JSON.stringify(data, null, 2)); - } - callback({ - TmpSecretId: credentials.tmpSecretId, - TmpSecretKey: credentials.tmpSecretKey, - SecurityToken: credentials.sessionToken, - StartTime: data.startTime, // 时间戳,单位秒,如:1580000000,建议返回服务器时间作为签名的开始时间,避免用户浏览器本地时间偏差过大导致签名错误 - ExpiredTime: data.expiredTime, // 时间戳,单位秒,如:1580000000 - ScopeLimit: true, // 细粒度控制权限需要设为 true,会限制密钥只在相同请求时重复使用 - }); - }; - xhr.send(JSON.stringify(options.Scope)); - - // // 格式二、(推荐)【细粒度控制权限】后端通过获取临时密钥给到前端,前端只有相同请求才重复使用临时密钥,后端可以通过 Scope 细粒度控制权限 - // // 服务端例子:https://github.com/tencentyun/qcloud-cos-sts-sdk/edit/master/scope.md - // // var url = '../server/sts.php'; // 如果起的是 php server 用这个 - // var url = '/sts-scope'; // 如果是 npm run sts.js 起的 nodejs server,使用这个 - // var xhr = new XMLHttpRequest(); - // xhr.open('POST', url, true); - // xhr.setRequestHeader('Content-Type', 'application/json'); - // xhr.onload = function (e) { - // try { - // var data = JSON.parse(e.target.responseText); - // var credentials = data.credentials; - // } catch (e) { - // } - // if (!data || !credentials) { - // return logger.error('credentials invalid:\n' + JSON.stringify(data, null, 2)) - // }; - // callback({ - // TmpSecretId: credentials.tmpSecretId, - // TmpSecretKey: credentials.tmpSecretKey, - // SecurityToken: credentials.sessionToken, - // StartTime: data.startTime, // 时间戳,单位秒,如:1580000000,建议返回服务器时间作为签名的开始时间,避免用户浏览器本地时间偏差过大导致签名错误 - // ExpiredTime: data.expiredTime, // 时间戳,单位秒,如:1580000000 - // ScopeLimit: true, // 细粒度控制权限需要设为 true,会限制密钥只在相同请求时重复使用 - // }); - // }; - // xhr.send(JSON.stringify(options.Scope)); - - // // 格式三、(不推荐,分片上传权限不好控制)前端每次请求前都需要通过 getAuthorization 获取签名,后端使用固定密钥或临时密钥计算签名返回给前端 - // // 服务端获取签名,请参考对应语言的 COS SDK:https://cloud.tencent.com/document/product/436/6474 - // // 注意:这种有安全风险,后端需要通过 method、pathname 严格控制好权限,比如不允许 put / 等 - // var method = (options.Method || 'get').toLowerCase(); - // var query = options.Query || {}; - // var headers = options.Headers || {}; - // var pathname = options.Pathname || '/'; - // // var url = 'http://127.0.0.1:3000/auth'; - // var url = '../server/auth.php'; - // var xhr = new XMLHttpRequest(); - // var data = { - // method: method, - // pathname: pathname, - // query: query, - // headers: headers, - // }; - // xhr.open('POST', url, true); - // xhr.setRequestHeader('content-type', 'application/json'); - // xhr.onload = function (e) { - // try { - // var data = JSON.parse(e.target.responseText); - // } catch (e) { - // } - // if (!data || !data.authorization) return console.error('authorization invalid'); - // callback({ - // Authorization: data.authorization, - // // SecurityToken: data.sessionToken, // 如果使用临时密钥,需要把 sessionToken 传给 SecurityToken - // }); - // }; - // xhr.send(JSON.stringify(data)); - - // // 格式四、(不推荐,适用于前端调试,避免泄露密钥)前端使用固定密钥计算签名 - // var authorization = COS.getAuthorization({ - // SecretId: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', // 可传固定密钥或者临时密钥 - // SecretKey: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', // 可传固定密钥或者临时密钥 - // Method: options.Method, - // Pathname: options.Pathname, - // Query: options.Query, - // Headers: options.Headers, - // Expires: 900, - // }); - // callback({ - // Authorization: authorization, - // // SecurityToken: credentials.sessionToken, // 如果使用临时密钥,需要传 SecurityToken - // }); -}; - -var cos = new COS({ - getAuthorization: getAuthorization, - UploadCheckContentMd5: true, -}); var TaskId; -var pre = document.querySelector('.result'); -var showLogText = function (text, color) { - if (typeof text === 'object') { - try { - text = JSON.stringify(text); - } catch (e) {} - } - var div = document.createElement('div'); - div.innerText = text; - color && (div.style.color = color); - pre.appendChild(div); - pre.style.display = 'block'; - pre.scrollTop = pre.scrollHeight; -}; - -var logger = { - log: function (text) { - console.log.apply(console, arguments); - var args = [].map.call(arguments, function (v) { - return typeof v === 'object' ? JSON.stringify(v, null, 2) : v; - }); - - var logStr = args.join(' '); - - if (logStr.length > 1000000) { - logStr = logStr.slice(0, 1000000) + '...content is too long, the first 1000000 characters are intercepted'; - } - - showLogText(logStr); - }, - error: function (text) { - console.error(text); - showLogText(text, 'red'); - }, -}; - function getObjectUrl() { var url = cos.getObjectUrl( { @@ -882,6 +694,7 @@ function describeDocProcessQueues() { // 更新文档预览队列 function updateDocProcessQueue() { + // 任务所在的队列 ID,请使用查询队列(https://cloud.tencent.com/document/product/460/46946)获取或前往万象控制台(https://cloud.tencent.com/document/product/460/46487)在存储桶中查询 var queueId = 'pa2e2c3d3fae042de909cafc16f1d801b'; // 替换成自己的队列id var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/docqueue/' + queueId; var url = 'https://' + host; @@ -929,7 +742,6 @@ function createDocProcessJobs() { Object: '1/文档转码_${Number}.jpg', // 转码后存到cos的路径 }, }, - QueueId: 'pa2e2c3d3fae042de909cafc16f1d801b', // 替换成自己的queueId }, }); cos.request( @@ -973,7 +785,6 @@ function describeDocProcessJobs() { Key: 'doc_jobs', Url: url, Query: { - queueId: 'pa2e2c3d3fae042de909cafc16f1d801b', // 替换成自己的queueId tag: 'DocProcess', }, }, @@ -1539,6 +1350,7 @@ function getAsrQueue() { // 更新语音识别队列 function putAsrQueue() { + // 任务所在的队列 ID,请使用查询队列(https://cloud.tencent.com/document/product/460/46946)获取或前往万象控制台(https://cloud.tencent.com/document/product/460/46487)在存储桶中查询 var queueId = 'pcc77499e85c311edb9865254008618d9'; var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/asrqueue/' + queueId; var url = 'https://' + host; @@ -1664,6 +1476,7 @@ function describeFileProcessQueues() { // 更新文件处理队列 function updateFileProcessQueue() { + // 任务所在的队列 ID,请使用查询队列(https://cloud.tencent.com/document/product/460/46946)获取或前往万象控制台(https://cloud.tencent.com/document/product/460/46487)在存储桶中查询 var queueId = 'p6160ada105a7408e95aac015f4bf8xxx'; var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/file_queue/' + queueId; var url = 'https://' + host; @@ -1983,6 +1796,7 @@ function describePicProcessQueues() { // 更新图片处理队列 function updatePicProcessQueue() { + // 任务所在的队列 ID,请使用查询队列(https://cloud.tencent.com/document/product/460/46946)获取或前往万象控制台(https://cloud.tencent.com/document/product/460/46487)在存储桶中查询 var queueId = 'p882d181160d84feca27d9376e17c4xxx'; var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/picqueue/' + queueId; var url = 'https://' + host; diff --git a/demo/demo.js b/demo/demo.js index 5c2a07a..6265fde 100644 --- a/demo/demo.js +++ b/demo/demo.js @@ -1,194 +1,5 @@ -// @ts-check -// config 替换成自己的存储桶和账号信息 -var config = { - Bucket: 'test-1250000000', - Region: 'ap-guangzhou', - Uin: '10001', -}; - -var util = { - createFile: function (options) { - var buffer = new ArrayBuffer(options.size || 0); - var arr = new Uint8Array(buffer); - [].forEach.call(arr, function (char, i) { - arr[i] = 0; - }); - var opt = {}; - options.type && (opt.type = options.type); - var blob = new Blob([buffer], options); - return blob; - }, - selectLocalFile: function (onChange) { - var id = 'file_selector'; - var input = document.createElement('input'); - input.style = 'width:0;height:0;border:0;margin:0;padding:0;'; - input.type = 'file'; - input.id = id; - input.onchange = function (e) { - var files = this.files; - if (!files.length) return; - onChange && onChange(files); - document.body.removeChild(input); - }; - document.body.appendChild(input); - input.click(); - }, -}; - -// 对更多字符编码的 url encode 格式 -var camSafeUrlEncode = function (str) { - return encodeURIComponent(str) - .replace(/!/g, '%21') - .replace(/'/g, '%27') - .replace(/\(/g, '%28') - .replace(/\)/g, '%29') - .replace(/\*/g, '%2A'); -}; - -var getAuthorization = function (options, callback) { - // 格式一、(推荐)后端通过获取临时密钥给到前端,前端计算签名 - // 服务端 JS 和 PHP 例子:https://github.com/tencentyun/cos-js-sdk-v5/blob/master/server/ - // 服务端其他语言参考 COS STS SDK :https://github.com/tencentyun/qcloud-cos-sts-sdk - var url = '/sts'; // 如果是 npm run sts.js 起的 nodejs server,使用这个 - var xhr = new XMLHttpRequest(); - xhr.open('POST', url, true); - xhr.setRequestHeader('Content-Type', 'application/json'); - xhr.onload = function (e) { - try { - var data = JSON.parse(e.target.responseText); - var credentials = data.credentials; - } catch (e) {} - if (!data || !credentials) { - return logger.error('credentials invalid:\n' + JSON.stringify(data, null, 2)); - } - callback({ - TmpSecretId: credentials.tmpSecretId, - TmpSecretKey: credentials.tmpSecretKey, - SecurityToken: credentials.sessionToken, - StartTime: data.startTime, // 时间戳,单位秒,如:1580000000,建议返回服务器时间作为签名的开始时间,避免用户浏览器本地时间偏差过大导致签名错误 - ExpiredTime: data.expiredTime, // 时间戳,单位秒,如:1580000000 - ScopeLimit: true, // 细粒度控制权限需要设为 true,会限制密钥只在相同请求时重复使用 - }); - }; - xhr.send(JSON.stringify(options.Scope)); - - // // 格式二、(推荐)【细粒度控制权限】后端通过获取临时密钥给到前端,前端只有相同请求才重复使用临时密钥,后端可以通过 Scope 细粒度控制权限 - // // 服务端例子:https://github.com/tencentyun/qcloud-cos-sts-sdk/edit/master/scope.md - // // var url = '../server/sts.php'; // 如果起的是 php server 用这个 - // var url = '/sts-scope'; // 如果是 npm run sts.js 起的 nodejs server,使用这个 - // var xhr = new XMLHttpRequest(); - // xhr.open('POST', url, true); - // xhr.setRequestHeader('Content-Type', 'application/json'); - // xhr.onload = function (e) { - // try { - // var data = JSON.parse(e.target.responseText); - // var credentials = data.credentials; - // } catch (e) { - // } - // if (!data || !credentials) { - // return logger.error('credentials invalid:\n' + JSON.stringify(data, null, 2)) - // }; - // callback({ - // TmpSecretId: credentials.tmpSecretId, - // TmpSecretKey: credentials.tmpSecretKey, - // SecurityToken: credentials.sessionToken, - // StartTime: data.startTime, // 时间戳,单位秒,如:1580000000,建议返回服务器时间作为签名的开始时间,避免用户浏览器本地时间偏差过大导致签名错误 - // ExpiredTime: data.expiredTime, // 时间戳,单位秒,如:1580000000 - // ScopeLimit: true, // 细粒度控制权限需要设为 true,会限制密钥只在相同请求时重复使用 - // }); - // }; - // xhr.send(JSON.stringify(options.Scope)); - - // // 格式三、(不推荐,分片上传权限不好控制)前端每次请求前都需要通过 getAuthorization 获取签名,后端使用固定密钥或临时密钥计算签名返回给前端 - // // 服务端获取签名,请参考对应语言的 COS SDK:https://cloud.tencent.com/document/product/436/6474 - // // 注意:这种有安全风险,后端需要通过 method、pathname 严格控制好权限,比如不允许 put / 等 - // var method = (options.Method || 'get').toLowerCase(); - // var query = options.Query || {}; - // var headers = options.Headers || {}; - // var pathname = options.Pathname || '/'; - // // var url = 'http://127.0.0.1:3000/auth'; - // var url = '../server/auth.php'; - // var xhr = new XMLHttpRequest(); - // var data = { - // method: method, - // pathname: pathname, - // query: query, - // headers: headers, - // }; - // xhr.open('POST', url, true); - // xhr.setRequestHeader('content-type', 'application/json'); - // xhr.onload = function (e) { - // try { - // var data = JSON.parse(e.target.responseText); - // } catch (e) { - // } - // if (!data || !data.authorization) return console.error('authorization invalid'); - // callback({ - // Authorization: data.authorization, - // // SecurityToken: data.sessionToken, // 如果使用临时密钥,需要把 sessionToken 传给 SecurityToken - // }); - // }; - // xhr.send(JSON.stringify(data)); - - // // 格式四、(不推荐,适用于前端调试,避免泄露密钥)前端使用固定密钥计算签名 - // var authorization = COS.getAuthorization({ - // SecretId: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', // 可传固定密钥或者临时密钥 - // SecretKey: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', // 可传固定密钥或者临时密钥 - // Method: options.Method, - // Pathname: options.Pathname, - // Query: options.Query, - // Headers: options.Headers, - // Expires: 900, - // }); - // callback({ - // Authorization: authorization, - // // SecurityToken: credentials.sessionToken, // 如果使用临时密钥,需要传 SecurityToken - // }); -}; - -var cos = new COS({ - getAuthorization: getAuthorization, - UploadCheckContentMd5: true, -}); - var TaskId; -var pre = document.querySelector('.result'); -var showLogText = function (text, color) { - if (typeof text === 'object') { - try { - text = JSON.stringify(text); - } catch (e) {} - } - var div = document.createElement('div'); - div.innerText = text; - color && (div.style.color = color); - pre.appendChild(div); - pre.style.display = 'block'; - pre.scrollTop = pre.scrollHeight; -}; - -var logger = { - log: function (text) { - console.log.apply(console, arguments); - var args = [].map.call(arguments, function (v) { - return typeof v === 'object' ? JSON.stringify(v, null, 2) : v; - }); - - var logStr = args.join(' '); - - if (logStr.length > 1000000) { - logStr = logStr.slice(0, 1000000) + '...content is too long, the first 1000000 characters are intercepted'; - } - - showLogText(logStr); - }, - error: function (text) { - console.error(text); - showLogText(text, 'red'); - }, -}; - function getObjectUrl() { var url = cos.getObjectUrl( { @@ -1871,2881 +1682,75 @@ function request() { ); } -function CIExample1() { - util.selectLocalFile(function (files) { - var file = files && files[0]; - if (!file) return; - if (file.type.indexOf('image') < 0) { - logger.error('Please select a photo to upload!'); - return; - } - if (file.size > 1024 * 1024) { - cos.sliceUploadFile( - { - Bucket: config.Bucket, // Bucket 格式:test-1250000000 - Region: config.Region, - Key: file.name, - Body: file, - Headers: { - // 通过 imageMogr2 接口使用图片缩放功能:指定图片宽度为 200,宽度等比压缩 - 'Pic-Operations': - '{"is_pic_info": 1, "rules": [{"fileid": "desample_photo.jpg", "rule": "imageMogr2/thumbnail/200x/"}]}', - }, - onTaskReady: function (tid) { - TaskId = tid; - }, - onHashProgress: function (progressData) { - logger.log('onHashProgress', JSON.stringify(progressData)); - }, - onProgress: function (progressData) { - logger.log('onProgress', JSON.stringify(progressData)); - }, - }, - function (err, data) { - logger.log('CIExample1:', err || data); - }, - ); - } else { - cos.putObject( - { - Bucket: config.Bucket, // Bucket 格式:test-1250000000 - Region: config.Region, - Key: file.name, - Body: file, - Headers: { - // 通过 imageMogr2 接口使用图片缩放功能:指定图片宽度为 200,宽度等比压缩 - 'Pic-Operations': - '{"is_pic_info": 1, "rules": [{"fileid": "desample_photo.jpg", "rule": "imageMogr2/thumbnail/200x/"}]}', - }, - onTaskReady: function (tid) { - TaskId = tid; - }, - onHashProgress: function (progressData) { - logger.log('onHashProgress', JSON.stringify(progressData)); - }, - onProgress: function (progressData) { - logger.log('onProgress', JSON.stringify(progressData)); - }, - }, - function (err, data) { - logger.log('CIExample1:', err || data); - }, - ); - } - }); -} -function CIExample2() { - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Key: 'photo.png', - Method: 'POST', - Action: 'image_process', - Headers: { - // 通过 imageMogr2 接口使用图片缩放功能:指定图片宽度为 200,宽度等比压缩 - 'Pic-Operations': - '{"is_pic_info": 1, "rules": [{"fileid": "desample_photo.jpg", "rule": "imageMogr2/thumbnail/200x/"}]}', - }, - }, - function (err, data) { - logger.log('CIExample2:', err || data); - }, - ); -} -function CIExample3() { - cos.getObject( - { - Bucket: config.Bucket, - Region: config.Region, - Key: 'photo.png', - QueryString: `imageMogr2/thumbnail/200x/`, - }, - function (err, data) { - logger.log('CIExample3:', err || data); - }, - ); -} -function CIExample4() { - // 生成带图片处理参数的文件签名URL,过期时间设置为 30 分钟。 - cos.getObjectUrl( - { - Bucket: config.Bucket, - Region: config.Region, - Key: 'photo.png', - QueryString: `imageMogr2/thumbnail/200x/`, - Expires: 1800, - Sign: true, - }, - function (err, data) { - logger.log('getObjectUrl with sign: ', err || (data && data.Url)); - }, - ); - - // 生成带图片处理参数的文件URL,不带签名。 - cos.getObjectUrl( - { - Bucket: config.Bucket, - Region: config.Region, - Key: 'photo.png', - QueryString: `imageMogr2/thumbnail/200x/`, - Sign: false, - }, - function (err, data) { - logger.log('getObjectUrl without sign: ', err || (data && data.Url)); - }, - ); -} - -// 查询已经开通数据万象功能的存储桶 -function describeMediaBuckets() { - var host = 'ci.' + config.Region + '.myqcloud.com'; - var url = 'https://' + host + '/mediabucket'; - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'GET', - Key: 'mediabucket', // 固定值,必须 - Url: url, - Query: { - pageNumber: '1', // 第几页,非必须 - pageSize: '10', // 每页个数,非必须 - // regions: 'ap-chengdu', // 地域信息,例如'ap-beijing',支持多个值用逗号分隔如'ap-shanghai,ap-beijing',非必须 - // bucketNames: 'test-1250000000', // 存储桶名称,精确搜索,例如'test-1250000000',支持多个值用逗号分隔如'test1-1250000000,test2-1250000000',非必须 - // bucketName: 'test', //存储桶名称前缀,前缀搜索,例如'test',支持多个值用逗号分隔如'test1,test2',非必须 - }, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 获取媒体文件信息 -function getMediaInfo() { - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'GET', - Key: 'test.mp4', - Query: { - 'ci-process': 'videoinfo', // 固定值,必须 - }, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 获取媒体文件某个时间的截图 -function getSnapshot() { - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'GET', - Key: 'test.mp4', - Query: { - 'ci-process': 'snapshot', // 固定值,必须 - time: 1, // 截图的时间点,单位为秒,必须 - // width: 0, // 截图的宽,非必须 - // height: 0, // 截图的高,非必须 - // format: 'jpg', // 截图的格式,支持 jpg 和 png,默认 jpg,非必须 - // rotate: 'auto', // 图片旋转方式,默认为'auto',非必须 - // mode: 'exactframe', // 截帧方式,默认为'exactframe',非必须 - }, - RawBody: true, - // 可选返回文件格式为blob - DataType: 'blob', - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 图片同步审核 -function getImageAuditing() { - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'GET', - Key: '1.png', - Query: { - 'ci-process': 'sensitive-content-recognition', // 固定值,必须 - 'biz-type': '', // 审核类型,非必须 - 'detect-url': '', // 审核任意公网可访问的图片链接,非必须 - interval: 5, // 审核 GIF 动图时,每隔interval帧截取一帧,非必须 - 'max-frames': 5, // 审核 GIF 动图时,最大截帧数,非必须 - 'large-image-detect': '0', // 是否需要压缩图片后再审核,非必须 - }, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} +(function () { + var list = [ + 'header-工具函数', + 'request', + 'getObjectUrl', + 'getAuth', -// 图片批量审核 -function postImagesAuditing() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; - var url = 'https://' + host + '/image/auditing'; - var body = COS.util.json2xml({ - Request: { - Input: [ - { - Object: '1.png', - }, - { - Object: '6.png', - }, - ], - Conf: { - BizType: '', - }, - }, - }); - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'POST', - Url: url, - Key: '/image/auditing', - ContentType: 'application/xml', - Body: body, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} + //'getService', // 不支持,正常场景会跨域 + 'header-存储桶操作', + //'putBucket', // 不支持,正常场景会跨域 + 'headBucket', + 'putBucketAcl', + 'getBucketAcl', + 'putBucketCors', + 'getBucketCors', + // 'deleteBucketCors', // 不建议调用,删除 CORS,浏览器不能正常调用 + 'putBucketTagging', + 'getBucketTagging', + 'deleteBucketTagging', + 'putBucketPolicy', + 'getBucketPolicy', + 'deleteBucketPolicy', + 'getBucketLocation', + 'getBucketLifecycle', + 'putBucketLifecycle', + 'deleteBucketLifecycle', + 'putBucketVersioning', + 'getBucketVersioning', + 'getBucketReplication', + 'putBucketReplication', + 'deleteBucketReplication', + 'putBucketWebsite', + 'getBucketWebsite', + 'deleteBucketWebsite', + 'putBucketReferer', + 'getBucketReferer', + 'putBucketDomain', + 'getBucketDomain', + 'deleteBucketDomain', + 'putBucketLogging', + 'getBucketLogging', + 'deleteBucketLogging', + 'putBucketInventory', + 'postBucketInventory', + 'getBucketInventory', + 'deleteBucketInventory', + 'listBucketInventory', + 'putBucketEncryption', + 'getBucketEncryption', + 'deleteBucketEncryption', + 'deleteBucket', -// 查询图片审核任务结果 -function getImageAuditingResult() { - var jobId = 'si8263213daf3711eca0d1525400d88xxx'; // jobId可以通过图片批量审核返回 - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; - var url = 'https://' + host + '/image/auditing/' + jobId; - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'GET', - Key: '/image/auditing/' + jobId, - Url: url, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 提交视频审核任务 -function postVideoAuditing() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; - var url = 'https://' + host + '/video/auditing'; - var body = COS.util.json2xml({ - Request: { - Input: { - Object: '1.mp4', - }, - Conf: { - BizType: '', - Snapshot: { - Count: 1000, // 视频截帧数量 - }, - DetectContent: 1, // 是否审核视频声音,0-只审核视频不审核声音;1-审核视频+声音 - }, - }, - }); - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'POST', - Url: url, - Key: '/video/auditing', - ContentType: 'application/xml', - Body: body, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 查询视频审核任务结果 -function getVideoAuditingResult() { - var jobId = 'av14d9ca15af3a11eca0d6525400d88xxx'; // jobId可以通过提交视频审核任务返回 - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; - var url = 'https://' + host + '/video/auditing/' + jobId; - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'GET', - Key: '/video/auditing/' + jobId, - Url: url, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 提交音频审核任务 -function postAudioAuditing() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; - var url = 'https://' + host + '/audio/auditing'; - var body = COS.util.json2xml({ - Request: { - Input: { - Object: '1.mp3', - }, - Conf: { - BizType: '', - }, - }, - }); - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'POST', - Url: url, - Key: '/audio/auditing', - ContentType: 'application/xml', - Body: body, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 查询音频审核任务结果 -function getAudioAuditingResult() { - var jobId = 'sa0c28d41daff411ecb23352540078cxxx'; // jobId可以通过提交音频审核任务返回 - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; - var url = 'https://' + host + '/audio/auditing/' + jobId; - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'GET', - Key: '/audio/auditing/' + jobId, - Url: url, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 提交文本审核任务 -function postTextAuditing() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; - var url = 'https://' + host + '/text/auditing'; - var body = COS.util.json2xml({ - Request: { - Input: { - // Object: 'hello.txt', // 存在cos里的资源,审核结果异步返回,可以调用查询文本审核结果api查询 - Content: '5Lmz5rKf', // 经过base64编码过的文本”乳沟“,查询结果同步返回 - }, - Conf: { - BizType: '', - }, - }, - }); - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'POST', - Url: url, - Key: '/text/auditing', - ContentType: 'application/xml', - Body: body, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 查询文本审核任务结果 -function getTextAuditingResult() { - var jobId = 'st8d88c664aff511ecb23352540078cxxx'; // jobId可以通过提交文本审核任务返回(Input传入Object) - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; - var url = 'https://' + host + '/text/auditing/' + jobId; - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'GET', - Key: '/text/auditing/' + jobId, - Url: url, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 提交文档审核任务 -function postDocumentAuditing() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; - var url = 'https://' + host + '/document/auditing'; - var body = COS.util.json2xml({ - Request: { - Input: { - Object: 'test.xlsx', // 存在cos里的资源,审核结果异步返回,可以调用查询文本审核结果api查询 - }, - Conf: { - BizType: '', - }, - }, - }); - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'POST', - Url: url, - Key: '/document/auditing', - ContentType: 'application/xml', - Body: body, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 查询文档审核任务结果 -function getDocumentAuditingResult() { - var jobId = 'sd7815c21caff611eca12f525400d88xxx'; // jobId可以通过提交文档审核任务返回 - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; - var url = 'https://' + host + '/document/auditing/' + jobId; - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'GET', - Key: '/document/auditing/' + jobId, - Url: url, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 提交网页审核任务 -function postWebpageAuditing() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; - var url = 'https://' + host + '/webpage/auditing'; - var body = COS.util.json2xml({ - Request: { - Input: { - Url: 'https://cloud.tencent.com/', // 存在cos里的资源,审核结果异步返回,可以调用查询文本审核结果api查询 - }, - Conf: { - BizType: '', - }, - }, - }); - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'POST', - Url: url, - Key: '/webpage/auditing', - ContentType: 'application/xml', - Body: body, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 查询网页审核任务结果 -function getWebpageAuditingResult() { - var jobId = 'shce868019aff611ecb1155254009a4xxx'; // jobId可以通过提交网页审核任务返回 - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; - var url = 'https://' + host + '/webpage/auditing/' + jobId; - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'GET', - Key: '/webpage/auditing/' + jobId, - Url: url, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 提交直播审核任务 -function postLiveAuditing() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; - var url = 'https://' + host + '/video/auditing'; - var body = COS.util.json2xml({ - Request: { - Type: 'live_video', - Input: { - Url: 'rtmp://example.com/live/123', // 需要审核的直播流播放地址 - // DataId: '', - // UserInfo: {}, - }, - Conf: { - BizType: '766d07a7af937c26216c51db29793ea6', - // Callback: 'https://callback.com', // 回调地址,非必须 - // CallbackType: 1, // 回调片段类型,非必须 - }, - }, - }); - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'POST', - Url: url, - Key: '/video/auditing', - ContentType: 'application/xml', - Body: body, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 查询直播审核任务结果 -function getLiveAuditingResult() { - var jobId = 'av0ca69557bd6111ed904c5254009411xx'; // jobId可以通过提交直播审核任务返回 - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; - var url = 'https://' + host + '/video/auditing/' + jobId; - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'GET', - Key: '/video/auditing/' + jobId, - Url: url, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 提交直播审核任务 -function postLiveAuditing() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; - var url = 'https://' + host + '/video/auditing'; - var body = COS.util.json2xml({ - Request: { - Type: 'live_video', - Input: { - Url: 'rtmp://example.com/live/123', // 需要审核的直播流播放地址 - // DataId: '', - // UserInfo: {}, - }, - Conf: { - BizType: '766d07a7af937c26216c51db29793ea6', - // Callback: 'https://callback.com', // 回调地址,非必须 - // CallbackType: 1, // 回调片段类型,非必须 - }, - }, - }); - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'POST', - Url: url, - Key: '/video/auditing', - ContentType: 'application/xml', - Body: body, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 查询直播审核任务结果 -function getLiveAuditingResult() { - var jobId = 'av0ca69557bd6111ed904c5254009411xx'; // jobId可以通过提交直播审核任务返回 - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; - var url = 'https://' + host + '/video/auditing/' + jobId; - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'GET', - Key: '/video/auditing/' + jobId, - Url: url, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 查询已经开通文档预览的存储桶 -function describeDocProcessBuckets() { - var host = 'ci.' + config.Region + '.myqcloud.com/docbucket'; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Key: 'docbucket', - Url: url, - Query: { - // regions: '', // 非必须,地域信息,以“,”分隔字符串,支持 All、ap-shanghai、ap-beijing - // bucketNames: '', // 非必须,存储桶名称,以“,”分隔,支持多个存储桶,精确搜索 - // bucketName: '', // 非必须,存储桶名称前缀,前缀搜索 - // pageNumber: 1, // 非必须,第几页 - // pageSize: 10, // 非必须,每页个数 - }, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 文档转码同步请求 -function getDocPreview() { - cos.getObjectUrl( - { - Bucket: config.Bucket, // Bucket 格式:test-1250000000 - Region: config.Region, - Key: '1/文档.docx', - Query: { - 'ci-process': 'doc-preview', // 必须,数据万象处理能力,文档预览固定为 doc-preview - srcType: 'docx', // 非必须,源数据的后缀类型,当前文档转换根据 COS 对象的后缀名来确定源数据类型。当 COS 对象没有后缀名时,可以设置该值 - // page: '', // 非必须,需转换的文档页码,默认从1开始计数;表格文件中 page 表示转换的第 X 个 sheet 的第 X 张图 - // dstType: '', // 非必须,转换输出目标文件类型 - }, - DataType: 'blob', - }, - function (err, data) { - if (err) { - console.log(err); - } else { - // Body为转码后的内容 可展示在img里 比如 - var body = data.Body; - // const url = URL.createObjectURL(body); - // const img = document.getElementById('image'); - // img.src = url; - // 获取总页数(需要在跨域配置的Expose-Headers配置需要暴露出的头部 比如下方的X-Total-Page) - // 跨域配置可参考文档 https://cloud.tencent.com/document/product/436/13318 - var totalPage = data.headers['X-Total-Page']; - } - }, - ); -} - -// 查询文档转码队列 -function describeDocProcessQueues() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/docqueue'; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Key: 'docqueue', - Url: url, - Query: { - // queueIds: '', // 非必须,队列 ID,以“,”符号分割字符串 - // state: '', // 非必须,1=Active,2=Paused - // pageNumber: 1, // 非必须,第几页 - // pageSize: 2, // 非必须,每页个数 - }, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 更新文档预览队列 -function updateDocProcessQueue() { - var queueId = 'pa2e2c3d3fae042de909cafc16f1d801b'; // 替换成自己的队列id - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/docqueue/' + queueId; - var url = 'https://' + host; - var body = COS.util.json2xml({ - Request: { - Name: 'queue-doc-process-1', // 替换成自己的队列name - QueueID: queueId, - State: 'Active', - NotifyConfig: { - State: 'Off', - }, - }, - }); - cos.request( - { - Method: 'PUT', - Key: 'docqueue/' + queueId, - Url: url, - Body: body, - ContentType: 'application/xml', - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 提交文档转码任务 -function createDocProcessJobs() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/doc_jobs'; - var url = 'https://' + host; - var body = COS.util.json2xml({ - Request: { - Tag: 'DocProcess', - Input: { - Object: '1/文档.docx', // 存在cos里的路径 - }, - Operation: { - DocProcess: { - TgtType: 'jpg', - }, - Output: { - Bucket: config.Bucket, - Region: config.Region, - Object: '1/文档转码_${Number}.jpg', // 转码后存到cos的路径 - }, - }, - QueueId: 'pa2e2c3d3fae042de909cafc16f1d801b', // 替换成自己的queueId - }, - }); - cos.request( - { - Method: 'POST', - Key: 'doc_jobs', - Url: url, - Body: body, - ContentType: 'application/xml', - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 查询指定的文档预览任务 -function describeDocProcessJob() { - var jobId = 'd87fbabd07b8611ed974b3f4b40648xxx'; // 替换成自己的jogId - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/doc_jobs/' + jobId; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Key: 'doc_jobs/' + jobId, - Url: url, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 拉取符合条件的文档预览任务 -function describeDocProcessJobs() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/doc_jobs'; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Key: 'doc_jobs', - Url: url, - Query: { - queueId: 'pa2e2c3d3fae042de909cafc16f1d801b', // 替换成自己的queueId - tag: 'DocProcess', - }, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 文档转 HTML -function getDocHtmlUrl() { - cos.getObjectUrl( - { - Bucket: config.Bucket, // Bucket 格式:test-1250000000 - Region: config.Region, - Key: '1/文档.docx', - Query: { - 'ci-process': 'doc-preview', // 必须,数据万象处理能力,文档预览固定为 doc-preview - // srcType: '', // 非必须,源数据的后缀类型,当前文档转换根据 COS 对象的后缀名来确定源数据类型。当 COS 对象没有后缀名时,可以设置该值 - // page: '', // 非必须,需转换的文档页码,默认从1开始计数;表格文件中 page 表示转换的第 X 个 sheet 的第 X 张图 - dstType: 'html', // 非必须,转换输出目标文件类型 - }, - }, - function (err, data) { - if (err) { - console.log(err); - } else { - // 使用浏览器打开url即可预览 - var url = data.Url; - console.log(url); - } - }, - ); -} - -// 识别图片标签 -function getImageLabel() { - var key = '1/素材.jpeg'; - var host = config.Bucket + '.cos.' + config.Region + '.myqcloud.com/' + key; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Key: key, - Url: url, - Query: { - 'ci-process': 'detect-label', - }, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 二维码识别(上传时识别) -function identifyQrcode_put() { - util.selectLocalFile(function (files) { - var file = files && files[0]; - if (!file) return; - cos.putObject( - { - Bucket: config.Bucket, // Bucket 格式:test-1250000000 - Region: config.Region, - Key: '1/上传二维码.png', - Body: file, - Headers: { - // 通过 imageMogr2 接口使用图片缩放功能:指定图片宽度为 200,宽度等比压缩 - 'Pic-Operations': '{"is_pic_info": 1, "rules": [{"fileid":"test.jpg","rule":" QRcode/cover/0"}]}', - }, - onProgress: function (progressData) { - logger.log('onProgress', JSON.stringify(progressData)); - }, - }, - function (err, data) { - logger.log('CIExample1:', err || data); - }, - ); - }); -} - -// 二维码识别(下载时识别) -function identifyQrcode_get() { - var key = '1/二维码图片.png'; - var host = config.Bucket + '.cos.' + config.Region + '.myqcloud.com/' + key; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Key: key, - Url: url, - Query: { - 'ci-process': 'QRcode', - }, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 二维码生成 -function generateQrcode() { - var host = config.Bucket + '.cos.' + config.Region + '.myqcloud.com'; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Key: '', - Url: url, - Query: { - 'ci-process': 'qrcode-generate', // 必须,对象存储处理能力,二维码生成参数为 qrcode-generate - 'qrcode-content': '二维码文案', // 必须,可识别的二维码文本信息 - // mode: 0, // 非必须,生成的二维码类型,可选值:0或1。0为二维码,1为条形码,默认值为0 - width: 200, //必须,指定生成的二维码或条形码的宽度,高度会进行等比压缩 - }, - }, - function (err, data) { - if (!err) { - // 获得二维码base64 - var imgBase64 = data.Response.ResultImage; - // 比如可拼接前缀直接展示在img里 - // document.querySelector('#img').src = 'data:image/jpg;base64,' + imgBase64; - } - }, - ); -} - -// 图片文字识别 -function ocr() { - var key = '1/素材.jpeg'; - var host = config.Bucket + '.cos.' + config.Region + '.myqcloud.com/' + key; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Key: key, - Url: url, - Query: { - 'ci-process': 'OCR', // 必须,数据万象处理能力,图片文字识别固定为 OCR - // type: '', // 非必须,OCR 的识别类型 - // 'language-type': '', // 非必须,type 值为 general 时有效,表示识别语言类型 - // ispdf: false, // 非必须,type 值为 general、fast 时有效,表示是否开启 PDF 识别 - // 'pdf-pagenumber': '', // 非必须,type 值为 general、fast 时有效,表示需要识别的 PDF 页面的对应页码 - // isword: false, // 非必须,type 值为 general、accurate 时有效,表示识别后是否需要返回单字信息 - // 'enable-word-polygon': false, // 非必须,type 值为 handwriting 时有效,表示是否开启单字的四点定位坐标输出 - }, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 提交文件压缩任务 -function postFileCompress() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/file_jobs'; - var url = 'https://' + host; - var body = COS.util.json2xml({ - Request: { - Tag: 'FileCompress', // 必须 - Operation: { - FileCompressConfig: { - Flatten: '0', // 文件打包时,是否需要去除源文件已有的目录结构.0:不需要;1:需要 - Format: 'zip', // 打包压缩的类型,有效值:zip、tar、tar.gz - // UrlList、Prefix、Key 三者仅能选择一个,不能都为空,也不会同时生效 - // UrlList: '', // 索引文件的对象地址 - Prefix: 'testCompress/', // 目录前缀 - // Key: [], // 支持对存储桶中的多个文件进行打包,个数不能超过 1000, 总大小不超过50G,否则会导致任务失败 - }, - Output: { - Bucket: config.Bucket, // 保存压缩后文件的存储桶 - Region: config.Region, // 保存压缩后文件的存储桶地域 - Object: 'testCompress/compressed.zip', // 压缩后文件的文件名 - }, - UserData: '', - }, - // QueueId: '', // 任务所在的队列 ID - // CallBack: 'http://callback.demo.com', // 任务回调的地址 - // CallBackFormat: 'JSON', // 任务回调格式 - // CallBackType: 'Url', // 任务回调类型,Url 或 TDMQ,默认 Url - }, - }); - cos.request( - { - Method: 'POST', - Key: 'file_jobs', - Url: url, - Body: body, - ContentType: 'application/xml', - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 查询文件压缩任务结果 -function getFileCompress() { - var jobId = 'faf1d2774a13911ed88a65b0c303ae7xx'; // 提交文件压缩任务后会返回当前任务的jobId - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/file_jobs/' + jobId; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Key: 'file_jobs/' + jobId, - Url: url, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 提交文件解压任务 -function postFileUnCompress() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/file_jobs'; - var url = 'https://' + host; - var body = COS.util.json2xml({ - Request: { - Tag: 'FileUncompress', // 必须 - Input: { - Object: 'testCompress/compressed.zip', // 文件名,取值为文件在当前存储桶中的完整名称 - }, - Operation: { - FileUncompressConfig: { - Prefix: '', // 指定解压后输出文件的前缀,不填则默认保存在存储桶根路径 - PrefixReplaced: '0', // 指定解压后的文件路径是否需要替换前缀,默认0 - }, - Output: { - Bucket: config.Bucket, // 保存解压后文件的存储桶 - Region: config.Region, // 保存解压后文件的存储桶地域 - }, - }, - // QueueId: '', // 任务所在的队列 ID - // CallBack: 'http://callback.demo.com', // 任务回调的地址 - // CallBackFormat: 'JSON', // 任务回调格式 - // CallBackType: 'Url', // 任务回调类型,Url 或 TDMQ,默认 Url - }, - }); - cos.request( - { - Method: 'POST', - Key: 'file_jobs', - Url: url, - Body: body, - ContentType: 'application/xml', - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 查询文件解压任务结果 -function getFileUnCompress() { - var jobId = 'fe7b0fa34a13911eda186254bb8f3aaxx'; // 提交文件解压任务后会返回当前任务的jobId - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/file_jobs/' + jobId; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Key: 'file_jobs/' + jobId, - Url: url, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 提交哈希值计算任务 -function postFileHash() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/file_jobs'; - var url = 'https://' + host; - var body = COS.util.json2xml({ - Request: { - Tag: 'FileHashCode', // 必须 - Input: { - Object: 'test/1.pdf', // 文件名,取值为文件在当前存储桶中的完整名称 - }, - Operation: { - FileHashCodeConfig: { - Type: 'MD5', // 哈希值的算法类型,有效值:MD5、SHA1、SHA256 - AddToHeader: 'false', // 是否将计算得到的哈希值添加至文件自定义header, 有效值:true、false,默认值为 false。 - }, - // UserData: '', // 透传用户信息, 可打印的 ASCII 码, 长度不超过1024 - }, - // QueueId: '', // 任务所在的队列 ID - // CallBack: 'http://callback.demo.com', // 任务回调的地址 - // CallBackFormat: 'JSON', // 任务回调格式 - // CallBackType: 'Url', // 任务回调类型,Url 或 TDMQ,默认 Url - }, - }); - cos.request( - { - Method: 'POST', - Key: 'file_jobs', - Url: url, - Body: body, - ContentType: 'application/xml', - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 查询哈希值计算任务结果 -function getFileHashResult() { - var jobId = 'f3addcbd0a13811ed9b4ff5338d756fxx'; // 提交文件哈希值计算任务后会返回当前任务的jobId - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/file_jobs/' + jobId; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Key: 'file_jobs/' + jobId, - Url: url, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 提交病毒检测任务 -function postVirusDetect() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/virus/detect'; - var url = 'https://' + host; - var body = COS.util.json2xml({ - Request: { - Input: { - Object: 'test/1.png', // 文件名,取值为文件在当前存储桶中的完整名称,与Url参数二选一 - // Url: 'http://examplebucket-1250000000.cos.ap-shanghai.myqcloud.com/virus.doc', // 病毒文件的链接地址,与Object参数二选一 - }, - Conf: { - DetectType: 'Virus', // 检测的病毒类型,当前固定为:Virus - // CallBack: 'http://callback.demo.com', // 任务回调的地址 - }, - }, - }); - cos.request( - { - Method: 'POST', - Key: 'virus/detect', - Url: url, - Body: body, - ContentType: 'application/xml', - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 查询病毒检测任务结果 -function getVirusDetectResult() { - var jobId = 'ssdb2dab23bcdb11ed9efb5254009411xx'; // 提交病毒检测任务后会返回当前任务的jobId - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/virus/detect/' + jobId; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Key: 'virus/detect/' + jobId, - Url: url, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 提交音频降噪任务 -function postNoiseReduction() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/jobs'; - var url = 'https://' + host; - var body = COS.util.json2xml({ - Request: { - Tag: 'NoiseReduction', - Input: { - Object: 'ci/music.mp3', // 文件名,取值为文件在当前存储桶中的完整名称 - }, - Operation: { - Output: { - Bucket: config.Bucket, // 输出的存储桶 - Region: config.Region, // 输出的存储桶的地域 - Object: 'ci/out.mp3', // 输出的文件Key - }, - }, - // QueueId: '', // 任务所在的队列 ID,非必须 - // CallBackFormat: '', // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式,非必须 - // CallBackType: '', // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型,非必须 - // CallBack: '', // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调,非必须 - // CallBackMqConfig: '', // 任务回调 TDMQ 配置,当 CallBackType 为 TDMQ 时必填,非必须 - }, - }); - cos.request( - { - Method: 'POST', - Key: 'jobs', - Url: url, - Body: body, - ContentType: 'application/xml', - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 提交人声分离任务 -function postVoiceSeparate() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/jobs'; - var url = 'https://' + host; - var body = COS.util.json2xml({ - Request: { - Tag: 'VoiceSeparate', - Input: { - Object: 'ci/music.mp3', // 文件名,取值为文件在当前存储桶中的完整名称 - }, - Operation: { - // VoiceSeparate: {}, // 指定转码模板参数,非必须 - TemplateId: 't13fca82ad97e84878a22cd81bd2e5652c', // 指定的模板 ID,必须 - // JobLevel: 0, // 任务优先级,级别限制:0 、1 、2。级别越大任务优先级越高,默认为0,非必须 - Output: { - Bucket: config.Bucket, // 输出的存储桶 - Region: config.Region, // 输出的存储桶的地域 - Object: 'ci/out/background.mp3', // 输出的文件Key,背景音结果文件名,不能与 AuObject 同时为空 - AuObject: 'ci/out/audio.mp3', - }, - }, - // QueueId: '', // 任务所在的队列 ID,非必须 - // CallBackFormat: '', // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式,非必须 - // CallBackType: '', // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型,非必须 - // CallBack: '', // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调,非必须 - // CallBackMqConfig: '', // 任务回调 TDMQ 配置,当 CallBackType 为 TDMQ 时必填,非必须 - }, - }); - cos.request( - { - Method: 'POST', - Key: 'jobs', - Url: url, - Body: body, - ContentType: 'application/xml', - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 提交语音合成任务 -function postTts() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/jobs'; - var url = 'https://' + host; - var body = COS.util.json2xml({ - Request: { - Tag: 'Tts', - Operation: { - // VoiceSeparate: {}, // 指定转码模板参数,非必须 - TemplateId: 't192931b3564084168a3f50ebfea59acb3', // 指定的模板 ID,必须 - // JobLevel: 0, // 任务优先级,级别限制:0 、1 、2。级别越大任务优先级越高,默认为0,非必须 - TtsConfig: { - InputType: 'Text', - Input: '床前明月光,疑是地上霜', - }, - Output: { - Bucket: config.Bucket, // 输出的存储桶 - Region: config.Region, // 输出的存储桶的地域 - Object: 'ci/out/tts.mp3', // 输出的文件Key - }, - }, - // QueueId: '', // 任务所在的队列 ID,非必须 - // CallBackFormat: '', // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式,非必须 - // CallBackType: '', // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型,非必须 - // CallBack: '', // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调,非必须 - // CallBackMqConfig: '', // 任务回调 TDMQ 配置,当 CallBackType 为 TDMQ 时必填,非必须 - }, - }); - cos.request( - { - Method: 'POST', - Key: 'jobs', - Url: url, - Body: body, - ContentType: 'application/xml', - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 提交语音识别任务 -function postSpeechRecognition() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/asr_jobs'; - var url = 'https://' + host; - var body = COS.util.json2xml({ - Request: { - Tag: 'SpeechRecognition', - Input: { - Object: 'ci/music.mp3', // 文件名,取值为文件在当前存储桶中的完整名称,与Url参数二选一 - // Url: 'http://examplebucket-1250000000.cos.ap-shanghai.myqcloud.com/music.mp3', // 病毒文件的链接地址,与Object参数二选一 - }, - Operation: { - SpeechRecognition: { - EngineModelType: '16k_zh_video', // 引擎模型类型 - ChannelNum: 1, // 语音声道数 - ResTextFormat: 0, // 识别结果返回形式 - FilterDirty: 1, // 是否过滤脏词(目前支持中文普通话引擎) - FilterModal: 1, // 是否过语气词(目前支持中文普通话引擎) - ConvertNumMode: 0, // 是否进行阿拉伯数字智能转换(目前支持中文普通话引擎) - }, - Output: { - Bucket: config.Bucket, // 输出的存储桶 - Region: config.Region, // 输出的存储桶的地域 - Object: 'ci/out/SpeechRecognition.mp3', // 输出的文件Key - }, - }, - // QueueId: '', // 任务所在的队列 ID,非必须 - // CallBackFormat: '', // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式,非必须 - // CallBackType: '', // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型,非必须 - // CallBack: '', // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调,非必须 - // CallBackMqConfig: '', // 任务回调 TDMQ 配置,当 CallBackType 为 TDMQ 时必填,非必须 - }, - }); - cos.request( - { - Method: 'POST', - Key: 'asr_jobs', - Url: url, - Body: body, - ContentType: 'application/xml', - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 查询语音识别队列 -function getAsrQueue() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/asrqueue'; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Key: 'asrqueue', - Url: url, - Query: { - // queueIds: '', // 非必须,队列 ID,以“,”符号分割字符串 - // state: '', // 非必须,1=Active,2=Paused - // pageNumber: 1, // 非必须,第几页 - // pageSize: 2, // 非必须,每页个数 - }, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 更新语音识别队列 -function putAsrQueue() { - var queueId = 'pcc77499e85c311edb9865254008618d9'; - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/asrqueue/' + queueId; - var url = 'https://' + host; - var body = COS.util.json2xml({ - Request: { - Name: 'queue-doc-process-1', - QueueID: queueId, - State: 'Paused', - NotifyConfig: { - // Url: '', - // Type: 'Url', - // Event: '', - State: 'Off', - }, - }, - }); - cos.request( - { - Method: 'PUT', - Key: 'asrqueue/' + queueId, - Url: url, - Body: body, - ContentType: 'application/xml', - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 查询语音识别开通状态 -function getAsrBucket() { - var host = 'ci.' + config.Region + '.myqcloud.com/asrbucket'; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Key: 'asrbucket', - Url: url, - Query: { - // regions: '', // 非必须,地域信息,以“,”分隔字符串,支持 All、ap-shanghai、ap-beijing - // bucketNames: '', // 非必须,存储桶名称,以“,”分隔,支持多个存储桶,精确搜索 - // bucketName: '', // 非必须,存储桶名称前缀,前缀搜索 - // pageNumber: 1, // 非必须,第几页 - // pageSize: 10, // 非必须,每页个数 - }, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 获取在线文档预览地址 -function getDocHtmlPreviewUrl() { - var key = 'test.pdf'; - var host = config.Bucket + '.cos.' + config.Region + '.myqcloud.com/' + key; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Key: key, - Url: url, - RawBody: true, - Query: { - 'ci-process': 'doc-preview', // 必须,预览固定参数,值为 doc-preview - dstType: 'html', // 必须,预览类型,如需预览生成类型为 html 则填入 html - weboffice_url: 1, // 非必须,是否获取预览链接。填入值为1会返回预览链接和Token信息;填入值为2只返回Token信息;不传会直接预览 - }, - }, - function (err, data) { - // 从响应数据中解析出在线文档预览地址 - let body = {}; - if (data && data.Body) { - body = JSON.parse(data.Body) || {}; - } - if (body && body.PreviewUrl) { - data.PreviewUrl = body.PreviewUrl; - } - logger.log(err || data); - }, - ); -} - -// 开通文件处理服务 -function createFileProcessBucket() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/file_bucket'; - var url = 'https://' + host; - cos.request( - { - Method: 'POST', - Key: 'file_bucket', - Url: url, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 查询文件处理队列 -function describeFileProcessQueues() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/file_queue'; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Key: 'file_queue', - Url: url, - Query: { - // queueIds: '', // 非必须,队列 ID,以“,”符号分割字符串 - state: 'Active', // 非必须,Active 表示队列内的作业会被调度执行。Paused 表示队列暂停,作业不再会被调度执行,队列内的所有作业状态维持在暂停状态,已经执行中的任务不受影响 - pageNumber: 1, // 第几页,默认值1 - pageSize: 10, // 非必须,每页个数,默认值10 - }, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 更新文件处理队列 -function updateFileProcessQueue() { - var queueId = 'p6160ada105a7408e95aac015f4bf8xxx'; - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/file_queue/' + queueId; - var url = 'https://' + host; - var body = COS.util.json2xml({ - Request: { - Name: 'My-Queue-file', // 必须,队列名称,长度不超过128 - State: 'Active', // 必须,Active 表示队列内的作业会被调度执行。Paused 表示队列暂停,作业不再会被调度执行,队列内的所有作业状态维持在暂停状态,已经执行中的任务不受影响。 - NotifyConfig: { - // 必须,回调配置 - State: 'On', // 必须,回调开关,Off/On,默认Off - Event: 'TaskFinish', // 回调事件,当 State=On时, 必选。任务完成:TaskFinish;工作流完成:WorkflowFinish - ResultFormat: 'XML', // 非必选,回调格式,JSON/XML - Type: 'Url', // 回调类型,当 State=On时, 必选,Url 或 TDMQ - Url: 'https://www.example.com', // 回调地址,当 State=On, 且Type=Url时, 必选 - // MqMode: 'Off', // TDMQ 使用模式,当 State=On, 且Type=TDMQ时, 必选 - // MqRegion: 'Off', // TDMQ 所属园区,当 State=On, 且Type=TDMQ时, 必选 - // MqName: 'Off', // TDMQ 主题名称,当 State=On, 且Type=TDMQ时, 必选 - }, - }, - }); - cos.request( - { - Method: 'POST', - Key: 'file_queue/' + queueId, - Url: url, - Body: body, - ContentType: 'application/xml', - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 哈希值计算同步请求 -function generateFileHash() { - var key = 'test.pdf'; - var host = config.Bucket + '.cos.' + config.Region + '.myqcloud.com/' + key; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Key: key, - Url: url, - Query: { - 'ci-process': 'filehash', // 必须,操作类型,哈希值计算固定为:filehash - type: 'md5', // 必须,支持的哈希算法类型,有效值:md5、sha1、sha256 - // 'addtoheader': false, // 非必须,是否将计算得到的哈希值,自动添加至文件的自定义header,格式为:x-cos-meta-md5/sha1/sha256;有效值:true、false,不填则默认为false。 - }, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 图片样式 - 增加样式 -function addImageStyle() { - var host = config.Bucket + '.pic.' + config.Region + '.myqcloud.com/?style'; - var url = 'https://' + host; - var body = COS.util.json2xml({ - AddStyle: { - StyleName: 'style_name1', // 必须,样式名称 - StyleBody: 'imageMogr2/thumbnail/!50px', // 必须,样式详情 - }, - }); - cos.request( - { - Method: 'PUT', - Url: url, - Body: body, - ContentType: 'application/xml', - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 图片样式 - 查询样式 -function describeImageStyles() { - var host = config.Bucket + '.pic.' + config.Region + '.myqcloud.com/?style'; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Url: url, - Query: { - 'style-name': 'style_name', // 非必填,样式名称 - }, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 图片样式 - 删除样式 -function deleteImageStyle() { - var host = config.Bucket + '.pic.' + config.Region + '.myqcloud.com/?style'; - var url = 'https://' + host; - var body = COS.util.json2xml({ - DeleteStyle: { - StyleName: 'style_name1', // 必须,样式名称 - }, - }); - cos.request( - { - Method: 'DELETE', - Url: url, - Body: body, - ContentType: 'application/xml', - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 开通 Guetzli 压缩 -function openImageGuetzli() { - var host = config.Bucket + '.pic.' + config.Region + '.myqcloud.com/?guetzli'; - var url = 'https://' + host; - cos.request( - { - Method: 'PUT', - Url: url, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 查询 Guetzli 状态 -function describeImageGuetzli() { - var host = config.Bucket + '.pic.' + config.Region + '.myqcloud.com/?guetzli'; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Url: url, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 关闭 Guetzli 压缩 -function closeImageGuetzli() { - var host = config.Bucket + '.pic.' + config.Region + '.myqcloud.com/?guetzli'; - var url = 'https://' + host; - cos.request( - { - Method: 'DELETE', - Url: url, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 上传时使用图片压缩 -function advanceCompressExample1() { - util.selectLocalFile(function (files) { - var file = files && files[0]; - if (!file) return; - if (file.type.indexOf('image') < 0) { - logger.error('Please select a photo to upload!'); - return; - } - if (file.size > 1024 * 1024) { - cos.sliceUploadFile( - { - Bucket: config.Bucket, // Bucket 格式:test-1250000000 - Region: config.Region, - Key: file.name, - Body: file, - Headers: { - // 通过 imageMogr2 接口进行 avif 压缩,可以根据需要压缩的类型填入不同的压缩格式:webp/heif/tpg/avif/svgc - 'Pic-Operations': - '{"is_pic_info": 1, "rules": [{"fileid": "desample_photo.jpg", "rule": "imageMogr2/format/avif"}]}', - }, - onTaskReady: function (tid) { - TaskId = tid; - }, - onHashProgress: function (progressData) { - logger.log('onHashProgress', JSON.stringify(progressData)); - }, - onProgress: function (progressData) { - logger.log('onProgress', JSON.stringify(progressData)); - }, - }, - function (err, data) { - logger.log('advanceCompressExample1:', err || data); - }, - ); - } else { - cos.putObject( - { - Bucket: config.Bucket, // Bucket 格式:test-1250000000 - Region: config.Region, - Key: file.name, - Body: file, - Headers: { - // 通过 imageMogr2 接口进行 avif 压缩,可以根据需要压缩的类型填入不同的压缩格式:webp/heif/tpg/avif/svgc - 'Pic-Operations': - '{"is_pic_info": 1, "rules": [{"fileid": "desample_photo.jpg", "rule": "imageMogr2/format/avif"}]}', - }, - onTaskReady: function (tid) { - TaskId = tid; - }, - onHashProgress: function (progressData) { - logger.log('onHashProgress', JSON.stringify(progressData)); - }, - onProgress: function (progressData) { - logger.log('onProgress', JSON.stringify(progressData)); - }, - }, - function (err, data) { - logger.log('advanceCompressExample1:', err || data); - }, - ); - } - }); -} - -// 对云上数据进行图片压缩 -function advanceCompressExample2() { - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Key: '1.png', - Method: 'POST', - Action: 'image_process', - Headers: { - // 通过 imageMogr2 接口进行 avif 压缩,可以根据需要压缩的类型填入不同的压缩格式:webp/heif/tpg/avif/svgc - 'Pic-Operations': - '{"is_pic_info": 1, "rules": [{"fileid": "desample_photo.jpg", "rule": "imageMogr2/format/avif"}]}', - }, - }, - function (err, data) { - logger.log('advanceCompressExample2:', err || data); - }, - ); -} - -// 下载时使用图片压缩 -function advanceCompressExample3() { - cos.getObject( - { - Bucket: config.Bucket, - Region: config.Region, - Key: '1.png', - QueryString: `imageMogr2/format/avif`, // 可以根据需要压缩的类型填入不同的压缩格式:webp/heif/tpg/avif/svgc - }, - function (err, data) { - logger.log('advanceCompressExample3:', err || data); - }, - ); -} - -// 异常图片检测 -function createImageInspectJob() { - var key = '1.png'; - var host = config.Bucket + '.cos.' + config.Region + '.myqcloud.com/' + key; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Key: key, - Url: url, - RawBody: true, - Query: { - 'ci-process': 'ImageInspect', // 必须,操作类型,异常图片检测固定为:ImageInspect - }, - }, - function (err, data) { - // 从响应数据中解析出异常图片检测结果 - let body = {}; - if (data && data.Body) { - body = JSON.parse(data.Body) || {}; - if (body) { - data.body = body; - } - } - logger.log(err || data); - }, - ); -} - -// 查询图片处理队列 -function describePicProcessQueues() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/picqueue'; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Key: 'picqueue', - Url: url, - Query: { - // queueIds: '', // 非必须,队列 ID,以“,”符号分割字符串 - state: 'Active', // 非必须,1. Active 表示队列内的作业会被媒体处理服务调度执行。2. Paused 表示队列暂停,作业不再会被媒体处理调度执行,队列内的所有作业状态维持在暂停状态,已经执行中的任务不受影响。 - pageNumber: 1, // 非必须,第几页,默认值1 - pageSize: 10, // 非必须,每页个数,默认值10 - }, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 更新图片处理队列 -function updatePicProcessQueue() { - var queueId = 'p882d181160d84feca27d9376e17c4xxx'; - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/picqueue/' + queueId; - var url = 'https://' + host; - var body = COS.util.json2xml({ - Request: { - Name: 'My-Queue-Pic', // 必须,队列名称,长度不超过128 - State: 'Active', // 必须,Active 表示队列内的作业会被调度执行。Paused 表示队列暂停,作业不再会被调度执行,队列内的所有作业状态维持在暂停状态,已经执行中的任务不受影响。 - NotifyConfig: { - // 必须,回调配置 - State: 'On', // 必须,回调开关,Off/On,默认Off - Event: 'TaskFinish', // 回调事件,当 State=On时, 必选。任务完成:TaskFinish;工作流完成:WorkflowFinish - ResultFormat: 'XML', // 非必选,回调格式,JSON/XML - Type: 'Url', // 回调类型,当 State=On时, 必选,Url 或 TDMQ - Url: 'https://www.example.com', // 回调地址,当 State=On, 且Type=Url时, 必选 - // MqMode: 'Off', // TDMQ 使用模式,当 State=On, 且Type=TDMQ时, 必选 - // MqRegion: 'Off', // TDMQ 所属园区,当 State=On, 且Type=TDMQ时, 必选 - // MqName: 'Off', // TDMQ 主题名称,当 State=On, 且Type=TDMQ时, 必选 - }, - }, - }); - cos.request( - { - Method: 'POST', - Key: 'picqueue/' + queueId, - Url: url, - Body: body, - ContentType: 'application/xml', - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 查询防盗链 -function describeRefer() { - var host = config.Bucket + '.pic.' + config.Region + '.myqcloud.com/?hotlink'; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Url: url, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 设置防盗链 -function setRefer() { - var host = config.Bucket + '.pic.' + config.Region + '.myqcloud.com/?hotlink'; - var url = 'https://' + host; - var body = COS.util.json2xml({ - Hotlink: { - Url: 'https://www.example.com', // 必须,域名地址 - Type: 'white', // 必须,防盗链类型,white 为白名单,black 为黑名单,off 为关闭。 - }, - }); - cos.request( - { - Method: 'PUT', - Url: url, - Body: body, - ContentType: 'application/xml', - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 开通原图保护 -function openOriginProtect() { - var host = config.Bucket + '.pic.' + config.Region + '.myqcloud.com/?origin-protect'; - var url = 'https://' + host; - cos.request( - { - Method: 'PUT', - Url: url, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 查询原图保护状态 -function describeOriginProtect() { - var host = config.Bucket + '.pic.' + config.Region + '.myqcloud.com/?origin-protect'; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Url: url, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 关闭原图保护 -function closeOriginProtect() { - var host = config.Bucket + '.pic.' + config.Region + '.myqcloud.com/?origin-protect'; - var url = 'https://' + host; - cos.request( - { - Method: 'DELETE', - Url: url, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 提交视频截帧任务 -function postSnapshot() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/jobs'; - var url = 'https://' + host; - var body = COS.util.json2xml({ - Request: { - Tag: 'Snapshot', // 必须,固定值 - Input: { - Object: 'ci/abc.mp4', // 文件名,取值为文件在当前存储桶中的完整名称 - }, - Operation: { - // TemplateId与Snapshot二选一传递 - // TemplateId: '', - Snapshot: { - Mode: 'Interval', // 截图模式 - Start: '1', // 开始时间 - Count: '1', // 截图数量 - }, - Output: { - Bucket: config.Bucket, // 输出的存储桶 - Region: config.Region, // 输出的存储桶的地域 - Object: 'ci/output/snapshot-${Number}.jpg', // 输出的文件 Key - }, - }, - }, - }); - cos.request( - { - Method: 'POST', - Key: 'jobs', - Url: url, - Body: body, - ContentType: 'application/xml', - }, - function (err, data) { - logger.log(err || data); - }, - ); -} -// 提交病毒检测任务 -function postVirusDetect() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/virus/detect'; - var url = 'https://' + host; - var body = COS.util.json2xml({ - Request: { - Input: { - Object: 'test/1.png', // 文件名,取值为文件在当前存储桶中的完整名称,与Url参数二选一 - // Url: 'http://examplebucket-1250000000.cos.ap-shanghai.myqcloud.com/virus.doc', // 病毒文件的链接地址,与Object参数二选一 - }, - Conf: { - DetectType: 'Virus', // 检测的病毒类型,当前固定为:Virus - // CallBack: 'http://callback.demo.com', // 任务回调的地址 - }, - }, - }); - cos.request( - { - Method: 'POST', - Key: 'virus/detect', - Url: url, - Body: body, - ContentType: 'application/xml', - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 查询病毒检测任务结果 -function getVirusDetectResult() { - var jobId = 'ssdb2dab23bcdb11ed9efb5254009411xx'; // 提交病毒检测任务后会返回当前任务的jobId - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/virus/detect/' + jobId; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Key: 'virus/detect/' + jobId, - Url: url, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 提交音频降噪任务 -function postNoiseReduction() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/jobs'; - var url = 'https://' + host; - var body = COS.util.json2xml({ - Request: { - Tag: 'NoiseReduction', - Input: { - Object: 'ci/music.mp3', // 文件名,取值为文件在当前存储桶中的完整名称 - }, - Operation: { - Output: { - Bucket: config.Bucket, // 输出的存储桶 - Region: config.Region, // 输出的存储桶的地域 - Object: 'ci/out.mp3', // 输出的文件Key - }, - }, - // QueueId: '', // 任务所在的队列 ID,非必须 - // CallBackFormat: '', // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式,非必须 - // CallBackType: '', // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型,非必须 - // CallBack: '', // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调,非必须 - // CallBackMqConfig: '', // 任务回调 TDMQ 配置,当 CallBackType 为 TDMQ 时必填,非必须 - }, - }); - cos.request( - { - Method: 'POST', - Key: 'jobs', - Url: url, - Body: body, - ContentType: 'application/xml', - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 提交人声分离任务 -function postVoiceSeparate() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/jobs'; - var url = 'https://' + host; - var body = COS.util.json2xml({ - Request: { - Tag: 'VoiceSeparate', - Input: { - Object: 'ci/music.mp3', // 文件名,取值为文件在当前存储桶中的完整名称 - }, - Operation: { - // VoiceSeparate: {}, // 指定转码模板参数,非必须 - TemplateId: 't13fca82ad97e84878a22cd81bd2e5652c', // 指定的模板 ID,必须 - // JobLevel: 0, // 任务优先级,级别限制:0 、1 、2。级别越大任务优先级越高,默认为0,非必须 - Output: { - Bucket: config.Bucket, // 输出的存储桶 - Region: config.Region, // 输出的存储桶的地域 - Object: 'ci/out/background.mp3', // 输出的文件Key,背景音结果文件名,不能与 AuObject 同时为空 - AuObject: 'ci/out/audio.mp3', - }, - }, - // QueueId: '', // 任务所在的队列 ID,非必须 - // CallBackFormat: '', // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式,非必须 - // CallBackType: '', // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型,非必须 - // CallBack: '', // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调,非必须 - // CallBackMqConfig: '', // 任务回调 TDMQ 配置,当 CallBackType 为 TDMQ 时必填,非必须 - }, - }); - cos.request( - { - Method: 'POST', - Key: 'jobs', - Url: url, - Body: body, - ContentType: 'application/xml', - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 提交语音合成任务 -function postTts() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/jobs'; - var url = 'https://' + host; - var body = COS.util.json2xml({ - Request: { - Tag: 'Tts', - Operation: { - // VoiceSeparate: {}, // 指定转码模板参数,非必须 - TemplateId: 't192931b3564084168a3f50ebfea59acb3', // 指定的模板 ID,必须 - // JobLevel: 0, // 任务优先级,级别限制:0 、1 、2。级别越大任务优先级越高,默认为0,非必须 - TtsConfig: { - InputType: 'Text', - Input: '床前明月光,疑是地上霜', - }, - Output: { - Bucket: config.Bucket, // 输出的存储桶 - Region: config.Region, // 输出的存储桶的地域 - Object: 'ci/out/tts.mp3', // 输出的文件Key - }, - }, - // QueueId: '', // 任务所在的队列 ID,非必须 - // CallBackFormat: '', // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式,非必须 - // CallBackType: '', // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型,非必须 - // CallBack: '', // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调,非必须 - // CallBackMqConfig: '', // 任务回调 TDMQ 配置,当 CallBackType 为 TDMQ 时必填,非必须 - }, - }); - cos.request( - { - Method: 'POST', - Key: 'jobs', - Url: url, - Body: body, - ContentType: 'application/xml', - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 提交语音识别任务 -function postSpeechRecognition() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/asr_jobs'; - var url = 'https://' + host; - var body = COS.util.json2xml({ - Request: { - Tag: 'SpeechRecognition', - Input: { - Object: 'ci/music.mp3', // 文件名,取值为文件在当前存储桶中的完整名称,与Url参数二选一 - // Url: 'http://examplebucket-1250000000.cos.ap-shanghai.myqcloud.com/music.mp3', // 病毒文件的链接地址,与Object参数二选一 - }, - Operation: { - SpeechRecognition: { - EngineModelType: '16k_zh_video', // 引擎模型类型 - ChannelNum: 1, // 语音声道数 - ResTextFormat: 0, // 识别结果返回形式 - FilterDirty: 1, // 是否过滤脏词(目前支持中文普通话引擎) - FilterModal: 1, // 是否过语气词(目前支持中文普通话引擎) - ConvertNumMode: 0, // 是否进行阿拉伯数字智能转换(目前支持中文普通话引擎) - }, - Output: { - Bucket: config.Bucket, // 输出的存储桶 - Region: config.Region, // 输出的存储桶的地域 - Object: 'ci/out/SpeechRecognition.mp3', // 输出的文件Key - }, - }, - // QueueId: '', // 任务所在的队列 ID,非必须 - // CallBackFormat: '', // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式,非必须 - // CallBackType: '', // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型,非必须 - // CallBack: '', // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调,非必须 - // CallBackMqConfig: '', // 任务回调 TDMQ 配置,当 CallBackType 为 TDMQ 时必填,非必须 - }, - }); - cos.request( - { - Method: 'POST', - Key: 'asr_jobs', - Url: url, - Body: body, - ContentType: 'application/xml', - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 查询语音识别队列 -function getAsrQueue() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/asrqueue'; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Key: 'asrqueue', - Url: url, - Query: { - // queueIds: '', /* 非必须,队列 ID,以“,”符号分割字符串 */ - // state: '', /* 非必须,1=Active,2=Paused */ - // pageNumber: 1, /* 非必须,第几页 */ - // pageSize: 2, /* 非必须,每页个数 */ - }, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 更新语音识别队列 -function putAsrQueue() { - var queueId = 'pcc77499e85c311edb9865254008618d9'; - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/asrqueue/' + queueId; - var url = 'https://' + host; - var body = COS.util.json2xml({ - Request: { - Name: 'queue-doc-process-1', - QueueID: queueId, - State: 'Paused', - NotifyConfig: { - // Url: '', - // Type: 'Url', - // Event: '', - State: 'Off', - }, - }, - }); - cos.request( - { - Method: 'PUT', - Key: 'asrqueue/' + queueId, - Url: url, - Body: body, - ContentType: 'application/xml', - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 查询语音识别开通状态 -function getAsrBucket() { - var host = 'ci.' + config.Region + '.myqcloud.com/asrbucket'; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Key: 'asrbucket', - Url: url, - Query: { - // regions: '', /* 非必须,地域信息,以“,”分隔字符串,支持 All、ap-shanghai、ap-beijing */ - // bucketNames: '', /* 非必须,存储桶名称,以“,”分隔,支持多个存储桶,精确搜索 */ - // bucketName: '', /* 非必须,存储桶名称前缀,前缀搜索 */ - // pageNumber: 1, /* 非必须,第几页 */ - // pageSize: 10, /* 非必须,每页个数 */ - }, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 获取在线文档预览地址 -function getDocHtmlPreviewUrl() { - var key = 'test.pdf'; - var host = config.Bucket + '.cos.' + config.Region + '.myqcloud.com/' + key; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Key: key, - Url: url, - RawBody: true, - Query: { - 'ci-process': 'doc-preview' /* 必须,预览固定参数,值为 doc-preview */, - dstType: 'html' /* 必须,预览类型,如需预览生成类型为 html 则填入 html */, - weboffice_url: 1 /* 非必须,是否获取预览链接。填入值为1会返回预览链接和Token信息;填入值为2只返回Token信息;不传会直接预览 */, - }, - }, - function (err, data) { - // 从响应数据中解析出在线文档预览地址 - let body = {}; - if (data && data.Body) { - body = JSON.parse(data.Body) || {}; - } - if (body && body.PreviewUrl) { - data.PreviewUrl = body.PreviewUrl; - } - logger.log(err || data); - }, - ); -} - -// 开通文件处理服务 -function createFileProcessBucket() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/file_bucket'; - var url = 'https://' + host; - cos.request( - { - Method: 'POST', - Key: 'file_bucket', - Url: url, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 查询文件处理队列 -function describeFileProcessQueues() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/file_queue'; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Key: 'file_queue', - Url: url, - Query: { - // queueIds: '', /* 非必须,队列 ID,以“,”符号分割字符串 */ - state: - 'Active' /* 非必须,Active 表示队列内的作业会被调度执行。Paused 表示队列暂停,作业不再会被调度执行,队列内的所有作业状态维持在暂停状态,已经执行中的任务不受影响。 */, - pageNumber: 1 /* 第几页,默认值1 */, - pageSize: 10 /* 非必须,每页个数,默认值10 */, - }, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 更新文件处理队列 -function updateFileProcessQueue() { - var queueId = 'p6160ada105a7408e95aac015f4bf8xxx'; - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/file_queue/' + queueId; - var url = 'https://' + host; - var body = COS.util.json2xml({ - Request: { - Name: 'My-Queue-file', // 必须,队列名称,长度不超过128 - State: 'Active', // 必须,Active 表示队列内的作业会被调度执行。Paused 表示队列暂停,作业不再会被调度执行,队列内的所有作业状态维持在暂停状态,已经执行中的任务不受影响。 - NotifyConfig: { - // 必须,回调配置 - State: 'On', // 必须,回调开关,Off/On,默认Off - Event: 'TaskFinish', // 回调事件,当 State=On时, 必选。任务完成:TaskFinish;工作流完成:WorkflowFinish - ResultFormat: 'XML', // 非必选,回调格式,JSON/XML - Type: 'Url', // 回调类型,当 State=On时, 必选,Url 或 TDMQ - Url: 'https://www.example.com', // 回调地址,当 State=On, 且Type=Url时, 必选 - // MqMode: 'Off', // TDMQ 使用模式,当 State=On, 且Type=TDMQ时, 必选 - // MqRegion: 'Off', // TDMQ 所属园区,当 State=On, 且Type=TDMQ时, 必选 - // MqName: 'Off', // TDMQ 主题名称,当 State=On, 且Type=TDMQ时, 必选 - }, - }, - }); - cos.request( - { - Method: 'POST', - Key: 'file_queue/' + queueId, - Url: url, - Body: body, - ContentType: 'application/xml', - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 哈希值计算同步请求 -function generateFileHash() { - var key = 'test.pdf'; - var host = config.Bucket + '.cos.' + config.Region + '.myqcloud.com/' + key; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Key: key, - Url: url, - Query: { - 'ci-process': 'filehash' /* 必须,操作类型,哈希值计算固定为:filehash */, - type: 'md5' /* 必须,支持的哈希算法类型,有效值:md5、sha1、sha256 */, - // 'addtoheader': false, /* 非必须,是否将计算得到的哈希值,自动添加至文件的自定义header,格式为:x-cos-meta-md5/sha1/sha256;有效值:true、false,不填则默认为false。 */ - }, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 图片样式 - 增加样式 -function addImageStyle() { - var host = config.Bucket + '.pic.' + config.Region + '.myqcloud.com/?style'; - var url = 'https://' + host; - var body = COS.util.json2xml({ - AddStyle: { - StyleName: 'style_name1', // 必须,样式名称 - StyleBody: 'imageMogr2/thumbnail/!50px', // 必须,样式详情 - }, - }); - cos.request( - { - Method: 'PUT', - Url: url, - Body: body, - ContentType: 'application/xml', - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 图片样式 - 查询样式 -function describeImageStyles() { - var host = config.Bucket + '.pic.' + config.Region + '.myqcloud.com/?style'; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Url: url, - Query: { - 'style-name': 'style_name', // 非必填,样式名称 - }, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 图片样式 - 删除样式 -function deleteImageStyle() { - var host = config.Bucket + '.pic.' + config.Region + '.myqcloud.com/?style'; - var url = 'https://' + host; - var body = COS.util.json2xml({ - DeleteStyle: { - StyleName: 'style_name1', // 必须,样式名称 - }, - }); - cos.request( - { - Method: 'DELETE', - Url: url, - Body: body, - ContentType: 'application/xml', - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 开通 Guetzli 压缩 -function openImageGuetzli() { - var host = config.Bucket + '.pic.' + config.Region + '.myqcloud.com/?guetzli'; - var url = 'https://' + host; - cos.request( - { - Method: 'PUT', - Url: url, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 查询 Guetzli 状态 -function describeImageGuetzli() { - var host = config.Bucket + '.pic.' + config.Region + '.myqcloud.com/?guetzli'; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Url: url, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 关闭 Guetzli 压缩 -function closeImageGuetzli() { - var host = config.Bucket + '.pic.' + config.Region + '.myqcloud.com/?guetzli'; - var url = 'https://' + host; - cos.request( - { - Method: 'DELETE', - Url: url, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 上传时使用图片压缩 -function advanceCompressExample1() { - util.selectLocalFile(function (files) { - var file = files && files[0]; - if (!file) return; - if (file.type.indexOf('image') < 0) { - logger.error('Please select a photo to upload!'); - return; - } - if (file.size > 1024 * 1024) { - cos.sliceUploadFile( - { - Bucket: config.Bucket, // Bucket 格式:test-1250000000 - Region: config.Region, - Key: file.name, - Body: file, - Headers: { - // 通过 imageMogr2 接口进行 avif 压缩,可以根据需要压缩的类型填入不同的压缩格式:webp/heif/tpg/avif/svgc - 'Pic-Operations': - '{"is_pic_info": 1, "rules": [{"fileid": "desample_photo.jpg", "rule": "imageMogr2/format/avif"}]}', - }, - onTaskReady: function (tid) { - TaskId = tid; - }, - onHashProgress: function (progressData) { - logger.log('onHashProgress', JSON.stringify(progressData)); - }, - onProgress: function (progressData) { - logger.log('onProgress', JSON.stringify(progressData)); - }, - }, - function (err, data) { - logger.log('advanceCompressExample1:', err || data); - }, - ); - } else { - cos.putObject( - { - Bucket: config.Bucket, // Bucket 格式:test-1250000000 - Region: config.Region, - Key: file.name, - Body: file, - Headers: { - // 通过 imageMogr2 接口进行 avif 压缩,可以根据需要压缩的类型填入不同的压缩格式:webp/heif/tpg/avif/svgc - 'Pic-Operations': - '{"is_pic_info": 1, "rules": [{"fileid": "desample_photo.jpg", "rule": "imageMogr2/format/avif"}]}', - }, - onTaskReady: function (tid) { - TaskId = tid; - }, - onHashProgress: function (progressData) { - logger.log('onHashProgress', JSON.stringify(progressData)); - }, - onProgress: function (progressData) { - logger.log('onProgress', JSON.stringify(progressData)); - }, - }, - function (err, data) { - logger.log('advanceCompressExample1:', err || data); - }, - ); - } - }); -} - -// 对云上数据进行图片压缩 -function advanceCompressExample2() { - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Key: '1.png', - Method: 'POST', - Action: 'image_process', - Headers: { - // 通过 imageMogr2 接口进行 avif 压缩,可以根据需要压缩的类型填入不同的压缩格式:webp/heif/tpg/avif/svgc - 'Pic-Operations': - '{"is_pic_info": 1, "rules": [{"fileid": "desample_photo.jpg", "rule": "imageMogr2/format/avif"}]}', - }, - }, - function (err, data) { - logger.log('advanceCompressExample2:', err || data); - }, - ); -} - -// 下载时使用图片压缩 -function advanceCompressExample3() { - cos.getObject( - { - Bucket: config.Bucket, - Region: config.Region, - Key: '1.png', - QueryString: `imageMogr2/format/avif`, // 可以根据需要压缩的类型填入不同的压缩格式:webp/heif/tpg/avif/svgc - }, - function (err, data) { - logger.log('advanceCompressExample3:', err || data); - }, - ); -} - -// 异常图片检测 -function createImageInspectJob() { - var key = '1.png'; - var host = config.Bucket + '.cos.' + config.Region + '.myqcloud.com/' + key; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Key: key, - Url: url, - RawBody: true, - Query: { - 'ci-process': 'ImageInspect' /* 必须,操作类型,异常图片检测固定为:ImageInspect */, - }, - }, - function (err, data) { - // 从响应数据中解析出异常图片检测结果 - let body = {}; - if (data && data.Body) { - body = JSON.parse(data.Body) || {}; - if (body) { - data.body = body; - } - } - logger.log(err || data); - }, - ); -} - -// 查询图片处理队列 -function describePicProcessQueues() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/picqueue'; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Key: 'picqueue', - Url: url, - Query: { - // queueIds: '', /* 非必须,队列 ID,以“,”符号分割字符串 */ - state: - 'Active' /* 非必须,1. Active 表示队列内的作业会被媒体处理服务调度执行。2. Paused 表示队列暂停,作业不再会被媒体处理调度执行,队列内的所有作业状态维持在暂停状态,已经执行中的任务不受影响。 */, - pageNumber: 1 /* 非必须,第几页,默认值1 */, - pageSize: 10 /* 非必须,每页个数,默认值10 */, - }, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 更新图片处理队列 -function updatePicProcessQueue() { - var queueId = 'p882d181160d84feca27d9376e17c4xxx'; - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/picqueue/' + queueId; - var url = 'https://' + host; - var body = COS.util.json2xml({ - Request: { - Name: 'My-Queue-Pic', // 必须,队列名称,长度不超过128 - State: 'Active', // 必须,Active 表示队列内的作业会被调度执行。Paused 表示队列暂停,作业不再会被调度执行,队列内的所有作业状态维持在暂停状态,已经执行中的任务不受影响。 - NotifyConfig: { - // 必须,回调配置 - State: 'On', // 必须,回调开关,Off/On,默认Off - Event: 'TaskFinish', // 回调事件,当 State=On时, 必选。任务完成:TaskFinish;工作流完成:WorkflowFinish - ResultFormat: 'XML', // 非必选,回调格式,JSON/XML - Type: 'Url', // 回调类型,当 State=On时, 必选,Url 或 TDMQ - Url: 'https://www.example.com', // 回调地址,当 State=On, 且Type=Url时, 必选 - // MqMode: 'Off', // TDMQ 使用模式,当 State=On, 且Type=TDMQ时, 必选 - // MqRegion: 'Off', // TDMQ 所属园区,当 State=On, 且Type=TDMQ时, 必选 - // MqName: 'Off', // TDMQ 主题名称,当 State=On, 且Type=TDMQ时, 必选 - }, - }, - }); - cos.request( - { - Method: 'POST', - Key: 'picqueue/' + queueId, - Url: url, - Body: body, - ContentType: 'application/xml', - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 查询防盗链 -function describeRefer() { - var host = config.Bucket + '.pic.' + config.Region + '.myqcloud.com/?hotlink'; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Url: url, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 设置防盗链 -function setRefer() { - var host = config.Bucket + '.pic.' + config.Region + '.myqcloud.com/?hotlink'; - var url = 'https://' + host; - var body = COS.util.json2xml({ - Hotlink: { - Url: 'https://www.example.com', // 必须,域名地址 - Type: 'white', // 必须,防盗链类型,white 为白名单,black 为黑名单,off 为关闭。 - }, - }); - cos.request( - { - Method: 'PUT', - Url: url, - Body: body, - ContentType: 'application/xml', - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 开通原图保护 -function openOriginProtect() { - var host = config.Bucket + '.pic.' + config.Region + '.myqcloud.com/?origin-protect'; - var url = 'https://' + host; - cos.request( - { - Method: 'PUT', - Url: url, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 查询原图保护状态 -function describeOriginProtect() { - var host = config.Bucket + '.pic.' + config.Region + '.myqcloud.com/?origin-protect'; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Url: url, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 关闭原图保护 -function closeOriginProtect() { - var host = config.Bucket + '.pic.' + config.Region + '.myqcloud.com/?origin-protect'; - var url = 'https://' + host; - cos.request( - { - Method: 'DELETE', - Url: url, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 提交视频截帧任务 -function postSnapshot() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/jobs'; - var url = 'https://' + host; - var body = COS.util.json2xml({ - Request: { - Tag: 'Snapshot', // 必须,固定值 - Input: { - Object: 'ci/abc.mp4', // 文件名,取值为文件在当前存储桶中的完整名称 - }, - Operation: { - // TemplateId与Snapshot二选一传递 - // TemplateId: '', - Snapshot: { - Mode: 'Interval', // 截图模式 - Start: '1', // 开始时间 - Count: '1', // 截图数量 - }, - Output: { - Bucket: config.Bucket, // 输出的存储桶 - Region: config.Region, // 输出的存储桶的地域 - Object: 'ci/output/snapshot-${Number}.jpg', // 输出的文件 Key - }, - }, - }, - }); - cos.request( - { - Method: 'POST', - Key: 'jobs', - Url: url, - Body: body, - ContentType: 'application/xml', - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -(function () { - var list = [ - 'header-工具函数', - 'request', - 'getObjectUrl', - 'getAuth', - - //'getService', // 不支持,正常场景会跨域 - 'header-存储桶操作', - //'putBucket', // 不支持,正常场景会跨域 - 'headBucket', - 'putBucketAcl', - 'getBucketAcl', - 'putBucketCors', - 'getBucketCors', - // 'deleteBucketCors', // 不建议调用,删除 CORS,浏览器不能正常调用 - 'putBucketTagging', - 'getBucketTagging', - 'deleteBucketTagging', - 'putBucketPolicy', - 'getBucketPolicy', - 'deleteBucketPolicy', - 'getBucketLocation', - 'getBucketLifecycle', - 'putBucketLifecycle', - 'deleteBucketLifecycle', - 'putBucketVersioning', - 'getBucketVersioning', - 'getBucketReplication', - 'putBucketReplication', - 'deleteBucketReplication', - 'putBucketWebsite', - 'getBucketWebsite', - 'deleteBucketWebsite', - 'putBucketReferer', - 'getBucketReferer', - 'putBucketDomain', - 'getBucketDomain', - 'deleteBucketDomain', - 'putBucketLogging', - 'getBucketLogging', - 'deleteBucketLogging', - 'putBucketInventory', - 'postBucketInventory', - 'getBucketInventory', - 'deleteBucketInventory', - 'listBucketInventory', - 'putBucketEncryption', - 'getBucketEncryption', - 'deleteBucketEncryption', - 'deleteBucket', - - 'header-对象操作', - 'getBucket', - 'listObjectVersions', - 'putObjectCopy', - 'getObject', - 'headObject', - 'putObjectAcl', - 'getObjectAcl', - 'deleteObject', - 'deleteMultipleObject', - 'restoreObject', - 'abortUploadTask', - 'selectObjectContent', - 'putObject', - 'putObject_base64ToBlob', - 'appendObject', - 'appendObject_continue', + 'header-对象操作', + 'getBucket', + 'listObjectVersions', + 'putObjectCopy', + 'getObject', + 'headObject', + 'putObjectAcl', + 'getObjectAcl', + 'deleteObject', + 'deleteMultipleObject', + 'restoreObject', + 'abortUploadTask', + 'selectObjectContent', + 'putObject', + 'putObject_base64ToBlob', + 'appendObject', + 'appendObject_continue', 'header-高级操作', 'uploadFile', @@ -4762,81 +1767,6 @@ function postSnapshot() { 'cancelTask', 'pauseTask', 'restartTask', - - 'header-数据万象示例', - 'CIExample1', - 'CIExample2', - 'CIExample3', - 'CIExample4', - 'describeMediaBuckets', - 'getMediaInfo', - 'getSnapshot', - 'getImageAuditing', - 'postImagesAuditing', - 'getImageAuditingResult', - 'postVideoAuditing', - 'getVideoAuditingResult', - 'postAudioAuditing', - 'getAudioAuditingResult', - 'postTextAuditing', - 'getTextAuditingResult', - 'postDocumentAuditing', - 'getDocumentAuditingResult', - 'postWebpageAuditing', - 'getWebpageAuditingResult', - 'postLiveAuditing', - 'getLiveAuditingResult', - 'describeDocProcessBuckets', - 'getDocPreview', - 'describeDocProcessQueues', - 'updateDocProcessQueue', - 'createDocProcessJobs', - 'describeDocProcessJob', - 'describeDocProcessJobs', - 'getDocHtmlUrl', - 'getImageLabel', - 'identifyQrcode_put', - 'identifyQrcode_get', - 'generateQrcode', - 'ocr', - 'postFileCompress', - 'getFileCompress', - 'postFileUnCompress', - 'getFileUnCompress', - 'postFileHash', - 'getFileHashResult', - 'postVirusDetect', - 'getVirusDetectResult', - 'postNoiseReduction', - 'postVoiceSeparate', - 'postTts', - 'postSpeechRecognition', - 'getAsrQueue', - 'putAsrQueue', - 'getAsrBucket', - 'getDocHtmlPreviewUrl', - 'createFileProcessBucket', - 'describeFileProcessQueues', - 'updateFileProcessQueue', - 'generateFileHash', - 'addImageStyle', - 'describeImageStyles', - 'deleteImageStyle', - 'openImageGuetzli', - 'describeImageGuetzli', - 'closeImageGuetzli', - 'advanceCompressExample1', - 'advanceCompressExample2', - 'advanceCompressExample3', - 'createImageInspectJob', - 'describePicProcessQueues', - 'updatePicProcessQueue', - 'describeRefer', - 'setRefer', - 'openOriginProtect', - 'describeOriginProtect', - 'closeOriginProtect', - 'postSnapshot', ]; var labelMap = { putObject: '简单上传', @@ -4853,79 +1783,6 @@ function postSnapshot() { request: '通用请求接口', listFolder: '列出文件夹', deleteFolder: '删除文件夹(按前缀批量删除)', - CIExample1: '上传时使用图片处理', - CIExample2: '对云上数据进行图片处理', - CIExample3: '下载时使用图片处理', - CIExample4: '生成带图片处理参数的签名 URL', - describeMediaBuckets: '查询媒体处理开通情况', - getMediaInfo: '获取媒体文件信息', - getSnapshot: '获取媒体文件某个时间的截图', - getImageAuditing: '图片同步审核', - postImagesAuditing: '图片批量审核', - getImageAuditingResult: '查询图片审核任务结果', - postVideoAuditing: '提交视频审核任务', - getVideoAuditingResult: '查询视频审核任务结果', - postAudioAuditing: '提交音频审核任务', - getAudioAuditingResult: '查询音频审核任务结果', - postTextAuditing: '提交文本审核任务', - getTextAuditingResult: '查询文本审核任务结果', - postDocumentAuditing: '提交文档审核任务', - getDocumentAuditingResult: '查询文档审核任务结果', - postWebpageAuditing: '提交网页审核任务', - getWebpageAuditingResult: '查询网页审核任务结果', - postLiveAuditing: '提交直播审核任务', - getLiveAuditingResult: '查询直播审核任务结果', - describeDocProcessBuckets: '查询文档预览开通状态', - getDocPreview: '文档转码同步请求', - describeDocProcessQueues: '查询文档转码队列', - updateDocProcessQueue: '更新文档转码队列', - createDocProcessJobs: '提交文档预览任务 ', - describeDocProcessJob: '查询指定的文档预览任务', - describeDocProcessJobs: '拉取符合条件的文档预览任务', - getDocHtmlUrl: '文档转 HTML', - getImageLabel: '识别图片标签', - identifyQrcode_put: '二维码识别(上传时识别)', - identifyQrcode_get: '二维码识别(下载时识别)', - generateQrcode: '二维码生成', - ocr: '图片文字识别', - postFileCompress: '提交文件压缩任务', - getFileCompress: '查询文件压缩任务', - postFileUnCompress: '提交文件解压任务', - getFileUnCompress: '查询文件解压任务', - postFileHash: '提交哈希值计算任务', - getFileHashResult: '查询哈希值计算任务结果', - postVirusDetect: '提交病毒检测任务', - getVirusDetectResult: '查询病毒检测任务结果', - postNoiseReduction: '提交音频降噪任务', - postVoiceSeparate: '提交人声分离任务', - postTts: '提交语音合成任务', - postSpeechRecognition: '提交语音识别任务', - getAsrQueue: '查询语音识别队列', - putAsrQueue: '更新语音识别队列', - getAsrBucket: '查询语音识别开通状态', - getDocHtmlPreviewUrl: '获取在线文档预览地址', - createFileProcessBucket: '开通文件处理服务', - describeFileProcessQueues: '查询文件处理队列', - updateFileProcessQueue: '更新文件处理队列', - generateFileHash: '哈希值计算同步请求', - addImageStyle: '图片处理-增加样式', - describeImageStyles: '图片处理-查询样式', - deleteImageStyle: '图片处理-删除样式', - openImageGuetzli: '开通 Guetzli 压缩', - describeImageGuetzli: '查询 Guetzli 压缩', - closeImageGuetzli: '关闭 Guetzli 压缩', - advanceCompressExample1: '上传时使用图片压缩', - advanceCompressExample2: '对云上数据进行图片压缩', - advanceCompressExample3: '下载时使用图片压缩', - createImageInspectJob: '异常图片检测', - describePicProcessQueues: '查询图片处理队列', - updatePicProcessQueue: '更新图片处理队列', - describeRefer: '查询防盗链', - setRefer: '设置防盗链', - openOriginProtect: '开通原图保护', - describeOriginProtect: '查询原图保护状态', - closeOriginProtect: '关闭原图保护', - postSnapshot: '提交视频截帧任务', }; var container = document.querySelector('.cos-main'); var html = []; diff --git a/demo/index.html b/demo/index.html index 8c6b801..dc37866 100644 --- a/demo/index.html +++ b/demo/index.html @@ -62,6 +62,203 @@

cos-js-sdk-v5 cosMain.className = 'main cos-main'; ciMain.className = 'main cos-main show'; }); + + // config 替换成自己的存储桶和账号信息 + var config = { + Bucket: 'test-1250000000', + Region: 'ap-guangzhou', + Uin: '10001', + }; + var getAuthorization = function (options, callback) { + // 格式一、(推荐)后端通过获取临时密钥给到前端,前端计算签名 + // 服务端 JS 和 PHP 例子:https://github.com/tencentyun/cos-js-sdk-v5/blob/master/server/ + // 服务端其他语言参考 COS STS SDK :https://github.com/tencentyun/qcloud-cos-sts-sdk + var url = '/sts'; // 如果是 npm run sts.js 起的 nodejs server,使用这个 + var xhr = new XMLHttpRequest(); + xhr.open('POST', url, true); + xhr.setRequestHeader('Content-Type', 'application/json'); + xhr.onload = function (e) { + try { + var data = JSON.parse(e.target.responseText); + var credentials = data.credentials; + } catch (e) {} + if (!data || !credentials) { + return logger.error('credentials invalid:\n' + JSON.stringify(data, null, 2)); + } + callback({ + TmpSecretId: credentials.tmpSecretId, + TmpSecretKey: credentials.tmpSecretKey, + SecurityToken: credentials.sessionToken, + StartTime: data.startTime, // 时间戳,单位秒,如:1580000000,建议返回服务器时间作为签名的开始时间,避免用户浏览器本地时间偏差过大导致签名错误 + ExpiredTime: data.expiredTime, // 时间戳,单位秒,如:1580000000 + ScopeLimit: true, // 细粒度控制权限需要设为 true,会限制密钥只在相同请求时重复使用 + }); + }; + xhr.send(JSON.stringify(options.Scope)); + + // // 格式二、(推荐)【细粒度控制权限】后端通过获取临时密钥给到前端,前端只有相同请求才重复使用临时密钥,后端可以通过 Scope 细粒度控制权限 + // // 服务端例子:https://github.com/tencentyun/qcloud-cos-sts-sdk/edit/master/scope.md + // // var url = '../server/sts.php'; // 如果起的是 php server 用这个 + // var url = '/sts-scope'; // 如果是 npm run sts.js 起的 nodejs server,使用这个 + // var xhr = new XMLHttpRequest(); + // xhr.open('POST', url, true); + // xhr.setRequestHeader('Content-Type', 'application/json'); + // xhr.onload = function (e) { + // try { + // var data = JSON.parse(e.target.responseText); + // var credentials = data.credentials; + // } catch (e) { + // } + // if (!data || !credentials) { + // return logger.error('credentials invalid:\n' + JSON.stringify(data, null, 2)) + // }; + // callback({ + // TmpSecretId: credentials.tmpSecretId, + // TmpSecretKey: credentials.tmpSecretKey, + // SecurityToken: credentials.sessionToken, + // StartTime: data.startTime, // 时间戳,单位秒,如:1580000000,建议返回服务器时间作为签名的开始时间,避免用户浏览器本地时间偏差过大导致签名错误 + // ExpiredTime: data.expiredTime, // 时间戳,单位秒,如:1580000000 + // ScopeLimit: true, // 细粒度控制权限需要设为 true,会限制密钥只在相同请求时重复使用 + // }); + // }; + // xhr.send(JSON.stringify(options.Scope)); + + // // 格式三、(不推荐,分片上传权限不好控制)前端每次请求前都需要通过 getAuthorization 获取签名,后端使用固定密钥或临时密钥计算签名返回给前端 + // // 服务端获取签名,请参考对应语言的 COS SDK:https://cloud.tencent.com/document/product/436/6474 + // // 注意:这种有安全风险,后端需要通过 method、pathname 严格控制好权限,比如不允许 put / 等 + // var method = (options.Method || 'get').toLowerCase(); + // var query = options.Query || {}; + // var headers = options.Headers || {}; + // var pathname = options.Pathname || '/'; + // // var url = 'http://127.0.0.1:3000/auth'; + // var url = '../server/auth.php'; + // var xhr = new XMLHttpRequest(); + // var data = { + // method: method, + // pathname: pathname, + // query: query, + // headers: headers, + // }; + // xhr.open('POST', url, true); + // xhr.setRequestHeader('content-type', 'application/json'); + // xhr.onload = function (e) { + // try { + // var data = JSON.parse(e.target.responseText); + // } catch (e) { + // } + // if (!data || !data.authorization) return console.error('authorization invalid'); + // callback({ + // Authorization: data.authorization, + // // SecurityToken: data.sessionToken, // 如果使用临时密钥,需要把 sessionToken 传给 SecurityToken + // }); + // }; + // xhr.send(JSON.stringify(data)); + + // // 格式四、(不推荐,适用于前端调试,避免泄露密钥)前端使用固定密钥计算签名 + // var authorization = COS.getAuthorization({ + // SecretId: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', // 可传固定密钥或者临时密钥 + // SecretKey: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', // 可传固定密钥或者临时密钥 + // Method: options.Method, + // Pathname: options.Pathname, + // Query: options.Query, + // Headers: options.Headers, + // Expires: 900, + // }); + // callback({ + // Authorization: authorization, + // // SecurityToken: credentials.sessionToken, // 如果使用临时密钥,需要传 SecurityToken + // }); + }; + + var cos = new COS({ + getAuthorization: getAuthorization, + UploadCheckContentMd5: true, + }); + + var util = { + createFile: function (options) { + var buffer = new ArrayBuffer(options.size || 0); + var arr = new Uint8Array(buffer); + [].forEach.call(arr, function (char, i) { + arr[i] = 0; + }); + var opt = {}; + options.type && (opt.type = options.type); + var blob = new Blob([buffer], options); + return blob; + }, + selectLocalFile: function (onChange) { + var id = 'file_selector'; + var input = document.createElement('input'); + input.style = 'width:0;height:0;border:0;margin:0;padding:0;'; + input.type = 'file'; + input.id = id; + input.onchange = function (e) { + var files = this.files; + if (!files.length) return; + onChange && onChange(files); + document.body.removeChild(input); + }; + document.body.appendChild(input); + input.click(); + }, + }; + + // 对更多字符编码的 url encode 格式 + var camSafeUrlEncode = function (str) { + return encodeURIComponent(str) + .replace(/!/g, '%21') + .replace(/'/g, '%27') + .replace(/\(/g, '%28') + .replace(/\)/g, '%29') + .replace(/\*/g, '%2A'); + }; + + + + var pre = document.querySelector('.result'); + var showLogText = function (text, color) { + if (typeof text === 'object') { + try { + text = JSON.stringify(text); + } catch (e) {} + } + var div = document.createElement('div'); + div.innerText = text; + color && (div.style.color = color); + pre.appendChild(div); + pre.style.display = 'block'; + pre.scrollTop = pre.scrollHeight; + }; + + var logger = { + log: function (text) { + console.log.apply(console, arguments); + var args = [].map.call(arguments, function (v) { + return typeof v === 'object' ? JSON.stringify(v, null, 2) : v; + }); + + var logStr = args.join(' '); + + if (logStr.length > 1000000) { + logStr = logStr.slice(0, 1000000) + '...content is too long, the first 1000000 characters are intercepted'; + } + + showLogText(logStr); + }, + error: function (text) { + console.error(text); + showLogText(text, 'red'); + }, + }; + + /** + * 这里demo为了方便挂在了window上 实际使用请结合项目比如可使用模块导出 + * */ + window.config = config; + window.cos = cos; + window.util = util; + window.logger = logger; })(); diff --git a/index.d.ts b/index.d.ts index 4c29b11..5b7790b 100644 --- a/index.d.ts +++ b/index.d.ts @@ -162,7 +162,7 @@ declare namespace COS { Domain?: string; /** getService方法可以使用的自定义域名 */ ServiceDomain?: string; - /** http协议,枚举值'http:','https:'冒号必须 */ + /** http协议,枚举值'http:','https:' */ Protocol?: string; /** 开启兼容模式,默认 false 不开启,兼容模式下不校验 Region 是否格式有误,在用于私有化 COS 时使用 */ CompatibilityMode?: boolean; @@ -1948,6 +1948,10 @@ Bulk:批量模式,恢复时间为24 - 48小时。 */ Expires?: number; /** 是否使用全球加速域名,默认false */ UseAccelerate?: boolean; + /** 调用操作存储桶和对象的 API 时自定义请求域名。可以使用模板,如"{Bucket}.cos.{Region}.myqcloud.com",即在调用 API 时会使用参数中传入的 Bucket 和 Region 进行替换。 */ + Domain?: string; + /** http协议,枚举值'http:','https:' */ + Protocol?: string; } /** getObjectUrl 接口返回值 */ From 94df2d2fa0d71268303961e008923ffcaa0b13fe Mon Sep 17 00:00:00 2001 From: chrisftian Date: Thu, 3 Aug 2023 15:35:56 +0800 Subject: [PATCH 04/11] =?UTF-8?q?feat:=201=E3=80=81=E6=96=B0=E5=A2=9Ebase6?= =?UTF-8?q?4=E6=96=B9=E6=B3=95=202=E3=80=81=E4=BC=98=E5=8C=96d.ts=20(merge?= =?UTF-8?q?=20request=20!16)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Squash merge branch 'dev/1.4.19' into 'master' feat: 1、新增base64方法 2、优化d.ts --- demo/ciDemo.js | 2 +- demo/index.html | 1 + dist/cos-js-sdk-v5.js | 185 ++++++++++++++++++++++++++++++++++++-- dist/cos-js-sdk-v5.min.js | 2 +- index.d.ts | 11 ++- lib/base64.js | 170 +++++++++++++++++++++++++++++++++++ package.json | 4 +- src/cos.js | 1 + src/util.js | 11 +++ test/test.js | 3 +- 10 files changed, 378 insertions(+), 12 deletions(-) create mode 100644 lib/base64.js diff --git a/demo/ciDemo.js b/demo/ciDemo.js index fac65e5..5d46ec6 100644 --- a/demo/ciDemo.js +++ b/demo/ciDemo.js @@ -419,8 +419,8 @@ function postTextAuditing() { var body = COS.util.json2xml({ Request: { Input: { + Content: COS.util.encodeBase64('乳沟'), // 经过base64编码过的文本”乳沟“,查询结果同步返回 // Object: 'hello.txt', // 存在cos里的资源,审核结果异步返回,可以调用查询文本审核结果api查询 - Content: '5Lmz5rKf', // 经过base64编码过的文本”乳沟“,查询结果同步返回 }, Conf: { BizType: '', diff --git a/demo/index.html b/demo/index.html index dc37866..3b14c6b 100644 --- a/demo/index.html +++ b/demo/index.html @@ -259,6 +259,7 @@

cos-js-sdk-v5 window.cos = cos; window.util = util; window.logger = logger; + window.camSafeUrlEncode = camSafeUrlEncode; })(); diff --git a/dist/cos-js-sdk-v5.js b/dist/cos-js-sdk-v5.js index 94b8d04..aa60054 100644 --- a/dist/cos-js-sdk-v5.js +++ b/dist/cos-js-sdk-v5.js @@ -109,6 +109,167 @@ module.exports = COS; /***/ }), +/***/ "./lib/base64.js": +/*!***********************!*\ + !*** ./lib/base64.js ***! + \***********************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +/* + * $Id: base64.js,v 2.15 2014/04/05 12:58:57 dankogai Exp dankogai $ + * + * Licensed under the BSD 3-Clause License. + * http://opensource.org/licenses/BSD-3-Clause + * + * References: + * http://en.wikipedia.org/wiki/Base64 + */ +var Base64 = function (global) { + global = global || {}; + 'use strict'; // existing version for noConflict() + + + var _Base64 = global.Base64; + var version = "2.1.9"; // if node.js, we use Buffer + + var buffer; // constants + + var b64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; + + var b64tab = function (bin) { + var t = {}; + + for (var i = 0, l = bin.length; i < l; i++) { + t[bin.charAt(i)] = i; + } + + return t; + }(b64chars); + + var fromCharCode = String.fromCharCode; // encoder stuff + + var cb_utob = function cb_utob(c) { + if (c.length < 2) { + var cc = c.charCodeAt(0); + return cc < 0x80 ? c : cc < 0x800 ? fromCharCode(0xc0 | cc >>> 6) + fromCharCode(0x80 | cc & 0x3f) : fromCharCode(0xe0 | cc >>> 12 & 0x0f) + fromCharCode(0x80 | cc >>> 6 & 0x3f) + fromCharCode(0x80 | cc & 0x3f); + } else { + var cc = 0x10000 + (c.charCodeAt(0) - 0xD800) * 0x400 + (c.charCodeAt(1) - 0xDC00); + return fromCharCode(0xf0 | cc >>> 18 & 0x07) + fromCharCode(0x80 | cc >>> 12 & 0x3f) + fromCharCode(0x80 | cc >>> 6 & 0x3f) + fromCharCode(0x80 | cc & 0x3f); + } + }; + + var re_utob = /[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g; + + var utob = function utob(u) { + return u.replace(re_utob, cb_utob); + }; + + var cb_encode = function cb_encode(ccc) { + var padlen = [0, 2, 1][ccc.length % 3], + ord = ccc.charCodeAt(0) << 16 | (ccc.length > 1 ? ccc.charCodeAt(1) : 0) << 8 | (ccc.length > 2 ? ccc.charCodeAt(2) : 0), + chars = [b64chars.charAt(ord >>> 18), b64chars.charAt(ord >>> 12 & 63), padlen >= 2 ? '=' : b64chars.charAt(ord >>> 6 & 63), padlen >= 1 ? '=' : b64chars.charAt(ord & 63)]; + return chars.join(''); + }; + + var btoa = global.btoa ? function (b) { + return global.btoa(b); + } : function (b) { + return b.replace(/[\s\S]{1,3}/g, cb_encode); + }; + + var _encode = buffer ? function (u) { + return (u.constructor === buffer.constructor ? u : new buffer(u)).toString('base64'); + } : function (u) { + return btoa(utob(u)); + }; + + var encode = function encode(u, urisafe) { + return !urisafe ? _encode(String(u)) : _encode(String(u)).replace(/[+\/]/g, function (m0) { + return m0 == '+' ? '-' : '_'; + }).replace(/=/g, ''); + }; + + var encodeURI = function encodeURI(u) { + return encode(u, true); + }; // decoder stuff + + + var re_btou = new RegExp(['[\xC0-\xDF][\x80-\xBF]', '[\xE0-\xEF][\x80-\xBF]{2}', '[\xF0-\xF7][\x80-\xBF]{3}'].join('|'), 'g'); + + var cb_btou = function cb_btou(cccc) { + switch (cccc.length) { + case 4: + var cp = (0x07 & cccc.charCodeAt(0)) << 18 | (0x3f & cccc.charCodeAt(1)) << 12 | (0x3f & cccc.charCodeAt(2)) << 6 | 0x3f & cccc.charCodeAt(3), + offset = cp - 0x10000; + return fromCharCode((offset >>> 10) + 0xD800) + fromCharCode((offset & 0x3FF) + 0xDC00); + + case 3: + return fromCharCode((0x0f & cccc.charCodeAt(0)) << 12 | (0x3f & cccc.charCodeAt(1)) << 6 | 0x3f & cccc.charCodeAt(2)); + + default: + return fromCharCode((0x1f & cccc.charCodeAt(0)) << 6 | 0x3f & cccc.charCodeAt(1)); + } + }; + + var btou = function btou(b) { + return b.replace(re_btou, cb_btou); + }; + + var cb_decode = function cb_decode(cccc) { + var len = cccc.length, + padlen = len % 4, + n = (len > 0 ? b64tab[cccc.charAt(0)] << 18 : 0) | (len > 1 ? b64tab[cccc.charAt(1)] << 12 : 0) | (len > 2 ? b64tab[cccc.charAt(2)] << 6 : 0) | (len > 3 ? b64tab[cccc.charAt(3)] : 0), + chars = [fromCharCode(n >>> 16), fromCharCode(n >>> 8 & 0xff), fromCharCode(n & 0xff)]; + chars.length -= [0, 0, 2, 1][padlen]; + return chars.join(''); + }; + + var atob = global.atob ? function (a) { + return global.atob(a); + } : function (a) { + return a.replace(/[\s\S]{1,4}/g, cb_decode); + }; + + var _decode = buffer ? function (a) { + return (a.constructor === buffer.constructor ? a : new buffer(a, 'base64')).toString(); + } : function (a) { + return btou(atob(a)); + }; + + var decode = function decode(a) { + return _decode(String(a).replace(/[-_]/g, function (m0) { + return m0 == '-' ? '+' : '/'; + }).replace(/[^A-Za-z0-9\+\/]/g, '')); + }; + + var noConflict = function noConflict() { + var Base64 = global.Base64; + global.Base64 = _Base64; + return Base64; + }; // export Base64 + + + var Base64 = { + VERSION: version, + atob: atob, + btoa: btoa, + fromBase64: decode, + toBase64: encode, + utob: utob, + encode: encode, + encodeURI: encodeURI, + btou: btou, + decode: decode, + noConflict: noConflict + }; + return Base64; +}(); + +module.exports = Base64; + +/***/ }), + /***/ "./lib/beacon.min.js": /*!***************************!*\ !*** ./lib/beacon.min.js ***! @@ -6948,7 +7109,7 @@ module.exports = function(module) { /*! exports provided: name, version, description, main, types, scripts, repository, keywords, author, license, bugs, homepage, dependencies, devDependencies, default */ /***/ (function(module) { -module.exports = JSON.parse("{\"name\":\"cos-js-sdk-v5\",\"version\":\"1.4.18\",\"description\":\"JavaScript SDK for [腾讯云对象存储](https://cloud.tencent.com/product/cos)\",\"main\":\"dist/cos-js-sdk-v5.js\",\"types\":\"index.d.ts\",\"scripts\":{\"prettier\":\"prettier --write src demo/demo.js test/test.js server/sts.js index.d.ts\",\"server\":\"node server/sts.js\",\"dev\":\"cross-env NODE_ENV=development webpack -w --mode=development\",\"build\":\"cross-env NODE_ENV=production webpack --mode=production\",\"cos-auth.min.js\":\"uglifyjs ./demo/common/cos-auth.js -o ./demo/common/cos-auth.min.js -c -m\",\"test\":\"jest --runInBand --coverage\"},\"repository\":{\"type\":\"git\",\"url\":\"git+https://github.com/tencentyun/cos-js-sdk-v5.git\"},\"keywords\":[],\"author\":\"carsonxu\",\"license\":\"ISC\",\"bugs\":{\"url\":\"https://github.com/tencentyun/cos-js-sdk-v5/issues\"},\"homepage\":\"https://github.com/tencentyun/cos-js-sdk-v5#readme\",\"dependencies\":{\"@xmldom/xmldom\":\"^0.8.6\"},\"devDependencies\":{\"@babel/core\":\"7.17.9\",\"@babel/plugin-transform-runtime\":\"7.18.10\",\"@babel/preset-env\":\"7.16.11\",\"babel-loader\":\"8.2.5\",\"body-parser\":\"^1.18.3\",\"cross-env\":\"^5.2.0\",\"express\":\"^4.16.4\",\"jest\":\"^29.3.1\",\"jest-environment-jsdom\":\"^29.3.1\",\"prettier\":\"2.8.8\",\"qcloud-cos-sts\":\"^3.0.2\",\"request\":\"^2.87.0\",\"terser-webpack-plugin\":\"4.2.3\",\"uglifyjs\":\"^2.4.11\",\"webpack\":\"4.46.0\",\"webpack-cli\":\"4.10.0\"}}"); +module.exports = JSON.parse("{\"name\":\"cos-js-sdk-v5\",\"version\":\"1.4.19\",\"description\":\"JavaScript SDK for [腾讯云对象存储](https://cloud.tencent.com/product/cos)\",\"main\":\"dist/cos-js-sdk-v5.js\",\"types\":\"index.d.ts\",\"scripts\":{\"prettier\":\"prettier --write src demo/demo.js test/test.js server/sts.js index.d.ts\",\"server\":\"node server/sts.js\",\"dev\":\"cross-env NODE_ENV=development webpack -w --mode=development\",\"build\":\"cross-env NODE_ENV=production webpack --mode=production\",\"cos-auth.min.js\":\"uglifyjs ./demo/common/cos-auth.js -o ./demo/common/cos-auth.min.js -c -m\",\"test\":\"jest --runInBand --coverage\"},\"repository\":{\"type\":\"git\",\"url\":\"git+https://github.com/tencentyun/cos-js-sdk-v5.git\"},\"keywords\":[],\"author\":\"carsonxu\",\"license\":\"ISC\",\"bugs\":{\"url\":\"https://github.com/tencentyun/cos-js-sdk-v5/issues\"},\"homepage\":\"https://github.com/tencentyun/cos-js-sdk-v5#readme\",\"dependencies\":{\"@xmldom/xmldom\":\"^0.8.6\"},\"devDependencies\":{\"@babel/core\":\"7.17.9\",\"@babel/plugin-transform-runtime\":\"7.18.10\",\"@babel/preset-env\":\"7.16.11\",\"babel-loader\":\"8.2.5\",\"body-parser\":\"^1.18.3\",\"cross-env\":\"^5.2.0\",\"express\":\"^4.16.4\",\"jest\":\"^29.3.1\",\"jest-environment-jsdom\":\"^29.3.1\",\"prettier\":\"^3.0.1\",\"qcloud-cos-sts\":\"^3.0.2\",\"request\":\"^2.87.0\",\"terser-webpack-plugin\":\"4.2.3\",\"uglifyjs\":\"^2.4.11\",\"webpack\":\"4.46.0\",\"webpack-cli\":\"4.10.0\"}}"); /***/ }), @@ -10061,7 +10222,7 @@ function submitBucketInventory(method, params, callback) { } /** * 创建一个清单任务 -*/ + */ function putBucketInventory(params, callback) { @@ -10069,7 +10230,7 @@ function putBucketInventory(params, callback) { } /** * 创建一个一次性清单任务 会立即执行 -*/ + */ function postBucketInventory(params, callback) { @@ -12717,7 +12878,8 @@ advance.init(COS, task); COS.util = { md5: util.md5, xml2json: util.xml2json, - json2xml: util.json2xml + json2xml: util.json2xml, + encodeBase64: util.encodeBase64 }; COS.getAuthorization = util.getAuth; COS.version = pkg.version; @@ -13682,6 +13844,8 @@ var xml2json = __webpack_require__(/*! ../lib/xml2json */ "./lib/xml2json.js"); var json2xml = __webpack_require__(/*! ../lib/json2xml */ "./lib/json2xml.js"); +var base64 = __webpack_require__(/*! ../lib/base64 */ "./lib/base64.js"); + var Tracker = __webpack_require__(/*! ./tracker */ "./src/tracker.js"); function camSafeUrlEncode(str) { @@ -14512,6 +14676,16 @@ var isQQ = function () { return /\sQQ/i.test(navigator.userAgent); }(); +var encodeBase64 = function encodeBase64(str, safe) { + var base64Str = base64.encode(str); // 万象使用的安全base64格式需要特殊处理 + + if (safe) { + base64Str = base64Str.replaceAll('+', '-').replaceAll('/', '_').replaceAll('=', ''); + } + + return base64Str; +}; + var util = { noop: noop, formatParams: formatParams, @@ -14546,7 +14720,8 @@ var util = { isBrowser: true, isNode: isNode, isCIHost: isCIHost, - isIOS_QQ: isIOS && isQQ + isIOS_QQ: isIOS && isQQ, + encodeBase64: encodeBase64 }; module.exports = util; /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../node_modules/process/browser.js */ "./node_modules/process/browser.js"))) diff --git a/dist/cos-js-sdk-v5.min.js b/dist/cos-js-sdk-v5.min.js index d3873d7..816eb32 100644 --- a/dist/cos-js-sdk-v5.min.js +++ b/dist/cos-js-sdk-v5.min.js @@ -1 +1 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.COS=t():e.COS=t()}(this,(function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/dist/",n(n.s=10)}([function(e,t){function n(t){return e.exports=n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},e.exports.__esModule=!0,e.exports.default=e.exports,n(t)}e.exports=n,e.exports.__esModule=!0,e.exports.default=e.exports},function(e,t,n){"use strict";(function(t){var r=n(0),o=n(12),i=n(15),a=n(16),s=n(21),c=n(6);function u(e){return encodeURIComponent(e).replace(/!/g,"%21").replace(/'/g,"%27").replace(/\(/g,"%28").replace(/\)/g,"%29").replace(/\*/g,"%2A")}function l(e,t){var n=[];for(var r in e)e.hasOwnProperty(r)&&n.push(t?u(r).toLowerCase():r);return n.sort((function(e,t){return(e=e.toLowerCase())===(t=t.toLowerCase())?0:e>t?1:-1}))}var d,p=["cache-control","content-disposition","content-encoding","content-length","content-md5","expect","expires","host","if-match","if-modified-since","if-none-match","if-unmodified-since","origin","range","transfer-encoding"],f=function(e,t,n){var r=t/8,o=e.slice(n,n+r);return new Uint8Array(o).reverse(),new{8:Uint8Array,16:Uint16Array,32:Uint32Array}[t](o)[0]},h=function(e,t,n,r){var o=e.slice(t,n),i="";return new Uint8Array(o).forEach((function(e){i+=String.fromCharCode(e)})),r&&(i=decodeURIComponent(escape(i))),i},m=function(){},g=function(e){var t={};for(var n in e)e.hasOwnProperty(n)&&void 0!==e[n]&&null!==e[n]&&(t[n]=e[n]);return t},y=(d=function(e,t){e=e.split("."),t=t.split(".");for(var n=0;nparseInt(t[n])?1:-1;return 0},function(e){if(!e)return!1;var t=(e.match(/Chrome\/([.\d]+)/)||[])[1],n=(e.match(/QBCore\/([.\d]+)/)||[])[1],r=(e.match(/QQBrowser\/([.\d]+)/)||[])[1];return t&&d(t,"53.0.2785.116")<0&&n&&d(n,"3.53.991.400")<0&&r&&d(r,"9.0.2524.400")<=0||!1}("undefined"!=typeof navigator&&navigator.userAgent)),v=1048576;function C(e){return T(e,(function(e){return"object"===r(e)&&null!==e?C(e):e}))}function k(e,t){return b(t,(function(n,r){e[r]=t[r]})),e}function S(e){return e instanceof Array}function b(e,t){for(var n in e)e.hasOwnProperty(n)&&t(e[n],n)}function T(e,t){var n=S(e)?[]:{};for(var r in e)e.hasOwnProperty(r)&&(n[r]=t(e[r],r));return n}var R=function(e,t){var n=t.Bucket,r=t.Region,o=t.Key,i=this.options.Domain,a=!i||"string"==typeof i&&i.indexOf("{Bucket}")>-1,s=!i||"string"==typeof i&&i.indexOf("{Region}")>-1;if(e.indexOf("Bucket")>-1||"deleteMultipleObject"===e||"multipartList"===e||"listObjectVersions"===e){if(a&&!n)return"Bucket";if(s&&!r)return"Region"}else if(e.indexOf("Object")>-1||e.indexOf("multipart")>-1||"sliceUploadFile"===e||"abortUploadTask"===e){if(a&&!n)return"Bucket";if(s&&!r)return"Region";if(!o)return"Key"}return!1},E=function(e,t){if(t=k({},t),"getAuth"!==e&&"getV4Auth"!==e&&"getObjectUrl"!==e){var n=t.Headers||{};if(t&&"object"===r(t)){!function(){for(var e in t)t.hasOwnProperty(e)&&e.indexOf("x-cos-")>-1&&(n[e]=t[e])}();I.each({"x-cos-mfa":"MFA","Content-MD5":"ContentMD5","Content-Length":"ContentLength","Content-Type":"ContentType",Expect:"Expect",Expires:"Expires","Cache-Control":"CacheControl","Content-Disposition":"ContentDisposition","Content-Encoding":"ContentEncoding",Range:"Range","If-Modified-Since":"IfModifiedSince","If-Unmodified-Since":"IfUnmodifiedSince","If-Match":"IfMatch","If-None-Match":"IfNoneMatch","x-cos-copy-source":"CopySource","x-cos-copy-source-Range":"CopySourceRange","x-cos-metadata-directive":"MetadataDirective","x-cos-copy-source-If-Modified-Since":"CopySourceIfModifiedSince","x-cos-copy-source-If-Unmodified-Since":"CopySourceIfUnmodifiedSince","x-cos-copy-source-If-Match":"CopySourceIfMatch","x-cos-copy-source-If-None-Match":"CopySourceIfNoneMatch","x-cos-acl":"ACL","x-cos-grant-read":"GrantRead","x-cos-grant-write":"GrantWrite","x-cos-grant-full-control":"GrantFullControl","x-cos-grant-read-acp":"GrantReadAcp","x-cos-grant-write-acp":"GrantWriteAcp","x-cos-storage-class":"StorageClass","x-cos-traffic-limit":"TrafficLimit","x-cos-mime-limit":"MimeLimit","x-cos-server-side-encryption-customer-algorithm":"SSECustomerAlgorithm","x-cos-server-side-encryption-customer-key":"SSECustomerKey","x-cos-server-side-encryption-customer-key-MD5":"SSECustomerKeyMD5","x-cos-server-side-encryption":"ServerSideEncryption","x-cos-server-side-encryption-cos-kms-key-id":"SSEKMSKeyId","x-cos-server-side-encryption-context":"SSEContext","Pic-Operations":"PicOperations"},(function(e,r){void 0!==t[e]&&(n[r]=t[e])})),t.Headers=g(n)}}return t},w=function(e){return Date.now()+(e||0)},x="object"===("undefined"==typeof navigator?"undefined":r(navigator))&&!!navigator.userAgent.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/),A="object"===("undefined"==typeof navigator?"undefined":r(navigator))&&/\sQQ/i.test(navigator.userAgent),I={noop:m,formatParams:E,apiWrapper:function(e,t){return function(n,r){var o,i=this;if("function"==typeof n&&(r=n,n={}),n=E(e,n),i.options.EnableTracker)if("sliceUploadFile"===n.calledBySdk)o=n.tracker&&n.tracker.generateSubTracker({apiName:e});else if(["uploadFile","uploadFiles"].includes(e))o=null;else{var a=-1;n.Body&&(a="string"==typeof n.Body?n.Body.length:n.Body.size||n.Body.byteLength||-1),o=new c({bucket:n.Bucket,region:n.Region,apiName:e,fileKey:n.Key,fileSize:a,deepTracker:i.options.DeepTracker,customId:i.options.CustomId,delay:i.options.TrackerDelay})}n.tracker=o;var s=function(e){return e&&e.headers&&(e.headers["x-cos-request-id"]&&(e.RequestId=e.headers["x-cos-request-id"]),e.headers["x-ci-request-id"]&&(e.RequestId=e.headers["x-ci-request-id"]),e.headers["x-cos-version-id"]&&(e.VersionId=e.headers["x-cos-version-id"]),e.headers["x-cos-delete-marker"]&&(e.DeleteMarker=e.headers["x-cos-delete-marker"])),e},u=function(e,t){o&&o.formatResult(e,t),r&&r(s(e),s(t))},l=function(){if("getService"!==e&&"abortUploadTask"!==e){var t=R.call(i,e,n);if(t)return"missing param "+t;if(n.Region){if(i.options.CompatibilityMode){if(!/^([a-z\d-.]+)$/.test(n.Region))return"Region format error."}else{if(n.Region.indexOf("cos.")>-1)return'param Region should not be start with "cos."';if(!/^([a-z\d-]+)$/.test(n.Region))return"Region format error."}!i.options.CompatibilityMode&&-1===n.Region.indexOf("-")&&"yfb"!==n.Region&&"default"!==n.Region&&n.Region}if(n.Bucket){if(!/^([a-z\d-]+)-(\d+)$/.test(n.Bucket))if(n.AppId)n.Bucket=n.Bucket+"-"+n.AppId;else{if(!i.options.AppId)return'Bucket should format as "test-1250000000".';n.Bucket=n.Bucket+"-"+i.options.AppId}n.AppId&&delete n.AppId}!i.options.UseRawKey&&n.Key&&"/"===n.Key.substr(0,1)&&(n.Key=n.Key.substr(1))}}(),d=["getAuth","getObjectUrl"].includes(e);if("function"==typeof Promise&&!d&&!r)return new Promise((function(e,o){if(r=function(t,n){t?o(t):e(n)},l)return u(I.error(new Error(l)));t.call(i,n,u)}));if(l)return u(I.error(new Error(l)));var p=t.call(i,n,u);return d?p:void 0}},xml2json:a,json2xml:s,md5:o,clearKey:g,fileSlice:function(e,t,n,r,o){var i;if(e.slice?i=e.slice(t,n):e.mozSlice?i=e.mozSlice(t,n):e.webkitSlice&&(i=e.webkitSlice(t,n)),r&&y){var a=new FileReader;a.onload=function(e){i=null,o(new Blob([a.result]))},a.readAsArrayBuffer(i)}else o(i)},getBodyMd5:function(e,t,n,r){n=n||m,e?"string"==typeof t?n(I.md5(t,!0)):Blob&&t instanceof Blob?I.getFileMd5(t,(function(e,t){n(t)}),r):n():n()},getFileMd5:function(e,t,n){var r=e.size,i=0,a=o.getCtx();!function o(s){if(s>=r){var c=a.digest("hex");t(null,c)}else{var u=Math.min(r,s+v);I.fileSlice(e,s,u,!1,(function(e){!function(e,t){var n,r=new FileReader;FileReader.prototype.readAsBinaryString?(n=FileReader.prototype.readAsBinaryString,r.onload=function(){t(this.result)}):FileReader.prototype.readAsArrayBuffer&&(n=function(e){var n="",r=new FileReader;r.onload=function(e){for(var o=new Uint8Array(r.result),i=o.byteLength,a=0;a-1||p.indexOf(r)>-1)&&(t[n]=e[n])}return t}(C(e.Headers||e.headers||{})),u=e.Key||"";e.UseRawKey?t=e.Pathname||e.pathname||"/"+u:0!==(t=e.Pathname||e.pathname||u).indexOf("/")&&(t="/"+t);var d=!1!==e.ForceSignHost;if(!c.Host&&!c.host&&e.Bucket&&e.Region&&d&&(c.Host=e.Bucket+".cos."+e.Region+".myqcloud.com"),!n)throw new Error("missing param SecretId");if(!r)throw new Error("missing param SecretKey");var f=Math.round(w(e.SystemClockOffset)/1e3)-1,h=f,m=e.Expires||e.expires;h+=void 0===m?900:1*m||0;var g=n,y=o||f+";"+h,v=o||f+";"+h,k=l(c,!0).join(";").toLowerCase(),S=l(s,!0).join(";").toLowerCase(),b=i.HmacSHA1(v,r).toString(),T=[a,t,I.obj2str(s,!0),I.obj2str(c,!0),""].join("\n"),R=["sha1",y,i.SHA1(T).toString(),""].join("\n");return["q-sign-algorithm=sha1","q-ak="+g,"q-sign-time="+y,"q-key-time="+v,"q-header-list="+k,"q-url-param-list="+S,"q-signature="+i.HmacSHA1(R,b).toString()].join("&")},parseSelectPayload:function(e){for(var t={},n=h(e),r={records:[]};e.byteLength;){var o,i=f(e,32,0),a=f(e,32,4),s=i-a-16,c=0;for(e=e.slice(12);c1)for(var n=1;n=0))throw new I(x,new Error(e.tagName+"@"+n));for(var o=t.length-1;r"==e&&">")||"&"==e&&"&"||'"'==e&&"""||"&#"+e.charCodeAt()+";"}function j(e,t){if(t(e))return!0;if(e=e.firstChild)do{if(j(e,t))return!0}while(e=e.nextSibling)}function F(){this.ownerDocument=this}function K(e,t,n,r){e&&e._inc++,n.namespaceURI===i.XMLNS&&delete t._nsMap[n.prefix?n.localName:""]}function q(e,t,n){if(e&&e._inc){e._inc++;var r=t.childNodes;if(n)r[r.length++]=n;else{for(var o=t.firstChild,i=0;o;)r[i++]=o,o=o.nextSibling;r.length=i,delete r[r.length]}}}function z(e,t){var n=t.previousSibling,r=t.nextSibling;return n?n.nextSibling=r:e.firstChild=r,r?r.previousSibling=n:e.lastChild=n,t.parentNode=null,t.previousSibling=null,t.nextSibling=null,q(e.ownerDocument,e),t}function G(e){return e&&e.nodeType===H.DOCUMENT_TYPE_NODE}function V(e){return e&&e.nodeType===H.ELEMENT_NODE}function X(e){return e&&e.nodeType===H.TEXT_NODE}function W(e,t){var n=e.childNodes||[];if(o(n,V)||G(t))return!1;var r=o(n,G);return!(t&&r&&n.indexOf(r)>n.indexOf(t))}function Q(e,t){var n=e.childNodes||[];if(o(n,(function(e){return V(e)&&e!==t})))return!1;var r=o(n,G);return!(t&&r&&n.indexOf(r)>n.indexOf(t))}function J(e,t,n){if(!function(e){return e&&(e.nodeType===H.DOCUMENT_NODE||e.nodeType===H.DOCUMENT_FRAGMENT_NODE||e.nodeType===H.ELEMENT_NODE)}(e))throw new I(w,"Unexpected parent node type "+e.nodeType);if(n&&n.parentNode!==e)throw new I(x,"child not in parent");if(!function(e){return e&&(V(e)||X(e)||G(e)||e.nodeType===H.DOCUMENT_FRAGMENT_NODE||e.nodeType===H.COMMENT_NODE||e.nodeType===H.PROCESSING_INSTRUCTION_NODE)}(t)||G(t)&&e.nodeType!==H.DOCUMENT_NODE)throw new I(w,"Unexpected node type "+t.nodeType+" for parent node type "+e.nodeType)}function $(e,t,n){var r=e.childNodes||[],i=t.childNodes||[];if(t.nodeType===H.DOCUMENT_FRAGMENT_NODE){var a=i.filter(V);if(a.length>1||o(i,X))throw new I(w,"More than one element or text in fragment");if(1===a.length&&!W(e,n))throw new I(w,"Element in fragment can not be inserted before doctype")}if(V(t)&&!W(e,n))throw new I(w,"Only one element can be added and only after doctype");if(G(t)){if(o(r,G))throw new I(w,"Only one doctype is allowed");var s=o(r,V);if(n&&r.indexOf(s)1||o(i,X))throw new I(w,"More than one element or text in fragment");if(1===a.length&&!Q(e,n))throw new I(w,"Element in fragment can not be inserted before doctype")}if(V(t)&&!Q(e,n))throw new I(w,"Only one element can be added and only after doctype");if(G(t)){if(o(r,(function(e){return G(e)&&e!==n})))throw new I(w,"Only one doctype is allowed");var s=o(r,V);if(n&&r.indexOf(s)=0;T--){if(""===(R=o[T]).prefix&&R.namespace===e.namespaceURI){d=R.namespace;break}}if(d!==e.namespaceURI)for(T=o.length-1;T>=0;T--){var R;if((R=o[T]).namespace===e.namespaceURI){R.prefix&&(l=R.prefix+":"+u);break}}}t.push("<",l);for(var E=0;E"),n&&/^script$/i.test(u))for(;c;)c.data?t.push(c.data):ge(c,t,n,r,o.slice()),c=c.nextSibling;else for(;c;)ge(c,t,n,r,o.slice()),c=c.nextSibling;t.push("")}else t.push("/>");return;case k:case b:for(c=e.firstChild;c;)ge(c,t,n,r,o.slice()),c=c.nextSibling;return;case f:return me(t,e.name,e.value);case h:return t.push(e.data.replace(/[<&>]/g,L));case m:return t.push("");case C:return t.push("\x3c!--",e.data,"--\x3e");case S:var I=e.publicId,O=e.systemId;if(t.push("");else if(O&&"."!=O)t.push(" SYSTEM ",O,">");else{var B=e.internalSubset;B&&t.push(" [",B,"]"),t.push(">")}return;case v:return t.push("");case g:return t.push("&",e.nodeName,";");default:t.push("??",e.nodeName)}}function ye(e,t,n){var r;switch(t.nodeType){case p:(r=t.cloneNode(!1)).ownerDocument=e;case b:break;case f:n=!0}if(r||(r=t.cloneNode(!1)),r.ownerDocument=e,r.parentNode=null,n)for(var o=t.firstChild;o;)r.appendChild(ye(e,o,n)),o=o.nextSibling;return r}function ve(e,t,n){var r=new t.constructor;for(var o in t)if(Object.prototype.hasOwnProperty.call(t,o)){var i=t[o];"object"!=typeof i&&i!=r[o]&&(r[o]=i)}switch(t.childNodes&&(r.childNodes=new O),r.ownerDocument=e,r.nodeType){case p:var a=t.attributes,s=r.attributes=new P,c=a.length;s._ownerElement=r;for(var u=0;u0},lookupPrefix:function(e){for(var t=this;t;){var n=t._nsMap;if(n)for(var r in n)if(Object.prototype.hasOwnProperty.call(n,r)&&n[r]===e)return r;t=t.nodeType==f?t.ownerDocument:t.parentNode}return null},lookupNamespaceURI:function(e){for(var t=this;t;){var n=t._nsMap;if(n&&Object.prototype.hasOwnProperty.call(n,e))return n[e];t=t.nodeType==f?t.ownerDocument:t.parentNode}return null},isDefaultNamespace:function(e){return null==this.lookupPrefix(e)}},u(d,H),u(d,H.prototype),F.prototype={nodeName:"#document",nodeType:k,doctype:null,documentElement:null,_inc:1,insertBefore:function(e,t){if(e.nodeType==b){for(var n=e.firstChild;n;){var r=n.nextSibling;this.insertBefore(n,t),n=r}return e}return Z(this,e,t),e.ownerDocument=this,null===this.documentElement&&e.nodeType===p&&(this.documentElement=e),e},removeChild:function(e){return this.documentElement==e&&(this.documentElement=null),z(this,e)},replaceChild:function(e,t){Z(this,e,t,Y),e.ownerDocument=this,t&&this.removeChild(t),V(e)&&(this.documentElement=e)},importNode:function(e,t){return ye(this,e,t)},getElementById:function(e){var t=null;return j(this.documentElement,(function(n){if(n.nodeType==p&&n.getAttribute("id")==e)return t=n,!0})),t},getElementsByClassName:function(e){var t=c(e);return new B(this,(function(n){var r=[];return t.length>0&&j(n.documentElement,(function(o){if(o!==n&&o.nodeType===p){var i=o.getAttribute("class");if(i){var a=e===i;if(!a){var s=c(i);a=t.every((u=s,function(e){return u&&-1!==u.indexOf(e)}))}a&&r.push(o)}}var u})),r}))},createElement:function(e){var t=new ee;return t.ownerDocument=this,t.nodeName=e,t.tagName=e,t.localName=e,t.childNodes=new O,(t.attributes=new P)._ownerElement=t,t},createDocumentFragment:function(){var e=new le;return e.ownerDocument=this,e.childNodes=new O,e},createTextNode:function(e){var t=new re;return t.ownerDocument=this,t.appendData(e),t},createComment:function(e){var t=new oe;return t.ownerDocument=this,t.appendData(e),t},createCDATASection:function(e){var t=new ie;return t.ownerDocument=this,t.appendData(e),t},createProcessingInstruction:function(e,t){var n=new de;return n.ownerDocument=this,n.tagName=n.target=e,n.nodeValue=n.data=t,n},createAttribute:function(e){var t=new te;return t.ownerDocument=this,t.name=e,t.nodeName=e,t.localName=e,t.specified=!0,t},createEntityReference:function(e){var t=new ue;return t.ownerDocument=this,t.nodeName=e,t},createElementNS:function(e,t){var n=new ee,r=t.split(":"),o=n.attributes=new P;return n.childNodes=new O,n.ownerDocument=this,n.nodeName=t,n.tagName=t,n.namespaceURI=e,2==r.length?(n.prefix=r[0],n.localName=r[1]):n.localName=t,o._ownerElement=n,n},createAttributeNS:function(e,t){var n=new te,r=t.split(":");return n.ownerDocument=this,n.nodeName=t,n.name=t,n.namespaceURI=e,n.specified=!0,2==r.length?(n.prefix=r[0],n.localName=r[1]):n.localName=t,n}},l(F,H),ee.prototype={nodeType:p,hasAttribute:function(e){return null!=this.getAttributeNode(e)},getAttribute:function(e){var t=this.getAttributeNode(e);return t&&t.value||""},getAttributeNode:function(e){return this.attributes.getNamedItem(e)},setAttribute:function(e,t){var n=this.ownerDocument.createAttribute(e);n.value=n.nodeValue=""+t,this.setAttributeNode(n)},removeAttribute:function(e){var t=this.getAttributeNode(e);t&&this.removeAttributeNode(t)},appendChild:function(e){return e.nodeType===b?this.insertBefore(e,null):function(e,t){return t.parentNode&&t.parentNode.removeChild(t),t.parentNode=e,t.previousSibling=e.lastChild,t.nextSibling=null,t.previousSibling?t.previousSibling.nextSibling=t:e.firstChild=t,e.lastChild=t,q(e.ownerDocument,e,t),t}(this,e)},setAttributeNode:function(e){return this.attributes.setNamedItem(e)},setAttributeNodeNS:function(e){return this.attributes.setNamedItemNS(e)},removeAttributeNode:function(e){return this.attributes.removeNamedItem(e.nodeName)},removeAttributeNS:function(e,t){var n=this.getAttributeNodeNS(e,t);n&&this.removeAttributeNode(n)},hasAttributeNS:function(e,t){return null!=this.getAttributeNodeNS(e,t)},getAttributeNS:function(e,t){var n=this.getAttributeNodeNS(e,t);return n&&n.value||""},setAttributeNS:function(e,t,n){var r=this.ownerDocument.createAttributeNS(e,t);r.value=r.nodeValue=""+n,this.setAttributeNode(r)},getAttributeNodeNS:function(e,t){return this.attributes.getNamedItemNS(e,t)},getElementsByTagName:function(e){return new B(this,(function(t){var n=[];return j(t,(function(r){r===t||r.nodeType!=p||"*"!==e&&r.tagName!=e||n.push(r)})),n}))},getElementsByTagNameNS:function(e,t){return new B(this,(function(n){var r=[];return j(n,(function(o){o===n||o.nodeType!==p||"*"!==e&&o.namespaceURI!==e||"*"!==t&&o.localName!=t||r.push(o)})),r}))}},F.prototype.getElementsByTagName=ee.prototype.getElementsByTagName,F.prototype.getElementsByTagNameNS=ee.prototype.getElementsByTagNameNS,l(ee,H),te.prototype.nodeType=f,l(te,H),ne.prototype={data:"",substringData:function(e,t){return this.data.substring(e,e+t)},appendData:function(e){e=this.data+e,this.nodeValue=this.data=e,this.length=e.length},insertData:function(e,t){this.replaceData(e,0,t)},appendChild:function(e){throw new Error(E[w])},deleteData:function(e,t){this.replaceData(e,t,"")},replaceData:function(e,t,n){n=this.data.substring(0,e)+n+this.data.substring(e+t),this.nodeValue=this.data=n,this.length=n.length}},l(ne,H),re.prototype={nodeName:"#text",nodeType:h,splitText:function(e){var t=this.data,n=t.substring(e);t=t.substring(0,e),this.data=this.nodeValue=t,this.length=t.length;var r=this.ownerDocument.createTextNode(n);return this.parentNode&&this.parentNode.insertBefore(r,this.nextSibling),r}},l(re,ne),oe.prototype={nodeName:"#comment",nodeType:C},l(oe,ne),ie.prototype={nodeName:"#cdata-section",nodeType:m},l(ie,ne),ae.prototype.nodeType=S,l(ae,H),se.prototype.nodeType=T,l(se,H),ce.prototype.nodeType=y,l(ce,H),ue.prototype.nodeType=g,l(ue,H),le.prototype.nodeName="#document-fragment",le.prototype.nodeType=b,l(le,H),de.prototype.nodeType=v,l(de,H),pe.prototype.serializeToString=function(e,t,n){return fe.call(e,t,n)},H.prototype.toString=fe;try{if(Object.defineProperty){function ke(e){switch(e.nodeType){case p:case b:var t=[];for(e=e.firstChild;e;)7!==e.nodeType&&8!==e.nodeType&&t.push(ke(e)),e=e.nextSibling;return t.join("");default:return e.nodeValue}}Object.defineProperty(B.prototype,"length",{get:function(){return _(this),this.$$length}}),Object.defineProperty(H.prototype,"textContent",{get:function(){return ke(this)},set:function(e){switch(this.nodeType){case p:case b:for(;this.firstChild;)this.removeChild(this.firstChild);(e||String(e))&&this.appendChild(this.ownerDocument.createTextNode(e));break;default:this.data=e,this.value=e,this.nodeValue=e}}}),Ce=function(e,t,n){e["$$"+t]=n}}}catch(Se){}t.DocumentType=ae,t.DOMException=I,t.DOMImplementation=M,t.Element=ee,t.Node=H,t.NodeList=O,t.XMLSerializer=pe},function(e,t,n){var r=n(22),o=n(23),i=n(0),a=n(7),s=null,c=function(e){if(!s){var t=n(24);s=new t({appkey:"0AND0VEVB24UBGDU",versionCode:a.version,channelID:"js_sdk",openid:"openid",unionid:"unid",strictMode:!1,delay:e,sessionDuration:6e4})}return s},u=function(){var e=function(){return(65536*(1+Math.random())|0).toString(16).substring(1)};return e()+e()+"-"+e()+"-"+e()+"-"+e()+"-"+e()+e()+e()},l=function(){if("object"===("undefined"==typeof navigator?"undefined":i(navigator))){var e=navigator.connection||navigator.mozConnection||navigator.webkitConnection;return(null==e?void 0:e.type)||(null==e?void 0:e.effectiveType)||"unknown"}return"unknown"},d=function(){if("object"!==("undefined"==typeof navigator?"undefined":i(navigator)))return"unknown os";var e=navigator.userAgent.toLowerCase(),t=/macintosh|mac os x/i.test(navigator.userAgent);return e.indexOf("win32")>=0||e.indexOf("wow32")>=0?"win32":e.indexOf("win64")>=0||e.indexOf("wow64")>=0?"win64":t?"mac":"unknown os"},p=function(){return!("object"!==("undefined"==typeof navigator?"undefined":i(navigator))||!navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i))},f=function(){return!("object"!==("undefined"==typeof navigator?"undefined":i(navigator))||!navigator.userAgent.match(/(Android|Adr|Linux)/i))},h=function(){return!("object"!==("undefined"==typeof navigator?"undefined":i(navigator))||!navigator.userAgent.match(/(iPhone|iPod|iPad|iOS)/i))},m=function(){if("object"!==("undefined"==typeof navigator?"undefined":i(navigator)))return"unknown device";var e=navigator.userAgent.toLowerCase();if(e.includes("app/tencent_wemeet"))return"tencent_wemeet";if(e.indexOf("maxthon")>=0){var t=e.match(/maxthon\/([\d.]+)/),n=t&&t[1]||"";return"傲游浏览器 ".concat(n).trim()}if(e.indexOf("qqbrowser")>=0){var r=e.match(/qqbrowser\/([\d.]+)/),o=r&&r[1]||"";return"QQ浏览器 ".concat(o).trim()}if(e.indexOf("se 2.x")>=0)return"搜狗浏览器";if(e.indexOf("wxwork")>=0)return"微信内置浏览器";if(e.indexOf("msie")>=0){var a=e.match(/msie ([\d.]+)/),s=a&&a[1]||"";return"IE ".concat(s).trim()}if(e.indexOf("firefox")>=0){var c=e.match(/firefox\/([\d.]+)/),u=c&&c[1]||"";return"Firefox ".concat(u).trim()}if(e.indexOf("chrome")>=0){var l=e.match(/chrome\/([\d.]+)/),d=l&&l[1]||"";return"Chrome ".concat(d).trim()}if(e.indexOf("opera")>=0){var p=e.match(/opera.([\d.]+)/),f=p&&p[1]||"";return"Opera ".concat(f).trim()}if(e.indexOf("safari")>=0){var h=e.match(/version\/([\d.]+)/),m=h&&h[1]||"";return"Safari ".concat(m).trim()}if(e.indexOf("edge")>=0){var g=e.match(/edge\/([\d.]+)/),y=g&&g[1]||"";return"edge ".concat(y).trim()}return e.substr(0,200)},g={isMobile:p(),isBrowser:!p(),mobileOsType:f()?"android":h?"ios":"other_mobile",pcOsType:d()},y={deviceType:g.isMobile?"mobile":g.isBrowser?"browser":"unknown",devicePlatform:g.isMobile?g.mobileOsType:g.pcOsType,deviceName:m()},v=["multipartInit","multipartUpload","multipartComplete","multipartList","multipartListPart","multipartAbort"],C=["putObject","postObject","appendObject","sliceUploadFile","uploadFile","uploadFiles"].concat(v),k=["getObject"];function S(e){return e.replace(/([A-Z])/g,"_$1").toLowerCase()}var b=function(){"use strict";function e(t){r(this,e);var n=t.parent,o=t.traceId,i=t.bucket,s=t.region,l=t.apiName,d=t.fileKey,p=t.fileSize,f=t.accelerate,h=t.customId,m=t.delay,g=t.deepTracker,v=i&&i.substr(i.lastIndexOf("-")+1)||"";this.parent=n,this.deepTracker=g,this.delay=m,this.params={cossdkVersion:a.version,region:s,networkType:"",host:"",accelerate:f?"Y":"N",requestPath:d||"",size:p||-1,httpMd5:0,httpSign:0,httpFull:0,name:l||"",result:"",tookTime:0,errorNode:"",errorCode:"",errorMessage:"",errorRequestId:"",errorStatusCode:0,errorServiceName:"",tracePlatform:"cos-js-sdk-v5",traceId:o||u(),bucket:i,appid:v,partNumber:0,retryTimes:0,reqUrl:"",customId:h||"",deviceType:y.deviceType,devicePlatform:y.devicePlatform,deviceName:y.deviceName,md5StartTime:0,md5EndTime:0,signStartTime:0,signEndTime:0,httpStartTime:0,httpEndTime:0,startTime:(new Date).getTime(),endTime:0},this.beacon=c(m)}return o(e,[{key:"formatResult",value:function(e,t){var n,r,o,i,a,s,c=(new Date).getTime()-this.params.startTime,u=l(),d=e?(null==e?void 0:e.code)||(null==e||null===(n=e.error)||void 0===n?void 0:n.code)||(null==e||null===(r=e.error)||void 0===r?void 0:r.Code):"",p=e?(null==e?void 0:e.message)||(null==e||null===(o=e.error)||void 0===o?void 0:o.message)||(null==e||null===(i=e.error)||void 0===i?void 0:i.Message):"",f=e?(null==e?void 0:e.resource)||(null==e||null===(a=e.error)||void 0===a?void 0:a.resource)||(null==e||null===(s=e.error)||void 0===s?void 0:s.Resource):"",h=e?null==e?void 0:e.statusCode:t.statusCode,m=e?(null==e?void 0:e.headers)&&(null==e?void 0:e.headers["x-cos-request-id"]):(null==t?void 0:t.headers)&&(null==t?void 0:t.headers["x-cos-request-id"]),g=e?m?"Server":"Client":"";if(Object.assign(this.params,{tookTime:c,networkType:u,httpMd5:this.params.md5EndTime-this.params.md5StartTime,httpSign:this.params.signEndTime-this.params.signStartTime,httpFull:this.params.httpEndTime-this.params.httpStartTime,result:e?"Fail":"Success",errorType:g,errorCode:d,errorStatusCode:h,errorMessage:p,errorServiceName:f,errorRequestId:m}),!e||d&&p||(this.params.fullError=e?JSON.stringify(e):""),"getObject"===this.params.name&&(this.params.size=t?t.headers&&t.headers["content-length"]:-1),this.params.reqUrl)try{var y=/^http(s)?:\/\/(.*?)\//.exec(this.params.reqUrl);this.params.host=y[2]}catch(e){this.params.host=this.params.reqUrl}this.sendEvents()}},{key:"setParams",value:function(e){Object.assign(this.params,e)}},{key:"sendEvents",value:function(){if(!v.includes(this.params.name)||this.deepTracker){var e,t=(e=this.params.name,C.includes(e)?"cos_upload":k.includes(e)?"cos_download":"base_service"),n=function(e){var t={},n="Success"===e.result?["tracePlatform","cossdkVersion","region","bucket","appid","networkType","host","accelerate","requestPath","partNumber","size","name","result","tookTime","errorRequestId","retryTimes","reqUrl","customId","deviceType","devicePlatform","deviceName"]:["tracePlatform","cossdkVersion","region","networkType","host","accelerate","requestPath","size","httpMd5","httpSign","httpFull","name","result","tookTime","errorNode","errorCode","errorMessage","errorRequestId","errorStatusCode","errorServiceName","errorType","traceId","bucket","appid","partNumber","retryTimes","reqUrl","customId","fullError","deviceType","devicePlatform","deviceName"];for(var r in e)n.includes(r)&&(t[S(r)]=e[r]);return t}(this.params);this.beacon||(this.beacon=c(this.delay||5e3)),0===this.delay?this.beacon&&this.beacon.onDirectUserAction(t,n):this.beacon&&this.beacon.onUserAction(t,n)}}},{key:"generateSubTracker",value:function(t){return Object.assign(t,{parent:this,deepTracker:this.deepTracker,traceId:this.params.traceId,bucket:this.params.bucket,region:this.params.region,fileKey:this.params.requestPath,customId:this.params.customId,delay:this.delay}),new e(t)}}]),e}();e.exports=b},function(e){e.exports=JSON.parse('{"name":"cos-js-sdk-v5","version":"1.4.18","description":"JavaScript SDK for [腾讯云对象存储](https://cloud.tencent.com/product/cos)","main":"dist/cos-js-sdk-v5.js","types":"index.d.ts","scripts":{"prettier":"prettier --write src demo/demo.js test/test.js server/sts.js index.d.ts","server":"node server/sts.js","dev":"cross-env NODE_ENV=development webpack -w --mode=development","build":"cross-env NODE_ENV=production webpack --mode=production","cos-auth.min.js":"uglifyjs ./demo/common/cos-auth.js -o ./demo/common/cos-auth.min.js -c -m","test":"jest --runInBand --coverage"},"repository":{"type":"git","url":"git+https://github.com/tencentyun/cos-js-sdk-v5.git"},"keywords":[],"author":"carsonxu","license":"ISC","bugs":{"url":"https://github.com/tencentyun/cos-js-sdk-v5/issues"},"homepage":"https://github.com/tencentyun/cos-js-sdk-v5#readme","dependencies":{"@xmldom/xmldom":"^0.8.6"},"devDependencies":{"@babel/core":"7.17.9","@babel/plugin-transform-runtime":"7.18.10","@babel/preset-env":"7.16.11","babel-loader":"8.2.5","body-parser":"^1.18.3","cross-env":"^5.2.0","express":"^4.16.4","jest":"^29.3.1","jest-environment-jsdom":"^29.3.1","prettier":"2.8.8","qcloud-cos-sts":"^3.0.2","request":"^2.87.0","terser-webpack-plugin":"4.2.3","uglifyjs":"^2.4.11","webpack":"4.46.0","webpack-cli":"4.10.0"}}')},function(e,t){var n=function(e){var t={},n=function(e){return!t[e]&&(t[e]=[]),t[e]};e.on=function(e,t){n(e).push(t)},e.off=function(e,t){for(var r=n(e),o=r.length-1;o>=0;o--)t===r[o]&&r.splice(o,1)},e.emit=function(e,t){for(var r=n(e).map((function(e){return e})),o=0;o=0;n--){var o=r[n][2];(!o||o+2592e3=0;o--){var i=r[o];i[0]===e&&i[1]===t&&r.splice(o,1)}r.unshift([e,t,Math.round(Date.now()/1e3)]),r.length>n&&r.splice(n),l()}},removeUploadId:function(e){u.call(this),delete d.using[e];for(var t=r.length-1;t>=0;t--)r[t][1]===e&&r.splice(t,1);l()}};e.exports=d},function(e,t,n){var r=n(11);e.exports=r},function(e,t,n){"use strict";var r=n(1),o=n(8),i=n(25),a=n(26),s=n(28),c=n(7),u={AppId:"",SecretId:"",SecretKey:"",SecurityToken:"",ChunkRetryTimes:2,FileParallelLimit:3,ChunkParallelLimit:3,ChunkSize:1048576,SliceSize:1048576,CopyChunkParallelLimit:20,CopyChunkSize:10485760,CopySliceSize:10485760,MaxPartNumber:1e4,ProgressInterval:1e3,Domain:"",ServiceDomain:"",Protocol:"",CompatibilityMode:!1,ForcePathStyle:!1,UseRawKey:!1,Timeout:0,CorrectClockSkew:!0,SystemClockOffset:0,UploadCheckContentMd5:!1,UploadQueueSize:1e4,UploadAddMetaMd5:!1,UploadIdCacheLimit:50,UseAccelerate:!1,ForceSignHost:!0,EnableTracker:!1,DeepTracker:!1,TrackerDelay:5e3,CustomId:""},l=function(e){this.options=r.extend(r.clone(u),e||{}),this.options.FileParallelLimit=Math.max(1,this.options.FileParallelLimit),this.options.ChunkParallelLimit=Math.max(1,this.options.ChunkParallelLimit),this.options.ChunkRetryTimes=Math.max(0,this.options.ChunkRetryTimes),this.options.ChunkSize=Math.max(1048576,this.options.ChunkSize),this.options.CopyChunkParallelLimit=Math.max(1,this.options.CopyChunkParallelLimit),this.options.CopyChunkSize=Math.max(1048576,this.options.CopyChunkSize),this.options.CopySliceSize=Math.max(0,this.options.CopySliceSize),this.options.MaxPartNumber=Math.max(1024,Math.min(1e4,this.options.MaxPartNumber)),this.options.Timeout=Math.max(0,this.options.Timeout),this.options.AppId,this.options.SecretId&&this.options.SecretId.indexOf(" "),this.options.SecretKey&&this.options.SecretKey.indexOf(" "),r.isNode(),o.init(this),i.init(this)};a.init(l,i),s.init(l,i),l.util={md5:r.md5,xml2json:r.xml2json,json2xml:r.json2xml},l.getAuthorization=r.getAuth,l.version=c.version,e.exports=l},function(module,exports,__webpack_require__){(function(process,global,module){var __WEBPACK_AMD_DEFINE_RESULT__,_typeof=__webpack_require__(0);(function(){"use strict";var ERROR="input is invalid type",WINDOW="object"===("undefined"==typeof window?"undefined":_typeof(window)),root=WINDOW?window:{};root.JS_MD5_NO_WINDOW&&(WINDOW=!1);var WEB_WORKER=!WINDOW&&"object"===("undefined"==typeof self?"undefined":_typeof(self)),NODE_JS=!root.JS_MD5_NO_NODE_JS&&"object"===(void 0===process?"undefined":_typeof(process))&&process.versions&&process.versions.node;NODE_JS?root=global:WEB_WORKER&&(root=self);var COMMON_JS=!root.JS_MD5_NO_COMMON_JS&&"object"===_typeof(module)&&module.exports,AMD=__webpack_require__(14),ARRAY_BUFFER=!root.JS_MD5_NO_ARRAY_BUFFER&&"undefined"!=typeof ArrayBuffer,HEX_CHARS="0123456789abcdef".split(""),EXTRA=[128,32768,8388608,-2147483648],SHIFT=[0,8,16,24],OUTPUT_TYPES=["hex","array","digest","buffer","arrayBuffer","base64"],BASE64_ENCODE_CHAR="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""),blocks=[],buffer8;if(ARRAY_BUFFER){var buffer=new ArrayBuffer(68);buffer8=new Uint8Array(buffer),blocks=new Uint32Array(buffer)}!root.JS_MD5_NO_NODE_JS&&Array.isArray||(Array.isArray=function(e){return"[object Array]"===Object.prototype.toString.call(e)}),!ARRAY_BUFFER||!root.JS_MD5_NO_ARRAY_BUFFER_IS_VIEW&&ArrayBuffer.isView||(ArrayBuffer.isView=function(e){return"object"===_typeof(e)&&e.buffer&&e.buffer.constructor===ArrayBuffer});var createOutputMethod=function(e){return function(t,n){return new Md5(!0).update(t,n)[e]()}},createMethod=function(){var e=createOutputMethod("hex");NODE_JS&&(e=nodeWrap(e)),e.getCtx=e.create=function(){return new Md5},e.update=function(t){return e.create().update(t)};for(var t=0;t>6,s[r++]=128|63&n):n<55296||n>=57344?(s[r++]=224|n>>12,s[r++]=128|n>>6&63,s[r++]=128|63&n):(n=65536+((1023&n)<<10|1023&e.charCodeAt(++o)),s[r++]=240|n>>18,s[r++]=128|n>>12&63,s[r++]=128|n>>6&63,s[r++]=128|63&n);else for(r=this.start;o>2]|=n<>2]|=(192|n>>6)<>2]|=(128|63&n)<=57344?(a[r>>2]|=(224|n>>12)<>2]|=(128|n>>6&63)<>2]|=(128|63&n)<>2]|=(240|n>>18)<>2]|=(128|n>>12&63)<>2]|=(128|n>>6&63)<>2]|=(128|63&n)<=64?(this.start=r-64,this.hash(),this.hashed=!0):this.start=r}return this.bytes>4294967295&&(this.hBytes+=this.bytes/4294967296<<0,this.bytes=this.bytes%4294967296),this}},Md5.prototype.finalize=function(){if(!this.finalized){this.finalized=!0;var e=this.blocks,t=this.lastByteIndex;e[t>>2]|=EXTRA[3&t],t>=56&&(this.hashed||this.hash(),e[0]=e[16],e[16]=e[1]=e[2]=e[3]=e[4]=e[5]=e[6]=e[7]=e[8]=e[9]=e[10]=e[11]=e[12]=e[13]=e[14]=e[15]=0),e[14]=this.bytes<<3,e[15]=this.hBytes<<3|this.bytes>>>29,this.hash()}},Md5.prototype.hash=function(){var e,t,n,r,o,i,a=this.blocks;this.first?t=((t=((e=((e=a[0]-680876937)<<7|e>>>25)-271733879<<0)^(n=((n=(-271733879^(r=((r=(-1732584194^2004318071&e)+a[1]-117830708)<<12|r>>>20)+e<<0)&(-271733879^e))+a[2]-1126478375)<<17|n>>>15)+r<<0)&(r^e))+a[3]-1316259209)<<22|t>>>10)+n<<0:(e=this.h0,t=this.h1,n=this.h2,t=((t+=((e=((e+=((r=this.h3)^t&(n^r))+a[0]-680876936)<<7|e>>>25)+t<<0)^(n=((n+=(t^(r=((r+=(n^e&(t^n))+a[1]-389564586)<<12|r>>>20)+e<<0)&(e^t))+a[2]+606105819)<<17|n>>>15)+r<<0)&(r^e))+a[3]-1044525330)<<22|t>>>10)+n<<0),t=((t+=((e=((e+=(r^t&(n^r))+a[4]-176418897)<<7|e>>>25)+t<<0)^(n=((n+=(t^(r=((r+=(n^e&(t^n))+a[5]+1200080426)<<12|r>>>20)+e<<0)&(e^t))+a[6]-1473231341)<<17|n>>>15)+r<<0)&(r^e))+a[7]-45705983)<<22|t>>>10)+n<<0,t=((t+=((e=((e+=(r^t&(n^r))+a[8]+1770035416)<<7|e>>>25)+t<<0)^(n=((n+=(t^(r=((r+=(n^e&(t^n))+a[9]-1958414417)<<12|r>>>20)+e<<0)&(e^t))+a[10]-42063)<<17|n>>>15)+r<<0)&(r^e))+a[11]-1990404162)<<22|t>>>10)+n<<0,t=((t+=((e=((e+=(r^t&(n^r))+a[12]+1804603682)<<7|e>>>25)+t<<0)^(n=((n+=(t^(r=((r+=(n^e&(t^n))+a[13]-40341101)<<12|r>>>20)+e<<0)&(e^t))+a[14]-1502002290)<<17|n>>>15)+r<<0)&(r^e))+a[15]+1236535329)<<22|t>>>10)+n<<0,t=((t+=((r=((r+=(t^n&((e=((e+=(n^r&(t^n))+a[1]-165796510)<<5|e>>>27)+t<<0)^t))+a[6]-1069501632)<<9|r>>>23)+e<<0)^e&((n=((n+=(e^t&(r^e))+a[11]+643717713)<<14|n>>>18)+r<<0)^r))+a[0]-373897302)<<20|t>>>12)+n<<0,t=((t+=((r=((r+=(t^n&((e=((e+=(n^r&(t^n))+a[5]-701558691)<<5|e>>>27)+t<<0)^t))+a[10]+38016083)<<9|r>>>23)+e<<0)^e&((n=((n+=(e^t&(r^e))+a[15]-660478335)<<14|n>>>18)+r<<0)^r))+a[4]-405537848)<<20|t>>>12)+n<<0,t=((t+=((r=((r+=(t^n&((e=((e+=(n^r&(t^n))+a[9]+568446438)<<5|e>>>27)+t<<0)^t))+a[14]-1019803690)<<9|r>>>23)+e<<0)^e&((n=((n+=(e^t&(r^e))+a[3]-187363961)<<14|n>>>18)+r<<0)^r))+a[8]+1163531501)<<20|t>>>12)+n<<0,t=((t+=((r=((r+=(t^n&((e=((e+=(n^r&(t^n))+a[13]-1444681467)<<5|e>>>27)+t<<0)^t))+a[2]-51403784)<<9|r>>>23)+e<<0)^e&((n=((n+=(e^t&(r^e))+a[7]+1735328473)<<14|n>>>18)+r<<0)^r))+a[12]-1926607734)<<20|t>>>12)+n<<0,t=((t+=((i=(r=((r+=((o=t^n)^(e=((e+=(o^r)+a[5]-378558)<<4|e>>>28)+t<<0))+a[8]-2022574463)<<11|r>>>21)+e<<0)^e)^(n=((n+=(i^t)+a[11]+1839030562)<<16|n>>>16)+r<<0))+a[14]-35309556)<<23|t>>>9)+n<<0,t=((t+=((i=(r=((r+=((o=t^n)^(e=((e+=(o^r)+a[1]-1530992060)<<4|e>>>28)+t<<0))+a[4]+1272893353)<<11|r>>>21)+e<<0)^e)^(n=((n+=(i^t)+a[7]-155497632)<<16|n>>>16)+r<<0))+a[10]-1094730640)<<23|t>>>9)+n<<0,t=((t+=((i=(r=((r+=((o=t^n)^(e=((e+=(o^r)+a[13]+681279174)<<4|e>>>28)+t<<0))+a[0]-358537222)<<11|r>>>21)+e<<0)^e)^(n=((n+=(i^t)+a[3]-722521979)<<16|n>>>16)+r<<0))+a[6]+76029189)<<23|t>>>9)+n<<0,t=((t+=((i=(r=((r+=((o=t^n)^(e=((e+=(o^r)+a[9]-640364487)<<4|e>>>28)+t<<0))+a[12]-421815835)<<11|r>>>21)+e<<0)^e)^(n=((n+=(i^t)+a[15]+530742520)<<16|n>>>16)+r<<0))+a[2]-995338651)<<23|t>>>9)+n<<0,t=((t+=((r=((r+=(t^((e=((e+=(n^(t|~r))+a[0]-198630844)<<6|e>>>26)+t<<0)|~n))+a[7]+1126891415)<<10|r>>>22)+e<<0)^((n=((n+=(e^(r|~t))+a[14]-1416354905)<<15|n>>>17)+r<<0)|~e))+a[5]-57434055)<<21|t>>>11)+n<<0,t=((t+=((r=((r+=(t^((e=((e+=(n^(t|~r))+a[12]+1700485571)<<6|e>>>26)+t<<0)|~n))+a[3]-1894986606)<<10|r>>>22)+e<<0)^((n=((n+=(e^(r|~t))+a[10]-1051523)<<15|n>>>17)+r<<0)|~e))+a[1]-2054922799)<<21|t>>>11)+n<<0,t=((t+=((r=((r+=(t^((e=((e+=(n^(t|~r))+a[8]+1873313359)<<6|e>>>26)+t<<0)|~n))+a[15]-30611744)<<10|r>>>22)+e<<0)^((n=((n+=(e^(r|~t))+a[6]-1560198380)<<15|n>>>17)+r<<0)|~e))+a[13]+1309151649)<<21|t>>>11)+n<<0,t=((t+=((r=((r+=(t^((e=((e+=(n^(t|~r))+a[4]-145523070)<<6|e>>>26)+t<<0)|~n))+a[11]-1120210379)<<10|r>>>22)+e<<0)^((n=((n+=(e^(r|~t))+a[2]+718787259)<<15|n>>>17)+r<<0)|~e))+a[9]-343485551)<<21|t>>>11)+n<<0,this.first?(this.h0=e+1732584193<<0,this.h1=t-271733879<<0,this.h2=n-1732584194<<0,this.h3=r+271733878<<0,this.first=!1):(this.h0=this.h0+e<<0,this.h1=this.h1+t<<0,this.h2=this.h2+n<<0,this.h3=this.h3+r<<0)},Md5.prototype.hex=function(){this.finalize();var e=this.h0,t=this.h1,n=this.h2,r=this.h3;return HEX_CHARS[e>>4&15]+HEX_CHARS[15&e]+HEX_CHARS[e>>12&15]+HEX_CHARS[e>>8&15]+HEX_CHARS[e>>20&15]+HEX_CHARS[e>>16&15]+HEX_CHARS[e>>28&15]+HEX_CHARS[e>>24&15]+HEX_CHARS[t>>4&15]+HEX_CHARS[15&t]+HEX_CHARS[t>>12&15]+HEX_CHARS[t>>8&15]+HEX_CHARS[t>>20&15]+HEX_CHARS[t>>16&15]+HEX_CHARS[t>>28&15]+HEX_CHARS[t>>24&15]+HEX_CHARS[n>>4&15]+HEX_CHARS[15&n]+HEX_CHARS[n>>12&15]+HEX_CHARS[n>>8&15]+HEX_CHARS[n>>20&15]+HEX_CHARS[n>>16&15]+HEX_CHARS[n>>28&15]+HEX_CHARS[n>>24&15]+HEX_CHARS[r>>4&15]+HEX_CHARS[15&r]+HEX_CHARS[r>>12&15]+HEX_CHARS[r>>8&15]+HEX_CHARS[r>>20&15]+HEX_CHARS[r>>16&15]+HEX_CHARS[r>>28&15]+HEX_CHARS[r>>24&15]},Md5.prototype.toString=Md5.prototype.hex,Md5.prototype.digest=function(e){if("hex"===e)return this.hex();this.finalize();var t=this.h0,n=this.h1,r=this.h2,o=this.h3;return[255&t,t>>8&255,t>>16&255,t>>24&255,255&n,n>>8&255,n>>16&255,n>>24&255,255&r,r>>8&255,r>>16&255,r>>24&255,255&o,o>>8&255,o>>16&255,o>>24&255]},Md5.prototype.array=Md5.prototype.digest,Md5.prototype.arrayBuffer=function(){this.finalize();var e=new ArrayBuffer(16),t=new Uint32Array(e);return t[0]=this.h0,t[1]=this.h1,t[2]=this.h2,t[3]=this.h3,e},Md5.prototype.buffer=Md5.prototype.arrayBuffer,Md5.prototype.base64=function(){for(var e,t,n,r="",o=this.array(),i=0;i<15;)e=o[i++],t=o[i++],n=o[i++],r+=BASE64_ENCODE_CHAR[e>>>2]+BASE64_ENCODE_CHAR[63&(e<<4|t>>>4)]+BASE64_ENCODE_CHAR[63&(t<<2|n>>>6)]+BASE64_ENCODE_CHAR[63&n];return e=o[i],r+=BASE64_ENCODE_CHAR[e>>>2]+BASE64_ENCODE_CHAR[e<<4&63]+"=="};var exports=createMethod();COMMON_JS?module.exports=exports:(root.md5=exports,AMD&&(__WEBPACK_AMD_DEFINE_RESULT__=function(){return exports}.call(exports,__webpack_require__,exports,module),void 0===__WEBPACK_AMD_DEFINE_RESULT__||(module.exports=__WEBPACK_AMD_DEFINE_RESULT__)))})()}).call(this,__webpack_require__(3),__webpack_require__(13),__webpack_require__(4)(module))},function(e,t){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(e){"object"==typeof window&&(n=window)}e.exports=n},function(e,t){(function(t){e.exports=t}).call(this,{})},function(e,t,n){(function(e){var t,r,o,i,a,s,c,u=n(0),l=l||function(e,t){var n={},r=n.lib={},o=function(){},i=r.Base={extend:function(e){o.prototype=this;var t=new o;return e&&t.mixIn(e),t.hasOwnProperty("init")||(t.init=function(){t.$super.init.apply(this,arguments)}),t.init.prototype=t,t.$super=this,t},create:function(){var e=this.extend();return e.init.apply(e,arguments),e},init:function(){},mixIn:function(e){for(var t in e)e.hasOwnProperty(t)&&(this[t]=e[t]);e.hasOwnProperty("toString")&&(this.toString=e.toString)},clone:function(){return this.init.prototype.extend(this)}},a=r.WordArray=i.extend({init:function(e,t){e=this.words=e||[],this.sigBytes=null!=t?t:4*e.length},toString:function(e){return(e||c).stringify(this)},concat:function(e){var t=this.words,n=e.words,r=this.sigBytes;if(e=e.sigBytes,this.clamp(),r%4)for(var o=0;o>>2]|=(n[o>>>2]>>>24-o%4*8&255)<<24-(r+o)%4*8;else if(65535>>2]=n[o>>>2];else t.push.apply(t,n);return this.sigBytes+=e,this},clamp:function(){var t=this.words,n=this.sigBytes;t[n>>>2]&=4294967295<<32-n%4*8,t.length=e.ceil(n/4)},clone:function(){var e=i.clone.call(this);return e.words=this.words.slice(0),e},random:function(t){for(var n=[],r=0;r>>2]>>>24-r%4*8&255;n.push((o>>>4).toString(16)),n.push((15&o).toString(16))}return n.join("")},parse:function(e){for(var t=e.length,n=[],r=0;r>>3]|=parseInt(e.substr(r,2),16)<<24-r%8*4;return new a.init(n,t/2)}},u=s.Latin1={stringify:function(e){var t=e.words;e=e.sigBytes;for(var n=[],r=0;r>>2]>>>24-r%4*8&255));return n.join("")},parse:function(e){for(var t=e.length,n=[],r=0;r>>2]|=(255&e.charCodeAt(r))<<24-r%4*8;return new a.init(n,t)}},l=s.Utf8={stringify:function(e){try{return decodeURIComponent(escape(u.stringify(e)))}catch(e){throw Error("Malformed UTF-8 data")}},parse:function(e){return u.parse(unescape(encodeURIComponent(e)))}},d=r.BufferedBlockAlgorithm=i.extend({reset:function(){this._data=new a.init,this._nDataBytes=0},_append:function(e){"string"==typeof e&&(e=l.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(t){var n=this._data,r=n.words,o=n.sigBytes,i=this.blockSize,s=o/(4*i);if(t=(s=t?e.ceil(s):e.max((0|s)-this._minBufferSize,0))*i,o=e.min(4*t,o),t){for(var c=0;cu;u++){if(16>u)i[u]=0|e[t+u];else{var l=i[u-3]^i[u-8]^i[u-14]^i[u-16];i[u]=l<<1|l>>>31}l=(r<<5|r>>>27)+c+i[u],l=20>u?l+(1518500249+(o&a|~o&s)):40>u?l+(1859775393+(o^a^s)):60>u?l+((o&a|o&s|a&s)-1894007588):l+((o^a^s)-899497514),c=s,s=a,a=o<<30|o>>>2,o=r,r=l}n[0]=n[0]+r|0,n[1]=n[1]+o|0,n[2]=n[2]+a|0,n[3]=n[3]+s|0,n[4]=n[4]+c|0},_doFinalize:function(){var e=this._data,t=e.words,n=8*this._nDataBytes,r=8*e.sigBytes;return t[r>>>5]|=128<<24-r%32,t[14+(r+64>>>9<<4)]=Math.floor(n/4294967296),t[15+(r+64>>>9<<4)]=n,e.sigBytes=4*t.length,this._process(),this._hash},clone:function(){var e=o.clone.call(this);return e._hash=this._hash.clone(),e}}),t.SHA1=o._createHelper(a),t.HmacSHA1=o._createHmacHelper(a),function(){var e=l,t=e.enc.Utf8;e.algo.HMAC=e.lib.Base.extend({init:function(e,n){e=this._hasher=new e.init,"string"==typeof n&&(n=t.parse(n));var r=e.blockSize,o=4*r;n.sigBytes>o&&(n=e.finalize(n)),n.clamp();for(var i=this._oKey=n.clone(),a=this._iKey=n.clone(),s=i.words,c=a.words,u=0;u>>2]>>>24-i%4*8&255)<<16|(t[i+1>>>2]>>>24-(i+1)%4*8&255)<<8|t[i+2>>>2]>>>24-(i+2)%4*8&255,s=0;s<4&&i+.75*s>>6*(3-s)&63));var c=r.charAt(64);if(c)for(;o.length%4;)o.push(c);return o.join("")},parse:function(e){var t=e.length,n=this._map,r=n.charAt(64);if(r){var o=e.indexOf(r);-1!=o&&(t=o)}for(var i=[],a=0,s=0;s>>6-s%4*2;i[a>>>2]|=(u|l)<<24-a%4*8,a++}return c.create(i,a)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="},"object"===u(e)?e.exports=l:window.CryptoJS=l}).call(this,n(4)(e))},function(e,t,n){var r=n(17).DOMParser,o=function(){this.version="1.3.5";var e={mergeCDATA:!0,normalize:!0,stripElemPrefix:!0},t=new RegExp(/(?!xmlns)^.*:/);new RegExp(/^\s+|\s+$/g);return this.grokType=function(e){return/^\s*$/.test(e)?null:/^(?:true|false)$/i.test(e)?"true"===e.toLowerCase():isFinite(e)?parseFloat(e):e},this.parseString=function(e,t){if(e){var n=this.stringToXML(e);return n.getElementsByTagName("parsererror").length?null:this.parseXML(n,t)}return null},this.parseXML=function(n,r){for(var i in r)e[i]=r[i];var a={},s=0,c="";if(n.childNodes.length)for(var u,l,d,p=0;p=t+n||t?new java.lang.String(e,t,n)+"":e}function g(e,t){e.currentElement?e.currentElement.appendChild(t):e.doc.appendChild(t)}p.prototype.parseFromString=function(e,t){var n=this.options,r=new l,o=n.domBuilder||new f,a=n.errorHandler,s=n.locator,u=n.xmlns||{},p=/\/x?html?$/.test(t),h=p?i.HTML_ENTITIES:i.XML_ENTITIES;s&&o.setDocumentLocator(s),r.errorHandler=function(e,t,n){if(!e){if(t instanceof f)return t;e=t}var r={},o=e instanceof Function;function i(t){var i=e[t];!i&&o&&(i=2==e.length?function(n){e(t,n)}:e),r[t]=i&&function(e){i("[xmldom "+t+"]\t"+e+function(e){if(e)return"\n@"+(e.systemId||"")+"#[line:"+e.lineNumber+",col:"+e.columnNumber+"]"}(n))}||function(){}}return n=n||{},i("warning"),i("error"),i("fatalError"),r}(a,o,s),r.domBuilder=n.domBuilder||o,p&&(u[""]=c.HTML),u.xml=u.xml||c.XML;var m=n.normalizeLineEndings||d;return e&&"string"==typeof e?r.parse(m(e),u,h):r.errorHandler.error("invalid doc source"),o.doc},f.prototype={startDocument:function(){this.doc=(new s).createDocument(null,null,null),this.locator&&(this.doc.documentURI=this.locator.systemId)},startElement:function(e,t,n,r){var o=this.doc,i=o.createElementNS(e,n||t),a=r.length;g(this,i),this.currentElement=i,this.locator&&h(this.locator,i);for(var s=0;s",lt:"<",quot:'"'}),t.HTML_ENTITIES=r({lt:"<",gt:">",amp:"&",quot:'"',apos:"'",Agrave:"À",Aacute:"Á",Acirc:"Â",Atilde:"Ã",Auml:"Ä",Aring:"Å",AElig:"Æ",Ccedil:"Ç",Egrave:"È",Eacute:"É",Ecirc:"Ê",Euml:"Ë",Igrave:"Ì",Iacute:"Í",Icirc:"Î",Iuml:"Ï",ETH:"Ð",Ntilde:"Ñ",Ograve:"Ò",Oacute:"Ó",Ocirc:"Ô",Otilde:"Õ",Ouml:"Ö",Oslash:"Ø",Ugrave:"Ù",Uacute:"Ú",Ucirc:"Û",Uuml:"Ü",Yacute:"Ý",THORN:"Þ",szlig:"ß",agrave:"à",aacute:"á",acirc:"â",atilde:"ã",auml:"ä",aring:"å",aelig:"æ",ccedil:"ç",egrave:"è",eacute:"é",ecirc:"ê",euml:"ë",igrave:"ì",iacute:"í",icirc:"î",iuml:"ï",eth:"ð",ntilde:"ñ",ograve:"ò",oacute:"ó",ocirc:"ô",otilde:"õ",ouml:"ö",oslash:"ø",ugrave:"ù",uacute:"ú",ucirc:"û",uuml:"ü",yacute:"ý",thorn:"þ",yuml:"ÿ",nbsp:" ",iexcl:"¡",cent:"¢",pound:"£",curren:"¤",yen:"¥",brvbar:"¦",sect:"§",uml:"¨",copy:"©",ordf:"ª",laquo:"«",not:"¬",shy:"­­",reg:"®",macr:"¯",deg:"°",plusmn:"±",sup2:"²",sup3:"³",acute:"´",micro:"µ",para:"¶",middot:"·",cedil:"¸",sup1:"¹",ordm:"º",raquo:"»",frac14:"¼",frac12:"½",frac34:"¾",iquest:"¿",times:"×",divide:"÷",forall:"∀",part:"∂",exist:"∃",empty:"∅",nabla:"∇",isin:"∈",notin:"∉",ni:"∋",prod:"∏",sum:"∑",minus:"−",lowast:"∗",radic:"√",prop:"∝",infin:"∞",ang:"∠",and:"∧",or:"∨",cap:"∩",cup:"∪",int:"∫",there4:"∴",sim:"∼",cong:"≅",asymp:"≈",ne:"≠",equiv:"≡",le:"≤",ge:"≥",sub:"⊂",sup:"⊃",nsub:"⊄",sube:"⊆",supe:"⊇",oplus:"⊕",otimes:"⊗",perp:"⊥",sdot:"⋅",Alpha:"Α",Beta:"Β",Gamma:"Γ",Delta:"Δ",Epsilon:"Ε",Zeta:"Ζ",Eta:"Η",Theta:"Θ",Iota:"Ι",Kappa:"Κ",Lambda:"Λ",Mu:"Μ",Nu:"Ν",Xi:"Ξ",Omicron:"Ο",Pi:"Π",Rho:"Ρ",Sigma:"Σ",Tau:"Τ",Upsilon:"Υ",Phi:"Φ",Chi:"Χ",Psi:"Ψ",Omega:"Ω",alpha:"α",beta:"β",gamma:"γ",delta:"δ",epsilon:"ε",zeta:"ζ",eta:"η",theta:"θ",iota:"ι",kappa:"κ",lambda:"λ",mu:"μ",nu:"ν",xi:"ξ",omicron:"ο",pi:"π",rho:"ρ",sigmaf:"ς",sigma:"σ",tau:"τ",upsilon:"υ",phi:"φ",chi:"χ",psi:"ψ",omega:"ω",thetasym:"ϑ",upsih:"ϒ",piv:"ϖ",OElig:"Œ",oelig:"œ",Scaron:"Š",scaron:"š",Yuml:"Ÿ",fnof:"ƒ",circ:"ˆ",tilde:"˜",ensp:" ",emsp:" ",thinsp:" ",zwnj:"‌",zwj:"‍",lrm:"‎",rlm:"‏",ndash:"–",mdash:"—",lsquo:"‘",rsquo:"’",sbquo:"‚",ldquo:"“",rdquo:"”",bdquo:"„",dagger:"†",Dagger:"‡",bull:"•",hellip:"…",permil:"‰",prime:"′",Prime:"″",lsaquo:"‹",rsaquo:"›",oline:"‾",euro:"€",trade:"™",larr:"←",uarr:"↑",rarr:"→",darr:"↓",harr:"↔",crarr:"↵",lceil:"⌈",rceil:"⌉",lfloor:"⌊",rfloor:"⌋",loz:"◊",spades:"♠",clubs:"♣",hearts:"♥",diams:"♦"}),t.entityMap=t.HTML_ENTITIES},function(e,t,n){var r=n(2).NAMESPACE,o=/[A-Z_a-z\xC0-\xD6\xD8-\xF6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/,i=new RegExp("[\\-\\.0-9"+o.source.slice(1,-1)+"\\u00B7\\u0300-\\u036F\\u203F-\\u2040]"),a=new RegExp("^"+o.source+i.source+"*(?::"+o.source+i.source+"*)?$");function s(e,t){this.message=e,this.locator=t,Error.captureStackTrace&&Error.captureStackTrace(this,s)}function c(){}function u(e,t){return t.lineNumber=e.lineNumber,t.columnNumber=e.columnNumber,t}function l(e,t,n,o,i,a){function s(e,t,r){n.attributeNames.hasOwnProperty(e)&&a.fatalError("Attribute "+e+" redefined"),n.addValue(e,t.replace(/[\t\n\r]/g," ").replace(/&#?\w+;/g,i),r)}for(var c,u=++t,l=0;;){var d=e.charAt(u);switch(d){case"=":if(1===l)c=e.slice(t,u),l=3;else{if(2!==l)throw new Error("attribute equal must after attrName");l=3}break;case"'":case'"':if(3===l||1===l){if(1===l&&(a.warning('attribute value must after "="'),c=e.slice(t,u)),t=u+1,!((u=e.indexOf(d,t))>0))throw new Error("attribute value no end '"+d+"' match");s(c,p=e.slice(t,u),t-1),l=5}else{if(4!=l)throw new Error('attribute value must after "="');s(c,p=e.slice(t,u),t),a.warning('attribute "'+c+'" missed start quot('+d+")!!"),t=u+1,l=5}break;case"/":switch(l){case 0:n.setTagName(e.slice(t,u));case 5:case 6:case 7:l=7,n.closed=!0;case 4:case 1:case 2:break;default:throw new Error("attribute invalid close char('/')")}break;case"":return a.error("unexpected end of input"),0==l&&n.setTagName(e.slice(t,u)),u;case">":switch(l){case 0:n.setTagName(e.slice(t,u));case 5:case 6:case 7:break;case 4:case 1:"/"===(p=e.slice(t,u)).slice(-1)&&(n.closed=!0,p=p.slice(0,-1));case 2:2===l&&(p=c),4==l?(a.warning('attribute "'+p+'" missed quot(")!'),s(c,p,t)):(r.isHTML(o[""])&&p.match(/^(?:disabled|checked|selected)$/i)||a.warning('attribute "'+p+'" missed value!! "'+p+'" instead!!'),s(p,p,t));break;case 3:throw new Error("attribute value missed!!")}return u;case"€":d=" ";default:if(d<=" ")switch(l){case 0:n.setTagName(e.slice(t,u)),l=6;break;case 1:c=e.slice(t,u),l=2;break;case 4:var p=e.slice(t,u);a.warning('attribute "'+p+'" missed quot(")!!'),s(c,p,t);case 5:l=6}else switch(l){case 2:n.tagName;r.isHTML(o[""])&&c.match(/^(?:disabled|checked|selected)$/i)||a.warning('attribute "'+c+'" missed value!! "'+c+'" instead2!!'),s(c,c,t),t=u,l=1;break;case 5:a.warning('attribute space is required"'+c+'"!!');case 6:l=1,t=u;break;case 3:l=4,t=u;break;case 7:throw new Error("elements closed character '/' and '>' must be connected to")}}u++}}function d(e,t,n){for(var o=e.tagName,i=null,a=e.length;a--;){var s=e[a],c=s.qName,u=s.value;if((f=c.indexOf(":"))>0)var l=s.prefix=c.slice(0,f),d=c.slice(f+1),p="xmlns"===l&&d;else d=c,l=null,p="xmlns"===c&&"";s.localName=d,!1!==p&&(null==i&&(i={},h(n,n={})),n[p]=i[p]=u,s.uri=r.XMLNS,t.startPrefixMapping(p,u))}for(a=e.length;a--;){(l=(s=e[a]).prefix)&&("xml"===l&&(s.uri=r.XML),"xmlns"!==l&&(s.uri=n[l||""]))}var f;(f=o.indexOf(":"))>0?(l=e.prefix=o.slice(0,f),d=e.localName=o.slice(f+1)):(l=null,d=e.localName=o);var m=e.uri=n[l||""];if(t.startElement(m,d,o,e),!e.closed)return e.currentNSMap=n,e.localNSMap=i,!0;if(t.endElement(m,d,o),i)for(l in i)Object.prototype.hasOwnProperty.call(i,l)&&t.endPrefixMapping(l)}function p(e,t,n,r,o){if(/^(?:script|textarea)$/i.test(n)){var i=e.indexOf("",t),a=e.substring(t+1,i);if(/[&<]/.test(a))return/^script$/i.test(n)?(o.characters(a,0,a.length),i):(a=a.replace(/&#?\w+;/g,r),o.characters(a,0,a.length),i)}return t+1}function f(e,t,n,r){var o=r[n];return null==o&&((o=e.lastIndexOf(""))t?(n.comment(e,t+4,o-t-4),o+3):(r.error("Unclosed comment"),-1):-1;if("CDATA["==e.substr(t+3,6)){var o=e.indexOf("]]>",t+9);return n.startCDATA(),n.characters(e,t+9,o-t-9),n.endCDATA(),o+3}var i=function(e,t){var n,r=[],o=/'[^']+'|"[^"]+"|[^\s<>\/=]+=?|(\/?\s*>|<)/g;o.lastIndex=t,o.exec(e);for(;n=o.exec(e);)if(r.push(n),n[1])return r}(e,t),a=i.length;if(a>1&&/!doctype/i.test(i[0][0])){var s=i[1][0],c=!1,u=!1;a>3&&(/^public$/i.test(i[2][0])?(c=i[3][0],u=a>4&&i[4][0]):/^system$/i.test(i[2][0])&&(u=i[3][0]));var l=i[a-1];return n.startDTD(s,c,u),n.endDTD(),l.index+l[0].length}return-1}function g(e,t,n){var r=e.indexOf("?>",t);if(r){var o=e.substring(t,r).match(/^<\?(\S*)\s*([\s\S]*?)\s*$/);if(o){o[0].length;return n.processingInstruction(o[1],o[2]),r+2}return-1}return-1}function y(){this.attributeNames={}}s.prototype=new Error,s.prototype.name=s.name,c.prototype={parse:function(e,t,n){var o=this.domBuilder;o.startDocument(),h(t,t={}),function(e,t,n,o,i){function a(e){if(e>65535){var t=55296+((e-=65536)>>10),n=56320+(1023&e);return String.fromCharCode(t,n)}return String.fromCharCode(e)}function c(e){var t=e.slice(1,-1);return Object.hasOwnProperty.call(n,t)?n[t]:"#"===t.charAt(0)?a(parseInt(t.substr(1).replace("x","0x"))):(i.error("entity not found:"+e),e)}function h(t){if(t>E){var n=e.substring(E,t).replace(/&#?\w+;/g,c);b&&v(E),o.characters(n,0,t-E),E=t}}function v(t,n){for(;t>=k&&(n=S.exec(e));)C=n.index,k=C+n[0].length,b.lineNumber++;b.columnNumber=t-C+1}var C=0,k=0,S=/.*(?:\r\n?|\n)|.*$/g,b=o.locator,T=[{currentNSMap:t}],R={},E=0;for(;;){try{var w=e.indexOf("<",E);if(w<0){if(!e.substr(E).match(/^\s*$/)){var x=o.doc,A=x.createTextNode(e.substr(E));x.appendChild(A),o.currentElement=A}return}switch(w>E&&h(w),e.charAt(w+1)){case"/":var I=e.indexOf(">",w+3),O=e.substring(w+2,I).replace(/[ \t\n\r]+$/g,""),B=T.pop();I<0?(O=e.substring(w+2).replace(/[\s<].*/,""),i.error("end tag name: "+O+" is not complete:"+B.tagName),I=w+1+O.length):O.match(/\sE?E=I:h(Math.max(w,E)+1)}}(e,t,n,o,this.errorHandler),o.endDocument()}},y.prototype={setTagName:function(e){if(!a.test(e))throw new Error("invalid tagName:"+e);this.tagName=e},addValue:function(e,t,n){if(!a.test(e))throw new Error("invalid attribute:"+e);this.attributeNames[e]=this.length,this[this.length++]={qName:e,value:t,offset:n}},length:0,getLocalName:function(e){return this[e].localName},getLocator:function(e){return this[e].locator},getQName:function(e){return this[e].qName},getURI:function(e){return this[e].uri},getValue:function(e){return this[e].value}},t.XMLReader=c,t.ParseError=s},function(e,t,n){var r=n(0),o="a-zA-Z_À-ÖØ-öø-ÿͰ-ͽͿ-῿‌-‍⁰-↏Ⰰ-⿿、-퟿豈-﷏ﷰ-�",i=new RegExp("^([^"+o+"])|^((x|X)(m|M)(l|L))|([^"+o+"-.0-9·̀-ͯ‿⁀])","g"),a=/[^\x09\x0A\x0D\x20-\xFF\x85\xA0-\uD7FF\uE000-\uFDCF\uFDE0-\uFFFD]/gm,s=function(e){var t=[];if(e instanceof Object)for(var n in e)e.hasOwnProperty(n)&&t.push(n);return t},c=function(e,t){var n=function(e,n,r,o,a){var s=void 0!==t.indent?t.indent:"\t",c=t.prettyPrint?"\n"+new Array(o).join(s):"";t.removeIllegalNameCharacters&&(e=e.replace(i,"_"));var u=[c,"<",e,r||""];return n&&n.length>0?(u.push(">"),u.push(n),a&&u.push(c),u.push("")):u.push("/>"),u.join("")};return function e(o,i,c){var u=r(o);switch((Array.isArray?Array.isArray(o):o instanceof Array)?u="array":o instanceof Date&&(u="date"),u){case"array":var l=[];return o.map((function(t){l.push(e(t,1,c+1))})),t.prettyPrint&&l.push("\n"),l.join("");case"date":return o.toJSON?o.toJSON():o+"";case"object":var d=[];for(var p in o)if(o.hasOwnProperty(p))if(o[p]instanceof Array)for(var f=0;f0&&d.push("\n"),d.join("");case"function":return o();default:return t.escape?(""+o).replace(/&/g,"&").replace(//g,">").replace(/'/g,"'").replace(/"/g,""").replace(a,""):""+o}}(e,0,0)},u=function(e){var t=['"),t.join("")};e.exports=function(e,t){if(t||(t={xmlHeader:{standalone:!0},prettyPrint:!0,indent:" ",escape:!0}),"string"==typeof e)try{e=JSON.parse(e.toString())}catch(e){return!1}var n="",o="";return t&&("object"==r(t)?(t.xmlHeader&&(n=u(!!t.xmlHeader.standalone)),void 0!==t.docType&&(o="")):n=u()),[n,(t=t||{}).prettyPrint&&o?"\n":"",o,c(e,t)].join("").replace(/\n{2,}/g,"\n").replace(/\s+$/g,"")}},function(e,t){e.exports=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},e.exports.__esModule=!0,e.exports.default=e.exports},function(e,t){function n(e,t){for(var n=0;n0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]60*this.strategy.requestInterval*1e3},e.prototype.getUploadUrl=function(){return this.strategy.httpsUploadUrl+"?appkey="+this.appkey},e.prototype.isBlackEvent=function(e){return-1!=this.strategy.blacklist.indexOf(e)},e.prototype.isEventUpOnOff=function(){return this.strategy.isEventUpOnOff},e.prototype.isSampleEvent=function(e){return!!Object.prototype.hasOwnProperty.call(this.realSample,e)&&this.realSample[e]this.duration)return this.createSession();t=r.sessionId,n=r.sessionStart,this.getSessionStackDepth=0}catch(e){}return{sessionId:t,sessionStart:n}},e.prototype.createSession=function(){var e=Date.now(),t={sessionId:this.appkey+"_"+e.toString(),sessionStart:e};this.storage.setItem(v,JSON.stringify(t)),this.storage.setItem(a,e.toString());var n="is_new_user",r=this.storage.getItem(n);return this.getSessionStackDepth<=1&&this.beacon.onDirectUserAction("rqd_applaunched",{A21:r?"N":"Y"}),this.storage.setItem(n,JSON.stringify(!1)),t},e}();function k(){var e=navigator.userAgent,t=e.indexOf("compatible")>-1&&e.indexOf("MSIE")>-1,n=e.indexOf("Edge")>-1&&!t,r=e.indexOf("Trident")>-1&&e.indexOf("rv:11.0")>-1;if(t){new RegExp("MSIE (\\d+\\.\\d+);").test(e);var o=parseFloat(RegExp.$1);return 7==o?7:8==o?8:9==o?9:10==o?10:6}return n?-2:r?11:-1}var S,b,T=function(){return(T=Object.assign||function(e){for(var t,n=1,r=arguments.length;n0||!window.indexedDB||/X5Lite/.test(navigator.userAgent)?(this.store=new A(t),this.dbEventCount=this.store.getCount()):(this.store=new x(e),this.getCount().then((function(e){n.dbEventCount=e})).catch((function(e){})))}return e.prototype.getCount=function(){return n(this,void 0,void 0,(function(){return r(this,(function(e){switch(e.label){case 0:return e.trys.push([0,2,,3]),[4,this.store.getCount()];case 1:return[2,e.sent()];case 2:return e.sent(),[2,Promise.reject()];case 3:return[2]}}))}))},e.prototype.insertEvent=function(e,t){return n(this,void 0,void 0,(function(){var n,o;return r(this,(function(r){switch(r.label){case 0:if(this.dbEventCount>=1e4)return[2,Promise.reject()];n=f(e.mapValue),r.label=1;case 1:return r.trys.push([1,3,,4]),this.dbEventCount++,[4,this.store.setItem(n,e)];case 2:return[2,r.sent()];case 3:return o=r.sent(),t&&t(o,e),this.dbEventCount--,[2,Promise.reject()];case 4:return[2]}}))}))},e.prototype.getEvents=function(){return n(this,void 0,void 0,(function(){var e;return r(this,(function(t){switch(t.label){case 0:e=[],t.label=1;case 1:return t.trys.push([1,3,,4]),[4,this.store.iterate((function(t){e.push(t)}))];case 2:case 3:return t.sent(),[2,Promise.all(e)];case 4:return[2]}}))}))},e.prototype.removeEvent=function(e){return n(this,void 0,void 0,(function(){var t;return r(this,(function(n){switch(n.label){case 0:t=f(e.mapValue),n.label=1;case 1:return n.trys.push([1,3,,4]),this.dbEventCount--,[4,this.store.removeItem(t)];case 2:return[2,n.sent()];case 3:return n.sent(),this.dbEventCount++,[2,Promise.reject()];case 4:return[2]}}))}))},e}(),O=function(){return(O=Object.assign||function(e){for(var t,n=1,r=arguments.length;n0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&i<8,t.isUnderIE8||(t.isUnderIE=i>0,e.needInitQimei&&function(e,t){var n;(void 0===n&&(n=Date.now()+"-"+Math.random()),new Promise((function(e,t){if(document.getElementById(n))e(void 0);else{var r=document.getElementsByTagName("head")[0],o=document.createElement("script");o.onload=function(){return function(){o.onload=null,e(void 0)}},o.onerror=function(e){o.onerror=null,r.removeChild(o),t(e)},o.src="https://tun-cos-1258344701.file.myqcloud.com/fp.js",o.id=n,r.appendChild(o)}}))).then((function(){(new Fingerprint).getQimei36(e,t)})).catch((function(e){}))}(e.appkey,(function(e){t.qimei36=e.q36})),t.network=new q(e),t.storage=new z(e.appkey),t.initCommonInfo(e),t.store=new I(e.appkey,t.storage),t.errorReport=new g(t.config,t.commonInfo,"web",t.network),t.strategy=new y(null==e.needQueryConfig||e.needQueryConfig,t.config,t.commonInfo,t.storage,t.network),t.logidStartTime=t.storage.getItem(G),t.logidStartTime||(t.logidStartTime=Date.now().toString(),t.storage.setItem(G,t.logidStartTime)),r=t.logidStartTime,o=Date.now()-Number.parseFloat(r),Math.floor(o/864e5)>=365&&t.storage.clear(),t.initSession(e),t.onDirectUserAction("rqd_js_init",{}),setTimeout((function(){return t.lifeCycle.emit("init")}),0),t.initDelayTime=e.delay?e.delay:1e3,t.cycleTask(t.initDelayTime)),t}return function(t,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}(r,n),r.prototype.initSession=function(e){var t=18e5;e.sessionDuration&&e.sessionDuration>3e4&&(t=e.sessionDuration),this.beaconSession=new C(this.storage,t,this)},r.prototype.initCommonInfo=function(e){var t=Number(this.storage.getItem(a));try{var n=JSON.parse(this.storage.getItem(s));(Date.now()-t>3e4||!n)&&this.storage.setItem(s,JSON.stringify([]))}catch(e){}e.uploadUrl&&(this.uploadUrl=e.uploadUrl+"?appkey="+e.appkey);var r=[window.screen.width,window.screen.height];window.devicePixelRatio&&r.push(window.devicePixelRatio),this.commonInfo={deviceId:this.storage.createDeviceId(),language:navigator&&navigator.language||"zh_CN",query:window.location.search,userAgent:navigator.userAgent,pixel:r.join("*"),channelID:e.channelID?String(e.channelID):"",openid:e.openid?String(e.openid):"",unid:e.unionid?String(e.unionid):"",sdkVersion:V},this.config.appVersion=e.versionCode?String(e.versionCode):"",this.config.strictMode=e.strictMode},r.prototype.cycleTask=function(e){var t=this;this.intervalID=window.setInterval((function(){t.pauseSearching||t.store.getEvents().then((function(e){0==e.length&&(t.pauseSearching=!0);var n=[],r=JSON.parse(t.storage.getItem(s));r||(r=[]),e&&e.forEach((function(e){var t=f(e.mapValue);-1==r.indexOf(t)&&(n.push(e),r.push(t))})),0!=n.length&&(t.storage.setItem(s,JSON.stringify(r)),t._normalLogPipeline(t.assembleData(n)))})).catch((function(e){}))}),e)},r.prototype.onReport=function(e,t,n){var r=this;if(this.isUnderIE8)this.errorReport.reportError("601","UnderIE8");else{this.pauseSearching=!1;var o=this.generateData(e,t,n);if(n&&0==this.delayTime&&!this.underWeakNet)this._normalLogPipeline(this.assembleData(o));else{var i=o.shift();i&&this.store.insertEvent(i,(function(e){e&&r.errorReport.reportError("604","insertEvent fail!")})).catch((function(e){r._normalLogPipeline(r.assembleData(o))}))}}},r.prototype.onSendBeacon=function(e,t){if(this.isUnderIE)this.errorReport.reportError("605","UnderIE");else{this.pauseSearching=!1;var n=this.assembleData(this.generateData(e,t,!0));"function"==typeof navigator.sendBeacon&&navigator.sendBeacon(this.uploadUrl||this.strategy.getUploadUrl(),JSON.stringify(n))}},r.prototype.generateData=function(e,n,r){var o=[],i="4.5.14-web_"+(r?"direct_log_id":"normal_log_id"),a=Number(this.storage.getItem(i));return a=a||1,n=t(t({},n),{A99:r?"Y":"N",A100:a.toString(),A72:V,A88:this.logidStartTime}),a++,this.storage.setItem(i,a.toString()),o.push({eventCode:e,eventTime:Date.now().toString(),mapValue:d(n,this.config.strictMode)}),o},r.prototype.assembleData=function(e){var n=this.beaconSession.getSession();return{appVersion:this.config.appVersion?p(this.config.appVersion):"",sdkId:"js",sdkVersion:V,mainAppKey:this.config.appkey,platformId:3,common:d(t(t({},this.additionalParams),{A2:this.commonInfo.deviceId,A8:this.commonInfo.openid,A12:this.commonInfo.language,A17:this.commonInfo.pixel,A23:this.commonInfo.channelID,A50:this.commonInfo.unid,A76:n.sessionId,A101:this.commonInfo.userAgent,A102:window.location.href,A104:document.referrer,A119:this.commonInfo.query,A153:this.qimei36}),!1),events:e}},r.prototype.monitorUploadFailed=function(){this.uselessCycleTaskNum++,this.uselessCycleTaskNum>=5&&(window.clearInterval(this.intervalID),this.cycleTask(6e4),this.underWeakNet=!0)},r.prototype.doCustomCycleTask=function(){this.uselessCycleTaskNum>=5&&(window.clearInterval(this.intervalID),this.cycleTask(this.initDelayTime)),this.uselessCycleTaskNum=0,this.underWeakNet=!1},r}(m)},"object"==a(t)&&void 0!==e?e.exports=i():void 0===(o="function"==typeof(r=i)?r.call(t,n,t,e):r)||(e.exports=o)},function(e,t,n){var r=n(9),o=n(1),i={};e.exports.transferToTaskMethod=function(e,t){i[t]=e[t],e[t]=function(e,n){e.SkipTask?i[t].call(this,e,n):this._addTask(t,e,n)}},e.exports.init=function(e){var t,n,a=[],s={},c=0,u=0,l=function(e){var t={id:e.id,Bucket:e.Bucket,Region:e.Region,Key:e.Key,FilePath:e.FilePath,state:e.state,loaded:e.loaded,size:e.size,speed:e.speed,percent:e.percent,hashPercent:e.hashPercent,error:e.error};return e.FilePath&&(t.FilePath=e.FilePath),e._custom&&(t._custom=e._custom),t},d=(n=function(){t=0,e.emit("task-list-update",{list:o.map(a,l)}),e.emit("list-update",{list:o.map(a,l)})},function(){t||(t=setTimeout(n))}),p=function(){if(!(a.length<=e.options.UploadQueueSize)){for(var t=0;te.options.UploadQueueSize;){var n="waiting"===a[t].state||"checking"===a[t].state||"uploading"===a[t].state;a[t]&&n?t++:(s[a[t].id]&&delete s[a[t].id],a.splice(t,1),u--)}d()}},f=function t(){if(!(c>=e.options.FileParallelLimit)){for(;a[u]&&"waiting"!==a[u].state;)u++;if(!(u>=a.length)){var n=a[u];u++,c++,n.state="checking",n.params.onTaskStart&&n.params.onTaskStart(l(n)),!n.params.UploadData&&(n.params.UploadData={});var r=o.formatParams(n.api,n.params);i[n.api].call(e,r,(function(r,o){e._isRunningTask(n.id)&&("checking"!==n.state&&"uploading"!==n.state||(n.state=r?"error":"success",r&&(n.error=r),c--,d(),t(),n.callback&&n.callback(r,o),"success"===n.state&&(n.params&&(delete n.params.UploadData,delete n.params.Body,delete n.params),delete n.callback)),p())})),d(),setTimeout(t)}}},h=function(t,n){var o=s[t];if(o){var i=o&&"waiting"===o.state,a=o&&("checking"===o.state||"uploading"===o.state);if("canceled"===n&&"canceled"!==o.state||"paused"===n&&i||"paused"===n&&a){if("paused"===n&&o.params.Body&&"function"==typeof o.params.Body.pipe)return;o.state=n,e.emit("inner-kill-task",{TaskId:t,toState:n});try{var u=o&&o.params&&o.params.UploadData.UploadId}catch(e){}"canceled"===n&&u&&r.removeUsing(u),d(),a&&(c--,f()),"canceled"===n&&(o.params&&(delete o.params.UploadData,delete o.params.Body,delete o.params),delete o.callback)}p()}};e._addTasks=function(t){o.each(t,(function(t){e._addTask(t.api,t.params,t.callback,!0)})),d()};e._addTask=function(t,n,r,i){n=o.formatParams(t,n);var c=o.uuid();n.TaskId=c,n.onTaskReady&&n.onTaskReady(c),n.TaskReady&&(n.TaskReady(c),!1);var u={params:n,callback:r,api:t,index:a.length,id:c,Bucket:n.Bucket,Region:n.Region,Key:n.Key,FilePath:n.FilePath||"",state:"waiting",loaded:0,size:0,speed:0,percent:0,hashPercent:0,error:null,_custom:n._custom},l=n.onHashProgress;n.onHashProgress=function(t){e._isRunningTask(u.id)&&(u.hashPercent=t.percent,l&&l(t),d())};var h=n.onProgress;return n.onProgress=function(t){e._isRunningTask(u.id)&&("checking"===u.state&&(u.state="uploading"),u.loaded=t.loaded,u.speed=t.speed,u.percent=t.percent,h&&h(t),d())},o.getFileSize(t,n,(function(e,t){if(e)return r(o.error(e));s[c]=u,a.push(u),u.size=t,!i&&d(),f(),p()})),c},e._isRunningTask=function(e){var t=s[e];return!(!t||"checking"!==t.state&&"uploading"!==t.state)},e.getTaskList=function(){return o.map(a,l)},e.cancelTask=function(e){h(e,"canceled")},e.pauseTask=function(e){h(e,"paused")},e.restartTask=function(e){var t=s[e];!t||"paused"!==t.state&&"error"!==t.state||(t.state="waiting",d(),u=Math.min(u,t.index),f())},e.isUploadRunning=function(){return c||u-1&&(a["SSE-COS"]=a.SSECOS,delete a.SSECOS)}var s=i.json2xml({InventoryConfiguration:r}),c=t.Headers;c["Content-Type"]="application/xml",c["Content-MD5"]=i.b64(i.md5(s));var u="PUT"===e?"name/cos:PutBucketInventory":"name/cos:PostBucketInventory";f.call(this,{Action:u,method:e,Bucket:t.Bucket,Region:t.Region,body:s,action:"inventory",qs:{id:t.Id},headers:c},(function(e,t){return e&&204===e.statusCode?n(null,{statusCode:e.statusCode}):e?n(e):void n(null,{statusCode:t.statusCode,headers:t.headers})}))}function s(e){var t={GrantFullControl:[],GrantWrite:[],GrantRead:[],GrantReadAcp:[],GrantWriteAcp:[],ACL:""},n={FULL_CONTROL:"GrantFullControl",WRITE:"GrantWrite",READ:"GrantRead",READ_ACP:"GrantReadAcp",WRITE_ACP:"GrantWriteAcp"},r=(e&&e.AccessControlList||{}).Grant;r&&(r=i.isArray(r)?r:[r]);var o={READ:0,WRITE:0,FULL_CONTROL:0};return r&&r.length&&i.each(r,(function(r){"qcs::cam::anyone:anyone"===r.Grantee.ID||"http://cam.qcloud.com/groups/global/AllUsers"===r.Grantee.URI?o[r.Permission]=1:r.Grantee.ID!==e.Owner.ID&&t[n[r.Permission]].push('id="'+r.Grantee.ID+'"')})),o.FULL_CONTROL||o.WRITE&&o.READ?t.ACL="public-read-write":o.READ?t.ACL="public-read":t.ACL="private",i.each(n,(function(e){t[e]=c(t[e].join(","))})),t}function c(e){var t,n,r=e.split(","),o={};for(t=0;t-1?"{Region}.myqcloud.com":"cos.{Region}.myqcloud.com",e.ForcePathStyle||(s="{Bucket}."+s)),s=(s=s.replace(/\{\{AppId\}\}/gi,a).replace(/\{\{Bucket\}\}/gi,o).replace(/\{\{Region\}\}/gi,t).replace(/\{\{.*?\}\}/gi,"")).replace(/\{AppId\}/gi,a).replace(/\{BucketName\}/gi,o).replace(/\{Bucket\}/gi,n).replace(/\{Region\}/gi,t).replace(/\{.*?\}/gi,""),/^[a-zA-Z]+:\/\//.test(s)||(s=u+"//"+s),"/"===s.slice(-1)&&(s=s.slice(0,-1));var l=s;return e.ForcePathStyle&&(l+="/"+n),l+="/",c&&(l+=i.camSafeUrlEncode(c).replace(/%2F/g,"/")),e.isLocation&&(l=l.replace(/^https?:\/\//,"")),l}var l=function(e){if(!e.Bucket||!e.Region)return"";var t=void 0===e.UseAccelerate?this.options.UseAccelerate:e.UseAccelerate,n=(e.Url||u({ForcePathStyle:this.options.ForcePathStyle,protocol:this.options.Protocol,domain:this.options.Domain,bucket:e.Bucket,region:t?"accelerate":e.Region})).replace(/^https?:\/\/([^/]+)(\/.*)?$/,"$1");return new RegExp("^([a-z\\d-]+-\\d+\\.)?(cos|cosv6|ci|pic)\\.([a-z\\d-]+)\\.myqcloud\\.com$").test(n)?n:""};function d(e,t){var n=i.clone(e.Headers),r="";i.each(n,(function(e,t){(""===e||["content-type","cache-control","expires"].indexOf(t.toLowerCase())>-1)&&delete n[t],"host"===t.toLowerCase()&&(r=e)}));var o=!1!==e.ForceSignHost;!r&&e.SignHost&&o&&(n.Host=e.SignHost);var a=!1,s=function(e,n){a||(a=!0,n&&n.XCosSecurityToken&&!n.SecurityToken&&((n=i.clone(n)).SecurityToken=n.XCosSecurityToken,delete n.XCosSecurityToken),t&&t(e,n))},c=this,u=e.Bucket||"",l=e.Region||"",d=e.Key||"";c.options.ForcePathStyle&&u&&(d=u+"/"+d);var p="/"+d,f={},h=e.Scope;if(!h){var m=e.Action||"",g=e.ResourceKey||e.Key||"";h=e.Scope||[{action:m,bucket:u,region:l,prefix:g}]}var y=i.md5(JSON.stringify(h));c._StsCache=c._StsCache||[],function(){var e,t;for(e=c._StsCache.length-1;e>=0;e--){t=c._StsCache[e];var n=Math.round(i.getSkewTime(c.options.SystemClockOffset)/1e3)+30;if(t.StartTime&&n=t.ExpiredTime)c._StsCache.splice(e,1);else if(!t.ScopeLimit||t.ScopeLimit&&t.ScopeKey===y){f=t;break}}}();var v,C=function(){var t="";f.StartTime&&e.Expires?t=f.StartTime+";"+(f.StartTime+1*e.Expires):f.StartTime&&f.ExpiredTime&&(t=f.StartTime+";"+f.ExpiredTime);var r={Authorization:i.getAuth({SecretId:f.TmpSecretId,SecretKey:f.TmpSecretKey,Method:e.Method,Pathname:p,Query:e.Query,Headers:n,Expires:e.Expires,UseRawKey:c.options.UseRawKey,SystemClockOffset:c.options.SystemClockOffset,KeyTime:t,ForceSignHost:o}),SecurityToken:f.SecurityToken||f.XCosSecurityToken||"",Token:f.Token||"",ClientIP:f.ClientIP||"",ClientUA:f.ClientUA||""};s(null,r)},k=function(e){if(e.Authorization){var t=!1,n=e.Authorization;if(n)if(n.indexOf(" ")>-1)t=!1;else if(n.indexOf("q-sign-algorithm=")>-1&&n.indexOf("q-ak=")>-1&&n.indexOf("q-sign-time=")>-1&&n.indexOf("q-key-time=")>-1&&n.indexOf("q-url-param-list=")>-1)t=!0;else try{(n=atob(n)).indexOf("a=")>-1&&n.indexOf("k=")>-1&&n.indexOf("t=")>-1&&n.indexOf("r=")>-1&&n.indexOf("b=")>-1&&(t=!0)}catch(e){}if(!t)return i.error(new Error("getAuthorization callback params format error"))}else{if(!e.TmpSecretId)return i.error(new Error('getAuthorization callback params missing "TmpSecretId"'));if(!e.TmpSecretKey)return i.error(new Error('getAuthorization callback params missing "TmpSecretKey"'));if(!e.SecurityToken&&!e.XCosSecurityToken)return i.error(new Error('getAuthorization callback params missing "SecurityToken"'));if(!e.ExpiredTime)return i.error(new Error('getAuthorization callback params missing "ExpiredTime"'));if(e.ExpiredTime&&10!==e.ExpiredTime.toString().length)return i.error(new Error('getAuthorization callback params "ExpiredTime" should be 10 digits'));if(e.StartTime&&10!==e.StartTime.toString().length)return i.error(new Error('getAuthorization callback params "StartTime" should be 10 StartTime'))}return!1};if(f.ExpiredTime&&f.ExpiredTime-i.getSkewTime(c.options.SystemClockOffset)/1e3>60)C();else if(c.options.getAuthorization)c.options.getAuthorization.call(c,{Bucket:u,Region:l,Method:e.Method,Key:d,Pathname:p,Query:e.Query,Headers:n,Scope:h,SystemClockOffset:c.options.SystemClockOffset,ForceSignHost:o},(function(e){"string"==typeof e&&(e={Authorization:e});var t=k(e);if(t)return s(t);e.Authorization?s(null,e):((f=e||{}).Scope=h,f.ScopeKey=y,c._StsCache.push(f),C())}));else{if(!c.options.getSTS)return v={Authorization:i.getAuth({SecretId:e.SecretId||c.options.SecretId,SecretKey:e.SecretKey||c.options.SecretKey,Method:e.Method,Pathname:p,Query:e.Query,Headers:n,Expires:e.Expires,UseRawKey:c.options.UseRawKey,SystemClockOffset:c.options.SystemClockOffset,ForceSignHost:o}),SecurityToken:c.options.SecurityToken||c.options.XCosSecurityToken},s(null,v),v;c.options.getSTS.call(c,{Bucket:u,Region:l},(function(e){(f=e||{}).Scope=h,f.ScopeKey=y,f.TmpSecretId||(f.TmpSecretId=f.SecretId),f.TmpSecretKey||(f.TmpSecretKey=f.SecretKey);var t=k(f);if(t)return s(t);c._StsCache.push(f),C()}))}return""}function p(e){var t=!1,n=!1,r=e.headers&&(e.headers.date||e.headers.Date)||e.error&&e.error.ServerTime;try{var o=e.error.Code,a=e.error.Message;("RequestTimeTooSkewed"===o||"AccessDenied"===o&&"Request has expired"===a)&&(n=!0)}catch(e){}if(e)if(n&&r){var s=Date.parse(r);this.options.CorrectClockSkew&&Math.abs(i.getSkewTime(this.options.SystemClockOffset)-s)>=3e4&&(this.options.SystemClockOffset=s-Date.now(),t=!0)}else 5===Math.floor(e.statusCode/100)&&(t=!0);return t}function f(e,t){var n=this;!e.headers&&(e.headers={}),!e.qs&&(e.qs={}),e.VersionId&&(e.qs.versionId=e.VersionId),e.qs=i.clearKey(e.qs),e.headers&&(e.headers=i.clearKey(e.headers)),e.qs&&(e.qs=i.clearKey(e.qs));var r=i.clone(e.qs);e.action&&(r[e.action]="");var o=e.url||e.Url,a=e.SignHost||l.call(this,{Bucket:e.Bucket,Region:e.Region,Url:o}),s=e.tracker;!function o(i){var c=n.options.SystemClockOffset;s&&s.setParams({signStartTime:(new Date).getTime(),retryTimes:i-1}),d.call(n,{Bucket:e.Bucket||"",Region:e.Region||"",Method:e.method,Key:e.Key,Query:r,Headers:e.headers,SignHost:a,Action:e.Action,ResourceKey:e.ResourceKey,Scope:e.Scope,ForceSignHost:n.options.ForceSignHost},(function(r,a){r?t(r):(s&&s.setParams({signEndTime:(new Date).getTime(),httpStartTime:(new Date).getTime()}),e.AuthData=a,h.call(n,e,(function(r,a){s&&s.setParams({httpEndTime:(new Date).getTime()}),r&&i<2&&(c!==n.options.SystemClockOffset||p.call(n,r))?(e.headers&&(delete e.headers.Authorization,delete e.headers.token,delete e.headers.clientIP,delete e.headers.clientUA,e.headers["x-cos-security-token"]&&delete e.headers["x-cos-security-token"],e.headers["x-ci-security-token"]&&delete e.headers["x-ci-security-token"]),o(i+1)):t(r,a)})))}))}(1)}function h(e,t){var n=this,r=e.TaskId;if(!r||n._isRunningTask(r)){var a=e.Bucket,s=e.Region,c=e.Key,l=e.method||"GET",d=e.Url||e.url,p=e.body,f=e.rawBody;n.options.UseAccelerate&&(s="accelerate"),d=d||u({ForcePathStyle:n.options.ForcePathStyle,protocol:n.options.Protocol,domain:n.options.Domain,bucket:a,region:s,object:c}),e.action&&(d=d+"?"+(i.isIOS_QQ?"".concat(e.action,"="):e.action)),e.qsStr&&(d=d.indexOf("?")>-1?d+"&"+e.qsStr:d+"?"+e.qsStr);var h={method:l,url:d,headers:e.headers,qs:e.qs,body:p},m="x-cos-security-token";if(i.isCIHost(d)&&(m="x-ci-security-token"),h.headers.Authorization=e.AuthData.Authorization,e.AuthData.Token&&(h.headers.token=e.AuthData.Token),e.AuthData.ClientIP&&(h.headers.clientIP=e.AuthData.ClientIP),e.AuthData.ClientUA&&(h.headers.clientUA=e.AuthData.ClientUA),e.AuthData.SecurityToken&&(h.headers[m]=e.AuthData.SecurityToken),h.headers&&(h.headers=i.clearKey(h.headers)),h=i.clearKey(h),e.onProgress&&"function"==typeof e.onProgress){var g=p&&(p.size||p.length)||0;h.onProgress=function(t){if(!r||n._isRunningTask(r)){var o=t?t.loaded:0;e.onProgress({loaded:o,total:g})}}}e.onDownloadProgress&&(h.onDownloadProgress=e.onDownloadProgress),e.DataType&&(h.dataType=e.DataType),this.options.Timeout&&(h.timeout=this.options.Timeout),n.options.ForcePathStyle&&(h.pathStyle=n.options.ForcePathStyle),n.emit("before-send",h);var y=h.url.includes("accelerate."),v=h.qs?Object.keys(h.qs).map((function(e){return"".concat(e,"=").concat(h.qs[e])})).join("&"):"",C=v?h.url+"?"+v:h.url;e.tracker&&e.tracker.setParams({reqUrl:C,accelerate:y?"Y":"N"}),e.tracker&&e.tracker.parent&&e.tracker.parent.setParams({reqUrl:C,accelerate:y?"Y":"N"});var k=(n.options.Request||o)(h,(function(e){if(!e||"abort"!==e.error){var o={options:h,error:e&&e.error,statusCode:e&&e.statusCode||0,statusMessage:e&&e.statusMessage||"",headers:e&&e.headers||{},body:e&&e.body};n.emit("after-receive",o);var a,s=o.error,c=o.body,u={statusCode:o.statusCode,statusMessage:o.statusMessage,headers:o.headers},l=function(e,o){if(r&&n.off("inner-kill-task",S),!a){a=!0;var s={};u&&u.statusCode&&(s.statusCode=u.statusCode),u&&u.headers&&(s.headers=u.headers),e?(e=i.extend(e||{},s),t(e,null)):(o=i.extend(o||{},s),t(null,o)),k=null}};if(s)return l(i.error(s));var d,p=u.statusCode,m=2===Math.floor(p/100);if(f&&m)return l(null,{body:c});try{d=c&&c.indexOf("<")>-1&&c.indexOf(">")>-1&&i.xml2json(c)||{}}catch(e){d={}}var g=d&&d.Error;m?l(null,d):g?l(i.error(new Error(g.Message),{code:g.Code,error:g})):p?l(i.error(new Error(u.statusMessage),{code:""+p})):p&&l(i.error(new Error("statusCode error")))}})),S=function e(t){t.TaskId===r&&(k&&k.abort&&k.abort(),n.off("inner-kill-task",e))};r&&n.on("inner-kill-task",S)}}var m={getService:function(e,t){"function"==typeof e&&(t=e,e={});var n=this.options.Protocol||(i.isBrowser&&"object"===("undefined"==typeof location?"undefined":r(location))&&"http:"===location.protocol?"http:":"https:"),o=this.options.ServiceDomain,a=e.AppId||this.options.appId,s=e.Region;o?(o=o.replace(/\{\{AppId\}\}/gi,a||"").replace(/\{\{Region\}\}/gi,s||"").replace(/\{\{.*?\}\}/gi,""),/^[a-zA-Z]+:\/\//.test(o)||(o=n+"//"+o),"/"===o.slice(-1)&&(o=o.slice(0,-1))):o=s?n+"//cos."+s+".myqcloud.com":n+"//service.cos.myqcloud.com";var c="",u=s?"cos."+s+".myqcloud.com":"service.cos.myqcloud.com";u===o.replace(/^https?:\/\/([^/]+)(\/.*)?$/,"$1")&&(c=u),f.call(this,{Action:"name/cos:GetService",url:o,method:"GET",headers:e.Headers,SignHost:c},(function(e,n){if(e)return t(e);var r=n&&n.ListAllMyBucketsResult&&n.ListAllMyBucketsResult.Buckets&&n.ListAllMyBucketsResult.Buckets.Bucket||[];r=i.isArray(r)?r:[r];var o=n&&n.ListAllMyBucketsResult&&n.ListAllMyBucketsResult.Owner||{};t(null,{Buckets:r,Owner:o,statusCode:n.statusCode,headers:n.headers})}))},putBucket:function(e,t){var n=this,r="";if(e.BucketAZConfig){var o={BucketAZConfig:e.BucketAZConfig};r=i.json2xml({CreateBucketConfiguration:o})}f.call(this,{Action:"name/cos:PutBucket",method:"PUT",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,body:r},(function(r,o){if(r)return t(r);var i=u({protocol:n.options.Protocol,domain:n.options.Domain,bucket:e.Bucket,region:e.Region,isLocation:!0});t(null,{Location:i,statusCode:o.statusCode,headers:o.headers})}))},headBucket:function(e,t){f.call(this,{Action:"name/cos:HeadBucket",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,method:"HEAD"},t)},getBucket:function(e,t){var n={};n.prefix=e.Prefix||"",n.delimiter=e.Delimiter,n.marker=e.Marker,n["max-keys"]=e.MaxKeys,n["encoding-type"]=e.EncodingType,f.call(this,{Action:"name/cos:GetBucket",ResourceKey:n.prefix,method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,qs:n},(function(e,n){if(e)return t(e);var r=n.ListBucketResult||{},o=r.Contents||[],a=r.CommonPrefixes||[];o=i.isArray(o)?o:[o],a=i.isArray(a)?a:[a];var s=i.clone(r);i.extend(s,{Contents:o,CommonPrefixes:a,statusCode:n.statusCode,headers:n.headers}),t(null,s)}))},deleteBucket:function(e,t){f.call(this,{Action:"name/cos:DeleteBucket",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,method:"DELETE"},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},putBucketAcl:function(e,t){var n=e.Headers,r="";if(e.AccessControlPolicy){var o=i.clone(e.AccessControlPolicy||{}),a=o.Grants||o.Grant;a=i.isArray(a)?a:[a],delete o.Grant,delete o.Grants,o.AccessControlList={Grant:a},r=i.json2xml({AccessControlPolicy:o}),n["Content-Type"]="application/xml",n["Content-MD5"]=i.b64(i.md5(r))}i.each(n,(function(e,t){0===t.indexOf("x-cos-grant-")&&(n[t]=c(n[t]))})),f.call(this,{Action:"name/cos:PutBucketACL",method:"PUT",Bucket:e.Bucket,Region:e.Region,headers:n,action:"acl",body:r},(function(e,n){if(e)return t(e);t(null,{statusCode:n.statusCode,headers:n.headers})}))},getBucketAcl:function(e,t){f.call(this,{Action:"name/cos:GetBucketACL",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"acl"},(function(e,n){if(e)return t(e);var r=n.AccessControlPolicy||{},o=r.Owner||{},a=r.AccessControlList.Grant||[];a=i.isArray(a)?a:[a];var c=s(r);n.headers&&n.headers["x-cos-acl"]&&(c.ACL=n.headers["x-cos-acl"]),c=i.extend(c,{Owner:o,Grants:a,statusCode:n.statusCode,headers:n.headers}),t(null,c)}))},putBucketCors:function(e,t){var n=(e.CORSConfiguration||{}).CORSRules||e.CORSRules||[];n=i.clone(i.isArray(n)?n:[n]),i.each(n,(function(e){i.each(["AllowedOrigin","AllowedHeader","AllowedMethod","ExposeHeader"],(function(t){var n=t+"s",r=e[n]||e[t]||[];delete e[n],e[t]=i.isArray(r)?r:[r]}))}));var r={CORSRule:n};e.ResponseVary&&(r.ResponseVary=e.ResponseVary);var o=i.json2xml({CORSConfiguration:r}),a=e.Headers;a["Content-Type"]="application/xml",a["Content-MD5"]=i.b64(i.md5(o)),f.call(this,{Action:"name/cos:PutBucketCORS",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:o,action:"cors",headers:a},(function(e,n){if(e)return t(e);t(null,{statusCode:n.statusCode,headers:n.headers})}))},getBucketCors:function(e,t){f.call(this,{Action:"name/cos:GetBucketCORS",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"cors"},(function(e,n){if(e)if(404===e.statusCode&&e.error&&"NoSuchCORSConfiguration"===e.error.Code){var r={CORSRules:[],statusCode:e.statusCode};e.headers&&(r.headers=e.headers),t(null,r)}else t(e);else{var o=n.CORSConfiguration||{},a=o.CORSRules||o.CORSRule||[];a=i.clone(i.isArray(a)?a:[a]);var s=o.ResponseVary;i.each(a,(function(e){i.each(["AllowedOrigin","AllowedHeader","AllowedMethod","ExposeHeader"],(function(t){var n=t+"s",r=e[n]||e[t]||[];delete e[t],e[n]=i.isArray(r)?r:[r]}))})),t(null,{CORSRules:a,ResponseVary:s,statusCode:n.statusCode,headers:n.headers})}}))},deleteBucketCors:function(e,t){f.call(this,{Action:"name/cos:DeleteBucketCORS",method:"DELETE",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"cors"},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode||e.statusCode,headers:n.headers})}))},getBucketLocation:function(e,t){f.call(this,{Action:"name/cos:GetBucketLocation",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"location"},t)},getBucketPolicy:function(e,t){f.call(this,{Action:"name/cos:GetBucketPolicy",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"policy",rawBody:!0},(function(e,n){if(e)return e.statusCode&&403===e.statusCode?t(i.error(e,{ErrorStatus:"Access Denied"})):e.statusCode&&405===e.statusCode?t(i.error(e,{ErrorStatus:"Method Not Allowed"})):e.statusCode&&404===e.statusCode?t(i.error(e,{ErrorStatus:"Policy Not Found"})):t(e);var r={};try{r=JSON.parse(n.body)}catch(e){}t(null,{Policy:r,statusCode:n.statusCode,headers:n.headers})}))},putBucketPolicy:function(e,t){var n=e.Policy;try{"string"==typeof n&&(n=JSON.parse(n))}catch(e){}if(!n||"string"==typeof n)return t(i.error(new Error("Policy format error")));var r=JSON.stringify(n);n.version||(n.version="2.0");var o=e.Headers;o["Content-Type"]="application/json",o["Content-MD5"]=i.b64(i.md5(r)),f.call(this,{Action:"name/cos:PutBucketPolicy",method:"PUT",Bucket:e.Bucket,Region:e.Region,action:"policy",body:r,headers:o},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},deleteBucketPolicy:function(e,t){f.call(this,{Action:"name/cos:DeleteBucketPolicy",method:"DELETE",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"policy"},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode||e.statusCode,headers:n.headers})}))},putBucketTagging:function(e,t){var n=e.Tagging||{},r=n.TagSet||n.Tags||e.Tags||[];r=i.clone(i.isArray(r)?r:[r]);var o=i.json2xml({Tagging:{TagSet:{Tag:r}}}),a=e.Headers;a["Content-Type"]="application/xml",a["Content-MD5"]=i.b64(i.md5(o)),f.call(this,{Action:"name/cos:PutBucketTagging",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:o,action:"tagging",headers:a},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},getBucketTagging:function(e,t){f.call(this,{Action:"name/cos:GetBucketTagging",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"tagging"},(function(e,n){if(e)if(404!==e.statusCode||!e.error||"Not Found"!==e.error&&"NoSuchTagSet"!==e.error.Code)t(e);else{var r={Tags:[],statusCode:e.statusCode};e.headers&&(r.headers=e.headers),t(null,r)}else{var o=[];try{o=n.Tagging.TagSet.Tag||[]}catch(e){}o=i.clone(i.isArray(o)?o:[o]),t(null,{Tags:o,statusCode:n.statusCode,headers:n.headers})}}))},deleteBucketTagging:function(e,t){f.call(this,{Action:"name/cos:DeleteBucketTagging",method:"DELETE",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"tagging"},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},putBucketLifecycle:function(e,t){var n=(e.LifecycleConfiguration||{}).Rules||e.Rules||[];n=i.clone(n);var r=i.json2xml({LifecycleConfiguration:{Rule:n}}),o=e.Headers;o["Content-Type"]="application/xml",o["Content-MD5"]=i.b64(i.md5(r)),f.call(this,{Action:"name/cos:PutBucketLifecycle",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:r,action:"lifecycle",headers:o},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},getBucketLifecycle:function(e,t){f.call(this,{Action:"name/cos:GetBucketLifecycle",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"lifecycle"},(function(e,n){if(e)if(404===e.statusCode&&e.error&&"NoSuchLifecycleConfiguration"===e.error.Code){var r={Rules:[],statusCode:e.statusCode};e.headers&&(r.headers=e.headers),t(null,r)}else t(e);else{var o=[];try{o=n.LifecycleConfiguration.Rule||[]}catch(e){}o=i.clone(i.isArray(o)?o:[o]),t(null,{Rules:o,statusCode:n.statusCode,headers:n.headers})}}))},deleteBucketLifecycle:function(e,t){f.call(this,{Action:"name/cos:DeleteBucketLifecycle",method:"DELETE",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"lifecycle"},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},putBucketVersioning:function(e,t){if(e.VersioningConfiguration){var n=e.VersioningConfiguration||{},r=i.json2xml({VersioningConfiguration:n}),o=e.Headers;o["Content-Type"]="application/xml",o["Content-MD5"]=i.b64(i.md5(r)),f.call(this,{Action:"name/cos:PutBucketVersioning",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:r,action:"versioning",headers:o},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))}else t(i.error(new Error("missing param VersioningConfiguration")))},getBucketVersioning:function(e,t){f.call(this,{Action:"name/cos:GetBucketVersioning",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"versioning"},(function(e,n){e||!n.VersioningConfiguration&&(n.VersioningConfiguration={}),t(e,n)}))},putBucketReplication:function(e,t){var n=i.clone(e.ReplicationConfiguration),r=i.json2xml({ReplicationConfiguration:n});r=(r=r.replace(/<(\/?)Rules>/gi,"<$1Rule>")).replace(/<(\/?)Tags>/gi,"<$1Tag>");var o=e.Headers;o["Content-Type"]="application/xml",o["Content-MD5"]=i.b64(i.md5(r)),f.call(this,{Action:"name/cos:PutBucketReplication",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:r,action:"replication",headers:o},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},getBucketReplication:function(e,t){f.call(this,{Action:"name/cos:GetBucketReplication",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"replication"},(function(e,n){if(e)if(404!==e.statusCode||!e.error||"Not Found"!==e.error&&"ReplicationConfigurationnotFoundError"!==e.error.Code)t(e);else{var r={ReplicationConfiguration:{Rules:[]},statusCode:e.statusCode};e.headers&&(r.headers=e.headers),t(null,r)}else!n.ReplicationConfiguration&&(n.ReplicationConfiguration={}),n.ReplicationConfiguration.Rule&&(n.ReplicationConfiguration.Rules=i.makeArray(n.ReplicationConfiguration.Rule),delete n.ReplicationConfiguration.Rule),t(e,n)}))},deleteBucketReplication:function(e,t){f.call(this,{Action:"name/cos:DeleteBucketReplication",method:"DELETE",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"replication"},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},putBucketWebsite:function(e,t){if(e.WebsiteConfiguration){var n=i.clone(e.WebsiteConfiguration||{}),r=n.RoutingRules||n.RoutingRule||[];r=i.isArray(r)?r:[r],delete n.RoutingRule,delete n.RoutingRules,r.length&&(n.RoutingRules={RoutingRule:r});var o=i.json2xml({WebsiteConfiguration:n}),a=e.Headers;a["Content-Type"]="application/xml",a["Content-MD5"]=i.b64(i.md5(o)),f.call(this,{Action:"name/cos:PutBucketWebsite",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:o,action:"website",headers:a},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))}else t(i.error(new Error("missing param WebsiteConfiguration")))},getBucketWebsite:function(e,t){f.call(this,{Action:"name/cos:GetBucketWebsite",method:"GET",Bucket:e.Bucket,Region:e.Region,Key:e.Key,headers:e.Headers,action:"website"},(function(e,n){if(e)if(404===e.statusCode&&"NoSuchWebsiteConfiguration"===e.error.Code){var r={WebsiteConfiguration:{},statusCode:e.statusCode};e.headers&&(r.headers=e.headers),t(null,r)}else t(e);else{var o=n.WebsiteConfiguration||{};if(o.RoutingRules){var a=i.clone(o.RoutingRules.RoutingRule||[]);a=i.makeArray(a),o.RoutingRules=a}t(null,{WebsiteConfiguration:o,statusCode:n.statusCode,headers:n.headers})}}))},deleteBucketWebsite:function(e,t){f.call(this,{Action:"name/cos:DeleteBucketWebsite",method:"DELETE",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"website"},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},putBucketReferer:function(e,t){if(e.RefererConfiguration){var n=i.clone(e.RefererConfiguration||{}),r=n.DomainList||{},o=r.Domains||r.Domain||[];(o=i.isArray(o)?o:[o]).length&&(n.DomainList={Domain:o});var a=i.json2xml({RefererConfiguration:n}),s=e.Headers;s["Content-Type"]="application/xml",s["Content-MD5"]=i.b64(i.md5(a)),f.call(this,{Action:"name/cos:PutBucketReferer",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:a,action:"referer",headers:s},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))}else t(i.error(new Error("missing param RefererConfiguration")))},getBucketReferer:function(e,t){f.call(this,{Action:"name/cos:GetBucketReferer",method:"GET",Bucket:e.Bucket,Region:e.Region,Key:e.Key,headers:e.Headers,action:"referer"},(function(e,n){if(e)if(404===e.statusCode&&"NoSuchRefererConfiguration"===e.error.Code){var r={WebsiteConfiguration:{},statusCode:e.statusCode};e.headers&&(r.headers=e.headers),t(null,r)}else t(e);else{var o=n.RefererConfiguration||{};if(o.DomainList){var a=i.makeArray(o.DomainList.Domain||[]);o.DomainList={Domains:a}}t(null,{RefererConfiguration:o,statusCode:n.statusCode,headers:n.headers})}}))},putBucketDomain:function(e,t){var n=(e.DomainConfiguration||{}).DomainRule||e.DomainRule||[];n=i.clone(n);var r=i.json2xml({DomainConfiguration:{DomainRule:n}}),o=e.Headers;o["Content-Type"]="application/xml",o["Content-MD5"]=i.b64(i.md5(r)),f.call(this,{Action:"name/cos:PutBucketDomain",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:r,action:"domain",headers:o},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},getBucketDomain:function(e,t){f.call(this,{Action:"name/cos:GetBucketDomain",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"domain"},(function(e,n){if(e)return t(e);var r=[];try{r=n.DomainConfiguration.DomainRule||[]}catch(e){}r=i.clone(i.isArray(r)?r:[r]),t(null,{DomainRule:r,statusCode:n.statusCode,headers:n.headers})}))},deleteBucketDomain:function(e,t){f.call(this,{Action:"name/cos:DeleteBucketDomain",method:"DELETE",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"domain"},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},putBucketOrigin:function(e,t){var n=(e.OriginConfiguration||{}).OriginRule||e.OriginRule||[];n=i.clone(n);var r=i.json2xml({OriginConfiguration:{OriginRule:n}}),o=e.Headers;o["Content-Type"]="application/xml",o["Content-MD5"]=i.b64(i.md5(r)),f.call(this,{Action:"name/cos:PutBucketOrigin",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:r,action:"origin",headers:o},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},getBucketOrigin:function(e,t){f.call(this,{Action:"name/cos:GetBucketOrigin",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"origin"},(function(e,n){if(e)return t(e);var r=[];try{r=n.OriginConfiguration.OriginRule||[]}catch(e){}r=i.clone(i.isArray(r)?r:[r]),t(null,{OriginRule:r,statusCode:n.statusCode,headers:n.headers})}))},deleteBucketOrigin:function(e,t){f.call(this,{Action:"name/cos:DeleteBucketOrigin",method:"DELETE",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"origin"},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},putBucketLogging:function(e,t){var n=i.json2xml({BucketLoggingStatus:e.BucketLoggingStatus||""}),r=e.Headers;r["Content-Type"]="application/xml",r["Content-MD5"]=i.b64(i.md5(n)),f.call(this,{Action:"name/cos:PutBucketLogging",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:n,action:"logging",headers:r},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},getBucketLogging:function(e,t){f.call(this,{Action:"name/cos:GetBucketLogging",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"logging"},(function(e,n){if(e)return t(e);t(null,{BucketLoggingStatus:n.BucketLoggingStatus,statusCode:n.statusCode,headers:n.headers})}))},putBucketInventory:function(e,t){return a.call(this,"PUT",e,t)},postBucketInventory:function(e,t){return a.call(this,"POST",e,t)},getBucketInventory:function(e,t){f.call(this,{Action:"name/cos:GetBucketInventory",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"inventory",qs:{id:e.Id}},(function(e,n){if(e)return t(e);var r=n.InventoryConfiguration;if(r&&r.OptionalFields&&r.OptionalFields.Field){var o=r.OptionalFields.Field;i.isArray(o)||(o=[o]),r.OptionalFields=o}if(r.Destination&&r.Destination.COSBucketDestination&&r.Destination.COSBucketDestination.Encryption){var a=r.Destination.COSBucketDestination.Encryption;Object.keys(a).indexOf("SSE-COS")>-1&&(a.SSECOS=a["SSE-COS"],delete a["SSE-COS"])}t(null,{InventoryConfiguration:r,statusCode:n.statusCode,headers:n.headers})}))},listBucketInventory:function(e,t){f.call(this,{Action:"name/cos:ListBucketInventory",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"inventory",qs:{"continuation-token":e.ContinuationToken}},(function(e,n){if(e)return t(e);var r=n.ListInventoryConfigurationResult,o=r.InventoryConfiguration||[];o=i.isArray(o)?o:[o],delete r.InventoryConfiguration,i.each(o,(function(e){if(e&&e.OptionalFields&&e.OptionalFields.Field){var t=e.OptionalFields.Field;i.isArray(t)||(t=[t]),e.OptionalFields=t}if(e.Destination&&e.Destination.COSBucketDestination&&e.Destination.COSBucketDestination.Encryption){var n=e.Destination.COSBucketDestination.Encryption;Object.keys(n).indexOf("SSE-COS")>-1&&(n.SSECOS=n["SSE-COS"],delete n["SSE-COS"])}})),r.InventoryConfigurations=o,i.extend(r,{statusCode:n.statusCode,headers:n.headers}),t(null,r)}))},deleteBucketInventory:function(e,t){f.call(this,{Action:"name/cos:DeleteBucketInventory",method:"DELETE",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"inventory",qs:{id:e.Id}},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},putBucketAccelerate:function(e,t){if(e.AccelerateConfiguration){var n={AccelerateConfiguration:e.AccelerateConfiguration||{}},r=i.json2xml(n),o={"Content-Type":"application/xml"};o["Content-MD5"]=i.b64(i.md5(r)),f.call(this,{Action:"name/cos:PutBucketAccelerate",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:r,action:"accelerate",headers:o},(function(e,n){if(e)return t(e);t(null,{statusCode:n.statusCode,headers:n.headers})}))}else t(i.error(new Error("missing param AccelerateConfiguration")))},getBucketAccelerate:function(e,t){f.call(this,{Action:"name/cos:GetBucketAccelerate",method:"GET",Bucket:e.Bucket,Region:e.Region,action:"accelerate"},(function(e,n){e||!n.AccelerateConfiguration&&(n.AccelerateConfiguration={}),t(e,n)}))},putBucketEncryption:function(e,t){var n=e.ServerSideEncryptionConfiguration||{},r=n.Rule||n.Rules||[],o=i.json2xml({ServerSideEncryptionConfiguration:{Rule:r}}),a=e.Headers;a["Content-Type"]="application/xml",a["Content-MD5"]=i.b64(i.md5(o)),f.call(this,{Action:"name/cos:PutBucketEncryption",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:o,action:"encryption",headers:a},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},getBucketEncryption:function(e,t){f.call(this,{Action:"name/cos:GetBucketEncryption",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"encryption"},(function(e,n){if(e)if(404===e.statusCode&&"NoSuchEncryptionConfiguration"===e.code){var r={EncryptionConfiguration:{Rules:[]},statusCode:e.statusCode};e.headers&&(r.headers=e.headers),t(null,r)}else t(e);else{var o=i.makeArray(n.EncryptionConfiguration&&n.EncryptionConfiguration.Rule||[]);n.EncryptionConfiguration={Rules:o},t(e,n)}}))},deleteBucketEncryption:function(e,t){f.call(this,{Action:"name/cos:DeleteBucketReplication",method:"DELETE",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"encryption"},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},getObject:function(e,t){var n=e.Query||{},r=e.QueryString||"",o=i.throttleOnProgress.call(this,0,e.onProgress),a=e.tracker;a&&a.setParams({signStartTime:(new Date).getTime()}),n["response-content-type"]=e.ResponseContentType,n["response-content-language"]=e.ResponseContentLanguage,n["response-expires"]=e.ResponseExpires,n["response-cache-control"]=e.ResponseCacheControl,n["response-content-disposition"]=e.ResponseContentDisposition,n["response-content-encoding"]=e.ResponseContentEncoding,f.call(this,{Action:"name/cos:GetObject",method:"GET",Bucket:e.Bucket,Region:e.Region,Key:e.Key,VersionId:e.VersionId,DataType:e.DataType,headers:e.Headers,qs:n,qsStr:r,rawBody:!0,onDownloadProgress:o,tracker:a},(function(n,r){if(o(null,!0),n){var a=n.statusCode;return e.Headers["If-Modified-Since"]&&a&&304===a?t(null,{NotModified:!0}):t(n)}t(null,{Body:r.body,ETag:i.attr(r.headers,"etag",""),statusCode:r.statusCode,headers:r.headers})}))},headObject:function(e,t){f.call(this,{Action:"name/cos:HeadObject",method:"HEAD",Bucket:e.Bucket,Region:e.Region,Key:e.Key,VersionId:e.VersionId,headers:e.Headers},(function(n,r){if(n){var o=n.statusCode;return e.Headers["If-Modified-Since"]&&o&&304===o?t(null,{NotModified:!0,statusCode:o}):t(n)}r.ETag=i.attr(r.headers,"etag",""),t(null,r)}))},listObjectVersions:function(e,t){var n={};n.prefix=e.Prefix||"",n.delimiter=e.Delimiter,n["key-marker"]=e.KeyMarker,n["version-id-marker"]=e.VersionIdMarker,n["max-keys"]=e.MaxKeys,n["encoding-type"]=e.EncodingType,f.call(this,{Action:"name/cos:GetBucketObjectVersions",ResourceKey:n.prefix,method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,qs:n,action:"versions"},(function(e,n){if(e)return t(e);var r=n.ListVersionsResult||{},o=r.DeleteMarker||[];o=i.isArray(o)?o:[o];var a=r.Version||[];a=i.isArray(a)?a:[a];var s=i.clone(r);delete s.DeleteMarker,delete s.Version,i.extend(s,{DeleteMarkers:o,Versions:a,statusCode:n.statusCode,headers:n.headers}),t(null,s)}))},putObject:function(e,t){var n=this,r=e.ContentLength,o=i.throttleOnProgress.call(n,r,e.onProgress),a=e.Headers;a["Cache-Control"]||a["cache-control"]||(a["Cache-Control"]=""),a["Content-Type"]||a["content-type"]||(a["Content-Type"]=e.Body&&e.Body.type||"");var s=e.UploadAddMetaMd5||n.options.UploadAddMetaMd5||n.options.UploadCheckContentMd5,c=e.tracker;s&&c&&c.setParams({md5StartTime:(new Date).getTime()}),i.getBodyMd5(s,e.Body,(function(s){s&&(c&&c.setParams({md5EndTime:(new Date).getTime()}),n.options.UploadCheckContentMd5&&(a["Content-MD5"]=i.b64(s)),(e.UploadAddMetaMd5||n.options.UploadAddMetaMd5)&&(a["x-cos-meta-md5"]=s)),void 0!==e.ContentLength&&(a["Content-Length"]=e.ContentLength),o(null,!0),f.call(n,{Action:"name/cos:PutObject",TaskId:e.TaskId,method:"PUT",Bucket:e.Bucket,Region:e.Region,Key:e.Key,headers:e.Headers,qs:e.Query,body:e.Body,onProgress:o,tracker:c},(function(a,s){if(a)return o(null,!0),t(a);o({loaded:r,total:r},!0);var c=u({ForcePathStyle:n.options.ForcePathStyle,protocol:n.options.Protocol,domain:n.options.Domain,bucket:e.Bucket,region:n.options.UseAccelerate?"accelerate":e.Region,object:e.Key});c=c.substr(c.indexOf("://")+3),s.Location=c,s.ETag=i.attr(s.headers,"etag",""),t(null,s)}))}),e.onHashProgress)},deleteObject:function(e,t){f.call(this,{Action:"name/cos:DeleteObject",method:"DELETE",Bucket:e.Bucket,Region:e.Region,Key:e.Key,headers:e.Headers,VersionId:e.VersionId,action:e.Recursive?"recursive":""},(function(e,n){if(e){var r=e.statusCode;return r&&404===r?t(null,{BucketNotFound:!0,statusCode:r}):t(e)}t(null,{statusCode:n.statusCode,headers:n.headers})}))},getObjectAcl:function(e,t){var n={};e.VersionId&&(n.versionId=e.VersionId),f.call(this,{Action:"name/cos:GetObjectACL",method:"GET",Bucket:e.Bucket,Region:e.Region,Key:e.Key,headers:e.Headers,qs:n,action:"acl"},(function(e,n){if(e)return t(e);var r=n.AccessControlPolicy||{},o=r.Owner||{},a=r.AccessControlList&&r.AccessControlList.Grant||[];a=i.isArray(a)?a:[a];var c=s(r);delete c.GrantWrite,n.headers&&n.headers["x-cos-acl"]&&(c.ACL=n.headers["x-cos-acl"]),c=i.extend(c,{Owner:o,Grants:a,statusCode:n.statusCode,headers:n.headers}),t(null,c)}))},putObjectAcl:function(e,t){var n=e.Headers,r="";if(e.AccessControlPolicy){var o=i.clone(e.AccessControlPolicy||{}),a=o.Grants||o.Grant;a=i.isArray(a)?a:[a],delete o.Grant,delete o.Grants,o.AccessControlList={Grant:a},r=i.json2xml({AccessControlPolicy:o}),n["Content-Type"]="application/xml",n["Content-MD5"]=i.b64(i.md5(r))}i.each(n,(function(e,t){0===t.indexOf("x-cos-grant-")&&(n[t]=c(n[t]))})),f.call(this,{Action:"name/cos:PutObjectACL",method:"PUT",Bucket:e.Bucket,Region:e.Region,Key:e.Key,action:"acl",headers:n,body:r},(function(e,n){if(e)return t(e);t(null,{statusCode:n.statusCode,headers:n.headers})}))},optionsObject:function(e,t){var n=e.Headers;n.Origin=e.Origin,n["Access-Control-Request-Method"]=e.AccessControlRequestMethod,n["Access-Control-Request-Headers"]=e.AccessControlRequestHeaders,f.call(this,{Action:"name/cos:OptionsObject",method:"OPTIONS",Bucket:e.Bucket,Region:e.Region,Key:e.Key,headers:n},(function(e,n){if(e)return e.statusCode&&403===e.statusCode?t(null,{OptionsForbidden:!0,statusCode:e.statusCode}):t(e);var r=n.headers||{};t(null,{AccessControlAllowOrigin:r["access-control-allow-origin"],AccessControlAllowMethods:r["access-control-allow-methods"],AccessControlAllowHeaders:r["access-control-allow-headers"],AccessControlExposeHeaders:r["access-control-expose-headers"],AccessControlMaxAge:r["access-control-max-age"],statusCode:n.statusCode,headers:n.headers})}))},putObjectCopy:function(e,t){var n=this,r=e.Headers;r["Cache-Control"]||r["cache-control"]||(r["Cache-Control"]="");var o=e.CopySource||"",a=i.getSourceParams.call(this,o);if(a){var s=a.Bucket,c=a.Region,l=decodeURIComponent(a.Key);f.call(this,{Scope:[{action:"name/cos:GetObject",bucket:s,region:c,prefix:l},{action:"name/cos:PutObject",bucket:e.Bucket,region:e.Region,prefix:e.Key}],method:"PUT",Bucket:e.Bucket,Region:e.Region,Key:e.Key,VersionId:e.VersionId,headers:e.Headers},(function(r,o){if(r)return t(r);var a=i.clone(o.CopyObjectResult||{}),s=u({ForcePathStyle:n.options.ForcePathStyle,protocol:n.options.Protocol,domain:n.options.Domain,bucket:e.Bucket,region:e.Region,object:e.Key,isLocation:!0});i.extend(a,{Location:s,statusCode:o.statusCode,headers:o.headers}),t(null,a)}))}else t(i.error(new Error("CopySource format error")))},deleteMultipleObject:function(e,t){var n=e.Objects||[],r=e.Quiet;n=i.isArray(n)?n:[n];var o=i.json2xml({Delete:{Object:n,Quiet:r||!1}}),a=e.Headers;a["Content-Type"]="application/xml",a["Content-MD5"]=i.b64(i.md5(o));var s=i.map(n,(function(t){return{action:"name/cos:DeleteObject",bucket:e.Bucket,region:e.Region,prefix:t.Key}}));f.call(this,{Scope:s,method:"POST",Bucket:e.Bucket,Region:e.Region,body:o,action:"delete",headers:a},(function(e,n){if(e)return t(e);var r=n.DeleteResult||{},o=r.Deleted||[],a=r.Error||[];o=i.isArray(o)?o:[o],a=i.isArray(a)?a:[a];var s=i.clone(r);i.extend(s,{Error:a,Deleted:o,statusCode:n.statusCode,headers:n.headers}),t(null,s)}))},restoreObject:function(e,t){var n=e.Headers;if(e.RestoreRequest){var r=e.RestoreRequest||{},o=i.json2xml({RestoreRequest:r});n["Content-Type"]="application/xml",n["Content-MD5"]=i.b64(i.md5(o)),f.call(this,{Action:"name/cos:RestoreObject",method:"POST",Bucket:e.Bucket,Region:e.Region,Key:e.Key,VersionId:e.VersionId,body:o,action:"restore",headers:n},t)}else t(i.error(new Error("missing param RestoreRequest")))},putObjectTagging:function(e,t){var n=e.Tagging||{},r=n.TagSet||n.Tags||e.Tags||[];r=i.clone(i.isArray(r)?r:[r]);var o=i.json2xml({Tagging:{TagSet:{Tag:r}}}),a=e.Headers;a["Content-Type"]="application/xml",a["Content-MD5"]=i.b64(i.md5(o)),f.call(this,{Action:"name/cos:PutObjectTagging",method:"PUT",Bucket:e.Bucket,Key:e.Key,Region:e.Region,body:o,action:"tagging",headers:a,VersionId:e.VersionId},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},getObjectTagging:function(e,t){f.call(this,{Action:"name/cos:GetObjectTagging",method:"GET",Key:e.Key,Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"tagging",VersionId:e.VersionId},(function(e,n){if(e)if(404!==e.statusCode||!e.error||"Not Found"!==e.error&&"NoSuchTagSet"!==e.error.Code)t(e);else{var r={Tags:[],statusCode:e.statusCode};e.headers&&(r.headers=e.headers),t(null,r)}else{var o=[];try{o=n.Tagging.TagSet.Tag||[]}catch(e){}o=i.clone(i.isArray(o)?o:[o]),t(null,{Tags:o,statusCode:n.statusCode,headers:n.headers})}}))},deleteObjectTagging:function(e,t){f.call(this,{Action:"name/cos:DeleteObjectTagging",method:"DELETE",Bucket:e.Bucket,Region:e.Region,Key:e.Key,headers:e.Headers,action:"tagging",VersionId:e.VersionId},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},selectObjectContent:function(e,t){if(!e.SelectType)return t(i.error(new Error("missing param SelectType")));var n=e.SelectRequest||{},r=i.json2xml({SelectRequest:n}),o=e.Headers;o["Content-Type"]="application/xml",o["Content-MD5"]=i.b64(i.md5(r)),f.call(this,{Action:"name/cos:GetObject",method:"POST",Bucket:e.Bucket,Region:e.Region,Key:e.Key,headers:e.Headers,action:"select",qs:{"select-type":e.SelectType},VersionId:e.VersionId,body:r,DataType:"arraybuffer",rawBody:!0},(function(e,n){if(e&&204===e.statusCode)return t(null,{statusCode:e.statusCode});if(e)return t(e);var r=i.parseSelectPayload(n.body);t(null,{statusCode:n.statusCode,headers:n.headers,Body:r.body,Payload:r.payload})}))},appendObject:function(e,t){var n=e.Headers;n["Cache-Control"]||n["cache-control"]||(n["Cache-Control"]=""),n["Content-Type"]||n["content-type"]||(n["Content-Type"]=e.Body&&e.Body.type||""),f.call(this,{Action:"name/cos:AppendObject",method:"POST",Bucket:e.Bucket,Region:e.Region,action:"append",Key:e.Key,body:e.Body,qs:{position:e.Position},headers:e.Headers},(function(e,n){if(e)return t(e);t(null,n)}))},uploadPartCopy:function(e,t){var n=e.CopySource||"",r=i.getSourceParams.call(this,n);if(r){var o=r.Bucket,a=r.Region,s=decodeURIComponent(r.Key);f.call(this,{Scope:[{action:"name/cos:GetObject",bucket:o,region:a,prefix:s},{action:"name/cos:PutObject",bucket:e.Bucket,region:e.Region,prefix:e.Key}],method:"PUT",Bucket:e.Bucket,Region:e.Region,Key:e.Key,VersionId:e.VersionId,qs:{partNumber:e.PartNumber,uploadId:e.UploadId},headers:e.Headers},(function(e,n){if(e)return t(e);var r=i.clone(n.CopyPartResult||{});i.extend(r,{statusCode:n.statusCode,headers:n.headers}),t(null,r)}))}else t(i.error(new Error("CopySource format error")))},multipartInit:function(e,t){var n=this,r=e.Headers,o=e.tracker;r["Cache-Control"]||r["cache-control"]||(r["Cache-Control"]=""),r["Content-Type"]||r["content-type"]||(r["Content-Type"]=e.Body&&e.Body.type||"");var a=e.Body&&(e.UploadAddMetaMd5||n.options.UploadAddMetaMd5);a&&o&&o.setParams({md5StartTime:(new Date).getTime()}),i.getBodyMd5(a,e.Body,(function(r){r&&(e.Headers["x-cos-meta-md5"]=r),a&&o&&o.setParams({md5EndTime:(new Date).getTime()}),f.call(n,{Action:"name/cos:InitiateMultipartUpload",method:"POST",Bucket:e.Bucket,Region:e.Region,Key:e.Key,action:"uploads",headers:e.Headers,qs:e.Query,tracker:o},(function(e,n){return e?(o&&o.parent&&o.parent.setParams({errorNode:"multipartInit"}),t(e)):(n=i.clone(n||{}))&&n.InitiateMultipartUploadResult?t(null,i.extend(n.InitiateMultipartUploadResult,{statusCode:n.statusCode,headers:n.headers})):void t(null,n)}))}),e.onHashProgress)},multipartUpload:function(e,t){var n=this;i.getFileSize("multipartUpload",e,(function(){var r=e.tracker,o=n.options.UploadCheckContentMd5;o&&r&&r.setParams({md5StartTime:(new Date).getTime()}),i.getBodyMd5(o,e.Body,(function(a){a&&(e.Headers["Content-MD5"]=i.b64(a)),o&&r&&r.setParams({md5EndTime:(new Date).getTime()}),r&&r.setParams({partNumber:e.PartNumber}),f.call(n,{Action:"name/cos:UploadPart",TaskId:e.TaskId,method:"PUT",Bucket:e.Bucket,Region:e.Region,Key:e.Key,qs:{partNumber:e.PartNumber,uploadId:e.UploadId},headers:e.Headers,onProgress:e.onProgress,body:e.Body||null,tracker:r},(function(e,n){if(e)return r&&r.parent&&r.parent.setParams({errorNode:"multipartUpload"}),t(e);t(null,{ETag:i.attr(n.headers,"etag",""),statusCode:n.statusCode,headers:n.headers})}))}))}))},multipartComplete:function(e,t){for(var n=this,r=e.UploadId,o=e.Parts,a=e.tracker,s=0,c=o.length;s-1?function(e){var t=e.match(/q-url-param-list.*?(?=&)/g)[0],n="q-url-param-list="+encodeURIComponent(t.replace(/q-url-param-list=/,"")).toLowerCase(),r=new RegExp(t,"g");return e.replace(r,n)}(n.Authorization):"sign="+encodeURIComponent(n.Authorization)),n.SecurityToken&&(r+="&x-cos-security-token="+n.SecurityToken),n.ClientIP&&(r+="&clientIP="+n.ClientIP),n.ClientUA&&(r+="&clientUA="+n.ClientUA),n.Token&&(r+="&token="+n.Token),a&&(r+="&"+a),setTimeout((function(){t(null,{Url:r})}))}}));return p?(s+="?"+p.Authorization+(p.SecurityToken?"&x-cos-security-token="+p.SecurityToken:""),a&&(s+="&"+a)):a&&(s+="?"+a),s},getAuth:function(e){return i.getAuth({SecretId:e.SecretId||this.options.SecretId||"",SecretKey:e.SecretKey||this.options.SecretKey||"",Bucket:e.Bucket,Region:e.Region,Method:e.Method,Key:e.Key,Query:e.Query,Headers:e.Headers,Expires:e.Expires,UseRawKey:this.options.UseRawKey,SystemClockOffset:this.options.SystemClockOffset})}};e.exports.init=function(e,t){t.transferToTaskMethod(m,"putObject"),i.each(m,(function(t,n){e.prototype[n]=i.apiWrapper(n,t),function(e,t,n){i.each(["Cors","Acl"],(function(r){if(e.slice(-r.length)===r){var o=e.slice(0,-r.length)+r.toUpperCase(),a=i.apiWrapper(e,t);n[o]=function(){a.apply(this,arguments)}}}))}(n,t,e.prototype)}))}},function(e,t,n){var r=n(0),o=function(e){switch(r(e)){case"string":return e;case"boolean":return e?"true":"false";case"number":return isFinite(e)?e:"";default:return""}},i=function(e,t,n){var r={};return t.getAllResponseHeaders().trim().split("\n").forEach((function(e){if(e){var t=e.indexOf(":"),n=e.substr(0,t).trim().toLowerCase(),o=e.substr(t+1).trim();r[n]=o}})),{error:e,statusCode:t.status,statusMessage:t.statusText,headers:r,body:n}},a=function(e,t){return t||"text"!==t?e.response:e.responseText};e.exports=function(e,t){var n,s,c,u,l=(e.method||"GET").toUpperCase(),d=e.url;if(e.qs){var p=(n=e.qs,s=s||"&",c=c||"=",null===n&&(n=void 0),"object"===r(n)?Object.keys(n).map((function(e){var t=encodeURIComponent(o(e))+c;return Array.isArray(n[e])?n[e].map((function(e){return t+encodeURIComponent(o(e))})).join(s):t+encodeURIComponent(o(n[e]))})).filter(Boolean).join(s):u?encodeURIComponent(o(u))+c+encodeURIComponent(o(n)):"");p&&(d+=(-1===d.indexOf("?")?"?":"&")+p)}var f=new XMLHttpRequest;if(f.open(l,d,!0),f.responseType=e.dataType||"text",e.xhrFields)for(var h in e.xhrFields)f[h]=e.xhrFields[h];var m=e.headers;if(m)for(var g in m)m.hasOwnProperty(g)&&"content-length"!==g.toLowerCase()&&"user-agent"!==g.toLowerCase()&&"origin"!==g.toLowerCase()&&"host"!==g.toLowerCase()&&f.setRequestHeader(g,m[g]);return e.onProgress&&f.upload&&(f.upload.onprogress=e.onProgress),e.onDownloadProgress&&(f.onprogress=e.onDownloadProgress),e.timeout&&(f.timeout=e.timeout),f.ontimeout=function(e){var n=new Error("timeout");t(i(n,f))},f.onload=function(){t(i(null,f,a(f,e.dataType)))},f.onerror=function(n){var r=a(f,e.dataType);if(r)t(i(null,f,r));else{var o=f.statusText;o||0!==f.status||(o=new Error("CORS blocked or network error")),t(i(o,f,r))}},f.send(e.body||""),f}},function(e,t,n){var r=n(0),o=n(9),i=n(29),a=n(8).EventProxy,s=n(1),c=n(6);function u(e,t){var n=e.TaskId,r=e.Bucket,c=e.Region,u=e.Key,p=e.StorageClass,f=this,h={},m=e.FileSize,g=e.SliceSize,y=Math.ceil(m/g),v=0,C=s.throttleOnProgress.call(f,m,e.onHashProgress),k=function(t,n){var r=t.length;if(0===r)return n(null,!0);if(r>y)return n(null,!1);if(r>1&&Math.max(t[0].Size,t[1].Size)!==g)return n(null,!1);!function o(i){if(i=a.length)S.emit("has_and_check_upload_id",t);else{var p=a[l];if(!s.isInArray(t,p))return o.removeUploadId.call(f,p),void i(l+1);o.using[p]?i(l+1):d.call(f,{Bucket:r,Region:c,Key:u,UploadId:p,tracker:e.tracker},(function(e,t){f._isRunningTask(n)&&(e?(o.removeUploadId.call(f,p),i(l+1)):S.emit("upload_id_available",{UploadId:p,PartList:t.PartList}))}))}}(0)}else S.emit("has_and_check_upload_id",t)})),S.on("get_remote_upload_id_list",(function(){l.call(f,{Bucket:r,Region:c,Key:u,tracker:e.tracker},(function(t,i){if(f._isRunningTask(n)){if(t)return S.emit("error",t);var a=s.filter(i.UploadList,(function(e){return e.Key===u&&(!p||e.StorageClass.toUpperCase()===p.toUpperCase())})).reverse().map((function(e){return e.UploadId||e.UploadID}));if(a.length)S.emit("seek_local_avail_upload_id",a);else{var c,l=o.getFileId(e.Body,e.ChunkSize,r,u);l&&(c=o.getUploadIdList.call(f,l))&&s.each(c,(function(e){o.removeUploadId.call(f,e)})),S.emit("no_available_upload_id")}}}))})),S.emit("get_remote_upload_id_list")}function l(e,t){var n=this,r=[],o={Bucket:e.Bucket,Region:e.Region,Prefix:e.Key,calledBySdk:e.calledBySdk||"sliceUploadFile",tracker:e.tracker};!function e(){n.multipartList(o,(function(n,i){if(n)return t(n);r.push.apply(r,i.Upload||[]),"true"===i.IsTruncated?(o.KeyMarker=i.NextKeyMarker,o.UploadIdMarker=i.NextUploadIdMarker,e()):t(null,{UploadList:r})}))}()}function d(e,t){var n=this,r=[],o={Bucket:e.Bucket,Region:e.Region,Key:e.Key,UploadId:e.UploadId,calledBySdk:"sliceUploadFile",tracker:e.tracker};!function e(){n.multipartListPart(o,(function(n,i){if(n)return t(n);r.push.apply(r,i.Part||[]),"true"===i.IsTruncated?(o.PartNumberMarker=i.NextPartNumberMarker,e()):t(null,{PartList:r})}))}()}function p(e,t){var n=this,r=e.TaskId,o=e.Bucket,a=e.Region,c=e.Key,u=e.UploadData,l=e.FileSize,d=e.SliceSize,p=Math.min(e.AsyncLimit||n.options.ChunkParallelLimit||1,256),h=e.Body,m=Math.ceil(l/d),g=0,y=e.ServerSideEncryption,v=e.Headers,C=s.filter(u.PartList,(function(e){return e.Uploaded&&(g+=e.PartNumber>=m&&l%d||d),!e.Uploaded})),k=e.onProgress;i.eachLimit(C,p,(function(t,i){if(n._isRunningTask(r)){var s=t.PartNumber,p=Math.min(l,t.PartNumber*d)-(t.PartNumber-1)*d,m=0;f.call(n,{TaskId:r,Bucket:o,Region:a,Key:c,SliceSize:d,FileSize:l,PartNumber:s,ServerSideEncryption:y,Body:h,UploadData:u,Headers:v,onProgress:function(e){g+=e.loaded-m,m=e.loaded,k({loaded:g,total:l})},tracker:e.tracker},(function(e,o){n._isRunningTask(r)&&(e||o.ETag||(e='get ETag error, please add "ETag" to CORS ExposeHeader setting.( 获取ETag失败,请在CORS ExposeHeader设置中添加ETag,请参考文档:https://cloud.tencent.com/document/product/436/13318 )'),e?g-=m:(g+=p-m,t.ETag=o.ETag),k({loaded:g,total:l}),i(e||null,o))}))}}),(function(e){if(n._isRunningTask(r))return e?t(e):void t(null,{UploadId:u.UploadId,SliceList:u.PartList})}))}function f(e,t){var n=this,r=e.TaskId,o=e.Bucket,a=e.Region,c=e.Key,u=e.FileSize,l=e.Body,d=1*e.PartNumber,p=e.SliceSize,f=e.ServerSideEncryption,h=e.UploadData,m=e.Headers||{},g=n.options.ChunkRetryTimes+1,y=p*(d-1),v=p,C=y+p;C>u&&(v=(C=u)-y);var k=["x-cos-traffic-limit","x-cos-mime-limit"],S={};s.each(m,(function(e,t){k.indexOf(t)>-1&&(S[t]=e)}));var b=h.PartList[d-1];i.retry(g,(function(t){n._isRunningTask(r)&&s.fileSlice(l,y,C,!0,(function(i){n.multipartUpload({TaskId:r,Bucket:o,Region:a,Key:c,ContentLength:v,PartNumber:d,UploadId:h.UploadId,ServerSideEncryption:f,Body:i,Headers:S,onProgress:e.onProgress,calledBySdk:"sliceUploadFile",tracker:e.tracker},(function(e,o){if(n._isRunningTask(r))return e?t(e):(b.Uploaded=!0,t(null,o))}))}))}),(function(e,o){if(n._isRunningTask(r))return t(e,o)}))}function h(e,t){var n=e.Bucket,r=e.Region,o=e.Key,a=e.UploadId,s=e.SliceList,c=this,u=this.options.ChunkRetryTimes+1,l=e.Headers,d=s.map((function(e){return{PartNumber:e.PartNumber,ETag:e.ETag}}));i.retry(u,(function(t){c.multipartComplete({Bucket:n,Region:r,Key:o,UploadId:a,Parts:d,Headers:l,calledBySdk:"sliceUploadFile",tracker:e.tracker},t)}),(function(e,n){t(e,n)}))}function m(e,t){var n=e.Bucket,r=e.Region,o=e.Key,a=e.AbortArray,s=e.AsyncLimit||1,c=this,u=0,l=new Array(a.length);i.eachLimit(a,s,(function(t,i){var a=u;if(o&&o!==t.Key)return l[a]={error:{KeyNotMatch:!0}},void i(null);var s=t.UploadId||t.UploadID;c.multipartAbort({Bucket:n,Region:r,Key:t.Key,Headers:e.Headers,UploadId:s},(function(e){var o={Bucket:n,Region:r,Key:t.Key,UploadId:s};l[a]={error:e,task:o},i(null)})),u++}),(function(e){if(e)return t(e);for(var n=[],r=[],o=0,i=l.length;oo?"sliceUploadFile":"putObject",h=e.onFileFinish;i.push({api:f,params:e,callback:function(n,r){e.tracker&&e.tracker.formatResult(n,r),h&&h(n,r,l),t&&t(n,r)}}),n._addTasks(i)},uploadFiles:function(e,t){var n=this,o=void 0===e.SliceSize?n.options.SliceSize:e.SliceSize,i=0,a=0,u=s.throttleOnProgress.call(n,a,e.onProgress),l=e.files.length,d=e.onFileFinish,p=Array(l),f=function(e,n,r){u(null,!0),d&&d(e,n,r),p[r.Index]={options:r,error:e,data:n},--l<=0&&t&&t(null,{files:p})},h=[];s.each(e.files,(function(e,t){!function(){var l=e.Body,d=l.size||l.length||0,p={Index:t,TaskId:""};if(i+=d,n.options.EnableTracker){var m=n.options.UseAccelerate||"string"==typeof n.options.Domain&&n.options.Domain.includes("accelerate.");e.tracker=new c({bucket:e.Bucket,region:e.Region,apiName:"uploadFiles",fileKey:e.Key,fileSize:d,accelerate:m,deepTracker:n.options.DeepTracker,customId:n.options.CustomId,delay:n.options.TrackerDelay})}s.each(e,(function(e,t){"object"!==r(e)&&"function"!=typeof e&&(p[t]=e)}));var g=e.onTaskReady;e.onTaskReady=function(e){p.TaskId=e,g&&g(e)};var y=0,v=e.onProgress;e.onProgress=function(e){a=a-y+e.loaded,y=e.loaded,v&&v(e),u({loaded:a,total:i})};var C=d>o?"sliceUploadFile":"putObject",k=e.onFileFinish;h.push({api:C,params:e,callback:function(t,n){e.tracker&&e.tracker.formatResult(t,n),k&&k(t,n),f&&f(t,n,p)}})}()})),n._addTasks(h)},sliceCopyFile:function(e,t){var n=new a,r=this,c=e.Bucket,u=e.Region,l=e.Key,p=e.CopySource,f=s.getSourceParams.call(this,p);if(f){var h=f.Bucket,m=f.Region,y=decodeURIComponent(f.Key),v=void 0===e.CopySliceSize?r.options.CopySliceSize:e.CopySliceSize;v=Math.max(0,v);var C,k,S=e.CopyChunkSize||this.options.CopyChunkSize,b=this.options.CopyChunkParallelLimit,T=this.options.ChunkRetryTimes+1,R=0,E=0,w={},x={},A={};n.on("copy_slice_complete",(function(n){var a={};s.each(e.Headers,(function(e,t){0===t.toLowerCase().indexOf("x-cos-meta-")&&(a[t]=e)}));var d=s.map(n.PartList,(function(e){return{PartNumber:e.PartNumber,ETag:e.ETag}}));i.retry(T,(function(e){r.multipartComplete({Bucket:c,Region:u,Key:l,UploadId:n.UploadId,Parts:d,calledBySdk:"sliceCopyFile"},e)}),(function(e,r){if(o.removeUsing(n.UploadId),e)return k(null,!0),t(e);o.removeUploadId(n.UploadId),k({loaded:C,total:C},!0),t(null,r)}))})),n.on("get_copy_data_finish",(function(e){var a=o.getCopyFileId(p,w,S,c,l);a&&o.saveUploadId(a,e.UploadId,r.options.UploadIdCacheLimit),o.setUsing(e.UploadId);var d=s.filter(e.PartList,(function(e){return e.Uploaded&&(E+=e.PartNumber>=R&&C%S||S),!e.Uploaded}));i.eachLimit(d,b,(function(t,n){var o=t.PartNumber,a=t.CopySourceRange,s=t.end-t.start;i.retry(T,(function(t){g.call(r,{Bucket:c,Region:u,Key:l,CopySource:p,UploadId:e.UploadId,PartNumber:o,CopySourceRange:a},t)}),(function(e,r){if(e)return n(e);k({loaded:E+=s,total:C}),t.ETag=r.ETag,n(e||null,r)}))}),(function(r){if(r)return o.removeUsing(e.UploadId),k(null,!0),t(r);n.emit("copy_slice_complete",e)}))})),n.on("get_chunk_size_finish",(function(){var i=function(){r.multipartInit({Bucket:c,Region:u,Key:l,Headers:A},(function(r,o){if(r)return t(r);e.UploadId=o.UploadId,n.emit("get_copy_data_finish",{UploadId:e.UploadId,PartList:e.PartList})}))},a=o.getCopyFileId(p,w,S,c,l),f=o.getUploadIdList(a);if(!a||!f)return i();!function t(a){if(a>=f.length)return i();var p=f[a];if(o.using[p])return t(a+1);d.call(r,{Bucket:c,Region:u,Key:l,UploadId:p},(function(r,i){if(r)o.removeUploadId(p),t(a+1);else{if(o.using[p])return t(a+1);var c={},u=0;s.each(i.PartList,(function(e){var t=parseInt(e.Size),n=u+t-1;c[e.PartNumber+"|"+u+"|"+n]=e.ETag,u+=t})),s.each(e.PartList,(function(e){var t=c[e.PartNumber+"|"+e.start+"|"+e.end];t&&(e.ETag=t,e.Uploaded=!0)})),n.emit("get_copy_data_finish",{UploadId:p,PartList:e.PartList})}}))}(0)})),n.on("get_file_size_finish",(function(){if(function(){for(var t=[1,2,4,8,16,32,64,128,256,512,1024,2048,4096,5120],n=1048576,o=0;on.length&&(x[t]=e)})),n.emit("get_file_size_finish")}else t(s.error(new Error('get Content-Length error, please add "Content-Length" to CORS ExposeHeader setting.( 获取Content-Length失败,请在CORS ExposeHeader设置中添加Content-Length,请参考文档:https://cloud.tencent.com/document/product/436/13318 )')))}))}else t(s.error(new Error("CopySource format error")))}};e.exports.init=function(e,t){t.transferToTaskMethod(y,"sliceUploadFile"),s.each(y,(function(t,n){e.prototype[n]=s.apiWrapper(n,t)}))}},function(e,t){var n={eachLimit:function(e,t,n,r){if(r=r||function(){},!e.length||t<=0)return r();var o=0,i=0,a=0;!function s(){if(o>=e.length)return r();for(;a=e.length?r():s())}))}()},retry:function(e,t,n){e<1?n():function r(o){t((function(t,i){t&&ot?1:-1}))}var p,f=["cache-control","content-disposition","content-encoding","content-length","content-md5","expect","expires","host","if-match","if-modified-since","if-none-match","if-unmodified-since","origin","range","transfer-encoding"],h=function(e,t,n){var r=t/8,o=e.slice(n,n+r);return new Uint8Array(o).reverse(),new{8:Uint8Array,16:Uint16Array,32:Uint32Array}[t](o)[0]},m=function(e,t,n,r){var o=e.slice(t,n),i="";return new Uint8Array(o).forEach((function(e){i+=String.fromCharCode(e)})),r&&(i=decodeURIComponent(escape(i))),i},g=function(){},y=function(e){var t={};for(var n in e)e.hasOwnProperty(n)&&void 0!==e[n]&&null!==e[n]&&(t[n]=e[n]);return t},v=(p=function(e,t){e=e.split("."),t=t.split(".");for(var n=0;nparseInt(t[n])?1:-1;return 0},function(e){if(!e)return!1;var t=(e.match(/Chrome\/([.\d]+)/)||[])[1],n=(e.match(/QBCore\/([.\d]+)/)||[])[1],r=(e.match(/QQBrowser\/([.\d]+)/)||[])[1];return t&&p(t,"53.0.2785.116")<0&&n&&p(n,"3.53.991.400")<0&&r&&p(r,"9.0.2524.400")<=0||!1}("undefined"!=typeof navigator&&navigator.userAgent)),C=1048576;function k(e){return R(e,(function(e){return"object"===r(e)&&null!==e?k(e):e}))}function S(e,t){return T(t,(function(n,r){e[r]=t[r]})),e}function b(e){return e instanceof Array}function T(e,t){for(var n in e)e.hasOwnProperty(n)&&t(e[n],n)}function R(e,t){var n=b(e)?[]:{};for(var r in e)e.hasOwnProperty(r)&&(n[r]=t(e[r],r));return n}var E=function(e,t){var n=t.Bucket,r=t.Region,o=t.Key,i=this.options.Domain,a=!i||"string"==typeof i&&i.indexOf("{Bucket}")>-1,s=!i||"string"==typeof i&&i.indexOf("{Region}")>-1;if(e.indexOf("Bucket")>-1||"deleteMultipleObject"===e||"multipartList"===e||"listObjectVersions"===e){if(a&&!n)return"Bucket";if(s&&!r)return"Region"}else if(e.indexOf("Object")>-1||e.indexOf("multipart")>-1||"sliceUploadFile"===e||"abortUploadTask"===e){if(a&&!n)return"Bucket";if(s&&!r)return"Region";if(!o)return"Key"}return!1},w=function(e,t){if(t=S({},t),"getAuth"!==e&&"getV4Auth"!==e&&"getObjectUrl"!==e){var n=t.Headers||{};if(t&&"object"===r(t)){!function(){for(var e in t)t.hasOwnProperty(e)&&e.indexOf("x-cos-")>-1&&(n[e]=t[e])}();O.each({"x-cos-mfa":"MFA","Content-MD5":"ContentMD5","Content-Length":"ContentLength","Content-Type":"ContentType",Expect:"Expect",Expires:"Expires","Cache-Control":"CacheControl","Content-Disposition":"ContentDisposition","Content-Encoding":"ContentEncoding",Range:"Range","If-Modified-Since":"IfModifiedSince","If-Unmodified-Since":"IfUnmodifiedSince","If-Match":"IfMatch","If-None-Match":"IfNoneMatch","x-cos-copy-source":"CopySource","x-cos-copy-source-Range":"CopySourceRange","x-cos-metadata-directive":"MetadataDirective","x-cos-copy-source-If-Modified-Since":"CopySourceIfModifiedSince","x-cos-copy-source-If-Unmodified-Since":"CopySourceIfUnmodifiedSince","x-cos-copy-source-If-Match":"CopySourceIfMatch","x-cos-copy-source-If-None-Match":"CopySourceIfNoneMatch","x-cos-acl":"ACL","x-cos-grant-read":"GrantRead","x-cos-grant-write":"GrantWrite","x-cos-grant-full-control":"GrantFullControl","x-cos-grant-read-acp":"GrantReadAcp","x-cos-grant-write-acp":"GrantWriteAcp","x-cos-storage-class":"StorageClass","x-cos-traffic-limit":"TrafficLimit","x-cos-mime-limit":"MimeLimit","x-cos-server-side-encryption-customer-algorithm":"SSECustomerAlgorithm","x-cos-server-side-encryption-customer-key":"SSECustomerKey","x-cos-server-side-encryption-customer-key-MD5":"SSECustomerKeyMD5","x-cos-server-side-encryption":"ServerSideEncryption","x-cos-server-side-encryption-cos-kms-key-id":"SSEKMSKeyId","x-cos-server-side-encryption-context":"SSEContext","Pic-Operations":"PicOperations"},(function(e,r){void 0!==t[e]&&(n[r]=t[e])})),t.Headers=y(n)}}return t},A=function(e){return Date.now()+(e||0)},x="object"===("undefined"==typeof navigator?"undefined":r(navigator))&&!!navigator.userAgent.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/),I="object"===("undefined"==typeof navigator?"undefined":r(navigator))&&/\sQQ/i.test(navigator.userAgent),O={noop:g,formatParams:w,apiWrapper:function(e,t){return function(n,r){var o,i=this;if("function"==typeof n&&(r=n,n={}),n=w(e,n),i.options.EnableTracker)if("sliceUploadFile"===n.calledBySdk)o=n.tracker&&n.tracker.generateSubTracker({apiName:e});else if(["uploadFile","uploadFiles"].includes(e))o=null;else{var a=-1;n.Body&&(a="string"==typeof n.Body?n.Body.length:n.Body.size||n.Body.byteLength||-1),o=new u({bucket:n.Bucket,region:n.Region,apiName:e,fileKey:n.Key,fileSize:a,deepTracker:i.options.DeepTracker,customId:i.options.CustomId,delay:i.options.TrackerDelay})}n.tracker=o;var s=function(e){return e&&e.headers&&(e.headers["x-cos-request-id"]&&(e.RequestId=e.headers["x-cos-request-id"]),e.headers["x-ci-request-id"]&&(e.RequestId=e.headers["x-ci-request-id"]),e.headers["x-cos-version-id"]&&(e.VersionId=e.headers["x-cos-version-id"]),e.headers["x-cos-delete-marker"]&&(e.DeleteMarker=e.headers["x-cos-delete-marker"])),e},c=function(e,t){o&&o.formatResult(e,t),r&&r(s(e),s(t))},l=function(){if("getService"!==e&&"abortUploadTask"!==e){var t=E.call(i,e,n);if(t)return"missing param "+t;if(n.Region){if(i.options.CompatibilityMode){if(!/^([a-z\d-.]+)$/.test(n.Region))return"Region format error."}else{if(n.Region.indexOf("cos.")>-1)return'param Region should not be start with "cos."';if(!/^([a-z\d-]+)$/.test(n.Region))return"Region format error."}!i.options.CompatibilityMode&&-1===n.Region.indexOf("-")&&"yfb"!==n.Region&&"default"!==n.Region&&n.Region}if(n.Bucket){if(!/^([a-z\d-]+)-(\d+)$/.test(n.Bucket))if(n.AppId)n.Bucket=n.Bucket+"-"+n.AppId;else{if(!i.options.AppId)return'Bucket should format as "test-1250000000".';n.Bucket=n.Bucket+"-"+i.options.AppId}n.AppId&&delete n.AppId}!i.options.UseRawKey&&n.Key&&"/"===n.Key.substr(0,1)&&(n.Key=n.Key.substr(1))}}(),d=["getAuth","getObjectUrl"].includes(e);if("function"==typeof Promise&&!d&&!r)return new Promise((function(e,o){if(r=function(t,n){t?o(t):e(n)},l)return c(O.error(new Error(l)));t.call(i,n,c)}));if(l)return c(O.error(new Error(l)));var p=t.call(i,n,c);return d?p:void 0}},xml2json:a,json2xml:s,md5:o,clearKey:y,fileSlice:function(e,t,n,r,o){var i;if(e.slice?i=e.slice(t,n):e.mozSlice?i=e.mozSlice(t,n):e.webkitSlice&&(i=e.webkitSlice(t,n)),r&&v){var a=new FileReader;a.onload=function(e){i=null,o(new Blob([a.result]))},a.readAsArrayBuffer(i)}else o(i)},getBodyMd5:function(e,t,n,r){n=n||g,e?"string"==typeof t?n(O.md5(t,!0)):Blob&&t instanceof Blob?O.getFileMd5(t,(function(e,t){n(t)}),r):n():n()},getFileMd5:function(e,t,n){var r=e.size,i=0,a=o.getCtx();!function o(s){if(s>=r){var c=a.digest("hex");t(null,c)}else{var u=Math.min(r,s+C);O.fileSlice(e,s,u,!1,(function(e){!function(e,t){var n,r=new FileReader;FileReader.prototype.readAsBinaryString?(n=FileReader.prototype.readAsBinaryString,r.onload=function(){t(this.result)}):FileReader.prototype.readAsArrayBuffer&&(n=function(e){var n="",r=new FileReader;r.onload=function(e){for(var o=new Uint8Array(r.result),i=o.byteLength,a=0;a-1||f.indexOf(r)>-1)&&(t[n]=e[n])}return t}(k(e.Headers||e.headers||{})),u=e.Key||"";e.UseRawKey?t=e.Pathname||e.pathname||"/"+u:0!==(t=e.Pathname||e.pathname||u).indexOf("/")&&(t="/"+t);var l=!1!==e.ForceSignHost;if(!c.Host&&!c.host&&e.Bucket&&e.Region&&l&&(c.Host=e.Bucket+".cos."+e.Region+".myqcloud.com"),!n)throw new Error("missing param SecretId");if(!r)throw new Error("missing param SecretKey");var p=Math.round(A(e.SystemClockOffset)/1e3)-1,h=p,m=e.Expires||e.expires;h+=void 0===m?900:1*m||0;var g=n,y=o||p+";"+h,v=o||p+";"+h,C=d(c,!0).join(";").toLowerCase(),S=d(s,!0).join(";").toLowerCase(),b=i.HmacSHA1(v,r).toString(),T=[a,t,O.obj2str(s,!0),O.obj2str(c,!0),""].join("\n"),R=["sha1",y,i.SHA1(T).toString(),""].join("\n");return["q-sign-algorithm=sha1","q-ak="+g,"q-sign-time="+y,"q-key-time="+v,"q-header-list="+C,"q-url-param-list="+S,"q-signature="+i.HmacSHA1(R,b).toString()].join("&")},parseSelectPayload:function(e){for(var t={},n=m(e),r={records:[]};e.byteLength;){var o,i=h(e,32,0),a=h(e,32,4),s=i-a-16,c=0;for(e=e.slice(12);c1)for(var n=1;n=0))throw new I(A,new Error(e.tagName+"@"+n));for(var o=t.length-1;r"==e&&">")||"&"==e&&"&"||'"'==e&&"""||"&#"+e.charCodeAt()+";"}function j(e,t){if(t(e))return!0;if(e=e.firstChild)do{if(j(e,t))return!0}while(e=e.nextSibling)}function F(){this.ownerDocument=this}function K(e,t,n,r){e&&e._inc++,n.namespaceURI===i.XMLNS&&delete t._nsMap[n.prefix?n.localName:""]}function q(e,t,n){if(e&&e._inc){e._inc++;var r=t.childNodes;if(n)r[r.length++]=n;else{for(var o=t.firstChild,i=0;o;)r[i++]=o,o=o.nextSibling;r.length=i,delete r[r.length]}}}function z(e,t){var n=t.previousSibling,r=t.nextSibling;return n?n.nextSibling=r:e.firstChild=r,r?r.previousSibling=n:e.lastChild=n,t.parentNode=null,t.previousSibling=null,t.nextSibling=null,q(e.ownerDocument,e),t}function G(e){return e&&e.nodeType===H.DOCUMENT_TYPE_NODE}function V(e){return e&&e.nodeType===H.ELEMENT_NODE}function X(e){return e&&e.nodeType===H.TEXT_NODE}function W(e,t){var n=e.childNodes||[];if(o(n,V)||G(t))return!1;var r=o(n,G);return!(t&&r&&n.indexOf(r)>n.indexOf(t))}function Q(e,t){var n=e.childNodes||[];if(o(n,(function(e){return V(e)&&e!==t})))return!1;var r=o(n,G);return!(t&&r&&n.indexOf(r)>n.indexOf(t))}function J(e,t,n){if(!function(e){return e&&(e.nodeType===H.DOCUMENT_NODE||e.nodeType===H.DOCUMENT_FRAGMENT_NODE||e.nodeType===H.ELEMENT_NODE)}(e))throw new I(w,"Unexpected parent node type "+e.nodeType);if(n&&n.parentNode!==e)throw new I(A,"child not in parent");if(!function(e){return e&&(V(e)||X(e)||G(e)||e.nodeType===H.DOCUMENT_FRAGMENT_NODE||e.nodeType===H.COMMENT_NODE||e.nodeType===H.PROCESSING_INSTRUCTION_NODE)}(t)||G(t)&&e.nodeType!==H.DOCUMENT_NODE)throw new I(w,"Unexpected node type "+t.nodeType+" for parent node type "+e.nodeType)}function $(e,t,n){var r=e.childNodes||[],i=t.childNodes||[];if(t.nodeType===H.DOCUMENT_FRAGMENT_NODE){var a=i.filter(V);if(a.length>1||o(i,X))throw new I(w,"More than one element or text in fragment");if(1===a.length&&!W(e,n))throw new I(w,"Element in fragment can not be inserted before doctype")}if(V(t)&&!W(e,n))throw new I(w,"Only one element can be added and only after doctype");if(G(t)){if(o(r,G))throw new I(w,"Only one doctype is allowed");var s=o(r,V);if(n&&r.indexOf(s)1||o(i,X))throw new I(w,"More than one element or text in fragment");if(1===a.length&&!Q(e,n))throw new I(w,"Element in fragment can not be inserted before doctype")}if(V(t)&&!Q(e,n))throw new I(w,"Only one element can be added and only after doctype");if(G(t)){if(o(r,(function(e){return G(e)&&e!==n})))throw new I(w,"Only one doctype is allowed");var s=o(r,V);if(n&&r.indexOf(s)=0;T--){if(""===(R=o[T]).prefix&&R.namespace===e.namespaceURI){d=R.namespace;break}}if(d!==e.namespaceURI)for(T=o.length-1;T>=0;T--){var R;if((R=o[T]).namespace===e.namespaceURI){R.prefix&&(l=R.prefix+":"+u);break}}}t.push("<",l);for(var E=0;E"),n&&/^script$/i.test(u))for(;c;)c.data?t.push(c.data):ge(c,t,n,r,o.slice()),c=c.nextSibling;else for(;c;)ge(c,t,n,r,o.slice()),c=c.nextSibling;t.push("")}else t.push("/>");return;case k:case b:for(c=e.firstChild;c;)ge(c,t,n,r,o.slice()),c=c.nextSibling;return;case f:return me(t,e.name,e.value);case h:return t.push(e.data.replace(/[<&>]/g,L));case m:return t.push("");case C:return t.push("\x3c!--",e.data,"--\x3e");case S:var I=e.publicId,O=e.systemId;if(t.push("");else if(O&&"."!=O)t.push(" SYSTEM ",O,">");else{var B=e.internalSubset;B&&t.push(" [",B,"]"),t.push(">")}return;case v:return t.push("");case g:return t.push("&",e.nodeName,";");default:t.push("??",e.nodeName)}}function ye(e,t,n){var r;switch(t.nodeType){case p:(r=t.cloneNode(!1)).ownerDocument=e;case b:break;case f:n=!0}if(r||(r=t.cloneNode(!1)),r.ownerDocument=e,r.parentNode=null,n)for(var o=t.firstChild;o;)r.appendChild(ye(e,o,n)),o=o.nextSibling;return r}function ve(e,t,n){var r=new t.constructor;for(var o in t)if(Object.prototype.hasOwnProperty.call(t,o)){var i=t[o];"object"!=typeof i&&i!=r[o]&&(r[o]=i)}switch(t.childNodes&&(r.childNodes=new O),r.ownerDocument=e,r.nodeType){case p:var a=t.attributes,s=r.attributes=new P,c=a.length;s._ownerElement=r;for(var u=0;u0},lookupPrefix:function(e){for(var t=this;t;){var n=t._nsMap;if(n)for(var r in n)if(Object.prototype.hasOwnProperty.call(n,r)&&n[r]===e)return r;t=t.nodeType==f?t.ownerDocument:t.parentNode}return null},lookupNamespaceURI:function(e){for(var t=this;t;){var n=t._nsMap;if(n&&Object.prototype.hasOwnProperty.call(n,e))return n[e];t=t.nodeType==f?t.ownerDocument:t.parentNode}return null},isDefaultNamespace:function(e){return null==this.lookupPrefix(e)}},u(d,H),u(d,H.prototype),F.prototype={nodeName:"#document",nodeType:k,doctype:null,documentElement:null,_inc:1,insertBefore:function(e,t){if(e.nodeType==b){for(var n=e.firstChild;n;){var r=n.nextSibling;this.insertBefore(n,t),n=r}return e}return Z(this,e,t),e.ownerDocument=this,null===this.documentElement&&e.nodeType===p&&(this.documentElement=e),e},removeChild:function(e){return this.documentElement==e&&(this.documentElement=null),z(this,e)},replaceChild:function(e,t){Z(this,e,t,Y),e.ownerDocument=this,t&&this.removeChild(t),V(e)&&(this.documentElement=e)},importNode:function(e,t){return ye(this,e,t)},getElementById:function(e){var t=null;return j(this.documentElement,(function(n){if(n.nodeType==p&&n.getAttribute("id")==e)return t=n,!0})),t},getElementsByClassName:function(e){var t=c(e);return new B(this,(function(n){var r=[];return t.length>0&&j(n.documentElement,(function(o){if(o!==n&&o.nodeType===p){var i=o.getAttribute("class");if(i){var a=e===i;if(!a){var s=c(i);a=t.every((u=s,function(e){return u&&-1!==u.indexOf(e)}))}a&&r.push(o)}}var u})),r}))},createElement:function(e){var t=new ee;return t.ownerDocument=this,t.nodeName=e,t.tagName=e,t.localName=e,t.childNodes=new O,(t.attributes=new P)._ownerElement=t,t},createDocumentFragment:function(){var e=new le;return e.ownerDocument=this,e.childNodes=new O,e},createTextNode:function(e){var t=new re;return t.ownerDocument=this,t.appendData(e),t},createComment:function(e){var t=new oe;return t.ownerDocument=this,t.appendData(e),t},createCDATASection:function(e){var t=new ie;return t.ownerDocument=this,t.appendData(e),t},createProcessingInstruction:function(e,t){var n=new de;return n.ownerDocument=this,n.tagName=n.target=e,n.nodeValue=n.data=t,n},createAttribute:function(e){var t=new te;return t.ownerDocument=this,t.name=e,t.nodeName=e,t.localName=e,t.specified=!0,t},createEntityReference:function(e){var t=new ue;return t.ownerDocument=this,t.nodeName=e,t},createElementNS:function(e,t){var n=new ee,r=t.split(":"),o=n.attributes=new P;return n.childNodes=new O,n.ownerDocument=this,n.nodeName=t,n.tagName=t,n.namespaceURI=e,2==r.length?(n.prefix=r[0],n.localName=r[1]):n.localName=t,o._ownerElement=n,n},createAttributeNS:function(e,t){var n=new te,r=t.split(":");return n.ownerDocument=this,n.nodeName=t,n.name=t,n.namespaceURI=e,n.specified=!0,2==r.length?(n.prefix=r[0],n.localName=r[1]):n.localName=t,n}},l(F,H),ee.prototype={nodeType:p,hasAttribute:function(e){return null!=this.getAttributeNode(e)},getAttribute:function(e){var t=this.getAttributeNode(e);return t&&t.value||""},getAttributeNode:function(e){return this.attributes.getNamedItem(e)},setAttribute:function(e,t){var n=this.ownerDocument.createAttribute(e);n.value=n.nodeValue=""+t,this.setAttributeNode(n)},removeAttribute:function(e){var t=this.getAttributeNode(e);t&&this.removeAttributeNode(t)},appendChild:function(e){return e.nodeType===b?this.insertBefore(e,null):function(e,t){return t.parentNode&&t.parentNode.removeChild(t),t.parentNode=e,t.previousSibling=e.lastChild,t.nextSibling=null,t.previousSibling?t.previousSibling.nextSibling=t:e.firstChild=t,e.lastChild=t,q(e.ownerDocument,e,t),t}(this,e)},setAttributeNode:function(e){return this.attributes.setNamedItem(e)},setAttributeNodeNS:function(e){return this.attributes.setNamedItemNS(e)},removeAttributeNode:function(e){return this.attributes.removeNamedItem(e.nodeName)},removeAttributeNS:function(e,t){var n=this.getAttributeNodeNS(e,t);n&&this.removeAttributeNode(n)},hasAttributeNS:function(e,t){return null!=this.getAttributeNodeNS(e,t)},getAttributeNS:function(e,t){var n=this.getAttributeNodeNS(e,t);return n&&n.value||""},setAttributeNS:function(e,t,n){var r=this.ownerDocument.createAttributeNS(e,t);r.value=r.nodeValue=""+n,this.setAttributeNode(r)},getAttributeNodeNS:function(e,t){return this.attributes.getNamedItemNS(e,t)},getElementsByTagName:function(e){return new B(this,(function(t){var n=[];return j(t,(function(r){r===t||r.nodeType!=p||"*"!==e&&r.tagName!=e||n.push(r)})),n}))},getElementsByTagNameNS:function(e,t){return new B(this,(function(n){var r=[];return j(n,(function(o){o===n||o.nodeType!==p||"*"!==e&&o.namespaceURI!==e||"*"!==t&&o.localName!=t||r.push(o)})),r}))}},F.prototype.getElementsByTagName=ee.prototype.getElementsByTagName,F.prototype.getElementsByTagNameNS=ee.prototype.getElementsByTagNameNS,l(ee,H),te.prototype.nodeType=f,l(te,H),ne.prototype={data:"",substringData:function(e,t){return this.data.substring(e,e+t)},appendData:function(e){e=this.data+e,this.nodeValue=this.data=e,this.length=e.length},insertData:function(e,t){this.replaceData(e,0,t)},appendChild:function(e){throw new Error(E[w])},deleteData:function(e,t){this.replaceData(e,t,"")},replaceData:function(e,t,n){n=this.data.substring(0,e)+n+this.data.substring(e+t),this.nodeValue=this.data=n,this.length=n.length}},l(ne,H),re.prototype={nodeName:"#text",nodeType:h,splitText:function(e){var t=this.data,n=t.substring(e);t=t.substring(0,e),this.data=this.nodeValue=t,this.length=t.length;var r=this.ownerDocument.createTextNode(n);return this.parentNode&&this.parentNode.insertBefore(r,this.nextSibling),r}},l(re,ne),oe.prototype={nodeName:"#comment",nodeType:C},l(oe,ne),ie.prototype={nodeName:"#cdata-section",nodeType:m},l(ie,ne),ae.prototype.nodeType=S,l(ae,H),se.prototype.nodeType=T,l(se,H),ce.prototype.nodeType=y,l(ce,H),ue.prototype.nodeType=g,l(ue,H),le.prototype.nodeName="#document-fragment",le.prototype.nodeType=b,l(le,H),de.prototype.nodeType=v,l(de,H),pe.prototype.serializeToString=function(e,t,n){return fe.call(e,t,n)},H.prototype.toString=fe;try{if(Object.defineProperty){function ke(e){switch(e.nodeType){case p:case b:var t=[];for(e=e.firstChild;e;)7!==e.nodeType&&8!==e.nodeType&&t.push(ke(e)),e=e.nextSibling;return t.join("");default:return e.nodeValue}}Object.defineProperty(B.prototype,"length",{get:function(){return _(this),this.$$length}}),Object.defineProperty(H.prototype,"textContent",{get:function(){return ke(this)},set:function(e){switch(this.nodeType){case p:case b:for(;this.firstChild;)this.removeChild(this.firstChild);(e||String(e))&&this.appendChild(this.ownerDocument.createTextNode(e));break;default:this.data=e,this.value=e,this.nodeValue=e}}}),Ce=function(e,t,n){e["$$"+t]=n}}}catch(Se){}t.DocumentType=ae,t.DOMException=I,t.DOMImplementation=M,t.Element=ee,t.Node=H,t.NodeList=O,t.XMLSerializer=pe},function(e,t,n){var r=n(23),o=n(24),i=n(0),a=n(7),s=null,c=function(e){if(!s){var t=n(25);s=new t({appkey:"0AND0VEVB24UBGDU",versionCode:a.version,channelID:"js_sdk",openid:"openid",unionid:"unid",strictMode:!1,delay:e,sessionDuration:6e4})}return s},u=function(){var e=function(){return(65536*(1+Math.random())|0).toString(16).substring(1)};return e()+e()+"-"+e()+"-"+e()+"-"+e()+"-"+e()+e()+e()},l=function(){if("object"===("undefined"==typeof navigator?"undefined":i(navigator))){var e=navigator.connection||navigator.mozConnection||navigator.webkitConnection;return(null==e?void 0:e.type)||(null==e?void 0:e.effectiveType)||"unknown"}return"unknown"},d=function(){if("object"!==("undefined"==typeof navigator?"undefined":i(navigator)))return"unknown os";var e=navigator.userAgent.toLowerCase(),t=/macintosh|mac os x/i.test(navigator.userAgent);return e.indexOf("win32")>=0||e.indexOf("wow32")>=0?"win32":e.indexOf("win64")>=0||e.indexOf("wow64")>=0?"win64":t?"mac":"unknown os"},p=function(){return!("object"!==("undefined"==typeof navigator?"undefined":i(navigator))||!navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i))},f=function(){return!("object"!==("undefined"==typeof navigator?"undefined":i(navigator))||!navigator.userAgent.match(/(Android|Adr|Linux)/i))},h=function(){return!("object"!==("undefined"==typeof navigator?"undefined":i(navigator))||!navigator.userAgent.match(/(iPhone|iPod|iPad|iOS)/i))},m=function(){if("object"!==("undefined"==typeof navigator?"undefined":i(navigator)))return"unknown device";var e=navigator.userAgent.toLowerCase();if(e.includes("app/tencent_wemeet"))return"tencent_wemeet";if(e.indexOf("maxthon")>=0){var t=e.match(/maxthon\/([\d.]+)/),n=t&&t[1]||"";return"傲游浏览器 ".concat(n).trim()}if(e.indexOf("qqbrowser")>=0){var r=e.match(/qqbrowser\/([\d.]+)/),o=r&&r[1]||"";return"QQ浏览器 ".concat(o).trim()}if(e.indexOf("se 2.x")>=0)return"搜狗浏览器";if(e.indexOf("wxwork")>=0)return"微信内置浏览器";if(e.indexOf("msie")>=0){var a=e.match(/msie ([\d.]+)/),s=a&&a[1]||"";return"IE ".concat(s).trim()}if(e.indexOf("firefox")>=0){var c=e.match(/firefox\/([\d.]+)/),u=c&&c[1]||"";return"Firefox ".concat(u).trim()}if(e.indexOf("chrome")>=0){var l=e.match(/chrome\/([\d.]+)/),d=l&&l[1]||"";return"Chrome ".concat(d).trim()}if(e.indexOf("opera")>=0){var p=e.match(/opera.([\d.]+)/),f=p&&p[1]||"";return"Opera ".concat(f).trim()}if(e.indexOf("safari")>=0){var h=e.match(/version\/([\d.]+)/),m=h&&h[1]||"";return"Safari ".concat(m).trim()}if(e.indexOf("edge")>=0){var g=e.match(/edge\/([\d.]+)/),y=g&&g[1]||"";return"edge ".concat(y).trim()}return e.substr(0,200)},g={isMobile:p(),isBrowser:!p(),mobileOsType:f()?"android":h?"ios":"other_mobile",pcOsType:d()},y={deviceType:g.isMobile?"mobile":g.isBrowser?"browser":"unknown",devicePlatform:g.isMobile?g.mobileOsType:g.pcOsType,deviceName:m()},v=["multipartInit","multipartUpload","multipartComplete","multipartList","multipartListPart","multipartAbort"],C=["putObject","postObject","appendObject","sliceUploadFile","uploadFile","uploadFiles"].concat(v),k=["getObject"];function S(e){return e.replace(/([A-Z])/g,"_$1").toLowerCase()}var b=function(){"use strict";function e(t){r(this,e);var n=t.parent,o=t.traceId,i=t.bucket,s=t.region,l=t.apiName,d=t.fileKey,p=t.fileSize,f=t.accelerate,h=t.customId,m=t.delay,g=t.deepTracker,v=i&&i.substr(i.lastIndexOf("-")+1)||"";this.parent=n,this.deepTracker=g,this.delay=m,this.params={cossdkVersion:a.version,region:s,networkType:"",host:"",accelerate:f?"Y":"N",requestPath:d||"",size:p||-1,httpMd5:0,httpSign:0,httpFull:0,name:l||"",result:"",tookTime:0,errorNode:"",errorCode:"",errorMessage:"",errorRequestId:"",errorStatusCode:0,errorServiceName:"",tracePlatform:"cos-js-sdk-v5",traceId:o||u(),bucket:i,appid:v,partNumber:0,retryTimes:0,reqUrl:"",customId:h||"",deviceType:y.deviceType,devicePlatform:y.devicePlatform,deviceName:y.deviceName,md5StartTime:0,md5EndTime:0,signStartTime:0,signEndTime:0,httpStartTime:0,httpEndTime:0,startTime:(new Date).getTime(),endTime:0},this.beacon=c(m)}return o(e,[{key:"formatResult",value:function(e,t){var n,r,o,i,a,s,c=(new Date).getTime()-this.params.startTime,u=l(),d=e?(null==e?void 0:e.code)||(null==e||null===(n=e.error)||void 0===n?void 0:n.code)||(null==e||null===(r=e.error)||void 0===r?void 0:r.Code):"",p=e?(null==e?void 0:e.message)||(null==e||null===(o=e.error)||void 0===o?void 0:o.message)||(null==e||null===(i=e.error)||void 0===i?void 0:i.Message):"",f=e?(null==e?void 0:e.resource)||(null==e||null===(a=e.error)||void 0===a?void 0:a.resource)||(null==e||null===(s=e.error)||void 0===s?void 0:s.Resource):"",h=e?null==e?void 0:e.statusCode:t.statusCode,m=e?(null==e?void 0:e.headers)&&(null==e?void 0:e.headers["x-cos-request-id"]):(null==t?void 0:t.headers)&&(null==t?void 0:t.headers["x-cos-request-id"]),g=e?m?"Server":"Client":"";if(Object.assign(this.params,{tookTime:c,networkType:u,httpMd5:this.params.md5EndTime-this.params.md5StartTime,httpSign:this.params.signEndTime-this.params.signStartTime,httpFull:this.params.httpEndTime-this.params.httpStartTime,result:e?"Fail":"Success",errorType:g,errorCode:d,errorStatusCode:h,errorMessage:p,errorServiceName:f,errorRequestId:m}),!e||d&&p||(this.params.fullError=e?JSON.stringify(e):""),"getObject"===this.params.name&&(this.params.size=t?t.headers&&t.headers["content-length"]:-1),this.params.reqUrl)try{var y=/^http(s)?:\/\/(.*?)\//.exec(this.params.reqUrl);this.params.host=y[2]}catch(e){this.params.host=this.params.reqUrl}this.sendEvents()}},{key:"setParams",value:function(e){Object.assign(this.params,e)}},{key:"sendEvents",value:function(){if(!v.includes(this.params.name)||this.deepTracker){var e,t=(e=this.params.name,C.includes(e)?"cos_upload":k.includes(e)?"cos_download":"base_service"),n=function(e){var t={},n="Success"===e.result?["tracePlatform","cossdkVersion","region","bucket","appid","networkType","host","accelerate","requestPath","partNumber","size","name","result","tookTime","errorRequestId","retryTimes","reqUrl","customId","deviceType","devicePlatform","deviceName"]:["tracePlatform","cossdkVersion","region","networkType","host","accelerate","requestPath","size","httpMd5","httpSign","httpFull","name","result","tookTime","errorNode","errorCode","errorMessage","errorRequestId","errorStatusCode","errorServiceName","errorType","traceId","bucket","appid","partNumber","retryTimes","reqUrl","customId","fullError","deviceType","devicePlatform","deviceName"];for(var r in e)n.includes(r)&&(t[S(r)]=e[r]);return t}(this.params);this.beacon||(this.beacon=c(this.delay||5e3)),0===this.delay?this.beacon&&this.beacon.onDirectUserAction(t,n):this.beacon&&this.beacon.onUserAction(t,n)}}},{key:"generateSubTracker",value:function(t){return Object.assign(t,{parent:this,deepTracker:this.deepTracker,traceId:this.params.traceId,bucket:this.params.bucket,region:this.params.region,fileKey:this.params.requestPath,customId:this.params.customId,delay:this.delay}),new e(t)}}]),e}();e.exports=b},function(e){e.exports=JSON.parse('{"name":"cos-js-sdk-v5","version":"1.4.19","description":"JavaScript SDK for [腾讯云对象存储](https://cloud.tencent.com/product/cos)","main":"dist/cos-js-sdk-v5.js","types":"index.d.ts","scripts":{"prettier":"prettier --write src demo/demo.js test/test.js server/sts.js index.d.ts","server":"node server/sts.js","dev":"cross-env NODE_ENV=development webpack -w --mode=development","build":"cross-env NODE_ENV=production webpack --mode=production","cos-auth.min.js":"uglifyjs ./demo/common/cos-auth.js -o ./demo/common/cos-auth.min.js -c -m","test":"jest --runInBand --coverage"},"repository":{"type":"git","url":"git+https://github.com/tencentyun/cos-js-sdk-v5.git"},"keywords":[],"author":"carsonxu","license":"ISC","bugs":{"url":"https://github.com/tencentyun/cos-js-sdk-v5/issues"},"homepage":"https://github.com/tencentyun/cos-js-sdk-v5#readme","dependencies":{"@xmldom/xmldom":"^0.8.6"},"devDependencies":{"@babel/core":"7.17.9","@babel/plugin-transform-runtime":"7.18.10","@babel/preset-env":"7.16.11","babel-loader":"8.2.5","body-parser":"^1.18.3","cross-env":"^5.2.0","express":"^4.16.4","jest":"^29.3.1","jest-environment-jsdom":"^29.3.1","prettier":"^3.0.1","qcloud-cos-sts":"^3.0.2","request":"^2.87.0","terser-webpack-plugin":"4.2.3","uglifyjs":"^2.4.11","webpack":"4.46.0","webpack-cli":"4.10.0"}}')},function(e,t){var n=function(e){var t={},n=function(e){return!t[e]&&(t[e]=[]),t[e]};e.on=function(e,t){n(e).push(t)},e.off=function(e,t){for(var r=n(e),o=r.length-1;o>=0;o--)t===r[o]&&r.splice(o,1)},e.emit=function(e,t){for(var r=n(e).map((function(e){return e})),o=0;o=0;n--){var o=r[n][2];(!o||o+2592e3=0;o--){var i=r[o];i[0]===e&&i[1]===t&&r.splice(o,1)}r.unshift([e,t,Math.round(Date.now()/1e3)]),r.length>n&&r.splice(n),l()}},removeUploadId:function(e){u.call(this),delete d.using[e];for(var t=r.length-1;t>=0;t--)r[t][1]===e&&r.splice(t,1);l()}};e.exports=d},function(e,t,n){var r=n(11);e.exports=r},function(e,t,n){"use strict";var r=n(1),o=n(8),i=n(26),a=n(27),s=n(29),c=n(7),u={AppId:"",SecretId:"",SecretKey:"",SecurityToken:"",ChunkRetryTimes:2,FileParallelLimit:3,ChunkParallelLimit:3,ChunkSize:1048576,SliceSize:1048576,CopyChunkParallelLimit:20,CopyChunkSize:10485760,CopySliceSize:10485760,MaxPartNumber:1e4,ProgressInterval:1e3,Domain:"",ServiceDomain:"",Protocol:"",CompatibilityMode:!1,ForcePathStyle:!1,UseRawKey:!1,Timeout:0,CorrectClockSkew:!0,SystemClockOffset:0,UploadCheckContentMd5:!1,UploadQueueSize:1e4,UploadAddMetaMd5:!1,UploadIdCacheLimit:50,UseAccelerate:!1,ForceSignHost:!0,EnableTracker:!1,DeepTracker:!1,TrackerDelay:5e3,CustomId:""},l=function(e){this.options=r.extend(r.clone(u),e||{}),this.options.FileParallelLimit=Math.max(1,this.options.FileParallelLimit),this.options.ChunkParallelLimit=Math.max(1,this.options.ChunkParallelLimit),this.options.ChunkRetryTimes=Math.max(0,this.options.ChunkRetryTimes),this.options.ChunkSize=Math.max(1048576,this.options.ChunkSize),this.options.CopyChunkParallelLimit=Math.max(1,this.options.CopyChunkParallelLimit),this.options.CopyChunkSize=Math.max(1048576,this.options.CopyChunkSize),this.options.CopySliceSize=Math.max(0,this.options.CopySliceSize),this.options.MaxPartNumber=Math.max(1024,Math.min(1e4,this.options.MaxPartNumber)),this.options.Timeout=Math.max(0,this.options.Timeout),this.options.AppId,this.options.SecretId&&this.options.SecretId.indexOf(" "),this.options.SecretKey&&this.options.SecretKey.indexOf(" "),r.isNode(),o.init(this),i.init(this)};a.init(l,i),s.init(l,i),l.util={md5:r.md5,xml2json:r.xml2json,json2xml:r.json2xml,encodeBase64:r.encodeBase64},l.getAuthorization=r.getAuth,l.version=c.version,e.exports=l},function(module,exports,__webpack_require__){(function(process,global,module){var __WEBPACK_AMD_DEFINE_RESULT__,_typeof=__webpack_require__(0);(function(){"use strict";var ERROR="input is invalid type",WINDOW="object"===("undefined"==typeof window?"undefined":_typeof(window)),root=WINDOW?window:{};root.JS_MD5_NO_WINDOW&&(WINDOW=!1);var WEB_WORKER=!WINDOW&&"object"===("undefined"==typeof self?"undefined":_typeof(self)),NODE_JS=!root.JS_MD5_NO_NODE_JS&&"object"===(void 0===process?"undefined":_typeof(process))&&process.versions&&process.versions.node;NODE_JS?root=global:WEB_WORKER&&(root=self);var COMMON_JS=!root.JS_MD5_NO_COMMON_JS&&"object"===_typeof(module)&&module.exports,AMD=__webpack_require__(14),ARRAY_BUFFER=!root.JS_MD5_NO_ARRAY_BUFFER&&"undefined"!=typeof ArrayBuffer,HEX_CHARS="0123456789abcdef".split(""),EXTRA=[128,32768,8388608,-2147483648],SHIFT=[0,8,16,24],OUTPUT_TYPES=["hex","array","digest","buffer","arrayBuffer","base64"],BASE64_ENCODE_CHAR="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""),blocks=[],buffer8;if(ARRAY_BUFFER){var buffer=new ArrayBuffer(68);buffer8=new Uint8Array(buffer),blocks=new Uint32Array(buffer)}!root.JS_MD5_NO_NODE_JS&&Array.isArray||(Array.isArray=function(e){return"[object Array]"===Object.prototype.toString.call(e)}),!ARRAY_BUFFER||!root.JS_MD5_NO_ARRAY_BUFFER_IS_VIEW&&ArrayBuffer.isView||(ArrayBuffer.isView=function(e){return"object"===_typeof(e)&&e.buffer&&e.buffer.constructor===ArrayBuffer});var createOutputMethod=function(e){return function(t,n){return new Md5(!0).update(t,n)[e]()}},createMethod=function(){var e=createOutputMethod("hex");NODE_JS&&(e=nodeWrap(e)),e.getCtx=e.create=function(){return new Md5},e.update=function(t){return e.create().update(t)};for(var t=0;t>6,s[r++]=128|63&n):n<55296||n>=57344?(s[r++]=224|n>>12,s[r++]=128|n>>6&63,s[r++]=128|63&n):(n=65536+((1023&n)<<10|1023&e.charCodeAt(++o)),s[r++]=240|n>>18,s[r++]=128|n>>12&63,s[r++]=128|n>>6&63,s[r++]=128|63&n);else for(r=this.start;o>2]|=n<>2]|=(192|n>>6)<>2]|=(128|63&n)<=57344?(a[r>>2]|=(224|n>>12)<>2]|=(128|n>>6&63)<>2]|=(128|63&n)<>2]|=(240|n>>18)<>2]|=(128|n>>12&63)<>2]|=(128|n>>6&63)<>2]|=(128|63&n)<=64?(this.start=r-64,this.hash(),this.hashed=!0):this.start=r}return this.bytes>4294967295&&(this.hBytes+=this.bytes/4294967296<<0,this.bytes=this.bytes%4294967296),this}},Md5.prototype.finalize=function(){if(!this.finalized){this.finalized=!0;var e=this.blocks,t=this.lastByteIndex;e[t>>2]|=EXTRA[3&t],t>=56&&(this.hashed||this.hash(),e[0]=e[16],e[16]=e[1]=e[2]=e[3]=e[4]=e[5]=e[6]=e[7]=e[8]=e[9]=e[10]=e[11]=e[12]=e[13]=e[14]=e[15]=0),e[14]=this.bytes<<3,e[15]=this.hBytes<<3|this.bytes>>>29,this.hash()}},Md5.prototype.hash=function(){var e,t,n,r,o,i,a=this.blocks;this.first?t=((t=((e=((e=a[0]-680876937)<<7|e>>>25)-271733879<<0)^(n=((n=(-271733879^(r=((r=(-1732584194^2004318071&e)+a[1]-117830708)<<12|r>>>20)+e<<0)&(-271733879^e))+a[2]-1126478375)<<17|n>>>15)+r<<0)&(r^e))+a[3]-1316259209)<<22|t>>>10)+n<<0:(e=this.h0,t=this.h1,n=this.h2,t=((t+=((e=((e+=((r=this.h3)^t&(n^r))+a[0]-680876936)<<7|e>>>25)+t<<0)^(n=((n+=(t^(r=((r+=(n^e&(t^n))+a[1]-389564586)<<12|r>>>20)+e<<0)&(e^t))+a[2]+606105819)<<17|n>>>15)+r<<0)&(r^e))+a[3]-1044525330)<<22|t>>>10)+n<<0),t=((t+=((e=((e+=(r^t&(n^r))+a[4]-176418897)<<7|e>>>25)+t<<0)^(n=((n+=(t^(r=((r+=(n^e&(t^n))+a[5]+1200080426)<<12|r>>>20)+e<<0)&(e^t))+a[6]-1473231341)<<17|n>>>15)+r<<0)&(r^e))+a[7]-45705983)<<22|t>>>10)+n<<0,t=((t+=((e=((e+=(r^t&(n^r))+a[8]+1770035416)<<7|e>>>25)+t<<0)^(n=((n+=(t^(r=((r+=(n^e&(t^n))+a[9]-1958414417)<<12|r>>>20)+e<<0)&(e^t))+a[10]-42063)<<17|n>>>15)+r<<0)&(r^e))+a[11]-1990404162)<<22|t>>>10)+n<<0,t=((t+=((e=((e+=(r^t&(n^r))+a[12]+1804603682)<<7|e>>>25)+t<<0)^(n=((n+=(t^(r=((r+=(n^e&(t^n))+a[13]-40341101)<<12|r>>>20)+e<<0)&(e^t))+a[14]-1502002290)<<17|n>>>15)+r<<0)&(r^e))+a[15]+1236535329)<<22|t>>>10)+n<<0,t=((t+=((r=((r+=(t^n&((e=((e+=(n^r&(t^n))+a[1]-165796510)<<5|e>>>27)+t<<0)^t))+a[6]-1069501632)<<9|r>>>23)+e<<0)^e&((n=((n+=(e^t&(r^e))+a[11]+643717713)<<14|n>>>18)+r<<0)^r))+a[0]-373897302)<<20|t>>>12)+n<<0,t=((t+=((r=((r+=(t^n&((e=((e+=(n^r&(t^n))+a[5]-701558691)<<5|e>>>27)+t<<0)^t))+a[10]+38016083)<<9|r>>>23)+e<<0)^e&((n=((n+=(e^t&(r^e))+a[15]-660478335)<<14|n>>>18)+r<<0)^r))+a[4]-405537848)<<20|t>>>12)+n<<0,t=((t+=((r=((r+=(t^n&((e=((e+=(n^r&(t^n))+a[9]+568446438)<<5|e>>>27)+t<<0)^t))+a[14]-1019803690)<<9|r>>>23)+e<<0)^e&((n=((n+=(e^t&(r^e))+a[3]-187363961)<<14|n>>>18)+r<<0)^r))+a[8]+1163531501)<<20|t>>>12)+n<<0,t=((t+=((r=((r+=(t^n&((e=((e+=(n^r&(t^n))+a[13]-1444681467)<<5|e>>>27)+t<<0)^t))+a[2]-51403784)<<9|r>>>23)+e<<0)^e&((n=((n+=(e^t&(r^e))+a[7]+1735328473)<<14|n>>>18)+r<<0)^r))+a[12]-1926607734)<<20|t>>>12)+n<<0,t=((t+=((i=(r=((r+=((o=t^n)^(e=((e+=(o^r)+a[5]-378558)<<4|e>>>28)+t<<0))+a[8]-2022574463)<<11|r>>>21)+e<<0)^e)^(n=((n+=(i^t)+a[11]+1839030562)<<16|n>>>16)+r<<0))+a[14]-35309556)<<23|t>>>9)+n<<0,t=((t+=((i=(r=((r+=((o=t^n)^(e=((e+=(o^r)+a[1]-1530992060)<<4|e>>>28)+t<<0))+a[4]+1272893353)<<11|r>>>21)+e<<0)^e)^(n=((n+=(i^t)+a[7]-155497632)<<16|n>>>16)+r<<0))+a[10]-1094730640)<<23|t>>>9)+n<<0,t=((t+=((i=(r=((r+=((o=t^n)^(e=((e+=(o^r)+a[13]+681279174)<<4|e>>>28)+t<<0))+a[0]-358537222)<<11|r>>>21)+e<<0)^e)^(n=((n+=(i^t)+a[3]-722521979)<<16|n>>>16)+r<<0))+a[6]+76029189)<<23|t>>>9)+n<<0,t=((t+=((i=(r=((r+=((o=t^n)^(e=((e+=(o^r)+a[9]-640364487)<<4|e>>>28)+t<<0))+a[12]-421815835)<<11|r>>>21)+e<<0)^e)^(n=((n+=(i^t)+a[15]+530742520)<<16|n>>>16)+r<<0))+a[2]-995338651)<<23|t>>>9)+n<<0,t=((t+=((r=((r+=(t^((e=((e+=(n^(t|~r))+a[0]-198630844)<<6|e>>>26)+t<<0)|~n))+a[7]+1126891415)<<10|r>>>22)+e<<0)^((n=((n+=(e^(r|~t))+a[14]-1416354905)<<15|n>>>17)+r<<0)|~e))+a[5]-57434055)<<21|t>>>11)+n<<0,t=((t+=((r=((r+=(t^((e=((e+=(n^(t|~r))+a[12]+1700485571)<<6|e>>>26)+t<<0)|~n))+a[3]-1894986606)<<10|r>>>22)+e<<0)^((n=((n+=(e^(r|~t))+a[10]-1051523)<<15|n>>>17)+r<<0)|~e))+a[1]-2054922799)<<21|t>>>11)+n<<0,t=((t+=((r=((r+=(t^((e=((e+=(n^(t|~r))+a[8]+1873313359)<<6|e>>>26)+t<<0)|~n))+a[15]-30611744)<<10|r>>>22)+e<<0)^((n=((n+=(e^(r|~t))+a[6]-1560198380)<<15|n>>>17)+r<<0)|~e))+a[13]+1309151649)<<21|t>>>11)+n<<0,t=((t+=((r=((r+=(t^((e=((e+=(n^(t|~r))+a[4]-145523070)<<6|e>>>26)+t<<0)|~n))+a[11]-1120210379)<<10|r>>>22)+e<<0)^((n=((n+=(e^(r|~t))+a[2]+718787259)<<15|n>>>17)+r<<0)|~e))+a[9]-343485551)<<21|t>>>11)+n<<0,this.first?(this.h0=e+1732584193<<0,this.h1=t-271733879<<0,this.h2=n-1732584194<<0,this.h3=r+271733878<<0,this.first=!1):(this.h0=this.h0+e<<0,this.h1=this.h1+t<<0,this.h2=this.h2+n<<0,this.h3=this.h3+r<<0)},Md5.prototype.hex=function(){this.finalize();var e=this.h0,t=this.h1,n=this.h2,r=this.h3;return HEX_CHARS[e>>4&15]+HEX_CHARS[15&e]+HEX_CHARS[e>>12&15]+HEX_CHARS[e>>8&15]+HEX_CHARS[e>>20&15]+HEX_CHARS[e>>16&15]+HEX_CHARS[e>>28&15]+HEX_CHARS[e>>24&15]+HEX_CHARS[t>>4&15]+HEX_CHARS[15&t]+HEX_CHARS[t>>12&15]+HEX_CHARS[t>>8&15]+HEX_CHARS[t>>20&15]+HEX_CHARS[t>>16&15]+HEX_CHARS[t>>28&15]+HEX_CHARS[t>>24&15]+HEX_CHARS[n>>4&15]+HEX_CHARS[15&n]+HEX_CHARS[n>>12&15]+HEX_CHARS[n>>8&15]+HEX_CHARS[n>>20&15]+HEX_CHARS[n>>16&15]+HEX_CHARS[n>>28&15]+HEX_CHARS[n>>24&15]+HEX_CHARS[r>>4&15]+HEX_CHARS[15&r]+HEX_CHARS[r>>12&15]+HEX_CHARS[r>>8&15]+HEX_CHARS[r>>20&15]+HEX_CHARS[r>>16&15]+HEX_CHARS[r>>28&15]+HEX_CHARS[r>>24&15]},Md5.prototype.toString=Md5.prototype.hex,Md5.prototype.digest=function(e){if("hex"===e)return this.hex();this.finalize();var t=this.h0,n=this.h1,r=this.h2,o=this.h3;return[255&t,t>>8&255,t>>16&255,t>>24&255,255&n,n>>8&255,n>>16&255,n>>24&255,255&r,r>>8&255,r>>16&255,r>>24&255,255&o,o>>8&255,o>>16&255,o>>24&255]},Md5.prototype.array=Md5.prototype.digest,Md5.prototype.arrayBuffer=function(){this.finalize();var e=new ArrayBuffer(16),t=new Uint32Array(e);return t[0]=this.h0,t[1]=this.h1,t[2]=this.h2,t[3]=this.h3,e},Md5.prototype.buffer=Md5.prototype.arrayBuffer,Md5.prototype.base64=function(){for(var e,t,n,r="",o=this.array(),i=0;i<15;)e=o[i++],t=o[i++],n=o[i++],r+=BASE64_ENCODE_CHAR[e>>>2]+BASE64_ENCODE_CHAR[63&(e<<4|t>>>4)]+BASE64_ENCODE_CHAR[63&(t<<2|n>>>6)]+BASE64_ENCODE_CHAR[63&n];return e=o[i],r+=BASE64_ENCODE_CHAR[e>>>2]+BASE64_ENCODE_CHAR[e<<4&63]+"=="};var exports=createMethod();COMMON_JS?module.exports=exports:(root.md5=exports,AMD&&(__WEBPACK_AMD_DEFINE_RESULT__=function(){return exports}.call(exports,__webpack_require__,exports,module),void 0===__WEBPACK_AMD_DEFINE_RESULT__||(module.exports=__WEBPACK_AMD_DEFINE_RESULT__)))})()}).call(this,__webpack_require__(3),__webpack_require__(13),__webpack_require__(4)(module))},function(e,t){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(e){"object"==typeof window&&(n=window)}e.exports=n},function(e,t){(function(t){e.exports=t}).call(this,{})},function(e,t,n){(function(e){var t,r,o,i,a,s,c,u=n(0),l=l||function(e,t){var n={},r=n.lib={},o=function(){},i=r.Base={extend:function(e){o.prototype=this;var t=new o;return e&&t.mixIn(e),t.hasOwnProperty("init")||(t.init=function(){t.$super.init.apply(this,arguments)}),t.init.prototype=t,t.$super=this,t},create:function(){var e=this.extend();return e.init.apply(e,arguments),e},init:function(){},mixIn:function(e){for(var t in e)e.hasOwnProperty(t)&&(this[t]=e[t]);e.hasOwnProperty("toString")&&(this.toString=e.toString)},clone:function(){return this.init.prototype.extend(this)}},a=r.WordArray=i.extend({init:function(e,t){e=this.words=e||[],this.sigBytes=null!=t?t:4*e.length},toString:function(e){return(e||c).stringify(this)},concat:function(e){var t=this.words,n=e.words,r=this.sigBytes;if(e=e.sigBytes,this.clamp(),r%4)for(var o=0;o>>2]|=(n[o>>>2]>>>24-o%4*8&255)<<24-(r+o)%4*8;else if(65535>>2]=n[o>>>2];else t.push.apply(t,n);return this.sigBytes+=e,this},clamp:function(){var t=this.words,n=this.sigBytes;t[n>>>2]&=4294967295<<32-n%4*8,t.length=e.ceil(n/4)},clone:function(){var e=i.clone.call(this);return e.words=this.words.slice(0),e},random:function(t){for(var n=[],r=0;r>>2]>>>24-r%4*8&255;n.push((o>>>4).toString(16)),n.push((15&o).toString(16))}return n.join("")},parse:function(e){for(var t=e.length,n=[],r=0;r>>3]|=parseInt(e.substr(r,2),16)<<24-r%8*4;return new a.init(n,t/2)}},u=s.Latin1={stringify:function(e){var t=e.words;e=e.sigBytes;for(var n=[],r=0;r>>2]>>>24-r%4*8&255));return n.join("")},parse:function(e){for(var t=e.length,n=[],r=0;r>>2]|=(255&e.charCodeAt(r))<<24-r%4*8;return new a.init(n,t)}},l=s.Utf8={stringify:function(e){try{return decodeURIComponent(escape(u.stringify(e)))}catch(e){throw Error("Malformed UTF-8 data")}},parse:function(e){return u.parse(unescape(encodeURIComponent(e)))}},d=r.BufferedBlockAlgorithm=i.extend({reset:function(){this._data=new a.init,this._nDataBytes=0},_append:function(e){"string"==typeof e&&(e=l.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(t){var n=this._data,r=n.words,o=n.sigBytes,i=this.blockSize,s=o/(4*i);if(t=(s=t?e.ceil(s):e.max((0|s)-this._minBufferSize,0))*i,o=e.min(4*t,o),t){for(var c=0;cu;u++){if(16>u)i[u]=0|e[t+u];else{var l=i[u-3]^i[u-8]^i[u-14]^i[u-16];i[u]=l<<1|l>>>31}l=(r<<5|r>>>27)+c+i[u],l=20>u?l+(1518500249+(o&a|~o&s)):40>u?l+(1859775393+(o^a^s)):60>u?l+((o&a|o&s|a&s)-1894007588):l+((o^a^s)-899497514),c=s,s=a,a=o<<30|o>>>2,o=r,r=l}n[0]=n[0]+r|0,n[1]=n[1]+o|0,n[2]=n[2]+a|0,n[3]=n[3]+s|0,n[4]=n[4]+c|0},_doFinalize:function(){var e=this._data,t=e.words,n=8*this._nDataBytes,r=8*e.sigBytes;return t[r>>>5]|=128<<24-r%32,t[14+(r+64>>>9<<4)]=Math.floor(n/4294967296),t[15+(r+64>>>9<<4)]=n,e.sigBytes=4*t.length,this._process(),this._hash},clone:function(){var e=o.clone.call(this);return e._hash=this._hash.clone(),e}}),t.SHA1=o._createHelper(a),t.HmacSHA1=o._createHmacHelper(a),function(){var e=l,t=e.enc.Utf8;e.algo.HMAC=e.lib.Base.extend({init:function(e,n){e=this._hasher=new e.init,"string"==typeof n&&(n=t.parse(n));var r=e.blockSize,o=4*r;n.sigBytes>o&&(n=e.finalize(n)),n.clamp();for(var i=this._oKey=n.clone(),a=this._iKey=n.clone(),s=i.words,c=a.words,u=0;u>>2]>>>24-i%4*8&255)<<16|(t[i+1>>>2]>>>24-(i+1)%4*8&255)<<8|t[i+2>>>2]>>>24-(i+2)%4*8&255,s=0;s<4&&i+.75*s>>6*(3-s)&63));var c=r.charAt(64);if(c)for(;o.length%4;)o.push(c);return o.join("")},parse:function(e){var t=e.length,n=this._map,r=n.charAt(64);if(r){var o=e.indexOf(r);-1!=o&&(t=o)}for(var i=[],a=0,s=0;s>>6-s%4*2;i[a>>>2]|=(u|l)<<24-a%4*8,a++}return c.create(i,a)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="},"object"===u(e)?e.exports=l:window.CryptoJS=l}).call(this,n(4)(e))},function(e,t,n){var r=n(17).DOMParser,o=function(){this.version="1.3.5";var e={mergeCDATA:!0,normalize:!0,stripElemPrefix:!0},t=new RegExp(/(?!xmlns)^.*:/);new RegExp(/^\s+|\s+$/g);return this.grokType=function(e){return/^\s*$/.test(e)?null:/^(?:true|false)$/i.test(e)?"true"===e.toLowerCase():isFinite(e)?parseFloat(e):e},this.parseString=function(e,t){if(e){var n=this.stringToXML(e);return n.getElementsByTagName("parsererror").length?null:this.parseXML(n,t)}return null},this.parseXML=function(n,r){for(var i in r)e[i]=r[i];var a={},s=0,c="";if(n.childNodes.length)for(var u,l,d,p=0;p=t+n||t?new java.lang.String(e,t,n)+"":e}function g(e,t){e.currentElement?e.currentElement.appendChild(t):e.doc.appendChild(t)}p.prototype.parseFromString=function(e,t){var n=this.options,r=new l,o=n.domBuilder||new f,a=n.errorHandler,s=n.locator,u=n.xmlns||{},p=/\/x?html?$/.test(t),h=p?i.HTML_ENTITIES:i.XML_ENTITIES;s&&o.setDocumentLocator(s),r.errorHandler=function(e,t,n){if(!e){if(t instanceof f)return t;e=t}var r={},o=e instanceof Function;function i(t){var i=e[t];!i&&o&&(i=2==e.length?function(n){e(t,n)}:e),r[t]=i&&function(e){i("[xmldom "+t+"]\t"+e+function(e){if(e)return"\n@"+(e.systemId||"")+"#[line:"+e.lineNumber+",col:"+e.columnNumber+"]"}(n))}||function(){}}return n=n||{},i("warning"),i("error"),i("fatalError"),r}(a,o,s),r.domBuilder=n.domBuilder||o,p&&(u[""]=c.HTML),u.xml=u.xml||c.XML;var m=n.normalizeLineEndings||d;return e&&"string"==typeof e?r.parse(m(e),u,h):r.errorHandler.error("invalid doc source"),o.doc},f.prototype={startDocument:function(){this.doc=(new s).createDocument(null,null,null),this.locator&&(this.doc.documentURI=this.locator.systemId)},startElement:function(e,t,n,r){var o=this.doc,i=o.createElementNS(e,n||t),a=r.length;g(this,i),this.currentElement=i,this.locator&&h(this.locator,i);for(var s=0;s",lt:"<",quot:'"'}),t.HTML_ENTITIES=r({lt:"<",gt:">",amp:"&",quot:'"',apos:"'",Agrave:"À",Aacute:"Á",Acirc:"Â",Atilde:"Ã",Auml:"Ä",Aring:"Å",AElig:"Æ",Ccedil:"Ç",Egrave:"È",Eacute:"É",Ecirc:"Ê",Euml:"Ë",Igrave:"Ì",Iacute:"Í",Icirc:"Î",Iuml:"Ï",ETH:"Ð",Ntilde:"Ñ",Ograve:"Ò",Oacute:"Ó",Ocirc:"Ô",Otilde:"Õ",Ouml:"Ö",Oslash:"Ø",Ugrave:"Ù",Uacute:"Ú",Ucirc:"Û",Uuml:"Ü",Yacute:"Ý",THORN:"Þ",szlig:"ß",agrave:"à",aacute:"á",acirc:"â",atilde:"ã",auml:"ä",aring:"å",aelig:"æ",ccedil:"ç",egrave:"è",eacute:"é",ecirc:"ê",euml:"ë",igrave:"ì",iacute:"í",icirc:"î",iuml:"ï",eth:"ð",ntilde:"ñ",ograve:"ò",oacute:"ó",ocirc:"ô",otilde:"õ",ouml:"ö",oslash:"ø",ugrave:"ù",uacute:"ú",ucirc:"û",uuml:"ü",yacute:"ý",thorn:"þ",yuml:"ÿ",nbsp:" ",iexcl:"¡",cent:"¢",pound:"£",curren:"¤",yen:"¥",brvbar:"¦",sect:"§",uml:"¨",copy:"©",ordf:"ª",laquo:"«",not:"¬",shy:"­­",reg:"®",macr:"¯",deg:"°",plusmn:"±",sup2:"²",sup3:"³",acute:"´",micro:"µ",para:"¶",middot:"·",cedil:"¸",sup1:"¹",ordm:"º",raquo:"»",frac14:"¼",frac12:"½",frac34:"¾",iquest:"¿",times:"×",divide:"÷",forall:"∀",part:"∂",exist:"∃",empty:"∅",nabla:"∇",isin:"∈",notin:"∉",ni:"∋",prod:"∏",sum:"∑",minus:"−",lowast:"∗",radic:"√",prop:"∝",infin:"∞",ang:"∠",and:"∧",or:"∨",cap:"∩",cup:"∪",int:"∫",there4:"∴",sim:"∼",cong:"≅",asymp:"≈",ne:"≠",equiv:"≡",le:"≤",ge:"≥",sub:"⊂",sup:"⊃",nsub:"⊄",sube:"⊆",supe:"⊇",oplus:"⊕",otimes:"⊗",perp:"⊥",sdot:"⋅",Alpha:"Α",Beta:"Β",Gamma:"Γ",Delta:"Δ",Epsilon:"Ε",Zeta:"Ζ",Eta:"Η",Theta:"Θ",Iota:"Ι",Kappa:"Κ",Lambda:"Λ",Mu:"Μ",Nu:"Ν",Xi:"Ξ",Omicron:"Ο",Pi:"Π",Rho:"Ρ",Sigma:"Σ",Tau:"Τ",Upsilon:"Υ",Phi:"Φ",Chi:"Χ",Psi:"Ψ",Omega:"Ω",alpha:"α",beta:"β",gamma:"γ",delta:"δ",epsilon:"ε",zeta:"ζ",eta:"η",theta:"θ",iota:"ι",kappa:"κ",lambda:"λ",mu:"μ",nu:"ν",xi:"ξ",omicron:"ο",pi:"π",rho:"ρ",sigmaf:"ς",sigma:"σ",tau:"τ",upsilon:"υ",phi:"φ",chi:"χ",psi:"ψ",omega:"ω",thetasym:"ϑ",upsih:"ϒ",piv:"ϖ",OElig:"Œ",oelig:"œ",Scaron:"Š",scaron:"š",Yuml:"Ÿ",fnof:"ƒ",circ:"ˆ",tilde:"˜",ensp:" ",emsp:" ",thinsp:" ",zwnj:"‌",zwj:"‍",lrm:"‎",rlm:"‏",ndash:"–",mdash:"—",lsquo:"‘",rsquo:"’",sbquo:"‚",ldquo:"“",rdquo:"”",bdquo:"„",dagger:"†",Dagger:"‡",bull:"•",hellip:"…",permil:"‰",prime:"′",Prime:"″",lsaquo:"‹",rsaquo:"›",oline:"‾",euro:"€",trade:"™",larr:"←",uarr:"↑",rarr:"→",darr:"↓",harr:"↔",crarr:"↵",lceil:"⌈",rceil:"⌉",lfloor:"⌊",rfloor:"⌋",loz:"◊",spades:"♠",clubs:"♣",hearts:"♥",diams:"♦"}),t.entityMap=t.HTML_ENTITIES},function(e,t,n){var r=n(2).NAMESPACE,o=/[A-Z_a-z\xC0-\xD6\xD8-\xF6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/,i=new RegExp("[\\-\\.0-9"+o.source.slice(1,-1)+"\\u00B7\\u0300-\\u036F\\u203F-\\u2040]"),a=new RegExp("^"+o.source+i.source+"*(?::"+o.source+i.source+"*)?$"),s=0,c=1,u=2,l=3,d=4,p=5,f=6,h=7;function m(e,t){this.message=e,this.locator=t,Error.captureStackTrace&&Error.captureStackTrace(this,m)}function g(){}function y(e,t){return t.lineNumber=e.lineNumber,t.columnNumber=e.columnNumber,t}function v(e,t,n,o,i,a){function m(e,t,r){n.attributeNames.hasOwnProperty(e)&&a.fatalError("Attribute "+e+" redefined"),n.addValue(e,t.replace(/[\t\n\r]/g," ").replace(/&#?\w+;/g,i),r)}for(var g,y=++t,v=s;;){var C=e.charAt(y);switch(C){case"=":if(v===c)g=e.slice(t,y),v=l;else{if(v!==u)throw new Error("attribute equal must after attrName");v=l}break;case"'":case'"':if(v===l||v===c){if(v===c&&(a.warning('attribute value must after "="'),g=e.slice(t,y)),t=y+1,!((y=e.indexOf(C,t))>0))throw new Error("attribute value no end '"+C+"' match");m(g,k=e.slice(t,y),t-1),v=p}else{if(v!=d)throw new Error('attribute value must after "="');m(g,k=e.slice(t,y),t),a.warning('attribute "'+g+'" missed start quot('+C+")!!"),t=y+1,v=p}break;case"/":switch(v){case s:n.setTagName(e.slice(t,y));case p:case f:case h:v=h,n.closed=!0;case d:case c:case u:break;default:throw new Error("attribute invalid close char('/')")}break;case"":return a.error("unexpected end of input"),v==s&&n.setTagName(e.slice(t,y)),y;case">":switch(v){case s:n.setTagName(e.slice(t,y));case p:case f:case h:break;case d:case c:"/"===(k=e.slice(t,y)).slice(-1)&&(n.closed=!0,k=k.slice(0,-1));case u:v===u&&(k=g),v==d?(a.warning('attribute "'+k+'" missed quot(")!'),m(g,k,t)):(r.isHTML(o[""])&&k.match(/^(?:disabled|checked|selected)$/i)||a.warning('attribute "'+k+'" missed value!! "'+k+'" instead!!'),m(k,k,t));break;case l:throw new Error("attribute value missed!!")}return y;case"€":C=" ";default:if(C<=" ")switch(v){case s:n.setTagName(e.slice(t,y)),v=f;break;case c:g=e.slice(t,y),v=u;break;case d:var k=e.slice(t,y);a.warning('attribute "'+k+'" missed quot(")!!'),m(g,k,t);case p:v=f}else switch(v){case u:n.tagName;r.isHTML(o[""])&&g.match(/^(?:disabled|checked|selected)$/i)||a.warning('attribute "'+g+'" missed value!! "'+g+'" instead2!!'),m(g,g,t),t=y,v=c;break;case p:a.warning('attribute space is required"'+g+'"!!');case f:v=c,t=y;break;case l:v=d,t=y;break;case h:throw new Error("elements closed character '/' and '>' must be connected to")}}y++}}function C(e,t,n){for(var o=e.tagName,i=null,a=e.length;a--;){var s=e[a],c=s.qName,u=s.value;if((f=c.indexOf(":"))>0)var l=s.prefix=c.slice(0,f),d=c.slice(f+1),p="xmlns"===l&&d;else d=c,l=null,p="xmlns"===c&&"";s.localName=d,!1!==p&&(null==i&&(i={},b(n,n={})),n[p]=i[p]=u,s.uri=r.XMLNS,t.startPrefixMapping(p,u))}for(a=e.length;a--;){(l=(s=e[a]).prefix)&&("xml"===l&&(s.uri=r.XML),"xmlns"!==l&&(s.uri=n[l||""]))}var f;(f=o.indexOf(":"))>0?(l=e.prefix=o.slice(0,f),d=e.localName=o.slice(f+1)):(l=null,d=e.localName=o);var h=e.uri=n[l||""];if(t.startElement(h,d,o,e),!e.closed)return e.currentNSMap=n,e.localNSMap=i,!0;if(t.endElement(h,d,o),i)for(l in i)Object.prototype.hasOwnProperty.call(i,l)&&t.endPrefixMapping(l)}function k(e,t,n,r,o){if(/^(?:script|textarea)$/i.test(n)){var i=e.indexOf("",t),a=e.substring(t+1,i);if(/[&<]/.test(a))return/^script$/i.test(n)?(o.characters(a,0,a.length),i):(a=a.replace(/&#?\w+;/g,r),o.characters(a,0,a.length),i)}return t+1}function S(e,t,n,r){var o=r[n];return null==o&&((o=e.lastIndexOf(""))t?(n.comment(e,t+4,o-t-4),o+3):(r.error("Unclosed comment"),-1):-1;if("CDATA["==e.substr(t+3,6)){var o=e.indexOf("]]>",t+9);return n.startCDATA(),n.characters(e,t+9,o-t-9),n.endCDATA(),o+3}var i=function(e,t){var n,r=[],o=/'[^']+'|"[^"]+"|[^\s<>\/=]+=?|(\/?\s*>|<)/g;o.lastIndex=t,o.exec(e);for(;n=o.exec(e);)if(r.push(n),n[1])return r}(e,t),a=i.length;if(a>1&&/!doctype/i.test(i[0][0])){var s=i[1][0],c=!1,u=!1;a>3&&(/^public$/i.test(i[2][0])?(c=i[3][0],u=a>4&&i[4][0]):/^system$/i.test(i[2][0])&&(u=i[3][0]));var l=i[a-1];return n.startDTD(s,c,u),n.endDTD(),l.index+l[0].length}return-1}function R(e,t,n){var r=e.indexOf("?>",t);if(r){var o=e.substring(t,r).match(/^<\?(\S*)\s*([\s\S]*?)\s*$/);if(o){o[0].length;return n.processingInstruction(o[1],o[2]),r+2}return-1}return-1}function E(){this.attributeNames={}}m.prototype=new Error,m.prototype.name=m.name,g.prototype={parse:function(e,t,n){var o=this.domBuilder;o.startDocument(),b(t,t={}),function(e,t,n,o,i){function a(e){if(e>65535){var t=55296+((e-=65536)>>10),n=56320+(1023&e);return String.fromCharCode(t,n)}return String.fromCharCode(e)}function s(e){var t=e.slice(1,-1);return Object.hasOwnProperty.call(n,t)?n[t]:"#"===t.charAt(0)?a(parseInt(t.substr(1).replace("x","0x"))):(i.error("entity not found:"+e),e)}function c(t){if(t>b){var n=e.substring(b,t).replace(/&#?\w+;/g,s);f&&u(b),o.characters(n,0,t-b),b=t}}function u(t,n){for(;t>=d&&(n=p.exec(e));)l=n.index,d=l+n[0].length,f.lineNumber++;f.columnNumber=t-l+1}var l=0,d=0,p=/.*(?:\r\n?|\n)|.*$/g,f=o.locator,h=[{currentNSMap:t}],g={},b=0;for(;;){try{var w=e.indexOf("<",b);if(w<0){if(!e.substr(b).match(/^\s*$/)){var A=o.doc,x=A.createTextNode(e.substr(b));A.appendChild(x),o.currentElement=x}return}switch(w>b&&c(w),e.charAt(w+1)){case"/":var I=e.indexOf(">",w+3),O=e.substring(w+2,I).replace(/[ \t\n\r]+$/g,""),B=h.pop();I<0?(O=e.substring(w+2).replace(/[\s<].*/,""),i.error("end tag name: "+O+" is not complete:"+B.tagName),I=w+1+O.length):O.match(/\sb?b=I:c(Math.max(w,b)+1)}}(e,t,n,o,this.errorHandler),o.endDocument()}},E.prototype={setTagName:function(e){if(!a.test(e))throw new Error("invalid tagName:"+e);this.tagName=e},addValue:function(e,t,n){if(!a.test(e))throw new Error("invalid attribute:"+e);this.attributeNames[e]=this.length,this[this.length++]={qName:e,value:t,offset:n}},length:0,getLocalName:function(e){return this[e].localName},getLocator:function(e){return this[e].locator},getQName:function(e){return this[e].qName},getURI:function(e){return this[e].uri},getValue:function(e){return this[e].value}},t.XMLReader=g,t.ParseError=m},function(e,t,n){var r=n(0),o="a-zA-Z_À-ÖØ-öø-ÿͰ-ͽͿ-῿‌-‍⁰-↏Ⰰ-⿿、-퟿豈-﷏ﷰ-�",i=new RegExp("^([^"+o+"])|^((x|X)(m|M)(l|L))|([^"+o+"-.0-9·̀-ͯ‿⁀])","g"),a=/[^\x09\x0A\x0D\x20-\xFF\x85\xA0-\uD7FF\uE000-\uFDCF\uFDE0-\uFFFD]/gm,s=function(e){var t=[];if(e instanceof Object)for(var n in e)e.hasOwnProperty(n)&&t.push(n);return t},c=function(e,t){var n=function(e,n,r,o,a){var s=void 0!==t.indent?t.indent:"\t",c=t.prettyPrint?"\n"+new Array(o).join(s):"";t.removeIllegalNameCharacters&&(e=e.replace(i,"_"));var u=[c,"<",e,r||""];return n&&n.length>0?(u.push(">"),u.push(n),a&&u.push(c),u.push("")):u.push("/>"),u.join("")};return function e(o,i,c){var u=r(o);switch((Array.isArray?Array.isArray(o):o instanceof Array)?u="array":o instanceof Date&&(u="date"),u){case"array":var l=[];return o.map((function(t){l.push(e(t,1,c+1))})),t.prettyPrint&&l.push("\n"),l.join("");case"date":return o.toJSON?o.toJSON():o+"";case"object":var d=[];for(var p in o)if(o.hasOwnProperty(p))if(o[p]instanceof Array)for(var f=0;f0&&d.push("\n"),d.join("");case"function":return o();default:return t.escape?(""+o).replace(/&/g,"&").replace(//g,">").replace(/'/g,"'").replace(/"/g,""").replace(a,""):""+o}}(e,0,0)},u=function(e){var t=['"),t.join("")};e.exports=function(e,t){if(t||(t={xmlHeader:{standalone:!0},prettyPrint:!0,indent:" ",escape:!0}),"string"==typeof e)try{e=JSON.parse(e.toString())}catch(e){return!1}var n="",o="";return t&&("object"==r(t)?(t.xmlHeader&&(n=u(!!t.xmlHeader.standalone)),void 0!==t.docType&&(o="")):n=u()),[n,(t=t||{}).prettyPrint&&o?"\n":"",o,c(e,t)].join("").replace(/\n{2,}/g,"\n").replace(/\s+$/g,"")}},function(e,t){var n=function(e){var t=(e=e||{}).Base64,n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",r=function(e){for(var t={},n=0,r=e.length;n>>6)+o(128|63&t):o(224|t>>>12&15)+o(128|t>>>6&63)+o(128|63&t);var t=65536+1024*(e.charCodeAt(0)-55296)+(e.charCodeAt(1)-56320);return o(240|t>>>18&7)+o(128|t>>>12&63)+o(128|t>>>6&63)+o(128|63&t)},a=/[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g,s=function(e){return e.replace(a,i)},c=function(e){var t=[0,2,1][e.length%3],r=e.charCodeAt(0)<<16|(e.length>1?e.charCodeAt(1):0)<<8|(e.length>2?e.charCodeAt(2):0);return[n.charAt(r>>>18),n.charAt(r>>>12&63),t>=2?"=":n.charAt(r>>>6&63),t>=1?"=":n.charAt(63&r)].join("")},u=e.btoa?function(t){return e.btoa(t)}:function(e){return e.replace(/[\s\S]{1,3}/g,c)},l=function(e){return u(s(e))},d=function(e,t){return t?l(String(e)).replace(/[+\/]/g,(function(e){return"+"==e?"-":"_"})).replace(/=/g,""):l(String(e))},p=new RegExp(["[À-ß][€-¿]","[à-ï][€-¿]{2}","[ð-÷][€-¿]{3}"].join("|"),"g"),f=function(e){switch(e.length){case 4:var t=((7&e.charCodeAt(0))<<18|(63&e.charCodeAt(1))<<12|(63&e.charCodeAt(2))<<6|63&e.charCodeAt(3))-65536;return o(55296+(t>>>10))+o(56320+(1023&t));case 3:return o((15&e.charCodeAt(0))<<12|(63&e.charCodeAt(1))<<6|63&e.charCodeAt(2));default:return o((31&e.charCodeAt(0))<<6|63&e.charCodeAt(1))}},h=function(e){return e.replace(p,f)},m=function(e){var t=e.length,n=t%4,i=(t>0?r[e.charAt(0)]<<18:0)|(t>1?r[e.charAt(1)]<<12:0)|(t>2?r[e.charAt(2)]<<6:0)|(t>3?r[e.charAt(3)]:0),a=[o(i>>>16),o(i>>>8&255),o(255&i)];return a.length-=[0,0,2,1][n],a.join("")},g=e.atob?function(t){return e.atob(t)}:function(e){return e.replace(/[\s\S]{1,4}/g,m)},y=function(e){return h(g(e))},v=function(e){return y(String(e).replace(/[-_]/g,(function(e){return"-"==e?"+":"/"})).replace(/[^A-Za-z0-9\+\/]/g,""))};return{VERSION:"2.1.9",atob:g,btoa:u,fromBase64:v,toBase64:d,utob:s,encode:d,encodeURI:function(e){return d(e,!0)},btou:h,decode:v,noConflict:function(){var n=e.Base64;return e.Base64=t,n}}}();e.exports=n},function(e,t){e.exports=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},e.exports.__esModule=!0,e.exports.default=e.exports},function(e,t){function n(e,t){for(var n=0;n0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]60*this.strategy.requestInterval*1e3},e.prototype.getUploadUrl=function(){return this.strategy.httpsUploadUrl+"?appkey="+this.appkey},e.prototype.isBlackEvent=function(e){return-1!=this.strategy.blacklist.indexOf(e)},e.prototype.isEventUpOnOff=function(){return this.strategy.isEventUpOnOff},e.prototype.isSampleEvent=function(e){return!!Object.prototype.hasOwnProperty.call(this.realSample,e)&&this.realSample[e]this.duration)return this.createSession();t=r.sessionId,n=r.sessionStart,this.getSessionStackDepth=0}catch(e){}return{sessionId:t,sessionStart:n}},e.prototype.createSession=function(){var e=Date.now(),t={sessionId:this.appkey+"_"+e.toString(),sessionStart:e};this.storage.setItem(v,JSON.stringify(t)),this.storage.setItem(a,e.toString());var n="is_new_user",r=this.storage.getItem(n);return this.getSessionStackDepth<=1&&this.beacon.onDirectUserAction("rqd_applaunched",{A21:r?"N":"Y"}),this.storage.setItem(n,JSON.stringify(!1)),t},e}();function k(){var e=navigator.userAgent,t=e.indexOf("compatible")>-1&&e.indexOf("MSIE")>-1,n=e.indexOf("Edge")>-1&&!t,r=e.indexOf("Trident")>-1&&e.indexOf("rv:11.0")>-1;if(t){new RegExp("MSIE (\\d+\\.\\d+);").test(e);var o=parseFloat(RegExp.$1);return 7==o?7:8==o?8:9==o?9:10==o?10:6}return n?-2:r?11:-1}var S,b,T=function(){return(T=Object.assign||function(e){for(var t,n=1,r=arguments.length;n0||!window.indexedDB||/X5Lite/.test(navigator.userAgent)?(this.store=new x(t),this.dbEventCount=this.store.getCount()):(this.store=new A(e),this.getCount().then((function(e){n.dbEventCount=e})).catch((function(e){})))}return e.prototype.getCount=function(){return n(this,void 0,void 0,(function(){return r(this,(function(e){switch(e.label){case 0:return e.trys.push([0,2,,3]),[4,this.store.getCount()];case 1:return[2,e.sent()];case 2:return e.sent(),[2,Promise.reject()];case 3:return[2]}}))}))},e.prototype.insertEvent=function(e,t){return n(this,void 0,void 0,(function(){var n,o;return r(this,(function(r){switch(r.label){case 0:if(this.dbEventCount>=1e4)return[2,Promise.reject()];n=f(e.mapValue),r.label=1;case 1:return r.trys.push([1,3,,4]),this.dbEventCount++,[4,this.store.setItem(n,e)];case 2:return[2,r.sent()];case 3:return o=r.sent(),t&&t(o,e),this.dbEventCount--,[2,Promise.reject()];case 4:return[2]}}))}))},e.prototype.getEvents=function(){return n(this,void 0,void 0,(function(){var e;return r(this,(function(t){switch(t.label){case 0:e=[],t.label=1;case 1:return t.trys.push([1,3,,4]),[4,this.store.iterate((function(t){e.push(t)}))];case 2:case 3:return t.sent(),[2,Promise.all(e)];case 4:return[2]}}))}))},e.prototype.removeEvent=function(e){return n(this,void 0,void 0,(function(){var t;return r(this,(function(n){switch(n.label){case 0:t=f(e.mapValue),n.label=1;case 1:return n.trys.push([1,3,,4]),this.dbEventCount--,[4,this.store.removeItem(t)];case 2:return[2,n.sent()];case 3:return n.sent(),this.dbEventCount++,[2,Promise.reject()];case 4:return[2]}}))}))},e}(),O=function(){return(O=Object.assign||function(e){for(var t,n=1,r=arguments.length;n0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&i<8,t.isUnderIE8||(t.isUnderIE=i>0,e.needInitQimei&&function(e,t){var n;(void 0===n&&(n=Date.now()+"-"+Math.random()),new Promise((function(e,t){if(document.getElementById(n))e(void 0);else{var r=document.getElementsByTagName("head")[0],o=document.createElement("script");o.onload=function(){return function(){o.onload=null,e(void 0)}},o.onerror=function(e){o.onerror=null,r.removeChild(o),t(e)},o.src="https://tun-cos-1258344701.file.myqcloud.com/fp.js",o.id=n,r.appendChild(o)}}))).then((function(){(new Fingerprint).getQimei36(e,t)})).catch((function(e){}))}(e.appkey,(function(e){t.qimei36=e.q36})),t.network=new q(e),t.storage=new z(e.appkey),t.initCommonInfo(e),t.store=new I(e.appkey,t.storage),t.errorReport=new g(t.config,t.commonInfo,"web",t.network),t.strategy=new y(null==e.needQueryConfig||e.needQueryConfig,t.config,t.commonInfo,t.storage,t.network),t.logidStartTime=t.storage.getItem(G),t.logidStartTime||(t.logidStartTime=Date.now().toString(),t.storage.setItem(G,t.logidStartTime)),r=t.logidStartTime,o=Date.now()-Number.parseFloat(r),Math.floor(o/864e5)>=365&&t.storage.clear(),t.initSession(e),t.onDirectUserAction("rqd_js_init",{}),setTimeout((function(){return t.lifeCycle.emit("init")}),0),t.initDelayTime=e.delay?e.delay:1e3,t.cycleTask(t.initDelayTime)),t}return function(t,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}(r,n),r.prototype.initSession=function(e){var t=18e5;e.sessionDuration&&e.sessionDuration>3e4&&(t=e.sessionDuration),this.beaconSession=new C(this.storage,t,this)},r.prototype.initCommonInfo=function(e){var t=Number(this.storage.getItem(a));try{var n=JSON.parse(this.storage.getItem(s));(Date.now()-t>3e4||!n)&&this.storage.setItem(s,JSON.stringify([]))}catch(e){}e.uploadUrl&&(this.uploadUrl=e.uploadUrl+"?appkey="+e.appkey);var r=[window.screen.width,window.screen.height];window.devicePixelRatio&&r.push(window.devicePixelRatio),this.commonInfo={deviceId:this.storage.createDeviceId(),language:navigator&&navigator.language||"zh_CN",query:window.location.search,userAgent:navigator.userAgent,pixel:r.join("*"),channelID:e.channelID?String(e.channelID):"",openid:e.openid?String(e.openid):"",unid:e.unionid?String(e.unionid):"",sdkVersion:V},this.config.appVersion=e.versionCode?String(e.versionCode):"",this.config.strictMode=e.strictMode},r.prototype.cycleTask=function(e){var t=this;this.intervalID=window.setInterval((function(){t.pauseSearching||t.store.getEvents().then((function(e){0==e.length&&(t.pauseSearching=!0);var n=[],r=JSON.parse(t.storage.getItem(s));r||(r=[]),e&&e.forEach((function(e){var t=f(e.mapValue);-1==r.indexOf(t)&&(n.push(e),r.push(t))})),0!=n.length&&(t.storage.setItem(s,JSON.stringify(r)),t._normalLogPipeline(t.assembleData(n)))})).catch((function(e){}))}),e)},r.prototype.onReport=function(e,t,n){var r=this;if(this.isUnderIE8)this.errorReport.reportError("601","UnderIE8");else{this.pauseSearching=!1;var o=this.generateData(e,t,n);if(n&&0==this.delayTime&&!this.underWeakNet)this._normalLogPipeline(this.assembleData(o));else{var i=o.shift();i&&this.store.insertEvent(i,(function(e){e&&r.errorReport.reportError("604","insertEvent fail!")})).catch((function(e){r._normalLogPipeline(r.assembleData(o))}))}}},r.prototype.onSendBeacon=function(e,t){if(this.isUnderIE)this.errorReport.reportError("605","UnderIE");else{this.pauseSearching=!1;var n=this.assembleData(this.generateData(e,t,!0));"function"==typeof navigator.sendBeacon&&navigator.sendBeacon(this.uploadUrl||this.strategy.getUploadUrl(),JSON.stringify(n))}},r.prototype.generateData=function(e,n,r){var o=[],i="4.5.14-web_"+(r?"direct_log_id":"normal_log_id"),a=Number(this.storage.getItem(i));return a=a||1,n=t(t({},n),{A99:r?"Y":"N",A100:a.toString(),A72:V,A88:this.logidStartTime}),a++,this.storage.setItem(i,a.toString()),o.push({eventCode:e,eventTime:Date.now().toString(),mapValue:d(n,this.config.strictMode)}),o},r.prototype.assembleData=function(e){var n=this.beaconSession.getSession();return{appVersion:this.config.appVersion?p(this.config.appVersion):"",sdkId:"js",sdkVersion:V,mainAppKey:this.config.appkey,platformId:3,common:d(t(t({},this.additionalParams),{A2:this.commonInfo.deviceId,A8:this.commonInfo.openid,A12:this.commonInfo.language,A17:this.commonInfo.pixel,A23:this.commonInfo.channelID,A50:this.commonInfo.unid,A76:n.sessionId,A101:this.commonInfo.userAgent,A102:window.location.href,A104:document.referrer,A119:this.commonInfo.query,A153:this.qimei36}),!1),events:e}},r.prototype.monitorUploadFailed=function(){this.uselessCycleTaskNum++,this.uselessCycleTaskNum>=5&&(window.clearInterval(this.intervalID),this.cycleTask(6e4),this.underWeakNet=!0)},r.prototype.doCustomCycleTask=function(){this.uselessCycleTaskNum>=5&&(window.clearInterval(this.intervalID),this.cycleTask(this.initDelayTime)),this.uselessCycleTaskNum=0,this.underWeakNet=!1},r}(m)},"object"==a(t)&&void 0!==e?e.exports=i():void 0===(o="function"==typeof(r=i)?r.call(t,n,t,e):r)||(e.exports=o)},function(e,t,n){var r=n(9),o=n(1),i={};e.exports.transferToTaskMethod=function(e,t){i[t]=e[t],e[t]=function(e,n){e.SkipTask?i[t].call(this,e,n):this._addTask(t,e,n)}},e.exports.init=function(e){var t,n,a=[],s={},c=0,u=0,l=function(e){var t={id:e.id,Bucket:e.Bucket,Region:e.Region,Key:e.Key,FilePath:e.FilePath,state:e.state,loaded:e.loaded,size:e.size,speed:e.speed,percent:e.percent,hashPercent:e.hashPercent,error:e.error};return e.FilePath&&(t.FilePath=e.FilePath),e._custom&&(t._custom=e._custom),t},d=(n=function(){t=0,e.emit("task-list-update",{list:o.map(a,l)}),e.emit("list-update",{list:o.map(a,l)})},function(){t||(t=setTimeout(n))}),p=function(){if(!(a.length<=e.options.UploadQueueSize)){for(var t=0;te.options.UploadQueueSize;){var n="waiting"===a[t].state||"checking"===a[t].state||"uploading"===a[t].state;a[t]&&n?t++:(s[a[t].id]&&delete s[a[t].id],a.splice(t,1),u--)}d()}},f=function t(){if(!(c>=e.options.FileParallelLimit)){for(;a[u]&&"waiting"!==a[u].state;)u++;if(!(u>=a.length)){var n=a[u];u++,c++,n.state="checking",n.params.onTaskStart&&n.params.onTaskStart(l(n)),!n.params.UploadData&&(n.params.UploadData={});var r=o.formatParams(n.api,n.params);i[n.api].call(e,r,(function(r,o){e._isRunningTask(n.id)&&("checking"!==n.state&&"uploading"!==n.state||(n.state=r?"error":"success",r&&(n.error=r),c--,d(),t(),n.callback&&n.callback(r,o),"success"===n.state&&(n.params&&(delete n.params.UploadData,delete n.params.Body,delete n.params),delete n.callback)),p())})),d(),setTimeout(t)}}},h=function(t,n){var o=s[t];if(o){var i=o&&"waiting"===o.state,a=o&&("checking"===o.state||"uploading"===o.state);if("canceled"===n&&"canceled"!==o.state||"paused"===n&&i||"paused"===n&&a){if("paused"===n&&o.params.Body&&"function"==typeof o.params.Body.pipe)return;o.state=n,e.emit("inner-kill-task",{TaskId:t,toState:n});try{var u=o&&o.params&&o.params.UploadData.UploadId}catch(e){}"canceled"===n&&u&&r.removeUsing(u),d(),a&&(c--,f()),"canceled"===n&&(o.params&&(delete o.params.UploadData,delete o.params.Body,delete o.params),delete o.callback)}p()}};e._addTasks=function(t){o.each(t,(function(t){e._addTask(t.api,t.params,t.callback,!0)})),d()};e._addTask=function(t,n,r,i){n=o.formatParams(t,n);var c=o.uuid();n.TaskId=c,n.onTaskReady&&n.onTaskReady(c),n.TaskReady&&(n.TaskReady(c),!1);var u={params:n,callback:r,api:t,index:a.length,id:c,Bucket:n.Bucket,Region:n.Region,Key:n.Key,FilePath:n.FilePath||"",state:"waiting",loaded:0,size:0,speed:0,percent:0,hashPercent:0,error:null,_custom:n._custom},l=n.onHashProgress;n.onHashProgress=function(t){e._isRunningTask(u.id)&&(u.hashPercent=t.percent,l&&l(t),d())};var h=n.onProgress;return n.onProgress=function(t){e._isRunningTask(u.id)&&("checking"===u.state&&(u.state="uploading"),u.loaded=t.loaded,u.speed=t.speed,u.percent=t.percent,h&&h(t),d())},o.getFileSize(t,n,(function(e,t){if(e)return r(o.error(e));s[c]=u,a.push(u),u.size=t,!i&&d(),f(),p()})),c},e._isRunningTask=function(e){var t=s[e];return!(!t||"checking"!==t.state&&"uploading"!==t.state)},e.getTaskList=function(){return o.map(a,l)},e.cancelTask=function(e){h(e,"canceled")},e.pauseTask=function(e){h(e,"paused")},e.restartTask=function(e){var t=s[e];!t||"paused"!==t.state&&"error"!==t.state||(t.state="waiting",d(),u=Math.min(u,t.index),f())},e.isUploadRunning=function(){return c||u-1&&(a["SSE-COS"]=a.SSECOS,delete a.SSECOS)}var s=i.json2xml({InventoryConfiguration:r}),c=t.Headers;c["Content-Type"]="application/xml",c["Content-MD5"]=i.b64(i.md5(s));var u="PUT"===e?"name/cos:PutBucketInventory":"name/cos:PostBucketInventory";f.call(this,{Action:u,method:e,Bucket:t.Bucket,Region:t.Region,body:s,action:"inventory",qs:{id:t.Id},headers:c},(function(e,t){return e&&204===e.statusCode?n(null,{statusCode:e.statusCode}):e?n(e):void n(null,{statusCode:t.statusCode,headers:t.headers})}))}function s(e){var t={GrantFullControl:[],GrantWrite:[],GrantRead:[],GrantReadAcp:[],GrantWriteAcp:[],ACL:""},n={FULL_CONTROL:"GrantFullControl",WRITE:"GrantWrite",READ:"GrantRead",READ_ACP:"GrantReadAcp",WRITE_ACP:"GrantWriteAcp"},r=(e&&e.AccessControlList||{}).Grant;r&&(r=i.isArray(r)?r:[r]);var o={READ:0,WRITE:0,FULL_CONTROL:0};return r&&r.length&&i.each(r,(function(r){"qcs::cam::anyone:anyone"===r.Grantee.ID||"http://cam.qcloud.com/groups/global/AllUsers"===r.Grantee.URI?o[r.Permission]=1:r.Grantee.ID!==e.Owner.ID&&t[n[r.Permission]].push('id="'+r.Grantee.ID+'"')})),o.FULL_CONTROL||o.WRITE&&o.READ?t.ACL="public-read-write":o.READ?t.ACL="public-read":t.ACL="private",i.each(n,(function(e){t[e]=c(t[e].join(","))})),t}function c(e){var t,n,r=e.split(","),o={};for(t=0;t-1?"{Region}.myqcloud.com":"cos.{Region}.myqcloud.com",e.ForcePathStyle||(s="{Bucket}."+s)),s=(s=s.replace(/\{\{AppId\}\}/gi,a).replace(/\{\{Bucket\}\}/gi,o).replace(/\{\{Region\}\}/gi,t).replace(/\{\{.*?\}\}/gi,"")).replace(/\{AppId\}/gi,a).replace(/\{BucketName\}/gi,o).replace(/\{Bucket\}/gi,n).replace(/\{Region\}/gi,t).replace(/\{.*?\}/gi,""),/^[a-zA-Z]+:\/\//.test(s)||(s=u+"//"+s),"/"===s.slice(-1)&&(s=s.slice(0,-1));var l=s;return e.ForcePathStyle&&(l+="/"+n),l+="/",c&&(l+=i.camSafeUrlEncode(c).replace(/%2F/g,"/")),e.isLocation&&(l=l.replace(/^https?:\/\//,"")),l}var l=function(e){if(!e.Bucket||!e.Region)return"";var t=void 0===e.UseAccelerate?this.options.UseAccelerate:e.UseAccelerate,n=(e.Url||u({ForcePathStyle:this.options.ForcePathStyle,protocol:this.options.Protocol,domain:this.options.Domain,bucket:e.Bucket,region:t?"accelerate":e.Region})).replace(/^https?:\/\/([^/]+)(\/.*)?$/,"$1");return new RegExp("^([a-z\\d-]+-\\d+\\.)?(cos|cosv6|ci|pic)\\.([a-z\\d-]+)\\.myqcloud\\.com$").test(n)?n:""};function d(e,t){var n=i.clone(e.Headers),r="";i.each(n,(function(e,t){(""===e||["content-type","cache-control","expires"].indexOf(t.toLowerCase())>-1)&&delete n[t],"host"===t.toLowerCase()&&(r=e)}));var o=!1!==e.ForceSignHost;!r&&e.SignHost&&o&&(n.Host=e.SignHost);var a=!1,s=function(e,n){a||(a=!0,n&&n.XCosSecurityToken&&!n.SecurityToken&&((n=i.clone(n)).SecurityToken=n.XCosSecurityToken,delete n.XCosSecurityToken),t&&t(e,n))},c=this,u=e.Bucket||"",l=e.Region||"",d=e.Key||"";c.options.ForcePathStyle&&u&&(d=u+"/"+d);var p="/"+d,f={},h=e.Scope;if(!h){var m=e.Action||"",g=e.ResourceKey||e.Key||"";h=e.Scope||[{action:m,bucket:u,region:l,prefix:g}]}var y=i.md5(JSON.stringify(h));c._StsCache=c._StsCache||[],function(){var e,t;for(e=c._StsCache.length-1;e>=0;e--){t=c._StsCache[e];var n=Math.round(i.getSkewTime(c.options.SystemClockOffset)/1e3)+30;if(t.StartTime&&n=t.ExpiredTime)c._StsCache.splice(e,1);else if(!t.ScopeLimit||t.ScopeLimit&&t.ScopeKey===y){f=t;break}}}();var v,C=function(){var t="";f.StartTime&&e.Expires?t=f.StartTime+";"+(f.StartTime+1*e.Expires):f.StartTime&&f.ExpiredTime&&(t=f.StartTime+";"+f.ExpiredTime);var r={Authorization:i.getAuth({SecretId:f.TmpSecretId,SecretKey:f.TmpSecretKey,Method:e.Method,Pathname:p,Query:e.Query,Headers:n,Expires:e.Expires,UseRawKey:c.options.UseRawKey,SystemClockOffset:c.options.SystemClockOffset,KeyTime:t,ForceSignHost:o}),SecurityToken:f.SecurityToken||f.XCosSecurityToken||"",Token:f.Token||"",ClientIP:f.ClientIP||"",ClientUA:f.ClientUA||""};s(null,r)},k=function(e){if(e.Authorization){var t=!1,n=e.Authorization;if(n)if(n.indexOf(" ")>-1)t=!1;else if(n.indexOf("q-sign-algorithm=")>-1&&n.indexOf("q-ak=")>-1&&n.indexOf("q-sign-time=")>-1&&n.indexOf("q-key-time=")>-1&&n.indexOf("q-url-param-list=")>-1)t=!0;else try{(n=atob(n)).indexOf("a=")>-1&&n.indexOf("k=")>-1&&n.indexOf("t=")>-1&&n.indexOf("r=")>-1&&n.indexOf("b=")>-1&&(t=!0)}catch(e){}if(!t)return i.error(new Error("getAuthorization callback params format error"))}else{if(!e.TmpSecretId)return i.error(new Error('getAuthorization callback params missing "TmpSecretId"'));if(!e.TmpSecretKey)return i.error(new Error('getAuthorization callback params missing "TmpSecretKey"'));if(!e.SecurityToken&&!e.XCosSecurityToken)return i.error(new Error('getAuthorization callback params missing "SecurityToken"'));if(!e.ExpiredTime)return i.error(new Error('getAuthorization callback params missing "ExpiredTime"'));if(e.ExpiredTime&&10!==e.ExpiredTime.toString().length)return i.error(new Error('getAuthorization callback params "ExpiredTime" should be 10 digits'));if(e.StartTime&&10!==e.StartTime.toString().length)return i.error(new Error('getAuthorization callback params "StartTime" should be 10 StartTime'))}return!1};if(f.ExpiredTime&&f.ExpiredTime-i.getSkewTime(c.options.SystemClockOffset)/1e3>60)C();else if(c.options.getAuthorization)c.options.getAuthorization.call(c,{Bucket:u,Region:l,Method:e.Method,Key:d,Pathname:p,Query:e.Query,Headers:n,Scope:h,SystemClockOffset:c.options.SystemClockOffset,ForceSignHost:o},(function(e){"string"==typeof e&&(e={Authorization:e});var t=k(e);if(t)return s(t);e.Authorization?s(null,e):((f=e||{}).Scope=h,f.ScopeKey=y,c._StsCache.push(f),C())}));else{if(!c.options.getSTS)return v={Authorization:i.getAuth({SecretId:e.SecretId||c.options.SecretId,SecretKey:e.SecretKey||c.options.SecretKey,Method:e.Method,Pathname:p,Query:e.Query,Headers:n,Expires:e.Expires,UseRawKey:c.options.UseRawKey,SystemClockOffset:c.options.SystemClockOffset,ForceSignHost:o}),SecurityToken:c.options.SecurityToken||c.options.XCosSecurityToken},s(null,v),v;c.options.getSTS.call(c,{Bucket:u,Region:l},(function(e){(f=e||{}).Scope=h,f.ScopeKey=y,f.TmpSecretId||(f.TmpSecretId=f.SecretId),f.TmpSecretKey||(f.TmpSecretKey=f.SecretKey);var t=k(f);if(t)return s(t);c._StsCache.push(f),C()}))}return""}function p(e){var t=!1,n=!1,r=e.headers&&(e.headers.date||e.headers.Date)||e.error&&e.error.ServerTime;try{var o=e.error.Code,a=e.error.Message;("RequestTimeTooSkewed"===o||"AccessDenied"===o&&"Request has expired"===a)&&(n=!0)}catch(e){}if(e)if(n&&r){var s=Date.parse(r);this.options.CorrectClockSkew&&Math.abs(i.getSkewTime(this.options.SystemClockOffset)-s)>=3e4&&(this.options.SystemClockOffset=s-Date.now(),t=!0)}else 5===Math.floor(e.statusCode/100)&&(t=!0);return t}function f(e,t){var n=this;!e.headers&&(e.headers={}),!e.qs&&(e.qs={}),e.VersionId&&(e.qs.versionId=e.VersionId),e.qs=i.clearKey(e.qs),e.headers&&(e.headers=i.clearKey(e.headers)),e.qs&&(e.qs=i.clearKey(e.qs));var r=i.clone(e.qs);e.action&&(r[e.action]="");var o=e.url||e.Url,a=e.SignHost||l.call(this,{Bucket:e.Bucket,Region:e.Region,Url:o}),s=e.tracker;!function o(i){var c=n.options.SystemClockOffset;s&&s.setParams({signStartTime:(new Date).getTime(),retryTimes:i-1}),d.call(n,{Bucket:e.Bucket||"",Region:e.Region||"",Method:e.method,Key:e.Key,Query:r,Headers:e.headers,SignHost:a,Action:e.Action,ResourceKey:e.ResourceKey,Scope:e.Scope,ForceSignHost:n.options.ForceSignHost},(function(r,a){r?t(r):(s&&s.setParams({signEndTime:(new Date).getTime(),httpStartTime:(new Date).getTime()}),e.AuthData=a,h.call(n,e,(function(r,a){s&&s.setParams({httpEndTime:(new Date).getTime()}),r&&i<2&&(c!==n.options.SystemClockOffset||p.call(n,r))?(e.headers&&(delete e.headers.Authorization,delete e.headers.token,delete e.headers.clientIP,delete e.headers.clientUA,e.headers["x-cos-security-token"]&&delete e.headers["x-cos-security-token"],e.headers["x-ci-security-token"]&&delete e.headers["x-ci-security-token"]),o(i+1)):t(r,a)})))}))}(1)}function h(e,t){var n=this,r=e.TaskId;if(!r||n._isRunningTask(r)){var a=e.Bucket,s=e.Region,c=e.Key,l=e.method||"GET",d=e.Url||e.url,p=e.body,f=e.rawBody;n.options.UseAccelerate&&(s="accelerate"),d=d||u({ForcePathStyle:n.options.ForcePathStyle,protocol:n.options.Protocol,domain:n.options.Domain,bucket:a,region:s,object:c}),e.action&&(d=d+"?"+(i.isIOS_QQ?"".concat(e.action,"="):e.action)),e.qsStr&&(d=d.indexOf("?")>-1?d+"&"+e.qsStr:d+"?"+e.qsStr);var h={method:l,url:d,headers:e.headers,qs:e.qs,body:p},m="x-cos-security-token";if(i.isCIHost(d)&&(m="x-ci-security-token"),h.headers.Authorization=e.AuthData.Authorization,e.AuthData.Token&&(h.headers.token=e.AuthData.Token),e.AuthData.ClientIP&&(h.headers.clientIP=e.AuthData.ClientIP),e.AuthData.ClientUA&&(h.headers.clientUA=e.AuthData.ClientUA),e.AuthData.SecurityToken&&(h.headers[m]=e.AuthData.SecurityToken),h.headers&&(h.headers=i.clearKey(h.headers)),h=i.clearKey(h),e.onProgress&&"function"==typeof e.onProgress){var g=p&&(p.size||p.length)||0;h.onProgress=function(t){if(!r||n._isRunningTask(r)){var o=t?t.loaded:0;e.onProgress({loaded:o,total:g})}}}e.onDownloadProgress&&(h.onDownloadProgress=e.onDownloadProgress),e.DataType&&(h.dataType=e.DataType),this.options.Timeout&&(h.timeout=this.options.Timeout),n.options.ForcePathStyle&&(h.pathStyle=n.options.ForcePathStyle),n.emit("before-send",h);var y=h.url.includes("accelerate."),v=h.qs?Object.keys(h.qs).map((function(e){return"".concat(e,"=").concat(h.qs[e])})).join("&"):"",C=v?h.url+"?"+v:h.url;e.tracker&&e.tracker.setParams({reqUrl:C,accelerate:y?"Y":"N"}),e.tracker&&e.tracker.parent&&e.tracker.parent.setParams({reqUrl:C,accelerate:y?"Y":"N"});var k=(n.options.Request||o)(h,(function(e){if(!e||"abort"!==e.error){var o={options:h,error:e&&e.error,statusCode:e&&e.statusCode||0,statusMessage:e&&e.statusMessage||"",headers:e&&e.headers||{},body:e&&e.body};n.emit("after-receive",o);var a,s=o.error,c=o.body,u={statusCode:o.statusCode,statusMessage:o.statusMessage,headers:o.headers},l=function(e,o){if(r&&n.off("inner-kill-task",S),!a){a=!0;var s={};u&&u.statusCode&&(s.statusCode=u.statusCode),u&&u.headers&&(s.headers=u.headers),e?(e=i.extend(e||{},s),t(e,null)):(o=i.extend(o||{},s),t(null,o)),k=null}};if(s)return l(i.error(s));var d,p=u.statusCode,m=2===Math.floor(p/100);if(f&&m)return l(null,{body:c});try{d=c&&c.indexOf("<")>-1&&c.indexOf(">")>-1&&i.xml2json(c)||{}}catch(e){d={}}var g=d&&d.Error;m?l(null,d):g?l(i.error(new Error(g.Message),{code:g.Code,error:g})):p?l(i.error(new Error(u.statusMessage),{code:""+p})):p&&l(i.error(new Error("statusCode error")))}})),S=function e(t){t.TaskId===r&&(k&&k.abort&&k.abort(),n.off("inner-kill-task",e))};r&&n.on("inner-kill-task",S)}}var m={getService:function(e,t){"function"==typeof e&&(t=e,e={});var n=this.options.Protocol||(i.isBrowser&&"object"===("undefined"==typeof location?"undefined":r(location))&&"http:"===location.protocol?"http:":"https:"),o=this.options.ServiceDomain,a=e.AppId||this.options.appId,s=e.Region;o?(o=o.replace(/\{\{AppId\}\}/gi,a||"").replace(/\{\{Region\}\}/gi,s||"").replace(/\{\{.*?\}\}/gi,""),/^[a-zA-Z]+:\/\//.test(o)||(o=n+"//"+o),"/"===o.slice(-1)&&(o=o.slice(0,-1))):o=s?n+"//cos."+s+".myqcloud.com":n+"//service.cos.myqcloud.com";var c="",u=s?"cos."+s+".myqcloud.com":"service.cos.myqcloud.com";u===o.replace(/^https?:\/\/([^/]+)(\/.*)?$/,"$1")&&(c=u),f.call(this,{Action:"name/cos:GetService",url:o,method:"GET",headers:e.Headers,SignHost:c},(function(e,n){if(e)return t(e);var r=n&&n.ListAllMyBucketsResult&&n.ListAllMyBucketsResult.Buckets&&n.ListAllMyBucketsResult.Buckets.Bucket||[];r=i.isArray(r)?r:[r];var o=n&&n.ListAllMyBucketsResult&&n.ListAllMyBucketsResult.Owner||{};t(null,{Buckets:r,Owner:o,statusCode:n.statusCode,headers:n.headers})}))},putBucket:function(e,t){var n=this,r="";if(e.BucketAZConfig){var o={BucketAZConfig:e.BucketAZConfig};r=i.json2xml({CreateBucketConfiguration:o})}f.call(this,{Action:"name/cos:PutBucket",method:"PUT",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,body:r},(function(r,o){if(r)return t(r);var i=u({protocol:n.options.Protocol,domain:n.options.Domain,bucket:e.Bucket,region:e.Region,isLocation:!0});t(null,{Location:i,statusCode:o.statusCode,headers:o.headers})}))},headBucket:function(e,t){f.call(this,{Action:"name/cos:HeadBucket",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,method:"HEAD"},t)},getBucket:function(e,t){var n={};n.prefix=e.Prefix||"",n.delimiter=e.Delimiter,n.marker=e.Marker,n["max-keys"]=e.MaxKeys,n["encoding-type"]=e.EncodingType,f.call(this,{Action:"name/cos:GetBucket",ResourceKey:n.prefix,method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,qs:n},(function(e,n){if(e)return t(e);var r=n.ListBucketResult||{},o=r.Contents||[],a=r.CommonPrefixes||[];o=i.isArray(o)?o:[o],a=i.isArray(a)?a:[a];var s=i.clone(r);i.extend(s,{Contents:o,CommonPrefixes:a,statusCode:n.statusCode,headers:n.headers}),t(null,s)}))},deleteBucket:function(e,t){f.call(this,{Action:"name/cos:DeleteBucket",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,method:"DELETE"},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},putBucketAcl:function(e,t){var n=e.Headers,r="";if(e.AccessControlPolicy){var o=i.clone(e.AccessControlPolicy||{}),a=o.Grants||o.Grant;a=i.isArray(a)?a:[a],delete o.Grant,delete o.Grants,o.AccessControlList={Grant:a},r=i.json2xml({AccessControlPolicy:o}),n["Content-Type"]="application/xml",n["Content-MD5"]=i.b64(i.md5(r))}i.each(n,(function(e,t){0===t.indexOf("x-cos-grant-")&&(n[t]=c(n[t]))})),f.call(this,{Action:"name/cos:PutBucketACL",method:"PUT",Bucket:e.Bucket,Region:e.Region,headers:n,action:"acl",body:r},(function(e,n){if(e)return t(e);t(null,{statusCode:n.statusCode,headers:n.headers})}))},getBucketAcl:function(e,t){f.call(this,{Action:"name/cos:GetBucketACL",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"acl"},(function(e,n){if(e)return t(e);var r=n.AccessControlPolicy||{},o=r.Owner||{},a=r.AccessControlList.Grant||[];a=i.isArray(a)?a:[a];var c=s(r);n.headers&&n.headers["x-cos-acl"]&&(c.ACL=n.headers["x-cos-acl"]),c=i.extend(c,{Owner:o,Grants:a,statusCode:n.statusCode,headers:n.headers}),t(null,c)}))},putBucketCors:function(e,t){var n=(e.CORSConfiguration||{}).CORSRules||e.CORSRules||[];n=i.clone(i.isArray(n)?n:[n]),i.each(n,(function(e){i.each(["AllowedOrigin","AllowedHeader","AllowedMethod","ExposeHeader"],(function(t){var n=t+"s",r=e[n]||e[t]||[];delete e[n],e[t]=i.isArray(r)?r:[r]}))}));var r={CORSRule:n};e.ResponseVary&&(r.ResponseVary=e.ResponseVary);var o=i.json2xml({CORSConfiguration:r}),a=e.Headers;a["Content-Type"]="application/xml",a["Content-MD5"]=i.b64(i.md5(o)),f.call(this,{Action:"name/cos:PutBucketCORS",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:o,action:"cors",headers:a},(function(e,n){if(e)return t(e);t(null,{statusCode:n.statusCode,headers:n.headers})}))},getBucketCors:function(e,t){f.call(this,{Action:"name/cos:GetBucketCORS",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"cors"},(function(e,n){if(e)if(404===e.statusCode&&e.error&&"NoSuchCORSConfiguration"===e.error.Code){var r={CORSRules:[],statusCode:e.statusCode};e.headers&&(r.headers=e.headers),t(null,r)}else t(e);else{var o=n.CORSConfiguration||{},a=o.CORSRules||o.CORSRule||[];a=i.clone(i.isArray(a)?a:[a]);var s=o.ResponseVary;i.each(a,(function(e){i.each(["AllowedOrigin","AllowedHeader","AllowedMethod","ExposeHeader"],(function(t){var n=t+"s",r=e[n]||e[t]||[];delete e[t],e[n]=i.isArray(r)?r:[r]}))})),t(null,{CORSRules:a,ResponseVary:s,statusCode:n.statusCode,headers:n.headers})}}))},deleteBucketCors:function(e,t){f.call(this,{Action:"name/cos:DeleteBucketCORS",method:"DELETE",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"cors"},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode||e.statusCode,headers:n.headers})}))},getBucketLocation:function(e,t){f.call(this,{Action:"name/cos:GetBucketLocation",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"location"},t)},getBucketPolicy:function(e,t){f.call(this,{Action:"name/cos:GetBucketPolicy",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"policy",rawBody:!0},(function(e,n){if(e)return e.statusCode&&403===e.statusCode?t(i.error(e,{ErrorStatus:"Access Denied"})):e.statusCode&&405===e.statusCode?t(i.error(e,{ErrorStatus:"Method Not Allowed"})):e.statusCode&&404===e.statusCode?t(i.error(e,{ErrorStatus:"Policy Not Found"})):t(e);var r={};try{r=JSON.parse(n.body)}catch(e){}t(null,{Policy:r,statusCode:n.statusCode,headers:n.headers})}))},putBucketPolicy:function(e,t){var n=e.Policy;try{"string"==typeof n&&(n=JSON.parse(n))}catch(e){}if(!n||"string"==typeof n)return t(i.error(new Error("Policy format error")));var r=JSON.stringify(n);n.version||(n.version="2.0");var o=e.Headers;o["Content-Type"]="application/json",o["Content-MD5"]=i.b64(i.md5(r)),f.call(this,{Action:"name/cos:PutBucketPolicy",method:"PUT",Bucket:e.Bucket,Region:e.Region,action:"policy",body:r,headers:o},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},deleteBucketPolicy:function(e,t){f.call(this,{Action:"name/cos:DeleteBucketPolicy",method:"DELETE",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"policy"},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode||e.statusCode,headers:n.headers})}))},putBucketTagging:function(e,t){var n=e.Tagging||{},r=n.TagSet||n.Tags||e.Tags||[];r=i.clone(i.isArray(r)?r:[r]);var o=i.json2xml({Tagging:{TagSet:{Tag:r}}}),a=e.Headers;a["Content-Type"]="application/xml",a["Content-MD5"]=i.b64(i.md5(o)),f.call(this,{Action:"name/cos:PutBucketTagging",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:o,action:"tagging",headers:a},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},getBucketTagging:function(e,t){f.call(this,{Action:"name/cos:GetBucketTagging",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"tagging"},(function(e,n){if(e)if(404!==e.statusCode||!e.error||"Not Found"!==e.error&&"NoSuchTagSet"!==e.error.Code)t(e);else{var r={Tags:[],statusCode:e.statusCode};e.headers&&(r.headers=e.headers),t(null,r)}else{var o=[];try{o=n.Tagging.TagSet.Tag||[]}catch(e){}o=i.clone(i.isArray(o)?o:[o]),t(null,{Tags:o,statusCode:n.statusCode,headers:n.headers})}}))},deleteBucketTagging:function(e,t){f.call(this,{Action:"name/cos:DeleteBucketTagging",method:"DELETE",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"tagging"},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},putBucketLifecycle:function(e,t){var n=(e.LifecycleConfiguration||{}).Rules||e.Rules||[];n=i.clone(n);var r=i.json2xml({LifecycleConfiguration:{Rule:n}}),o=e.Headers;o["Content-Type"]="application/xml",o["Content-MD5"]=i.b64(i.md5(r)),f.call(this,{Action:"name/cos:PutBucketLifecycle",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:r,action:"lifecycle",headers:o},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},getBucketLifecycle:function(e,t){f.call(this,{Action:"name/cos:GetBucketLifecycle",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"lifecycle"},(function(e,n){if(e)if(404===e.statusCode&&e.error&&"NoSuchLifecycleConfiguration"===e.error.Code){var r={Rules:[],statusCode:e.statusCode};e.headers&&(r.headers=e.headers),t(null,r)}else t(e);else{var o=[];try{o=n.LifecycleConfiguration.Rule||[]}catch(e){}o=i.clone(i.isArray(o)?o:[o]),t(null,{Rules:o,statusCode:n.statusCode,headers:n.headers})}}))},deleteBucketLifecycle:function(e,t){f.call(this,{Action:"name/cos:DeleteBucketLifecycle",method:"DELETE",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"lifecycle"},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},putBucketVersioning:function(e,t){if(e.VersioningConfiguration){var n=e.VersioningConfiguration||{},r=i.json2xml({VersioningConfiguration:n}),o=e.Headers;o["Content-Type"]="application/xml",o["Content-MD5"]=i.b64(i.md5(r)),f.call(this,{Action:"name/cos:PutBucketVersioning",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:r,action:"versioning",headers:o},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))}else t(i.error(new Error("missing param VersioningConfiguration")))},getBucketVersioning:function(e,t){f.call(this,{Action:"name/cos:GetBucketVersioning",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"versioning"},(function(e,n){e||!n.VersioningConfiguration&&(n.VersioningConfiguration={}),t(e,n)}))},putBucketReplication:function(e,t){var n=i.clone(e.ReplicationConfiguration),r=i.json2xml({ReplicationConfiguration:n});r=(r=r.replace(/<(\/?)Rules>/gi,"<$1Rule>")).replace(/<(\/?)Tags>/gi,"<$1Tag>");var o=e.Headers;o["Content-Type"]="application/xml",o["Content-MD5"]=i.b64(i.md5(r)),f.call(this,{Action:"name/cos:PutBucketReplication",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:r,action:"replication",headers:o},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},getBucketReplication:function(e,t){f.call(this,{Action:"name/cos:GetBucketReplication",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"replication"},(function(e,n){if(e)if(404!==e.statusCode||!e.error||"Not Found"!==e.error&&"ReplicationConfigurationnotFoundError"!==e.error.Code)t(e);else{var r={ReplicationConfiguration:{Rules:[]},statusCode:e.statusCode};e.headers&&(r.headers=e.headers),t(null,r)}else!n.ReplicationConfiguration&&(n.ReplicationConfiguration={}),n.ReplicationConfiguration.Rule&&(n.ReplicationConfiguration.Rules=i.makeArray(n.ReplicationConfiguration.Rule),delete n.ReplicationConfiguration.Rule),t(e,n)}))},deleteBucketReplication:function(e,t){f.call(this,{Action:"name/cos:DeleteBucketReplication",method:"DELETE",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"replication"},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},putBucketWebsite:function(e,t){if(e.WebsiteConfiguration){var n=i.clone(e.WebsiteConfiguration||{}),r=n.RoutingRules||n.RoutingRule||[];r=i.isArray(r)?r:[r],delete n.RoutingRule,delete n.RoutingRules,r.length&&(n.RoutingRules={RoutingRule:r});var o=i.json2xml({WebsiteConfiguration:n}),a=e.Headers;a["Content-Type"]="application/xml",a["Content-MD5"]=i.b64(i.md5(o)),f.call(this,{Action:"name/cos:PutBucketWebsite",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:o,action:"website",headers:a},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))}else t(i.error(new Error("missing param WebsiteConfiguration")))},getBucketWebsite:function(e,t){f.call(this,{Action:"name/cos:GetBucketWebsite",method:"GET",Bucket:e.Bucket,Region:e.Region,Key:e.Key,headers:e.Headers,action:"website"},(function(e,n){if(e)if(404===e.statusCode&&"NoSuchWebsiteConfiguration"===e.error.Code){var r={WebsiteConfiguration:{},statusCode:e.statusCode};e.headers&&(r.headers=e.headers),t(null,r)}else t(e);else{var o=n.WebsiteConfiguration||{};if(o.RoutingRules){var a=i.clone(o.RoutingRules.RoutingRule||[]);a=i.makeArray(a),o.RoutingRules=a}t(null,{WebsiteConfiguration:o,statusCode:n.statusCode,headers:n.headers})}}))},deleteBucketWebsite:function(e,t){f.call(this,{Action:"name/cos:DeleteBucketWebsite",method:"DELETE",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"website"},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},putBucketReferer:function(e,t){if(e.RefererConfiguration){var n=i.clone(e.RefererConfiguration||{}),r=n.DomainList||{},o=r.Domains||r.Domain||[];(o=i.isArray(o)?o:[o]).length&&(n.DomainList={Domain:o});var a=i.json2xml({RefererConfiguration:n}),s=e.Headers;s["Content-Type"]="application/xml",s["Content-MD5"]=i.b64(i.md5(a)),f.call(this,{Action:"name/cos:PutBucketReferer",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:a,action:"referer",headers:s},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))}else t(i.error(new Error("missing param RefererConfiguration")))},getBucketReferer:function(e,t){f.call(this,{Action:"name/cos:GetBucketReferer",method:"GET",Bucket:e.Bucket,Region:e.Region,Key:e.Key,headers:e.Headers,action:"referer"},(function(e,n){if(e)if(404===e.statusCode&&"NoSuchRefererConfiguration"===e.error.Code){var r={WebsiteConfiguration:{},statusCode:e.statusCode};e.headers&&(r.headers=e.headers),t(null,r)}else t(e);else{var o=n.RefererConfiguration||{};if(o.DomainList){var a=i.makeArray(o.DomainList.Domain||[]);o.DomainList={Domains:a}}t(null,{RefererConfiguration:o,statusCode:n.statusCode,headers:n.headers})}}))},putBucketDomain:function(e,t){var n=(e.DomainConfiguration||{}).DomainRule||e.DomainRule||[];n=i.clone(n);var r=i.json2xml({DomainConfiguration:{DomainRule:n}}),o=e.Headers;o["Content-Type"]="application/xml",o["Content-MD5"]=i.b64(i.md5(r)),f.call(this,{Action:"name/cos:PutBucketDomain",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:r,action:"domain",headers:o},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},getBucketDomain:function(e,t){f.call(this,{Action:"name/cos:GetBucketDomain",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"domain"},(function(e,n){if(e)return t(e);var r=[];try{r=n.DomainConfiguration.DomainRule||[]}catch(e){}r=i.clone(i.isArray(r)?r:[r]),t(null,{DomainRule:r,statusCode:n.statusCode,headers:n.headers})}))},deleteBucketDomain:function(e,t){f.call(this,{Action:"name/cos:DeleteBucketDomain",method:"DELETE",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"domain"},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},putBucketOrigin:function(e,t){var n=(e.OriginConfiguration||{}).OriginRule||e.OriginRule||[];n=i.clone(n);var r=i.json2xml({OriginConfiguration:{OriginRule:n}}),o=e.Headers;o["Content-Type"]="application/xml",o["Content-MD5"]=i.b64(i.md5(r)),f.call(this,{Action:"name/cos:PutBucketOrigin",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:r,action:"origin",headers:o},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},getBucketOrigin:function(e,t){f.call(this,{Action:"name/cos:GetBucketOrigin",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"origin"},(function(e,n){if(e)return t(e);var r=[];try{r=n.OriginConfiguration.OriginRule||[]}catch(e){}r=i.clone(i.isArray(r)?r:[r]),t(null,{OriginRule:r,statusCode:n.statusCode,headers:n.headers})}))},deleteBucketOrigin:function(e,t){f.call(this,{Action:"name/cos:DeleteBucketOrigin",method:"DELETE",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"origin"},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},putBucketLogging:function(e,t){var n=i.json2xml({BucketLoggingStatus:e.BucketLoggingStatus||""}),r=e.Headers;r["Content-Type"]="application/xml",r["Content-MD5"]=i.b64(i.md5(n)),f.call(this,{Action:"name/cos:PutBucketLogging",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:n,action:"logging",headers:r},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},getBucketLogging:function(e,t){f.call(this,{Action:"name/cos:GetBucketLogging",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"logging"},(function(e,n){if(e)return t(e);t(null,{BucketLoggingStatus:n.BucketLoggingStatus,statusCode:n.statusCode,headers:n.headers})}))},putBucketInventory:function(e,t){return a.call(this,"PUT",e,t)},postBucketInventory:function(e,t){return a.call(this,"POST",e,t)},getBucketInventory:function(e,t){f.call(this,{Action:"name/cos:GetBucketInventory",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"inventory",qs:{id:e.Id}},(function(e,n){if(e)return t(e);var r=n.InventoryConfiguration;if(r&&r.OptionalFields&&r.OptionalFields.Field){var o=r.OptionalFields.Field;i.isArray(o)||(o=[o]),r.OptionalFields=o}if(r.Destination&&r.Destination.COSBucketDestination&&r.Destination.COSBucketDestination.Encryption){var a=r.Destination.COSBucketDestination.Encryption;Object.keys(a).indexOf("SSE-COS")>-1&&(a.SSECOS=a["SSE-COS"],delete a["SSE-COS"])}t(null,{InventoryConfiguration:r,statusCode:n.statusCode,headers:n.headers})}))},listBucketInventory:function(e,t){f.call(this,{Action:"name/cos:ListBucketInventory",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"inventory",qs:{"continuation-token":e.ContinuationToken}},(function(e,n){if(e)return t(e);var r=n.ListInventoryConfigurationResult,o=r.InventoryConfiguration||[];o=i.isArray(o)?o:[o],delete r.InventoryConfiguration,i.each(o,(function(e){if(e&&e.OptionalFields&&e.OptionalFields.Field){var t=e.OptionalFields.Field;i.isArray(t)||(t=[t]),e.OptionalFields=t}if(e.Destination&&e.Destination.COSBucketDestination&&e.Destination.COSBucketDestination.Encryption){var n=e.Destination.COSBucketDestination.Encryption;Object.keys(n).indexOf("SSE-COS")>-1&&(n.SSECOS=n["SSE-COS"],delete n["SSE-COS"])}})),r.InventoryConfigurations=o,i.extend(r,{statusCode:n.statusCode,headers:n.headers}),t(null,r)}))},deleteBucketInventory:function(e,t){f.call(this,{Action:"name/cos:DeleteBucketInventory",method:"DELETE",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"inventory",qs:{id:e.Id}},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},putBucketAccelerate:function(e,t){if(e.AccelerateConfiguration){var n={AccelerateConfiguration:e.AccelerateConfiguration||{}},r=i.json2xml(n),o={"Content-Type":"application/xml"};o["Content-MD5"]=i.b64(i.md5(r)),f.call(this,{Action:"name/cos:PutBucketAccelerate",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:r,action:"accelerate",headers:o},(function(e,n){if(e)return t(e);t(null,{statusCode:n.statusCode,headers:n.headers})}))}else t(i.error(new Error("missing param AccelerateConfiguration")))},getBucketAccelerate:function(e,t){f.call(this,{Action:"name/cos:GetBucketAccelerate",method:"GET",Bucket:e.Bucket,Region:e.Region,action:"accelerate"},(function(e,n){e||!n.AccelerateConfiguration&&(n.AccelerateConfiguration={}),t(e,n)}))},putBucketEncryption:function(e,t){var n=e.ServerSideEncryptionConfiguration||{},r=n.Rule||n.Rules||[],o=i.json2xml({ServerSideEncryptionConfiguration:{Rule:r}}),a=e.Headers;a["Content-Type"]="application/xml",a["Content-MD5"]=i.b64(i.md5(o)),f.call(this,{Action:"name/cos:PutBucketEncryption",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:o,action:"encryption",headers:a},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},getBucketEncryption:function(e,t){f.call(this,{Action:"name/cos:GetBucketEncryption",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"encryption"},(function(e,n){if(e)if(404===e.statusCode&&"NoSuchEncryptionConfiguration"===e.code){var r={EncryptionConfiguration:{Rules:[]},statusCode:e.statusCode};e.headers&&(r.headers=e.headers),t(null,r)}else t(e);else{var o=i.makeArray(n.EncryptionConfiguration&&n.EncryptionConfiguration.Rule||[]);n.EncryptionConfiguration={Rules:o},t(e,n)}}))},deleteBucketEncryption:function(e,t){f.call(this,{Action:"name/cos:DeleteBucketReplication",method:"DELETE",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"encryption"},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},getObject:function(e,t){var n=e.Query||{},r=e.QueryString||"",o=i.throttleOnProgress.call(this,0,e.onProgress),a=e.tracker;a&&a.setParams({signStartTime:(new Date).getTime()}),n["response-content-type"]=e.ResponseContentType,n["response-content-language"]=e.ResponseContentLanguage,n["response-expires"]=e.ResponseExpires,n["response-cache-control"]=e.ResponseCacheControl,n["response-content-disposition"]=e.ResponseContentDisposition,n["response-content-encoding"]=e.ResponseContentEncoding,f.call(this,{Action:"name/cos:GetObject",method:"GET",Bucket:e.Bucket,Region:e.Region,Key:e.Key,VersionId:e.VersionId,DataType:e.DataType,headers:e.Headers,qs:n,qsStr:r,rawBody:!0,onDownloadProgress:o,tracker:a},(function(n,r){if(o(null,!0),n){var a=n.statusCode;return e.Headers["If-Modified-Since"]&&a&&304===a?t(null,{NotModified:!0}):t(n)}t(null,{Body:r.body,ETag:i.attr(r.headers,"etag",""),statusCode:r.statusCode,headers:r.headers})}))},headObject:function(e,t){f.call(this,{Action:"name/cos:HeadObject",method:"HEAD",Bucket:e.Bucket,Region:e.Region,Key:e.Key,VersionId:e.VersionId,headers:e.Headers},(function(n,r){if(n){var o=n.statusCode;return e.Headers["If-Modified-Since"]&&o&&304===o?t(null,{NotModified:!0,statusCode:o}):t(n)}r.ETag=i.attr(r.headers,"etag",""),t(null,r)}))},listObjectVersions:function(e,t){var n={};n.prefix=e.Prefix||"",n.delimiter=e.Delimiter,n["key-marker"]=e.KeyMarker,n["version-id-marker"]=e.VersionIdMarker,n["max-keys"]=e.MaxKeys,n["encoding-type"]=e.EncodingType,f.call(this,{Action:"name/cos:GetBucketObjectVersions",ResourceKey:n.prefix,method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,qs:n,action:"versions"},(function(e,n){if(e)return t(e);var r=n.ListVersionsResult||{},o=r.DeleteMarker||[];o=i.isArray(o)?o:[o];var a=r.Version||[];a=i.isArray(a)?a:[a];var s=i.clone(r);delete s.DeleteMarker,delete s.Version,i.extend(s,{DeleteMarkers:o,Versions:a,statusCode:n.statusCode,headers:n.headers}),t(null,s)}))},putObject:function(e,t){var n=this,r=e.ContentLength,o=i.throttleOnProgress.call(n,r,e.onProgress),a=e.Headers;a["Cache-Control"]||a["cache-control"]||(a["Cache-Control"]=""),a["Content-Type"]||a["content-type"]||(a["Content-Type"]=e.Body&&e.Body.type||"");var s=e.UploadAddMetaMd5||n.options.UploadAddMetaMd5||n.options.UploadCheckContentMd5,c=e.tracker;s&&c&&c.setParams({md5StartTime:(new Date).getTime()}),i.getBodyMd5(s,e.Body,(function(s){s&&(c&&c.setParams({md5EndTime:(new Date).getTime()}),n.options.UploadCheckContentMd5&&(a["Content-MD5"]=i.b64(s)),(e.UploadAddMetaMd5||n.options.UploadAddMetaMd5)&&(a["x-cos-meta-md5"]=s)),void 0!==e.ContentLength&&(a["Content-Length"]=e.ContentLength),o(null,!0),f.call(n,{Action:"name/cos:PutObject",TaskId:e.TaskId,method:"PUT",Bucket:e.Bucket,Region:e.Region,Key:e.Key,headers:e.Headers,qs:e.Query,body:e.Body,onProgress:o,tracker:c},(function(a,s){if(a)return o(null,!0),t(a);o({loaded:r,total:r},!0);var c=u({ForcePathStyle:n.options.ForcePathStyle,protocol:n.options.Protocol,domain:n.options.Domain,bucket:e.Bucket,region:n.options.UseAccelerate?"accelerate":e.Region,object:e.Key});c=c.substr(c.indexOf("://")+3),s.Location=c,s.ETag=i.attr(s.headers,"etag",""),t(null,s)}))}),e.onHashProgress)},deleteObject:function(e,t){f.call(this,{Action:"name/cos:DeleteObject",method:"DELETE",Bucket:e.Bucket,Region:e.Region,Key:e.Key,headers:e.Headers,VersionId:e.VersionId,action:e.Recursive?"recursive":""},(function(e,n){if(e){var r=e.statusCode;return r&&404===r?t(null,{BucketNotFound:!0,statusCode:r}):t(e)}t(null,{statusCode:n.statusCode,headers:n.headers})}))},getObjectAcl:function(e,t){var n={};e.VersionId&&(n.versionId=e.VersionId),f.call(this,{Action:"name/cos:GetObjectACL",method:"GET",Bucket:e.Bucket,Region:e.Region,Key:e.Key,headers:e.Headers,qs:n,action:"acl"},(function(e,n){if(e)return t(e);var r=n.AccessControlPolicy||{},o=r.Owner||{},a=r.AccessControlList&&r.AccessControlList.Grant||[];a=i.isArray(a)?a:[a];var c=s(r);delete c.GrantWrite,n.headers&&n.headers["x-cos-acl"]&&(c.ACL=n.headers["x-cos-acl"]),c=i.extend(c,{Owner:o,Grants:a,statusCode:n.statusCode,headers:n.headers}),t(null,c)}))},putObjectAcl:function(e,t){var n=e.Headers,r="";if(e.AccessControlPolicy){var o=i.clone(e.AccessControlPolicy||{}),a=o.Grants||o.Grant;a=i.isArray(a)?a:[a],delete o.Grant,delete o.Grants,o.AccessControlList={Grant:a},r=i.json2xml({AccessControlPolicy:o}),n["Content-Type"]="application/xml",n["Content-MD5"]=i.b64(i.md5(r))}i.each(n,(function(e,t){0===t.indexOf("x-cos-grant-")&&(n[t]=c(n[t]))})),f.call(this,{Action:"name/cos:PutObjectACL",method:"PUT",Bucket:e.Bucket,Region:e.Region,Key:e.Key,action:"acl",headers:n,body:r},(function(e,n){if(e)return t(e);t(null,{statusCode:n.statusCode,headers:n.headers})}))},optionsObject:function(e,t){var n=e.Headers;n.Origin=e.Origin,n["Access-Control-Request-Method"]=e.AccessControlRequestMethod,n["Access-Control-Request-Headers"]=e.AccessControlRequestHeaders,f.call(this,{Action:"name/cos:OptionsObject",method:"OPTIONS",Bucket:e.Bucket,Region:e.Region,Key:e.Key,headers:n},(function(e,n){if(e)return e.statusCode&&403===e.statusCode?t(null,{OptionsForbidden:!0,statusCode:e.statusCode}):t(e);var r=n.headers||{};t(null,{AccessControlAllowOrigin:r["access-control-allow-origin"],AccessControlAllowMethods:r["access-control-allow-methods"],AccessControlAllowHeaders:r["access-control-allow-headers"],AccessControlExposeHeaders:r["access-control-expose-headers"],AccessControlMaxAge:r["access-control-max-age"],statusCode:n.statusCode,headers:n.headers})}))},putObjectCopy:function(e,t){var n=this,r=e.Headers;r["Cache-Control"]||r["cache-control"]||(r["Cache-Control"]="");var o=e.CopySource||"",a=i.getSourceParams.call(this,o);if(a){var s=a.Bucket,c=a.Region,l=decodeURIComponent(a.Key);f.call(this,{Scope:[{action:"name/cos:GetObject",bucket:s,region:c,prefix:l},{action:"name/cos:PutObject",bucket:e.Bucket,region:e.Region,prefix:e.Key}],method:"PUT",Bucket:e.Bucket,Region:e.Region,Key:e.Key,VersionId:e.VersionId,headers:e.Headers},(function(r,o){if(r)return t(r);var a=i.clone(o.CopyObjectResult||{}),s=u({ForcePathStyle:n.options.ForcePathStyle,protocol:n.options.Protocol,domain:n.options.Domain,bucket:e.Bucket,region:e.Region,object:e.Key,isLocation:!0});i.extend(a,{Location:s,statusCode:o.statusCode,headers:o.headers}),t(null,a)}))}else t(i.error(new Error("CopySource format error")))},deleteMultipleObject:function(e,t){var n=e.Objects||[],r=e.Quiet;n=i.isArray(n)?n:[n];var o=i.json2xml({Delete:{Object:n,Quiet:r||!1}}),a=e.Headers;a["Content-Type"]="application/xml",a["Content-MD5"]=i.b64(i.md5(o));var s=i.map(n,(function(t){return{action:"name/cos:DeleteObject",bucket:e.Bucket,region:e.Region,prefix:t.Key}}));f.call(this,{Scope:s,method:"POST",Bucket:e.Bucket,Region:e.Region,body:o,action:"delete",headers:a},(function(e,n){if(e)return t(e);var r=n.DeleteResult||{},o=r.Deleted||[],a=r.Error||[];o=i.isArray(o)?o:[o],a=i.isArray(a)?a:[a];var s=i.clone(r);i.extend(s,{Error:a,Deleted:o,statusCode:n.statusCode,headers:n.headers}),t(null,s)}))},restoreObject:function(e,t){var n=e.Headers;if(e.RestoreRequest){var r=e.RestoreRequest||{},o=i.json2xml({RestoreRequest:r});n["Content-Type"]="application/xml",n["Content-MD5"]=i.b64(i.md5(o)),f.call(this,{Action:"name/cos:RestoreObject",method:"POST",Bucket:e.Bucket,Region:e.Region,Key:e.Key,VersionId:e.VersionId,body:o,action:"restore",headers:n},t)}else t(i.error(new Error("missing param RestoreRequest")))},putObjectTagging:function(e,t){var n=e.Tagging||{},r=n.TagSet||n.Tags||e.Tags||[];r=i.clone(i.isArray(r)?r:[r]);var o=i.json2xml({Tagging:{TagSet:{Tag:r}}}),a=e.Headers;a["Content-Type"]="application/xml",a["Content-MD5"]=i.b64(i.md5(o)),f.call(this,{Action:"name/cos:PutObjectTagging",method:"PUT",Bucket:e.Bucket,Key:e.Key,Region:e.Region,body:o,action:"tagging",headers:a,VersionId:e.VersionId},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},getObjectTagging:function(e,t){f.call(this,{Action:"name/cos:GetObjectTagging",method:"GET",Key:e.Key,Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"tagging",VersionId:e.VersionId},(function(e,n){if(e)if(404!==e.statusCode||!e.error||"Not Found"!==e.error&&"NoSuchTagSet"!==e.error.Code)t(e);else{var r={Tags:[],statusCode:e.statusCode};e.headers&&(r.headers=e.headers),t(null,r)}else{var o=[];try{o=n.Tagging.TagSet.Tag||[]}catch(e){}o=i.clone(i.isArray(o)?o:[o]),t(null,{Tags:o,statusCode:n.statusCode,headers:n.headers})}}))},deleteObjectTagging:function(e,t){f.call(this,{Action:"name/cos:DeleteObjectTagging",method:"DELETE",Bucket:e.Bucket,Region:e.Region,Key:e.Key,headers:e.Headers,action:"tagging",VersionId:e.VersionId},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},selectObjectContent:function(e,t){if(!e.SelectType)return t(i.error(new Error("missing param SelectType")));var n=e.SelectRequest||{},r=i.json2xml({SelectRequest:n}),o=e.Headers;o["Content-Type"]="application/xml",o["Content-MD5"]=i.b64(i.md5(r)),f.call(this,{Action:"name/cos:GetObject",method:"POST",Bucket:e.Bucket,Region:e.Region,Key:e.Key,headers:e.Headers,action:"select",qs:{"select-type":e.SelectType},VersionId:e.VersionId,body:r,DataType:"arraybuffer",rawBody:!0},(function(e,n){if(e&&204===e.statusCode)return t(null,{statusCode:e.statusCode});if(e)return t(e);var r=i.parseSelectPayload(n.body);t(null,{statusCode:n.statusCode,headers:n.headers,Body:r.body,Payload:r.payload})}))},appendObject:function(e,t){var n=e.Headers;n["Cache-Control"]||n["cache-control"]||(n["Cache-Control"]=""),n["Content-Type"]||n["content-type"]||(n["Content-Type"]=e.Body&&e.Body.type||""),f.call(this,{Action:"name/cos:AppendObject",method:"POST",Bucket:e.Bucket,Region:e.Region,action:"append",Key:e.Key,body:e.Body,qs:{position:e.Position},headers:e.Headers},(function(e,n){if(e)return t(e);t(null,n)}))},uploadPartCopy:function(e,t){var n=e.CopySource||"",r=i.getSourceParams.call(this,n);if(r){var o=r.Bucket,a=r.Region,s=decodeURIComponent(r.Key);f.call(this,{Scope:[{action:"name/cos:GetObject",bucket:o,region:a,prefix:s},{action:"name/cos:PutObject",bucket:e.Bucket,region:e.Region,prefix:e.Key}],method:"PUT",Bucket:e.Bucket,Region:e.Region,Key:e.Key,VersionId:e.VersionId,qs:{partNumber:e.PartNumber,uploadId:e.UploadId},headers:e.Headers},(function(e,n){if(e)return t(e);var r=i.clone(n.CopyPartResult||{});i.extend(r,{statusCode:n.statusCode,headers:n.headers}),t(null,r)}))}else t(i.error(new Error("CopySource format error")))},multipartInit:function(e,t){var n=this,r=e.Headers,o=e.tracker;r["Cache-Control"]||r["cache-control"]||(r["Cache-Control"]=""),r["Content-Type"]||r["content-type"]||(r["Content-Type"]=e.Body&&e.Body.type||"");var a=e.Body&&(e.UploadAddMetaMd5||n.options.UploadAddMetaMd5);a&&o&&o.setParams({md5StartTime:(new Date).getTime()}),i.getBodyMd5(a,e.Body,(function(r){r&&(e.Headers["x-cos-meta-md5"]=r),a&&o&&o.setParams({md5EndTime:(new Date).getTime()}),f.call(n,{Action:"name/cos:InitiateMultipartUpload",method:"POST",Bucket:e.Bucket,Region:e.Region,Key:e.Key,action:"uploads",headers:e.Headers,qs:e.Query,tracker:o},(function(e,n){return e?(o&&o.parent&&o.parent.setParams({errorNode:"multipartInit"}),t(e)):(n=i.clone(n||{}))&&n.InitiateMultipartUploadResult?t(null,i.extend(n.InitiateMultipartUploadResult,{statusCode:n.statusCode,headers:n.headers})):void t(null,n)}))}),e.onHashProgress)},multipartUpload:function(e,t){var n=this;i.getFileSize("multipartUpload",e,(function(){var r=e.tracker,o=n.options.UploadCheckContentMd5;o&&r&&r.setParams({md5StartTime:(new Date).getTime()}),i.getBodyMd5(o,e.Body,(function(a){a&&(e.Headers["Content-MD5"]=i.b64(a)),o&&r&&r.setParams({md5EndTime:(new Date).getTime()}),r&&r.setParams({partNumber:e.PartNumber}),f.call(n,{Action:"name/cos:UploadPart",TaskId:e.TaskId,method:"PUT",Bucket:e.Bucket,Region:e.Region,Key:e.Key,qs:{partNumber:e.PartNumber,uploadId:e.UploadId},headers:e.Headers,onProgress:e.onProgress,body:e.Body||null,tracker:r},(function(e,n){if(e)return r&&r.parent&&r.parent.setParams({errorNode:"multipartUpload"}),t(e);t(null,{ETag:i.attr(n.headers,"etag",""),statusCode:n.statusCode,headers:n.headers})}))}))}))},multipartComplete:function(e,t){for(var n=this,r=e.UploadId,o=e.Parts,a=e.tracker,s=0,c=o.length;s-1?function(e){var t=e.match(/q-url-param-list.*?(?=&)/g)[0],n="q-url-param-list="+encodeURIComponent(t.replace(/q-url-param-list=/,"")).toLowerCase(),r=new RegExp(t,"g");return e.replace(r,n)}(n.Authorization):"sign="+encodeURIComponent(n.Authorization)),n.SecurityToken&&(r+="&x-cos-security-token="+n.SecurityToken),n.ClientIP&&(r+="&clientIP="+n.ClientIP),n.ClientUA&&(r+="&clientUA="+n.ClientUA),n.Token&&(r+="&token="+n.Token),a&&(r+="&"+a),setTimeout((function(){t(null,{Url:r})}))}}));return p?(s+="?"+p.Authorization+(p.SecurityToken?"&x-cos-security-token="+p.SecurityToken:""),a&&(s+="&"+a)):a&&(s+="?"+a),s},getAuth:function(e){return i.getAuth({SecretId:e.SecretId||this.options.SecretId||"",SecretKey:e.SecretKey||this.options.SecretKey||"",Bucket:e.Bucket,Region:e.Region,Method:e.Method,Key:e.Key,Query:e.Query,Headers:e.Headers,Expires:e.Expires,UseRawKey:this.options.UseRawKey,SystemClockOffset:this.options.SystemClockOffset})}};e.exports.init=function(e,t){t.transferToTaskMethod(m,"putObject"),i.each(m,(function(t,n){e.prototype[n]=i.apiWrapper(n,t),function(e,t,n){i.each(["Cors","Acl"],(function(r){if(e.slice(-r.length)===r){var o=e.slice(0,-r.length)+r.toUpperCase(),a=i.apiWrapper(e,t);n[o]=function(){a.apply(this,arguments)}}}))}(n,t,e.prototype)}))}},function(e,t,n){var r=n(0),o=function(e){switch(r(e)){case"string":return e;case"boolean":return e?"true":"false";case"number":return isFinite(e)?e:"";default:return""}},i=function(e,t,n){var r={};return t.getAllResponseHeaders().trim().split("\n").forEach((function(e){if(e){var t=e.indexOf(":"),n=e.substr(0,t).trim().toLowerCase(),o=e.substr(t+1).trim();r[n]=o}})),{error:e,statusCode:t.status,statusMessage:t.statusText,headers:r,body:n}},a=function(e,t){return t||"text"!==t?e.response:e.responseText};e.exports=function(e,t){var n,s,c,u,l=(e.method||"GET").toUpperCase(),d=e.url;if(e.qs){var p=(n=e.qs,s=s||"&",c=c||"=",null===n&&(n=void 0),"object"===r(n)?Object.keys(n).map((function(e){var t=encodeURIComponent(o(e))+c;return Array.isArray(n[e])?n[e].map((function(e){return t+encodeURIComponent(o(e))})).join(s):t+encodeURIComponent(o(n[e]))})).filter(Boolean).join(s):u?encodeURIComponent(o(u))+c+encodeURIComponent(o(n)):"");p&&(d+=(-1===d.indexOf("?")?"?":"&")+p)}var f=new XMLHttpRequest;if(f.open(l,d,!0),f.responseType=e.dataType||"text",e.xhrFields)for(var h in e.xhrFields)f[h]=e.xhrFields[h];var m=e.headers;if(m)for(var g in m)m.hasOwnProperty(g)&&"content-length"!==g.toLowerCase()&&"user-agent"!==g.toLowerCase()&&"origin"!==g.toLowerCase()&&"host"!==g.toLowerCase()&&f.setRequestHeader(g,m[g]);return e.onProgress&&f.upload&&(f.upload.onprogress=e.onProgress),e.onDownloadProgress&&(f.onprogress=e.onDownloadProgress),e.timeout&&(f.timeout=e.timeout),f.ontimeout=function(e){var n=new Error("timeout");t(i(n,f))},f.onload=function(){t(i(null,f,a(f,e.dataType)))},f.onerror=function(n){var r=a(f,e.dataType);if(r)t(i(null,f,r));else{var o=f.statusText;o||0!==f.status||(o=new Error("CORS blocked or network error")),t(i(o,f,r))}},f.send(e.body||""),f}},function(e,t,n){var r=n(0),o=n(9),i=n(30),a=n(8).EventProxy,s=n(1),c=n(6);function u(e,t){var n=e.TaskId,r=e.Bucket,c=e.Region,u=e.Key,p=e.StorageClass,f=this,h={},m=e.FileSize,g=e.SliceSize,y=Math.ceil(m/g),v=0,C=s.throttleOnProgress.call(f,m,e.onHashProgress),k=function(t,n){var r=t.length;if(0===r)return n(null,!0);if(r>y)return n(null,!1);if(r>1&&Math.max(t[0].Size,t[1].Size)!==g)return n(null,!1);!function o(i){if(i=a.length)S.emit("has_and_check_upload_id",t);else{var p=a[l];if(!s.isInArray(t,p))return o.removeUploadId.call(f,p),void i(l+1);o.using[p]?i(l+1):d.call(f,{Bucket:r,Region:c,Key:u,UploadId:p,tracker:e.tracker},(function(e,t){f._isRunningTask(n)&&(e?(o.removeUploadId.call(f,p),i(l+1)):S.emit("upload_id_available",{UploadId:p,PartList:t.PartList}))}))}}(0)}else S.emit("has_and_check_upload_id",t)})),S.on("get_remote_upload_id_list",(function(){l.call(f,{Bucket:r,Region:c,Key:u,tracker:e.tracker},(function(t,i){if(f._isRunningTask(n)){if(t)return S.emit("error",t);var a=s.filter(i.UploadList,(function(e){return e.Key===u&&(!p||e.StorageClass.toUpperCase()===p.toUpperCase())})).reverse().map((function(e){return e.UploadId||e.UploadID}));if(a.length)S.emit("seek_local_avail_upload_id",a);else{var c,l=o.getFileId(e.Body,e.ChunkSize,r,u);l&&(c=o.getUploadIdList.call(f,l))&&s.each(c,(function(e){o.removeUploadId.call(f,e)})),S.emit("no_available_upload_id")}}}))})),S.emit("get_remote_upload_id_list")}function l(e,t){var n=this,r=[],o={Bucket:e.Bucket,Region:e.Region,Prefix:e.Key,calledBySdk:e.calledBySdk||"sliceUploadFile",tracker:e.tracker};!function e(){n.multipartList(o,(function(n,i){if(n)return t(n);r.push.apply(r,i.Upload||[]),"true"===i.IsTruncated?(o.KeyMarker=i.NextKeyMarker,o.UploadIdMarker=i.NextUploadIdMarker,e()):t(null,{UploadList:r})}))}()}function d(e,t){var n=this,r=[],o={Bucket:e.Bucket,Region:e.Region,Key:e.Key,UploadId:e.UploadId,calledBySdk:"sliceUploadFile",tracker:e.tracker};!function e(){n.multipartListPart(o,(function(n,i){if(n)return t(n);r.push.apply(r,i.Part||[]),"true"===i.IsTruncated?(o.PartNumberMarker=i.NextPartNumberMarker,e()):t(null,{PartList:r})}))}()}function p(e,t){var n=this,r=e.TaskId,o=e.Bucket,a=e.Region,c=e.Key,u=e.UploadData,l=e.FileSize,d=e.SliceSize,p=Math.min(e.AsyncLimit||n.options.ChunkParallelLimit||1,256),h=e.Body,m=Math.ceil(l/d),g=0,y=e.ServerSideEncryption,v=e.Headers,C=s.filter(u.PartList,(function(e){return e.Uploaded&&(g+=e.PartNumber>=m&&l%d||d),!e.Uploaded})),k=e.onProgress;i.eachLimit(C,p,(function(t,i){if(n._isRunningTask(r)){var s=t.PartNumber,p=Math.min(l,t.PartNumber*d)-(t.PartNumber-1)*d,m=0;f.call(n,{TaskId:r,Bucket:o,Region:a,Key:c,SliceSize:d,FileSize:l,PartNumber:s,ServerSideEncryption:y,Body:h,UploadData:u,Headers:v,onProgress:function(e){g+=e.loaded-m,m=e.loaded,k({loaded:g,total:l})},tracker:e.tracker},(function(e,o){n._isRunningTask(r)&&(e||o.ETag||(e='get ETag error, please add "ETag" to CORS ExposeHeader setting.( 获取ETag失败,请在CORS ExposeHeader设置中添加ETag,请参考文档:https://cloud.tencent.com/document/product/436/13318 )'),e?g-=m:(g+=p-m,t.ETag=o.ETag),k({loaded:g,total:l}),i(e||null,o))}))}}),(function(e){if(n._isRunningTask(r))return e?t(e):void t(null,{UploadId:u.UploadId,SliceList:u.PartList})}))}function f(e,t){var n=this,r=e.TaskId,o=e.Bucket,a=e.Region,c=e.Key,u=e.FileSize,l=e.Body,d=1*e.PartNumber,p=e.SliceSize,f=e.ServerSideEncryption,h=e.UploadData,m=e.Headers||{},g=n.options.ChunkRetryTimes+1,y=p*(d-1),v=p,C=y+p;C>u&&(v=(C=u)-y);var k=["x-cos-traffic-limit","x-cos-mime-limit"],S={};s.each(m,(function(e,t){k.indexOf(t)>-1&&(S[t]=e)}));var b=h.PartList[d-1];i.retry(g,(function(t){n._isRunningTask(r)&&s.fileSlice(l,y,C,!0,(function(i){n.multipartUpload({TaskId:r,Bucket:o,Region:a,Key:c,ContentLength:v,PartNumber:d,UploadId:h.UploadId,ServerSideEncryption:f,Body:i,Headers:S,onProgress:e.onProgress,calledBySdk:"sliceUploadFile",tracker:e.tracker},(function(e,o){if(n._isRunningTask(r))return e?t(e):(b.Uploaded=!0,t(null,o))}))}))}),(function(e,o){if(n._isRunningTask(r))return t(e,o)}))}function h(e,t){var n=e.Bucket,r=e.Region,o=e.Key,a=e.UploadId,s=e.SliceList,c=this,u=this.options.ChunkRetryTimes+1,l=e.Headers,d=s.map((function(e){return{PartNumber:e.PartNumber,ETag:e.ETag}}));i.retry(u,(function(t){c.multipartComplete({Bucket:n,Region:r,Key:o,UploadId:a,Parts:d,Headers:l,calledBySdk:"sliceUploadFile",tracker:e.tracker},t)}),(function(e,n){t(e,n)}))}function m(e,t){var n=e.Bucket,r=e.Region,o=e.Key,a=e.AbortArray,s=e.AsyncLimit||1,c=this,u=0,l=new Array(a.length);i.eachLimit(a,s,(function(t,i){var a=u;if(o&&o!==t.Key)return l[a]={error:{KeyNotMatch:!0}},void i(null);var s=t.UploadId||t.UploadID;c.multipartAbort({Bucket:n,Region:r,Key:t.Key,Headers:e.Headers,UploadId:s},(function(e){var o={Bucket:n,Region:r,Key:t.Key,UploadId:s};l[a]={error:e,task:o},i(null)})),u++}),(function(e){if(e)return t(e);for(var n=[],r=[],o=0,i=l.length;oo?"sliceUploadFile":"putObject",h=e.onFileFinish;i.push({api:f,params:e,callback:function(n,r){e.tracker&&e.tracker.formatResult(n,r),h&&h(n,r,l),t&&t(n,r)}}),n._addTasks(i)},uploadFiles:function(e,t){var n=this,o=void 0===e.SliceSize?n.options.SliceSize:e.SliceSize,i=0,a=0,u=s.throttleOnProgress.call(n,a,e.onProgress),l=e.files.length,d=e.onFileFinish,p=Array(l),f=function(e,n,r){u(null,!0),d&&d(e,n,r),p[r.Index]={options:r,error:e,data:n},--l<=0&&t&&t(null,{files:p})},h=[];s.each(e.files,(function(e,t){!function(){var l=e.Body,d=l.size||l.length||0,p={Index:t,TaskId:""};if(i+=d,n.options.EnableTracker){var m=n.options.UseAccelerate||"string"==typeof n.options.Domain&&n.options.Domain.includes("accelerate.");e.tracker=new c({bucket:e.Bucket,region:e.Region,apiName:"uploadFiles",fileKey:e.Key,fileSize:d,accelerate:m,deepTracker:n.options.DeepTracker,customId:n.options.CustomId,delay:n.options.TrackerDelay})}s.each(e,(function(e,t){"object"!==r(e)&&"function"!=typeof e&&(p[t]=e)}));var g=e.onTaskReady;e.onTaskReady=function(e){p.TaskId=e,g&&g(e)};var y=0,v=e.onProgress;e.onProgress=function(e){a=a-y+e.loaded,y=e.loaded,v&&v(e),u({loaded:a,total:i})};var C=d>o?"sliceUploadFile":"putObject",k=e.onFileFinish;h.push({api:C,params:e,callback:function(t,n){e.tracker&&e.tracker.formatResult(t,n),k&&k(t,n),f&&f(t,n,p)}})}()})),n._addTasks(h)},sliceCopyFile:function(e,t){var n=new a,r=this,c=e.Bucket,u=e.Region,l=e.Key,p=e.CopySource,f=s.getSourceParams.call(this,p);if(f){var h=f.Bucket,m=f.Region,y=decodeURIComponent(f.Key),v=void 0===e.CopySliceSize?r.options.CopySliceSize:e.CopySliceSize;v=Math.max(0,v);var C,k,S=e.CopyChunkSize||this.options.CopyChunkSize,b=this.options.CopyChunkParallelLimit,T=this.options.ChunkRetryTimes+1,R=0,E=0,w={},A={},x={};n.on("copy_slice_complete",(function(n){var a={};s.each(e.Headers,(function(e,t){0===t.toLowerCase().indexOf("x-cos-meta-")&&(a[t]=e)}));var d=s.map(n.PartList,(function(e){return{PartNumber:e.PartNumber,ETag:e.ETag}}));i.retry(T,(function(e){r.multipartComplete({Bucket:c,Region:u,Key:l,UploadId:n.UploadId,Parts:d,calledBySdk:"sliceCopyFile"},e)}),(function(e,r){if(o.removeUsing(n.UploadId),e)return k(null,!0),t(e);o.removeUploadId(n.UploadId),k({loaded:C,total:C},!0),t(null,r)}))})),n.on("get_copy_data_finish",(function(e){var a=o.getCopyFileId(p,w,S,c,l);a&&o.saveUploadId(a,e.UploadId,r.options.UploadIdCacheLimit),o.setUsing(e.UploadId);var d=s.filter(e.PartList,(function(e){return e.Uploaded&&(E+=e.PartNumber>=R&&C%S||S),!e.Uploaded}));i.eachLimit(d,b,(function(t,n){var o=t.PartNumber,a=t.CopySourceRange,s=t.end-t.start;i.retry(T,(function(t){g.call(r,{Bucket:c,Region:u,Key:l,CopySource:p,UploadId:e.UploadId,PartNumber:o,CopySourceRange:a},t)}),(function(e,r){if(e)return n(e);k({loaded:E+=s,total:C}),t.ETag=r.ETag,n(e||null,r)}))}),(function(r){if(r)return o.removeUsing(e.UploadId),k(null,!0),t(r);n.emit("copy_slice_complete",e)}))})),n.on("get_chunk_size_finish",(function(){var i=function(){r.multipartInit({Bucket:c,Region:u,Key:l,Headers:x},(function(r,o){if(r)return t(r);e.UploadId=o.UploadId,n.emit("get_copy_data_finish",{UploadId:e.UploadId,PartList:e.PartList})}))},a=o.getCopyFileId(p,w,S,c,l),f=o.getUploadIdList(a);if(!a||!f)return i();!function t(a){if(a>=f.length)return i();var p=f[a];if(o.using[p])return t(a+1);d.call(r,{Bucket:c,Region:u,Key:l,UploadId:p},(function(r,i){if(r)o.removeUploadId(p),t(a+1);else{if(o.using[p])return t(a+1);var c={},u=0;s.each(i.PartList,(function(e){var t=parseInt(e.Size),n=u+t-1;c[e.PartNumber+"|"+u+"|"+n]=e.ETag,u+=t})),s.each(e.PartList,(function(e){var t=c[e.PartNumber+"|"+e.start+"|"+e.end];t&&(e.ETag=t,e.Uploaded=!0)})),n.emit("get_copy_data_finish",{UploadId:p,PartList:e.PartList})}}))}(0)})),n.on("get_file_size_finish",(function(){if(function(){for(var t=[1,2,4,8,16,32,64,128,256,512,1024,2048,4096,5120],n=1048576,o=0;o11&&(A[t]=e)})),n.emit("get_file_size_finish")}else t(s.error(new Error('get Content-Length error, please add "Content-Length" to CORS ExposeHeader setting.( 获取Content-Length失败,请在CORS ExposeHeader设置中添加Content-Length,请参考文档:https://cloud.tencent.com/document/product/436/13318 )')))}))}else t(s.error(new Error("CopySource format error")))}};e.exports.init=function(e,t){t.transferToTaskMethod(y,"sliceUploadFile"),s.each(y,(function(t,n){e.prototype[n]=s.apiWrapper(n,t)}))}},function(e,t){var n={eachLimit:function(e,t,n,r){if(r=r||function(){},!e.length||t<=0)return r();var o=0,i=0,a=0;!function s(){if(o>=e.length)return r();for(;a=e.length?r():s())}))}()},retry:function(e,t,n){e<1?n():function r(o){t((function(t,i){t&&o string; xml2json: (bodyStr: string) => any; json2xml: (json: any) => string; + encodeBase64: (str: string, safe?: boolean) => string; } interface StaticGetAuthorizationOptions { @@ -1506,7 +1507,13 @@ Bulk:批量模式,恢复时间为24 - 48小时。 */ 'x-cos-meta-*'?: string; } /** putObjectCopy 接口返回值 */ - interface PutObjectCopyResult extends GeneralResult {} + interface PutObjectCopyResult extends GeneralResult { + ETag: string; + CRC64: string; + LastModified: string; + VersionId: string; + Location: Location; + } // putObjectTagging /** putObjectTagging 接口参数 */ diff --git a/lib/base64.js b/lib/base64.js new file mode 100644 index 0000000..fa89ffd --- /dev/null +++ b/lib/base64.js @@ -0,0 +1,170 @@ +/* + * $Id: base64.js,v 2.15 2014/04/05 12:58:57 dankogai Exp dankogai $ + * + * Licensed under the BSD 3-Clause License. + * http://opensource.org/licenses/BSD-3-Clause + * + * References: + * http://en.wikipedia.org/wiki/Base64 + */ + +var Base64 = (function(global) { + global = global || {}; + 'use strict'; + // existing version for noConflict() + var _Base64 = global.Base64; + var version = "2.1.9"; + // if node.js, we use Buffer + var buffer; + // constants + var b64chars + = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; + var b64tab = function(bin) { + var t = {}; + for (var i = 0, l = bin.length; i < l; i++) t[bin.charAt(i)] = i; + return t; + }(b64chars); + var fromCharCode = String.fromCharCode; + // encoder stuff + var cb_utob = function(c) { + if (c.length < 2) { + var cc = c.charCodeAt(0); + return cc < 0x80 ? c + : cc < 0x800 ? (fromCharCode(0xc0 | (cc >>> 6)) + + fromCharCode(0x80 | (cc & 0x3f))) + : (fromCharCode(0xe0 | ((cc >>> 12) & 0x0f)) + + fromCharCode(0x80 | ((cc >>> 6) & 0x3f)) + + fromCharCode(0x80 | ( cc & 0x3f))); + } else { + var cc = 0x10000 + + (c.charCodeAt(0) - 0xD800) * 0x400 + + (c.charCodeAt(1) - 0xDC00); + return (fromCharCode(0xf0 | ((cc >>> 18) & 0x07)) + + fromCharCode(0x80 | ((cc >>> 12) & 0x3f)) + + fromCharCode(0x80 | ((cc >>> 6) & 0x3f)) + + fromCharCode(0x80 | ( cc & 0x3f))); + } + }; + var re_utob = /[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g; + var utob = function(u) { + return u.replace(re_utob, cb_utob); + }; + var cb_encode = function(ccc) { + var padlen = [0, 2, 1][ccc.length % 3], + ord = ccc.charCodeAt(0) << 16 + | ((ccc.length > 1 ? ccc.charCodeAt(1) : 0) << 8) + | ((ccc.length > 2 ? ccc.charCodeAt(2) : 0)), + chars = [ + b64chars.charAt( ord >>> 18), + b64chars.charAt((ord >>> 12) & 63), + padlen >= 2 ? '=' : b64chars.charAt((ord >>> 6) & 63), + padlen >= 1 ? '=' : b64chars.charAt(ord & 63) + ]; + return chars.join(''); + }; + var btoa = global.btoa ? function(b) { + return global.btoa(b); + } : function(b) { + return b.replace(/[\s\S]{1,3}/g, cb_encode); + }; + var _encode = buffer ? function (u) { + return (u.constructor === buffer.constructor ? u : new buffer(u)) + .toString('base64') + } + : function (u) { return btoa(utob(u)) } + ; + var encode = function(u, urisafe) { + return !urisafe + ? _encode(String(u)) + : _encode(String(u)).replace(/[+\/]/g, function(m0) { + return m0 == '+' ? '-' : '_'; + }).replace(/=/g, ''); + }; + var encodeURI = function(u) { return encode(u, true) }; + // decoder stuff + var re_btou = new RegExp([ + '[\xC0-\xDF][\x80-\xBF]', + '[\xE0-\xEF][\x80-\xBF]{2}', + '[\xF0-\xF7][\x80-\xBF]{3}' + ].join('|'), 'g'); + var cb_btou = function(cccc) { + switch(cccc.length) { + case 4: + var cp = ((0x07 & cccc.charCodeAt(0)) << 18) + | ((0x3f & cccc.charCodeAt(1)) << 12) + | ((0x3f & cccc.charCodeAt(2)) << 6) + | (0x3f & cccc.charCodeAt(3)), + offset = cp - 0x10000; + return (fromCharCode((offset >>> 10) + 0xD800) + + fromCharCode((offset & 0x3FF) + 0xDC00)); + case 3: + return fromCharCode( + ((0x0f & cccc.charCodeAt(0)) << 12) + | ((0x3f & cccc.charCodeAt(1)) << 6) + | (0x3f & cccc.charCodeAt(2)) + ); + default: + return fromCharCode( + ((0x1f & cccc.charCodeAt(0)) << 6) + | (0x3f & cccc.charCodeAt(1)) + ); + } + }; + var btou = function(b) { + return b.replace(re_btou, cb_btou); + }; + var cb_decode = function(cccc) { + var len = cccc.length, + padlen = len % 4, + n = (len > 0 ? b64tab[cccc.charAt(0)] << 18 : 0) + | (len > 1 ? b64tab[cccc.charAt(1)] << 12 : 0) + | (len > 2 ? b64tab[cccc.charAt(2)] << 6 : 0) + | (len > 3 ? b64tab[cccc.charAt(3)] : 0), + chars = [ + fromCharCode( n >>> 16), + fromCharCode((n >>> 8) & 0xff), + fromCharCode( n & 0xff) + ]; + chars.length -= [0, 0, 2, 1][padlen]; + return chars.join(''); + }; + var atob = global.atob ? function(a) { + return global.atob(a); + } : function(a){ + return a.replace(/[\s\S]{1,4}/g, cb_decode); + }; + var _decode = buffer ? function(a) { + return (a.constructor === buffer.constructor + ? a : new buffer(a, 'base64')).toString(); + } + : function(a) { return btou(atob(a)) }; + var decode = function(a){ + return _decode( + String(a).replace(/[-_]/g, function(m0) { return m0 == '-' ? '+' : '/' }) + .replace(/[^A-Za-z0-9\+\/]/g, '') + ); + }; + var noConflict = function() { + var Base64 = global.Base64; + global.Base64 = _Base64; + return Base64; + }; + // export Base64 + var Base64 = { + VERSION: version, + atob: atob, + btoa: btoa, + fromBase64: decode, + toBase64: encode, + utob: utob, + encode: encode, + encodeURI: encodeURI, + btou: btou, + decode: decode, + noConflict: noConflict + }; + return Base64; +})(); + +module.exports = Base64; + diff --git a/package.json b/package.json index d7526a6..fb90ddf 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cos-js-sdk-v5", - "version": "1.4.18", + "version": "1.4.19", "description": "JavaScript SDK for [腾讯云对象存储](https://cloud.tencent.com/product/cos)", "main": "dist/cos-js-sdk-v5.js", "types": "index.d.ts", @@ -36,7 +36,7 @@ "express": "^4.16.4", "jest": "^29.3.1", "jest-environment-jsdom": "^29.3.1", - "prettier": "2.8.8", + "prettier": "^3.0.1", "qcloud-cos-sts": "^3.0.2", "request": "^2.87.0", "terser-webpack-plugin": "4.2.3", diff --git a/src/cos.js b/src/cos.js index 8e1b60f..69918b2 100644 --- a/src/cos.js +++ b/src/cos.js @@ -87,6 +87,7 @@ COS.util = { md5: util.md5, xml2json: util.xml2json, json2xml: util.json2xml, + encodeBase64: util.encodeBase64, }; COS.getAuthorization = util.getAuth; COS.version = pkg.version; diff --git a/src/util.js b/src/util.js index c9e4d7e..ee65e43 100644 --- a/src/util.js +++ b/src/util.js @@ -4,6 +4,7 @@ var md5 = require('../lib/md5'); var CryptoJS = require('../lib/crypto'); var xml2json = require('../lib/xml2json'); var json2xml = require('../lib/json2xml'); +var base64 = require('../lib/base64'); var Tracker = require('./tracker'); function camSafeUrlEncode(str) { @@ -825,6 +826,15 @@ var isQQ = (function () { return /\sQQ/i.test(navigator.userAgent); })(); +var encodeBase64 = function (str, safe) { + let base64Str = base64.encode(str); + // 万象使用的安全base64格式需要特殊处理 + if (safe) { + base64Str = base64Str.replaceAll('+', '-').replaceAll('/', '_').replaceAll('=', ''); + } + return base64Str; +}; + var util = { noop: noop, formatParams: formatParams, @@ -860,6 +870,7 @@ var util = { isNode: isNode, isCIHost: isCIHost, isIOS_QQ: isIOS && isQQ, + encodeBase64: encodeBase64, }; module.exports = util; diff --git a/test/test.js b/test/test.js index 8d810d5..a89524b 100644 --- a/test/test.js +++ b/test/test.js @@ -3462,7 +3462,8 @@ group('params check Region', function () { group('Key 特殊字符处理', function () { test('Key 特殊字符处理', function (done) { - var Key = "中文→↓←→↖↗↙↘! $&'()+,-.0123456789=@ABCDEFGHIJKLMNOPQRSTUV?WXYZ[]^_`abcdefghijklmnopqrstuvwxyz{}~.jpg"; + var Key = + "中文→↓←→↖↗↙↘! $&'()+,-.0123456789=@ABCDEFGHIJKLMNOPQRSTUV?WXYZ[]^_`abcdefghijklmnopqrstuvwxyz{}~.jpg"; cos.putObject( { Bucket: config.Bucket, From 8c09e451bb8aa1a0073b99804bbc9f315e04b1ef Mon Sep 17 00:00:00 2001 From: chrisftian Date: Thu, 10 Aug 2023 16:33:00 +0800 Subject: [PATCH 05/11] dev/1.4.20 (merge request !17) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Squash merge branch 'dev/1.4.20' into 'master' fix: 处理uploadFiles里的Key 去掉开头的/ --- demo/ciDemo.js | 261 +- demo/index.html | 544 +- dist/cos-js-sdk-v5.js | 9 +- dist/cos-js-sdk-v5.min.js | 9811 ++++++++++++++++++++++++++++++++++++- package.json | 2 +- src/advance.js | 5 + 6 files changed, 10241 insertions(+), 391 deletions(-) diff --git a/demo/ciDemo.js b/demo/ciDemo.js index 5d46ec6..f3e4dae 100644 --- a/demo/ciDemo.js +++ b/demo/ciDemo.js @@ -1,4 +1,3 @@ - var TaskId; function getObjectUrl() { @@ -37,109 +36,14 @@ function request() { ); } -function CIExample1() { - util.selectLocalFile(function (files) { - var file = files && files[0]; - if (!file) return; - if (file.type.indexOf('image') < 0) { - logger.error('Please select a photo to upload!'); - return; - } - if (file.size > 1024 * 1024) { - cos.sliceUploadFile( - { - Bucket: config.Bucket, // Bucket 格式:test-1250000000 - Region: config.Region, - Key: file.name, - Body: file, - Headers: { - // 通过 imageMogr2 接口使用图片缩放功能:指定图片宽度为 200,宽度等比压缩 - 'Pic-Operations': - '{"is_pic_info": 1, "rules": [{"fileid": "desample_photo.jpg", "rule": "imageMogr2/thumbnail/200x/"}]}', - }, - onTaskReady: function (tid) { - TaskId = tid; - }, - onHashProgress: function (progressData) { - logger.log('onHashProgress', JSON.stringify(progressData)); - }, - onProgress: function (progressData) { - logger.log('onProgress', JSON.stringify(progressData)); - }, - }, - function (err, data) { - logger.log('CIExample1:', err || data); - }, - ); - } else { - cos.putObject( - { - Bucket: config.Bucket, // Bucket 格式:test-1250000000 - Region: config.Region, - Key: file.name, - Body: file, - Headers: { - // 通过 imageMogr2 接口使用图片缩放功能:指定图片宽度为 200,宽度等比压缩 - 'Pic-Operations': - '{"is_pic_info": 1, "rules": [{"fileid": "desample_photo.jpg", "rule": "imageMogr2/thumbnail/200x/"}]}', - }, - onTaskReady: function (tid) { - TaskId = tid; - }, - onHashProgress: function (progressData) { - logger.log('onHashProgress', JSON.stringify(progressData)); - }, - onProgress: function (progressData) { - logger.log('onProgress', JSON.stringify(progressData)); - }, - }, - function (err, data) { - logger.log('CIExample1:', err || data); - }, - ); - } - }); -} -function CIExample2() { - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Key: 'photo.png', - Method: 'POST', - Action: 'image_process', - Headers: { - // 通过 imageMogr2 接口使用图片缩放功能:指定图片宽度为 200,宽度等比压缩 - 'Pic-Operations': - '{"is_pic_info": 1, "rules": [{"fileid": "desample_photo.jpg", "rule": "imageMogr2/thumbnail/200x/"}]}', - }, - }, - function (err, data) { - logger.log('CIExample2:', err || data); - }, - ); -} -function CIExample3() { - cos.getObject( - { - Bucket: config.Bucket, - Region: config.Region, - Key: 'photo.png', - QueryString: `imageMogr2/thumbnail/200x/`, - }, - function (err, data) { - logger.log('CIExample3:', err || data); - }, - ); -} -function CIExample4() { +function getImageUrl() { // 生成带图片处理参数的文件签名URL,过期时间设置为 30 分钟。 cos.getObjectUrl( { Bucket: config.Bucket, Region: config.Region, - Key: 'photo.png', - QueryString: `imageMogr2/thumbnail/200x/`, + Key: '02.png', + Query: { 'imageMogr2/thumbnail/200x/': '' }, Expires: 1800, Sign: true, }, @@ -281,7 +185,7 @@ function postImagesAuditing() { Region: config.Region, Method: 'POST', Url: url, - Key: '/image/auditing', + Key: 'image/auditing', ContentType: 'application/xml', Body: body, }, @@ -310,6 +214,37 @@ function getImageAuditingResult() { ); } +// 反馈处理结果 +function reportBadCase() { + const host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; + const key = 'report/badcase'; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + ContentType: 2, + Url: 'https://example.com/desample_photo.jpg', + Label: 'Porn', + SuggestedLabel: 'Normal', + // JobId: '', + // ModerationTime: '', + }, + }); + cos.request( + { + Bucket: config.Bucket, + Region: config.Region, + Method: 'POST', + Url: url, + Key: key, + ContentType: 'application/xml', + Body: body, + }, + function (err, data) { + logger.log(err || data); + }, + ); +} + // 提交视频审核任务 function postVideoAuditing() { var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; @@ -595,6 +530,26 @@ function postLiveAuditing() { ); } +// 取消直播审核 +function cancelLiveAuditing() { + const host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; + const jobId = 'av8088af71359c11eeb17c525400941xxx'; + const key = `video/cancel_auditing/${jobId}`; + const url = `https://${host}/${key}`; + cos.request( + { + Bucket: config.Bucket, + Region: config.Region, + Method: 'POST', + Url: url, + Key: key, + }, + function (err, data) { + logger.log(err || data); + }, + ); +} + // 查询直播审核任务结果 function getLiveAuditingResult() { var jobId = 'av0ca69557bd6111ed904c5254009411xx'; // jobId可以通过提交直播审核任务返回 @@ -646,8 +601,7 @@ function getDocPreview() { Key: '1/文档.docx', Query: { 'ci-process': 'doc-preview', // 必须,数据万象处理能力,文档预览固定为 doc-preview - srcType: - 'docx', // 非必须,源数据的后缀类型,当前文档转换根据 COS 对象的后缀名来确定源数据类型。当 COS 对象没有后缀名时,可以设置该值 + srcType: 'docx', // 非必须,源数据的后缀类型,当前文档转换根据 COS 对象的后缀名来确定源数据类型。当 COS 对象没有后缀名时,可以设置该值 // page: '', // 非必须,需转换的文档页码,默认从1开始计数;表格文件中 page 表示转换的第 X 个 sheet 的第 X 张图 // dstType: '', // 非必须,转换输出目标文件类型 }, @@ -681,7 +635,7 @@ function describeDocProcessQueues() { Url: url, Query: { // queueIds: '', // 非必须,队列 ID,以“,”符号分割字符串 - // state: '', // 非必须,1=Active,2=Paused + // state: '', // 非必须,1=Active,2=Paused // pageNumber: 1, // 非必须,第几页 // pageSize: 2, // 非必须,每页个数 }, @@ -694,7 +648,7 @@ function describeDocProcessQueues() { // 更新文档预览队列 function updateDocProcessQueue() { - // 任务所在的队列 ID,请使用查询队列(https://cloud.tencent.com/document/product/460/46946)获取或前往万象控制台(https://cloud.tencent.com/document/product/460/46487)在存储桶中查询 + // 任务所在的队列 ID,请使用查询队列(https://cloud.tencent.com/document/product/460/46946)获取或前往万象控制台(https://cloud.tencent.com/document/product/460/46487)在存储桶中查询 var queueId = 'pa2e2c3d3fae042de909cafc16f1d801b'; // 替换成自己的队列id var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/docqueue/' + queueId; var url = 'https://' + host; @@ -805,7 +759,7 @@ function getDocHtmlUrl() { 'ci-process': 'doc-preview', // 必须,数据万象处理能力,文档预览固定为 doc-preview // srcType: '', // 非必须,源数据的后缀类型,当前文档转换根据 COS 对象的后缀名来确定源数据类型。当 COS 对象没有后缀名时,可以设置该值 // page: '', // 非必须,需转换的文档页码,默认从1开始计数;表格文件中 page 表示转换的第 X 个 sheet 的第 X 张图 - dstType: 'html' // 非必须,转换输出目标文件类型 + dstType: 'html', // 非必须,转换输出目标文件类型 }, }, function (err, data) { @@ -899,7 +853,7 @@ function generateQrcode() { 'ci-process': 'qrcode-generate', // 必须,对象存储处理能力,二维码生成参数为 qrcode-generate 'qrcode-content': '二维码文案', // 必须,可识别的二维码文本信息 // mode: 0, // 非必须,生成的二维码类型,可选值:0或1。0为二维码,1为条形码,默认值为0 - width: 200 //必须,指定生成的二维码或条形码的宽度,高度会进行等比压缩 + width: 200, //必须,指定生成的二维码或条形码的宽度,高度会进行等比压缩 }, }, function (err, data) { @@ -1350,7 +1304,7 @@ function getAsrQueue() { // 更新语音识别队列 function putAsrQueue() { - // 任务所在的队列 ID,请使用查询队列(https://cloud.tencent.com/document/product/460/46946)获取或前往万象控制台(https://cloud.tencent.com/document/product/460/46487)在存储桶中查询 + // 任务所在的队列 ID,请使用查询队列(https://cloud.tencent.com/document/product/460/46946)获取或前往万象控制台(https://cloud.tencent.com/document/product/460/46487)在存储桶中查询 var queueId = 'pcc77499e85c311edb9865254008618d9'; var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/asrqueue/' + queueId; var url = 'https://' + host; @@ -1418,7 +1372,7 @@ function getDocHtmlPreviewUrl() { Query: { 'ci-process': 'doc-preview', // 必须,预览固定参数,值为 doc-preview dstType: 'html', // 必须,预览类型,如需预览生成类型为 html 则填入 html - weboffice_url: 1 // 非必须,是否获取预览链接。填入值为1会返回预览链接和Token信息;填入值为2只返回Token信息;不传会直接预览 + weboffice_url: 1, // 非必须,是否获取预览链接。填入值为1会返回预览链接和Token信息;填入值为2只返回Token信息;不传会直接预览 }, }, function (err, data) { @@ -1462,10 +1416,9 @@ function describeFileProcessQueues() { Url: url, Query: { // queueIds: '', // 非必须,队列 ID,以“,”符号分割字符串 - state: - 'Active', // 非必须,Active 表示队列内的作业会被调度执行。Paused 表示队列暂停,作业不再会被调度执行,队列内的所有作业状态维持在暂停状态,已经执行中的任务不受影响 + state: 'Active', // 非必须,Active 表示队列内的作业会被调度执行。Paused 表示队列暂停,作业不再会被调度执行,队列内的所有作业状态维持在暂停状态,已经执行中的任务不受影响 pageNumber: 1, // 第几页,默认值1 - pageSize: 10 // 非必须,每页个数,默认值10 + pageSize: 10, // 非必须,每页个数,默认值10 }, }, function (err, data) { @@ -1476,7 +1429,7 @@ function describeFileProcessQueues() { // 更新文件处理队列 function updateFileProcessQueue() { - // 任务所在的队列 ID,请使用查询队列(https://cloud.tencent.com/document/product/460/46946)获取或前往万象控制台(https://cloud.tencent.com/document/product/460/46487)在存储桶中查询 + // 任务所在的队列 ID,请使用查询队列(https://cloud.tencent.com/document/product/460/46946)获取或前往万象控制台(https://cloud.tencent.com/document/product/460/46487)在存储桶中查询 var queueId = 'p6160ada105a7408e95aac015f4bf8xxx'; var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/file_queue/' + queueId; var url = 'https://' + host; @@ -1641,8 +1594,8 @@ function closeImageGuetzli() { ); } -// 上传时使用图片压缩 -function advanceCompressExample1() { +// 上传时使用图片处理 +function uploadPicOperation() { util.selectLocalFile(function (files) { var file = files && files[0]; if (!file) return; @@ -1658,9 +1611,11 @@ function advanceCompressExample1() { Key: file.name, Body: file, Headers: { - // 通过 imageMogr2 接口进行 avif 压缩,可以根据需要压缩的类型填入不同的压缩格式:webp/heif/tpg/avif/svgc - 'Pic-Operations': - '{"is_pic_info": 1, "rules": [{"fileid": "desample_photo.jpg", "rule": "imageMogr2/format/avif"}]}', + // 通过 imageMogr2 接口使用图片缩放功能:指定图片宽度为 200,宽度等比压缩 + 'Pic-Operations': JSON.stringify({ + is_pic_info: 1, + rules: [{ fileid: 'desample_photo.jpg', rule: 'imageMogr2/thumbnail/200x/' }], + }), }, onTaskReady: function (tid) { TaskId = tid; @@ -1673,7 +1628,7 @@ function advanceCompressExample1() { }, }, function (err, data) { - logger.log('advanceCompressExample1:', err || data); + logger.log('uploadPicOperation:', err || data); }, ); } else { @@ -1699,30 +1654,45 @@ function advanceCompressExample1() { }, }, function (err, data) { - logger.log('advanceCompressExample1:', err || data); + logger.log('uploadPicOperation:', err || data); }, ); } }); } -// 对云上数据进行图片压缩 -function advanceCompressExample2() { +// 对云上数据处理 +function requestPicOperation() { + // 文字水印示例 + const text = '腾讯云万象优图'; + const color = '#3D3D3D'; + // 经过安全base64编码 使用 COS.util.encodeBase64 方法需要sdk版本至少为1.4.18 + const textBase64 = COS.util.encodeBase64(text, true); + const colorBase64 = COS.util.encodeBase64(color, true); + // 生成一个文字水印 + const waterMarkRule = `watermark/2/text/${textBase64}/fill/${colorBase64}/fontsize/20/dissolve/50/gravity/northeast/dx/20/dy/20/batch/1/degree/45`; + const picOperations = JSON.stringify({ + is_pic_info: 1, // 固定 + // fileid 设置和Key相同可实现只保留处理后的图片而不保留原图 + rules: [{ fileid: 'desample_photo.jpg', rule: waterMarkRule }], + }); + cos.request( { Bucket: config.Bucket, Region: config.Region, - Key: '1.png', - Method: 'POST', - Action: 'image_process', - Headers: { - // 通过 imageMogr2 接口进行 avif 压缩,可以根据需要压缩的类型填入不同的压缩格式:webp/heif/tpg/avif/svgc - 'Pic-Operations': - '{"is_pic_info": 1, "rules": [{"fileid": "desample_photo.jpg", "rule": "imageMogr2/format/avif"}]}', - }, + Key: '02.png', + Method: 'GET', + Action: 'exif', + RawBody: true, + // Headers: { + // // 通过 imageMogr2 接口使用图片缩放功能:指定图片宽度为 200,宽度等比压缩 + // 'Pic-Operations': picOperations, + // }, }, function (err, data) { - logger.log('advanceCompressExample2:', err || data); + const info = JSON.parse(data.Body); + logger.log('requestPicOperation:', err || data); }, ); } @@ -1754,7 +1724,7 @@ function createImageInspectJob() { Url: url, RawBody: true, Query: { - 'ci-process': 'ImageInspect' // 必须,操作类型,异常图片检测固定为:ImageInspect + 'ci-process': 'ImageInspect', // 必须,操作类型,异常图片检测固定为:ImageInspect }, }, function (err, data) { @@ -1782,8 +1752,7 @@ function describePicProcessQueues() { Url: url, Query: { // queueIds: '', // 非必须,队列 ID,以“,”符号分割字符串 - state: - 'Active', // 非必须,1. Active 表示队列内的作业会被媒体处理服务调度执行。2. Paused 表示队列暂停,作业不再会被媒体处理调度执行,队列内的所有作业状态维持在暂停状态,已经执行中的任务不受影响。 + state: 'Active', // 非必须,1. Active 表示队列内的作业会被媒体处理服务调度执行。2. Paused 表示队列暂停,作业不再会被媒体处理调度执行,队列内的所有作业状态维持在暂停状态,已经执行中的任务不受影响。 pageNumber: 1, // 非必须,第几页,默认值1 pageSize: 10, // 非必须,每页个数,默认值10 }, @@ -1796,7 +1765,7 @@ function describePicProcessQueues() { // 更新图片处理队列 function updatePicProcessQueue() { - // 任务所在的队列 ID,请使用查询队列(https://cloud.tencent.com/document/product/460/46946)获取或前往万象控制台(https://cloud.tencent.com/document/product/460/46487)在存储桶中查询 + // 任务所在的队列 ID,请使用查询队列(https://cloud.tencent.com/document/product/460/46946)获取或前往万象控制台(https://cloud.tencent.com/document/product/460/46487)在存储桶中查询 var queueId = 'p882d181160d84feca27d9376e17c4xxx'; var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/picqueue/' + queueId; var url = 'https://' + host; @@ -1957,18 +1926,15 @@ function postSnapshot() { (function () { var list = [ 'header-图片处理', - 'CIExample1', - 'CIExample2', - 'CIExample3', - 'CIExample4', + 'getImageUrl', 'addImageStyle', 'describeImageStyles', 'deleteImageStyle', 'openImageGuetzli', 'describeImageGuetzli', 'closeImageGuetzli', - 'advanceCompressExample1', - 'advanceCompressExample2', + 'uploadPicOperation', + 'requestPicOperation', 'advanceCompressExample3', 'createImageInspectJob', 'describePicProcessQueues', @@ -1987,6 +1953,7 @@ function postSnapshot() { 'getImageAuditing', 'postImagesAuditing', 'getImageAuditingResult', + 'reportBadCase', 'postVideoAuditing', 'getVideoAuditingResult', 'postAudioAuditing', @@ -1999,6 +1966,7 @@ function postSnapshot() { 'getWebpageAuditingResult', 'postLiveAuditing', 'getLiveAuditingResult', + 'cancelLiveAuditing', 'header-文档预览', 'describeDocProcessBuckets', @@ -2062,16 +2030,14 @@ function postSnapshot() { request: '通用请求接口', listFolder: '列出文件夹', deleteFolder: '删除文件夹(按前缀批量删除)', - CIExample1: '上传时使用图片处理', - CIExample2: '对云上数据进行图片处理', - CIExample3: '下载时使用图片处理', - CIExample4: '生成带图片处理参数的签名 URL', + getImageUrl: '生成带图片处理参数的签名 URL', describeMediaBuckets: '查询媒体处理开通情况', getMediaInfo: '获取媒体文件信息', getSnapshot: '获取媒体文件某个时间的截图', getImageAuditing: '图片同步审核', postImagesAuditing: '图片批量审核', getImageAuditingResult: '查询图片审核任务结果', + reportBadCase: '反馈处理结果', postVideoAuditing: '提交视频审核任务', getVideoAuditingResult: '查询视频审核任务结果', postAudioAuditing: '提交音频审核任务', @@ -2084,6 +2050,7 @@ function postSnapshot() { getWebpageAuditingResult: '查询网页审核任务结果', postLiveAuditing: '提交直播审核任务', getLiveAuditingResult: '查询直播审核任务结果', + cancelLiveAuditing: '取消直播审核任务', describeDocProcessBuckets: '查询文档预览开通状态', getDocPreview: '文档转码同步请求', describeDocProcessQueues: '查询文档转码队列', @@ -2123,9 +2090,9 @@ function postSnapshot() { openImageGuetzli: '开通 Guetzli 压缩', describeImageGuetzli: '查询 Guetzli 压缩', closeImageGuetzli: '关闭 Guetzli 压缩', - advanceCompressExample1: '上传时使用图片压缩', - advanceCompressExample2: '对云上数据进行图片压缩', - advanceCompressExample3: '下载时使用图片压缩', + uploadPicOperation: '上传时使用图片处理', + requestPicOperation: '对云上数据进行图片处理', + advanceCompressExample3: '下载时使用图片处理', createImageInspectJob: '异常图片检测', describePicProcessQueues: '查询图片处理队列', updatePicProcessQueue: '更新图片处理队列', diff --git a/demo/index.html b/demo/index.html index 3b14c6b..41dab86 100644 --- a/demo/index.html +++ b/demo/index.html @@ -1,267 +1,331 @@ - - - - + + + + cos-js-sdk-v5 - - - -
-

cos-js-sdk-v5 -
-
cos demo
ci demo
-
-

-
+ + +
+

+ cos-js-sdk-v5 +
+
cos demo
+
ci demo
+
+

+
-
-
+
+

+      
-
- - - - - + + - // config 替换成自己的存储桶和账号信息 - var config = { - Bucket: 'test-1250000000', - Region: 'ap-guangzhou', - Uin: '10001', - }; - var getAuthorization = function (options, callback) { - // 格式一、(推荐)后端通过获取临时密钥给到前端,前端计算签名 - // 服务端 JS 和 PHP 例子:https://github.com/tencentyun/cos-js-sdk-v5/blob/master/server/ - // 服务端其他语言参考 COS STS SDK :https://github.com/tencentyun/qcloud-cos-sts-sdk - var url = '/sts'; // 如果是 npm run sts.js 起的 nodejs server,使用这个 - var xhr = new XMLHttpRequest(); - xhr.open('POST', url, true); - xhr.setRequestHeader('Content-Type', 'application/json'); - xhr.onload = function (e) { - try { - var data = JSON.parse(e.target.responseText); - var credentials = data.credentials; - } catch (e) {} - if (!data || !credentials) { - return logger.error('credentials invalid:\n' + JSON.stringify(data, null, 2)); - } - callback({ - TmpSecretId: credentials.tmpSecretId, - TmpSecretKey: credentials.tmpSecretKey, - SecurityToken: credentials.sessionToken, - StartTime: data.startTime, // 时间戳,单位秒,如:1580000000,建议返回服务器时间作为签名的开始时间,避免用户浏览器本地时间偏差过大导致签名错误 - ExpiredTime: data.expiredTime, // 时间戳,单位秒,如:1580000000 - ScopeLimit: true, // 细粒度控制权限需要设为 true,会限制密钥只在相同请求时重复使用 + + showLogText(logStr); + }, + error: function (text) { + console.error(text); + showLogText(text, 'red'); + }, + }; - + /** + * 这里demo为了方便挂在了window上 实际使用请结合项目比如可使用模块导出 + * */ + window.config = config; + window.cos = cos; + window.util = util; + window.logger = logger; + window.camSafeUrlEncode = camSafeUrlEncode; + })(); + + diff --git a/dist/cos-js-sdk-v5.js b/dist/cos-js-sdk-v5.js index aa60054..0d9de5e 100644 --- a/dist/cos-js-sdk-v5.js +++ b/dist/cos-js-sdk-v5.js @@ -7109,7 +7109,7 @@ module.exports = function(module) { /*! exports provided: name, version, description, main, types, scripts, repository, keywords, author, license, bugs, homepage, dependencies, devDependencies, default */ /***/ (function(module) { -module.exports = JSON.parse("{\"name\":\"cos-js-sdk-v5\",\"version\":\"1.4.19\",\"description\":\"JavaScript SDK for [腾讯云对象存储](https://cloud.tencent.com/product/cos)\",\"main\":\"dist/cos-js-sdk-v5.js\",\"types\":\"index.d.ts\",\"scripts\":{\"prettier\":\"prettier --write src demo/demo.js test/test.js server/sts.js index.d.ts\",\"server\":\"node server/sts.js\",\"dev\":\"cross-env NODE_ENV=development webpack -w --mode=development\",\"build\":\"cross-env NODE_ENV=production webpack --mode=production\",\"cos-auth.min.js\":\"uglifyjs ./demo/common/cos-auth.js -o ./demo/common/cos-auth.min.js -c -m\",\"test\":\"jest --runInBand --coverage\"},\"repository\":{\"type\":\"git\",\"url\":\"git+https://github.com/tencentyun/cos-js-sdk-v5.git\"},\"keywords\":[],\"author\":\"carsonxu\",\"license\":\"ISC\",\"bugs\":{\"url\":\"https://github.com/tencentyun/cos-js-sdk-v5/issues\"},\"homepage\":\"https://github.com/tencentyun/cos-js-sdk-v5#readme\",\"dependencies\":{\"@xmldom/xmldom\":\"^0.8.6\"},\"devDependencies\":{\"@babel/core\":\"7.17.9\",\"@babel/plugin-transform-runtime\":\"7.18.10\",\"@babel/preset-env\":\"7.16.11\",\"babel-loader\":\"8.2.5\",\"body-parser\":\"^1.18.3\",\"cross-env\":\"^5.2.0\",\"express\":\"^4.16.4\",\"jest\":\"^29.3.1\",\"jest-environment-jsdom\":\"^29.3.1\",\"prettier\":\"^3.0.1\",\"qcloud-cos-sts\":\"^3.0.2\",\"request\":\"^2.87.0\",\"terser-webpack-plugin\":\"4.2.3\",\"uglifyjs\":\"^2.4.11\",\"webpack\":\"4.46.0\",\"webpack-cli\":\"4.10.0\"}}"); +module.exports = JSON.parse("{\"name\":\"cos-js-sdk-v5\",\"version\":\"1.4.20\",\"description\":\"JavaScript SDK for [腾讯云对象存储](https://cloud.tencent.com/product/cos)\",\"main\":\"dist/cos-js-sdk-v5.js\",\"types\":\"index.d.ts\",\"scripts\":{\"prettier\":\"prettier --write src demo/demo.js test/test.js server/sts.js index.d.ts\",\"server\":\"node server/sts.js\",\"dev\":\"cross-env NODE_ENV=development webpack -w --mode=development\",\"build\":\"cross-env NODE_ENV=production webpack --mode=production\",\"cos-auth.min.js\":\"uglifyjs ./demo/common/cos-auth.js -o ./demo/common/cos-auth.min.js -c -m\",\"test\":\"jest --runInBand --coverage\"},\"repository\":{\"type\":\"git\",\"url\":\"git+https://github.com/tencentyun/cos-js-sdk-v5.git\"},\"keywords\":[],\"author\":\"carsonxu\",\"license\":\"ISC\",\"bugs\":{\"url\":\"https://github.com/tencentyun/cos-js-sdk-v5/issues\"},\"homepage\":\"https://github.com/tencentyun/cos-js-sdk-v5#readme\",\"dependencies\":{\"@xmldom/xmldom\":\"^0.8.6\"},\"devDependencies\":{\"@babel/core\":\"7.17.9\",\"@babel/plugin-transform-runtime\":\"7.18.10\",\"@babel/preset-env\":\"7.16.11\",\"babel-loader\":\"8.2.5\",\"body-parser\":\"^1.18.3\",\"cross-env\":\"^5.2.0\",\"express\":\"^4.16.4\",\"jest\":\"^29.3.1\",\"jest-environment-jsdom\":\"^29.3.1\",\"prettier\":\"^3.0.1\",\"qcloud-cos-sts\":\"^3.0.2\",\"request\":\"^2.87.0\",\"terser-webpack-plugin\":\"4.2.3\",\"uglifyjs\":\"^2.4.11\",\"webpack\":\"4.46.0\",\"webpack-cli\":\"4.10.0\"}}"); /***/ }), @@ -8098,7 +8098,12 @@ function uploadFiles(params, callback) { var fileInfo = { Index: index, TaskId: '' - }; // 更新文件总大小 + }; // 如果 批量上传的 Key 是 / 开头,强制去掉第一个 / + + if (!self.options.UseRawKey && fileParams.Key && fileParams.Key.substr(0, 1) === '/') { + fileParams.Key = fileParams.Key.substr(1); + } // 更新文件总大小 + TotalSize += FileSize; // 单个文件上传链路 diff --git a/dist/cos-js-sdk-v5.min.js b/dist/cos-js-sdk-v5.min.js index 816eb32..560c110 100644 --- a/dist/cos-js-sdk-v5.min.js +++ b/dist/cos-js-sdk-v5.min.js @@ -1 +1,9810 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.COS=t():e.COS=t()}(this,(function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/dist/",n(n.s=10)}([function(e,t){function n(t){return e.exports=n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},e.exports.__esModule=!0,e.exports.default=e.exports,n(t)}e.exports=n,e.exports.__esModule=!0,e.exports.default=e.exports},function(e,t,n){"use strict";(function(t){var r=n(0),o=n(12),i=n(15),a=n(16),s=n(21),c=n(22),u=n(6);function l(e){return encodeURIComponent(e).replace(/!/g,"%21").replace(/'/g,"%27").replace(/\(/g,"%28").replace(/\)/g,"%29").replace(/\*/g,"%2A")}function d(e,t){var n=[];for(var r in e)e.hasOwnProperty(r)&&n.push(t?l(r).toLowerCase():r);return n.sort((function(e,t){return(e=e.toLowerCase())===(t=t.toLowerCase())?0:e>t?1:-1}))}var p,f=["cache-control","content-disposition","content-encoding","content-length","content-md5","expect","expires","host","if-match","if-modified-since","if-none-match","if-unmodified-since","origin","range","transfer-encoding"],h=function(e,t,n){var r=t/8,o=e.slice(n,n+r);return new Uint8Array(o).reverse(),new{8:Uint8Array,16:Uint16Array,32:Uint32Array}[t](o)[0]},m=function(e,t,n,r){var o=e.slice(t,n),i="";return new Uint8Array(o).forEach((function(e){i+=String.fromCharCode(e)})),r&&(i=decodeURIComponent(escape(i))),i},g=function(){},y=function(e){var t={};for(var n in e)e.hasOwnProperty(n)&&void 0!==e[n]&&null!==e[n]&&(t[n]=e[n]);return t},v=(p=function(e,t){e=e.split("."),t=t.split(".");for(var n=0;nparseInt(t[n])?1:-1;return 0},function(e){if(!e)return!1;var t=(e.match(/Chrome\/([.\d]+)/)||[])[1],n=(e.match(/QBCore\/([.\d]+)/)||[])[1],r=(e.match(/QQBrowser\/([.\d]+)/)||[])[1];return t&&p(t,"53.0.2785.116")<0&&n&&p(n,"3.53.991.400")<0&&r&&p(r,"9.0.2524.400")<=0||!1}("undefined"!=typeof navigator&&navigator.userAgent)),C=1048576;function k(e){return R(e,(function(e){return"object"===r(e)&&null!==e?k(e):e}))}function S(e,t){return T(t,(function(n,r){e[r]=t[r]})),e}function b(e){return e instanceof Array}function T(e,t){for(var n in e)e.hasOwnProperty(n)&&t(e[n],n)}function R(e,t){var n=b(e)?[]:{};for(var r in e)e.hasOwnProperty(r)&&(n[r]=t(e[r],r));return n}var E=function(e,t){var n=t.Bucket,r=t.Region,o=t.Key,i=this.options.Domain,a=!i||"string"==typeof i&&i.indexOf("{Bucket}")>-1,s=!i||"string"==typeof i&&i.indexOf("{Region}")>-1;if(e.indexOf("Bucket")>-1||"deleteMultipleObject"===e||"multipartList"===e||"listObjectVersions"===e){if(a&&!n)return"Bucket";if(s&&!r)return"Region"}else if(e.indexOf("Object")>-1||e.indexOf("multipart")>-1||"sliceUploadFile"===e||"abortUploadTask"===e){if(a&&!n)return"Bucket";if(s&&!r)return"Region";if(!o)return"Key"}return!1},w=function(e,t){if(t=S({},t),"getAuth"!==e&&"getV4Auth"!==e&&"getObjectUrl"!==e){var n=t.Headers||{};if(t&&"object"===r(t)){!function(){for(var e in t)t.hasOwnProperty(e)&&e.indexOf("x-cos-")>-1&&(n[e]=t[e])}();O.each({"x-cos-mfa":"MFA","Content-MD5":"ContentMD5","Content-Length":"ContentLength","Content-Type":"ContentType",Expect:"Expect",Expires:"Expires","Cache-Control":"CacheControl","Content-Disposition":"ContentDisposition","Content-Encoding":"ContentEncoding",Range:"Range","If-Modified-Since":"IfModifiedSince","If-Unmodified-Since":"IfUnmodifiedSince","If-Match":"IfMatch","If-None-Match":"IfNoneMatch","x-cos-copy-source":"CopySource","x-cos-copy-source-Range":"CopySourceRange","x-cos-metadata-directive":"MetadataDirective","x-cos-copy-source-If-Modified-Since":"CopySourceIfModifiedSince","x-cos-copy-source-If-Unmodified-Since":"CopySourceIfUnmodifiedSince","x-cos-copy-source-If-Match":"CopySourceIfMatch","x-cos-copy-source-If-None-Match":"CopySourceIfNoneMatch","x-cos-acl":"ACL","x-cos-grant-read":"GrantRead","x-cos-grant-write":"GrantWrite","x-cos-grant-full-control":"GrantFullControl","x-cos-grant-read-acp":"GrantReadAcp","x-cos-grant-write-acp":"GrantWriteAcp","x-cos-storage-class":"StorageClass","x-cos-traffic-limit":"TrafficLimit","x-cos-mime-limit":"MimeLimit","x-cos-server-side-encryption-customer-algorithm":"SSECustomerAlgorithm","x-cos-server-side-encryption-customer-key":"SSECustomerKey","x-cos-server-side-encryption-customer-key-MD5":"SSECustomerKeyMD5","x-cos-server-side-encryption":"ServerSideEncryption","x-cos-server-side-encryption-cos-kms-key-id":"SSEKMSKeyId","x-cos-server-side-encryption-context":"SSEContext","Pic-Operations":"PicOperations"},(function(e,r){void 0!==t[e]&&(n[r]=t[e])})),t.Headers=y(n)}}return t},A=function(e){return Date.now()+(e||0)},x="object"===("undefined"==typeof navigator?"undefined":r(navigator))&&!!navigator.userAgent.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/),I="object"===("undefined"==typeof navigator?"undefined":r(navigator))&&/\sQQ/i.test(navigator.userAgent),O={noop:g,formatParams:w,apiWrapper:function(e,t){return function(n,r){var o,i=this;if("function"==typeof n&&(r=n,n={}),n=w(e,n),i.options.EnableTracker)if("sliceUploadFile"===n.calledBySdk)o=n.tracker&&n.tracker.generateSubTracker({apiName:e});else if(["uploadFile","uploadFiles"].includes(e))o=null;else{var a=-1;n.Body&&(a="string"==typeof n.Body?n.Body.length:n.Body.size||n.Body.byteLength||-1),o=new u({bucket:n.Bucket,region:n.Region,apiName:e,fileKey:n.Key,fileSize:a,deepTracker:i.options.DeepTracker,customId:i.options.CustomId,delay:i.options.TrackerDelay})}n.tracker=o;var s=function(e){return e&&e.headers&&(e.headers["x-cos-request-id"]&&(e.RequestId=e.headers["x-cos-request-id"]),e.headers["x-ci-request-id"]&&(e.RequestId=e.headers["x-ci-request-id"]),e.headers["x-cos-version-id"]&&(e.VersionId=e.headers["x-cos-version-id"]),e.headers["x-cos-delete-marker"]&&(e.DeleteMarker=e.headers["x-cos-delete-marker"])),e},c=function(e,t){o&&o.formatResult(e,t),r&&r(s(e),s(t))},l=function(){if("getService"!==e&&"abortUploadTask"!==e){var t=E.call(i,e,n);if(t)return"missing param "+t;if(n.Region){if(i.options.CompatibilityMode){if(!/^([a-z\d-.]+)$/.test(n.Region))return"Region format error."}else{if(n.Region.indexOf("cos.")>-1)return'param Region should not be start with "cos."';if(!/^([a-z\d-]+)$/.test(n.Region))return"Region format error."}!i.options.CompatibilityMode&&-1===n.Region.indexOf("-")&&"yfb"!==n.Region&&"default"!==n.Region&&n.Region}if(n.Bucket){if(!/^([a-z\d-]+)-(\d+)$/.test(n.Bucket))if(n.AppId)n.Bucket=n.Bucket+"-"+n.AppId;else{if(!i.options.AppId)return'Bucket should format as "test-1250000000".';n.Bucket=n.Bucket+"-"+i.options.AppId}n.AppId&&delete n.AppId}!i.options.UseRawKey&&n.Key&&"/"===n.Key.substr(0,1)&&(n.Key=n.Key.substr(1))}}(),d=["getAuth","getObjectUrl"].includes(e);if("function"==typeof Promise&&!d&&!r)return new Promise((function(e,o){if(r=function(t,n){t?o(t):e(n)},l)return c(O.error(new Error(l)));t.call(i,n,c)}));if(l)return c(O.error(new Error(l)));var p=t.call(i,n,c);return d?p:void 0}},xml2json:a,json2xml:s,md5:o,clearKey:y,fileSlice:function(e,t,n,r,o){var i;if(e.slice?i=e.slice(t,n):e.mozSlice?i=e.mozSlice(t,n):e.webkitSlice&&(i=e.webkitSlice(t,n)),r&&v){var a=new FileReader;a.onload=function(e){i=null,o(new Blob([a.result]))},a.readAsArrayBuffer(i)}else o(i)},getBodyMd5:function(e,t,n,r){n=n||g,e?"string"==typeof t?n(O.md5(t,!0)):Blob&&t instanceof Blob?O.getFileMd5(t,(function(e,t){n(t)}),r):n():n()},getFileMd5:function(e,t,n){var r=e.size,i=0,a=o.getCtx();!function o(s){if(s>=r){var c=a.digest("hex");t(null,c)}else{var u=Math.min(r,s+C);O.fileSlice(e,s,u,!1,(function(e){!function(e,t){var n,r=new FileReader;FileReader.prototype.readAsBinaryString?(n=FileReader.prototype.readAsBinaryString,r.onload=function(){t(this.result)}):FileReader.prototype.readAsArrayBuffer&&(n=function(e){var n="",r=new FileReader;r.onload=function(e){for(var o=new Uint8Array(r.result),i=o.byteLength,a=0;a-1||f.indexOf(r)>-1)&&(t[n]=e[n])}return t}(k(e.Headers||e.headers||{})),u=e.Key||"";e.UseRawKey?t=e.Pathname||e.pathname||"/"+u:0!==(t=e.Pathname||e.pathname||u).indexOf("/")&&(t="/"+t);var l=!1!==e.ForceSignHost;if(!c.Host&&!c.host&&e.Bucket&&e.Region&&l&&(c.Host=e.Bucket+".cos."+e.Region+".myqcloud.com"),!n)throw new Error("missing param SecretId");if(!r)throw new Error("missing param SecretKey");var p=Math.round(A(e.SystemClockOffset)/1e3)-1,h=p,m=e.Expires||e.expires;h+=void 0===m?900:1*m||0;var g=n,y=o||p+";"+h,v=o||p+";"+h,C=d(c,!0).join(";").toLowerCase(),S=d(s,!0).join(";").toLowerCase(),b=i.HmacSHA1(v,r).toString(),T=[a,t,O.obj2str(s,!0),O.obj2str(c,!0),""].join("\n"),R=["sha1",y,i.SHA1(T).toString(),""].join("\n");return["q-sign-algorithm=sha1","q-ak="+g,"q-sign-time="+y,"q-key-time="+v,"q-header-list="+C,"q-url-param-list="+S,"q-signature="+i.HmacSHA1(R,b).toString()].join("&")},parseSelectPayload:function(e){for(var t={},n=m(e),r={records:[]};e.byteLength;){var o,i=h(e,32,0),a=h(e,32,4),s=i-a-16,c=0;for(e=e.slice(12);c1)for(var n=1;n=0))throw new I(A,new Error(e.tagName+"@"+n));for(var o=t.length-1;r"==e&&">")||"&"==e&&"&"||'"'==e&&"""||"&#"+e.charCodeAt()+";"}function j(e,t){if(t(e))return!0;if(e=e.firstChild)do{if(j(e,t))return!0}while(e=e.nextSibling)}function F(){this.ownerDocument=this}function K(e,t,n,r){e&&e._inc++,n.namespaceURI===i.XMLNS&&delete t._nsMap[n.prefix?n.localName:""]}function q(e,t,n){if(e&&e._inc){e._inc++;var r=t.childNodes;if(n)r[r.length++]=n;else{for(var o=t.firstChild,i=0;o;)r[i++]=o,o=o.nextSibling;r.length=i,delete r[r.length]}}}function z(e,t){var n=t.previousSibling,r=t.nextSibling;return n?n.nextSibling=r:e.firstChild=r,r?r.previousSibling=n:e.lastChild=n,t.parentNode=null,t.previousSibling=null,t.nextSibling=null,q(e.ownerDocument,e),t}function G(e){return e&&e.nodeType===H.DOCUMENT_TYPE_NODE}function V(e){return e&&e.nodeType===H.ELEMENT_NODE}function X(e){return e&&e.nodeType===H.TEXT_NODE}function W(e,t){var n=e.childNodes||[];if(o(n,V)||G(t))return!1;var r=o(n,G);return!(t&&r&&n.indexOf(r)>n.indexOf(t))}function Q(e,t){var n=e.childNodes||[];if(o(n,(function(e){return V(e)&&e!==t})))return!1;var r=o(n,G);return!(t&&r&&n.indexOf(r)>n.indexOf(t))}function J(e,t,n){if(!function(e){return e&&(e.nodeType===H.DOCUMENT_NODE||e.nodeType===H.DOCUMENT_FRAGMENT_NODE||e.nodeType===H.ELEMENT_NODE)}(e))throw new I(w,"Unexpected parent node type "+e.nodeType);if(n&&n.parentNode!==e)throw new I(A,"child not in parent");if(!function(e){return e&&(V(e)||X(e)||G(e)||e.nodeType===H.DOCUMENT_FRAGMENT_NODE||e.nodeType===H.COMMENT_NODE||e.nodeType===H.PROCESSING_INSTRUCTION_NODE)}(t)||G(t)&&e.nodeType!==H.DOCUMENT_NODE)throw new I(w,"Unexpected node type "+t.nodeType+" for parent node type "+e.nodeType)}function $(e,t,n){var r=e.childNodes||[],i=t.childNodes||[];if(t.nodeType===H.DOCUMENT_FRAGMENT_NODE){var a=i.filter(V);if(a.length>1||o(i,X))throw new I(w,"More than one element or text in fragment");if(1===a.length&&!W(e,n))throw new I(w,"Element in fragment can not be inserted before doctype")}if(V(t)&&!W(e,n))throw new I(w,"Only one element can be added and only after doctype");if(G(t)){if(o(r,G))throw new I(w,"Only one doctype is allowed");var s=o(r,V);if(n&&r.indexOf(s)1||o(i,X))throw new I(w,"More than one element or text in fragment");if(1===a.length&&!Q(e,n))throw new I(w,"Element in fragment can not be inserted before doctype")}if(V(t)&&!Q(e,n))throw new I(w,"Only one element can be added and only after doctype");if(G(t)){if(o(r,(function(e){return G(e)&&e!==n})))throw new I(w,"Only one doctype is allowed");var s=o(r,V);if(n&&r.indexOf(s)=0;T--){if(""===(R=o[T]).prefix&&R.namespace===e.namespaceURI){d=R.namespace;break}}if(d!==e.namespaceURI)for(T=o.length-1;T>=0;T--){var R;if((R=o[T]).namespace===e.namespaceURI){R.prefix&&(l=R.prefix+":"+u);break}}}t.push("<",l);for(var E=0;E"),n&&/^script$/i.test(u))for(;c;)c.data?t.push(c.data):ge(c,t,n,r,o.slice()),c=c.nextSibling;else for(;c;)ge(c,t,n,r,o.slice()),c=c.nextSibling;t.push("")}else t.push("/>");return;case k:case b:for(c=e.firstChild;c;)ge(c,t,n,r,o.slice()),c=c.nextSibling;return;case f:return me(t,e.name,e.value);case h:return t.push(e.data.replace(/[<&>]/g,L));case m:return t.push("");case C:return t.push("\x3c!--",e.data,"--\x3e");case S:var I=e.publicId,O=e.systemId;if(t.push("");else if(O&&"."!=O)t.push(" SYSTEM ",O,">");else{var B=e.internalSubset;B&&t.push(" [",B,"]"),t.push(">")}return;case v:return t.push("");case g:return t.push("&",e.nodeName,";");default:t.push("??",e.nodeName)}}function ye(e,t,n){var r;switch(t.nodeType){case p:(r=t.cloneNode(!1)).ownerDocument=e;case b:break;case f:n=!0}if(r||(r=t.cloneNode(!1)),r.ownerDocument=e,r.parentNode=null,n)for(var o=t.firstChild;o;)r.appendChild(ye(e,o,n)),o=o.nextSibling;return r}function ve(e,t,n){var r=new t.constructor;for(var o in t)if(Object.prototype.hasOwnProperty.call(t,o)){var i=t[o];"object"!=typeof i&&i!=r[o]&&(r[o]=i)}switch(t.childNodes&&(r.childNodes=new O),r.ownerDocument=e,r.nodeType){case p:var a=t.attributes,s=r.attributes=new P,c=a.length;s._ownerElement=r;for(var u=0;u0},lookupPrefix:function(e){for(var t=this;t;){var n=t._nsMap;if(n)for(var r in n)if(Object.prototype.hasOwnProperty.call(n,r)&&n[r]===e)return r;t=t.nodeType==f?t.ownerDocument:t.parentNode}return null},lookupNamespaceURI:function(e){for(var t=this;t;){var n=t._nsMap;if(n&&Object.prototype.hasOwnProperty.call(n,e))return n[e];t=t.nodeType==f?t.ownerDocument:t.parentNode}return null},isDefaultNamespace:function(e){return null==this.lookupPrefix(e)}},u(d,H),u(d,H.prototype),F.prototype={nodeName:"#document",nodeType:k,doctype:null,documentElement:null,_inc:1,insertBefore:function(e,t){if(e.nodeType==b){for(var n=e.firstChild;n;){var r=n.nextSibling;this.insertBefore(n,t),n=r}return e}return Z(this,e,t),e.ownerDocument=this,null===this.documentElement&&e.nodeType===p&&(this.documentElement=e),e},removeChild:function(e){return this.documentElement==e&&(this.documentElement=null),z(this,e)},replaceChild:function(e,t){Z(this,e,t,Y),e.ownerDocument=this,t&&this.removeChild(t),V(e)&&(this.documentElement=e)},importNode:function(e,t){return ye(this,e,t)},getElementById:function(e){var t=null;return j(this.documentElement,(function(n){if(n.nodeType==p&&n.getAttribute("id")==e)return t=n,!0})),t},getElementsByClassName:function(e){var t=c(e);return new B(this,(function(n){var r=[];return t.length>0&&j(n.documentElement,(function(o){if(o!==n&&o.nodeType===p){var i=o.getAttribute("class");if(i){var a=e===i;if(!a){var s=c(i);a=t.every((u=s,function(e){return u&&-1!==u.indexOf(e)}))}a&&r.push(o)}}var u})),r}))},createElement:function(e){var t=new ee;return t.ownerDocument=this,t.nodeName=e,t.tagName=e,t.localName=e,t.childNodes=new O,(t.attributes=new P)._ownerElement=t,t},createDocumentFragment:function(){var e=new le;return e.ownerDocument=this,e.childNodes=new O,e},createTextNode:function(e){var t=new re;return t.ownerDocument=this,t.appendData(e),t},createComment:function(e){var t=new oe;return t.ownerDocument=this,t.appendData(e),t},createCDATASection:function(e){var t=new ie;return t.ownerDocument=this,t.appendData(e),t},createProcessingInstruction:function(e,t){var n=new de;return n.ownerDocument=this,n.tagName=n.target=e,n.nodeValue=n.data=t,n},createAttribute:function(e){var t=new te;return t.ownerDocument=this,t.name=e,t.nodeName=e,t.localName=e,t.specified=!0,t},createEntityReference:function(e){var t=new ue;return t.ownerDocument=this,t.nodeName=e,t},createElementNS:function(e,t){var n=new ee,r=t.split(":"),o=n.attributes=new P;return n.childNodes=new O,n.ownerDocument=this,n.nodeName=t,n.tagName=t,n.namespaceURI=e,2==r.length?(n.prefix=r[0],n.localName=r[1]):n.localName=t,o._ownerElement=n,n},createAttributeNS:function(e,t){var n=new te,r=t.split(":");return n.ownerDocument=this,n.nodeName=t,n.name=t,n.namespaceURI=e,n.specified=!0,2==r.length?(n.prefix=r[0],n.localName=r[1]):n.localName=t,n}},l(F,H),ee.prototype={nodeType:p,hasAttribute:function(e){return null!=this.getAttributeNode(e)},getAttribute:function(e){var t=this.getAttributeNode(e);return t&&t.value||""},getAttributeNode:function(e){return this.attributes.getNamedItem(e)},setAttribute:function(e,t){var n=this.ownerDocument.createAttribute(e);n.value=n.nodeValue=""+t,this.setAttributeNode(n)},removeAttribute:function(e){var t=this.getAttributeNode(e);t&&this.removeAttributeNode(t)},appendChild:function(e){return e.nodeType===b?this.insertBefore(e,null):function(e,t){return t.parentNode&&t.parentNode.removeChild(t),t.parentNode=e,t.previousSibling=e.lastChild,t.nextSibling=null,t.previousSibling?t.previousSibling.nextSibling=t:e.firstChild=t,e.lastChild=t,q(e.ownerDocument,e,t),t}(this,e)},setAttributeNode:function(e){return this.attributes.setNamedItem(e)},setAttributeNodeNS:function(e){return this.attributes.setNamedItemNS(e)},removeAttributeNode:function(e){return this.attributes.removeNamedItem(e.nodeName)},removeAttributeNS:function(e,t){var n=this.getAttributeNodeNS(e,t);n&&this.removeAttributeNode(n)},hasAttributeNS:function(e,t){return null!=this.getAttributeNodeNS(e,t)},getAttributeNS:function(e,t){var n=this.getAttributeNodeNS(e,t);return n&&n.value||""},setAttributeNS:function(e,t,n){var r=this.ownerDocument.createAttributeNS(e,t);r.value=r.nodeValue=""+n,this.setAttributeNode(r)},getAttributeNodeNS:function(e,t){return this.attributes.getNamedItemNS(e,t)},getElementsByTagName:function(e){return new B(this,(function(t){var n=[];return j(t,(function(r){r===t||r.nodeType!=p||"*"!==e&&r.tagName!=e||n.push(r)})),n}))},getElementsByTagNameNS:function(e,t){return new B(this,(function(n){var r=[];return j(n,(function(o){o===n||o.nodeType!==p||"*"!==e&&o.namespaceURI!==e||"*"!==t&&o.localName!=t||r.push(o)})),r}))}},F.prototype.getElementsByTagName=ee.prototype.getElementsByTagName,F.prototype.getElementsByTagNameNS=ee.prototype.getElementsByTagNameNS,l(ee,H),te.prototype.nodeType=f,l(te,H),ne.prototype={data:"",substringData:function(e,t){return this.data.substring(e,e+t)},appendData:function(e){e=this.data+e,this.nodeValue=this.data=e,this.length=e.length},insertData:function(e,t){this.replaceData(e,0,t)},appendChild:function(e){throw new Error(E[w])},deleteData:function(e,t){this.replaceData(e,t,"")},replaceData:function(e,t,n){n=this.data.substring(0,e)+n+this.data.substring(e+t),this.nodeValue=this.data=n,this.length=n.length}},l(ne,H),re.prototype={nodeName:"#text",nodeType:h,splitText:function(e){var t=this.data,n=t.substring(e);t=t.substring(0,e),this.data=this.nodeValue=t,this.length=t.length;var r=this.ownerDocument.createTextNode(n);return this.parentNode&&this.parentNode.insertBefore(r,this.nextSibling),r}},l(re,ne),oe.prototype={nodeName:"#comment",nodeType:C},l(oe,ne),ie.prototype={nodeName:"#cdata-section",nodeType:m},l(ie,ne),ae.prototype.nodeType=S,l(ae,H),se.prototype.nodeType=T,l(se,H),ce.prototype.nodeType=y,l(ce,H),ue.prototype.nodeType=g,l(ue,H),le.prototype.nodeName="#document-fragment",le.prototype.nodeType=b,l(le,H),de.prototype.nodeType=v,l(de,H),pe.prototype.serializeToString=function(e,t,n){return fe.call(e,t,n)},H.prototype.toString=fe;try{if(Object.defineProperty){function ke(e){switch(e.nodeType){case p:case b:var t=[];for(e=e.firstChild;e;)7!==e.nodeType&&8!==e.nodeType&&t.push(ke(e)),e=e.nextSibling;return t.join("");default:return e.nodeValue}}Object.defineProperty(B.prototype,"length",{get:function(){return _(this),this.$$length}}),Object.defineProperty(H.prototype,"textContent",{get:function(){return ke(this)},set:function(e){switch(this.nodeType){case p:case b:for(;this.firstChild;)this.removeChild(this.firstChild);(e||String(e))&&this.appendChild(this.ownerDocument.createTextNode(e));break;default:this.data=e,this.value=e,this.nodeValue=e}}}),Ce=function(e,t,n){e["$$"+t]=n}}}catch(Se){}t.DocumentType=ae,t.DOMException=I,t.DOMImplementation=M,t.Element=ee,t.Node=H,t.NodeList=O,t.XMLSerializer=pe},function(e,t,n){var r=n(23),o=n(24),i=n(0),a=n(7),s=null,c=function(e){if(!s){var t=n(25);s=new t({appkey:"0AND0VEVB24UBGDU",versionCode:a.version,channelID:"js_sdk",openid:"openid",unionid:"unid",strictMode:!1,delay:e,sessionDuration:6e4})}return s},u=function(){var e=function(){return(65536*(1+Math.random())|0).toString(16).substring(1)};return e()+e()+"-"+e()+"-"+e()+"-"+e()+"-"+e()+e()+e()},l=function(){if("object"===("undefined"==typeof navigator?"undefined":i(navigator))){var e=navigator.connection||navigator.mozConnection||navigator.webkitConnection;return(null==e?void 0:e.type)||(null==e?void 0:e.effectiveType)||"unknown"}return"unknown"},d=function(){if("object"!==("undefined"==typeof navigator?"undefined":i(navigator)))return"unknown os";var e=navigator.userAgent.toLowerCase(),t=/macintosh|mac os x/i.test(navigator.userAgent);return e.indexOf("win32")>=0||e.indexOf("wow32")>=0?"win32":e.indexOf("win64")>=0||e.indexOf("wow64")>=0?"win64":t?"mac":"unknown os"},p=function(){return!("object"!==("undefined"==typeof navigator?"undefined":i(navigator))||!navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i))},f=function(){return!("object"!==("undefined"==typeof navigator?"undefined":i(navigator))||!navigator.userAgent.match(/(Android|Adr|Linux)/i))},h=function(){return!("object"!==("undefined"==typeof navigator?"undefined":i(navigator))||!navigator.userAgent.match(/(iPhone|iPod|iPad|iOS)/i))},m=function(){if("object"!==("undefined"==typeof navigator?"undefined":i(navigator)))return"unknown device";var e=navigator.userAgent.toLowerCase();if(e.includes("app/tencent_wemeet"))return"tencent_wemeet";if(e.indexOf("maxthon")>=0){var t=e.match(/maxthon\/([\d.]+)/),n=t&&t[1]||"";return"傲游浏览器 ".concat(n).trim()}if(e.indexOf("qqbrowser")>=0){var r=e.match(/qqbrowser\/([\d.]+)/),o=r&&r[1]||"";return"QQ浏览器 ".concat(o).trim()}if(e.indexOf("se 2.x")>=0)return"搜狗浏览器";if(e.indexOf("wxwork")>=0)return"微信内置浏览器";if(e.indexOf("msie")>=0){var a=e.match(/msie ([\d.]+)/),s=a&&a[1]||"";return"IE ".concat(s).trim()}if(e.indexOf("firefox")>=0){var c=e.match(/firefox\/([\d.]+)/),u=c&&c[1]||"";return"Firefox ".concat(u).trim()}if(e.indexOf("chrome")>=0){var l=e.match(/chrome\/([\d.]+)/),d=l&&l[1]||"";return"Chrome ".concat(d).trim()}if(e.indexOf("opera")>=0){var p=e.match(/opera.([\d.]+)/),f=p&&p[1]||"";return"Opera ".concat(f).trim()}if(e.indexOf("safari")>=0){var h=e.match(/version\/([\d.]+)/),m=h&&h[1]||"";return"Safari ".concat(m).trim()}if(e.indexOf("edge")>=0){var g=e.match(/edge\/([\d.]+)/),y=g&&g[1]||"";return"edge ".concat(y).trim()}return e.substr(0,200)},g={isMobile:p(),isBrowser:!p(),mobileOsType:f()?"android":h?"ios":"other_mobile",pcOsType:d()},y={deviceType:g.isMobile?"mobile":g.isBrowser?"browser":"unknown",devicePlatform:g.isMobile?g.mobileOsType:g.pcOsType,deviceName:m()},v=["multipartInit","multipartUpload","multipartComplete","multipartList","multipartListPart","multipartAbort"],C=["putObject","postObject","appendObject","sliceUploadFile","uploadFile","uploadFiles"].concat(v),k=["getObject"];function S(e){return e.replace(/([A-Z])/g,"_$1").toLowerCase()}var b=function(){"use strict";function e(t){r(this,e);var n=t.parent,o=t.traceId,i=t.bucket,s=t.region,l=t.apiName,d=t.fileKey,p=t.fileSize,f=t.accelerate,h=t.customId,m=t.delay,g=t.deepTracker,v=i&&i.substr(i.lastIndexOf("-")+1)||"";this.parent=n,this.deepTracker=g,this.delay=m,this.params={cossdkVersion:a.version,region:s,networkType:"",host:"",accelerate:f?"Y":"N",requestPath:d||"",size:p||-1,httpMd5:0,httpSign:0,httpFull:0,name:l||"",result:"",tookTime:0,errorNode:"",errorCode:"",errorMessage:"",errorRequestId:"",errorStatusCode:0,errorServiceName:"",tracePlatform:"cos-js-sdk-v5",traceId:o||u(),bucket:i,appid:v,partNumber:0,retryTimes:0,reqUrl:"",customId:h||"",deviceType:y.deviceType,devicePlatform:y.devicePlatform,deviceName:y.deviceName,md5StartTime:0,md5EndTime:0,signStartTime:0,signEndTime:0,httpStartTime:0,httpEndTime:0,startTime:(new Date).getTime(),endTime:0},this.beacon=c(m)}return o(e,[{key:"formatResult",value:function(e,t){var n,r,o,i,a,s,c=(new Date).getTime()-this.params.startTime,u=l(),d=e?(null==e?void 0:e.code)||(null==e||null===(n=e.error)||void 0===n?void 0:n.code)||(null==e||null===(r=e.error)||void 0===r?void 0:r.Code):"",p=e?(null==e?void 0:e.message)||(null==e||null===(o=e.error)||void 0===o?void 0:o.message)||(null==e||null===(i=e.error)||void 0===i?void 0:i.Message):"",f=e?(null==e?void 0:e.resource)||(null==e||null===(a=e.error)||void 0===a?void 0:a.resource)||(null==e||null===(s=e.error)||void 0===s?void 0:s.Resource):"",h=e?null==e?void 0:e.statusCode:t.statusCode,m=e?(null==e?void 0:e.headers)&&(null==e?void 0:e.headers["x-cos-request-id"]):(null==t?void 0:t.headers)&&(null==t?void 0:t.headers["x-cos-request-id"]),g=e?m?"Server":"Client":"";if(Object.assign(this.params,{tookTime:c,networkType:u,httpMd5:this.params.md5EndTime-this.params.md5StartTime,httpSign:this.params.signEndTime-this.params.signStartTime,httpFull:this.params.httpEndTime-this.params.httpStartTime,result:e?"Fail":"Success",errorType:g,errorCode:d,errorStatusCode:h,errorMessage:p,errorServiceName:f,errorRequestId:m}),!e||d&&p||(this.params.fullError=e?JSON.stringify(e):""),"getObject"===this.params.name&&(this.params.size=t?t.headers&&t.headers["content-length"]:-1),this.params.reqUrl)try{var y=/^http(s)?:\/\/(.*?)\//.exec(this.params.reqUrl);this.params.host=y[2]}catch(e){this.params.host=this.params.reqUrl}this.sendEvents()}},{key:"setParams",value:function(e){Object.assign(this.params,e)}},{key:"sendEvents",value:function(){if(!v.includes(this.params.name)||this.deepTracker){var e,t=(e=this.params.name,C.includes(e)?"cos_upload":k.includes(e)?"cos_download":"base_service"),n=function(e){var t={},n="Success"===e.result?["tracePlatform","cossdkVersion","region","bucket","appid","networkType","host","accelerate","requestPath","partNumber","size","name","result","tookTime","errorRequestId","retryTimes","reqUrl","customId","deviceType","devicePlatform","deviceName"]:["tracePlatform","cossdkVersion","region","networkType","host","accelerate","requestPath","size","httpMd5","httpSign","httpFull","name","result","tookTime","errorNode","errorCode","errorMessage","errorRequestId","errorStatusCode","errorServiceName","errorType","traceId","bucket","appid","partNumber","retryTimes","reqUrl","customId","fullError","deviceType","devicePlatform","deviceName"];for(var r in e)n.includes(r)&&(t[S(r)]=e[r]);return t}(this.params);this.beacon||(this.beacon=c(this.delay||5e3)),0===this.delay?this.beacon&&this.beacon.onDirectUserAction(t,n):this.beacon&&this.beacon.onUserAction(t,n)}}},{key:"generateSubTracker",value:function(t){return Object.assign(t,{parent:this,deepTracker:this.deepTracker,traceId:this.params.traceId,bucket:this.params.bucket,region:this.params.region,fileKey:this.params.requestPath,customId:this.params.customId,delay:this.delay}),new e(t)}}]),e}();e.exports=b},function(e){e.exports=JSON.parse('{"name":"cos-js-sdk-v5","version":"1.4.19","description":"JavaScript SDK for [腾讯云对象存储](https://cloud.tencent.com/product/cos)","main":"dist/cos-js-sdk-v5.js","types":"index.d.ts","scripts":{"prettier":"prettier --write src demo/demo.js test/test.js server/sts.js index.d.ts","server":"node server/sts.js","dev":"cross-env NODE_ENV=development webpack -w --mode=development","build":"cross-env NODE_ENV=production webpack --mode=production","cos-auth.min.js":"uglifyjs ./demo/common/cos-auth.js -o ./demo/common/cos-auth.min.js -c -m","test":"jest --runInBand --coverage"},"repository":{"type":"git","url":"git+https://github.com/tencentyun/cos-js-sdk-v5.git"},"keywords":[],"author":"carsonxu","license":"ISC","bugs":{"url":"https://github.com/tencentyun/cos-js-sdk-v5/issues"},"homepage":"https://github.com/tencentyun/cos-js-sdk-v5#readme","dependencies":{"@xmldom/xmldom":"^0.8.6"},"devDependencies":{"@babel/core":"7.17.9","@babel/plugin-transform-runtime":"7.18.10","@babel/preset-env":"7.16.11","babel-loader":"8.2.5","body-parser":"^1.18.3","cross-env":"^5.2.0","express":"^4.16.4","jest":"^29.3.1","jest-environment-jsdom":"^29.3.1","prettier":"^3.0.1","qcloud-cos-sts":"^3.0.2","request":"^2.87.0","terser-webpack-plugin":"4.2.3","uglifyjs":"^2.4.11","webpack":"4.46.0","webpack-cli":"4.10.0"}}')},function(e,t){var n=function(e){var t={},n=function(e){return!t[e]&&(t[e]=[]),t[e]};e.on=function(e,t){n(e).push(t)},e.off=function(e,t){for(var r=n(e),o=r.length-1;o>=0;o--)t===r[o]&&r.splice(o,1)},e.emit=function(e,t){for(var r=n(e).map((function(e){return e})),o=0;o=0;n--){var o=r[n][2];(!o||o+2592e3=0;o--){var i=r[o];i[0]===e&&i[1]===t&&r.splice(o,1)}r.unshift([e,t,Math.round(Date.now()/1e3)]),r.length>n&&r.splice(n),l()}},removeUploadId:function(e){u.call(this),delete d.using[e];for(var t=r.length-1;t>=0;t--)r[t][1]===e&&r.splice(t,1);l()}};e.exports=d},function(e,t,n){var r=n(11);e.exports=r},function(e,t,n){"use strict";var r=n(1),o=n(8),i=n(26),a=n(27),s=n(29),c=n(7),u={AppId:"",SecretId:"",SecretKey:"",SecurityToken:"",ChunkRetryTimes:2,FileParallelLimit:3,ChunkParallelLimit:3,ChunkSize:1048576,SliceSize:1048576,CopyChunkParallelLimit:20,CopyChunkSize:10485760,CopySliceSize:10485760,MaxPartNumber:1e4,ProgressInterval:1e3,Domain:"",ServiceDomain:"",Protocol:"",CompatibilityMode:!1,ForcePathStyle:!1,UseRawKey:!1,Timeout:0,CorrectClockSkew:!0,SystemClockOffset:0,UploadCheckContentMd5:!1,UploadQueueSize:1e4,UploadAddMetaMd5:!1,UploadIdCacheLimit:50,UseAccelerate:!1,ForceSignHost:!0,EnableTracker:!1,DeepTracker:!1,TrackerDelay:5e3,CustomId:""},l=function(e){this.options=r.extend(r.clone(u),e||{}),this.options.FileParallelLimit=Math.max(1,this.options.FileParallelLimit),this.options.ChunkParallelLimit=Math.max(1,this.options.ChunkParallelLimit),this.options.ChunkRetryTimes=Math.max(0,this.options.ChunkRetryTimes),this.options.ChunkSize=Math.max(1048576,this.options.ChunkSize),this.options.CopyChunkParallelLimit=Math.max(1,this.options.CopyChunkParallelLimit),this.options.CopyChunkSize=Math.max(1048576,this.options.CopyChunkSize),this.options.CopySliceSize=Math.max(0,this.options.CopySliceSize),this.options.MaxPartNumber=Math.max(1024,Math.min(1e4,this.options.MaxPartNumber)),this.options.Timeout=Math.max(0,this.options.Timeout),this.options.AppId,this.options.SecretId&&this.options.SecretId.indexOf(" "),this.options.SecretKey&&this.options.SecretKey.indexOf(" "),r.isNode(),o.init(this),i.init(this)};a.init(l,i),s.init(l,i),l.util={md5:r.md5,xml2json:r.xml2json,json2xml:r.json2xml,encodeBase64:r.encodeBase64},l.getAuthorization=r.getAuth,l.version=c.version,e.exports=l},function(module,exports,__webpack_require__){(function(process,global,module){var __WEBPACK_AMD_DEFINE_RESULT__,_typeof=__webpack_require__(0);(function(){"use strict";var ERROR="input is invalid type",WINDOW="object"===("undefined"==typeof window?"undefined":_typeof(window)),root=WINDOW?window:{};root.JS_MD5_NO_WINDOW&&(WINDOW=!1);var WEB_WORKER=!WINDOW&&"object"===("undefined"==typeof self?"undefined":_typeof(self)),NODE_JS=!root.JS_MD5_NO_NODE_JS&&"object"===(void 0===process?"undefined":_typeof(process))&&process.versions&&process.versions.node;NODE_JS?root=global:WEB_WORKER&&(root=self);var COMMON_JS=!root.JS_MD5_NO_COMMON_JS&&"object"===_typeof(module)&&module.exports,AMD=__webpack_require__(14),ARRAY_BUFFER=!root.JS_MD5_NO_ARRAY_BUFFER&&"undefined"!=typeof ArrayBuffer,HEX_CHARS="0123456789abcdef".split(""),EXTRA=[128,32768,8388608,-2147483648],SHIFT=[0,8,16,24],OUTPUT_TYPES=["hex","array","digest","buffer","arrayBuffer","base64"],BASE64_ENCODE_CHAR="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""),blocks=[],buffer8;if(ARRAY_BUFFER){var buffer=new ArrayBuffer(68);buffer8=new Uint8Array(buffer),blocks=new Uint32Array(buffer)}!root.JS_MD5_NO_NODE_JS&&Array.isArray||(Array.isArray=function(e){return"[object Array]"===Object.prototype.toString.call(e)}),!ARRAY_BUFFER||!root.JS_MD5_NO_ARRAY_BUFFER_IS_VIEW&&ArrayBuffer.isView||(ArrayBuffer.isView=function(e){return"object"===_typeof(e)&&e.buffer&&e.buffer.constructor===ArrayBuffer});var createOutputMethod=function(e){return function(t,n){return new Md5(!0).update(t,n)[e]()}},createMethod=function(){var e=createOutputMethod("hex");NODE_JS&&(e=nodeWrap(e)),e.getCtx=e.create=function(){return new Md5},e.update=function(t){return e.create().update(t)};for(var t=0;t>6,s[r++]=128|63&n):n<55296||n>=57344?(s[r++]=224|n>>12,s[r++]=128|n>>6&63,s[r++]=128|63&n):(n=65536+((1023&n)<<10|1023&e.charCodeAt(++o)),s[r++]=240|n>>18,s[r++]=128|n>>12&63,s[r++]=128|n>>6&63,s[r++]=128|63&n);else for(r=this.start;o>2]|=n<>2]|=(192|n>>6)<>2]|=(128|63&n)<=57344?(a[r>>2]|=(224|n>>12)<>2]|=(128|n>>6&63)<>2]|=(128|63&n)<>2]|=(240|n>>18)<>2]|=(128|n>>12&63)<>2]|=(128|n>>6&63)<>2]|=(128|63&n)<=64?(this.start=r-64,this.hash(),this.hashed=!0):this.start=r}return this.bytes>4294967295&&(this.hBytes+=this.bytes/4294967296<<0,this.bytes=this.bytes%4294967296),this}},Md5.prototype.finalize=function(){if(!this.finalized){this.finalized=!0;var e=this.blocks,t=this.lastByteIndex;e[t>>2]|=EXTRA[3&t],t>=56&&(this.hashed||this.hash(),e[0]=e[16],e[16]=e[1]=e[2]=e[3]=e[4]=e[5]=e[6]=e[7]=e[8]=e[9]=e[10]=e[11]=e[12]=e[13]=e[14]=e[15]=0),e[14]=this.bytes<<3,e[15]=this.hBytes<<3|this.bytes>>>29,this.hash()}},Md5.prototype.hash=function(){var e,t,n,r,o,i,a=this.blocks;this.first?t=((t=((e=((e=a[0]-680876937)<<7|e>>>25)-271733879<<0)^(n=((n=(-271733879^(r=((r=(-1732584194^2004318071&e)+a[1]-117830708)<<12|r>>>20)+e<<0)&(-271733879^e))+a[2]-1126478375)<<17|n>>>15)+r<<0)&(r^e))+a[3]-1316259209)<<22|t>>>10)+n<<0:(e=this.h0,t=this.h1,n=this.h2,t=((t+=((e=((e+=((r=this.h3)^t&(n^r))+a[0]-680876936)<<7|e>>>25)+t<<0)^(n=((n+=(t^(r=((r+=(n^e&(t^n))+a[1]-389564586)<<12|r>>>20)+e<<0)&(e^t))+a[2]+606105819)<<17|n>>>15)+r<<0)&(r^e))+a[3]-1044525330)<<22|t>>>10)+n<<0),t=((t+=((e=((e+=(r^t&(n^r))+a[4]-176418897)<<7|e>>>25)+t<<0)^(n=((n+=(t^(r=((r+=(n^e&(t^n))+a[5]+1200080426)<<12|r>>>20)+e<<0)&(e^t))+a[6]-1473231341)<<17|n>>>15)+r<<0)&(r^e))+a[7]-45705983)<<22|t>>>10)+n<<0,t=((t+=((e=((e+=(r^t&(n^r))+a[8]+1770035416)<<7|e>>>25)+t<<0)^(n=((n+=(t^(r=((r+=(n^e&(t^n))+a[9]-1958414417)<<12|r>>>20)+e<<0)&(e^t))+a[10]-42063)<<17|n>>>15)+r<<0)&(r^e))+a[11]-1990404162)<<22|t>>>10)+n<<0,t=((t+=((e=((e+=(r^t&(n^r))+a[12]+1804603682)<<7|e>>>25)+t<<0)^(n=((n+=(t^(r=((r+=(n^e&(t^n))+a[13]-40341101)<<12|r>>>20)+e<<0)&(e^t))+a[14]-1502002290)<<17|n>>>15)+r<<0)&(r^e))+a[15]+1236535329)<<22|t>>>10)+n<<0,t=((t+=((r=((r+=(t^n&((e=((e+=(n^r&(t^n))+a[1]-165796510)<<5|e>>>27)+t<<0)^t))+a[6]-1069501632)<<9|r>>>23)+e<<0)^e&((n=((n+=(e^t&(r^e))+a[11]+643717713)<<14|n>>>18)+r<<0)^r))+a[0]-373897302)<<20|t>>>12)+n<<0,t=((t+=((r=((r+=(t^n&((e=((e+=(n^r&(t^n))+a[5]-701558691)<<5|e>>>27)+t<<0)^t))+a[10]+38016083)<<9|r>>>23)+e<<0)^e&((n=((n+=(e^t&(r^e))+a[15]-660478335)<<14|n>>>18)+r<<0)^r))+a[4]-405537848)<<20|t>>>12)+n<<0,t=((t+=((r=((r+=(t^n&((e=((e+=(n^r&(t^n))+a[9]+568446438)<<5|e>>>27)+t<<0)^t))+a[14]-1019803690)<<9|r>>>23)+e<<0)^e&((n=((n+=(e^t&(r^e))+a[3]-187363961)<<14|n>>>18)+r<<0)^r))+a[8]+1163531501)<<20|t>>>12)+n<<0,t=((t+=((r=((r+=(t^n&((e=((e+=(n^r&(t^n))+a[13]-1444681467)<<5|e>>>27)+t<<0)^t))+a[2]-51403784)<<9|r>>>23)+e<<0)^e&((n=((n+=(e^t&(r^e))+a[7]+1735328473)<<14|n>>>18)+r<<0)^r))+a[12]-1926607734)<<20|t>>>12)+n<<0,t=((t+=((i=(r=((r+=((o=t^n)^(e=((e+=(o^r)+a[5]-378558)<<4|e>>>28)+t<<0))+a[8]-2022574463)<<11|r>>>21)+e<<0)^e)^(n=((n+=(i^t)+a[11]+1839030562)<<16|n>>>16)+r<<0))+a[14]-35309556)<<23|t>>>9)+n<<0,t=((t+=((i=(r=((r+=((o=t^n)^(e=((e+=(o^r)+a[1]-1530992060)<<4|e>>>28)+t<<0))+a[4]+1272893353)<<11|r>>>21)+e<<0)^e)^(n=((n+=(i^t)+a[7]-155497632)<<16|n>>>16)+r<<0))+a[10]-1094730640)<<23|t>>>9)+n<<0,t=((t+=((i=(r=((r+=((o=t^n)^(e=((e+=(o^r)+a[13]+681279174)<<4|e>>>28)+t<<0))+a[0]-358537222)<<11|r>>>21)+e<<0)^e)^(n=((n+=(i^t)+a[3]-722521979)<<16|n>>>16)+r<<0))+a[6]+76029189)<<23|t>>>9)+n<<0,t=((t+=((i=(r=((r+=((o=t^n)^(e=((e+=(o^r)+a[9]-640364487)<<4|e>>>28)+t<<0))+a[12]-421815835)<<11|r>>>21)+e<<0)^e)^(n=((n+=(i^t)+a[15]+530742520)<<16|n>>>16)+r<<0))+a[2]-995338651)<<23|t>>>9)+n<<0,t=((t+=((r=((r+=(t^((e=((e+=(n^(t|~r))+a[0]-198630844)<<6|e>>>26)+t<<0)|~n))+a[7]+1126891415)<<10|r>>>22)+e<<0)^((n=((n+=(e^(r|~t))+a[14]-1416354905)<<15|n>>>17)+r<<0)|~e))+a[5]-57434055)<<21|t>>>11)+n<<0,t=((t+=((r=((r+=(t^((e=((e+=(n^(t|~r))+a[12]+1700485571)<<6|e>>>26)+t<<0)|~n))+a[3]-1894986606)<<10|r>>>22)+e<<0)^((n=((n+=(e^(r|~t))+a[10]-1051523)<<15|n>>>17)+r<<0)|~e))+a[1]-2054922799)<<21|t>>>11)+n<<0,t=((t+=((r=((r+=(t^((e=((e+=(n^(t|~r))+a[8]+1873313359)<<6|e>>>26)+t<<0)|~n))+a[15]-30611744)<<10|r>>>22)+e<<0)^((n=((n+=(e^(r|~t))+a[6]-1560198380)<<15|n>>>17)+r<<0)|~e))+a[13]+1309151649)<<21|t>>>11)+n<<0,t=((t+=((r=((r+=(t^((e=((e+=(n^(t|~r))+a[4]-145523070)<<6|e>>>26)+t<<0)|~n))+a[11]-1120210379)<<10|r>>>22)+e<<0)^((n=((n+=(e^(r|~t))+a[2]+718787259)<<15|n>>>17)+r<<0)|~e))+a[9]-343485551)<<21|t>>>11)+n<<0,this.first?(this.h0=e+1732584193<<0,this.h1=t-271733879<<0,this.h2=n-1732584194<<0,this.h3=r+271733878<<0,this.first=!1):(this.h0=this.h0+e<<0,this.h1=this.h1+t<<0,this.h2=this.h2+n<<0,this.h3=this.h3+r<<0)},Md5.prototype.hex=function(){this.finalize();var e=this.h0,t=this.h1,n=this.h2,r=this.h3;return HEX_CHARS[e>>4&15]+HEX_CHARS[15&e]+HEX_CHARS[e>>12&15]+HEX_CHARS[e>>8&15]+HEX_CHARS[e>>20&15]+HEX_CHARS[e>>16&15]+HEX_CHARS[e>>28&15]+HEX_CHARS[e>>24&15]+HEX_CHARS[t>>4&15]+HEX_CHARS[15&t]+HEX_CHARS[t>>12&15]+HEX_CHARS[t>>8&15]+HEX_CHARS[t>>20&15]+HEX_CHARS[t>>16&15]+HEX_CHARS[t>>28&15]+HEX_CHARS[t>>24&15]+HEX_CHARS[n>>4&15]+HEX_CHARS[15&n]+HEX_CHARS[n>>12&15]+HEX_CHARS[n>>8&15]+HEX_CHARS[n>>20&15]+HEX_CHARS[n>>16&15]+HEX_CHARS[n>>28&15]+HEX_CHARS[n>>24&15]+HEX_CHARS[r>>4&15]+HEX_CHARS[15&r]+HEX_CHARS[r>>12&15]+HEX_CHARS[r>>8&15]+HEX_CHARS[r>>20&15]+HEX_CHARS[r>>16&15]+HEX_CHARS[r>>28&15]+HEX_CHARS[r>>24&15]},Md5.prototype.toString=Md5.prototype.hex,Md5.prototype.digest=function(e){if("hex"===e)return this.hex();this.finalize();var t=this.h0,n=this.h1,r=this.h2,o=this.h3;return[255&t,t>>8&255,t>>16&255,t>>24&255,255&n,n>>8&255,n>>16&255,n>>24&255,255&r,r>>8&255,r>>16&255,r>>24&255,255&o,o>>8&255,o>>16&255,o>>24&255]},Md5.prototype.array=Md5.prototype.digest,Md5.prototype.arrayBuffer=function(){this.finalize();var e=new ArrayBuffer(16),t=new Uint32Array(e);return t[0]=this.h0,t[1]=this.h1,t[2]=this.h2,t[3]=this.h3,e},Md5.prototype.buffer=Md5.prototype.arrayBuffer,Md5.prototype.base64=function(){for(var e,t,n,r="",o=this.array(),i=0;i<15;)e=o[i++],t=o[i++],n=o[i++],r+=BASE64_ENCODE_CHAR[e>>>2]+BASE64_ENCODE_CHAR[63&(e<<4|t>>>4)]+BASE64_ENCODE_CHAR[63&(t<<2|n>>>6)]+BASE64_ENCODE_CHAR[63&n];return e=o[i],r+=BASE64_ENCODE_CHAR[e>>>2]+BASE64_ENCODE_CHAR[e<<4&63]+"=="};var exports=createMethod();COMMON_JS?module.exports=exports:(root.md5=exports,AMD&&(__WEBPACK_AMD_DEFINE_RESULT__=function(){return exports}.call(exports,__webpack_require__,exports,module),void 0===__WEBPACK_AMD_DEFINE_RESULT__||(module.exports=__WEBPACK_AMD_DEFINE_RESULT__)))})()}).call(this,__webpack_require__(3),__webpack_require__(13),__webpack_require__(4)(module))},function(e,t){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(e){"object"==typeof window&&(n=window)}e.exports=n},function(e,t){(function(t){e.exports=t}).call(this,{})},function(e,t,n){(function(e){var t,r,o,i,a,s,c,u=n(0),l=l||function(e,t){var n={},r=n.lib={},o=function(){},i=r.Base={extend:function(e){o.prototype=this;var t=new o;return e&&t.mixIn(e),t.hasOwnProperty("init")||(t.init=function(){t.$super.init.apply(this,arguments)}),t.init.prototype=t,t.$super=this,t},create:function(){var e=this.extend();return e.init.apply(e,arguments),e},init:function(){},mixIn:function(e){for(var t in e)e.hasOwnProperty(t)&&(this[t]=e[t]);e.hasOwnProperty("toString")&&(this.toString=e.toString)},clone:function(){return this.init.prototype.extend(this)}},a=r.WordArray=i.extend({init:function(e,t){e=this.words=e||[],this.sigBytes=null!=t?t:4*e.length},toString:function(e){return(e||c).stringify(this)},concat:function(e){var t=this.words,n=e.words,r=this.sigBytes;if(e=e.sigBytes,this.clamp(),r%4)for(var o=0;o>>2]|=(n[o>>>2]>>>24-o%4*8&255)<<24-(r+o)%4*8;else if(65535>>2]=n[o>>>2];else t.push.apply(t,n);return this.sigBytes+=e,this},clamp:function(){var t=this.words,n=this.sigBytes;t[n>>>2]&=4294967295<<32-n%4*8,t.length=e.ceil(n/4)},clone:function(){var e=i.clone.call(this);return e.words=this.words.slice(0),e},random:function(t){for(var n=[],r=0;r>>2]>>>24-r%4*8&255;n.push((o>>>4).toString(16)),n.push((15&o).toString(16))}return n.join("")},parse:function(e){for(var t=e.length,n=[],r=0;r>>3]|=parseInt(e.substr(r,2),16)<<24-r%8*4;return new a.init(n,t/2)}},u=s.Latin1={stringify:function(e){var t=e.words;e=e.sigBytes;for(var n=[],r=0;r>>2]>>>24-r%4*8&255));return n.join("")},parse:function(e){for(var t=e.length,n=[],r=0;r>>2]|=(255&e.charCodeAt(r))<<24-r%4*8;return new a.init(n,t)}},l=s.Utf8={stringify:function(e){try{return decodeURIComponent(escape(u.stringify(e)))}catch(e){throw Error("Malformed UTF-8 data")}},parse:function(e){return u.parse(unescape(encodeURIComponent(e)))}},d=r.BufferedBlockAlgorithm=i.extend({reset:function(){this._data=new a.init,this._nDataBytes=0},_append:function(e){"string"==typeof e&&(e=l.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(t){var n=this._data,r=n.words,o=n.sigBytes,i=this.blockSize,s=o/(4*i);if(t=(s=t?e.ceil(s):e.max((0|s)-this._minBufferSize,0))*i,o=e.min(4*t,o),t){for(var c=0;cu;u++){if(16>u)i[u]=0|e[t+u];else{var l=i[u-3]^i[u-8]^i[u-14]^i[u-16];i[u]=l<<1|l>>>31}l=(r<<5|r>>>27)+c+i[u],l=20>u?l+(1518500249+(o&a|~o&s)):40>u?l+(1859775393+(o^a^s)):60>u?l+((o&a|o&s|a&s)-1894007588):l+((o^a^s)-899497514),c=s,s=a,a=o<<30|o>>>2,o=r,r=l}n[0]=n[0]+r|0,n[1]=n[1]+o|0,n[2]=n[2]+a|0,n[3]=n[3]+s|0,n[4]=n[4]+c|0},_doFinalize:function(){var e=this._data,t=e.words,n=8*this._nDataBytes,r=8*e.sigBytes;return t[r>>>5]|=128<<24-r%32,t[14+(r+64>>>9<<4)]=Math.floor(n/4294967296),t[15+(r+64>>>9<<4)]=n,e.sigBytes=4*t.length,this._process(),this._hash},clone:function(){var e=o.clone.call(this);return e._hash=this._hash.clone(),e}}),t.SHA1=o._createHelper(a),t.HmacSHA1=o._createHmacHelper(a),function(){var e=l,t=e.enc.Utf8;e.algo.HMAC=e.lib.Base.extend({init:function(e,n){e=this._hasher=new e.init,"string"==typeof n&&(n=t.parse(n));var r=e.blockSize,o=4*r;n.sigBytes>o&&(n=e.finalize(n)),n.clamp();for(var i=this._oKey=n.clone(),a=this._iKey=n.clone(),s=i.words,c=a.words,u=0;u>>2]>>>24-i%4*8&255)<<16|(t[i+1>>>2]>>>24-(i+1)%4*8&255)<<8|t[i+2>>>2]>>>24-(i+2)%4*8&255,s=0;s<4&&i+.75*s>>6*(3-s)&63));var c=r.charAt(64);if(c)for(;o.length%4;)o.push(c);return o.join("")},parse:function(e){var t=e.length,n=this._map,r=n.charAt(64);if(r){var o=e.indexOf(r);-1!=o&&(t=o)}for(var i=[],a=0,s=0;s>>6-s%4*2;i[a>>>2]|=(u|l)<<24-a%4*8,a++}return c.create(i,a)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="},"object"===u(e)?e.exports=l:window.CryptoJS=l}).call(this,n(4)(e))},function(e,t,n){var r=n(17).DOMParser,o=function(){this.version="1.3.5";var e={mergeCDATA:!0,normalize:!0,stripElemPrefix:!0},t=new RegExp(/(?!xmlns)^.*:/);new RegExp(/^\s+|\s+$/g);return this.grokType=function(e){return/^\s*$/.test(e)?null:/^(?:true|false)$/i.test(e)?"true"===e.toLowerCase():isFinite(e)?parseFloat(e):e},this.parseString=function(e,t){if(e){var n=this.stringToXML(e);return n.getElementsByTagName("parsererror").length?null:this.parseXML(n,t)}return null},this.parseXML=function(n,r){for(var i in r)e[i]=r[i];var a={},s=0,c="";if(n.childNodes.length)for(var u,l,d,p=0;p=t+n||t?new java.lang.String(e,t,n)+"":e}function g(e,t){e.currentElement?e.currentElement.appendChild(t):e.doc.appendChild(t)}p.prototype.parseFromString=function(e,t){var n=this.options,r=new l,o=n.domBuilder||new f,a=n.errorHandler,s=n.locator,u=n.xmlns||{},p=/\/x?html?$/.test(t),h=p?i.HTML_ENTITIES:i.XML_ENTITIES;s&&o.setDocumentLocator(s),r.errorHandler=function(e,t,n){if(!e){if(t instanceof f)return t;e=t}var r={},o=e instanceof Function;function i(t){var i=e[t];!i&&o&&(i=2==e.length?function(n){e(t,n)}:e),r[t]=i&&function(e){i("[xmldom "+t+"]\t"+e+function(e){if(e)return"\n@"+(e.systemId||"")+"#[line:"+e.lineNumber+",col:"+e.columnNumber+"]"}(n))}||function(){}}return n=n||{},i("warning"),i("error"),i("fatalError"),r}(a,o,s),r.domBuilder=n.domBuilder||o,p&&(u[""]=c.HTML),u.xml=u.xml||c.XML;var m=n.normalizeLineEndings||d;return e&&"string"==typeof e?r.parse(m(e),u,h):r.errorHandler.error("invalid doc source"),o.doc},f.prototype={startDocument:function(){this.doc=(new s).createDocument(null,null,null),this.locator&&(this.doc.documentURI=this.locator.systemId)},startElement:function(e,t,n,r){var o=this.doc,i=o.createElementNS(e,n||t),a=r.length;g(this,i),this.currentElement=i,this.locator&&h(this.locator,i);for(var s=0;s",lt:"<",quot:'"'}),t.HTML_ENTITIES=r({lt:"<",gt:">",amp:"&",quot:'"',apos:"'",Agrave:"À",Aacute:"Á",Acirc:"Â",Atilde:"Ã",Auml:"Ä",Aring:"Å",AElig:"Æ",Ccedil:"Ç",Egrave:"È",Eacute:"É",Ecirc:"Ê",Euml:"Ë",Igrave:"Ì",Iacute:"Í",Icirc:"Î",Iuml:"Ï",ETH:"Ð",Ntilde:"Ñ",Ograve:"Ò",Oacute:"Ó",Ocirc:"Ô",Otilde:"Õ",Ouml:"Ö",Oslash:"Ø",Ugrave:"Ù",Uacute:"Ú",Ucirc:"Û",Uuml:"Ü",Yacute:"Ý",THORN:"Þ",szlig:"ß",agrave:"à",aacute:"á",acirc:"â",atilde:"ã",auml:"ä",aring:"å",aelig:"æ",ccedil:"ç",egrave:"è",eacute:"é",ecirc:"ê",euml:"ë",igrave:"ì",iacute:"í",icirc:"î",iuml:"ï",eth:"ð",ntilde:"ñ",ograve:"ò",oacute:"ó",ocirc:"ô",otilde:"õ",ouml:"ö",oslash:"ø",ugrave:"ù",uacute:"ú",ucirc:"û",uuml:"ü",yacute:"ý",thorn:"þ",yuml:"ÿ",nbsp:" ",iexcl:"¡",cent:"¢",pound:"£",curren:"¤",yen:"¥",brvbar:"¦",sect:"§",uml:"¨",copy:"©",ordf:"ª",laquo:"«",not:"¬",shy:"­­",reg:"®",macr:"¯",deg:"°",plusmn:"±",sup2:"²",sup3:"³",acute:"´",micro:"µ",para:"¶",middot:"·",cedil:"¸",sup1:"¹",ordm:"º",raquo:"»",frac14:"¼",frac12:"½",frac34:"¾",iquest:"¿",times:"×",divide:"÷",forall:"∀",part:"∂",exist:"∃",empty:"∅",nabla:"∇",isin:"∈",notin:"∉",ni:"∋",prod:"∏",sum:"∑",minus:"−",lowast:"∗",radic:"√",prop:"∝",infin:"∞",ang:"∠",and:"∧",or:"∨",cap:"∩",cup:"∪",int:"∫",there4:"∴",sim:"∼",cong:"≅",asymp:"≈",ne:"≠",equiv:"≡",le:"≤",ge:"≥",sub:"⊂",sup:"⊃",nsub:"⊄",sube:"⊆",supe:"⊇",oplus:"⊕",otimes:"⊗",perp:"⊥",sdot:"⋅",Alpha:"Α",Beta:"Β",Gamma:"Γ",Delta:"Δ",Epsilon:"Ε",Zeta:"Ζ",Eta:"Η",Theta:"Θ",Iota:"Ι",Kappa:"Κ",Lambda:"Λ",Mu:"Μ",Nu:"Ν",Xi:"Ξ",Omicron:"Ο",Pi:"Π",Rho:"Ρ",Sigma:"Σ",Tau:"Τ",Upsilon:"Υ",Phi:"Φ",Chi:"Χ",Psi:"Ψ",Omega:"Ω",alpha:"α",beta:"β",gamma:"γ",delta:"δ",epsilon:"ε",zeta:"ζ",eta:"η",theta:"θ",iota:"ι",kappa:"κ",lambda:"λ",mu:"μ",nu:"ν",xi:"ξ",omicron:"ο",pi:"π",rho:"ρ",sigmaf:"ς",sigma:"σ",tau:"τ",upsilon:"υ",phi:"φ",chi:"χ",psi:"ψ",omega:"ω",thetasym:"ϑ",upsih:"ϒ",piv:"ϖ",OElig:"Œ",oelig:"œ",Scaron:"Š",scaron:"š",Yuml:"Ÿ",fnof:"ƒ",circ:"ˆ",tilde:"˜",ensp:" ",emsp:" ",thinsp:" ",zwnj:"‌",zwj:"‍",lrm:"‎",rlm:"‏",ndash:"–",mdash:"—",lsquo:"‘",rsquo:"’",sbquo:"‚",ldquo:"“",rdquo:"”",bdquo:"„",dagger:"†",Dagger:"‡",bull:"•",hellip:"…",permil:"‰",prime:"′",Prime:"″",lsaquo:"‹",rsaquo:"›",oline:"‾",euro:"€",trade:"™",larr:"←",uarr:"↑",rarr:"→",darr:"↓",harr:"↔",crarr:"↵",lceil:"⌈",rceil:"⌉",lfloor:"⌊",rfloor:"⌋",loz:"◊",spades:"♠",clubs:"♣",hearts:"♥",diams:"♦"}),t.entityMap=t.HTML_ENTITIES},function(e,t,n){var r=n(2).NAMESPACE,o=/[A-Z_a-z\xC0-\xD6\xD8-\xF6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/,i=new RegExp("[\\-\\.0-9"+o.source.slice(1,-1)+"\\u00B7\\u0300-\\u036F\\u203F-\\u2040]"),a=new RegExp("^"+o.source+i.source+"*(?::"+o.source+i.source+"*)?$"),s=0,c=1,u=2,l=3,d=4,p=5,f=6,h=7;function m(e,t){this.message=e,this.locator=t,Error.captureStackTrace&&Error.captureStackTrace(this,m)}function g(){}function y(e,t){return t.lineNumber=e.lineNumber,t.columnNumber=e.columnNumber,t}function v(e,t,n,o,i,a){function m(e,t,r){n.attributeNames.hasOwnProperty(e)&&a.fatalError("Attribute "+e+" redefined"),n.addValue(e,t.replace(/[\t\n\r]/g," ").replace(/&#?\w+;/g,i),r)}for(var g,y=++t,v=s;;){var C=e.charAt(y);switch(C){case"=":if(v===c)g=e.slice(t,y),v=l;else{if(v!==u)throw new Error("attribute equal must after attrName");v=l}break;case"'":case'"':if(v===l||v===c){if(v===c&&(a.warning('attribute value must after "="'),g=e.slice(t,y)),t=y+1,!((y=e.indexOf(C,t))>0))throw new Error("attribute value no end '"+C+"' match");m(g,k=e.slice(t,y),t-1),v=p}else{if(v!=d)throw new Error('attribute value must after "="');m(g,k=e.slice(t,y),t),a.warning('attribute "'+g+'" missed start quot('+C+")!!"),t=y+1,v=p}break;case"/":switch(v){case s:n.setTagName(e.slice(t,y));case p:case f:case h:v=h,n.closed=!0;case d:case c:case u:break;default:throw new Error("attribute invalid close char('/')")}break;case"":return a.error("unexpected end of input"),v==s&&n.setTagName(e.slice(t,y)),y;case">":switch(v){case s:n.setTagName(e.slice(t,y));case p:case f:case h:break;case d:case c:"/"===(k=e.slice(t,y)).slice(-1)&&(n.closed=!0,k=k.slice(0,-1));case u:v===u&&(k=g),v==d?(a.warning('attribute "'+k+'" missed quot(")!'),m(g,k,t)):(r.isHTML(o[""])&&k.match(/^(?:disabled|checked|selected)$/i)||a.warning('attribute "'+k+'" missed value!! "'+k+'" instead!!'),m(k,k,t));break;case l:throw new Error("attribute value missed!!")}return y;case"€":C=" ";default:if(C<=" ")switch(v){case s:n.setTagName(e.slice(t,y)),v=f;break;case c:g=e.slice(t,y),v=u;break;case d:var k=e.slice(t,y);a.warning('attribute "'+k+'" missed quot(")!!'),m(g,k,t);case p:v=f}else switch(v){case u:n.tagName;r.isHTML(o[""])&&g.match(/^(?:disabled|checked|selected)$/i)||a.warning('attribute "'+g+'" missed value!! "'+g+'" instead2!!'),m(g,g,t),t=y,v=c;break;case p:a.warning('attribute space is required"'+g+'"!!');case f:v=c,t=y;break;case l:v=d,t=y;break;case h:throw new Error("elements closed character '/' and '>' must be connected to")}}y++}}function C(e,t,n){for(var o=e.tagName,i=null,a=e.length;a--;){var s=e[a],c=s.qName,u=s.value;if((f=c.indexOf(":"))>0)var l=s.prefix=c.slice(0,f),d=c.slice(f+1),p="xmlns"===l&&d;else d=c,l=null,p="xmlns"===c&&"";s.localName=d,!1!==p&&(null==i&&(i={},b(n,n={})),n[p]=i[p]=u,s.uri=r.XMLNS,t.startPrefixMapping(p,u))}for(a=e.length;a--;){(l=(s=e[a]).prefix)&&("xml"===l&&(s.uri=r.XML),"xmlns"!==l&&(s.uri=n[l||""]))}var f;(f=o.indexOf(":"))>0?(l=e.prefix=o.slice(0,f),d=e.localName=o.slice(f+1)):(l=null,d=e.localName=o);var h=e.uri=n[l||""];if(t.startElement(h,d,o,e),!e.closed)return e.currentNSMap=n,e.localNSMap=i,!0;if(t.endElement(h,d,o),i)for(l in i)Object.prototype.hasOwnProperty.call(i,l)&&t.endPrefixMapping(l)}function k(e,t,n,r,o){if(/^(?:script|textarea)$/i.test(n)){var i=e.indexOf("",t),a=e.substring(t+1,i);if(/[&<]/.test(a))return/^script$/i.test(n)?(o.characters(a,0,a.length),i):(a=a.replace(/&#?\w+;/g,r),o.characters(a,0,a.length),i)}return t+1}function S(e,t,n,r){var o=r[n];return null==o&&((o=e.lastIndexOf(""))t?(n.comment(e,t+4,o-t-4),o+3):(r.error("Unclosed comment"),-1):-1;if("CDATA["==e.substr(t+3,6)){var o=e.indexOf("]]>",t+9);return n.startCDATA(),n.characters(e,t+9,o-t-9),n.endCDATA(),o+3}var i=function(e,t){var n,r=[],o=/'[^']+'|"[^"]+"|[^\s<>\/=]+=?|(\/?\s*>|<)/g;o.lastIndex=t,o.exec(e);for(;n=o.exec(e);)if(r.push(n),n[1])return r}(e,t),a=i.length;if(a>1&&/!doctype/i.test(i[0][0])){var s=i[1][0],c=!1,u=!1;a>3&&(/^public$/i.test(i[2][0])?(c=i[3][0],u=a>4&&i[4][0]):/^system$/i.test(i[2][0])&&(u=i[3][0]));var l=i[a-1];return n.startDTD(s,c,u),n.endDTD(),l.index+l[0].length}return-1}function R(e,t,n){var r=e.indexOf("?>",t);if(r){var o=e.substring(t,r).match(/^<\?(\S*)\s*([\s\S]*?)\s*$/);if(o){o[0].length;return n.processingInstruction(o[1],o[2]),r+2}return-1}return-1}function E(){this.attributeNames={}}m.prototype=new Error,m.prototype.name=m.name,g.prototype={parse:function(e,t,n){var o=this.domBuilder;o.startDocument(),b(t,t={}),function(e,t,n,o,i){function a(e){if(e>65535){var t=55296+((e-=65536)>>10),n=56320+(1023&e);return String.fromCharCode(t,n)}return String.fromCharCode(e)}function s(e){var t=e.slice(1,-1);return Object.hasOwnProperty.call(n,t)?n[t]:"#"===t.charAt(0)?a(parseInt(t.substr(1).replace("x","0x"))):(i.error("entity not found:"+e),e)}function c(t){if(t>b){var n=e.substring(b,t).replace(/&#?\w+;/g,s);f&&u(b),o.characters(n,0,t-b),b=t}}function u(t,n){for(;t>=d&&(n=p.exec(e));)l=n.index,d=l+n[0].length,f.lineNumber++;f.columnNumber=t-l+1}var l=0,d=0,p=/.*(?:\r\n?|\n)|.*$/g,f=o.locator,h=[{currentNSMap:t}],g={},b=0;for(;;){try{var w=e.indexOf("<",b);if(w<0){if(!e.substr(b).match(/^\s*$/)){var A=o.doc,x=A.createTextNode(e.substr(b));A.appendChild(x),o.currentElement=x}return}switch(w>b&&c(w),e.charAt(w+1)){case"/":var I=e.indexOf(">",w+3),O=e.substring(w+2,I).replace(/[ \t\n\r]+$/g,""),B=h.pop();I<0?(O=e.substring(w+2).replace(/[\s<].*/,""),i.error("end tag name: "+O+" is not complete:"+B.tagName),I=w+1+O.length):O.match(/\sb?b=I:c(Math.max(w,b)+1)}}(e,t,n,o,this.errorHandler),o.endDocument()}},E.prototype={setTagName:function(e){if(!a.test(e))throw new Error("invalid tagName:"+e);this.tagName=e},addValue:function(e,t,n){if(!a.test(e))throw new Error("invalid attribute:"+e);this.attributeNames[e]=this.length,this[this.length++]={qName:e,value:t,offset:n}},length:0,getLocalName:function(e){return this[e].localName},getLocator:function(e){return this[e].locator},getQName:function(e){return this[e].qName},getURI:function(e){return this[e].uri},getValue:function(e){return this[e].value}},t.XMLReader=g,t.ParseError=m},function(e,t,n){var r=n(0),o="a-zA-Z_À-ÖØ-öø-ÿͰ-ͽͿ-῿‌-‍⁰-↏Ⰰ-⿿、-퟿豈-﷏ﷰ-�",i=new RegExp("^([^"+o+"])|^((x|X)(m|M)(l|L))|([^"+o+"-.0-9·̀-ͯ‿⁀])","g"),a=/[^\x09\x0A\x0D\x20-\xFF\x85\xA0-\uD7FF\uE000-\uFDCF\uFDE0-\uFFFD]/gm,s=function(e){var t=[];if(e instanceof Object)for(var n in e)e.hasOwnProperty(n)&&t.push(n);return t},c=function(e,t){var n=function(e,n,r,o,a){var s=void 0!==t.indent?t.indent:"\t",c=t.prettyPrint?"\n"+new Array(o).join(s):"";t.removeIllegalNameCharacters&&(e=e.replace(i,"_"));var u=[c,"<",e,r||""];return n&&n.length>0?(u.push(">"),u.push(n),a&&u.push(c),u.push("")):u.push("/>"),u.join("")};return function e(o,i,c){var u=r(o);switch((Array.isArray?Array.isArray(o):o instanceof Array)?u="array":o instanceof Date&&(u="date"),u){case"array":var l=[];return o.map((function(t){l.push(e(t,1,c+1))})),t.prettyPrint&&l.push("\n"),l.join("");case"date":return o.toJSON?o.toJSON():o+"";case"object":var d=[];for(var p in o)if(o.hasOwnProperty(p))if(o[p]instanceof Array)for(var f=0;f0&&d.push("\n"),d.join("");case"function":return o();default:return t.escape?(""+o).replace(/&/g,"&").replace(//g,">").replace(/'/g,"'").replace(/"/g,""").replace(a,""):""+o}}(e,0,0)},u=function(e){var t=['"),t.join("")};e.exports=function(e,t){if(t||(t={xmlHeader:{standalone:!0},prettyPrint:!0,indent:" ",escape:!0}),"string"==typeof e)try{e=JSON.parse(e.toString())}catch(e){return!1}var n="",o="";return t&&("object"==r(t)?(t.xmlHeader&&(n=u(!!t.xmlHeader.standalone)),void 0!==t.docType&&(o="")):n=u()),[n,(t=t||{}).prettyPrint&&o?"\n":"",o,c(e,t)].join("").replace(/\n{2,}/g,"\n").replace(/\s+$/g,"")}},function(e,t){var n=function(e){var t=(e=e||{}).Base64,n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",r=function(e){for(var t={},n=0,r=e.length;n>>6)+o(128|63&t):o(224|t>>>12&15)+o(128|t>>>6&63)+o(128|63&t);var t=65536+1024*(e.charCodeAt(0)-55296)+(e.charCodeAt(1)-56320);return o(240|t>>>18&7)+o(128|t>>>12&63)+o(128|t>>>6&63)+o(128|63&t)},a=/[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g,s=function(e){return e.replace(a,i)},c=function(e){var t=[0,2,1][e.length%3],r=e.charCodeAt(0)<<16|(e.length>1?e.charCodeAt(1):0)<<8|(e.length>2?e.charCodeAt(2):0);return[n.charAt(r>>>18),n.charAt(r>>>12&63),t>=2?"=":n.charAt(r>>>6&63),t>=1?"=":n.charAt(63&r)].join("")},u=e.btoa?function(t){return e.btoa(t)}:function(e){return e.replace(/[\s\S]{1,3}/g,c)},l=function(e){return u(s(e))},d=function(e,t){return t?l(String(e)).replace(/[+\/]/g,(function(e){return"+"==e?"-":"_"})).replace(/=/g,""):l(String(e))},p=new RegExp(["[À-ß][€-¿]","[à-ï][€-¿]{2}","[ð-÷][€-¿]{3}"].join("|"),"g"),f=function(e){switch(e.length){case 4:var t=((7&e.charCodeAt(0))<<18|(63&e.charCodeAt(1))<<12|(63&e.charCodeAt(2))<<6|63&e.charCodeAt(3))-65536;return o(55296+(t>>>10))+o(56320+(1023&t));case 3:return o((15&e.charCodeAt(0))<<12|(63&e.charCodeAt(1))<<6|63&e.charCodeAt(2));default:return o((31&e.charCodeAt(0))<<6|63&e.charCodeAt(1))}},h=function(e){return e.replace(p,f)},m=function(e){var t=e.length,n=t%4,i=(t>0?r[e.charAt(0)]<<18:0)|(t>1?r[e.charAt(1)]<<12:0)|(t>2?r[e.charAt(2)]<<6:0)|(t>3?r[e.charAt(3)]:0),a=[o(i>>>16),o(i>>>8&255),o(255&i)];return a.length-=[0,0,2,1][n],a.join("")},g=e.atob?function(t){return e.atob(t)}:function(e){return e.replace(/[\s\S]{1,4}/g,m)},y=function(e){return h(g(e))},v=function(e){return y(String(e).replace(/[-_]/g,(function(e){return"-"==e?"+":"/"})).replace(/[^A-Za-z0-9\+\/]/g,""))};return{VERSION:"2.1.9",atob:g,btoa:u,fromBase64:v,toBase64:d,utob:s,encode:d,encodeURI:function(e){return d(e,!0)},btou:h,decode:v,noConflict:function(){var n=e.Base64;return e.Base64=t,n}}}();e.exports=n},function(e,t){e.exports=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},e.exports.__esModule=!0,e.exports.default=e.exports},function(e,t){function n(e,t){for(var n=0;n0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]60*this.strategy.requestInterval*1e3},e.prototype.getUploadUrl=function(){return this.strategy.httpsUploadUrl+"?appkey="+this.appkey},e.prototype.isBlackEvent=function(e){return-1!=this.strategy.blacklist.indexOf(e)},e.prototype.isEventUpOnOff=function(){return this.strategy.isEventUpOnOff},e.prototype.isSampleEvent=function(e){return!!Object.prototype.hasOwnProperty.call(this.realSample,e)&&this.realSample[e]this.duration)return this.createSession();t=r.sessionId,n=r.sessionStart,this.getSessionStackDepth=0}catch(e){}return{sessionId:t,sessionStart:n}},e.prototype.createSession=function(){var e=Date.now(),t={sessionId:this.appkey+"_"+e.toString(),sessionStart:e};this.storage.setItem(v,JSON.stringify(t)),this.storage.setItem(a,e.toString());var n="is_new_user",r=this.storage.getItem(n);return this.getSessionStackDepth<=1&&this.beacon.onDirectUserAction("rqd_applaunched",{A21:r?"N":"Y"}),this.storage.setItem(n,JSON.stringify(!1)),t},e}();function k(){var e=navigator.userAgent,t=e.indexOf("compatible")>-1&&e.indexOf("MSIE")>-1,n=e.indexOf("Edge")>-1&&!t,r=e.indexOf("Trident")>-1&&e.indexOf("rv:11.0")>-1;if(t){new RegExp("MSIE (\\d+\\.\\d+);").test(e);var o=parseFloat(RegExp.$1);return 7==o?7:8==o?8:9==o?9:10==o?10:6}return n?-2:r?11:-1}var S,b,T=function(){return(T=Object.assign||function(e){for(var t,n=1,r=arguments.length;n0||!window.indexedDB||/X5Lite/.test(navigator.userAgent)?(this.store=new x(t),this.dbEventCount=this.store.getCount()):(this.store=new A(e),this.getCount().then((function(e){n.dbEventCount=e})).catch((function(e){})))}return e.prototype.getCount=function(){return n(this,void 0,void 0,(function(){return r(this,(function(e){switch(e.label){case 0:return e.trys.push([0,2,,3]),[4,this.store.getCount()];case 1:return[2,e.sent()];case 2:return e.sent(),[2,Promise.reject()];case 3:return[2]}}))}))},e.prototype.insertEvent=function(e,t){return n(this,void 0,void 0,(function(){var n,o;return r(this,(function(r){switch(r.label){case 0:if(this.dbEventCount>=1e4)return[2,Promise.reject()];n=f(e.mapValue),r.label=1;case 1:return r.trys.push([1,3,,4]),this.dbEventCount++,[4,this.store.setItem(n,e)];case 2:return[2,r.sent()];case 3:return o=r.sent(),t&&t(o,e),this.dbEventCount--,[2,Promise.reject()];case 4:return[2]}}))}))},e.prototype.getEvents=function(){return n(this,void 0,void 0,(function(){var e;return r(this,(function(t){switch(t.label){case 0:e=[],t.label=1;case 1:return t.trys.push([1,3,,4]),[4,this.store.iterate((function(t){e.push(t)}))];case 2:case 3:return t.sent(),[2,Promise.all(e)];case 4:return[2]}}))}))},e.prototype.removeEvent=function(e){return n(this,void 0,void 0,(function(){var t;return r(this,(function(n){switch(n.label){case 0:t=f(e.mapValue),n.label=1;case 1:return n.trys.push([1,3,,4]),this.dbEventCount--,[4,this.store.removeItem(t)];case 2:return[2,n.sent()];case 3:return n.sent(),this.dbEventCount++,[2,Promise.reject()];case 4:return[2]}}))}))},e}(),O=function(){return(O=Object.assign||function(e){for(var t,n=1,r=arguments.length;n0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&i<8,t.isUnderIE8||(t.isUnderIE=i>0,e.needInitQimei&&function(e,t){var n;(void 0===n&&(n=Date.now()+"-"+Math.random()),new Promise((function(e,t){if(document.getElementById(n))e(void 0);else{var r=document.getElementsByTagName("head")[0],o=document.createElement("script");o.onload=function(){return function(){o.onload=null,e(void 0)}},o.onerror=function(e){o.onerror=null,r.removeChild(o),t(e)},o.src="https://tun-cos-1258344701.file.myqcloud.com/fp.js",o.id=n,r.appendChild(o)}}))).then((function(){(new Fingerprint).getQimei36(e,t)})).catch((function(e){}))}(e.appkey,(function(e){t.qimei36=e.q36})),t.network=new q(e),t.storage=new z(e.appkey),t.initCommonInfo(e),t.store=new I(e.appkey,t.storage),t.errorReport=new g(t.config,t.commonInfo,"web",t.network),t.strategy=new y(null==e.needQueryConfig||e.needQueryConfig,t.config,t.commonInfo,t.storage,t.network),t.logidStartTime=t.storage.getItem(G),t.logidStartTime||(t.logidStartTime=Date.now().toString(),t.storage.setItem(G,t.logidStartTime)),r=t.logidStartTime,o=Date.now()-Number.parseFloat(r),Math.floor(o/864e5)>=365&&t.storage.clear(),t.initSession(e),t.onDirectUserAction("rqd_js_init",{}),setTimeout((function(){return t.lifeCycle.emit("init")}),0),t.initDelayTime=e.delay?e.delay:1e3,t.cycleTask(t.initDelayTime)),t}return function(t,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}(r,n),r.prototype.initSession=function(e){var t=18e5;e.sessionDuration&&e.sessionDuration>3e4&&(t=e.sessionDuration),this.beaconSession=new C(this.storage,t,this)},r.prototype.initCommonInfo=function(e){var t=Number(this.storage.getItem(a));try{var n=JSON.parse(this.storage.getItem(s));(Date.now()-t>3e4||!n)&&this.storage.setItem(s,JSON.stringify([]))}catch(e){}e.uploadUrl&&(this.uploadUrl=e.uploadUrl+"?appkey="+e.appkey);var r=[window.screen.width,window.screen.height];window.devicePixelRatio&&r.push(window.devicePixelRatio),this.commonInfo={deviceId:this.storage.createDeviceId(),language:navigator&&navigator.language||"zh_CN",query:window.location.search,userAgent:navigator.userAgent,pixel:r.join("*"),channelID:e.channelID?String(e.channelID):"",openid:e.openid?String(e.openid):"",unid:e.unionid?String(e.unionid):"",sdkVersion:V},this.config.appVersion=e.versionCode?String(e.versionCode):"",this.config.strictMode=e.strictMode},r.prototype.cycleTask=function(e){var t=this;this.intervalID=window.setInterval((function(){t.pauseSearching||t.store.getEvents().then((function(e){0==e.length&&(t.pauseSearching=!0);var n=[],r=JSON.parse(t.storage.getItem(s));r||(r=[]),e&&e.forEach((function(e){var t=f(e.mapValue);-1==r.indexOf(t)&&(n.push(e),r.push(t))})),0!=n.length&&(t.storage.setItem(s,JSON.stringify(r)),t._normalLogPipeline(t.assembleData(n)))})).catch((function(e){}))}),e)},r.prototype.onReport=function(e,t,n){var r=this;if(this.isUnderIE8)this.errorReport.reportError("601","UnderIE8");else{this.pauseSearching=!1;var o=this.generateData(e,t,n);if(n&&0==this.delayTime&&!this.underWeakNet)this._normalLogPipeline(this.assembleData(o));else{var i=o.shift();i&&this.store.insertEvent(i,(function(e){e&&r.errorReport.reportError("604","insertEvent fail!")})).catch((function(e){r._normalLogPipeline(r.assembleData(o))}))}}},r.prototype.onSendBeacon=function(e,t){if(this.isUnderIE)this.errorReport.reportError("605","UnderIE");else{this.pauseSearching=!1;var n=this.assembleData(this.generateData(e,t,!0));"function"==typeof navigator.sendBeacon&&navigator.sendBeacon(this.uploadUrl||this.strategy.getUploadUrl(),JSON.stringify(n))}},r.prototype.generateData=function(e,n,r){var o=[],i="4.5.14-web_"+(r?"direct_log_id":"normal_log_id"),a=Number(this.storage.getItem(i));return a=a||1,n=t(t({},n),{A99:r?"Y":"N",A100:a.toString(),A72:V,A88:this.logidStartTime}),a++,this.storage.setItem(i,a.toString()),o.push({eventCode:e,eventTime:Date.now().toString(),mapValue:d(n,this.config.strictMode)}),o},r.prototype.assembleData=function(e){var n=this.beaconSession.getSession();return{appVersion:this.config.appVersion?p(this.config.appVersion):"",sdkId:"js",sdkVersion:V,mainAppKey:this.config.appkey,platformId:3,common:d(t(t({},this.additionalParams),{A2:this.commonInfo.deviceId,A8:this.commonInfo.openid,A12:this.commonInfo.language,A17:this.commonInfo.pixel,A23:this.commonInfo.channelID,A50:this.commonInfo.unid,A76:n.sessionId,A101:this.commonInfo.userAgent,A102:window.location.href,A104:document.referrer,A119:this.commonInfo.query,A153:this.qimei36}),!1),events:e}},r.prototype.monitorUploadFailed=function(){this.uselessCycleTaskNum++,this.uselessCycleTaskNum>=5&&(window.clearInterval(this.intervalID),this.cycleTask(6e4),this.underWeakNet=!0)},r.prototype.doCustomCycleTask=function(){this.uselessCycleTaskNum>=5&&(window.clearInterval(this.intervalID),this.cycleTask(this.initDelayTime)),this.uselessCycleTaskNum=0,this.underWeakNet=!1},r}(m)},"object"==a(t)&&void 0!==e?e.exports=i():void 0===(o="function"==typeof(r=i)?r.call(t,n,t,e):r)||(e.exports=o)},function(e,t,n){var r=n(9),o=n(1),i={};e.exports.transferToTaskMethod=function(e,t){i[t]=e[t],e[t]=function(e,n){e.SkipTask?i[t].call(this,e,n):this._addTask(t,e,n)}},e.exports.init=function(e){var t,n,a=[],s={},c=0,u=0,l=function(e){var t={id:e.id,Bucket:e.Bucket,Region:e.Region,Key:e.Key,FilePath:e.FilePath,state:e.state,loaded:e.loaded,size:e.size,speed:e.speed,percent:e.percent,hashPercent:e.hashPercent,error:e.error};return e.FilePath&&(t.FilePath=e.FilePath),e._custom&&(t._custom=e._custom),t},d=(n=function(){t=0,e.emit("task-list-update",{list:o.map(a,l)}),e.emit("list-update",{list:o.map(a,l)})},function(){t||(t=setTimeout(n))}),p=function(){if(!(a.length<=e.options.UploadQueueSize)){for(var t=0;te.options.UploadQueueSize;){var n="waiting"===a[t].state||"checking"===a[t].state||"uploading"===a[t].state;a[t]&&n?t++:(s[a[t].id]&&delete s[a[t].id],a.splice(t,1),u--)}d()}},f=function t(){if(!(c>=e.options.FileParallelLimit)){for(;a[u]&&"waiting"!==a[u].state;)u++;if(!(u>=a.length)){var n=a[u];u++,c++,n.state="checking",n.params.onTaskStart&&n.params.onTaskStart(l(n)),!n.params.UploadData&&(n.params.UploadData={});var r=o.formatParams(n.api,n.params);i[n.api].call(e,r,(function(r,o){e._isRunningTask(n.id)&&("checking"!==n.state&&"uploading"!==n.state||(n.state=r?"error":"success",r&&(n.error=r),c--,d(),t(),n.callback&&n.callback(r,o),"success"===n.state&&(n.params&&(delete n.params.UploadData,delete n.params.Body,delete n.params),delete n.callback)),p())})),d(),setTimeout(t)}}},h=function(t,n){var o=s[t];if(o){var i=o&&"waiting"===o.state,a=o&&("checking"===o.state||"uploading"===o.state);if("canceled"===n&&"canceled"!==o.state||"paused"===n&&i||"paused"===n&&a){if("paused"===n&&o.params.Body&&"function"==typeof o.params.Body.pipe)return;o.state=n,e.emit("inner-kill-task",{TaskId:t,toState:n});try{var u=o&&o.params&&o.params.UploadData.UploadId}catch(e){}"canceled"===n&&u&&r.removeUsing(u),d(),a&&(c--,f()),"canceled"===n&&(o.params&&(delete o.params.UploadData,delete o.params.Body,delete o.params),delete o.callback)}p()}};e._addTasks=function(t){o.each(t,(function(t){e._addTask(t.api,t.params,t.callback,!0)})),d()};e._addTask=function(t,n,r,i){n=o.formatParams(t,n);var c=o.uuid();n.TaskId=c,n.onTaskReady&&n.onTaskReady(c),n.TaskReady&&(n.TaskReady(c),!1);var u={params:n,callback:r,api:t,index:a.length,id:c,Bucket:n.Bucket,Region:n.Region,Key:n.Key,FilePath:n.FilePath||"",state:"waiting",loaded:0,size:0,speed:0,percent:0,hashPercent:0,error:null,_custom:n._custom},l=n.onHashProgress;n.onHashProgress=function(t){e._isRunningTask(u.id)&&(u.hashPercent=t.percent,l&&l(t),d())};var h=n.onProgress;return n.onProgress=function(t){e._isRunningTask(u.id)&&("checking"===u.state&&(u.state="uploading"),u.loaded=t.loaded,u.speed=t.speed,u.percent=t.percent,h&&h(t),d())},o.getFileSize(t,n,(function(e,t){if(e)return r(o.error(e));s[c]=u,a.push(u),u.size=t,!i&&d(),f(),p()})),c},e._isRunningTask=function(e){var t=s[e];return!(!t||"checking"!==t.state&&"uploading"!==t.state)},e.getTaskList=function(){return o.map(a,l)},e.cancelTask=function(e){h(e,"canceled")},e.pauseTask=function(e){h(e,"paused")},e.restartTask=function(e){var t=s[e];!t||"paused"!==t.state&&"error"!==t.state||(t.state="waiting",d(),u=Math.min(u,t.index),f())},e.isUploadRunning=function(){return c||u-1&&(a["SSE-COS"]=a.SSECOS,delete a.SSECOS)}var s=i.json2xml({InventoryConfiguration:r}),c=t.Headers;c["Content-Type"]="application/xml",c["Content-MD5"]=i.b64(i.md5(s));var u="PUT"===e?"name/cos:PutBucketInventory":"name/cos:PostBucketInventory";f.call(this,{Action:u,method:e,Bucket:t.Bucket,Region:t.Region,body:s,action:"inventory",qs:{id:t.Id},headers:c},(function(e,t){return e&&204===e.statusCode?n(null,{statusCode:e.statusCode}):e?n(e):void n(null,{statusCode:t.statusCode,headers:t.headers})}))}function s(e){var t={GrantFullControl:[],GrantWrite:[],GrantRead:[],GrantReadAcp:[],GrantWriteAcp:[],ACL:""},n={FULL_CONTROL:"GrantFullControl",WRITE:"GrantWrite",READ:"GrantRead",READ_ACP:"GrantReadAcp",WRITE_ACP:"GrantWriteAcp"},r=(e&&e.AccessControlList||{}).Grant;r&&(r=i.isArray(r)?r:[r]);var o={READ:0,WRITE:0,FULL_CONTROL:0};return r&&r.length&&i.each(r,(function(r){"qcs::cam::anyone:anyone"===r.Grantee.ID||"http://cam.qcloud.com/groups/global/AllUsers"===r.Grantee.URI?o[r.Permission]=1:r.Grantee.ID!==e.Owner.ID&&t[n[r.Permission]].push('id="'+r.Grantee.ID+'"')})),o.FULL_CONTROL||o.WRITE&&o.READ?t.ACL="public-read-write":o.READ?t.ACL="public-read":t.ACL="private",i.each(n,(function(e){t[e]=c(t[e].join(","))})),t}function c(e){var t,n,r=e.split(","),o={};for(t=0;t-1?"{Region}.myqcloud.com":"cos.{Region}.myqcloud.com",e.ForcePathStyle||(s="{Bucket}."+s)),s=(s=s.replace(/\{\{AppId\}\}/gi,a).replace(/\{\{Bucket\}\}/gi,o).replace(/\{\{Region\}\}/gi,t).replace(/\{\{.*?\}\}/gi,"")).replace(/\{AppId\}/gi,a).replace(/\{BucketName\}/gi,o).replace(/\{Bucket\}/gi,n).replace(/\{Region\}/gi,t).replace(/\{.*?\}/gi,""),/^[a-zA-Z]+:\/\//.test(s)||(s=u+"//"+s),"/"===s.slice(-1)&&(s=s.slice(0,-1));var l=s;return e.ForcePathStyle&&(l+="/"+n),l+="/",c&&(l+=i.camSafeUrlEncode(c).replace(/%2F/g,"/")),e.isLocation&&(l=l.replace(/^https?:\/\//,"")),l}var l=function(e){if(!e.Bucket||!e.Region)return"";var t=void 0===e.UseAccelerate?this.options.UseAccelerate:e.UseAccelerate,n=(e.Url||u({ForcePathStyle:this.options.ForcePathStyle,protocol:this.options.Protocol,domain:this.options.Domain,bucket:e.Bucket,region:t?"accelerate":e.Region})).replace(/^https?:\/\/([^/]+)(\/.*)?$/,"$1");return new RegExp("^([a-z\\d-]+-\\d+\\.)?(cos|cosv6|ci|pic)\\.([a-z\\d-]+)\\.myqcloud\\.com$").test(n)?n:""};function d(e,t){var n=i.clone(e.Headers),r="";i.each(n,(function(e,t){(""===e||["content-type","cache-control","expires"].indexOf(t.toLowerCase())>-1)&&delete n[t],"host"===t.toLowerCase()&&(r=e)}));var o=!1!==e.ForceSignHost;!r&&e.SignHost&&o&&(n.Host=e.SignHost);var a=!1,s=function(e,n){a||(a=!0,n&&n.XCosSecurityToken&&!n.SecurityToken&&((n=i.clone(n)).SecurityToken=n.XCosSecurityToken,delete n.XCosSecurityToken),t&&t(e,n))},c=this,u=e.Bucket||"",l=e.Region||"",d=e.Key||"";c.options.ForcePathStyle&&u&&(d=u+"/"+d);var p="/"+d,f={},h=e.Scope;if(!h){var m=e.Action||"",g=e.ResourceKey||e.Key||"";h=e.Scope||[{action:m,bucket:u,region:l,prefix:g}]}var y=i.md5(JSON.stringify(h));c._StsCache=c._StsCache||[],function(){var e,t;for(e=c._StsCache.length-1;e>=0;e--){t=c._StsCache[e];var n=Math.round(i.getSkewTime(c.options.SystemClockOffset)/1e3)+30;if(t.StartTime&&n=t.ExpiredTime)c._StsCache.splice(e,1);else if(!t.ScopeLimit||t.ScopeLimit&&t.ScopeKey===y){f=t;break}}}();var v,C=function(){var t="";f.StartTime&&e.Expires?t=f.StartTime+";"+(f.StartTime+1*e.Expires):f.StartTime&&f.ExpiredTime&&(t=f.StartTime+";"+f.ExpiredTime);var r={Authorization:i.getAuth({SecretId:f.TmpSecretId,SecretKey:f.TmpSecretKey,Method:e.Method,Pathname:p,Query:e.Query,Headers:n,Expires:e.Expires,UseRawKey:c.options.UseRawKey,SystemClockOffset:c.options.SystemClockOffset,KeyTime:t,ForceSignHost:o}),SecurityToken:f.SecurityToken||f.XCosSecurityToken||"",Token:f.Token||"",ClientIP:f.ClientIP||"",ClientUA:f.ClientUA||""};s(null,r)},k=function(e){if(e.Authorization){var t=!1,n=e.Authorization;if(n)if(n.indexOf(" ")>-1)t=!1;else if(n.indexOf("q-sign-algorithm=")>-1&&n.indexOf("q-ak=")>-1&&n.indexOf("q-sign-time=")>-1&&n.indexOf("q-key-time=")>-1&&n.indexOf("q-url-param-list=")>-1)t=!0;else try{(n=atob(n)).indexOf("a=")>-1&&n.indexOf("k=")>-1&&n.indexOf("t=")>-1&&n.indexOf("r=")>-1&&n.indexOf("b=")>-1&&(t=!0)}catch(e){}if(!t)return i.error(new Error("getAuthorization callback params format error"))}else{if(!e.TmpSecretId)return i.error(new Error('getAuthorization callback params missing "TmpSecretId"'));if(!e.TmpSecretKey)return i.error(new Error('getAuthorization callback params missing "TmpSecretKey"'));if(!e.SecurityToken&&!e.XCosSecurityToken)return i.error(new Error('getAuthorization callback params missing "SecurityToken"'));if(!e.ExpiredTime)return i.error(new Error('getAuthorization callback params missing "ExpiredTime"'));if(e.ExpiredTime&&10!==e.ExpiredTime.toString().length)return i.error(new Error('getAuthorization callback params "ExpiredTime" should be 10 digits'));if(e.StartTime&&10!==e.StartTime.toString().length)return i.error(new Error('getAuthorization callback params "StartTime" should be 10 StartTime'))}return!1};if(f.ExpiredTime&&f.ExpiredTime-i.getSkewTime(c.options.SystemClockOffset)/1e3>60)C();else if(c.options.getAuthorization)c.options.getAuthorization.call(c,{Bucket:u,Region:l,Method:e.Method,Key:d,Pathname:p,Query:e.Query,Headers:n,Scope:h,SystemClockOffset:c.options.SystemClockOffset,ForceSignHost:o},(function(e){"string"==typeof e&&(e={Authorization:e});var t=k(e);if(t)return s(t);e.Authorization?s(null,e):((f=e||{}).Scope=h,f.ScopeKey=y,c._StsCache.push(f),C())}));else{if(!c.options.getSTS)return v={Authorization:i.getAuth({SecretId:e.SecretId||c.options.SecretId,SecretKey:e.SecretKey||c.options.SecretKey,Method:e.Method,Pathname:p,Query:e.Query,Headers:n,Expires:e.Expires,UseRawKey:c.options.UseRawKey,SystemClockOffset:c.options.SystemClockOffset,ForceSignHost:o}),SecurityToken:c.options.SecurityToken||c.options.XCosSecurityToken},s(null,v),v;c.options.getSTS.call(c,{Bucket:u,Region:l},(function(e){(f=e||{}).Scope=h,f.ScopeKey=y,f.TmpSecretId||(f.TmpSecretId=f.SecretId),f.TmpSecretKey||(f.TmpSecretKey=f.SecretKey);var t=k(f);if(t)return s(t);c._StsCache.push(f),C()}))}return""}function p(e){var t=!1,n=!1,r=e.headers&&(e.headers.date||e.headers.Date)||e.error&&e.error.ServerTime;try{var o=e.error.Code,a=e.error.Message;("RequestTimeTooSkewed"===o||"AccessDenied"===o&&"Request has expired"===a)&&(n=!0)}catch(e){}if(e)if(n&&r){var s=Date.parse(r);this.options.CorrectClockSkew&&Math.abs(i.getSkewTime(this.options.SystemClockOffset)-s)>=3e4&&(this.options.SystemClockOffset=s-Date.now(),t=!0)}else 5===Math.floor(e.statusCode/100)&&(t=!0);return t}function f(e,t){var n=this;!e.headers&&(e.headers={}),!e.qs&&(e.qs={}),e.VersionId&&(e.qs.versionId=e.VersionId),e.qs=i.clearKey(e.qs),e.headers&&(e.headers=i.clearKey(e.headers)),e.qs&&(e.qs=i.clearKey(e.qs));var r=i.clone(e.qs);e.action&&(r[e.action]="");var o=e.url||e.Url,a=e.SignHost||l.call(this,{Bucket:e.Bucket,Region:e.Region,Url:o}),s=e.tracker;!function o(i){var c=n.options.SystemClockOffset;s&&s.setParams({signStartTime:(new Date).getTime(),retryTimes:i-1}),d.call(n,{Bucket:e.Bucket||"",Region:e.Region||"",Method:e.method,Key:e.Key,Query:r,Headers:e.headers,SignHost:a,Action:e.Action,ResourceKey:e.ResourceKey,Scope:e.Scope,ForceSignHost:n.options.ForceSignHost},(function(r,a){r?t(r):(s&&s.setParams({signEndTime:(new Date).getTime(),httpStartTime:(new Date).getTime()}),e.AuthData=a,h.call(n,e,(function(r,a){s&&s.setParams({httpEndTime:(new Date).getTime()}),r&&i<2&&(c!==n.options.SystemClockOffset||p.call(n,r))?(e.headers&&(delete e.headers.Authorization,delete e.headers.token,delete e.headers.clientIP,delete e.headers.clientUA,e.headers["x-cos-security-token"]&&delete e.headers["x-cos-security-token"],e.headers["x-ci-security-token"]&&delete e.headers["x-ci-security-token"]),o(i+1)):t(r,a)})))}))}(1)}function h(e,t){var n=this,r=e.TaskId;if(!r||n._isRunningTask(r)){var a=e.Bucket,s=e.Region,c=e.Key,l=e.method||"GET",d=e.Url||e.url,p=e.body,f=e.rawBody;n.options.UseAccelerate&&(s="accelerate"),d=d||u({ForcePathStyle:n.options.ForcePathStyle,protocol:n.options.Protocol,domain:n.options.Domain,bucket:a,region:s,object:c}),e.action&&(d=d+"?"+(i.isIOS_QQ?"".concat(e.action,"="):e.action)),e.qsStr&&(d=d.indexOf("?")>-1?d+"&"+e.qsStr:d+"?"+e.qsStr);var h={method:l,url:d,headers:e.headers,qs:e.qs,body:p},m="x-cos-security-token";if(i.isCIHost(d)&&(m="x-ci-security-token"),h.headers.Authorization=e.AuthData.Authorization,e.AuthData.Token&&(h.headers.token=e.AuthData.Token),e.AuthData.ClientIP&&(h.headers.clientIP=e.AuthData.ClientIP),e.AuthData.ClientUA&&(h.headers.clientUA=e.AuthData.ClientUA),e.AuthData.SecurityToken&&(h.headers[m]=e.AuthData.SecurityToken),h.headers&&(h.headers=i.clearKey(h.headers)),h=i.clearKey(h),e.onProgress&&"function"==typeof e.onProgress){var g=p&&(p.size||p.length)||0;h.onProgress=function(t){if(!r||n._isRunningTask(r)){var o=t?t.loaded:0;e.onProgress({loaded:o,total:g})}}}e.onDownloadProgress&&(h.onDownloadProgress=e.onDownloadProgress),e.DataType&&(h.dataType=e.DataType),this.options.Timeout&&(h.timeout=this.options.Timeout),n.options.ForcePathStyle&&(h.pathStyle=n.options.ForcePathStyle),n.emit("before-send",h);var y=h.url.includes("accelerate."),v=h.qs?Object.keys(h.qs).map((function(e){return"".concat(e,"=").concat(h.qs[e])})).join("&"):"",C=v?h.url+"?"+v:h.url;e.tracker&&e.tracker.setParams({reqUrl:C,accelerate:y?"Y":"N"}),e.tracker&&e.tracker.parent&&e.tracker.parent.setParams({reqUrl:C,accelerate:y?"Y":"N"});var k=(n.options.Request||o)(h,(function(e){if(!e||"abort"!==e.error){var o={options:h,error:e&&e.error,statusCode:e&&e.statusCode||0,statusMessage:e&&e.statusMessage||"",headers:e&&e.headers||{},body:e&&e.body};n.emit("after-receive",o);var a,s=o.error,c=o.body,u={statusCode:o.statusCode,statusMessage:o.statusMessage,headers:o.headers},l=function(e,o){if(r&&n.off("inner-kill-task",S),!a){a=!0;var s={};u&&u.statusCode&&(s.statusCode=u.statusCode),u&&u.headers&&(s.headers=u.headers),e?(e=i.extend(e||{},s),t(e,null)):(o=i.extend(o||{},s),t(null,o)),k=null}};if(s)return l(i.error(s));var d,p=u.statusCode,m=2===Math.floor(p/100);if(f&&m)return l(null,{body:c});try{d=c&&c.indexOf("<")>-1&&c.indexOf(">")>-1&&i.xml2json(c)||{}}catch(e){d={}}var g=d&&d.Error;m?l(null,d):g?l(i.error(new Error(g.Message),{code:g.Code,error:g})):p?l(i.error(new Error(u.statusMessage),{code:""+p})):p&&l(i.error(new Error("statusCode error")))}})),S=function e(t){t.TaskId===r&&(k&&k.abort&&k.abort(),n.off("inner-kill-task",e))};r&&n.on("inner-kill-task",S)}}var m={getService:function(e,t){"function"==typeof e&&(t=e,e={});var n=this.options.Protocol||(i.isBrowser&&"object"===("undefined"==typeof location?"undefined":r(location))&&"http:"===location.protocol?"http:":"https:"),o=this.options.ServiceDomain,a=e.AppId||this.options.appId,s=e.Region;o?(o=o.replace(/\{\{AppId\}\}/gi,a||"").replace(/\{\{Region\}\}/gi,s||"").replace(/\{\{.*?\}\}/gi,""),/^[a-zA-Z]+:\/\//.test(o)||(o=n+"//"+o),"/"===o.slice(-1)&&(o=o.slice(0,-1))):o=s?n+"//cos."+s+".myqcloud.com":n+"//service.cos.myqcloud.com";var c="",u=s?"cos."+s+".myqcloud.com":"service.cos.myqcloud.com";u===o.replace(/^https?:\/\/([^/]+)(\/.*)?$/,"$1")&&(c=u),f.call(this,{Action:"name/cos:GetService",url:o,method:"GET",headers:e.Headers,SignHost:c},(function(e,n){if(e)return t(e);var r=n&&n.ListAllMyBucketsResult&&n.ListAllMyBucketsResult.Buckets&&n.ListAllMyBucketsResult.Buckets.Bucket||[];r=i.isArray(r)?r:[r];var o=n&&n.ListAllMyBucketsResult&&n.ListAllMyBucketsResult.Owner||{};t(null,{Buckets:r,Owner:o,statusCode:n.statusCode,headers:n.headers})}))},putBucket:function(e,t){var n=this,r="";if(e.BucketAZConfig){var o={BucketAZConfig:e.BucketAZConfig};r=i.json2xml({CreateBucketConfiguration:o})}f.call(this,{Action:"name/cos:PutBucket",method:"PUT",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,body:r},(function(r,o){if(r)return t(r);var i=u({protocol:n.options.Protocol,domain:n.options.Domain,bucket:e.Bucket,region:e.Region,isLocation:!0});t(null,{Location:i,statusCode:o.statusCode,headers:o.headers})}))},headBucket:function(e,t){f.call(this,{Action:"name/cos:HeadBucket",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,method:"HEAD"},t)},getBucket:function(e,t){var n={};n.prefix=e.Prefix||"",n.delimiter=e.Delimiter,n.marker=e.Marker,n["max-keys"]=e.MaxKeys,n["encoding-type"]=e.EncodingType,f.call(this,{Action:"name/cos:GetBucket",ResourceKey:n.prefix,method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,qs:n},(function(e,n){if(e)return t(e);var r=n.ListBucketResult||{},o=r.Contents||[],a=r.CommonPrefixes||[];o=i.isArray(o)?o:[o],a=i.isArray(a)?a:[a];var s=i.clone(r);i.extend(s,{Contents:o,CommonPrefixes:a,statusCode:n.statusCode,headers:n.headers}),t(null,s)}))},deleteBucket:function(e,t){f.call(this,{Action:"name/cos:DeleteBucket",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,method:"DELETE"},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},putBucketAcl:function(e,t){var n=e.Headers,r="";if(e.AccessControlPolicy){var o=i.clone(e.AccessControlPolicy||{}),a=o.Grants||o.Grant;a=i.isArray(a)?a:[a],delete o.Grant,delete o.Grants,o.AccessControlList={Grant:a},r=i.json2xml({AccessControlPolicy:o}),n["Content-Type"]="application/xml",n["Content-MD5"]=i.b64(i.md5(r))}i.each(n,(function(e,t){0===t.indexOf("x-cos-grant-")&&(n[t]=c(n[t]))})),f.call(this,{Action:"name/cos:PutBucketACL",method:"PUT",Bucket:e.Bucket,Region:e.Region,headers:n,action:"acl",body:r},(function(e,n){if(e)return t(e);t(null,{statusCode:n.statusCode,headers:n.headers})}))},getBucketAcl:function(e,t){f.call(this,{Action:"name/cos:GetBucketACL",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"acl"},(function(e,n){if(e)return t(e);var r=n.AccessControlPolicy||{},o=r.Owner||{},a=r.AccessControlList.Grant||[];a=i.isArray(a)?a:[a];var c=s(r);n.headers&&n.headers["x-cos-acl"]&&(c.ACL=n.headers["x-cos-acl"]),c=i.extend(c,{Owner:o,Grants:a,statusCode:n.statusCode,headers:n.headers}),t(null,c)}))},putBucketCors:function(e,t){var n=(e.CORSConfiguration||{}).CORSRules||e.CORSRules||[];n=i.clone(i.isArray(n)?n:[n]),i.each(n,(function(e){i.each(["AllowedOrigin","AllowedHeader","AllowedMethod","ExposeHeader"],(function(t){var n=t+"s",r=e[n]||e[t]||[];delete e[n],e[t]=i.isArray(r)?r:[r]}))}));var r={CORSRule:n};e.ResponseVary&&(r.ResponseVary=e.ResponseVary);var o=i.json2xml({CORSConfiguration:r}),a=e.Headers;a["Content-Type"]="application/xml",a["Content-MD5"]=i.b64(i.md5(o)),f.call(this,{Action:"name/cos:PutBucketCORS",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:o,action:"cors",headers:a},(function(e,n){if(e)return t(e);t(null,{statusCode:n.statusCode,headers:n.headers})}))},getBucketCors:function(e,t){f.call(this,{Action:"name/cos:GetBucketCORS",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"cors"},(function(e,n){if(e)if(404===e.statusCode&&e.error&&"NoSuchCORSConfiguration"===e.error.Code){var r={CORSRules:[],statusCode:e.statusCode};e.headers&&(r.headers=e.headers),t(null,r)}else t(e);else{var o=n.CORSConfiguration||{},a=o.CORSRules||o.CORSRule||[];a=i.clone(i.isArray(a)?a:[a]);var s=o.ResponseVary;i.each(a,(function(e){i.each(["AllowedOrigin","AllowedHeader","AllowedMethod","ExposeHeader"],(function(t){var n=t+"s",r=e[n]||e[t]||[];delete e[t],e[n]=i.isArray(r)?r:[r]}))})),t(null,{CORSRules:a,ResponseVary:s,statusCode:n.statusCode,headers:n.headers})}}))},deleteBucketCors:function(e,t){f.call(this,{Action:"name/cos:DeleteBucketCORS",method:"DELETE",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"cors"},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode||e.statusCode,headers:n.headers})}))},getBucketLocation:function(e,t){f.call(this,{Action:"name/cos:GetBucketLocation",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"location"},t)},getBucketPolicy:function(e,t){f.call(this,{Action:"name/cos:GetBucketPolicy",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"policy",rawBody:!0},(function(e,n){if(e)return e.statusCode&&403===e.statusCode?t(i.error(e,{ErrorStatus:"Access Denied"})):e.statusCode&&405===e.statusCode?t(i.error(e,{ErrorStatus:"Method Not Allowed"})):e.statusCode&&404===e.statusCode?t(i.error(e,{ErrorStatus:"Policy Not Found"})):t(e);var r={};try{r=JSON.parse(n.body)}catch(e){}t(null,{Policy:r,statusCode:n.statusCode,headers:n.headers})}))},putBucketPolicy:function(e,t){var n=e.Policy;try{"string"==typeof n&&(n=JSON.parse(n))}catch(e){}if(!n||"string"==typeof n)return t(i.error(new Error("Policy format error")));var r=JSON.stringify(n);n.version||(n.version="2.0");var o=e.Headers;o["Content-Type"]="application/json",o["Content-MD5"]=i.b64(i.md5(r)),f.call(this,{Action:"name/cos:PutBucketPolicy",method:"PUT",Bucket:e.Bucket,Region:e.Region,action:"policy",body:r,headers:o},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},deleteBucketPolicy:function(e,t){f.call(this,{Action:"name/cos:DeleteBucketPolicy",method:"DELETE",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"policy"},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode||e.statusCode,headers:n.headers})}))},putBucketTagging:function(e,t){var n=e.Tagging||{},r=n.TagSet||n.Tags||e.Tags||[];r=i.clone(i.isArray(r)?r:[r]);var o=i.json2xml({Tagging:{TagSet:{Tag:r}}}),a=e.Headers;a["Content-Type"]="application/xml",a["Content-MD5"]=i.b64(i.md5(o)),f.call(this,{Action:"name/cos:PutBucketTagging",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:o,action:"tagging",headers:a},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},getBucketTagging:function(e,t){f.call(this,{Action:"name/cos:GetBucketTagging",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"tagging"},(function(e,n){if(e)if(404!==e.statusCode||!e.error||"Not Found"!==e.error&&"NoSuchTagSet"!==e.error.Code)t(e);else{var r={Tags:[],statusCode:e.statusCode};e.headers&&(r.headers=e.headers),t(null,r)}else{var o=[];try{o=n.Tagging.TagSet.Tag||[]}catch(e){}o=i.clone(i.isArray(o)?o:[o]),t(null,{Tags:o,statusCode:n.statusCode,headers:n.headers})}}))},deleteBucketTagging:function(e,t){f.call(this,{Action:"name/cos:DeleteBucketTagging",method:"DELETE",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"tagging"},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},putBucketLifecycle:function(e,t){var n=(e.LifecycleConfiguration||{}).Rules||e.Rules||[];n=i.clone(n);var r=i.json2xml({LifecycleConfiguration:{Rule:n}}),o=e.Headers;o["Content-Type"]="application/xml",o["Content-MD5"]=i.b64(i.md5(r)),f.call(this,{Action:"name/cos:PutBucketLifecycle",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:r,action:"lifecycle",headers:o},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},getBucketLifecycle:function(e,t){f.call(this,{Action:"name/cos:GetBucketLifecycle",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"lifecycle"},(function(e,n){if(e)if(404===e.statusCode&&e.error&&"NoSuchLifecycleConfiguration"===e.error.Code){var r={Rules:[],statusCode:e.statusCode};e.headers&&(r.headers=e.headers),t(null,r)}else t(e);else{var o=[];try{o=n.LifecycleConfiguration.Rule||[]}catch(e){}o=i.clone(i.isArray(o)?o:[o]),t(null,{Rules:o,statusCode:n.statusCode,headers:n.headers})}}))},deleteBucketLifecycle:function(e,t){f.call(this,{Action:"name/cos:DeleteBucketLifecycle",method:"DELETE",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"lifecycle"},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},putBucketVersioning:function(e,t){if(e.VersioningConfiguration){var n=e.VersioningConfiguration||{},r=i.json2xml({VersioningConfiguration:n}),o=e.Headers;o["Content-Type"]="application/xml",o["Content-MD5"]=i.b64(i.md5(r)),f.call(this,{Action:"name/cos:PutBucketVersioning",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:r,action:"versioning",headers:o},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))}else t(i.error(new Error("missing param VersioningConfiguration")))},getBucketVersioning:function(e,t){f.call(this,{Action:"name/cos:GetBucketVersioning",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"versioning"},(function(e,n){e||!n.VersioningConfiguration&&(n.VersioningConfiguration={}),t(e,n)}))},putBucketReplication:function(e,t){var n=i.clone(e.ReplicationConfiguration),r=i.json2xml({ReplicationConfiguration:n});r=(r=r.replace(/<(\/?)Rules>/gi,"<$1Rule>")).replace(/<(\/?)Tags>/gi,"<$1Tag>");var o=e.Headers;o["Content-Type"]="application/xml",o["Content-MD5"]=i.b64(i.md5(r)),f.call(this,{Action:"name/cos:PutBucketReplication",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:r,action:"replication",headers:o},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},getBucketReplication:function(e,t){f.call(this,{Action:"name/cos:GetBucketReplication",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"replication"},(function(e,n){if(e)if(404!==e.statusCode||!e.error||"Not Found"!==e.error&&"ReplicationConfigurationnotFoundError"!==e.error.Code)t(e);else{var r={ReplicationConfiguration:{Rules:[]},statusCode:e.statusCode};e.headers&&(r.headers=e.headers),t(null,r)}else!n.ReplicationConfiguration&&(n.ReplicationConfiguration={}),n.ReplicationConfiguration.Rule&&(n.ReplicationConfiguration.Rules=i.makeArray(n.ReplicationConfiguration.Rule),delete n.ReplicationConfiguration.Rule),t(e,n)}))},deleteBucketReplication:function(e,t){f.call(this,{Action:"name/cos:DeleteBucketReplication",method:"DELETE",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"replication"},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},putBucketWebsite:function(e,t){if(e.WebsiteConfiguration){var n=i.clone(e.WebsiteConfiguration||{}),r=n.RoutingRules||n.RoutingRule||[];r=i.isArray(r)?r:[r],delete n.RoutingRule,delete n.RoutingRules,r.length&&(n.RoutingRules={RoutingRule:r});var o=i.json2xml({WebsiteConfiguration:n}),a=e.Headers;a["Content-Type"]="application/xml",a["Content-MD5"]=i.b64(i.md5(o)),f.call(this,{Action:"name/cos:PutBucketWebsite",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:o,action:"website",headers:a},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))}else t(i.error(new Error("missing param WebsiteConfiguration")))},getBucketWebsite:function(e,t){f.call(this,{Action:"name/cos:GetBucketWebsite",method:"GET",Bucket:e.Bucket,Region:e.Region,Key:e.Key,headers:e.Headers,action:"website"},(function(e,n){if(e)if(404===e.statusCode&&"NoSuchWebsiteConfiguration"===e.error.Code){var r={WebsiteConfiguration:{},statusCode:e.statusCode};e.headers&&(r.headers=e.headers),t(null,r)}else t(e);else{var o=n.WebsiteConfiguration||{};if(o.RoutingRules){var a=i.clone(o.RoutingRules.RoutingRule||[]);a=i.makeArray(a),o.RoutingRules=a}t(null,{WebsiteConfiguration:o,statusCode:n.statusCode,headers:n.headers})}}))},deleteBucketWebsite:function(e,t){f.call(this,{Action:"name/cos:DeleteBucketWebsite",method:"DELETE",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"website"},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},putBucketReferer:function(e,t){if(e.RefererConfiguration){var n=i.clone(e.RefererConfiguration||{}),r=n.DomainList||{},o=r.Domains||r.Domain||[];(o=i.isArray(o)?o:[o]).length&&(n.DomainList={Domain:o});var a=i.json2xml({RefererConfiguration:n}),s=e.Headers;s["Content-Type"]="application/xml",s["Content-MD5"]=i.b64(i.md5(a)),f.call(this,{Action:"name/cos:PutBucketReferer",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:a,action:"referer",headers:s},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))}else t(i.error(new Error("missing param RefererConfiguration")))},getBucketReferer:function(e,t){f.call(this,{Action:"name/cos:GetBucketReferer",method:"GET",Bucket:e.Bucket,Region:e.Region,Key:e.Key,headers:e.Headers,action:"referer"},(function(e,n){if(e)if(404===e.statusCode&&"NoSuchRefererConfiguration"===e.error.Code){var r={WebsiteConfiguration:{},statusCode:e.statusCode};e.headers&&(r.headers=e.headers),t(null,r)}else t(e);else{var o=n.RefererConfiguration||{};if(o.DomainList){var a=i.makeArray(o.DomainList.Domain||[]);o.DomainList={Domains:a}}t(null,{RefererConfiguration:o,statusCode:n.statusCode,headers:n.headers})}}))},putBucketDomain:function(e,t){var n=(e.DomainConfiguration||{}).DomainRule||e.DomainRule||[];n=i.clone(n);var r=i.json2xml({DomainConfiguration:{DomainRule:n}}),o=e.Headers;o["Content-Type"]="application/xml",o["Content-MD5"]=i.b64(i.md5(r)),f.call(this,{Action:"name/cos:PutBucketDomain",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:r,action:"domain",headers:o},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},getBucketDomain:function(e,t){f.call(this,{Action:"name/cos:GetBucketDomain",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"domain"},(function(e,n){if(e)return t(e);var r=[];try{r=n.DomainConfiguration.DomainRule||[]}catch(e){}r=i.clone(i.isArray(r)?r:[r]),t(null,{DomainRule:r,statusCode:n.statusCode,headers:n.headers})}))},deleteBucketDomain:function(e,t){f.call(this,{Action:"name/cos:DeleteBucketDomain",method:"DELETE",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"domain"},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},putBucketOrigin:function(e,t){var n=(e.OriginConfiguration||{}).OriginRule||e.OriginRule||[];n=i.clone(n);var r=i.json2xml({OriginConfiguration:{OriginRule:n}}),o=e.Headers;o["Content-Type"]="application/xml",o["Content-MD5"]=i.b64(i.md5(r)),f.call(this,{Action:"name/cos:PutBucketOrigin",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:r,action:"origin",headers:o},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},getBucketOrigin:function(e,t){f.call(this,{Action:"name/cos:GetBucketOrigin",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"origin"},(function(e,n){if(e)return t(e);var r=[];try{r=n.OriginConfiguration.OriginRule||[]}catch(e){}r=i.clone(i.isArray(r)?r:[r]),t(null,{OriginRule:r,statusCode:n.statusCode,headers:n.headers})}))},deleteBucketOrigin:function(e,t){f.call(this,{Action:"name/cos:DeleteBucketOrigin",method:"DELETE",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"origin"},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},putBucketLogging:function(e,t){var n=i.json2xml({BucketLoggingStatus:e.BucketLoggingStatus||""}),r=e.Headers;r["Content-Type"]="application/xml",r["Content-MD5"]=i.b64(i.md5(n)),f.call(this,{Action:"name/cos:PutBucketLogging",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:n,action:"logging",headers:r},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},getBucketLogging:function(e,t){f.call(this,{Action:"name/cos:GetBucketLogging",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"logging"},(function(e,n){if(e)return t(e);t(null,{BucketLoggingStatus:n.BucketLoggingStatus,statusCode:n.statusCode,headers:n.headers})}))},putBucketInventory:function(e,t){return a.call(this,"PUT",e,t)},postBucketInventory:function(e,t){return a.call(this,"POST",e,t)},getBucketInventory:function(e,t){f.call(this,{Action:"name/cos:GetBucketInventory",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"inventory",qs:{id:e.Id}},(function(e,n){if(e)return t(e);var r=n.InventoryConfiguration;if(r&&r.OptionalFields&&r.OptionalFields.Field){var o=r.OptionalFields.Field;i.isArray(o)||(o=[o]),r.OptionalFields=o}if(r.Destination&&r.Destination.COSBucketDestination&&r.Destination.COSBucketDestination.Encryption){var a=r.Destination.COSBucketDestination.Encryption;Object.keys(a).indexOf("SSE-COS")>-1&&(a.SSECOS=a["SSE-COS"],delete a["SSE-COS"])}t(null,{InventoryConfiguration:r,statusCode:n.statusCode,headers:n.headers})}))},listBucketInventory:function(e,t){f.call(this,{Action:"name/cos:ListBucketInventory",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"inventory",qs:{"continuation-token":e.ContinuationToken}},(function(e,n){if(e)return t(e);var r=n.ListInventoryConfigurationResult,o=r.InventoryConfiguration||[];o=i.isArray(o)?o:[o],delete r.InventoryConfiguration,i.each(o,(function(e){if(e&&e.OptionalFields&&e.OptionalFields.Field){var t=e.OptionalFields.Field;i.isArray(t)||(t=[t]),e.OptionalFields=t}if(e.Destination&&e.Destination.COSBucketDestination&&e.Destination.COSBucketDestination.Encryption){var n=e.Destination.COSBucketDestination.Encryption;Object.keys(n).indexOf("SSE-COS")>-1&&(n.SSECOS=n["SSE-COS"],delete n["SSE-COS"])}})),r.InventoryConfigurations=o,i.extend(r,{statusCode:n.statusCode,headers:n.headers}),t(null,r)}))},deleteBucketInventory:function(e,t){f.call(this,{Action:"name/cos:DeleteBucketInventory",method:"DELETE",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"inventory",qs:{id:e.Id}},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},putBucketAccelerate:function(e,t){if(e.AccelerateConfiguration){var n={AccelerateConfiguration:e.AccelerateConfiguration||{}},r=i.json2xml(n),o={"Content-Type":"application/xml"};o["Content-MD5"]=i.b64(i.md5(r)),f.call(this,{Action:"name/cos:PutBucketAccelerate",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:r,action:"accelerate",headers:o},(function(e,n){if(e)return t(e);t(null,{statusCode:n.statusCode,headers:n.headers})}))}else t(i.error(new Error("missing param AccelerateConfiguration")))},getBucketAccelerate:function(e,t){f.call(this,{Action:"name/cos:GetBucketAccelerate",method:"GET",Bucket:e.Bucket,Region:e.Region,action:"accelerate"},(function(e,n){e||!n.AccelerateConfiguration&&(n.AccelerateConfiguration={}),t(e,n)}))},putBucketEncryption:function(e,t){var n=e.ServerSideEncryptionConfiguration||{},r=n.Rule||n.Rules||[],o=i.json2xml({ServerSideEncryptionConfiguration:{Rule:r}}),a=e.Headers;a["Content-Type"]="application/xml",a["Content-MD5"]=i.b64(i.md5(o)),f.call(this,{Action:"name/cos:PutBucketEncryption",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:o,action:"encryption",headers:a},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},getBucketEncryption:function(e,t){f.call(this,{Action:"name/cos:GetBucketEncryption",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"encryption"},(function(e,n){if(e)if(404===e.statusCode&&"NoSuchEncryptionConfiguration"===e.code){var r={EncryptionConfiguration:{Rules:[]},statusCode:e.statusCode};e.headers&&(r.headers=e.headers),t(null,r)}else t(e);else{var o=i.makeArray(n.EncryptionConfiguration&&n.EncryptionConfiguration.Rule||[]);n.EncryptionConfiguration={Rules:o},t(e,n)}}))},deleteBucketEncryption:function(e,t){f.call(this,{Action:"name/cos:DeleteBucketReplication",method:"DELETE",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"encryption"},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},getObject:function(e,t){var n=e.Query||{},r=e.QueryString||"",o=i.throttleOnProgress.call(this,0,e.onProgress),a=e.tracker;a&&a.setParams({signStartTime:(new Date).getTime()}),n["response-content-type"]=e.ResponseContentType,n["response-content-language"]=e.ResponseContentLanguage,n["response-expires"]=e.ResponseExpires,n["response-cache-control"]=e.ResponseCacheControl,n["response-content-disposition"]=e.ResponseContentDisposition,n["response-content-encoding"]=e.ResponseContentEncoding,f.call(this,{Action:"name/cos:GetObject",method:"GET",Bucket:e.Bucket,Region:e.Region,Key:e.Key,VersionId:e.VersionId,DataType:e.DataType,headers:e.Headers,qs:n,qsStr:r,rawBody:!0,onDownloadProgress:o,tracker:a},(function(n,r){if(o(null,!0),n){var a=n.statusCode;return e.Headers["If-Modified-Since"]&&a&&304===a?t(null,{NotModified:!0}):t(n)}t(null,{Body:r.body,ETag:i.attr(r.headers,"etag",""),statusCode:r.statusCode,headers:r.headers})}))},headObject:function(e,t){f.call(this,{Action:"name/cos:HeadObject",method:"HEAD",Bucket:e.Bucket,Region:e.Region,Key:e.Key,VersionId:e.VersionId,headers:e.Headers},(function(n,r){if(n){var o=n.statusCode;return e.Headers["If-Modified-Since"]&&o&&304===o?t(null,{NotModified:!0,statusCode:o}):t(n)}r.ETag=i.attr(r.headers,"etag",""),t(null,r)}))},listObjectVersions:function(e,t){var n={};n.prefix=e.Prefix||"",n.delimiter=e.Delimiter,n["key-marker"]=e.KeyMarker,n["version-id-marker"]=e.VersionIdMarker,n["max-keys"]=e.MaxKeys,n["encoding-type"]=e.EncodingType,f.call(this,{Action:"name/cos:GetBucketObjectVersions",ResourceKey:n.prefix,method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,qs:n,action:"versions"},(function(e,n){if(e)return t(e);var r=n.ListVersionsResult||{},o=r.DeleteMarker||[];o=i.isArray(o)?o:[o];var a=r.Version||[];a=i.isArray(a)?a:[a];var s=i.clone(r);delete s.DeleteMarker,delete s.Version,i.extend(s,{DeleteMarkers:o,Versions:a,statusCode:n.statusCode,headers:n.headers}),t(null,s)}))},putObject:function(e,t){var n=this,r=e.ContentLength,o=i.throttleOnProgress.call(n,r,e.onProgress),a=e.Headers;a["Cache-Control"]||a["cache-control"]||(a["Cache-Control"]=""),a["Content-Type"]||a["content-type"]||(a["Content-Type"]=e.Body&&e.Body.type||"");var s=e.UploadAddMetaMd5||n.options.UploadAddMetaMd5||n.options.UploadCheckContentMd5,c=e.tracker;s&&c&&c.setParams({md5StartTime:(new Date).getTime()}),i.getBodyMd5(s,e.Body,(function(s){s&&(c&&c.setParams({md5EndTime:(new Date).getTime()}),n.options.UploadCheckContentMd5&&(a["Content-MD5"]=i.b64(s)),(e.UploadAddMetaMd5||n.options.UploadAddMetaMd5)&&(a["x-cos-meta-md5"]=s)),void 0!==e.ContentLength&&(a["Content-Length"]=e.ContentLength),o(null,!0),f.call(n,{Action:"name/cos:PutObject",TaskId:e.TaskId,method:"PUT",Bucket:e.Bucket,Region:e.Region,Key:e.Key,headers:e.Headers,qs:e.Query,body:e.Body,onProgress:o,tracker:c},(function(a,s){if(a)return o(null,!0),t(a);o({loaded:r,total:r},!0);var c=u({ForcePathStyle:n.options.ForcePathStyle,protocol:n.options.Protocol,domain:n.options.Domain,bucket:e.Bucket,region:n.options.UseAccelerate?"accelerate":e.Region,object:e.Key});c=c.substr(c.indexOf("://")+3),s.Location=c,s.ETag=i.attr(s.headers,"etag",""),t(null,s)}))}),e.onHashProgress)},deleteObject:function(e,t){f.call(this,{Action:"name/cos:DeleteObject",method:"DELETE",Bucket:e.Bucket,Region:e.Region,Key:e.Key,headers:e.Headers,VersionId:e.VersionId,action:e.Recursive?"recursive":""},(function(e,n){if(e){var r=e.statusCode;return r&&404===r?t(null,{BucketNotFound:!0,statusCode:r}):t(e)}t(null,{statusCode:n.statusCode,headers:n.headers})}))},getObjectAcl:function(e,t){var n={};e.VersionId&&(n.versionId=e.VersionId),f.call(this,{Action:"name/cos:GetObjectACL",method:"GET",Bucket:e.Bucket,Region:e.Region,Key:e.Key,headers:e.Headers,qs:n,action:"acl"},(function(e,n){if(e)return t(e);var r=n.AccessControlPolicy||{},o=r.Owner||{},a=r.AccessControlList&&r.AccessControlList.Grant||[];a=i.isArray(a)?a:[a];var c=s(r);delete c.GrantWrite,n.headers&&n.headers["x-cos-acl"]&&(c.ACL=n.headers["x-cos-acl"]),c=i.extend(c,{Owner:o,Grants:a,statusCode:n.statusCode,headers:n.headers}),t(null,c)}))},putObjectAcl:function(e,t){var n=e.Headers,r="";if(e.AccessControlPolicy){var o=i.clone(e.AccessControlPolicy||{}),a=o.Grants||o.Grant;a=i.isArray(a)?a:[a],delete o.Grant,delete o.Grants,o.AccessControlList={Grant:a},r=i.json2xml({AccessControlPolicy:o}),n["Content-Type"]="application/xml",n["Content-MD5"]=i.b64(i.md5(r))}i.each(n,(function(e,t){0===t.indexOf("x-cos-grant-")&&(n[t]=c(n[t]))})),f.call(this,{Action:"name/cos:PutObjectACL",method:"PUT",Bucket:e.Bucket,Region:e.Region,Key:e.Key,action:"acl",headers:n,body:r},(function(e,n){if(e)return t(e);t(null,{statusCode:n.statusCode,headers:n.headers})}))},optionsObject:function(e,t){var n=e.Headers;n.Origin=e.Origin,n["Access-Control-Request-Method"]=e.AccessControlRequestMethod,n["Access-Control-Request-Headers"]=e.AccessControlRequestHeaders,f.call(this,{Action:"name/cos:OptionsObject",method:"OPTIONS",Bucket:e.Bucket,Region:e.Region,Key:e.Key,headers:n},(function(e,n){if(e)return e.statusCode&&403===e.statusCode?t(null,{OptionsForbidden:!0,statusCode:e.statusCode}):t(e);var r=n.headers||{};t(null,{AccessControlAllowOrigin:r["access-control-allow-origin"],AccessControlAllowMethods:r["access-control-allow-methods"],AccessControlAllowHeaders:r["access-control-allow-headers"],AccessControlExposeHeaders:r["access-control-expose-headers"],AccessControlMaxAge:r["access-control-max-age"],statusCode:n.statusCode,headers:n.headers})}))},putObjectCopy:function(e,t){var n=this,r=e.Headers;r["Cache-Control"]||r["cache-control"]||(r["Cache-Control"]="");var o=e.CopySource||"",a=i.getSourceParams.call(this,o);if(a){var s=a.Bucket,c=a.Region,l=decodeURIComponent(a.Key);f.call(this,{Scope:[{action:"name/cos:GetObject",bucket:s,region:c,prefix:l},{action:"name/cos:PutObject",bucket:e.Bucket,region:e.Region,prefix:e.Key}],method:"PUT",Bucket:e.Bucket,Region:e.Region,Key:e.Key,VersionId:e.VersionId,headers:e.Headers},(function(r,o){if(r)return t(r);var a=i.clone(o.CopyObjectResult||{}),s=u({ForcePathStyle:n.options.ForcePathStyle,protocol:n.options.Protocol,domain:n.options.Domain,bucket:e.Bucket,region:e.Region,object:e.Key,isLocation:!0});i.extend(a,{Location:s,statusCode:o.statusCode,headers:o.headers}),t(null,a)}))}else t(i.error(new Error("CopySource format error")))},deleteMultipleObject:function(e,t){var n=e.Objects||[],r=e.Quiet;n=i.isArray(n)?n:[n];var o=i.json2xml({Delete:{Object:n,Quiet:r||!1}}),a=e.Headers;a["Content-Type"]="application/xml",a["Content-MD5"]=i.b64(i.md5(o));var s=i.map(n,(function(t){return{action:"name/cos:DeleteObject",bucket:e.Bucket,region:e.Region,prefix:t.Key}}));f.call(this,{Scope:s,method:"POST",Bucket:e.Bucket,Region:e.Region,body:o,action:"delete",headers:a},(function(e,n){if(e)return t(e);var r=n.DeleteResult||{},o=r.Deleted||[],a=r.Error||[];o=i.isArray(o)?o:[o],a=i.isArray(a)?a:[a];var s=i.clone(r);i.extend(s,{Error:a,Deleted:o,statusCode:n.statusCode,headers:n.headers}),t(null,s)}))},restoreObject:function(e,t){var n=e.Headers;if(e.RestoreRequest){var r=e.RestoreRequest||{},o=i.json2xml({RestoreRequest:r});n["Content-Type"]="application/xml",n["Content-MD5"]=i.b64(i.md5(o)),f.call(this,{Action:"name/cos:RestoreObject",method:"POST",Bucket:e.Bucket,Region:e.Region,Key:e.Key,VersionId:e.VersionId,body:o,action:"restore",headers:n},t)}else t(i.error(new Error("missing param RestoreRequest")))},putObjectTagging:function(e,t){var n=e.Tagging||{},r=n.TagSet||n.Tags||e.Tags||[];r=i.clone(i.isArray(r)?r:[r]);var o=i.json2xml({Tagging:{TagSet:{Tag:r}}}),a=e.Headers;a["Content-Type"]="application/xml",a["Content-MD5"]=i.b64(i.md5(o)),f.call(this,{Action:"name/cos:PutObjectTagging",method:"PUT",Bucket:e.Bucket,Key:e.Key,Region:e.Region,body:o,action:"tagging",headers:a,VersionId:e.VersionId},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},getObjectTagging:function(e,t){f.call(this,{Action:"name/cos:GetObjectTagging",method:"GET",Key:e.Key,Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"tagging",VersionId:e.VersionId},(function(e,n){if(e)if(404!==e.statusCode||!e.error||"Not Found"!==e.error&&"NoSuchTagSet"!==e.error.Code)t(e);else{var r={Tags:[],statusCode:e.statusCode};e.headers&&(r.headers=e.headers),t(null,r)}else{var o=[];try{o=n.Tagging.TagSet.Tag||[]}catch(e){}o=i.clone(i.isArray(o)?o:[o]),t(null,{Tags:o,statusCode:n.statusCode,headers:n.headers})}}))},deleteObjectTagging:function(e,t){f.call(this,{Action:"name/cos:DeleteObjectTagging",method:"DELETE",Bucket:e.Bucket,Region:e.Region,Key:e.Key,headers:e.Headers,action:"tagging",VersionId:e.VersionId},(function(e,n){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:n.statusCode,headers:n.headers})}))},selectObjectContent:function(e,t){if(!e.SelectType)return t(i.error(new Error("missing param SelectType")));var n=e.SelectRequest||{},r=i.json2xml({SelectRequest:n}),o=e.Headers;o["Content-Type"]="application/xml",o["Content-MD5"]=i.b64(i.md5(r)),f.call(this,{Action:"name/cos:GetObject",method:"POST",Bucket:e.Bucket,Region:e.Region,Key:e.Key,headers:e.Headers,action:"select",qs:{"select-type":e.SelectType},VersionId:e.VersionId,body:r,DataType:"arraybuffer",rawBody:!0},(function(e,n){if(e&&204===e.statusCode)return t(null,{statusCode:e.statusCode});if(e)return t(e);var r=i.parseSelectPayload(n.body);t(null,{statusCode:n.statusCode,headers:n.headers,Body:r.body,Payload:r.payload})}))},appendObject:function(e,t){var n=e.Headers;n["Cache-Control"]||n["cache-control"]||(n["Cache-Control"]=""),n["Content-Type"]||n["content-type"]||(n["Content-Type"]=e.Body&&e.Body.type||""),f.call(this,{Action:"name/cos:AppendObject",method:"POST",Bucket:e.Bucket,Region:e.Region,action:"append",Key:e.Key,body:e.Body,qs:{position:e.Position},headers:e.Headers},(function(e,n){if(e)return t(e);t(null,n)}))},uploadPartCopy:function(e,t){var n=e.CopySource||"",r=i.getSourceParams.call(this,n);if(r){var o=r.Bucket,a=r.Region,s=decodeURIComponent(r.Key);f.call(this,{Scope:[{action:"name/cos:GetObject",bucket:o,region:a,prefix:s},{action:"name/cos:PutObject",bucket:e.Bucket,region:e.Region,prefix:e.Key}],method:"PUT",Bucket:e.Bucket,Region:e.Region,Key:e.Key,VersionId:e.VersionId,qs:{partNumber:e.PartNumber,uploadId:e.UploadId},headers:e.Headers},(function(e,n){if(e)return t(e);var r=i.clone(n.CopyPartResult||{});i.extend(r,{statusCode:n.statusCode,headers:n.headers}),t(null,r)}))}else t(i.error(new Error("CopySource format error")))},multipartInit:function(e,t){var n=this,r=e.Headers,o=e.tracker;r["Cache-Control"]||r["cache-control"]||(r["Cache-Control"]=""),r["Content-Type"]||r["content-type"]||(r["Content-Type"]=e.Body&&e.Body.type||"");var a=e.Body&&(e.UploadAddMetaMd5||n.options.UploadAddMetaMd5);a&&o&&o.setParams({md5StartTime:(new Date).getTime()}),i.getBodyMd5(a,e.Body,(function(r){r&&(e.Headers["x-cos-meta-md5"]=r),a&&o&&o.setParams({md5EndTime:(new Date).getTime()}),f.call(n,{Action:"name/cos:InitiateMultipartUpload",method:"POST",Bucket:e.Bucket,Region:e.Region,Key:e.Key,action:"uploads",headers:e.Headers,qs:e.Query,tracker:o},(function(e,n){return e?(o&&o.parent&&o.parent.setParams({errorNode:"multipartInit"}),t(e)):(n=i.clone(n||{}))&&n.InitiateMultipartUploadResult?t(null,i.extend(n.InitiateMultipartUploadResult,{statusCode:n.statusCode,headers:n.headers})):void t(null,n)}))}),e.onHashProgress)},multipartUpload:function(e,t){var n=this;i.getFileSize("multipartUpload",e,(function(){var r=e.tracker,o=n.options.UploadCheckContentMd5;o&&r&&r.setParams({md5StartTime:(new Date).getTime()}),i.getBodyMd5(o,e.Body,(function(a){a&&(e.Headers["Content-MD5"]=i.b64(a)),o&&r&&r.setParams({md5EndTime:(new Date).getTime()}),r&&r.setParams({partNumber:e.PartNumber}),f.call(n,{Action:"name/cos:UploadPart",TaskId:e.TaskId,method:"PUT",Bucket:e.Bucket,Region:e.Region,Key:e.Key,qs:{partNumber:e.PartNumber,uploadId:e.UploadId},headers:e.Headers,onProgress:e.onProgress,body:e.Body||null,tracker:r},(function(e,n){if(e)return r&&r.parent&&r.parent.setParams({errorNode:"multipartUpload"}),t(e);t(null,{ETag:i.attr(n.headers,"etag",""),statusCode:n.statusCode,headers:n.headers})}))}))}))},multipartComplete:function(e,t){for(var n=this,r=e.UploadId,o=e.Parts,a=e.tracker,s=0,c=o.length;s-1?function(e){var t=e.match(/q-url-param-list.*?(?=&)/g)[0],n="q-url-param-list="+encodeURIComponent(t.replace(/q-url-param-list=/,"")).toLowerCase(),r=new RegExp(t,"g");return e.replace(r,n)}(n.Authorization):"sign="+encodeURIComponent(n.Authorization)),n.SecurityToken&&(r+="&x-cos-security-token="+n.SecurityToken),n.ClientIP&&(r+="&clientIP="+n.ClientIP),n.ClientUA&&(r+="&clientUA="+n.ClientUA),n.Token&&(r+="&token="+n.Token),a&&(r+="&"+a),setTimeout((function(){t(null,{Url:r})}))}}));return p?(s+="?"+p.Authorization+(p.SecurityToken?"&x-cos-security-token="+p.SecurityToken:""),a&&(s+="&"+a)):a&&(s+="?"+a),s},getAuth:function(e){return i.getAuth({SecretId:e.SecretId||this.options.SecretId||"",SecretKey:e.SecretKey||this.options.SecretKey||"",Bucket:e.Bucket,Region:e.Region,Method:e.Method,Key:e.Key,Query:e.Query,Headers:e.Headers,Expires:e.Expires,UseRawKey:this.options.UseRawKey,SystemClockOffset:this.options.SystemClockOffset})}};e.exports.init=function(e,t){t.transferToTaskMethod(m,"putObject"),i.each(m,(function(t,n){e.prototype[n]=i.apiWrapper(n,t),function(e,t,n){i.each(["Cors","Acl"],(function(r){if(e.slice(-r.length)===r){var o=e.slice(0,-r.length)+r.toUpperCase(),a=i.apiWrapper(e,t);n[o]=function(){a.apply(this,arguments)}}}))}(n,t,e.prototype)}))}},function(e,t,n){var r=n(0),o=function(e){switch(r(e)){case"string":return e;case"boolean":return e?"true":"false";case"number":return isFinite(e)?e:"";default:return""}},i=function(e,t,n){var r={};return t.getAllResponseHeaders().trim().split("\n").forEach((function(e){if(e){var t=e.indexOf(":"),n=e.substr(0,t).trim().toLowerCase(),o=e.substr(t+1).trim();r[n]=o}})),{error:e,statusCode:t.status,statusMessage:t.statusText,headers:r,body:n}},a=function(e,t){return t||"text"!==t?e.response:e.responseText};e.exports=function(e,t){var n,s,c,u,l=(e.method||"GET").toUpperCase(),d=e.url;if(e.qs){var p=(n=e.qs,s=s||"&",c=c||"=",null===n&&(n=void 0),"object"===r(n)?Object.keys(n).map((function(e){var t=encodeURIComponent(o(e))+c;return Array.isArray(n[e])?n[e].map((function(e){return t+encodeURIComponent(o(e))})).join(s):t+encodeURIComponent(o(n[e]))})).filter(Boolean).join(s):u?encodeURIComponent(o(u))+c+encodeURIComponent(o(n)):"");p&&(d+=(-1===d.indexOf("?")?"?":"&")+p)}var f=new XMLHttpRequest;if(f.open(l,d,!0),f.responseType=e.dataType||"text",e.xhrFields)for(var h in e.xhrFields)f[h]=e.xhrFields[h];var m=e.headers;if(m)for(var g in m)m.hasOwnProperty(g)&&"content-length"!==g.toLowerCase()&&"user-agent"!==g.toLowerCase()&&"origin"!==g.toLowerCase()&&"host"!==g.toLowerCase()&&f.setRequestHeader(g,m[g]);return e.onProgress&&f.upload&&(f.upload.onprogress=e.onProgress),e.onDownloadProgress&&(f.onprogress=e.onDownloadProgress),e.timeout&&(f.timeout=e.timeout),f.ontimeout=function(e){var n=new Error("timeout");t(i(n,f))},f.onload=function(){t(i(null,f,a(f,e.dataType)))},f.onerror=function(n){var r=a(f,e.dataType);if(r)t(i(null,f,r));else{var o=f.statusText;o||0!==f.status||(o=new Error("CORS blocked or network error")),t(i(o,f,r))}},f.send(e.body||""),f}},function(e,t,n){var r=n(0),o=n(9),i=n(30),a=n(8).EventProxy,s=n(1),c=n(6);function u(e,t){var n=e.TaskId,r=e.Bucket,c=e.Region,u=e.Key,p=e.StorageClass,f=this,h={},m=e.FileSize,g=e.SliceSize,y=Math.ceil(m/g),v=0,C=s.throttleOnProgress.call(f,m,e.onHashProgress),k=function(t,n){var r=t.length;if(0===r)return n(null,!0);if(r>y)return n(null,!1);if(r>1&&Math.max(t[0].Size,t[1].Size)!==g)return n(null,!1);!function o(i){if(i=a.length)S.emit("has_and_check_upload_id",t);else{var p=a[l];if(!s.isInArray(t,p))return o.removeUploadId.call(f,p),void i(l+1);o.using[p]?i(l+1):d.call(f,{Bucket:r,Region:c,Key:u,UploadId:p,tracker:e.tracker},(function(e,t){f._isRunningTask(n)&&(e?(o.removeUploadId.call(f,p),i(l+1)):S.emit("upload_id_available",{UploadId:p,PartList:t.PartList}))}))}}(0)}else S.emit("has_and_check_upload_id",t)})),S.on("get_remote_upload_id_list",(function(){l.call(f,{Bucket:r,Region:c,Key:u,tracker:e.tracker},(function(t,i){if(f._isRunningTask(n)){if(t)return S.emit("error",t);var a=s.filter(i.UploadList,(function(e){return e.Key===u&&(!p||e.StorageClass.toUpperCase()===p.toUpperCase())})).reverse().map((function(e){return e.UploadId||e.UploadID}));if(a.length)S.emit("seek_local_avail_upload_id",a);else{var c,l=o.getFileId(e.Body,e.ChunkSize,r,u);l&&(c=o.getUploadIdList.call(f,l))&&s.each(c,(function(e){o.removeUploadId.call(f,e)})),S.emit("no_available_upload_id")}}}))})),S.emit("get_remote_upload_id_list")}function l(e,t){var n=this,r=[],o={Bucket:e.Bucket,Region:e.Region,Prefix:e.Key,calledBySdk:e.calledBySdk||"sliceUploadFile",tracker:e.tracker};!function e(){n.multipartList(o,(function(n,i){if(n)return t(n);r.push.apply(r,i.Upload||[]),"true"===i.IsTruncated?(o.KeyMarker=i.NextKeyMarker,o.UploadIdMarker=i.NextUploadIdMarker,e()):t(null,{UploadList:r})}))}()}function d(e,t){var n=this,r=[],o={Bucket:e.Bucket,Region:e.Region,Key:e.Key,UploadId:e.UploadId,calledBySdk:"sliceUploadFile",tracker:e.tracker};!function e(){n.multipartListPart(o,(function(n,i){if(n)return t(n);r.push.apply(r,i.Part||[]),"true"===i.IsTruncated?(o.PartNumberMarker=i.NextPartNumberMarker,e()):t(null,{PartList:r})}))}()}function p(e,t){var n=this,r=e.TaskId,o=e.Bucket,a=e.Region,c=e.Key,u=e.UploadData,l=e.FileSize,d=e.SliceSize,p=Math.min(e.AsyncLimit||n.options.ChunkParallelLimit||1,256),h=e.Body,m=Math.ceil(l/d),g=0,y=e.ServerSideEncryption,v=e.Headers,C=s.filter(u.PartList,(function(e){return e.Uploaded&&(g+=e.PartNumber>=m&&l%d||d),!e.Uploaded})),k=e.onProgress;i.eachLimit(C,p,(function(t,i){if(n._isRunningTask(r)){var s=t.PartNumber,p=Math.min(l,t.PartNumber*d)-(t.PartNumber-1)*d,m=0;f.call(n,{TaskId:r,Bucket:o,Region:a,Key:c,SliceSize:d,FileSize:l,PartNumber:s,ServerSideEncryption:y,Body:h,UploadData:u,Headers:v,onProgress:function(e){g+=e.loaded-m,m=e.loaded,k({loaded:g,total:l})},tracker:e.tracker},(function(e,o){n._isRunningTask(r)&&(e||o.ETag||(e='get ETag error, please add "ETag" to CORS ExposeHeader setting.( 获取ETag失败,请在CORS ExposeHeader设置中添加ETag,请参考文档:https://cloud.tencent.com/document/product/436/13318 )'),e?g-=m:(g+=p-m,t.ETag=o.ETag),k({loaded:g,total:l}),i(e||null,o))}))}}),(function(e){if(n._isRunningTask(r))return e?t(e):void t(null,{UploadId:u.UploadId,SliceList:u.PartList})}))}function f(e,t){var n=this,r=e.TaskId,o=e.Bucket,a=e.Region,c=e.Key,u=e.FileSize,l=e.Body,d=1*e.PartNumber,p=e.SliceSize,f=e.ServerSideEncryption,h=e.UploadData,m=e.Headers||{},g=n.options.ChunkRetryTimes+1,y=p*(d-1),v=p,C=y+p;C>u&&(v=(C=u)-y);var k=["x-cos-traffic-limit","x-cos-mime-limit"],S={};s.each(m,(function(e,t){k.indexOf(t)>-1&&(S[t]=e)}));var b=h.PartList[d-1];i.retry(g,(function(t){n._isRunningTask(r)&&s.fileSlice(l,y,C,!0,(function(i){n.multipartUpload({TaskId:r,Bucket:o,Region:a,Key:c,ContentLength:v,PartNumber:d,UploadId:h.UploadId,ServerSideEncryption:f,Body:i,Headers:S,onProgress:e.onProgress,calledBySdk:"sliceUploadFile",tracker:e.tracker},(function(e,o){if(n._isRunningTask(r))return e?t(e):(b.Uploaded=!0,t(null,o))}))}))}),(function(e,o){if(n._isRunningTask(r))return t(e,o)}))}function h(e,t){var n=e.Bucket,r=e.Region,o=e.Key,a=e.UploadId,s=e.SliceList,c=this,u=this.options.ChunkRetryTimes+1,l=e.Headers,d=s.map((function(e){return{PartNumber:e.PartNumber,ETag:e.ETag}}));i.retry(u,(function(t){c.multipartComplete({Bucket:n,Region:r,Key:o,UploadId:a,Parts:d,Headers:l,calledBySdk:"sliceUploadFile",tracker:e.tracker},t)}),(function(e,n){t(e,n)}))}function m(e,t){var n=e.Bucket,r=e.Region,o=e.Key,a=e.AbortArray,s=e.AsyncLimit||1,c=this,u=0,l=new Array(a.length);i.eachLimit(a,s,(function(t,i){var a=u;if(o&&o!==t.Key)return l[a]={error:{KeyNotMatch:!0}},void i(null);var s=t.UploadId||t.UploadID;c.multipartAbort({Bucket:n,Region:r,Key:t.Key,Headers:e.Headers,UploadId:s},(function(e){var o={Bucket:n,Region:r,Key:t.Key,UploadId:s};l[a]={error:e,task:o},i(null)})),u++}),(function(e){if(e)return t(e);for(var n=[],r=[],o=0,i=l.length;oo?"sliceUploadFile":"putObject",h=e.onFileFinish;i.push({api:f,params:e,callback:function(n,r){e.tracker&&e.tracker.formatResult(n,r),h&&h(n,r,l),t&&t(n,r)}}),n._addTasks(i)},uploadFiles:function(e,t){var n=this,o=void 0===e.SliceSize?n.options.SliceSize:e.SliceSize,i=0,a=0,u=s.throttleOnProgress.call(n,a,e.onProgress),l=e.files.length,d=e.onFileFinish,p=Array(l),f=function(e,n,r){u(null,!0),d&&d(e,n,r),p[r.Index]={options:r,error:e,data:n},--l<=0&&t&&t(null,{files:p})},h=[];s.each(e.files,(function(e,t){!function(){var l=e.Body,d=l.size||l.length||0,p={Index:t,TaskId:""};if(i+=d,n.options.EnableTracker){var m=n.options.UseAccelerate||"string"==typeof n.options.Domain&&n.options.Domain.includes("accelerate.");e.tracker=new c({bucket:e.Bucket,region:e.Region,apiName:"uploadFiles",fileKey:e.Key,fileSize:d,accelerate:m,deepTracker:n.options.DeepTracker,customId:n.options.CustomId,delay:n.options.TrackerDelay})}s.each(e,(function(e,t){"object"!==r(e)&&"function"!=typeof e&&(p[t]=e)}));var g=e.onTaskReady;e.onTaskReady=function(e){p.TaskId=e,g&&g(e)};var y=0,v=e.onProgress;e.onProgress=function(e){a=a-y+e.loaded,y=e.loaded,v&&v(e),u({loaded:a,total:i})};var C=d>o?"sliceUploadFile":"putObject",k=e.onFileFinish;h.push({api:C,params:e,callback:function(t,n){e.tracker&&e.tracker.formatResult(t,n),k&&k(t,n),f&&f(t,n,p)}})}()})),n._addTasks(h)},sliceCopyFile:function(e,t){var n=new a,r=this,c=e.Bucket,u=e.Region,l=e.Key,p=e.CopySource,f=s.getSourceParams.call(this,p);if(f){var h=f.Bucket,m=f.Region,y=decodeURIComponent(f.Key),v=void 0===e.CopySliceSize?r.options.CopySliceSize:e.CopySliceSize;v=Math.max(0,v);var C,k,S=e.CopyChunkSize||this.options.CopyChunkSize,b=this.options.CopyChunkParallelLimit,T=this.options.ChunkRetryTimes+1,R=0,E=0,w={},A={},x={};n.on("copy_slice_complete",(function(n){var a={};s.each(e.Headers,(function(e,t){0===t.toLowerCase().indexOf("x-cos-meta-")&&(a[t]=e)}));var d=s.map(n.PartList,(function(e){return{PartNumber:e.PartNumber,ETag:e.ETag}}));i.retry(T,(function(e){r.multipartComplete({Bucket:c,Region:u,Key:l,UploadId:n.UploadId,Parts:d,calledBySdk:"sliceCopyFile"},e)}),(function(e,r){if(o.removeUsing(n.UploadId),e)return k(null,!0),t(e);o.removeUploadId(n.UploadId),k({loaded:C,total:C},!0),t(null,r)}))})),n.on("get_copy_data_finish",(function(e){var a=o.getCopyFileId(p,w,S,c,l);a&&o.saveUploadId(a,e.UploadId,r.options.UploadIdCacheLimit),o.setUsing(e.UploadId);var d=s.filter(e.PartList,(function(e){return e.Uploaded&&(E+=e.PartNumber>=R&&C%S||S),!e.Uploaded}));i.eachLimit(d,b,(function(t,n){var o=t.PartNumber,a=t.CopySourceRange,s=t.end-t.start;i.retry(T,(function(t){g.call(r,{Bucket:c,Region:u,Key:l,CopySource:p,UploadId:e.UploadId,PartNumber:o,CopySourceRange:a},t)}),(function(e,r){if(e)return n(e);k({loaded:E+=s,total:C}),t.ETag=r.ETag,n(e||null,r)}))}),(function(r){if(r)return o.removeUsing(e.UploadId),k(null,!0),t(r);n.emit("copy_slice_complete",e)}))})),n.on("get_chunk_size_finish",(function(){var i=function(){r.multipartInit({Bucket:c,Region:u,Key:l,Headers:x},(function(r,o){if(r)return t(r);e.UploadId=o.UploadId,n.emit("get_copy_data_finish",{UploadId:e.UploadId,PartList:e.PartList})}))},a=o.getCopyFileId(p,w,S,c,l),f=o.getUploadIdList(a);if(!a||!f)return i();!function t(a){if(a>=f.length)return i();var p=f[a];if(o.using[p])return t(a+1);d.call(r,{Bucket:c,Region:u,Key:l,UploadId:p},(function(r,i){if(r)o.removeUploadId(p),t(a+1);else{if(o.using[p])return t(a+1);var c={},u=0;s.each(i.PartList,(function(e){var t=parseInt(e.Size),n=u+t-1;c[e.PartNumber+"|"+u+"|"+n]=e.ETag,u+=t})),s.each(e.PartList,(function(e){var t=c[e.PartNumber+"|"+e.start+"|"+e.end];t&&(e.ETag=t,e.Uploaded=!0)})),n.emit("get_copy_data_finish",{UploadId:p,PartList:e.PartList})}}))}(0)})),n.on("get_file_size_finish",(function(){if(function(){for(var t=[1,2,4,8,16,32,64,128,256,512,1024,2048,4096,5120],n=1048576,o=0;o11&&(A[t]=e)})),n.emit("get_file_size_finish")}else t(s.error(new Error('get Content-Length error, please add "Content-Length" to CORS ExposeHeader setting.( 获取Content-Length失败,请在CORS ExposeHeader设置中添加Content-Length,请参考文档:https://cloud.tencent.com/document/product/436/13318 )')))}))}else t(s.error(new Error("CopySource format error")))}};e.exports.init=function(e,t){t.transferToTaskMethod(y,"sliceUploadFile"),s.each(y,(function(t,n){e.prototype[n]=s.apiWrapper(n,t)}))}},function(e,t){var n={eachLimit:function(e,t,n,r){if(r=r||function(){},!e.length||t<=0)return r();var o=0,i=0,a=0;!function s(){if(o>=e.length)return r();for(;a=e.length?r():s())}))}()},retry:function(e,t,n){e<1?n():function r(o){t((function(t,i){t&&o t ? 1 : -1; + }); + } + var p, + f = [ + 'cache-control', + 'content-disposition', + 'content-encoding', + 'content-length', + 'content-md5', + 'expect', + 'expires', + 'host', + 'if-match', + 'if-modified-since', + 'if-none-match', + 'if-unmodified-since', + 'origin', + 'range', + 'transfer-encoding', + ], + h = function (e, t, n) { + var r = t / 8, + o = e.slice(n, n + r); + return new Uint8Array(o).reverse(), new { 8: Uint8Array, 16: Uint16Array, 32: Uint32Array }[t](o)[0]; + }, + m = function (e, t, n, r) { + var o = e.slice(t, n), + i = ''; + return ( + new Uint8Array(o).forEach(function (e) { + i += String.fromCharCode(e); + }), + r && (i = decodeURIComponent(escape(i))), + i + ); + }, + g = function () {}, + y = function (e) { + var t = {}; + for (var n in e) e.hasOwnProperty(n) && void 0 !== e[n] && null !== e[n] && (t[n] = e[n]); + return t; + }, + v = + ((p = function (e, t) { + (e = e.split('.')), (t = t.split('.')); + for (var n = 0; n < t.length; n++) if (e[n] !== t[n]) return parseInt(e[n]) > parseInt(t[n]) ? 1 : -1; + return 0; + }), + (function (e) { + if (!e) return !1; + var t = (e.match(/Chrome\/([.\d]+)/) || [])[1], + n = (e.match(/QBCore\/([.\d]+)/) || [])[1], + r = (e.match(/QQBrowser\/([.\d]+)/) || [])[1]; + return ( + (t && p(t, '53.0.2785.116') < 0 && n && p(n, '3.53.991.400') < 0 && r && p(r, '9.0.2524.400') <= 0) || + !1 + ); + })('undefined' != typeof navigator && navigator.userAgent)), + C = 1048576; + function k(e) { + return R(e, function (e) { + return 'object' === r(e) && null !== e ? k(e) : e; + }); + } + function S(e, t) { + return ( + T(t, function (n, r) { + e[r] = t[r]; + }), + e + ); + } + function b(e) { + return e instanceof Array; + } + function T(e, t) { + for (var n in e) e.hasOwnProperty(n) && t(e[n], n); + } + function R(e, t) { + var n = b(e) ? [] : {}; + for (var r in e) e.hasOwnProperty(r) && (n[r] = t(e[r], r)); + return n; + } + var E = function (e, t) { + var n = t.Bucket, + r = t.Region, + o = t.Key, + i = this.options.Domain, + a = !i || ('string' == typeof i && i.indexOf('{Bucket}') > -1), + s = !i || ('string' == typeof i && i.indexOf('{Region}') > -1); + if ( + e.indexOf('Bucket') > -1 || + 'deleteMultipleObject' === e || + 'multipartList' === e || + 'listObjectVersions' === e + ) { + if (a && !n) return 'Bucket'; + if (s && !r) return 'Region'; + } else if ( + e.indexOf('Object') > -1 || + e.indexOf('multipart') > -1 || + 'sliceUploadFile' === e || + 'abortUploadTask' === e + ) { + if (a && !n) return 'Bucket'; + if (s && !r) return 'Region'; + if (!o) return 'Key'; + } + return !1; + }, + w = function (e, t) { + if (((t = S({}, t)), 'getAuth' !== e && 'getV4Auth' !== e && 'getObjectUrl' !== e)) { + var n = t.Headers || {}; + if (t && 'object' === r(t)) { + !(function () { + for (var e in t) t.hasOwnProperty(e) && e.indexOf('x-cos-') > -1 && (n[e] = t[e]); + })(); + O.each( + { + 'x-cos-mfa': 'MFA', + 'Content-MD5': 'ContentMD5', + 'Content-Length': 'ContentLength', + 'Content-Type': 'ContentType', + Expect: 'Expect', + Expires: 'Expires', + 'Cache-Control': 'CacheControl', + 'Content-Disposition': 'ContentDisposition', + 'Content-Encoding': 'ContentEncoding', + Range: 'Range', + 'If-Modified-Since': 'IfModifiedSince', + 'If-Unmodified-Since': 'IfUnmodifiedSince', + 'If-Match': 'IfMatch', + 'If-None-Match': 'IfNoneMatch', + 'x-cos-copy-source': 'CopySource', + 'x-cos-copy-source-Range': 'CopySourceRange', + 'x-cos-metadata-directive': 'MetadataDirective', + 'x-cos-copy-source-If-Modified-Since': 'CopySourceIfModifiedSince', + 'x-cos-copy-source-If-Unmodified-Since': 'CopySourceIfUnmodifiedSince', + 'x-cos-copy-source-If-Match': 'CopySourceIfMatch', + 'x-cos-copy-source-If-None-Match': 'CopySourceIfNoneMatch', + 'x-cos-acl': 'ACL', + 'x-cos-grant-read': 'GrantRead', + 'x-cos-grant-write': 'GrantWrite', + 'x-cos-grant-full-control': 'GrantFullControl', + 'x-cos-grant-read-acp': 'GrantReadAcp', + 'x-cos-grant-write-acp': 'GrantWriteAcp', + 'x-cos-storage-class': 'StorageClass', + 'x-cos-traffic-limit': 'TrafficLimit', + 'x-cos-mime-limit': 'MimeLimit', + 'x-cos-server-side-encryption-customer-algorithm': 'SSECustomerAlgorithm', + 'x-cos-server-side-encryption-customer-key': 'SSECustomerKey', + 'x-cos-server-side-encryption-customer-key-MD5': 'SSECustomerKeyMD5', + 'x-cos-server-side-encryption': 'ServerSideEncryption', + 'x-cos-server-side-encryption-cos-kms-key-id': 'SSEKMSKeyId', + 'x-cos-server-side-encryption-context': 'SSEContext', + 'Pic-Operations': 'PicOperations', + }, + function (e, r) { + void 0 !== t[e] && (n[r] = t[e]); + }, + ), + (t.Headers = y(n)); + } + } + return t; + }, + A = function (e) { + return Date.now() + (e || 0); + }, + x = + 'object' === ('undefined' == typeof navigator ? 'undefined' : r(navigator)) && + !!navigator.userAgent.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/), + I = + 'object' === ('undefined' == typeof navigator ? 'undefined' : r(navigator)) && + /\sQQ/i.test(navigator.userAgent), + O = { + noop: g, + formatParams: w, + apiWrapper: function (e, t) { + return function (n, r) { + var o, + i = this; + if (('function' == typeof n && ((r = n), (n = {})), (n = w(e, n)), i.options.EnableTracker)) + if ('sliceUploadFile' === n.calledBySdk) + o = n.tracker && n.tracker.generateSubTracker({ apiName: e }); + else if (['uploadFile', 'uploadFiles'].includes(e)) o = null; + else { + var a = -1; + n.Body && (a = 'string' == typeof n.Body ? n.Body.length : n.Body.size || n.Body.byteLength || -1), + (o = new u({ + bucket: n.Bucket, + region: n.Region, + apiName: e, + fileKey: n.Key, + fileSize: a, + deepTracker: i.options.DeepTracker, + customId: i.options.CustomId, + delay: i.options.TrackerDelay, + })); + } + n.tracker = o; + var s = function (e) { + return ( + e && + e.headers && + (e.headers['x-cos-request-id'] && (e.RequestId = e.headers['x-cos-request-id']), + e.headers['x-ci-request-id'] && (e.RequestId = e.headers['x-ci-request-id']), + e.headers['x-cos-version-id'] && (e.VersionId = e.headers['x-cos-version-id']), + e.headers['x-cos-delete-marker'] && (e.DeleteMarker = e.headers['x-cos-delete-marker'])), + e + ); + }, + c = function (e, t) { + o && o.formatResult(e, t), r && r(s(e), s(t)); + }, + l = (function () { + if ('getService' !== e && 'abortUploadTask' !== e) { + var t = E.call(i, e, n); + if (t) return 'missing param ' + t; + if (n.Region) { + if (i.options.CompatibilityMode) { + if (!/^([a-z\d-.]+)$/.test(n.Region)) return 'Region format error.'; + } else { + if (n.Region.indexOf('cos.') > -1) return 'param Region should not be start with "cos."'; + if (!/^([a-z\d-]+)$/.test(n.Region)) return 'Region format error.'; + } + !i.options.CompatibilityMode && + -1 === n.Region.indexOf('-') && + 'yfb' !== n.Region && + 'default' !== n.Region && + n.Region; + } + if (n.Bucket) { + if (!/^([a-z\d-]+)-(\d+)$/.test(n.Bucket)) + if (n.AppId) n.Bucket = n.Bucket + '-' + n.AppId; + else { + if (!i.options.AppId) return 'Bucket should format as "test-1250000000".'; + n.Bucket = n.Bucket + '-' + i.options.AppId; + } + n.AppId && delete n.AppId; + } + !i.options.UseRawKey && n.Key && '/' === n.Key.substr(0, 1) && (n.Key = n.Key.substr(1)); + } + })(), + d = ['getAuth', 'getObjectUrl'].includes(e); + if ('function' == typeof Promise && !d && !r) + return new Promise(function (e, o) { + if ( + ((r = function (t, n) { + t ? o(t) : e(n); + }), + l) + ) + return c(O.error(new Error(l))); + t.call(i, n, c); + }); + if (l) return c(O.error(new Error(l))); + var p = t.call(i, n, c); + return d ? p : void 0; + }; + }, + xml2json: a, + json2xml: s, + md5: o, + clearKey: y, + fileSlice: function (e, t, n, r, o) { + var i; + if ( + (e.slice + ? (i = e.slice(t, n)) + : e.mozSlice + ? (i = e.mozSlice(t, n)) + : e.webkitSlice && (i = e.webkitSlice(t, n)), + r && v) + ) { + var a = new FileReader(); + (a.onload = function (e) { + (i = null), o(new Blob([a.result])); + }), + a.readAsArrayBuffer(i); + } else o(i); + }, + getBodyMd5: function (e, t, n, r) { + (n = n || g), + e + ? 'string' == typeof t + ? n(O.md5(t, !0)) + : Blob && t instanceof Blob + ? O.getFileMd5( + t, + function (e, t) { + n(t); + }, + r, + ) + : n() + : n(); + }, + getFileMd5: function (e, t, n) { + var r = e.size, + i = 0, + a = o.getCtx(); + !(function o(s) { + if (s >= r) { + var c = a.digest('hex'); + t(null, c); + } else { + var u = Math.min(r, s + C); + O.fileSlice(e, s, u, !1, function (e) { + !(function (e, t) { + var n, + r = new FileReader(); + FileReader.prototype.readAsBinaryString + ? ((n = FileReader.prototype.readAsBinaryString), + (r.onload = function () { + t(this.result); + })) + : FileReader.prototype.readAsArrayBuffer && + (n = function (e) { + var n = '', + r = new FileReader(); + (r.onload = function (e) { + for (var o = new Uint8Array(r.result), i = o.byteLength, a = 0; a < i; a++) + n += String.fromCharCode(o[a]); + t(n); + }), + r.readAsArrayBuffer(e); + }), + n.call(r, e); + })(e, function (t) { + (e = null), + (a = a.update(t, !0)), + (i += t.length), + (t = null), + n && n({ loaded: i, total: r, percent: Math.round((i / r) * 1e4) / 1e4 }), + o(s + C); + }); + }); + } + })(0); + }, + b64: function (e) { + var t, + n, + r, + o = ''; + for (t = 0, n = e.length / 2; t < n; t++) + (r = parseInt(e[2 * t] + e[2 * t + 1], 16)), (o += String.fromCharCode(r)); + return btoa(o); + }, + extend: S, + isArray: b, + isInArray: function (e, t) { + for (var n = !1, r = 0; r < e.length; r++) + if (t === e[r]) { + n = !0; + break; + } + return n; + }, + makeArray: function (e) { + return b(e) ? e : [e]; + }, + each: T, + map: R, + filter: function (e, t) { + var n = b(e), + r = n ? [] : {}; + for (var o in e) e.hasOwnProperty(o) && t(e[o], o) && (n ? r.push(e[o]) : (r[o] = e[o])); + return r; + }, + clone: k, + attr: function (e, t, n) { + return e && t in e ? e[t] : n; + }, + uuid: function () { + var e = function () { + return ((65536 * (1 + Math.random())) | 0).toString(16).substring(1); + }; + return e() + e() + '-' + e() + '-' + e() + '-' + e() + '-' + e() + e() + e(); + }, + camSafeUrlEncode: l, + throttleOnProgress: function (e, t) { + var n, + r, + o = this, + i = 0, + a = 0, + s = Date.now(); + function c() { + if (((r = 0), t && 'function' == typeof t)) { + n = Date.now(); + var o, + c = Math.max(0, Math.round(((a - i) / ((n - s) / 1e3)) * 100) / 100) || 0; + (o = 0 === a && 0 === e ? 1 : Math.floor((a / e) * 100) / 100 || 0), (s = n), (i = a); + try { + t({ loaded: a, total: e, speed: c, percent: o }); + } catch (e) {} + } + } + return function (t, n) { + if ((t && ((a = t.loaded), (e = t.total)), n)) clearTimeout(r), c(); + else { + if (r) return; + r = setTimeout(c, o.options.ProgressInterval); + } + }; + }, + getFileSize: function (e, t, n) { + var r; + 'string' == typeof t.Body + ? (t.Body = new Blob([t.Body], { type: 'text/plain' })) + : t.Body instanceof ArrayBuffer && (t.Body = new Blob([t.Body])), + t.Body && + (t.Body instanceof Blob || + '[object File]' === t.Body.toString() || + '[object Blob]' === t.Body.toString()) + ? ((r = t.Body.size), (t.ContentLength = r), n(null, r)) + : n(O.error(new Error('params body format error, Only allow File|Blob|String.'))); + }, + getSkewTime: A, + error: function (e, t) { + var n = e; + return ( + (e.message = e.message || null), + 'string' == typeof t + ? ((e.error = t), (e.message = t)) + : 'object' === r(t) && + null !== t && + (S(e, t), + (t.code || t.name) && (e.code = t.code || t.name), + t.message && (e.message = t.message), + t.stack && (e.stack = t.stack)), + 'function' == typeof Object.defineProperty && + (Object.defineProperty(e, 'name', { writable: !0, enumerable: !1 }), + Object.defineProperty(e, 'message', { enumerable: !0 })), + (e.name = (t && t.name) || e.name || e.code || 'Error'), + e.code || (e.code = e.name), + e.error || (e.error = k(n)), + e + ); + }, + obj2str: function (e, t) { + var n, + r, + o, + i = [], + a = d(e); + for (n = 0; n < a.length; n++) + (o = void 0 === e[(r = a[n])] || null === e[r] ? '' : '' + e[r]), + (r = t ? l(r).toLowerCase() : l(r)), + (o = l(o) || ''), + i.push(r + '=' + o); + return i.join('&'); + }, + getAuth: function (e) { + var t, + n = (e = e || {}).SecretId, + r = e.SecretKey, + o = e.KeyTime, + a = (e.method || e.Method || 'get').toLowerCase(), + s = k(e.Query || e.params || {}), + c = (function (e) { + var t = {}; + for (var n in e) { + var r = n.toLowerCase(); + (r.indexOf('x-cos-') > -1 || f.indexOf(r) > -1) && (t[n] = e[n]); + } + return t; + })(k(e.Headers || e.headers || {})), + u = e.Key || ''; + e.UseRawKey + ? (t = e.Pathname || e.pathname || '/' + u) + : 0 !== (t = e.Pathname || e.pathname || u).indexOf('/') && (t = '/' + t); + var l = !1 !== e.ForceSignHost; + if ( + (!c.Host && + !c.host && + e.Bucket && + e.Region && + l && + (c.Host = e.Bucket + '.cos.' + e.Region + '.myqcloud.com'), + !n) + ) + throw new Error('missing param SecretId'); + if (!r) throw new Error('missing param SecretKey'); + var p = Math.round(A(e.SystemClockOffset) / 1e3) - 1, + h = p, + m = e.Expires || e.expires; + h += void 0 === m ? 900 : 1 * m || 0; + var g = n, + y = o || p + ';' + h, + v = o || p + ';' + h, + C = d(c, !0).join(';').toLowerCase(), + S = d(s, !0).join(';').toLowerCase(), + b = i.HmacSHA1(v, r).toString(), + T = [a, t, O.obj2str(s, !0), O.obj2str(c, !0), ''].join('\n'), + R = ['sha1', y, i.SHA1(T).toString(), ''].join('\n'); + return [ + 'q-sign-algorithm=sha1', + 'q-ak=' + g, + 'q-sign-time=' + y, + 'q-key-time=' + v, + 'q-header-list=' + C, + 'q-url-param-list=' + S, + 'q-signature=' + i.HmacSHA1(R, b).toString(), + ].join('&'); + }, + parseSelectPayload: function (e) { + for (var t = {}, n = m(e), r = { records: [] }; e.byteLength; ) { + var o, + i = h(e, 32, 0), + a = h(e, 32, 4), + s = i - a - 16, + c = 0; + for (e = e.slice(12); c < a; ) { + var u = h(e, 8, c), + l = m(e, c + 1, c + 1 + u), + d = h(e, 16, c + u + 2), + p = m(e, c + u + 4, c + u + 4 + d); + (t[l] = p), (c += u + 4 + d); + } + if ('Records' === t[':event-type']) (o = m(e, c, c + s, !0)), r.records.push(o); + else if ('Stats' === t[':event-type']) (o = m(e, c, c + s, !0)), (r.stats = O.xml2json(o).Stats); + else if ('error' === t[':event-type']) { + var f = t[':error-code'], + g = t[':error-message'], + y = new Error(g); + (y.message = g), (y.name = y.code = f), (r.error = y); + } else ['Progress', 'Continuation', 'End'].includes(t[':event-type']); + e = e.slice(c + s + 4); + } + return { payload: r.records.join(''), body: n }; + }, + getSourceParams: function (e) { + var t = this.options.CopySourceParser; + if (t) return t(e); + var n = e.match( + /^([^.]+-\d+)\.cos(v6|-cdc|-cdz|-internal)?\.([^.]+)\.((myqcloud\.com)|(tencentcos\.cn))\/(.+)$/, + ); + return n ? { Bucket: n[1], Region: n[3], Key: n[7] } : null; + }, + isBrowser: !0, + isNode: function () { + return ( + 'object' !== ('undefined' == typeof window ? 'undefined' : r(window)) && + 'object' === (void 0 === t ? 'undefined' : r(t)) && + !( + 'object' === ('undefined' == typeof globalThis ? 'undefined' : r(globalThis)) && + ('DedicatedWorkerGlobalScope' === globalThis.constructor.name || globalThis.FileReaderSync) + ) + ); + }, + isCIHost: function (e) { + return /^https?:\/\/([^/]+\.)?ci\.[^/]+/.test(e); + }, + isIOS_QQ: x && I, + encodeBase64: function (e, t) { + var n = c.encode(e); + return t && (n = n.replaceAll('+', '-').replaceAll('/', '_').replaceAll('=', '')), n; + }, + }; + e.exports = O; + }).call(this, n(3)); + }, + function (e, t, n) { + 'use strict'; + function r(e, t) { + return void 0 === t && (t = Object), t && 'function' == typeof t.freeze ? t.freeze(e) : e; + } + var o = r({ + HTML: 'text/html', + isHTML: function (e) { + return e === o.HTML; + }, + XML_APPLICATION: 'application/xml', + XML_TEXT: 'text/xml', + XML_XHTML_APPLICATION: 'application/xhtml+xml', + XML_SVG_IMAGE: 'image/svg+xml', + }), + i = r({ + HTML: 'http://www.w3.org/1999/xhtml', + isHTML: function (e) { + return e === i.HTML; + }, + SVG: 'http://www.w3.org/2000/svg', + XML: 'http://www.w3.org/XML/1998/namespace', + XMLNS: 'http://www.w3.org/2000/xmlns/', + }); + (t.assign = function (e, t) { + if (null === e || 'object' != typeof e) throw new TypeError('target is not an object'); + for (var n in t) Object.prototype.hasOwnProperty.call(t, n) && (e[n] = t[n]); + return e; + }), + (t.find = function (e, t, n) { + if ((void 0 === n && (n = Array.prototype), e && 'function' == typeof n.find)) return n.find.call(e, t); + for (var r = 0; r < e.length; r++) + if (Object.prototype.hasOwnProperty.call(e, r)) { + var o = e[r]; + if (t.call(void 0, o, r, e)) return o; + } + }), + (t.freeze = r), + (t.MIME_TYPE = o), + (t.NAMESPACE = i); + }, + function (e, t) { + var n, + r, + o = (e.exports = {}); + function i() { + throw new Error('setTimeout has not been defined'); + } + function a() { + throw new Error('clearTimeout has not been defined'); + } + function s(e) { + if (n === setTimeout) return setTimeout(e, 0); + if ((n === i || !n) && setTimeout) return (n = setTimeout), setTimeout(e, 0); + try { + return n(e, 0); + } catch (t) { + try { + return n.call(null, e, 0); + } catch (t) { + return n.call(this, e, 0); + } + } + } + !(function () { + try { + n = 'function' == typeof setTimeout ? setTimeout : i; + } catch (e) { + n = i; + } + try { + r = 'function' == typeof clearTimeout ? clearTimeout : a; + } catch (e) { + r = a; + } + })(); + var c, + u = [], + l = !1, + d = -1; + function p() { + l && c && ((l = !1), c.length ? (u = c.concat(u)) : (d = -1), u.length && f()); + } + function f() { + if (!l) { + var e = s(p); + l = !0; + for (var t = u.length; t; ) { + for (c = u, u = []; ++d < t; ) c && c[d].run(); + (d = -1), (t = u.length); + } + (c = null), + (l = !1), + (function (e) { + if (r === clearTimeout) return clearTimeout(e); + if ((r === a || !r) && clearTimeout) return (r = clearTimeout), clearTimeout(e); + try { + return r(e); + } catch (t) { + try { + return r.call(null, e); + } catch (t) { + return r.call(this, e); + } + } + })(e); + } + } + function h(e, t) { + (this.fun = e), (this.array = t); + } + function m() {} + (o.nextTick = function (e) { + var t = new Array(arguments.length - 1); + if (arguments.length > 1) for (var n = 1; n < arguments.length; n++) t[n - 1] = arguments[n]; + u.push(new h(e, t)), 1 !== u.length || l || s(f); + }), + (h.prototype.run = function () { + this.fun.apply(null, this.array); + }), + (o.title = 'browser'), + (o.browser = !0), + (o.env = {}), + (o.argv = []), + (o.version = ''), + (o.versions = {}), + (o.on = m), + (o.addListener = m), + (o.once = m), + (o.off = m), + (o.removeListener = m), + (o.removeAllListeners = m), + (o.emit = m), + (o.prependListener = m), + (o.prependOnceListener = m), + (o.listeners = function (e) { + return []; + }), + (o.binding = function (e) { + throw new Error('process.binding is not supported'); + }), + (o.cwd = function () { + return '/'; + }), + (o.chdir = function (e) { + throw new Error('process.chdir is not supported'); + }), + (o.umask = function () { + return 0; + }); + }, + function (e, t) { + e.exports = function (e) { + return ( + e.webpackPolyfill || + ((e.deprecate = function () {}), + (e.paths = []), + e.children || (e.children = []), + Object.defineProperty(e, 'loaded', { + enumerable: !0, + get: function () { + return e.l; + }, + }), + Object.defineProperty(e, 'id', { + enumerable: !0, + get: function () { + return e.i; + }, + }), + (e.webpackPolyfill = 1)), + e + ); + }; + }, + function (e, t, n) { + var r = n(2), + o = r.find, + i = r.NAMESPACE; + function a(e) { + return '' !== e; + } + function s(e, t) { + return e.hasOwnProperty(t) || (e[t] = !0), e; + } + function c(e) { + if (!e) return []; + var t = (function (e) { + return e ? e.split(/[\t\n\f\r ]+/).filter(a) : []; + })(e); + return Object.keys(t.reduce(s, {})); + } + function u(e, t) { + for (var n in e) Object.prototype.hasOwnProperty.call(e, n) && (t[n] = e[n]); + } + function l(e, t) { + var n = e.prototype; + if (!(n instanceof t)) { + function r() {} + (r.prototype = t.prototype), u(n, (r = new r())), (e.prototype = n = r); + } + n.constructor != e && (n.constructor = e); + } + var d = {}, + p = (d.ELEMENT_NODE = 1), + f = (d.ATTRIBUTE_NODE = 2), + h = (d.TEXT_NODE = 3), + m = (d.CDATA_SECTION_NODE = 4), + g = (d.ENTITY_REFERENCE_NODE = 5), + y = (d.ENTITY_NODE = 6), + v = (d.PROCESSING_INSTRUCTION_NODE = 7), + C = (d.COMMENT_NODE = 8), + k = (d.DOCUMENT_NODE = 9), + S = (d.DOCUMENT_TYPE_NODE = 10), + b = (d.DOCUMENT_FRAGMENT_NODE = 11), + T = (d.NOTATION_NODE = 12), + R = {}, + E = {}, + w = + ((R.INDEX_SIZE_ERR = ((E[1] = 'Index size error'), 1)), + (R.DOMSTRING_SIZE_ERR = ((E[2] = 'DOMString size error'), 2)), + (R.HIERARCHY_REQUEST_ERR = ((E[3] = 'Hierarchy request error'), 3))), + A = + ((R.WRONG_DOCUMENT_ERR = ((E[4] = 'Wrong document'), 4)), + (R.INVALID_CHARACTER_ERR = ((E[5] = 'Invalid character'), 5)), + (R.NO_DATA_ALLOWED_ERR = ((E[6] = 'No data allowed'), 6)), + (R.NO_MODIFICATION_ALLOWED_ERR = ((E[7] = 'No modification allowed'), 7)), + (R.NOT_FOUND_ERR = ((E[8] = 'Not found'), 8))), + x = + ((R.NOT_SUPPORTED_ERR = ((E[9] = 'Not supported'), 9)), + (R.INUSE_ATTRIBUTE_ERR = ((E[10] = 'Attribute in use'), 10))); + (R.INVALID_STATE_ERR = ((E[11] = 'Invalid state'), 11)), + (R.SYNTAX_ERR = ((E[12] = 'Syntax error'), 12)), + (R.INVALID_MODIFICATION_ERR = ((E[13] = 'Invalid modification'), 13)), + (R.NAMESPACE_ERR = ((E[14] = 'Invalid namespace'), 14)), + (R.INVALID_ACCESS_ERR = ((E[15] = 'Invalid access'), 15)); + function I(e, t) { + if (t instanceof Error) var n = t; + else + (n = this), + Error.call(this, E[e]), + (this.message = E[e]), + Error.captureStackTrace && Error.captureStackTrace(this, I); + return (n.code = e), t && (this.message = this.message + ': ' + t), n; + } + function O() {} + function B(e, t) { + (this._node = e), (this._refresh = t), _(this); + } + function _(e) { + var t = e._node._inc || e._node.ownerDocument._inc; + if (e._inc != t) { + var n = e._refresh(e._node); + Ce(e, 'length', n.length), u(n, e), (e._inc = t); + } + } + function P() {} + function D(e, t) { + for (var n = e.length; n--; ) if (e[n] === t) return n; + } + function N(e, t, n, r) { + if ((r ? (t[D(t, r)] = n) : (t[t.length++] = n), e)) { + n.ownerElement = e; + var o = e.ownerDocument; + o && + (r && K(o, e, r), + (function (e, t, n) { + e && e._inc++; + var r = n.namespaceURI; + r === i.XMLNS && (t._nsMap[n.prefix ? n.localName : ''] = n.value); + })(o, e, n)); + } + } + function U(e, t, n) { + var r = D(t, n); + if (!(r >= 0)) throw new I(A, new Error(e.tagName + '@' + n)); + for (var o = t.length - 1; r < o; ) t[r] = t[++r]; + if (((t.length = o), e)) { + var i = e.ownerDocument; + i && (K(i, e, n), (n.ownerElement = null)); + } + } + function M() {} + function H() {} + function L(e) { + return ( + ('<' == e ? '<' : '>' == e && '>') || + ('&' == e && '&') || + ('"' == e && '"') || + '&#' + e.charCodeAt() + ';' + ); + } + function j(e, t) { + if (t(e)) return !0; + if ((e = e.firstChild)) + do { + if (j(e, t)) return !0; + } while ((e = e.nextSibling)); + } + function F() { + this.ownerDocument = this; + } + function K(e, t, n, r) { + e && e._inc++, n.namespaceURI === i.XMLNS && delete t._nsMap[n.prefix ? n.localName : '']; + } + function q(e, t, n) { + if (e && e._inc) { + e._inc++; + var r = t.childNodes; + if (n) r[r.length++] = n; + else { + for (var o = t.firstChild, i = 0; o; ) (r[i++] = o), (o = o.nextSibling); + (r.length = i), delete r[r.length]; + } + } + } + function z(e, t) { + var n = t.previousSibling, + r = t.nextSibling; + return ( + n ? (n.nextSibling = r) : (e.firstChild = r), + r ? (r.previousSibling = n) : (e.lastChild = n), + (t.parentNode = null), + (t.previousSibling = null), + (t.nextSibling = null), + q(e.ownerDocument, e), + t + ); + } + function G(e) { + return e && e.nodeType === H.DOCUMENT_TYPE_NODE; + } + function V(e) { + return e && e.nodeType === H.ELEMENT_NODE; + } + function X(e) { + return e && e.nodeType === H.TEXT_NODE; + } + function W(e, t) { + var n = e.childNodes || []; + if (o(n, V) || G(t)) return !1; + var r = o(n, G); + return !(t && r && n.indexOf(r) > n.indexOf(t)); + } + function Q(e, t) { + var n = e.childNodes || []; + if ( + o(n, function (e) { + return V(e) && e !== t; + }) + ) + return !1; + var r = o(n, G); + return !(t && r && n.indexOf(r) > n.indexOf(t)); + } + function J(e, t, n) { + if ( + !(function (e) { + return ( + e && + (e.nodeType === H.DOCUMENT_NODE || + e.nodeType === H.DOCUMENT_FRAGMENT_NODE || + e.nodeType === H.ELEMENT_NODE) + ); + })(e) + ) + throw new I(w, 'Unexpected parent node type ' + e.nodeType); + if (n && n.parentNode !== e) throw new I(A, 'child not in parent'); + if ( + !(function (e) { + return ( + e && + (V(e) || + X(e) || + G(e) || + e.nodeType === H.DOCUMENT_FRAGMENT_NODE || + e.nodeType === H.COMMENT_NODE || + e.nodeType === H.PROCESSING_INSTRUCTION_NODE) + ); + })(t) || + (G(t) && e.nodeType !== H.DOCUMENT_NODE) + ) + throw new I(w, 'Unexpected node type ' + t.nodeType + ' for parent node type ' + e.nodeType); + } + function $(e, t, n) { + var r = e.childNodes || [], + i = t.childNodes || []; + if (t.nodeType === H.DOCUMENT_FRAGMENT_NODE) { + var a = i.filter(V); + if (a.length > 1 || o(i, X)) throw new I(w, 'More than one element or text in fragment'); + if (1 === a.length && !W(e, n)) throw new I(w, 'Element in fragment can not be inserted before doctype'); + } + if (V(t) && !W(e, n)) throw new I(w, 'Only one element can be added and only after doctype'); + if (G(t)) { + if (o(r, G)) throw new I(w, 'Only one doctype is allowed'); + var s = o(r, V); + if (n && r.indexOf(s) < r.indexOf(n)) throw new I(w, 'Doctype can only be inserted before an element'); + if (!n && s) throw new I(w, 'Doctype can not be appended since element is present'); + } + } + function Y(e, t, n) { + var r = e.childNodes || [], + i = t.childNodes || []; + if (t.nodeType === H.DOCUMENT_FRAGMENT_NODE) { + var a = i.filter(V); + if (a.length > 1 || o(i, X)) throw new I(w, 'More than one element or text in fragment'); + if (1 === a.length && !Q(e, n)) throw new I(w, 'Element in fragment can not be inserted before doctype'); + } + if (V(t) && !Q(e, n)) throw new I(w, 'Only one element can be added and only after doctype'); + if (G(t)) { + if ( + o(r, function (e) { + return G(e) && e !== n; + }) + ) + throw new I(w, 'Only one doctype is allowed'); + var s = o(r, V); + if (n && r.indexOf(s) < r.indexOf(n)) throw new I(w, 'Doctype can only be inserted before an element'); + } + } + function Z(e, t, n, r) { + J(e, t, n), e.nodeType === H.DOCUMENT_NODE && (r || $)(e, t, n); + var o = t.parentNode; + if ((o && o.removeChild(t), t.nodeType === b)) { + var i = t.firstChild; + if (null == i) return t; + var a = t.lastChild; + } else i = a = t; + var s = n ? n.previousSibling : e.lastChild; + (i.previousSibling = s), + (a.nextSibling = n), + s ? (s.nextSibling = i) : (e.firstChild = i), + null == n ? (e.lastChild = a) : (n.previousSibling = a); + do { + i.parentNode = e; + } while (i !== a && (i = i.nextSibling)); + return q(e.ownerDocument || e, e), t.nodeType == b && (t.firstChild = t.lastChild = null), t; + } + function ee() { + this._nsMap = {}; + } + function te() {} + function ne() {} + function re() {} + function oe() {} + function ie() {} + function ae() {} + function se() {} + function ce() {} + function ue() {} + function le() {} + function de() {} + function pe() {} + function fe(e, t) { + var n = [], + r = (9 == this.nodeType && this.documentElement) || this, + o = r.prefix, + i = r.namespaceURI; + if (i && null == o && null == (o = r.lookupPrefix(i))) var a = [{ namespace: i, prefix: null }]; + return ge(this, n, e, t, a), n.join(''); + } + function he(e, t, n) { + var r = e.prefix || '', + o = e.namespaceURI; + if (!o) return !1; + if (('xml' === r && o === i.XML) || o === i.XMLNS) return !1; + for (var a = n.length; a--; ) { + var s = n[a]; + if (s.prefix === r) return s.namespace !== o; + } + return !0; + } + function me(e, t, n) { + e.push(' ', t, '="', n.replace(/[<>&"\t\n\r]/g, L), '"'); + } + function ge(e, t, n, r, o) { + if ((o || (o = []), r)) { + if (!(e = r(e))) return; + if ('string' == typeof e) return void t.push(e); + } + switch (e.nodeType) { + case p: + var a = e.attributes, + s = a.length, + c = e.firstChild, + u = e.tagName, + l = u; + if (!(n = i.isHTML(e.namespaceURI) || n) && !e.prefix && e.namespaceURI) { + for (var d, y = 0; y < a.length; y++) + if ('xmlns' === a.item(y).name) { + d = a.item(y).value; + break; + } + if (!d) + for (var T = o.length - 1; T >= 0; T--) { + if ('' === (R = o[T]).prefix && R.namespace === e.namespaceURI) { + d = R.namespace; + break; + } + } + if (d !== e.namespaceURI) + for (T = o.length - 1; T >= 0; T--) { + var R; + if ((R = o[T]).namespace === e.namespaceURI) { + R.prefix && (l = R.prefix + ':' + u); + break; + } + } + } + t.push('<', l); + for (var E = 0; E < s; E++) { + 'xmlns' == (w = a.item(E)).prefix + ? o.push({ prefix: w.localName, namespace: w.value }) + : 'xmlns' == w.nodeName && o.push({ prefix: '', namespace: w.value }); + } + for (E = 0; E < s; E++) { + var w, A, x; + if (he((w = a.item(E)), 0, o)) + me(t, (A = w.prefix || '') ? 'xmlns:' + A : 'xmlns', (x = w.namespaceURI)), + o.push({ prefix: A, namespace: x }); + ge(w, t, n, r, o); + } + if (u === l && he(e, 0, o)) + me(t, (A = e.prefix || '') ? 'xmlns:' + A : 'xmlns', (x = e.namespaceURI)), + o.push({ prefix: A, namespace: x }); + if (c || (n && !/^(?:meta|link|img|br|hr|input)$/i.test(u))) { + if ((t.push('>'), n && /^script$/i.test(u))) + for (; c; ) c.data ? t.push(c.data) : ge(c, t, n, r, o.slice()), (c = c.nextSibling); + else for (; c; ) ge(c, t, n, r, o.slice()), (c = c.nextSibling); + t.push(''); + } else t.push('/>'); + return; + case k: + case b: + for (c = e.firstChild; c; ) ge(c, t, n, r, o.slice()), (c = c.nextSibling); + return; + case f: + return me(t, e.name, e.value); + case h: + return t.push(e.data.replace(/[<&>]/g, L)); + case m: + return t.push(''); + case C: + return t.push('\x3c!--', e.data, '--\x3e'); + case S: + var I = e.publicId, + O = e.systemId; + if ((t.push(''); + else if (O && '.' != O) t.push(' SYSTEM ', O, '>'); + else { + var B = e.internalSubset; + B && t.push(' [', B, ']'), t.push('>'); + } + return; + case v: + return t.push(''); + case g: + return t.push('&', e.nodeName, ';'); + default: + t.push('??', e.nodeName); + } + } + function ye(e, t, n) { + var r; + switch (t.nodeType) { + case p: + (r = t.cloneNode(!1)).ownerDocument = e; + case b: + break; + case f: + n = !0; + } + if ((r || (r = t.cloneNode(!1)), (r.ownerDocument = e), (r.parentNode = null), n)) + for (var o = t.firstChild; o; ) r.appendChild(ye(e, o, n)), (o = o.nextSibling); + return r; + } + function ve(e, t, n) { + var r = new t.constructor(); + for (var o in t) + if (Object.prototype.hasOwnProperty.call(t, o)) { + var i = t[o]; + 'object' != typeof i && i != r[o] && (r[o] = i); + } + switch ((t.childNodes && (r.childNodes = new O()), (r.ownerDocument = e), r.nodeType)) { + case p: + var a = t.attributes, + s = (r.attributes = new P()), + c = a.length; + s._ownerElement = r; + for (var u = 0; u < c; u++) r.setAttributeNode(ve(e, a.item(u), !0)); + break; + case f: + n = !0; + } + if (n) for (var l = t.firstChild; l; ) r.appendChild(ve(e, l, n)), (l = l.nextSibling); + return r; + } + function Ce(e, t, n) { + e[t] = n; + } + (I.prototype = Error.prototype), + u(R, I), + (O.prototype = { + length: 0, + item: function (e) { + return this[e] || null; + }, + toString: function (e, t) { + for (var n = [], r = 0; r < this.length; r++) ge(this[r], n, e, t); + return n.join(''); + }, + filter: function (e) { + return Array.prototype.filter.call(this, e); + }, + indexOf: function (e) { + return Array.prototype.indexOf.call(this, e); + }, + }), + (B.prototype.item = function (e) { + return _(this), this[e]; + }), + l(B, O), + (P.prototype = { + length: 0, + item: O.prototype.item, + getNamedItem: function (e) { + for (var t = this.length; t--; ) { + var n = this[t]; + if (n.nodeName == e) return n; + } + }, + setNamedItem: function (e) { + var t = e.ownerElement; + if (t && t != this._ownerElement) throw new I(x); + var n = this.getNamedItem(e.nodeName); + return N(this._ownerElement, this, e, n), n; + }, + setNamedItemNS: function (e) { + var t, + n = e.ownerElement; + if (n && n != this._ownerElement) throw new I(x); + return (t = this.getNamedItemNS(e.namespaceURI, e.localName)), N(this._ownerElement, this, e, t), t; + }, + removeNamedItem: function (e) { + var t = this.getNamedItem(e); + return U(this._ownerElement, this, t), t; + }, + removeNamedItemNS: function (e, t) { + var n = this.getNamedItemNS(e, t); + return U(this._ownerElement, this, n), n; + }, + getNamedItemNS: function (e, t) { + for (var n = this.length; n--; ) { + var r = this[n]; + if (r.localName == t && r.namespaceURI == e) return r; + } + return null; + }, + }), + (M.prototype = { + hasFeature: function (e, t) { + return !0; + }, + createDocument: function (e, t, n) { + var r = new F(); + if ( + ((r.implementation = this), (r.childNodes = new O()), (r.doctype = n || null), n && r.appendChild(n), t) + ) { + var o = r.createElementNS(e, t); + r.appendChild(o); + } + return r; + }, + createDocumentType: function (e, t, n) { + var r = new ae(); + return (r.name = e), (r.nodeName = e), (r.publicId = t || ''), (r.systemId = n || ''), r; + }, + }), + (H.prototype = { + firstChild: null, + lastChild: null, + previousSibling: null, + nextSibling: null, + attributes: null, + parentNode: null, + childNodes: null, + ownerDocument: null, + nodeValue: null, + namespaceURI: null, + prefix: null, + localName: null, + insertBefore: function (e, t) { + return Z(this, e, t); + }, + replaceChild: function (e, t) { + Z(this, e, t, Y), t && this.removeChild(t); + }, + removeChild: function (e) { + return z(this, e); + }, + appendChild: function (e) { + return this.insertBefore(e, null); + }, + hasChildNodes: function () { + return null != this.firstChild; + }, + cloneNode: function (e) { + return ve(this.ownerDocument || this, this, e); + }, + normalize: function () { + for (var e = this.firstChild; e; ) { + var t = e.nextSibling; + t && t.nodeType == h && e.nodeType == h + ? (this.removeChild(t), e.appendData(t.data)) + : (e.normalize(), (e = t)); + } + }, + isSupported: function (e, t) { + return this.ownerDocument.implementation.hasFeature(e, t); + }, + hasAttributes: function () { + return this.attributes.length > 0; + }, + lookupPrefix: function (e) { + for (var t = this; t; ) { + var n = t._nsMap; + if (n) for (var r in n) if (Object.prototype.hasOwnProperty.call(n, r) && n[r] === e) return r; + t = t.nodeType == f ? t.ownerDocument : t.parentNode; + } + return null; + }, + lookupNamespaceURI: function (e) { + for (var t = this; t; ) { + var n = t._nsMap; + if (n && Object.prototype.hasOwnProperty.call(n, e)) return n[e]; + t = t.nodeType == f ? t.ownerDocument : t.parentNode; + } + return null; + }, + isDefaultNamespace: function (e) { + return null == this.lookupPrefix(e); + }, + }), + u(d, H), + u(d, H.prototype), + (F.prototype = { + nodeName: '#document', + nodeType: k, + doctype: null, + documentElement: null, + _inc: 1, + insertBefore: function (e, t) { + if (e.nodeType == b) { + for (var n = e.firstChild; n; ) { + var r = n.nextSibling; + this.insertBefore(n, t), (n = r); + } + return e; + } + return ( + Z(this, e, t), + (e.ownerDocument = this), + null === this.documentElement && e.nodeType === p && (this.documentElement = e), + e + ); + }, + removeChild: function (e) { + return this.documentElement == e && (this.documentElement = null), z(this, e); + }, + replaceChild: function (e, t) { + Z(this, e, t, Y), (e.ownerDocument = this), t && this.removeChild(t), V(e) && (this.documentElement = e); + }, + importNode: function (e, t) { + return ye(this, e, t); + }, + getElementById: function (e) { + var t = null; + return ( + j(this.documentElement, function (n) { + if (n.nodeType == p && n.getAttribute('id') == e) return (t = n), !0; + }), + t + ); + }, + getElementsByClassName: function (e) { + var t = c(e); + return new B(this, function (n) { + var r = []; + return ( + t.length > 0 && + j(n.documentElement, function (o) { + if (o !== n && o.nodeType === p) { + var i = o.getAttribute('class'); + if (i) { + var a = e === i; + if (!a) { + var s = c(i); + a = t.every( + ((u = s), + function (e) { + return u && -1 !== u.indexOf(e); + }), + ); + } + a && r.push(o); + } + } + var u; + }), + r + ); + }); + }, + createElement: function (e) { + var t = new ee(); + return ( + (t.ownerDocument = this), + (t.nodeName = e), + (t.tagName = e), + (t.localName = e), + (t.childNodes = new O()), + ((t.attributes = new P())._ownerElement = t), + t + ); + }, + createDocumentFragment: function () { + var e = new le(); + return (e.ownerDocument = this), (e.childNodes = new O()), e; + }, + createTextNode: function (e) { + var t = new re(); + return (t.ownerDocument = this), t.appendData(e), t; + }, + createComment: function (e) { + var t = new oe(); + return (t.ownerDocument = this), t.appendData(e), t; + }, + createCDATASection: function (e) { + var t = new ie(); + return (t.ownerDocument = this), t.appendData(e), t; + }, + createProcessingInstruction: function (e, t) { + var n = new de(); + return (n.ownerDocument = this), (n.tagName = n.target = e), (n.nodeValue = n.data = t), n; + }, + createAttribute: function (e) { + var t = new te(); + return (t.ownerDocument = this), (t.name = e), (t.nodeName = e), (t.localName = e), (t.specified = !0), t; + }, + createEntityReference: function (e) { + var t = new ue(); + return (t.ownerDocument = this), (t.nodeName = e), t; + }, + createElementNS: function (e, t) { + var n = new ee(), + r = t.split(':'), + o = (n.attributes = new P()); + return ( + (n.childNodes = new O()), + (n.ownerDocument = this), + (n.nodeName = t), + (n.tagName = t), + (n.namespaceURI = e), + 2 == r.length ? ((n.prefix = r[0]), (n.localName = r[1])) : (n.localName = t), + (o._ownerElement = n), + n + ); + }, + createAttributeNS: function (e, t) { + var n = new te(), + r = t.split(':'); + return ( + (n.ownerDocument = this), + (n.nodeName = t), + (n.name = t), + (n.namespaceURI = e), + (n.specified = !0), + 2 == r.length ? ((n.prefix = r[0]), (n.localName = r[1])) : (n.localName = t), + n + ); + }, + }), + l(F, H), + (ee.prototype = { + nodeType: p, + hasAttribute: function (e) { + return null != this.getAttributeNode(e); + }, + getAttribute: function (e) { + var t = this.getAttributeNode(e); + return (t && t.value) || ''; + }, + getAttributeNode: function (e) { + return this.attributes.getNamedItem(e); + }, + setAttribute: function (e, t) { + var n = this.ownerDocument.createAttribute(e); + (n.value = n.nodeValue = '' + t), this.setAttributeNode(n); + }, + removeAttribute: function (e) { + var t = this.getAttributeNode(e); + t && this.removeAttributeNode(t); + }, + appendChild: function (e) { + return e.nodeType === b + ? this.insertBefore(e, null) + : (function (e, t) { + return ( + t.parentNode && t.parentNode.removeChild(t), + (t.parentNode = e), + (t.previousSibling = e.lastChild), + (t.nextSibling = null), + t.previousSibling ? (t.previousSibling.nextSibling = t) : (e.firstChild = t), + (e.lastChild = t), + q(e.ownerDocument, e, t), + t + ); + })(this, e); + }, + setAttributeNode: function (e) { + return this.attributes.setNamedItem(e); + }, + setAttributeNodeNS: function (e) { + return this.attributes.setNamedItemNS(e); + }, + removeAttributeNode: function (e) { + return this.attributes.removeNamedItem(e.nodeName); + }, + removeAttributeNS: function (e, t) { + var n = this.getAttributeNodeNS(e, t); + n && this.removeAttributeNode(n); + }, + hasAttributeNS: function (e, t) { + return null != this.getAttributeNodeNS(e, t); + }, + getAttributeNS: function (e, t) { + var n = this.getAttributeNodeNS(e, t); + return (n && n.value) || ''; + }, + setAttributeNS: function (e, t, n) { + var r = this.ownerDocument.createAttributeNS(e, t); + (r.value = r.nodeValue = '' + n), this.setAttributeNode(r); + }, + getAttributeNodeNS: function (e, t) { + return this.attributes.getNamedItemNS(e, t); + }, + getElementsByTagName: function (e) { + return new B(this, function (t) { + var n = []; + return ( + j(t, function (r) { + r === t || r.nodeType != p || ('*' !== e && r.tagName != e) || n.push(r); + }), + n + ); + }); + }, + getElementsByTagNameNS: function (e, t) { + return new B(this, function (n) { + var r = []; + return ( + j(n, function (o) { + o === n || + o.nodeType !== p || + ('*' !== e && o.namespaceURI !== e) || + ('*' !== t && o.localName != t) || + r.push(o); + }), + r + ); + }); + }, + }), + (F.prototype.getElementsByTagName = ee.prototype.getElementsByTagName), + (F.prototype.getElementsByTagNameNS = ee.prototype.getElementsByTagNameNS), + l(ee, H), + (te.prototype.nodeType = f), + l(te, H), + (ne.prototype = { + data: '', + substringData: function (e, t) { + return this.data.substring(e, e + t); + }, + appendData: function (e) { + (e = this.data + e), (this.nodeValue = this.data = e), (this.length = e.length); + }, + insertData: function (e, t) { + this.replaceData(e, 0, t); + }, + appendChild: function (e) { + throw new Error(E[w]); + }, + deleteData: function (e, t) { + this.replaceData(e, t, ''); + }, + replaceData: function (e, t, n) { + (n = this.data.substring(0, e) + n + this.data.substring(e + t)), + (this.nodeValue = this.data = n), + (this.length = n.length); + }, + }), + l(ne, H), + (re.prototype = { + nodeName: '#text', + nodeType: h, + splitText: function (e) { + var t = this.data, + n = t.substring(e); + (t = t.substring(0, e)), (this.data = this.nodeValue = t), (this.length = t.length); + var r = this.ownerDocument.createTextNode(n); + return this.parentNode && this.parentNode.insertBefore(r, this.nextSibling), r; + }, + }), + l(re, ne), + (oe.prototype = { nodeName: '#comment', nodeType: C }), + l(oe, ne), + (ie.prototype = { nodeName: '#cdata-section', nodeType: m }), + l(ie, ne), + (ae.prototype.nodeType = S), + l(ae, H), + (se.prototype.nodeType = T), + l(se, H), + (ce.prototype.nodeType = y), + l(ce, H), + (ue.prototype.nodeType = g), + l(ue, H), + (le.prototype.nodeName = '#document-fragment'), + (le.prototype.nodeType = b), + l(le, H), + (de.prototype.nodeType = v), + l(de, H), + (pe.prototype.serializeToString = function (e, t, n) { + return fe.call(e, t, n); + }), + (H.prototype.toString = fe); + try { + if (Object.defineProperty) { + function ke(e) { + switch (e.nodeType) { + case p: + case b: + var t = []; + for (e = e.firstChild; e; ) 7 !== e.nodeType && 8 !== e.nodeType && t.push(ke(e)), (e = e.nextSibling); + return t.join(''); + default: + return e.nodeValue; + } + } + Object.defineProperty(B.prototype, 'length', { + get: function () { + return _(this), this.$$length; + }, + }), + Object.defineProperty(H.prototype, 'textContent', { + get: function () { + return ke(this); + }, + set: function (e) { + switch (this.nodeType) { + case p: + case b: + for (; this.firstChild; ) this.removeChild(this.firstChild); + (e || String(e)) && this.appendChild(this.ownerDocument.createTextNode(e)); + break; + default: + (this.data = e), (this.value = e), (this.nodeValue = e); + } + }, + }), + (Ce = function (e, t, n) { + e['$$' + t] = n; + }); + } + } catch (Se) {} + (t.DocumentType = ae), + (t.DOMException = I), + (t.DOMImplementation = M), + (t.Element = ee), + (t.Node = H), + (t.NodeList = O), + (t.XMLSerializer = pe); + }, + function (e, t, n) { + var r = n(23), + o = n(24), + i = n(0), + a = n(7), + s = null, + c = function (e) { + if (!s) { + var t = n(25); + s = new t({ + appkey: '0AND0VEVB24UBGDU', + versionCode: a.version, + channelID: 'js_sdk', + openid: 'openid', + unionid: 'unid', + strictMode: !1, + delay: e, + sessionDuration: 6e4, + }); + } + return s; + }, + u = function () { + var e = function () { + return ((65536 * (1 + Math.random())) | 0).toString(16).substring(1); + }; + return e() + e() + '-' + e() + '-' + e() + '-' + e() + '-' + e() + e() + e(); + }, + l = function () { + if ('object' === ('undefined' == typeof navigator ? 'undefined' : i(navigator))) { + var e = navigator.connection || navigator.mozConnection || navigator.webkitConnection; + return (null == e ? void 0 : e.type) || (null == e ? void 0 : e.effectiveType) || 'unknown'; + } + return 'unknown'; + }, + d = function () { + if ('object' !== ('undefined' == typeof navigator ? 'undefined' : i(navigator))) return 'unknown os'; + var e = navigator.userAgent.toLowerCase(), + t = /macintosh|mac os x/i.test(navigator.userAgent); + return e.indexOf('win32') >= 0 || e.indexOf('wow32') >= 0 + ? 'win32' + : e.indexOf('win64') >= 0 || e.indexOf('wow64') >= 0 + ? 'win64' + : t + ? 'mac' + : 'unknown os'; + }, + p = function () { + return !( + 'object' !== ('undefined' == typeof navigator ? 'undefined' : i(navigator)) || + !navigator.userAgent.match( + /(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i, + ) + ); + }, + f = function () { + return !( + 'object' !== ('undefined' == typeof navigator ? 'undefined' : i(navigator)) || + !navigator.userAgent.match(/(Android|Adr|Linux)/i) + ); + }, + h = function () { + return !( + 'object' !== ('undefined' == typeof navigator ? 'undefined' : i(navigator)) || + !navigator.userAgent.match(/(iPhone|iPod|iPad|iOS)/i) + ); + }, + m = function () { + if ('object' !== ('undefined' == typeof navigator ? 'undefined' : i(navigator))) return 'unknown device'; + var e = navigator.userAgent.toLowerCase(); + if (e.includes('app/tencent_wemeet')) return 'tencent_wemeet'; + if (e.indexOf('maxthon') >= 0) { + var t = e.match(/maxthon\/([\d.]+)/), + n = (t && t[1]) || ''; + return '傲游浏览器 '.concat(n).trim(); + } + if (e.indexOf('qqbrowser') >= 0) { + var r = e.match(/qqbrowser\/([\d.]+)/), + o = (r && r[1]) || ''; + return 'QQ浏览器 '.concat(o).trim(); + } + if (e.indexOf('se 2.x') >= 0) return '搜狗浏览器'; + if (e.indexOf('wxwork') >= 0) return '微信内置浏览器'; + if (e.indexOf('msie') >= 0) { + var a = e.match(/msie ([\d.]+)/), + s = (a && a[1]) || ''; + return 'IE '.concat(s).trim(); + } + if (e.indexOf('firefox') >= 0) { + var c = e.match(/firefox\/([\d.]+)/), + u = (c && c[1]) || ''; + return 'Firefox '.concat(u).trim(); + } + if (e.indexOf('chrome') >= 0) { + var l = e.match(/chrome\/([\d.]+)/), + d = (l && l[1]) || ''; + return 'Chrome '.concat(d).trim(); + } + if (e.indexOf('opera') >= 0) { + var p = e.match(/opera.([\d.]+)/), + f = (p && p[1]) || ''; + return 'Opera '.concat(f).trim(); + } + if (e.indexOf('safari') >= 0) { + var h = e.match(/version\/([\d.]+)/), + m = (h && h[1]) || ''; + return 'Safari '.concat(m).trim(); + } + if (e.indexOf('edge') >= 0) { + var g = e.match(/edge\/([\d.]+)/), + y = (g && g[1]) || ''; + return 'edge '.concat(y).trim(); + } + return e.substr(0, 200); + }, + g = { + isMobile: p(), + isBrowser: !p(), + mobileOsType: f() ? 'android' : h ? 'ios' : 'other_mobile', + pcOsType: d(), + }, + y = { + deviceType: g.isMobile ? 'mobile' : g.isBrowser ? 'browser' : 'unknown', + devicePlatform: g.isMobile ? g.mobileOsType : g.pcOsType, + deviceName: m(), + }, + v = [ + 'multipartInit', + 'multipartUpload', + 'multipartComplete', + 'multipartList', + 'multipartListPart', + 'multipartAbort', + ], + C = ['putObject', 'postObject', 'appendObject', 'sliceUploadFile', 'uploadFile', 'uploadFiles'].concat(v), + k = ['getObject']; + function S(e) { + return e.replace(/([A-Z])/g, '_$1').toLowerCase(); + } + var b = (function () { + 'use strict'; + function e(t) { + r(this, e); + var n = t.parent, + o = t.traceId, + i = t.bucket, + s = t.region, + l = t.apiName, + d = t.fileKey, + p = t.fileSize, + f = t.accelerate, + h = t.customId, + m = t.delay, + g = t.deepTracker, + v = (i && i.substr(i.lastIndexOf('-') + 1)) || ''; + (this.parent = n), + (this.deepTracker = g), + (this.delay = m), + (this.params = { + cossdkVersion: a.version, + region: s, + networkType: '', + host: '', + accelerate: f ? 'Y' : 'N', + requestPath: d || '', + size: p || -1, + httpMd5: 0, + httpSign: 0, + httpFull: 0, + name: l || '', + result: '', + tookTime: 0, + errorNode: '', + errorCode: '', + errorMessage: '', + errorRequestId: '', + errorStatusCode: 0, + errorServiceName: '', + tracePlatform: 'cos-js-sdk-v5', + traceId: o || u(), + bucket: i, + appid: v, + partNumber: 0, + retryTimes: 0, + reqUrl: '', + customId: h || '', + deviceType: y.deviceType, + devicePlatform: y.devicePlatform, + deviceName: y.deviceName, + md5StartTime: 0, + md5EndTime: 0, + signStartTime: 0, + signEndTime: 0, + httpStartTime: 0, + httpEndTime: 0, + startTime: new Date().getTime(), + endTime: 0, + }), + (this.beacon = c(m)); + } + return ( + o(e, [ + { + key: 'formatResult', + value: function (e, t) { + var n, + r, + o, + i, + a, + s, + c = new Date().getTime() - this.params.startTime, + u = l(), + d = e + ? (null == e ? void 0 : e.code) || + (null == e || null === (n = e.error) || void 0 === n ? void 0 : n.code) || + (null == e || null === (r = e.error) || void 0 === r ? void 0 : r.Code) + : '', + p = e + ? (null == e ? void 0 : e.message) || + (null == e || null === (o = e.error) || void 0 === o ? void 0 : o.message) || + (null == e || null === (i = e.error) || void 0 === i ? void 0 : i.Message) + : '', + f = e + ? (null == e ? void 0 : e.resource) || + (null == e || null === (a = e.error) || void 0 === a ? void 0 : a.resource) || + (null == e || null === (s = e.error) || void 0 === s ? void 0 : s.Resource) + : '', + h = e ? (null == e ? void 0 : e.statusCode) : t.statusCode, + m = e + ? (null == e ? void 0 : e.headers) && (null == e ? void 0 : e.headers['x-cos-request-id']) + : (null == t ? void 0 : t.headers) && (null == t ? void 0 : t.headers['x-cos-request-id']), + g = e ? (m ? 'Server' : 'Client') : ''; + if ( + (Object.assign(this.params, { + tookTime: c, + networkType: u, + httpMd5: this.params.md5EndTime - this.params.md5StartTime, + httpSign: this.params.signEndTime - this.params.signStartTime, + httpFull: this.params.httpEndTime - this.params.httpStartTime, + result: e ? 'Fail' : 'Success', + errorType: g, + errorCode: d, + errorStatusCode: h, + errorMessage: p, + errorServiceName: f, + errorRequestId: m, + }), + !e || (d && p) || (this.params.fullError = e ? JSON.stringify(e) : ''), + 'getObject' === this.params.name && + (this.params.size = t ? t.headers && t.headers['content-length'] : -1), + this.params.reqUrl) + ) + try { + var y = /^http(s)?:\/\/(.*?)\//.exec(this.params.reqUrl); + this.params.host = y[2]; + } catch (e) { + this.params.host = this.params.reqUrl; + } + this.sendEvents(); + }, + }, + { + key: 'setParams', + value: function (e) { + Object.assign(this.params, e); + }, + }, + { + key: 'sendEvents', + value: function () { + if (!v.includes(this.params.name) || this.deepTracker) { + var e, + t = + ((e = this.params.name), + C.includes(e) ? 'cos_upload' : k.includes(e) ? 'cos_download' : 'base_service'), + n = (function (e) { + var t = {}, + n = + 'Success' === e.result + ? [ + 'tracePlatform', + 'cossdkVersion', + 'region', + 'bucket', + 'appid', + 'networkType', + 'host', + 'accelerate', + 'requestPath', + 'partNumber', + 'size', + 'name', + 'result', + 'tookTime', + 'errorRequestId', + 'retryTimes', + 'reqUrl', + 'customId', + 'deviceType', + 'devicePlatform', + 'deviceName', + ] + : [ + 'tracePlatform', + 'cossdkVersion', + 'region', + 'networkType', + 'host', + 'accelerate', + 'requestPath', + 'size', + 'httpMd5', + 'httpSign', + 'httpFull', + 'name', + 'result', + 'tookTime', + 'errorNode', + 'errorCode', + 'errorMessage', + 'errorRequestId', + 'errorStatusCode', + 'errorServiceName', + 'errorType', + 'traceId', + 'bucket', + 'appid', + 'partNumber', + 'retryTimes', + 'reqUrl', + 'customId', + 'fullError', + 'deviceType', + 'devicePlatform', + 'deviceName', + ]; + for (var r in e) n.includes(r) && (t[S(r)] = e[r]); + return t; + })(this.params); + this.beacon || (this.beacon = c(this.delay || 5e3)), + 0 === this.delay + ? this.beacon && this.beacon.onDirectUserAction(t, n) + : this.beacon && this.beacon.onUserAction(t, n); + } + }, + }, + { + key: 'generateSubTracker', + value: function (t) { + return ( + Object.assign(t, { + parent: this, + deepTracker: this.deepTracker, + traceId: this.params.traceId, + bucket: this.params.bucket, + region: this.params.region, + fileKey: this.params.requestPath, + customId: this.params.customId, + delay: this.delay, + }), + new e(t) + ); + }, + }, + ]), + e + ); + })(); + e.exports = b; + }, + function (e) { + e.exports = JSON.parse( + '{"name":"cos-js-sdk-v5","version":"1.4.20","description":"JavaScript SDK for [腾讯云对象存储](https://cloud.tencent.com/product/cos)","main":"dist/cos-js-sdk-v5.js","types":"index.d.ts","scripts":{"prettier":"prettier --write src demo/demo.js test/test.js server/sts.js index.d.ts","server":"node server/sts.js","dev":"cross-env NODE_ENV=development webpack -w --mode=development","build":"cross-env NODE_ENV=production webpack --mode=production","cos-auth.min.js":"uglifyjs ./demo/common/cos-auth.js -o ./demo/common/cos-auth.min.js -c -m","test":"jest --runInBand --coverage"},"repository":{"type":"git","url":"git+https://github.com/tencentyun/cos-js-sdk-v5.git"},"keywords":[],"author":"carsonxu","license":"ISC","bugs":{"url":"https://github.com/tencentyun/cos-js-sdk-v5/issues"},"homepage":"https://github.com/tencentyun/cos-js-sdk-v5#readme","dependencies":{"@xmldom/xmldom":"^0.8.6"},"devDependencies":{"@babel/core":"7.17.9","@babel/plugin-transform-runtime":"7.18.10","@babel/preset-env":"7.16.11","babel-loader":"8.2.5","body-parser":"^1.18.3","cross-env":"^5.2.0","express":"^4.16.4","jest":"^29.3.1","jest-environment-jsdom":"^29.3.1","prettier":"^3.0.1","qcloud-cos-sts":"^3.0.2","request":"^2.87.0","terser-webpack-plugin":"4.2.3","uglifyjs":"^2.4.11","webpack":"4.46.0","webpack-cli":"4.10.0"}}', + ); + }, + function (e, t) { + var n = function (e) { + var t = {}, + n = function (e) { + return !t[e] && (t[e] = []), t[e]; + }; + (e.on = function (e, t) { + n(e).push(t); + }), + (e.off = function (e, t) { + for (var r = n(e), o = r.length - 1; o >= 0; o--) t === r[o] && r.splice(o, 1); + }), + (e.emit = function (e, t) { + for ( + var r = n(e).map(function (e) { + return e; + }), + o = 0; + o < r.length; + o++ + ) + r[o](t); + }); + }; + (e.exports.init = n), + (e.exports.EventProxy = function () { + n(this); + }); + }, + function (e, t, n) { + var r, + o, + i = n(1), + a = 'cos_sdk_upload_cache', + s = function () { + try { + var e = JSON.parse(localStorage.getItem(a)); + } catch (e) {} + e || (e = []), (r = e); + }, + c = function () { + try { + r.length ? localStorage.setItem(a, JSON.stringify(r)) : localStorage.removeItem(a); + } catch (e) {} + }, + u = function () { + if (!r) { + s.call(this); + for (var e = !1, t = Math.round(Date.now() / 1e3), n = r.length - 1; n >= 0; n--) { + var o = r[n][2]; + (!o || o + 2592e3 < t) && (r.splice(n, 1), (e = !0)); + } + e && c(); + } + }, + l = function () { + o || + (o = setTimeout(function () { + c(), (o = null); + }, 400)); + }, + d = { + using: {}, + setUsing: function (e) { + d.using[e] = !0; + }, + removeUsing: function (e) { + delete d.using[e]; + }, + getFileId: function (e, t, n, r) { + return e.name && e.size && e.lastModifiedDate && t + ? i.md5([e.name, e.size, e.lastModifiedDate, t, n, r].join('::')) + : null; + }, + getCopyFileId: function (e, t, n, r, o) { + var a = t['content-length'], + s = t.etag || '', + c = t['last-modified']; + return e && n ? i.md5([e, a, s, c, n, r, o].join('::')) : null; + }, + getUploadIdList: function (e) { + if (!e) return null; + u.call(this); + for (var t = [], n = 0; n < r.length; n++) r[n][0] === e && t.push(r[n][1]); + return t.length ? t : null; + }, + saveUploadId: function (e, t, n) { + if ((u.call(this), e)) { + for (var o = r.length - 1; o >= 0; o--) { + var i = r[o]; + i[0] === e && i[1] === t && r.splice(o, 1); + } + r.unshift([e, t, Math.round(Date.now() / 1e3)]), r.length > n && r.splice(n), l(); + } + }, + removeUploadId: function (e) { + u.call(this), delete d.using[e]; + for (var t = r.length - 1; t >= 0; t--) r[t][1] === e && r.splice(t, 1); + l(); + }, + }; + e.exports = d; + }, + function (e, t, n) { + var r = n(11); + e.exports = r; + }, + function (e, t, n) { + 'use strict'; + var r = n(1), + o = n(8), + i = n(26), + a = n(27), + s = n(29), + c = n(7), + u = { + AppId: '', + SecretId: '', + SecretKey: '', + SecurityToken: '', + ChunkRetryTimes: 2, + FileParallelLimit: 3, + ChunkParallelLimit: 3, + ChunkSize: 1048576, + SliceSize: 1048576, + CopyChunkParallelLimit: 20, + CopyChunkSize: 10485760, + CopySliceSize: 10485760, + MaxPartNumber: 1e4, + ProgressInterval: 1e3, + Domain: '', + ServiceDomain: '', + Protocol: '', + CompatibilityMode: !1, + ForcePathStyle: !1, + UseRawKey: !1, + Timeout: 0, + CorrectClockSkew: !0, + SystemClockOffset: 0, + UploadCheckContentMd5: !1, + UploadQueueSize: 1e4, + UploadAddMetaMd5: !1, + UploadIdCacheLimit: 50, + UseAccelerate: !1, + ForceSignHost: !0, + EnableTracker: !1, + DeepTracker: !1, + TrackerDelay: 5e3, + CustomId: '', + }, + l = function (e) { + (this.options = r.extend(r.clone(u), e || {})), + (this.options.FileParallelLimit = Math.max(1, this.options.FileParallelLimit)), + (this.options.ChunkParallelLimit = Math.max(1, this.options.ChunkParallelLimit)), + (this.options.ChunkRetryTimes = Math.max(0, this.options.ChunkRetryTimes)), + (this.options.ChunkSize = Math.max(1048576, this.options.ChunkSize)), + (this.options.CopyChunkParallelLimit = Math.max(1, this.options.CopyChunkParallelLimit)), + (this.options.CopyChunkSize = Math.max(1048576, this.options.CopyChunkSize)), + (this.options.CopySliceSize = Math.max(0, this.options.CopySliceSize)), + (this.options.MaxPartNumber = Math.max(1024, Math.min(1e4, this.options.MaxPartNumber))), + (this.options.Timeout = Math.max(0, this.options.Timeout)), + this.options.AppId, + this.options.SecretId && this.options.SecretId.indexOf(' '), + this.options.SecretKey && this.options.SecretKey.indexOf(' '), + r.isNode(), + o.init(this), + i.init(this); + }; + a.init(l, i), + s.init(l, i), + (l.util = { md5: r.md5, xml2json: r.xml2json, json2xml: r.json2xml, encodeBase64: r.encodeBase64 }), + (l.getAuthorization = r.getAuth), + (l.version = c.version), + (e.exports = l); + }, + function (module, exports, __webpack_require__) { + (function (process, global, module) { + var __WEBPACK_AMD_DEFINE_RESULT__, + _typeof = __webpack_require__(0); + (function () { + 'use strict'; + var ERROR = 'input is invalid type', + WINDOW = 'object' === ('undefined' == typeof window ? 'undefined' : _typeof(window)), + root = WINDOW ? window : {}; + root.JS_MD5_NO_WINDOW && (WINDOW = !1); + var WEB_WORKER = !WINDOW && 'object' === ('undefined' == typeof self ? 'undefined' : _typeof(self)), + NODE_JS = + !root.JS_MD5_NO_NODE_JS && + 'object' === (void 0 === process ? 'undefined' : _typeof(process)) && + process.versions && + process.versions.node; + NODE_JS ? (root = global) : WEB_WORKER && (root = self); + var COMMON_JS = !root.JS_MD5_NO_COMMON_JS && 'object' === _typeof(module) && module.exports, + AMD = __webpack_require__(14), + ARRAY_BUFFER = !root.JS_MD5_NO_ARRAY_BUFFER && 'undefined' != typeof ArrayBuffer, + HEX_CHARS = '0123456789abcdef'.split(''), + EXTRA = [128, 32768, 8388608, -2147483648], + SHIFT = [0, 8, 16, 24], + OUTPUT_TYPES = ['hex', 'array', 'digest', 'buffer', 'arrayBuffer', 'base64'], + BASE64_ENCODE_CHAR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split(''), + blocks = [], + buffer8; + if (ARRAY_BUFFER) { + var buffer = new ArrayBuffer(68); + (buffer8 = new Uint8Array(buffer)), (blocks = new Uint32Array(buffer)); + } + (!root.JS_MD5_NO_NODE_JS && Array.isArray) || + (Array.isArray = function (e) { + return '[object Array]' === Object.prototype.toString.call(e); + }), + !ARRAY_BUFFER || + (!root.JS_MD5_NO_ARRAY_BUFFER_IS_VIEW && ArrayBuffer.isView) || + (ArrayBuffer.isView = function (e) { + return 'object' === _typeof(e) && e.buffer && e.buffer.constructor === ArrayBuffer; + }); + var createOutputMethod = function (e) { + return function (t, n) { + return new Md5(!0).update(t, n)[e](); + }; + }, + createMethod = function () { + var e = createOutputMethod('hex'); + NODE_JS && (e = nodeWrap(e)), + (e.getCtx = e.create = + function () { + return new Md5(); + }), + (e.update = function (t) { + return e.create().update(t); + }); + for (var t = 0; t < OUTPUT_TYPES.length; ++t) { + var n = OUTPUT_TYPES[t]; + e[n] = createOutputMethod(n); + } + return e; + }, + nodeWrap = function nodeWrap(method) { + var crypto = eval("require('crypto')"), + Buffer = eval("require('buffer').Buffer"), + nodeMethod = function (e) { + if ('string' == typeof e) return crypto.createHash('md5').update(e, 'utf8').digest('hex'); + if (null == e) throw ERROR; + return ( + e.constructor === ArrayBuffer && (e = new Uint8Array(e)), + Array.isArray(e) || ArrayBuffer.isView(e) || e.constructor === Buffer + ? crypto.createHash('md5').update(new Buffer(e)).digest('hex') + : method(e) + ); + }; + return nodeMethod; + }; + function Md5(e) { + if (e) + (blocks[0] = + blocks[16] = + blocks[1] = + blocks[2] = + blocks[3] = + blocks[4] = + blocks[5] = + blocks[6] = + blocks[7] = + blocks[8] = + blocks[9] = + blocks[10] = + blocks[11] = + blocks[12] = + blocks[13] = + blocks[14] = + blocks[15] = + 0), + (this.blocks = blocks), + (this.buffer8 = buffer8); + else if (ARRAY_BUFFER) { + var t = new ArrayBuffer(68); + (this.buffer8 = new Uint8Array(t)), (this.blocks = new Uint32Array(t)); + } else this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; + (this.h0 = this.h1 = this.h2 = this.h3 = this.start = this.bytes = this.hBytes = 0), + (this.finalized = this.hashed = !1), + (this.first = !0); + } + (Md5.prototype.update = function (e, t) { + if (!this.finalized) { + for (var n, r, o = 0, i = e.length, a = this.blocks, s = this.buffer8; o < i; ) { + if ( + (this.hashed && + ((this.hashed = !1), + (a[0] = a[16]), + (a[16] = + a[1] = + a[2] = + a[3] = + a[4] = + a[5] = + a[6] = + a[7] = + a[8] = + a[9] = + a[10] = + a[11] = + a[12] = + a[13] = + a[14] = + a[15] = + 0)), + ARRAY_BUFFER) + ) + for (r = this.start; o < i && r < 64; ++o) + (n = e.charCodeAt(o)), + t || n < 128 + ? (s[r++] = n) + : n < 2048 + ? ((s[r++] = 192 | (n >> 6)), (s[r++] = 128 | (63 & n))) + : n < 55296 || n >= 57344 + ? ((s[r++] = 224 | (n >> 12)), (s[r++] = 128 | ((n >> 6) & 63)), (s[r++] = 128 | (63 & n))) + : ((n = 65536 + (((1023 & n) << 10) | (1023 & e.charCodeAt(++o)))), + (s[r++] = 240 | (n >> 18)), + (s[r++] = 128 | ((n >> 12) & 63)), + (s[r++] = 128 | ((n >> 6) & 63)), + (s[r++] = 128 | (63 & n))); + else + for (r = this.start; o < i && r < 64; ++o) + (n = e.charCodeAt(o)), + t || n < 128 + ? (a[r >> 2] |= n << SHIFT[3 & r++]) + : n < 2048 + ? ((a[r >> 2] |= (192 | (n >> 6)) << SHIFT[3 & r++]), + (a[r >> 2] |= (128 | (63 & n)) << SHIFT[3 & r++])) + : n < 55296 || n >= 57344 + ? ((a[r >> 2] |= (224 | (n >> 12)) << SHIFT[3 & r++]), + (a[r >> 2] |= (128 | ((n >> 6) & 63)) << SHIFT[3 & r++]), + (a[r >> 2] |= (128 | (63 & n)) << SHIFT[3 & r++])) + : ((n = 65536 + (((1023 & n) << 10) | (1023 & e.charCodeAt(++o)))), + (a[r >> 2] |= (240 | (n >> 18)) << SHIFT[3 & r++]), + (a[r >> 2] |= (128 | ((n >> 12) & 63)) << SHIFT[3 & r++]), + (a[r >> 2] |= (128 | ((n >> 6) & 63)) << SHIFT[3 & r++]), + (a[r >> 2] |= (128 | (63 & n)) << SHIFT[3 & r++])); + (this.lastByteIndex = r), + (this.bytes += r - this.start), + r >= 64 ? ((this.start = r - 64), this.hash(), (this.hashed = !0)) : (this.start = r); + } + return ( + this.bytes > 4294967295 && + ((this.hBytes += (this.bytes / 4294967296) << 0), (this.bytes = this.bytes % 4294967296)), + this + ); + } + }), + (Md5.prototype.finalize = function () { + if (!this.finalized) { + this.finalized = !0; + var e = this.blocks, + t = this.lastByteIndex; + (e[t >> 2] |= EXTRA[3 & t]), + t >= 56 && + (this.hashed || this.hash(), + (e[0] = e[16]), + (e[16] = + e[1] = + e[2] = + e[3] = + e[4] = + e[5] = + e[6] = + e[7] = + e[8] = + e[9] = + e[10] = + e[11] = + e[12] = + e[13] = + e[14] = + e[15] = + 0)), + (e[14] = this.bytes << 3), + (e[15] = (this.hBytes << 3) | (this.bytes >>> 29)), + this.hash(); + } + }), + (Md5.prototype.hash = function () { + var e, + t, + n, + r, + o, + i, + a = this.blocks; + this.first + ? (t = + ((((t = + ((e = ((((e = a[0] - 680876937) << 7) | (e >>> 25)) - 271733879) << 0) ^ + ((n = + ((((n = + (-271733879 ^ + ((r = + ((((r = (-1732584194 ^ (2004318071 & e)) + a[1] - 117830708) << 12) | (r >>> 20)) + + e) << + 0) & + (-271733879 ^ e))) + + a[2] - + 1126478375) << + 17) | + (n >>> 15)) + + r) << + 0) & + (r ^ e))) + + a[3] - + 1316259209) << + 22) | + (t >>> 10)) + + n) << + 0) + : ((e = this.h0), + (t = this.h1), + (n = this.h2), + (t = + ((((t += + ((e = + ((((e += ((r = this.h3) ^ (t & (n ^ r))) + a[0] - 680876936) << 7) | (e >>> 25)) + t) << 0) ^ + ((n = + ((((n += + (t ^ + ((r = ((((r += (n ^ (e & (t ^ n))) + a[1] - 389564586) << 12) | (r >>> 20)) + e) << 0) & + (e ^ t))) + + a[2] + + 606105819) << + 17) | + (n >>> 15)) + + r) << + 0) & + (r ^ e))) + + a[3] - + 1044525330) << + 22) | + (t >>> 10)) + + n) << + 0)), + (t = + ((((t += + ((e = ((((e += (r ^ (t & (n ^ r))) + a[4] - 176418897) << 7) | (e >>> 25)) + t) << 0) ^ + ((n = + ((((n += + (t ^ + ((r = ((((r += (n ^ (e & (t ^ n))) + a[5] + 1200080426) << 12) | (r >>> 20)) + e) << 0) & + (e ^ t))) + + a[6] - + 1473231341) << + 17) | + (n >>> 15)) + + r) << + 0) & + (r ^ e))) + + a[7] - + 45705983) << + 22) | + (t >>> 10)) + + n) << + 0), + (t = + ((((t += + ((e = ((((e += (r ^ (t & (n ^ r))) + a[8] + 1770035416) << 7) | (e >>> 25)) + t) << 0) ^ + ((n = + ((((n += + (t ^ + ((r = ((((r += (n ^ (e & (t ^ n))) + a[9] - 1958414417) << 12) | (r >>> 20)) + e) << 0) & + (e ^ t))) + + a[10] - + 42063) << + 17) | + (n >>> 15)) + + r) << + 0) & + (r ^ e))) + + a[11] - + 1990404162) << + 22) | + (t >>> 10)) + + n) << + 0), + (t = + ((((t += + ((e = ((((e += (r ^ (t & (n ^ r))) + a[12] + 1804603682) << 7) | (e >>> 25)) + t) << 0) ^ + ((n = + ((((n += + (t ^ + ((r = ((((r += (n ^ (e & (t ^ n))) + a[13] - 40341101) << 12) | (r >>> 20)) + e) << 0) & + (e ^ t))) + + a[14] - + 1502002290) << + 17) | + (n >>> 15)) + + r) << + 0) & + (r ^ e))) + + a[15] + + 1236535329) << + 22) | + (t >>> 10)) + + n) << + 0), + (t = + ((((t += + ((r = + ((((r += + (t ^ + (n & + ((e = ((((e += (n ^ (r & (t ^ n))) + a[1] - 165796510) << 5) | (e >>> 27)) + t) << 0) ^ + t))) + + a[6] - + 1069501632) << + 9) | + (r >>> 23)) + + e) << + 0) ^ + (e & + ((n = ((((n += (e ^ (t & (r ^ e))) + a[11] + 643717713) << 14) | (n >>> 18)) + r) << 0) ^ r))) + + a[0] - + 373897302) << + 20) | + (t >>> 12)) + + n) << + 0), + (t = + ((((t += + ((r = + ((((r += + (t ^ + (n & + ((e = ((((e += (n ^ (r & (t ^ n))) + a[5] - 701558691) << 5) | (e >>> 27)) + t) << 0) ^ + t))) + + a[10] + + 38016083) << + 9) | + (r >>> 23)) + + e) << + 0) ^ + (e & + ((n = ((((n += (e ^ (t & (r ^ e))) + a[15] - 660478335) << 14) | (n >>> 18)) + r) << 0) ^ r))) + + a[4] - + 405537848) << + 20) | + (t >>> 12)) + + n) << + 0), + (t = + ((((t += + ((r = + ((((r += + (t ^ + (n & + ((e = ((((e += (n ^ (r & (t ^ n))) + a[9] + 568446438) << 5) | (e >>> 27)) + t) << 0) ^ + t))) + + a[14] - + 1019803690) << + 9) | + (r >>> 23)) + + e) << + 0) ^ + (e & + ((n = ((((n += (e ^ (t & (r ^ e))) + a[3] - 187363961) << 14) | (n >>> 18)) + r) << 0) ^ r))) + + a[8] + + 1163531501) << + 20) | + (t >>> 12)) + + n) << + 0), + (t = + ((((t += + ((r = + ((((r += + (t ^ + (n & + ((e = ((((e += (n ^ (r & (t ^ n))) + a[13] - 1444681467) << 5) | (e >>> 27)) + t) << 0) ^ + t))) + + a[2] - + 51403784) << + 9) | + (r >>> 23)) + + e) << + 0) ^ + (e & + ((n = ((((n += (e ^ (t & (r ^ e))) + a[7] + 1735328473) << 14) | (n >>> 18)) + r) << 0) ^ r))) + + a[12] - + 1926607734) << + 20) | + (t >>> 12)) + + n) << + 0), + (t = + ((((t += + ((i = + (r = + ((((r += + ((o = t ^ n) ^ (e = ((((e += (o ^ r) + a[5] - 378558) << 4) | (e >>> 28)) + t) << 0)) + + a[8] - + 2022574463) << + 11) | + (r >>> 21)) + + e) << + 0) ^ e) ^ + (n = ((((n += (i ^ t) + a[11] + 1839030562) << 16) | (n >>> 16)) + r) << 0)) + + a[14] - + 35309556) << + 23) | + (t >>> 9)) + + n) << + 0), + (t = + ((((t += + ((i = + (r = + ((((r += + ((o = t ^ n) ^ (e = ((((e += (o ^ r) + a[1] - 1530992060) << 4) | (e >>> 28)) + t) << 0)) + + a[4] + + 1272893353) << + 11) | + (r >>> 21)) + + e) << + 0) ^ e) ^ + (n = ((((n += (i ^ t) + a[7] - 155497632) << 16) | (n >>> 16)) + r) << 0)) + + a[10] - + 1094730640) << + 23) | + (t >>> 9)) + + n) << + 0), + (t = + ((((t += + ((i = + (r = + ((((r += + ((o = t ^ n) ^ (e = ((((e += (o ^ r) + a[13] + 681279174) << 4) | (e >>> 28)) + t) << 0)) + + a[0] - + 358537222) << + 11) | + (r >>> 21)) + + e) << + 0) ^ e) ^ + (n = ((((n += (i ^ t) + a[3] - 722521979) << 16) | (n >>> 16)) + r) << 0)) + + a[6] + + 76029189) << + 23) | + (t >>> 9)) + + n) << + 0), + (t = + ((((t += + ((i = + (r = + ((((r += + ((o = t ^ n) ^ (e = ((((e += (o ^ r) + a[9] - 640364487) << 4) | (e >>> 28)) + t) << 0)) + + a[12] - + 421815835) << + 11) | + (r >>> 21)) + + e) << + 0) ^ e) ^ + (n = ((((n += (i ^ t) + a[15] + 530742520) << 16) | (n >>> 16)) + r) << 0)) + + a[2] - + 995338651) << + 23) | + (t >>> 9)) + + n) << + 0), + (t = + ((((t += + ((r = + ((((r += + (t ^ ((e = ((((e += (n ^ (t | ~r)) + a[0] - 198630844) << 6) | (e >>> 26)) + t) << 0) | ~n)) + + a[7] + + 1126891415) << + 10) | + (r >>> 22)) + + e) << + 0) ^ + ((n = ((((n += (e ^ (r | ~t)) + a[14] - 1416354905) << 15) | (n >>> 17)) + r) << 0) | ~e)) + + a[5] - + 57434055) << + 21) | + (t >>> 11)) + + n) << + 0), + (t = + ((((t += + ((r = + ((((r += + (t ^ ((e = ((((e += (n ^ (t | ~r)) + a[12] + 1700485571) << 6) | (e >>> 26)) + t) << 0) | ~n)) + + a[3] - + 1894986606) << + 10) | + (r >>> 22)) + + e) << + 0) ^ + ((n = ((((n += (e ^ (r | ~t)) + a[10] - 1051523) << 15) | (n >>> 17)) + r) << 0) | ~e)) + + a[1] - + 2054922799) << + 21) | + (t >>> 11)) + + n) << + 0), + (t = + ((((t += + ((r = + ((((r += + (t ^ ((e = ((((e += (n ^ (t | ~r)) + a[8] + 1873313359) << 6) | (e >>> 26)) + t) << 0) | ~n)) + + a[15] - + 30611744) << + 10) | + (r >>> 22)) + + e) << + 0) ^ + ((n = ((((n += (e ^ (r | ~t)) + a[6] - 1560198380) << 15) | (n >>> 17)) + r) << 0) | ~e)) + + a[13] + + 1309151649) << + 21) | + (t >>> 11)) + + n) << + 0), + (t = + ((((t += + ((r = + ((((r += + (t ^ ((e = ((((e += (n ^ (t | ~r)) + a[4] - 145523070) << 6) | (e >>> 26)) + t) << 0) | ~n)) + + a[11] - + 1120210379) << + 10) | + (r >>> 22)) + + e) << + 0) ^ + ((n = ((((n += (e ^ (r | ~t)) + a[2] + 718787259) << 15) | (n >>> 17)) + r) << 0) | ~e)) + + a[9] - + 343485551) << + 21) | + (t >>> 11)) + + n) << + 0), + this.first + ? ((this.h0 = (e + 1732584193) << 0), + (this.h1 = (t - 271733879) << 0), + (this.h2 = (n - 1732584194) << 0), + (this.h3 = (r + 271733878) << 0), + (this.first = !1)) + : ((this.h0 = (this.h0 + e) << 0), + (this.h1 = (this.h1 + t) << 0), + (this.h2 = (this.h2 + n) << 0), + (this.h3 = (this.h3 + r) << 0)); + }), + (Md5.prototype.hex = function () { + this.finalize(); + var e = this.h0, + t = this.h1, + n = this.h2, + r = this.h3; + return ( + HEX_CHARS[(e >> 4) & 15] + + HEX_CHARS[15 & e] + + HEX_CHARS[(e >> 12) & 15] + + HEX_CHARS[(e >> 8) & 15] + + HEX_CHARS[(e >> 20) & 15] + + HEX_CHARS[(e >> 16) & 15] + + HEX_CHARS[(e >> 28) & 15] + + HEX_CHARS[(e >> 24) & 15] + + HEX_CHARS[(t >> 4) & 15] + + HEX_CHARS[15 & t] + + HEX_CHARS[(t >> 12) & 15] + + HEX_CHARS[(t >> 8) & 15] + + HEX_CHARS[(t >> 20) & 15] + + HEX_CHARS[(t >> 16) & 15] + + HEX_CHARS[(t >> 28) & 15] + + HEX_CHARS[(t >> 24) & 15] + + HEX_CHARS[(n >> 4) & 15] + + HEX_CHARS[15 & n] + + HEX_CHARS[(n >> 12) & 15] + + HEX_CHARS[(n >> 8) & 15] + + HEX_CHARS[(n >> 20) & 15] + + HEX_CHARS[(n >> 16) & 15] + + HEX_CHARS[(n >> 28) & 15] + + HEX_CHARS[(n >> 24) & 15] + + HEX_CHARS[(r >> 4) & 15] + + HEX_CHARS[15 & r] + + HEX_CHARS[(r >> 12) & 15] + + HEX_CHARS[(r >> 8) & 15] + + HEX_CHARS[(r >> 20) & 15] + + HEX_CHARS[(r >> 16) & 15] + + HEX_CHARS[(r >> 28) & 15] + + HEX_CHARS[(r >> 24) & 15] + ); + }), + (Md5.prototype.toString = Md5.prototype.hex), + (Md5.prototype.digest = function (e) { + if ('hex' === e) return this.hex(); + this.finalize(); + var t = this.h0, + n = this.h1, + r = this.h2, + o = this.h3; + return [ + 255 & t, + (t >> 8) & 255, + (t >> 16) & 255, + (t >> 24) & 255, + 255 & n, + (n >> 8) & 255, + (n >> 16) & 255, + (n >> 24) & 255, + 255 & r, + (r >> 8) & 255, + (r >> 16) & 255, + (r >> 24) & 255, + 255 & o, + (o >> 8) & 255, + (o >> 16) & 255, + (o >> 24) & 255, + ]; + }), + (Md5.prototype.array = Md5.prototype.digest), + (Md5.prototype.arrayBuffer = function () { + this.finalize(); + var e = new ArrayBuffer(16), + t = new Uint32Array(e); + return (t[0] = this.h0), (t[1] = this.h1), (t[2] = this.h2), (t[3] = this.h3), e; + }), + (Md5.prototype.buffer = Md5.prototype.arrayBuffer), + (Md5.prototype.base64 = function () { + for (var e, t, n, r = '', o = this.array(), i = 0; i < 15; ) + (e = o[i++]), + (t = o[i++]), + (n = o[i++]), + (r += + BASE64_ENCODE_CHAR[e >>> 2] + + BASE64_ENCODE_CHAR[63 & ((e << 4) | (t >>> 4))] + + BASE64_ENCODE_CHAR[63 & ((t << 2) | (n >>> 6))] + + BASE64_ENCODE_CHAR[63 & n]); + return (e = o[i]), (r += BASE64_ENCODE_CHAR[e >>> 2] + BASE64_ENCODE_CHAR[(e << 4) & 63] + '=='); + }); + var exports = createMethod(); + COMMON_JS + ? (module.exports = exports) + : ((root.md5 = exports), + AMD && + ((__WEBPACK_AMD_DEFINE_RESULT__ = function () { + return exports; + }.call(exports, __webpack_require__, exports, module)), + void 0 === __WEBPACK_AMD_DEFINE_RESULT__ || (module.exports = __WEBPACK_AMD_DEFINE_RESULT__))); + })(); + }).call(this, __webpack_require__(3), __webpack_require__(13), __webpack_require__(4)(module)); + }, + function (e, t) { + var n; + n = (function () { + return this; + })(); + try { + n = n || new Function('return this')(); + } catch (e) { + 'object' == typeof window && (n = window); + } + e.exports = n; + }, + function (e, t) { + (function (t) { + e.exports = t; + }).call(this, {}); + }, + function (e, t, n) { + (function (e) { + var t, + r, + o, + i, + a, + s, + c, + u = n(0), + l = + l || + (function (e, t) { + var n = {}, + r = (n.lib = {}), + o = function () {}, + i = (r.Base = { + extend: function (e) { + o.prototype = this; + var t = new o(); + return ( + e && t.mixIn(e), + t.hasOwnProperty('init') || + (t.init = function () { + t.$super.init.apply(this, arguments); + }), + (t.init.prototype = t), + (t.$super = this), + t + ); + }, + create: function () { + var e = this.extend(); + return e.init.apply(e, arguments), e; + }, + init: function () {}, + mixIn: function (e) { + for (var t in e) e.hasOwnProperty(t) && (this[t] = e[t]); + e.hasOwnProperty('toString') && (this.toString = e.toString); + }, + clone: function () { + return this.init.prototype.extend(this); + }, + }), + a = (r.WordArray = i.extend({ + init: function (e, t) { + (e = this.words = e || []), (this.sigBytes = null != t ? t : 4 * e.length); + }, + toString: function (e) { + return (e || c).stringify(this); + }, + concat: function (e) { + var t = this.words, + n = e.words, + r = this.sigBytes; + if (((e = e.sigBytes), this.clamp(), r % 4)) + for (var o = 0; o < e; o++) + t[(r + o) >>> 2] |= ((n[o >>> 2] >>> (24 - (o % 4) * 8)) & 255) << (24 - ((r + o) % 4) * 8); + else if (65535 < n.length) for (o = 0; o < e; o += 4) t[(r + o) >>> 2] = n[o >>> 2]; + else t.push.apply(t, n); + return (this.sigBytes += e), this; + }, + clamp: function () { + var t = this.words, + n = this.sigBytes; + (t[n >>> 2] &= 4294967295 << (32 - (n % 4) * 8)), (t.length = e.ceil(n / 4)); + }, + clone: function () { + var e = i.clone.call(this); + return (e.words = this.words.slice(0)), e; + }, + random: function (t) { + for (var n = [], r = 0; r < t; r += 4) n.push((4294967296 * e.random()) | 0); + return new a.init(n, t); + }, + })), + s = (n.enc = {}), + c = (s.Hex = { + stringify: function (e) { + var t = e.words; + e = e.sigBytes; + for (var n = [], r = 0; r < e; r++) { + var o = (t[r >>> 2] >>> (24 - (r % 4) * 8)) & 255; + n.push((o >>> 4).toString(16)), n.push((15 & o).toString(16)); + } + return n.join(''); + }, + parse: function (e) { + for (var t = e.length, n = [], r = 0; r < t; r += 2) + n[r >>> 3] |= parseInt(e.substr(r, 2), 16) << (24 - (r % 8) * 4); + return new a.init(n, t / 2); + }, + }), + u = (s.Latin1 = { + stringify: function (e) { + var t = e.words; + e = e.sigBytes; + for (var n = [], r = 0; r < e; r++) + n.push(String.fromCharCode((t[r >>> 2] >>> (24 - (r % 4) * 8)) & 255)); + return n.join(''); + }, + parse: function (e) { + for (var t = e.length, n = [], r = 0; r < t; r++) + n[r >>> 2] |= (255 & e.charCodeAt(r)) << (24 - (r % 4) * 8); + return new a.init(n, t); + }, + }), + l = (s.Utf8 = { + stringify: function (e) { + try { + return decodeURIComponent(escape(u.stringify(e))); + } catch (e) { + throw Error('Malformed UTF-8 data'); + } + }, + parse: function (e) { + return u.parse(unescape(encodeURIComponent(e))); + }, + }), + d = (r.BufferedBlockAlgorithm = i.extend({ + reset: function () { + (this._data = new a.init()), (this._nDataBytes = 0); + }, + _append: function (e) { + 'string' == typeof e && (e = l.parse(e)), this._data.concat(e), (this._nDataBytes += e.sigBytes); + }, + _process: function (t) { + var n = this._data, + r = n.words, + o = n.sigBytes, + i = this.blockSize, + s = o / (4 * i); + if ( + ((t = (s = t ? e.ceil(s) : e.max((0 | s) - this._minBufferSize, 0)) * i), + (o = e.min(4 * t, o)), + t) + ) { + for (var c = 0; c < t; c += i) this._doProcessBlock(r, c); + (c = r.splice(0, t)), (n.sigBytes -= o); + } + return new a.init(c, o); + }, + clone: function () { + var e = i.clone.call(this); + return (e._data = this._data.clone()), e; + }, + _minBufferSize: 0, + })); + r.Hasher = d.extend({ + cfg: i.extend(), + init: function (e) { + (this.cfg = this.cfg.extend(e)), this.reset(); + }, + reset: function () { + d.reset.call(this), this._doReset(); + }, + update: function (e) { + return this._append(e), this._process(), this; + }, + finalize: function (e) { + return e && this._append(e), this._doFinalize(); + }, + blockSize: 16, + _createHelper: function (e) { + return function (t, n) { + return new e.init(n).finalize(t); + }; + }, + _createHmacHelper: function (e) { + return function (t, n) { + return new p.HMAC.init(e, n).finalize(t); + }; + }, + }); + var p = (n.algo = {}); + return n; + })(Math); + (r = (a = (t = l).lib).WordArray), + (o = a.Hasher), + (i = []), + (a = t.algo.SHA1 = + o.extend({ + _doReset: function () { + this._hash = new r.init([1732584193, 4023233417, 2562383102, 271733878, 3285377520]); + }, + _doProcessBlock: function (e, t) { + for (var n = this._hash.words, r = n[0], o = n[1], a = n[2], s = n[3], c = n[4], u = 0; 80 > u; u++) { + if (16 > u) i[u] = 0 | e[t + u]; + else { + var l = i[u - 3] ^ i[u - 8] ^ i[u - 14] ^ i[u - 16]; + i[u] = (l << 1) | (l >>> 31); + } + (l = ((r << 5) | (r >>> 27)) + c + i[u]), + (l = + 20 > u + ? l + (1518500249 + ((o & a) | (~o & s))) + : 40 > u + ? l + (1859775393 + (o ^ a ^ s)) + : 60 > u + ? l + (((o & a) | (o & s) | (a & s)) - 1894007588) + : l + ((o ^ a ^ s) - 899497514)), + (c = s), + (s = a), + (a = (o << 30) | (o >>> 2)), + (o = r), + (r = l); + } + (n[0] = (n[0] + r) | 0), + (n[1] = (n[1] + o) | 0), + (n[2] = (n[2] + a) | 0), + (n[3] = (n[3] + s) | 0), + (n[4] = (n[4] + c) | 0); + }, + _doFinalize: function () { + var e = this._data, + t = e.words, + n = 8 * this._nDataBytes, + r = 8 * e.sigBytes; + return ( + (t[r >>> 5] |= 128 << (24 - (r % 32))), + (t[14 + (((r + 64) >>> 9) << 4)] = Math.floor(n / 4294967296)), + (t[15 + (((r + 64) >>> 9) << 4)] = n), + (e.sigBytes = 4 * t.length), + this._process(), + this._hash + ); + }, + clone: function () { + var e = o.clone.call(this); + return (e._hash = this._hash.clone()), e; + }, + })), + (t.SHA1 = o._createHelper(a)), + (t.HmacSHA1 = o._createHmacHelper(a)), + (function () { + var e = l, + t = e.enc.Utf8; + e.algo.HMAC = e.lib.Base.extend({ + init: function (e, n) { + (e = this._hasher = new e.init()), 'string' == typeof n && (n = t.parse(n)); + var r = e.blockSize, + o = 4 * r; + n.sigBytes > o && (n = e.finalize(n)), n.clamp(); + for ( + var i = (this._oKey = n.clone()), a = (this._iKey = n.clone()), s = i.words, c = a.words, u = 0; + u < r; + u++ + ) + (s[u] ^= 1549556828), (c[u] ^= 909522486); + (i.sigBytes = a.sigBytes = o), this.reset(); + }, + reset: function () { + var e = this._hasher; + e.reset(), e.update(this._iKey); + }, + update: function (e) { + return this._hasher.update(e), this; + }, + finalize: function (e) { + var t = this._hasher; + return (e = t.finalize(e)), t.reset(), t.finalize(this._oKey.clone().concat(e)); + }, + }); + })(), + (c = (s = l).lib.WordArray), + (s.enc.Base64 = { + stringify: function (e) { + var t = e.words, + n = e.sigBytes, + r = this._map; + e.clamp(); + for (var o = [], i = 0; i < n; i += 3) + for ( + var a = + (((t[i >>> 2] >>> (24 - (i % 4) * 8)) & 255) << 16) | + (((t[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 255) << 8) | + ((t[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 255), + s = 0; + s < 4 && i + 0.75 * s < n; + s++ + ) + o.push(r.charAt((a >>> (6 * (3 - s))) & 63)); + var c = r.charAt(64); + if (c) for (; o.length % 4; ) o.push(c); + return o.join(''); + }, + parse: function (e) { + var t = e.length, + n = this._map, + r = n.charAt(64); + if (r) { + var o = e.indexOf(r); + -1 != o && (t = o); + } + for (var i = [], a = 0, s = 0; s < t; s++) + if (s % 4) { + var u = n.indexOf(e.charAt(s - 1)) << ((s % 4) * 2), + l = n.indexOf(e.charAt(s)) >>> (6 - (s % 4) * 2); + (i[a >>> 2] |= (u | l) << (24 - (a % 4) * 8)), a++; + } + return c.create(i, a); + }, + _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=', + }), + 'object' === u(e) ? (e.exports = l) : (window.CryptoJS = l); + }).call(this, n(4)(e)); + }, + function (e, t, n) { + var r = n(17).DOMParser, + o = function () { + this.version = '1.3.5'; + var e = { mergeCDATA: !0, normalize: !0, stripElemPrefix: !0 }, + t = new RegExp(/(?!xmlns)^.*:/); + new RegExp(/^\s+|\s+$/g); + return ( + (this.grokType = function (e) { + return /^\s*$/.test(e) + ? null + : /^(?:true|false)$/i.test(e) + ? 'true' === e.toLowerCase() + : isFinite(e) + ? parseFloat(e) + : e; + }), + (this.parseString = function (e, t) { + if (e) { + var n = this.stringToXML(e); + return n.getElementsByTagName('parsererror').length ? null : this.parseXML(n, t); + } + return null; + }), + (this.parseXML = function (n, r) { + for (var i in r) e[i] = r[i]; + var a = {}, + s = 0, + c = ''; + if (n.childNodes.length) + for (var u, l, d, p = 0; p < n.childNodes.length; p++) + 4 === (u = n.childNodes.item(p)).nodeType + ? e.mergeCDATA && (c += u.nodeValue) + : 3 === u.nodeType + ? (c += u.nodeValue) + : 1 === u.nodeType && + (0 === s && (a = {}), + (l = e.stripElemPrefix ? u.nodeName.replace(t, '') : u.nodeName), + (d = o.parseXML(u)), + a.hasOwnProperty(l) + ? (a[l].constructor !== Array && (a[l] = [a[l]]), a[l].push(d)) + : ((a[l] = d), s++)); + return Object.keys(a).length || (a = c || ''), a; + }), + (this.xmlToString = function (e) { + try { + return e.xml ? e.xml : new XMLSerializer().serializeToString(e); + } catch (e) { + return null; + } + }), + (this.stringToXML = function (e) { + try { + var t = null; + return window.DOMParser + ? (t = new r().parseFromString(e, 'text/xml')) + : (((t = new ActiveXObject('Microsoft.XMLDOM')).async = !1), t.loadXML(e), t); + } catch (e) { + return null; + } + }), + this + ); + }.call({}); + e.exports = function (e) { + return o.parseString(e); + }; + }, + function (e, t, n) { + var r = n(5); + (t.DOMImplementation = r.DOMImplementation), (t.XMLSerializer = r.XMLSerializer), (t.DOMParser = n(18).DOMParser); + }, + function (e, t, n) { + var r = n(2), + o = n(5), + i = n(19), + a = n(20), + s = o.DOMImplementation, + c = r.NAMESPACE, + u = a.ParseError, + l = a.XMLReader; + function d(e) { + return e.replace(/\r[\n\u0085]/g, '\n').replace(/[\r\u0085\u2028]/g, '\n'); + } + function p(e) { + this.options = e || { locator: {} }; + } + function f() { + this.cdata = !1; + } + function h(e, t) { + (t.lineNumber = e.lineNumber), (t.columnNumber = e.columnNumber); + } + function m(e, t, n) { + return 'string' == typeof e ? e.substr(t, n) : e.length >= t + n || t ? new java.lang.String(e, t, n) + '' : e; + } + function g(e, t) { + e.currentElement ? e.currentElement.appendChild(t) : e.doc.appendChild(t); + } + (p.prototype.parseFromString = function (e, t) { + var n = this.options, + r = new l(), + o = n.domBuilder || new f(), + a = n.errorHandler, + s = n.locator, + u = n.xmlns || {}, + p = /\/x?html?$/.test(t), + h = p ? i.HTML_ENTITIES : i.XML_ENTITIES; + s && o.setDocumentLocator(s), + (r.errorHandler = (function (e, t, n) { + if (!e) { + if (t instanceof f) return t; + e = t; + } + var r = {}, + o = e instanceof Function; + function i(t) { + var i = e[t]; + !i && + o && + (i = + 2 == e.length + ? function (n) { + e(t, n); + } + : e), + (r[t] = + (i && + function (e) { + i( + '[xmldom ' + + t + + ']\t' + + e + + (function (e) { + if (e) + return ( + '\n@' + (e.systemId || '') + '#[line:' + e.lineNumber + ',col:' + e.columnNumber + ']' + ); + })(n), + ); + }) || + function () {}); + } + return (n = n || {}), i('warning'), i('error'), i('fatalError'), r; + })(a, o, s)), + (r.domBuilder = n.domBuilder || o), + p && (u[''] = c.HTML), + (u.xml = u.xml || c.XML); + var m = n.normalizeLineEndings || d; + return e && 'string' == typeof e ? r.parse(m(e), u, h) : r.errorHandler.error('invalid doc source'), o.doc; + }), + (f.prototype = { + startDocument: function () { + (this.doc = new s().createDocument(null, null, null)), + this.locator && (this.doc.documentURI = this.locator.systemId); + }, + startElement: function (e, t, n, r) { + var o = this.doc, + i = o.createElementNS(e, n || t), + a = r.length; + g(this, i), (this.currentElement = i), this.locator && h(this.locator, i); + for (var s = 0; s < a; s++) { + e = r.getURI(s); + var c = r.getValue(s), + u = ((n = r.getQName(s)), o.createAttributeNS(e, n)); + this.locator && h(r.getLocator(s), u), (u.value = u.nodeValue = c), i.setAttributeNode(u); + } + }, + endElement: function (e, t, n) { + var r = this.currentElement; + r.tagName; + this.currentElement = r.parentNode; + }, + startPrefixMapping: function (e, t) {}, + endPrefixMapping: function (e) {}, + processingInstruction: function (e, t) { + var n = this.doc.createProcessingInstruction(e, t); + this.locator && h(this.locator, n), g(this, n); + }, + ignorableWhitespace: function (e, t, n) {}, + characters: function (e, t, n) { + if ((e = m.apply(this, arguments))) { + if (this.cdata) var r = this.doc.createCDATASection(e); + else r = this.doc.createTextNode(e); + this.currentElement ? this.currentElement.appendChild(r) : /^\s*$/.test(e) && this.doc.appendChild(r), + this.locator && h(this.locator, r); + } + }, + skippedEntity: function (e) {}, + endDocument: function () { + this.doc.normalize(); + }, + setDocumentLocator: function (e) { + (this.locator = e) && (e.lineNumber = 0); + }, + comment: function (e, t, n) { + e = m.apply(this, arguments); + var r = this.doc.createComment(e); + this.locator && h(this.locator, r), g(this, r); + }, + startCDATA: function () { + this.cdata = !0; + }, + endCDATA: function () { + this.cdata = !1; + }, + startDTD: function (e, t, n) { + var r = this.doc.implementation; + if (r && r.createDocumentType) { + var o = r.createDocumentType(e, t, n); + this.locator && h(this.locator, o), g(this, o), (this.doc.doctype = o); + } + }, + warning: function (e) {}, + error: function (e) {}, + fatalError: function (e) { + throw new u(e, this.locator); + }, + }), + 'endDTD,startEntity,endEntity,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,resolveEntity,getExternalSubset,notationDecl,unparsedEntityDecl'.replace( + /\w+/g, + function (e) { + f.prototype[e] = function () { + return null; + }; + }, + ), + (t.__DOMHandler = f), + (t.normalizeLineEndings = d), + (t.DOMParser = p); + }, + function (e, t, n) { + var r = n(2).freeze; + (t.XML_ENTITIES = r({ amp: '&', apos: "'", gt: '>', lt: '<', quot: '"' })), + (t.HTML_ENTITIES = r({ + lt: '<', + gt: '>', + amp: '&', + quot: '"', + apos: "'", + Agrave: 'À', + Aacute: 'Á', + Acirc: 'Â', + Atilde: 'Ã', + Auml: 'Ä', + Aring: 'Å', + AElig: 'Æ', + Ccedil: 'Ç', + Egrave: 'È', + Eacute: 'É', + Ecirc: 'Ê', + Euml: 'Ë', + Igrave: 'Ì', + Iacute: 'Í', + Icirc: 'Î', + Iuml: 'Ï', + ETH: 'Ð', + Ntilde: 'Ñ', + Ograve: 'Ò', + Oacute: 'Ó', + Ocirc: 'Ô', + Otilde: 'Õ', + Ouml: 'Ö', + Oslash: 'Ø', + Ugrave: 'Ù', + Uacute: 'Ú', + Ucirc: 'Û', + Uuml: 'Ü', + Yacute: 'Ý', + THORN: 'Þ', + szlig: 'ß', + agrave: 'à', + aacute: 'á', + acirc: 'â', + atilde: 'ã', + auml: 'ä', + aring: 'å', + aelig: 'æ', + ccedil: 'ç', + egrave: 'è', + eacute: 'é', + ecirc: 'ê', + euml: 'ë', + igrave: 'ì', + iacute: 'í', + icirc: 'î', + iuml: 'ï', + eth: 'ð', + ntilde: 'ñ', + ograve: 'ò', + oacute: 'ó', + ocirc: 'ô', + otilde: 'õ', + ouml: 'ö', + oslash: 'ø', + ugrave: 'ù', + uacute: 'ú', + ucirc: 'û', + uuml: 'ü', + yacute: 'ý', + thorn: 'þ', + yuml: 'ÿ', + nbsp: ' ', + iexcl: '¡', + cent: '¢', + pound: '£', + curren: '¤', + yen: '¥', + brvbar: '¦', + sect: '§', + uml: '¨', + copy: '©', + ordf: 'ª', + laquo: '«', + not: '¬', + shy: '­­', + reg: '®', + macr: '¯', + deg: '°', + plusmn: '±', + sup2: '²', + sup3: '³', + acute: '´', + micro: 'µ', + para: '¶', + middot: '·', + cedil: '¸', + sup1: '¹', + ordm: 'º', + raquo: '»', + frac14: '¼', + frac12: '½', + frac34: '¾', + iquest: '¿', + times: '×', + divide: '÷', + forall: '∀', + part: '∂', + exist: '∃', + empty: '∅', + nabla: '∇', + isin: '∈', + notin: '∉', + ni: '∋', + prod: '∏', + sum: '∑', + minus: '−', + lowast: '∗', + radic: '√', + prop: '∝', + infin: '∞', + ang: '∠', + and: '∧', + or: '∨', + cap: '∩', + cup: '∪', + int: '∫', + there4: '∴', + sim: '∼', + cong: '≅', + asymp: '≈', + ne: '≠', + equiv: '≡', + le: '≤', + ge: '≥', + sub: '⊂', + sup: '⊃', + nsub: '⊄', + sube: '⊆', + supe: '⊇', + oplus: '⊕', + otimes: '⊗', + perp: '⊥', + sdot: '⋅', + Alpha: 'Α', + Beta: 'Β', + Gamma: 'Γ', + Delta: 'Δ', + Epsilon: 'Ε', + Zeta: 'Ζ', + Eta: 'Η', + Theta: 'Θ', + Iota: 'Ι', + Kappa: 'Κ', + Lambda: 'Λ', + Mu: 'Μ', + Nu: 'Ν', + Xi: 'Ξ', + Omicron: 'Ο', + Pi: 'Π', + Rho: 'Ρ', + Sigma: 'Σ', + Tau: 'Τ', + Upsilon: 'Υ', + Phi: 'Φ', + Chi: 'Χ', + Psi: 'Ψ', + Omega: 'Ω', + alpha: 'α', + beta: 'β', + gamma: 'γ', + delta: 'δ', + epsilon: 'ε', + zeta: 'ζ', + eta: 'η', + theta: 'θ', + iota: 'ι', + kappa: 'κ', + lambda: 'λ', + mu: 'μ', + nu: 'ν', + xi: 'ξ', + omicron: 'ο', + pi: 'π', + rho: 'ρ', + sigmaf: 'ς', + sigma: 'σ', + tau: 'τ', + upsilon: 'υ', + phi: 'φ', + chi: 'χ', + psi: 'ψ', + omega: 'ω', + thetasym: 'ϑ', + upsih: 'ϒ', + piv: 'ϖ', + OElig: 'Œ', + oelig: 'œ', + Scaron: 'Š', + scaron: 'š', + Yuml: 'Ÿ', + fnof: 'ƒ', + circ: 'ˆ', + tilde: '˜', + ensp: ' ', + emsp: ' ', + thinsp: ' ', + zwnj: '‌', + zwj: '‍', + lrm: '‎', + rlm: '‏', + ndash: '–', + mdash: '—', + lsquo: '‘', + rsquo: '’', + sbquo: '‚', + ldquo: '“', + rdquo: '”', + bdquo: '„', + dagger: '†', + Dagger: '‡', + bull: '•', + hellip: '…', + permil: '‰', + prime: '′', + Prime: '″', + lsaquo: '‹', + rsaquo: '›', + oline: '‾', + euro: '€', + trade: '™', + larr: '←', + uarr: '↑', + rarr: '→', + darr: '↓', + harr: '↔', + crarr: '↵', + lceil: '⌈', + rceil: '⌉', + lfloor: '⌊', + rfloor: '⌋', + loz: '◊', + spades: '♠', + clubs: '♣', + hearts: '♥', + diams: '♦', + })), + (t.entityMap = t.HTML_ENTITIES); + }, + function (e, t, n) { + var r = n(2).NAMESPACE, + o = + /[A-Z_a-z\xC0-\xD6\xD8-\xF6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/, + i = new RegExp('[\\-\\.0-9' + o.source.slice(1, -1) + '\\u00B7\\u0300-\\u036F\\u203F-\\u2040]'), + a = new RegExp('^' + o.source + i.source + '*(?::' + o.source + i.source + '*)?$'), + s = 0, + c = 1, + u = 2, + l = 3, + d = 4, + p = 5, + f = 6, + h = 7; + function m(e, t) { + (this.message = e), (this.locator = t), Error.captureStackTrace && Error.captureStackTrace(this, m); + } + function g() {} + function y(e, t) { + return (t.lineNumber = e.lineNumber), (t.columnNumber = e.columnNumber), t; + } + function v(e, t, n, o, i, a) { + function m(e, t, r) { + n.attributeNames.hasOwnProperty(e) && a.fatalError('Attribute ' + e + ' redefined'), + n.addValue(e, t.replace(/[\t\n\r]/g, ' ').replace(/&#?\w+;/g, i), r); + } + for (var g, y = ++t, v = s; ; ) { + var C = e.charAt(y); + switch (C) { + case '=': + if (v === c) (g = e.slice(t, y)), (v = l); + else { + if (v !== u) throw new Error('attribute equal must after attrName'); + v = l; + } + break; + case "'": + case '"': + if (v === l || v === c) { + if ( + (v === c && (a.warning('attribute value must after "="'), (g = e.slice(t, y))), + (t = y + 1), + !((y = e.indexOf(C, t)) > 0)) + ) + throw new Error("attribute value no end '" + C + "' match"); + m(g, (k = e.slice(t, y)), t - 1), (v = p); + } else { + if (v != d) throw new Error('attribute value must after "="'); + m(g, (k = e.slice(t, y)), t), + a.warning('attribute "' + g + '" missed start quot(' + C + ')!!'), + (t = y + 1), + (v = p); + } + break; + case '/': + switch (v) { + case s: + n.setTagName(e.slice(t, y)); + case p: + case f: + case h: + (v = h), (n.closed = !0); + case d: + case c: + case u: + break; + default: + throw new Error("attribute invalid close char('/')"); + } + break; + case '': + return a.error('unexpected end of input'), v == s && n.setTagName(e.slice(t, y)), y; + case '>': + switch (v) { + case s: + n.setTagName(e.slice(t, y)); + case p: + case f: + case h: + break; + case d: + case c: + '/' === (k = e.slice(t, y)).slice(-1) && ((n.closed = !0), (k = k.slice(0, -1))); + case u: + v === u && (k = g), + v == d + ? (a.warning('attribute "' + k + '" missed quot(")!'), m(g, k, t)) + : ((r.isHTML(o['']) && k.match(/^(?:disabled|checked|selected)$/i)) || + a.warning('attribute "' + k + '" missed value!! "' + k + '" instead!!'), + m(k, k, t)); + break; + case l: + throw new Error('attribute value missed!!'); + } + return y; + case '€': + C = ' '; + default: + if (C <= ' ') + switch (v) { + case s: + n.setTagName(e.slice(t, y)), (v = f); + break; + case c: + (g = e.slice(t, y)), (v = u); + break; + case d: + var k = e.slice(t, y); + a.warning('attribute "' + k + '" missed quot(")!!'), m(g, k, t); + case p: + v = f; + } + else + switch (v) { + case u: + n.tagName; + (r.isHTML(o['']) && g.match(/^(?:disabled|checked|selected)$/i)) || + a.warning('attribute "' + g + '" missed value!! "' + g + '" instead2!!'), + m(g, g, t), + (t = y), + (v = c); + break; + case p: + a.warning('attribute space is required"' + g + '"!!'); + case f: + (v = c), (t = y); + break; + case l: + (v = d), (t = y); + break; + case h: + throw new Error("elements closed character '/' and '>' must be connected to"); + } + } + y++; + } + } + function C(e, t, n) { + for (var o = e.tagName, i = null, a = e.length; a--; ) { + var s = e[a], + c = s.qName, + u = s.value; + if ((f = c.indexOf(':')) > 0) + var l = (s.prefix = c.slice(0, f)), + d = c.slice(f + 1), + p = 'xmlns' === l && d; + else (d = c), (l = null), (p = 'xmlns' === c && ''); + (s.localName = d), + !1 !== p && + (null == i && ((i = {}), b(n, (n = {}))), + (n[p] = i[p] = u), + (s.uri = r.XMLNS), + t.startPrefixMapping(p, u)); + } + for (a = e.length; a--; ) { + (l = (s = e[a]).prefix) && ('xml' === l && (s.uri = r.XML), 'xmlns' !== l && (s.uri = n[l || ''])); + } + var f; + (f = o.indexOf(':')) > 0 + ? ((l = e.prefix = o.slice(0, f)), (d = e.localName = o.slice(f + 1))) + : ((l = null), (d = e.localName = o)); + var h = (e.uri = n[l || '']); + if ((t.startElement(h, d, o, e), !e.closed)) return (e.currentNSMap = n), (e.localNSMap = i), !0; + if ((t.endElement(h, d, o), i)) + for (l in i) Object.prototype.hasOwnProperty.call(i, l) && t.endPrefixMapping(l); + } + function k(e, t, n, r, o) { + if (/^(?:script|textarea)$/i.test(n)) { + var i = e.indexOf('', t), + a = e.substring(t + 1, i); + if (/[&<]/.test(a)) + return /^script$/i.test(n) + ? (o.characters(a, 0, a.length), i) + : ((a = a.replace(/&#?\w+;/g, r)), o.characters(a, 0, a.length), i); + } + return t + 1; + } + function S(e, t, n, r) { + var o = r[n]; + return ( + null == o && ((o = e.lastIndexOf('')) < t && (o = e.lastIndexOf(' t + ? (n.comment(e, t + 4, o - t - 4), o + 3) + : (r.error('Unclosed comment'), -1) + : -1; + if ('CDATA[' == e.substr(t + 3, 6)) { + var o = e.indexOf(']]>', t + 9); + return n.startCDATA(), n.characters(e, t + 9, o - t - 9), n.endCDATA(), o + 3; + } + var i = (function (e, t) { + var n, + r = [], + o = /'[^']+'|"[^"]+"|[^\s<>\/=]+=?|(\/?\s*>|<)/g; + (o.lastIndex = t), o.exec(e); + for (; (n = o.exec(e)); ) if ((r.push(n), n[1])) return r; + })(e, t), + a = i.length; + if (a > 1 && /!doctype/i.test(i[0][0])) { + var s = i[1][0], + c = !1, + u = !1; + a > 3 && + (/^public$/i.test(i[2][0]) + ? ((c = i[3][0]), (u = a > 4 && i[4][0])) + : /^system$/i.test(i[2][0]) && (u = i[3][0])); + var l = i[a - 1]; + return n.startDTD(s, c, u), n.endDTD(), l.index + l[0].length; + } + return -1; + } + function R(e, t, n) { + var r = e.indexOf('?>', t); + if (r) { + var o = e.substring(t, r).match(/^<\?(\S*)\s*([\s\S]*?)\s*$/); + if (o) { + o[0].length; + return n.processingInstruction(o[1], o[2]), r + 2; + } + return -1; + } + return -1; + } + function E() { + this.attributeNames = {}; + } + (m.prototype = new Error()), + (m.prototype.name = m.name), + (g.prototype = { + parse: function (e, t, n) { + var o = this.domBuilder; + o.startDocument(), + b(t, (t = {})), + (function (e, t, n, o, i) { + function a(e) { + if (e > 65535) { + var t = 55296 + ((e -= 65536) >> 10), + n = 56320 + (1023 & e); + return String.fromCharCode(t, n); + } + return String.fromCharCode(e); + } + function s(e) { + var t = e.slice(1, -1); + return Object.hasOwnProperty.call(n, t) + ? n[t] + : '#' === t.charAt(0) + ? a(parseInt(t.substr(1).replace('x', '0x'))) + : (i.error('entity not found:' + e), e); + } + function c(t) { + if (t > b) { + var n = e.substring(b, t).replace(/&#?\w+;/g, s); + f && u(b), o.characters(n, 0, t - b), (b = t); + } + } + function u(t, n) { + for (; t >= d && (n = p.exec(e)); ) (l = n.index), (d = l + n[0].length), f.lineNumber++; + f.columnNumber = t - l + 1; + } + var l = 0, + d = 0, + p = /.*(?:\r\n?|\n)|.*$/g, + f = o.locator, + h = [{ currentNSMap: t }], + g = {}, + b = 0; + for (;;) { + try { + var w = e.indexOf('<', b); + if (w < 0) { + if (!e.substr(b).match(/^\s*$/)) { + var A = o.doc, + x = A.createTextNode(e.substr(b)); + A.appendChild(x), (o.currentElement = x); + } + return; + } + switch ((w > b && c(w), e.charAt(w + 1))) { + case '/': + var I = e.indexOf('>', w + 3), + O = e.substring(w + 2, I).replace(/[ \t\n\r]+$/g, ''), + B = h.pop(); + I < 0 + ? ((O = e.substring(w + 2).replace(/[\s<].*/, '')), + i.error('end tag name: ' + O + ' is not complete:' + B.tagName), + (I = w + 1 + O.length)) + : O.match(/\s b ? (b = I) : c(Math.max(w, b) + 1); + } + })(e, t, n, o, this.errorHandler), + o.endDocument(); + }, + }), + (E.prototype = { + setTagName: function (e) { + if (!a.test(e)) throw new Error('invalid tagName:' + e); + this.tagName = e; + }, + addValue: function (e, t, n) { + if (!a.test(e)) throw new Error('invalid attribute:' + e); + (this.attributeNames[e] = this.length), (this[this.length++] = { qName: e, value: t, offset: n }); + }, + length: 0, + getLocalName: function (e) { + return this[e].localName; + }, + getLocator: function (e) { + return this[e].locator; + }, + getQName: function (e) { + return this[e].qName; + }, + getURI: function (e) { + return this[e].uri; + }, + getValue: function (e) { + return this[e].value; + }, + }), + (t.XMLReader = g), + (t.ParseError = m); + }, + function (e, t, n) { + var r = n(0), + o = 'a-zA-Z_À-ÖØ-öø-ÿͰ-ͽͿ-῿‌-‍⁰-↏Ⰰ-⿿、-퟿豈-﷏ﷰ-�', + i = new RegExp('^([^' + o + '])|^((x|X)(m|M)(l|L))|([^' + o + '-.0-9·̀-ͯ‿⁀])', 'g'), + a = /[^\x09\x0A\x0D\x20-\xFF\x85\xA0-\uD7FF\uE000-\uFDCF\uFDE0-\uFFFD]/gm, + s = function (e) { + var t = []; + if (e instanceof Object) for (var n in e) e.hasOwnProperty(n) && t.push(n); + return t; + }, + c = function (e, t) { + var n = function (e, n, r, o, a) { + var s = void 0 !== t.indent ? t.indent : '\t', + c = t.prettyPrint ? '\n' + new Array(o).join(s) : ''; + t.removeIllegalNameCharacters && (e = e.replace(i, '_')); + var u = [c, '<', e, r || '']; + return ( + n && n.length > 0 + ? (u.push('>'), u.push(n), a && u.push(c), u.push('')) + : u.push('/>'), + u.join('') + ); + }; + return (function e(o, i, c) { + var u = r(o); + switch ( + ((Array.isArray ? Array.isArray(o) : o instanceof Array) + ? (u = 'array') + : o instanceof Date && (u = 'date'), + u) + ) { + case 'array': + var l = []; + return ( + o.map(function (t) { + l.push(e(t, 1, c + 1)); + }), + t.prettyPrint && l.push('\n'), + l.join('') + ); + case 'date': + return o.toJSON ? o.toJSON() : o + ''; + case 'object': + var d = []; + for (var p in o) + if (o.hasOwnProperty(p)) + if (o[p] instanceof Array) + for (var f = 0; f < o[p].length; f++) + o[p].hasOwnProperty(f) && d.push(n(p, e(o[p][f], 0, c + 1), null, c + 1, s(o[p][f]).length)); + else d.push(n(p, e(o[p], 0, c + 1), null, c + 1)); + return t.prettyPrint && d.length > 0 && d.push('\n'), d.join(''); + case 'function': + return o(); + default: + return t.escape + ? ('' + o) + .replace(/&/g, '&') + .replace(//g, '>') + .replace(/'/g, ''') + .replace(/"/g, '"') + .replace(a, '') + : '' + o; + } + })(e, 0, 0); + }, + u = function (e) { + var t = [''), t.join(''); + }; + e.exports = function (e, t) { + if ( + (t || (t = { xmlHeader: { standalone: !0 }, prettyPrint: !0, indent: ' ', escape: !0 }), + 'string' == typeof e) + ) + try { + e = JSON.parse(e.toString()); + } catch (e) { + return !1; + } + var n = '', + o = ''; + return ( + t && + ('object' == r(t) + ? (t.xmlHeader && (n = u(!!t.xmlHeader.standalone)), + void 0 !== t.docType && (o = '')) + : (n = u())), + [n, (t = t || {}).prettyPrint && o ? '\n' : '', o, c(e, t)] + .join('') + .replace(/\n{2,}/g, '\n') + .replace(/\s+$/g, '') + ); + }; + }, + function (e, t) { + var n = (function (e) { + var t = (e = e || {}).Base64, + n = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/', + r = (function (e) { + for (var t = {}, n = 0, r = e.length; n < r; n++) t[e.charAt(n)] = n; + return t; + })(n), + o = String.fromCharCode, + i = function (e) { + if (e.length < 2) + return (t = e.charCodeAt(0)) < 128 + ? e + : t < 2048 + ? o(192 | (t >>> 6)) + o(128 | (63 & t)) + : o(224 | ((t >>> 12) & 15)) + o(128 | ((t >>> 6) & 63)) + o(128 | (63 & t)); + var t = 65536 + 1024 * (e.charCodeAt(0) - 55296) + (e.charCodeAt(1) - 56320); + return ( + o(240 | ((t >>> 18) & 7)) + o(128 | ((t >>> 12) & 63)) + o(128 | ((t >>> 6) & 63)) + o(128 | (63 & t)) + ); + }, + a = /[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g, + s = function (e) { + return e.replace(a, i); + }, + c = function (e) { + var t = [0, 2, 1][e.length % 3], + r = + (e.charCodeAt(0) << 16) | + ((e.length > 1 ? e.charCodeAt(1) : 0) << 8) | + (e.length > 2 ? e.charCodeAt(2) : 0); + return [ + n.charAt(r >>> 18), + n.charAt((r >>> 12) & 63), + t >= 2 ? '=' : n.charAt((r >>> 6) & 63), + t >= 1 ? '=' : n.charAt(63 & r), + ].join(''); + }, + u = e.btoa + ? function (t) { + return e.btoa(t); + } + : function (e) { + return e.replace(/[\s\S]{1,3}/g, c); + }, + l = function (e) { + return u(s(e)); + }, + d = function (e, t) { + return t + ? l(String(e)) + .replace(/[+\/]/g, function (e) { + return '+' == e ? '-' : '_'; + }) + .replace(/=/g, '') + : l(String(e)); + }, + p = new RegExp(['[À-ß][€-¿]', '[à-ï][€-¿]{2}', '[ð-÷][€-¿]{3}'].join('|'), 'g'), + f = function (e) { + switch (e.length) { + case 4: + var t = + (((7 & e.charCodeAt(0)) << 18) | + ((63 & e.charCodeAt(1)) << 12) | + ((63 & e.charCodeAt(2)) << 6) | + (63 & e.charCodeAt(3))) - + 65536; + return o(55296 + (t >>> 10)) + o(56320 + (1023 & t)); + case 3: + return o(((15 & e.charCodeAt(0)) << 12) | ((63 & e.charCodeAt(1)) << 6) | (63 & e.charCodeAt(2))); + default: + return o(((31 & e.charCodeAt(0)) << 6) | (63 & e.charCodeAt(1))); + } + }, + h = function (e) { + return e.replace(p, f); + }, + m = function (e) { + var t = e.length, + n = t % 4, + i = + (t > 0 ? r[e.charAt(0)] << 18 : 0) | + (t > 1 ? r[e.charAt(1)] << 12 : 0) | + (t > 2 ? r[e.charAt(2)] << 6 : 0) | + (t > 3 ? r[e.charAt(3)] : 0), + a = [o(i >>> 16), o((i >>> 8) & 255), o(255 & i)]; + return (a.length -= [0, 0, 2, 1][n]), a.join(''); + }, + g = e.atob + ? function (t) { + return e.atob(t); + } + : function (e) { + return e.replace(/[\s\S]{1,4}/g, m); + }, + y = function (e) { + return h(g(e)); + }, + v = function (e) { + return y( + String(e) + .replace(/[-_]/g, function (e) { + return '-' == e ? '+' : '/'; + }) + .replace(/[^A-Za-z0-9\+\/]/g, ''), + ); + }; + return { + VERSION: '2.1.9', + atob: g, + btoa: u, + fromBase64: v, + toBase64: d, + utob: s, + encode: d, + encodeURI: function (e) { + return d(e, !0); + }, + btou: h, + decode: v, + noConflict: function () { + var n = e.Base64; + return (e.Base64 = t), n; + }, + }; + })(); + e.exports = n; + }, + function (e, t) { + (e.exports = function (e, t) { + if (!(e instanceof t)) throw new TypeError('Cannot call a class as a function'); + }), + (e.exports.__esModule = !0), + (e.exports.default = e.exports); + }, + function (e, t) { + function n(e, t) { + for (var n = 0; n < t.length; n++) { + var r = t[n]; + (r.enumerable = r.enumerable || !1), + (r.configurable = !0), + 'value' in r && (r.writable = !0), + Object.defineProperty(e, r.key, r); + } + } + (e.exports = function (e, t, r) { + return t && n(e.prototype, t), r && n(e, r), Object.defineProperty(e, 'prototype', { writable: !1 }), e; + }), + (e.exports.__esModule = !0), + (e.exports.default = e.exports); + }, + function (e, t, n) { + var r, + o, + i, + a = n(0); + (i = function () { + 'use strict'; + var e = function (t, n) { + return ( + (e = + Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && + function (e, t) { + e.__proto__ = t; + }) || + function (e, t) { + for (var n in t) Object.prototype.hasOwnProperty.call(t, n) && (e[n] = t[n]); + }), + e(t, n) + ); + }, + t = function () { + return ( + (t = + Object.assign || + function (e) { + for (var t, n = 1, r = arguments.length; n < r; n++) + for (var o in (t = arguments[n])) Object.prototype.hasOwnProperty.call(t, o) && (e[o] = t[o]); + return e; + }), + t.apply(this, arguments) + ); + }; + function n(e, t, n, r) { + return new (n || (n = Promise))(function (o, i) { + function a(e) { + try { + c(r.next(e)); + } catch (e) { + i(e); + } + } + function s(e) { + try { + c(r.throw(e)); + } catch (e) { + i(e); + } + } + function c(e) { + var t; + e.done + ? o(e.value) + : ((t = e.value), + t instanceof n + ? t + : new n(function (e) { + e(t); + })).then(a, s); + } + c((r = r.apply(e, t || [])).next()); + }); + } + function r(e, t) { + var n, + r, + o, + i, + a = { + label: 0, + sent: function () { + if (1 & o[0]) throw o[1]; + return o[1]; + }, + trys: [], + ops: [], + }; + return ( + (i = { next: s(0), throw: s(1), return: s(2) }), + 'function' == typeof Symbol && + (i[Symbol.iterator] = function () { + return this; + }), + i + ); + function s(i) { + return function (s) { + return (function (i) { + if (n) throw new TypeError('Generator is already executing.'); + for (; a; ) + try { + if ( + ((n = 1), + r && + (o = 2 & i[0] ? r.return : i[0] ? r.throw || ((o = r.return) && o.call(r), 0) : r.next) && + !(o = o.call(r, i[1])).done) + ) + return o; + switch (((r = 0), o && (i = [2 & i[0], o.value]), i[0])) { + case 0: + case 1: + o = i; + break; + case 4: + return a.label++, { value: i[1], done: !1 }; + case 5: + a.label++, (r = i[1]), (i = [0]); + continue; + case 7: + (i = a.ops.pop()), a.trys.pop(); + continue; + default: + if (!((o = (o = a.trys).length > 0 && o[o.length - 1]) || (6 !== i[0] && 2 !== i[0]))) { + a = 0; + continue; + } + if (3 === i[0] && (!o || (i[1] > o[0] && i[1] < o[3]))) { + a.label = i[1]; + break; + } + if (6 === i[0] && a.label < o[1]) { + (a.label = o[1]), (o = i); + break; + } + if (o && a.label < o[2]) { + (a.label = o[2]), a.ops.push(i); + break; + } + o[2] && a.ops.pop(), a.trys.pop(); + continue; + } + i = t.call(e, a); + } catch (e) { + (i = [6, e]), (r = 0); + } finally { + n = o = 0; + } + if (5 & i[0]) throw i[1]; + return { value: i[0] ? i[1] : void 0, done: !0 }; + })([i, s]); + }; + } + } + var o = '__BEACON_', + i = '__BEACON_deviceId', + a = 'last_report_time', + s = 'sending_event_ids', + c = 'beacon_config', + u = 'beacon_config_request_time', + l = (function () { + function e() { + var e = this; + (this.emit = function (t, n) { + if (e) { + var r, + o = e.__EventsList[t]; + if (null == o ? void 0 : o.length) { + o = o.slice(); + for (var i = 0; i < o.length; i++) { + r = o[i]; + try { + var a = r.callback.apply(e, [n]); + if ((1 === r.type && e.remove(t, r.callback), !1 === a)) break; + } catch (e) { + throw e; + } + } + } + return e; + } + }), + (this.__EventsList = {}); + } + return ( + (e.prototype.indexOf = function (e, t) { + for (var n = 0; n < e.length; n++) if (e[n].callback === t) return n; + return -1; + }), + (e.prototype.on = function (e, t, n) { + if ((void 0 === n && (n = 0), this)) { + var r = this.__EventsList[e]; + if ((r || (r = this.__EventsList[e] = []), -1 === this.indexOf(r, t))) { + var o = { name: e, type: n || 0, callback: t }; + return r.push(o), this; + } + return this; + } + }), + (e.prototype.one = function (e, t) { + this.on(e, t, 1); + }), + (e.prototype.remove = function (e, t) { + if (this) { + var n = this.__EventsList[e]; + if (!n) return null; + if (!t) { + try { + delete this.__EventsList[e]; + } catch (e) {} + return null; + } + if (n.length) { + var r = this.indexOf(n, t); + n.splice(r, 1); + } + return this; + } + }), + e + ); + })(); + function d(e, t) { + for (var n = {}, r = 0, o = Object.keys(e); r < o.length; r++) { + var i = o[r], + a = e[i]; + if ('string' == typeof a) n[p(i)] = p(a); + else { + if (t) throw new Error('value mast be string !!!!'); + n[p(String(i))] = p(String(a)); + } + } + return n; + } + function p(e) { + if ('string' != typeof e) return e; + try { + return e + .replace(new RegExp('\\|', 'g'), '%7C') + .replace(new RegExp('\\&', 'g'), '%26') + .replace(new RegExp('\\=', 'g'), '%3D') + .replace(new RegExp('\\+', 'g'), '%2B'); + } catch (e) { + return ''; + } + } + function f(e) { + return String(e.A99) + String(e.A100); + } + var h = function () {}, + m = (function () { + function e(e) { + var n = this; + (this.lifeCycle = new l()), + (this.uploadJobQueue = []), + (this.additionalParams = {}), + (this.delayTime = 0), + (this._normalLogPipeline = (function (e) { + if (!e || !e.reduce || !e.length) + throw new TypeError('createPipeline 方法需要传入至少有一个 pipe 的数组'); + return 1 === e.length + ? function (t, n) { + e[0](t, n || h); + } + : e.reduce(function (e, t) { + return function (n, r) { + return ( + void 0 === r && (r = h), + e(n, function (e) { + return null == t ? void 0 : t(e, r); + }) + ); + }; + }); + })([ + function (e) { + n.send( + { + url: n.strategy.getUploadUrl(), + data: e, + method: 'post', + contentType: 'application/json;charset=UTF-8', + }, + function () { + var t = n.config.onReportSuccess; + 'function' == typeof t && t(JSON.stringify(e.events)); + }, + function () { + var t = n.config.onReportFail; + 'function' == typeof t && t(JSON.stringify(e.events)); + }, + ); + }, + ])), + (function (e, t) { + if (!e) throw t instanceof Error ? t : new Error(t); + })(Boolean(e.appkey), 'appkey must be initial'), + (this.config = t({}, e)); + } + return ( + (e.prototype.onUserAction = function (e, t) { + this.preReport(e, t, !1); + }), + (e.prototype.onDirectUserAction = function (e, t) { + this.preReport(e, t, !0); + }), + (e.prototype.preReport = function (e, t, n) { + e + ? this.strategy.isEventUpOnOff() && + (this.strategy.isBlackEvent(e) || this.strategy.isSampleEvent(e) || this.onReport(e, t, n)) + : this.errorReport.reportError('602', ' no eventCode'); + }), + (e.prototype.addAdditionalParams = function (e) { + for (var t = 0, n = Object.keys(e); t < n.length; t++) { + var r = n[t]; + this.additionalParams[r] = e[r]; + } + }), + (e.prototype.setChannelId = function (e) { + this.commonInfo.channelID = String(e); + }), + (e.prototype.setOpenId = function (e) { + this.commonInfo.openid = String(e); + }), + (e.prototype.setUnionid = function (e) { + this.commonInfo.unid = String(e); + }), + (e.prototype.getDeviceId = function () { + return this.commonInfo.deviceId; + }), + (e.prototype.getCommonInfo = function () { + return this.commonInfo; + }), + (e.prototype.removeSendingId = function (e) { + try { + var t = JSON.parse(this.storage.getItem(s)), + n = t.indexOf(e); + -1 != n && (t.splice(n, 1), this.storage.setItem(s, JSON.stringify(t))); + } catch (e) {} + }), + e + ); + })(), + g = (function () { + function e(e, t, n, r) { + (this.requestParams = {}), + (this.network = r), + (this.requestParams.attaid = '00400014144'), + (this.requestParams.token = '6478159937'), + (this.requestParams.product_id = e.appkey), + (this.requestParams.platform = n), + (this.requestParams.uin = t.deviceId), + (this.requestParams.model = ''), + (this.requestParams.os = n), + (this.requestParams.app_version = e.appVersion), + (this.requestParams.sdk_version = t.sdkVersion), + (this.requestParams.error_stack = ''), + (this.uploadUrl = e.isOversea ? 'https://htrace.wetvinfo.com/kv' : 'https://h.trace.qq.com/kv'); + } + return ( + (e.prototype.reportError = function (e, t) { + (this.requestParams._dc = Math.random()), + (this.requestParams.error_msg = t), + (this.requestParams.error_code = e), + this.network.get(this.uploadUrl, { params: this.requestParams }).catch(function (e) {}); + }), + e + ); + })(), + y = (function () { + function e(e, t, n, r, o) { + (this.strategy = { + isEventUpOnOff: !0, + httpsUploadUrl: 'https://otheve.beacon.qq.com/analytics/v2_upload', + requestInterval: 30, + blacklist: [], + samplelist: [], + }), + (this.realSample = {}), + (this.appkey = ''), + (this.needQueryConfig = !0), + (this.appkey = t.appkey), + (this.storage = r), + (this.needQueryConfig = e); + try { + var i = JSON.parse(this.storage.getItem(c)); + i && this.processData(i); + } catch (e) {} + t.isOversea && (this.strategy.httpsUploadUrl = 'https://svibeacon.onezapp.com/analytics/v2_upload'), + !t.isOversea && this.needRequestConfig() && this.requestConfig(t.appVersion, n, o); + } + return ( + (e.prototype.requestConfig = function (e, t, n) { + var r = this; + this.storage.setItem(u, Date.now().toString()), + n + .post('https://oth.str.beacon.qq.com/trpc.beacon.configserver.BeaconConfigService/QueryConfig', { + platformId: 'undefined' == typeof wx ? '3' : '4', + mainAppKey: this.appkey, + appVersion: e, + sdkVersion: t.sdkVersion, + osVersion: t.userAgent, + model: '', + packageName: '', + params: { A3: t.deviceId }, + }) + .then(function (e) { + if (0 == e.data.ret) + try { + var t = JSON.parse(e.data.beaconConfig); + t && (r.processData(t), r.storage.setItem(c, e.data.beaconConfig)); + } catch (e) {} + else r.processData(null), r.storage.setItem(c, ''); + }) + .catch(function (e) {}); + }), + (e.prototype.processData = function (e) { + var t, n, r, o, i; + (this.strategy.isEventUpOnOff = + null !== (t = null == e ? void 0 : e.isEventUpOnOff) && void 0 !== t + ? t + : this.strategy.isEventUpOnOff), + (this.strategy.httpsUploadUrl = + null !== (n = null == e ? void 0 : e.httpsUploadUrl) && void 0 !== n + ? n + : this.strategy.httpsUploadUrl), + (this.strategy.requestInterval = + null !== (r = null == e ? void 0 : e.requestInterval) && void 0 !== r + ? r + : this.strategy.requestInterval), + (this.strategy.blacklist = + null !== (o = null == e ? void 0 : e.blacklist) && void 0 !== o ? o : this.strategy.blacklist), + (this.strategy.samplelist = + null !== (i = null == e ? void 0 : e.samplelist) && void 0 !== i ? i : this.strategy.samplelist); + for (var a = 0, s = this.strategy.samplelist; a < s.length; a++) { + var c = s[a].split(','); + 2 == c.length && (this.realSample[c[0]] = c[1]); + } + }), + (e.prototype.needRequestConfig = function () { + if (!this.needQueryConfig) return !1; + var e = Number(this.storage.getItem(u)); + return Date.now() - e > 60 * this.strategy.requestInterval * 1e3; + }), + (e.prototype.getUploadUrl = function () { + return this.strategy.httpsUploadUrl + '?appkey=' + this.appkey; + }), + (e.prototype.isBlackEvent = function (e) { + return -1 != this.strategy.blacklist.indexOf(e); + }), + (e.prototype.isEventUpOnOff = function () { + return this.strategy.isEventUpOnOff; + }), + (e.prototype.isSampleEvent = function (e) { + return ( + !!Object.prototype.hasOwnProperty.call(this.realSample, e) && + this.realSample[e] < Math.floor(Math.random() * Math.floor(1e4)) + ); + }), + e + ); + })(), + v = 'session_storage_key', + C = (function () { + function e(e, t, n) { + (this.getSessionStackDepth = 0), + (this.beacon = n), + (this.storage = e), + (this.duration = t), + (this.appkey = n.config.appkey); + } + return ( + (e.prototype.getSession = function () { + this.getSessionStackDepth += 1; + var e = this.storage.getItem(v); + if (!e) return this.createSession(); + var t = '', + n = 0; + try { + var r = JSON.parse(e) || { sessionId: void 0, sessionStart: void 0 }; + if (!r.sessionId || !r.sessionStart) return this.createSession(); + var o = Number(this.storage.getItem(a)); + if (Date.now() - o > this.duration) return this.createSession(); + (t = r.sessionId), (n = r.sessionStart), (this.getSessionStackDepth = 0); + } catch (e) {} + return { sessionId: t, sessionStart: n }; + }), + (e.prototype.createSession = function () { + var e = Date.now(), + t = { sessionId: this.appkey + '_' + e.toString(), sessionStart: e }; + this.storage.setItem(v, JSON.stringify(t)), this.storage.setItem(a, e.toString()); + var n = 'is_new_user', + r = this.storage.getItem(n); + return ( + this.getSessionStackDepth <= 1 && + this.beacon.onDirectUserAction('rqd_applaunched', { A21: r ? 'N' : 'Y' }), + this.storage.setItem(n, JSON.stringify(!1)), + t + ); + }), + e + ); + })(); + function k() { + var e = navigator.userAgent, + t = e.indexOf('compatible') > -1 && e.indexOf('MSIE') > -1, + n = e.indexOf('Edge') > -1 && !t, + r = e.indexOf('Trident') > -1 && e.indexOf('rv:11.0') > -1; + if (t) { + new RegExp('MSIE (\\d+\\.\\d+);').test(e); + var o = parseFloat(RegExp.$1); + return 7 == o ? 7 : 8 == o ? 8 : 9 == o ? 9 : 10 == o ? 10 : 6; + } + return n ? -2 : r ? 11 : -1; + } + var S, + b, + T = function () { + return (T = + Object.assign || + function (e) { + for (var t, n = 1, r = arguments.length; n < r; n++) + for (var o in (t = arguments[n])) Object.prototype.hasOwnProperty.call(t, o) && (e[o] = t[o]); + return e; + }).apply(this, arguments); + }, + R = (function () { + function e(e, t) { + void 0 === t && (t = {}), (this.reportOptions = {}), (this.config = e), (this.reportOptions = t); + } + return ( + (e.canUseDB = function () { + return !!(null === window || void 0 === window ? void 0 : window.indexedDB); + }), + (e.prototype.openDB = function () { + var t = this; + return new Promise(function (n, r) { + if (!e.canUseDB()) return r({ message: '当前不支持 indexeddb' }); + var o = t.config, + i = o.name, + a = o.version, + s = o.stores, + c = indexedDB.open(i, a); + (c.onsuccess = function () { + (t.db = c.result), + n(), + T({ result: 1, func: 'open', params: JSON.stringify(t.config) }, t.reportOptions); + }), + (c.onerror = function (e) { + var n, o; + r(e), + T( + { + result: 0, + func: 'open', + params: JSON.stringify(t.config), + error_msg: + null === (o = null === (n = e.target) || void 0 === n ? void 0 : n.error) || void 0 === o + ? void 0 + : o.message, + }, + t.reportOptions, + ); + }), + (c.onupgradeneeded = function () { + t.db = c.result; + try { + null == s || + s.forEach(function (e) { + t.createStore(e); + }); + } catch (e) { + T( + { result: 0, func: 'open', params: JSON.stringify(t.config), error_msg: e.message }, + t.reportOptions, + ), + r(e); + } + }); + }); + }), + (e.prototype.useStore = function (e) { + return (this.storeName = e), this; + }), + (e.prototype.deleteDB = function () { + var e = this; + return ( + this.closeDB(), + new Promise(function (t, n) { + var r = indexedDB.deleteDatabase(e.config.name); + (r.onsuccess = function () { + return t(); + }), + (r.onerror = n); + }) + ); + }), + (e.prototype.closeDB = function () { + var e; + null === (e = this.db) || void 0 === e || e.close(), (this.db = null); + }), + (e.prototype.getStoreCount = function () { + var e = this; + return new Promise(function (t, n) { + var r = e.getStore('readonly').count(); + (r.onsuccess = function () { + return t(r.result); + }), + (r.onerror = n); + }); + }), + (e.prototype.clearStore = function () { + var e = this; + return new Promise(function (t, n) { + var r = e.getStore('readwrite').clear(); + (r.onsuccess = function () { + return t(); + }), + (r.onerror = n); + }); + }), + (e.prototype.add = function (e, t) { + var n = this; + return new Promise(function (r, o) { + var i = n.getStore('readwrite').add(e, t); + (i.onsuccess = function () { + r(i.result); + }), + (i.onerror = o); + }); + }), + (e.prototype.put = function (e, t) { + var n = this; + return new Promise(function (r, o) { + var i = n.getStore('readwrite').put(e, t); + (i.onsuccess = function () { + r(i.result); + }), + (i.onerror = o); + }); + }), + (e.prototype.getStoreAllData = function () { + var e = this; + return new Promise(function (t, n) { + var r = e.getStore('readonly').openCursor(), + o = []; + (r.onsuccess = function () { + var e; + if (null === (e = r.result) || void 0 === e ? void 0 : e.value) { + var n = r.result.value; + o.push(n), r.result.continue(); + } else t(o); + }), + (r.onerror = n); + }); + }), + (e.prototype.getDataRangeByIndex = function (e, t, n, r, o) { + var i = this; + return new Promise(function (a, s) { + var c = i.getStore().index(e), + u = IDBKeyRange.bound(t, n, r, o), + l = [], + d = c.openCursor(u); + (d.onsuccess = function () { + var e; + (null === (e = null == d ? void 0 : d.result) || void 0 === e ? void 0 : e.value) + ? (l.push(null == d ? void 0 : d.result.value), null == d || d.result.continue()) + : a(l); + }), + (d.onerror = s); + }); + }), + (e.prototype.removeDataByIndex = function (e, t, n, r, o) { + var i = this; + return new Promise(function (a, s) { + var c = i.getStore('readwrite').index(e), + u = IDBKeyRange.bound(t, n, r, o), + l = c.openCursor(u), + d = 0; + (l.onsuccess = function (e) { + var t = e.target.result; + t ? ((d += 1), t.delete(), t.continue()) : a(d); + }), + (l.onerror = s); + }); + }), + (e.prototype.createStore = function (e) { + var t = e.name, + n = e.indexes, + r = void 0 === n ? [] : n, + o = e.options; + if (this.db) { + this.db.objectStoreNames.contains(t) && this.db.deleteObjectStore(t); + var i = this.db.createObjectStore(t, o); + r.forEach(function (e) { + i.createIndex(e.indexName, e.keyPath, e.options); + }); + } + }), + (e.prototype.getStore = function (e) { + var t; + return ( + void 0 === e && (e = 'readonly'), + null === (t = this.db) || void 0 === t + ? void 0 + : t.transaction(this.storeName, e).objectStore(this.storeName) + ); + }), + e + ); + })(), + E = 'event_table_v3', + w = 'eventId', + A = (function () { + function e(e) { + (this.isReady = !1), + (this.taskQueue = Promise.resolve()), + (this.db = new R({ + name: 'Beacon_' + e + '_V3', + version: 1, + stores: [ + { + name: E, + options: { keyPath: w }, + indexes: [{ indexName: w, keyPath: w, options: { unique: !0 } }], + }, + ], + })), + this.open(); + } + return ( + (e.prototype.getCount = function () { + var e = this; + return this.readyExec(function () { + return e.db.getStoreCount(); + }); + }), + (e.prototype.setItem = function (e, t) { + var n = this; + return this.readyExec(function () { + return n.db.add({ eventId: e, value: t }); + }); + }), + (e.prototype.getItem = function (e) { + return n(this, void 0, void 0, function () { + var t = this; + return r(this, function (n) { + return [ + 2, + this.readyExec(function () { + return t.db.getDataRangeByIndex(w, e, e); + }), + ]; + }); + }); + }), + (e.prototype.removeItem = function (e) { + var t = this; + return this.readyExec(function () { + return t.db.removeDataByIndex(w, e, e); + }); + }), + (e.prototype.updateItem = function (e, t) { + var n = this; + return this.readyExec(function () { + return n.db.put({ eventId: e, value: t }); + }); + }), + (e.prototype.iterate = function (e) { + var t = this; + return this.readyExec(function () { + return t.db.getStoreAllData().then(function (t) { + t.forEach(function (t) { + e(t.value); + }); + }); + }); + }), + (e.prototype.open = function () { + return n(this, void 0, void 0, function () { + var e = this; + return r(this, function (t) { + switch (t.label) { + case 0: + return ( + (this.taskQueue = this.taskQueue.then(function () { + return e.db.openDB(); + })), + [4, this.taskQueue] + ); + case 1: + return t.sent(), (this.isReady = !0), this.db.useStore(E), [2]; + } + }); + }); + }), + (e.prototype.readyExec = function (e) { + return this.isReady + ? e() + : ((this.taskQueue = this.taskQueue.then(function () { + return e(); + })), + this.taskQueue); + }), + e + ); + })(), + x = (function () { + function e(e) { + (this.keyObject = {}), (this.storage = e); + } + return ( + (e.prototype.getCount = function () { + return this.storage.getStoreCount(); + }), + (e.prototype.removeItem = function (e) { + this.storage.removeItem(e), delete this.keyObject[e]; + }), + (e.prototype.setItem = function (e, t) { + var n = JSON.stringify(t); + this.storage.setItem(e, n), (this.keyObject[e] = t); + }), + (e.prototype.iterate = function (e) { + for (var t = Object.keys(this.keyObject), n = 0; n < t.length; n++) { + var r = this.storage.getItem(t[n]); + e(JSON.parse(r)); + } + }), + e + ); + })(), + I = (function () { + function e(e, t) { + var n = this; + (this.dbEventCount = 0), + k() > 0 || !window.indexedDB || /X5Lite/.test(navigator.userAgent) + ? ((this.store = new x(t)), (this.dbEventCount = this.store.getCount())) + : ((this.store = new A(e)), + this.getCount() + .then(function (e) { + n.dbEventCount = e; + }) + .catch(function (e) {})); + } + return ( + (e.prototype.getCount = function () { + return n(this, void 0, void 0, function () { + return r(this, function (e) { + switch (e.label) { + case 0: + return e.trys.push([0, 2, , 3]), [4, this.store.getCount()]; + case 1: + return [2, e.sent()]; + case 2: + return e.sent(), [2, Promise.reject()]; + case 3: + return [2]; + } + }); + }); + }), + (e.prototype.insertEvent = function (e, t) { + return n(this, void 0, void 0, function () { + var n, o; + return r(this, function (r) { + switch (r.label) { + case 0: + if (this.dbEventCount >= 1e4) return [2, Promise.reject()]; + (n = f(e.mapValue)), (r.label = 1); + case 1: + return r.trys.push([1, 3, , 4]), this.dbEventCount++, [4, this.store.setItem(n, e)]; + case 2: + return [2, r.sent()]; + case 3: + return (o = r.sent()), t && t(o, e), this.dbEventCount--, [2, Promise.reject()]; + case 4: + return [2]; + } + }); + }); + }), + (e.prototype.getEvents = function () { + return n(this, void 0, void 0, function () { + var e; + return r(this, function (t) { + switch (t.label) { + case 0: + (e = []), (t.label = 1); + case 1: + return ( + t.trys.push([1, 3, , 4]), + [ + 4, + this.store.iterate(function (t) { + e.push(t); + }), + ] + ); + case 2: + case 3: + return t.sent(), [2, Promise.all(e)]; + case 4: + return [2]; + } + }); + }); + }), + (e.prototype.removeEvent = function (e) { + return n(this, void 0, void 0, function () { + var t; + return r(this, function (n) { + switch (n.label) { + case 0: + (t = f(e.mapValue)), (n.label = 1); + case 1: + return n.trys.push([1, 3, , 4]), this.dbEventCount--, [4, this.store.removeItem(t)]; + case 2: + return [2, n.sent()]; + case 3: + return n.sent(), this.dbEventCount++, [2, Promise.reject()]; + case 4: + return [2]; + } + }); + }); + }), + e + ); + })(), + O = function () { + return (O = + Object.assign || + function (e) { + for (var t, n = 1, r = arguments.length; n < r; n++) + for (var o in (t = arguments[n])) Object.prototype.hasOwnProperty.call(t, o) && (e[o] = t[o]); + return e; + }).apply(this, arguments); + }; + function B(e) { + try { + return decodeURIComponent(e.replace(/\+/g, ' ')); + } catch (e) { + return null; + } + } + function _(e, t) { + var n = [null, void 0, '', NaN].includes(e); + if (t.isSkipEmpty && n) return null; + var r = !t.isSkipEmpty && n ? '' : e; + try { + return t.encode ? encodeURIComponent(r) : r; + } catch (e) { + return null; + } + } + function P(e, t) { + return new Promise(function (n, r) { + if (t && document.querySelectorAll('script[data-tag=' + t + ']').length) return n(); + var o = document.createElement('script'), + i = O({ type: 'text/javascript', charset: 'utf-8' }, e); + Object.keys(i).forEach(function (e) { + return (function (e, t, n) { + if (e) return void 0 === n ? e.getAttribute(t) : e.setAttribute(t, n); + })(o, e, i[e]); + }), + t && (o.dataset.tag = t), + (o.onload = function () { + return n(); + }), + (o.onreadystatechange = function () { + var e = o.readyState; + ['complete', 'loaded'].includes(e) && ((o.onreadystatechange = null), n()); + }), + (o.onerror = r), + document.body.appendChild(o); + }); + } + ((b = S || (S = {}))[(b.equal = 0)] = 'equal'), (b[(b.low = -1)] = 'low'), (b[(b.high = 1)] = 'high'); + var D = function () { + return (D = + Object.assign || + function (e) { + for (var t, n = 1, r = arguments.length; n < r; n++) + for (var o in (t = arguments[n])) Object.prototype.hasOwnProperty.call(t, o) && (e[o] = t[o]); + return e; + }).apply(this, arguments); + }; + function N(e, t, n, r) { + return new (n || (n = Promise))(function (o, i) { + function a(e) { + try { + c(r.next(e)); + } catch (e) { + i(e); + } + } + function s(e) { + try { + c(r.throw(e)); + } catch (e) { + i(e); + } + } + function c(e) { + var t; + e.done + ? o(e.value) + : ((t = e.value), + t instanceof n + ? t + : new n(function (e) { + e(t); + })).then(a, s); + } + c((r = r.apply(e, t || [])).next()); + }); + } + function U(e, t) { + var n, + r, + o, + i, + a = { + label: 0, + sent: function () { + if (1 & o[0]) throw o[1]; + return o[1]; + }, + trys: [], + ops: [], + }; + return ( + (i = { next: s(0), throw: s(1), return: s(2) }), + 'function' == typeof Symbol && + (i[Symbol.iterator] = function () { + return this; + }), + i + ); + function s(i) { + return function (s) { + return (function (i) { + if (n) throw new TypeError('Generator is already executing.'); + for (; a; ) + try { + if ( + ((n = 1), + r && + (o = 2 & i[0] ? r.return : i[0] ? r.throw || ((o = r.return) && o.call(r), 0) : r.next) && + !(o = o.call(r, i[1])).done) + ) + return o; + switch (((r = 0), o && (i = [2 & i[0], o.value]), i[0])) { + case 0: + case 1: + o = i; + break; + case 4: + return a.label++, { value: i[1], done: !1 }; + case 5: + a.label++, (r = i[1]), (i = [0]); + continue; + case 7: + (i = a.ops.pop()), a.trys.pop(); + continue; + default: + if (!((o = (o = a.trys).length > 0 && o[o.length - 1]) || (6 !== i[0] && 2 !== i[0]))) { + a = 0; + continue; + } + if (3 === i[0] && (!o || (i[1] > o[0] && i[1] < o[3]))) { + a.label = i[1]; + break; + } + if (6 === i[0] && a.label < o[1]) { + (a.label = o[1]), (o = i); + break; + } + if (o && a.label < o[2]) { + (a.label = o[2]), a.ops.push(i); + break; + } + o[2] && a.ops.pop(), a.trys.pop(); + continue; + } + i = t.call(e, a); + } catch (e) { + (i = [6, e]), (r = 0); + } finally { + n = o = 0; + } + if (5 & i[0]) throw i[1]; + return { value: i[0] ? i[1] : void 0, done: !0 }; + })([i, s]); + }; + } + } + var M = (function () { + function e() { + this.interceptors = []; + } + return ( + (e.prototype.use = function (e, t) { + return this.interceptors.push({ resolved: e, rejected: t }), this.interceptors.length - 1; + }), + (e.prototype.traverse = function (e, t) { + void 0 === t && (t = !1); + var n = Promise.resolve(e); + return ( + (t ? Array.prototype.reduceRight : Array.prototype.reduce).call( + this.interceptors, + function (e, t) { + if (t) { + var r = t.resolved, + o = t.rejected; + n = n.then(r, o); + } + return e; + }, + '', + ), + n + ); + }), + (e.prototype.eject = function (e) { + this.interceptors[e] && (this.interceptors[e] = null); + }), + e + ); + })(), + H = { + defaults: { timeout: 0, method: 'GET', mode: 'cors', redirect: 'follow', credentials: 'same-origin' }, + headers: { + common: { Accept: 'application/json, text/plain, */*' }, + POST: { 'Content-Type': 'application/x-www-form-urlencoded' }, + PUT: { 'Content-Type': 'application/x-www-form-urlencoded' }, + PATCH: { 'Content-Type': 'application/x-www-form-urlencoded' }, + }, + baseURL: '', + polyfillUrl: 'https://vm.gtimg.cn/comps/script/fetch.min.js', + interceptors: { request: new M(), response: new M() }, + }, + L = /^([a-z][a-z\d+\-.]*:)?\/\//i, + j = Object.prototype.toString; + function F(e) { + return N(this, void 0, void 0, function () { + var t; + return U(this, function (n) { + switch (n.label) { + case 0: + if (window.fetch) return [2]; + n.label = 1; + case 1: + return n.trys.push([1, 3, , 4]), [4, P({ src: e })]; + case 2: + return n.sent(), [3, 4]; + case 3: + throw ((t = n.sent()), new Error('加载 polyfill ' + e + ' 失败: ' + t.message)); + case 4: + return [2]; + } + }); + }); + } + function K(e) { + return N(this, void 0, void 0, function () { + var t, n, r, o, i, a, s, c, u, l, d, p, f, h, m, g, y; + return U(this, function (v) { + switch (v.label) { + case 0: + return (t = H.baseURL), (n = H.defaults), (r = H.interceptors), [4, F(H.polyfillUrl)]; + case 1: + return ( + v.sent(), + (o = D(D({}, n), e)).headers || + (o.headers = (function (e) { + void 0 === e && (e = 'GET'); + var t = H.headers[e] || {}; + return D(D({}, H.headers.common), t); + })(o.method)), + (function (e) { + ['Accept', 'Content-Type'].forEach(function (t) { + return ( + (n = t), + void ( + (r = e.headers) && + Object.keys(r).forEach(function (e) { + e !== n && e.toUpperCase() === n.toUpperCase() && ((r[n] = r[e]), delete r[e]); + }) + ) + ); + var n, r; + }), + (function (e) { + if ('[object Object]' !== j.call(e)) return !1; + var t = Object.getPrototypeOf(e); + return null === t || t === Object.prototype; + })(e.body) && + ((e.body = JSON.stringify(e.body)), + e.headers && (e.headers['Content-Type'] = 'application/json;charset=utf-8')); + })(o), + [4, r.request.traverse(o, !0)] + ); + case 2: + if ((i = v.sent()) instanceof Error) throw i; + return ( + (i.url = (function (e, t) { + return !e || L.test(t) ? t : e.replace(/\/+$/, '') + '/' + t.replace(/^\/+/, ''); + })(t, i.url)), + (a = i.url), + (s = i.timeout), + (c = i.params), + (u = i.method), + (l = ['GET', 'DELETE', 'OPTIONS', 'HEAD'].includes(void 0 === u ? 'GET' : u) && !!c), + (d = l + ? (function (e, t) { + void 0 === t && (t = { encode: !0, isSkipEmpty: !1 }); + var n = e.url, + r = e.query, + o = void 0 === r ? {} : r, + i = e.hash, + a = n.split('#'), + s = a[0], + c = a[1], + u = void 0 === c ? '' : c, + l = s.split('?')[0], + d = [], + p = _(i || u, t), + f = O( + O( + {}, + (function (e) { + var t = e.split('#'), + n = t[0], + r = t[1], + o = void 0 === r ? '' : r, + i = n.split('?'), + a = i[0], + s = i[1], + c = void 0 === s ? '' : s, + u = B(o), + l = Object.create(null); + return ( + c.split('&').forEach(function (e) { + var t = e.split('='), + n = t[0], + r = t[1], + o = void 0 === r ? '' : r, + i = B(n), + a = B(o); + null === i || null === a || ('' === i && '' === a) || l[i] || (l[i] = a); + }), + { url: a, query: l, hash: u } + ); + })(n).query, + ), + o, + ); + return ( + Object.keys(f).forEach(function (e) { + var n = _(e, t), + r = _(f[e], t); + null !== n && null !== r && d.push(n + '=' + r); + }), + l + (d.length ? '?' + d.join('&') : '') + (p ? '#' + p : '') + ); + })({ url: a, query: c }) + : a), + (p = []), + s && + !i.signal && + ((m = new Promise(function (e) { + f = setTimeout(function () { + e(new Error('timeout')); + }, s); + })), + p.push(m), + (h = new AbortController()), + (i.signal = h.signal)), + p.push( + fetch(d, i).catch(function (e) { + return e; + }), + ), + [4, Promise.race(p)] + ); + case 3: + return (g = v.sent()), f && clearTimeout(f), [4, r.response.traverse(g)]; + case 4: + if ((y = v.sent()) instanceof Error) throw (null == h || h.abort(), y); + return [2, y]; + } + }); + }); + } + var q = (function () { + function e(e) { + H.interceptors.request.use(function (n) { + var r = n.url, + o = n.method, + i = n.body, + a = i; + if (e.onReportBeforeSend) { + var s = e.onReportBeforeSend({ url: r, method: o, data: i ? JSON.parse(i) : null }); + a = (null == s ? void 0 : s.data) ? JSON.stringify(s.data) : null; + } + return 'GET' != o && a ? t(t({}, n), { body: a }) : n; + }); + } + return ( + (e.prototype.get = function (e, o) { + return n(this, void 0, void 0, function () { + var n, i; + return r(this, function (r) { + switch (r.label) { + case 0: + return [4, K(t({ url: e }, o))]; + case 1: + return [4, (n = r.sent()).json()]; + case 2: + return ( + (i = r.sent()), + [ + 2, + Promise.resolve({ + data: i, + status: n.status, + statusText: n.statusText, + headers: n.headers, + }), + ] + ); + } + }); + }); + }), + (e.prototype.post = function (e, o, i) { + return n(this, void 0, void 0, function () { + var n, a; + return r(this, function (r) { + switch (r.label) { + case 0: + return [4, K(t({ url: e, body: o, method: 'POST' }, i))]; + case 1: + return [4, (n = r.sent()).json()]; + case 2: + return ( + (a = r.sent()), + [ + 2, + Promise.resolve({ + data: a, + status: n.status, + statusText: n.statusText, + headers: n.headers, + }), + ] + ); + } + }); + }); + }), + e + ); + })(), + z = (function () { + function e(e) { + this.appkey = e; + } + return ( + (e.prototype.getItem = function (e) { + try { + return window.localStorage.getItem(this.getStoreKey(e)); + } catch (e) { + return ''; + } + }), + (e.prototype.removeItem = function (e) { + try { + window.localStorage.removeItem(this.getStoreKey(e)); + } catch (e) {} + }), + (e.prototype.setItem = function (e, t) { + try { + window.localStorage.setItem(this.getStoreKey(e), t); + } catch (e) {} + }), + (e.prototype.setSessionItem = function (e, t) { + try { + window.sessionStorage.setItem(this.getStoreKey(e), t); + } catch (e) {} + }), + (e.prototype.getSessionItem = function (e) { + try { + return window.sessionStorage.getItem(this.getStoreKey(e)); + } catch (e) { + return ''; + } + }), + (e.prototype.getStoreKey = function (e) { + return o + this.appkey + '_' + e; + }), + (e.prototype.createDeviceId = function () { + try { + var e = window.localStorage.getItem(i); + return ( + e || + ((e = (function (e) { + for (var t = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz0123456789', n = '', r = 0; r < 32; r++) + n += t.charAt(Math.floor(51 * Math.random())); + return n; + })()), + window.localStorage.setItem(i, e)), + e + ); + } catch (e) { + return ''; + } + }), + (e.prototype.clear = function () { + try { + for (var e = window.localStorage.length, t = 0; t < e; t++) { + var n = window.localStorage.key(t); + (null == n ? void 0 : n.substr(0, 9)) == o && window.localStorage.removeItem(n); + } + } catch (e) {} + }), + (e.prototype.getStoreCount = function () { + var e = 0; + try { + e = window.localStorage.length; + } catch (e) {} + return e; + }), + e + ); + })(), + G = 'logid_start', + V = '4.5.14-web'; + return (function (n) { + function r(e) { + var t = n.call(this, e) || this; + (t.qimei36 = ''), + (t.uselessCycleTaskNum = 0), + (t.underWeakNet = !1), + (t.pauseSearching = !1), + (t.send = function (e, n, r) { + t.storage.setItem(a, Date.now().toString()), + t.network + .post(t.uploadUrl || t.strategy.getUploadUrl(), e.data) + .then(function (r) { + var o; + 100 == (null === (o = null == r ? void 0 : r.data) || void 0 === o ? void 0 : o.result) + ? (t.delayTime = 1e3 * r.data.delayTime) + : (t.delayTime = 0), + n && n(e.data), + e.data.events.forEach(function (e) { + t.store.removeEvent(e).then(function () { + t.removeSendingId(f(e.mapValue)); + }); + }), + t.doCustomCycleTask(); + }) + .catch(function (n) { + var o = e.data.events; + t.errorReport.reportError(n.code ? n.code.toString() : '600', n.message), r && r(e.data); + var i = JSON.parse(t.storage.getItem(s)); + o.forEach(function (e) { + i && + -1 != i.indexOf(f(e)) && + t.store.insertEvent(e, function (e, n) { + e && t.errorReport.reportError('604', 'insertEvent fail!'); + }), + t.removeSendingId(f(e)); + }), + t.monitorUploadFailed(); + }); + }); + var r, + o, + i = k(); + return ( + (t.isUnderIE8 = i > 0 && i < 8), + t.isUnderIE8 || + ((t.isUnderIE = i > 0), + e.needInitQimei && + (function (e, t) { + var n; + (void 0 === n && (n = Date.now() + '-' + Math.random()), + new Promise(function (e, t) { + if (document.getElementById(n)) e(void 0); + else { + var r = document.getElementsByTagName('head')[0], + o = document.createElement('script'); + (o.onload = function () { + return function () { + (o.onload = null), e(void 0); + }; + }), + (o.onerror = function (e) { + (o.onerror = null), r.removeChild(o), t(e); + }), + (o.src = 'https://tun-cos-1258344701.file.myqcloud.com/fp.js'), + (o.id = n), + r.appendChild(o); + } + })) + .then(function () { + new Fingerprint().getQimei36(e, t); + }) + .catch(function (e) {}); + })(e.appkey, function (e) { + t.qimei36 = e.q36; + }), + (t.network = new q(e)), + (t.storage = new z(e.appkey)), + t.initCommonInfo(e), + (t.store = new I(e.appkey, t.storage)), + (t.errorReport = new g(t.config, t.commonInfo, 'web', t.network)), + (t.strategy = new y( + null == e.needQueryConfig || e.needQueryConfig, + t.config, + t.commonInfo, + t.storage, + t.network, + )), + (t.logidStartTime = t.storage.getItem(G)), + t.logidStartTime || + ((t.logidStartTime = Date.now().toString()), t.storage.setItem(G, t.logidStartTime)), + (r = t.logidStartTime), + (o = Date.now() - Number.parseFloat(r)), + Math.floor(o / 864e5) >= 365 && t.storage.clear(), + t.initSession(e), + t.onDirectUserAction('rqd_js_init', {}), + setTimeout(function () { + return t.lifeCycle.emit('init'); + }, 0), + (t.initDelayTime = e.delay ? e.delay : 1e3), + t.cycleTask(t.initDelayTime)), + t + ); + } + return ( + (function (t, n) { + if ('function' != typeof n && null !== n) + throw new TypeError('Class extends value ' + String(n) + ' is not a constructor or null'); + function r() { + this.constructor = t; + } + e(t, n), (t.prototype = null === n ? Object.create(n) : ((r.prototype = n.prototype), new r())); + })(r, n), + (r.prototype.initSession = function (e) { + var t = 18e5; + e.sessionDuration && e.sessionDuration > 3e4 && (t = e.sessionDuration), + (this.beaconSession = new C(this.storage, t, this)); + }), + (r.prototype.initCommonInfo = function (e) { + var t = Number(this.storage.getItem(a)); + try { + var n = JSON.parse(this.storage.getItem(s)); + (Date.now() - t > 3e4 || !n) && this.storage.setItem(s, JSON.stringify([])); + } catch (e) {} + e.uploadUrl && (this.uploadUrl = e.uploadUrl + '?appkey=' + e.appkey); + var r = [window.screen.width, window.screen.height]; + window.devicePixelRatio && r.push(window.devicePixelRatio), + (this.commonInfo = { + deviceId: this.storage.createDeviceId(), + language: (navigator && navigator.language) || 'zh_CN', + query: window.location.search, + userAgent: navigator.userAgent, + pixel: r.join('*'), + channelID: e.channelID ? String(e.channelID) : '', + openid: e.openid ? String(e.openid) : '', + unid: e.unionid ? String(e.unionid) : '', + sdkVersion: V, + }), + (this.config.appVersion = e.versionCode ? String(e.versionCode) : ''), + (this.config.strictMode = e.strictMode); + }), + (r.prototype.cycleTask = function (e) { + var t = this; + this.intervalID = window.setInterval(function () { + t.pauseSearching || + t.store + .getEvents() + .then(function (e) { + 0 == e.length && (t.pauseSearching = !0); + var n = [], + r = JSON.parse(t.storage.getItem(s)); + r || (r = []), + e && + e.forEach(function (e) { + var t = f(e.mapValue); + -1 == r.indexOf(t) && (n.push(e), r.push(t)); + }), + 0 != n.length && + (t.storage.setItem(s, JSON.stringify(r)), t._normalLogPipeline(t.assembleData(n))); + }) + .catch(function (e) {}); + }, e); + }), + (r.prototype.onReport = function (e, t, n) { + var r = this; + if (this.isUnderIE8) this.errorReport.reportError('601', 'UnderIE8'); + else { + this.pauseSearching = !1; + var o = this.generateData(e, t, n); + if (n && 0 == this.delayTime && !this.underWeakNet) this._normalLogPipeline(this.assembleData(o)); + else { + var i = o.shift(); + i && + this.store + .insertEvent(i, function (e) { + e && r.errorReport.reportError('604', 'insertEvent fail!'); + }) + .catch(function (e) { + r._normalLogPipeline(r.assembleData(o)); + }); + } + } + }), + (r.prototype.onSendBeacon = function (e, t) { + if (this.isUnderIE) this.errorReport.reportError('605', 'UnderIE'); + else { + this.pauseSearching = !1; + var n = this.assembleData(this.generateData(e, t, !0)); + 'function' == typeof navigator.sendBeacon && + navigator.sendBeacon(this.uploadUrl || this.strategy.getUploadUrl(), JSON.stringify(n)); + } + }), + (r.prototype.generateData = function (e, n, r) { + var o = [], + i = '4.5.14-web_' + (r ? 'direct_log_id' : 'normal_log_id'), + a = Number(this.storage.getItem(i)); + return ( + (a = a || 1), + (n = t(t({}, n), { A99: r ? 'Y' : 'N', A100: a.toString(), A72: V, A88: this.logidStartTime })), + a++, + this.storage.setItem(i, a.toString()), + o.push({ eventCode: e, eventTime: Date.now().toString(), mapValue: d(n, this.config.strictMode) }), + o + ); + }), + (r.prototype.assembleData = function (e) { + var n = this.beaconSession.getSession(); + return { + appVersion: this.config.appVersion ? p(this.config.appVersion) : '', + sdkId: 'js', + sdkVersion: V, + mainAppKey: this.config.appkey, + platformId: 3, + common: d( + t(t({}, this.additionalParams), { + A2: this.commonInfo.deviceId, + A8: this.commonInfo.openid, + A12: this.commonInfo.language, + A17: this.commonInfo.pixel, + A23: this.commonInfo.channelID, + A50: this.commonInfo.unid, + A76: n.sessionId, + A101: this.commonInfo.userAgent, + A102: window.location.href, + A104: document.referrer, + A119: this.commonInfo.query, + A153: this.qimei36, + }), + !1, + ), + events: e, + }; + }), + (r.prototype.monitorUploadFailed = function () { + this.uselessCycleTaskNum++, + this.uselessCycleTaskNum >= 5 && + (window.clearInterval(this.intervalID), this.cycleTask(6e4), (this.underWeakNet = !0)); + }), + (r.prototype.doCustomCycleTask = function () { + this.uselessCycleTaskNum >= 5 && + (window.clearInterval(this.intervalID), this.cycleTask(this.initDelayTime)), + (this.uselessCycleTaskNum = 0), + (this.underWeakNet = !1); + }), + r + ); + })(m); + }), + 'object' == a(t) && void 0 !== e + ? (e.exports = i()) + : void 0 === (o = 'function' == typeof (r = i) ? r.call(t, n, t, e) : r) || (e.exports = o); + }, + function (e, t, n) { + var r = n(9), + o = n(1), + i = {}; + (e.exports.transferToTaskMethod = function (e, t) { + (i[t] = e[t]), + (e[t] = function (e, n) { + e.SkipTask ? i[t].call(this, e, n) : this._addTask(t, e, n); + }); + }), + (e.exports.init = function (e) { + var t, + n, + a = [], + s = {}, + c = 0, + u = 0, + l = function (e) { + var t = { + id: e.id, + Bucket: e.Bucket, + Region: e.Region, + Key: e.Key, + FilePath: e.FilePath, + state: e.state, + loaded: e.loaded, + size: e.size, + speed: e.speed, + percent: e.percent, + hashPercent: e.hashPercent, + error: e.error, + }; + return e.FilePath && (t.FilePath = e.FilePath), e._custom && (t._custom = e._custom), t; + }, + d = + ((n = function () { + (t = 0), + e.emit('task-list-update', { list: o.map(a, l) }), + e.emit('list-update', { list: o.map(a, l) }); + }), + function () { + t || (t = setTimeout(n)); + }), + p = function () { + if (!(a.length <= e.options.UploadQueueSize)) { + for (var t = 0; t < u && t < a.length && a.length > e.options.UploadQueueSize; ) { + var n = 'waiting' === a[t].state || 'checking' === a[t].state || 'uploading' === a[t].state; + a[t] && n ? t++ : (s[a[t].id] && delete s[a[t].id], a.splice(t, 1), u--); + } + d(); + } + }, + f = function t() { + if (!(c >= e.options.FileParallelLimit)) { + for (; a[u] && 'waiting' !== a[u].state; ) u++; + if (!(u >= a.length)) { + var n = a[u]; + u++, + c++, + (n.state = 'checking'), + n.params.onTaskStart && n.params.onTaskStart(l(n)), + !n.params.UploadData && (n.params.UploadData = {}); + var r = o.formatParams(n.api, n.params); + i[n.api].call(e, r, function (r, o) { + e._isRunningTask(n.id) && + (('checking' !== n.state && 'uploading' !== n.state) || + ((n.state = r ? 'error' : 'success'), + r && (n.error = r), + c--, + d(), + t(), + n.callback && n.callback(r, o), + 'success' === n.state && + (n.params && (delete n.params.UploadData, delete n.params.Body, delete n.params), + delete n.callback)), + p()); + }), + d(), + setTimeout(t); + } + } + }, + h = function (t, n) { + var o = s[t]; + if (o) { + var i = o && 'waiting' === o.state, + a = o && ('checking' === o.state || 'uploading' === o.state); + if (('canceled' === n && 'canceled' !== o.state) || ('paused' === n && i) || ('paused' === n && a)) { + if ('paused' === n && o.params.Body && 'function' == typeof o.params.Body.pipe) return; + (o.state = n), e.emit('inner-kill-task', { TaskId: t, toState: n }); + try { + var u = o && o.params && o.params.UploadData.UploadId; + } catch (e) {} + 'canceled' === n && u && r.removeUsing(u), + d(), + a && (c--, f()), + 'canceled' === n && + (o.params && (delete o.params.UploadData, delete o.params.Body, delete o.params), + delete o.callback); + } + p(); + } + }; + e._addTasks = function (t) { + o.each(t, function (t) { + e._addTask(t.api, t.params, t.callback, !0); + }), + d(); + }; + (e._addTask = function (t, n, r, i) { + n = o.formatParams(t, n); + var c = o.uuid(); + (n.TaskId = c), n.onTaskReady && n.onTaskReady(c), n.TaskReady && (n.TaskReady(c), !1); + var u = { + params: n, + callback: r, + api: t, + index: a.length, + id: c, + Bucket: n.Bucket, + Region: n.Region, + Key: n.Key, + FilePath: n.FilePath || '', + state: 'waiting', + loaded: 0, + size: 0, + speed: 0, + percent: 0, + hashPercent: 0, + error: null, + _custom: n._custom, + }, + l = n.onHashProgress; + n.onHashProgress = function (t) { + e._isRunningTask(u.id) && ((u.hashPercent = t.percent), l && l(t), d()); + }; + var h = n.onProgress; + return ( + (n.onProgress = function (t) { + e._isRunningTask(u.id) && + ('checking' === u.state && (u.state = 'uploading'), + (u.loaded = t.loaded), + (u.speed = t.speed), + (u.percent = t.percent), + h && h(t), + d()); + }), + o.getFileSize(t, n, function (e, t) { + if (e) return r(o.error(e)); + (s[c] = u), a.push(u), (u.size = t), !i && d(), f(), p(); + }), + c + ); + }), + (e._isRunningTask = function (e) { + var t = s[e]; + return !(!t || ('checking' !== t.state && 'uploading' !== t.state)); + }), + (e.getTaskList = function () { + return o.map(a, l); + }), + (e.cancelTask = function (e) { + h(e, 'canceled'); + }), + (e.pauseTask = function (e) { + h(e, 'paused'); + }), + (e.restartTask = function (e) { + var t = s[e]; + !t || + ('paused' !== t.state && 'error' !== t.state) || + ((t.state = 'waiting'), d(), (u = Math.min(u, t.index)), f()); + }), + (e.isUploadRunning = function () { + return c || u < a.length; + }); + }); + }, + function (e, t, n) { + var r = n(0), + o = n(28), + i = n(1); + function a(e, t, n) { + var r = i.clone(t.InventoryConfiguration); + if (r.OptionalFields) { + var o = r.OptionalFields || []; + r.OptionalFields = { Field: o }; + } + if (r.Destination && r.Destination.COSBucketDestination && r.Destination.COSBucketDestination.Encryption) { + var a = r.Destination.COSBucketDestination.Encryption; + Object.keys(a).indexOf('SSECOS') > -1 && ((a['SSE-COS'] = a.SSECOS), delete a.SSECOS); + } + var s = i.json2xml({ InventoryConfiguration: r }), + c = t.Headers; + (c['Content-Type'] = 'application/xml'), (c['Content-MD5'] = i.b64(i.md5(s))); + var u = 'PUT' === e ? 'name/cos:PutBucketInventory' : 'name/cos:PostBucketInventory'; + f.call( + this, + { + Action: u, + method: e, + Bucket: t.Bucket, + Region: t.Region, + body: s, + action: 'inventory', + qs: { id: t.Id }, + headers: c, + }, + function (e, t) { + return e && 204 === e.statusCode + ? n(null, { statusCode: e.statusCode }) + : e + ? n(e) + : void n(null, { statusCode: t.statusCode, headers: t.headers }); + }, + ); + } + function s(e) { + var t = { GrantFullControl: [], GrantWrite: [], GrantRead: [], GrantReadAcp: [], GrantWriteAcp: [], ACL: '' }, + n = { + FULL_CONTROL: 'GrantFullControl', + WRITE: 'GrantWrite', + READ: 'GrantRead', + READ_ACP: 'GrantReadAcp', + WRITE_ACP: 'GrantWriteAcp', + }, + r = ((e && e.AccessControlList) || {}).Grant; + r && (r = i.isArray(r) ? r : [r]); + var o = { READ: 0, WRITE: 0, FULL_CONTROL: 0 }; + return ( + r && + r.length && + i.each(r, function (r) { + 'qcs::cam::anyone:anyone' === r.Grantee.ID || + 'http://cam.qcloud.com/groups/global/AllUsers' === r.Grantee.URI + ? (o[r.Permission] = 1) + : r.Grantee.ID !== e.Owner.ID && t[n[r.Permission]].push('id="' + r.Grantee.ID + '"'); + }), + o.FULL_CONTROL || (o.WRITE && o.READ) + ? (t.ACL = 'public-read-write') + : o.READ + ? (t.ACL = 'public-read') + : (t.ACL = 'private'), + i.each(n, function (e) { + t[e] = c(t[e].join(',')); + }), + t + ); + } + function c(e) { + var t, + n, + r = e.split(','), + o = {}; + for (t = 0; t < r.length; ) o[(n = r[t].trim())] ? r.splice(t, 1) : ((o[n] = !0), (r[t] = n), t++); + return r.join(','); + } + function u(e) { + var t = e.region || '', + n = e.bucket || '', + o = n.substr(0, n.lastIndexOf('-')), + a = n.substr(n.lastIndexOf('-') + 1), + s = e.domain, + c = e.object; + 'function' == typeof s && (s = s({ Bucket: n, Region: t })), + ['http', 'https'].includes(e.protocol) && (e.protocol = e.protocol + ':'); + var u = + e.protocol || + (i.isBrowser && + 'object' === ('undefined' == typeof location ? 'undefined' : r(location)) && + 'http:' === location.protocol + ? 'http:' + : 'https:'); + s || + ((s = + ['cn-south', 'cn-south-2', 'cn-north', 'cn-east', 'cn-southwest', 'sg'].indexOf(t) > -1 + ? '{Region}.myqcloud.com' + : 'cos.{Region}.myqcloud.com'), + e.ForcePathStyle || (s = '{Bucket}.' + s)), + (s = (s = s + .replace(/\{\{AppId\}\}/gi, a) + .replace(/\{\{Bucket\}\}/gi, o) + .replace(/\{\{Region\}\}/gi, t) + .replace(/\{\{.*?\}\}/gi, '')) + .replace(/\{AppId\}/gi, a) + .replace(/\{BucketName\}/gi, o) + .replace(/\{Bucket\}/gi, n) + .replace(/\{Region\}/gi, t) + .replace(/\{.*?\}/gi, '')), + /^[a-zA-Z]+:\/\//.test(s) || (s = u + '//' + s), + '/' === s.slice(-1) && (s = s.slice(0, -1)); + var l = s; + return ( + e.ForcePathStyle && (l += '/' + n), + (l += '/'), + c && (l += i.camSafeUrlEncode(c).replace(/%2F/g, '/')), + e.isLocation && (l = l.replace(/^https?:\/\//, '')), + l + ); + } + var l = function (e) { + if (!e.Bucket || !e.Region) return ''; + var t = void 0 === e.UseAccelerate ? this.options.UseAccelerate : e.UseAccelerate, + n = ( + e.Url || + u({ + ForcePathStyle: this.options.ForcePathStyle, + protocol: this.options.Protocol, + domain: this.options.Domain, + bucket: e.Bucket, + region: t ? 'accelerate' : e.Region, + }) + ).replace(/^https?:\/\/([^/]+)(\/.*)?$/, '$1'); + return new RegExp('^([a-z\\d-]+-\\d+\\.)?(cos|cosv6|ci|pic)\\.([a-z\\d-]+)\\.myqcloud\\.com$').test(n) ? n : ''; + }; + function d(e, t) { + var n = i.clone(e.Headers), + r = ''; + i.each(n, function (e, t) { + ('' === e || ['content-type', 'cache-control', 'expires'].indexOf(t.toLowerCase()) > -1) && delete n[t], + 'host' === t.toLowerCase() && (r = e); + }); + var o = !1 !== e.ForceSignHost; + !r && e.SignHost && o && (n.Host = e.SignHost); + var a = !1, + s = function (e, n) { + a || + ((a = !0), + n && + n.XCosSecurityToken && + !n.SecurityToken && + (((n = i.clone(n)).SecurityToken = n.XCosSecurityToken), delete n.XCosSecurityToken), + t && t(e, n)); + }, + c = this, + u = e.Bucket || '', + l = e.Region || '', + d = e.Key || ''; + c.options.ForcePathStyle && u && (d = u + '/' + d); + var p = '/' + d, + f = {}, + h = e.Scope; + if (!h) { + var m = e.Action || '', + g = e.ResourceKey || e.Key || ''; + h = e.Scope || [{ action: m, bucket: u, region: l, prefix: g }]; + } + var y = i.md5(JSON.stringify(h)); + (c._StsCache = c._StsCache || []), + (function () { + var e, t; + for (e = c._StsCache.length - 1; e >= 0; e--) { + t = c._StsCache[e]; + var n = Math.round(i.getSkewTime(c.options.SystemClockOffset) / 1e3) + 30; + if ((t.StartTime && n < t.StartTime) || n >= t.ExpiredTime) c._StsCache.splice(e, 1); + else if (!t.ScopeLimit || (t.ScopeLimit && t.ScopeKey === y)) { + f = t; + break; + } + } + })(); + var v, + C = function () { + var t = ''; + f.StartTime && e.Expires + ? (t = f.StartTime + ';' + (f.StartTime + 1 * e.Expires)) + : f.StartTime && f.ExpiredTime && (t = f.StartTime + ';' + f.ExpiredTime); + var r = { + Authorization: i.getAuth({ + SecretId: f.TmpSecretId, + SecretKey: f.TmpSecretKey, + Method: e.Method, + Pathname: p, + Query: e.Query, + Headers: n, + Expires: e.Expires, + UseRawKey: c.options.UseRawKey, + SystemClockOffset: c.options.SystemClockOffset, + KeyTime: t, + ForceSignHost: o, + }), + SecurityToken: f.SecurityToken || f.XCosSecurityToken || '', + Token: f.Token || '', + ClientIP: f.ClientIP || '', + ClientUA: f.ClientUA || '', + }; + s(null, r); + }, + k = function (e) { + if (e.Authorization) { + var t = !1, + n = e.Authorization; + if (n) + if (n.indexOf(' ') > -1) t = !1; + else if ( + n.indexOf('q-sign-algorithm=') > -1 && + n.indexOf('q-ak=') > -1 && + n.indexOf('q-sign-time=') > -1 && + n.indexOf('q-key-time=') > -1 && + n.indexOf('q-url-param-list=') > -1 + ) + t = !0; + else + try { + (n = atob(n)).indexOf('a=') > -1 && + n.indexOf('k=') > -1 && + n.indexOf('t=') > -1 && + n.indexOf('r=') > -1 && + n.indexOf('b=') > -1 && + (t = !0); + } catch (e) {} + if (!t) return i.error(new Error('getAuthorization callback params format error')); + } else { + if (!e.TmpSecretId) return i.error(new Error('getAuthorization callback params missing "TmpSecretId"')); + if (!e.TmpSecretKey) return i.error(new Error('getAuthorization callback params missing "TmpSecretKey"')); + if (!e.SecurityToken && !e.XCosSecurityToken) + return i.error(new Error('getAuthorization callback params missing "SecurityToken"')); + if (!e.ExpiredTime) return i.error(new Error('getAuthorization callback params missing "ExpiredTime"')); + if (e.ExpiredTime && 10 !== e.ExpiredTime.toString().length) + return i.error(new Error('getAuthorization callback params "ExpiredTime" should be 10 digits')); + if (e.StartTime && 10 !== e.StartTime.toString().length) + return i.error(new Error('getAuthorization callback params "StartTime" should be 10 StartTime')); + } + return !1; + }; + if (f.ExpiredTime && f.ExpiredTime - i.getSkewTime(c.options.SystemClockOffset) / 1e3 > 60) C(); + else if (c.options.getAuthorization) + c.options.getAuthorization.call( + c, + { + Bucket: u, + Region: l, + Method: e.Method, + Key: d, + Pathname: p, + Query: e.Query, + Headers: n, + Scope: h, + SystemClockOffset: c.options.SystemClockOffset, + ForceSignHost: o, + }, + function (e) { + 'string' == typeof e && (e = { Authorization: e }); + var t = k(e); + if (t) return s(t); + e.Authorization ? s(null, e) : (((f = e || {}).Scope = h), (f.ScopeKey = y), c._StsCache.push(f), C()); + }, + ); + else { + if (!c.options.getSTS) + return ( + (v = { + Authorization: i.getAuth({ + SecretId: e.SecretId || c.options.SecretId, + SecretKey: e.SecretKey || c.options.SecretKey, + Method: e.Method, + Pathname: p, + Query: e.Query, + Headers: n, + Expires: e.Expires, + UseRawKey: c.options.UseRawKey, + SystemClockOffset: c.options.SystemClockOffset, + ForceSignHost: o, + }), + SecurityToken: c.options.SecurityToken || c.options.XCosSecurityToken, + }), + s(null, v), + v + ); + c.options.getSTS.call(c, { Bucket: u, Region: l }, function (e) { + ((f = e || {}).Scope = h), + (f.ScopeKey = y), + f.TmpSecretId || (f.TmpSecretId = f.SecretId), + f.TmpSecretKey || (f.TmpSecretKey = f.SecretKey); + var t = k(f); + if (t) return s(t); + c._StsCache.push(f), C(); + }); + } + return ''; + } + function p(e) { + var t = !1, + n = !1, + r = (e.headers && (e.headers.date || e.headers.Date)) || (e.error && e.error.ServerTime); + try { + var o = e.error.Code, + a = e.error.Message; + ('RequestTimeTooSkewed' === o || ('AccessDenied' === o && 'Request has expired' === a)) && (n = !0); + } catch (e) {} + if (e) + if (n && r) { + var s = Date.parse(r); + this.options.CorrectClockSkew && + Math.abs(i.getSkewTime(this.options.SystemClockOffset) - s) >= 3e4 && + ((this.options.SystemClockOffset = s - Date.now()), (t = !0)); + } else 5 === Math.floor(e.statusCode / 100) && (t = !0); + return t; + } + function f(e, t) { + var n = this; + !e.headers && (e.headers = {}), + !e.qs && (e.qs = {}), + e.VersionId && (e.qs.versionId = e.VersionId), + (e.qs = i.clearKey(e.qs)), + e.headers && (e.headers = i.clearKey(e.headers)), + e.qs && (e.qs = i.clearKey(e.qs)); + var r = i.clone(e.qs); + e.action && (r[e.action] = ''); + var o = e.url || e.Url, + a = e.SignHost || l.call(this, { Bucket: e.Bucket, Region: e.Region, Url: o }), + s = e.tracker; + !(function o(i) { + var c = n.options.SystemClockOffset; + s && s.setParams({ signStartTime: new Date().getTime(), retryTimes: i - 1 }), + d.call( + n, + { + Bucket: e.Bucket || '', + Region: e.Region || '', + Method: e.method, + Key: e.Key, + Query: r, + Headers: e.headers, + SignHost: a, + Action: e.Action, + ResourceKey: e.ResourceKey, + Scope: e.Scope, + ForceSignHost: n.options.ForceSignHost, + }, + function (r, a) { + r + ? t(r) + : (s && s.setParams({ signEndTime: new Date().getTime(), httpStartTime: new Date().getTime() }), + (e.AuthData = a), + h.call(n, e, function (r, a) { + s && s.setParams({ httpEndTime: new Date().getTime() }), + r && i < 2 && (c !== n.options.SystemClockOffset || p.call(n, r)) + ? (e.headers && + (delete e.headers.Authorization, + delete e.headers.token, + delete e.headers.clientIP, + delete e.headers.clientUA, + e.headers['x-cos-security-token'] && delete e.headers['x-cos-security-token'], + e.headers['x-ci-security-token'] && delete e.headers['x-ci-security-token']), + o(i + 1)) + : t(r, a); + })); + }, + ); + })(1); + } + function h(e, t) { + var n = this, + r = e.TaskId; + if (!r || n._isRunningTask(r)) { + var a = e.Bucket, + s = e.Region, + c = e.Key, + l = e.method || 'GET', + d = e.Url || e.url, + p = e.body, + f = e.rawBody; + n.options.UseAccelerate && (s = 'accelerate'), + (d = + d || + u({ + ForcePathStyle: n.options.ForcePathStyle, + protocol: n.options.Protocol, + domain: n.options.Domain, + bucket: a, + region: s, + object: c, + })), + e.action && (d = d + '?' + (i.isIOS_QQ ? ''.concat(e.action, '=') : e.action)), + e.qsStr && (d = d.indexOf('?') > -1 ? d + '&' + e.qsStr : d + '?' + e.qsStr); + var h = { method: l, url: d, headers: e.headers, qs: e.qs, body: p }, + m = 'x-cos-security-token'; + if ( + (i.isCIHost(d) && (m = 'x-ci-security-token'), + (h.headers.Authorization = e.AuthData.Authorization), + e.AuthData.Token && (h.headers.token = e.AuthData.Token), + e.AuthData.ClientIP && (h.headers.clientIP = e.AuthData.ClientIP), + e.AuthData.ClientUA && (h.headers.clientUA = e.AuthData.ClientUA), + e.AuthData.SecurityToken && (h.headers[m] = e.AuthData.SecurityToken), + h.headers && (h.headers = i.clearKey(h.headers)), + (h = i.clearKey(h)), + e.onProgress && 'function' == typeof e.onProgress) + ) { + var g = (p && (p.size || p.length)) || 0; + h.onProgress = function (t) { + if (!r || n._isRunningTask(r)) { + var o = t ? t.loaded : 0; + e.onProgress({ loaded: o, total: g }); + } + }; + } + e.onDownloadProgress && (h.onDownloadProgress = e.onDownloadProgress), + e.DataType && (h.dataType = e.DataType), + this.options.Timeout && (h.timeout = this.options.Timeout), + n.options.ForcePathStyle && (h.pathStyle = n.options.ForcePathStyle), + n.emit('before-send', h); + var y = h.url.includes('accelerate.'), + v = h.qs + ? Object.keys(h.qs) + .map(function (e) { + return ''.concat(e, '=').concat(h.qs[e]); + }) + .join('&') + : '', + C = v ? h.url + '?' + v : h.url; + e.tracker && e.tracker.setParams({ reqUrl: C, accelerate: y ? 'Y' : 'N' }), + e.tracker && e.tracker.parent && e.tracker.parent.setParams({ reqUrl: C, accelerate: y ? 'Y' : 'N' }); + var k = (n.options.Request || o)(h, function (e) { + if (!e || 'abort' !== e.error) { + var o = { + options: h, + error: e && e.error, + statusCode: (e && e.statusCode) || 0, + statusMessage: (e && e.statusMessage) || '', + headers: (e && e.headers) || {}, + body: e && e.body, + }; + n.emit('after-receive', o); + var a, + s = o.error, + c = o.body, + u = { statusCode: o.statusCode, statusMessage: o.statusMessage, headers: o.headers }, + l = function (e, o) { + if ((r && n.off('inner-kill-task', S), !a)) { + a = !0; + var s = {}; + u && u.statusCode && (s.statusCode = u.statusCode), + u && u.headers && (s.headers = u.headers), + e ? ((e = i.extend(e || {}, s)), t(e, null)) : ((o = i.extend(o || {}, s)), t(null, o)), + (k = null); + } + }; + if (s) return l(i.error(s)); + var d, + p = u.statusCode, + m = 2 === Math.floor(p / 100); + if (f && m) return l(null, { body: c }); + try { + d = (c && c.indexOf('<') > -1 && c.indexOf('>') > -1 && i.xml2json(c)) || {}; + } catch (e) { + d = {}; + } + var g = d && d.Error; + m + ? l(null, d) + : g + ? l(i.error(new Error(g.Message), { code: g.Code, error: g })) + : p + ? l(i.error(new Error(u.statusMessage), { code: '' + p })) + : p && l(i.error(new Error('statusCode error'))); + } + }), + S = function e(t) { + t.TaskId === r && (k && k.abort && k.abort(), n.off('inner-kill-task', e)); + }; + r && n.on('inner-kill-task', S); + } + } + var m = { + getService: function (e, t) { + 'function' == typeof e && ((t = e), (e = {})); + var n = + this.options.Protocol || + (i.isBrowser && + 'object' === ('undefined' == typeof location ? 'undefined' : r(location)) && + 'http:' === location.protocol + ? 'http:' + : 'https:'), + o = this.options.ServiceDomain, + a = e.AppId || this.options.appId, + s = e.Region; + o + ? ((o = o + .replace(/\{\{AppId\}\}/gi, a || '') + .replace(/\{\{Region\}\}/gi, s || '') + .replace(/\{\{.*?\}\}/gi, '')), + /^[a-zA-Z]+:\/\//.test(o) || (o = n + '//' + o), + '/' === o.slice(-1) && (o = o.slice(0, -1))) + : (o = s ? n + '//cos.' + s + '.myqcloud.com' : n + '//service.cos.myqcloud.com'); + var c = '', + u = s ? 'cos.' + s + '.myqcloud.com' : 'service.cos.myqcloud.com'; + u === o.replace(/^https?:\/\/([^/]+)(\/.*)?$/, '$1') && (c = u), + f.call( + this, + { Action: 'name/cos:GetService', url: o, method: 'GET', headers: e.Headers, SignHost: c }, + function (e, n) { + if (e) return t(e); + var r = + (n && + n.ListAllMyBucketsResult && + n.ListAllMyBucketsResult.Buckets && + n.ListAllMyBucketsResult.Buckets.Bucket) || + []; + r = i.isArray(r) ? r : [r]; + var o = (n && n.ListAllMyBucketsResult && n.ListAllMyBucketsResult.Owner) || {}; + t(null, { Buckets: r, Owner: o, statusCode: n.statusCode, headers: n.headers }); + }, + ); + }, + putBucket: function (e, t) { + var n = this, + r = ''; + if (e.BucketAZConfig) { + var o = { BucketAZConfig: e.BucketAZConfig }; + r = i.json2xml({ CreateBucketConfiguration: o }); + } + f.call( + this, + { + Action: 'name/cos:PutBucket', + method: 'PUT', + Bucket: e.Bucket, + Region: e.Region, + headers: e.Headers, + body: r, + }, + function (r, o) { + if (r) return t(r); + var i = u({ + protocol: n.options.Protocol, + domain: n.options.Domain, + bucket: e.Bucket, + region: e.Region, + isLocation: !0, + }); + t(null, { Location: i, statusCode: o.statusCode, headers: o.headers }); + }, + ); + }, + headBucket: function (e, t) { + f.call( + this, + { Action: 'name/cos:HeadBucket', Bucket: e.Bucket, Region: e.Region, headers: e.Headers, method: 'HEAD' }, + t, + ); + }, + getBucket: function (e, t) { + var n = {}; + (n.prefix = e.Prefix || ''), + (n.delimiter = e.Delimiter), + (n.marker = e.Marker), + (n['max-keys'] = e.MaxKeys), + (n['encoding-type'] = e.EncodingType), + f.call( + this, + { + Action: 'name/cos:GetBucket', + ResourceKey: n.prefix, + method: 'GET', + Bucket: e.Bucket, + Region: e.Region, + headers: e.Headers, + qs: n, + }, + function (e, n) { + if (e) return t(e); + var r = n.ListBucketResult || {}, + o = r.Contents || [], + a = r.CommonPrefixes || []; + (o = i.isArray(o) ? o : [o]), (a = i.isArray(a) ? a : [a]); + var s = i.clone(r); + i.extend(s, { Contents: o, CommonPrefixes: a, statusCode: n.statusCode, headers: n.headers }), + t(null, s); + }, + ); + }, + deleteBucket: function (e, t) { + f.call( + this, + { + Action: 'name/cos:DeleteBucket', + Bucket: e.Bucket, + Region: e.Region, + headers: e.Headers, + method: 'DELETE', + }, + function (e, n) { + return e && 204 === e.statusCode + ? t(null, { statusCode: e.statusCode }) + : e + ? t(e) + : void t(null, { statusCode: n.statusCode, headers: n.headers }); + }, + ); + }, + putBucketAcl: function (e, t) { + var n = e.Headers, + r = ''; + if (e.AccessControlPolicy) { + var o = i.clone(e.AccessControlPolicy || {}), + a = o.Grants || o.Grant; + (a = i.isArray(a) ? a : [a]), + delete o.Grant, + delete o.Grants, + (o.AccessControlList = { Grant: a }), + (r = i.json2xml({ AccessControlPolicy: o })), + (n['Content-Type'] = 'application/xml'), + (n['Content-MD5'] = i.b64(i.md5(r))); + } + i.each(n, function (e, t) { + 0 === t.indexOf('x-cos-grant-') && (n[t] = c(n[t])); + }), + f.call( + this, + { + Action: 'name/cos:PutBucketACL', + method: 'PUT', + Bucket: e.Bucket, + Region: e.Region, + headers: n, + action: 'acl', + body: r, + }, + function (e, n) { + if (e) return t(e); + t(null, { statusCode: n.statusCode, headers: n.headers }); + }, + ); + }, + getBucketAcl: function (e, t) { + f.call( + this, + { + Action: 'name/cos:GetBucketACL', + method: 'GET', + Bucket: e.Bucket, + Region: e.Region, + headers: e.Headers, + action: 'acl', + }, + function (e, n) { + if (e) return t(e); + var r = n.AccessControlPolicy || {}, + o = r.Owner || {}, + a = r.AccessControlList.Grant || []; + a = i.isArray(a) ? a : [a]; + var c = s(r); + n.headers && n.headers['x-cos-acl'] && (c.ACL = n.headers['x-cos-acl']), + (c = i.extend(c, { Owner: o, Grants: a, statusCode: n.statusCode, headers: n.headers })), + t(null, c); + }, + ); + }, + putBucketCors: function (e, t) { + var n = (e.CORSConfiguration || {}).CORSRules || e.CORSRules || []; + (n = i.clone(i.isArray(n) ? n : [n])), + i.each(n, function (e) { + i.each(['AllowedOrigin', 'AllowedHeader', 'AllowedMethod', 'ExposeHeader'], function (t) { + var n = t + 's', + r = e[n] || e[t] || []; + delete e[n], (e[t] = i.isArray(r) ? r : [r]); + }); + }); + var r = { CORSRule: n }; + e.ResponseVary && (r.ResponseVary = e.ResponseVary); + var o = i.json2xml({ CORSConfiguration: r }), + a = e.Headers; + (a['Content-Type'] = 'application/xml'), + (a['Content-MD5'] = i.b64(i.md5(o))), + f.call( + this, + { + Action: 'name/cos:PutBucketCORS', + method: 'PUT', + Bucket: e.Bucket, + Region: e.Region, + body: o, + action: 'cors', + headers: a, + }, + function (e, n) { + if (e) return t(e); + t(null, { statusCode: n.statusCode, headers: n.headers }); + }, + ); + }, + getBucketCors: function (e, t) { + f.call( + this, + { + Action: 'name/cos:GetBucketCORS', + method: 'GET', + Bucket: e.Bucket, + Region: e.Region, + headers: e.Headers, + action: 'cors', + }, + function (e, n) { + if (e) + if (404 === e.statusCode && e.error && 'NoSuchCORSConfiguration' === e.error.Code) { + var r = { CORSRules: [], statusCode: e.statusCode }; + e.headers && (r.headers = e.headers), t(null, r); + } else t(e); + else { + var o = n.CORSConfiguration || {}, + a = o.CORSRules || o.CORSRule || []; + a = i.clone(i.isArray(a) ? a : [a]); + var s = o.ResponseVary; + i.each(a, function (e) { + i.each(['AllowedOrigin', 'AllowedHeader', 'AllowedMethod', 'ExposeHeader'], function (t) { + var n = t + 's', + r = e[n] || e[t] || []; + delete e[t], (e[n] = i.isArray(r) ? r : [r]); + }); + }), + t(null, { CORSRules: a, ResponseVary: s, statusCode: n.statusCode, headers: n.headers }); + } + }, + ); + }, + deleteBucketCors: function (e, t) { + f.call( + this, + { + Action: 'name/cos:DeleteBucketCORS', + method: 'DELETE', + Bucket: e.Bucket, + Region: e.Region, + headers: e.Headers, + action: 'cors', + }, + function (e, n) { + return e && 204 === e.statusCode + ? t(null, { statusCode: e.statusCode }) + : e + ? t(e) + : void t(null, { statusCode: n.statusCode || e.statusCode, headers: n.headers }); + }, + ); + }, + getBucketLocation: function (e, t) { + f.call( + this, + { + Action: 'name/cos:GetBucketLocation', + method: 'GET', + Bucket: e.Bucket, + Region: e.Region, + headers: e.Headers, + action: 'location', + }, + t, + ); + }, + getBucketPolicy: function (e, t) { + f.call( + this, + { + Action: 'name/cos:GetBucketPolicy', + method: 'GET', + Bucket: e.Bucket, + Region: e.Region, + headers: e.Headers, + action: 'policy', + rawBody: !0, + }, + function (e, n) { + if (e) + return e.statusCode && 403 === e.statusCode + ? t(i.error(e, { ErrorStatus: 'Access Denied' })) + : e.statusCode && 405 === e.statusCode + ? t(i.error(e, { ErrorStatus: 'Method Not Allowed' })) + : e.statusCode && 404 === e.statusCode + ? t(i.error(e, { ErrorStatus: 'Policy Not Found' })) + : t(e); + var r = {}; + try { + r = JSON.parse(n.body); + } catch (e) {} + t(null, { Policy: r, statusCode: n.statusCode, headers: n.headers }); + }, + ); + }, + putBucketPolicy: function (e, t) { + var n = e.Policy; + try { + 'string' == typeof n && (n = JSON.parse(n)); + } catch (e) {} + if (!n || 'string' == typeof n) return t(i.error(new Error('Policy format error'))); + var r = JSON.stringify(n); + n.version || (n.version = '2.0'); + var o = e.Headers; + (o['Content-Type'] = 'application/json'), + (o['Content-MD5'] = i.b64(i.md5(r))), + f.call( + this, + { + Action: 'name/cos:PutBucketPolicy', + method: 'PUT', + Bucket: e.Bucket, + Region: e.Region, + action: 'policy', + body: r, + headers: o, + }, + function (e, n) { + return e && 204 === e.statusCode + ? t(null, { statusCode: e.statusCode }) + : e + ? t(e) + : void t(null, { statusCode: n.statusCode, headers: n.headers }); + }, + ); + }, + deleteBucketPolicy: function (e, t) { + f.call( + this, + { + Action: 'name/cos:DeleteBucketPolicy', + method: 'DELETE', + Bucket: e.Bucket, + Region: e.Region, + headers: e.Headers, + action: 'policy', + }, + function (e, n) { + return e && 204 === e.statusCode + ? t(null, { statusCode: e.statusCode }) + : e + ? t(e) + : void t(null, { statusCode: n.statusCode || e.statusCode, headers: n.headers }); + }, + ); + }, + putBucketTagging: function (e, t) { + var n = e.Tagging || {}, + r = n.TagSet || n.Tags || e.Tags || []; + r = i.clone(i.isArray(r) ? r : [r]); + var o = i.json2xml({ Tagging: { TagSet: { Tag: r } } }), + a = e.Headers; + (a['Content-Type'] = 'application/xml'), + (a['Content-MD5'] = i.b64(i.md5(o))), + f.call( + this, + { + Action: 'name/cos:PutBucketTagging', + method: 'PUT', + Bucket: e.Bucket, + Region: e.Region, + body: o, + action: 'tagging', + headers: a, + }, + function (e, n) { + return e && 204 === e.statusCode + ? t(null, { statusCode: e.statusCode }) + : e + ? t(e) + : void t(null, { statusCode: n.statusCode, headers: n.headers }); + }, + ); + }, + getBucketTagging: function (e, t) { + f.call( + this, + { + Action: 'name/cos:GetBucketTagging', + method: 'GET', + Bucket: e.Bucket, + Region: e.Region, + headers: e.Headers, + action: 'tagging', + }, + function (e, n) { + if (e) + if (404 !== e.statusCode || !e.error || ('Not Found' !== e.error && 'NoSuchTagSet' !== e.error.Code)) + t(e); + else { + var r = { Tags: [], statusCode: e.statusCode }; + e.headers && (r.headers = e.headers), t(null, r); + } + else { + var o = []; + try { + o = n.Tagging.TagSet.Tag || []; + } catch (e) {} + (o = i.clone(i.isArray(o) ? o : [o])), + t(null, { Tags: o, statusCode: n.statusCode, headers: n.headers }); + } + }, + ); + }, + deleteBucketTagging: function (e, t) { + f.call( + this, + { + Action: 'name/cos:DeleteBucketTagging', + method: 'DELETE', + Bucket: e.Bucket, + Region: e.Region, + headers: e.Headers, + action: 'tagging', + }, + function (e, n) { + return e && 204 === e.statusCode + ? t(null, { statusCode: e.statusCode }) + : e + ? t(e) + : void t(null, { statusCode: n.statusCode, headers: n.headers }); + }, + ); + }, + putBucketLifecycle: function (e, t) { + var n = (e.LifecycleConfiguration || {}).Rules || e.Rules || []; + n = i.clone(n); + var r = i.json2xml({ LifecycleConfiguration: { Rule: n } }), + o = e.Headers; + (o['Content-Type'] = 'application/xml'), + (o['Content-MD5'] = i.b64(i.md5(r))), + f.call( + this, + { + Action: 'name/cos:PutBucketLifecycle', + method: 'PUT', + Bucket: e.Bucket, + Region: e.Region, + body: r, + action: 'lifecycle', + headers: o, + }, + function (e, n) { + return e && 204 === e.statusCode + ? t(null, { statusCode: e.statusCode }) + : e + ? t(e) + : void t(null, { statusCode: n.statusCode, headers: n.headers }); + }, + ); + }, + getBucketLifecycle: function (e, t) { + f.call( + this, + { + Action: 'name/cos:GetBucketLifecycle', + method: 'GET', + Bucket: e.Bucket, + Region: e.Region, + headers: e.Headers, + action: 'lifecycle', + }, + function (e, n) { + if (e) + if (404 === e.statusCode && e.error && 'NoSuchLifecycleConfiguration' === e.error.Code) { + var r = { Rules: [], statusCode: e.statusCode }; + e.headers && (r.headers = e.headers), t(null, r); + } else t(e); + else { + var o = []; + try { + o = n.LifecycleConfiguration.Rule || []; + } catch (e) {} + (o = i.clone(i.isArray(o) ? o : [o])), + t(null, { Rules: o, statusCode: n.statusCode, headers: n.headers }); + } + }, + ); + }, + deleteBucketLifecycle: function (e, t) { + f.call( + this, + { + Action: 'name/cos:DeleteBucketLifecycle', + method: 'DELETE', + Bucket: e.Bucket, + Region: e.Region, + headers: e.Headers, + action: 'lifecycle', + }, + function (e, n) { + return e && 204 === e.statusCode + ? t(null, { statusCode: e.statusCode }) + : e + ? t(e) + : void t(null, { statusCode: n.statusCode, headers: n.headers }); + }, + ); + }, + putBucketVersioning: function (e, t) { + if (e.VersioningConfiguration) { + var n = e.VersioningConfiguration || {}, + r = i.json2xml({ VersioningConfiguration: n }), + o = e.Headers; + (o['Content-Type'] = 'application/xml'), + (o['Content-MD5'] = i.b64(i.md5(r))), + f.call( + this, + { + Action: 'name/cos:PutBucketVersioning', + method: 'PUT', + Bucket: e.Bucket, + Region: e.Region, + body: r, + action: 'versioning', + headers: o, + }, + function (e, n) { + return e && 204 === e.statusCode + ? t(null, { statusCode: e.statusCode }) + : e + ? t(e) + : void t(null, { statusCode: n.statusCode, headers: n.headers }); + }, + ); + } else t(i.error(new Error('missing param VersioningConfiguration'))); + }, + getBucketVersioning: function (e, t) { + f.call( + this, + { + Action: 'name/cos:GetBucketVersioning', + method: 'GET', + Bucket: e.Bucket, + Region: e.Region, + headers: e.Headers, + action: 'versioning', + }, + function (e, n) { + e || (!n.VersioningConfiguration && (n.VersioningConfiguration = {})), t(e, n); + }, + ); + }, + putBucketReplication: function (e, t) { + var n = i.clone(e.ReplicationConfiguration), + r = i.json2xml({ ReplicationConfiguration: n }); + r = (r = r.replace(/<(\/?)Rules>/gi, '<$1Rule>')).replace(/<(\/?)Tags>/gi, '<$1Tag>'); + var o = e.Headers; + (o['Content-Type'] = 'application/xml'), + (o['Content-MD5'] = i.b64(i.md5(r))), + f.call( + this, + { + Action: 'name/cos:PutBucketReplication', + method: 'PUT', + Bucket: e.Bucket, + Region: e.Region, + body: r, + action: 'replication', + headers: o, + }, + function (e, n) { + return e && 204 === e.statusCode + ? t(null, { statusCode: e.statusCode }) + : e + ? t(e) + : void t(null, { statusCode: n.statusCode, headers: n.headers }); + }, + ); + }, + getBucketReplication: function (e, t) { + f.call( + this, + { + Action: 'name/cos:GetBucketReplication', + method: 'GET', + Bucket: e.Bucket, + Region: e.Region, + headers: e.Headers, + action: 'replication', + }, + function (e, n) { + if (e) + if ( + 404 !== e.statusCode || + !e.error || + ('Not Found' !== e.error && 'ReplicationConfigurationnotFoundError' !== e.error.Code) + ) + t(e); + else { + var r = { ReplicationConfiguration: { Rules: [] }, statusCode: e.statusCode }; + e.headers && (r.headers = e.headers), t(null, r); + } + else + !n.ReplicationConfiguration && (n.ReplicationConfiguration = {}), + n.ReplicationConfiguration.Rule && + ((n.ReplicationConfiguration.Rules = i.makeArray(n.ReplicationConfiguration.Rule)), + delete n.ReplicationConfiguration.Rule), + t(e, n); + }, + ); + }, + deleteBucketReplication: function (e, t) { + f.call( + this, + { + Action: 'name/cos:DeleteBucketReplication', + method: 'DELETE', + Bucket: e.Bucket, + Region: e.Region, + headers: e.Headers, + action: 'replication', + }, + function (e, n) { + return e && 204 === e.statusCode + ? t(null, { statusCode: e.statusCode }) + : e + ? t(e) + : void t(null, { statusCode: n.statusCode, headers: n.headers }); + }, + ); + }, + putBucketWebsite: function (e, t) { + if (e.WebsiteConfiguration) { + var n = i.clone(e.WebsiteConfiguration || {}), + r = n.RoutingRules || n.RoutingRule || []; + (r = i.isArray(r) ? r : [r]), + delete n.RoutingRule, + delete n.RoutingRules, + r.length && (n.RoutingRules = { RoutingRule: r }); + var o = i.json2xml({ WebsiteConfiguration: n }), + a = e.Headers; + (a['Content-Type'] = 'application/xml'), + (a['Content-MD5'] = i.b64(i.md5(o))), + f.call( + this, + { + Action: 'name/cos:PutBucketWebsite', + method: 'PUT', + Bucket: e.Bucket, + Region: e.Region, + body: o, + action: 'website', + headers: a, + }, + function (e, n) { + return e && 204 === e.statusCode + ? t(null, { statusCode: e.statusCode }) + : e + ? t(e) + : void t(null, { statusCode: n.statusCode, headers: n.headers }); + }, + ); + } else t(i.error(new Error('missing param WebsiteConfiguration'))); + }, + getBucketWebsite: function (e, t) { + f.call( + this, + { + Action: 'name/cos:GetBucketWebsite', + method: 'GET', + Bucket: e.Bucket, + Region: e.Region, + Key: e.Key, + headers: e.Headers, + action: 'website', + }, + function (e, n) { + if (e) + if (404 === e.statusCode && 'NoSuchWebsiteConfiguration' === e.error.Code) { + var r = { WebsiteConfiguration: {}, statusCode: e.statusCode }; + e.headers && (r.headers = e.headers), t(null, r); + } else t(e); + else { + var o = n.WebsiteConfiguration || {}; + if (o.RoutingRules) { + var a = i.clone(o.RoutingRules.RoutingRule || []); + (a = i.makeArray(a)), (o.RoutingRules = a); + } + t(null, { WebsiteConfiguration: o, statusCode: n.statusCode, headers: n.headers }); + } + }, + ); + }, + deleteBucketWebsite: function (e, t) { + f.call( + this, + { + Action: 'name/cos:DeleteBucketWebsite', + method: 'DELETE', + Bucket: e.Bucket, + Region: e.Region, + headers: e.Headers, + action: 'website', + }, + function (e, n) { + return e && 204 === e.statusCode + ? t(null, { statusCode: e.statusCode }) + : e + ? t(e) + : void t(null, { statusCode: n.statusCode, headers: n.headers }); + }, + ); + }, + putBucketReferer: function (e, t) { + if (e.RefererConfiguration) { + var n = i.clone(e.RefererConfiguration || {}), + r = n.DomainList || {}, + o = r.Domains || r.Domain || []; + (o = i.isArray(o) ? o : [o]).length && (n.DomainList = { Domain: o }); + var a = i.json2xml({ RefererConfiguration: n }), + s = e.Headers; + (s['Content-Type'] = 'application/xml'), + (s['Content-MD5'] = i.b64(i.md5(a))), + f.call( + this, + { + Action: 'name/cos:PutBucketReferer', + method: 'PUT', + Bucket: e.Bucket, + Region: e.Region, + body: a, + action: 'referer', + headers: s, + }, + function (e, n) { + return e && 204 === e.statusCode + ? t(null, { statusCode: e.statusCode }) + : e + ? t(e) + : void t(null, { statusCode: n.statusCode, headers: n.headers }); + }, + ); + } else t(i.error(new Error('missing param RefererConfiguration'))); + }, + getBucketReferer: function (e, t) { + f.call( + this, + { + Action: 'name/cos:GetBucketReferer', + method: 'GET', + Bucket: e.Bucket, + Region: e.Region, + Key: e.Key, + headers: e.Headers, + action: 'referer', + }, + function (e, n) { + if (e) + if (404 === e.statusCode && 'NoSuchRefererConfiguration' === e.error.Code) { + var r = { WebsiteConfiguration: {}, statusCode: e.statusCode }; + e.headers && (r.headers = e.headers), t(null, r); + } else t(e); + else { + var o = n.RefererConfiguration || {}; + if (o.DomainList) { + var a = i.makeArray(o.DomainList.Domain || []); + o.DomainList = { Domains: a }; + } + t(null, { RefererConfiguration: o, statusCode: n.statusCode, headers: n.headers }); + } + }, + ); + }, + putBucketDomain: function (e, t) { + var n = (e.DomainConfiguration || {}).DomainRule || e.DomainRule || []; + n = i.clone(n); + var r = i.json2xml({ DomainConfiguration: { DomainRule: n } }), + o = e.Headers; + (o['Content-Type'] = 'application/xml'), + (o['Content-MD5'] = i.b64(i.md5(r))), + f.call( + this, + { + Action: 'name/cos:PutBucketDomain', + method: 'PUT', + Bucket: e.Bucket, + Region: e.Region, + body: r, + action: 'domain', + headers: o, + }, + function (e, n) { + return e && 204 === e.statusCode + ? t(null, { statusCode: e.statusCode }) + : e + ? t(e) + : void t(null, { statusCode: n.statusCode, headers: n.headers }); + }, + ); + }, + getBucketDomain: function (e, t) { + f.call( + this, + { + Action: 'name/cos:GetBucketDomain', + method: 'GET', + Bucket: e.Bucket, + Region: e.Region, + headers: e.Headers, + action: 'domain', + }, + function (e, n) { + if (e) return t(e); + var r = []; + try { + r = n.DomainConfiguration.DomainRule || []; + } catch (e) {} + (r = i.clone(i.isArray(r) ? r : [r])), + t(null, { DomainRule: r, statusCode: n.statusCode, headers: n.headers }); + }, + ); + }, + deleteBucketDomain: function (e, t) { + f.call( + this, + { + Action: 'name/cos:DeleteBucketDomain', + method: 'DELETE', + Bucket: e.Bucket, + Region: e.Region, + headers: e.Headers, + action: 'domain', + }, + function (e, n) { + return e && 204 === e.statusCode + ? t(null, { statusCode: e.statusCode }) + : e + ? t(e) + : void t(null, { statusCode: n.statusCode, headers: n.headers }); + }, + ); + }, + putBucketOrigin: function (e, t) { + var n = (e.OriginConfiguration || {}).OriginRule || e.OriginRule || []; + n = i.clone(n); + var r = i.json2xml({ OriginConfiguration: { OriginRule: n } }), + o = e.Headers; + (o['Content-Type'] = 'application/xml'), + (o['Content-MD5'] = i.b64(i.md5(r))), + f.call( + this, + { + Action: 'name/cos:PutBucketOrigin', + method: 'PUT', + Bucket: e.Bucket, + Region: e.Region, + body: r, + action: 'origin', + headers: o, + }, + function (e, n) { + return e && 204 === e.statusCode + ? t(null, { statusCode: e.statusCode }) + : e + ? t(e) + : void t(null, { statusCode: n.statusCode, headers: n.headers }); + }, + ); + }, + getBucketOrigin: function (e, t) { + f.call( + this, + { + Action: 'name/cos:GetBucketOrigin', + method: 'GET', + Bucket: e.Bucket, + Region: e.Region, + headers: e.Headers, + action: 'origin', + }, + function (e, n) { + if (e) return t(e); + var r = []; + try { + r = n.OriginConfiguration.OriginRule || []; + } catch (e) {} + (r = i.clone(i.isArray(r) ? r : [r])), + t(null, { OriginRule: r, statusCode: n.statusCode, headers: n.headers }); + }, + ); + }, + deleteBucketOrigin: function (e, t) { + f.call( + this, + { + Action: 'name/cos:DeleteBucketOrigin', + method: 'DELETE', + Bucket: e.Bucket, + Region: e.Region, + headers: e.Headers, + action: 'origin', + }, + function (e, n) { + return e && 204 === e.statusCode + ? t(null, { statusCode: e.statusCode }) + : e + ? t(e) + : void t(null, { statusCode: n.statusCode, headers: n.headers }); + }, + ); + }, + putBucketLogging: function (e, t) { + var n = i.json2xml({ BucketLoggingStatus: e.BucketLoggingStatus || '' }), + r = e.Headers; + (r['Content-Type'] = 'application/xml'), + (r['Content-MD5'] = i.b64(i.md5(n))), + f.call( + this, + { + Action: 'name/cos:PutBucketLogging', + method: 'PUT', + Bucket: e.Bucket, + Region: e.Region, + body: n, + action: 'logging', + headers: r, + }, + function (e, n) { + return e && 204 === e.statusCode + ? t(null, { statusCode: e.statusCode }) + : e + ? t(e) + : void t(null, { statusCode: n.statusCode, headers: n.headers }); + }, + ); + }, + getBucketLogging: function (e, t) { + f.call( + this, + { + Action: 'name/cos:GetBucketLogging', + method: 'GET', + Bucket: e.Bucket, + Region: e.Region, + headers: e.Headers, + action: 'logging', + }, + function (e, n) { + if (e) return t(e); + t(null, { BucketLoggingStatus: n.BucketLoggingStatus, statusCode: n.statusCode, headers: n.headers }); + }, + ); + }, + putBucketInventory: function (e, t) { + return a.call(this, 'PUT', e, t); + }, + postBucketInventory: function (e, t) { + return a.call(this, 'POST', e, t); + }, + getBucketInventory: function (e, t) { + f.call( + this, + { + Action: 'name/cos:GetBucketInventory', + method: 'GET', + Bucket: e.Bucket, + Region: e.Region, + headers: e.Headers, + action: 'inventory', + qs: { id: e.Id }, + }, + function (e, n) { + if (e) return t(e); + var r = n.InventoryConfiguration; + if (r && r.OptionalFields && r.OptionalFields.Field) { + var o = r.OptionalFields.Field; + i.isArray(o) || (o = [o]), (r.OptionalFields = o); + } + if ( + r.Destination && + r.Destination.COSBucketDestination && + r.Destination.COSBucketDestination.Encryption + ) { + var a = r.Destination.COSBucketDestination.Encryption; + Object.keys(a).indexOf('SSE-COS') > -1 && ((a.SSECOS = a['SSE-COS']), delete a['SSE-COS']); + } + t(null, { InventoryConfiguration: r, statusCode: n.statusCode, headers: n.headers }); + }, + ); + }, + listBucketInventory: function (e, t) { + f.call( + this, + { + Action: 'name/cos:ListBucketInventory', + method: 'GET', + Bucket: e.Bucket, + Region: e.Region, + headers: e.Headers, + action: 'inventory', + qs: { 'continuation-token': e.ContinuationToken }, + }, + function (e, n) { + if (e) return t(e); + var r = n.ListInventoryConfigurationResult, + o = r.InventoryConfiguration || []; + (o = i.isArray(o) ? o : [o]), + delete r.InventoryConfiguration, + i.each(o, function (e) { + if (e && e.OptionalFields && e.OptionalFields.Field) { + var t = e.OptionalFields.Field; + i.isArray(t) || (t = [t]), (e.OptionalFields = t); + } + if ( + e.Destination && + e.Destination.COSBucketDestination && + e.Destination.COSBucketDestination.Encryption + ) { + var n = e.Destination.COSBucketDestination.Encryption; + Object.keys(n).indexOf('SSE-COS') > -1 && ((n.SSECOS = n['SSE-COS']), delete n['SSE-COS']); + } + }), + (r.InventoryConfigurations = o), + i.extend(r, { statusCode: n.statusCode, headers: n.headers }), + t(null, r); + }, + ); + }, + deleteBucketInventory: function (e, t) { + f.call( + this, + { + Action: 'name/cos:DeleteBucketInventory', + method: 'DELETE', + Bucket: e.Bucket, + Region: e.Region, + headers: e.Headers, + action: 'inventory', + qs: { id: e.Id }, + }, + function (e, n) { + return e && 204 === e.statusCode + ? t(null, { statusCode: e.statusCode }) + : e + ? t(e) + : void t(null, { statusCode: n.statusCode, headers: n.headers }); + }, + ); + }, + putBucketAccelerate: function (e, t) { + if (e.AccelerateConfiguration) { + var n = { AccelerateConfiguration: e.AccelerateConfiguration || {} }, + r = i.json2xml(n), + o = { 'Content-Type': 'application/xml' }; + (o['Content-MD5'] = i.b64(i.md5(r))), + f.call( + this, + { + Action: 'name/cos:PutBucketAccelerate', + method: 'PUT', + Bucket: e.Bucket, + Region: e.Region, + body: r, + action: 'accelerate', + headers: o, + }, + function (e, n) { + if (e) return t(e); + t(null, { statusCode: n.statusCode, headers: n.headers }); + }, + ); + } else t(i.error(new Error('missing param AccelerateConfiguration'))); + }, + getBucketAccelerate: function (e, t) { + f.call( + this, + { + Action: 'name/cos:GetBucketAccelerate', + method: 'GET', + Bucket: e.Bucket, + Region: e.Region, + action: 'accelerate', + }, + function (e, n) { + e || (!n.AccelerateConfiguration && (n.AccelerateConfiguration = {})), t(e, n); + }, + ); + }, + putBucketEncryption: function (e, t) { + var n = e.ServerSideEncryptionConfiguration || {}, + r = n.Rule || n.Rules || [], + o = i.json2xml({ ServerSideEncryptionConfiguration: { Rule: r } }), + a = e.Headers; + (a['Content-Type'] = 'application/xml'), + (a['Content-MD5'] = i.b64(i.md5(o))), + f.call( + this, + { + Action: 'name/cos:PutBucketEncryption', + method: 'PUT', + Bucket: e.Bucket, + Region: e.Region, + body: o, + action: 'encryption', + headers: a, + }, + function (e, n) { + return e && 204 === e.statusCode + ? t(null, { statusCode: e.statusCode }) + : e + ? t(e) + : void t(null, { statusCode: n.statusCode, headers: n.headers }); + }, + ); + }, + getBucketEncryption: function (e, t) { + f.call( + this, + { + Action: 'name/cos:GetBucketEncryption', + method: 'GET', + Bucket: e.Bucket, + Region: e.Region, + headers: e.Headers, + action: 'encryption', + }, + function (e, n) { + if (e) + if (404 === e.statusCode && 'NoSuchEncryptionConfiguration' === e.code) { + var r = { EncryptionConfiguration: { Rules: [] }, statusCode: e.statusCode }; + e.headers && (r.headers = e.headers), t(null, r); + } else t(e); + else { + var o = i.makeArray((n.EncryptionConfiguration && n.EncryptionConfiguration.Rule) || []); + (n.EncryptionConfiguration = { Rules: o }), t(e, n); + } + }, + ); + }, + deleteBucketEncryption: function (e, t) { + f.call( + this, + { + Action: 'name/cos:DeleteBucketReplication', + method: 'DELETE', + Bucket: e.Bucket, + Region: e.Region, + headers: e.Headers, + action: 'encryption', + }, + function (e, n) { + return e && 204 === e.statusCode + ? t(null, { statusCode: e.statusCode }) + : e + ? t(e) + : void t(null, { statusCode: n.statusCode, headers: n.headers }); + }, + ); + }, + getObject: function (e, t) { + var n = e.Query || {}, + r = e.QueryString || '', + o = i.throttleOnProgress.call(this, 0, e.onProgress), + a = e.tracker; + a && a.setParams({ signStartTime: new Date().getTime() }), + (n['response-content-type'] = e.ResponseContentType), + (n['response-content-language'] = e.ResponseContentLanguage), + (n['response-expires'] = e.ResponseExpires), + (n['response-cache-control'] = e.ResponseCacheControl), + (n['response-content-disposition'] = e.ResponseContentDisposition), + (n['response-content-encoding'] = e.ResponseContentEncoding), + f.call( + this, + { + Action: 'name/cos:GetObject', + method: 'GET', + Bucket: e.Bucket, + Region: e.Region, + Key: e.Key, + VersionId: e.VersionId, + DataType: e.DataType, + headers: e.Headers, + qs: n, + qsStr: r, + rawBody: !0, + onDownloadProgress: o, + tracker: a, + }, + function (n, r) { + if ((o(null, !0), n)) { + var a = n.statusCode; + return e.Headers['If-Modified-Since'] && a && 304 === a ? t(null, { NotModified: !0 }) : t(n); + } + t(null, { + Body: r.body, + ETag: i.attr(r.headers, 'etag', ''), + statusCode: r.statusCode, + headers: r.headers, + }); + }, + ); + }, + headObject: function (e, t) { + f.call( + this, + { + Action: 'name/cos:HeadObject', + method: 'HEAD', + Bucket: e.Bucket, + Region: e.Region, + Key: e.Key, + VersionId: e.VersionId, + headers: e.Headers, + }, + function (n, r) { + if (n) { + var o = n.statusCode; + return e.Headers['If-Modified-Since'] && o && 304 === o + ? t(null, { NotModified: !0, statusCode: o }) + : t(n); + } + (r.ETag = i.attr(r.headers, 'etag', '')), t(null, r); + }, + ); + }, + listObjectVersions: function (e, t) { + var n = {}; + (n.prefix = e.Prefix || ''), + (n.delimiter = e.Delimiter), + (n['key-marker'] = e.KeyMarker), + (n['version-id-marker'] = e.VersionIdMarker), + (n['max-keys'] = e.MaxKeys), + (n['encoding-type'] = e.EncodingType), + f.call( + this, + { + Action: 'name/cos:GetBucketObjectVersions', + ResourceKey: n.prefix, + method: 'GET', + Bucket: e.Bucket, + Region: e.Region, + headers: e.Headers, + qs: n, + action: 'versions', + }, + function (e, n) { + if (e) return t(e); + var r = n.ListVersionsResult || {}, + o = r.DeleteMarker || []; + o = i.isArray(o) ? o : [o]; + var a = r.Version || []; + a = i.isArray(a) ? a : [a]; + var s = i.clone(r); + delete s.DeleteMarker, + delete s.Version, + i.extend(s, { DeleteMarkers: o, Versions: a, statusCode: n.statusCode, headers: n.headers }), + t(null, s); + }, + ); + }, + putObject: function (e, t) { + var n = this, + r = e.ContentLength, + o = i.throttleOnProgress.call(n, r, e.onProgress), + a = e.Headers; + a['Cache-Control'] || a['cache-control'] || (a['Cache-Control'] = ''), + a['Content-Type'] || a['content-type'] || (a['Content-Type'] = (e.Body && e.Body.type) || ''); + var s = e.UploadAddMetaMd5 || n.options.UploadAddMetaMd5 || n.options.UploadCheckContentMd5, + c = e.tracker; + s && c && c.setParams({ md5StartTime: new Date().getTime() }), + i.getBodyMd5( + s, + e.Body, + function (s) { + s && + (c && c.setParams({ md5EndTime: new Date().getTime() }), + n.options.UploadCheckContentMd5 && (a['Content-MD5'] = i.b64(s)), + (e.UploadAddMetaMd5 || n.options.UploadAddMetaMd5) && (a['x-cos-meta-md5'] = s)), + void 0 !== e.ContentLength && (a['Content-Length'] = e.ContentLength), + o(null, !0), + f.call( + n, + { + Action: 'name/cos:PutObject', + TaskId: e.TaskId, + method: 'PUT', + Bucket: e.Bucket, + Region: e.Region, + Key: e.Key, + headers: e.Headers, + qs: e.Query, + body: e.Body, + onProgress: o, + tracker: c, + }, + function (a, s) { + if (a) return o(null, !0), t(a); + o({ loaded: r, total: r }, !0); + var c = u({ + ForcePathStyle: n.options.ForcePathStyle, + protocol: n.options.Protocol, + domain: n.options.Domain, + bucket: e.Bucket, + region: n.options.UseAccelerate ? 'accelerate' : e.Region, + object: e.Key, + }); + (c = c.substr(c.indexOf('://') + 3)), + (s.Location = c), + (s.ETag = i.attr(s.headers, 'etag', '')), + t(null, s); + }, + ); + }, + e.onHashProgress, + ); + }, + deleteObject: function (e, t) { + f.call( + this, + { + Action: 'name/cos:DeleteObject', + method: 'DELETE', + Bucket: e.Bucket, + Region: e.Region, + Key: e.Key, + headers: e.Headers, + VersionId: e.VersionId, + action: e.Recursive ? 'recursive' : '', + }, + function (e, n) { + if (e) { + var r = e.statusCode; + return r && 404 === r ? t(null, { BucketNotFound: !0, statusCode: r }) : t(e); + } + t(null, { statusCode: n.statusCode, headers: n.headers }); + }, + ); + }, + getObjectAcl: function (e, t) { + var n = {}; + e.VersionId && (n.versionId = e.VersionId), + f.call( + this, + { + Action: 'name/cos:GetObjectACL', + method: 'GET', + Bucket: e.Bucket, + Region: e.Region, + Key: e.Key, + headers: e.Headers, + qs: n, + action: 'acl', + }, + function (e, n) { + if (e) return t(e); + var r = n.AccessControlPolicy || {}, + o = r.Owner || {}, + a = (r.AccessControlList && r.AccessControlList.Grant) || []; + a = i.isArray(a) ? a : [a]; + var c = s(r); + delete c.GrantWrite, + n.headers && n.headers['x-cos-acl'] && (c.ACL = n.headers['x-cos-acl']), + (c = i.extend(c, { Owner: o, Grants: a, statusCode: n.statusCode, headers: n.headers })), + t(null, c); + }, + ); + }, + putObjectAcl: function (e, t) { + var n = e.Headers, + r = ''; + if (e.AccessControlPolicy) { + var o = i.clone(e.AccessControlPolicy || {}), + a = o.Grants || o.Grant; + (a = i.isArray(a) ? a : [a]), + delete o.Grant, + delete o.Grants, + (o.AccessControlList = { Grant: a }), + (r = i.json2xml({ AccessControlPolicy: o })), + (n['Content-Type'] = 'application/xml'), + (n['Content-MD5'] = i.b64(i.md5(r))); + } + i.each(n, function (e, t) { + 0 === t.indexOf('x-cos-grant-') && (n[t] = c(n[t])); + }), + f.call( + this, + { + Action: 'name/cos:PutObjectACL', + method: 'PUT', + Bucket: e.Bucket, + Region: e.Region, + Key: e.Key, + action: 'acl', + headers: n, + body: r, + }, + function (e, n) { + if (e) return t(e); + t(null, { statusCode: n.statusCode, headers: n.headers }); + }, + ); + }, + optionsObject: function (e, t) { + var n = e.Headers; + (n.Origin = e.Origin), + (n['Access-Control-Request-Method'] = e.AccessControlRequestMethod), + (n['Access-Control-Request-Headers'] = e.AccessControlRequestHeaders), + f.call( + this, + { + Action: 'name/cos:OptionsObject', + method: 'OPTIONS', + Bucket: e.Bucket, + Region: e.Region, + Key: e.Key, + headers: n, + }, + function (e, n) { + if (e) + return e.statusCode && 403 === e.statusCode + ? t(null, { OptionsForbidden: !0, statusCode: e.statusCode }) + : t(e); + var r = n.headers || {}; + t(null, { + AccessControlAllowOrigin: r['access-control-allow-origin'], + AccessControlAllowMethods: r['access-control-allow-methods'], + AccessControlAllowHeaders: r['access-control-allow-headers'], + AccessControlExposeHeaders: r['access-control-expose-headers'], + AccessControlMaxAge: r['access-control-max-age'], + statusCode: n.statusCode, + headers: n.headers, + }); + }, + ); + }, + putObjectCopy: function (e, t) { + var n = this, + r = e.Headers; + r['Cache-Control'] || r['cache-control'] || (r['Cache-Control'] = ''); + var o = e.CopySource || '', + a = i.getSourceParams.call(this, o); + if (a) { + var s = a.Bucket, + c = a.Region, + l = decodeURIComponent(a.Key); + f.call( + this, + { + Scope: [ + { action: 'name/cos:GetObject', bucket: s, region: c, prefix: l }, + { action: 'name/cos:PutObject', bucket: e.Bucket, region: e.Region, prefix: e.Key }, + ], + method: 'PUT', + Bucket: e.Bucket, + Region: e.Region, + Key: e.Key, + VersionId: e.VersionId, + headers: e.Headers, + }, + function (r, o) { + if (r) return t(r); + var a = i.clone(o.CopyObjectResult || {}), + s = u({ + ForcePathStyle: n.options.ForcePathStyle, + protocol: n.options.Protocol, + domain: n.options.Domain, + bucket: e.Bucket, + region: e.Region, + object: e.Key, + isLocation: !0, + }); + i.extend(a, { Location: s, statusCode: o.statusCode, headers: o.headers }), t(null, a); + }, + ); + } else t(i.error(new Error('CopySource format error'))); + }, + deleteMultipleObject: function (e, t) { + var n = e.Objects || [], + r = e.Quiet; + n = i.isArray(n) ? n : [n]; + var o = i.json2xml({ Delete: { Object: n, Quiet: r || !1 } }), + a = e.Headers; + (a['Content-Type'] = 'application/xml'), (a['Content-MD5'] = i.b64(i.md5(o))); + var s = i.map(n, function (t) { + return { action: 'name/cos:DeleteObject', bucket: e.Bucket, region: e.Region, prefix: t.Key }; + }); + f.call( + this, + { Scope: s, method: 'POST', Bucket: e.Bucket, Region: e.Region, body: o, action: 'delete', headers: a }, + function (e, n) { + if (e) return t(e); + var r = n.DeleteResult || {}, + o = r.Deleted || [], + a = r.Error || []; + (o = i.isArray(o) ? o : [o]), (a = i.isArray(a) ? a : [a]); + var s = i.clone(r); + i.extend(s, { Error: a, Deleted: o, statusCode: n.statusCode, headers: n.headers }), t(null, s); + }, + ); + }, + restoreObject: function (e, t) { + var n = e.Headers; + if (e.RestoreRequest) { + var r = e.RestoreRequest || {}, + o = i.json2xml({ RestoreRequest: r }); + (n['Content-Type'] = 'application/xml'), + (n['Content-MD5'] = i.b64(i.md5(o))), + f.call( + this, + { + Action: 'name/cos:RestoreObject', + method: 'POST', + Bucket: e.Bucket, + Region: e.Region, + Key: e.Key, + VersionId: e.VersionId, + body: o, + action: 'restore', + headers: n, + }, + t, + ); + } else t(i.error(new Error('missing param RestoreRequest'))); + }, + putObjectTagging: function (e, t) { + var n = e.Tagging || {}, + r = n.TagSet || n.Tags || e.Tags || []; + r = i.clone(i.isArray(r) ? r : [r]); + var o = i.json2xml({ Tagging: { TagSet: { Tag: r } } }), + a = e.Headers; + (a['Content-Type'] = 'application/xml'), + (a['Content-MD5'] = i.b64(i.md5(o))), + f.call( + this, + { + Action: 'name/cos:PutObjectTagging', + method: 'PUT', + Bucket: e.Bucket, + Key: e.Key, + Region: e.Region, + body: o, + action: 'tagging', + headers: a, + VersionId: e.VersionId, + }, + function (e, n) { + return e && 204 === e.statusCode + ? t(null, { statusCode: e.statusCode }) + : e + ? t(e) + : void t(null, { statusCode: n.statusCode, headers: n.headers }); + }, + ); + }, + getObjectTagging: function (e, t) { + f.call( + this, + { + Action: 'name/cos:GetObjectTagging', + method: 'GET', + Key: e.Key, + Bucket: e.Bucket, + Region: e.Region, + headers: e.Headers, + action: 'tagging', + VersionId: e.VersionId, + }, + function (e, n) { + if (e) + if (404 !== e.statusCode || !e.error || ('Not Found' !== e.error && 'NoSuchTagSet' !== e.error.Code)) + t(e); + else { + var r = { Tags: [], statusCode: e.statusCode }; + e.headers && (r.headers = e.headers), t(null, r); + } + else { + var o = []; + try { + o = n.Tagging.TagSet.Tag || []; + } catch (e) {} + (o = i.clone(i.isArray(o) ? o : [o])), + t(null, { Tags: o, statusCode: n.statusCode, headers: n.headers }); + } + }, + ); + }, + deleteObjectTagging: function (e, t) { + f.call( + this, + { + Action: 'name/cos:DeleteObjectTagging', + method: 'DELETE', + Bucket: e.Bucket, + Region: e.Region, + Key: e.Key, + headers: e.Headers, + action: 'tagging', + VersionId: e.VersionId, + }, + function (e, n) { + return e && 204 === e.statusCode + ? t(null, { statusCode: e.statusCode }) + : e + ? t(e) + : void t(null, { statusCode: n.statusCode, headers: n.headers }); + }, + ); + }, + selectObjectContent: function (e, t) { + if (!e.SelectType) return t(i.error(new Error('missing param SelectType'))); + var n = e.SelectRequest || {}, + r = i.json2xml({ SelectRequest: n }), + o = e.Headers; + (o['Content-Type'] = 'application/xml'), + (o['Content-MD5'] = i.b64(i.md5(r))), + f.call( + this, + { + Action: 'name/cos:GetObject', + method: 'POST', + Bucket: e.Bucket, + Region: e.Region, + Key: e.Key, + headers: e.Headers, + action: 'select', + qs: { 'select-type': e.SelectType }, + VersionId: e.VersionId, + body: r, + DataType: 'arraybuffer', + rawBody: !0, + }, + function (e, n) { + if (e && 204 === e.statusCode) return t(null, { statusCode: e.statusCode }); + if (e) return t(e); + var r = i.parseSelectPayload(n.body); + t(null, { statusCode: n.statusCode, headers: n.headers, Body: r.body, Payload: r.payload }); + }, + ); + }, + appendObject: function (e, t) { + var n = e.Headers; + n['Cache-Control'] || n['cache-control'] || (n['Cache-Control'] = ''), + n['Content-Type'] || n['content-type'] || (n['Content-Type'] = (e.Body && e.Body.type) || ''), + f.call( + this, + { + Action: 'name/cos:AppendObject', + method: 'POST', + Bucket: e.Bucket, + Region: e.Region, + action: 'append', + Key: e.Key, + body: e.Body, + qs: { position: e.Position }, + headers: e.Headers, + }, + function (e, n) { + if (e) return t(e); + t(null, n); + }, + ); + }, + uploadPartCopy: function (e, t) { + var n = e.CopySource || '', + r = i.getSourceParams.call(this, n); + if (r) { + var o = r.Bucket, + a = r.Region, + s = decodeURIComponent(r.Key); + f.call( + this, + { + Scope: [ + { action: 'name/cos:GetObject', bucket: o, region: a, prefix: s }, + { action: 'name/cos:PutObject', bucket: e.Bucket, region: e.Region, prefix: e.Key }, + ], + method: 'PUT', + Bucket: e.Bucket, + Region: e.Region, + Key: e.Key, + VersionId: e.VersionId, + qs: { partNumber: e.PartNumber, uploadId: e.UploadId }, + headers: e.Headers, + }, + function (e, n) { + if (e) return t(e); + var r = i.clone(n.CopyPartResult || {}); + i.extend(r, { statusCode: n.statusCode, headers: n.headers }), t(null, r); + }, + ); + } else t(i.error(new Error('CopySource format error'))); + }, + multipartInit: function (e, t) { + var n = this, + r = e.Headers, + o = e.tracker; + r['Cache-Control'] || r['cache-control'] || (r['Cache-Control'] = ''), + r['Content-Type'] || r['content-type'] || (r['Content-Type'] = (e.Body && e.Body.type) || ''); + var a = e.Body && (e.UploadAddMetaMd5 || n.options.UploadAddMetaMd5); + a && o && o.setParams({ md5StartTime: new Date().getTime() }), + i.getBodyMd5( + a, + e.Body, + function (r) { + r && (e.Headers['x-cos-meta-md5'] = r), + a && o && o.setParams({ md5EndTime: new Date().getTime() }), + f.call( + n, + { + Action: 'name/cos:InitiateMultipartUpload', + method: 'POST', + Bucket: e.Bucket, + Region: e.Region, + Key: e.Key, + action: 'uploads', + headers: e.Headers, + qs: e.Query, + tracker: o, + }, + function (e, n) { + return e + ? (o && o.parent && o.parent.setParams({ errorNode: 'multipartInit' }), t(e)) + : (n = i.clone(n || {})) && n.InitiateMultipartUploadResult + ? t( + null, + i.extend(n.InitiateMultipartUploadResult, { statusCode: n.statusCode, headers: n.headers }), + ) + : void t(null, n); + }, + ); + }, + e.onHashProgress, + ); + }, + multipartUpload: function (e, t) { + var n = this; + i.getFileSize('multipartUpload', e, function () { + var r = e.tracker, + o = n.options.UploadCheckContentMd5; + o && r && r.setParams({ md5StartTime: new Date().getTime() }), + i.getBodyMd5(o, e.Body, function (a) { + a && (e.Headers['Content-MD5'] = i.b64(a)), + o && r && r.setParams({ md5EndTime: new Date().getTime() }), + r && r.setParams({ partNumber: e.PartNumber }), + f.call( + n, + { + Action: 'name/cos:UploadPart', + TaskId: e.TaskId, + method: 'PUT', + Bucket: e.Bucket, + Region: e.Region, + Key: e.Key, + qs: { partNumber: e.PartNumber, uploadId: e.UploadId }, + headers: e.Headers, + onProgress: e.onProgress, + body: e.Body || null, + tracker: r, + }, + function (e, n) { + if (e) return r && r.parent && r.parent.setParams({ errorNode: 'multipartUpload' }), t(e); + t(null, { ETag: i.attr(n.headers, 'etag', ''), statusCode: n.statusCode, headers: n.headers }); + }, + ); + }); + }); + }, + multipartComplete: function (e, t) { + for (var n = this, r = e.UploadId, o = e.Parts, a = e.tracker, s = 0, c = o.length; s < c; s++) + (o[s].ETag && 0 === o[s].ETag.indexOf('"')) || (o[s].ETag = '"' + o[s].ETag + '"'); + var l = i.json2xml({ CompleteMultipartUpload: { Part: o } }); + l = l.replace(/\n\s*/g, ''); + var d = e.Headers; + (d['Content-Type'] = 'application/xml'), + (d['Content-MD5'] = i.b64(i.md5(l))), + f.call( + this, + { + Action: 'name/cos:CompleteMultipartUpload', + method: 'POST', + Bucket: e.Bucket, + Region: e.Region, + Key: e.Key, + qs: { uploadId: r }, + body: l, + headers: d, + tracker: a, + }, + function (r, o) { + if (r) return a && a.parent && a.parent.setParams({ errorNode: 'multipartComplete' }), t(r); + var s = u({ + ForcePathStyle: n.options.ForcePathStyle, + protocol: n.options.Protocol, + domain: n.options.Domain, + bucket: e.Bucket, + region: e.Region, + object: e.Key, + isLocation: !0, + }), + c = o.CompleteMultipartUploadResult || {}; + c.ProcessResults && + c && + c.ProcessResults && + ((c.UploadResult = { + OriginalInfo: { Key: c.Key, Location: s, ETag: c.ETag, ImageInfo: c.ImageInfo }, + ProcessResults: c.ProcessResults, + }), + delete c.ImageInfo, + delete c.ProcessResults); + var l = i.extend(c, { Location: s, statusCode: o.statusCode, headers: o.headers }); + t(null, l); + }, + ); + }, + multipartList: function (e, t) { + var n = {}; + (n.delimiter = e.Delimiter), + (n['encoding-type'] = e.EncodingType), + (n.prefix = e.Prefix || ''), + (n['max-uploads'] = e.MaxUploads), + (n['key-marker'] = e.KeyMarker), + (n['upload-id-marker'] = e.UploadIdMarker), + (n = i.clearKey(n)); + var r = e.tracker; + r && r.setParams({ signStartTime: new Date().getTime() }), + f.call( + this, + { + Action: 'name/cos:ListMultipartUploads', + ResourceKey: n.prefix, + method: 'GET', + Bucket: e.Bucket, + Region: e.Region, + headers: e.Headers, + qs: n, + action: 'uploads', + tracker: r, + }, + function (e, n) { + if (e) return r && r.parent && r.parent.setParams({ errorNode: 'multipartList' }), t(e); + if (n && n.ListMultipartUploadsResult) { + var o = n.ListMultipartUploadsResult.Upload || []; + (o = i.isArray(o) ? o : [o]), (n.ListMultipartUploadsResult.Upload = o); + } + var a = i.clone(n.ListMultipartUploadsResult || {}); + i.extend(a, { statusCode: n.statusCode, headers: n.headers }), t(null, a); + }, + ); + }, + multipartListPart: function (e, t) { + var n = {}, + r = e.tracker; + (n.uploadId = e.UploadId), + (n['encoding-type'] = e.EncodingType), + (n['max-parts'] = e.MaxParts), + (n['part-number-marker'] = e.PartNumberMarker), + f.call( + this, + { + Action: 'name/cos:ListParts', + method: 'GET', + Bucket: e.Bucket, + Region: e.Region, + Key: e.Key, + headers: e.Headers, + qs: n, + }, + function (e, n) { + if (e) return r && r.parent && r.parent.setParams({ errorNode: 'multipartListPart' }), t(e); + var o = n.ListPartsResult || {}, + a = o.Part || []; + (a = i.isArray(a) ? a : [a]), (o.Part = a); + var s = i.clone(o); + i.extend(s, { statusCode: n.statusCode, headers: n.headers }), t(null, s); + }, + ); + }, + multipartAbort: function (e, t) { + var n = {}; + (n.uploadId = e.UploadId), + f.call( + this, + { + Action: 'name/cos:AbortMultipartUpload', + method: 'DELETE', + Bucket: e.Bucket, + Region: e.Region, + Key: e.Key, + headers: e.Headers, + qs: n, + }, + function (e, n) { + if (e) return t(e); + t(null, { statusCode: n.statusCode, headers: n.headers }); + }, + ); + }, + request: function (e, t) { + f.call( + this, + { + method: e.Method, + Bucket: e.Bucket, + Region: e.Region, + Key: e.Key, + action: e.Action, + headers: e.Headers, + qs: e.Query, + body: e.Body, + Url: e.Url, + rawBody: e.RawBody, + DataType: e.DataType, + }, + function (e, n) { + if (e) return t(e); + n && n.body && ((n.Body = n.body), delete n.body), t(e, n); + }, + ); + }, + getObjectUrl: function (e, t) { + var n = this, + r = void 0 === e.UseAccelerate ? n.options.UseAccelerate : e.UseAccelerate, + o = u({ + ForcePathStyle: n.options.ForcePathStyle, + protocol: e.Protocol || n.options.Protocol, + domain: e.Domain || n.options.Domain, + bucket: e.Bucket, + region: r ? 'accelerate' : e.Region, + object: e.Key, + }), + a = ''; + e.Query && (a += i.obj2str(e.Query)), e.QueryString && (a += (a ? '&' : '') + e.QueryString); + var s = o; + if (void 0 !== e.Sign && !e.Sign) return a && (s += '?' + a), t(null, { Url: s }), s; + var c = l.call(this, { Bucket: e.Bucket, Region: e.Region, UseAccelerate: e.UseAccelerate, Url: o }), + p = d.call( + this, + { + Action: 'PUT' === (e.Method || '').toUpperCase() ? 'name/cos:PutObject' : 'name/cos:GetObject', + Bucket: e.Bucket || '', + Region: e.Region || '', + Method: e.Method || 'get', + Key: e.Key, + Expires: e.Expires, + Headers: e.Headers, + Query: e.Query, + SignHost: c, + ForceSignHost: !1 !== e.ForceSignHost && n.options.ForceSignHost, + }, + function (e, n) { + if (t) + if (e) t(e); + else { + var r = o; + (r += + '?' + + (n.Authorization.indexOf('q-signature') > -1 + ? (function (e) { + var t = e.match(/q-url-param-list.*?(?=&)/g)[0], + n = + 'q-url-param-list=' + + encodeURIComponent(t.replace(/q-url-param-list=/, '')).toLowerCase(), + r = new RegExp(t, 'g'); + return e.replace(r, n); + })(n.Authorization) + : 'sign=' + encodeURIComponent(n.Authorization))), + n.SecurityToken && (r += '&x-cos-security-token=' + n.SecurityToken), + n.ClientIP && (r += '&clientIP=' + n.ClientIP), + n.ClientUA && (r += '&clientUA=' + n.ClientUA), + n.Token && (r += '&token=' + n.Token), + a && (r += '&' + a), + setTimeout(function () { + t(null, { Url: r }); + }); + } + }, + ); + return ( + p + ? ((s += '?' + p.Authorization + (p.SecurityToken ? '&x-cos-security-token=' + p.SecurityToken : '')), + a && (s += '&' + a)) + : a && (s += '?' + a), + s + ); + }, + getAuth: function (e) { + return i.getAuth({ + SecretId: e.SecretId || this.options.SecretId || '', + SecretKey: e.SecretKey || this.options.SecretKey || '', + Bucket: e.Bucket, + Region: e.Region, + Method: e.Method, + Key: e.Key, + Query: e.Query, + Headers: e.Headers, + Expires: e.Expires, + UseRawKey: this.options.UseRawKey, + SystemClockOffset: this.options.SystemClockOffset, + }); + }, + }; + e.exports.init = function (e, t) { + t.transferToTaskMethod(m, 'putObject'), + i.each(m, function (t, n) { + (e.prototype[n] = i.apiWrapper(n, t)), + (function (e, t, n) { + i.each(['Cors', 'Acl'], function (r) { + if (e.slice(-r.length) === r) { + var o = e.slice(0, -r.length) + r.toUpperCase(), + a = i.apiWrapper(e, t); + n[o] = function () { + a.apply(this, arguments); + }; + } + }); + })(n, t, e.prototype); + }); + }; + }, + function (e, t, n) { + var r = n(0), + o = function (e) { + switch (r(e)) { + case 'string': + return e; + case 'boolean': + return e ? 'true' : 'false'; + case 'number': + return isFinite(e) ? e : ''; + default: + return ''; + } + }, + i = function (e, t, n) { + var r = {}; + return ( + t + .getAllResponseHeaders() + .trim() + .split('\n') + .forEach(function (e) { + if (e) { + var t = e.indexOf(':'), + n = e.substr(0, t).trim().toLowerCase(), + o = e.substr(t + 1).trim(); + r[n] = o; + } + }), + { error: e, statusCode: t.status, statusMessage: t.statusText, headers: r, body: n } + ); + }, + a = function (e, t) { + return t || 'text' !== t ? e.response : e.responseText; + }; + e.exports = function (e, t) { + var n, + s, + c, + u, + l = (e.method || 'GET').toUpperCase(), + d = e.url; + if (e.qs) { + var p = + ((n = e.qs), + (s = s || '&'), + (c = c || '='), + null === n && (n = void 0), + 'object' === r(n) + ? Object.keys(n) + .map(function (e) { + var t = encodeURIComponent(o(e)) + c; + return Array.isArray(n[e]) + ? n[e] + .map(function (e) { + return t + encodeURIComponent(o(e)); + }) + .join(s) + : t + encodeURIComponent(o(n[e])); + }) + .filter(Boolean) + .join(s) + : u + ? encodeURIComponent(o(u)) + c + encodeURIComponent(o(n)) + : ''); + p && (d += (-1 === d.indexOf('?') ? '?' : '&') + p); + } + var f = new XMLHttpRequest(); + if ((f.open(l, d, !0), (f.responseType = e.dataType || 'text'), e.xhrFields)) + for (var h in e.xhrFields) f[h] = e.xhrFields[h]; + var m = e.headers; + if (m) + for (var g in m) + m.hasOwnProperty(g) && + 'content-length' !== g.toLowerCase() && + 'user-agent' !== g.toLowerCase() && + 'origin' !== g.toLowerCase() && + 'host' !== g.toLowerCase() && + f.setRequestHeader(g, m[g]); + return ( + e.onProgress && f.upload && (f.upload.onprogress = e.onProgress), + e.onDownloadProgress && (f.onprogress = e.onDownloadProgress), + e.timeout && (f.timeout = e.timeout), + (f.ontimeout = function (e) { + var n = new Error('timeout'); + t(i(n, f)); + }), + (f.onload = function () { + t(i(null, f, a(f, e.dataType))); + }), + (f.onerror = function (n) { + var r = a(f, e.dataType); + if (r) t(i(null, f, r)); + else { + var o = f.statusText; + o || 0 !== f.status || (o = new Error('CORS blocked or network error')), t(i(o, f, r)); + } + }), + f.send(e.body || ''), + f + ); + }; + }, + function (e, t, n) { + var r = n(0), + o = n(9), + i = n(30), + a = n(8).EventProxy, + s = n(1), + c = n(6); + function u(e, t) { + var n = e.TaskId, + r = e.Bucket, + c = e.Region, + u = e.Key, + p = e.StorageClass, + f = this, + h = {}, + m = e.FileSize, + g = e.SliceSize, + y = Math.ceil(m / g), + v = 0, + C = s.throttleOnProgress.call(f, m, e.onHashProgress), + k = function (t, n) { + var r = t.length; + if (0 === r) return n(null, !0); + if (r > y) return n(null, !1); + if (r > 1 && Math.max(t[0].Size, t[1].Size) !== g) return n(null, !1); + !(function o(i) { + if (i < r) { + var a = t[i]; + !(function (t, n) { + var r = g * (t - 1), + o = Math.min(r + g, m), + i = o - r; + h[t] + ? n(null, { PartNumber: t, ETag: h[t], Size: i }) + : s.fileSlice(e.Body, r, o, !1, function (e) { + s.getFileMd5(e, function (e, r) { + if (e) return n(s.error(e)); + var o = '"' + r + '"'; + (h[t] = o), + 1, + C({ loaded: (v += i), total: m }), + n(null, { PartNumber: t, ETag: o, Size: i }); + }); + }); + })(a.PartNumber, function (e, t) { + t && t.ETag === a.ETag && t.Size === a.Size ? o(i + 1) : n(null, !1); + }); + } else n(null, !0); + })(0); + }, + S = new a(); + S.on('error', function (e) { + if (f._isRunningTask(n)) return t(e); + }), + S.on('upload_id_available', function (e) { + var n = {}, + r = []; + s.each(e.PartList, function (e) { + n[e.PartNumber] = e; + }); + for (var o = 1; o <= y; o++) { + var i = n[o]; + i ? ((i.PartNumber = o), (i.Uploaded = !0)) : (i = { PartNumber: o, ETag: null, Uploaded: !1 }), + r.push(i); + } + (e.PartList = r), t(null, e); + }), + S.on('no_available_upload_id', function () { + if (f._isRunningTask(n)) { + var o = s.extend( + { + Bucket: r, + Region: c, + Key: u, + Query: s.clone(e.Query), + StorageClass: p, + Body: e.Body, + calledBySdk: 'sliceUploadFile', + tracker: e.tracker, + }, + e, + ), + i = s.clone(e.Headers); + delete i['x-cos-mime-limit'], + (o.Headers = i), + f.multipartInit(o, function (e, r) { + if (f._isRunningTask(n)) { + if (e) return S.emit('error', e); + var o = r.UploadId; + if (!o) return t(s.error(new Error('no such upload id'))); + S.emit('upload_id_available', { UploadId: o, PartList: [] }); + } + }); + } + }), + S.on('has_and_check_upload_id', function (t) { + (t = t.reverse()), + i.eachLimit( + t, + 1, + function (t, i) { + f._isRunningTask(n) && + (o.using[t] + ? i() + : d.call(f, { Bucket: r, Region: c, Key: u, UploadId: t, tracker: e.tracker }, function (e, r) { + if (f._isRunningTask(n)) { + if (e) return o.removeUsing(t), S.emit('error', e); + var a = r.PartList; + a.forEach(function (e) { + (e.PartNumber *= 1), (e.Size *= 1), (e.ETag = e.ETag || ''); + }), + k(a, function (e, r) { + if (f._isRunningTask(n)) + return e ? S.emit('error', e) : void (r ? i({ UploadId: t, PartList: a }) : i()); + }); + } + })); + }, + function (e) { + f._isRunningTask(n) && + (C(null, !0), + e && e.UploadId ? S.emit('upload_id_available', e) : S.emit('no_available_upload_id')); + }, + ); + }), + S.on('seek_local_avail_upload_id', function (t) { + var i = o.getFileId(e.Body, e.ChunkSize, r, u), + a = o.getUploadIdList.call(f, i); + if (i && a) { + !(function i(l) { + if (l >= a.length) S.emit('has_and_check_upload_id', t); + else { + var p = a[l]; + if (!s.isInArray(t, p)) return o.removeUploadId.call(f, p), void i(l + 1); + o.using[p] + ? i(l + 1) + : d.call(f, { Bucket: r, Region: c, Key: u, UploadId: p, tracker: e.tracker }, function (e, t) { + f._isRunningTask(n) && + (e + ? (o.removeUploadId.call(f, p), i(l + 1)) + : S.emit('upload_id_available', { UploadId: p, PartList: t.PartList })); + }); + } + })(0); + } else S.emit('has_and_check_upload_id', t); + }), + S.on('get_remote_upload_id_list', function () { + l.call(f, { Bucket: r, Region: c, Key: u, tracker: e.tracker }, function (t, i) { + if (f._isRunningTask(n)) { + if (t) return S.emit('error', t); + var a = s + .filter(i.UploadList, function (e) { + return e.Key === u && (!p || e.StorageClass.toUpperCase() === p.toUpperCase()); + }) + .reverse() + .map(function (e) { + return e.UploadId || e.UploadID; + }); + if (a.length) S.emit('seek_local_avail_upload_id', a); + else { + var c, + l = o.getFileId(e.Body, e.ChunkSize, r, u); + l && + (c = o.getUploadIdList.call(f, l)) && + s.each(c, function (e) { + o.removeUploadId.call(f, e); + }), + S.emit('no_available_upload_id'); + } + } + }); + }), + S.emit('get_remote_upload_id_list'); + } + function l(e, t) { + var n = this, + r = [], + o = { + Bucket: e.Bucket, + Region: e.Region, + Prefix: e.Key, + calledBySdk: e.calledBySdk || 'sliceUploadFile', + tracker: e.tracker, + }; + !(function e() { + n.multipartList(o, function (n, i) { + if (n) return t(n); + r.push.apply(r, i.Upload || []), + 'true' === i.IsTruncated + ? ((o.KeyMarker = i.NextKeyMarker), (o.UploadIdMarker = i.NextUploadIdMarker), e()) + : t(null, { UploadList: r }); + }); + })(); + } + function d(e, t) { + var n = this, + r = [], + o = { + Bucket: e.Bucket, + Region: e.Region, + Key: e.Key, + UploadId: e.UploadId, + calledBySdk: 'sliceUploadFile', + tracker: e.tracker, + }; + !(function e() { + n.multipartListPart(o, function (n, i) { + if (n) return t(n); + r.push.apply(r, i.Part || []), + 'true' === i.IsTruncated + ? ((o.PartNumberMarker = i.NextPartNumberMarker), e()) + : t(null, { PartList: r }); + }); + })(); + } + function p(e, t) { + var n = this, + r = e.TaskId, + o = e.Bucket, + a = e.Region, + c = e.Key, + u = e.UploadData, + l = e.FileSize, + d = e.SliceSize, + p = Math.min(e.AsyncLimit || n.options.ChunkParallelLimit || 1, 256), + h = e.Body, + m = Math.ceil(l / d), + g = 0, + y = e.ServerSideEncryption, + v = e.Headers, + C = s.filter(u.PartList, function (e) { + return e.Uploaded && (g += (e.PartNumber >= m && l % d) || d), !e.Uploaded; + }), + k = e.onProgress; + i.eachLimit( + C, + p, + function (t, i) { + if (n._isRunningTask(r)) { + var s = t.PartNumber, + p = Math.min(l, t.PartNumber * d) - (t.PartNumber - 1) * d, + m = 0; + f.call( + n, + { + TaskId: r, + Bucket: o, + Region: a, + Key: c, + SliceSize: d, + FileSize: l, + PartNumber: s, + ServerSideEncryption: y, + Body: h, + UploadData: u, + Headers: v, + onProgress: function (e) { + (g += e.loaded - m), (m = e.loaded), k({ loaded: g, total: l }); + }, + tracker: e.tracker, + }, + function (e, o) { + n._isRunningTask(r) && + (e || + o.ETag || + (e = + 'get ETag error, please add "ETag" to CORS ExposeHeader setting.( 获取ETag失败,请在CORS ExposeHeader设置中添加ETag,请参考文档:https://cloud.tencent.com/document/product/436/13318 )'), + e ? (g -= m) : ((g += p - m), (t.ETag = o.ETag)), + k({ loaded: g, total: l }), + i(e || null, o)); + }, + ); + } + }, + function (e) { + if (n._isRunningTask(r)) return e ? t(e) : void t(null, { UploadId: u.UploadId, SliceList: u.PartList }); + }, + ); + } + function f(e, t) { + var n = this, + r = e.TaskId, + o = e.Bucket, + a = e.Region, + c = e.Key, + u = e.FileSize, + l = e.Body, + d = 1 * e.PartNumber, + p = e.SliceSize, + f = e.ServerSideEncryption, + h = e.UploadData, + m = e.Headers || {}, + g = n.options.ChunkRetryTimes + 1, + y = p * (d - 1), + v = p, + C = y + p; + C > u && (v = (C = u) - y); + var k = ['x-cos-traffic-limit', 'x-cos-mime-limit'], + S = {}; + s.each(m, function (e, t) { + k.indexOf(t) > -1 && (S[t] = e); + }); + var b = h.PartList[d - 1]; + i.retry( + g, + function (t) { + n._isRunningTask(r) && + s.fileSlice(l, y, C, !0, function (i) { + n.multipartUpload( + { + TaskId: r, + Bucket: o, + Region: a, + Key: c, + ContentLength: v, + PartNumber: d, + UploadId: h.UploadId, + ServerSideEncryption: f, + Body: i, + Headers: S, + onProgress: e.onProgress, + calledBySdk: 'sliceUploadFile', + tracker: e.tracker, + }, + function (e, o) { + if (n._isRunningTask(r)) return e ? t(e) : ((b.Uploaded = !0), t(null, o)); + }, + ); + }); + }, + function (e, o) { + if (n._isRunningTask(r)) return t(e, o); + }, + ); + } + function h(e, t) { + var n = e.Bucket, + r = e.Region, + o = e.Key, + a = e.UploadId, + s = e.SliceList, + c = this, + u = this.options.ChunkRetryTimes + 1, + l = e.Headers, + d = s.map(function (e) { + return { PartNumber: e.PartNumber, ETag: e.ETag }; + }); + i.retry( + u, + function (t) { + c.multipartComplete( + { + Bucket: n, + Region: r, + Key: o, + UploadId: a, + Parts: d, + Headers: l, + calledBySdk: 'sliceUploadFile', + tracker: e.tracker, + }, + t, + ); + }, + function (e, n) { + t(e, n); + }, + ); + } + function m(e, t) { + var n = e.Bucket, + r = e.Region, + o = e.Key, + a = e.AbortArray, + s = e.AsyncLimit || 1, + c = this, + u = 0, + l = new Array(a.length); + i.eachLimit( + a, + s, + function (t, i) { + var a = u; + if (o && o !== t.Key) return (l[a] = { error: { KeyNotMatch: !0 } }), void i(null); + var s = t.UploadId || t.UploadID; + c.multipartAbort({ Bucket: n, Region: r, Key: t.Key, Headers: e.Headers, UploadId: s }, function (e) { + var o = { Bucket: n, Region: r, Key: t.Key, UploadId: s }; + (l[a] = { error: e, task: o }), i(null); + }), + u++; + }, + function (e) { + if (e) return t(e); + for (var n = [], r = [], o = 0, i = l.length; o < i; o++) { + var a = l[o]; + a.task && (a.error ? r.push(a.task) : n.push(a.task)); + } + return t(null, { successList: n, errorList: r }); + }, + ); + } + function g(e, t) { + var n = e.TaskId, + r = e.Bucket, + o = e.Region, + a = e.Key, + s = e.CopySource, + c = e.UploadId, + u = 1 * e.PartNumber, + l = e.CopySourceRange, + d = this.options.ChunkRetryTimes + 1, + p = this; + i.retry( + d, + function (e) { + p.uploadPartCopy( + { + TaskId: n, + Bucket: r, + Region: o, + Key: a, + CopySource: s, + UploadId: c, + PartNumber: u, + CopySourceRange: l, + }, + function (t, n) { + e(t || null, n); + }, + ); + }, + function (e, n) { + return t(e, n); + }, + ); + } + var y = { + sliceUploadFile: function (e, t) { + var n, + r, + i = this, + c = new a(), + l = e.TaskId, + d = e.Bucket, + f = e.Region, + m = e.Key, + g = e.Body, + y = e.ChunkSize || e.SliceSize || i.options.ChunkSize, + v = e.AsyncLimit, + C = e.StorageClass, + k = e.ServerSideEncryption, + S = e.onHashProgress, + b = e.tracker; + b && b.setParams({ chunkSize: y }), + c.on('error', function (n) { + if (i._isRunningTask(l)) return (n.UploadId = e.UploadData.UploadId || ''), t(n); + }), + c.on('upload_complete', function (n) { + var r = s.extend({ UploadId: e.UploadData.UploadId || '' }, n); + t(null, r); + }), + c.on('upload_slice_complete', function (t) { + var a = {}; + s.each(e.Headers, function (e, t) { + var n = t.toLowerCase(); + (0 !== n.indexOf('x-cos-meta-') && 'pic-operations' !== n) || (a[t] = e); + }), + h.call( + i, + { + Bucket: d, + Region: f, + Key: m, + UploadId: t.UploadId, + SliceList: t.SliceList, + Headers: a, + tracker: b, + }, + function (e, a) { + if (i._isRunningTask(l)) { + if ((o.removeUsing(t.UploadId), e)) return r(null, !0), c.emit('error', e); + o.removeUploadId.call(i, t.UploadId), + r({ loaded: n, total: n }, !0), + c.emit('upload_complete', a); + } + }, + ); + }), + c.on('get_upload_data_finish', function (t) { + var a = o.getFileId(g, e.ChunkSize, d, m); + a && o.saveUploadId.call(i, a, t.UploadId, i.options.UploadIdCacheLimit), + o.setUsing(t.UploadId), + r(null, !0), + p.call( + i, + { + TaskId: l, + Bucket: d, + Region: f, + Key: m, + Body: g, + FileSize: n, + SliceSize: y, + AsyncLimit: v, + ServerSideEncryption: k, + UploadData: t, + Headers: e.Headers, + onProgress: r, + tracker: b, + }, + function (e, t) { + if (i._isRunningTask(l)) + return e ? (r(null, !0), c.emit('error', e)) : void c.emit('upload_slice_complete', t); + }, + ); + }), + c.on('get_file_size_finish', function () { + if (((r = s.throttleOnProgress.call(i, n, e.onProgress)), e.UploadData.UploadId)) + c.emit('get_upload_data_finish', e.UploadData); + else { + var t = s.extend( + { + TaskId: l, + Bucket: d, + Region: f, + Key: m, + Headers: e.Headers, + StorageClass: C, + Body: g, + FileSize: n, + SliceSize: y, + onHashProgress: S, + tracker: b, + }, + e, + ); + u.call(i, t, function (t, n) { + if (i._isRunningTask(l)) { + if (t) return c.emit('error', t); + (e.UploadData.UploadId = n.UploadId), + (e.UploadData.PartList = n.PartList), + c.emit('get_upload_data_finish', e.UploadData); + } + }); + } + }), + (n = e.ContentLength), + delete e.ContentLength, + !e.Headers && (e.Headers = {}), + s.each(e.Headers, function (t, n) { + 'content-length' === n.toLowerCase() && delete e.Headers[n]; + }), + (function () { + for ( + var t = [1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 5120], r = 1048576, o = 0; + o < t.length && !(n / (r = 1024 * t[o] * 1024) <= i.options.MaxPartNumber); + o++ + ); + e.ChunkSize = e.SliceSize = y = Math.max(y, r); + })(), + 0 === n + ? ((e.Body = ''), (e.ContentLength = 0), (e.SkipTask = !0), i.putObject(e, t)) + : c.emit('get_file_size_finish'); + }, + abortUploadTask: function (e, t) { + var n = e.Bucket, + r = e.Region, + o = e.Key, + i = e.UploadId, + c = e.Level || 'task', + u = e.AsyncLimit, + d = this, + p = new a(); + if ( + (p.on('error', function (e) { + return t(e); + }), + p.on('get_abort_array', function (i) { + m.call(d, { Bucket: n, Region: r, Key: o, Headers: e.Headers, AsyncLimit: u, AbortArray: i }, t); + }), + 'bucket' === c) + ) + l.call(d, { Bucket: n, Region: r, calledBySdk: 'abortUploadTask' }, function (e, n) { + if (e) return t(e); + p.emit('get_abort_array', n.UploadList || []); + }); + else if ('file' === c) { + if (!o) return t(s.error(new Error('abort_upload_task_no_key'))); + l.call(d, { Bucket: n, Region: r, Key: o, calledBySdk: 'abortUploadTask' }, function (e, n) { + if (e) return t(e); + p.emit('get_abort_array', n.UploadList || []); + }); + } else { + if ('task' !== c) return t(s.error(new Error('abort_unknown_level'))); + if (!i) return t(s.error(new Error('abort_upload_task_no_id'))); + if (!o) return t(s.error(new Error('abort_upload_task_no_key'))); + p.emit('get_abort_array', [{ Key: o, UploadId: i }]); + } + }, + uploadFile: function (e, t) { + var n = this, + o = void 0 === e.SliceSize ? n.options.SliceSize : e.SliceSize, + i = [], + a = e.Body, + u = a.size || a.length || 0, + l = { TaskId: '' }; + if (n.options.EnableTracker) { + var d = + n.options.UseAccelerate || + ('string' == typeof n.options.Domain && n.options.Domain.includes('accelerate.')); + e.tracker = new c({ + bucket: e.Bucket, + region: e.Region, + apiName: 'uploadFile', + fileKey: e.Key, + fileSize: u, + accelerate: d, + deepTracker: n.options.DeepTracker, + customId: n.options.CustomId, + delay: n.options.TrackerDelay, + }); + } + s.each(e, function (e, t) { + 'object' !== r(e) && 'function' != typeof e && (l[t] = e); + }); + var p = e.onTaskReady; + e.onTaskReady = function (e) { + (l.TaskId = e), p && p(e); + }; + var f = u > o ? 'sliceUploadFile' : 'putObject', + h = e.onFileFinish; + i.push({ + api: f, + params: e, + callback: function (n, r) { + e.tracker && e.tracker.formatResult(n, r), h && h(n, r, l), t && t(n, r); + }, + }), + n._addTasks(i); + }, + uploadFiles: function (e, t) { + var n = this, + o = void 0 === e.SliceSize ? n.options.SliceSize : e.SliceSize, + i = 0, + a = 0, + u = s.throttleOnProgress.call(n, a, e.onProgress), + l = e.files.length, + d = e.onFileFinish, + p = Array(l), + f = function (e, n, r) { + u(null, !0), + d && d(e, n, r), + (p[r.Index] = { options: r, error: e, data: n }), + --l <= 0 && t && t(null, { files: p }); + }, + h = []; + s.each(e.files, function (e, t) { + !(function () { + var l = e.Body, + d = l.size || l.length || 0, + p = { Index: t, TaskId: '' }; + if ( + (!n.options.UseRawKey && e.Key && '/' === e.Key.substr(0, 1) && (e.Key = e.Key.substr(1)), + (i += d), + n.options.EnableTracker) + ) { + var m = + n.options.UseAccelerate || + ('string' == typeof n.options.Domain && n.options.Domain.includes('accelerate.')); + e.tracker = new c({ + bucket: e.Bucket, + region: e.Region, + apiName: 'uploadFiles', + fileKey: e.Key, + fileSize: d, + accelerate: m, + deepTracker: n.options.DeepTracker, + customId: n.options.CustomId, + delay: n.options.TrackerDelay, + }); + } + s.each(e, function (e, t) { + 'object' !== r(e) && 'function' != typeof e && (p[t] = e); + }); + var g = e.onTaskReady; + e.onTaskReady = function (e) { + (p.TaskId = e), g && g(e); + }; + var y = 0, + v = e.onProgress; + e.onProgress = function (e) { + (a = a - y + e.loaded), (y = e.loaded), v && v(e), u({ loaded: a, total: i }); + }; + var C = d > o ? 'sliceUploadFile' : 'putObject', + k = e.onFileFinish; + h.push({ + api: C, + params: e, + callback: function (t, n) { + e.tracker && e.tracker.formatResult(t, n), k && k(t, n), f && f(t, n, p); + }, + }); + })(); + }), + n._addTasks(h); + }, + sliceCopyFile: function (e, t) { + var n = new a(), + r = this, + c = e.Bucket, + u = e.Region, + l = e.Key, + p = e.CopySource, + f = s.getSourceParams.call(this, p); + if (f) { + var h = f.Bucket, + m = f.Region, + y = decodeURIComponent(f.Key), + v = void 0 === e.CopySliceSize ? r.options.CopySliceSize : e.CopySliceSize; + v = Math.max(0, v); + var C, + k, + S = e.CopyChunkSize || this.options.CopyChunkSize, + b = this.options.CopyChunkParallelLimit, + T = this.options.ChunkRetryTimes + 1, + R = 0, + E = 0, + w = {}, + A = {}, + x = {}; + n.on('copy_slice_complete', function (n) { + var a = {}; + s.each(e.Headers, function (e, t) { + 0 === t.toLowerCase().indexOf('x-cos-meta-') && (a[t] = e); + }); + var d = s.map(n.PartList, function (e) { + return { PartNumber: e.PartNumber, ETag: e.ETag }; + }); + i.retry( + T, + function (e) { + r.multipartComplete( + { Bucket: c, Region: u, Key: l, UploadId: n.UploadId, Parts: d, calledBySdk: 'sliceCopyFile' }, + e, + ); + }, + function (e, r) { + if ((o.removeUsing(n.UploadId), e)) return k(null, !0), t(e); + o.removeUploadId(n.UploadId), k({ loaded: C, total: C }, !0), t(null, r); + }, + ); + }), + n.on('get_copy_data_finish', function (e) { + var a = o.getCopyFileId(p, w, S, c, l); + a && o.saveUploadId(a, e.UploadId, r.options.UploadIdCacheLimit), o.setUsing(e.UploadId); + var d = s.filter(e.PartList, function (e) { + return e.Uploaded && (E += (e.PartNumber >= R && C % S) || S), !e.Uploaded; + }); + i.eachLimit( + d, + b, + function (t, n) { + var o = t.PartNumber, + a = t.CopySourceRange, + s = t.end - t.start; + i.retry( + T, + function (t) { + g.call( + r, + { + Bucket: c, + Region: u, + Key: l, + CopySource: p, + UploadId: e.UploadId, + PartNumber: o, + CopySourceRange: a, + }, + t, + ); + }, + function (e, r) { + if (e) return n(e); + k({ loaded: (E += s), total: C }), (t.ETag = r.ETag), n(e || null, r); + }, + ); + }, + function (r) { + if (r) return o.removeUsing(e.UploadId), k(null, !0), t(r); + n.emit('copy_slice_complete', e); + }, + ); + }), + n.on('get_chunk_size_finish', function () { + var i = function () { + r.multipartInit({ Bucket: c, Region: u, Key: l, Headers: x }, function (r, o) { + if (r) return t(r); + (e.UploadId = o.UploadId), + n.emit('get_copy_data_finish', { UploadId: e.UploadId, PartList: e.PartList }); + }); + }, + a = o.getCopyFileId(p, w, S, c, l), + f = o.getUploadIdList(a); + if (!a || !f) return i(); + !(function t(a) { + if (a >= f.length) return i(); + var p = f[a]; + if (o.using[p]) return t(a + 1); + d.call(r, { Bucket: c, Region: u, Key: l, UploadId: p }, function (r, i) { + if (r) o.removeUploadId(p), t(a + 1); + else { + if (o.using[p]) return t(a + 1); + var c = {}, + u = 0; + s.each(i.PartList, function (e) { + var t = parseInt(e.Size), + n = u + t - 1; + (c[e.PartNumber + '|' + u + '|' + n] = e.ETag), (u += t); + }), + s.each(e.PartList, function (e) { + var t = c[e.PartNumber + '|' + e.start + '|' + e.end]; + t && ((e.ETag = t), (e.Uploaded = !0)); + }), + n.emit('get_copy_data_finish', { UploadId: p, PartList: e.PartList }); + } + }); + })(0); + }), + n.on('get_file_size_finish', function () { + if ( + ((function () { + for ( + var t = [1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 5120], n = 1048576, o = 0; + o < t.length && !(C / (n = 1024 * t[o] * 1024) <= r.options.MaxPartNumber); + o++ + ); + (e.ChunkSize = S = Math.max(S, n)), (R = Math.ceil(C / S)); + for (var i = [], a = 1; a <= R; a++) { + var s = (a - 1) * S, + c = a * S < C ? a * S - 1 : C - 1, + u = { PartNumber: a, start: s, end: c, CopySourceRange: 'bytes=' + s + '-' + c }; + i.push(u); + } + e.PartList = i; + })(), + ((x = 'Replaced' === e.Headers['x-cos-metadata-directive'] ? e.Headers : A)['x-cos-storage-class'] = + e.Headers['x-cos-storage-class'] || A['x-cos-storage-class']), + (x = s.clearKey(x)), + 'ARCHIVE' === A['x-cos-storage-class'] || 'DEEP_ARCHIVE' === A['x-cos-storage-class']) + ) { + var o = A['x-cos-restore']; + if (!o || 'ongoing-request="true"' === o) + return void t(s.error(new Error('Unrestored archive object is not allowed to be copied'))); + } + delete x['x-cos-copy-source'], + delete x['x-cos-metadata-directive'], + delete x['x-cos-copy-source-If-Modified-Since'], + delete x['x-cos-copy-source-If-Unmodified-Since'], + delete x['x-cos-copy-source-If-Match'], + delete x['x-cos-copy-source-If-None-Match'], + n.emit('get_chunk_size_finish'); + }), + r.headObject({ Bucket: h, Region: m, Key: y }, function (o, i) { + if (o) o.statusCode && 404 === o.statusCode ? t(s.error(o, { ErrorStatus: y + ' Not Exist' })) : t(o); + else if (void 0 !== (C = e.FileSize = i.headers['content-length']) && C) + if (((k = s.throttleOnProgress.call(r, C, e.onProgress)), C <= v)) + e.Headers['x-cos-metadata-directive'] || (e.Headers['x-cos-metadata-directive'] = 'Copy'), + r.putObjectCopy(e, function (e, n) { + if (e) return k(null, !0), t(e); + k({ loaded: C, total: C }, !0), t(e, n); + }); + else { + var a = i.headers; + (w = a), + (A = { + 'Cache-Control': a['cache-control'], + 'Content-Disposition': a['content-disposition'], + 'Content-Encoding': a['content-encoding'], + 'Content-Type': a['content-type'], + Expires: a.expires, + 'x-cos-storage-class': a['x-cos-storage-class'], + }), + s.each(a, function (e, t) { + var n = 'x-cos-meta-'; + 0 === t.indexOf(n) && t.length > 11 && (A[t] = e); + }), + n.emit('get_file_size_finish'); + } + else + t( + s.error( + new Error( + 'get Content-Length error, please add "Content-Length" to CORS ExposeHeader setting.( 获取Content-Length失败,请在CORS ExposeHeader设置中添加Content-Length,请参考文档:https://cloud.tencent.com/document/product/436/13318 )', + ), + ), + ); + }); + } else t(s.error(new Error('CopySource format error'))); + }, + }; + e.exports.init = function (e, t) { + t.transferToTaskMethod(y, 'sliceUploadFile'), + s.each(y, function (t, n) { + e.prototype[n] = s.apiWrapper(n, t); + }); + }; + }, + function (e, t) { + var n = { + eachLimit: function (e, t, n, r) { + if (((r = r || function () {}), !e.length || t <= 0)) return r(); + var o = 0, + i = 0, + a = 0; + !(function s() { + if (o >= e.length) return r(); + for (; a < t && i < e.length; ) + (a += 1), + n(e[(i += 1) - 1], function (t) { + t ? (r(t), (r = function () {})) : ((a -= 1), (o += 1) >= e.length ? r() : s()); + }); + })(); + }, + retry: function (e, t, n) { + e < 1 + ? n() + : (function r(o) { + t(function (t, i) { + t && o < e ? r(o + 1) : n(t, i); + }); + })(1); + }, + }; + e.exports = n; + }, + ]); +}); diff --git a/package.json b/package.json index fb90ddf..0fc55b3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cos-js-sdk-v5", - "version": "1.4.19", + "version": "1.4.20", "description": "JavaScript SDK for [腾讯云对象存储](https://cloud.tencent.com/product/cos)", "main": "dist/cos-js-sdk-v5.js", "types": "index.d.ts", diff --git a/src/advance.js b/src/advance.js index 6456079..f365504 100644 --- a/src/advance.js +++ b/src/advance.js @@ -1003,6 +1003,11 @@ function uploadFiles(params, callback) { var FileSize = Body.size || Body.length || 0; var fileInfo = { Index: index, TaskId: '' }; + // 如果 批量上传的 Key 是 / 开头,强制去掉第一个 / + if (!self.options.UseRawKey && fileParams.Key && fileParams.Key.substr(0, 1) === '/') { + fileParams.Key = fileParams.Key.substr(1); + } + // 更新文件总大小 TotalSize += FileSize; From ca3b5d027a7b7c9b972c0e7c6ffd87c0a55d15eb Mon Sep 17 00:00:00 2001 From: chrisftian Date: Mon, 9 Oct 2023 17:57:05 +0800 Subject: [PATCH 06/11] dev/demo (merge request !19) Squash merge branch 'dev/demo' into 'master' Merge remote-tracking branch 'tencent_git/master' into dev/demo --- CHANGELOG.md | 83 ++- demo/ciDemo.js | 1421 +++++++++++++++++++++++++++++++++++++++++++----- demo/demo.js | 14 +- 3 files changed, 1374 insertions(+), 144 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ba399aa..1d360d2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,81 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog). +## [v1.4.19](https://github.com/tencentyun/cos-js-sdk-v5/compare/v1.4.18...v1.4.19) - 2023-08-03 + +feat +- 提供base64方法 +- 优化d.ts + +### Merged + +- Dev/1.4.19 [`#192`](https://github.com/tencentyun/cos-js-sdk-v5/pull/192) +- feat: 优化万象demo [`#191`](https://github.com/tencentyun/cos-js-sdk-v5/pull/191) +- feat: 支持postBucketInventory;优化d.ts [`#190`](https://github.com/tencentyun/cos-js-sdk-v5/pull/190) + +## [v1.4.18](https://github.com/tencentyun/cos-js-sdk-v5/compare/v1.4.17...v1.4.18) - 2023-06-01 + +feat +- 支持postBucketInventory +- 优化d.ts + +### Commits + +- feat: 新增prettier [`1c5710a`](https://github.com/tencentyun/cos-js-sdk-v5/commit/1c5710a744cc5bbceb79f855758fb696781cfee6) +- fix: 优化demo [`3bff2e2`](https://github.com/tencentyun/cos-js-sdk-v5/commit/3bff2e2652971fa2d98ee9acd7926b9c9577e15f) +- fix: 同步github;优化d.ts [`5aa0c9f`](https://github.com/tencentyun/cos-js-sdk-v5/commit/5aa0c9f9001fd4f9dc426cacd425e50bb9a38438) +- feat: 新增prettier [`ba89ef1`](https://github.com/tencentyun/cos-js-sdk-v5/commit/ba89ef17a0b4dc7717885032b3b84165701ee806) +- feat: 丰富直传demo (merge request !11) [`067b16c`](https://github.com/tencentyun/cos-js-sdk-v5/commit/067b16c9a98d451e654331def239eb271602e180) +- dev/unitTest (merge request !8) [`0517009`](https://github.com/tencentyun/cos-js-sdk-v5/commit/05170099fa6dd8e8cef4e3ab92f2425078869dd2) +- fix: 优化代码 [`aef0eef`](https://github.com/tencentyun/cos-js-sdk-v5/commit/aef0eef5869f6da843a82a00e06ea4b2498257e0) +- dev/github (merge request !7) [`ab9d3c4`](https://github.com/tencentyun/cos-js-sdk-v5/commit/ab9d3c4643139ae4d28a972b503e11e0050c11a2) +- 避开 Windows Defender 再次报毒 [`6a3caa7`](https://github.com/tencentyun/cos-js-sdk-v5/commit/6a3caa7946c09ab82f2cea9fdcd9779c713a7e83) +- 避开 Windows Defender 再次报毒 [`5906cf2`](https://github.com/tencentyun/cos-js-sdk-v5/commit/5906cf281cfa708ed88f97721e4eb16d5f8c418b) +- dev/github (merge request !7) [`d93ae2a`](https://github.com/tencentyun/cos-js-sdk-v5/commit/d93ae2ad7174e411d7a489da7542474a70a4f5a1) +- feat: 补充ci智能语音和云查毒接口 [`d665684`](https://github.com/tencentyun/cos-js-sdk-v5/commit/d6656842417f69b20a94fedfb231274c4555ad86) +- feat: 补充ci智能语音和云查毒接口 [`215ae94`](https://github.com/tencentyun/cos-js-sdk-v5/commit/215ae94664f296243bd21e9676ea617cbf62501d) +- feat: 支持postBucketInventory;优化d.ts [`cb734f9`](https://github.com/tencentyun/cos-js-sdk-v5/commit/cb734f939217d7355b73df15a9d66469c2e86ef9) +- fix: 优化几处demo [`d2fa0e2`](https://github.com/tencentyun/cos-js-sdk-v5/commit/d2fa0e241400d8e4b1ed7b1c0f9c58333a9928da) +- upd: 新增ci文件处理demo [`4736047`](https://github.com/tencentyun/cos-js-sdk-v5/commit/4736047fe1f0b3ee7d29623456e1768a5ada8254) +- dev/unitTest (merge request !9) [`26a9442`](https://github.com/tencentyun/cos-js-sdk-v5/commit/26a9442d17808656fda1915fced6e60b1e2d7ddb) +- fix: 优化几处demo [`1bd975a`](https://github.com/tencentyun/cos-js-sdk-v5/commit/1bd975a00dc9fdbf36a1a0165d2524e5686c27b4) +- dev/github (merge request !10) [`b6a2c07`](https://github.com/tencentyun/cos-js-sdk-v5/commit/b6a2c07b42ef5924f7c0e3994513499e725f98a8) +- fix: 优化几处demo [`2e5199f`](https://github.com/tencentyun/cos-js-sdk-v5/commit/2e5199f303e68a3310159c7175468ead306579a2) + +## [v1.4.17](https://github.com/tencentyun/cos-js-sdk-v5/compare/v1.4.16...v1.4.17) - 2023-05-04 + +fix +- 避开Windows Defender报毒 + +### Merged + +- feat: 文本审核任务鉴权 [`#175`](https://github.com/tencentyun/cos-js-sdk-v5/pull/175) +- 接口名称优化 [`#182`](https://github.com/tencentyun/cos-js-sdk-v5/pull/182) +- 文档预览、文件处理、图片处理、存储桶配置接口补充 [`#180`](https://github.com/tencentyun/cos-js-sdk-v5/pull/180) +- Dev/global object [`#179`](https://github.com/tencentyun/cos-js-sdk-v5/pull/179) +- upd: 新增ci文件处理demo [`#173`](https://github.com/tencentyun/cos-js-sdk-v5/pull/173) + +### Commits + +- 避开 Windows Defender 再次报毒 [`c9b8dbb`](https://github.com/tencentyun/cos-js-sdk-v5/commit/c9b8dbb66e1749fc0f4257ac8ee6f567abdd9440) +- Update sts.php [`eecccf5`](https://github.com/tencentyun/cos-js-sdk-v5/commit/eecccf527f7be62dcb6556fcffd6a41bf19ff604) + +## [v1.4.16](https://github.com/tencentyun/cos-js-sdk-v5/compare/v1.4.15...v1.4.16) - 2023-03-07 + +feat +- 修改webpack globalObject指向this + +### Commits + +- feat/jest (merge request !2) [`52efed2`](https://github.com/tencentyun/cos-js-sdk-v5/commit/52efed2978eaf47c5c5e70117209db5924cc9eaa) +- upd: 新增ci文件处理demo [`4736047`](https://github.com/tencentyun/cos-js-sdk-v5/commit/4736047fe1f0b3ee7d29623456e1768a5ada8254) +- 支持 policy 签名 [`09a908d`](https://github.com/tencentyun/cos-js-sdk-v5/commit/09a908d8036a8963a453ae757e6d9ff5408d1910) +- fix: 调整jest逻辑 [`489caf1`](https://github.com/tencentyun/cos-js-sdk-v5/commit/489caf1f325dd5f01c9672a8789337619279097c) +- feat/jest (merge request !3) [`3b9b4f1`](https://github.com/tencentyun/cos-js-sdk-v5/commit/3b9b4f1cbb555df2b80b691d06cab9672bda2abb) +- Updated CHANGELOG.md [`6e8190e`](https://github.com/tencentyun/cos-js-sdk-v5/commit/6e8190ef2f74e7ad2e2757a70e45dc85d0a09234) +- feat: 修改webpack globalObject指向this [`53f12fb`](https://github.com/tencentyun/cos-js-sdk-v5/commit/53f12fbdd3217e2539837773a0d31e7709a1fa30) +- feat: 打印调试 [`9675113`](https://github.com/tencentyun/cos-js-sdk-v5/commit/9675113f4974a93e907a7a7d4a72916442bcc033) + ## [v1.4.15](https://github.com/tencentyun/cos-js-sdk-v5/compare/v1.4.14...v1.4.15) - 2022-12-27 fix @@ -399,9 +474,6 @@ fix:修复getObjectUrl报错问题 ## [v1.2.15](https://github.com/tencentyun/cos-js-sdk-v5/compare/v1.2.14...v1.2.15) - 2021-07-01 -- 分块上传upload part支持headers白名单 -- getObjectUrl 支持Query、Headers参数 - ### Merged - feat:uploadPart新增headers白名单 [`#114`](https://github.com/tencentyun/cos-js-sdk-v5/pull/114) @@ -423,8 +495,6 @@ fix:修复getObjectUrl报错问题 ## [v1.2.13](https://github.com/tencentyun/cos-js-sdk-v5/compare/v1.2.12...v1.2.13) - 2021-06-11 -- 新增高级上传接口 - ### Merged - Feat/add upload file [`#112`](https://github.com/tencentyun/cos-js-sdk-v5/pull/112) @@ -440,9 +510,6 @@ fix:修复getObjectUrl报错问题 ## [v1.2.12](https://github.com/tencentyun/cos-js-sdk-v5/compare/v1.2.11...v1.2.12) - 2021-06-04 --demo新增简单上传base64内容文件 --sliceUploadFile方法新增返回值UploadId - ### Merged - Feat/put object base64&return upload [`#111`](https://github.com/tencentyun/cos-js-sdk-v5/pull/111) diff --git a/demo/ciDemo.js b/demo/ciDemo.js index f3e4dae..00fa412 100644 --- a/demo/ciDemo.js +++ b/demo/ciDemo.js @@ -1,138 +1,1133 @@ var TaskId; -function getObjectUrl() { - var url = cos.getObjectUrl( +function request() { + cos.request( + { + Bucket: config.Bucket, + Region: config.Region, + Key: '1.png', + Method: 'POST', + Action: 'image_process', + Headers: { + // 通过 imageMogr2 接口使用图片缩放功能:指定图片宽度为 200,宽度等比压缩 + 'Pic-Operations': + '{"is_pic_info": 1, "rules": [{"fileid": "desample_photo.jpg", "rule": "imageMogr2/thumbnail/200x/"}]}', + }, + }, + function (err, data) { + logger.log('request:', err || data); + }, + ); +} + +function getImageUrl() { + // 生成带图片处理参数的文件签名URL,过期时间设置为 30 分钟。 + cos.getObjectUrl( + { + Bucket: config.Bucket, + Region: config.Region, + Key: '02.png', + Query: { 'imageMogr2/thumbnail/200x/': '' }, + Expires: 1800, + Sign: true, + }, + function (err, data) { + logger.log('getObjectUrl with sign: ', err || (data && data.Url)); + }, + ); + + // 生成带图片处理参数的文件URL,不带签名。 + cos.getObjectUrl( + { + Bucket: config.Bucket, + Region: config.Region, + Key: 'photo.png', + QueryString: `imageMogr2/thumbnail/200x/`, + Sign: false, + }, + function (err, data) { + logger.log('getObjectUrl without sign: ', err || (data && data.Url)); + }, + ); +} + +// 查询已经开通数据万象功能的存储桶 +function describeMediaBuckets() { + const host = 'ci.' + config.Region + '.myqcloud.com'; + const url = 'https://' + host + '/mediabucket'; + cos.request( + { + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', + Key: 'mediabucket', // 固定值,必须 + Url: url, + Query: { + pageNumber: '1', // 第几页,非必须 + pageSize: '10', // 每页个数,非必须 + // regions: 'ap-chengdu', // 地域信息,例如'ap-beijing',支持多个值用逗号分隔如'ap-shanghai,ap-beijing',非必须 + // bucketNames: 'test-1250000000', // 存储桶名称,精确搜索,例如'test-1250000000',支持多个值用逗号分隔如'test1-1250000000,test2-1250000000',非必须 + // bucketName: 'test', //存储桶名称前缀,前缀搜索,例如'test',支持多个值用逗号分隔如'test1,test2',非必须 + }, + }, + function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }, + ); +} + +// 搜索媒体处理队列 +function searchMediaQueue() { + const key = `queue`; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + + cos.request( + { + Method: 'GET', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Query: { + // 队列 ID,支持搜索多个,以“,”符号分割字符串,最多填10个。;是否必传:否 + queueIds: '', + // 1. Active 表示队列内的作业会被媒体处理服务调度执行2. Paused 表示队列暂停,作业不再会被媒体处理调度执行,队列内的所有作业状态维持在暂停状态,已经执行中的任务不受影响;是否必传:否 + state: 'Active', + // 1. CateAll:所有类型2. Transcoding:媒体处理队列3. SpeedTranscoding:媒体处理倍速转码队列4. 默认为 Transcoding;是否必传:否 + category: 'CateAll', + // 第几页,默认值1;是否必传:否 + pageNumber: '', + // 每页个数,默认值10;是否必传:否 + pageSize: '', + }, + }, + function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }, + ); +} + +// 更新媒体处理队列 +function updateMediaQueue() { + const queueId = 'xxx'; // queueId: 要更新的队列id; + const key = `queue/${queueId}`; // queueId: 要更新的队列id; + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 队列名称,仅支持中文、英文、数字、_、-和*,长度不超过 128;限制:无;;是否必传:是 + Name: 'queue-1', + // 1. Active 表示队列内的作业会被媒体处理服务调度执行2. Paused 表示队列暂停,作业不再会被媒体处理调度执行,队列内的所有作业状态维持在暂停状态,已经执行中的任务不受影响;限制:无;;是否必传:是 + State: 'Paused', + // 回调配置;限制:无;;是否必传:是 + NotifyConfig: { + // 回调开关OffOn;限制:Off;;是否必传:否 + State: 'Off', + // 回调事件TaskFinish:任务完成WorkflowFinish:工作流完成;限制:无;;是否必传:否 + Event: 'TaskFinish', + // 回调格式XMLJSON;限制:XML;;是否必传:否 + ResultFormat: '', + // 回调类型UrlTDMQ;限制:无;;是否必传:否 + Type: 'Url', + // 回调地址,不能为内网地址。;限制:无;;是否必传:否 + Url: '', + // TDMQ 使用模式Topic:主题订阅Queue: 队列服务;限制:无;;是否必传:否 + MqMode: '', + // TDMQ 所属园区,目前支持园区 sh(上海)、bj(北京)、gz(广州)、cd(成都)、hk(中国香港);限制:无;;是否必传:否 + MqRegion: '', + // TDMQ 主题名称;限制:无;;是否必传:否 + MqName: '', + }, + }, + }); + + cos.request( + { + Method: 'PUT', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, + function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }, + ); +} + +// 获取媒体文件信息同步请求 +function getMediaInfo() { + cos.request( + { + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', + Key: 'test.mp4', + Query: { + 'ci-process': 'videoinfo', // 固定值,必须 + }, + }, + function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }, + ); +} + +function postMediaInfo() { + const key = `jobs`; // + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 创建任务的 Tag:MediaInfo;是否必传:是 + Tag: 'MediaInfo', + // 待操作的文件信息;是否必传:是 + Input: { + // 文件路径;是否必传:是 + Object: 'test.mp4', + }, + // 操作规则;是否必传:是 + Operation: { + // 透传用户信息,可打印的 ASCII 码,长度不超过1024;是否必传:否 + UserData: '', + // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0;是否必传:否 + JobLevel: '0', + }, + // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 + CallBackFormat: '', + // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 + CallBackType: 'Url', + // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 + CallBack: '', + }, + }); + + cos.request( + { + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, + function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }, + ); +} + +// 获取媒体文件某个时间的截图 +function getSnapshot() { + const key = 'test.mp4'; // ObjectKey: 存在cos的媒体文件路径,比如test.mp4 + const host = `${config.Bucket}.cos.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + + cos.request( + { + Method: 'GET', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Query: { + // 操作类型,固定使用 snapshot;是否必传:是 + 'ci-process': 'snapshot', + // 截图的时间点,单位为秒;是否必传:是 + time: 1, + // 截图的宽。默认为0;是否必传:否 + width: 0, + // 截图的高。默认为0;是否必传:否 + height: 0, + // 截图的格式,支持 jpg 和 png,默认 jpg;是否必传:否 + format: 'jpg', + // 图片旋转方式auto:按视频旋转信息进行自动���转off:不旋转默认值为 auto;是否必传:否 + rotate: 'auto', + // 截帧方式keyframe:截取指定时间点之前的最近的一个关键帧exactframe:截取指定时间点的帧默认值为 exactframe;是否必传:否 + mode: 'exactframe', + }, + RawBody: true, + // 可选返回文件格式为blob + DataType: 'blob', + }, + function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Body); + } + }, + ); +} +// 获取私m3u8 +function getPrivateM3U8() { + const key = '视频/peachtest.mp4.m3u8'; // ObjectKey: 存在cos的媒体文件路径,比如test.mp4 + const host = `${config.Bucket}.cos.${config.Region}.myqcloud.com`; + + cos.request( + { + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', // 固定值,必须 + Key: key, // 必须 + // Url: url, // 请求的url,必须 + Query: { + // 操作类型,固定使用 pm3u8;是否必传:是 + 'ci-process': 'pm3u8', + // 私有 ts 资源 url 下载凭证的相对有效期,单位为秒,范围为[3600, 43200];是否必传:是 + expires: 3600, + }, + RawBody: true, // 固定值,必须 + }, + function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Body); + } + }, + ); +} + +// 音视频转码 +function postTranscode() { + const key = `jobs`; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 创建任务的Tag:Transcode;是否必传:是 + Tag: 'Transcode', + // 待操作的文件信息;是否必传:是 + Input: { + // 文件路径;是否必传:是 + Object: 'test.mp4', + }, + // 操作规则;是否必传:是 + Operation: { + // TemplateId与Transcode 二选一传入 + // 转码模板 ID;是否必传:否,可通过控制台获取 + TemplateId: 'xxx', + // 转码模板参数;是否必传:否 + // Transcode: {}, + // 水印模板 ID,可以传多个水印模板 ID,最多传3个;是否必传:否 + // WatermarkTemplateId: '', + // 去除水印参数, H265、AV1编码暂不支持该参数;是否必传:否 + // RemoveWatermark: { + // // 距离左上角原点 x 偏移,范围为[1, 4096];是否必传:是 + // Dx: '', + // // 距离左上角原点 y 偏移,范围为[1, 4096];是否必传:是 + // Dy: '', + // // 宽,范围为[1, 4096];是否必传:是 + // Width: '', + // // 高,范围为[1, 4096];是否必传:是 + // Height: '', + // }, + // 字幕参数,H265、AV1编码和非mkv封装暂不支持该参数;是否必传:否 + // Subtitles: { + // // 字幕参数;是否必传:是 + // Subtitle: { + // // 同 bucket 的字幕地址,需要 encode;是否必传:是 + // Url: '', + // }, + // }, + // 结果输出配置;是否必传:是 + Output: { + // 存储桶的地域;是否必传:是 + Region: config.Region, + // 存储结果的存储桶;是否必传:是 + Bucket: config.Bucket, + // 输出结果的文件名;是否必传:是 + Object: 'output/test.mp4', + }, + // 透传用户信息,可打印的 ASCII 码,长度不超过1024;是否必传:否 + UserData: '', + // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0;是否必传:否 + JobLevel: '0', + }, + // 任务所在的队列类型,限制为 SpeedTranscoding, 表示为开启倍速转码;是否必传:否 + QueueType: 'SpeedTranscoding', + // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 + CallBackFormat: '', + // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 + CallBackType: 'Url', + // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 + CallBack: '', + }, + }); + + cos.request( + { + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, + function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }, + ); +} + +// 极速高清 +function postExtremeHD() { + const key = `jobs`; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 创建任务的Tag:Transcode;是否必传:是 + Tag: 'Transcode', + // 待操作的文件信息;是否必传:是 + Input: { + // 文件路径;是否必传:是 + Object: 'test.mp4', + }, + // 操作规则;是否必传:是 + Operation: { + // 极速高清转码模板 ID;是否必传:否,可通过控制台获取 + TemplateId: 't0fc3f4eb75596459eb42b5fa52aa6e511', + // 水印模板 ID,可以传多个水印模板 ID,最多传3个;是否必传:否 + // WatermarkTemplateId: '', + // 去除水印参数, H265、AV1编码暂不支持该参数;是否必传:否 + // RemoveWatermark: { + // // 距离左上角原点 x 偏移,范围为[1, 4096];是否必传:是 + // Dx: '', + // // 距离左上角原点 y 偏移,范围为[1, 4096];是否必传:是 + // Dy: '', + // // 宽,范围为[1, 4096];是否必传:是 + // Width: '', + // // 高,范围为[1, 4096];是否必传:是 + // Height: '', + // }, + // 字幕参数,H265、AV1编码和非mkv封装暂不支持该参数;是否必传:否 + // Subtitles: { + // // 字幕参数;是否必传:是 + // Subtitle: { + // // 同 bucket 的字幕地址,需要 encode;是否必传:是 + // Url: '', + // }, + // }, + // 结果输出配置;是否必传:是 + Output: { + // 存储桶的地域;是否必传:是 + Region: config.Region, + // 存储结果的存储桶;是否必传:是 + Bucket: config.Bucket, + // 输出结果的文件名;是否必传:是 + Object: 'output/test.mp4', + }, + // 透传用户信息,可打印的 ASCII 码,长度不超过1024;是否必传:否 + UserData: '', + // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0;是否必传:否 + JobLevel: '0', + }, + // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 + CallBackFormat: '', + // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 + CallBackType: 'Url', + // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 + CallBack: '', + }, + }); + + cos.request( + { + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, + function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }, + ); +} + +// 音视频转封装 +function postSegment() { + const key = `jobs`; // 固定值,必须 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 创建任务的 Tag:Segment;是否必传:是 + Tag: 'Segment', + // 待操作的文件信息;是否必传:是 + Input: { + // 文件路径;是否必传:是 + Object: 'test.mp4', + }, + // 操作规则;是否必传:是 + Operation: { + // 转封装参数;是否必传:是 + Segment: { + // 封装格式,支持 aac、mp3、flac、mp4、ts、mkv、avi、hls、m3u8;是否必传:是 + Format: 'mp4', + // 转封装时长单位:秒不小于5的整数不设置 Duration 时,表示只转封装格式不分段;是否必传:否 + Duration: '5', + // 处理的流编号,对应媒体信息中的 Response.MediaInfo.Stream.Video.Index 和 Response.MediaInfo.Stream.Audio.Index,详见 获取媒体信息接口;是否必传:否 + // TranscodeIndex: '', + // // hls 加密配置,当封装格式为 hls 和 m3u8 时生效;是否必传:否 + // HlsEncrypt: { + // // 是否开启 HLS 加密,取值 true/false,默认值 false;是否必传:否 + // IsHlsEncrypt: '', + // // HLS 加密的 key,当 IsHlsEncrypt 为 true 时,该参数才有意义;是否必传:否 + // UriKey: '', + // }, + // // 开始时间取值范围: [0,视频时长],默认值为0单位为秒支持 float 格式,执行精度精确到毫秒;是否必传:否 + // StartTime: '', + // // 结束时间取值范围:[0, 视频时长],默认值为视频结束时间单位为秒支持 float 格式,执行精度精确到毫秒;是否必传:否 + // EndTime: '', + }, + // 结果输出配置;是否必传:是 + Output: { + // 存储桶的地域;是否必传:是 + Region: config.Region, + // 存储结果的存储桶;是否必传:是 + Bucket: config.Bucket, + // 输出结果的文件名;是否必传:是 + Object: 'output/out-${number}', + }, + // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0;是否必传:否 + JobLevel: '0', + }, + // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 + CallBackFormat: '', + // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 + CallBackType: 'Url', + // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 + CallBack: '', + }, + }); + + cos.request( + { + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, + function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }, + ); +} + +// 提交音视频拼接任务 +function postConcat() { + const key = `jobs`; // + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 创建任务的 Tag:Concat;是否必传:是 + Tag: 'Concat', + // 待操作的文件信息;是否必传:否 + Input: { + // 文件路径;是否必传:是 + Object: 'test.mp4', + }, + // 操作规则;是否必传:是 + Operation: { + // TemplateId与ConcatTemplate 二选一传入 + // 转码模板 ID;是否必传:否,可通过控制台获取 + TemplateId: 'xxx', + // 拼接参数;是否必传:否 + // ConcatTemplate: { + // // 拼接节点,支持多个文件,按照文件顺序拼接;限制:否;;是否必传:否 + // ConcatFragment: { + // // 同 bucket 对象地址,需要 urlEncode;限制:是;;是否必传:否 + // Url: '', + // // 拼接对象的索引位置,大于等于0的整数;限制:否;;是否必传:否 + // FragmentIndex: '', + // // 开始时间[0, 视频时长]单位为秒 当Request.Operation.ConcatTemplate.DirectConcat 为 true 时不生效;限制:否;;是否必传:否 + // StartTime: '', + // // 结束时间[0, 视频时长]单位为秒 当 Request.Operation.ConcatTemplate.DirectConcat 为 true 时不生效;限制:否;;是否必传:否 + // EndTime: '', + // }, + // // Input 节点位于 ConcatFragment 序列索引,不能大于 ConcatFragment 长度;限制:否;;是否必传:否 + // Index: '', + // // 简单拼接方式(不转码直接拼接),其他的视频和音频参数失效,取值 true/false;限制:否;;是否必传:否 + // DirectConcat: '', + // }, + // 结果输出配置;是否必传:是 + Output: { + // 存储桶的地域;是否必传:是 + Region: config.Region, + // 存储结果的存储桶;是否必传:是 + Bucket: config.Bucket, + // 输出结果的文件名;是否必传:是 + Object: 'output/out.mp4', + }, + // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0;是否必传:否 + JobLevel: '0', + }, + // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 + CallBackFormat: '', + // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 + CallBackType: 'Url', + // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 + CallBack: '', + }, + }); + + cos.request( + { + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, + function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }, + ); +} + +// 提交视频转动图 +function postAnimation() { + const key = `jobs`; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 创建任务的 Tag:Animation;是否必传:是 + Tag: 'Animation', + // 待操作的文件信息;是否必传:是 + Input: { + // 文件路径;是否必传:是 + Object: 'test.mp4', + }, + // 操作规则;是否必传:是 + Operation: { + // TemplateId与Animation 二选一传入 + // 转码模板 ID;是否必传:否,可通过控制台获取 + TemplateId: 'xxx', + // 视频转动图参数;是否必传:否 + // Animation: {}, + // 结果输出配置;是否必传:是 + Output: { + // 存储桶的地域;是否必传:是 + Region: config.Region, + // 存储结果的存储桶;是否必传:是 + Bucket: config.Bucket, + // 输出结果的文件名;是否必传:是 + Object: 'output/out.${ext}', + }, + // 透传用户信息,可打印的 ASCII 码,长度不超过1024;是否必传:否 + UserData: '', + // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0;是否必传:否 + JobLevel: '0', + }, + // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 + CallBackFormat: '', + // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 + CallBackType: 'Url', + // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 + CallBack: '', + }, + }); + + cos.request( + { + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, + function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }, + ); +} + +// 提交视频截帧任务 +function postSnapshot() { + const key = `jobs`; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 创建任务的 Tag:Snapshot;是否必传:是 + Tag: 'Snapshot', + // 待操作的文件信息;是否必传:是 + Input: { + // 文件路径;是否必传:是 + Object: 'test.mp4', + }, + // 操作规则;是否必传:是 + Operation: { + // 截帧模板 ID;是否必传:否,可通过控制台获取 + TemplateId: 'xxx', + // 结果输出配置;是否必传:是 + Output: { + // 存储桶的地域;是否必传:是 + Region: config.Region, + // 存储结果的存储桶;是否必传:是 + Bucket: config.Bucket, + // 输出结果的文件名;是否必传:是 + Object: 'output/snapshot-${number}.jpg', + // 雪碧图的名字。当有多个输出文件时必须包含 ${number} 通配符。仅支持 jpg 格式;是否必传:否 + SpriteObject: 'output/sprite-${number}.jpg', + }, + // 透传用户信息,可打印的 ASCII 码,长度不超过1024;是否必传:否 + UserData: '', + // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0;是否必传:否 + JobLevel: '0', + }, + // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 + CallBackFormat: '', + // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 + CallBackType: 'Url', + // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 + CallBack: '', + }, + }); + + cos.request( + { + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, + function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }, + ); +} + +// 提交精彩集锦任务 +function postVideoMontage() { + const key = `jobs`; // 固定值,必须 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 创建任务的 Tag:VideoMontage;是否必传:是 + Tag: 'VideoMontage', + // 待操作的文件信息;是否必传:是 + Input: { + // Object与url二选一传递 + // 同存储桶文件路径;是否必传:否 + Object: 'test.mp4', + // 支持公网下载的Url;是否必传:否 + // Url: '', + }, + // 操作规则;是否必传:是 + Operation: { + // 模板 ID;是否必传:否,可通过控制台获取 + TemplateId: 'xxx', + // 结果输出配置;是否必传:是 + Output: { + // 存储桶的地域;是否必传:是 + Region: config.Region, + // 存储结果的存储桶;是否必传:是 + Bucket: config.Bucket, + // 输出结果的文件名;是否必传:是 + Object: 'output/out.mp4', + }, + // 透传用户信息,可打印的 ASCII 码,长度不超过1024;是否必传:否 + UserData: '', + // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0;是否必传:否 + JobLevel: '0', + }, + // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 + CallBackFormat: '', + // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 + CallBackType: 'Url', + // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 + CallBack: '', + }, + }); + + cos.request( { - Bucket: config.Bucket, // Bucket 格式:test-1250000000 - Region: config.Region, - Key: '1mb.zip', - Expires: 60, - Sign: true, + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 }, function (err, data) { - logger.log('getObjectUrl:', err || (data && data.Url)); + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } }, ); - logger.log('getObjectUrl:', url); } -function request() { +// 提交视频标签任务 +function postVideoTag() { + const key = `jobs`; // + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 创建任务的 Tag:VideoTag;是否必传:是 + Tag: 'VideoTag', + // 待操作的文件信息;是否必传:是 + Input: { + // 执行视频标签任务的文件路径,目前支持 mp4、avi、mkv、wmv、rmvb、flv、mov 封装格式,视频时长超过30min的视频请 提交工单 处理;是否必传:是 + Object: 'test.mp4', + }, + // 操作规则;是否必传:是 + Operation: { + // 任务参数;是否必传:是 + VideoTag: { + // 场景类型,可选择视频标签的运用场景,不同的运用场景使用的算法、输入输出等都会有所差异。当前版本只支持 Stream 场景;是否必传:是 + Scenario: 'Stream', + }, + // 任务优先级,级别限制:0 、1 、2。级别越大任务优先级越高,默认为0;是否必传:否 + JobLevel: '0', + // 透传用户信息;是否必传:否 + UserData: '', + }, + // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 + CallBackFormat: '', + // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 + CallBackType: 'Url', + // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 + CallBack: '', + }, + }); + cos.request( { - Bucket: config.Bucket, - Region: config.Region, - Key: '1.png', - Method: 'POST', - Action: 'image_process', - Headers: { - // 通过 imageMogr2 接口使用图片缩放功能:指定图片宽度为 200,宽度等比压缩 - 'Pic-Operations': - '{"is_pic_info": 1, "rules": [{"fileid": "desample_photo.jpg", "rule": "imageMogr2/thumbnail/200x/"}]}', - }, + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 }, function (err, data) { - logger.log('request:', err || data); + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } }, ); } -function getImageUrl() { - // 生成带图片处理参数的文件签名URL,过期时间设置为 30 分钟。 - cos.getObjectUrl( - { - Bucket: config.Bucket, - Region: config.Region, - Key: '02.png', - Query: { 'imageMogr2/thumbnail/200x/': '' }, - Expires: 1800, - Sign: true, - }, - function (err, data) { - logger.log('getObjectUrl with sign: ', err || (data && data.Url)); +// 提交智能封面任务 +function postSmartCover() { + const key = `jobs`; // + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 创建任务的 Tag:SmartCover;是否必传:是 + Tag: 'SmartCover', + // 待操作的文件信息;是否必传:是 + Input: { + // 文件路径;是否必传:是 + Object: 'test.mp4', + }, + // 操作规则;是否必传:是 + Operation: { + // 智能封面模板id;是否必传:否,可通过控制台获取 + TemplateId: 'xxx', + // 结果输出配置;是否必传:是 + Output: { + // 存储桶的地域;是否必传:是 + Region: config.Region, + // 存储结果的存储桶;是否必传:是 + Bucket: config.Bucket, + // 输出结果的文件名;是否必传:是 + Object: 'output/smartcover-${number}.jpg', + }, + // 透传用户信息,可打印的 ASCII 码,长度不超过1024;是否必传:否 + UserData: '', + // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为 0;是否必传:否 + JobLevel: '0', + }, + // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 + CallBackFormat: '', + // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 + CallBackType: 'Url', + // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 + CallBack: '', }, - ); + }); - // 生成带图片处理参数的文件URL,不带签名。 - cos.getObjectUrl( + cos.request( { - Bucket: config.Bucket, - Region: config.Region, - Key: 'photo.png', - QueryString: `imageMogr2/thumbnail/200x/`, - Sign: false, + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 }, function (err, data) { - logger.log('getObjectUrl without sign: ', err || (data && data.Url)); + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } }, ); } -// 查询已经开通数据万象功能的存储桶 -function describeMediaBuckets() { - var host = 'ci.' + config.Region + '.myqcloud.com'; - var url = 'https://' + host + '/mediabucket'; +// 添加数字水印任务 +function postDigitalWatermark() { + const key = `jobs`; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 创建任务的 Tag:DigitalWatermark;是否必传:是 + Tag: 'DigitalWatermark', + // 待操作的文件信息;是否必传:是 + Input: { + // 文件路径;是否必传:是 + Object: 'test.mp4', + }, + // 操作规则;是否必传:是 + Operation: { + DigitalWatermark: { + Message: '123456', // 嵌入数字水印的水印信息;是否必传:是 + Type: 'Text', // 数字水印类型;是否必传:是 + Version: 'V1', // 数字水印版本;是否必传:是 + IgnoreError: true, // 当添加水印失败是否忽略错误继续执行任务;是否必传:是 + }, + // 结果输出配置;是否必传:是 + Output: { + Region: config.Region, + // 存储结果的存储桶;是否必传:是 + Bucket: config.Bucket, + // 输出结果的文件名;是否必传:是 + Object: 'output/output.mp4', + }, + // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0;是否必传:否 + JobLevel: '0', + // 透传用户信息,可打印的 ASCII 码,长度不超过1024;是否必传:否 + UserData: '', + }, + // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 + CallBackFormat: '', + // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 + CallBackType: 'Url', + // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 + CallBack: '', + }, + }); + cos.request( { - Bucket: config.Bucket, - Region: config.Region, - Method: 'GET', - Key: 'mediabucket', // 固定值,必须 - Url: url, - Query: { - pageNumber: '1', // 第几页,非必须 - pageSize: '10', // 每页个数,非必须 - // regions: 'ap-chengdu', // 地域信息,例如'ap-beijing',支持多个值用逗号分隔如'ap-shanghai,ap-beijing',非必须 - // bucketNames: 'test-1250000000', // 存储桶名称,精确搜索,例如'test-1250000000',支持多个值用逗号分隔如'test1-1250000000,test2-1250000000',非必须 - // bucketName: 'test', //存储桶名称前缀,前缀搜索,例如'test',支持多个值用逗号分隔如'test1,test2',非必须 - }, + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 }, function (err, data) { - logger.log(err || data); + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } }, ); } -// 获取媒体文件信息 -function getMediaInfo() { +// 提取数字水印任务 +function postExtractDigitalWatermark() { + const key = `jobs`; // 固定值,必须 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 创建任务的 Tag:ExtractDigitalWatermark;是否必传:是 + Tag: 'ExtractDigitalWatermark', + // 待操作的文件信息;是否必传:是 + Input: { + // 文件路径;是否必传:是 + Object: 'test.mp4', + }, + // 操作规则;是否必传:是 + Operation: { + // 提取数字水印配置;是否必传:是 + ExtractDigitalWatermark: { + // 水印类型;限制:Text;;是否必传:是 + Type: 'Text', + // 水印版本;限制:V1;;是否必传:是 + Version: 'V1', + }, + // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0;是否必传:否 + JobLevel: '0', + // 透传用户信息,可打印的 ASCII 码,长度不超过1024;是否必传:否 + UserData: '', + }, + // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 + CallBackFormat: '', + // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 + CallBackType: 'Url', + // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 + CallBack: '', + }, + }); + cos.request( { - Bucket: config.Bucket, - Region: config.Region, - Method: 'GET', - Key: 'test.mp4', - Query: { - 'ci-process': 'videoinfo', // 固定值,必须 - }, + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 }, function (err, data) { - logger.log(err || data); + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } }, ); } -// 获取媒体文件某个时间的截图 -function getSnapshot() { +// 提交图片异步处理任务 +function postPicProcess() { + const key = `jobs`; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 创建任务的 Tag:PicProcess;是否必传:是 + Tag: 'PicProcess', + // 待操作的文件信息;是否必传:是 + Input: { + // 文件路径;是否必传:是 + Object: '1.jpg', + }, + // 操作规则;是否必传:是 + Operation: { + // 模板 ID;是否必传:否 + TemplateId: 't1edc04f224ca64782840022cdc8fc3aa4', + // PicProcess: {}, + // 结果输出配置;是否必传:是 + Output: { + Region: config.Region, + // 存储结果的存储桶;是否必传:是 + Bucket: config.Bucket, + // 输出结果的文件名;是否必传:是 + Object: 'output/output.jpg', + }, + // 透传用户信息, 可打印的 ASCII 码, 长度不超过1024;是否必传:否 + UserData: '', + // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0;是否必传:否 + JobLevel: '0', + }, + // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 + CallBackFormat: '', + // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 + CallBackType: 'Url', + // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 + CallBack: '', + }, + }); + cos.request( { - Bucket: config.Bucket, - Region: config.Region, - Method: 'GET', - Key: 'test.mp4', - Query: { - 'ci-process': 'snapshot', // 固定值,必须 - time: 1, // 截图的时间点,单位为秒,必须 - // width: 0, // 截图的宽,非必须 - // height: 0, // 截图的高,非必须 - // format: 'jpg', // 截图的格式,支持 jpg 和 png,默认 jpg,非必须 - // rotate: 'auto', // 图片旋转方式,默认为'auto',非必须 - // mode: 'exactframe', // 截帧方式,默认为'exactframe',非必须 - }, - RawBody: true, - // 可选返回文件格式为blob - DataType: 'blob', + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 }, function (err, data) { - logger.log(err || data); + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } }, ); } @@ -354,8 +1349,8 @@ function postTextAuditing() { var body = COS.util.json2xml({ Request: { Input: { - Content: COS.util.encodeBase64('乳沟'), // 经过base64编码过的文本”乳沟“,查询结果同步返回 - // Object: 'hello.txt', // 存在cos里的资源,审核结果异步返回,可以调用查询文本审核结果api查询 + // Content: COS.util.encodeBase64('乳沟'), // 经过base64编码过的文本”乳沟“,查询结果同步返回 + Object: '中文.txt', // 存在cos里的资源,审核结果异步返回,可以调用查询文本审核结果api查询 }, Conf: { BizType: '', @@ -1161,7 +2156,7 @@ function postVoiceSeparate() { }, Operation: { // VoiceSeparate: {}, // 指定转码模板参数,非必须 - TemplateId: 't13fca82ad97e84878a22cd81bd2e5652c', // 指定的模板 ID,必须 + TemplateId: 'xxx', // 指定的模板 ID,必须 // JobLevel: 0, // 任务优先级,级别限制:0 、1 、2。级别越大任务优先级越高,默认为0,非必须 Output: { Bucket: config.Bucket, // 输出的存储桶 @@ -1200,7 +2195,7 @@ function postTts() { Tag: 'Tts', Operation: { // VoiceSeparate: {}, // 指定转码模板参数,非必须 - TemplateId: 't192931b3564084168a3f50ebfea59acb3', // 指定的模板 ID,必须 + TemplateId: 'xxx', // 指定的模板 ID,必须 // JobLevel: 0, // 任务优先级,级别限制:0 、1 、2。级别越大任务优先级越高,默认为0,非必须 TtsConfig: { InputType: 'Text', @@ -1883,48 +2878,180 @@ function closeOriginProtect() { ); } -// 提交视频截帧任务 -function postSnapshot() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/jobs'; - var url = 'https://' + host; - var body = COS.util.json2xml({ - Request: { - Tag: 'Snapshot', // 必须,固定值 - Input: { - Object: 'ci/abc.mp4', // 文件名,取值为文件在当前存储桶中的完整名称 +// 查看指定任务 +function getJobDetail() { + const jobId = 'jec8ae8943c2511ee9d4a9b3cb7a5c6xx'; // jobId: 需要查询的jobId; + const key = `jobs/${jobId}`; // jobId: 需要查询的jobId; + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + + cos.request( + { + Method: 'GET', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + }, + function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }, + ); +} + +// 获取任务列表 +function getJobList() { + const key = `jobs`; // 固定值,必须 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + + cos.request( + { + Method: 'GET', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Query: { + // 拉取该队列 ID 下的任务;是否必传:否 + // queueId: '', + // 拉取队列类型下的任务,和 queueId 不同时生效,同时存在时 queueId 优先;是否必传:否 + // queueType: '', + // 任务的 Tag;是否必传:是,比如查找视频转动图的任务 + tag: 'Animation', + // 触发该任务的工作流ID;是否必传:否 + workflowId: '', + // 触发该任务的存量触发任务ID;是否必传:否 + // inventoryTriggerJobId: '', + // 该任务的输入文件名,暂仅支持精确匹配;是否必传:否 + // inputObject: '', + // Desc 或者 Asc。默认为 Desc;是否必传:否 + // orderByTime: '', + // 请求的上下文,用于翻页。上次返回的值;是否必传:否 + // nextToken: '', + // 拉取的最大任务数。默认为10。最大为100;是否必传:否 + size: 10, + // 拉取该状态的任务,以,分割,支持多状态:All、Submitted、Running、Success、Failed、Pause、Cancel。默认为 All;是否必传:否 + states: 'All', + // 拉取创建时间大于该时间的任务。格式为:%Y-%m-%dT%H:%m:%S%z,示例:2001-01-01T00:00:00+0800;是否必传:否 + // startCreationTime: '', + // 拉取创建时间小于该时间的任务。格式为:%Y-%m-%dT%H:%m:%S%z,示例:2001-01-01T23:59:59+0800;是否必传:否 + // endCreationTime: '', }, - Operation: { - // TemplateId与Snapshot二选一传递 - // TemplateId: '', - Snapshot: { - Mode: 'Interval', // 截图模式 - Start: '1', // 开始时间 - Count: '1', // 截图数量 - }, - Output: { - Bucket: config.Bucket, // 输出的存储桶 - Region: config.Region, // 输出的存储桶的地域 - Object: 'ci/output/snapshot-${Number}.jpg', // 输出的文件 Key - }, + }, + function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }, + ); +} + +function getWorkflow() { + const key = `workflow`; // + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + + cos.request( + { + Method: 'GET', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Query: { + // 工作流 ID,以,符号分割字符串;是否必传:否 + ids: '', + // 工作流名称;是否必传:否 + name: '', + // 第几页;是否必传:否 + pageNumber: '', + // 每页个数;是否必传:否 + pageSize: '', }, }, - }); + function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }, + ); +} + +// 获取工作流实例详情 +function getWorkflowexecution() { + const runId = 'ic7af1bf53c2911ee9988525400ae68xx'; + const key = `workflowexecution/${runId}`; // RunId:7; + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + cos.request( { - Method: 'POST', - Key: 'jobs', - Url: url, - Body: body, - ContentType: 'application/xml', + Method: 'GET', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 }, function (err, data) { - logger.log(err || data); + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }, + ); +} + +// 测试工作流 +function triggerworkflow() { + const key = `triggerworkflow`; // + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + + cos.request( + { + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Query: { + // 需要触发的工作流 ID;是否必传:是 + workflowId: 'wd3330113a4ef4287a4e0a93c36af09xx', + // 需要进行工作流处理的对象名称, 需要进行 url 编码;是否必传:是 + object: 'test.mp4', + // 存量触发任务名称,支持中文、英文、数字、—和_,长度限制128字符,默认为空;是否必传:否 + // name: '', + }, + }, + function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } }, ); } (function () { var list = [ + 'header-任务与工作流', + 'getJobDetail', + 'getJobList', + 'getWorkflow', + 'getWorkflowexecution', + 'triggerworkflow', + 'header-图片处理', 'getImageUrl', 'addImageStyle', @@ -1945,9 +3072,24 @@ function postSnapshot() { 'header-媒体处理', 'describeMediaBuckets', + 'searchMediaQueue', + 'updateMediaQueue', 'getMediaInfo', + 'postMediaInfo', 'getSnapshot', 'postSnapshot', + 'getPrivateM3U8', + 'postTranscode', + 'postExtremeHD', + 'postSegment', + 'postConcat', + 'postAnimation', + 'postVideoMontage', + 'postVideoTag', + 'postSmartCover', + 'postDigitalWatermark', + 'postExtractDigitalWatermark', + 'postPicProcess', 'header-内容审核', 'getImageAuditing', @@ -2031,9 +3173,32 @@ function postSnapshot() { listFolder: '列出文件夹', deleteFolder: '删除文件夹(按前缀批量删除)', getImageUrl: '生成带图片处理参数的签名 URL', + + getJobDetail: '查询指定任务', + getJobList: '获取任务列表', + getWorkflow: '查询工作流', + getWorkflowexecution: '获取工作流实例详情', + triggerworkflow: '测试工作流', + describeMediaBuckets: '查询媒体处理开通情况', - getMediaInfo: '获取媒体文件信息', + searchMediaQueue: '搜索媒体处理队列', + updateMediaQueue: '更新媒体处理队列', + getMediaInfo: '获取媒体信息同步请求', + postMediaInfo: '获取媒体信息异步任务', getSnapshot: '获取媒体文件某个时间的截图', + getPrivateM3U8: '获取私有m3u8', + postTranscode: '提交音视频转码', + postExtremeHD: '提交极速高清转码', + postSegment: '提交音视频转封装', + postConcat: '提交音视频拼接任务', + postAnimation: '提交视频转动图任务', + postVideoMontage: '提交精彩集锦任务', + postVideoTag: '提交视频标签任务', + postSmartCover: '提交智能封面任务', + postDigitalWatermark: '添加数字水印任务', + postExtractDigitalWatermark: '提取数字水印任务', + postPicProcess: '提交图片异步处理任务', + getImageAuditing: '图片同步审核', postImagesAuditing: '图片批量审核', getImageAuditingResult: '查询图片审核任务结果', @@ -2113,11 +3278,11 @@ function postSnapshot() { } else { html.push( '' + - name + - (labelMap[name] ? ' (' + labelMap[name] + ')' : '') + - '', + name + + '">' + + name + + (labelMap[name] ? ' (' + labelMap[name] + ')' : '') + + '', ); } }); diff --git a/demo/demo.js b/demo/demo.js index 6265fde..babcc0a 100644 --- a/demo/demo.js +++ b/demo/demo.js @@ -71,8 +71,7 @@ function getBucket() { { Bucket: config.Bucket, // Bucket 格式:test-1250000000 Region: config.Region, - Prefix: '', - Delimiter: '/', + Prefix: 'a/', }, function (err, data) { logger.log('getBucket:', err || data); @@ -1267,7 +1266,6 @@ function uploadFile() { }, }, function (err, data) { - logger.log('上传' + (err ? '失败' : '完成')); logger.log('uploadFile:', err || data); }, ); @@ -1794,11 +1792,11 @@ function request() { } else { html.push( '' + - name + - (labelMap[name] ? ' (' + labelMap[name] + ')' : '') + - '', + name + + '">' + + name + + (labelMap[name] ? ' (' + labelMap[name] + ')' : '') + + '', ); } }); From 4433f068acbad949ac2be5916ec20d377c6a614d Mon Sep 17 00:00:00 2001 From: chrisftian Date: Tue, 10 Oct 2023 20:08:41 +0800 Subject: [PATCH 07/11] =?UTF-8?q?feat:=20=E8=A1=A5=E5=85=85AI=E8=AF=86?= =?UTF-8?q?=E5=88=ABdemo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- demo/ciDemo.js | 2703 ++++++++++++++++++++++++++++++++++++++++++----- demo/index.html | 3 +- 2 files changed, 2415 insertions(+), 291 deletions(-) diff --git a/demo/ciDemo.js b/demo/ciDemo.js index 00fa412..43d111c 100644 --- a/demo/ciDemo.js +++ b/demo/ciDemo.js @@ -1139,7 +1139,7 @@ function getImageAuditing() { Bucket: config.Bucket, Region: config.Region, Method: 'GET', - Key: '1.png', + Key: '1.png', // 与detect-url二选一传递 Query: { 'ci-process': 'sensitive-content-recognition', // 固定值,必须 'biz-type': '', // 审核类型,非必须 @@ -1771,21 +1771,57 @@ function getDocHtmlUrl() { // 识别图片标签 function getImageLabel() { - var key = '1/素材.jpeg'; - var host = config.Bucket + '.cos.' + config.Region + '.myqcloud.com/' + key; - var url = 'https://' + host; cos.request( { - Method: 'GET', - Key: key, - Url: url, + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', // 固定值,必须 + Key: 'ci/dog.jpeg', // 与detect-url二选一传递 Query: { + // 固定值detect-label;是否必传:是 'ci-process': 'detect-label', + // 本次调用支持的识别场景,可选值如下:web,针对网络图片优化;camera,针对手机摄像头拍摄图片优化;album,针对手机相册、网盘产品优化;news,针对新闻、资讯、广电等行业优化;如果不传此参数,则默认为camera。支持多场景(scenes)一起检测,以,分隔。例如,使用 scenes=web,camera 即对一张图片使用两个模型同时检测,输出两套识别结果。;是否必传:否 + // scenes: '', + // 您可以通过填写 detect-url 处理任意公网可访问的图片链接。不填写 detect-url 时,后台会默认处理 ObjectKey ,填写了 detect-url 时,后台会处理 detect-url 链接,无需再填写 ObjectKey detect-url 示例:http://www.example.com/abc.jpg ,需要进行 UrlEncode,处理后为http%25253A%25252F%25252Fwww.example.com%25252Fabc.jpg;是否必传:否 + // 'detect-url': '', }, }, function (err, data) { - logger.log(err || data); + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + } + ); +} + +// 二维码识别(云上图片识别) +function recognitionQRcode() { + cos.request( + { + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', // 固定值,必须 + Key: 'ci/二维码.png', // 必须 + Query: { + // 万象处理能力,二维码识别固定为 QRcode;是否必传:是 + 'ci-process': 'QRcode', + // 二维码覆盖功能,将对识别出的二维码覆盖上马赛克。取值为0或1。0表示不开启二维码覆盖,1表示开启二维码覆盖,默认值0;是否必传:否 + cover: 0, + }, }, + function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + } ); } @@ -1836,14 +1872,12 @@ function identifyQrcode_get() { } // 二维码生成 -function generateQrcode() { - var host = config.Bucket + '.cos.' + config.Region + '.myqcloud.com'; - var url = 'https://' + host; +function createCRcode() { cos.request( { + Bucket: config.Bucket, + Region: config.Region, Method: 'GET', - Key: '', - Url: url, Query: { 'ci-process': 'qrcode-generate', // 必须,对象存储处理能力,二维码生成参数为 qrcode-generate 'qrcode-content': '二维码文案', // 必须,可识别的二维码文本信息 @@ -1863,28 +1897,41 @@ function generateQrcode() { } // 图片文字识别 -function ocr() { - var key = '1/素材.jpeg'; - var host = config.Bucket + '.cos.' + config.Region + '.myqcloud.com/' + key; - var url = 'https://' + host; +function cOSOCR() { cos.request( { - Method: 'GET', - Key: key, - Url: url, + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', // 固定值,必须 + Key: 'ci/0.jpg', // 与detect-url二选一传递 Query: { - 'ci-process': 'OCR', // 必须,数据万象处理能力,图片文字识别固定为 OCR - // type: '', // 非必须,OCR 的识别类型 - // 'language-type': '', // 非必须,type 值为 general 时有效,表示识别语言类型 - // ispdf: false, // 非必须,type 值为 general、fast 时有效,表示是否开启 PDF 识别 - // 'pdf-pagenumber': '', // 非必须,type 值为 general、fast 时有效,表示需要识别的 PDF 页面的对应页码 - // isword: false, // 非必须,type 值为 general、accurate 时有效,表示识别后是否需要返回单字信息 - // 'enable-word-polygon': false, // 非必须,type 值为 handwriting 时有效,表示是否开启单字的四点定位坐标输出 + // 数据万象处理能力,图片文字识别固定为OCR;是否必传:是 + 'ci-process': 'OCR', + // 您可以通过填写 detect-url 处理任意公网可访问的图片链接。不填写 detect-url 时,后台会默认处理 ObjectKey ,填写了 detect-url 时,后台会处理 detect-url 链接,无需再填写 ObjectKey detect-url 示例:http://www.example.com/abc.jpg ,需要进行 UrlEncode,处理后为http%25253A%25252F%25252Fwww.example.com%25252Fabc.jpg;是否必传:否 + // 'detect-url': '', + // ocr的识别类型,有效值为general,accurate,efficient,fast,handwriting。general表示通用印刷体识别;accurate表示印刷体高精度版;efficient表示印刷体精简版;fast表示印刷体高速版;handwriting表示手写体识别。默认值为general。;是否必传:否 + type: 'general', + // type值为general时有效,表示识别语言类型。支持自动识别语言类型,同时支持自选语言种类,默认中英文混合(zh),各种语言均支持与英文混合的文字识别。可选值:zh:中英混合zh_rare:支持英文、数字、中文生僻字、繁体字,特殊符号等auto:自动mix:混合语种jap:日语kor:韩语spa:西班牙语fre:法语ger:德语por:葡萄牙语vie:越语may:马来语rus:俄语ita:意大利语hol:荷兰语swe:瑞典语fin:芬兰语dan:丹麦语nor:挪威语hun:匈牙利语tha:泰语hi:印地语ara:阿拉伯语;是否必传:否 + 'language-type': 'zh', + // type值为general,fast时有效,表示是否开启PDF识别,有效值为true和false,默认值为false,开启后可同时支持图片和PDF的识别。;是否必传:否 + ispdf: false, + // type值为general,fast时有效,表示需要识别的PDF页面的对应页码,仅支持PDF单页识别,当上传文件为PDF且ispdf参数值为true时有效,默认值为1。;是否必传:否 + // 'pdf-pagenumber': 0, + // type值为general,accurate时有效,表示识别后是否需要返回单字信息,有效值为true和false,默认为false;是否必传:否 + isword: false, + // type值为handwriting时有效,表示是否开启单字的四点定位坐标输出,有效值为true和false,默认值为false。;是否必传:否 + 'enable-word-polygon': false, }, }, function (err, data) { - logger.log(err || data); - }, + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + } ); } @@ -2108,9 +2155,10 @@ function getVirusDetectResult() { // 提交音频降噪任务 function postNoiseReduction() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/jobs'; - var url = 'https://' + host; - var body = COS.util.json2xml({ + const key = 'jobs'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ Request: { Tag: 'NoiseReduction', Input: { @@ -2139,15 +2187,22 @@ function postNoiseReduction() { ContentType: 'application/xml', }, function (err, data) { - logger.log(err || data); + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } }, ); } // 提交人声分离任务 function postVoiceSeparate() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/jobs'; - var url = 'https://' + host; + const key = 'jobs'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; var body = COS.util.json2xml({ Request: { Tag: 'VoiceSeparate', @@ -2156,7 +2211,7 @@ function postVoiceSeparate() { }, Operation: { // VoiceSeparate: {}, // 指定转码模板参数,非必须 - TemplateId: 'xxx', // 指定的模板 ID,必须 + TemplateId: 't17844a8302372436187b425271a0ae33a', // 指定的模板 ID,必须 // JobLevel: 0, // 任务优先级,级别限制:0 、1 、2。级别越大任务优先级越高,默认为0,非必须 Output: { Bucket: config.Bucket, // 输出的存储桶 @@ -2181,57 +2236,299 @@ function postVoiceSeparate() { ContentType: 'application/xml', }, function (err, data) { - logger.log(err || data); + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } }, ); } -// 提交语音合成任务 -function postTts() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/jobs'; - var url = 'https://' + host; - var body = COS.util.json2xml({ +// 创建人声分离模板 +function postVoiceSeparateTemplete() { + const key = 'template'; // 固定 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 模板类型: VoiceSeparate;是否必传:是 + Tag: 'VoiceSeparate', + // 模板名称,仅支持中文、英文、数字、_、-和*,长度不超过 64;是否必传:是 + Name: 'my_voiceSeparate', + // 输出音频IsAudio:输出人声IsBackground:输出背景声AudioAndBackground:输出人声和背景声MusicMode:输出人声、背景声、Bass声、鼓声;是否必传:是 + AudioMode: 'IsAudio', + // 音频配置;是否必传:是 + AudioConfig: { + // 编解码格式,取值 aac、mp3、flac、amr。当 Request.AudioMode 为 MusicMode 时,仅支持 mp3、wav、acc;是否必传:否 + Codec: 'mp3', + // 采样率单位:Hz可选 8000、11025、22050、32000、44100、48000、96000当 Codec 设置为 aac/flac 时,不支持 8000当 Codec 设置为 mp3 时,不支持 8000 和 96000当 Codec 设置为 amr 时,只支持 8000当 Request.AudioMode 为 MusicMode 时,该参数无效;是否必传:否 + // Samplerate: '', + // 音频码率单位:Kbps值范围:[8,1000]当 Request.AudioMode 为 MusicMode 时,该参数无效;是否必传:否 + // Bitrate: '', + // 声道数当 Codec 设置为 aac/flac,支持1、2、4、5、6、8当 Codec 设置为 mp3,支持1、2 当 Codec 设置为 amr,只支持1当 Request.AudioMode 为 MusicMode 时,该参数无效;是否必传:否 + // Channels: '', + }, + } + }); + + cos.request( + { + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + + }, + function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }, + ); +} + +// 更新人声分离模板 +function updateVoiceSeparateTemplete() { + const templateId = 't18e592c70a4724b46bdcde4b711c6c0d5'; // 要更新的模版id + const key = `template/${templateId}`; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 模板类型: VoiceSeparate;是否必传:是 + Tag: 'VoiceSeparate', + // 模板名称,仅支持中文、英文、数字、_、-和*,长度不超过 64;是否必传:是 + Name: 'my_voiceSeparate2', + // 输出音频IsAudio:输出人声IsBackground:输出背景声AudioAndBackground:输出人声和背景声MusicMode:输出人声、背景声、Bass声、鼓声;是否必传:是 + AudioMode: 'IsAudio', + // 音频配置;是否必传:是 + AudioConfig: { + // 编解码格式,取值 aac、mp3、flac、amr。当 Request.AudioMode 为 MusicMode 时,仅支持 mp3、wav、acc;是否必传:否 + Codec: 'mp3', + // 采样率单位:Hz可选 8000、11025、22050、32000、44100、48000、96000当 Codec 设置为 aac/flac 时,不支持 8000当 Codec 设置为 mp3 时,不支持 8000 和 96000当 Codec 设置为 amr 时,只支持 8000当 Request.AudioMode 为 MusicMode 时,该参数无效;是否必传:否 + // Samplerate: '', + // 音频码率单位:Kbps值范围:[8,1000]当 Request.AudioMode 为 MusicMode 时,该参数无效;是否必传:否 + // Bitrate: '', + // 声道数当 Codec 设置为 aac/flac,支持1、2、4、5、6、8当 Codec 设置为 mp3,支持1、2 当 Codec 设置为 amr,只支持1当 Request.AudioMode 为 MusicMode 时,该参数无效;是否必传:否 + // Channels: '', + }, + } + }); + + cos.request( + { + Method: 'PUT', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + + }, + function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }, + ); +} + +// 提交一个语音合成任务 +function postVoiceSynthesis() { + const key = 'jobs'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ Request: { + // 创建任务的 Tag:Tts;是否必传:是 Tag: 'Tts', + // 操作规则;是否必传:是 Operation: { - // VoiceSeparate: {}, // 指定转码模板参数,非必须 - TemplateId: 'xxx', // 指定的模板 ID,必须 - // JobLevel: 0, // 任务优先级,级别限制:0 、1 、2。级别越大任务优先级越高,默认为0,非必须 + // 语音合成模板 ID; 与TtsTpl二选一传递 + TemplateId: 't1958211407ca54ebc8c78060a7f2ba564', + // 语音合成参数; 与TemplateId二选一传递 + // TtsTpl: { + // // 同创建语音合成模板接口中的 Request.Mode;是否必传:否 + // Mode: '', + // // 同创建语音合成模板接口中的 Request.Codec;是否必传:否 + // Codec: '', + // // 同创建语音合成模板接口中的 Request.VoiceType;是否必传:否 + // VoiceType: '', + // // 同创建语音合成模板接口中的 Request.Volume;是否必传:否 + // Volume: '', + // // 同创建语音合成模板接口中的 Request.Speed;是否必传:否 + // Speed: '', + // // 同创建语音合成模板接口中的 Request.Emotion;是否必传:否 + // Emotion: '', + // }, + // 语音合成任务参数;是否必传:是 TtsConfig: { + // 输入类型,Url/Text;是否必传:是 InputType: 'Text', + // 当 InputType 为 Url 时, 必须是合法的 COS 地址,文件必须是utf-8编码,且大小不超过 10M。如果合成方式为同步处理,则文件内容不超过 300 个 utf-8 字符;如果合成方式为异步处理,则文件内容不超过 10000 个 utf-8 字符。当 InputType 为 Text 时, 输入必须是 utf-8 字符, 且不超过 300 个字符。;是否必传:是 Input: '床前明月光,疑是地上霜', }, + // 结果输出配置;是否必传:是 Output: { - Bucket: config.Bucket, // 输出的存储桶 - Region: config.Region, // 输出的存储桶的地域 - Object: 'ci/out/tts.mp3', // 输出的文件Key + // 存储桶的地域;是否必传:是 + Region: config.Region, + // 存储结果的存储桶;是否必传:是 + Bucket: config.Bucket, + // 结果文件名;是否必传:是 + Object: 'ci/tts.mp3', }, + // 透传用户信息,可打印的 ASCII 码,长度不超过1024;是否必传:否 + // UserData: '', + // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0;是否必传:否 + // JobLevel: '', }, - // QueueId: '', // 任务所在的队列 ID,非必须 - // CallBackFormat: '', // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式,非必须 - // CallBackType: '', // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型,非必须 - // CallBack: '', // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调,非必须 - // CallBackMqConfig: '', // 任务回调 TDMQ 配置,当 CallBackType 为 TDMQ 时必填,非必须 + // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 + // CallBackFormat: '', + // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 + // CallBackType: '', + // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 + // CallBack: '', + // 任务回调TDMQ配置,当 CallBackType 为 TDMQ 时必填。详情见 CallBackMqConfig;是否必传:否 + // CallBackMqConfig: { + // 消息队列所属园区,目前支持园区 sh(上海)、bj(北京)、gz(广州)、cd(成都)、hk(中国香港);是否必传:是 + // MqRegion: '', + // 消息队列使用模式,默认 Queue :主题订阅:Topic队列服务: Queue;是否必传:是 + // MqMode: '', + // TDMQ 主题名称;是否必传:是 + // MqName: '', + // }, }, }); + cos.request( { - Method: 'POST', - Key: 'jobs', - Url: url, - Body: body, - ContentType: 'application/xml', + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 }, function (err, data) { - logger.log(err || data); + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + } + ); +} + +// 创建语音合成模板 +function postVoiceSynthesisTemplete() { + const key = 'template'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 模板类型:Tts;是否必传:是 + Tag: 'Tts', + // 模板名称,仅支持中文、英文、数字、_、-和*,长度不超过 64;是否必传:是 + Name: 'my_tts', + // 处理模式Asyc(异步合成)Sync(同步合成);是否必传:否 + // Mode: 'Asyc', + // 音频格式,支持 wav、mp3、pcm ;是否必传:否 + // Codec: 'pcm', + // 音色,取值和限制介绍请见下表;是否必传:否 + // VoiceType: 'ruxue', + // 音量,取值范围 [-10,10];是否必传:否 + // Volume: '0', + // 语速,取值范围 [50,200];是否必传:否 + // Speed: '100', + // 情绪,不同音色支持的情绪不同,详见下表;是否必传:否 + // Emotion: '', + }, + }); + + cos.request( + { + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, + function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + } + ); +} + +// 更新语音合成模板 +function updateVoiceSynthesisTemplete() { + const templateId = 'xxxx'; // 要更新的模板id + const key = `template/${templateId}`; // 固定格式 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 模板类型:Tts;是否必传:是 + Tag: 'Tts', + // 模板名称,仅支持中文、英文、数字、_、-和*,长度不超过 64;是否必传:是 + Name: 'my_tts2', + // 处理模式Asyc(异步合成)Sync(同步合成);是否必传:否 + Mode: 'Asyc', + // 音频格式,支持 wav、mp3、pcm ;是否必传:否 + Codec: 'pcm', + // 音色,取值和限制介绍请见下表;是否必传:否 + VoiceType: 'ruxue', + // 音量,取值范围 [-10,10];是否必传:否 + Volume: '0', + // 语速,取值范围 [50,200];是否必传:否 + Speed: '100', + // 情绪,不同音色支持的情绪不同,详见下表;是否必传:否 + Emotion: '无', + }, + }); + + cos.request( + { + Method: 'PUT', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 }, + function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + } ); } // 提交语音识别任务 function postSpeechRecognition() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/asr_jobs'; - var url = 'https://' + host; + const key = 'jobs'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; var body = COS.util.json2xml({ Request: { Tag: 'SpeechRecognition', @@ -2264,41 +2561,195 @@ function postSpeechRecognition() { cos.request( { Method: 'POST', - Key: 'asr_jobs', + Key: key, Url: url, Body: body, ContentType: 'application/xml', }, function (err, data) { - logger.log(err || data); - }, - ); -} - -// 查询语音识别队列 + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }, + ); +} + +// 创建语音识别模板 +function postSpeechRecognitionTemplete() { + const key = 'template'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 模板类型:SpeechRecognition;是否必传:是 + Tag: 'SpeechRecognition', + // 模板名称,仅支持中文、英文、数字、_、-和*,长度不超过 64;是否必传:是 + Name: 'my_speechRecognition', + // 语音识别参数;是否必传:是 + SpeechRecognition: { + // 开启极速ASR,取值 true/false;是否必传:否 + FlashAsr: 'false', + // 引擎模型类型,分为电话场景和非电话场景。电话场景:8k_zh:电话 8k 中文普通话通用(可用于双声道音频)8k_zh_s:电话 8k 中文普通话话者分离(仅适用于单声道音频)8k_en:电话 8k 英语 非电话场景: 6k_zh:16k 中文普通话通用16k_zh_video:16k 音视频领域16k_en:16k 英语16k_ca:16k 粤语16k_ja:16k 日语16k_zh_edu:中文教育16k_en_edu:英文教育16k_zh_medical:医疗16k_th:泰语16k_zh_dialect:多方言,支持23种方言极速 ASR 支持8k_zh、16k_zh、16k_en、16k_zh_video、16k_zh_dialect、16k_ms(马来语)、16k_zh-PY(中英粤);是否必传:是 + EngineModelType: '16k_zh', + // 语音声道数:1 表示单声道。EngineModelType为非电话场景仅支持单声道2 表示双声道(仅支持 8k_zh 引擎模型 双声道应分别对应通话双方)仅���持非极速ASR,为非极速ASR时,该参数必填;是否必传:否 + ChannelNum: '1', + // 识别结果返回形式:0:识别结果文本(含分段时间戳)1:词级别粒度的详细识别结果,不含标点,含语速值(词时间戳列表,一般用于生成字幕场景)2:词级别粒度的详细识别结果(包含标点、语速值)3:标点符号分段,包含每段时间戳,特别适用于字幕场景(包含词级时间、标点、语速值)仅支持非极速ASR;是否必传:否 + // ResTextFormat: '0', + // 是否过滤脏词(目前支持中文普通话引擎)0:不过滤脏词1:过滤脏词2:将脏词替换为 *;是否必传:否 + // FilterDirty: '0', + // 是否过滤语气词(目前支持中文普通话引擎):0 表示不过滤语气词1 表示部分过滤2 表示严格过滤 ;是否必传:否 + // FilterModal: '0', + // 是否进行阿拉伯数字智能转换(目前支持中文普通话引擎)0:不转换,直接输出中文数字1:根据场景智能转换为阿拉伯数字3 :打开数学相关数字转换仅支持非极速ASR;是否必传:否 + // ConvertNumMode: '0', + // 是否开启说话人分离0:不开启1:开启(仅支持8k_zh,16k_zh,16k_zh_video,单声道音频)8k电话场景建议使用双声道来区分通话双方,设置ChannelNum=2即可,不用开启说话人分离。;是否必传:否 + // SpeakerDiarization: '0', + // 说话人分离人数(需配合开启说话人分离使用),取值范围:[0, 10]0 代表自动分离(目前仅支持≤6个人)1-10代表指定说话人数分离仅支持非极速ASR;是否必传:否 + // SpeakerNumber: '', + // 是否过滤标点符号(目前支持中文普通话引擎)0:不过滤。1:过滤句末标点2:过滤所有标点;是否必传:否 + // FilterPunc: '', + // 输出文件类型,可选txt、srt极速ASR仅支持txt非极速Asr且ResTextFormat为3时仅支持txt;是否必传:否 + // OutputFileType: '', + // 极速ASR音频格式,支持 wav、pcm、ogg-opus、speex、silk、mp3、m4a、aac极速ASR时,该参数必填;是否必传:否 + // Format: '', + // 是否识别首个声道0:识别所有声道1:识别首个声道仅支持极速ASR;是否必传:否 + // FirstChannelOnly: '', + // 是否显示词级别时间戳0:不显示1:显示,不包含标点时间戳2:显示,包含标点时间戳仅支持极速ASR;是否必传:否 + // WordInfo: '', + // 单标点最多字数,取值范围:[6,40]默认值为 0 表示不开启该功能该参数可用于字幕生成场景,控制单行字幕最大字数当FlashAsr为false时,仅ResTextFormat为3时参数有效;是否必传:否 + // SentenceMaxLength: '', + }, + }, + }); + + cos.request( + { + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, + function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + } + ); +} + +// 更新语音识别模板 +function updateSpeechRecognitionTemplete() { + const templateId = 'xxxxx'; // 要更新的模板id + const key = `template/${templateId}`; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 模板类型:SpeechRecognition;是否必传:是 + Tag: 'SpeechRecognition', + // 模板名称,仅支持中文、英文、数字、_、-和*,长度不超过 64;是否必传:是 + Name: 'my_speechRecognition', + // 语音识别参数;是否必传:是 + SpeechRecognition: { + // 开启极速ASR,取值 true/false;是否必传:否 + FlashAsr: 'true', + // 引擎模型类型,分为电话场景和非电话场景。电话场景:8k_zh:电话 8k 中文普通话通用(可用于双声道音频)8k_zh_s:电话 8k 中文普通话话者分离(仅适用于单声道音频)8k_en:电话 8k 英语 非电话场景: 6k_zh:16k 中文普通话通用16k_zh_video:16k 音视频领域16k_en:16k 英语16k_ca:16k 粤语16k_ja:16k 日语16k_zh_edu:中文教育16k_en_edu:英文教育16k_zh_medical:医疗16k_th:泰语16k_zh_dialect:多方言,支持23种方言极速 ASR 支持8k_zh、16k_zh、16k_en、16k_zh_video、16k_zh_dialect、16k_ms(马来语)、16k_zh-PY(中英粤);是否必传:是 + EngineModelType: '16k_zh', + // 语音声道数:1 表示单声道。EngineModelType为非电话场景仅支持单声道2 表示双声道(仅支持 8k_zh 引擎模型 双声道应分别对应通话双方)仅���持非极速ASR,为非极速ASR时,该参数必填;是否必传:否 + ChannelNum: '2', + // 识别结果返回形式:0:识别结果文本(含分段时间戳)1:词级别粒度的详细识别结果,不含标点,含语速值(词时间戳列表,一般用于生成字幕场景)2:词级别粒度的详细识别结果(包含标点、语速值)3:标点符号分段,包含每段时间戳,特别适用于字幕场景(包含词级时间、标点、语速值)仅支持非极速ASR;是否必传:否 + // ResTextFormat: '', + // 是否过滤脏词(目前支持中文普通话引擎)0:不过滤脏词1:过滤脏词2:将脏词替换为 *;是否必传:否 + // FilterDirty: '', + // 是否过滤语气词(目前支持中文普通话引擎):0 表示不过滤语气词1 表示部分过滤2 表示严格过滤 ;是否必传:否 + // FilterModal: '', + // 是否进行阿拉伯数字智能转换(目前支持中文普通话引擎)0:不转换,直接输出中文数字1:根据场景智能转换为阿拉伯数字3 :打开数学相关数字转换仅支持非极速ASR;是否必传:否 + // ConvertNumMode: '', + // 是否开启说话人分离0:不开启1:开启(仅支持8k_zh,16k_zh,16k_zh_video,单声道音频)8k电话场景建议使用双声道来区分通话双方,设置ChannelNum=2即可,不用开启说话人分离。;是否必传:否 + // SpeakerDiarization: '', + // 说话人分离人数(需配合开启说话人分离使用),取值范围:[0, 10]0 代表自动分离(目前仅支持≤6个人)1-10代表指定说话人数分离仅支持非极速ASR;是否必传:否 + // SpeakerNumber: '', + // 是否过滤标点符号(目前支持中文普通话引擎)0:不过滤。1:过滤句末标点2:过滤所有标点;是否必传:否 + // FilterPunc: '', + // 输出文件类型,可选txt、srt极速ASR仅支持txt非极速Asr且ResTextFormat为3时仅支持txt;是否必传:否 + // OutputFileType: '', + // 极速ASR音频格式,支持 wav、pcm、ogg-opus、speex、silk、mp3、m4a、aac极速ASR时,该参数必填;是否必传:否 + // Format: '', + // 是否识别首个声道0:识别所有声道1:识别首个声道仅支持极速ASR;是否必传:否 + // FirstChannelOnly: '', + // 是否显示词级别时间戳0:不显示1:显示,不包含标点时间戳2:显示,包含标点时间戳仅支持极速ASR;是否必传:否 + // WordInfo: '', + // 单标点最多字数,取值范围:[6,40]默认值为 0 表示不开启该功能该参数可用于字幕生成场景,控制单行字幕最大字数当FlashAsr为false时,仅ResTextFormat为3时参数有效;是否必传:否 + // SentenceMaxLength: '', + }, + }, + }); + + cos.request( + { + Method: 'PUT', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, + function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + } + ); +} + +// 查询语音识别队列 function getAsrQueue() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/asrqueue'; - var url = 'https://' + host; + const key = 'asrqueue'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + cos.request( { - Method: 'GET', - Key: 'asrqueue', - Url: url, + Method: 'GET', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 Query: { - // queueIds: '', // 非必须,队列 ID,以“,”符号分割字符串 - // state: '', // 非必须,1=Active,2=Paused - // pageNumber: 1, // 非必须,第几页 - // pageSize: 2, // 非必须,每页个数 + // 队列 ID,以“,”符号分割字符串;是否必传:否 + // queueIds: '', + // Active 表示队列内的作业会被调度执行Paused 表示队列暂停,作业不再会被调度执行,队列内的所有作业状态维持在暂停状态,已经执行中的任务不受影响;是否必传:否 + // state: '', + // 第几页,默认值1;是否必传:否 + // pageNumber: '', + // 每页个数,默认值10;是否必传:否 + // pageSize: '', }, + }, function (err, data) { - logger.log(err || data); + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } }, ); } // 更新语音识别队列 -function putAsrQueue() { +function updateAsrQueue() { // 任务所在的队列 ID,请使用查询队列(https://cloud.tencent.com/document/product/460/46946)获取或前往万象控制台(https://cloud.tencent.com/document/product/460/46487)在存储桶中查询 var queueId = 'pcc77499e85c311edb9865254008618d9'; var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/asrqueue/' + queueId; @@ -2325,139 +2776,349 @@ function putAsrQueue() { ContentType: 'application/xml', }, function (err, data) { - logger.log(err || data); + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } }, ); } // 查询语音识别开通状态 function getAsrBucket() { - var host = 'ci.' + config.Region + '.myqcloud.com/asrbucket'; - var url = 'https://' + host; + const key = 'asrbucket'; // 固定值 + const host = `ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + cos.request( { - Method: 'GET', - Key: 'asrbucket', - Url: url, + Method: 'GET', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 Query: { - // regions: '', // 非必须,地域信息,以“,”分隔字符串,支持 All、ap-shanghai、ap-beijing - // bucketNames: '', // 非必须,存储桶名称,以“,”分隔,支持多个存储桶,精确搜索 - // bucketName: '', // 非必须,存储桶名称前缀,前缀搜索 - // pageNumber: 1, // 非必须,第几页 - // pageSize: 10, // 非必须,每页个数 + // 地域信息,例如 ap-shanghai、ap-beijing,若查询多个地域以“,”分隔字符串,详情请参见 地域与域名;是否必传:是 + // regions: "", + // 存储桶名称,以“,”分隔,支持多个存储桶,精确搜索;是否必传:是 + // bucketNames: "", + // 存储桶名称前缀,前缀搜索;是否必传:是 + // bucketName: "", + // 第几页;是否必传:是 + // pageNumber: 1, + // 每页个数,大于0且小于等于100的整数;是否必传:是 + // pageSize: 10, }, + }, function (err, data) { - logger.log(err || data); + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } }, ); } -// 获取在线文档预览地址 -function getDocHtmlPreviewUrl() { - var key = 'test.pdf'; - var host = config.Bucket + '.cos.' + config.Region + '.myqcloud.com/' + key; - var url = 'https://' + host; +// 开通智能语音 +function openAsrBucket() { + const key = 'asrbucket'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + cos.request( { - Method: 'GET', - Key: key, - Url: url, - RawBody: true, - Query: { - 'ci-process': 'doc-preview', // 必须,预览固定参数,值为 doc-preview - dstType: 'html', // 必须,预览类型,如需预览生成类型为 html 则填入 html - weboffice_url: 1, // 非必须,是否获取预览链接。填入值为1会返回预览链接和Token信息;填入值为2只返回Token信息;不传会直接预览 - }, + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 }, function (err, data) { - // 从响应数据中解析出在线文档预览地址 - let body = {}; - if (data && data.Body) { - body = JSON.parse(data.Body) || {}; - } - if (body && body.PreviewUrl) { - data.PreviewUrl = body.PreviewUrl; + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); } - logger.log(err || data); - }, + } ); } -// 开通文件处理服务 -function createFileProcessBucket() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/file_bucket'; - var url = 'https://' + host; +// 关闭智能语音 +function closeAsrBucket() { + const key = 'asrbucket'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; cos.request( { - Method: 'POST', - Key: 'file_bucket', - Url: url, + Method: 'DELETE', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 }, function (err, data) { - logger.log(err || data); - }, + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + } ); } -// 查询文件处理队列 -function describeFileProcessQueues() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/file_queue'; - var url = 'https://' + host; +// 创建音频降噪模版 +function postNoiseReductionTemplete() { + const key = 'template'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 固定值:NoiseReduction;是否必传:是 + Tag: 'NoiseReduction', + // 模板名称,仅支持中文、英文、数字、_、-和*,长度不超过 64。;是否必传:是 + Name: 'my_noiseReduction', + // 降噪参数;是否必传:是 + NoiseReduction: { + // 封装格式,支持 mp3、m4a、wav;是否必传:否 + Format: 'mp3', + // 采样率单位:Hz可选 8000、12000、16000、24000、32000、44100、48000;是否必传:否 + // Samplerate: '', + }, + }, + }); + cos.request( { - Method: 'GET', - Key: 'file_queue', - Url: url, - Query: { - // queueIds: '', // 非必须,队列 ID,以“,”符号分割字符串 - state: 'Active', // 非必须,Active 表示队列内的作业会被调度执行。Paused 表示队列暂停,作业不再会被调度执行,队列内的所有作业状态维持在暂停状态,已经执行中的任务不受影响 - pageNumber: 1, // 第几页,默认值1 - pageSize: 10, // 非必须,每页个数,默认值10 - }, + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 }, function (err, data) { - logger.log(err || data); - }, + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + } ); } -// 更新文件处理队列 -function updateFileProcessQueue() { - // 任务所在的队列 ID,请使用查询队列(https://cloud.tencent.com/document/product/460/46946)获取或前往万象控制台(https://cloud.tencent.com/document/product/460/46487)在存储桶中查询 - var queueId = 'p6160ada105a7408e95aac015f4bf8xxx'; - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/file_queue/' + queueId; - var url = 'https://' + host; - var body = COS.util.json2xml({ +// 更新音频降噪模板 +function updateNoiseReductionTemplete() { + const templateId = 'xxxxx'; // 要更新的模板id + const key = `template/${templateId}`; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ Request: { - Name: 'My-Queue-file', // 必须,队列名称,长度不超过128 - State: 'Active', // 必须,Active 表示队列内的作业会被调度执行。Paused 表示队列暂停,作业不再会被调度执行,队列内的所有作业状态维持在暂停状态,已经执行中的任务不受影响。 - NotifyConfig: { - // 必须,回调配置 - State: 'On', // 必须,回调开关,Off/On,默认Off - Event: 'TaskFinish', // 回调事件,当 State=On时, 必选。任务完成:TaskFinish;工作流完成:WorkflowFinish - ResultFormat: 'XML', // 非必选,回调格式,JSON/XML - Type: 'Url', // 回调类型,当 State=On时, 必选,Url 或 TDMQ - Url: 'https://www.example.com', // 回调地址,当 State=On, 且Type=Url时, 必选 - // MqMode: 'Off', // TDMQ 使用模式,当 State=On, 且Type=TDMQ时, 必选 - // MqRegion: 'Off', // TDMQ 所属园区,当 State=On, 且Type=TDMQ时, 必选 - // MqName: 'Off', // TDMQ 主题名称,当 State=On, 且Type=TDMQ时, 必选 + // 固定值:NoiseReduction;是否必传:是 + Tag: 'NoiseReduction', + // 模板名称,仅支持中文、英文、数字、_、-和*,长度不超过 64。;是否必传:是 + Name: 'my_noiseReduction2', + // 降噪参数;是否必传:是 + NoiseReduction: { + // 封装格式,支持 mp3、m4a、wav;是否必传:否 + Format: 'mp3', + // 采样率单位:Hz可选 8000、12000、16000、24000、32000、44100、48000;是否必传:否 + // Samplerate: '', }, }, }); + cos.request( { - Method: 'POST', - Key: 'file_queue/' + queueId, - Url: url, - Body: body, - ContentType: 'application/xml', + Method: 'PUT', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 }, function (err, data) { - logger.log(err || data); - }, - ); -} + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + } + ); +} + +// 提交听歌识曲任务 +function postSoundHound() { + const key = 'jobs'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 创建任务的 Tag:SoundHound;是否必传:是 + Tag: 'SoundHound', + // 待操作的对象信息;是否必传:是 + Input: { + // 文件路径;是否必传:是 + Object: 'ci/music.mp3', + }, + // 操作规则;是否必传:是 + // Operation: { + // 透���用户信息,可打印的 ASCII 码,长度不超过1024;是否必传:否 + // UserData: '', + // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0;是否必传:否 + // JobLevel: '', + // }, + // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 + // CallBackFormat: '', + // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 + // CallBackType: '', + // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 + // CallBack: '', + // 任务回调TDMQ配置,当 CallBackType 为 TDMQ 时必填。详情见 CallBackMqConfig;是否必传:否 + // CallBackMqConfig: { + // 消息队列所属园区,目前支持园区 sh(上海)、bj(北京)、gz(广州)、cd(成都)、hk(中国香港);是否必传:是 + // MqRegion: '', + // 消息队列使用模式,默认 Queue :主题订阅:Topic队列服务: Queue;是否必传:是 + // MqMode: '', + // TDMQ 主题名称;是否必传:是 + // MqName: '', + // }, + }, + }); + + cos.request( + { + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, + function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + } + ); +} + + +// 获取在线文档预览地址 +function getDocHtmlPreviewUrl() { + var key = 'test.pdf'; + var host = config.Bucket + '.cos.' + config.Region + '.myqcloud.com/' + key; + var url = 'https://' + host; + cos.request( + { + Method: 'GET', + Key: key, + Url: url, + RawBody: true, + Query: { + 'ci-process': 'doc-preview', // 必须,预览固定参数,值为 doc-preview + dstType: 'html', // 必须,预览类型,如需预览生成类型为 html 则填入 html + weboffice_url: 1, // 非必须,是否获取预览链接。填入值为1会返回预览链接和Token信息;填入值为2只返回Token信息;不传会直接预览 + }, + }, + function (err, data) { + // 从响应数据中解析出在线文档预览地址 + let body = {}; + if (data && data.Body) { + body = JSON.parse(data.Body) || {}; + } + if (body && body.PreviewUrl) { + data.PreviewUrl = body.PreviewUrl; + } + logger.log(err || data); + }, + ); +} + +// 开通文件处理服务 +function createFileProcessBucket() { + var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/file_bucket'; + var url = 'https://' + host; + cos.request( + { + Method: 'POST', + Key: 'file_bucket', + Url: url, + }, + function (err, data) { + logger.log(err || data); + }, + ); +} + +// 查询文件处理队列 +function describeFileProcessQueues() { + var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/file_queue'; + var url = 'https://' + host; + cos.request( + { + Method: 'GET', + Key: 'file_queue', + Url: url, + Query: { + // queueIds: '', // 非必须,队列 ID,以“,”符号分割字符串 + state: 'Active', // 非必须,Active 表示队列内的作业会被调度执行。Paused 表示队列暂停,作业不再会被调度执行,队列内的所有作业状态维持在暂停状态,已经执行中的任务不受影响 + pageNumber: 1, // 第几页,默认值1 + pageSize: 10, // 非必须,每页个数,默认值10 + }, + }, + function (err, data) { + logger.log(err || data); + }, + ); +} + +// 更新文件处理队列 +function updateFileProcessQueue() { + // 任务所在的队列 ID,请使用查询队列(https://cloud.tencent.com/document/product/460/46946)获取或前往万象控制台(https://cloud.tencent.com/document/product/460/46487)在存储桶中查询 + var queueId = 'p6160ada105a7408e95aac015f4bf8xxx'; + var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/file_queue/' + queueId; + var url = 'https://' + host; + var body = COS.util.json2xml({ + Request: { + Name: 'My-Queue-file', // 必须,队列名称,长度不超过128 + State: 'Active', // 必须,Active 表示队列内的作业会被调度执行。Paused 表示队列暂停,作业不再会被调度执行,队列内的所有作业状态维持在暂停状态,已经执行中的任务不受影响。 + NotifyConfig: { + // 必须,回调配置 + State: 'On', // 必须,回调开关,Off/On,默认Off + Event: 'TaskFinish', // 回调事件,当 State=On时, 必选。任务完成:TaskFinish;工作流完成:WorkflowFinish + ResultFormat: 'XML', // 非必选,回调格式,JSON/XML + Type: 'Url', // 回调类型,当 State=On时, 必选,Url 或 TDMQ + Url: 'https://www.example.com', // 回调地址,当 State=On, 且Type=Url时, 必选 + // MqMode: 'Off', // TDMQ 使用模式,当 State=On, 且Type=TDMQ时, 必选 + // MqRegion: 'Off', // TDMQ 所属园区,当 State=On, 且Type=TDMQ时, 必选 + // MqName: 'Off', // TDMQ 主题名称,当 State=On, 且Type=TDMQ时, 必选 + }, + }, + }); + cos.request( + { + Method: 'POST', + Key: 'file_queue/' + queueId, + Url: url, + Body: body, + ContentType: 'application/xml', + }, + function (err, data) { + logger.log(err || data); + }, + ); +} // 哈希值计算同步请求 function generateFileHash() { @@ -2822,74 +3483,1385 @@ function setRefer() { }); cos.request( { - Method: 'PUT', - Url: url, - Body: body, - ContentType: 'application/xml', + Method: 'PUT', + Url: url, + Body: body, + ContentType: 'application/xml', + }, + function (err, data) { + logger.log(err || data); + }, + ); +} + +// 开通原图保护 +function openOriginProtect() { + var host = config.Bucket + '.pic.' + config.Region + '.myqcloud.com/?origin-protect'; + var url = 'https://' + host; + cos.request( + { + Method: 'PUT', + Url: url, + }, + function (err, data) { + logger.log(err || data); + }, + ); +} + +// 查询原图保护状态 +function describeOriginProtect() { + var host = config.Bucket + '.pic.' + config.Region + '.myqcloud.com/?origin-protect'; + var url = 'https://' + host; + cos.request( + { + Method: 'GET', + Url: url, + }, + function (err, data) { + logger.log(err || data); + }, + ); +} + +// 关闭原图保护 +function closeOriginProtect() { + var host = config.Bucket + '.pic.' + config.Region + '.myqcloud.com/?origin-protect'; + var url = 'https://' + host; + cos.request( + { + Method: 'DELETE', + Url: url, + }, + function (err, data) { + logger.log(err || data); + }, + ); +} + +// 查看指定任务 +function getJobDetail() { + const jobId = 'jec8ae8943c2511ee9d4a9b3cb7a5c6xx'; // jobId: 需要查询的jobId; + const key = `jobs/${jobId}`; // jobId: 需要查询的jobId; + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + + cos.request( + { + Method: 'GET', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + }, + function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }, + ); +} + +// 获取任务列表 +function getJobList() { + const key = `jobs`; // 固定值,必须 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + + cos.request( + { + Method: 'GET', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Query: { + // 拉取该队列 ID 下的任务;是否必传:否 + // queueId: '', + // 拉取队列类型下的任务,和 queueId 不同时生效,同时存在时 queueId 优先;是否必传:否 + // queueType: '', + // 任务的 Tag;是否必传:是,比如查找视频转动图的任务 + tag: 'Animation', + // 触发该任务的工作流ID;是否必传:否 + workflowId: '', + // 触发该任务的存量触发任务ID;是否必传:否 + // inventoryTriggerJobId: '', + // 该任务的输入文件名,暂仅支持精确匹配;是否必传:否 + // inputObject: '', + // Desc 或者 Asc。默认为 Desc;是否必传:否 + // orderByTime: '', + // 请求的上下文,用于翻页。上次返回的值;是否必传:否 + // nextToken: '', + // 拉取的最大任务数。默认为10。最大为100;是否必传:否 + size: 10, + // 拉取该状态的任务,以,分割,支持多状态:All、Submitted、Running、Success、Failed、Pause、Cancel。默认为 All;是否必传:否 + states: 'All', + // 拉取创建时间大于该时间的任务。格式为:%Y-%m-%dT%H:%m:%S%z,示例:2001-01-01T00:00:00+0800;是否必传:否 + // startCreationTime: '', + // 拉取创建时间小于该时间的任务。格式为:%Y-%m-%dT%H:%m:%S%z,示例:2001-01-01T23:59:59+0800;是否必传:否 + // endCreationTime: '', + }, + }, + function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }, + ); +} + +function getWorkflow() { + const key = `workflow`; // + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + + cos.request( + { + Method: 'GET', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Query: { + // 工作流 ID,以,符号分割字符串;是否必传:否 + ids: '', + // 工作流名称;是否必传:否 + name: '', + // 第几页;是否必传:否 + pageNumber: '', + // 每页个数;是否必传:否 + pageSize: '', + }, + }, + function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }, + ); +} + +// 获取工作流实例详情 +function getWorkflowexecution() { + const runId = 'ic7af1bf53c2911ee9988525400ae68xx'; + const key = `workflowexecution/${runId}`; // RunId:7; + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + + cos.request( + { + Method: 'GET', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + }, + function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }, + ); +} + +// 测试工作流 +function triggerworkflow() { + const key = `triggerworkflow`; // + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + + cos.request( + { + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Query: { + // 需要触发的工作流 ID;是否必传:是 + workflowId: 'wd3330113a4ef4287a4e0a93c36af09xx', + // 需要进行工作流处理的对象名称, 需要进行 url 编码;是否必传:是 + object: 'test.mp4', + // 存量触发任务名称,支持中文、英文、数字、—和_,长度限制128字符,默认为空;是否必传:否 + // name: '', + }, + }, + function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }, + ); +} + +// 开通AI内容识别 +function openAIBucket() { + const key = 'ai_bucket'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + + cos.request( + { + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + + }, + function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }, + ); +} + +// 关闭AI内容识别 +function closeAIBucket() { + const key = 'ai_bucket'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + + cos.request( + { + Method: 'DELETE', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + }, + function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }, + ); +} + +// 查询开通AI内容识别的桶 +function getAIBucket() { + const key = 'ai_bucket'; // 固定值 + const host = `ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + + cos.request( + { + Method: 'GET', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Query: { + // 地域信息,例如 ap-shanghai、ap-beijing,若查询多个地域以“,”分隔字符串,详情请参见 地域与域名;是否必传:是 + // regions: '', + // 存储桶名称,以“,”分隔,支持多个存储桶,精确搜索;是否必传:是 + // bucketNames: '', + // 存储桶名称前缀,前缀搜索;是否必传:是 + // bucketName: '', + // 第几页;是否必传:是 + // pageNumber: 1, + // 每页个数,大于0且小于等于100的整数;是否必传:是 + // pageSize: 10, + }, + + }, + function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }, + ); +} + + +// 查询AI内容识别队列 +function getAIQueue() { + const key = 'ai_queue'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + + cos.request( + { + Method: 'GET', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Query: { + // 队列 ID,以“,”符号分割字符串;是否必传:否 + // queueIds: '', + // Active 表示队列内的作业会被调度执行Paused 表示队列暂停,作业不再会被调度执行,队列内的所有作业状态维持在暂停状态,已经执行中的任务不受影响;是否必传:否 + state: 'Active', + // 第几页,默认值1;是否必传:否 + // pageNumber: 0, + // 每页个数,默认值10;是否必传:否 + // pageSize: 0, + }, + + }, + function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }, + ); +} + +// 更新AI内容识别队列 +function updateAIQueue() { + const queueId = 'pf71b90a56f614163b0b7d00cf20518b4'; // 队列id + const key = `ai_queue/${queueId}`; // 固定格式 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 队列名称,仅支持中文、英文、数字、_、-和*,长度不超过 128;是否必传:是 + Name: 'my_queue', + // Active 表示队列内的作业会被调度执行Paused 表示队列暂停,作业不再会被调度执行,队列内的所有作业状态维持在暂停状态,已经执行中的任务不受影响;是否必传:是 + State: 'Active', + // 回调配置;是否必传:是 + NotifyConfig: { + // 回调开关OffOn;是否必传:否 + State: 'On', + // 回调事件TaskFinish:任务完成WorkflowFinish:工作流完成;是否必传:否 + Event: 'TaskFinish', + // 回调格式XMLJSON;是否必传:否 + // ResultFormat: '', + // 回调类型UrlTDMQ;是否必传:否 + Type: 'Url', + // 回调地址,不能为内网地址。;是否必传:否 + Url: 'http://example.com', + // TDMQ 使用模式Topic:主题订阅Queue: 队列服务;是否必传:否 + // MqMode: '', + // TDMQ 所属园区,目前支持园区 sh(上海)、bj(北京)、gz(广州)、cd(成都)、hk(中国香港);是否必传:否 + // MqRegion: '', + // TDMQ 主题名称;是否必传:否 + // MqName: '', + }, + }, + }); + + cos.request( + { + Method: 'PUT', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, + function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + } + ); +} + +// 车辆识别 +function aIDetectCar() { + cos.request( + { + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', // 固定值,必须 + Key: 'ci/car.png', // 对象文件名,必须,例如:folder/document.jpg + Query: { + // 数据万象处理能力,车辆识别固定为 DetectCar;是否必传:是 + 'ci-process': 'DetectCar', + }, + + }, + function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }, + ); +} + +// 宠物识别 +function aIDetectPet() { + cos.request( + { + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', // 固定值,必须 + Key: 'ci/dog.jpeg', // 对象文件名,必须,例如:folder/document.jpg须 + Query: { + // 数据万象处理能力,宠物识别固定为 detect-pet;是否必传:是 + 'ci-process': 'detect-pet', + }, + }, + function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }, + ); +} + +// 创建视频目标检测模板 +function postVideoTargetTemplete() { + const key = 'template'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 模板类型:VideoTargetRec;是否必传:是 + Tag: 'VideoTargetRec', + // 模板名称,仅支持中文、英文、数字、_、-和*,长度不超过 64;是否必传:是 + Name: 'my_videoTargetRec', + // 视频目标检测 参数;是否必传:是 + VideoTargetRec: { + // 是否开启人体检测,取值 true/false;是否必传:否 + Body: 'true', + // 是否开启宠物检测,取值 true/false;是否必传:否 + Pet: 'true', + // 是否开启车辆检测,取值 true/false;是否必传:否 + Car: 'false', + }, + }, + }); + + cos.request( + { + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, + function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + } + ); +} + +// 更新视频目标检测模板 +function updateVideoTargetTemplete() { + const templateId = 'xxxxxxx'; // 要更新的模板id + const key = `template/${templateId}`; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 模板类型:VideoTargetRec;是否必传:是 + Tag: 'VideoTargetRec', + // 模板名称,仅支持中文、英文、数字、_、-和*,长度不超过 64;是否必传:是 + Name: 'my_videoTargetRec2', + // 视频目标检测 参数;是否必传:是 + VideoTargetRec: { + // 是否开启人体检测,取值 true/false;是否必传:否 + Body: 'false', + // 是否开启宠物检测,取值 true/false;是否必传:否 + Pet: 'false', + // 是否开启车辆检测,取值 true/false;是否必传:否 + Car: 'true', + }, + }, + }); + + cos.request( + { + Method: 'PUT', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, + function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + } + ); +} + +// 提交一个视频目标检测任务 +function postVideoTargetRec() { + const key = 'jobs'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 创建任务的 Tag:VideoTargetRec;是否必传:是 + Tag: 'VideoTargetRec', + // 操作规则;是否必传:是 + Operation: { + // 视频目标检测模板 ID;与VideoTargetRec二选一传递 + TemplateId: 'xxxx', + // 视频目标检测参数, 同创建视频目标检测模板接口中的 Request.VideoTargetRec;与TemplateId二选一传递 + // VideoTargetRec: { + // 是否开启人体检测,取值 true/false;是否必传:否 + // Body: '', + // 是否开启宠物检测,取值 true/false;是否必传:否 + // Pet: '', + // 是否开启车辆检测,取值 true/false;是否必传:否 + // Car: '', + // }, + // 透传用户信息, 可打印的 ASCII 码, 长度不超过1024;是否必传:否 + // UserData: '', + // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0;是否必传:否 + // JobLevel: '', + }, + // 待操作的媒体信息;是否必传:是 + Input: { + // 媒体文件名;是否必传:否 + Object: 'ci/test.mp4', + }, + // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 + // CallBackFormat: '', + // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 + // CallBackType: '', + // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 + // CallBack: '', + // 任务回调TDMQ配置,当 CallBackType 为 TDMQ 时必填。详情请参见 CallBackMqConfig;是否必传:否 + // CallBackMqConfig: { + // 消息队列所属园区,目前支持园区 sh(上海)、bj(北京)、gz(广州)、cd(成都)、hk(中国香港);是否必传:是 + // MqRegion: '', + // 消息队列使用模式,默认 Queue :主题订阅:Topic队列服务: Queue;是否必传:是 + // MqMode: '', + // TDMQ 主题名称;是否必传:是 + // MqName: '', + // }, + }, + }); + + cos.request( + { + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, + function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + } + ); +} + +// 提交词性分析任务 +function postWordsGeneralize() { + const key = 'jobs'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 创建任务的 Tag:WordsGeneralize;是否必传:是 + Tag: 'WordsGeneralize', + // 待操作的对象信息;是否必传:是 + Input: { + // 文件路径;是否必传:是 + Object: 'ci/test.txt', + }, + // 操作规则;是否必传:是 + Operation: { + // 指定分词参数;是否必传:是 + WordsGeneralize: { + // ner 方式,支持 NerBasic 和 DL,默认值 DL;是否必传:否 + NerMethod: 'DL', + // 分词粒度,支持 SegBasic 和 MIX,默认值 MIX;是否必传:否 + SegMethod: 'MIX', + }, + // 透传用户信息,可打印的 ASCII 码,长度不超过1024;是否必传:否 + // UserData: '', + // 任务优先级,级别限制:0 、1 、2。级别越大任务优先级越高,默认为0;是否必传:否 + // JobLevel: '', + }, + // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 + // CallBackFormat: '', + // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 + // CallBackType: '', + // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 + // CallBack: '', + // 任务回调 TDMQ 配置,当 CallBackType 为 TDMQ 时必填。详情见 CallBackMqConfig;是否必传:否 + // CallBackMqConfig: { + // 消息队列所属园区,目前支持园区 sh(上海)、bj(北京)、gz(广州)、cd(成都)、hk(中国香港);是否必传:是 + // MqRegion: '', + // 消息队列使用模式,默认 Queue :主题订阅:Topic队列服务: Queue;是否必传:是 + // MqMode: '', + // TDMQ 主题名称;是否必传:是 + // MqName: '', + // }, + }, + }); + + cos.request( + { + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, + function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + } + ); +} + +function livenessRecognition() { + cos.request( + { + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', // 固定值,必须 + Key: 'ci/tf.mp4', // 必须 + Query: { + // 数据万象处理能力,人脸核身固定为 LivenessRecognition;是否必传:是 + 'ci-process': 'LivenessRecognition', + // 身份证号;是否必传:是 + IdCard: '610321199411040019', + // 姓名。中文请使用 UTF-8编码;是否必传:是 + Name: '田丰', + // 活体检测类型,取值:LIP/ACTION/SILENTLIP 为数字模式,ACTION 为动作模式,SILENT 为静默模式,三种模式选择一种传入;是否必传:是 + LivenessType: 'SILENT', + // 数字模式传参:数字验证码(1234),需先调用接口获取数字验证码动作模式传参:传动作顺序(2,1 or 1,2),需先调用接口获取动作顺序静默模式传参:空;是否必传:否 + ValidateData: '', + // 需要返回多张最佳截图,取值范围1 - 10,不设置默认返回一张最佳截图;是否必传:否 + BestFrameNum: 1, + }, + }, + function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + } + ); +} + +// 获取动作顺序 +function getActionSequence() { + cos.request( + { + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', // 固定值,必须 + Query: { + // 数据万象处理能力,获取动作顺序固定为 GetActionSequence;是否必传:是 + 'ci-process': 'GetActionSequence', + }, + }, + function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + } + ); +} + +// 获取数字验证码 +function getLiveCode() { + cos.request( + { + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', // 固定值,必须 + Query: { + // 数据万象处理能力,获取数字验证码固定为 GetLiveCode;是否必传:是 + 'ci-process': 'GetLiveCode', + }, + }, + function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + } + ); +} + +// 卡证识别 +function aILicenseRec() { + cos.request( + { + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', // 固定值,必须 + Key: 'ci/card.jpeg', // 与detect-url二选一传递 + Query: { + // 数据万象处理能力,卡证识别固定为AILicenseRec;是否必传:是 + 'ci-process': 'AILicenseRec', + // 您可以通过填写 detect-url 处理任意公网可访问的图片链接。不填写 detect-url 时,后台会默认处理 ObjectKey ,填写了 detect-url 时,后台会处理 detect-url 链接,无需再填写 ObjectKey detect-url 示例:http://www.example.com/abc.jpg ,需要进行 UrlEncode,处理后为http%25253A%25252F%25252Fwww.example.com%25252Fabc.jpg;是否必传:否 + 'detect-url': '', + // 卡证识别类型,有效值为IDCard,DriverLicense。
IDCard表示身份证;DriverLicense表示驾驶证,默认:DriverLicense;是否必传:是 + CardType: 'IDCard', + }, + }, + function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + } + ); +} + +// 开通以图搜图 +function imageSearchBucket() { + const key = 'ImageSearchBucket'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 图库容量限制;是否必传:是 + MaxCapacity: 1000, + // 图库访问限制,默认10;是否必传:否 + MaxQps: 10, + }, + }); + + cos.request( + { + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, + function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + } + ); +} + +// 商品抠图 +function goodsMatting() { + cos.request( + { + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', // 固定值,必须 + Key: 'ci/goods.jpeg', // 与detect-url二选一传递 + Query: { + // ;是否必传:是 + 'ci-process': 'GoodsMatting', + // ;是否必传:否 + // 'detect-url': '', + }, + RawBody: true, + DataType: 'blob', + }, + function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + } + ); +} + +// 添加图库图片 +function addImageSearch() { + const body = COS.util.json2xml({ + Request: { + // 物品 ID,最多支持64个字符。若 EntityId 已存在,则对其追加图片;是否必传:是 + EntityId: '123456', + // 用户自定义的内容,最多支持4096个字符,查询时原样带回;是否必传:否 + CustomContent: '小商品', + // 图片自定义标签,最多不超过10个,json 字符串,格式为 key:value (例 key1>=1 key1>='aa' )对;是否必传:否 + // Tags: '', + }, + }); + + cos.request( + { + Bucket: config.Bucket, + Region: config.Region, + Method: 'POST', // 固定值,必须 + Key: 'ci/goods.jpeg', // 必须 + Query: { + // 固定值:ImageSearch;是否必传:是 + 'ci-process': 'ImageSearch', + // 固定值:AddImage;是否必传:是 + action: 'AddImage', + }, + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, + function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + } + ); +} + +// 删除图库图片 +function deleteImageSearch() { + const body = COS.util.json2xml({ + Request: { + // 物品 ID;是否必传:是 + EntityId: '', + }, + }); + + cos.request( + { + Bucket: config.Bucket, + Region: config.Region, + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, + function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + } + ); +} + +// 检索图片 +function getSearchImage() { + cos.request( + { + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', // 固定值,必须 + Key: 'ci/goods.jpeg', // 必须 + Query: { + 'ci-process': 'ImageSearch', + action: 'SearchImage', + // 出参 Score 中,只有超过 MatchThreshold 值的结果才会返回。默认为0;是否必传:否 + MatchThreshold: 0, + // 起始序号,默认值为0;是否必传:否 + Offset: 0, + // 返回数量,默认值为10,最大值为100;是否必传:否 + Limit: 0, + // 针对入库时提交的 Tags 信息进行条件过滤。支持>、>=、<、<=、=、!=,多个条件之间支持 AND 和 OR 进行连接;是否必传:否 + Filter: '', + }, + }, + function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + } + ); +} + +// 提交内容翻译任务 +function postTranslation() { + const key = 'jobs'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 创建任务的 Tag:Translation;是否必传:是 + Tag: 'Translation', + // 待操作的对象信息;是否必传:是 + Input: { + // 源文档文件名单文件(docx/xlsx/html/markdown/txt):不超过800万字符有页数的(pdf/pptx):不超过300页文本文件(txt):不超过10MB二进制文件(pdf/docx/pptx/xlsx):不超过60MB图片文件(jpg/jpeg/png/webp):不超过10MB;是否必传:是 + Object: 'ci/test.txt', + // 文档语言类型zh:简体中文zh-hk:繁体中文zh-tw:繁体中文zh-tr:繁体中文en:英语ar:阿拉伯语de:德语es:西班牙语fr:法语id:印尼语it:意大利语ja:日语pt:葡萄牙语ru:俄语ko:韩语km:高棉语lo:老挝语;是否必传:是 + Lang: 'zh-hk', + // 文档类型pdfdocxpptxxlsxtxtxmlhtml:只能翻译 HTML 里的文本节点,需要通过 JS 动态加载的不进行翻译markdownjpgjpegpngwebp;是否必传:是 + Type: 'txt', + // 原始文档类型仅在 Type=pdf/jpg/jpeg/png/webp 时使用,当值为pdf时,仅支持 docx、pptx当值为jpg/jpeg/png/webp时,仅支持txt;是否必传:否 + // BasicType: '', + }, + // 操作规则;是否必传:是 + Operation: { + // 翻译参数;是否必传:是 + Translation: { + // 目标语言类型源语言类型为 zh/zh-hk/zh-tw/zh-tr 时支持:en、ar、de、es、fr、id、it、ja、it、ru、ko、km、lo、pt源语言类型为 en 时支持:zh、zh-hk、zh-tw、zh-tr、ar、de、es、fr、id、it、ja、it、ru、ko、km、lo、pt其他类型时支持:zh、zh-hk、zh-tw、zh-tr、en;是否必传:是 + Lang: 'en', + // 文档类型,源文件类型与目标文件类型映射关系如下:docx:docxpptx:pptxxlsx:xlsxtxt:txtxml:xmlhtml:htmlmarkdown:markdownpdf:pdf、docxpng:txtjpg:txtjpeg:txtwebp:txt;是否必传:是 + Type: 'txt', + }, + // 结果输出地址,当NoNeedOutput为true时非必选;是否必传:否 + Output: { + // 存储桶的地域;是否必传:是 + Region: config.Region, + // 存储结果的存储桶;是否必传:是 + Bucket: config.Bucket, + // 输出结果的文件名;是否必传:是 + Object: 'ci/trans_test.txt', + }, + // 透传用户信息,可打印的 ASCII 码,长度不超过1024;是否必传:否 + // UserData: '', + // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0;是否必传:否 + // JobLevel: '', + // 仅输出结果,不生成结果文件。取值:true/false。该参数原文档类型为图片时有效。默认值 false;是否必传:否 + // NoNeedOutput: '', + }, + // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 + // CallBackFormat: '', + // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 + // CallBackType: '', + // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 + // CallBack: '', + // 任务回调TDMQ配置,当 CallBackType 为 TDMQ 时必填。详情见 CallBackMqConfig;是否必传:否 + // CallBackMqConfig: { + // 消息队列所属园区,目前支持园区 sh(上海)、bj(北京)、gz(广州)、cd(成都)、hk(中国香港);是否必传:是 + // MqRegion: '', + // 消息队列使用模式,默认 Queue :主题订阅:Topic队列服务: Queue;是否必传:是 + // MqMode: '', + // TDMQ 主题名称;是否必传:是 + // MqName: '', + // }, + }, + }); + + cos.request( + { + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, + function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + } + ); +} + +// 人脸检测 +function aIDetectFace() { + cos.request( + { + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', // 固定值,必须 + Key: 'ci/1.jpg', // 必须 + Query: { + // 数据万象处理能力,人脸特效固定为 DetectFace。;是否必传:是 + 'ci-process': 'DetectFace', + // 最多处理的人脸数目。默认值为1(仅检测图片中面积最大的那张人脸),最大���为120。此参数用于控制处理待检测图片中的人脸个数,值越小,处理速度越快。;是否必传:否 + 'max-face-num': 1, + }, + }, + function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + } + ); +} + +// 人脸特效 +function aIFaceEffect() { + cos.request( + { + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', // 固定值,必须 + Key: 'ci/dog.jpeg', // 与detect-url二选一传递 + Query: { + // 万象处理能力,人脸特效固定为face-effect;是否必传:是 + 'ci-process': 'face-effect', + // 您可以通过填写 detect-url 处理任意公网可访问的图片链接。不填写 detect-url 时,后台会默认处理 ObjectKey ,填写了 detect-url 时,后台会处理 detect-url 链接,无需再填写 ObjectKey detect-url 示例:http://www.example.com/abc.jpg ,需要进行 UrlEncode,处理后为http%25253A%25252F%25252Fwww.example.com%25252Fabc.jpg。;是否必传:否 + // 'detect-url': '', + // 人脸特效类型,人脸美颜:face-beautify;人脸性别转换:face-gender-transformation;人脸年龄变化:face-age-transformation;人像分割:face-segmentation;是否必传:是 + type: 'face-beautify', + // type为face-beautify时生效,美白程度,取值范围[0,100]。0不美白,100代表最高程度。默认值30;是否必传:否 + whitening: 50, + // type为face-beautify时生效,磨皮程度,取值范围[0,100]。0不磨皮,100代表最高程度。默认值10;是否必传:否 + smoothing: 50, + // type为face-beautify时生效,瘦脸程度,取值范围[0,100]。0不瘦脸,100代表最高程度。默认值70;是否必传:否 + faceLifting: 50, + // type为face-beautify时生效,大眼程度,取值范围[0,100]。0不大眼,100代表最高程度。默认值70;是否必传:否 + eyeEnlarging: 50, + // type为face-gender-transformation时生效,选择转换方向,0:男变女,1:女变男。无默认值,为必选项。限制:仅对图片中面积最大的人脸进行转换。;是否必传:否 + // gender: 0, + // type为face-age-transformation时生效,变化到的人脸年龄,[10,80]。无默认值,为必选项。限制:仅对图片中面积最大的人脸进行转换。;是否必传:否 + // age: 0, + }, + }, + function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + } + ); +} + +// 人体识别 +function aIBodyRecognition() { + cos.request( + { + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', // 固定值,必须 + Key: 'ci/dog.jpeg', // 与detect-url二选一传递 + Query: { + // 数据万象处理能力,人体识别固定为AIBodyRecognition;是否必传:是 + 'ci-process': 'AIBodyRecognition', + // 您可以通过填写 detect-url 处理任意公网可访问的图片链接。不填写 detect-url 时,后台会默认处理 ObjectKey ,填写了 detect-url 时,后台会处理 detect-url 链接,无需再填写 ObjectKey detect-url 示例:http://www.example.com/abc.jpg ,需要进行 UrlEncode,处理后为http%25253A%25252F%25252Fwww.example.com%25252Fabc.jpg;是否必传:否 + // 'detect-url': '', + }, + }, + function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + } + ); +} + +// 身份证识别 +function aIIDCardOCR() { + cos.request( + { + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', // 固定值,必须 + Key: 'ci/card.jpeg', // 必须 + Query: { + // 数据万象处理能力,身份证识别固定为 IDCardOCR;是否必传:是 + 'ci-process': 'IDCardOCR', + // FRONT:身份证有照片的一面(人像面)BACK:身份证有国徽的一面(国徽面)该参数如果不填,将为您自动判断身份证正反面;是否必传:否 + CardSide: 'FRONT', + // 以下可选字段均为 bool 类型,默认 false:CropIdCard,身份证照片裁剪(去掉证件外多余的边缘、自动矫正拍摄角度)CropPortrait,人像照片裁剪(自动抠取身份证头像区域)CopyWarn,复印件告警BorderCheckWarn,边框和框内遮挡告警ReshootWarn,翻拍告警DetectPsWarn,PS 检测告警TempIdWarn,临时身份证告警InvalidDateWarn,身份证有效日期不合法告警Quality,图片质量分数(评价图片的模糊程度)MultiCardDetect,是否开启多卡证检测参数设置方式参考:Config = {"CropIdCard":true,"CropPortrait":true};是否必传:否 + // Config: {}, + }, + }, + function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + } + ); +} + +// 实时文字翻译 +function autoTranslationBlock() { + cos.request( + { + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', // 固定值,必须 + Query: { + // 数据万象处理能力,文本块翻译固定为 AutoTranslationBlock。;是否必传:是 + 'ci-process': 'AutoTranslationBlock', + // 待翻译的文本;是否必传:是 + InputText: '我是张三', + // 输入语言,如 "zh";是否必传:是 + SourceLang: 'zh', + // 输出语言,如 "en";是否必传:是 + TargetLang: 'en', + // 文本所属业务领域,如: "ecommerce", //缺省值为 general;是否必传:否 + // TextDomain: '', + // 文本类型,如: "title", //缺省值为 sentence;是否必传:否 + // TextStyle: '', + }, + }, + function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + } + ); +} + +// 提交一个视频人像抠图任务 +function postSegmentVideoBody() { + const key = 'jobs'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 创建任务的 Tag:SegmentVideoBody;是否必传:是 + Tag: 'SegmentVideoBody', + // 待操作的对象信息;是否必传:是 + Input: { + // 文件路径;是否必传:是 + Object: 'ci/tf.mp4', + }, + // 操作规则;是否必传:是 + Operation: { + // 视频人像抠图配置;是否必传:否 + SegmentVideoBody: { + // 抠图模式 Mask:输出alpha通道结果Foreground:输出前景视频Combination:输出抠图后的前景与自定义背景合成后的视频默认值:Mask;是否必传:否 + Mode: 'Mask', + // 抠图类型HumanSeg:人像抠图GreenScreenSeg:绿幕抠图SolidColorSeg:纯色背景抠图默认值:HumanSeg;是否必传:否 + // SegmentType: '', + // mode为 Foreground 时参数生效,背景颜色为红色,取值范围 [0, 255], 默认值为 0;是否必传:否 + // BackgroundRed: '', + // mode为 Foreground 时参数生效,背景颜色为绿色,取值范围 [0, 255],默认值为 0;是否必传:否 + // BackgroundGreen: '', + // mode为 Foreground 时参数生效,背景颜色为蓝色,取值范围 [0, 255],默认值为 0;是否必传:否 + // BackgroundBlue: '', + // 传入背景文件。mode为 Combination 时,此参数必填,背景文件需与源文件在同存储桶下;是否必传:否 + // BackgroundLogoUrl: '', + // 调整抠图的边缘位置,取值范围为[0, 255],默认值为 0;是否必传:否 + // BinaryThreshold: '', + // 纯色背景抠图的背景色(红), 当 SegmentType 为 SolidColorSeg 生效,取值范围为 [0, 255],默认值为 0;是否必传:否 + // RemoveRed: '', + // 纯色背景抠图的背景色(绿), 当 SegmentType 为 SolidColorSeg 生效,取值范围为 [0, 255],默认值为 0;是否必传:否 + // RemoveGreen: '', + // 纯色背景抠图的背景色(蓝), 当 SegmentType 为 SolidColorSeg 生效,取���范围为 [0, 255],默认值为 0;是否必传:否 + // RemoveBlue: '', + }, + // 结果输出配置;是否必传:是 + Output: { + // 存储桶的地域;是否必传:是 + Region: config.Region, + // 存储结果的存储桶;是否必传:是 + Bucket: config.Bucket, + // 输出结果的文件名;是否必传:是 + Object: 'ci/ss.mp4', + }, + // 透传用户信息,可打印的 ASCII 码,长度不超过1024;是否必传:否 + // UserData: '', + // 任务优先级,级别限制:0 、1 、2。级别越大任务优先级越高,默认为0;是否必传:否 + // JobLevel: '', + }, + // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 + // CallBackFormat: '', + // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 + // CallBackType: '', + // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 + // CallBack: '', + // 任务回调 TDMQ 配置,当 CallBackType 为 TDMQ 时必填。详情见 CallBackMqConfig;是否必传:否 + // CallBackMqConfig: { + // 消息队列所属园区,目前支持园区 sh(上海)、bj(北京)、gz(广州)、cd(成都)、hk(中国香港);是否必传:是 + // MqRegion: '', + // 消息队列使用模式,默认 Queue :主题订阅:Topic队列服务: Queue;是否必传:是 + // MqMode: '', + // TDMQ 主题名称;是否必传:是 + // MqName: '', + // }, + }, + }); + + cos.request( + { + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 }, function (err, data) { - logger.log(err || data); - }, + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + } ); } -// 开通原图保护 -function openOriginProtect() { - var host = config.Bucket + '.pic.' + config.Region + '.myqcloud.com/?origin-protect'; - var url = 'https://' + host; +function aIImageColoring() { cos.request( { - Method: 'PUT', - Url: url, + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', // 固定值,必须 + Key: 'ci/1.jpg', // 与detect-url二选一传递 + Query: { + // 数据万象处理能力,图片上色参固定为AIImageColoring。;是否必传:是 + 'ci-process': 'AIImageColoring', + // 待上色图片url,需要进行urlencode,与ObjectKey二选其一,如果同时存在,则默认以ObjectKey为准;是否必传:否 + // 'detect-url': '', + }, + RawBody: true, + DataType: 'blob', }, function (err, data) { - logger.log(err || data); - }, + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + } ); } -// 查询原图保护状态 -function describeOriginProtect() { - var host = config.Bucket + '.pic.' + config.Region + '.myqcloud.com/?origin-protect'; - var url = 'https://' + host; +// 图片质量评分 +function assessQuality() { cos.request( { - Method: 'GET', - Url: url, + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', // 固定值,必须 + Key: 'ci/dog.jpeg', // 必须 + Query: { + // 数据万象处理能力,图像质量检测固定为 AssessQuality。;是否必传:是 + 'ci-process': 'AssessQuality', + }, }, function (err, data) { - logger.log(err || data); - }, + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + } ); } -// 关闭原图保护 -function closeOriginProtect() { - var host = config.Bucket + '.pic.' + config.Region + '.myqcloud.com/?origin-protect'; - var url = 'https://' + host; +// 图像超分 +function aISuperResolution() { cos.request( { - Method: 'DELETE', - Url: url, + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', // 固定值,必须 + Key: 'ci/test.jpeg', // 与detect-url二选一传递 + Query: { + // 数据万象处理能力,只能裁剪参固定为AISuperResolution。;是否必传:否 + 'ci-process': 'AISuperResolution', + // 您可以通过填写 detect-url 处理任意公网可访问的图片链接。不填写 detect-url 时,后台会默认处理 ObjectKey ,填写了 detect-url 时,后台会处理 detect-url 链接,无需再填写 ObjectKey,detect-url 示例:http://www.example.com/abc.jpg ,需要进行 UrlEncode,处理后为http%25253A%25252F%25252Fwww.example.com%25252Fabc.jpg。;是否必传:否 + // 'detect-url': '', + }, + RawBody: true, + DataType: 'blob' }, function (err, data) { - logger.log(err || data); - }, + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + } ); } -// 查看指定任务 -function getJobDetail() { - const jobId = 'jec8ae8943c2511ee9d4a9b3cb7a5c6xx'; // jobId: 需要查询的jobId; - const key = `jobs/${jobId}`; // jobId: 需要查询的jobId; - const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - +// 图像修复 +function imageRepair() { cos.request( { + Bucket: config.Bucket, + Region: config.Region, Method: 'GET', // 固定值,必须 - Key: key, // 必须 - Url: url, // 请求的url,必须 + Key: 'ci/card.jpeg', // 必须 + Query: { + // 固定值:ImageRepair;是否必传:是 + 'ci-process': 'ImageRepair', + // 遮罩(白色区域为需要去除的水印位置)图片地址,私有图片需携带签名,需要经过 URL 安全的 Base64 编码 + // 比如图片url为 http://test.com/test.jpg + MaskPic: COS.util.encodeBase64('http://test.com/test.jpg', true), + }, + RawBody: true, + DataType: 'blob', }, function (err, data) { if (err) { @@ -2897,49 +4869,34 @@ function getJobDetail() { console.log(err); } else { // 处理请求成功 - console.log(data.Response); + console.log(data); } - }, + } ); } -// 获取任务列表 -function getJobList() { - const key = `jobs`; // 固定值,必须 - const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - +// 图像增强 +function aIEnhanceImage() { cos.request( { + Bucket: config.Bucket, + Region: config.Region, Method: 'GET', // 固定值,必须 - Key: key, // 必须 - Url: url, // 请求的url,必须 + Key: 'ci/1.jpg', // 与detect-url二选一传递 Query: { - // 拉取该队列 ID 下的任务;是否必传:否 - // queueId: '', - // 拉取队列类型下的任务,和 queueId 不同时生效,同时存在时 queueId 优先;是否必传:否 - // queueType: '', - // 任务的 Tag;是否必传:是,比如查找视频转动图的任务 - tag: 'Animation', - // 触发该任务的工作流ID;是否必传:否 - workflowId: '', - // 触发该任务的存量触发任务ID;是否必传:否 - // inventoryTriggerJobId: '', - // 该任务的输入文件名,暂仅支持精确匹配;是否必传:否 - // inputObject: '', - // Desc 或者 Asc。默认为 Desc;是否必传:否 - // orderByTime: '', - // 请求的上下文,用于翻页。上次返回的值;是否必传:否 - // nextToken: '', - // 拉取的最大任务数。默认为10。最大为100;是否必传:否 - size: 10, - // 拉取该状态的任务,以,分割,支持多状态:All、Submitted、Running、Success、Failed、Pause、Cancel。默认为 All;是否必传:否 - states: 'All', - // 拉取创建时间大于该时间的任务。格式为:%Y-%m-%dT%H:%m:%S%z,示例:2001-01-01T00:00:00+0800;是否必传:否 - // startCreationTime: '', - // 拉取创建时间小于该时间的任务。格式为:%Y-%m-%dT%H:%m:%S%z,示例:2001-01-01T23:59:59+0800;是否必传:否 - // endCreationTime: '', + // 数据万象处理能力,只能裁剪参固定为 AIEnhanceImage。;是否必传:是 + 'ci-process': 'AIEnhanceImage', + // 去噪强度值,取值范围为 0 - 5 之间的整数,值为 0 时不进行去噪操作,默认值为3。;是否必传:否 + denoise: 0, + // 锐化强度值,取值范围为 0 - 5 之间的整数,值为 0 时不进行锐化操作,默认值为3。;是否必传:否 + sharpen: 0, + // 您可以通过填写 detect-url 处理任意公网可访问的图片链接。不填写 detect-url 时,后台会默认处理 ObjectKey ,填写了detect-url 时,后台会处理 detect-url链接,无需再填写 ObjectKey ,detect-url 示例:http://www.example.com/abc.jpg ,需要进行 UrlEncode,处理后为 http%25253A%25252F%25252Fwww.example.com%25252Fabc.jpg;是否必传:否 + // 'detect-url': '', + // ;是否必传:否 + 'ignore-error': 0, }, + RawBody: true, + DataType: 'blob', }, function (err, data) { if (err) { @@ -2947,32 +4904,36 @@ function getJobList() { console.log(err); } else { // 处理请求成功 - console.log(data.Response); + console.log(data); } - }, + } ); } -function getWorkflow() { - const key = `workflow`; // - const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - +// 图像智能裁剪 +function aIImageCrop() { cos.request( { + Bucket: config.Bucket, + Region: config.Region, Method: 'GET', // 固定值,必须 - Key: key, // 必须 - Url: url, // 请求的url,必须 + Key: 'ci/dog.jpeg', // 与detect-url二选一传递 Query: { - // 工作流 ID,以,符号分割字符串;是否必传:否 - ids: '', - // 工作流名称;是否必传:否 - name: '', - // 第几页;是否必传:否 - pageNumber: '', - // 每页个数;是否必传:否 - pageSize: '', + // 数据万象处理能力,智能裁剪固定为AIImageCrop;是否必传:是 + 'ci-process': 'AIImageCrop', + // 您可以通过填写 detect-url 处理任意公网可访问的图片链接。不填写 detect-url 时,后台会默认处理 ObjectKey ,填写了 detect-url 时,后台会处理 detect-url 链接,无需再填写 ObjectKey detect-url 示例:http://www.example.com/abc.jpg ,需要进行 UrlEncode,处理后为http%25253A%25252F%25252Fwww.example.com%25252Fabc.jpg;是否必传:否 + // 'detect-url': '', + // 需要裁剪区域的宽度,与height共同组成所需裁剪的图片宽高比例;输入数字请大于0、小于图片宽度的像素值;是否必传:是 + width: 0, + // 需要裁剪区域的高度,与width共同组成所需裁剪的图片宽高比例;输入数字请大于0、小于图片高度的像素值;width : height建议取值在[1, 2.5]之间,超过这个范围可能会影响效果;是否必传:是 + height: 0, + // 是否严格按照 width 和 height 的值进行输出。取值为0时,宽高比例(width : height)会简化为最简分数,即如果width输入10、height输入20,会简化为1:2;取值为1时,输出图片的宽度等于width,高度等于height;默认值为0;是否必传:否 + fixed: 0, + // 当此参数为1时,针对文件过大等导致处理失败的场景,会直接返回原图而不报错;是否必传:否 + 'ignore-error': 0, }, + RawBody: true, + DataType: 'blob', }, function (err, data) { if (err) { @@ -2980,24 +4941,63 @@ function getWorkflow() { console.log(err); } else { // 处理请求成功 - console.log(data.Response); + console.log(data); } - }, + } ); } -// 获取工作流实例详情 -function getWorkflowexecution() { - const runId = 'ic7af1bf53c2911ee9988525400ae68xx'; - const key = `workflowexecution/${runId}`; // RunId:7; +// 音乐评分 +function vocalScore() { + const key = 'jobs'; // 固定值 const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 创建任务的 Tag:VocalScore;是否必传:是 + Tag: 'VocalScore', + // 待操作的对象信息;是否必传:是 + Input: { + // 文件路径;是否必传:否 + Object: 'ci/music.mp3', + }, + // 操作规则;是否必传:是 + Operation: { + // 音乐评分参数配置;是否必传:是 + VocalScore: { + // 比对基准文件路径;是否必传:否 + StandardObject: 'ci/base.mp3', + }, + // 透传用户信息, 可打印的 ASCII 码, 长度不超过1024;是否必传:否 + // UserData: '', + // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0;是否必传:否 + // JobLevel: '', + }, + // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 + // CallBackFormat: '', + // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 + // CallBackType: '', + // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 + // CallBack: '', + // 任务回调TDMQ配置,当 CallBackType 为 TDMQ 时必填。详情见 CallBackMqConfig;是否必传:否 + // CallBackMqConfig: { + // 消息队列所属园区,目前支持园区 sh(上海)、bj(北京)、gz(广州)、cd(成都)、hk(中国香港);是否必传:是 + // MqRegion: '', + // 消息队列使用模式,默认 Queue :主题订阅:Topic队列服务: Queue;是否必传:是 + // MqMode: '', + // TDMQ 主题名称;是否必传:是 + // MqName: '', + // }, + }, + }); cos.request( { - Method: 'GET', // 固定值,必须 + Method: 'POST', // 固定值,必须 Key: key, // 必须 Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 }, function (err, data) { if (err) { @@ -3007,28 +5007,23 @@ function getWorkflowexecution() { // 处理请求成功 console.log(data.Response); } - }, + } ); } -// 测试工作流 -function triggerworkflow() { - const key = `triggerworkflow`; // - const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - +// 游戏场景识别 +function aIGameRec() { cos.request( { - Method: 'POST', // 固定值,必须 - Key: key, // 必须 - Url: url, // 请求的url,必须 + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', // 固定值,必须 + Key: 'ci/game.jpeg', // 与detect-url二选一传递 Query: { - // 需要触发的工作流 ID;是否必传:是 - workflowId: 'wd3330113a4ef4287a4e0a93c36af09xx', - // 需要进行工作流处理的对象名称, 需要进行 url 编码;是否必传:是 - object: 'test.mp4', - // 存量触发任务名称,支持中文、英文、数字、—和_,长度限制128字符,默认为空;是否必传:否 - // name: '', + // 数据万象处理能力,游戏场景识别固定为 AIGameRec;是否必传:是 + 'ci-process': 'AIGameRec', + // 您可以通过填写 detect-url 对任意公网可访问的图片进行游戏场景识别。不填写 detect-url 时,后台会默认处理 objectkey ;填写了 detect-url 时,后台会处理 detect-url 链接,无需再填写 objectkey , detect-url 示例:http://www.example.com/abc.jpg。;是否必传:是 + // 'detect-url': '', }, }, function (err, data) { @@ -3037,9 +5032,36 @@ function triggerworkflow() { console.log(err); } else { // 处理请求成功 - console.log(data.Response); + console.log(data); } + } + ); +} + +// Logo 识别 +function recognizeLogo() { + cos.request( + { + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', // 固定值,必须 + Key: 'ci/logo.png', // 与detect-url二选一传递 + Query: { + // 数据万象处理能力,Logo识别固定为RecognizeLogo;是否必传:是 + 'ci-process': 'RecognizeLogo', + // 待检查图片url,需要进行urlencode;是否必传:是 + // 'detect-url': '', + }, }, + function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + } ); } @@ -3122,11 +5144,48 @@ function triggerworkflow() { 'getDocHtmlPreviewUrl', 'header-AI识别', + 'openAIBucket', + 'closeAIBucket', + 'getAIBucket', + 'getAIQueue', + 'updateAIQueue', 'getImageLabel', + 'recognitionQRcode', 'identifyQrcode_put', 'identifyQrcode_get', - 'generateQrcode', - 'ocr', + 'createCRcode', + 'cOSOCR', + 'aIDetectCar', + 'aIDetectPet', + 'postVideoTargetTemplete', + 'updateVideoTargetTemplete', + 'postVideoTargetRec', + 'postWordsGeneralize', + 'livenessRecognition', + 'getActionSequence', + 'getLiveCode', + 'aILicenseRec', + 'imageSearchBucket', + 'goodsMatting', + 'addImageSearch', + 'deleteImageSearch', + 'getSearchImage', + 'postTranslation', + 'aIDetectFace', + 'aIFaceEffect', + 'aIBodyRecognition', + 'aIIDCardOCR', + 'autoTranslationBlock', + 'postSegmentVideoBody', + 'aIImageColoring', + 'assessQuality', + 'aISuperResolution', + 'imageRepair', + 'aIEnhanceImage', + 'aIImageCrop', + 'vocalScore', + 'aIGameRec', + 'recognizeLogo', 'header-文件处理', 'postFileCompress', @@ -3145,13 +5204,24 @@ function triggerworkflow() { 'getVirusDetectResult', 'header-智能语音', + 'getAsrBucket', + 'openAsrBucket', + 'closeAsrBucket', + 'getAsrQueue', + 'updateAsrQueue', 'postNoiseReduction', 'postVoiceSeparate', - 'postTts', + 'postVoiceSeparateTemplete', + 'updateVoiceSeparateTemplete', + 'postVoiceSynthesis', + 'postVoiceSynthesisTemplete', + 'updateVoiceSynthesisTemplete', 'postSpeechRecognition', - 'getAsrQueue', - 'putAsrQueue', - 'getAsrBucket', + 'postSpeechRecognitionTemplete', + 'updateSpeechRecognitionTemplete', + 'postNoiseReductionTemplete', + 'updateNoiseReductionTemplete', + 'postSoundHound', 'header-防盗链', 'describeRefer', @@ -3224,11 +5294,50 @@ function triggerworkflow() { describeDocProcessJob: '查询指定的文档预览任务', describeDocProcessJobs: '拉取符合条件的文档预览任务', getDocHtmlUrl: '文档转 HTML', + + openAIBucket: '开通AI内容识别', + closeAIBucket: '关闭AI内容识别', + getAIBucket: '查询开通AI内容识别的桶', + getAIQueue: '查询AI内容识别队列', + updateAIQueue: '更新AI内容识别队列', getImageLabel: '识别图片标签', + recognitionQRcode: '二维码识别(云上数据识别)', identifyQrcode_put: '二维码识别(上传时识别)', identifyQrcode_get: '二维码识别(下载时识别)', - generateQrcode: '二维码生成', - ocr: '图片文字识别', + createCRcode: '二维码生成', + cOSOCR: '图片文字识别', + aIDetectCar: '车辆识别', + aIDetectPet: '宠物识别', + postVideoTargetTemplete: '创建视频目标检测模板', + updateVideoTargetTemplete: '更新视频目标检测模板', + postVideoTargetRec: '提交视频目标检测任务', + postWordsGeneralize: '提交词性分析任务', + livenessRecognition: '活体人脸核身', + getActionSequence: '获取动作顺序', + getLiveCode: '获取数字验证码', + aILicenseRec: '卡证识别', + imageSearchBucket: '开通以图搜图', + goodsMatting: '商品抠图', + addImageSearch: '添加图库图片', + deleteImageSearch: '删除图库图片', + getSearchImage: '图片搜索', + postTranslation: '内容翻译', + aIDetectFace: '人脸检测', + aIFaceEffect: '人脸特效', + aIBodyRecognition: '人体识别', + aIIDCardOCR: '身份证识别', + autoTranslationBlock: '实时文字翻译', + postSegmentVideoBody: '视频人像抠图', + aIImageColoring: '图片上色', + assessQuality: '图片质量评分', + aISuperResolution: '图像超分', + imageRepair: '图像修复', + aIEnhanceImage: '图片增强', + aIImageCrop: '图像智能裁剪', + vocalScore: '音乐评分', + aIGameRec: '游戏场景识别', + recognizeLogo: 'LOGO 识别', + postFileCompress: '提交文件压缩任务', getFileCompress: '查询文件压缩任务', postFileUnCompress: '提交文件解压任务', @@ -3237,13 +5346,27 @@ function triggerworkflow() { getFileHashResult: '查询哈希值计算任务结果', postVirusDetect: '提交病毒检测任务', getVirusDetectResult: '查询病毒检测任务结果', + postNoiseReduction: '提交音频降噪任务', postVoiceSeparate: '提交人声分离任务', - postTts: '提交语音合成任务', + postVoiceSeparateTemplete: '创建人声分离模板', + updateVoiceSeparateTemplete: '更新人声分离模板', + postNoiseReductionTemplete: '创建音频降噪模版', + updateNoiseReductionTemplete: '更新音频降噪模板', + postVoiceSynthesis: '提交语音合成任务', + postVoiceSynthesisTemplete: '创建语音合成模板', + updateVoiceSynthesisTemplete: '更新语音合成模板', postSpeechRecognition: '提交语音识别任务', + postSpeechRecognitionTemplete: '创建语音识别模板', + updateSpeechRecognitionTemplete: '更新语音识别模板', getAsrQueue: '查询语音识别队列', - putAsrQueue: '更新语音识别队列', + updateAsrQueue: '更新语音识别队列', getAsrBucket: '查询语音识别开通状态', + openAsrBucket: '开通智能语音', + closeAsrBucket: '关闭智能语音', + postSoundHound: '提交听歌识曲任务', + + getDocHtmlPreviewUrl: '获取在线文档预览地址', createFileProcessBucket: '开通文件处理服务', describeFileProcessQueues: '查询文件处理队列', diff --git a/demo/index.html b/demo/index.html index 41dab86..6beca97 100644 --- a/demo/index.html +++ b/demo/index.html @@ -73,11 +73,12 @@ } .demo-select-content { display: inline-block; - font-size: 16px; + font-size: 0; margin-left: 20px; } .demo-select-content div { display: inline-block; + font-size: 16px; border: solid 1px #ddd; padding: 2px 6px; cursor: pointer; From 16cafcaaca3a6c9bc2111690abd7759c57e6e4f2 Mon Sep 17 00:00:00 2001 From: chrisftian Date: Thu, 12 Oct 2023 16:05:17 +0800 Subject: [PATCH 08/11] =?UTF-8?q?feat:=20=E4=B8=87=E8=B1=A1demo=E6=8A=BD?= =?UTF-8?q?=E7=A6=BB=E7=9B=AE=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- demo/CIDemos/ai.js | 1480 +++++++++ demo/CIDemos/asr.js | 927 ++++++ demo/CIDemos/audit.js | 537 +++ demo/CIDemos/common.js | 177 + demo/CIDemos/docPreview.js | 281 ++ demo/CIDemos/fileProcess.js | 330 ++ demo/CIDemos/index.js | 121 + demo/CIDemos/mediaProcess.js | 1081 ++++++ demo/CIDemos/picProcess.js | 475 +++ demo/CIDemos/taskAndWorkflow.js | 170 + demo/ciDemo.js | 5431 ------------------------------- demo/index.html | 2 +- 12 files changed, 5580 insertions(+), 5432 deletions(-) create mode 100644 demo/CIDemos/ai.js create mode 100644 demo/CIDemos/asr.js create mode 100644 demo/CIDemos/audit.js create mode 100644 demo/CIDemos/common.js create mode 100644 demo/CIDemos/docPreview.js create mode 100644 demo/CIDemos/fileProcess.js create mode 100644 demo/CIDemos/index.js create mode 100644 demo/CIDemos/mediaProcess.js create mode 100644 demo/CIDemos/picProcess.js create mode 100644 demo/CIDemos/taskAndWorkflow.js delete mode 100644 demo/ciDemo.js diff --git a/demo/CIDemos/ai.js b/demo/CIDemos/ai.js new file mode 100644 index 0000000..614846f --- /dev/null +++ b/demo/CIDemos/ai.js @@ -0,0 +1,1480 @@ +/** + * AI内容识别demo集合 +*/ + +// 开通AI内容识别 +export const openAIBucket = { + name: '开通AI内容识别', + fn: function openAIBucket() { + const key = 'ai_bucket'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + + cos.request({ + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 关闭AI内容识别 +export const closeAIBucket = { + name: '关闭AI内容识别', + fn: function closeAIBucket() { + const key = 'ai_bucket'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + + cos.request({ + Method: 'DELETE', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 查询开通AI内容识别的桶 +export const getAIBucket = { + name: '查询开通AI内容识别的桶', + fn: function getAIBucket() { + const key = 'ai_bucket'; // 固定值 + const host = `ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + + cos.request({ + Method: 'GET', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Query: { + // 地域信息,例如 ap-shanghai、ap-beijing,若查询多个地域以“,”分隔字符串,详情请参见 地域与域名;是否必传:是 + // regions: '', + // 存储桶名称,以“,”分隔,支持多个存储桶,精确搜索;是否必传:是 + // bucketNames: '', + // 存储桶名称前缀,前缀搜索;是否必传:是 + // bucketName: '', + // 第几页;是否必传:是 + // pageNumber: 1, + // 每页个数,大于0且小于等于100的整数;是否必传:是 + // pageSize: 10, + }, + + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 查询AI内容识别队列 +export const getAIQueue = { + name: '查询AI内容识别队列', + fn: function getAIQueue() { + const key = 'ai_queue'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + + cos.request({ + Method: 'GET', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Query: { + // 队列 ID,以“,”符号分割字符串;是否必传:否 + // queueIds: '', + // Active 表示队列内的作业会被调度执行Paused 表示队列暂停,作业不再会被调度执行,队列内的所有作业状态维持在暂停状态,已经执行中的任务不受影响;是否必传:否 + state: 'Active', + // 第几页,默认值1;是否必传:否 + // pageNumber: 0, + // 每页个数,默认值10;是否必传:否 + // pageSize: 0, + }, + + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 更新AI内容识别队列 +export const updateAIQueue = { + name: '更新AI内容识别队列', + fn: function updateAIQueue() { + const queueId = 'pf71b90a56f614163b0b7d00cf20518b4'; // 队列id + const key = `ai_queue/${queueId}`; // 固定格式 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 队列名称,仅支持中文、英文、数字、_、-和*,长度不超过 128;是否必传:是 + Name: 'my_queue', + // Active 表示队列内的作业会被调度执行Paused 表示队列暂停,作业不再会被调度执行,队列内的所有作业状态维持在暂停状态,已经执行中的任务不受影响;是否必传:是 + State: 'Active', + // 回调配置;是否必传:是 + NotifyConfig: { + // 回调开关OffOn;是否必传:否 + State: 'On', + // 回调事件TaskFinish:任务完成WorkflowFinish:工作流完成;是否必传:否 + Event: 'TaskFinish', + // 回调格式XMLJSON;是否必传:否 + // ResultFormat: '', + // 回调类型UrlTDMQ;是否必传:否 + Type: 'Url', + // 回调地址,不能为内网地址。;是否必传:否 + Url: 'http://example.com', + // TDMQ 使用模式Topic:主题订阅Queue: 队列服务;是否必传:否 + // MqMode: '', + // TDMQ 所属园区,目前支持园区 sh(上海)、bj(北京)、gz(广州)、cd(成都)、hk(中国香港);是否必传:否 + // MqRegion: '', + // TDMQ 主题名称;是否必传:否 + // MqName: '', + }, + }, + }); + + cos.request({ + Method: 'PUT', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 识别图片标签 +export const getImageLabel = { + name: '识别图片标签', + fn: function getImageLabel() { + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', // 固定值,必须 + Key: 'ci/dog.jpeg', // 与detect-url二选一传递 + Query: { + // 固定值detect-label;是否必传:是 + 'ci-process': 'detect-label', + // 本次调用支持的识别场景,可选值如下:web,针对网络图片优化;camera,针对手机摄像头拍摄图片优化;album,针对手机相册、网盘产品优化;news,针对新闻、资讯、广电等行业优化;如果不传此参数,则默认为camera。支持多场景(scenes)一起检测,以,分隔。例如,使用 scenes=web,camera 即对一张图片使用两个模型同时检测,输出两套识别结果。;是否必传:否 + // scenes: '', + // 您可以通过填写 detect-url 处理任意公网可访问的图片链接。不填写 detect-url 时,后台会默认处理 ObjectKey ,填写了 detect-url 时,后台会处理 detect-url 链接,无需再填写 ObjectKey detect-url 示例:http://www.example.com/abc.jpg ,需要进行 UrlEncode,处理后为http%25253A%25252F%25252Fwww.example.com%25252Fabc.jpg;是否必传:否 + // 'detect-url': '', + }, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 二维码识别(云上图片识别) +export const recognitionQRcode = { + name: '二维码识别(云上图片识别)', + fn: function recognitionQRcode() { + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', // 固定值,必须 + Key: 'ci/二维码.png', // 必须 + Query: { + // 万象处理能力,二维码识别固定为 QRcode;是否必传:是 + 'ci-process': 'QRcode', + // 二维码覆盖功能,将对识别出的二维码覆盖上马赛克。取值为0或1。0表示不开启二维码覆盖,1表示开启二维码覆盖,默认值0;是否必传:否 + cover: 0, + }, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 二维码识别(上传时识别) +export const identifyQrcode_put = { + name: '二维码识别(上传时识别)', + fn: function identifyQrcode_put() { + util.selectLocalFile(function (files) { + var file = files && files[0]; + if (!file) return; + cos.putObject( + { + Bucket: config.Bucket, // Bucket 格式:test-1250000000 + Region: config.Region, + Key: '1/上传二维码.png', + Body: file, + Headers: { + // 通过 imageMogr2 接口使用图片缩放功能:指定图片宽度为 200,宽度等比压缩 + 'Pic-Operations': '{"is_pic_info": 1, "rules": [{"fileid":"test.jpg","rule":" QRcode/cover/0"}]}', + }, + onProgress: function (progressData) { + console.log('onProgress', JSON.stringify(progressData)); + }, + }, + function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }, + ); + }); + } +}; + +// 二维码识别(下载时识别) +export const identifyQrcode_get = { + name: '二维码识别(下载时识别)', + fn: function identifyQrcode_get() { + var key = '1/二维码图片.png'; + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', + Key: key, + Query: { + 'ci-process': 'QRcode', + }, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 二维码生成 +export const createCRcode = { + name: '二维码生成', + fn: function createCRcode() { + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', + Query: { + 'ci-process': 'qrcode-generate', // 必须,对象存储处理能力,二维码生成参数为 qrcode-generate + 'qrcode-content': '二维码文案', // 必须,可识别的二维码文本信息 + // mode: 0, // 非必须,生成的二维码类型,可选值:0或1。0为二维码,1为条形码,默认值为0 + width: 200, //必须,指定生成的二维码或条形码的宽度,高度会进行等比压缩 + }, + }, function (err, data) { + if (!err) { + // 获得二维码base64 + var imgBase64 = data.Response.ResultImage; + // 比如可拼接前缀直接展示在img里 + // document.querySelector('#img').src = 'data:image/jpg;base64,' + imgBase64; + } + }); + } +}; + +// 图片文字识别 +export const cOSOCR = { + name: '图片文字识别', + fn: function cOSOCR() { + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', // 固定值,必须 + Key: 'ci/0.jpg', // 与detect-url二选一传递 + Query: { + // 数据万象处理能力,图片文字识别固定为OCR;是否必传:是 + 'ci-process': 'OCR', + // 您可以通过填写 detect-url 处理任意公网可访问的图片链接。不填写 detect-url 时,后台会默认处理 ObjectKey ,填写了 detect-url 时,后台会处理 detect-url 链接,无需再填写 ObjectKey detect-url 示例:http://www.example.com/abc.jpg ,需要进行 UrlEncode,处理后为http%25253A%25252F%25252Fwww.example.com%25252Fabc.jpg;是否必传:否 + // 'detect-url': '', + // ocr的识别类型,有效值为general,accurate,efficient,fast,handwriting。general表示通用印刷体识别;accurate表示印刷体高精度版;efficient表示印刷体精简版;fast表示印刷体高速版;handwriting表示手写体识别。默认值为general。;是否必传:否 + type: 'general', + // type值为general时有效,表示识别语言类型。支持自动识别语言类型,同时支持自选语言种类,默认中英文混合(zh),各种语言均支持与英文混合的文字识别。可选值:zh:中英混合zh_rare:支持英文、数字、中文生僻字、繁体字,特殊符号等auto:自动mix:混合语种jap:日语kor:韩语spa:西班牙语fre:法语ger:德语por:葡萄牙语vie:越语may:马来语rus:俄语ita:意大利语hol:荷兰语swe:瑞典语fin:芬兰语dan:丹麦语nor:挪威语hun:匈牙利语tha:泰语hi:印地语ara:阿拉伯语;是否必传:否 + 'language-type': 'zh', + // type值为general,fast时有效,表示是否开启PDF识别,有效值为true和false,默认值为false,开启后可同时支持图片和PDF的识别。;是否必传:否 + ispdf: false, + // type值为general,fast时有效,表示需要识别的PDF页面的对应页码,仅支持PDF单页识别,当上传文件为PDF且ispdf参数值为true时有效,默认值为1。;是否必传:否 + // 'pdf-pagenumber': 0, + // type值为general,accurate时有效,表示识别后是否需要返回单字信息,有效值为true和false,默认为false;是否必传:否 + isword: false, + // type值为handwriting时有效,表示是否开启单字的四点定位坐标输出,有效值为true和false,默认值为false。;是否必传:否 + 'enable-word-polygon': false, + }, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 车辆识别 +export const aIDetectCar = { + name: '车辆识别', + fn: function aIDetectCar() { + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', // 固定值,必须 + Key: 'ci/car.png', // 对象文件名,必须,例如:folder/document.jpg + Query: { + // 数据万象处理能力,车辆识别固定为 DetectCar;是否必传:是 + 'ci-process': 'DetectCar', + }, + + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 宠物识别 +export const aIDetectPet = { + name: '宠物识别', + fn: function aIDetectPet() { + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', // 固定值,必须 + Key: 'ci/dog.jpeg', // 对象文件名,必须,例如:folder/document.jpg须 + Query: { + // 数据万象处理能力,宠物识别固定为 detect-pet;是否必传:是 + 'ci-process': 'detect-pet', + }, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 创建视频目标检测模板 +export const postVideoTargetTemplete = { + name: '创建视频目标检测模板', + fn: function postVideoTargetTemplete() { + const key = 'template'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 模板类型:VideoTargetRec;是否必传:是 + Tag: 'VideoTargetRec', + // 模板名称,仅支持中文、英文、数字、_、-和*,长度不超过 64;是否必传:是 + Name: 'my_videoTargetRec', + // 视频目标检测 参数;是否必传:是 + VideoTargetRec: { + // 是否开启人体检测,取值 true/false;是否必传:否 + Body: 'true', + // 是否开启宠物检测,取值 true/false;是否必传:否 + Pet: 'true', + // 是否开启车辆检测,取值 true/false;是否必传:否 + Car: 'false', + }, + }, + }); + + cos.request({ + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 更新视频目标检测模板 +export const updateVideoTargetTemplete = { + name: '更新视频目标检测模板', + fn: function updateVideoTargetTemplete() { + const templateId = 'xxxxxxx'; // 要更新的模板id + const key = `template/${templateId}`; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 模板类型:VideoTargetRec;是否必传:是 + Tag: 'VideoTargetRec', + // 模板名称,仅支持中文、英文、数字、_、-和*,长度不超过 64;是否必传:是 + Name: 'my_videoTargetRec2', + // 视频目标检测 参数;是否必传:是 + VideoTargetRec: { + // 是否开启人体检测,取值 true/false;是否必传:否 + Body: 'false', + // 是否开启宠物检测,取值 true/false;是否必传:否 + Pet: 'false', + // 是否开启车辆检测,取值 true/false;是否必传:否 + Car: 'true', + }, + }, + }); + + cos.request({ + Method: 'PUT', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 提交一个视频目标检测任务 +export const postVideoTargetRec = { + name: '提交一个视频目标检测任务', + fn: function postVideoTargetRec() { + const key = 'jobs'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 创建任务的 Tag:VideoTargetRec;是否必传:是 + Tag: 'VideoTargetRec', + // 操作规则;是否必传:是 + Operation: { + // 视频目标检测模板 ID;与VideoTargetRec二选一传递 + TemplateId: 'xxxx', + // 视频目标检测参数, 同创建视频目标检测模板接口中的 Request.VideoTargetRec;与TemplateId二选一传递 + // VideoTargetRec: { + // 是否开启人体检测,取值 true/false;是否必传:否 + // Body: '', + // 是否开启宠物检测,取值 true/false;是否必传:否 + // Pet: '', + // 是否开启车辆检测,取值 true/false;是否必传:否 + // Car: '', + // }, + // 透传用户信息, 可打印的 ASCII 码, 长度不超过1024;是否必传:否 + // UserData: '', + // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0;是否必传:否 + // JobLevel: '', + }, + // 待操作的媒体信息;是否必传:是 + Input: { + // 媒体文件名;是否必传:否 + Object: 'ci/test.mp4', + }, + // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 + // CallBackFormat: '', + // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 + // CallBackType: '', + // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 + // CallBack: '', + // 任务回调TDMQ配置,当 CallBackType 为 TDMQ 时必填。详情请参见 CallBackMqConfig;是否必传:否 + // CallBackMqConfig: { + // 消息队列所属园区,目前支持园区 sh(上海)、bj(北京)、gz(广州)、cd(成都)、hk(中国香港);是否必传:是 + // MqRegion: '', + // 消息队列使用模式,默认 Queue :主题订阅:Topic队列服务: Queue;是否必传:是 + // MqMode: '', + // TDMQ 主题名称;是否必传:是 + // MqName: '', + // }, + }, + }); + + cos.request({ + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 提交词性分析任务 +export const postWordsGeneralize = { + name: '提交词性分析任务', + fn: function postWordsGeneralize() { + const key = 'jobs'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 创建任务的 Tag:WordsGeneralize;是否必传:是 + Tag: 'WordsGeneralize', + // 待操作的对象信息;是否必传:是 + Input: { + // 文件路径;是否必传:是 + Object: 'ci/test.txt', + }, + // 操作规则;是否必传:是 + Operation: { + // 指定分词参数;是否必传:是 + WordsGeneralize: { + // ner 方式,支持 NerBasic 和 DL,默认值 DL;是否必传:否 + NerMethod: 'DL', + // 分词粒度,支持 SegBasic 和 MIX,默认值 MIX;是否必传:否 + SegMethod: 'MIX', + }, + // 透传用户信息,可打印的 ASCII 码,长度不超过1024;是否必传:否 + // UserData: '', + // 任务优先级,级别限制:0 、1 、2。级别越大任务优先级越高,默认为0;是否必传:否 + // JobLevel: '', + }, + // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 + // CallBackFormat: '', + // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 + // CallBackType: '', + // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 + // CallBack: '', + // 任务回调 TDMQ 配置,当 CallBackType 为 TDMQ 时必填。详情见 CallBackMqConfig;是否必传:否 + // CallBackMqConfig: { + // 消息队列所属园区,目前支持园区 sh(上海)、bj(北京)、gz(广州)、cd(成都)、hk(中国香港);是否必传:是 + // MqRegion: '', + // 消息队列使用模式,默认 Queue :主题订阅:Topic队列服务: Queue;是否必传:是 + // MqMode: '', + // TDMQ 主题名称;是否必传:是 + // MqName: '', + // }, + }, + }); + + cos.request({ + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 活体人脸核身 +export const livenessRecognition = { + name: '活体人脸核身', + fn: function livenessRecognition() { + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', // 固定值,必须 + Key: 'ci/tf.mp4', // 必须 + Query: { + // 数据万象处理能力,人脸核身固定为 LivenessRecognition;是否必传:是 + 'ci-process': 'LivenessRecognition', + // 身份证号;是否必传:是 + IdCard: '610321199411040019', + // 姓名。中文请使用 UTF-8编码;是否必传:是 + Name: '田丰', + // 活体检测类型,取值:LIP/ACTION/SILENTLIP 为数字模式,ACTION 为动作模式,SILENT 为静默模式,三种模式选择一种传入;是否必传:是 + LivenessType: 'SILENT', + // 数字模式传参:数字验证码(1234),需先调用接口获取数字验证码动作模式传参:传动作顺序(2,1 or 1,2),需先调用接口获取动作顺序静默模式传参:空;是否必传:否 + ValidateData: '', + // 需要返回多张最佳截图,取值范围1 - 10,不设置默认返回一张最佳截图;是否必传:否 + BestFrameNum: 1, + }, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 获取动作顺序 +export const getActionSequence = { + name: '获取动作顺序', + fn: function getActionSequence() { + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', // 固定值,必须 + Query: { + // 数据万象处理能力,获取动作顺序固定为 GetActionSequence;是否必传:是 + 'ci-process': 'GetActionSequence', + }, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 获取数字验证码 +export const getLiveCode = { + name: '获取数字验证码', + fn: function getLiveCode() { + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', // 固定值,必须 + Query: { + // 数据万象处理能力,获取数字验证码固定为 GetLiveCode;是否必传:是 + 'ci-process': 'GetLiveCode', + }, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 卡证识别 +export const aILicenseRec = { + name: '卡证识别', + fn: function aILicenseRec() { + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', // 固定值,必须 + Key: 'ci/card.jpeg', // 与detect-url二选一传递 + Query: { + // 数据万象处理能力,卡证识别固定为AILicenseRec;是否必传:是 + 'ci-process': 'AILicenseRec', + // 您可以通过填写 detect-url 处理任意公网可访问的图片链接。不填写 detect-url 时,后台会默认处理 ObjectKey ,填写了 detect-url 时,后台会处理 detect-url 链接,无需再填写 ObjectKey detect-url 示例:http://www.example.com/abc.jpg ,需要进行 UrlEncode,处理后为http%25253A%25252F%25252Fwww.example.com%25252Fabc.jpg;是否必传:否 + 'detect-url': '', + // 卡证识别类型,有效值为IDCard,DriverLicense。
IDCard表示身份证;DriverLicense表示驾驶证,默认:DriverLicense;是否必传:是 + CardType: 'IDCard', + }, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 开通以图搜图 +export const imageSearchBucket = { + name: '开通以图搜图', + fn: function imageSearchBucket() { + const key = 'ImageSearchBucket'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 图库容量限制;是否必传:是 + MaxCapacity: 1000, + // 图库访问限制,默认10;是否必传:否 + MaxQps: 10, + }, + }); + + cos.request({ + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 商品抠图 +export const goodsMatting = { + name: '商品抠图', + fn: function goodsMatting() { + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', // 固定值,必须 + Key: 'ci/goods.jpeg', // 与detect-url二选一传递 + Query: { + // ;是否必传:是 + 'ci-process': 'GoodsMatting', + // ;是否必传:否 + // 'detect-url': '', + }, + RawBody: true, + DataType: 'blob', + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 添加图库图片 +export const addImageSearch = { + name: '添加图库图片', + fn: function addImageSearch() { + const body = COS.util.json2xml({ + Request: { + // 物品 ID,最多支持64个字符。若 EntityId 已存在,则对其追加图片;是否必传:是 + EntityId: '123456', + // 用户自定义的内容,最多支持4096个字符,查询时原样带回;是否必传:否 + CustomContent: '小商品', + // 图片自定义标签,最多不超过10个,json 字符串,格式为 key:value (例 key1>=1 key1>='aa' )对;是否必传:否 + // Tags: '', + }, + }); + + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'POST', // 固定值,必须 + Key: 'ci/goods.jpeg', // 必须 + Query: { + // 固定值:ImageSearch;是否必传:是 + 'ci-process': 'ImageSearch', + // 固定值:AddImage;是否必传:是 + action: 'AddImage', + }, + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 删除图库图片 +export const deleteImageSearch = { + name: '删除图库图片', + fn: function deleteImageSearch() { + const body = COS.util.json2xml({ + Request: { + // 物品 ID;是否必传:是 + EntityId: '', + }, + }); + + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 检索图片 +export const getSearchImage = { + name: '检索图片', + fn: function getSearchImage() { + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', // 固定值,必须 + Key: 'ci/goods.jpeg', // 必须 + Query: { + 'ci-process': 'ImageSearch', + action: 'SearchImage', + // 出参 Score 中,只有超过 MatchThreshold 值的结果才会返回。默认为0;是否必传:否 + MatchThreshold: 0, + // 起始序号,默认值为0;是否必传:否 + Offset: 0, + // 返回数量,默认值为10,最大值为100;是否必传:否 + Limit: 0, + // 针对入库时提交的 Tags 信息进行条件过滤。支持>、>=、<、<=、=、!=,多个条件之间支持 AND 和 OR 进行连接;是否必传:否 + Filter: '', + }, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 提交内容翻译任务 +export const postTranslation = { + name: '提交内容翻译任务', + fn: function postTranslation() { + const key = 'jobs'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 创建任务的 Tag:Translation;是否必传:是 + Tag: 'Translation', + // 待操作的对象信息;是否必传:是 + Input: { + // 源文档文件名单文件(docx/xlsx/html/markdown/txt):不超过800万字符有页数的(pdf/pptx):不超过300页文本文件(txt):不超过10MB二进制文件(pdf/docx/pptx/xlsx):不超过60MB图片文件(jpg/jpeg/png/webp):不超过10MB;是否必传:是 + Object: 'ci/test.txt', + // 文档语言类型zh:简体中文zh-hk:繁体中文zh-tw:繁体中文zh-tr:繁体中文en:英语ar:阿拉伯语de:德语es:西班牙语fr:法语id:印尼语it:意大利语ja:日语pt:葡萄牙语ru:俄语ko:韩语km:高棉语lo:老挝语;是否必传:是 + Lang: 'zh-hk', + // 文档类型pdfdocxpptxxlsxtxtxmlhtml:只能翻译 HTML 里的文本节点,需要通过 JS 动态加载的不进行翻译markdownjpgjpegpngwebp;是否必传:是 + Type: 'txt', + // 原始文档类型仅在 Type=pdf/jpg/jpeg/png/webp 时使用,当值为pdf时,仅支持 docx、pptx当值为jpg/jpeg/png/webp时,仅支持txt;是否必传:否 + // BasicType: '', + }, + // 操作规则;是否必传:是 + Operation: { + // 翻译参数;是否必传:是 + Translation: { + // 目标语言类型源语言类型为 zh/zh-hk/zh-tw/zh-tr 时支持:en、ar、de、es、fr、id、it、ja、it、ru、ko、km、lo、pt源语言类型为 en 时支持:zh、zh-hk、zh-tw、zh-tr、ar、de、es、fr、id、it、ja、it、ru、ko、km、lo、pt其他类型时支持:zh、zh-hk、zh-tw、zh-tr、en;是否必传:是 + Lang: 'en', + // 文档类型,源文件类型与目标文件类型映射关系如下:docx:docxpptx:pptxxlsx:xlsxtxt:txtxml:xmlhtml:htmlmarkdown:markdownpdf:pdf、docxpng:txtjpg:txtjpeg:txtwebp:txt;是否必传:是 + Type: 'txt', + }, + // 结果输出地址,当NoNeedOutput为true时非必选;是否必传:否 + Output: { + // 存储桶的地域;是否必传:是 + Region: config.Region, + // 存储结果的存储桶;是否必传:是 + Bucket: config.Bucket, + // 输出结果的文件名;是否必传:是 + Object: 'ci/trans_test.txt', + }, + // 透传用户信息,可打印的 ASCII 码,长度不超过1024;是否必传:否 + // UserData: '', + // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0;是否必传:否 + // JobLevel: '', + // 仅输出结果,不生成结果文件。取值:true/false。该参数原文档类型为图片时有效。默认值 false;是否必传:否 + // NoNeedOutput: '', + }, + // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 + // CallBackFormat: '', + // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 + // CallBackType: '', + // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 + // CallBack: '', + // 任务回调TDMQ配置,当 CallBackType 为 TDMQ 时必填。详情见 CallBackMqConfig;是否必传:否 + // CallBackMqConfig: { + // 消息队列所属园区,目前支持园区 sh(上海)、bj(北京)、gz(广州)、cd(成都)、hk(中国香港);是否必传:是 + // MqRegion: '', + // 消息队列使用模式,默认 Queue :主题订阅:Topic队列服务: Queue;是否必传:是 + // MqMode: '', + // TDMQ 主题名称;是否必传:是 + // MqName: '', + // }, + }, + }); + + cos.request({ + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 人脸检测 +export const aIDetectFace = { + name: '人脸检测', + fn: function aIDetectFace() { + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', // 固定值,必须 + Key: 'ci/1.jpg', // 必须 + Query: { + // 数据万象处理能力,人脸特效固定为 DetectFace。;是否必传:是 + 'ci-process': 'DetectFace', + // 最多处理的人脸数目。默认值为1(仅检测图片中面积最大的那张人脸),最大���为120。此参数用于控制处理待检测图片中的人脸个数,值越小,处理速度越快。;是否必传:否 + 'max-face-num': 1, + }, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 人脸特效 +export const aIFaceEffect = { + name: '人脸特效', + fn: function aIFaceEffect() { + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', // 固定值,必须 + Key: 'ci/dog.jpeg', // 与detect-url二选一传递 + Query: { + // 万象处理能力,人脸特效固定为face-effect;是否必传:是 + 'ci-process': 'face-effect', + // 您可以通过填写 detect-url 处理任意公网可访问的图片链接。不填写 detect-url 时,后台会默认处理 ObjectKey ,填写了 detect-url 时,后台会处理 detect-url 链接,无需再填写 ObjectKey detect-url 示例:http://www.example.com/abc.jpg ,需要进行 UrlEncode,处理后为http%25253A%25252F%25252Fwww.example.com%25252Fabc.jpg。;是否必传:否 + // 'detect-url': '', + // 人脸特效类型,人脸美颜:face-beautify;人脸性别转换:face-gender-transformation;人脸年龄变化:face-age-transformation;人像分割:face-segmentation;是否必传:是 + type: 'face-beautify', + // type为face-beautify时生效,美白程度,取值范围[0,100]。0不美白,100代表最高程度。默认值30;是否必传:否 + whitening: 50, + // type为face-beautify时生效,磨皮程度,取值范围[0,100]。0不磨皮,100代表最高程度。默认值10;是否必传:否 + smoothing: 50, + // type为face-beautify时生效,瘦脸程度,取值范围[0,100]。0不瘦脸,100代表最高程度。默认值70;是否必传:否 + faceLifting: 50, + // type为face-beautify时生效,大眼程度,取值范围[0,100]。0不大眼,100代表最高程度。默认值70;是否必传:否 + eyeEnlarging: 50, + // type为face-gender-transformation时生效,选择转换方向,0:男变女,1:女变男。无默认值,为必选项。限制:仅对图片中面积最大的人脸进行转换。;是否必传:否 + // gender: 0, + // type为face-age-transformation时生效,变化到的人脸年龄,[10,80]。无默认值,为必选项。限制:仅对图片中面积最大的人脸进行转换。;是否必传:否 + // age: 0, + }, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 人体识别 +export const aIBodyRecognition = { + name: '人体识别', + fn: function aIBodyRecognition() { + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', // 固定值,必须 + Key: 'ci/dog.jpeg', // 与detect-url二选一传递 + Query: { + // 数据万象处理能力,人体识别固定为AIBodyRecognition;是否必传:是 + 'ci-process': 'AIBodyRecognition', + // 您可以通过填写 detect-url 处理任意公网可访问的图片链接。不填写 detect-url 时,后台会默认处理 ObjectKey ,填写了 detect-url 时,后台会处理 detect-url 链接,无需再填写 ObjectKey detect-url 示例:http://www.example.com/abc.jpg ,需要进行 UrlEncode,处理后为http%25253A%25252F%25252Fwww.example.com%25252Fabc.jpg;是否必传:否 + // 'detect-url': '', + }, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 身份证识别 +export const aIIDCardOCR = { + name: '身份证识别', + fn: function aIIDCardOCR() { + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', // 固定值,必须 + Key: 'ci/card.jpeg', // 必须 + Query: { + // 数据万象处理能力,身份证识别固定为 IDCardOCR;是否必传:是 + 'ci-process': 'IDCardOCR', + // FRONT:身份证有照片的一面(人像面)BACK:身份证有国徽的一面(国徽面)该参数如果不填,将为您自动判断身份证正反面;是否必传:否 + CardSide: 'FRONT', + // 以下可选字段均为 bool 类型,默认 false:CropIdCard,身份证照片裁剪(去掉证件外多余的边缘、自动矫正拍摄角度)CropPortrait,人像照片裁剪(自动抠取身份证头像区域)CopyWarn,复印件告警BorderCheckWarn,边框和框内遮挡告警ReshootWarn,翻拍告警DetectPsWarn,PS 检测告警TempIdWarn,临时身份证告警InvalidDateWarn,身份证有效日期不合法告警Quality,图片质量分数(评价图片的模糊程度)MultiCardDetect,是否开启多卡证检测参数设置方式参考:Config = {"CropIdCard":true,"CropPortrait":true};是否必传:否 + // Config: {}, + }, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 实时文字翻译 +export const autoTranslationBlock = { + name: '实时文字翻译', + fn: function autoTranslationBlock() { + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', // 固定值,必须 + Query: { + // 数据万象处理能力,文本块翻译固定为 AutoTranslationBlock。;是否必传:是 + 'ci-process': 'AutoTranslationBlock', + // 待翻译的文本;是否必传:是 + InputText: '我是张三', + // 输入语言,如 "zh";是否必传:是 + SourceLang: 'zh', + // 输出语言,如 "en";是否必传:是 + TargetLang: 'en', + // 文本所属业务领域,如: "ecommerce", //缺省值为 general;是否必传:否 + // TextDomain: '', + // 文本类型,如: "title", //缺省值为 sentence;是否必传:否 + // TextStyle: '', + }, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 提交一个视频人像抠图任务 +export const postSegmentVideoBody = { + name: '提交一个视频人像抠图任务', + fn: function postSegmentVideoBody() { + const key = 'jobs'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 创建任务的 Tag:SegmentVideoBody;是否必传:是 + Tag: 'SegmentVideoBody', + // 待操作的对象信息;是否必传:是 + Input: { + // 文件路径;是否必传:是 + Object: 'ci/tf.mp4', + }, + // 操作规则;是否必传:是 + Operation: { + // 视频人像抠图配置;是否必传:否 + SegmentVideoBody: { + // 抠图模式 Mask:输出alpha通道结果Foreground:输出前景视频Combination:输出抠图后的前景与自定义背景合成后的视频默认值:Mask;是否必传:否 + Mode: 'Mask', + // 抠图类型HumanSeg:人像抠图GreenScreenSeg:绿幕抠图SolidColorSeg:纯色背景抠图默认值:HumanSeg;是否必传:否 + // SegmentType: '', + // mode为 Foreground 时参数生效,背景颜色为红色,取值范围 [0, 255], 默认值为 0;是否必传:否 + // BackgroundRed: '', + // mode为 Foreground 时参数生效,背景颜色为绿色,取值范围 [0, 255],默认值为 0;是否必传:否 + // BackgroundGreen: '', + // mode为 Foreground 时参数生效,背景颜色为蓝色,取值范围 [0, 255],默认值为 0;是否必传:否 + // BackgroundBlue: '', + // 传入背景文件。mode为 Combination 时,此参数必填,背景文件需与源文件在同存储桶下;是否必传:否 + // BackgroundLogoUrl: '', + // 调整抠图的边缘位置,取值范围为[0, 255],默认值为 0;是否必传:否 + // BinaryThreshold: '', + // 纯色背景抠图的背景色(红), 当 SegmentType 为 SolidColorSeg 生效,取值范围为 [0, 255],默认值为 0;是否必传:否 + // RemoveRed: '', + // 纯色背景抠图的背景色(绿), 当 SegmentType 为 SolidColorSeg 生效,取值范围为 [0, 255],默认值为 0;是否必传:否 + // RemoveGreen: '', + // 纯色背景抠图的背景色(蓝), 当 SegmentType 为 SolidColorSeg 生效,取���范围为 [0, 255],默认值为 0;是否必传:否 + // RemoveBlue: '', + }, + // 结果输出配置;是否必传:是 + Output: { + // 存储桶的地域;是否必传:是 + Region: config.Region, + // 存储结果的存储桶;是否必传:是 + Bucket: config.Bucket, + // 输出结果的文件名;是否必传:是 + Object: 'ci/ss.mp4', + }, + // 透传用户信息,可打印的 ASCII 码,长度不超过1024;是否必传:否 + // UserData: '', + // 任务优先级,级别限制:0 、1 、2。级别越大任务优先级越高,默认为0;是否必传:否 + // JobLevel: '', + }, + // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 + // CallBackFormat: '', + // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 + // CallBackType: '', + // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 + // CallBack: '', + // 任务回调 TDMQ 配置,当 CallBackType 为 TDMQ 时必填。详情见 CallBackMqConfig;是否必传:否 + // CallBackMqConfig: { + // 消息队列所属园区,目前支持园区 sh(上海)、bj(北京)、gz(广州)、cd(成都)、hk(中国香港);是否必传:是 + // MqRegion: '', + // 消息队列使用模式,默认 Queue :主题订阅:Topic队列服务: Queue;是否必传:是 + // MqMode: '', + // TDMQ 主题名称;是否必传:是 + // MqName: '', + // }, + }, + }); + + cos.request({ + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 图片上色 +export const aIImageColoring = { + name: '图片上色', + fn: function aIImageColoring() { + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', // 固定值,必须 + Key: 'ci/1.jpg', // 与detect-url二选一传递 + Query: { + // 数据万象处理能力,图片上色参固定为AIImageColoring。;是否必传:是 + 'ci-process': 'AIImageColoring', + // 待上色图片url,需要进行urlencode,与ObjectKey二选其一,如果同时存在,则默认以ObjectKey为准;是否必传:否 + // 'detect-url': '', + }, + RawBody: true, + DataType: 'blob', + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 图片质量评分 +export const assessQuality = { + name: '图片质量评分', + fn: function assessQuality() { + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', // 固定值,必须 + Key: 'ci/dog.jpeg', // 必须 + Query: { + // 数据万象处理能力,图像质量检测固定为 AssessQuality。;是否必传:是 + 'ci-process': 'AssessQuality', + }, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 图像超分 +export const aISuperResolution = { + name: '图像超分', + fn: function aISuperResolution() { + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', // 固定值,必须 + Key: 'ci/test.jpeg', // 与detect-url二选一传递 + Query: { + // 数据万象处理能力,只能裁剪参固定为AISuperResolution。;是否必传:否 + 'ci-process': 'AISuperResolution', + // 您可以通过填写 detect-url 处理任意公网可访问的图片链接。不填写 detect-url 时,后台会默认处理 ObjectKey ,填写了 detect-url 时,后台会处理 detect-url 链接,无需再填写 ObjectKey,detect-url 示例:http://www.example.com/abc.jpg ,需要进行 UrlEncode,处理后为http%25253A%25252F%25252Fwww.example.com%25252Fabc.jpg。;是否必传:否 + // 'detect-url': '', + }, + RawBody: true, + DataType: 'blob' + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 图像修复 +export const imageRepair = { + name: '图像修复', + fn: function imageRepair() { + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', // 固定值,必须 + Key: 'ci/card.jpeg', // 必须 + Query: { + // 固定值:ImageRepair;是否必传:是 + 'ci-process': 'ImageRepair', + // 遮罩(白色区域为需要去除的水印位置)图片地址,私有图片需携带签名,需要经过 URL 安全的 Base64 编码 + // 比如图片url为 http://test.com/test.jpg + MaskPic: COS.util.encodeBase64('http://test.com/test.jpg', true), + }, + RawBody: true, + DataType: 'blob', + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 图像增强 +export const aIEnhanceImage = { + name: '图像增强', + fn: function aIEnhanceImage() { + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', // 固定值,必须 + Key: 'ci/1.jpg', // 与detect-url二选一传递 + Query: { + // 数据万象处理能力,只能裁剪参固定为 AIEnhanceImage。;是否必传:是 + 'ci-process': 'AIEnhanceImage', + // 去噪强度值,取值范围为 0 - 5 之间的整数,值为 0 时不进行去噪操作,默认值为3。;是否必传:否 + denoise: 0, + // 锐化强度值,取值范围为 0 - 5 之间的整数,值为 0 时不进行锐化操作,默认值为3。;是否必传:否 + sharpen: 0, + // 您可以通过填写 detect-url 处理任意公网可访问的图片链接。不填写 detect-url 时,后台会默认处理 ObjectKey ,填写了detect-url 时,后台会处理 detect-url链接,无需再填写 ObjectKey ,detect-url 示例:http://www.example.com/abc.jpg ,需要进行 UrlEncode,处理后为 http%25253A%25252F%25252Fwww.example.com%25252Fabc.jpg;是否必传:否 + // 'detect-url': '', + // ;是否必传:否 + 'ignore-error': 0, + }, + RawBody: true, + DataType: 'blob', + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 图像智能裁剪 +export const aIImageCrop = { + name: '图像智能裁剪', + fn: function aIImageCrop() { + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', // 固定值,必须 + Key: 'ci/dog.jpeg', // 与detect-url二选一传递 + Query: { + // 数据万象处理能力,智能裁剪固定为AIImageCrop;是否必传:是 + 'ci-process': 'AIImageCrop', + // 您可以通过填写 detect-url 处理任意公网可访问的图片链接。不填写 detect-url 时,后台会默认处理 ObjectKey ,填写了 detect-url 时,后台会处理 detect-url 链接,无需再填写 ObjectKey detect-url 示例:http://www.example.com/abc.jpg ,需要进行 UrlEncode,处理后为http%25253A%25252F%25252Fwww.example.com%25252Fabc.jpg;是否必传:否 + // 'detect-url': '', + // 需要裁剪区域的宽度,与height共同组成所需裁剪的图片宽高比例;输入数字请大于0、小于图片宽度的像素值;是否必传:是 + width: 0, + // 需要裁剪区域的高度,与width共同组成所需裁剪的图片宽高比例;输入数字请大于0、小于图片高度的像素值;width : height建议取值在[1, 2.5]之间,超过这个范围可能会影响效果;是否必传:是 + height: 0, + // 是否严格按照 width 和 height 的值进行输出。取值为0时,宽高比例(width : height)会简化为最简分数,即如果width输入10、height输入20,会简化为1:2;取值为1时,输出图片的宽度等于width,高度等于height;默认值为0;是否必传:否 + fixed: 0, + // 当此参数为1时,针对文件过大等导致处理失败的场景,会直接返回原图而不报错;是否必传:否 + 'ignore-error': 0, + }, + RawBody: true, + DataType: 'blob', + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 游戏场景识别 +export const aIGameRec = { + name: '游戏场景识别', + fn: function aIGameRec() { + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', // 固定值,必须 + Key: 'ci/game.jpeg', // 与detect-url二选一传递 + Query: { + // 数据万象处理能力,游戏场景识别固定为 AIGameRec;是否必传:是 + 'ci-process': 'AIGameRec', + // 您可以通过填写 detect-url 对任意公网可访问的图片进行游戏场景识别。不填写 detect-url 时,后台会默认处理 objectkey ;填写了 detect-url 时,后台会处理 detect-url 链接,无需再填写 objectkey , detect-url 示例:http://www.example.com/abc.jpg。;是否必传:是 + // 'detect-url': '', + }, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// Logo 识别 +export const recognizeLogo = { + name: 'Logo 识别', + fn: function recognizeLogo() { + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', // 固定值,必须 + Key: 'ci/logo.png', // 与detect-url二选一传递 + Query: { + // 数据万象处理能力,Logo识别固定为RecognizeLogo;是否必传:是 + 'ci-process': 'RecognizeLogo', + // 待检查图片url,需要进行urlencode;是否必传:是 + // 'detect-url': '', + }, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; \ No newline at end of file diff --git a/demo/CIDemos/asr.js b/demo/CIDemos/asr.js new file mode 100644 index 0000000..2cdf9b8 --- /dev/null +++ b/demo/CIDemos/asr.js @@ -0,0 +1,927 @@ +/** + * 智能语音demo集合 +*/ + +// 查询语音识别开通状态 +export const getAsrBucket = { + name: '查询语音识别开通状态', + fn: function getAsrBucket() { + const key = 'asrbucket'; // 固定值 + const host = `ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + + cos.request({ + Method: 'GET', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Query: { + // 地域信息,例如 ap-shanghai、ap-beijing,若查询多个地域以“,”分隔字符串,详情请参见 地域与域名;是否必传:是 + // regions: "", + // 存储桶名称,以“,”分隔,支持多个存储桶,精确搜索;是否必传:是 + // bucketNames: "", + // 存储桶名称前缀,前缀搜索;是否必传:是 + // bucketName: "", + // 第几页;是否必传:是 + // pageNumber: 1, + // 每页个数,大于0且小于等于100的整数;是否必传:是 + // pageSize: 10, + }, + + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 开通智能语音 +export const CreateAsrBucket = { + name: '开通智能语音', + fn: function CreateAsrBucket() { + const key = 'asrbucket'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + + cos.request({ + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 关闭智能语音 +export const DeleteAsrBucket = { + name: '关闭智能语音', + fn: function DeleteAsrBucket() { + const key = 'asrbucket'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + cos.request({ + Method: 'DELETE', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 查询语音识别队列 +export const getAsrQueue = { + name: '查询语音识别队列', + fn: function getAsrQueue() { + const key = 'asrqueue'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + + cos.request({ + Method: 'GET', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Query: { + // 队列 ID,以“,”符号分割字符串;是否必传:否 + // queueIds: '', + // Active 表示队列内的作业会被调度执行Paused 表示队列暂停,作业不再会被调度执行,队列内的所有作业状态维持在暂停状态,已经执行中的任务不受影响;是否必传:否 + // state: '', + // 第几页,默认值1;是否必传:否 + // pageNumber: '', + // 每页个数,默认值10;是否必传:否 + // pageSize: '', + }, + + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 更新语音识别队列 +export const updateAsrQueue = { + name: '更新语音识别队列', + fn: function updateAsrQueue() { + // 任务所在的队列 ID,请使用查询队列(https://cloud.tencent.com/document/product/460/46946)获取或前往万象控制台(https://cloud.tencent.com/document/product/460/46487)在存储桶中查询 + var queueId = 'pcc77499e85c311edb9865254008618d9'; + var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/asrqueue/' + queueId; + var url = 'https://' + host; + var body = COS.util.json2xml({ + Request: { + Name: 'queue-doc-process-1', + QueueID: queueId, + State: 'Paused', + NotifyConfig: { + // Url: '', + // Type: 'Url', + // Event: '', + State: 'Off', + }, + }, + }); + cos.request({ + Method: 'PUT', + Key: 'asrqueue/' + queueId, + Url: url, + Body: body, + ContentType: 'application/xml', + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 提交音频降噪任务 +export const postNoiseReduction = { + name: '提交音频降噪任务', + fn: function postNoiseReduction() { + const key = 'jobs'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + Tag: 'NoiseReduction', + Input: { + Object: 'ci/music.mp3', // 文件名,取值为文件在当前存储桶中的完整名称 + }, + Operation: { + Output: { + Bucket: config.Bucket, // 输出的存储桶 + Region: config.Region, // 输出的存储桶的地域 + Object: 'ci/out.mp3', // 输出的文件Key + }, + }, + // QueueId: '', // 任务所在的队列 ID,非必须 + // CallBackFormat: '', // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式,非必须 + // CallBackType: '', // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型,非必须 + // CallBack: '', // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调,非必须 + // CallBackMqConfig: '', // 任务回调 TDMQ 配置,当 CallBackType 为 TDMQ 时必填,非必须 + }, + }); + cos.request({ + Method: 'POST', + Key: 'jobs', + Url: url, + Body: body, + ContentType: 'application/xml', + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 提交人声分离任务 +export const postVoiceSeparate = { + name: '提交人声分离任务', + fn: function postVoiceSeparate() { + const key = 'jobs'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + var body = COS.util.json2xml({ + Request: { + Tag: 'VoiceSeparate', + Input: { + Object: 'ci/music.mp3', // 文件名,取值为文件在当前存储桶中的完整名称 + }, + Operation: { + // VoiceSeparate: {}, // 指定转码模板参数,非必须 + TemplateId: 't17844a8302372436187b425271a0ae33a', // 指定的模板 ID,必须 + // JobLevel: 0, // 任务优先级,级别限制:0 、1 、2。级别越大任务优先级越高,默认为0,非必须 + Output: { + Bucket: config.Bucket, // 输出的存储桶 + Region: config.Region, // 输出的存储桶的地域 + Object: 'ci/out/background.mp3', // 输出的文件Key,背景音结果文件名,不能与 AuObject 同时为空 + AuObject: 'ci/out/audio.mp3', + }, + }, + // QueueId: '', // 任务所在的队列 ID,非必须 + // CallBackFormat: '', // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式,非必须 + // CallBackType: '', // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型,非必须 + // CallBack: '', // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调,非必须 + // CallBackMqConfig: '', // 任务回调 TDMQ 配置,当 CallBackType 为 TDMQ 时必填,非必须 + }, + }); + cos.request({ + Method: 'POST', + Key: 'jobs', + Url: url, + Body: body, + ContentType: 'application/xml', + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 创建人声分离模板 +export const postVoiceSeparateTemplete = { + name: '创建人声分离模板', + fn: function postVoiceSeparateTemplete() { + const key = 'template'; // 固定 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 模板类型: VoiceSeparate;是否必传:是 + Tag: 'VoiceSeparate', + // 模板名称,仅支持中文、英文、数字、_、-和*,长度不超过 64;是否必传:是 + Name: 'my_voiceSeparate', + // 输出音频IsAudio:输出人声IsBackground:输出背景声AudioAndBackground:输出人声和背景声MusicMode:输出人声、背景声、Bass声、鼓声;是否必传:是 + AudioMode: 'IsAudio', + // 音频配置;是否必传:是 + AudioConfig: { + // 编解码格式,取值 aac、mp3、flac、amr。当 Request.AudioMode 为 MusicMode 时,仅支持 mp3、wav、acc;是否必传:否 + Codec: 'mp3', + // 采样率单位:Hz可选 8000、11025、22050、32000、44100、48000、96000当 Codec 设置为 aac/flac 时,不支持 8000当 Codec 设置为 mp3 时,不支持 8000 和 96000当 Codec 设置为 amr 时,只支持 8000当 Request.AudioMode 为 MusicMode 时,该参数无效;是否必传:否 + // Samplerate: '', + // 音频码率单位:Kbps值范围:[8,1000]当 Request.AudioMode 为 MusicMode 时,该参数无效;是否必传:否 + // Bitrate: '', + // 声道数当 Codec 设置为 aac/flac,支持1、2、4、5、6、8当 Codec 设置为 mp3,支持1、2 当 Codec 设置为 amr,只支持1当 Request.AudioMode 为 MusicMode 时,该参数无效;是否必传:否 + // Channels: '', + }, + } + }); + + cos.request({ + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 更新人声分离模板 +export const updateVoiceSeparateTemplete = { + name: '更新人声分离模板', + fn: function updateVoiceSeparateTemplete() { + const templateId = 't18e592c70a4724b46bdcde4b711c6c0d5'; // 要更新的模版id + const key = `template/${templateId}`; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 模板类型: VoiceSeparate;是否必传:是 + Tag: 'VoiceSeparate', + // 模板名称,仅支持中文、英文、数字、_、-和*,长度不超过 64;是否必传:是 + Name: 'my_voiceSeparate2', + // 输出音频IsAudio:输出人声IsBackground:输出背景声AudioAndBackground:输出人声和背景声MusicMode:输出人声、背景声、Bass声、鼓声;是否必传:是 + AudioMode: 'IsAudio', + // 音频配置;是否必传:是 + AudioConfig: { + // 编解码格式,取值 aac、mp3、flac、amr。当 Request.AudioMode 为 MusicMode 时,仅支持 mp3、wav、acc;是否必传:否 + Codec: 'mp3', + // 采样率单位:Hz可选 8000、11025、22050、32000、44100、48000、96000当 Codec 设置为 aac/flac 时,不支持 8000当 Codec 设置为 mp3 时,不支持 8000 和 96000当 Codec 设置为 amr 时,只支持 8000当 Request.AudioMode 为 MusicMode 时,该参数无效;是否必传:否 + // Samplerate: '', + // 音频码率单位:Kbps值范围:[8,1000]当 Request.AudioMode 为 MusicMode 时,该参数无效;是否必传:否 + // Bitrate: '', + // 声道数当 Codec 设置为 aac/flac,支持1、2、4、5、6、8当 Codec 设置为 mp3,支持1、2 当 Codec 设置为 amr,只支持1当 Request.AudioMode 为 MusicMode 时,该参数无效;是否必传:否 + // Channels: '', + }, + } + }); + + cos.request({ + Method: 'PUT', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 提交一个语音合成任务 +export const postVoiceSynthesis = { + name: '提交一个语音合成任务', + fn: function postVoiceSynthesis() { + const key = 'jobs'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 创建任务的 Tag:Tts;是否必传:是 + Tag: 'Tts', + // 操作规则;是否必传:是 + Operation: { + // 语音合成模板 ID; 与TtsTpl二选一传递 + TemplateId: 't1958211407ca54ebc8c78060a7f2ba564', + // 语音合成参数; 与TemplateId二选一传递 + // TtsTpl: { + // // 同创建语音合成模板接口中的 Request.Mode;是否必传:否 + // Mode: '', + // // 同创建语音合成模板接口中的 Request.Codec;是否必传:否 + // Codec: '', + // // 同创建语音合成模板接口中的 Request.VoiceType;是否必传:否 + // VoiceType: '', + // // 同创建语音合成模板接口中的 Request.Volume;是否必传:否 + // Volume: '', + // // 同创建语音合成模板接口中的 Request.Speed;是否必传:否 + // Speed: '', + // // 同创建语音合成模板接口中的 Request.Emotion;是否必传:否 + // Emotion: '', + // }, + // 语音合成任务参数;是否必传:是 + TtsConfig: { + // 输入类型,Url/Text;是否必传:是 + InputType: 'Text', + // 当 InputType 为 Url 时, 必须是合法的 COS 地址,文件必须是utf-8编码,且大小不超过 10M。如果合成方式为同步处理,则文件内容不超过 300 个 utf-8 字符;如果合成方式为异步处理,则文件内容不超过 10000 个 utf-8 字符。当 InputType 为 Text 时, 输入必须是 utf-8 字符, 且不超过 300 个字符。;是否必传:是 + Input: '床前明月光,疑是地上霜', + }, + // 结果输出配置;是否必传:是 + Output: { + // 存储桶的地域;是否必传:是 + Region: config.Region, + // 存储结果的存储桶;是否必传:是 + Bucket: config.Bucket, + // 结果文件名;是否必传:是 + Object: 'ci/tts.mp3', + }, + // 透传用户信息,可打印的 ASCII 码,长度不超过1024;是否必传:否 + // UserData: '', + // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0;是否必传:否 + // JobLevel: '', + }, + // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 + // CallBackFormat: '', + // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 + // CallBackType: '', + // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 + // CallBack: '', + // 任务回调TDMQ配置,当 CallBackType 为 TDMQ 时必填。详情见 CallBackMqConfig;是否必传:否 + // CallBackMqConfig: { + // 消息队列所属园区,目前支持园区 sh(上海)、bj(北京)、gz(广州)、cd(成都)、hk(中国香港);是否必传:是 + // MqRegion: '', + // 消息队列使用模式,默认 Queue :主题订阅:Topic队列服务: Queue;是否必传:是 + // MqMode: '', + // TDMQ 主题名称;是否必传:是 + // MqName: '', + // }, + }, + }); + + cos.request({ + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 创建语音合成模板 +export const postVoiceSynthesisTemplete = { + name: '创建语音合成模板', + fn: function postVoiceSynthesisTemplete() { + const key = 'template'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 模板类型:Tts;是否必传:是 + Tag: 'Tts', + // 模板名称,仅支持中文、英文、数字、_、-和*,长度不超过 64;是否必传:是 + Name: 'my_tts', + // 处理模式Asyc(异步合成)Sync(同步合成);是否必传:否 + // Mode: 'Asyc', + // 音频格式,支持 wav、mp3、pcm ;是否必传:否 + // Codec: 'pcm', + // 音色,取值和限制介绍请见下表;是否必传:否 + // VoiceType: 'ruxue', + // 音量,取值范围 [-10,10];是否必传:否 + // Volume: '0', + // 语速,取值范围 [50,200];是否必传:否 + // Speed: '100', + // 情绪,不同音色支持的情绪不同,详见下表;是否必传:否 + // Emotion: '', + }, + }); + + cos.request({ + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 更新语音合成模板 +export const updateVoiceSynthesisTemplete = { + name: '更新语音合成模板', + fn: function updateVoiceSynthesisTemplete() { + const templateId = 'xxxx'; // 要更新的模板id + const key = `template/${templateId}`; // 固定格式 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 模板类型:Tts;是否必传:是 + Tag: 'Tts', + // 模板名称,仅支持中文、英文、数字、_、-和*,长度不超过 64;是否必传:是 + Name: 'my_tts2', + // 处理模式Asyc(异步合成)Sync(同步合成);是否必传:否 + Mode: 'Asyc', + // 音频格式,支持 wav、mp3、pcm ;是否必传:否 + Codec: 'pcm', + // 音色,取值和限制介绍请见下表;是否必传:否 + VoiceType: 'ruxue', + // 音量,取值范围 [-10,10];是否必传:否 + Volume: '0', + // 语速,取值范围 [50,200];是否必传:否 + Speed: '100', + // 情绪,不同音色支持的情绪不同,详见下表;是否必传:否 + Emotion: '无', + }, + }); + + cos.request({ + Method: 'PUT', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 提交语音识别任务 +export const postSpeechRecognition = { + name: '提交语音识别任务', + fn: function postSpeechRecognition() { + const key = 'jobs'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + var body = COS.util.json2xml({ + Request: { + Tag: 'SpeechRecognition', + Input: { + Object: 'ci/music.mp3', // 文件名,取值为文件在当前存储桶中的完整名称,与Url参数二选一 + // Url: 'http://examplebucket-1250000000.cos.ap-shanghai.myqcloud.com/music.mp3', // 病毒文件的链接地址,与Object参数二选一 + }, + Operation: { + SpeechRecognition: { + EngineModelType: '16k_zh_video', // 引擎模型类型 + ChannelNum: 1, // 语音声道数 + ResTextFormat: 0, // 识别结果返回形式 + FilterDirty: 1, // 是否过滤脏词(目前支持中文普通话引擎) + FilterModal: 1, // 是否过语气词(目前支持中文普通话引擎) + ConvertNumMode: 0, // 是否进行阿拉伯数字智能转换(目前支持中文普通话引擎) + }, + Output: { + Bucket: config.Bucket, // 输出的存储桶 + Region: config.Region, // 输出的存储桶的地域 + Object: 'ci/out/SpeechRecognition.mp3', // 输出的文件Key + }, + }, + // QueueId: '', // 任务所在的队列 ID,非必须 + // CallBackFormat: '', // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式,非必须 + // CallBackType: '', // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型,非必须 + // CallBack: '', // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调,非必须 + // CallBackMqConfig: '', // 任务回调 TDMQ 配置,当 CallBackType 为 TDMQ 时必填,非必须 + }, + }); + cos.request({ + Method: 'POST', + Key: key, + Url: url, + Body: body, + ContentType: 'application/xml', + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 创建语音识别模板 +export const postSpeechRecognitionTemplete = { + name: '创建语音识别模板', + fn: function postSpeechRecognitionTemplete() { + const key = 'template'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 模板类型:SpeechRecognition;是否必传:是 + Tag: 'SpeechRecognition', + // 模板名称,仅支持中文、英文、数字、_、-和*,长度不超过 64;是否必传:是 + Name: 'my_speechRecognition', + // 语音识别参数;是否必传:是 + SpeechRecognition: { + // 开启极速ASR,取值 true/false;是否必传:否 + FlashAsr: 'false', + // 引擎模型类型,分为电话场景和非电话场景。电话场景:8k_zh:电话 8k 中文普通话通用(可用于双声道音频)8k_zh_s:电话 8k 中文普通话话者分离(仅适用于单声道音频)8k_en:电话 8k 英语 非电话场景: 6k_zh:16k 中文普通话通用16k_zh_video:16k 音视频领域16k_en:16k 英语16k_ca:16k 粤语16k_ja:16k 日语16k_zh_edu:中文教育16k_en_edu:英文教育16k_zh_medical:医疗16k_th:泰语16k_zh_dialect:多方言,支持23种方言极速 ASR 支持8k_zh、16k_zh、16k_en、16k_zh_video、16k_zh_dialect、16k_ms(马来语)、16k_zh-PY(中英粤);是否必传:是 + EngineModelType: '16k_zh', + // 语音声道数:1 表示单声道。EngineModelType为非电话场景仅支持单声道2 表示双声道(仅支持 8k_zh 引擎模型 双声道应分别对应通话双方)仅���持非极速ASR,为非极速ASR时,该参数必填;是否必传:否 + ChannelNum: '1', + // 识别结果返回形式:0:识别结果文本(含分段时间戳)1:词级别粒度的详细识别结果,不含标点,含语速值(词时间戳列表,一般用于生成字幕场景)2:词级别粒度的详细识别结果(包含标点、语速值)3:标点符号分段,包含每段时间戳,特别适用于字幕场景(包含词级时间、标点、语速值)仅支持非极速ASR;是否必传:否 + // ResTextFormat: '0', + // 是否过滤脏词(目前支持中文普通话引擎)0:不过滤脏词1:过滤脏词2:将脏词替换为 *;是否必传:否 + // FilterDirty: '0', + // 是否过滤语气词(目前支持中文普通话引擎):0 表示不过滤语气词1 表示部分过滤2 表示严格过滤 ;是否必传:否 + // FilterModal: '0', + // 是否进行阿拉伯数字智能转换(目前支持中文普通话引擎)0:不转换,直接输出中文数字1:根据场景智能转换为阿拉伯数字3 :打开数学相关数字转换仅支持非极速ASR;是否必传:否 + // ConvertNumMode: '0', + // 是否开启说话人分离0:不开启1:开启(仅支持8k_zh,16k_zh,16k_zh_video,单声道音频)8k电话场景建议使用双声道来区分通话双方,设置ChannelNum=2即可,不用开启说话人分离。;是否必传:否 + // SpeakerDiarization: '0', + // 说话人分离人数(需配合开启说话人分离使用),取值范围:[0, 10]0 代表自动分离(目前仅支持≤6个人)1-10代表指定说话人数分离仅支持非极速ASR;是否必传:否 + // SpeakerNumber: '', + // 是否过滤标点符号(目前支持中文普通话引擎)0:不过滤。1:过滤句末标点2:过滤所有标点;是否必传:否 + // FilterPunc: '', + // 输出文件类型,可选txt、srt极速ASR仅支持txt非极速Asr且ResTextFormat为3时仅支持txt;是否必传:否 + // OutputFileType: '', + // 极速ASR音频格式,支持 wav、pcm、ogg-opus、speex、silk、mp3、m4a、aac极速ASR时,该参数必填;是否必传:否 + // Format: '', + // 是否识别首个声道0:识别所有声道1:识别首个声道仅支持极速ASR;是否必传:否 + // FirstChannelOnly: '', + // 是否显示词级别时间戳0:不显示1:显示,不包含标点时间戳2:显示,包含标点时间戳仅支持极速ASR;是否必传:否 + // WordInfo: '', + // 单标点最多字数,取值范围:[6,40]默认值为 0 表示不开启该功能该参数可用于字幕生成场景,控制单行字幕最大字数当FlashAsr为false时,仅ResTextFormat为3时参数有效;是否必传:否 + // SentenceMaxLength: '', + }, + }, + }); + + cos.request({ + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 更新语音识别模板 +export const updateSpeechRecognitionTemplete = { + name: '更新语音识别模板', + fn: function updateSpeechRecognitionTemplete() { + const templateId = 'xxxxx'; // 要更新的模板id + const key = `template/${templateId}`; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 模板类型:SpeechRecognition;是否必传:是 + Tag: 'SpeechRecognition', + // 模板名称,仅支持中文、英文、数字、_、-和*,长度不超过 64;是否必传:是 + Name: 'my_speechRecognition', + // 语音识别参数;是否必传:是 + SpeechRecognition: { + // 开启极速ASR,取值 true/false;是否必传:否 + FlashAsr: 'true', + // 引擎模型类型,分为电话场景和非电话场景。电话场景:8k_zh:电话 8k 中文普通话通用(可用于双声道音频)8k_zh_s:电话 8k 中文普通话话者分离(仅适用于单声道音频)8k_en:电话 8k 英语 非电话场景: 6k_zh:16k 中文普通话通用16k_zh_video:16k 音视频领域16k_en:16k 英语16k_ca:16k 粤语16k_ja:16k 日语16k_zh_edu:中文教育16k_en_edu:英文教育16k_zh_medical:医疗16k_th:泰语16k_zh_dialect:多方言,支持23种方言极速 ASR 支持8k_zh、16k_zh、16k_en、16k_zh_video、16k_zh_dialect、16k_ms(马来语)、16k_zh-PY(中英粤);是否必传:是 + EngineModelType: '16k_zh', + // 语音声道数:1 表示单声道。EngineModelType为非电话场景仅支持单声道2 表示双声道(仅支持 8k_zh 引擎模型 双声道应分别对应通话双方)仅���持非极速ASR,为非极速ASR时,该参数必填;是否必传:否 + ChannelNum: '2', + // 识别结果返回形式:0:识别结果文本(含分段时间戳)1:词级别粒度的详细识别结果,不含标点,含语速值(词时间戳列表,一般用于生成字幕场景)2:词级别粒度的详细识别结果(包含标点、语速值)3:标点符号分段,包含每段时间戳,特别适用于字幕场景(包含词级时间、标点、语速值)仅支持非极速ASR;是否必传:否 + // ResTextFormat: '', + // 是否过滤脏词(目前支持中文普通话引擎)0:不过滤脏词1:过滤脏词2:将脏词替换为 *;是否必传:否 + // FilterDirty: '', + // 是否过滤语气词(目前支持中文普通话引擎):0 表示不过滤语气词1 表示部分过滤2 表示严格过滤 ;是否必传:否 + // FilterModal: '', + // 是否进行阿拉伯数字智能转换(目前支持中文普通话引擎)0:不转换,直接输出中文数字1:根据场景智能转换为阿拉伯数字3 :打开数学相关数字转换仅支持非极速ASR;是否必传:否 + // ConvertNumMode: '', + // 是否开启说话人分离0:不开启1:开启(仅支持8k_zh,16k_zh,16k_zh_video,单声道音频)8k电话场景建议使用双声道来区分通话双方,设置ChannelNum=2即可,不用开启说话人分离。;是否必传:否 + // SpeakerDiarization: '', + // 说话人分离人数(需配合开启说话人分离使用),取值范围:[0, 10]0 代表自动分离(目前仅支持≤6个人)1-10代表指定说话人数分离仅支持非极速ASR;是否必传:否 + // SpeakerNumber: '', + // 是否过滤标点符号(目前支持中文普通话引擎)0:不过滤。1:过滤句末标点2:过滤所有标点;是否必传:否 + // FilterPunc: '', + // 输出文件类型,可选txt、srt极速ASR仅支持txt非极速Asr且ResTextFormat为3时仅支持txt;是否必传:否 + // OutputFileType: '', + // 极速ASR音频格式,支持 wav、pcm、ogg-opus、speex、silk、mp3、m4a、aac极速ASR时,该参数必填;是否必传:否 + // Format: '', + // 是否识别首个声道0:识别所有声道1:识别首个声道仅支持极速ASR;是否必传:否 + // FirstChannelOnly: '', + // 是否显示词级别时间戳0:不显示1:显示,不包含标点时间戳2:显示,包含标点时间戳仅支持极速ASR;是否必传:否 + // WordInfo: '', + // 单标点最多字数,取值范围:[6,40]默认值为 0 表示不开启该功能该参数可用于字幕生成场景,控制单行字幕最大字数当FlashAsr为false时,仅ResTextFormat为3时参数有效;是否必传:否 + // SentenceMaxLength: '', + }, + }, + }); + + cos.request({ + Method: 'PUT', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 创建音频降噪模版 +export const postNoiseReductionTemplete = { + name: '创建音频降噪模版', + fn: function postNoiseReductionTemplete() { + const key = 'template'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 固定值:NoiseReduction;是否必传:是 + Tag: 'NoiseReduction', + // 模板名称,仅支持中文、英文、数字、_、-和*,长度不超过 64。;是否必传:是 + Name: 'my_noiseReduction', + // 降噪参数;是否必传:是 + NoiseReduction: { + // 封装格式,支持 mp3、m4a、wav;是否必传:否 + Format: 'mp3', + // 采样率单位:Hz可选 8000、12000、16000、24000、32000、44100、48000;是否必传:否 + // Samplerate: '', + }, + }, + }); + + cos.request({ + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 更新音频降噪模板 +export const updateNoiseReductionTemplete = { + name: '更新音频降噪模板', + fn: function updateNoiseReductionTemplete() { + const templateId = 'xxxxx'; // 要更新的模板id + const key = `template/${templateId}`; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 固定值:NoiseReduction;是否必传:是 + Tag: 'NoiseReduction', + // 模板名称,仅支持中文、英文、数字、_、-和*,长度不超过 64。;是否必传:是 + Name: 'my_noiseReduction2', + // 降噪参数;是否必传:是 + NoiseReduction: { + // 封装格式,支持 mp3、m4a、wav;是否必传:否 + Format: 'mp3', + // 采样率单位:Hz可选 8000、12000、16000、24000、32000、44100、48000;是否必传:否 + // Samplerate: '', + }, + }, + }); + + cos.request({ + Method: 'PUT', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 提交听歌识曲任务 +export const postSoundHound = { + name: '提交听歌识曲任务', + fn: function postSoundHound() { + const key = 'jobs'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 创建任务的 Tag:SoundHound;是否必传:是 + Tag: 'SoundHound', + // 待操作的对象信息;是否必传:是 + Input: { + // 文件路径;是否必传:是 + Object: 'ci/music.mp3', + }, + // 操作规则;是否必传:是 + // Operation: { + // 透���用户信息,可打印的 ASCII 码,长度不超过1024;是否必传:否 + // UserData: '', + // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0;是否必传:否 + // JobLevel: '', + // }, + // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 + // CallBackFormat: '', + // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 + // CallBackType: '', + // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 + // CallBack: '', + // 任务回调TDMQ配置,当 CallBackType 为 TDMQ 时必填。详情见 CallBackMqConfig;是否必传:否 + // CallBackMqConfig: { + // 消息队列所属园区,目前支持园区 sh(上海)、bj(北京)、gz(广州)、cd(成都)、hk(中国香港);是否必传:是 + // MqRegion: '', + // 消息队列使用模式,默认 Queue :主题订阅:Topic队列服务: Queue;是否必传:是 + // MqMode: '', + // TDMQ 主题名称;是否必传:是 + // MqName: '', + // }, + }, + }); + + cos.request({ + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 音乐评分 +export const vocalScore = { + name: '音乐评分', + fn: function vocalScore() { + const key = 'jobs'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 创建任务的 Tag:VocalScore;是否必传:是 + Tag: 'VocalScore', + // 待操作的对象信息;是否必传:是 + Input: { + // 文件路径;是否必传:否 + Object: 'ci/music.mp3', + }, + // 操作规则;是否必传:是 + Operation: { + // 音乐评分参数配置;是否必传:是 + VocalScore: { + // 比对基准文件路径;是否必传:否 + StandardObject: 'ci/base.mp3', + }, + // 透传用户信息, 可打印的 ASCII 码, 长度不超过1024;是否必传:否 + // UserData: '', + // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0;是否必传:否 + // JobLevel: '', + }, + // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 + // CallBackFormat: '', + // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 + // CallBackType: '', + // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 + // CallBack: '', + // 任务回调TDMQ配置,当 CallBackType 为 TDMQ 时必填。详情见 CallBackMqConfig;是否必传:否 + // CallBackMqConfig: { + // 消息队列所属园区,目前支持园区 sh(上海)、bj(北京)、gz(广州)、cd(成都)、hk(中国香港);是否必传:是 + // MqRegion: '', + // 消息队列使用模式,默认 Queue :主题订阅:Topic队列服务: Queue;是否必传:是 + // MqMode: '', + // TDMQ 主题名称;是否必传:是 + // MqName: '', + // }, + }, + }); + + cos.request({ + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; \ No newline at end of file diff --git a/demo/CIDemos/audit.js b/demo/CIDemos/audit.js new file mode 100644 index 0000000..1612f52 --- /dev/null +++ b/demo/CIDemos/audit.js @@ -0,0 +1,537 @@ +/** + * 内容审核demo集合 +*/ + +// 图片同步审核 +export const getImageAuditing = { + name: '图片同步审核', + fn: function getImageAuditing() { + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', + Key: '1.png', // 与detect-url二选一传递 + Query: { + 'ci-process': 'sensitive-content-recognition', // 固定值,必须 + 'biz-type': '', // 审核类型,非必须 + 'detect-url': '', // 审核任意公网可访问的图片链接,非必须 + interval: 5, // 审核 GIF 动图时,每隔interval帧截取一帧,非必须 + 'max-frames': 5, // 审核 GIF 动图时,最大截帧数,非必须 + 'large-image-detect': '0', // 是否需要压缩图片后再审核,非必须 + }, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 图片批量审核 +export const postImagesAuditing = { + name: '图片批量审核', + fn: function postImagesAuditing() { + var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; + var url = 'https://' + host + '/image/auditing'; + var body = COS.util.json2xml({ + Request: { + Input: [ + { + Object: '1.png', + }, + { + Object: '6.png', + }, + ], + Conf: { + BizType: '', + }, + }, + }); + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'POST', + Url: url, + Key: 'image/auditing', + ContentType: 'application/xml', + Body: body, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 查询图片审核任务结果 +export const getImageAuditingResult = { + name: '查询图片审核任务结果', + fn: function getImageAuditingResult() { + var jobId = 'si8263213daf3711eca0d1525400d88xxx'; // jobId可以通过图片批量审核返回 + var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; + var url = 'https://' + host + '/image/auditing/' + jobId; + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', + Key: '/image/auditing/' + jobId, + Url: url, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 反馈处理结果 +export const reportBadCase = { + name: '反馈处理结果', + fn: function reportBadCase() { + const host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; + const key = 'report/badcase'; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + ContentType: 2, + Url: 'https://example.com/desample_photo.jpg', + Label: 'Porn', + SuggestedLabel: 'Normal', + // JobId: '', + // ModerationTime: '', + }, + }); + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'POST', + Url: url, + Key: key, + ContentType: 'application/xml', + Body: body, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 提交视频审核任务 +export const postVideoAuditing = { + name: '提交视频审核任务', + fn: function postVideoAuditing() { + var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; + var url = 'https://' + host + '/video/auditing'; + var body = COS.util.json2xml({ + Request: { + Input: { + Object: '1.mp4', + }, + Conf: { + BizType: '', + Snapshot: { + Count: 1000, // 视频截帧数量 + }, + DetectContent: 1, // 是否审核视频声音,0-只审核视频不审核声音;1-审核视频+声音 + }, + }, + }); + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'POST', + Url: url, + Key: '/video/auditing', + ContentType: 'application/xml', + Body: body, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 查询视频审核任务结果 +export const getVideoAuditingResult = { + name: '查询视频审核任务结果', + fn: function getVideoAuditingResult() { + var jobId = 'av14d9ca15af3a11eca0d6525400d88xxx'; // jobId可以通过提交视频审核任务返回 + var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; + var url = 'https://' + host + '/video/auditing/' + jobId; + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', + Key: '/video/auditing/' + jobId, + Url: url, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 提交音频审核任务 +export const postAudioAuditing = { + name: '提交音频审核任务', + fn: function postAudioAuditing() { + var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; + var url = 'https://' + host + '/audio/auditing'; + var body = COS.util.json2xml({ + Request: { + Input: { + Object: '1.mp3', + }, + Conf: { + BizType: '', + }, + }, + }); + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'POST', + Url: url, + Key: '/audio/auditing', + ContentType: 'application/xml', + Body: body, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 查询音频审核任务结果 +export const getAudioAuditingResult = { + name: '查询音频审核任务结果', + fn: function getAudioAuditingResult() { + var jobId = 'sa0c28d41daff411ecb23352540078cxxx'; // jobId可以通过提交音频审核任务返回 + var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; + var url = 'https://' + host + '/audio/auditing/' + jobId; + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', + Key: '/audio/auditing/' + jobId, + Url: url, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 提交文本审核任务 +export const postTextAuditing = { + name: '提交文本审核任务', + fn: function postTextAuditing() { + var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; + var url = 'https://' + host + '/text/auditing'; + var body = COS.util.json2xml({ + Request: { + Input: { + // Content: COS.util.encodeBase64('乳沟'), // 经过base64编码过的文本”乳沟“,查询结果同步返回 + Object: '中文.txt', // 存在cos里的资源,审核结果异步返回,可以调用查询文本审核结果api查询 + }, + Conf: { + BizType: '', + }, + }, + }); + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'POST', + Url: url, + Key: '/text/auditing', + ContentType: 'application/xml', + Body: body, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 查询文本审核任务结果 +export const getTextAuditingResult = { + name: '查询文本审核任务结果', + fn: function getTextAuditingResult() { + var jobId = 'st8d88c664aff511ecb23352540078cxxx'; // jobId可以通过提交文本审核任务返回(Input传入Object) + var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; + var url = 'https://' + host + '/text/auditing/' + jobId; + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', + Key: '/text/auditing/' + jobId, + Url: url, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 提交文档审核任务 +export const postDocumentAuditing = { + name: '提交文档审核任务', + fn: function postDocumentAuditing() { + var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; + var url = 'https://' + host + '/document/auditing'; + var body = COS.util.json2xml({ + Request: { + Input: { + Object: 'test.xlsx', // 存在cos里的资源,审核结果异步返回,可以调用查询文本审核结果api查询 + }, + Conf: { + BizType: '', + }, + }, + }); + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'POST', + Url: url, + Key: '/document/auditing', + ContentType: 'application/xml', + Body: body, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 查询文档审核任务结果 +export const getDocumentAuditingResult = { + name: '查询文档审核任务结果', + fn: function getDocumentAuditingResult() { + var jobId = 'sd7815c21caff611eca12f525400d88xxx'; // jobId可以通过提交文档审核任务返回 + var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; + var url = 'https://' + host + '/document/auditing/' + jobId; + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', + Key: '/document/auditing/' + jobId, + Url: url, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 提交网页审核任务 +export const postWebpageAuditing = { + name: '提交网页审核任务', + fn: function postWebpageAuditing() { + var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; + var url = 'https://' + host + '/webpage/auditing'; + var body = COS.util.json2xml({ + Request: { + Input: { + Url: 'https://cloud.tencent.com/', // 存在cos里的资源,审核结果异步返回,可以调用查询文本审核结果api查询 + }, + Conf: { + BizType: '', + }, + }, + }); + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'POST', + Url: url, + Key: '/webpage/auditing', + ContentType: 'application/xml', + Body: body, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 查询网页审核任务结果 +export const getWebpageAuditingResult = { + name: '查询网页审核任务结果', + fn: function getWebpageAuditingResult() { + var jobId = 'shce868019aff611ecb1155254009a4xxx'; // jobId可以通过提交网页审核任务返回 + var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; + var url = 'https://' + host + '/webpage/auditing/' + jobId; + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', + Key: '/webpage/auditing/' + jobId, + Url: url, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 提交直播审核任务 +export const postLiveAuditing = { + name: '提交直播审核任务', + fn: function postLiveAuditing() { + var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; + var url = 'https://' + host + '/video/auditing'; + var body = COS.util.json2xml({ + Request: { + Type: 'live_video', + Input: { + Url: 'rtmp://example.com/live/123', // 需要审核的直播流播放地址 + // DataId: '', + // UserInfo: {}, + }, + Conf: { + BizType: '766d07a7af937c26216c51db29793ea6', + // Callback: 'https://callback.com', // 回调地址,非必须 + // CallbackType: 1, // 回调片段类型,非必须 + }, + }, + }); + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'POST', + Url: url, + Key: '/video/auditing', + ContentType: 'application/xml', + Body: body, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 查询直播审核任务结果 +export const getLiveAuditingResult = { + name: '查询直播审核任务结果', + fn: function getLiveAuditingResult() { + var jobId = 'av0ca69557bd6111ed904c5254009411xx'; // jobId可以通过提交直播审核任务返回 + var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; + var url = 'https://' + host + '/video/auditing/' + jobId; + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', + Key: '/video/auditing/' + jobId, + Url: url, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 取消直播审核 +export const cancelLiveAuditing = { + name: '取消直播审核', + fn: function cancelLiveAuditing() { + const host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; + const jobId = 'av8088af71359c11eeb17c525400941xxx'; + const key = `video/cancel_auditing/${jobId}`; + const url = `https://${host}/${key}`; + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'POST', + Url: url, + Key: key, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; \ No newline at end of file diff --git a/demo/CIDemos/common.js b/demo/CIDemos/common.js new file mode 100644 index 0000000..bd25c10 --- /dev/null +++ b/demo/CIDemos/common.js @@ -0,0 +1,177 @@ +/** + * 其他demo集合 +*/ + +// 开通数据万象 +export const createCIBucket = { + name: '开通数据万象', + fn: function createCIBucket() { + const host = `${config.Bucket}.pic.${config.Region}.myqcloud.com`; + const url = `https://${host}`; + cos.request({ + Method: 'PUT', // 固定值,必须 + Url: url, // 请求的url,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + + +// 关闭数据万象 +export const deleteCIBucket = { + name: '关闭数据万象', + fn: function deleteCIBucket() { + const host = `${config.Bucket}.pic.${config.Region}.myqcloud.com`; + const url = `https://${host}`; + cos.request({ + Method: 'PUT', // 固定值,必须 + Url: url, // 请求的url,必须 + Action: 'unbind'// 固定值 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 查询查询数据处理服务 +export const queryCIBucket = { + name: '查询查询数据处理服务', + fn: function queryCIBucket() { + const host = `${config.Bucket}.pic.${config.Region}.myqcloud.com`; + const url = `https://${host}`; + cos.request({ + Method: 'GET', // 固定值,必须 + Url: url, // 请求的url,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 提交病毒检测任务 +export const postVirusDetect = { + name: '提交病毒检测任务', + fn: function postVirusDetect() { + var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/virus/detect'; + var url = 'https://' + host; + var body = COS.util.json2xml({ + Request: { + Input: { + Object: 'test/1.png', // 文件名,取值为文件在当前存储桶中的完整名称,与Url参数二选一 + // Url: 'http://examplebucket-1250000000.cos.ap-shanghai.myqcloud.com/virus.doc', // 病毒文件的链接地址,与Object参数二选一 + }, + Conf: { + DetectType: 'Virus', // 检测的病毒类型,当前固定为:Virus + // CallBack: 'http://callback.demo.com', // 任务回调的地址 + }, + }, + }); + cos.request({ + Method: 'POST', + Key: 'virus/detect', + Url: url, + Body: body, + ContentType: 'application/xml', + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 查询病毒检测任务结果 +export const getVirusDetectResult = { + name: '查询病毒检测任务结果', + fn: function getVirusDetectResult() { + var jobId = 'ssdb2dab23bcdb11ed9efb5254009411xx'; // 提交病毒检测任务后会返回当前任务的jobId + var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/virus/detect/' + jobId; + var url = 'https://' + host; + cos.request({ + Method: 'GET', + Key: 'virus/detect/' + jobId, + Url: url, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 查询防盗链 +export const describeRefer = { + name: '查询防盗链', + fn: function describeRefer() { + var host = config.Bucket + '.pic.' + config.Region + '.myqcloud.com/?hotlink'; + var url = 'https://' + host; + cos.request({ + Method: 'GET', + Url: url, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 设置防盗链 +export const setRefer = { + name: '设置防盗链', + fn: function setRefer() { + var host = config.Bucket + '.pic.' + config.Region + '.myqcloud.com/?hotlink'; + var url = 'https://' + host; + var body = COS.util.json2xml({ + Hotlink: { + Url: 'https://www.example.com', // 必须,域名地址 + Type: 'white', // 必须,防盗链类型,white 为白名单,black 为黑名单,off 为关闭。 + }, + }); + cos.request({ + Method: 'PUT', + Url: url, + Body: body, + ContentType: 'application/xml', + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; \ No newline at end of file diff --git a/demo/CIDemos/docPreview.js b/demo/CIDemos/docPreview.js new file mode 100644 index 0000000..0a78bcf --- /dev/null +++ b/demo/CIDemos/docPreview.js @@ -0,0 +1,281 @@ +/** + * 文档预览demo集合 +*/ + +// 查询已经开通文档预览的存储桶 +export const describeDocProcessBuckets = { + name: '查询已经开通文档预览的存储桶', + fn: function describeDocProcessBuckets() { + var host = 'ci.' + config.Region + '.myqcloud.com/docbucket'; + var url = 'https://' + host; + cos.request({ + Method: 'GET', + Key: 'docbucket', + Url: url, + Query: { + // regions: '', // 非必须,地域信息,以“,”分隔字符串,支持 All、ap-shanghai、ap-beijing + // bucketNames: '', // 非必须,存储桶名称,以“,”分隔,支持多个存储桶,精确搜索 + // bucketName: '', // 非必须,存储桶名称前缀,前缀搜索 + // pageNumber: 1, // 非必须,第几页 + // pageSize: 10, // 非必须,每页个数 + }, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 文档转码同步请求 +export const getDocPreview = { + name: '文档转码同步请求', + fn: function getDocPreview() { + cos.getObjectUrl({ + Bucket: config.Bucket, // Bucket 格式:test-1250000000 + Region: config.Region, + Key: '1/文档.docx', + Query: { + 'ci-process': 'doc-preview', // 必须,数据万象处理能力,文档预览固定为 doc-preview + srcType: 'docx', // 非必须,源数据的后缀类型,当前文档转换根据 COS 对象的后缀名来确定源数据类型。当 COS 对象没有后缀名时,可以设置该值 + // page: '', // 非必须,需转换的文档页码,默认从1开始计数;表格文件中 page 表示转换的第 X 个 sheet 的第 X 张图 + // dstType: '', // 非必须,转换输出目标文件类型 + }, + DataType: 'blob', + }, function (err, data) { + if (err) { + console.log(err); + } else { + // Body为转码后的内容 可展示在img里 比如 + var body = data.Body; + // const url = URL.createObjectURL(body); + // const img = document.getElementById('image'); + // img.src = url; + // 获取总页数(需要在跨域配置的Expose-Headers配置需要暴露出的头部 比如下方的X-Total-Page) + // 跨域配置可参考文档 https://cloud.tencent.com/document/product/436/13318 + var totalPage = data.headers['X-Total-Page']; + } + }); + } +}; + +// 查询文档转码队列 +export const describeDocProcessQueues = { + name: '查询文档转码队列', + fn: function describeDocProcessQueues() { + var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/docqueue'; + var url = 'https://' + host; + cos.request({ + Method: 'GET', + Key: 'docqueue', + Url: url, + Query: { + // queueIds: '', // 非必须,队列 ID,以“,”符号分割字符串 + // state: '', // 非必须,1=Active,2=Paused + // pageNumber: 1, // 非必须,第几页 + // pageSize: 2, // 非必须,每页个数 + }, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 更新文档预览队列 +export const updateDocProcessQueue = { + name: '更新文档预览队列', + fn: function updateDocProcessQueue() { + // 任务所在的队列 ID,请使用查询队列(https://cloud.tencent.com/document/product/460/46946)获取或前往万象控制台(https://cloud.tencent.com/document/product/460/46487)在存储桶中查询 + var queueId = 'pa2e2c3d3fae042de909cafc16f1d801b'; // 替换成自己的队列id + var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/docqueue/' + queueId; + var url = 'https://' + host; + var body = COS.util.json2xml({ + Request: { + Name: 'queue-doc-process-1', // 替换成自己的队列name + QueueID: queueId, + State: 'Active', + NotifyConfig: { + State: 'Off', + }, + }, + }); + cos.request({ + Method: 'PUT', + Key: 'docqueue/' + queueId, + Url: url, + Body: body, + ContentType: 'application/xml', + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 提交文档转码任务 +export const createDocProcessJobs = { + name: '提交文档转码任务', + fn: function createDocProcessJobs() { + var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/doc_jobs'; + var url = 'https://' + host; + var body = COS.util.json2xml({ + Request: { + Tag: 'DocProcess', + Input: { + Object: '1/文档.docx', // 存在cos里的路径 + }, + Operation: { + DocProcess: { + TgtType: 'jpg', + }, + Output: { + Bucket: config.Bucket, + Region: config.Region, + Object: '1/文档转码_${Number}.jpg', // 转码后存到cos的路径 + }, + }, + }, + }); + cos.request({ + Method: 'POST', + Key: 'doc_jobs', + Url: url, + Body: body, + ContentType: 'application/xml', + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + + +// 查询指定的文档预览任务 +export const describeDocProcessJob = { + name: '查询指定的文档预览任务', + fn: function describeDocProcessJob() { + var jobId = 'd87fbabd07b8611ed974b3f4b40648xxx'; // 替换成自己的jogId + var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/doc_jobs/' + jobId; + var url = 'https://' + host; + cos.request({ + Method: 'GET', + Key: 'doc_jobs/' + jobId, + Url: url, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 拉取符合条件的文档预览任务 +export const describeDocProcessJobs = { + name: '拉取符合条件的文档预览任务', + fn: function describeDocProcessJobs() { + var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/doc_jobs'; + var url = 'https://' + host; + cos.request({ + Method: 'GET', + Key: 'doc_jobs', + Url: url, + Query: { + tag: 'DocProcess', + }, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 文档转 HTML +export const getDocHtmlUrl = { + name: '文档转 HTML', + fn: function getDocHtmlUrl() { + cos.getObjectUrl({ + Bucket: config.Bucket, // Bucket 格式:test-1250000000 + Region: config.Region, + Key: '1/文档.docx', + Query: { + 'ci-process': 'doc-preview', // 必须,数据万象处理能力,文档预览固定为 doc-preview + // srcType: '', // 非必须,源数据的后缀类型,当前文档转换根据 COS 对象的后缀名来确定源数据类型。当 COS 对象没有后缀名时,可以设置该值 + // page: '', // 非必须,需转换的文档页码,默认从1开始计数;表格文件中 page 表示转换的第 X 个 sheet 的第 X 张图 + dstType: 'html', // 非必须,转换输出目标文件类型 + }, + }, function (err, data) { + if (err) { + console.log(err); + } else { + // 使用浏览器打开url即可预览 + var url = data.Url; + console.log(url); + } + }); + } +}; + +// 获取在线文档预览地址 +export const getDocHtmlPreviewUrl = { + name: '获取在线文档预览地址', + fn: function getDocHtmlPreviewUrl() { + var key = 'test.pdf'; + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', + Key: key, + RawBody: true, + Query: { + 'ci-process': 'doc-preview', // 必须,预览固定参数,值为 doc-preview + dstType: 'html', // 必须,预览类型,如需预览生成类型为 html 则填入 html + weboffice_url: 1, // 非必须,是否获取预览链接。填入值为1会返回预览链接和Token信息;填入值为2只返回Token信息;不传会直接预览 + }, + }, function (err, data) { + // 从响应数据中解析出在线文档预览地址 + let body = {}; + if (data && data.Body) { + body = JSON.parse(data.Body) || {}; + } + if (body && body.PreviewUrl) { + data.PreviewUrl = body.PreviewUrl; + } + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; \ No newline at end of file diff --git a/demo/CIDemos/fileProcess.js b/demo/CIDemos/fileProcess.js new file mode 100644 index 0000000..457ed09 --- /dev/null +++ b/demo/CIDemos/fileProcess.js @@ -0,0 +1,330 @@ +/** + * 文件处理demo集合 +*/ + +// 提交文件压缩任务 +export const postFileCompress = { + name: '提交文件压缩任务', + fn: function postFileCompress() { + var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/file_jobs'; + var url = 'https://' + host; + var body = COS.util.json2xml({ + Request: { + Tag: 'FileCompress', // 必须 + Operation: { + FileCompressConfig: { + Flatten: '0', // 文件打包时,是否需要去除源文件已有的目录结构.0:不需要;1:需要 + Format: 'zip', // 打包压缩的类型,有效值:zip、tar、tar.gz + // UrlList、Prefix、Key 三者仅能选择一个,不能都为空,也不会同时生效 + // UrlList: '', // 索引文件的对象地址 + Prefix: 'testCompress/', // 目录前缀 + // Key: [], // 支持对存储桶中的多个文件进行打包,个数不能超过 1000, 总大小不超过50G,否则会导致任务失败 + }, + Output: { + Bucket: config.Bucket, // 保存压缩后文件的存储桶 + Region: config.Region, // 保存压缩后文件的存储桶地域 + Object: 'testCompress/compressed.zip', // 压缩后文件的文件名 + }, + UserData: '', + }, + // QueueId: '', // 任务所在的队列 ID + // CallBack: 'http://callback.demo.com', // 任务回调的地址 + // CallBackFormat: 'JSON', // 任务回调格式 + // CallBackType: 'Url', // 任务回调类型,Url 或 TDMQ,默认 Url + }, + }); + cos.request({ + Method: 'POST', + Key: 'file_jobs', + Url: url, + Body: body, + ContentType: 'application/xml', + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 查询文件压缩任务结果 +export const getFileCompress = { + name: '查询文件压缩任务结果', + fn: function getFileCompress() { + var jobId = 'faf1d2774a13911ed88a65b0c303ae7xx'; // 提交文件压缩任务后会返回当前任务的jobId + var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/file_jobs/' + jobId; + var url = 'https://' + host; + cos.request({ + Method: 'GET', + Key: 'file_jobs/' + jobId, + Url: url, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 提交文件解压任务 +export const postFileUnCompress = { + name: '提交文件解压任务', + fn: function postFileUnCompress() { + var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/file_jobs'; + var url = 'https://' + host; + var body = COS.util.json2xml({ + Request: { + Tag: 'FileUncompress', // 必须 + Input: { + Object: 'testCompress/compressed.zip', // 文件名,取值为文件在当前存储桶中的完整名称 + }, + Operation: { + FileUncompressConfig: { + Prefix: '', // 指定解压后输出文件的前缀,不填则默认保存在存储桶根路径 + PrefixReplaced: '0', // 指定解压后的文件路径是否需要替换前缀,默认0 + }, + Output: { + Bucket: config.Bucket, // 保存解压后文件的存储桶 + Region: config.Region, // 保存解压后文件的存储桶地域 + }, + }, + // QueueId: '', // 任务所在的队列 ID + // CallBack: 'http://callback.demo.com', // 任务回调的地址 + // CallBackFormat: 'JSON', // 任务回调格式 + // CallBackType: 'Url', // 任务回调类型,Url 或 TDMQ,默认 Url + }, + }); + cos.request({ + Method: 'POST', + Key: 'file_jobs', + Url: url, + Body: body, + ContentType: 'application/xml', + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 查询文件解压任务结果 +export const getFileUnCompress = { + name: '查询文件解压任务结果', + fn: function getFileUnCompress() { + var jobId = 'fe7b0fa34a13911eda186254bb8f3aaxx'; // 提交文件解压任务后会返回当前任务的jobId + var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/file_jobs/' + jobId; + var url = 'https://' + host; + cos.request({ + Method: 'GET', + Key: 'file_jobs/' + jobId, + Url: url, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 提交哈希值计算任务 +export const postFileHash = { + name: '提交哈希值计算任务', + fn: function postFileHash() { + var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/file_jobs'; + var url = 'https://' + host; + var body = COS.util.json2xml({ + Request: { + Tag: 'FileHashCode', // 必须 + Input: { + Object: 'test/1.pdf', // 文件名,取值为文件在当前存储桶中的完整名称 + }, + Operation: { + FileHashCodeConfig: { + Type: 'MD5', // 哈希值的算法类型,有效值:MD5、SHA1、SHA256 + AddToHeader: 'false', // 是否将计算得到的哈希值添加至文件自定义header, 有效值:true、false,默认值为 false。 + }, + // UserData: '', // 透传用户信息, 可打印的 ASCII 码, 长度不超过1024 + }, + // QueueId: '', // 任务所在的队列 ID + // CallBack: 'http://callback.demo.com', // 任务回调的地址 + // CallBackFormat: 'JSON', // 任务回调格式 + // CallBackType: 'Url', // 任务回调类型,Url 或 TDMQ,默认 Url + }, + }); + cos.request({ + Method: 'POST', + Key: 'file_jobs', + Url: url, + Body: body, + ContentType: 'application/xml', + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 查询哈希值计算任务结果 +export const getFileHashResult = { + name: '查询哈希值计算任务结果', + fn: function getFileHashResult() { + var jobId = 'f3addcbd0a13811ed9b4ff5338d756fxx'; // 提交文件哈希值计算任务后会返回当前任务的jobId + var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/file_jobs/' + jobId; + var url = 'https://' + host; + cos.request({ + Method: 'GET', + Key: 'file_jobs/' + jobId, + Url: url, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 开通文件处理服务 +export const createFileProcessBucket = { + name: '开通文件处理服务', + fn: function createFileProcessBucket() { + var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/file_bucket'; + var url = 'https://' + host; + cos.request({ + Method: 'POST', + Key: 'file_bucket', + Url: url, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 查询文件处理队列 +export const describeFileProcessQueues = { + name: '查询文件处理队列', + fn: function describeFileProcessQueues() { + var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/file_queue'; + var url = 'https://' + host; + cos.request({ + Method: 'GET', + Key: 'file_queue', + Url: url, + Query: { + // queueIds: '', // 非必须,队列 ID,以“,”符号分割字符串 + state: 'Active', // 非必须,Active 表示队列内的作业会被调度执行。Paused 表示队列暂停,作业不再会被调度执行,队列内的所有作业状态维持在暂停状态,已经执行中的任务不受影响 + pageNumber: 1, // 第几页,默认值1 + pageSize: 10, // 非必须,每页个数,默认值10 + }, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 更新文件处理队列 +export const updateFileProcessQueue = { + name: '更新文件处理队列', + fn: function updateFileProcessQueue() { + // 任务所在的队列 ID,请使用查询队列(https://cloud.tencent.com/document/product/460/46946)获取或前往万象控制台(https://cloud.tencent.com/document/product/460/46487)在存储桶中查询 + var queueId = 'p6160ada105a7408e95aac015f4bf8xxx'; + var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/file_queue/' + queueId; + var url = 'https://' + host; + var body = COS.util.json2xml({ + Request: { + Name: 'My-Queue-file', // 必须,队列名称,长度不超过128 + State: 'Active', // 必须,Active 表示队列内的作业会被调度执行。Paused 表示队列暂停,作业不再会被调度执行,队列内的所有作业状态维持在暂停状态,已经执行中的任务不受影响。 + NotifyConfig: { + // 必须,回调配置 + State: 'On', // 必须,回调开关,Off/On,默认Off + Event: 'TaskFinish', // 回调事件,当 State=On时, 必选。任务完成:TaskFinish;工作流完成:WorkflowFinish + ResultFormat: 'XML', // 非必选,回调格式,JSON/XML + Type: 'Url', // 回调类型,当 State=On时, 必选,Url 或 TDMQ + Url: 'https://www.example.com', // 回调地址,当 State=On, 且Type=Url时, 必选 + // MqMode: 'Off', // TDMQ 使用模式,当 State=On, 且Type=TDMQ时, 必选 + // MqRegion: 'Off', // TDMQ 所属园区,当 State=On, 且Type=TDMQ时, 必选 + // MqName: 'Off', // TDMQ 主题名称,当 State=On, 且Type=TDMQ时, 必选 + }, + }, + }); + cos.request({ + Method: 'POST', + Key: 'file_queue/' + queueId, + Url: url, + Body: body, + ContentType: 'application/xml', + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 哈希值计算同步请求 +export const generateFileHash = { + name: '哈希值计算同步请求', + fn: function generateFileHash() { + var key = 'test.pdf'; + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', + Key: key, + Query: { + 'ci-process': 'filehash', // 必须,操作类型,哈希值计算固定为:filehash + type: 'md5', // 必须,支持的哈希算法类型,有效值:md5、sha1、sha256 + // 'addtoheader': false, // 非必须,是否将计算得到的哈希值,自动添加至文件的自定义header,格式为:x-cos-meta-md5/sha1/sha256;有效值:true、false,不填则默认为false。 + }, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; \ No newline at end of file diff --git a/demo/CIDemos/index.js b/demo/CIDemos/index.js new file mode 100644 index 0000000..b647b12 --- /dev/null +++ b/demo/CIDemos/index.js @@ -0,0 +1,121 @@ +import * as common from './common.js'; +import * as taskAndWorkflow from './taskAndWorkflow.js'; +import * as picProcess from './picProcess.js'; +import * as ai from './ai.js'; +import * as mediaProcess from './mediaProcess.js'; +import * as docPreview from './docPreview.js'; +import * as audit from './audit.js'; +import * as fileProcess from './fileProcess.js'; +import * as asr from './asr.js'; + +// 函数集合 +const moduleFn = {}; +// html排版 +const contentMap = { + common: { + title: 'Common', + functions: [], + }, + taskAndWorkflow: { + title: '任务和工作流', + functions: [], + }, + picProcess: { + title: '图片处理', + functions: [], + }, + ai: { + title: 'AI识别', + functions: [], + }, + mediaProcess: { + title: '媒体处理', + functions: [], + }, + docPreview: { + title: '文档预览', + functions: [], + }, + audit: { + title: '内容审核', + functions: [], + }, + fileProcess: { + title: '文件处理', + functions: [], + }, + asr: { + title: '智能语音', + functions: [], + }, +}; + +function setContent(fnName, module, moduleName) { + const { name, fn } = module[fnName]; + moduleFn[fnName] = module[fnName].fn; + contentMap[moduleName].functions.push({ name, fnName }); +} +for (let fnName in common) { + setContent(fnName, common, 'common'); +} +for (let fnName in taskAndWorkflow) { + setContent(fnName, taskAndWorkflow, 'taskAndWorkflow'); +} +for (let fnName in picProcess) { + setContent(fnName, picProcess, 'picProcess'); +} +for (let fnName in ai) { + setContent(fnName, ai, 'ai'); +} +for (let fnName in mediaProcess) { + setContent(fnName, mediaProcess, 'mediaProcess'); +} +for (let fnName in docPreview) { + setContent(fnName, docPreview, 'docPreview'); +} +for (let fnName in audit) { + setContent(fnName, audit, 'audit'); +} +for (let fnName in fileProcess) { + setContent(fnName, fileProcess, 'fileProcess'); +} +for (let fnName in asr) { + setContent(fnName, asr, 'asr'); +} + + +(function () { + const container = document.querySelector('.ci-main'); + const html = []; + // 渲染html + for (let i in contentMap) { + const module = contentMap[i]; + const content = `

${module.title}

`; + let a = ''; + if (module.functions && module.functions.length > 0) { + a += module.functions.map(item => { + return `${item.fnName}(${item.name})`; + }).join(''); + } + html.push(content, a, '
'); + } + container.innerHTML = html.join(''); + container.onclick = function (e) { + if (e.target.tagName === 'A') { + const name = e.target.getAttribute('data-method').trim(); + moduleFn[name](); + } + }; + + // 设置结果面板跟随窗口自适应高 + const mainPanel = document.querySelector('.ci-main'); + const resultPanel = document.querySelector('.result'); + resultPanel.style.height = getPanelHeight(); + window.onresize = function (e) { + resultPanel.style.height = getPanelHeight(); + }; + + function getPanelHeight() { + return mainPanel.getBoundingClientRect().height - 80 + 'px'; + } +})(); diff --git a/demo/CIDemos/mediaProcess.js b/demo/CIDemos/mediaProcess.js new file mode 100644 index 0000000..678978f --- /dev/null +++ b/demo/CIDemos/mediaProcess.js @@ -0,0 +1,1081 @@ +/** + * 媒体处理demo集合 +*/ + +// 查询已经开通数据万象功能的存储桶 +export const describeMediaBuckets = { + name: '查询已经开通数据万象功能的存储桶', + fn: function describeMediaBuckets() { + const host = 'ci.' + config.Region + '.myqcloud.com'; + const url = 'https://' + host + '/mediabucket'; + cos.request({ + Method: 'GET', + Key: 'mediabucket', // 固定值,必须 + Url: url, + Query: { + pageNumber: '1', // 第几页,非必须 + pageSize: '10', // 每页个数,非必须 + // regions: 'ap-chengdu', // 地域信息,例如'ap-beijing',支持多个值用逗号分隔如'ap-shanghai,ap-beijing',非必须 + // bucketNames: 'test-1250000000', // 存储桶名称,精确搜索,例如'test-1250000000',支持多个值用逗号分隔如'test1-1250000000,test2-1250000000',非必须 + // bucketName: 'test', //存储桶名称前缀,前缀搜索,例如'test',支持多个值用逗号分隔如'test1,test2',非必须 + }, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 搜索媒体处理队列 +export const searchMediaQueue = { + name: '搜索媒体处理队列', + fn: function searchMediaQueue() { + const key = `queue`; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + cos.request({ + Method: 'GET', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Query: { + // 队列 ID,支持搜索多个,以“,”符号分割字符串,最多填10个。;是否必传:否 + queueIds: '', + // 1. Active 表示队列内的作业会被媒体处理服务调度执行2. Paused 表示队列暂停,作业不再会被媒体处理调度执行,队列内的所有作业状态维持在暂停状态,已经执行中的任务不受影响;是否必传:否 + state: 'Active', + // 1. CateAll:所有类型2. Transcoding:媒体处理队列3. SpeedTranscoding:媒体处理倍速转码队列4. 默认为 Transcoding;是否必传:否 + category: 'CateAll', + // 第几页,默认值1;是否必传:否 + pageNumber: '', + // 每页个数,默认值10;是否必传:否 + pageSize: '', + }, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 更新媒体处理队列 +export const updateMediaQueue = { + name: '更新媒体处理队列', + fn: function updateMediaQueue() { + const queueId = 'xxx'; // queueId: 要更新的队列id; + const key = `queue/${queueId}`; // queueId: 要更新的队列id; + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 队列名称,仅支持中文、英文、数字、_、-和*,长度不超过 128;限制:无;;是否必传:是 + Name: 'queue-1', + // 1. Active 表示队列内的作业会被媒体处理服务调度执行2. Paused 表示队列暂停,作业不再会被媒体处理调度执行,队列内的所有作业状态维持在暂停状态,已经执行中的任务不受影响;限制:无;;是否必传:是 + State: 'Paused', + // 回调配置;限制:无;;是否必传:是 + NotifyConfig: { + // 回调开关OffOn;限制:Off;;是否必传:否 + State: 'Off', + // 回调事件TaskFinish:任务完成WorkflowFinish:工作流完成;限制:无;;是否必传:否 + Event: 'TaskFinish', + // 回调格式XMLJSON;限制:XML;;是否必传:否 + ResultFormat: '', + // 回调类型UrlTDMQ;限制:无;;是否必传:否 + Type: 'Url', + // 回调地址,不能为内网地址。;限制:无;;是否必传:否 + Url: '', + // TDMQ 使用模式Topic:主题订阅Queue: 队列服务;限制:无;;是否必传:否 + MqMode: '', + // TDMQ 所属园区,目前支持园区 sh(上海)、bj(北京)、gz(广州)、cd(成都)、hk(中国香港);限制:无;;是否必传:否 + MqRegion: '', + // TDMQ 主题名称;限制:无;;是否必传:否 + MqName: '', + }, + }, + }); + cos.request({ + Method: 'PUT', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + + +// 获取媒体文件信息同步请求 +export const getMediaInfo = { + name: '获取媒体文件信息同步请求', + fn: function getMediaInfo() { + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', + Key: 'test.mp4', + Query: { + 'ci-process': 'videoinfo', // 固定值,必须 + }, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 获取媒体信息异步任务 +export const postMediaInfo = { + name: '获取媒体信息异步任务', + fn: function postMediaInfo() { + const key = 'jobs'; // + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 创建任务的 Tag:MediaInfo;是否必传:是 + Tag: 'MediaInfo', + // 待操作的文件信息;是否必传:是 + Input: { + // 文件路径;是否必传:是 + Object: 'test.mp4', + }, + // 操作规则;是否必传:是 + Operation: { + // 透传用户信息,可打印的 ASCII 码,长度不超过1024;是否必传:否 + UserData: '', + // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0;是否必传:否 + JobLevel: '0', + }, + // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 + CallBackFormat: '', + // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 + CallBackType: 'Url', + // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 + CallBack: '', + }, + }); + + cos.request({ + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 获取媒体文件某个时间的截图 +export const getSnapshot = { + name: '获取媒体文件某个时间的截图', + fn: function getSnapshot() { + const key = 'test.mp4'; // ObjectKey: 存在cos的媒体文件路径,比如test.mp4 + const host = `${config.Bucket}.cos.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + cos.request({ + Method: 'GET', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Query: { + // 操作类型,固定使用 snapshot;是否必传:是 + 'ci-process': 'snapshot', + // 截图的时间点,单位为秒;是否必传:是 + time: 1, + // 截图的宽。默认为0;是否必传:否 + width: 0, + // 截图的高。默认为0;是否必传:否 + height: 0, + // 截图的格式,支持 jpg 和 png,默认 jpg;是否必传:否 + format: 'jpg', + // 图片旋转方式auto:按视频旋转信息进行自动���转off:不旋转默认值为 auto;是否必传:否 + rotate: 'auto', + // 截帧方式keyframe:截取指定时间点之前的最近的一个关键帧exactframe:截取指定时间点的帧默认值为 exactframe;是否必传:否 + mode: 'exactframe', + }, + RawBody: true, + // 可选返回文件格式为blob + DataType: 'blob', + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Body); + } + }); + } +}; + + +// 提交视频截帧任务 +export const postSnapshot = { + name: '提交视频截帧任务', + fn: function postSnapshot() { + const key = 'jobs'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 创建任务的 Tag:Snapshot;是否必传:是 + Tag: 'Snapshot', + // 待操作的文件信息;是否必传:是 + Input: { + // 文件路径;是否必传:是 + Object: 'test.mp4', + }, + // 操作规则;是否必传:是 + Operation: { + // 截帧模板 ID;是否必传:否,可通过控制台获取 + TemplateId: 'xxx', + // 结果输出配置;是否必传:是 + Output: { + // 存储桶的地域;是否必传:是 + Region: config.Region, + // 存储结果的存储桶;是否必传:是 + Bucket: config.Bucket, + // 输出结果的文件名;是否必传:是 + Object: 'output/snapshot-${number}.jpg', + // 雪碧图的名字。当有多个输出文件时必须包含 ${number} 通配符。仅支持 jpg 格式;是否必传:否 + SpriteObject: 'output/sprite-${number}.jpg', + }, + // 透传用户信息,可打印的 ASCII 码,长度不超过1024;是否必传:否 + UserData: '', + // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0;是否必传:否 + JobLevel: '0', + }, + // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 + CallBackFormat: '', + // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 + CallBackType: 'Url', + // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 + CallBack: '', + }, + }); + + cos.request({ + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 获取私m3u8 +export const getPrivateM3U8 = { + name: '获取私m3u8', + fn: function getPrivateM3U8() { + const key = '视频/peachtest.mp4.m3u8'; // ObjectKey: 存在cos的媒体文件路径,比如test.mp4 + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', // 固定值,必须 + Key: key, // 必须 + Query: { + // 操作类型,固定使用 pm3u8;是否必传:是 + 'ci-process': 'pm3u8', + // 私有 ts 资源 url 下载凭证的相对有效期,单位为秒,范围为[3600, 43200];是否必传:是 + expires: 3600, + }, + RawBody: true, // 固定值,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Body); + } + }); + } +}; + +// 音视频转码 +export const postTranscode = { + name: '音视频转码', + fn: function postTranscode() { + const key = 'jobs'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 创建任务的Tag:Transcode;是否必传:是 + Tag: 'Transcode', + // 待操作的文件信息;是否必传:是 + Input: { + // 文件路径;是否必传:是 + Object: 'test.mp4', + }, + // 操作规则;是否必传:是 + Operation: { + // TemplateId与Transcode 二选一传入 + // 转码模板 ID;是否必传:否,可通过控制台获取 + TemplateId: 'xxx', + // 转码模板参数;是否必传:否 + // Transcode: {}, + // 水印模板 ID,可以传多个水印模板 ID,最多传3个;是否必传:否 + // WatermarkTemplateId: '', + // 去除水印参数, H265、AV1编码暂不支持该参数;是否必传:否 + // RemoveWatermark: { + // // 距离左上角原点 x 偏移,范围为[1, 4096];是否必传:是 + // Dx: '', + // // 距离左上角原点 y 偏移,范围为[1, 4096];是否必传:是 + // Dy: '', + // // 宽,范围为[1, 4096];是否必传:是 + // Width: '', + // // 高,范围为[1, 4096];是否必传:是 + // Height: '', + // }, + // 字幕参数,H265、AV1编码和非mkv封装暂不支持该参数;是否必传:否 + // Subtitles: { + // // 字幕参数;是否必传:是 + // Subtitle: { + // // 同 bucket 的字幕地址,需要 encode;是否必传:是 + // Url: '', + // }, + // }, + // 结果输出配置;是否必传:是 + Output: { + // 存储桶的地域;是否必传:是 + Region: config.Region, + // 存储结果的存储桶;是否必传:是 + Bucket: config.Bucket, + // 输出结果的文件名;是否必传:是 + Object: 'output/test.mp4', + }, + // 透传用户信息,可打印的 ASCII 码,长度不超过1024;是否必传:否 + UserData: '', + // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0;是否必传:否 + JobLevel: '0', + }, + // 任务所在的队列类型,限制为 SpeedTranscoding, 表示为开启倍速转码;是否必传:否 + QueueType: 'SpeedTranscoding', + // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 + CallBackFormat: '', + // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 + CallBackType: 'Url', + // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 + CallBack: '', + }, + }); + + cos.request({ + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 极速高清 +export const postExtremeHD = { + name: '极速高清', + fn: function postExtremeHD() { + const key = 'jobs'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 创建任务的Tag:Transcode;是否必传:是 + Tag: 'Transcode', + // 待操作的文件信息;是否必传:是 + Input: { + // 文件路径;是否必传:是 + Object: 'test.mp4', + }, + // 操作规则;是否必传:是 + Operation: { + // 极速高清转码模板 ID;是否必传:否,可通过控制台获取 + TemplateId: 't0fc3f4eb75596459eb42b5fa52aa6e511', + // 水印模板 ID,可以传多个水印模板 ID,最多传3个;是否必传:否 + // WatermarkTemplateId: '', + // 去除水印参数, H265、AV1编码暂不支持该参数;是否必传:否 + // RemoveWatermark: { + // // 距离左上角原点 x 偏移,范围为[1, 4096];是否必传:是 + // Dx: '', + // // 距离左上角原点 y 偏移,范围为[1, 4096];是否必传:是 + // Dy: '', + // // 宽,范围为[1, 4096];是否必传:是 + // Width: '', + // // 高,范围为[1, 4096];是否必传:是 + // Height: '', + // }, + // 字幕参数,H265、AV1编码和非mkv封装暂不支持该参数;是否必传:否 + // Subtitles: { + // // 字幕参数;是否必传:是 + // Subtitle: { + // // 同 bucket 的字幕地址,需要 encode;是否必传:是 + // Url: '', + // }, + // }, + // 结果输出配置;是否必传:是 + Output: { + // 存储桶的地域;是否必传:是 + Region: config.Region, + // 存储结果的存储桶;是否必传:是 + Bucket: config.Bucket, + // 输出结果的文件名;是否必传:是 + Object: 'output/test.mp4', + }, + // 透传用户信息,可打印的 ASCII 码,长度不超过1024;是否必传:否 + UserData: '', + // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0;是否必传:否 + JobLevel: '0', + }, + // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 + CallBackFormat: '', + // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 + CallBackType: 'Url', + // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 + CallBack: '', + }, + }); + + cos.request({ + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 音视频转封装 +export const postSegment = { + name: '音视频转封装', + fn: function postSegment() { + const key = 'jobs'; // 固定值,必须 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 创建任务的 Tag:Segment;是否必传:是 + Tag: 'Segment', + // 待操作的文件信息;是否必传:是 + Input: { + // 文件路径;是否必传:是 + Object: 'test.mp4', + }, + // 操作规则;是否必传:是 + Operation: { + // 转封装参数;是否必传:是 + Segment: { + // 封装格式,支持 aac、mp3、flac、mp4、ts、mkv、avi、hls、m3u8;是否必传:是 + Format: 'mp4', + // 转封装时长单位:秒不小于5的整数不设置 Duration 时,表示只转封装格式不分段;是否必传:否 + Duration: '5', + // 处理的流编号,对应媒体信息中的 Response.MediaInfo.Stream.Video.Index 和 Response.MediaInfo.Stream.Audio.Index,详见 获取媒体信息接口;是否必传:否 + // TranscodeIndex: '', + // // hls 加密配置,当封装格式为 hls 和 m3u8 时生效;是否必传:否 + // HlsEncrypt: { + // // 是否开启 HLS 加密,取值 true/false,默认值 false;是否必传:否 + // IsHlsEncrypt: '', + // // HLS 加密的 key,当 IsHlsEncrypt 为 true 时,该参数才有意义;是否必传:否 + // UriKey: '', + // }, + // // 开始时间取值范围: [0,视频时长],默认值为0单位为秒支持 float 格式,执行精度精确到毫秒;是否必传:否 + // StartTime: '', + // // 结束时间取值范围:[0, 视频时长],默认值为视频结束时间单位为秒支持 float 格式,执行精度精确到毫秒;是否必传:否 + // EndTime: '', + }, + // 结果输出配置;是否必传:是 + Output: { + // 存储桶的地域;是否必传:是 + Region: config.Region, + // 存储结果的存储桶;是否必传:是 + Bucket: config.Bucket, + // 输出结果的文件名;是否必传:是 + Object: 'output/out-${number}', + }, + // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0;是否必传:否 + JobLevel: '0', + }, + // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 + CallBackFormat: '', + // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 + CallBackType: 'Url', + // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 + CallBack: '', + }, + }); + + cos.request({ + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + + +// 提交音视频拼接任务 +export const postConcat = { + name: '提交音视频拼接任务', + fn: function postConcat() { + const key = 'jobs'; // + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 创建任务的 Tag:Concat;是否必传:是 + Tag: 'Concat', + // 待操作的文件信息;是否必传:否 + Input: { + // 文件路径;是否必传:是 + Object: 'test.mp4', + }, + // 操作规则;是否必传:是 + Operation: { + // TemplateId与ConcatTemplate 二选一传入 + // 转码模板 ID;是否必传:否,可通过控制台获取 + TemplateId: 'xxx', + // 拼接参数;是否必传:否 + // ConcatTemplate: { + // // 拼接节点,支持多个文件,按照文件顺序拼接;限制:否;;是否必传:否 + // ConcatFragment: { + // // 同 bucket 对象地址,需要 urlEncode;限制:是;;是否必传:否 + // Url: '', + // // 拼接对象的索引位置,大于等于0的整数;限制:否;;是否必传:否 + // FragmentIndex: '', + // // 开始时间[0, 视频时长]单位为秒 当Request.Operation.ConcatTemplate.DirectConcat 为 true 时不生效;限制:否;;是否必传:否 + // StartTime: '', + // // 结束时间[0, 视频时长]单位为秒 当 Request.Operation.ConcatTemplate.DirectConcat 为 true 时不生效;限制:否;;是否必传:否 + // EndTime: '', + // }, + // // Input 节点位于 ConcatFragment 序列索引,不能大于 ConcatFragment 长度;限制:否;;是否必传:否 + // Index: '', + // // 简单拼接方式(不转码直接拼接),其他的视频和音频参数失效,取值 true/false;限制:否;;是否必传:否 + // DirectConcat: '', + // }, + // 结果输出配置;是否必传:是 + Output: { + // 存储桶的地域;是否必传:是 + Region: config.Region, + // 存储结果的存储桶;是否必传:是 + Bucket: config.Bucket, + // 输出结果的文件名;是否必传:是 + Object: 'output/out.mp4', + }, + // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0;是否必传:否 + JobLevel: '0', + }, + // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 + CallBackFormat: '', + // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 + CallBackType: 'Url', + // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 + CallBack: '', + }, + }); + + cos.request({ + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 提交视频转动图 +export const postAnimation = { + name: '提交视频转动图', + fn: function postAnimation() { + const key = 'jobs'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 创建任务的 Tag:Animation;是否必传:是 + Tag: 'Animation', + // 待操作的文件信息;是否必传:是 + Input: { + // 文件路径;是否必传:是 + Object: 'test.mp4', + }, + // 操作规则;是否必传:是 + Operation: { + // TemplateId与Animation 二选一传入 + // 转码模板 ID;是否必传:否,可通过控制台获取 + TemplateId: 'xxx', + // 视频转动图参数;是否必传:否 + // Animation: {}, + // 结果输出配置;是否必传:是 + Output: { + // 存储桶的地域;是否必传:是 + Region: config.Region, + // 存储结果的存储桶;是否必传:是 + Bucket: config.Bucket, + // 输出结果的文件名;是否必传:是 + Object: 'output/out.${ext}', + }, + // 透传用户信息,可打印的 ASCII 码,长度不超过1024;是否必传:否 + UserData: '', + // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0;是否必传:否 + JobLevel: '0', + }, + // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 + CallBackFormat: '', + // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 + CallBackType: 'Url', + // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 + CallBack: '', + }, + }); + + cos.request({ + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 提交精彩集锦任务 +export const postVideoMontage = { + name: '提交精彩集锦任务', + fn: function postVideoMontage() { + const key = 'jobs'; // 固定值,必须 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 创建任务的 Tag:VideoMontage;是否必传:是 + Tag: 'VideoMontage', + // 待操作的文件信息;是否必传:是 + Input: { + // Object与url二选一传递 + // 同存储桶文件路径;是否必传:否 + Object: 'test.mp4', + // 支持公网下载的Url;是否必传:否 + // Url: '', + }, + // 操作规则;是否必传:是 + Operation: { + // 模板 ID;是否必传:否,可通过控制台获取 + TemplateId: 'xxx', + // 结果输出配置;是否必传:是 + Output: { + // 存储桶的地域;是否必传:是 + Region: config.Region, + // 存储结果的存储桶;是否必传:是 + Bucket: config.Bucket, + // 输出结果的文件名;是否必传:是 + Object: 'output/out.mp4', + }, + // 透传用户信息,可打印的 ASCII 码,长度不超过1024;是否必传:否 + UserData: '', + // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0;是否必传:否 + JobLevel: '0', + }, + // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 + CallBackFormat: '', + // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 + CallBackType: 'Url', + // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 + CallBack: '', + }, + }); + + cos.request({ + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 提交视频标签任务 +export const postVideoTag = { + name: '提交视频标签任务', + fn: function postVideoTag() { + const key = 'jobs'; // + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 创建任务的 Tag:VideoTag;是否必传:是 + Tag: 'VideoTag', + // 待操作的文件信息;是否必传:是 + Input: { + // 执行视频标签任务的文件路径,目前支持 mp4、avi、mkv、wmv、rmvb、flv、mov 封装格式,视频时长超过30min的视频请 提交工单 处理;是否必传:是 + Object: 'test.mp4', + }, + // 操作规则;是否必传:是 + Operation: { + // 任务参数;是否必传:是 + VideoTag: { + // 场景类型,可选择视频标签的运用场景,不同的运用场景使用的算法、输入输出等都会有所差异。当前版本只支持 Stream 场景;是否必传:是 + Scenario: 'Stream', + }, + // 任务优先级,级别限制:0 、1 、2。级别越大任务优先级越高,默认为0;是否必传:否 + JobLevel: '0', + // 透传用户信息;是否必传:否 + UserData: '', + }, + // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 + CallBackFormat: '', + // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 + CallBackType: 'Url', + // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 + CallBack: '', + }, + }); + + cos.request({ + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 提交智能封面任务 +export const postSmartCover = { + name: '提交智能封面任务', + fn: function postSmartCover() { + const key = 'jobs'; // + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 创建任务的 Tag:SmartCover;是否必传:是 + Tag: 'SmartCover', + // 待操作的文件信息;是否必传:是 + Input: { + // 文件路径;是否必传:是 + Object: 'test.mp4', + }, + // 操作规则;是否必传:是 + Operation: { + // 智能封面模板id;是否必传:否,可通过控制台获取 + TemplateId: 'xxx', + // 结果输出配置;是否必传:是 + Output: { + // 存储桶的地域;是否必传:是 + Region: config.Region, + // 存储结果的存储桶;是否必传:是 + Bucket: config.Bucket, + // 输出结果的文件名;是否必传:是 + Object: 'output/smartcover-${number}.jpg', + }, + // 透传用户信息,可打印的 ASCII 码,长度不超过1024;是否必传:否 + UserData: '', + // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为 0;是否必传:否 + JobLevel: '0', + }, + // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 + CallBackFormat: '', + // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 + CallBackType: 'Url', + // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 + CallBack: '', + }, + }); + + cos.request({ + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 添加数字水印任务 +export const postDigitalWatermark = { + name: '添加数字水印任务', + fn: function postDigitalWatermark() { + const key = 'jobs'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 创建任务的 Tag:DigitalWatermark;是否必传:是 + Tag: 'DigitalWatermark', + // 待操作的文件信息;是否必传:是 + Input: { + // 文件路径;是否必传:是 + Object: 'test.mp4', + }, + // 操作规则;是否必传:是 + Operation: { + DigitalWatermark: { + Message: '123456', // 嵌入数字水印的水印信息;是否必传:是 + Type: 'Text', // 数字水印类型;是否必传:是 + Version: 'V1', // 数字水印版本;是否必传:是 + IgnoreError: true, // 当添加水印失败是否忽略错误继续执行任务;是否必传:是 + }, + // 结果输出配置;是否必传:是 + Output: { + Region: config.Region, + // 存储结果的存储桶;是否必传:是 + Bucket: config.Bucket, + // 输出结果的文件名;是否必传:是 + Object: 'output/output.mp4', + }, + // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0;是否必传:否 + JobLevel: '0', + // 透传用户信息,可打印的 ASCII 码,长度不超过1024;是否必传:否 + UserData: '', + }, + // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 + CallBackFormat: '', + // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 + CallBackType: 'Url', + // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 + CallBack: '', + }, + }); + + cos.request({ + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 提取数字水印任务 +export const postExtractDigitalWatermark = { + name: '提取数字水印任务', + fn: function postExtractDigitalWatermark() { + const key = 'jobs'; // 固定值,必须 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 创建任务的 Tag:ExtractDigitalWatermark;是否必传:是 + Tag: 'ExtractDigitalWatermark', + // 待操作的文件信息;是否必传:是 + Input: { + // 文件路径;是否必传:是 + Object: 'test.mp4', + }, + // 操作规则;是否必传:是 + Operation: { + // 提取数字水印配置;是否必传:是 + ExtractDigitalWatermark: { + // 水印类型;限制:Text;;是否必传:是 + Type: 'Text', + // 水印版本;限制:V1;;是否必传:是 + Version: 'V1', + }, + // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0;是否必传:否 + JobLevel: '0', + // 透传用户信息,可打印的 ASCII 码,长度不超过1024;是否必传:否 + UserData: '', + }, + // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 + CallBackFormat: '', + // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 + CallBackType: 'Url', + // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 + CallBack: '', + }, + }); + + cos.request({ + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 提交图片异步处理任务 +export const postPicProcess = { + name: '提交图片异步处理任务', + fn: function postPicProcess() { + const key = 'jobs'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 创建任务的 Tag:PicProcess;是否必传:是 + Tag: 'PicProcess', + // 待操作的文件信息;是否必传:是 + Input: { + // 文件路径;是否必传:是 + Object: '1.jpg', + }, + // 操作规则;是否必传:是 + Operation: { + // 模板 ID;是否必传:否 + TemplateId: 't1edc04f224ca64782840022cdc8fc3aa4', + // PicProcess: {}, + // 结果输出配置;是否必传:是 + Output: { + Region: config.Region, + // 存储结果的存储桶;是否必传:是 + Bucket: config.Bucket, + // 输出结果的文件名;是否必传:是 + Object: 'output/output.jpg', + }, + // 透传用户信息, 可打印的 ASCII 码, 长度不超过1024;是否必传:否 + UserData: '', + // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0;是否必传:否 + JobLevel: '0', + }, + // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 + CallBackFormat: '', + // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 + CallBackType: 'Url', + // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 + CallBack: '', + }, + }); + + cos.request({ + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; \ No newline at end of file diff --git a/demo/CIDemos/picProcess.js b/demo/CIDemos/picProcess.js new file mode 100644 index 0000000..0525ce9 --- /dev/null +++ b/demo/CIDemos/picProcess.js @@ -0,0 +1,475 @@ +/** + * 图片处理demo集合 +*/ + +// 获取带图片处理的访问url +export const getImageUrl = { + name: '获取带图片处理的访问url', + fn: function getImageUrl() { + // 生成带图片处理参数的文件签名URL,过期时间设置为 30 分钟。 + cos.getObjectUrl({ + Bucket: config.Bucket, + Region: config.Region, + Key: '02.png', + Query: { 'imageMogr2/thumbnail/200x/': '' }, + Expires: 1800, + Sign: true, + }, function (err, data) { + console.log('getObjectUrl with sign: ', err || (data && data.Url)); + }); + + // 生成带图片处理参数的文件URL,不带签名。 + cos.getObjectUrl({ + Bucket: config.Bucket, + Region: config.Region, + Key: 'photo.png', + QueryString: `imageMogr2/thumbnail/200x/`, + Sign: false, + }, function (err, data) { + console.log('getObjectUrl without sign: ', err || (data && data.Url)); + }); + } +}; + +// 图片样式 - 查询样式 +export const describeImageStyles = { + name: '图片样式 - 查询样式', + fn: function describeImageStyles() { + const host = config.Bucket + '.pic.' + config.Region + '.myqcloud.com/?style'; + const url = 'https://' + host; + cos.request({ + Method: 'GET', + Url: url, + Query: { + 'style-name': 'style_name', // 非必填,样式名称 + }, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 图片样式 - 增加样式 +export const addImageStyle = { + name: '图片样式 - 增加样式', + fn: function addImageStyle() { + const host = config.Bucket + '.pic.' + config.Region + '.myqcloud.com/?style'; + const url = 'https://' + host; + const body = COS.util.json2xml({ + AddStyle: { + StyleName: 'style_name1', // 必须,样式名称 + StyleBody: 'imageMogr2/thumbnail/!50px', // 必须,样式详情 + }, + }); + cos.request({ + Method: 'PUT', + Url: url, + Body: body, + ContentType: 'application/xml', + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 图片样式 - 删除样式 +export const deleteImageStyle = { + name: '图片样式 - 删除样式', + fn: function deleteImageStyle() { + const host = config.Bucket + '.pic.' + config.Region + '.myqcloud.com/?style'; + const url = 'https://' + host; + const body = COS.util.json2xml({ + DeleteStyle: { + StyleName: 'style_name1', // 必须,样式名称 + }, + }); + cos.request({ + Method: 'DELETE', + Url: url, + Body: body, + ContentType: 'application/xml', + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 开通 Guetzli 压缩 +export const openImageGuetzli = { + name: '开通 Guetzli 压缩', + fn: function openImageGuetzli() { + const host = config.Bucket + '.pic.' + config.Region + '.myqcloud.com/?guetzli'; + const url = 'https://' + host; + cos.request({ + Method: 'PUT', + Url: url, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 查询 Guetzli 状态 +export const describeImageGuetzli = { + name: '查询 Guetzli 状态', + fn: function describeImageGuetzli() { + const host = config.Bucket + '.pic.' + config.Region + '.myqcloud.com/?guetzli'; + const url = 'https://' + host; + cos.request({ + Method: 'GET', + Url: url, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 关闭 Guetzli 压缩 +export const closeImageGuetzli = { + name: '关闭 Guetzli 压缩', + fn: function closeImageGuetzli() { + const host = config.Bucket + '.pic.' + config.Region + '.myqcloud.com/?guetzli'; + const url = 'https://' + host; + cos.request({ + Method: 'DELETE', + Url: url, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }) + } +}; + +// 上传时使用图片处理 +export const uploadPicOperation = { + name: '上传时使用图片处理', + fn: function uploadPicOperation() { + util.selectLocalFile(function (files) { + const file = files && files[0]; + if (!file) return; + if (file.type.indexOf('image') < 0) { + console.error('Please select a photo to upload!'); + return; + } + if (file.size > 1024 * 1024) { + cos.sliceUploadFile({ + Bucket: config.Bucket, // Bucket 格式:test-1250000000 + Region: config.Region, + Key: file.name, + Body: file, + Headers: { + // 通过 imageMogr2 接口使用图片缩放功能:指定图片宽度为 200,宽度等比压缩 + 'Pic-Operations': JSON.stringify({ + is_pic_info: 1, + rules: [{ fileid: 'desample_photo.jpg', rule: 'imageMogr2/thumbnail/200x/' }], + }), + }, + onHashProgress: function (progressData) { + console.log('onHashProgress', JSON.stringify(progressData)); + }, + onProgress: function (progressData) { + console.log('onProgress', JSON.stringify(progressData)); + }, + }, function (err, data) { + console.log('uploadPicOperation:', err || data); + }, + ); + } else { + cos.putObject({ + Bucket: config.Bucket, // Bucket 格式:test-1250000000 + Region: config.Region, + Key: file.name, + Body: file, + Headers: { + // 通过 imageMogr2 接口进行 avif 压缩,可以根据需要压缩的类型填入不同的压缩格式:webp/heif/tpg/avif/svgc + 'Pic-Operations': + '{"is_pic_info": 1, "rules": [{"fileid": "desample_photo.jpg", "rule": "imageMogr2/format/avif"}]}', + }, + onHashProgress: function (progressData) { + console.log('onHashProgress', JSON.stringify(progressData)); + }, + onProgress: function (progressData) { + console.log('onProgress', JSON.stringify(progressData)); + }, + }, function (err, data) { + console.log('uploadPicOperation:', err || data); + }, + ); + } + }); + } +}; + +// 对云上数据处理 +export const requestPicOperation = { + name: '对云上数据处理', + fn: function requestPicOperation() { + // 文字水印示例 + const text = '腾讯云万象优图'; + const color = '#3D3D3D'; + // 经过安全base64编码 使用 COS.util.encodeBase64 方法需要sdk版本至少为1.4.18 + const textBase64 = COS.util.encodeBase64(text, true); + const colorBase64 = COS.util.encodeBase64(color, true); + // 生成一个文字水印 + const waterMarkRule = `watermark/2/text/${textBase64}/fill/${colorBase64}/fontsize/20/dissolve/50/gravity/northeast/dx/20/dy/20/batch/1/degree/45`; + const picOperations = JSON.stringify({ + is_pic_info: 1, // 固定 + // fileid 设置和Key相同可实现只保留处理后的图片而不保留原图 + rules: [{ fileid: 'desample_photo.jpg', rule: waterMarkRule }], + }); + + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Key: '02.png', + Method: 'GET', + Action: 'exif', + RawBody: true, + // Headers: { + // // 通过 imageMogr2 接口使用图片缩放功能:指定图片宽度为 200,宽度等比压缩 + // 'Pic-Operations': picOperations, + // }, + }, function (err, data) { + const info = JSON.parse(data.Body); + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 下载时使用图片压缩 +export const getObjectPicOperation = { + name: '下载时使用图片压缩', + fn: function getObjectPicOperation() { + cos.getObject({ + Bucket: config.Bucket, + Region: config.Region, + Key: '1.png', + QueryString: `imageMogr2/format/avif`, // 可以根据需要压缩的类型填入不同的压缩格式:webp/heif/tpg/avif/svgc + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 异常图片检测 +export const createImageInspectJob = { + name: '异常图片检测', + fn: function createImageInspectJob() { + const key = '1.png'; + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', + Key: key, + RawBody: true, + Query: { + 'ci-process': 'ImageInspect', // 必须,操作类型,异常图片检测固定为:ImageInspect + }, + }, function (err, data) { + // 从响应数据中解析出异常图片检测结果 + let body = {}; + if (data && data.Body) { + body = JSON.parse(data.Body) || {}; + if (body) { + data.body = body; + } + } + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + + +// 查询图片处理队列 +export const describePicProcessQueues = { + name: '查询图片处理队列', + fn: function describePicProcessQueues() { + const host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/picqueue'; + const url = 'https://' + host; + cos.request({ + Method: 'GET', + Key: 'picqueue', + Url: url, + Query: { + // queueIds: '', // 非必须,队列 ID,以“,”符号分割字符串 + state: 'Active', // 非必须,1. Active 表示队列内的作业会被媒体处理服务调度执行。2. Paused 表示队列暂停,作业不再会被媒体处理调度执行,队列内的所有作业状态维持在暂停状态,已经执行中的任务不受影响。 + pageNumber: 1, // 非必须,第几页,默认值1 + pageSize: 10, // 非必须,每页个数,默认值10 + }, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + + +// 更新图片处理队列 +export const updatePicProcessQueue = { + name: '更新图片处理队列', + fn: function updatePicProcessQueue() { + // 任务所在的队列 ID,请使用查询队列(https://cloud.tencent.com/document/product/460/46946)获取或前往万象控制台(https://cloud.tencent.com/document/product/460/46487)在存储桶中查询 + const queueId = 'p882d181160d84feca27d9376e17c4xxx'; + const host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/picqueue/' + queueId; + const url = 'https://' + host; + const body = COS.util.json2xml({ + Request: { + Name: 'My-Queue-Pic', // 必须,队列名称,长度不超过128 + State: 'Active', // 必须,Active 表示队列内的作业会被调度执行。Paused 表示队列暂停,作业不再会被调度执行,队列内的所有作业状态维持在暂停状态,已经执行中的任务不受影响。 + NotifyConfig: { + // 必须,回调配置 + State: 'On', // 必须,回调开关,Off/On,默认Off + Event: 'TaskFinish', // 回调事件,当 State=On时, 必选。任务完成:TaskFinish;工作流完成:WorkflowFinish + ResultFormat: 'XML', // 非必选,回调格式,JSON/XML + Type: 'Url', // 回调类型,当 State=On时, 必选,Url 或 TDMQ + Url: 'https://www.example.com', // 回调地址,当 State=On, 且Type=Url时, 必选 + // MqMode: 'Off', // TDMQ 使用模式,当 State=On, 且Type=TDMQ时, 必选 + // MqRegion: 'Off', // TDMQ 所属园区,当 State=On, 且Type=TDMQ时, 必选 + // MqName: 'Off', // TDMQ 主题名称,当 State=On, 且Type=TDMQ时, 必选 + }, + }, + }); + cos.request({ + Method: 'POST', + Key: 'picqueue/' + queueId, + Url: url, + Body: body, + ContentType: 'application/xml', + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 查询原图保护状态 +export const describeOriginProtect = { + name: '查询原图保护状态', + fn: function describeOriginProtect() { + const host = config.Bucket + '.pic.' + config.Region + '.myqcloud.com/?origin-protect'; + const url = 'https://' + host; + cos.request({ + Method: 'GET', + Url: url, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + + +// 开通原图保护 +export const openOriginProtect = { + name: '开通原图保护', + fn: function openOriginProtect() { + const host = config.Bucket + '.pic.' + config.Region + '.myqcloud.com/?origin-protect'; + const url = 'https://' + host; + cos.request({ + Method: 'PUT', + Url: url, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 关闭原图保护 +export const closeOriginProtect = { + name: '关闭原图保护', + fn: function closeOriginProtect() { + const host = config.Bucket + '.pic.' + config.Region + '.myqcloud.com/?origin-protect'; + const url = 'https://' + host; + cos.request({ + Method: 'DELETE', + Url: url, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + + + + + diff --git a/demo/CIDemos/taskAndWorkflow.js b/demo/CIDemos/taskAndWorkflow.js new file mode 100644 index 0000000..4e75bc6 --- /dev/null +++ b/demo/CIDemos/taskAndWorkflow.js @@ -0,0 +1,170 @@ +/** + * 任务和工作流demo集合 +*/ + +// 获取任务列表 +export const getJobList = { + name: '获取任务列表', + fn: function getJobList() { + const key = 'jobs'; // 固定值,必须 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + + cos.request({ + Method: 'GET', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Query: { + // 拉取该队列 ID 下的任务;是否必传:否 + // queueId: '', + // 拉取队列类型下的任务,和 queueId 不同时生效,同时存在时 queueId 优先;是否必传:否 + // queueType: '', + // 任务的 Tag;是否必传:是,比如查找视频转动图的任务 + tag: 'Animation', + // 触发该任务的工作流ID;是否必传:否 + workflowId: '', + // 触发该任务的存量触发任务ID;是否必传:否 + // inventoryTriggerJobId: '', + // 该任务的输入文件名,暂仅支持精确匹配;是否必传:否 + // inputObject: '', + // Desc 或者 Asc。默认为 Desc;是否必传:否 + // orderByTime: '', + // 请求的上下文,用于翻页。上次返回的值;是否必传:否 + // nextToken: '', + // 拉取的最大任务数。默认为10。最大为100;是否必传:否 + size: 10, + // 拉取该状态的任务,以,分割,支持多状态:All、Submitted、Running、Success、Failed、Pause、Cancel。默认为 All;是否必传:否 + states: 'All', + // 拉取创建时间大于该时间的任务。格式为:%Y-%m-%dT%H:%m:%S%z,示例:2001-01-01T00:00:00+0800;是否必传:否 + // startCreationTime: '', + // 拉取创建时间小于该时间的任务。格式为:%Y-%m-%dT%H:%m:%S%z,示例:2001-01-01T23:59:59+0800;是否必传:否 + // endCreationTime: '', + }, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + + +// 查看指定任务 +export const getJobDetail = { + name: '查看指定任务', + fn: function getJobDetail() { + const jobId = 'jec8ae8943c2511ee9d4a9b3cb7a5c6xx'; // jobId: 需要查询的jobId; + const key = `jobs/${jobId}`; // jobId: 需要查询的jobId; + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + cos.request({ + Method: 'GET', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 查询工作流 +export const getWorkflow = { + name: '查询工作流', + fn: function getWorkflow() { + const key = `workflow`; // + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + cos.request({ + Method: 'GET', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Query: { + // 工作流 ID,以,符号分割字符串;是否必传:否 + ids: '', + // 工作流名称;是否必传:否 + name: '', + // 第几页;是否必传:否 + pageNumber: '', + // 每页个数;是否必传:否 + pageSize: '', + }, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 获取工作流实例详情 +export const getWorkflowexecution = { + name: '获取工作流实例详情', + fn: function getWorkflowexecution() { + const runId = 'ic7af1bf53c2911ee9988525400ae68xx'; + const key = `workflowexecution/${runId}`; // RunId:7; + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + + cos.request({ + Method: 'GET', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 测试工作流 +export const triggerworkflow = { + name: '测试工作流', + fn: function triggerworkflow() { + const key = `triggerworkflow`; // + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + + cos.request({ + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Query: { + // 需要触发的工作流 ID;是否必传:是 + workflowId: 'wd3330113a4ef4287a4e0a93c36af09xx', + // 需要进行工作流处理的对象名称, 需要进行 url 编码;是否必传:是 + object: 'test.mp4', + // 存量触发任务名称,支持中文、英文、数字、—和_,长度限制128字符,默认为空;是否必传:否 + // name: '', + }, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + + diff --git a/demo/ciDemo.js b/demo/ciDemo.js deleted file mode 100644 index 43d111c..0000000 --- a/demo/ciDemo.js +++ /dev/null @@ -1,5431 +0,0 @@ -var TaskId; - -function request() { - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Key: '1.png', - Method: 'POST', - Action: 'image_process', - Headers: { - // 通过 imageMogr2 接口使用图片缩放功能:指定图片宽度为 200,宽度等比压缩 - 'Pic-Operations': - '{"is_pic_info": 1, "rules": [{"fileid": "desample_photo.jpg", "rule": "imageMogr2/thumbnail/200x/"}]}', - }, - }, - function (err, data) { - logger.log('request:', err || data); - }, - ); -} - -function getImageUrl() { - // 生成带图片处理参数的文件签名URL,过期时间设置为 30 分钟。 - cos.getObjectUrl( - { - Bucket: config.Bucket, - Region: config.Region, - Key: '02.png', - Query: { 'imageMogr2/thumbnail/200x/': '' }, - Expires: 1800, - Sign: true, - }, - function (err, data) { - logger.log('getObjectUrl with sign: ', err || (data && data.Url)); - }, - ); - - // 生成带图片处理参数的文件URL,不带签名。 - cos.getObjectUrl( - { - Bucket: config.Bucket, - Region: config.Region, - Key: 'photo.png', - QueryString: `imageMogr2/thumbnail/200x/`, - Sign: false, - }, - function (err, data) { - logger.log('getObjectUrl without sign: ', err || (data && data.Url)); - }, - ); -} - -// 查询已经开通数据万象功能的存储桶 -function describeMediaBuckets() { - const host = 'ci.' + config.Region + '.myqcloud.com'; - const url = 'https://' + host + '/mediabucket'; - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'GET', - Key: 'mediabucket', // 固定值,必须 - Url: url, - Query: { - pageNumber: '1', // 第几页,非必须 - pageSize: '10', // 每页个数,非必须 - // regions: 'ap-chengdu', // 地域信息,例如'ap-beijing',支持多个值用逗号分隔如'ap-shanghai,ap-beijing',非必须 - // bucketNames: 'test-1250000000', // 存储桶名称,精确搜索,例如'test-1250000000',支持多个值用逗号分隔如'test1-1250000000,test2-1250000000',非必须 - // bucketName: 'test', //存储桶名称前缀,前缀搜索,例如'test',支持多个值用逗号分隔如'test1,test2',非必须 - }, - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - }, - ); -} - -// 搜索媒体处理队列 -function searchMediaQueue() { - const key = `queue`; // 固定值 - const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - - cos.request( - { - Method: 'GET', // 固定值,必须 - Key: key, // 必须 - Url: url, // 请求的url,必须 - Query: { - // 队列 ID,支持搜索多个,以“,”符号分割字符串,最多填10个。;是否必传:否 - queueIds: '', - // 1. Active 表示队列内的作业会被媒体处理服务调度执行2. Paused 表示队列暂停,作业不再会被媒体处理调度执行,队列内的所有作业状态维持在暂停状态,已经执行中的任务不受影响;是否必传:否 - state: 'Active', - // 1. CateAll:所有类型2. Transcoding:媒体处理队列3. SpeedTranscoding:媒体处理倍速转码队列4. 默认为 Transcoding;是否必传:否 - category: 'CateAll', - // 第几页,默认值1;是否必传:否 - pageNumber: '', - // 每页个数,默认值10;是否必传:否 - pageSize: '', - }, - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - }, - ); -} - -// 更新媒体处理队列 -function updateMediaQueue() { - const queueId = 'xxx'; // queueId: 要更新的队列id; - const key = `queue/${queueId}`; // queueId: 要更新的队列id; - const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - const body = COS.util.json2xml({ - Request: { - // 队列名称,仅支持中文、英文、数字、_、-和*,长度不超过 128;限制:无;;是否必传:是 - Name: 'queue-1', - // 1. Active 表示队列内的作业会被媒体处理服务调度执行2. Paused 表示队列暂停,作业不再会被媒体处理调度执行,队列内的所有作业状态维持在暂停状态,已经执行中的任务不受影响;限制:无;;是否必传:是 - State: 'Paused', - // 回调配置;限制:无;;是否必传:是 - NotifyConfig: { - // 回调开关OffOn;限制:Off;;是否必传:否 - State: 'Off', - // 回调事件TaskFinish:任务完成WorkflowFinish:工作流完成;限制:无;;是否必传:否 - Event: 'TaskFinish', - // 回调格式XMLJSON;限制:XML;;是否必传:否 - ResultFormat: '', - // 回调类型UrlTDMQ;限制:无;;是否必传:否 - Type: 'Url', - // 回调地址,不能为内网地址。;限制:无;;是否必传:否 - Url: '', - // TDMQ 使用模式Topic:主题订阅Queue: 队列服务;限制:无;;是否必传:否 - MqMode: '', - // TDMQ 所属园区,目前支持园区 sh(上海)、bj(北京)、gz(广州)、cd(成都)、hk(中国香港);限制:无;;是否必传:否 - MqRegion: '', - // TDMQ 主题名称;限制:无;;是否必传:否 - MqName: '', - }, - }, - }); - - cos.request( - { - Method: 'PUT', // 固定值,必须 - Key: key, // 必须 - Url: url, // 请求的url,必须 - Body: body, // 请求体参数,必须 - ContentType: 'application/xml', // 固定值,必须 - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - }, - ); -} - -// 获取媒体文件信息同步请求 -function getMediaInfo() { - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'GET', - Key: 'test.mp4', - Query: { - 'ci-process': 'videoinfo', // 固定值,必须 - }, - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - }, - ); -} - -function postMediaInfo() { - const key = `jobs`; // - const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - const body = COS.util.json2xml({ - Request: { - // 创建任务的 Tag:MediaInfo;是否必传:是 - Tag: 'MediaInfo', - // 待操作的文件信息;是否必传:是 - Input: { - // 文件路径;是否必传:是 - Object: 'test.mp4', - }, - // 操作规则;是否必传:是 - Operation: { - // 透传用户信息,可打印的 ASCII 码,长度不超过1024;是否必传:否 - UserData: '', - // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0;是否必传:否 - JobLevel: '0', - }, - // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 - CallBackFormat: '', - // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 - CallBackType: 'Url', - // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 - CallBack: '', - }, - }); - - cos.request( - { - Method: 'POST', // 固定值,必须 - Key: key, // 必须 - Url: url, // 请求的url,必须 - Body: body, // 请求体参数,必须 - ContentType: 'application/xml', // 固定值,必须 - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - }, - ); -} - -// 获取媒体文件某个时间的截图 -function getSnapshot() { - const key = 'test.mp4'; // ObjectKey: 存在cos的媒体文件路径,比如test.mp4 - const host = `${config.Bucket}.cos.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - - cos.request( - { - Method: 'GET', // 固定值,必须 - Key: key, // 必须 - Url: url, // 请求的url,必须 - Query: { - // 操作类型,固定使用 snapshot;是否必传:是 - 'ci-process': 'snapshot', - // 截图的时间点,单位为秒;是否必传:是 - time: 1, - // 截图的宽。默认为0;是否必传:否 - width: 0, - // 截图的高。默认为0;是否必传:否 - height: 0, - // 截图的格式,支持 jpg 和 png,默认 jpg;是否必传:否 - format: 'jpg', - // 图片旋转方式auto:按视频旋转信息进行自动���转off:不旋转默认值为 auto;是否必传:否 - rotate: 'auto', - // 截帧方式keyframe:截取指定时间点之前的最近的一个关键帧exactframe:截取指定时间点的帧默认值为 exactframe;是否必传:否 - mode: 'exactframe', - }, - RawBody: true, - // 可选返回文件格式为blob - DataType: 'blob', - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Body); - } - }, - ); -} -// 获取私m3u8 -function getPrivateM3U8() { - const key = '视频/peachtest.mp4.m3u8'; // ObjectKey: 存在cos的媒体文件路径,比如test.mp4 - const host = `${config.Bucket}.cos.${config.Region}.myqcloud.com`; - - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'GET', // 固定值,必须 - Key: key, // 必须 - // Url: url, // 请求的url,必须 - Query: { - // 操作类型,固定使用 pm3u8;是否必传:是 - 'ci-process': 'pm3u8', - // 私有 ts 资源 url 下载凭证的相对有效期,单位为秒,范围为[3600, 43200];是否必传:是 - expires: 3600, - }, - RawBody: true, // 固定值,必须 - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Body); - } - }, - ); -} - -// 音视频转码 -function postTranscode() { - const key = `jobs`; // 固定值 - const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - const body = COS.util.json2xml({ - Request: { - // 创建任务的Tag:Transcode;是否必传:是 - Tag: 'Transcode', - // 待操作的文件信息;是否必传:是 - Input: { - // 文件路径;是否必传:是 - Object: 'test.mp4', - }, - // 操作规则;是否必传:是 - Operation: { - // TemplateId与Transcode 二选一传入 - // 转码模板 ID;是否必传:否,可通过控制台获取 - TemplateId: 'xxx', - // 转码模板参数;是否必传:否 - // Transcode: {}, - // 水印模板 ID,可以传多个水印模板 ID,最多传3个;是否必传:否 - // WatermarkTemplateId: '', - // 去除水印参数, H265、AV1编码暂不支持该参数;是否必传:否 - // RemoveWatermark: { - // // 距离左上角原点 x 偏移,范围为[1, 4096];是否必传:是 - // Dx: '', - // // 距离左上角原点 y 偏移,范围为[1, 4096];是否必传:是 - // Dy: '', - // // 宽,范围为[1, 4096];是否必传:是 - // Width: '', - // // 高,范围为[1, 4096];是否必传:是 - // Height: '', - // }, - // 字幕参数,H265、AV1编码和非mkv封装暂不支持该参数;是否必传:否 - // Subtitles: { - // // 字幕参数;是否必传:是 - // Subtitle: { - // // 同 bucket 的字幕地址,需要 encode;是否必传:是 - // Url: '', - // }, - // }, - // 结果输出配置;是否必传:是 - Output: { - // 存储桶的地域;是否必传:是 - Region: config.Region, - // 存储结果的存储桶;是否必传:是 - Bucket: config.Bucket, - // 输出结果的文件名;是否必传:是 - Object: 'output/test.mp4', - }, - // 透传用户信息,可打印的 ASCII 码,长度不超过1024;是否必传:否 - UserData: '', - // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0;是否必传:否 - JobLevel: '0', - }, - // 任务所在的队列类型,限制为 SpeedTranscoding, 表示为开启倍速转码;是否必传:否 - QueueType: 'SpeedTranscoding', - // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 - CallBackFormat: '', - // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 - CallBackType: 'Url', - // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 - CallBack: '', - }, - }); - - cos.request( - { - Method: 'POST', // 固定值,必须 - Key: key, // 必须 - Url: url, // 请求的url,必须 - Body: body, // 请求体参数,必须 - ContentType: 'application/xml', // 固定值,必须 - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - }, - ); -} - -// 极速高清 -function postExtremeHD() { - const key = `jobs`; // 固定值 - const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - const body = COS.util.json2xml({ - Request: { - // 创建任务的Tag:Transcode;是否必传:是 - Tag: 'Transcode', - // 待操作的文件信息;是否必传:是 - Input: { - // 文件路径;是否必传:是 - Object: 'test.mp4', - }, - // 操作规则;是否必传:是 - Operation: { - // 极速高清转码模板 ID;是否必传:否,可通过控制台获取 - TemplateId: 't0fc3f4eb75596459eb42b5fa52aa6e511', - // 水印模板 ID,可以传多个水印模板 ID,最多传3个;是否必传:否 - // WatermarkTemplateId: '', - // 去除水印参数, H265、AV1编码暂不支持该参数;是否必传:否 - // RemoveWatermark: { - // // 距离左上角原点 x 偏移,范围为[1, 4096];是否必传:是 - // Dx: '', - // // 距离左上角原点 y 偏移,范围为[1, 4096];是否必传:是 - // Dy: '', - // // 宽,范围为[1, 4096];是否必传:是 - // Width: '', - // // 高,范围为[1, 4096];是否必传:是 - // Height: '', - // }, - // 字幕参数,H265、AV1编码和非mkv封装暂不支持该参数;是否必传:否 - // Subtitles: { - // // 字幕参数;是否必传:是 - // Subtitle: { - // // 同 bucket 的字幕地址,需要 encode;是否必传:是 - // Url: '', - // }, - // }, - // 结果输出配置;是否必传:是 - Output: { - // 存储桶的地域;是否必传:是 - Region: config.Region, - // 存储结果的存储桶;是否必传:是 - Bucket: config.Bucket, - // 输出结果的文件名;是否必传:是 - Object: 'output/test.mp4', - }, - // 透传用户信息,可打印的 ASCII 码,长度不超过1024;是否必传:否 - UserData: '', - // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0;是否必传:否 - JobLevel: '0', - }, - // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 - CallBackFormat: '', - // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 - CallBackType: 'Url', - // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 - CallBack: '', - }, - }); - - cos.request( - { - Method: 'POST', // 固定值,必须 - Key: key, // 必须 - Url: url, // 请求的url,必须 - Body: body, // 请求体参数,必须 - ContentType: 'application/xml', // 固定值,必须 - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - }, - ); -} - -// 音视频转封装 -function postSegment() { - const key = `jobs`; // 固定值,必须 - const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - const body = COS.util.json2xml({ - Request: { - // 创建任务的 Tag:Segment;是否必传:是 - Tag: 'Segment', - // 待操作的文件信息;是否必传:是 - Input: { - // 文件路径;是否必传:是 - Object: 'test.mp4', - }, - // 操作规则;是否必传:是 - Operation: { - // 转封装参数;是否必传:是 - Segment: { - // 封装格式,支持 aac、mp3、flac、mp4、ts、mkv、avi、hls、m3u8;是否必传:是 - Format: 'mp4', - // 转封装时长单位:秒不小于5的整数不设置 Duration 时,表示只转封装格式不分段;是否必传:否 - Duration: '5', - // 处理的流编号,对应媒体信息中的 Response.MediaInfo.Stream.Video.Index 和 Response.MediaInfo.Stream.Audio.Index,详见 获取媒体信息接口;是否必传:否 - // TranscodeIndex: '', - // // hls 加密配置,当封装格式为 hls 和 m3u8 时生效;是否必传:否 - // HlsEncrypt: { - // // 是否开启 HLS 加密,取值 true/false,默认值 false;是否必传:否 - // IsHlsEncrypt: '', - // // HLS 加密的 key,当 IsHlsEncrypt 为 true 时,该参数才有意义;是否必传:否 - // UriKey: '', - // }, - // // 开始时间取值范围: [0,视频时长],默认值为0单位为秒支持 float 格式,执行精度精确到毫秒;是否必传:否 - // StartTime: '', - // // 结束时间取值范围:[0, 视频时长],默认值为视频结束时间单位为秒支持 float 格式,执行精度精确到毫秒;是否必传:否 - // EndTime: '', - }, - // 结果输出配置;是否必传:是 - Output: { - // 存储桶的地域;是否必传:是 - Region: config.Region, - // 存储结果的存储桶;是否必传:是 - Bucket: config.Bucket, - // 输出结果的文件名;是否必传:是 - Object: 'output/out-${number}', - }, - // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0;是否必传:否 - JobLevel: '0', - }, - // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 - CallBackFormat: '', - // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 - CallBackType: 'Url', - // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 - CallBack: '', - }, - }); - - cos.request( - { - Method: 'POST', // 固定值,必须 - Key: key, // 必须 - Url: url, // 请求的url,必须 - Body: body, // 请求体参数,必须 - ContentType: 'application/xml', // 固定值,必须 - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - }, - ); -} - -// 提交音视频拼接任务 -function postConcat() { - const key = `jobs`; // - const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - const body = COS.util.json2xml({ - Request: { - // 创建任务的 Tag:Concat;是否必传:是 - Tag: 'Concat', - // 待操作的文件信息;是否必传:否 - Input: { - // 文件路径;是否必传:是 - Object: 'test.mp4', - }, - // 操作规则;是否必传:是 - Operation: { - // TemplateId与ConcatTemplate 二选一传入 - // 转码模板 ID;是否必传:否,可通过控制台获取 - TemplateId: 'xxx', - // 拼接参数;是否必传:否 - // ConcatTemplate: { - // // 拼接节点,支持多个文件,按照文件顺序拼接;限制:否;;是否必传:否 - // ConcatFragment: { - // // 同 bucket 对象地址,需要 urlEncode;限制:是;;是否必传:否 - // Url: '', - // // 拼接对象的索引位置,大于等于0的整数;限制:否;;是否必传:否 - // FragmentIndex: '', - // // 开始时间[0, 视频时长]单位为秒 当Request.Operation.ConcatTemplate.DirectConcat 为 true 时不生效;限制:否;;是否必传:否 - // StartTime: '', - // // 结束时间[0, 视频时长]单位为秒 当 Request.Operation.ConcatTemplate.DirectConcat 为 true 时不生效;限制:否;;是否必传:否 - // EndTime: '', - // }, - // // Input 节点位于 ConcatFragment 序列索引,不能大于 ConcatFragment 长度;限制:否;;是否必传:否 - // Index: '', - // // 简单拼接方式(不转码直接拼接),其他的视频和音频参数失效,取值 true/false;限制:否;;是否必传:否 - // DirectConcat: '', - // }, - // 结果输出配置;是否必传:是 - Output: { - // 存储桶的地域;是否必传:是 - Region: config.Region, - // 存储结果的存储桶;是否必传:是 - Bucket: config.Bucket, - // 输出结果的文件名;是否必传:是 - Object: 'output/out.mp4', - }, - // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0;是否必传:否 - JobLevel: '0', - }, - // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 - CallBackFormat: '', - // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 - CallBackType: 'Url', - // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 - CallBack: '', - }, - }); - - cos.request( - { - Method: 'POST', // 固定值,必须 - Key: key, // 必须 - Url: url, // 请求的url,必须 - Body: body, // 请求体参数,必须 - ContentType: 'application/xml', // 固定值,必须 - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - }, - ); -} - -// 提交视频转动图 -function postAnimation() { - const key = `jobs`; // 固定值 - const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - const body = COS.util.json2xml({ - Request: { - // 创建任务的 Tag:Animation;是否必传:是 - Tag: 'Animation', - // 待操作的文件信息;是否必传:是 - Input: { - // 文件路径;是否必传:是 - Object: 'test.mp4', - }, - // 操作规则;是否必传:是 - Operation: { - // TemplateId与Animation 二选一传入 - // 转码模板 ID;是否必传:否,可通过控制台获取 - TemplateId: 'xxx', - // 视频转动图参数;是否必传:否 - // Animation: {}, - // 结果输出配置;是否必传:是 - Output: { - // 存储桶的地域;是否必传:是 - Region: config.Region, - // 存储结果的存储桶;是否必传:是 - Bucket: config.Bucket, - // 输出结果的文件名;是否必传:是 - Object: 'output/out.${ext}', - }, - // 透传用户信息,可打印的 ASCII 码,长度不超过1024;是否必传:否 - UserData: '', - // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0;是否必传:否 - JobLevel: '0', - }, - // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 - CallBackFormat: '', - // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 - CallBackType: 'Url', - // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 - CallBack: '', - }, - }); - - cos.request( - { - Method: 'POST', // 固定值,必须 - Key: key, // 必须 - Url: url, // 请求的url,必须 - Body: body, // 请求体参数,必须 - ContentType: 'application/xml', // 固定值,必须 - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - }, - ); -} - -// 提交视频截帧任务 -function postSnapshot() { - const key = `jobs`; // 固定值 - const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - const body = COS.util.json2xml({ - Request: { - // 创建任务的 Tag:Snapshot;是否必传:是 - Tag: 'Snapshot', - // 待操作的文件信息;是否必传:是 - Input: { - // 文件路径;是否必传:是 - Object: 'test.mp4', - }, - // 操作规则;是否必传:是 - Operation: { - // 截帧模板 ID;是否必传:否,可通过控制台获取 - TemplateId: 'xxx', - // 结果输出配置;是否必传:是 - Output: { - // 存储桶的地域;是否必传:是 - Region: config.Region, - // 存储结果的存储桶;是否必传:是 - Bucket: config.Bucket, - // 输出结果的文件名;是否必传:是 - Object: 'output/snapshot-${number}.jpg', - // 雪碧图的名字。当有多个输出文件时必须包含 ${number} 通配符。仅支持 jpg 格式;是否必传:否 - SpriteObject: 'output/sprite-${number}.jpg', - }, - // 透传用户信息,可打印的 ASCII 码,长度不超过1024;是否必传:否 - UserData: '', - // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0;是否必传:否 - JobLevel: '0', - }, - // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 - CallBackFormat: '', - // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 - CallBackType: 'Url', - // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 - CallBack: '', - }, - }); - - cos.request( - { - Method: 'POST', // 固定值,必须 - Key: key, // 必须 - Url: url, // 请求的url,必须 - Body: body, // 请求体参数,必须 - ContentType: 'application/xml', // 固定值,必须 - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - }, - ); -} - -// 提交精彩集锦任务 -function postVideoMontage() { - const key = `jobs`; // 固定值,必须 - const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - const body = COS.util.json2xml({ - Request: { - // 创建任务的 Tag:VideoMontage;是否必传:是 - Tag: 'VideoMontage', - // 待操作的文件信息;是否必传:是 - Input: { - // Object与url二选一传递 - // 同存储桶文件路径;是否必传:否 - Object: 'test.mp4', - // 支持公网下载的Url;是否必传:否 - // Url: '', - }, - // 操作规则;是否必传:是 - Operation: { - // 模板 ID;是否必传:否,可通过控制台获取 - TemplateId: 'xxx', - // 结果输出配置;是否必传:是 - Output: { - // 存储桶的地域;是否必传:是 - Region: config.Region, - // 存储结果的存储桶;是否必传:是 - Bucket: config.Bucket, - // 输出结果的文件名;是否必传:是 - Object: 'output/out.mp4', - }, - // 透传用户信息,可打印的 ASCII 码,长度不超过1024;是否必传:否 - UserData: '', - // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0;是否必传:否 - JobLevel: '0', - }, - // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 - CallBackFormat: '', - // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 - CallBackType: 'Url', - // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 - CallBack: '', - }, - }); - - cos.request( - { - Method: 'POST', // 固定值,必须 - Key: key, // 必须 - Url: url, // 请求的url,必须 - Body: body, // 请求体参数,必须 - ContentType: 'application/xml', // 固定值,必须 - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - }, - ); -} - -// 提交视频标签任务 -function postVideoTag() { - const key = `jobs`; // - const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - const body = COS.util.json2xml({ - Request: { - // 创建任务的 Tag:VideoTag;是否必传:是 - Tag: 'VideoTag', - // 待操作的文件信息;是否必传:是 - Input: { - // 执行视频标签任务的文件路径,目前支持 mp4、avi、mkv、wmv、rmvb、flv、mov 封装格式,视频时长超过30min的视频请 提交工单 处理;是否必传:是 - Object: 'test.mp4', - }, - // 操作规则;是否必传:是 - Operation: { - // 任务参数;是否必传:是 - VideoTag: { - // 场景类型,可选择视频标签的运用场景,不同的运用场景使用的算法、输入输出等都会有所差异。当前版本只支持 Stream 场景;是否必传:是 - Scenario: 'Stream', - }, - // 任务优先级,级别限制:0 、1 、2。级别越大任务优先级越高,默认为0;是否必传:否 - JobLevel: '0', - // 透传用户信息;是否必传:否 - UserData: '', - }, - // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 - CallBackFormat: '', - // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 - CallBackType: 'Url', - // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 - CallBack: '', - }, - }); - - cos.request( - { - Method: 'POST', // 固定值,必须 - Key: key, // 必须 - Url: url, // 请求的url,必须 - Body: body, // 请求体参数,必须 - ContentType: 'application/xml', // 固定值,必须 - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - }, - ); -} - -// 提交智能封面任务 -function postSmartCover() { - const key = `jobs`; // - const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - const body = COS.util.json2xml({ - Request: { - // 创建任务的 Tag:SmartCover;是否必传:是 - Tag: 'SmartCover', - // 待操作的文件信息;是否必传:是 - Input: { - // 文件路径;是否必传:是 - Object: 'test.mp4', - }, - // 操作规则;是否必传:是 - Operation: { - // 智能封面模板id;是否必传:否,可通过控制台获取 - TemplateId: 'xxx', - // 结果输出配置;是否必传:是 - Output: { - // 存储桶的地域;是否必传:是 - Region: config.Region, - // 存储结果的存储桶;是否必传:是 - Bucket: config.Bucket, - // 输出结果的文件名;是否必传:是 - Object: 'output/smartcover-${number}.jpg', - }, - // 透传用户信息,可打印的 ASCII 码,长度不超过1024;是否必传:否 - UserData: '', - // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为 0;是否必传:否 - JobLevel: '0', - }, - // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 - CallBackFormat: '', - // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 - CallBackType: 'Url', - // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 - CallBack: '', - }, - }); - - cos.request( - { - Method: 'POST', // 固定值,必须 - Key: key, // 必须 - Url: url, // 请求的url,必须 - Body: body, // 请求体参数,必须 - ContentType: 'application/xml', // 固定值,必须 - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - }, - ); -} - -// 添加数字水印任务 -function postDigitalWatermark() { - const key = `jobs`; // 固定值 - const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - const body = COS.util.json2xml({ - Request: { - // 创建任务的 Tag:DigitalWatermark;是否必传:是 - Tag: 'DigitalWatermark', - // 待操作的文件信息;是否必传:是 - Input: { - // 文件路径;是否必传:是 - Object: 'test.mp4', - }, - // 操作规则;是否必传:是 - Operation: { - DigitalWatermark: { - Message: '123456', // 嵌入数字水印的水印信息;是否必传:是 - Type: 'Text', // 数字水印类型;是否必传:是 - Version: 'V1', // 数字水印版本;是否必传:是 - IgnoreError: true, // 当添加水印失败是否忽略错误继续执行任务;是否必传:是 - }, - // 结果输出配置;是否必传:是 - Output: { - Region: config.Region, - // 存储结果的存储桶;是否必传:是 - Bucket: config.Bucket, - // 输出结果的文件名;是否必传:是 - Object: 'output/output.mp4', - }, - // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0;是否必传:否 - JobLevel: '0', - // 透传用户信息,可打印的 ASCII 码,长度不超过1024;是否必传:否 - UserData: '', - }, - // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 - CallBackFormat: '', - // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 - CallBackType: 'Url', - // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 - CallBack: '', - }, - }); - - cos.request( - { - Method: 'POST', // 固定值,必须 - Key: key, // 必须 - Url: url, // 请求的url,必须 - Body: body, // 请求体参数,必须 - ContentType: 'application/xml', // 固定值,必须 - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - }, - ); -} - -// 提取数字水印任务 -function postExtractDigitalWatermark() { - const key = `jobs`; // 固定值,必须 - const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - const body = COS.util.json2xml({ - Request: { - // 创建任务的 Tag:ExtractDigitalWatermark;是否必传:是 - Tag: 'ExtractDigitalWatermark', - // 待操作的文件信息;是否必传:是 - Input: { - // 文件路径;是否必传:是 - Object: 'test.mp4', - }, - // 操作规则;是否必传:是 - Operation: { - // 提取数字水印配置;是否必传:是 - ExtractDigitalWatermark: { - // 水印类型;限制:Text;;是否必传:是 - Type: 'Text', - // 水印版本;限制:V1;;是否必传:是 - Version: 'V1', - }, - // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0;是否必传:否 - JobLevel: '0', - // 透传用户信息,可打印的 ASCII 码,长度不超过1024;是否必传:否 - UserData: '', - }, - // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 - CallBackFormat: '', - // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 - CallBackType: 'Url', - // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 - CallBack: '', - }, - }); - - cos.request( - { - Method: 'POST', // 固定值,必须 - Key: key, // 必须 - Url: url, // 请求的url,必须 - Body: body, // 请求体参数,必须 - ContentType: 'application/xml', // 固定值,必须 - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - }, - ); -} - -// 提交图片异步处理任务 -function postPicProcess() { - const key = `jobs`; // 固定值 - const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - const body = COS.util.json2xml({ - Request: { - // 创建任务的 Tag:PicProcess;是否必传:是 - Tag: 'PicProcess', - // 待操作的文件信息;是否必传:是 - Input: { - // 文件路径;是否必传:是 - Object: '1.jpg', - }, - // 操作规则;是否必传:是 - Operation: { - // 模板 ID;是否必传:否 - TemplateId: 't1edc04f224ca64782840022cdc8fc3aa4', - // PicProcess: {}, - // 结果输出配置;是否必传:是 - Output: { - Region: config.Region, - // 存储结果的存储桶;是否必传:是 - Bucket: config.Bucket, - // 输出结果的文件名;是否必传:是 - Object: 'output/output.jpg', - }, - // 透传用户信息, 可打印的 ASCII 码, 长度不超过1024;是否必传:否 - UserData: '', - // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0;是否必传:否 - JobLevel: '0', - }, - // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 - CallBackFormat: '', - // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 - CallBackType: 'Url', - // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 - CallBack: '', - }, - }); - - cos.request( - { - Method: 'POST', // 固定值,必须 - Key: key, // 必须 - Url: url, // 请求的url,必须 - Body: body, // 请求体参数,必须 - ContentType: 'application/xml', // 固定值,必须 - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data); - } - }, - ); -} - -// 图片同步审核 -function getImageAuditing() { - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'GET', - Key: '1.png', // 与detect-url二选一传递 - Query: { - 'ci-process': 'sensitive-content-recognition', // 固定值,必须 - 'biz-type': '', // 审核类型,非必须 - 'detect-url': '', // 审核任意公网可访问的图片链接,非必须 - interval: 5, // 审核 GIF 动图时,每隔interval帧截取一帧,非必须 - 'max-frames': 5, // 审核 GIF 动图时,最大截帧数,非必须 - 'large-image-detect': '0', // 是否需要压缩图片后再审核,非必须 - }, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 图片批量审核 -function postImagesAuditing() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; - var url = 'https://' + host + '/image/auditing'; - var body = COS.util.json2xml({ - Request: { - Input: [ - { - Object: '1.png', - }, - { - Object: '6.png', - }, - ], - Conf: { - BizType: '', - }, - }, - }); - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'POST', - Url: url, - Key: 'image/auditing', - ContentType: 'application/xml', - Body: body, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 查询图片审核任务结果 -function getImageAuditingResult() { - var jobId = 'si8263213daf3711eca0d1525400d88xxx'; // jobId可以通过图片批量审核返回 - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; - var url = 'https://' + host + '/image/auditing/' + jobId; - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'GET', - Key: '/image/auditing/' + jobId, - Url: url, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 反馈处理结果 -function reportBadCase() { - const host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; - const key = 'report/badcase'; - const url = `https://${host}/${key}`; - const body = COS.util.json2xml({ - Request: { - ContentType: 2, - Url: 'https://example.com/desample_photo.jpg', - Label: 'Porn', - SuggestedLabel: 'Normal', - // JobId: '', - // ModerationTime: '', - }, - }); - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'POST', - Url: url, - Key: key, - ContentType: 'application/xml', - Body: body, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 提交视频审核任务 -function postVideoAuditing() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; - var url = 'https://' + host + '/video/auditing'; - var body = COS.util.json2xml({ - Request: { - Input: { - Object: '1.mp4', - }, - Conf: { - BizType: '', - Snapshot: { - Count: 1000, // 视频截帧数量 - }, - DetectContent: 1, // 是否审核视频声音,0-只审核视频不审核声音;1-审核视频+声音 - }, - }, - }); - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'POST', - Url: url, - Key: '/video/auditing', - ContentType: 'application/xml', - Body: body, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 查询视频审核任务结果 -function getVideoAuditingResult() { - var jobId = 'av14d9ca15af3a11eca0d6525400d88xxx'; // jobId可以通过提交视频审核任务返回 - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; - var url = 'https://' + host + '/video/auditing/' + jobId; - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'GET', - Key: '/video/auditing/' + jobId, - Url: url, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 提交音频审核任务 -function postAudioAuditing() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; - var url = 'https://' + host + '/audio/auditing'; - var body = COS.util.json2xml({ - Request: { - Input: { - Object: '1.mp3', - }, - Conf: { - BizType: '', - }, - }, - }); - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'POST', - Url: url, - Key: '/audio/auditing', - ContentType: 'application/xml', - Body: body, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 查询音频审核任务结果 -function getAudioAuditingResult() { - var jobId = 'sa0c28d41daff411ecb23352540078cxxx'; // jobId可以通过提交音频审核任务返回 - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; - var url = 'https://' + host + '/audio/auditing/' + jobId; - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'GET', - Key: '/audio/auditing/' + jobId, - Url: url, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 提交文本审核任务 -function postTextAuditing() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; - var url = 'https://' + host + '/text/auditing'; - var body = COS.util.json2xml({ - Request: { - Input: { - // Content: COS.util.encodeBase64('乳沟'), // 经过base64编码过的文本”乳沟“,查询结果同步返回 - Object: '中文.txt', // 存在cos里的资源,审核结果异步返回,可以调用查询文本审核结果api查询 - }, - Conf: { - BizType: '', - }, - }, - }); - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'POST', - Url: url, - Key: '/text/auditing', - ContentType: 'application/xml', - Body: body, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 查询文本审核任务结果 -function getTextAuditingResult() { - var jobId = 'st8d88c664aff511ecb23352540078cxxx'; // jobId可以通过提交文本审核任务返回(Input传入Object) - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; - var url = 'https://' + host + '/text/auditing/' + jobId; - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'GET', - Key: '/text/auditing/' + jobId, - Url: url, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 提交文档审核任务 -function postDocumentAuditing() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; - var url = 'https://' + host + '/document/auditing'; - var body = COS.util.json2xml({ - Request: { - Input: { - Object: 'test.xlsx', // 存在cos里的资源,审核结果异步返回,可以调用查询文本审核结果api查询 - }, - Conf: { - BizType: '', - }, - }, - }); - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'POST', - Url: url, - Key: '/document/auditing', - ContentType: 'application/xml', - Body: body, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 查询文档审核任务结果 -function getDocumentAuditingResult() { - var jobId = 'sd7815c21caff611eca12f525400d88xxx'; // jobId可以通过提交文档审核任务返回 - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; - var url = 'https://' + host + '/document/auditing/' + jobId; - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'GET', - Key: '/document/auditing/' + jobId, - Url: url, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 提交网页审核任务 -function postWebpageAuditing() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; - var url = 'https://' + host + '/webpage/auditing'; - var body = COS.util.json2xml({ - Request: { - Input: { - Url: 'https://cloud.tencent.com/', // 存在cos里的资源,审核结果异步返回,可以调用查询文本审核结果api查询 - }, - Conf: { - BizType: '', - }, - }, - }); - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'POST', - Url: url, - Key: '/webpage/auditing', - ContentType: 'application/xml', - Body: body, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 查询网页审核任务结果 -function getWebpageAuditingResult() { - var jobId = 'shce868019aff611ecb1155254009a4xxx'; // jobId可以通过提交网页审核任务返回 - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; - var url = 'https://' + host + '/webpage/auditing/' + jobId; - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'GET', - Key: '/webpage/auditing/' + jobId, - Url: url, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 提交直播审核任务 -function postLiveAuditing() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; - var url = 'https://' + host + '/video/auditing'; - var body = COS.util.json2xml({ - Request: { - Type: 'live_video', - Input: { - Url: 'rtmp://example.com/live/123', // 需要审核的直播流播放地址 - // DataId: '', - // UserInfo: {}, - }, - Conf: { - BizType: '766d07a7af937c26216c51db29793ea6', - // Callback: 'https://callback.com', // 回调地址,非必须 - // CallbackType: 1, // 回调片段类型,非必须 - }, - }, - }); - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'POST', - Url: url, - Key: '/video/auditing', - ContentType: 'application/xml', - Body: body, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 取消直播审核 -function cancelLiveAuditing() { - const host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; - const jobId = 'av8088af71359c11eeb17c525400941xxx'; - const key = `video/cancel_auditing/${jobId}`; - const url = `https://${host}/${key}`; - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'POST', - Url: url, - Key: key, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 查询直播审核任务结果 -function getLiveAuditingResult() { - var jobId = 'av0ca69557bd6111ed904c5254009411xx'; // jobId可以通过提交直播审核任务返回 - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; - var url = 'https://' + host + '/video/auditing/' + jobId; - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'GET', - Key: '/video/auditing/' + jobId, - Url: url, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 查询已经开通文档预览的存储桶 -function describeDocProcessBuckets() { - var host = 'ci.' + config.Region + '.myqcloud.com/docbucket'; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Key: 'docbucket', - Url: url, - Query: { - // regions: '', // 非必须,地域信息,以“,”分隔字符串,支持 All、ap-shanghai、ap-beijing - // bucketNames: '', // 非必须,存储桶名称,以“,”分隔,支持多个存储桶,精确搜索 - // bucketName: '', // 非必须,存储桶名称前缀,前缀搜索 - // pageNumber: 1, // 非必须,第几页 - // pageSize: 10, // 非必须,每页个数 - }, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 文档转码同步请求 -function getDocPreview() { - cos.getObjectUrl( - { - Bucket: config.Bucket, // Bucket 格式:test-1250000000 - Region: config.Region, - Key: '1/文档.docx', - Query: { - 'ci-process': 'doc-preview', // 必须,数据万象处理能力,文档预览固定为 doc-preview - srcType: 'docx', // 非必须,源数据的后缀类型,当前文档转换根据 COS 对象的后缀名来确定源数据类型。当 COS 对象没有后缀名时,可以设置该值 - // page: '', // 非必须,需转换的文档页码,默认从1开始计数;表格文件中 page 表示转换的第 X 个 sheet 的第 X 张图 - // dstType: '', // 非必须,转换输出目标文件类型 - }, - DataType: 'blob', - }, - function (err, data) { - if (err) { - console.log(err); - } else { - // Body为转码后的内容 可展示在img里 比如 - var body = data.Body; - // const url = URL.createObjectURL(body); - // const img = document.getElementById('image'); - // img.src = url; - // 获取总页数(需要在跨域配置的Expose-Headers配置需要暴露出的头部 比如下方的X-Total-Page) - // 跨域配置可参考文档 https://cloud.tencent.com/document/product/436/13318 - var totalPage = data.headers['X-Total-Page']; - } - }, - ); -} - -// 查询文档转码队列 -function describeDocProcessQueues() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/docqueue'; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Key: 'docqueue', - Url: url, - Query: { - // queueIds: '', // 非必须,队列 ID,以“,”符号分割字符串 - // state: '', // 非必须,1=Active,2=Paused - // pageNumber: 1, // 非必须,第几页 - // pageSize: 2, // 非必须,每页个数 - }, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 更新文档预览队列 -function updateDocProcessQueue() { - // 任务所在的队列 ID,请使用查询队列(https://cloud.tencent.com/document/product/460/46946)获取或前往万象控制台(https://cloud.tencent.com/document/product/460/46487)在存储桶中查询 - var queueId = 'pa2e2c3d3fae042de909cafc16f1d801b'; // 替换成自己的队列id - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/docqueue/' + queueId; - var url = 'https://' + host; - var body = COS.util.json2xml({ - Request: { - Name: 'queue-doc-process-1', // 替换成自己的队列name - QueueID: queueId, - State: 'Active', - NotifyConfig: { - State: 'Off', - }, - }, - }); - cos.request( - { - Method: 'PUT', - Key: 'docqueue/' + queueId, - Url: url, - Body: body, - ContentType: 'application/xml', - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 提交文档转码任务 -function createDocProcessJobs() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/doc_jobs'; - var url = 'https://' + host; - var body = COS.util.json2xml({ - Request: { - Tag: 'DocProcess', - Input: { - Object: '1/文档.docx', // 存在cos里的路径 - }, - Operation: { - DocProcess: { - TgtType: 'jpg', - }, - Output: { - Bucket: config.Bucket, - Region: config.Region, - Object: '1/文档转码_${Number}.jpg', // 转码后存到cos的路径 - }, - }, - }, - }); - cos.request( - { - Method: 'POST', - Key: 'doc_jobs', - Url: url, - Body: body, - ContentType: 'application/xml', - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 查询指定的文档预览任务 -function describeDocProcessJob() { - var jobId = 'd87fbabd07b8611ed974b3f4b40648xxx'; // 替换成自己的jogId - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/doc_jobs/' + jobId; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Key: 'doc_jobs/' + jobId, - Url: url, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 拉取符合条件的文档预览任务 -function describeDocProcessJobs() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/doc_jobs'; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Key: 'doc_jobs', - Url: url, - Query: { - tag: 'DocProcess', - }, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 文档转 HTML -function getDocHtmlUrl() { - cos.getObjectUrl( - { - Bucket: config.Bucket, // Bucket 格式:test-1250000000 - Region: config.Region, - Key: '1/文档.docx', - Query: { - 'ci-process': 'doc-preview', // 必须,数据万象处理能力,文档预览固定为 doc-preview - // srcType: '', // 非必须,源数据的后缀类型,当前文档转换根据 COS 对象的后缀名来确定源数据类型。当 COS 对象没有后缀名时,可以设置该值 - // page: '', // 非必须,需转换的文档页码,默认从1开始计数;表格文件中 page 表示转换的第 X 个 sheet 的第 X 张图 - dstType: 'html', // 非必须,转换输出目标文件类型 - }, - }, - function (err, data) { - if (err) { - console.log(err); - } else { - // 使用浏览器打开url即可预览 - var url = data.Url; - console.log(url); - } - }, - ); -} - -// 识别图片标签 -function getImageLabel() { - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'GET', // 固定值,必须 - Key: 'ci/dog.jpeg', // 与detect-url二选一传递 - Query: { - // 固定值detect-label;是否必传:是 - 'ci-process': 'detect-label', - // 本次调用支持的识别场景,可选值如下:web,针对网络图片优化;camera,针对手机摄像头拍摄图片优化;album,针对手机相册、网盘产品优化;news,针对新闻、资讯、广电等行业优化;如果不传此参数,则默认为camera。支持多场景(scenes)一起检测,以,分隔。例如,使用 scenes=web,camera 即对一张图片使用两个模型同时检测,输出两套识别结果。;是否必传:否 - // scenes: '', - // 您可以通过填写 detect-url 处理任意公网可访问的图片链接。不填写 detect-url 时,后台会默认处理 ObjectKey ,填写了 detect-url 时,后台会处理 detect-url 链接,无需再填写 ObjectKey detect-url 示例:http://www.example.com/abc.jpg ,需要进行 UrlEncode,处理后为http%25253A%25252F%25252Fwww.example.com%25252Fabc.jpg;是否必传:否 - // 'detect-url': '', - }, - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data); - } - } - ); -} - -// 二维码识别(云上图片识别) -function recognitionQRcode() { - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'GET', // 固定值,必须 - Key: 'ci/二维码.png', // 必须 - Query: { - // 万象处理能力,二维码识别固定为 QRcode;是否必传:是 - 'ci-process': 'QRcode', - // 二维码覆盖功能,将对识别出的二维码覆盖上马赛克。取值为0或1。0表示不开启二维码覆盖,1表示开启二维码覆盖,默认值0;是否必传:否 - cover: 0, - }, - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - } - ); -} - -// 二维码识别(上传时识别) -function identifyQrcode_put() { - util.selectLocalFile(function (files) { - var file = files && files[0]; - if (!file) return; - cos.putObject( - { - Bucket: config.Bucket, // Bucket 格式:test-1250000000 - Region: config.Region, - Key: '1/上传二维码.png', - Body: file, - Headers: { - // 通过 imageMogr2 接口使用图片缩放功能:指定图片宽度为 200,宽度等比压缩 - 'Pic-Operations': '{"is_pic_info": 1, "rules": [{"fileid":"test.jpg","rule":" QRcode/cover/0"}]}', - }, - onProgress: function (progressData) { - logger.log('onProgress', JSON.stringify(progressData)); - }, - }, - function (err, data) { - logger.log('CIExample1:', err || data); - }, - ); - }); -} - -// 二维码识别(下载时识别) -function identifyQrcode_get() { - var key = '1/二维码图片.png'; - var host = config.Bucket + '.cos.' + config.Region + '.myqcloud.com/' + key; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Key: key, - Url: url, - Query: { - 'ci-process': 'QRcode', - }, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 二维码生成 -function createCRcode() { - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'GET', - Query: { - 'ci-process': 'qrcode-generate', // 必须,对象存储处理能力,二维码生成参数为 qrcode-generate - 'qrcode-content': '二维码文案', // 必须,可识别的二维码文本信息 - // mode: 0, // 非必须,生成的二维码类型,可选值:0或1。0为二维码,1为条形码,默认值为0 - width: 200, //必须,指定生成的二维码或条形码的宽度,高度会进行等比压缩 - }, - }, - function (err, data) { - if (!err) { - // 获得二维码base64 - var imgBase64 = data.Response.ResultImage; - // 比如可拼接前缀直接展示在img里 - // document.querySelector('#img').src = 'data:image/jpg;base64,' + imgBase64; - } - }, - ); -} - -// 图片文字识别 -function cOSOCR() { - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'GET', // 固定值,必须 - Key: 'ci/0.jpg', // 与detect-url二选一传递 - Query: { - // 数据万象处理能力,图片文字识别固定为OCR;是否必传:是 - 'ci-process': 'OCR', - // 您可以通过填写 detect-url 处理任意公网可访问的图片链接。不填写 detect-url 时,后台会默认处理 ObjectKey ,填写了 detect-url 时,后台会处理 detect-url 链接,无需再填写 ObjectKey detect-url 示例:http://www.example.com/abc.jpg ,需要进行 UrlEncode,处理后为http%25253A%25252F%25252Fwww.example.com%25252Fabc.jpg;是否必传:否 - // 'detect-url': '', - // ocr的识别类型,有效值为general,accurate,efficient,fast,handwriting。general表示通用印刷体识别;accurate表示印刷体高精度版;efficient表示印刷体精简版;fast表示印刷体高速版;handwriting表示手写体识别。默认值为general。;是否必传:否 - type: 'general', - // type值为general时有效,表示识别语言类型。支持自动识别语言类型,同时支持自选语言种类,默认中英文混合(zh),各种语言均支持与英文混合的文字识别。可选值:zh:中英混合zh_rare:支持英文、数字、中文生僻字、繁体字,特殊符号等auto:自动mix:混合语种jap:日语kor:韩语spa:西班牙语fre:法语ger:德语por:葡萄牙语vie:越语may:马来语rus:俄语ita:意大利语hol:荷兰语swe:瑞典语fin:芬兰语dan:丹麦语nor:挪威语hun:匈牙利语tha:泰语hi:印地语ara:阿拉伯语;是否必传:否 - 'language-type': 'zh', - // type值为general,fast时有效,表示是否开启PDF识别,有效值为true和false,默认值为false,开启后可同时支持图片和PDF的识别。;是否必传:否 - ispdf: false, - // type值为general,fast时有效,表示需要识别的PDF页面的对应页码,仅支持PDF单页识别,当上传文件为PDF且ispdf参数值为true时有效,默认值为1。;是否必传:否 - // 'pdf-pagenumber': 0, - // type值为general,accurate时有效,表示识别后是否需要返回单字信息,有效值为true和false,默认为false;是否必传:否 - isword: false, - // type值为handwriting时有效,表示是否开启单字的四点定位坐标输出,有效值为true和false,默认值为false。;是否必传:否 - 'enable-word-polygon': false, - }, - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - } - ); -} - -// 提交文件压缩任务 -function postFileCompress() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/file_jobs'; - var url = 'https://' + host; - var body = COS.util.json2xml({ - Request: { - Tag: 'FileCompress', // 必须 - Operation: { - FileCompressConfig: { - Flatten: '0', // 文件打包时,是否需要去除源文件已有的目录结构.0:不需要;1:需要 - Format: 'zip', // 打包压缩的类型,有效值:zip、tar、tar.gz - // UrlList、Prefix、Key 三者仅能选择一个,不能都为空,也不会同时生效 - // UrlList: '', // 索引文件的对象地址 - Prefix: 'testCompress/', // 目录前缀 - // Key: [], // 支持对存储桶中的多个文件进行打包,个数不能超过 1000, 总大小不超过50G,否则会导致任务失败 - }, - Output: { - Bucket: config.Bucket, // 保存压缩后文件的存储桶 - Region: config.Region, // 保存压缩后文件的存储桶地域 - Object: 'testCompress/compressed.zip', // 压缩后文件的文件名 - }, - UserData: '', - }, - // QueueId: '', // 任务所在的队列 ID - // CallBack: 'http://callback.demo.com', // 任务回调的地址 - // CallBackFormat: 'JSON', // 任务回调格式 - // CallBackType: 'Url', // 任务回调类型,Url 或 TDMQ,默认 Url - }, - }); - cos.request( - { - Method: 'POST', - Key: 'file_jobs', - Url: url, - Body: body, - ContentType: 'application/xml', - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 查询文件压缩任务结果 -function getFileCompress() { - var jobId = 'faf1d2774a13911ed88a65b0c303ae7xx'; // 提交文件压缩任务后会返回当前任务的jobId - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/file_jobs/' + jobId; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Key: 'file_jobs/' + jobId, - Url: url, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 提交文件解压任务 -function postFileUnCompress() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/file_jobs'; - var url = 'https://' + host; - var body = COS.util.json2xml({ - Request: { - Tag: 'FileUncompress', // 必须 - Input: { - Object: 'testCompress/compressed.zip', // 文件名,取值为文件在当前存储桶中的完整名称 - }, - Operation: { - FileUncompressConfig: { - Prefix: '', // 指定解压后输出文件的前缀,不填则默认保存在存储桶根路径 - PrefixReplaced: '0', // 指定解压后的文件路径是否需要替换前缀,默认0 - }, - Output: { - Bucket: config.Bucket, // 保存解压后文件的存储桶 - Region: config.Region, // 保存解压后文件的存储桶地域 - }, - }, - // QueueId: '', // 任务所在的队列 ID - // CallBack: 'http://callback.demo.com', // 任务回调的地址 - // CallBackFormat: 'JSON', // 任务回调格式 - // CallBackType: 'Url', // 任务回调类型,Url 或 TDMQ,默认 Url - }, - }); - cos.request( - { - Method: 'POST', - Key: 'file_jobs', - Url: url, - Body: body, - ContentType: 'application/xml', - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 查询文件解压任务结果 -function getFileUnCompress() { - var jobId = 'fe7b0fa34a13911eda186254bb8f3aaxx'; // 提交文件解压任务后会返回当前任务的jobId - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/file_jobs/' + jobId; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Key: 'file_jobs/' + jobId, - Url: url, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 提交哈希值计算任务 -function postFileHash() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/file_jobs'; - var url = 'https://' + host; - var body = COS.util.json2xml({ - Request: { - Tag: 'FileHashCode', // 必须 - Input: { - Object: 'test/1.pdf', // 文件名,取值为文件在当前存储桶中的完整名称 - }, - Operation: { - FileHashCodeConfig: { - Type: 'MD5', // 哈希值的算法类型,有效值:MD5、SHA1、SHA256 - AddToHeader: 'false', // 是否将计算得到的哈希值添加至文件自定义header, 有效值:true、false,默认值为 false。 - }, - // UserData: '', // 透传用户信息, 可打印的 ASCII 码, 长度不超过1024 - }, - // QueueId: '', // 任务所在的队列 ID - // CallBack: 'http://callback.demo.com', // 任务回调的地址 - // CallBackFormat: 'JSON', // 任务回调格式 - // CallBackType: 'Url', // 任务回调类型,Url 或 TDMQ,默认 Url - }, - }); - cos.request( - { - Method: 'POST', - Key: 'file_jobs', - Url: url, - Body: body, - ContentType: 'application/xml', - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 查询哈希值计算任务结果 -function getFileHashResult() { - var jobId = 'f3addcbd0a13811ed9b4ff5338d756fxx'; // 提交文件哈希值计算任务后会返回当前任务的jobId - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/file_jobs/' + jobId; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Key: 'file_jobs/' + jobId, - Url: url, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 提交病毒检测任务 -function postVirusDetect() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/virus/detect'; - var url = 'https://' + host; - var body = COS.util.json2xml({ - Request: { - Input: { - Object: 'test/1.png', // 文件名,取值为文件在当前存储桶中的完整名称,与Url参数二选一 - // Url: 'http://examplebucket-1250000000.cos.ap-shanghai.myqcloud.com/virus.doc', // 病毒文件的链接地址,与Object参数二选一 - }, - Conf: { - DetectType: 'Virus', // 检测的病毒类型,当前固定为:Virus - // CallBack: 'http://callback.demo.com', // 任务回调的地址 - }, - }, - }); - cos.request( - { - Method: 'POST', - Key: 'virus/detect', - Url: url, - Body: body, - ContentType: 'application/xml', - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 查询病毒检测任务结果 -function getVirusDetectResult() { - var jobId = 'ssdb2dab23bcdb11ed9efb5254009411xx'; // 提交病毒检测任务后会返回当前任务的jobId - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/virus/detect/' + jobId; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Key: 'virus/detect/' + jobId, - Url: url, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 提交音频降噪任务 -function postNoiseReduction() { - const key = 'jobs'; // 固定值 - const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - const body = COS.util.json2xml({ - Request: { - Tag: 'NoiseReduction', - Input: { - Object: 'ci/music.mp3', // 文件名,取值为文件在当前存储桶中的完整名称 - }, - Operation: { - Output: { - Bucket: config.Bucket, // 输出的存储桶 - Region: config.Region, // 输出的存储桶的地域 - Object: 'ci/out.mp3', // 输出的文件Key - }, - }, - // QueueId: '', // 任务所在的队列 ID,非必须 - // CallBackFormat: '', // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式,非必须 - // CallBackType: '', // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型,非必须 - // CallBack: '', // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调,非必须 - // CallBackMqConfig: '', // 任务回调 TDMQ 配置,当 CallBackType 为 TDMQ 时必填,非必须 - }, - }); - cos.request( - { - Method: 'POST', - Key: 'jobs', - Url: url, - Body: body, - ContentType: 'application/xml', - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - }, - ); -} - -// 提交人声分离任务 -function postVoiceSeparate() { - const key = 'jobs'; // 固定值 - const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - var body = COS.util.json2xml({ - Request: { - Tag: 'VoiceSeparate', - Input: { - Object: 'ci/music.mp3', // 文件名,取值为文件在当前存储桶中的完整名称 - }, - Operation: { - // VoiceSeparate: {}, // 指定转码模板参数,非必须 - TemplateId: 't17844a8302372436187b425271a0ae33a', // 指定的模板 ID,必须 - // JobLevel: 0, // 任务优先级,级别限制:0 、1 、2。级别越大任务优先级越高,默认为0,非必须 - Output: { - Bucket: config.Bucket, // 输出的存储桶 - Region: config.Region, // 输出的存储桶的地域 - Object: 'ci/out/background.mp3', // 输出的文件Key,背景音结果文件名,不能与 AuObject 同时为空 - AuObject: 'ci/out/audio.mp3', - }, - }, - // QueueId: '', // 任务所在的队列 ID,非必须 - // CallBackFormat: '', // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式,非必须 - // CallBackType: '', // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型,非必须 - // CallBack: '', // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调,非必须 - // CallBackMqConfig: '', // 任务回调 TDMQ 配置,当 CallBackType 为 TDMQ 时必填,非必须 - }, - }); - cos.request( - { - Method: 'POST', - Key: 'jobs', - Url: url, - Body: body, - ContentType: 'application/xml', - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - }, - ); -} - -// 创建人声分离模板 -function postVoiceSeparateTemplete() { - const key = 'template'; // 固定 - const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - const body = COS.util.json2xml({ - Request: { - // 模板类型: VoiceSeparate;是否必传:是 - Tag: 'VoiceSeparate', - // 模板名称,仅支持中文、英文、数字、_、-和*,长度不超过 64;是否必传:是 - Name: 'my_voiceSeparate', - // 输出音频IsAudio:输出人声IsBackground:输出背景声AudioAndBackground:输出人声和背景声MusicMode:输出人声、背景声、Bass声、鼓声;是否必传:是 - AudioMode: 'IsAudio', - // 音频配置;是否必传:是 - AudioConfig: { - // 编解码格式,取值 aac、mp3、flac、amr。当 Request.AudioMode 为 MusicMode 时,仅支持 mp3、wav、acc;是否必传:否 - Codec: 'mp3', - // 采样率单位:Hz可选 8000、11025、22050、32000、44100、48000、96000当 Codec 设置为 aac/flac 时,不支持 8000当 Codec 设置为 mp3 时,不支持 8000 和 96000当 Codec 设置为 amr 时,只支持 8000当 Request.AudioMode 为 MusicMode 时,该参数无效;是否必传:否 - // Samplerate: '', - // 音频码率单位:Kbps值范围:[8,1000]当 Request.AudioMode 为 MusicMode 时,该参数无效;是否必传:否 - // Bitrate: '', - // 声道数当 Codec 设置为 aac/flac,支持1、2、4、5、6、8当 Codec 设置为 mp3,支持1、2 当 Codec 设置为 amr,只支持1当 Request.AudioMode 为 MusicMode 时,该参数无效;是否必传:否 - // Channels: '', - }, - } - }); - - cos.request( - { - Method: 'POST', // 固定值,必须 - Key: key, // 必须 - Url: url, // 请求的url,必须 - Body: body, // 请求体参数,必须 - ContentType: 'application/xml', // 固定值,必须 - - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - }, - ); -} - -// 更新人声分离模板 -function updateVoiceSeparateTemplete() { - const templateId = 't18e592c70a4724b46bdcde4b711c6c0d5'; // 要更新的模版id - const key = `template/${templateId}`; // 固定值 - const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - const body = COS.util.json2xml({ - Request: { - // 模板类型: VoiceSeparate;是否必传:是 - Tag: 'VoiceSeparate', - // 模板名称,仅支持中文、英文、数字、_、-和*,长度不超过 64;是否必传:是 - Name: 'my_voiceSeparate2', - // 输出音频IsAudio:输出人声IsBackground:输出背景声AudioAndBackground:输出人声和背景声MusicMode:输出人声、背景声、Bass声、鼓声;是否必传:是 - AudioMode: 'IsAudio', - // 音频配置;是否必传:是 - AudioConfig: { - // 编解码格式,取值 aac、mp3、flac、amr。当 Request.AudioMode 为 MusicMode 时,仅支持 mp3、wav、acc;是否必传:否 - Codec: 'mp3', - // 采样率单位:Hz可选 8000、11025、22050、32000、44100、48000、96000当 Codec 设置为 aac/flac 时,不支持 8000当 Codec 设置为 mp3 时,不支持 8000 和 96000当 Codec 设置为 amr 时,只支持 8000当 Request.AudioMode 为 MusicMode 时,该参数无效;是否必传:否 - // Samplerate: '', - // 音频码率单位:Kbps值范围:[8,1000]当 Request.AudioMode 为 MusicMode 时,该参数无效;是否必传:否 - // Bitrate: '', - // 声道数当 Codec 设置为 aac/flac,支持1、2、4、5、6、8当 Codec 设置为 mp3,支持1、2 当 Codec 设置为 amr,只支持1当 Request.AudioMode 为 MusicMode 时,该参数无效;是否必传:否 - // Channels: '', - }, - } - }); - - cos.request( - { - Method: 'PUT', // 固定值,必须 - Key: key, // 必须 - Url: url, // 请求的url,必须 - Body: body, // 请求体参数,必须 - ContentType: 'application/xml', // 固定值,必须 - - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - }, - ); -} - -// 提交一个语音合成任务 -function postVoiceSynthesis() { - const key = 'jobs'; // 固定值 - const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - const body = COS.util.json2xml({ - Request: { - // 创建任务的 Tag:Tts;是否必传:是 - Tag: 'Tts', - // 操作规则;是否必传:是 - Operation: { - // 语音合成模板 ID; 与TtsTpl二选一传递 - TemplateId: 't1958211407ca54ebc8c78060a7f2ba564', - // 语音合成参数; 与TemplateId二选一传递 - // TtsTpl: { - // // 同创建语音合成模板接口中的 Request.Mode;是否必传:否 - // Mode: '', - // // 同创建语音合成模板接口中的 Request.Codec;是否必传:否 - // Codec: '', - // // 同创建语音合成模板接口中的 Request.VoiceType;是否必传:否 - // VoiceType: '', - // // 同创建语音合成模板接口中的 Request.Volume;是否必传:否 - // Volume: '', - // // 同创建语音合成模板接口中的 Request.Speed;是否必传:否 - // Speed: '', - // // 同创建语音合成模板接口中的 Request.Emotion;是否必传:否 - // Emotion: '', - // }, - // 语音合成任务参数;是否必传:是 - TtsConfig: { - // 输入类型,Url/Text;是否必传:是 - InputType: 'Text', - // 当 InputType 为 Url 时, 必须是合法的 COS 地址,文件必须是utf-8编码,且大小不超过 10M。如果合成方式为同步处理,则文件内容不超过 300 个 utf-8 字符;如果合成方式为异步处理,则文件内容不超过 10000 个 utf-8 字符。当 InputType 为 Text 时, 输入必须是 utf-8 字符, 且不超过 300 个字符。;是否必传:是 - Input: '床前明月光,疑是地上霜', - }, - // 结果输出配置;是否必传:是 - Output: { - // 存储桶的地域;是否必传:是 - Region: config.Region, - // 存储结果的存储桶;是否必传:是 - Bucket: config.Bucket, - // 结果文件名;是否必传:是 - Object: 'ci/tts.mp3', - }, - // 透传用户信息,可打印的 ASCII 码,长度不超过1024;是否必传:否 - // UserData: '', - // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0;是否必传:否 - // JobLevel: '', - }, - // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 - // CallBackFormat: '', - // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 - // CallBackType: '', - // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 - // CallBack: '', - // 任务回调TDMQ配置,当 CallBackType 为 TDMQ 时必填。详情见 CallBackMqConfig;是否必传:否 - // CallBackMqConfig: { - // 消息队列所属园区,目前支持园区 sh(上海)、bj(北京)、gz(广州)、cd(成都)、hk(中国香港);是否必传:是 - // MqRegion: '', - // 消息队列使用模式,默认 Queue :主题订阅:Topic队列服务: Queue;是否必传:是 - // MqMode: '', - // TDMQ 主题名称;是否必传:是 - // MqName: '', - // }, - }, - }); - - cos.request( - { - Method: 'POST', // 固定值,必须 - Key: key, // 必须 - Url: url, // 请求的url,必须 - Body: body, // 请求体参数,必须 - ContentType: 'application/xml', // 固定值,必须 - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - } - ); -} - -// 创建语音合成模板 -function postVoiceSynthesisTemplete() { - const key = 'template'; // 固定值 - const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - const body = COS.util.json2xml({ - Request: { - // 模板类型:Tts;是否必传:是 - Tag: 'Tts', - // 模板名称,仅支持中文、英文、数字、_、-和*,长度不超过 64;是否必传:是 - Name: 'my_tts', - // 处理模式Asyc(异步合成)Sync(同步合成);是否必传:否 - // Mode: 'Asyc', - // 音频格式,支持 wav、mp3、pcm ;是否必传:否 - // Codec: 'pcm', - // 音色,取值和限制介绍请见下表;是否必传:否 - // VoiceType: 'ruxue', - // 音量,取值范围 [-10,10];是否必传:否 - // Volume: '0', - // 语速,取值范围 [50,200];是否必传:否 - // Speed: '100', - // 情绪,不同音色支持的情绪不同,详见下表;是否必传:否 - // Emotion: '', - }, - }); - - cos.request( - { - Method: 'POST', // 固定值,必须 - Key: key, // 必须 - Url: url, // 请求的url,必须 - Body: body, // 请求体参数,必须 - ContentType: 'application/xml', // 固定值,必须 - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - } - ); -} - -// 更新语音合成模板 -function updateVoiceSynthesisTemplete() { - const templateId = 'xxxx'; // 要更新的模板id - const key = `template/${templateId}`; // 固定格式 - const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - const body = COS.util.json2xml({ - Request: { - // 模板类型:Tts;是否必传:是 - Tag: 'Tts', - // 模板名称,仅支持中文、英文、数字、_、-和*,长度不超过 64;是否必传:是 - Name: 'my_tts2', - // 处理模式Asyc(异步合成)Sync(同步合成);是否必传:否 - Mode: 'Asyc', - // 音频格式,支持 wav、mp3、pcm ;是否必传:否 - Codec: 'pcm', - // 音色,取值和限制介绍请见下表;是否必传:否 - VoiceType: 'ruxue', - // 音量,取值范围 [-10,10];是否必传:否 - Volume: '0', - // 语速,取值范围 [50,200];是否必传:否 - Speed: '100', - // 情绪,不同音色支持的情绪不同,详见下表;是否必传:否 - Emotion: '无', - }, - }); - - cos.request( - { - Method: 'PUT', // 固定值,必须 - Key: key, // 必须 - Url: url, // 请求的url,必须 - Body: body, // 请求体参数,必须 - ContentType: 'application/xml', // 固定值,必须 - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - } - ); -} - -// 提交语音识别任务 -function postSpeechRecognition() { - const key = 'jobs'; // 固定值 - const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - var body = COS.util.json2xml({ - Request: { - Tag: 'SpeechRecognition', - Input: { - Object: 'ci/music.mp3', // 文件名,取值为文件在当前存储桶中的完整名称,与Url参数二选一 - // Url: 'http://examplebucket-1250000000.cos.ap-shanghai.myqcloud.com/music.mp3', // 病毒文件的链接地址,与Object参数二选一 - }, - Operation: { - SpeechRecognition: { - EngineModelType: '16k_zh_video', // 引擎模型类型 - ChannelNum: 1, // 语音声道数 - ResTextFormat: 0, // 识别结果返回形式 - FilterDirty: 1, // 是否过滤脏词(目前支持中文普通话引擎) - FilterModal: 1, // 是否过语气词(目前支持中文普通话引擎) - ConvertNumMode: 0, // 是否进行阿拉伯数字智能转换(目前支持中文普通话引擎) - }, - Output: { - Bucket: config.Bucket, // 输出的存储桶 - Region: config.Region, // 输出的存储桶的地域 - Object: 'ci/out/SpeechRecognition.mp3', // 输出的文件Key - }, - }, - // QueueId: '', // 任务所在的队列 ID,非必须 - // CallBackFormat: '', // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式,非必须 - // CallBackType: '', // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型,非必须 - // CallBack: '', // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调,非必须 - // CallBackMqConfig: '', // 任务回调 TDMQ 配置,当 CallBackType 为 TDMQ 时必填,非必须 - }, - }); - cos.request( - { - Method: 'POST', - Key: key, - Url: url, - Body: body, - ContentType: 'application/xml', - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - }, - ); -} - -// 创建语音识别模板 -function postSpeechRecognitionTemplete() { - const key = 'template'; // 固定值 - const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - const body = COS.util.json2xml({ - Request: { - // 模板类型:SpeechRecognition;是否必传:是 - Tag: 'SpeechRecognition', - // 模板名称,仅支持中文、英文、数字、_、-和*,长度不超过 64;是否必传:是 - Name: 'my_speechRecognition', - // 语音识别参数;是否必传:是 - SpeechRecognition: { - // 开启极速ASR,取值 true/false;是否必传:否 - FlashAsr: 'false', - // 引擎模型类型,分为电话场景和非电话场景。电话场景:8k_zh:电话 8k 中文普通话通用(可用于双声道音频)8k_zh_s:电话 8k 中文普通话话者分离(仅适用于单声道音频)8k_en:电话 8k 英语 非电话场景: 6k_zh:16k 中文普通话通用16k_zh_video:16k 音视频领域16k_en:16k 英语16k_ca:16k 粤语16k_ja:16k 日语16k_zh_edu:中文教育16k_en_edu:英文教育16k_zh_medical:医疗16k_th:泰语16k_zh_dialect:多方言,支持23种方言极速 ASR 支持8k_zh、16k_zh、16k_en、16k_zh_video、16k_zh_dialect、16k_ms(马来语)、16k_zh-PY(中英粤);是否必传:是 - EngineModelType: '16k_zh', - // 语音声道数:1 表示单声道。EngineModelType为非电话场景仅支持单声道2 表示双声道(仅支持 8k_zh 引擎模型 双声道应分别对应通话双方)仅���持非极速ASR,为非极速ASR时,该参数必填;是否必传:否 - ChannelNum: '1', - // 识别结果返回形式:0:识别结果文本(含分段时间戳)1:词级别粒度的详细识别结果,不含标点,含语速值(词时间戳列表,一般用于生成字幕场景)2:词级别粒度的详细识别结果(包含标点、语速值)3:标点符号分段,包含每段时间戳,特别适用于字幕场景(包含词级时间、标点、语速值)仅支持非极速ASR;是否必传:否 - // ResTextFormat: '0', - // 是否过滤脏词(目前支持中文普通话引擎)0:不过滤脏词1:过滤脏词2:将脏词替换为 *;是否必传:否 - // FilterDirty: '0', - // 是否过滤语气词(目前支持中文普通话引擎):0 表示不过滤语气词1 表示部分过滤2 表示严格过滤 ;是否必传:否 - // FilterModal: '0', - // 是否进行阿拉伯数字智能转换(目前支持中文普通话引擎)0:不转换,直接输出中文数字1:根据场景智能转换为阿拉伯数字3 :打开数学相关数字转换仅支持非极速ASR;是否必传:否 - // ConvertNumMode: '0', - // 是否开启说话人分离0:不开启1:开启(仅支持8k_zh,16k_zh,16k_zh_video,单声道音频)8k电话场景建议使用双声道来区分通话双方,设置ChannelNum=2即可,不用开启说话人分离。;是否必传:否 - // SpeakerDiarization: '0', - // 说话人分离人数(需配合开启说话人分离使用),取值范围:[0, 10]0 代表自动分离(目前仅支持≤6个人)1-10代表指定说话人数分离仅支持非极速ASR;是否必传:否 - // SpeakerNumber: '', - // 是否过滤标点符号(目前支持中文普通话引擎)0:不过滤。1:过滤句末标点2:过滤所有标点;是否必传:否 - // FilterPunc: '', - // 输出文件类型,可选txt、srt极速ASR仅支持txt非极速Asr且ResTextFormat为3时仅支持txt;是否必传:否 - // OutputFileType: '', - // 极速ASR音频格式,支持 wav、pcm、ogg-opus、speex、silk、mp3、m4a、aac极速ASR时,该参数必填;是否必传:否 - // Format: '', - // 是否识别首个声道0:识别所有声道1:识别首个声道仅支持极速ASR;是否必传:否 - // FirstChannelOnly: '', - // 是否显示词级别时间戳0:不显示1:显示,不包含标点时间戳2:显示,包含标点时间戳仅支持极速ASR;是否必传:否 - // WordInfo: '', - // 单标点最多字数,取值范围:[6,40]默认值为 0 表示不开启该功能该参数可用于字幕生成场景,控制单行字幕最大字数当FlashAsr为false时,仅ResTextFormat为3时参数有效;是否必传:否 - // SentenceMaxLength: '', - }, - }, - }); - - cos.request( - { - Method: 'POST', // 固定值,必须 - Key: key, // 必须 - Url: url, // 请求的url,必须 - Body: body, // 请求体参数,必须 - ContentType: 'application/xml', // 固定值,必须 - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - } - ); -} - -// 更新语音识别模板 -function updateSpeechRecognitionTemplete() { - const templateId = 'xxxxx'; // 要更新的模板id - const key = `template/${templateId}`; // 固定值 - const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - const body = COS.util.json2xml({ - Request: { - // 模板类型:SpeechRecognition;是否必传:是 - Tag: 'SpeechRecognition', - // 模板名称,仅支持中文、英文、数字、_、-和*,长度不超过 64;是否必传:是 - Name: 'my_speechRecognition', - // 语音识别参数;是否必传:是 - SpeechRecognition: { - // 开启极速ASR,取值 true/false;是否必传:否 - FlashAsr: 'true', - // 引擎模型类型,分为电话场景和非电话场景。电话场景:8k_zh:电话 8k 中文普通话通用(可用于双声道音频)8k_zh_s:电话 8k 中文普通话话者分离(仅适用于单声道音频)8k_en:电话 8k 英语 非电话场景: 6k_zh:16k 中文普通话通用16k_zh_video:16k 音视频领域16k_en:16k 英语16k_ca:16k 粤语16k_ja:16k 日语16k_zh_edu:中文教育16k_en_edu:英文教育16k_zh_medical:医疗16k_th:泰语16k_zh_dialect:多方言,支持23种方言极速 ASR 支持8k_zh、16k_zh、16k_en、16k_zh_video、16k_zh_dialect、16k_ms(马来语)、16k_zh-PY(中英粤);是否必传:是 - EngineModelType: '16k_zh', - // 语音声道数:1 表示单声道。EngineModelType为非电话场景仅支持单声道2 表示双声道(仅支持 8k_zh 引擎模型 双声道应分别对应通话双方)仅���持非极速ASR,为非极速ASR时,该参数必填;是否必传:否 - ChannelNum: '2', - // 识别结果返回形式:0:识别结果文本(含分段时间戳)1:词级别粒度的详细识别结果,不含标点,含语速值(词时间戳列表,一般用于生成字幕场景)2:词级别粒度的详细识别结果(包含标点、语速值)3:标点符号分段,包含每段时间戳,特别适用于字幕场景(包含词级时间、标点、语速值)仅支持非极速ASR;是否必传:否 - // ResTextFormat: '', - // 是否过滤脏词(目前支持中文普通话引擎)0:不过滤脏词1:过滤脏词2:将脏词替换为 *;是否必传:否 - // FilterDirty: '', - // 是否过滤语气词(目前支持中文普通话引擎):0 表示不过滤语气词1 表示部分过滤2 表示严格过滤 ;是否必传:否 - // FilterModal: '', - // 是否进行阿拉伯数字智能转换(目前支持中文普通话引擎)0:不转换,直接输出中文数字1:根据场景智能转换为阿拉伯数字3 :打开数学相关数字转换仅支持非极速ASR;是否必传:否 - // ConvertNumMode: '', - // 是否开启说话人分离0:不开启1:开启(仅支持8k_zh,16k_zh,16k_zh_video,单声道音频)8k电话场景建议使用双声道来区分通话双方,设置ChannelNum=2即可,不用开启说话人分离。;是否必传:否 - // SpeakerDiarization: '', - // 说话人分离人数(需配合开启说话人分离使用),取值范围:[0, 10]0 代表自动分离(目前仅支持≤6个人)1-10代表指定说话人数分离仅支持非极速ASR;是否必传:否 - // SpeakerNumber: '', - // 是否过滤标点符号(目前支持中文普通话引擎)0:不过滤。1:过滤句末标点2:过滤所有标点;是否必传:否 - // FilterPunc: '', - // 输出文件类型,可选txt、srt极速ASR仅支持txt非极速Asr且ResTextFormat为3时仅支持txt;是否必传:否 - // OutputFileType: '', - // 极速ASR音频格式,支持 wav、pcm、ogg-opus、speex、silk、mp3、m4a、aac极速ASR时,该参数必填;是否必传:否 - // Format: '', - // 是否识别首个声道0:识别所有声道1:识别首个声道仅支持极速ASR;是否必传:否 - // FirstChannelOnly: '', - // 是否显示词级别时间戳0:不显示1:显示,不包含标点时间戳2:显示,包含标点时间戳仅支持极速ASR;是否必传:否 - // WordInfo: '', - // 单标点最多字数,取值范围:[6,40]默认值为 0 表示不开启该功能该参数可用于字幕生成场景,控制单行字幕最大字数当FlashAsr为false时,仅ResTextFormat为3时参数有效;是否必传:否 - // SentenceMaxLength: '', - }, - }, - }); - - cos.request( - { - Method: 'PUT', // 固定值,必须 - Key: key, // 必须 - Url: url, // 请求的url,必须 - Body: body, // 请求体参数,必须 - ContentType: 'application/xml', // 固定值,必须 - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - } - ); -} - -// 查询语音识别队列 -function getAsrQueue() { - const key = 'asrqueue'; // 固定值 - const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - - cos.request( - { - Method: 'GET', // 固定值,必须 - Key: key, // 必须 - Url: url, // 请求的url,必须 - Query: { - // 队列 ID,以“,”符号分割字符串;是否必传:否 - // queueIds: '', - // Active 表示队列内的作业会被调度执行Paused 表示队列暂停,作业不再会被调度执行,队列内的所有作业状态维持在暂停状态,已经执行中的任务不受影响;是否必传:否 - // state: '', - // 第几页,默认值1;是否必传:否 - // pageNumber: '', - // 每页个数,默认值10;是否必传:否 - // pageSize: '', - }, - - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - }, - ); -} - -// 更新语音识别队列 -function updateAsrQueue() { - // 任务所在的队列 ID,请使用查询队列(https://cloud.tencent.com/document/product/460/46946)获取或前往万象控制台(https://cloud.tencent.com/document/product/460/46487)在存储桶中查询 - var queueId = 'pcc77499e85c311edb9865254008618d9'; - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/asrqueue/' + queueId; - var url = 'https://' + host; - var body = COS.util.json2xml({ - Request: { - Name: 'queue-doc-process-1', - QueueID: queueId, - State: 'Paused', - NotifyConfig: { - // Url: '', - // Type: 'Url', - // Event: '', - State: 'Off', - }, - }, - }); - cos.request( - { - Method: 'PUT', - Key: 'asrqueue/' + queueId, - Url: url, - Body: body, - ContentType: 'application/xml', - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - }, - ); -} - -// 查询语音识别开通状态 -function getAsrBucket() { - const key = 'asrbucket'; // 固定值 - const host = `ci.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - - cos.request( - { - Method: 'GET', // 固定值,必须 - Key: key, // 必须 - Url: url, // 请求的url,必须 - Query: { - // 地域信息,例如 ap-shanghai、ap-beijing,若查询多个地域以“,”分隔字符串,详情请参见 地域与域名;是否必传:是 - // regions: "", - // 存储桶名称,以“,”分隔,支持多个存储桶,精确搜索;是否必传:是 - // bucketNames: "", - // 存储桶名称前缀,前缀搜索;是否必传:是 - // bucketName: "", - // 第几页;是否必传:是 - // pageNumber: 1, - // 每页个数,大于0且小于等于100的整数;是否必传:是 - // pageSize: 10, - }, - - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - }, - ); -} - -// 开通智能语音 -function openAsrBucket() { - const key = 'asrbucket'; // 固定值 - const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - - cos.request( - { - Method: 'POST', // 固定值,必须 - Key: key, // 必须 - Url: url, // 请求的url,必须 - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - } - ); -} - -// 关闭智能语音 -function closeAsrBucket() { - const key = 'asrbucket'; // 固定值 - const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - cos.request( - { - Method: 'DELETE', // 固定值,必须 - Key: key, // 必须 - Url: url, // 请求的url,必须 - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - } - ); -} - -// 创建音频降噪模版 -function postNoiseReductionTemplete() { - const key = 'template'; // 固定值 - const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - const body = COS.util.json2xml({ - Request: { - // 固定值:NoiseReduction;是否必传:是 - Tag: 'NoiseReduction', - // 模板名称,仅支持中文、英文、数字、_、-和*,长度不超过 64。;是否必传:是 - Name: 'my_noiseReduction', - // 降噪参数;是否必传:是 - NoiseReduction: { - // 封装格式,支持 mp3、m4a、wav;是否必传:否 - Format: 'mp3', - // 采样率单位:Hz可选 8000、12000、16000、24000、32000、44100、48000;是否必传:否 - // Samplerate: '', - }, - }, - }); - - cos.request( - { - Method: 'POST', // 固定值,必须 - Key: key, // 必须 - Url: url, // 请求的url,必须 - Body: body, // 请求体参数,必须 - ContentType: 'application/xml', // 固定值,必须 - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - } - ); -} - -// 更新音频降噪模板 -function updateNoiseReductionTemplete() { - const templateId = 'xxxxx'; // 要更新的模板id - const key = `template/${templateId}`; // 固定值 - const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - const body = COS.util.json2xml({ - Request: { - // 固定值:NoiseReduction;是否必传:是 - Tag: 'NoiseReduction', - // 模板名称,仅支持中文、英文、数字、_、-和*,长度不超过 64。;是否必传:是 - Name: 'my_noiseReduction2', - // 降噪参数;是否必传:是 - NoiseReduction: { - // 封装格式,支持 mp3、m4a、wav;是否必传:否 - Format: 'mp3', - // 采样率单位:Hz可选 8000、12000、16000、24000、32000、44100、48000;是否必传:否 - // Samplerate: '', - }, - }, - }); - - cos.request( - { - Method: 'PUT', // 固定值,必须 - Key: key, // 必须 - Url: url, // 请求的url,必须 - Body: body, // 请求体参数,必须 - ContentType: 'application/xml', // 固定值,必须 - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - } - ); -} - -// 提交听歌识曲任务 -function postSoundHound() { - const key = 'jobs'; // 固定值 - const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - const body = COS.util.json2xml({ - Request: { - // 创建任务的 Tag:SoundHound;是否必传:是 - Tag: 'SoundHound', - // 待操作的对象信息;是否必传:是 - Input: { - // 文件路径;是否必传:是 - Object: 'ci/music.mp3', - }, - // 操作规则;是否必传:是 - // Operation: { - // 透���用户信息,可打印的 ASCII 码,长度不超过1024;是否必传:否 - // UserData: '', - // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0;是否必传:否 - // JobLevel: '', - // }, - // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 - // CallBackFormat: '', - // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 - // CallBackType: '', - // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 - // CallBack: '', - // 任务回调TDMQ配置,当 CallBackType 为 TDMQ 时必填。详情见 CallBackMqConfig;是否必传:否 - // CallBackMqConfig: { - // 消息队列所属园区,目前支持园区 sh(上海)、bj(北京)、gz(广州)、cd(成都)、hk(中国香港);是否必传:是 - // MqRegion: '', - // 消息队列使用模式,默认 Queue :主题订阅:Topic队列服务: Queue;是否必传:是 - // MqMode: '', - // TDMQ 主题名称;是否必传:是 - // MqName: '', - // }, - }, - }); - - cos.request( - { - Method: 'POST', // 固定值,必须 - Key: key, // 必须 - Url: url, // 请求的url,必须 - Body: body, // 请求体参数,必须 - ContentType: 'application/xml', // 固定值,必须 - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - } - ); -} - - -// 获取在线文档预览地址 -function getDocHtmlPreviewUrl() { - var key = 'test.pdf'; - var host = config.Bucket + '.cos.' + config.Region + '.myqcloud.com/' + key; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Key: key, - Url: url, - RawBody: true, - Query: { - 'ci-process': 'doc-preview', // 必须,预览固定参数,值为 doc-preview - dstType: 'html', // 必须,预览类型,如需预览生成类型为 html 则填入 html - weboffice_url: 1, // 非必须,是否获取预览链接。填入值为1会返回预览链接和Token信息;填入值为2只返回Token信息;不传会直接预览 - }, - }, - function (err, data) { - // 从响应数据中解析出在线文档预览地址 - let body = {}; - if (data && data.Body) { - body = JSON.parse(data.Body) || {}; - } - if (body && body.PreviewUrl) { - data.PreviewUrl = body.PreviewUrl; - } - logger.log(err || data); - }, - ); -} - -// 开通文件处理服务 -function createFileProcessBucket() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/file_bucket'; - var url = 'https://' + host; - cos.request( - { - Method: 'POST', - Key: 'file_bucket', - Url: url, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 查询文件处理队列 -function describeFileProcessQueues() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/file_queue'; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Key: 'file_queue', - Url: url, - Query: { - // queueIds: '', // 非必须,队列 ID,以“,”符号分割字符串 - state: 'Active', // 非必须,Active 表示队列内的作业会被调度执行。Paused 表示队列暂停,作业不再会被调度执行,队列内的所有作业状态维持在暂停状态,已经执行中的任务不受影响 - pageNumber: 1, // 第几页,默认值1 - pageSize: 10, // 非必须,每页个数,默认值10 - }, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 更新文件处理队列 -function updateFileProcessQueue() { - // 任务所在的队列 ID,请使用查询队列(https://cloud.tencent.com/document/product/460/46946)获取或前往万象控制台(https://cloud.tencent.com/document/product/460/46487)在存储桶中查询 - var queueId = 'p6160ada105a7408e95aac015f4bf8xxx'; - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/file_queue/' + queueId; - var url = 'https://' + host; - var body = COS.util.json2xml({ - Request: { - Name: 'My-Queue-file', // 必须,队列名称,长度不超过128 - State: 'Active', // 必须,Active 表示队列内的作业会被调度执行。Paused 表示队列暂停,作业不再会被调度执行,队列内的所有作业状态维持在暂停状态,已经执行中的任务不受影响。 - NotifyConfig: { - // 必须,回调配置 - State: 'On', // 必须,回调开关,Off/On,默认Off - Event: 'TaskFinish', // 回调事件,当 State=On时, 必选。任务完成:TaskFinish;工作流完成:WorkflowFinish - ResultFormat: 'XML', // 非必选,回调格式,JSON/XML - Type: 'Url', // 回调类型,当 State=On时, 必选,Url 或 TDMQ - Url: 'https://www.example.com', // 回调地址,当 State=On, 且Type=Url时, 必选 - // MqMode: 'Off', // TDMQ 使用模式,当 State=On, 且Type=TDMQ时, 必选 - // MqRegion: 'Off', // TDMQ 所属园区,当 State=On, 且Type=TDMQ时, 必选 - // MqName: 'Off', // TDMQ 主题名称,当 State=On, 且Type=TDMQ时, 必选 - }, - }, - }); - cos.request( - { - Method: 'POST', - Key: 'file_queue/' + queueId, - Url: url, - Body: body, - ContentType: 'application/xml', - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 哈希值计算同步请求 -function generateFileHash() { - var key = 'test.pdf'; - var host = config.Bucket + '.cos.' + config.Region + '.myqcloud.com/' + key; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Key: key, - Url: url, - Query: { - 'ci-process': 'filehash', // 必须,操作类型,哈希值计算固定为:filehash - type: 'md5', // 必须,支持的哈希算法类型,有效值:md5、sha1、sha256 - // 'addtoheader': false, // 非必须,是否将计算得到的哈希值,自动添加至文件的自定义header,格式为:x-cos-meta-md5/sha1/sha256;有效值:true、false,不填则默认为false。 - }, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 图片样式 - 增加样式 -function addImageStyle() { - var host = config.Bucket + '.pic.' + config.Region + '.myqcloud.com/?style'; - var url = 'https://' + host; - var body = COS.util.json2xml({ - AddStyle: { - StyleName: 'style_name1', // 必须,样式名称 - StyleBody: 'imageMogr2/thumbnail/!50px', // 必须,样式详情 - }, - }); - cos.request( - { - Method: 'PUT', - Url: url, - Body: body, - ContentType: 'application/xml', - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 图片样式 - 查询样式 -function describeImageStyles() { - var host = config.Bucket + '.pic.' + config.Region + '.myqcloud.com/?style'; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Url: url, - Query: { - 'style-name': 'style_name', // 非必填,样式名称 - }, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 图片样式 - 删除样式 -function deleteImageStyle() { - var host = config.Bucket + '.pic.' + config.Region + '.myqcloud.com/?style'; - var url = 'https://' + host; - var body = COS.util.json2xml({ - DeleteStyle: { - StyleName: 'style_name1', // 必须,样式名称 - }, - }); - cos.request( - { - Method: 'DELETE', - Url: url, - Body: body, - ContentType: 'application/xml', - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 开通 Guetzli 压缩 -function openImageGuetzli() { - var host = config.Bucket + '.pic.' + config.Region + '.myqcloud.com/?guetzli'; - var url = 'https://' + host; - cos.request( - { - Method: 'PUT', - Url: url, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 查询 Guetzli 状态 -function describeImageGuetzli() { - var host = config.Bucket + '.pic.' + config.Region + '.myqcloud.com/?guetzli'; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Url: url, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 关闭 Guetzli 压缩 -function closeImageGuetzli() { - var host = config.Bucket + '.pic.' + config.Region + '.myqcloud.com/?guetzli'; - var url = 'https://' + host; - cos.request( - { - Method: 'DELETE', - Url: url, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 上传时使用图片处理 -function uploadPicOperation() { - util.selectLocalFile(function (files) { - var file = files && files[0]; - if (!file) return; - if (file.type.indexOf('image') < 0) { - logger.error('Please select a photo to upload!'); - return; - } - if (file.size > 1024 * 1024) { - cos.sliceUploadFile( - { - Bucket: config.Bucket, // Bucket 格式:test-1250000000 - Region: config.Region, - Key: file.name, - Body: file, - Headers: { - // 通过 imageMogr2 接口使用图片缩放功能:指定图片宽度为 200,宽度等比压缩 - 'Pic-Operations': JSON.stringify({ - is_pic_info: 1, - rules: [{ fileid: 'desample_photo.jpg', rule: 'imageMogr2/thumbnail/200x/' }], - }), - }, - onTaskReady: function (tid) { - TaskId = tid; - }, - onHashProgress: function (progressData) { - logger.log('onHashProgress', JSON.stringify(progressData)); - }, - onProgress: function (progressData) { - logger.log('onProgress', JSON.stringify(progressData)); - }, - }, - function (err, data) { - logger.log('uploadPicOperation:', err || data); - }, - ); - } else { - cos.putObject( - { - Bucket: config.Bucket, // Bucket 格式:test-1250000000 - Region: config.Region, - Key: file.name, - Body: file, - Headers: { - // 通过 imageMogr2 接口进行 avif 压缩,可以根据需要压缩的类型填入不同的压缩格式:webp/heif/tpg/avif/svgc - 'Pic-Operations': - '{"is_pic_info": 1, "rules": [{"fileid": "desample_photo.jpg", "rule": "imageMogr2/format/avif"}]}', - }, - onTaskReady: function (tid) { - TaskId = tid; - }, - onHashProgress: function (progressData) { - logger.log('onHashProgress', JSON.stringify(progressData)); - }, - onProgress: function (progressData) { - logger.log('onProgress', JSON.stringify(progressData)); - }, - }, - function (err, data) { - logger.log('uploadPicOperation:', err || data); - }, - ); - } - }); -} - -// 对云上数据处理 -function requestPicOperation() { - // 文字水印示例 - const text = '腾讯云万象优图'; - const color = '#3D3D3D'; - // 经过安全base64编码 使用 COS.util.encodeBase64 方法需要sdk版本至少为1.4.18 - const textBase64 = COS.util.encodeBase64(text, true); - const colorBase64 = COS.util.encodeBase64(color, true); - // 生成一个文字水印 - const waterMarkRule = `watermark/2/text/${textBase64}/fill/${colorBase64}/fontsize/20/dissolve/50/gravity/northeast/dx/20/dy/20/batch/1/degree/45`; - const picOperations = JSON.stringify({ - is_pic_info: 1, // 固定 - // fileid 设置和Key相同可实现只保留处理后的图片而不保留原图 - rules: [{ fileid: 'desample_photo.jpg', rule: waterMarkRule }], - }); - - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Key: '02.png', - Method: 'GET', - Action: 'exif', - RawBody: true, - // Headers: { - // // 通过 imageMogr2 接口使用图片缩放功能:指定图片宽度为 200,宽度等比压缩 - // 'Pic-Operations': picOperations, - // }, - }, - function (err, data) { - const info = JSON.parse(data.Body); - logger.log('requestPicOperation:', err || data); - }, - ); -} - -// 下载时使用图片压缩 -function advanceCompressExample3() { - cos.getObject( - { - Bucket: config.Bucket, - Region: config.Region, - Key: '1.png', - QueryString: `imageMogr2/format/avif`, // 可以根据需要压缩的类型填入不同的压缩格式:webp/heif/tpg/avif/svgc - }, - function (err, data) { - logger.log('advanceCompressExample3:', err || data); - }, - ); -} - -// 异常图片检测 -function createImageInspectJob() { - var key = '1.png'; - var host = config.Bucket + '.cos.' + config.Region + '.myqcloud.com/' + key; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Key: key, - Url: url, - RawBody: true, - Query: { - 'ci-process': 'ImageInspect', // 必须,操作类型,异常图片检测固定为:ImageInspect - }, - }, - function (err, data) { - // 从响应数据中解析出异常图片检测结果 - let body = {}; - if (data && data.Body) { - body = JSON.parse(data.Body) || {}; - if (body) { - data.body = body; - } - } - logger.log(err || data); - }, - ); -} - -// 查询图片处理队列 -function describePicProcessQueues() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/picqueue'; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Key: 'picqueue', - Url: url, - Query: { - // queueIds: '', // 非必须,队列 ID,以“,”符号分割字符串 - state: 'Active', // 非必须,1. Active 表示队列内的作业会被媒体处理服务调度执行。2. Paused 表示队列暂停,作业不再会被媒体处理调度执行,队列内的所有作业状态维持在暂停状态,已经执行中的任务不受影响。 - pageNumber: 1, // 非必须,第几页,默认值1 - pageSize: 10, // 非必须,每页个数,默认值10 - }, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 更新图片处理队列 -function updatePicProcessQueue() { - // 任务所在的队列 ID,请使用查询队列(https://cloud.tencent.com/document/product/460/46946)获取或前往万象控制台(https://cloud.tencent.com/document/product/460/46487)在存储桶中查询 - var queueId = 'p882d181160d84feca27d9376e17c4xxx'; - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/picqueue/' + queueId; - var url = 'https://' + host; - var body = COS.util.json2xml({ - Request: { - Name: 'My-Queue-Pic', // 必须,队列名称,长度不超过128 - State: 'Active', // 必须,Active 表示队列内的作业会被调度执行。Paused 表示队列暂停,作业不再会被调度执行,队列内的所有作业状态维持在暂停状态,已经执行中的任务不受影响。 - NotifyConfig: { - // 必须,回调配置 - State: 'On', // 必须,回调开关,Off/On,默认Off - Event: 'TaskFinish', // 回调事件,当 State=On时, 必选。任务完成:TaskFinish;工作流完成:WorkflowFinish - ResultFormat: 'XML', // 非必选,回调格式,JSON/XML - Type: 'Url', // 回调类型,当 State=On时, 必选,Url 或 TDMQ - Url: 'https://www.example.com', // 回调地址,当 State=On, 且Type=Url时, 必选 - // MqMode: 'Off', // TDMQ 使用模式,当 State=On, 且Type=TDMQ时, 必选 - // MqRegion: 'Off', // TDMQ 所属园区,当 State=On, 且Type=TDMQ时, 必选 - // MqName: 'Off', // TDMQ 主题名称,当 State=On, 且Type=TDMQ时, 必选 - }, - }, - }); - cos.request( - { - Method: 'POST', - Key: 'picqueue/' + queueId, - Url: url, - Body: body, - ContentType: 'application/xml', - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 查询防盗链 -function describeRefer() { - var host = config.Bucket + '.pic.' + config.Region + '.myqcloud.com/?hotlink'; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Url: url, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 设置防盗链 -function setRefer() { - var host = config.Bucket + '.pic.' + config.Region + '.myqcloud.com/?hotlink'; - var url = 'https://' + host; - var body = COS.util.json2xml({ - Hotlink: { - Url: 'https://www.example.com', // 必须,域名地址 - Type: 'white', // 必须,防盗链类型,white 为白名单,black 为黑名单,off 为关闭。 - }, - }); - cos.request( - { - Method: 'PUT', - Url: url, - Body: body, - ContentType: 'application/xml', - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 开通原图保护 -function openOriginProtect() { - var host = config.Bucket + '.pic.' + config.Region + '.myqcloud.com/?origin-protect'; - var url = 'https://' + host; - cos.request( - { - Method: 'PUT', - Url: url, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 查询原图保护状态 -function describeOriginProtect() { - var host = config.Bucket + '.pic.' + config.Region + '.myqcloud.com/?origin-protect'; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Url: url, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 关闭原图保护 -function closeOriginProtect() { - var host = config.Bucket + '.pic.' + config.Region + '.myqcloud.com/?origin-protect'; - var url = 'https://' + host; - cos.request( - { - Method: 'DELETE', - Url: url, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 查看指定任务 -function getJobDetail() { - const jobId = 'jec8ae8943c2511ee9d4a9b3cb7a5c6xx'; // jobId: 需要查询的jobId; - const key = `jobs/${jobId}`; // jobId: 需要查询的jobId; - const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - - cos.request( - { - Method: 'GET', // 固定值,必须 - Key: key, // 必须 - Url: url, // 请求的url,必须 - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - }, - ); -} - -// 获取任务列表 -function getJobList() { - const key = `jobs`; // 固定值,必须 - const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - - cos.request( - { - Method: 'GET', // 固定值,必须 - Key: key, // 必须 - Url: url, // 请求的url,必须 - Query: { - // 拉取该队列 ID 下的任务;是否必传:否 - // queueId: '', - // 拉取队列类型下的任务,和 queueId 不同时生效,同时存在时 queueId 优先;是否必传:否 - // queueType: '', - // 任务的 Tag;是否必传:是,比如查找视频转动图的任务 - tag: 'Animation', - // 触发该任务的工作流ID;是否必传:否 - workflowId: '', - // 触发该任务的存量触发任务ID;是否必传:否 - // inventoryTriggerJobId: '', - // 该任务的输入文件名,暂仅支持精确匹配;是否必传:否 - // inputObject: '', - // Desc 或者 Asc。默认为 Desc;是否必传:否 - // orderByTime: '', - // 请求的上下文,用于翻页。上次返回的值;是否必传:否 - // nextToken: '', - // 拉取的最大任务数。默认为10。最大为100;是否必传:否 - size: 10, - // 拉取该状态的任务,以,分割,支持多状态:All、Submitted、Running、Success、Failed、Pause、Cancel。默认为 All;是否必传:否 - states: 'All', - // 拉取创建时间大于该时间的任务。格式为:%Y-%m-%dT%H:%m:%S%z,示例:2001-01-01T00:00:00+0800;是否必传:否 - // startCreationTime: '', - // 拉取创建时间小于该时间的任务。格式为:%Y-%m-%dT%H:%m:%S%z,示例:2001-01-01T23:59:59+0800;是否必传:否 - // endCreationTime: '', - }, - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - }, - ); -} - -function getWorkflow() { - const key = `workflow`; // - const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - - cos.request( - { - Method: 'GET', // 固定值,必须 - Key: key, // 必须 - Url: url, // 请求的url,必须 - Query: { - // 工作流 ID,以,符号分割字符串;是否必传:否 - ids: '', - // 工作流名称;是否必传:否 - name: '', - // 第几页;是否必传:否 - pageNumber: '', - // 每页个数;是否必传:否 - pageSize: '', - }, - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - }, - ); -} - -// 获取工作流实例详情 -function getWorkflowexecution() { - const runId = 'ic7af1bf53c2911ee9988525400ae68xx'; - const key = `workflowexecution/${runId}`; // RunId:7; - const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - - cos.request( - { - Method: 'GET', // 固定值,必须 - Key: key, // 必须 - Url: url, // 请求的url,必须 - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - }, - ); -} - -// 测试工作流 -function triggerworkflow() { - const key = `triggerworkflow`; // - const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - - cos.request( - { - Method: 'POST', // 固定值,必须 - Key: key, // 必须 - Url: url, // 请求的url,必须 - Query: { - // 需要触发的工作流 ID;是否必传:是 - workflowId: 'wd3330113a4ef4287a4e0a93c36af09xx', - // 需要进行工作流处理的对象名称, 需要进行 url 编码;是否必传:是 - object: 'test.mp4', - // 存量触发任务名称,支持中文、英文、数字、—和_,长度限制128字符,默认为空;是否必传:否 - // name: '', - }, - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - }, - ); -} - -// 开通AI内容识别 -function openAIBucket() { - const key = 'ai_bucket'; // 固定值 - const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - - cos.request( - { - Method: 'POST', // 固定值,必须 - Key: key, // 必须 - Url: url, // 请求的url,必须 - - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - }, - ); -} - -// 关闭AI内容识别 -function closeAIBucket() { - const key = 'ai_bucket'; // 固定值 - const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - - cos.request( - { - Method: 'DELETE', // 固定值,必须 - Key: key, // 必须 - Url: url, // 请求的url,必须 - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - }, - ); -} - -// 查询开通AI内容识别的桶 -function getAIBucket() { - const key = 'ai_bucket'; // 固定值 - const host = `ci.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - - cos.request( - { - Method: 'GET', // 固定值,必须 - Key: key, // 必须 - Url: url, // 请求的url,必须 - Query: { - // 地域信息,例如 ap-shanghai、ap-beijing,若查询多个地域以“,”分隔字符串,详情请参见 地域与域名;是否必传:是 - // regions: '', - // 存储桶名称,以“,”分隔,支持多个存储桶,精确搜索;是否必传:是 - // bucketNames: '', - // 存储桶名称前缀,前缀搜索;是否必传:是 - // bucketName: '', - // 第几页;是否必传:是 - // pageNumber: 1, - // 每页个数,大于0且小于等于100的整数;是否必传:是 - // pageSize: 10, - }, - - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - }, - ); -} - - -// 查询AI内容识别队列 -function getAIQueue() { - const key = 'ai_queue'; // 固定值 - const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - - cos.request( - { - Method: 'GET', // 固定值,必须 - Key: key, // 必须 - Url: url, // 请求的url,必须 - Query: { - // 队列 ID,以“,”符号分割字符串;是否必传:否 - // queueIds: '', - // Active 表示队列内的作业会被调度执行Paused 表示队列暂停,作业不再会被调度执行,队列内的所有作业状态维持在暂停状态,已经执行中的任务不受影响;是否必传:否 - state: 'Active', - // 第几页,默认值1;是否必传:否 - // pageNumber: 0, - // 每页个数,默认值10;是否必传:否 - // pageSize: 0, - }, - - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - }, - ); -} - -// 更新AI内容识别队列 -function updateAIQueue() { - const queueId = 'pf71b90a56f614163b0b7d00cf20518b4'; // 队列id - const key = `ai_queue/${queueId}`; // 固定格式 - const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - const body = COS.util.json2xml({ - Request: { - // 队列名称,仅支持中文、英文、数字、_、-和*,长度不超过 128;是否必传:是 - Name: 'my_queue', - // Active 表示队列内的作业会被调度执行Paused 表示队列暂停,作业不再会被调度执行,队列内的所有作业状态维持在暂停状态,已经执行中的任务不受影响;是否必传:是 - State: 'Active', - // 回调配置;是否必传:是 - NotifyConfig: { - // 回调开关OffOn;是否必传:否 - State: 'On', - // 回调事件TaskFinish:任务完成WorkflowFinish:工作流完成;是否必传:否 - Event: 'TaskFinish', - // 回调格式XMLJSON;是否必传:否 - // ResultFormat: '', - // 回调类型UrlTDMQ;是否必传:否 - Type: 'Url', - // 回调地址,不能为内网地址。;是否必传:否 - Url: 'http://example.com', - // TDMQ 使用模式Topic:主题订阅Queue: 队列服务;是否必传:否 - // MqMode: '', - // TDMQ 所属园区,目前支持园区 sh(上海)、bj(北京)、gz(广州)、cd(成都)、hk(中国香港);是否必传:否 - // MqRegion: '', - // TDMQ 主题名称;是否必传:否 - // MqName: '', - }, - }, - }); - - cos.request( - { - Method: 'PUT', // 固定值,必须 - Key: key, // 必须 - Url: url, // 请求的url,必须 - Body: body, // 请求体参数,必须 - ContentType: 'application/xml', // 固定值,必须 - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - } - ); -} - -// 车辆识别 -function aIDetectCar() { - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'GET', // 固定值,必须 - Key: 'ci/car.png', // 对象文件名,必须,例如:folder/document.jpg - Query: { - // 数据万象处理能力,车辆识别固定为 DetectCar;是否必传:是 - 'ci-process': 'DetectCar', - }, - - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - }, - ); -} - -// 宠物识别 -function aIDetectPet() { - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'GET', // 固定值,必须 - Key: 'ci/dog.jpeg', // 对象文件名,必须,例如:folder/document.jpg须 - Query: { - // 数据万象处理能力,宠物识别固定为 detect-pet;是否必传:是 - 'ci-process': 'detect-pet', - }, - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - }, - ); -} - -// 创建视频目标检测模板 -function postVideoTargetTemplete() { - const key = 'template'; // 固定值 - const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - const body = COS.util.json2xml({ - Request: { - // 模板类型:VideoTargetRec;是否必传:是 - Tag: 'VideoTargetRec', - // 模板名称,仅支持中文、英文、数字、_、-和*,长度不超过 64;是否必传:是 - Name: 'my_videoTargetRec', - // 视频目标检测 参数;是否必传:是 - VideoTargetRec: { - // 是否开启人体检测,取值 true/false;是否必传:否 - Body: 'true', - // 是否开启宠物检测,取值 true/false;是否必传:否 - Pet: 'true', - // 是否开启车辆检测,取值 true/false;是否必传:否 - Car: 'false', - }, - }, - }); - - cos.request( - { - Method: 'POST', // 固定值,必须 - Key: key, // 必须 - Url: url, // 请求的url,必须 - Body: body, // 请求体参数,必须 - ContentType: 'application/xml', // 固定值,必须 - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - } - ); -} - -// 更新视频目标检测模板 -function updateVideoTargetTemplete() { - const templateId = 'xxxxxxx'; // 要更新的模板id - const key = `template/${templateId}`; // 固定值 - const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - const body = COS.util.json2xml({ - Request: { - // 模板类型:VideoTargetRec;是否必传:是 - Tag: 'VideoTargetRec', - // 模板名称,仅支持中文、英文、数字、_、-和*,长度不超过 64;是否必传:是 - Name: 'my_videoTargetRec2', - // 视频目标检测 参数;是否必传:是 - VideoTargetRec: { - // 是否开启人体检测,取值 true/false;是否必传:否 - Body: 'false', - // 是否开启宠物检测,取值 true/false;是否必传:否 - Pet: 'false', - // 是否开启车辆检测,取值 true/false;是否必传:否 - Car: 'true', - }, - }, - }); - - cos.request( - { - Method: 'PUT', // 固定值,必须 - Key: key, // 必须 - Url: url, // 请求的url,必须 - Body: body, // 请求体参数,必须 - ContentType: 'application/xml', // 固定值,必须 - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - } - ); -} - -// 提交一个视频目标检测任务 -function postVideoTargetRec() { - const key = 'jobs'; // 固定值 - const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - const body = COS.util.json2xml({ - Request: { - // 创建任务的 Tag:VideoTargetRec;是否必传:是 - Tag: 'VideoTargetRec', - // 操作规则;是否必传:是 - Operation: { - // 视频目标检测模板 ID;与VideoTargetRec二选一传递 - TemplateId: 'xxxx', - // 视频目标检测参数, 同创建视频目标检测模板接口中的 Request.VideoTargetRec;与TemplateId二选一传递 - // VideoTargetRec: { - // 是否开启人体检测,取值 true/false;是否必传:否 - // Body: '', - // 是否开启宠物检测,取值 true/false;是否必传:否 - // Pet: '', - // 是否开启车辆检测,取值 true/false;是否必传:否 - // Car: '', - // }, - // 透传用户信息, 可打印的 ASCII 码, 长度不超过1024;是否必传:否 - // UserData: '', - // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0;是否必传:否 - // JobLevel: '', - }, - // 待操作的媒体信息;是否必传:是 - Input: { - // 媒体文件名;是否必传:否 - Object: 'ci/test.mp4', - }, - // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 - // CallBackFormat: '', - // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 - // CallBackType: '', - // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 - // CallBack: '', - // 任务回调TDMQ配置,当 CallBackType 为 TDMQ 时必填。详情请参见 CallBackMqConfig;是否必传:否 - // CallBackMqConfig: { - // 消息队列所属园区,目前支持园区 sh(上海)、bj(北京)、gz(广州)、cd(成都)、hk(中国香港);是否必传:是 - // MqRegion: '', - // 消息队列使用模式,默认 Queue :主题订阅:Topic队列服务: Queue;是否必传:是 - // MqMode: '', - // TDMQ 主题名称;是否必传:是 - // MqName: '', - // }, - }, - }); - - cos.request( - { - Method: 'POST', // 固定值,必须 - Key: key, // 必须 - Url: url, // 请求的url,必须 - Body: body, // 请求体参数,必须 - ContentType: 'application/xml', // 固定值,必须 - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - } - ); -} - -// 提交词性分析任务 -function postWordsGeneralize() { - const key = 'jobs'; // 固定值 - const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - const body = COS.util.json2xml({ - Request: { - // 创建任务的 Tag:WordsGeneralize;是否必传:是 - Tag: 'WordsGeneralize', - // 待操作的对象信息;是否必传:是 - Input: { - // 文件路径;是否必传:是 - Object: 'ci/test.txt', - }, - // 操作规则;是否必传:是 - Operation: { - // 指定分词参数;是否必传:是 - WordsGeneralize: { - // ner 方式,支持 NerBasic 和 DL,默认值 DL;是否必传:否 - NerMethod: 'DL', - // 分词粒度,支持 SegBasic 和 MIX,默认值 MIX;是否必传:否 - SegMethod: 'MIX', - }, - // 透传用户信息,可打印的 ASCII 码,长度不超过1024;是否必传:否 - // UserData: '', - // 任务优先级,级别限制:0 、1 、2。级别越大任务优先级越高,默认为0;是否必传:否 - // JobLevel: '', - }, - // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 - // CallBackFormat: '', - // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 - // CallBackType: '', - // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 - // CallBack: '', - // 任务回调 TDMQ 配置,当 CallBackType 为 TDMQ 时必填。详情见 CallBackMqConfig;是否必传:否 - // CallBackMqConfig: { - // 消息队列所属园区,目前支持园区 sh(上海)、bj(北京)、gz(广州)、cd(成都)、hk(中国香港);是否必传:是 - // MqRegion: '', - // 消息队列使用模式,默认 Queue :主题订阅:Topic队列服务: Queue;是否必传:是 - // MqMode: '', - // TDMQ 主题名称;是否必传:是 - // MqName: '', - // }, - }, - }); - - cos.request( - { - Method: 'POST', // 固定值,必须 - Key: key, // 必须 - Url: url, // 请求的url,必须 - Body: body, // 请求体参数,必须 - ContentType: 'application/xml', // 固定值,必须 - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - } - ); -} - -function livenessRecognition() { - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'GET', // 固定值,必须 - Key: 'ci/tf.mp4', // 必须 - Query: { - // 数据万象处理能力,人脸核身固定为 LivenessRecognition;是否必传:是 - 'ci-process': 'LivenessRecognition', - // 身份证号;是否必传:是 - IdCard: '610321199411040019', - // 姓名。中文请使用 UTF-8编码;是否必传:是 - Name: '田丰', - // 活体检测类型,取值:LIP/ACTION/SILENTLIP 为数字模式,ACTION 为动作模式,SILENT 为静默模式,三种模式选择一种传入;是否必传:是 - LivenessType: 'SILENT', - // 数字模式传参:数字验证码(1234),需先调用接口获取数字验证码动作模式传参:传动作顺序(2,1 or 1,2),需先调用接口获取动作顺序静默模式传参:空;是否必传:否 - ValidateData: '', - // 需要返回多张最佳截图,取值范围1 - 10,不设置默认返回一张最佳截图;是否必传:否 - BestFrameNum: 1, - }, - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - } - ); -} - -// 获取动作顺序 -function getActionSequence() { - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'GET', // 固定值,必须 - Query: { - // 数据万象处理能力,获取动作顺序固定为 GetActionSequence;是否必传:是 - 'ci-process': 'GetActionSequence', - }, - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - } - ); -} - -// 获取数字验证码 -function getLiveCode() { - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'GET', // 固定值,必须 - Query: { - // 数据万象处理能力,获取数字验证码固定为 GetLiveCode;是否必传:是 - 'ci-process': 'GetLiveCode', - }, - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - } - ); -} - -// 卡证识别 -function aILicenseRec() { - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'GET', // 固定值,必须 - Key: 'ci/card.jpeg', // 与detect-url二选一传递 - Query: { - // 数据万象处理能力,卡证识别固定为AILicenseRec;是否必传:是 - 'ci-process': 'AILicenseRec', - // 您可以通过填写 detect-url 处理任意公网可访问的图片链接。不填写 detect-url 时,后台会默认处理 ObjectKey ,填写了 detect-url 时,后台会处理 detect-url 链接,无需再填写 ObjectKey detect-url 示例:http://www.example.com/abc.jpg ,需要进行 UrlEncode,处理后为http%25253A%25252F%25252Fwww.example.com%25252Fabc.jpg;是否必传:否 - 'detect-url': '', - // 卡证识别类型,有效值为IDCard,DriverLicense。
IDCard表示身份证;DriverLicense表示驾驶证,默认:DriverLicense;是否必传:是 - CardType: 'IDCard', - }, - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - } - ); -} - -// 开通以图搜图 -function imageSearchBucket() { - const key = 'ImageSearchBucket'; // 固定值 - const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - const body = COS.util.json2xml({ - Request: { - // 图库容量限制;是否必传:是 - MaxCapacity: 1000, - // 图库访问限制,默认10;是否必传:否 - MaxQps: 10, - }, - }); - - cos.request( - { - Method: 'POST', // 固定值,必须 - Key: key, // 必须 - Url: url, // 请求的url,必须 - Body: body, // 请求体参数,必须 - ContentType: 'application/xml', // 固定值,必须 - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - } - ); -} - -// 商品抠图 -function goodsMatting() { - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'GET', // 固定值,必须 - Key: 'ci/goods.jpeg', // 与detect-url二选一传递 - Query: { - // ;是否必传:是 - 'ci-process': 'GoodsMatting', - // ;是否必传:否 - // 'detect-url': '', - }, - RawBody: true, - DataType: 'blob', - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data); - } - } - ); -} - -// 添加图库图片 -function addImageSearch() { - const body = COS.util.json2xml({ - Request: { - // 物品 ID,最多支持64个字符。若 EntityId 已存在,则对其追加图片;是否必传:是 - EntityId: '123456', - // 用户自定义的内容,最多支持4096个字符,查询时原样带回;是否必传:否 - CustomContent: '小商品', - // 图片自定义标签,最多不超过10个,json 字符串,格式为 key:value (例 key1>=1 key1>='aa' )对;是否必传:否 - // Tags: '', - }, - }); - - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'POST', // 固定值,必须 - Key: 'ci/goods.jpeg', // 必须 - Query: { - // 固定值:ImageSearch;是否必传:是 - 'ci-process': 'ImageSearch', - // 固定值:AddImage;是否必传:是 - action: 'AddImage', - }, - Body: body, // 请求体参数,必须 - ContentType: 'application/xml', // 固定值,必须 - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data); - } - } - ); -} - -// 删除图库图片 -function deleteImageSearch() { - const body = COS.util.json2xml({ - Request: { - // 物品 ID;是否必传:是 - EntityId: '', - }, - }); - - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'POST', // 固定值,必须 - Key: key, // 必须 - Body: body, // 请求体参数,必须 - ContentType: 'application/xml', // 固定值,必须 - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - } - ); -} - -// 检索图片 -function getSearchImage() { - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'GET', // 固定值,必须 - Key: 'ci/goods.jpeg', // 必须 - Query: { - 'ci-process': 'ImageSearch', - action: 'SearchImage', - // 出参 Score 中,只有超过 MatchThreshold 值的结果才会返回。默认为0;是否必传:否 - MatchThreshold: 0, - // 起始序号,默认值为0;是否必传:否 - Offset: 0, - // 返回数量,默认值为10,最大值为100;是否必传:否 - Limit: 0, - // 针对入库时提交的 Tags 信息进行条件过滤。支持>、>=、<、<=、=、!=,多个条件之间支持 AND 和 OR 进行连接;是否必传:否 - Filter: '', - }, - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data); - } - } - ); -} - -// 提交内容翻译任务 -function postTranslation() { - const key = 'jobs'; // 固定值 - const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - const body = COS.util.json2xml({ - Request: { - // 创建任务的 Tag:Translation;是否必传:是 - Tag: 'Translation', - // 待操作的对象信息;是否必传:是 - Input: { - // 源文档文件名单文件(docx/xlsx/html/markdown/txt):不超过800万字符有页数的(pdf/pptx):不超过300页文本文件(txt):不超过10MB二进制文件(pdf/docx/pptx/xlsx):不超过60MB图片文件(jpg/jpeg/png/webp):不超过10MB;是否必传:是 - Object: 'ci/test.txt', - // 文档语言类型zh:简体中文zh-hk:繁体中文zh-tw:繁体中文zh-tr:繁体中文en:英语ar:阿拉伯语de:德语es:西班牙语fr:法语id:印尼语it:意大利语ja:日语pt:葡萄牙语ru:俄语ko:韩语km:高棉语lo:老挝语;是否必传:是 - Lang: 'zh-hk', - // 文档类型pdfdocxpptxxlsxtxtxmlhtml:只能翻译 HTML 里的文本节点,需要通过 JS 动态加载的不进行翻译markdownjpgjpegpngwebp;是否必传:是 - Type: 'txt', - // 原始文档类型仅在 Type=pdf/jpg/jpeg/png/webp 时使用,当值为pdf时,仅支持 docx、pptx当值为jpg/jpeg/png/webp时,仅支持txt;是否必传:否 - // BasicType: '', - }, - // 操作规则;是否必传:是 - Operation: { - // 翻译参数;是否必传:是 - Translation: { - // 目标语言类型源语言类型为 zh/zh-hk/zh-tw/zh-tr 时支持:en、ar、de、es、fr、id、it、ja、it、ru、ko、km、lo、pt源语言类型为 en 时支持:zh、zh-hk、zh-tw、zh-tr、ar、de、es、fr、id、it、ja、it、ru、ko、km、lo、pt其他类型时支持:zh、zh-hk、zh-tw、zh-tr、en;是否必传:是 - Lang: 'en', - // 文档类型,源文件类型与目标文件类型映射关系如下:docx:docxpptx:pptxxlsx:xlsxtxt:txtxml:xmlhtml:htmlmarkdown:markdownpdf:pdf、docxpng:txtjpg:txtjpeg:txtwebp:txt;是否必传:是 - Type: 'txt', - }, - // 结果输出地址,当NoNeedOutput为true时非必选;是否必传:否 - Output: { - // 存储桶的地域;是否必传:是 - Region: config.Region, - // 存储结果的存储桶;是否必传:是 - Bucket: config.Bucket, - // 输出结果的文件名;是否必传:是 - Object: 'ci/trans_test.txt', - }, - // 透传用户信息,可打印的 ASCII 码,长度不超过1024;是否必传:否 - // UserData: '', - // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0;是否必传:否 - // JobLevel: '', - // 仅输出结果,不生成结果文件。取值:true/false。该参数原文档类型为图片时有效。默认值 false;是否必传:否 - // NoNeedOutput: '', - }, - // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 - // CallBackFormat: '', - // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 - // CallBackType: '', - // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 - // CallBack: '', - // 任务回调TDMQ配置,当 CallBackType 为 TDMQ 时必填。详情见 CallBackMqConfig;是否必传:否 - // CallBackMqConfig: { - // 消息队列所属园区,目前支持园区 sh(上海)、bj(北京)、gz(广州)、cd(成都)、hk(中国香港);是否必传:是 - // MqRegion: '', - // 消息队列使用模式,默认 Queue :主题订阅:Topic队列服务: Queue;是否必传:是 - // MqMode: '', - // TDMQ 主题名称;是否必传:是 - // MqName: '', - // }, - }, - }); - - cos.request( - { - Method: 'POST', // 固定值,必须 - Key: key, // 必须 - Url: url, // 请求的url,必须 - Body: body, // 请求体参数,必须 - ContentType: 'application/xml', // 固定值,必须 - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - } - ); -} - -// 人脸检测 -function aIDetectFace() { - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'GET', // 固定值,必须 - Key: 'ci/1.jpg', // 必须 - Query: { - // 数据万象处理能力,人脸特效固定为 DetectFace。;是否必传:是 - 'ci-process': 'DetectFace', - // 最多处理的人脸数目。默认值为1(仅检测图片中面积最大的那张人脸),最大���为120。此参数用于控制处理待检测图片中的人脸个数,值越小,处理速度越快。;是否必传:否 - 'max-face-num': 1, - }, - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - } - ); -} - -// 人脸特效 -function aIFaceEffect() { - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'GET', // 固定值,必须 - Key: 'ci/dog.jpeg', // 与detect-url二选一传递 - Query: { - // 万象处理能力,人脸特效固定为face-effect;是否必传:是 - 'ci-process': 'face-effect', - // 您可以通过填写 detect-url 处理任意公网可访问的图片链接。不填写 detect-url 时,后台会默认处理 ObjectKey ,填写了 detect-url 时,后台会处理 detect-url 链接,无需再填写 ObjectKey detect-url 示例:http://www.example.com/abc.jpg ,需要进行 UrlEncode,处理后为http%25253A%25252F%25252Fwww.example.com%25252Fabc.jpg。;是否必传:否 - // 'detect-url': '', - // 人脸特效类型,人脸美颜:face-beautify;人脸性别转换:face-gender-transformation;人脸年龄变化:face-age-transformation;人像分割:face-segmentation;是否必传:是 - type: 'face-beautify', - // type为face-beautify时生效,美白程度,取值范围[0,100]。0不美白,100代表最高程度。默认值30;是否必传:否 - whitening: 50, - // type为face-beautify时生效,磨皮程度,取值范围[0,100]。0不磨皮,100代表最高程度。默认值10;是否必传:否 - smoothing: 50, - // type为face-beautify时生效,瘦脸程度,取值范围[0,100]。0不瘦脸,100代表最高程度。默认值70;是否必传:否 - faceLifting: 50, - // type为face-beautify时生效,大眼程度,取值范围[0,100]。0不大眼,100代表最高程度。默认值70;是否必传:否 - eyeEnlarging: 50, - // type为face-gender-transformation时生效,选择转换方向,0:男变女,1:女变男。无默认值,为必选项。限制:仅对图片中面积最大的人脸进行转换。;是否必传:否 - // gender: 0, - // type为face-age-transformation时生效,变化到的人脸年龄,[10,80]。无默认值,为必选项。限制:仅对图片中面积最大的人脸进行转换。;是否必传:否 - // age: 0, - }, - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - } - ); -} - -// 人体识别 -function aIBodyRecognition() { - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'GET', // 固定值,必须 - Key: 'ci/dog.jpeg', // 与detect-url二选一传递 - Query: { - // 数据万象处理能力,人体识别固定为AIBodyRecognition;是否必传:是 - 'ci-process': 'AIBodyRecognition', - // 您可以通过填写 detect-url 处理任意公网可访问的图片链接。不填写 detect-url 时,后台会默认处理 ObjectKey ,填写了 detect-url 时,后台会处理 detect-url 链接,无需再填写 ObjectKey detect-url 示例:http://www.example.com/abc.jpg ,需要进行 UrlEncode,处理后为http%25253A%25252F%25252Fwww.example.com%25252Fabc.jpg;是否必传:否 - // 'detect-url': '', - }, - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data); - } - } - ); -} - -// 身份证识别 -function aIIDCardOCR() { - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'GET', // 固定值,必须 - Key: 'ci/card.jpeg', // 必须 - Query: { - // 数据万象处理能力,身份证识别固定为 IDCardOCR;是否必传:是 - 'ci-process': 'IDCardOCR', - // FRONT:身份证有照片的一面(人像面)BACK:身份证有国徽的一面(国徽面)该参数如果不填,将为您自动判断身份证正反面;是否必传:否 - CardSide: 'FRONT', - // 以下可选字段均为 bool 类型,默认 false:CropIdCard,身份证照片裁剪(去掉证件外多余的边缘、自动矫正拍摄角度)CropPortrait,人像照片裁剪(自动抠取身份证头像区域)CopyWarn,复印件告警BorderCheckWarn,边框和框内遮挡告警ReshootWarn,翻拍告警DetectPsWarn,PS 检测告警TempIdWarn,临时身份证告警InvalidDateWarn,身份证有效日期不合法告警Quality,图片质量分数(评价图片的模糊程度)MultiCardDetect,是否开启多卡证检测参数设置方式参考:Config = {"CropIdCard":true,"CropPortrait":true};是否必传:否 - // Config: {}, - }, - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - } - ); -} - -// 实时文字翻译 -function autoTranslationBlock() { - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'GET', // 固定值,必须 - Query: { - // 数据万象处理能力,文本块翻译固定为 AutoTranslationBlock。;是否必传:是 - 'ci-process': 'AutoTranslationBlock', - // 待翻译的文本;是否必传:是 - InputText: '我是张三', - // 输入语言,如 "zh";是否必传:是 - SourceLang: 'zh', - // 输出语言,如 "en";是否必传:是 - TargetLang: 'en', - // 文本所属业务领域,如: "ecommerce", //缺省值为 general;是否必传:否 - // TextDomain: '', - // 文本类型,如: "title", //缺省值为 sentence;是否必传:否 - // TextStyle: '', - }, - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data); - } - } - ); -} - -// 提交一个视频人像抠图任务 -function postSegmentVideoBody() { - const key = 'jobs'; // 固定值 - const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - const body = COS.util.json2xml({ - Request: { - // 创建任务的 Tag:SegmentVideoBody;是否必传:是 - Tag: 'SegmentVideoBody', - // 待操作的对象信息;是否必传:是 - Input: { - // 文件路径;是否必传:是 - Object: 'ci/tf.mp4', - }, - // 操作规则;是否必传:是 - Operation: { - // 视频人像抠图配置;是否必传:否 - SegmentVideoBody: { - // 抠图模式 Mask:输出alpha通道结果Foreground:输出前景视频Combination:输出抠图后的前景与自定义背景合成后的视频默认值:Mask;是否必传:否 - Mode: 'Mask', - // 抠图类型HumanSeg:人像抠图GreenScreenSeg:绿幕抠图SolidColorSeg:纯色背景抠图默认值:HumanSeg;是否必传:否 - // SegmentType: '', - // mode为 Foreground 时参数生效,背景颜色为红色,取值范围 [0, 255], 默认值为 0;是否必传:否 - // BackgroundRed: '', - // mode为 Foreground 时参数生效,背景颜色为绿色,取值范围 [0, 255],默认值为 0;是否必传:否 - // BackgroundGreen: '', - // mode为 Foreground 时参数生效,背景颜色为蓝色,取值范围 [0, 255],默认值为 0;是否必传:否 - // BackgroundBlue: '', - // 传入背景文件。mode为 Combination 时,此参数必填,背景文件需与源文件在同存储桶下;是否必传:否 - // BackgroundLogoUrl: '', - // 调整抠图的边缘位置,取值范围为[0, 255],默认值为 0;是否必传:否 - // BinaryThreshold: '', - // 纯色背景抠图的背景色(红), 当 SegmentType 为 SolidColorSeg 生效,取值范围为 [0, 255],默认值为 0;是否必传:否 - // RemoveRed: '', - // 纯色背景抠图的背景色(绿), 当 SegmentType 为 SolidColorSeg 生效,取值范围为 [0, 255],默认值为 0;是否必传:否 - // RemoveGreen: '', - // 纯色背景抠图的背景色(蓝), 当 SegmentType 为 SolidColorSeg 生效,取���范围为 [0, 255],默认值为 0;是否必传:否 - // RemoveBlue: '', - }, - // 结果输出配置;是否必传:是 - Output: { - // 存储桶的地域;是否必传:是 - Region: config.Region, - // 存储结果的存储桶;是否必传:是 - Bucket: config.Bucket, - // 输出结果的文件名;是否必传:是 - Object: 'ci/ss.mp4', - }, - // 透传用户信息,可打印的 ASCII 码,长度不超过1024;是否必传:否 - // UserData: '', - // 任务优先级,级别限制:0 、1 、2。级别越大任务优先级越高,默认为0;是否必传:否 - // JobLevel: '', - }, - // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 - // CallBackFormat: '', - // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 - // CallBackType: '', - // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 - // CallBack: '', - // 任务回调 TDMQ 配置,当 CallBackType 为 TDMQ 时必填。详情见 CallBackMqConfig;是否必传:否 - // CallBackMqConfig: { - // 消息队列所属园区,目前支持园区 sh(上海)、bj(北京)、gz(广州)、cd(成都)、hk(中国香港);是否必传:是 - // MqRegion: '', - // 消息队列使用模式,默认 Queue :主题订阅:Topic队列服务: Queue;是否必传:是 - // MqMode: '', - // TDMQ 主题名称;是否必传:是 - // MqName: '', - // }, - }, - }); - - cos.request( - { - Method: 'POST', // 固定值,必须 - Key: key, // 必须 - Url: url, // 请求的url,必须 - Body: body, // 请求体参数,必须 - ContentType: 'application/xml', // 固定值,必须 - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - } - ); -} - -function aIImageColoring() { - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'GET', // 固定值,必须 - Key: 'ci/1.jpg', // 与detect-url二选一传递 - Query: { - // 数据万象处理能力,图片上色参固定为AIImageColoring。;是否必传:是 - 'ci-process': 'AIImageColoring', - // 待上色图片url,需要进行urlencode,与ObjectKey二选其一,如果同时存在,则默认以ObjectKey为准;是否必传:否 - // 'detect-url': '', - }, - RawBody: true, - DataType: 'blob', - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data); - } - } - ); -} - -// 图片质量评分 -function assessQuality() { - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'GET', // 固定值,必须 - Key: 'ci/dog.jpeg', // 必须 - Query: { - // 数据万象处理能力,图像质量检测固定为 AssessQuality。;是否必传:是 - 'ci-process': 'AssessQuality', - }, - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - } - ); -} - -// 图像超分 -function aISuperResolution() { - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'GET', // 固定值,必须 - Key: 'ci/test.jpeg', // 与detect-url二选一传递 - Query: { - // 数据万象处理能力,只能裁剪参固定为AISuperResolution。;是否必传:否 - 'ci-process': 'AISuperResolution', - // 您可以通过填写 detect-url 处理任意公网可访问的图片链接。不填写 detect-url 时,后台会默认处理 ObjectKey ,填写了 detect-url 时,后台会处理 detect-url 链接,无需再填写 ObjectKey,detect-url 示例:http://www.example.com/abc.jpg ,需要进行 UrlEncode,处理后为http%25253A%25252F%25252Fwww.example.com%25252Fabc.jpg。;是否必传:否 - // 'detect-url': '', - }, - RawBody: true, - DataType: 'blob' - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data); - } - } - ); -} - -// 图像修复 -function imageRepair() { - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'GET', // 固定值,必须 - Key: 'ci/card.jpeg', // 必须 - Query: { - // 固定值:ImageRepair;是否必传:是 - 'ci-process': 'ImageRepair', - // 遮罩(白色区域为需要去除的水印位置)图片地址,私有图片需携带签名,需要经过 URL 安全的 Base64 编码 - // 比如图片url为 http://test.com/test.jpg - MaskPic: COS.util.encodeBase64('http://test.com/test.jpg', true), - }, - RawBody: true, - DataType: 'blob', - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data); - } - } - ); -} - -// 图像增强 -function aIEnhanceImage() { - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'GET', // 固定值,必须 - Key: 'ci/1.jpg', // 与detect-url二选一传递 - Query: { - // 数据万象处理能力,只能裁剪参固定为 AIEnhanceImage。;是否必传:是 - 'ci-process': 'AIEnhanceImage', - // 去噪强度值,取值范围为 0 - 5 之间的整数,值为 0 时不进行去噪操作,默认值为3。;是否必传:否 - denoise: 0, - // 锐化强度值,取值范围为 0 - 5 之间的整数,值为 0 时不进行锐化操作,默认值为3。;是否必传:否 - sharpen: 0, - // 您可以通过填写 detect-url 处理任意公网可访问的图片链接。不填写 detect-url 时,后台会默认处理 ObjectKey ,填写了detect-url 时,后台会处理 detect-url链接,无需再填写 ObjectKey ,detect-url 示例:http://www.example.com/abc.jpg ,需要进行 UrlEncode,处理后为 http%25253A%25252F%25252Fwww.example.com%25252Fabc.jpg;是否必传:否 - // 'detect-url': '', - // ;是否必传:否 - 'ignore-error': 0, - }, - RawBody: true, - DataType: 'blob', - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data); - } - } - ); -} - -// 图像智能裁剪 -function aIImageCrop() { - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'GET', // 固定值,必须 - Key: 'ci/dog.jpeg', // 与detect-url二选一传递 - Query: { - // 数据万象处理能力,智能裁剪固定为AIImageCrop;是否必传:是 - 'ci-process': 'AIImageCrop', - // 您可以通过填写 detect-url 处理任意公网可访问的图片链接。不填写 detect-url 时,后台会默认处理 ObjectKey ,填写了 detect-url 时,后台会处理 detect-url 链接,无需再填写 ObjectKey detect-url 示例:http://www.example.com/abc.jpg ,需要进行 UrlEncode,处理后为http%25253A%25252F%25252Fwww.example.com%25252Fabc.jpg;是否必传:否 - // 'detect-url': '', - // 需要裁剪区域的宽度,与height共同组成所需裁剪的图片宽高比例;输入数字请大于0、小于图片宽度的像素值;是否必传:是 - width: 0, - // 需要裁剪区域的高度,与width共同组成所需裁剪的图片宽高比例;输入数字请大于0、小于图片高度的像素值;width : height建议取值在[1, 2.5]之间,超过这个范围可能会影响效果;是否必传:是 - height: 0, - // 是否严格按照 width 和 height 的值进行输出。取值为0时,宽高比例(width : height)会简化为最简分数,即如果width输入10、height输入20,会简化为1:2;取值为1时,输出图片的宽度等于width,高度等于height;默认值为0;是否必传:否 - fixed: 0, - // 当此参数为1时,针对文件过大等导致处理失败的场景,会直接返回原图而不报错;是否必传:否 - 'ignore-error': 0, - }, - RawBody: true, - DataType: 'blob', - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data); - } - } - ); -} - -// 音乐评分 -function vocalScore() { - const key = 'jobs'; // 固定值 - const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - const body = COS.util.json2xml({ - Request: { - // 创建任务的 Tag:VocalScore;是否必传:是 - Tag: 'VocalScore', - // 待操作的对象信息;是否必传:是 - Input: { - // 文件路径;是否必传:否 - Object: 'ci/music.mp3', - }, - // 操作规则;是否必传:是 - Operation: { - // 音乐评分参数配置;是否必传:是 - VocalScore: { - // 比对基准文件路径;是否必传:否 - StandardObject: 'ci/base.mp3', - }, - // 透传用户信息, 可打印的 ASCII 码, 长度不超过1024;是否必传:否 - // UserData: '', - // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0;是否必传:否 - // JobLevel: '', - }, - // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 - // CallBackFormat: '', - // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 - // CallBackType: '', - // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 - // CallBack: '', - // 任务回调TDMQ配置,当 CallBackType 为 TDMQ 时必填。详情见 CallBackMqConfig;是否必传:否 - // CallBackMqConfig: { - // 消息队列所属园区,目前支持园区 sh(上海)、bj(北京)、gz(广州)、cd(成都)、hk(中国香港);是否必传:是 - // MqRegion: '', - // 消息队列使用模式,默认 Queue :主题订阅:Topic队列服务: Queue;是否必传:是 - // MqMode: '', - // TDMQ 主题名称;是否必传:是 - // MqName: '', - // }, - }, - }); - - cos.request( - { - Method: 'POST', // 固定值,必须 - Key: key, // 必须 - Url: url, // 请求的url,必须 - Body: body, // 请求体参数,必须 - ContentType: 'application/xml', // 固定值,必须 - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - } - ); -} - -// 游戏场景识别 -function aIGameRec() { - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'GET', // 固定值,必须 - Key: 'ci/game.jpeg', // 与detect-url二选一传递 - Query: { - // 数据万象处理能力,游戏场景识别固定为 AIGameRec;是否必传:是 - 'ci-process': 'AIGameRec', - // 您可以通过填写 detect-url 对任意公网可访问的图片进行游戏场景识别。不填写 detect-url 时,后台会默认处理 objectkey ;填写了 detect-url 时,后台会处理 detect-url 链接,无需再填写 objectkey , detect-url 示例:http://www.example.com/abc.jpg。;是否必传:是 - // 'detect-url': '', - }, - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data); - } - } - ); -} - -// Logo 识别 -function recognizeLogo() { - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'GET', // 固定值,必须 - Key: 'ci/logo.png', // 与detect-url二选一传递 - Query: { - // 数据万象处理能力,Logo识别固定为RecognizeLogo;是否必传:是 - 'ci-process': 'RecognizeLogo', - // 待检查图片url,需要进行urlencode;是否必传:是 - // 'detect-url': '', - }, - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data); - } - } - ); -} - -(function () { - var list = [ - 'header-任务与工作流', - 'getJobDetail', - 'getJobList', - 'getWorkflow', - 'getWorkflowexecution', - 'triggerworkflow', - - 'header-图片处理', - 'getImageUrl', - 'addImageStyle', - 'describeImageStyles', - 'deleteImageStyle', - 'openImageGuetzli', - 'describeImageGuetzli', - 'closeImageGuetzli', - 'uploadPicOperation', - 'requestPicOperation', - 'advanceCompressExample3', - 'createImageInspectJob', - 'describePicProcessQueues', - 'updatePicProcessQueue', - 'openOriginProtect', - 'describeOriginProtect', - 'closeOriginProtect', - - 'header-媒体处理', - 'describeMediaBuckets', - 'searchMediaQueue', - 'updateMediaQueue', - 'getMediaInfo', - 'postMediaInfo', - 'getSnapshot', - 'postSnapshot', - 'getPrivateM3U8', - 'postTranscode', - 'postExtremeHD', - 'postSegment', - 'postConcat', - 'postAnimation', - 'postVideoMontage', - 'postVideoTag', - 'postSmartCover', - 'postDigitalWatermark', - 'postExtractDigitalWatermark', - 'postPicProcess', - - 'header-内容审核', - 'getImageAuditing', - 'postImagesAuditing', - 'getImageAuditingResult', - 'reportBadCase', - 'postVideoAuditing', - 'getVideoAuditingResult', - 'postAudioAuditing', - 'getAudioAuditingResult', - 'postTextAuditing', - 'getTextAuditingResult', - 'postDocumentAuditing', - 'getDocumentAuditingResult', - 'postWebpageAuditing', - 'getWebpageAuditingResult', - 'postLiveAuditing', - 'getLiveAuditingResult', - 'cancelLiveAuditing', - - 'header-文档预览', - 'describeDocProcessBuckets', - 'getDocPreview', - 'describeDocProcessQueues', - 'updateDocProcessQueue', - 'createDocProcessJobs', - 'describeDocProcessJob', - 'describeDocProcessJobs', - 'getDocHtmlUrl', - 'getDocHtmlPreviewUrl', - - 'header-AI识别', - 'openAIBucket', - 'closeAIBucket', - 'getAIBucket', - 'getAIQueue', - 'updateAIQueue', - 'getImageLabel', - 'recognitionQRcode', - 'identifyQrcode_put', - 'identifyQrcode_get', - 'createCRcode', - 'cOSOCR', - 'aIDetectCar', - 'aIDetectPet', - 'postVideoTargetTemplete', - 'updateVideoTargetTemplete', - 'postVideoTargetRec', - 'postWordsGeneralize', - 'livenessRecognition', - 'getActionSequence', - 'getLiveCode', - 'aILicenseRec', - 'imageSearchBucket', - 'goodsMatting', - 'addImageSearch', - 'deleteImageSearch', - 'getSearchImage', - 'postTranslation', - 'aIDetectFace', - 'aIFaceEffect', - 'aIBodyRecognition', - 'aIIDCardOCR', - 'autoTranslationBlock', - 'postSegmentVideoBody', - 'aIImageColoring', - 'assessQuality', - 'aISuperResolution', - 'imageRepair', - 'aIEnhanceImage', - 'aIImageCrop', - 'vocalScore', - 'aIGameRec', - 'recognizeLogo', - - 'header-文件处理', - 'postFileCompress', - 'getFileCompress', - 'postFileUnCompress', - 'getFileUnCompress', - 'postFileHash', - 'getFileHashResult', - 'createFileProcessBucket', - 'describeFileProcessQueues', - 'updateFileProcessQueue', - 'generateFileHash', - - 'header-病毒检测', - 'postVirusDetect', - 'getVirusDetectResult', - - 'header-智能语音', - 'getAsrBucket', - 'openAsrBucket', - 'closeAsrBucket', - 'getAsrQueue', - 'updateAsrQueue', - 'postNoiseReduction', - 'postVoiceSeparate', - 'postVoiceSeparateTemplete', - 'updateVoiceSeparateTemplete', - 'postVoiceSynthesis', - 'postVoiceSynthesisTemplete', - 'updateVoiceSynthesisTemplete', - 'postSpeechRecognition', - 'postSpeechRecognitionTemplete', - 'updateSpeechRecognitionTemplete', - 'postNoiseReductionTemplete', - 'updateNoiseReductionTemplete', - 'postSoundHound', - - 'header-防盗链', - 'describeRefer', - 'setRefer', - ]; - var labelMap = { - putObject: '简单上传', - putObject_base64ToBlob: '简单上传:base64转blob', - appendObject: '追加上传', - appendObject_continue: '查询position并追加上传', - uploadFile: '高级上传', - sliceUploadFile: '分片上传', - sliceCopyFile: '分片复制', - uploadFiles: '批量上传文件', - selectFileToUpload: '上传本地文件', - uploadFolder: '上传文件夹', - uploadToFolder: '上传到指定文件夹', - request: '通用请求接口', - listFolder: '列出文件夹', - deleteFolder: '删除文件夹(按前缀批量删除)', - getImageUrl: '生成带图片处理参数的签名 URL', - - getJobDetail: '查询指定任务', - getJobList: '获取任务列表', - getWorkflow: '查询工作流', - getWorkflowexecution: '获取工作流实例详情', - triggerworkflow: '测试工作流', - - describeMediaBuckets: '查询媒体处理开通情况', - searchMediaQueue: '搜索媒体处理队列', - updateMediaQueue: '更新媒体处理队列', - getMediaInfo: '获取媒体信息同步请求', - postMediaInfo: '获取媒体信息异步任务', - getSnapshot: '获取媒体文件某个时间的截图', - getPrivateM3U8: '获取私有m3u8', - postTranscode: '提交音视频转码', - postExtremeHD: '提交极速高清转码', - postSegment: '提交音视频转封装', - postConcat: '提交音视频拼接任务', - postAnimation: '提交视频转动图任务', - postVideoMontage: '提交精彩集锦任务', - postVideoTag: '提交视频标签任务', - postSmartCover: '提交智能封面任务', - postDigitalWatermark: '添加数字水印任务', - postExtractDigitalWatermark: '提取数字水印任务', - postPicProcess: '提交图片异步处理任务', - - getImageAuditing: '图片同步审核', - postImagesAuditing: '图片批量审核', - getImageAuditingResult: '查询图片审核任务结果', - reportBadCase: '反馈处理结果', - postVideoAuditing: '提交视频审核任务', - getVideoAuditingResult: '查询视频审核任务结果', - postAudioAuditing: '提交音频审核任务', - getAudioAuditingResult: '查询音频审核任务结果', - postTextAuditing: '提交文本审核任务', - getTextAuditingResult: '查询文本审核任务结果', - postDocumentAuditing: '提交文档审核任务', - getDocumentAuditingResult: '查询文档审核任务结果', - postWebpageAuditing: '提交网页审核任务', - getWebpageAuditingResult: '查询网页审核任务结果', - postLiveAuditing: '提交直播审核任务', - getLiveAuditingResult: '查询直播审核任务结果', - cancelLiveAuditing: '取消直播审核任务', - describeDocProcessBuckets: '查询文档预览开通状态', - getDocPreview: '文档转码同步请求', - describeDocProcessQueues: '查询文档转码队列', - updateDocProcessQueue: '更新文档转码队列', - createDocProcessJobs: '提交文档预览任务 ', - describeDocProcessJob: '查询指定的文档预览任务', - describeDocProcessJobs: '拉取符合条件的文档预览任务', - getDocHtmlUrl: '文档转 HTML', - - openAIBucket: '开通AI内容识别', - closeAIBucket: '关闭AI内容识别', - getAIBucket: '查询开通AI内容识别的桶', - getAIQueue: '查询AI内容识别队列', - updateAIQueue: '更新AI内容识别队列', - getImageLabel: '识别图片标签', - recognitionQRcode: '二维码识别(云上数据识别)', - identifyQrcode_put: '二维码识别(上传时识别)', - identifyQrcode_get: '二维码识别(下载时识别)', - createCRcode: '二维码生成', - cOSOCR: '图片文字识别', - aIDetectCar: '车辆识别', - aIDetectPet: '宠物识别', - postVideoTargetTemplete: '创建视频目标检测模板', - updateVideoTargetTemplete: '更新视频目标检测模板', - postVideoTargetRec: '提交视频目标检测任务', - postWordsGeneralize: '提交词性分析任务', - livenessRecognition: '活体人脸核身', - getActionSequence: '获取动作顺序', - getLiveCode: '获取数字验证码', - aILicenseRec: '卡证识别', - imageSearchBucket: '开通以图搜图', - goodsMatting: '商品抠图', - addImageSearch: '添加图库图片', - deleteImageSearch: '删除图库图片', - getSearchImage: '图片搜索', - postTranslation: '内容翻译', - aIDetectFace: '人脸检测', - aIFaceEffect: '人脸特效', - aIBodyRecognition: '人体识别', - aIIDCardOCR: '身份证识别', - autoTranslationBlock: '实时文字翻译', - postSegmentVideoBody: '视频人像抠图', - aIImageColoring: '图片上色', - assessQuality: '图片质量评分', - aISuperResolution: '图像超分', - imageRepair: '图像修复', - aIEnhanceImage: '图片增强', - aIImageCrop: '图像智能裁剪', - vocalScore: '音乐评分', - aIGameRec: '游戏场景识别', - recognizeLogo: 'LOGO 识别', - - postFileCompress: '提交文件压缩任务', - getFileCompress: '查询文件压缩任务', - postFileUnCompress: '提交文件解压任务', - getFileUnCompress: '查询文件解压任务', - postFileHash: '提交哈希值计算任务', - getFileHashResult: '查询哈希值计算任务结果', - postVirusDetect: '提交病毒检测任务', - getVirusDetectResult: '查询病毒检测任务结果', - - postNoiseReduction: '提交音频降噪任务', - postVoiceSeparate: '提交人声分离任务', - postVoiceSeparateTemplete: '创建人声分离模板', - updateVoiceSeparateTemplete: '更新人声分离模板', - postNoiseReductionTemplete: '创建音频降噪模版', - updateNoiseReductionTemplete: '更新音频降噪模板', - postVoiceSynthesis: '提交语音合成任务', - postVoiceSynthesisTemplete: '创建语音合成模板', - updateVoiceSynthesisTemplete: '更新语音合成模板', - postSpeechRecognition: '提交语音识别任务', - postSpeechRecognitionTemplete: '创建语音识别模板', - updateSpeechRecognitionTemplete: '更新语音识别模板', - getAsrQueue: '查询语音识别队列', - updateAsrQueue: '更新语音识别队列', - getAsrBucket: '查询语音识别开通状态', - openAsrBucket: '开通智能语音', - closeAsrBucket: '关闭智能语音', - postSoundHound: '提交听歌识曲任务', - - - getDocHtmlPreviewUrl: '获取在线文档预览地址', - createFileProcessBucket: '开通文件处理服务', - describeFileProcessQueues: '查询文件处理队列', - updateFileProcessQueue: '更新文件处理队列', - generateFileHash: '哈希值计算同步请求', - addImageStyle: '图片处理-增加样式', - describeImageStyles: '图片处理-查询样式', - deleteImageStyle: '图片处理-删除样式', - openImageGuetzli: '开通 Guetzli 压缩', - describeImageGuetzli: '查询 Guetzli 压缩', - closeImageGuetzli: '关闭 Guetzli 压缩', - uploadPicOperation: '上传时使用图片处理', - requestPicOperation: '对云上数据进行图片处理', - advanceCompressExample3: '下载时使用图片处理', - createImageInspectJob: '异常图片检测', - describePicProcessQueues: '查询图片处理队列', - updatePicProcessQueue: '更新图片处理队列', - describeRefer: '查询防盗链', - setRefer: '设置防盗链', - openOriginProtect: '开通原图保护', - describeOriginProtect: '查询原图保护状态', - closeOriginProtect: '关闭原图保护', - postSnapshot: '提交视频截帧任务', - }; - var container = document.querySelector('.ci-main'); - var html = []; - list.forEach(function (name) { - if (name === '-') { - html.push('
'); - } else if (name.indexOf('header') > -1) { - html.push('

' + name.split('-')[1] + '

'); - } else { - html.push( - '' + - name + - (labelMap[name] ? ' (' + labelMap[name] + ')' : '') + - '', - ); - } - }); - container.innerHTML = html.join(''); - container.onclick = function (e) { - if (e.target.tagName === 'A') { - var name = e.target.getAttribute('data-method').trim(); - window[name](); - } - }; - - // 设置结果面板跟随窗口自适应高 - var mainPanel = document.querySelector('.ci-main'); - var resultPanel = document.querySelector('.result'); - resultPanel.style.height = getPanelHeight(); - window.onresize = function (e) { - resultPanel.style.height = getPanelHeight(); - }; - - function getPanelHeight() { - return mainPanel.getBoundingClientRect().height - 80 + 'px'; - } -})(); diff --git a/demo/index.html b/demo/index.html index 6beca97..f4c8324 100644 --- a/demo/index.html +++ b/demo/index.html @@ -109,7 +109,7 @@

- + - <<<<<<< HEAD - ======= - - >>>>>>> master