1 |
- !function(e,s){"object"==typeof exports&&"undefined"!=typeof module?s(exports):"function"==typeof define&&define.amd?define(["exports"],s):s((e="undefined"!=typeof globalThis?globalThis:e||self).Uploader={})}(this,(function(e){"use strict";class s{static create(...e){return new this(...e)}mixIn(e){return Object.assign(this,e)}clone(){const e=new this.constructor;return Object.assign(e,this),e}}class t extends s{constructor(e=[],s=4*e.length){super();let t=e;if(t instanceof ArrayBuffer&&(t=new Uint8Array(t)),(t instanceof Int8Array||t instanceof Uint8ClampedArray||t instanceof Int16Array||t instanceof Uint16Array||t instanceof Int32Array||t instanceof Uint32Array||t instanceof Float32Array||t instanceof Float64Array)&&(t=new Uint8Array(t.buffer,t.byteOffset,t.byteLength)),t instanceof Uint8Array){const e=t.byteLength,s=[];for(let i=0;i<e;i+=1)s[i>>>2]|=t[i]<<24-i%4*8;this.words=s,this.sigBytes=e}else this.words=e,this.sigBytes=s}static random(e){const s=[],i=e=>{let s=e,t=987654321;const i=4294967295;return()=>{t=36969*(65535&t)+(t>>16)&i,s=18e3*(65535&s)+(s>>16)&i;let e=(t<<16)+s&i;return e/=4294967296,e+=.5,e*(Math.random()>.5?1:-1)}};for(let t,o=0;o<e;o+=4){const e=i(4294967296*(t||Math.random()));t=987654071*e(),s.push(4294967296*e()|0)}return new t(s,e)}toString(e=i){return e.stringify(this)}concat(e){const s=this.words,t=e.words,i=this.sigBytes,o=e.sigBytes;if(this.clamp(),i%4)for(let e=0;e<o;e+=1){const o=t[e>>>2]>>>24-e%4*8&255;s[i+e>>>2]|=o<<24-(i+e)%4*8}else for(let e=0;e<o;e+=4)s[i+e>>>2]=t[e>>>2];return this.sigBytes+=o,this}clamp(){const{words:e,sigBytes:s}=this;e[s>>>2]&=4294967295<<32-s%4*8,e.length=Math.ceil(s/4)}clone(){const e=super.clone.call(this);return e.words=this.words.slice(0),e}}const i={stringify(e){const{words:s,sigBytes:t}=e,i=[];for(let e=0;e<t;e+=1){const t=s[e>>>2]>>>24-e%4*8&255;i.push((t>>>4).toString(16)),i.push((15&t).toString(16))}return i.join("")},parse(e){const s=e.length,i=[];for(let t=0;t<s;t+=2)i[t>>>3]|=parseInt(e.substr(t,2),16)<<24-t%8*4;return new t(i,s/2)}},o={stringify(e){const{words:s,sigBytes:t}=e,i=[];for(let e=0;e<t;e+=1){const t=s[e>>>2]>>>24-e%4*8&255;i.push(String.fromCharCode(t))}return i.join("")},parse(e){const s=e.length,i=[];for(let t=0;t<s;t+=1)i[t>>>2]|=(255&e.charCodeAt(t))<<24-t%4*8;return new t(i,s)}},n={stringify(e){try{return decodeURIComponent(escape(o.stringify(e)))}catch(e){throw new Error("Malformed UTF-8 data")}},parse:e=>o.parse(unescape(encodeURIComponent(e)))};class r extends s{constructor(){super(),this._minBufferSize=0}reset(){this._data=new t,this._nDataBytes=0}_append(e){let s=e;"string"==typeof s&&(s=n.parse(s)),this._data.concat(s),this._nDataBytes+=s.sigBytes}_process(e){let s;const{_data:i,blockSize:o}=this,n=i.words,r=i.sigBytes;let a=r/(4*o);a=e?Math.ceil(a):Math.max((0|a)-this._minBufferSize,0);const c=a*o,h=Math.min(4*c,r);if(c){for(let e=0;e<c;e+=o)this._doProcessBlock(n,e);s=n.splice(0,c),i.sigBytes-=h}return new t(s,h)}clone(){const e=super.clone.call(this);return e._data=this._data.clone(),e}}class a extends r{constructor(e){super(),this.blockSize=16,this.cfg=Object.assign(new s,e),this.reset()}static _createHelper(e){return(s,t)=>new e(t).finalize(s)}static _createHmacHelper(e){return(s,t)=>new c(e,t).finalize(s)}reset(){super.reset.call(this),this._doReset()}update(e){return this._append(e),this._process(),this}finalize(e){e&&this._append(e);return this._doFinalize()}}class c extends s{constructor(e,s){super();const t=new e;this._hasher=t;let i=s;"string"==typeof i&&(i=n.parse(i));const o=t.blockSize,r=4*o;i.sigBytes>r&&(i=t.finalize(s)),i.clamp();const a=i.clone();this._oKey=a;const c=i.clone();this._iKey=c;const h=a.words,p=c.words;for(let e=0;e<o;e+=1)h[e]^=1549556828,p[e]^=909522486;a.sigBytes=r,c.sigBytes=r,this.reset()}reset(){const e=this._hasher;e.reset(),e.update(this._iKey)}update(e){return this._hasher.update(e),this}finalize(e){const s=this._hasher,t=s.finalize(e);s.reset();return s.finalize(this._oKey.clone().concat(t))}}const h=[],p=[],l=e=>{const s=Math.sqrt(e);for(let t=2;t<=s;t+=1)if(!(e%t))return!1;return!0},d=e=>4294967296*(e-(0|e))|0;let u=2,g=0;for(;g<64;)l(u)&&(g<8&&(h[g]=d(u**.5)),p[g]=d(u**(1/3)),g+=1),u+=1;const f=[];class m extends a{_doReset(){this._hash=new t(h.slice(0))}_doProcessBlock(e,s){const t=this._hash.words;let i=t[0],o=t[1],n=t[2],r=t[3],a=t[4],c=t[5],h=t[6],l=t[7];for(let t=0;t<64;t+=1){if(t<16)f[t]=0|e[s+t];else{const e=f[t-15],s=(e<<25|e>>>7)^(e<<14|e>>>18)^e>>>3,i=f[t-2],o=(i<<15|i>>>17)^(i<<13|i>>>19)^i>>>10;f[t]=s+f[t-7]+o+f[t-16]}const d=i&o^i&n^o&n,u=(i<<30|i>>>2)^(i<<19|i>>>13)^(i<<10|i>>>22),g=l+((a<<26|a>>>6)^(a<<21|a>>>11)^(a<<7|a>>>25))+(a&c^~a&h)+p[t]+f[t];l=h,h=c,c=a,a=r+g|0,r=n,n=o,o=i,i=g+(u+d)|0}t[0]=t[0]+i|0,t[1]=t[1]+o|0,t[2]=t[2]+n|0,t[3]=t[3]+r|0,t[4]=t[4]+a|0,t[5]=t[5]+c|0,t[6]=t[6]+h|0,t[7]=t[7]+l|0}_doFinalize(){const e=this._data,s=e.words,t=8*this._nDataBytes,i=8*e.sigBytes;return s[i>>>5]|=128<<24-i%32,s[14+(i+64>>>9<<4)]=Math.floor(t/4294967296),s[15+(i+64>>>9<<4)]=t,e.sigBytes=4*s.length,this._process(),this._hash}clone(){const e=super.clone.call(this);return e._hash=this._hash.clone(),e}}const y=a._createHelper(m),S=a._createHmacHelper(m),A={crypto:{hmac:function(e,s){return S(s,e)},sha256:function(e){return y(e)}},toQueryString:(e={})=>Object.keys(e).map((s=>`${s}=${e[s]}`)).join("&"),date:{iso8601:e=>(void 0===e&&(e=A.date.getDate()),e.toISOString().replace(/\.\d{3}Z$/,"Z"))}},_=["authorization","content-type","content-length","user-agent","presigned-expires","expect","x-amzn-trace-id"],C=e=>{try{return encodeURIComponent(e).replace(/[^A-Za-z0-9_.~\-%]+/g,escape).replace(/[*]/g,(e=>`%${e.charCodeAt(0).toString(16).toUpperCase()}`))}catch(e){return""}},w=e=>Object.keys(e).sort().map((s=>{const t=e[s];if(null==t)return;const i=C(s);return i?Array.isArray(t)?`${i}=${t.map(C).sort().join(`&${i}=`)}`:`${i}=${C(t)}`:void 0})).filter((e=>e)).join("&");class b{constructor(e,s,t){this.request=e,this.request.headers=e.headers||{},this.serviceName=s,t=t||{},this.signatureCache="boolean"!=typeof t.signatureCache||t.signatureCache,this.operation=t.operation,this.signatureVersion=t.signatureVersion,this.constant=t.isVolcengine?{algorithm:"HMAC-SHA256",v4Identifier:"request",dateHeader:"X-Date",tokenHeader:"x-security-token",contentSha256Header:"X-Content-Sha256",kDatePrefix:""}:{algorithm:"AWS4-HMAC-SHA256",v4Identifier:"aws4_request",dateHeader:"X-Amz-Date",tokenHeader:"x-amz-security-token",contentSha256Header:"X-Amz-Content-Sha256",kDatePrefix:"AWS4"},this.bodySha256=t.bodySha256}addAuthorization(e,s){const t=this.iso8601(s).replace(/[:\-]|\.\d{3}/g,"");this.addHeaders(e,t),this.request.headers.Authorization=this.authorization(e,t)}addHeaders(e,s){if(this.request.headers[this.constant.dateHeader]=s,e.sessionToken&&(this.request.headers[this.constant.tokenHeader]=e.sessionToken),this.request.body){let e=this.request.body;"string"!=typeof e&&(e=e instanceof URLSearchParams?e.toString():JSON.stringify(e)),this.request.headers[this.constant.contentSha256Header]=this.bodySha256||A.crypto.sha256(e).toString()}}authorization(e,s){const t=[],i=this.credentialString(s);return t.push(`${this.constant.algorithm} Credential=${e.accessKeyId}/${i}`),t.push(`SignedHeaders=${this.signedHeaders()}`),t.push(`Signature=${this.signature(e,s)}`),t.join(", ")}signature(e,s){const t=this.getSigningKey(e,s.substr(0,8),this.request.region,this.serviceName,this.signatureCache);return A.crypto.hmac(t,this.stringToSign(s),"hex")}stringToSign(e){const s=[];return s.push(this.constant.algorithm),s.push(e),s.push(this.credentialString(e)),s.push(this.hexEncodedHash(this.canonicalString())),s.join("\n")}canonicalString(){const e=[],s=this.request.pathname||"/";return e.push(this.request.method.toUpperCase()),e.push(s),e.push(w(this.request.params)||""),e.push(`${this.canonicalHeaders()}\n`),e.push(this.signedHeaders()),e.push(this.hexEncodedBodyHash()),e.join("\n")}canonicalHeaders(){const e=[];Object.keys(this.request.headers).forEach((s=>{e.push([s,this.request.headers[s]])})),e.sort(((e,s)=>e[0].toLowerCase()<s[0].toLowerCase()?-1:1));const s=[];return e.forEach((e=>{const t=e[0].toLowerCase();if(this.isSignableHeader(t)){const i=e[1];if(null==i||"function"!=typeof i.toString)throw new Error(`Header ${t} contains invalid value`);s.push(`${t}:${this.canonicalHeaderValues(i.toString())}`)}})),s.join("\n")}canonicalHeaderValues(e){return e.replace(/\s+/g," ").replace(/^\s+|\s+$/g,"")}signedHeaders(){const e=[];return Object.keys(this.request.headers).forEach((s=>{s=s.toLowerCase(),this.isSignableHeader(s)&&e.push(s)})),e.sort().join(";")}credentialString(e){return this.createScope(e.substr(0,8),this.request.region,this.serviceName)}hexEncodedHash(e){return A.crypto.sha256(e)}hexEncodedBodyHash(){return this.request.headers[this.constant.contentSha256Header]?this.request.headers[this.constant.contentSha256Header]:this.request.body?this.hexEncodedHash(w(this.request.body)):this.hexEncodedHash("")}isSignableHeader(e){return 0===e.toLowerCase().indexOf("x-amz-")||_.indexOf(e)<0}iso8601(e){return void 0===e&&(e=new Date),e.toISOString().replace(/\.\d{3}Z$/,"Z")}getSigningKey(e,s,t,i){const o=A.crypto.hmac(`${this.constant.kDatePrefix}${e.secretAccessKey}`,s),n=A.crypto.hmac(o,t),r=A.crypto.hmac(n,i);return A.crypto.hmac(r,this.constant.v4Identifier)}createScope(e,s,t){return[e.substr(0,8),s,t,this.constant.v4Identifier].join("/")}}const U={VIDEO:"video",IMAGE:"image",OBJECT:"object"},H={browserError:1e3,crc32:1e3,preUpload:1001,initUploadID:1002,process:1003,fileMerge:1004,complete:1005},I={success:0,error:1,cancel:2,pause:3},T={cn:"cn-north-1",us:"us-east-1",sg:"ap-singapore-1","cn-north-1":"cn-north-1","us-east-1":"us-east-1","ap-singapore-1":"ap-singapore-1"},v={"cn-north-1":"https://vod.volcengineapi.com","us-east-1":"https://vod-us-east-1.volcengineapi.com","ap-singapore-1":"https://vod-ap-singapore-1.volcengineapi.com"},x={"cn-north-1":"https://imagex.volcengineapi.com","us-east-1":"https://imagex-us-east-1.volcengineapi.com","ap-singapore-1":"https://imagex-ap-singapore-1.volcengineapi.com"};e.IMAGEX_REGION_DOMAIN=x,e.UPLOAD_REGION=T,e.UPLOAD_STAGE=H,e.UPLOAD_STATUS=I,e.UPLOAD_TYPE=U,e.VOD_REGION_DOMAIN=v,e.default=class{constructor(e){this.config=Object.assign({region:"cn-north-1",userId:"",appId:"",imageConfig:{serviceId:""},videoConfig:{spaceName:""}},e)}start(e){this.options=Object.assign({path:"",size:0,type:"video",stsToken:{},correctTime:null,success:()=>{},fail:()=>{},progress:()=>{}},e),this.result={},this.successProcess=this.options.success,this.failProcess=this.options.fail,this.progressProcess=this.options.progress,Date.parse(this.options.correctTime)?this.timeGap=Math.abs(new Date(this.options.correctTime)-new Date)>6e4?new Date(this.options.correctTime)-new Date:0:this.options.correctTime?(this.timeGap=0,console.warn("The correctTime's format is incorrect")):this.timeGap=0,this.preUpload()}preUpload(){let e;const s=T[this.config.region],t="image"===this.options.type?x[s]:v[s];console.log(s,t);const i="image"===this.options.type?"imagex":"vod";if("image"===this.options.type)e={Action:"ApplyImageUpload",Version:"2018-08-01",ServiceId:this.config.imageConfig.serviceId};else{let s=this.config.videoConfig&&this.config.videoConfig.spaceName;this.options.type===U.OBJECT&&this.config.objectConfig&&this.config.objectConfig.spaceName&&(s=this.config.objectConfig.spaceName),e={Action:"ApplyUpload",Version:"2019-03-05",SpaceName:s,FileType:this.options.type,FileSize:this.options.size}}e.UseAppletsHosts=!0;const{AccessKeyId:o,AccessKeyID:n,SecretAccessKey:r,SessionToken:a}=this.options.stsToken,c={method:"GET",url:`${t}?${A.toQueryString(e)}`,region:s,params:e,success:e=>{try{const s=e.data;if(s.ResponseMetadata.Error)this.fail({message:"preload fail",res:e,stage:"preUpload",status:"error"});else{const{Result:e}=s,t=e.UploadAddress,{StoreInfos:i,UploadHosts:o,SessionKey:n,UploadHeader:r={}}=t;Object.assign(this.result,{signature:i[0].Auth,type:"success",extra:{message:"prepare upload success"},stage:"preUpload",oid:i[0].StoreUri,tosDomain:`https://${o[0]}`,UploadHeader:r,SessionKey:n}),this.log({message:"preUpload success",stage:"preUpload",status:"success"}),this.doUpload()}}catch(s){this.fail({message:"preload fail",err:s,res:e,stage:"preUpload",status:"error"})}},fail:e=>{this.fail({message:"preload fail",res:e,stage:"preUpload",status:"error"})}},h=new b(c,i,{isVolcengine:!0}),p=this.timeGap?new Date((new Date).getTime()+this.timeGap):new Date;h.addAuthorization({accessKeyId:o||n,secretAccessKey:r,sessionToken:a},p),c.header=c.headers,delete c.headers,uni.request(c)}doUpload(){this.uploadUrl=this.result.tosDomain+"/"+this.result.oid;const e=this.result.oid.split("/")[1],s={url:this.uploadUrl,filePath:this.options.path,name:e,header:{Authorization:this.result.signature||"","Content-CRC32":"Ignore"},success:e=>{200===e.statusCode?(e.data&&e.data.payload&&(this.result.oid=e.data.payload.key,this.result.hash=e.data.payload.hash),this.commitUpload(),this.log({message:"upload success",stage:"process",status:"success"})):this.fail({message:"upload fail",res:e,stage:"process",status:"error"})},fail:e=>{this.fail({message:"upload fail",res:e,stage:"process",status:"error"})}};this.uploadTask=uni.uploadFile(s),this.uploadTask.onProgressUpdate((e=>{this.progressProcess(e)}))}commitUpload(){let e,s;const t=T[this.config.region],i="image"===this.options.type?x[t]:v[t],o="image"===this.options.type?"imagex":"vod";if("image"===this.options.type)e={Action:"CommitImageUpload",Version:"2018-08-01",SessionKey:this.result.SessionKey,ServiceId:this.config.imageConfig.serviceId};else{let t=this.config.videoConfig&&this.config.videoConfig.spaceName;this.options.type===U.OBJECT&&this.config.objectConfig&&this.config.objectConfig.spaceName&&(t=this.config.objectConfig.spaceName),e={Action:"CommitUpload",Version:"2019-03-05",SpaceName:t},s={SessionKey:this.result.SessionKey,Functions:[]};let i=this.config.videoConfig&&this.config.videoConfig.processAction;this.options.type===U.OBJECT&&this.config.objectConfig&&this.config.objectConfig.processAction&&(i=this.config.objectConfig.processAction),Array.isArray(i)&&i.length>0&&(s.Functions=i)}const n=A.toQueryString(e),{AccessKeyId:r,AccessKeyID:a,SecretAccessKey:c,SessionToken:h}=this.options.stsToken,p={method:"POST",url:`${i}?${n}`,timeout:3e4,region:t,params:e,success:e=>{try{const s=e.data;if(s.ResponseMetadata.Error)this.fail({message:"commit upload failed",res:e,stage:"complete",status:"error"});else{const{Result:t}=s,i=t.Results[0];this.options.type===U.IMAGE&&Object.assign(i,t.PluginResult&&t.PluginResult[0]),Object.assign(this.result,{stage:"complete",type:"success",percent:100,extra:{message:"upload successful"},uploadResult:i}),this.success(i),this.log({message:"commit upload success",res:e,stage:"complete",status:"success"})}}catch(s){this.fail({message:"commit upload failed when parse data",err:s,res:e,stage:"complete",status:"error"})}},fail:e=>{this.fail({message:"commit upload fail",res:e,stage:"complete",status:"error"})}};if(s){const e=JSON.stringify(s);p.data=s,p.headers["X-Amz-Content-Sha256"]=A.crypto.sha256(e).toString()}const l=new b(p,o,{isVolcengine:!0}),d=this.timeGap?new Date((new Date).getTime()+this.timeGap):new Date;l.addAuthorization({accessKeyId:r||a,secretAccessKey:c,sessionToken:h},d),p.header=p.headers,delete p.headers,uni.request(p)}success(e){this.successProcess(e)}fail(e){this.failProcess(e),this.log(e)}log(e){this.logUrl=this.config.logDomain+this.config.uploadLogUrl;const s={extra:{},file_size:this.options.size,msg:e.message,oid:this.result.oid,sdk_version:"xcx_0.0.1",uid:this.config.userId||"",appId:this.config.appId||"",type:this.options.type,stage:H[e.stage],status:I[e.status],res:e.res||""},t={method:"POST",url:this.logUrl,header:{"Content-Type":"application/json","X-TT-Access":this.config.access_key,Authorization:this.options.auth},data:s,success(e){},fail(e){}};uni.request(t)}},Object.defineProperty(e,"__esModule",{value:!0})}));
|