@bnfe/obs-upload 1.0.1 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,7 +1,5 @@
1
1
  # @bnfe/obs-upload
2
2
 
3
- 华为云 OBS 浏览器上传包,使用方式参照 `@bnfe/oss-upload`。
4
-
5
3
  ## 安装
6
4
 
7
5
  ```sh
@@ -130,7 +128,7 @@ const upload = (file: File) =>
130
128
  ```ts
131
129
  type ResParamsTypes = {
132
130
  cdnUrl: string; // CDN 文件访问 URL
133
- ossUrl: string; // OBS Location;直接上传无 Location 时使用桶 Endpoint URL
131
+ ossUrl: string; // 完整 OBS URL;Location 为相对路径或缺失时使用桶 Endpoint URL
134
132
  fileName: string; // 完整对象 Key
135
133
  ossResParams: any; // 华为云 SDK 原始响应
136
134
  };
@@ -150,7 +148,7 @@ pnpm --filter @bnfe/obs-upload build
150
148
 
151
149
  浏览器跨域上传需要桶配置对应来源的 CORS 规则,并将 `ETag` 添加到暴露的响应头,使 SDK 可以读取分段 ETag 完成合并。
152
150
 
153
- 客户端固定使用 OBS 签名,关闭签名版本协商,不发起 `?apiversion` 探测。桶的 CORS 仍需允许实际页面来源(本地示例为 `http://localhost:8080`)、`PUT`、`GET`、`POST`、`DELETE`、`HEAD` 方法及上传请求头;允许的请求头可设置为 `*`。
151
+ 客户端固定使用 OBS 签名,关闭签名版本协商,不发起 `?apiversion` 探测。桶的 CORS 仍需允许实际页面来源(设置为*)、`PUT`、`GET`、`POST`、`DELETE`、`HEAD` 方法及上传请求头;允许的请求头可设置为 `*`。
154
152
 
155
153
  - [文件上传](https://support.huaweicloud.com/sdk-browserjs-devg-obs/obs_24_0503.html)
156
154
  - [分段上传](https://support.huaweicloud.com/sdk-browserjs-devg-obs/obs_24_0507.html)
@@ -1,3 +1,3 @@
1
1
  "use strict";var e=require("esdk-obs-browserjs"),t=require("nanoid");function r(e){return r="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},r(e)}function n(e){var t=function(e,t){if("object"!=r(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var o=n.call(e,t);if("object"!=r(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e,"string");return"symbol"==r(t)?t:t+""}function o(e,t,r){return t&&function(e,t){for(var r=0;r<t.length;r++){var o=t[r];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,n(o.key),o)}}(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function i(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var a,u={exports:{}},s={exports:{}};(a=s).exports=function(e,t){this.v=e,this.k=t},a.exports.__esModule=!0,a.exports.default=a.exports;var c=s.exports,l={exports:{}},p={exports:{}};!function(e){function t(r,n,o,i){var a=Object.defineProperty;try{a({},"",{})}catch(r){a=0}e.exports=t=function(e,r,n,o){function i(r,n){t(e,r,function(e){return this._invoke(r,n,e)})}r?a?a(e,r,{value:n,enumerable:!o,configurable:!o,writable:!o}):e[r]=n:(i("next",0),i("throw",1),i("return",2))},e.exports.__esModule=!0,e.exports.default=e.exports,t(r,n,o,i)}e.exports=t,e.exports.__esModule=!0,e.exports.default=e.exports}(p);var f=p.exports;!function(e){var t=f;function r(){
2
2
  /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */
3
- var n,o,i="function"==typeof Symbol?Symbol:{},a=i.iterator||"@@iterator",u=i.toStringTag||"@@toStringTag";function s(e,r,i,a){var u=r&&r.prototype instanceof l?r:l,s=Object.create(u.prototype);return t(s,"_invoke",function(e,t,r){var i,a,u,s=0,l=r||[],p=!1,f={p:0,n:0,v:n,a:d,f:d.bind(n,4),d:function(e,t){return i=e,a=0,u=n,f.n=t,c}};function d(e,t){for(a=e,u=t,o=0;!p&&s&&!r&&o<l.length;o++){var r,i=l[o],d=f.p,v=i[2];e>3?(r=v===t)&&(u=i[(a=i[4])?5:(a=3,3)],i[4]=i[5]=n):i[0]<=d&&((r=e<2&&d<i[1])?(a=0,f.v=t,f.n=i[1]):d<v&&(r=e<3||i[0]>t||t>v)&&(i[4]=e,i[5]=t,f.n=v,a=0))}if(r||e>1)return c;throw p=!0,t}return function(r,l,v){if(s>1)throw TypeError("Generator is already running");for(p&&1===l&&d(l,v),a=l,u=v;(o=a<2?n:u)||!p;){i||(a?a<3?(a>1&&(f.n=-1),d(a,u)):f.n=u:f.v=u);try{if(s=2,i){if(a||(r="next"),o=i[r]){if(!(o=o.call(i,u)))throw TypeError("iterator result is not an object");if(!o.done)return o;u=o.value,a<2&&(a=0)}else 1===a&&(o=i.return)&&o.call(i),a<2&&(u=TypeError("The iterator does not provide a '"+r+"' method"),a=1);i=n}else if((o=(p=f.n<0)?u:e.call(t,f))!==c)break}catch(e){i=n,a=1,u=e}finally{s=1}}return{value:o,done:p}}}(e,i,a),!0),s}var c={};function l(){}function p(){}function f(){}o=Object.getPrototypeOf;var d=[][a]?o(o([][a]())):(t(o={},a,function(){return this}),o),v=f.prototype=l.prototype=Object.create(d);function h(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,f):(e.__proto__=f,t(e,u,"GeneratorFunction")),e.prototype=Object.create(v),e}return p.prototype=f,t(v,"constructor",f),t(f,"constructor",p),p.displayName="GeneratorFunction",t(f,u,"GeneratorFunction"),t(v),t(v,u,"Generator"),t(v,a,function(){return this}),t(v,"toString",function(){return"[object Generator]"}),(e.exports=r=function(){return{w:s,m:h}},e.exports.__esModule=!0,e.exports.default=e.exports)()}e.exports=r,e.exports.__esModule=!0,e.exports.default=e.exports}(l);var d=l.exports,v={exports:{}},h={exports:{}},x={exports:{}};!function(e){var t=c,r=f;e.exports=function e(n,o){function i(e,r,a,u){try{var s=n[e](r),c=s.value;return c instanceof t?o.resolve(c.v).then(function(e){i("next",e,a,u)},function(e){i("throw",e,a,u)}):o.resolve(c).then(function(e){s.value=e,a(s)},function(e){return i("throw",e,a,u)})}catch(e){u(e)}}var a;this.next||(r(e.prototype),r(e.prototype,"function"==typeof Symbol&&Symbol.asyncIterator||"@asyncIterator",function(){return this})),r(this,"_invoke",function(e,t,r){function n(){return new o(function(t,n){i(e,r,t,n)})}return a=a?a.then(n,n):n()},!0)},e.exports.__esModule=!0,e.exports.default=e.exports}(x);var y=x.exports;!function(e){var t=d,r=y;e.exports=function(e,n,o,i,a){return new r(t().w(e,n,o,i),a||Promise)},e.exports.__esModule=!0,e.exports.default=e.exports}(h);var b=h.exports;!function(e){var t=b;e.exports=function(e,r,n,o,i){var a=t(e,r,n,o,i);return a.next().then(function(e){return e.done?e.value:a.next()})},e.exports.__esModule=!0,e.exports.default=e.exports}(v);var m=v.exports,w={exports:{}};!function(e){e.exports=function(e){var t=Object(e),r=[];for(var n in t)r.unshift(n);return function e(){for(;r.length;)if((n=r.pop())in t)return e.value=n,e.done=!1,e;return e.done=!0,e}},e.exports.__esModule=!0,e.exports.default=e.exports}(w);var g=w.exports,k={exports:{}},S={exports:{}};!function(e){function t(r){return e.exports=t="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,t(r)}e.exports=t,e.exports.__esModule=!0,e.exports.default=e.exports}(S);var _=S.exports;!function(e){var t=_.default;e.exports=function(e){if(null!=e){var r=e["function"==typeof Symbol&&Symbol.iterator||"@@iterator"],n=0;if(r)return r.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length))return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}}}throw new TypeError(t(e)+" is not iterable")},e.exports.__esModule=!0,e.exports.default=e.exports}(k);var M=k.exports;!function(e){var t=c,r=d,n=m,o=b,i=y,a=g,u=M;function s(){var c=r(),l=c.m(s),p=(Object.getPrototypeOf?Object.getPrototypeOf(l):l.__proto__).constructor;function f(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))}var d={throw:1,return:2,break:3,continue:3};function v(e){var t,r;return function(n){t||(t={stop:function(){return r(n.a,2)},catch:function(){return n.v},abrupt:function(e,t){return r(n.a,d[e],t)},delegateYield:function(e,o,i){return t.resultName=o,r(n.d,u(e),i)},finish:function(e){return r(n.f,e)}},r=function(e,r,o){n.p=t.prev,n.n=t.next;try{return e(r,o)}finally{t.next=n.n}}),t.resultName&&(t[t.resultName]=n.v,t.resultName=void 0),t.sent=n.v,t.next=n.n;try{return e.call(this,t)}finally{n.p=t.prev,n.n=t.next}}}return(e.exports=s=function(){return{wrap:function(e,t,r,n){return c.w(v(e),t,r,n&&n.reverse())},isGeneratorFunction:f,mark:c.m,awrap:function(e,r){return new t(e,r)},AsyncIterator:i,async:function(e,t,r,i,a){return(f(t)?o:n)(v(e),t,r,i,a)},keys:a,values:u}},e.exports.__esModule=!0,e.exports.default=e.exports)()}e.exports=s,e.exports.__esModule=!0,e.exports.default=e.exports}(u);var O=(0,u.exports)(),j=O;try{regeneratorRuntime=O}catch(e){"object"===("undefined"==typeof globalThis?"undefined":r(globalThis))?globalThis.regeneratorRuntime=O:Function("r","regeneratorRuntime = r")(O)}var P=i(j);function U(e,t,r,n){return new(r||(r=Promise))(function(o,i){function a(e){try{s(n.next(e))}catch(e){i(e)}}function u(e){try{s(n.throw(e))}catch(e){i(e)}}function s(e){var t;e.done?o(e.value):(t=e.value,t instanceof r?t:new r(function(e){e(t)})).then(a,u)}s((n=n.apply(e,t||[])).next())})}"function"==typeof SuppressedError&&SuppressedError;var E=5368709120,T=102400,C=function(){return o(function e(t){var r,n,o,i;if(function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.ossParams=null,this.expiresAt=0,this.tokenRequest=null,this.reqUrl=t.reqUrl,this.expire=null!==(r=t.expire)&&void 0!==r?r:3600,this.dir=null!==(n=t.dir)&&void 0!==n?n:"public",this.multipartUploadSize=null!==(o=t.multipartUploadSize)&&void 0!==o?o:104857600,this.multipartUploadParams=null!==(i=t.multipartUploadParams)&&void 0!==i?i:{},!Number.isFinite(this.expire)||this.expire<=0)throw new Error("expire 必须为大于 0 的秒数");if(!Number.isFinite(this.multipartUploadSize)||this.multipartUploadSize<0)throw new Error("multipartUploadSize 必须为非负字节数")},[{key:"getToken",value:function(){return U(this,arguments,void 0,function(){var t=this,r=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return P.mark(function n(){return P.wrap(function(n){for(;;)switch(n.prev=n.next){case 0:if(t.reqUrl){n.next=1;break}throw new Error("请求token的地址不存在");case 1:if(!t.tokenRequest){n.next=2;break}return n.abrupt("return",t.tokenRequest);case 2:return t.tokenRequest=function(){return U(t,void 0,void 0,P.mark(function t(){var n,o,i,a,u,s,c,l,p,f,d,v;return P.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return(u=new URL(this.reqUrl,null===(n=globalThis.location)||void 0===n?void 0:n.href)).searchParams.set("expire",String(this.expire)),t.next=1,fetch(u.toString());case 1:if((s=t.sent).ok){t.next=2;break}throw new Error("获取 OBS 临时凭证失败:HTTP ".concat(s.status));case 2:return t.next=3,s.json();case 3:if(c=t.sent,l=c.data,p=null!==(o=null==l?void 0:l.securityToken)&&void 0!==o?o:null==l?void 0:l.stsToken,(null==l?void 0:l.host)&&l.endpoint&&l.bucket&&l.accessKeyId&&l.accessKeySecret&&p){t.next=4;break}throw new Error("OBS 临时凭证缺少必要字段");case 4:if(f=new URL(l.endpoint),/^https?:$/.test(f.protocol)){t.next=5;break}throw new Error("OBS endpoint 必须为 HTTP 或 HTTPS Endpoint");case 5:if(d=Date.now(),v=l.expiration?Date.parse(l.expiration):d+1e3*this.expire,Number.isFinite(v)&&!(v<=d)){t.next=6;break}throw new Error("OBS 临时凭证过期时间无效或已过期");case 6:return r||!this.client||(null===(i=this.ossParams)||void 0===i?void 0:i.endpoint)!==l.endpoint||(null===(a=this.ossParams)||void 0===a?void 0:a.bucket)!==l.bucket?this.client=new e({access_key_id:l.accessKeyId,secret_access_key:l.accessKeySecret,security_token:p,server:l.endpoint,signature:"obs",is_signature_negotiation:!1}):this.client.refresh(l.accessKeyId,l.accessKeySecret,p),this.ossParams=l,this.expiresAt=v-Math.min(6e4,.1*(v-d)),t.abrupt("return",l);case 7:case"end":return t.stop()}},t,this)}))}(),n.prev=3,n.next=4,t.tokenRequest;case 4:return n.abrupt("return",n.sent);case 5:return n.prev=5,t.tokenRequest=null,n.finish(5);case 6:case"end":return n.stop()}},n,null,[[3,,5,6]])})()})}},{key:"getContext",value:function(e){return U(this,void 0,void 0,P.mark(function t(){return P.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:if(e){t.next=1;break}throw new Error("文件不存在");case 1:if(this.reqUrl){t.next=2;break}throw new Error("请求token的地址不存在");case 2:if(this.client&&!(Date.now()>=this.expiresAt)){t.next=3;break}return t.next=3,this.getToken();case 3:return t.abrupt("return",{client:this.client,token:this.ossParams});case 4:case"end":return t.stop()}},t,this)}))}},{key:"upload",value:function(e){return U(this,arguments,void 0,function(e){var t=this,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2?arguments[2]:void 0;return P.mark(function o(){var i;return P.wrap(function(o){for(;;)switch(o.prev=o.next){case 0:if(e){o.next=1;break}throw new Error("文件不存在");case 1:if(!((i=Object.assign(Object.assign({},t.multipartUploadParams),n)).checkpoint||e.size>t.multipartUploadSize||e.size>E)){o.next=2;break}return o.abrupt("return",t.multipartUpload(e,r,i));case 2:return o.abrupt("return",t.directUpload(e,r));case 3:case"end":return o.stop()}},o)})()})}},{key:"directUpload",value:function(e){return U(this,arguments,void 0,function(e){var t=this,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return P.mark(function n(){var o,i,a,u,s;return P.wrap(function(n){for(;;)switch(n.prev=n.next){case 0:if(e){n.next=1;break}throw new Error("文件不存在");case 1:if(!(e.size>E)){n.next=2;break}throw new Error("文件大小不能超过5GB");case 2:return n.next=3,t.getContext(e);case 3:return o=n.sent,i=o.client,a=o.token,u=t.getName(r,e),n.next=4,i.putObject(Object.assign({Bucket:a.bucket,Key:u,SourceFile:e},e.type?{ContentType:e.type}:{}));case 4:return s=n.sent,n.abrupt("return",t.getResult(s,u,a));case 5:case"end":return n.stop()}},n)})()})}},{key:"multipartUpload",value:function(e){return U(this,arguments,void 0,function(e){var t=this,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2?arguments[2]:void 0;return P.mark(function o(){var i,a,u,s,c,l,p,f,d,v,h,x,y,b,m,w,g,k,S,_;return P.wrap(function(o){for(;;)switch(o.prev=o.next){case 0:if(e){o.next=1;break}throw new Error("文件不存在");case 1:if(!(e.size>536870912e5)){o.next=2;break}throw new Error("文件超过 OBS 分段上传上限");case 2:if((f=Object.assign(Object.assign({},t.multipartUploadParams),n)).checkpoint||!(e.size<T)){o.next=3;break}return o.abrupt("return",t.directUpload(e,r));case 3:if(d=null!==(i=f.parallel)&&void 0!==i?i:5,v=null!==(a=f.partSize)&&void 0!==a?a:1048576,Number.isInteger(d)&&!(d<1)){o.next=4;break}throw new Error("parallel 必须为大于 0 的整数");case 4:if(!(!Number.isInteger(v)||v<T||v>E)){o.next=5;break}throw new Error("partSize 必须为 100KB~5GB 的整数字节数");case 5:return o.next=6,t.getContext(e);case 6:if(h=o.sent,x=h.client,y=h.token,!(b=f.checkpoint)||b.key&&b.bucket===y.bucket&&(null===(u=b.sourceFile)||void 0===u?void 0:u.name)===e.name&&(null===(s=b.fileStat)||void 0===s?void 0:s.fileSize)===e.size&&(null===(c=b.fileStat)||void 0===c?void 0:c.lastModified)===e.lastModified){o.next=7;break}throw new Error("checkpoint 与当前文件或 OBS 桶不匹配");case 7:return m=null!==(l=null==b?void 0:b.key)&&void 0!==l?l:t.getName(r,e),w=t.getCdnUrl(y.host,m),g=0,o.next=8,x.uploadFile(Object.assign(Object.assign({Bucket:y.bucket,Key:m,SourceFile:e,TaskNum:d,PartSize:v},e.type?{ContentType:e.type}:{}),{UploadCheckpoint:b,ResumeCallback:function(e,t){var r,n;b=t;var o=t.parts.reduce(function(e,t){return e+(t.isCompleted?t.partSize:0)},0);g=t.fileStat.fileSize>0?Math.min(1,Math.max(0,o/t.fileStat.fileSize)):0,null===(r=f.resumeCallback)||void 0===r||r.call(f,e,t),null===(n=f.progress)||void 0===n||n.call(f,g,w,t,k)},ProgressCallback:function(e,t){var r;g=t>0?Math.min(1,Math.max(0,e/t)):0,null===(r=f.progress)||void 0===r||r.call(f,g,w,b,k)},EventCallback:function(e,t,r){var n,o;k=r,null===(n=f.eventCallback)||void 0===n||n.call(f,e,t,r),"uploadPartSucceed"===e&&(null===(o=f.progress)||void 0===o||o.call(f,g,w,b,r))}}));case 8:return S=o.sent,_=t.getResult(S,m,y),null===(p=f.progress)||void 0===p||p.call(f,1,w,b,S),o.abrupt("return",_);case 9:case"end":return o.stop()}},o)})()})}},{key:"getResult",value:function(e,t,r){var n,o,i,a,u,s,c,l=null===(n=null==e?void 0:e.CommonMsg)||void 0===n?void 0:n.Status;if(!(l>=200&&l<300)){var p=new Error("OBS 上传失败:".concat(null!==(a=null!==(i=null===(o=null==e?void 0:e.CommonMsg)||void 0===o?void 0:o.Code)&&void 0!==i?i:l)&&void 0!==a?a:"未知状态"," ").concat(null!==(s=null===(u=null==e?void 0:e.CommonMsg)||void 0===u?void 0:u.Message)&&void 0!==s?s:""));throw Object.assign(p,{ossResParams:e}),p}var f=new URL(r.endpoint);return f.hostname="".concat(r.bucket,".").concat(f.hostname),f.pathname="/".concat(t.split("/").map(encodeURIComponent).join("/")),f.search="",f.hash="",{cdnUrl:this.getCdnUrl(r.host,t),ossUrl:(null===(c=e.InterfaceResult)||void 0===c?void 0:c.Location)||f.toString(),fileName:t,ossResParams:e}}},{key:"getCdnUrl",value:function(e,t){return"".concat(e.replace(/\/+$/,""),"/").concat(t.split("/").map(encodeURIComponent).join("/"))}},{key:"getYYYYMMDDHHMMSS",value:function(e){var t=e||new Date,r=t.getFullYear(),n=String(t.getMonth()+1).padStart(2,"0"),o=String(t.getDate()).padStart(2,"0"),i=String(t.getHours()).padStart(2,"0"),a=String(t.getMinutes()).padStart(2,"0"),u=String(t.getSeconds()).padStart(2,"0");return"".concat(r).concat(n).concat(o).concat(i).concat(a).concat(u)}},{key:"getSafeFileExtension",value:function(e){var t=e.match(/\.([a-zA-Z0-9]+)$/);return t?t[1].replace(/[^a-zA-Z0-9]/g,"").toLowerCase():""}},{key:"getName",value:function(e,r){var n="".concat(this.dir).concat(e).replace(/\/+$/,""),o=this.getYYYYMMDDHHMMSS(),i=this.getSafeFileExtension(r.name);return"hw-oss-web".concat(n,"/").concat(o,"_").concat(t.nanoid(16)).concat(i?"."+i:"")}}])}();exports.HwOss=C;
3
+ var n,o,i="function"==typeof Symbol?Symbol:{},a=i.iterator||"@@iterator",u=i.toStringTag||"@@toStringTag";function s(e,r,i,a){var u=r&&r.prototype instanceof l?r:l,s=Object.create(u.prototype);return t(s,"_invoke",function(e,t,r){var i,a,u,s=0,l=r||[],p=!1,f={p:0,n:0,v:n,a:d,f:d.bind(n,4),d:function(e,t){return i=e,a=0,u=n,f.n=t,c}};function d(e,t){for(a=e,u=t,o=0;!p&&s&&!r&&o<l.length;o++){var r,i=l[o],d=f.p,v=i[2];e>3?(r=v===t)&&(u=i[(a=i[4])?5:(a=3,3)],i[4]=i[5]=n):i[0]<=d&&((r=e<2&&d<i[1])?(a=0,f.v=t,f.n=i[1]):d<v&&(r=e<3||i[0]>t||t>v)&&(i[4]=e,i[5]=t,f.n=v,a=0))}if(r||e>1)return c;throw p=!0,t}return function(r,l,v){if(s>1)throw TypeError("Generator is already running");for(p&&1===l&&d(l,v),a=l,u=v;(o=a<2?n:u)||!p;){i||(a?a<3?(a>1&&(f.n=-1),d(a,u)):f.n=u:f.v=u);try{if(s=2,i){if(a||(r="next"),o=i[r]){if(!(o=o.call(i,u)))throw TypeError("iterator result is not an object");if(!o.done)return o;u=o.value,a<2&&(a=0)}else 1===a&&(o=i.return)&&o.call(i),a<2&&(u=TypeError("The iterator does not provide a '"+r+"' method"),a=1);i=n}else if((o=(p=f.n<0)?u:e.call(t,f))!==c)break}catch(e){i=n,a=1,u=e}finally{s=1}}return{value:o,done:p}}}(e,i,a),!0),s}var c={};function l(){}function p(){}function f(){}o=Object.getPrototypeOf;var d=[][a]?o(o([][a]())):(t(o={},a,function(){return this}),o),v=f.prototype=l.prototype=Object.create(d);function h(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,f):(e.__proto__=f,t(e,u,"GeneratorFunction")),e.prototype=Object.create(v),e}return p.prototype=f,t(v,"constructor",f),t(f,"constructor",p),p.displayName="GeneratorFunction",t(f,u,"GeneratorFunction"),t(v),t(v,u,"Generator"),t(v,a,function(){return this}),t(v,"toString",function(){return"[object Generator]"}),(e.exports=r=function(){return{w:s,m:h}},e.exports.__esModule=!0,e.exports.default=e.exports)()}e.exports=r,e.exports.__esModule=!0,e.exports.default=e.exports}(l);var d=l.exports,v={exports:{}},h={exports:{}},x={exports:{}};!function(e){var t=c,r=f;e.exports=function e(n,o){function i(e,r,a,u){try{var s=n[e](r),c=s.value;return c instanceof t?o.resolve(c.v).then(function(e){i("next",e,a,u)},function(e){i("throw",e,a,u)}):o.resolve(c).then(function(e){s.value=e,a(s)},function(e){return i("throw",e,a,u)})}catch(e){u(e)}}var a;this.next||(r(e.prototype),r(e.prototype,"function"==typeof Symbol&&Symbol.asyncIterator||"@asyncIterator",function(){return this})),r(this,"_invoke",function(e,t,r){function n(){return new o(function(t,n){i(e,r,t,n)})}return a=a?a.then(n,n):n()},!0)},e.exports.__esModule=!0,e.exports.default=e.exports}(x);var y=x.exports;!function(e){var t=d,r=y;e.exports=function(e,n,o,i,a){return new r(t().w(e,n,o,i),a||Promise)},e.exports.__esModule=!0,e.exports.default=e.exports}(h);var b=h.exports;!function(e){var t=b;e.exports=function(e,r,n,o,i){var a=t(e,r,n,o,i);return a.next().then(function(e){return e.done?e.value:a.next()})},e.exports.__esModule=!0,e.exports.default=e.exports}(v);var m=v.exports,g={exports:{}};!function(e){e.exports=function(e){var t=Object(e),r=[];for(var n in t)r.unshift(n);return function e(){for(;r.length;)if((n=r.pop())in t)return e.value=n,e.done=!1,e;return e.done=!0,e}},e.exports.__esModule=!0,e.exports.default=e.exports}(g);var w=g.exports,k={exports:{}},S={exports:{}};!function(e){function t(r){return e.exports=t="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,t(r)}e.exports=t,e.exports.__esModule=!0,e.exports.default=e.exports}(S);var _=S.exports;!function(e){var t=_.default;e.exports=function(e){if(null!=e){var r=e["function"==typeof Symbol&&Symbol.iterator||"@@iterator"],n=0;if(r)return r.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length))return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}}}throw new TypeError(t(e)+" is not iterable")},e.exports.__esModule=!0,e.exports.default=e.exports}(k);var M=k.exports;!function(e){var t=c,r=d,n=m,o=b,i=y,a=w,u=M;function s(){var c=r(),l=c.m(s),p=(Object.getPrototypeOf?Object.getPrototypeOf(l):l.__proto__).constructor;function f(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))}var d={throw:1,return:2,break:3,continue:3};function v(e){var t,r;return function(n){t||(t={stop:function(){return r(n.a,2)},catch:function(){return n.v},abrupt:function(e,t){return r(n.a,d[e],t)},delegateYield:function(e,o,i){return t.resultName=o,r(n.d,u(e),i)},finish:function(e){return r(n.f,e)}},r=function(e,r,o){n.p=t.prev,n.n=t.next;try{return e(r,o)}finally{t.next=n.n}}),t.resultName&&(t[t.resultName]=n.v,t.resultName=void 0),t.sent=n.v,t.next=n.n;try{return e.call(this,t)}finally{n.p=t.prev,n.n=t.next}}}return(e.exports=s=function(){return{wrap:function(e,t,r,n){return c.w(v(e),t,r,n&&n.reverse())},isGeneratorFunction:f,mark:c.m,awrap:function(e,r){return new t(e,r)},AsyncIterator:i,async:function(e,t,r,i,a){return(f(t)?o:n)(v(e),t,r,i,a)},keys:a,values:u}},e.exports.__esModule=!0,e.exports.default=e.exports)()}e.exports=s,e.exports.__esModule=!0,e.exports.default=e.exports}(u);var O=(0,u.exports)(),U=O;try{regeneratorRuntime=O}catch(e){"object"===("undefined"==typeof globalThis?"undefined":r(globalThis))?globalThis.regeneratorRuntime=O:Function("r","regeneratorRuntime = r")(O)}var j=i(U);function P(e,t,r,n){return new(r||(r=Promise))(function(o,i){function a(e){try{s(n.next(e))}catch(e){i(e)}}function u(e){try{s(n.throw(e))}catch(e){i(e)}}function s(e){var t;e.done?o(e.value):(t=e.value,t instanceof r?t:new r(function(e){e(t)})).then(a,u)}s((n=n.apply(e,t||[])).next())})}"function"==typeof SuppressedError&&SuppressedError;var E=5368709120,T=102400,C=function(){return o(function e(t){var r,n,o,i;if(function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.ossParams=null,this.expiresAt=0,this.tokenRequest=null,this.reqUrl=t.reqUrl,this.expire=null!==(r=t.expire)&&void 0!==r?r:3600,this.dir=null!==(n=t.dir)&&void 0!==n?n:"public",this.multipartUploadSize=null!==(o=t.multipartUploadSize)&&void 0!==o?o:104857600,this.multipartUploadParams=null!==(i=t.multipartUploadParams)&&void 0!==i?i:{},!Number.isFinite(this.expire)||this.expire<=0)throw new Error("expire 必须为大于 0 的秒数");if(!Number.isFinite(this.multipartUploadSize)||this.multipartUploadSize<0)throw new Error("multipartUploadSize 必须为非负字节数")},[{key:"getToken",value:function(){return P(this,arguments,void 0,function(){var t=this,r=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return j.mark(function n(){return j.wrap(function(n){for(;;)switch(n.prev=n.next){case 0:if(t.reqUrl){n.next=1;break}throw new Error("请求token的地址不存在");case 1:if(!t.tokenRequest){n.next=2;break}return n.abrupt("return",t.tokenRequest);case 2:return t.tokenRequest=function(){return P(t,void 0,void 0,j.mark(function t(){var n,o,i,a,u,s,c,l,p,f,d,v;return j.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return(u=new URL(this.reqUrl,null===(n=globalThis.location)||void 0===n?void 0:n.href)).searchParams.set("expire",String(this.expire)),t.next=1,fetch(u.toString());case 1:if((s=t.sent).ok){t.next=2;break}throw new Error("获取 OBS 临时凭证失败:HTTP ".concat(s.status));case 2:return t.next=3,s.json();case 3:if(c=t.sent,l=c.data,p=null!==(o=null==l?void 0:l.securityToken)&&void 0!==o?o:null==l?void 0:l.stsToken,(null==l?void 0:l.host)&&l.endpoint&&l.bucket&&l.accessKeyId&&l.accessKeySecret&&p){t.next=4;break}throw new Error("OBS 临时凭证缺少必要字段");case 4:if(f=new URL(l.endpoint),/^https?:$/.test(f.protocol)){t.next=5;break}throw new Error("OBS endpoint 必须为 HTTP 或 HTTPS Endpoint");case 5:if(d=Date.now(),v=l.expiration?Date.parse(l.expiration):d+1e3*this.expire,Number.isFinite(v)&&!(v<=d)){t.next=6;break}throw new Error("OBS 临时凭证过期时间无效或已过期");case 6:return r||!this.client||(null===(i=this.ossParams)||void 0===i?void 0:i.endpoint)!==l.endpoint||(null===(a=this.ossParams)||void 0===a?void 0:a.bucket)!==l.bucket?this.client=new e({access_key_id:l.accessKeyId,secret_access_key:l.accessKeySecret,security_token:p,server:l.endpoint,signature:"obs",is_signature_negotiation:!1}):this.client.refresh(l.accessKeyId,l.accessKeySecret,p),this.ossParams=l,this.expiresAt=v-Math.min(6e4,.1*(v-d)),t.abrupt("return",l);case 7:case"end":return t.stop()}},t,this)}))}(),n.prev=3,n.next=4,t.tokenRequest;case 4:return n.abrupt("return",n.sent);case 5:return n.prev=5,t.tokenRequest=null,n.finish(5);case 6:case"end":return n.stop()}},n,null,[[3,,5,6]])})()})}},{key:"getContext",value:function(e){return P(this,void 0,void 0,j.mark(function t(){return j.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:if(e){t.next=1;break}throw new Error("文件不存在");case 1:if(this.reqUrl){t.next=2;break}throw new Error("请求token的地址不存在");case 2:if(this.client&&!(Date.now()>=this.expiresAt)){t.next=3;break}return t.next=3,this.getToken();case 3:return t.abrupt("return",{client:this.client,token:this.ossParams});case 4:case"end":return t.stop()}},t,this)}))}},{key:"upload",value:function(e){return P(this,arguments,void 0,function(e){var t=this,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2?arguments[2]:void 0;return j.mark(function o(){var i;return j.wrap(function(o){for(;;)switch(o.prev=o.next){case 0:if(e){o.next=1;break}throw new Error("文件不存在");case 1:if(!((i=Object.assign(Object.assign({},t.multipartUploadParams),n)).checkpoint||e.size>t.multipartUploadSize||e.size>E)){o.next=2;break}return o.abrupt("return",t.multipartUpload(e,r,i));case 2:return o.abrupt("return",t.directUpload(e,r));case 3:case"end":return o.stop()}},o)})()})}},{key:"directUpload",value:function(e){return P(this,arguments,void 0,function(e){var t=this,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return j.mark(function n(){var o,i,a,u,s;return j.wrap(function(n){for(;;)switch(n.prev=n.next){case 0:if(e){n.next=1;break}throw new Error("文件不存在");case 1:if(!(e.size>E)){n.next=2;break}throw new Error("文件大小不能超过5GB");case 2:return n.next=3,t.getContext(e);case 3:return o=n.sent,i=o.client,a=o.token,u=t.getName(r,e),n.next=4,i.putObject(Object.assign({Bucket:a.bucket,Key:u,SourceFile:e},e.type?{ContentType:e.type}:{}));case 4:return s=n.sent,n.abrupt("return",t.getResult(s,u,a));case 5:case"end":return n.stop()}},n)})()})}},{key:"multipartUpload",value:function(e){return P(this,arguments,void 0,function(e){var t=this,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2?arguments[2]:void 0;return j.mark(function o(){var i,a,u,s,c,l,p,f,d,v,h,x,y,b,m,g,w,k,S,_;return j.wrap(function(o){for(;;)switch(o.prev=o.next){case 0:if(e){o.next=1;break}throw new Error("文件不存在");case 1:if(!(e.size>536870912e5)){o.next=2;break}throw new Error("文件超过 OBS 分段上传上限");case 2:if((f=Object.assign(Object.assign({},t.multipartUploadParams),n)).checkpoint||!(e.size<T)){o.next=3;break}return o.abrupt("return",t.directUpload(e,r));case 3:if(d=null!==(i=f.parallel)&&void 0!==i?i:5,v=null!==(a=f.partSize)&&void 0!==a?a:1048576,Number.isInteger(d)&&!(d<1)){o.next=4;break}throw new Error("parallel 必须为大于 0 的整数");case 4:if(!(!Number.isInteger(v)||v<T||v>E)){o.next=5;break}throw new Error("partSize 必须为 100KB~5GB 的整数字节数");case 5:return o.next=6,t.getContext(e);case 6:if(h=o.sent,x=h.client,y=h.token,!(b=f.checkpoint)||b.key&&b.bucket===y.bucket&&(null===(u=b.sourceFile)||void 0===u?void 0:u.name)===e.name&&(null===(s=b.fileStat)||void 0===s?void 0:s.fileSize)===e.size&&(null===(c=b.fileStat)||void 0===c?void 0:c.lastModified)===e.lastModified){o.next=7;break}throw new Error("checkpoint 与当前文件或 OBS 桶不匹配");case 7:return m=null!==(l=null==b?void 0:b.key)&&void 0!==l?l:t.getName(r,e),g=t.getCdnUrl(y.host,m),w=0,o.next=8,x.uploadFile(Object.assign(Object.assign({Bucket:y.bucket,Key:m,SourceFile:e,TaskNum:d,PartSize:v},e.type?{ContentType:e.type}:{}),{UploadCheckpoint:b,ResumeCallback:function(e,t){var r,n;b=t;var o=t.parts.reduce(function(e,t){return e+(t.isCompleted?t.partSize:0)},0);w=t.fileStat.fileSize>0?Math.min(1,Math.max(0,o/t.fileStat.fileSize)):0,null===(r=f.resumeCallback)||void 0===r||r.call(f,e,t),null===(n=f.progress)||void 0===n||n.call(f,w,g,t,k)},ProgressCallback:function(e,t){var r;w=t>0?Math.min(1,Math.max(0,e/t)):0,null===(r=f.progress)||void 0===r||r.call(f,w,g,b,k)},EventCallback:function(e,t,r){var n,o;k=r,null===(n=f.eventCallback)||void 0===n||n.call(f,e,t,r),"uploadPartSucceed"===e&&(null===(o=f.progress)||void 0===o||o.call(f,w,g,b,r))}}));case 8:return S=o.sent,_=t.getResult(S,m,y),null===(p=f.progress)||void 0===p||p.call(f,1,g,b,S),o.abrupt("return",_);case 9:case"end":return o.stop()}},o)})()})}},{key:"getResult",value:function(e,t,r){var n,o,i,a,u,s,c,l=null===(n=null==e?void 0:e.CommonMsg)||void 0===n?void 0:n.Status;if(!(l>=200&&l<300)){var p=new Error("OBS 上传失败:".concat(null!==(a=null!==(i=null===(o=null==e?void 0:e.CommonMsg)||void 0===o?void 0:o.Code)&&void 0!==i?i:l)&&void 0!==a?a:"未知状态"," ").concat(null!==(s=null===(u=null==e?void 0:e.CommonMsg)||void 0===u?void 0:u.Message)&&void 0!==s?s:""));throw Object.assign(p,{ossResParams:e}),p}var f=new URL(r.endpoint);f.hostname="".concat(r.bucket,".").concat(f.hostname),f.pathname="/".concat(t.split("/").map(encodeURIComponent).join("/")),f.search="",f.hash="";var d=null===(c=e.InterfaceResult)||void 0===c?void 0:c.Location,v=f.toString();if("string"==typeof d)try{var h=new URL(d);/^https?:$/.test(h.protocol)&&(v=h.toString())}catch(e){}return{cdnUrl:this.getCdnUrl(r.host,t),ossUrl:v,fileName:t,ossResParams:e}}},{key:"getCdnUrl",value:function(e,t){return"".concat(e.replace(/\/+$/,""),"/").concat(t.split("/").map(encodeURIComponent).join("/"))}},{key:"getYYYYMMDDHHMMSS",value:function(e){var t=e||new Date,r=t.getFullYear(),n=String(t.getMonth()+1).padStart(2,"0"),o=String(t.getDate()).padStart(2,"0"),i=String(t.getHours()).padStart(2,"0"),a=String(t.getMinutes()).padStart(2,"0"),u=String(t.getSeconds()).padStart(2,"0");return"".concat(r).concat(n).concat(o).concat(i).concat(a).concat(u)}},{key:"getSafeFileExtension",value:function(e){var t=e.match(/\.([a-zA-Z0-9]+)$/);return t?t[1].replace(/[^a-zA-Z0-9]/g,"").toLowerCase():""}},{key:"getName",value:function(e,r){var n="".concat(this.dir).concat(e).replace(/\/+$/,""),o=this.getYYYYMMDDHHMMSS(),i=this.getSafeFileExtension(r.name);return"hw-oss-web".concat(n,"/").concat(o,"_").concat(t.nanoid(16)).concat(i?"."+i:"")}}])}();exports.HwOss=C;
@@ -1,3 +1,3 @@
1
1
  import e from"esdk-obs-browserjs";import{nanoid as t}from"nanoid";function r(e){return r="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},r(e)}function n(e){var t=function(e,t){if("object"!=r(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var o=n.call(e,t);if("object"!=r(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e,"string");return"symbol"==r(t)?t:t+""}function o(e,t,r){return t&&function(e,t){for(var r=0;r<t.length;r++){var o=t[r];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,n(o.key),o)}}(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function i(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var a,u={exports:{}},s={exports:{}};(a=s).exports=function(e,t){this.v=e,this.k=t},a.exports.__esModule=!0,a.exports.default=a.exports;var c=s.exports,l={exports:{}},p={exports:{}};!function(e){function t(r,n,o,i){var a=Object.defineProperty;try{a({},"",{})}catch(r){a=0}e.exports=t=function(e,r,n,o){function i(r,n){t(e,r,function(e){return this._invoke(r,n,e)})}r?a?a(e,r,{value:n,enumerable:!o,configurable:!o,writable:!o}):e[r]=n:(i("next",0),i("throw",1),i("return",2))},e.exports.__esModule=!0,e.exports.default=e.exports,t(r,n,o,i)}e.exports=t,e.exports.__esModule=!0,e.exports.default=e.exports}(p);var f=p.exports;!function(e){var t=f;function r(){
2
2
  /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */
3
- var n,o,i="function"==typeof Symbol?Symbol:{},a=i.iterator||"@@iterator",u=i.toStringTag||"@@toStringTag";function s(e,r,i,a){var u=r&&r.prototype instanceof l?r:l,s=Object.create(u.prototype);return t(s,"_invoke",function(e,t,r){var i,a,u,s=0,l=r||[],p=!1,f={p:0,n:0,v:n,a:d,f:d.bind(n,4),d:function(e,t){return i=e,a=0,u=n,f.n=t,c}};function d(e,t){for(a=e,u=t,o=0;!p&&s&&!r&&o<l.length;o++){var r,i=l[o],d=f.p,v=i[2];e>3?(r=v===t)&&(u=i[(a=i[4])?5:(a=3,3)],i[4]=i[5]=n):i[0]<=d&&((r=e<2&&d<i[1])?(a=0,f.v=t,f.n=i[1]):d<v&&(r=e<3||i[0]>t||t>v)&&(i[4]=e,i[5]=t,f.n=v,a=0))}if(r||e>1)return c;throw p=!0,t}return function(r,l,v){if(s>1)throw TypeError("Generator is already running");for(p&&1===l&&d(l,v),a=l,u=v;(o=a<2?n:u)||!p;){i||(a?a<3?(a>1&&(f.n=-1),d(a,u)):f.n=u:f.v=u);try{if(s=2,i){if(a||(r="next"),o=i[r]){if(!(o=o.call(i,u)))throw TypeError("iterator result is not an object");if(!o.done)return o;u=o.value,a<2&&(a=0)}else 1===a&&(o=i.return)&&o.call(i),a<2&&(u=TypeError("The iterator does not provide a '"+r+"' method"),a=1);i=n}else if((o=(p=f.n<0)?u:e.call(t,f))!==c)break}catch(e){i=n,a=1,u=e}finally{s=1}}return{value:o,done:p}}}(e,i,a),!0),s}var c={};function l(){}function p(){}function f(){}o=Object.getPrototypeOf;var d=[][a]?o(o([][a]())):(t(o={},a,function(){return this}),o),v=f.prototype=l.prototype=Object.create(d);function h(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,f):(e.__proto__=f,t(e,u,"GeneratorFunction")),e.prototype=Object.create(v),e}return p.prototype=f,t(v,"constructor",f),t(f,"constructor",p),p.displayName="GeneratorFunction",t(f,u,"GeneratorFunction"),t(v),t(v,u,"Generator"),t(v,a,function(){return this}),t(v,"toString",function(){return"[object Generator]"}),(e.exports=r=function(){return{w:s,m:h}},e.exports.__esModule=!0,e.exports.default=e.exports)()}e.exports=r,e.exports.__esModule=!0,e.exports.default=e.exports}(l);var d=l.exports,v={exports:{}},h={exports:{}},x={exports:{}};!function(e){var t=c,r=f;e.exports=function e(n,o){function i(e,r,a,u){try{var s=n[e](r),c=s.value;return c instanceof t?o.resolve(c.v).then(function(e){i("next",e,a,u)},function(e){i("throw",e,a,u)}):o.resolve(c).then(function(e){s.value=e,a(s)},function(e){return i("throw",e,a,u)})}catch(e){u(e)}}var a;this.next||(r(e.prototype),r(e.prototype,"function"==typeof Symbol&&Symbol.asyncIterator||"@asyncIterator",function(){return this})),r(this,"_invoke",function(e,t,r){function n(){return new o(function(t,n){i(e,r,t,n)})}return a=a?a.then(n,n):n()},!0)},e.exports.__esModule=!0,e.exports.default=e.exports}(x);var y=x.exports;!function(e){var t=d,r=y;e.exports=function(e,n,o,i,a){return new r(t().w(e,n,o,i),a||Promise)},e.exports.__esModule=!0,e.exports.default=e.exports}(h);var b=h.exports;!function(e){var t=b;e.exports=function(e,r,n,o,i){var a=t(e,r,n,o,i);return a.next().then(function(e){return e.done?e.value:a.next()})},e.exports.__esModule=!0,e.exports.default=e.exports}(v);var m=v.exports,g={exports:{}};!function(e){e.exports=function(e){var t=Object(e),r=[];for(var n in t)r.unshift(n);return function e(){for(;r.length;)if((n=r.pop())in t)return e.value=n,e.done=!1,e;return e.done=!0,e}},e.exports.__esModule=!0,e.exports.default=e.exports}(g);var k=g.exports,w={exports:{}},S={exports:{}};!function(e){function t(r){return e.exports=t="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,t(r)}e.exports=t,e.exports.__esModule=!0,e.exports.default=e.exports}(S);var _=S.exports;!function(e){var t=_.default;e.exports=function(e){if(null!=e){var r=e["function"==typeof Symbol&&Symbol.iterator||"@@iterator"],n=0;if(r)return r.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length))return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}}}throw new TypeError(t(e)+" is not iterable")},e.exports.__esModule=!0,e.exports.default=e.exports}(w);var M=w.exports;!function(e){var t=c,r=d,n=m,o=b,i=y,a=k,u=M;function s(){var c=r(),l=c.m(s),p=(Object.getPrototypeOf?Object.getPrototypeOf(l):l.__proto__).constructor;function f(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))}var d={throw:1,return:2,break:3,continue:3};function v(e){var t,r;return function(n){t||(t={stop:function(){return r(n.a,2)},catch:function(){return n.v},abrupt:function(e,t){return r(n.a,d[e],t)},delegateYield:function(e,o,i){return t.resultName=o,r(n.d,u(e),i)},finish:function(e){return r(n.f,e)}},r=function(e,r,o){n.p=t.prev,n.n=t.next;try{return e(r,o)}finally{t.next=n.n}}),t.resultName&&(t[t.resultName]=n.v,t.resultName=void 0),t.sent=n.v,t.next=n.n;try{return e.call(this,t)}finally{n.p=t.prev,n.n=t.next}}}return(e.exports=s=function(){return{wrap:function(e,t,r,n){return c.w(v(e),t,r,n&&n.reverse())},isGeneratorFunction:f,mark:c.m,awrap:function(e,r){return new t(e,r)},AsyncIterator:i,async:function(e,t,r,i,a){return(f(t)?o:n)(v(e),t,r,i,a)},keys:a,values:u}},e.exports.__esModule=!0,e.exports.default=e.exports)()}e.exports=s,e.exports.__esModule=!0,e.exports.default=e.exports}(u);var O=(0,u.exports)(),j=O;try{regeneratorRuntime=O}catch(e){"object"===("undefined"==typeof globalThis?"undefined":r(globalThis))?globalThis.regeneratorRuntime=O:Function("r","regeneratorRuntime = r")(O)}var P=i(j);function U(e,t,r,n){return new(r||(r=Promise))(function(o,i){function a(e){try{s(n.next(e))}catch(e){i(e)}}function u(e){try{s(n.throw(e))}catch(e){i(e)}}function s(e){var t;e.done?o(e.value):(t=e.value,t instanceof r?t:new r(function(e){e(t)})).then(a,u)}s((n=n.apply(e,t||[])).next())})}"function"==typeof SuppressedError&&SuppressedError;var E=5368709120,T=102400,C=function(){return o(function e(t){var r,n,o,i;if(function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.ossParams=null,this.expiresAt=0,this.tokenRequest=null,this.reqUrl=t.reqUrl,this.expire=null!==(r=t.expire)&&void 0!==r?r:3600,this.dir=null!==(n=t.dir)&&void 0!==n?n:"public",this.multipartUploadSize=null!==(o=t.multipartUploadSize)&&void 0!==o?o:104857600,this.multipartUploadParams=null!==(i=t.multipartUploadParams)&&void 0!==i?i:{},!Number.isFinite(this.expire)||this.expire<=0)throw new Error("expire 必须为大于 0 的秒数");if(!Number.isFinite(this.multipartUploadSize)||this.multipartUploadSize<0)throw new Error("multipartUploadSize 必须为非负字节数")},[{key:"getToken",value:function(){return U(this,arguments,void 0,function(){var t=this,r=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return P.mark(function n(){return P.wrap(function(n){for(;;)switch(n.prev=n.next){case 0:if(t.reqUrl){n.next=1;break}throw new Error("请求token的地址不存在");case 1:if(!t.tokenRequest){n.next=2;break}return n.abrupt("return",t.tokenRequest);case 2:return t.tokenRequest=function(){return U(t,void 0,void 0,P.mark(function t(){var n,o,i,a,u,s,c,l,p,f,d,v;return P.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return(u=new URL(this.reqUrl,null===(n=globalThis.location)||void 0===n?void 0:n.href)).searchParams.set("expire",String(this.expire)),t.next=1,fetch(u.toString());case 1:if((s=t.sent).ok){t.next=2;break}throw new Error("获取 OBS 临时凭证失败:HTTP ".concat(s.status));case 2:return t.next=3,s.json();case 3:if(c=t.sent,l=c.data,p=null!==(o=null==l?void 0:l.securityToken)&&void 0!==o?o:null==l?void 0:l.stsToken,(null==l?void 0:l.host)&&l.endpoint&&l.bucket&&l.accessKeyId&&l.accessKeySecret&&p){t.next=4;break}throw new Error("OBS 临时凭证缺少必要字段");case 4:if(f=new URL(l.endpoint),/^https?:$/.test(f.protocol)){t.next=5;break}throw new Error("OBS endpoint 必须为 HTTP 或 HTTPS Endpoint");case 5:if(d=Date.now(),v=l.expiration?Date.parse(l.expiration):d+1e3*this.expire,Number.isFinite(v)&&!(v<=d)){t.next=6;break}throw new Error("OBS 临时凭证过期时间无效或已过期");case 6:return r||!this.client||(null===(i=this.ossParams)||void 0===i?void 0:i.endpoint)!==l.endpoint||(null===(a=this.ossParams)||void 0===a?void 0:a.bucket)!==l.bucket?this.client=new e({access_key_id:l.accessKeyId,secret_access_key:l.accessKeySecret,security_token:p,server:l.endpoint,signature:"obs",is_signature_negotiation:!1}):this.client.refresh(l.accessKeyId,l.accessKeySecret,p),this.ossParams=l,this.expiresAt=v-Math.min(6e4,.1*(v-d)),t.abrupt("return",l);case 7:case"end":return t.stop()}},t,this)}))}(),n.prev=3,n.next=4,t.tokenRequest;case 4:return n.abrupt("return",n.sent);case 5:return n.prev=5,t.tokenRequest=null,n.finish(5);case 6:case"end":return n.stop()}},n,null,[[3,,5,6]])})()})}},{key:"getContext",value:function(e){return U(this,void 0,void 0,P.mark(function t(){return P.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:if(e){t.next=1;break}throw new Error("文件不存在");case 1:if(this.reqUrl){t.next=2;break}throw new Error("请求token的地址不存在");case 2:if(this.client&&!(Date.now()>=this.expiresAt)){t.next=3;break}return t.next=3,this.getToken();case 3:return t.abrupt("return",{client:this.client,token:this.ossParams});case 4:case"end":return t.stop()}},t,this)}))}},{key:"upload",value:function(e){return U(this,arguments,void 0,function(e){var t=this,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2?arguments[2]:void 0;return P.mark(function o(){var i;return P.wrap(function(o){for(;;)switch(o.prev=o.next){case 0:if(e){o.next=1;break}throw new Error("文件不存在");case 1:if(!((i=Object.assign(Object.assign({},t.multipartUploadParams),n)).checkpoint||e.size>t.multipartUploadSize||e.size>E)){o.next=2;break}return o.abrupt("return",t.multipartUpload(e,r,i));case 2:return o.abrupt("return",t.directUpload(e,r));case 3:case"end":return o.stop()}},o)})()})}},{key:"directUpload",value:function(e){return U(this,arguments,void 0,function(e){var t=this,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return P.mark(function n(){var o,i,a,u,s;return P.wrap(function(n){for(;;)switch(n.prev=n.next){case 0:if(e){n.next=1;break}throw new Error("文件不存在");case 1:if(!(e.size>E)){n.next=2;break}throw new Error("文件大小不能超过5GB");case 2:return n.next=3,t.getContext(e);case 3:return o=n.sent,i=o.client,a=o.token,u=t.getName(r,e),n.next=4,i.putObject(Object.assign({Bucket:a.bucket,Key:u,SourceFile:e},e.type?{ContentType:e.type}:{}));case 4:return s=n.sent,n.abrupt("return",t.getResult(s,u,a));case 5:case"end":return n.stop()}},n)})()})}},{key:"multipartUpload",value:function(e){return U(this,arguments,void 0,function(e){var t=this,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2?arguments[2]:void 0;return P.mark(function o(){var i,a,u,s,c,l,p,f,d,v,h,x,y,b,m,g,k,w,S,_;return P.wrap(function(o){for(;;)switch(o.prev=o.next){case 0:if(e){o.next=1;break}throw new Error("文件不存在");case 1:if(!(e.size>536870912e5)){o.next=2;break}throw new Error("文件超过 OBS 分段上传上限");case 2:if((f=Object.assign(Object.assign({},t.multipartUploadParams),n)).checkpoint||!(e.size<T)){o.next=3;break}return o.abrupt("return",t.directUpload(e,r));case 3:if(d=null!==(i=f.parallel)&&void 0!==i?i:5,v=null!==(a=f.partSize)&&void 0!==a?a:1048576,Number.isInteger(d)&&!(d<1)){o.next=4;break}throw new Error("parallel 必须为大于 0 的整数");case 4:if(!(!Number.isInteger(v)||v<T||v>E)){o.next=5;break}throw new Error("partSize 必须为 100KB~5GB 的整数字节数");case 5:return o.next=6,t.getContext(e);case 6:if(h=o.sent,x=h.client,y=h.token,!(b=f.checkpoint)||b.key&&b.bucket===y.bucket&&(null===(u=b.sourceFile)||void 0===u?void 0:u.name)===e.name&&(null===(s=b.fileStat)||void 0===s?void 0:s.fileSize)===e.size&&(null===(c=b.fileStat)||void 0===c?void 0:c.lastModified)===e.lastModified){o.next=7;break}throw new Error("checkpoint 与当前文件或 OBS 桶不匹配");case 7:return m=null!==(l=null==b?void 0:b.key)&&void 0!==l?l:t.getName(r,e),g=t.getCdnUrl(y.host,m),k=0,o.next=8,x.uploadFile(Object.assign(Object.assign({Bucket:y.bucket,Key:m,SourceFile:e,TaskNum:d,PartSize:v},e.type?{ContentType:e.type}:{}),{UploadCheckpoint:b,ResumeCallback:function(e,t){var r,n;b=t;var o=t.parts.reduce(function(e,t){return e+(t.isCompleted?t.partSize:0)},0);k=t.fileStat.fileSize>0?Math.min(1,Math.max(0,o/t.fileStat.fileSize)):0,null===(r=f.resumeCallback)||void 0===r||r.call(f,e,t),null===(n=f.progress)||void 0===n||n.call(f,k,g,t,w)},ProgressCallback:function(e,t){var r;k=t>0?Math.min(1,Math.max(0,e/t)):0,null===(r=f.progress)||void 0===r||r.call(f,k,g,b,w)},EventCallback:function(e,t,r){var n,o;w=r,null===(n=f.eventCallback)||void 0===n||n.call(f,e,t,r),"uploadPartSucceed"===e&&(null===(o=f.progress)||void 0===o||o.call(f,k,g,b,r))}}));case 8:return S=o.sent,_=t.getResult(S,m,y),null===(p=f.progress)||void 0===p||p.call(f,1,g,b,S),o.abrupt("return",_);case 9:case"end":return o.stop()}},o)})()})}},{key:"getResult",value:function(e,t,r){var n,o,i,a,u,s,c,l=null===(n=null==e?void 0:e.CommonMsg)||void 0===n?void 0:n.Status;if(!(l>=200&&l<300)){var p=new Error("OBS 上传失败:".concat(null!==(a=null!==(i=null===(o=null==e?void 0:e.CommonMsg)||void 0===o?void 0:o.Code)&&void 0!==i?i:l)&&void 0!==a?a:"未知状态"," ").concat(null!==(s=null===(u=null==e?void 0:e.CommonMsg)||void 0===u?void 0:u.Message)&&void 0!==s?s:""));throw Object.assign(p,{ossResParams:e}),p}var f=new URL(r.endpoint);return f.hostname="".concat(r.bucket,".").concat(f.hostname),f.pathname="/".concat(t.split("/").map(encodeURIComponent).join("/")),f.search="",f.hash="",{cdnUrl:this.getCdnUrl(r.host,t),ossUrl:(null===(c=e.InterfaceResult)||void 0===c?void 0:c.Location)||f.toString(),fileName:t,ossResParams:e}}},{key:"getCdnUrl",value:function(e,t){return"".concat(e.replace(/\/+$/,""),"/").concat(t.split("/").map(encodeURIComponent).join("/"))}},{key:"getYYYYMMDDHHMMSS",value:function(e){var t=e||new Date,r=t.getFullYear(),n=String(t.getMonth()+1).padStart(2,"0"),o=String(t.getDate()).padStart(2,"0"),i=String(t.getHours()).padStart(2,"0"),a=String(t.getMinutes()).padStart(2,"0"),u=String(t.getSeconds()).padStart(2,"0");return"".concat(r).concat(n).concat(o).concat(i).concat(a).concat(u)}},{key:"getSafeFileExtension",value:function(e){var t=e.match(/\.([a-zA-Z0-9]+)$/);return t?t[1].replace(/[^a-zA-Z0-9]/g,"").toLowerCase():""}},{key:"getName",value:function(e,r){var n="".concat(this.dir).concat(e).replace(/\/+$/,""),o=this.getYYYYMMDDHHMMSS(),i=this.getSafeFileExtension(r.name);return"hw-oss-web".concat(n,"/").concat(o,"_").concat(t(16)).concat(i?"."+i:"")}}])}();export{C as HwOss};
3
+ var n,o,i="function"==typeof Symbol?Symbol:{},a=i.iterator||"@@iterator",u=i.toStringTag||"@@toStringTag";function s(e,r,i,a){var u=r&&r.prototype instanceof l?r:l,s=Object.create(u.prototype);return t(s,"_invoke",function(e,t,r){var i,a,u,s=0,l=r||[],p=!1,f={p:0,n:0,v:n,a:d,f:d.bind(n,4),d:function(e,t){return i=e,a=0,u=n,f.n=t,c}};function d(e,t){for(a=e,u=t,o=0;!p&&s&&!r&&o<l.length;o++){var r,i=l[o],d=f.p,v=i[2];e>3?(r=v===t)&&(u=i[(a=i[4])?5:(a=3,3)],i[4]=i[5]=n):i[0]<=d&&((r=e<2&&d<i[1])?(a=0,f.v=t,f.n=i[1]):d<v&&(r=e<3||i[0]>t||t>v)&&(i[4]=e,i[5]=t,f.n=v,a=0))}if(r||e>1)return c;throw p=!0,t}return function(r,l,v){if(s>1)throw TypeError("Generator is already running");for(p&&1===l&&d(l,v),a=l,u=v;(o=a<2?n:u)||!p;){i||(a?a<3?(a>1&&(f.n=-1),d(a,u)):f.n=u:f.v=u);try{if(s=2,i){if(a||(r="next"),o=i[r]){if(!(o=o.call(i,u)))throw TypeError("iterator result is not an object");if(!o.done)return o;u=o.value,a<2&&(a=0)}else 1===a&&(o=i.return)&&o.call(i),a<2&&(u=TypeError("The iterator does not provide a '"+r+"' method"),a=1);i=n}else if((o=(p=f.n<0)?u:e.call(t,f))!==c)break}catch(e){i=n,a=1,u=e}finally{s=1}}return{value:o,done:p}}}(e,i,a),!0),s}var c={};function l(){}function p(){}function f(){}o=Object.getPrototypeOf;var d=[][a]?o(o([][a]())):(t(o={},a,function(){return this}),o),v=f.prototype=l.prototype=Object.create(d);function h(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,f):(e.__proto__=f,t(e,u,"GeneratorFunction")),e.prototype=Object.create(v),e}return p.prototype=f,t(v,"constructor",f),t(f,"constructor",p),p.displayName="GeneratorFunction",t(f,u,"GeneratorFunction"),t(v),t(v,u,"Generator"),t(v,a,function(){return this}),t(v,"toString",function(){return"[object Generator]"}),(e.exports=r=function(){return{w:s,m:h}},e.exports.__esModule=!0,e.exports.default=e.exports)()}e.exports=r,e.exports.__esModule=!0,e.exports.default=e.exports}(l);var d=l.exports,v={exports:{}},h={exports:{}},x={exports:{}};!function(e){var t=c,r=f;e.exports=function e(n,o){function i(e,r,a,u){try{var s=n[e](r),c=s.value;return c instanceof t?o.resolve(c.v).then(function(e){i("next",e,a,u)},function(e){i("throw",e,a,u)}):o.resolve(c).then(function(e){s.value=e,a(s)},function(e){return i("throw",e,a,u)})}catch(e){u(e)}}var a;this.next||(r(e.prototype),r(e.prototype,"function"==typeof Symbol&&Symbol.asyncIterator||"@asyncIterator",function(){return this})),r(this,"_invoke",function(e,t,r){function n(){return new o(function(t,n){i(e,r,t,n)})}return a=a?a.then(n,n):n()},!0)},e.exports.__esModule=!0,e.exports.default=e.exports}(x);var y=x.exports;!function(e){var t=d,r=y;e.exports=function(e,n,o,i,a){return new r(t().w(e,n,o,i),a||Promise)},e.exports.__esModule=!0,e.exports.default=e.exports}(h);var b=h.exports;!function(e){var t=b;e.exports=function(e,r,n,o,i){var a=t(e,r,n,o,i);return a.next().then(function(e){return e.done?e.value:a.next()})},e.exports.__esModule=!0,e.exports.default=e.exports}(v);var m=v.exports,g={exports:{}};!function(e){e.exports=function(e){var t=Object(e),r=[];for(var n in t)r.unshift(n);return function e(){for(;r.length;)if((n=r.pop())in t)return e.value=n,e.done=!1,e;return e.done=!0,e}},e.exports.__esModule=!0,e.exports.default=e.exports}(g);var w=g.exports,k={exports:{}},S={exports:{}};!function(e){function t(r){return e.exports=t="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,t(r)}e.exports=t,e.exports.__esModule=!0,e.exports.default=e.exports}(S);var _=S.exports;!function(e){var t=_.default;e.exports=function(e){if(null!=e){var r=e["function"==typeof Symbol&&Symbol.iterator||"@@iterator"],n=0;if(r)return r.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length))return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}}}throw new TypeError(t(e)+" is not iterable")},e.exports.__esModule=!0,e.exports.default=e.exports}(k);var M=k.exports;!function(e){var t=c,r=d,n=m,o=b,i=y,a=w,u=M;function s(){var c=r(),l=c.m(s),p=(Object.getPrototypeOf?Object.getPrototypeOf(l):l.__proto__).constructor;function f(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))}var d={throw:1,return:2,break:3,continue:3};function v(e){var t,r;return function(n){t||(t={stop:function(){return r(n.a,2)},catch:function(){return n.v},abrupt:function(e,t){return r(n.a,d[e],t)},delegateYield:function(e,o,i){return t.resultName=o,r(n.d,u(e),i)},finish:function(e){return r(n.f,e)}},r=function(e,r,o){n.p=t.prev,n.n=t.next;try{return e(r,o)}finally{t.next=n.n}}),t.resultName&&(t[t.resultName]=n.v,t.resultName=void 0),t.sent=n.v,t.next=n.n;try{return e.call(this,t)}finally{n.p=t.prev,n.n=t.next}}}return(e.exports=s=function(){return{wrap:function(e,t,r,n){return c.w(v(e),t,r,n&&n.reverse())},isGeneratorFunction:f,mark:c.m,awrap:function(e,r){return new t(e,r)},AsyncIterator:i,async:function(e,t,r,i,a){return(f(t)?o:n)(v(e),t,r,i,a)},keys:a,values:u}},e.exports.__esModule=!0,e.exports.default=e.exports)()}e.exports=s,e.exports.__esModule=!0,e.exports.default=e.exports}(u);var O=(0,u.exports)(),U=O;try{regeneratorRuntime=O}catch(e){"object"===("undefined"==typeof globalThis?"undefined":r(globalThis))?globalThis.regeneratorRuntime=O:Function("r","regeneratorRuntime = r")(O)}var j=i(U);function P(e,t,r,n){return new(r||(r=Promise))(function(o,i){function a(e){try{s(n.next(e))}catch(e){i(e)}}function u(e){try{s(n.throw(e))}catch(e){i(e)}}function s(e){var t;e.done?o(e.value):(t=e.value,t instanceof r?t:new r(function(e){e(t)})).then(a,u)}s((n=n.apply(e,t||[])).next())})}"function"==typeof SuppressedError&&SuppressedError;var E=5368709120,T=102400,C=function(){return o(function e(t){var r,n,o,i;if(function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.ossParams=null,this.expiresAt=0,this.tokenRequest=null,this.reqUrl=t.reqUrl,this.expire=null!==(r=t.expire)&&void 0!==r?r:3600,this.dir=null!==(n=t.dir)&&void 0!==n?n:"public",this.multipartUploadSize=null!==(o=t.multipartUploadSize)&&void 0!==o?o:104857600,this.multipartUploadParams=null!==(i=t.multipartUploadParams)&&void 0!==i?i:{},!Number.isFinite(this.expire)||this.expire<=0)throw new Error("expire 必须为大于 0 的秒数");if(!Number.isFinite(this.multipartUploadSize)||this.multipartUploadSize<0)throw new Error("multipartUploadSize 必须为非负字节数")},[{key:"getToken",value:function(){return P(this,arguments,void 0,function(){var t=this,r=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return j.mark(function n(){return j.wrap(function(n){for(;;)switch(n.prev=n.next){case 0:if(t.reqUrl){n.next=1;break}throw new Error("请求token的地址不存在");case 1:if(!t.tokenRequest){n.next=2;break}return n.abrupt("return",t.tokenRequest);case 2:return t.tokenRequest=function(){return P(t,void 0,void 0,j.mark(function t(){var n,o,i,a,u,s,c,l,p,f,d,v;return j.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return(u=new URL(this.reqUrl,null===(n=globalThis.location)||void 0===n?void 0:n.href)).searchParams.set("expire",String(this.expire)),t.next=1,fetch(u.toString());case 1:if((s=t.sent).ok){t.next=2;break}throw new Error("获取 OBS 临时凭证失败:HTTP ".concat(s.status));case 2:return t.next=3,s.json();case 3:if(c=t.sent,l=c.data,p=null!==(o=null==l?void 0:l.securityToken)&&void 0!==o?o:null==l?void 0:l.stsToken,(null==l?void 0:l.host)&&l.endpoint&&l.bucket&&l.accessKeyId&&l.accessKeySecret&&p){t.next=4;break}throw new Error("OBS 临时凭证缺少必要字段");case 4:if(f=new URL(l.endpoint),/^https?:$/.test(f.protocol)){t.next=5;break}throw new Error("OBS endpoint 必须为 HTTP 或 HTTPS Endpoint");case 5:if(d=Date.now(),v=l.expiration?Date.parse(l.expiration):d+1e3*this.expire,Number.isFinite(v)&&!(v<=d)){t.next=6;break}throw new Error("OBS 临时凭证过期时间无效或已过期");case 6:return r||!this.client||(null===(i=this.ossParams)||void 0===i?void 0:i.endpoint)!==l.endpoint||(null===(a=this.ossParams)||void 0===a?void 0:a.bucket)!==l.bucket?this.client=new e({access_key_id:l.accessKeyId,secret_access_key:l.accessKeySecret,security_token:p,server:l.endpoint,signature:"obs",is_signature_negotiation:!1}):this.client.refresh(l.accessKeyId,l.accessKeySecret,p),this.ossParams=l,this.expiresAt=v-Math.min(6e4,.1*(v-d)),t.abrupt("return",l);case 7:case"end":return t.stop()}},t,this)}))}(),n.prev=3,n.next=4,t.tokenRequest;case 4:return n.abrupt("return",n.sent);case 5:return n.prev=5,t.tokenRequest=null,n.finish(5);case 6:case"end":return n.stop()}},n,null,[[3,,5,6]])})()})}},{key:"getContext",value:function(e){return P(this,void 0,void 0,j.mark(function t(){return j.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:if(e){t.next=1;break}throw new Error("文件不存在");case 1:if(this.reqUrl){t.next=2;break}throw new Error("请求token的地址不存在");case 2:if(this.client&&!(Date.now()>=this.expiresAt)){t.next=3;break}return t.next=3,this.getToken();case 3:return t.abrupt("return",{client:this.client,token:this.ossParams});case 4:case"end":return t.stop()}},t,this)}))}},{key:"upload",value:function(e){return P(this,arguments,void 0,function(e){var t=this,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2?arguments[2]:void 0;return j.mark(function o(){var i;return j.wrap(function(o){for(;;)switch(o.prev=o.next){case 0:if(e){o.next=1;break}throw new Error("文件不存在");case 1:if(!((i=Object.assign(Object.assign({},t.multipartUploadParams),n)).checkpoint||e.size>t.multipartUploadSize||e.size>E)){o.next=2;break}return o.abrupt("return",t.multipartUpload(e,r,i));case 2:return o.abrupt("return",t.directUpload(e,r));case 3:case"end":return o.stop()}},o)})()})}},{key:"directUpload",value:function(e){return P(this,arguments,void 0,function(e){var t=this,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return j.mark(function n(){var o,i,a,u,s;return j.wrap(function(n){for(;;)switch(n.prev=n.next){case 0:if(e){n.next=1;break}throw new Error("文件不存在");case 1:if(!(e.size>E)){n.next=2;break}throw new Error("文件大小不能超过5GB");case 2:return n.next=3,t.getContext(e);case 3:return o=n.sent,i=o.client,a=o.token,u=t.getName(r,e),n.next=4,i.putObject(Object.assign({Bucket:a.bucket,Key:u,SourceFile:e},e.type?{ContentType:e.type}:{}));case 4:return s=n.sent,n.abrupt("return",t.getResult(s,u,a));case 5:case"end":return n.stop()}},n)})()})}},{key:"multipartUpload",value:function(e){return P(this,arguments,void 0,function(e){var t=this,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2?arguments[2]:void 0;return j.mark(function o(){var i,a,u,s,c,l,p,f,d,v,h,x,y,b,m,g,w,k,S,_;return j.wrap(function(o){for(;;)switch(o.prev=o.next){case 0:if(e){o.next=1;break}throw new Error("文件不存在");case 1:if(!(e.size>536870912e5)){o.next=2;break}throw new Error("文件超过 OBS 分段上传上限");case 2:if((f=Object.assign(Object.assign({},t.multipartUploadParams),n)).checkpoint||!(e.size<T)){o.next=3;break}return o.abrupt("return",t.directUpload(e,r));case 3:if(d=null!==(i=f.parallel)&&void 0!==i?i:5,v=null!==(a=f.partSize)&&void 0!==a?a:1048576,Number.isInteger(d)&&!(d<1)){o.next=4;break}throw new Error("parallel 必须为大于 0 的整数");case 4:if(!(!Number.isInteger(v)||v<T||v>E)){o.next=5;break}throw new Error("partSize 必须为 100KB~5GB 的整数字节数");case 5:return o.next=6,t.getContext(e);case 6:if(h=o.sent,x=h.client,y=h.token,!(b=f.checkpoint)||b.key&&b.bucket===y.bucket&&(null===(u=b.sourceFile)||void 0===u?void 0:u.name)===e.name&&(null===(s=b.fileStat)||void 0===s?void 0:s.fileSize)===e.size&&(null===(c=b.fileStat)||void 0===c?void 0:c.lastModified)===e.lastModified){o.next=7;break}throw new Error("checkpoint 与当前文件或 OBS 桶不匹配");case 7:return m=null!==(l=null==b?void 0:b.key)&&void 0!==l?l:t.getName(r,e),g=t.getCdnUrl(y.host,m),w=0,o.next=8,x.uploadFile(Object.assign(Object.assign({Bucket:y.bucket,Key:m,SourceFile:e,TaskNum:d,PartSize:v},e.type?{ContentType:e.type}:{}),{UploadCheckpoint:b,ResumeCallback:function(e,t){var r,n;b=t;var o=t.parts.reduce(function(e,t){return e+(t.isCompleted?t.partSize:0)},0);w=t.fileStat.fileSize>0?Math.min(1,Math.max(0,o/t.fileStat.fileSize)):0,null===(r=f.resumeCallback)||void 0===r||r.call(f,e,t),null===(n=f.progress)||void 0===n||n.call(f,w,g,t,k)},ProgressCallback:function(e,t){var r;w=t>0?Math.min(1,Math.max(0,e/t)):0,null===(r=f.progress)||void 0===r||r.call(f,w,g,b,k)},EventCallback:function(e,t,r){var n,o;k=r,null===(n=f.eventCallback)||void 0===n||n.call(f,e,t,r),"uploadPartSucceed"===e&&(null===(o=f.progress)||void 0===o||o.call(f,w,g,b,r))}}));case 8:return S=o.sent,_=t.getResult(S,m,y),null===(p=f.progress)||void 0===p||p.call(f,1,g,b,S),o.abrupt("return",_);case 9:case"end":return o.stop()}},o)})()})}},{key:"getResult",value:function(e,t,r){var n,o,i,a,u,s,c,l=null===(n=null==e?void 0:e.CommonMsg)||void 0===n?void 0:n.Status;if(!(l>=200&&l<300)){var p=new Error("OBS 上传失败:".concat(null!==(a=null!==(i=null===(o=null==e?void 0:e.CommonMsg)||void 0===o?void 0:o.Code)&&void 0!==i?i:l)&&void 0!==a?a:"未知状态"," ").concat(null!==(s=null===(u=null==e?void 0:e.CommonMsg)||void 0===u?void 0:u.Message)&&void 0!==s?s:""));throw Object.assign(p,{ossResParams:e}),p}var f=new URL(r.endpoint);f.hostname="".concat(r.bucket,".").concat(f.hostname),f.pathname="/".concat(t.split("/").map(encodeURIComponent).join("/")),f.search="",f.hash="";var d=null===(c=e.InterfaceResult)||void 0===c?void 0:c.Location,v=f.toString();if("string"==typeof d)try{var h=new URL(d);/^https?:$/.test(h.protocol)&&(v=h.toString())}catch(e){}return{cdnUrl:this.getCdnUrl(r.host,t),ossUrl:v,fileName:t,ossResParams:e}}},{key:"getCdnUrl",value:function(e,t){return"".concat(e.replace(/\/+$/,""),"/").concat(t.split("/").map(encodeURIComponent).join("/"))}},{key:"getYYYYMMDDHHMMSS",value:function(e){var t=e||new Date,r=t.getFullYear(),n=String(t.getMonth()+1).padStart(2,"0"),o=String(t.getDate()).padStart(2,"0"),i=String(t.getHours()).padStart(2,"0"),a=String(t.getMinutes()).padStart(2,"0"),u=String(t.getSeconds()).padStart(2,"0");return"".concat(r).concat(n).concat(o).concat(i).concat(a).concat(u)}},{key:"getSafeFileExtension",value:function(e){var t=e.match(/\.([a-zA-Z0-9]+)$/);return t?t[1].replace(/[^a-zA-Z0-9]/g,"").toLowerCase():""}},{key:"getName",value:function(e,r){var n="".concat(this.dir).concat(e).replace(/\/+$/,""),o=this.getYYYYMMDDHHMMSS(),i=this.getSafeFileExtension(r.name);return"hw-oss-web".concat(n,"/").concat(o,"_").concat(t(16)).concat(i?"."+i:"")}}])}();export{C as HwOss};
@@ -1,3 +1,3 @@
1
1
  !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("esdk-obs-browserjs"),require("nanoid")):"function"==typeof define&&define.amd?define(["exports","esdk-obs-browserjs","nanoid"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).HwOss={},e.ObsClient,e.nanoid)}(this,function(e,t,r){"use strict";function n(e){return 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},n(e)}function o(e){var t=function(e,t){if("object"!=n(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,t);if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e,"string");return"symbol"==n(t)?t:t+""}function i(e,t,r){return t&&function(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,o(n.key),n)}}(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function a(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var u={exports:{}},s={exports:{}};!function(e){e.exports=function(e,t){this.v=e,this.k=t},e.exports.__esModule=!0,e.exports.default=e.exports}(s);var c=s.exports,l={exports:{}},p={exports:{}};!function(e){function t(r,n,o,i){var a=Object.defineProperty;try{a({},"",{})}catch(r){a=0}e.exports=t=function(e,r,n,o){function i(r,n){t(e,r,function(e){return this._invoke(r,n,e)})}r?a?a(e,r,{value:n,enumerable:!o,configurable:!o,writable:!o}):e[r]=n:(i("next",0),i("throw",1),i("return",2))},e.exports.__esModule=!0,e.exports.default=e.exports,t(r,n,o,i)}e.exports=t,e.exports.__esModule=!0,e.exports.default=e.exports}(p);var f=p.exports;!function(e){var t=f;function r(){
2
2
  /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */
3
- var n,o,i="function"==typeof Symbol?Symbol:{},a=i.iterator||"@@iterator",u=i.toStringTag||"@@toStringTag";function s(e,r,i,a){var u=r&&r.prototype instanceof l?r:l,s=Object.create(u.prototype);return t(s,"_invoke",function(e,t,r){var i,a,u,s=0,l=r||[],p=!1,f={p:0,n:0,v:n,a:d,f:d.bind(n,4),d:function(e,t){return i=e,a=0,u=n,f.n=t,c}};function d(e,t){for(a=e,u=t,o=0;!p&&s&&!r&&o<l.length;o++){var r,i=l[o],d=f.p,v=i[2];e>3?(r=v===t)&&(u=i[(a=i[4])?5:(a=3,3)],i[4]=i[5]=n):i[0]<=d&&((r=e<2&&d<i[1])?(a=0,f.v=t,f.n=i[1]):d<v&&(r=e<3||i[0]>t||t>v)&&(i[4]=e,i[5]=t,f.n=v,a=0))}if(r||e>1)return c;throw p=!0,t}return function(r,l,v){if(s>1)throw TypeError("Generator is already running");for(p&&1===l&&d(l,v),a=l,u=v;(o=a<2?n:u)||!p;){i||(a?a<3?(a>1&&(f.n=-1),d(a,u)):f.n=u:f.v=u);try{if(s=2,i){if(a||(r="next"),o=i[r]){if(!(o=o.call(i,u)))throw TypeError("iterator result is not an object");if(!o.done)return o;u=o.value,a<2&&(a=0)}else 1===a&&(o=i.return)&&o.call(i),a<2&&(u=TypeError("The iterator does not provide a '"+r+"' method"),a=1);i=n}else if((o=(p=f.n<0)?u:e.call(t,f))!==c)break}catch(e){i=n,a=1,u=e}finally{s=1}}return{value:o,done:p}}}(e,i,a),!0),s}var c={};function l(){}function p(){}function f(){}o=Object.getPrototypeOf;var d=[][a]?o(o([][a]())):(t(o={},a,function(){return this}),o),v=f.prototype=l.prototype=Object.create(d);function h(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,f):(e.__proto__=f,t(e,u,"GeneratorFunction")),e.prototype=Object.create(v),e}return p.prototype=f,t(v,"constructor",f),t(f,"constructor",p),p.displayName="GeneratorFunction",t(f,u,"GeneratorFunction"),t(v),t(v,u,"Generator"),t(v,a,function(){return this}),t(v,"toString",function(){return"[object Generator]"}),(e.exports=r=function(){return{w:s,m:h}},e.exports.__esModule=!0,e.exports.default=e.exports)()}e.exports=r,e.exports.__esModule=!0,e.exports.default=e.exports}(l);var d=l.exports,v={exports:{}},h={exports:{}},x={exports:{}};!function(e){var t=c,r=f;e.exports=function e(n,o){function i(e,r,a,u){try{var s=n[e](r),c=s.value;return c instanceof t?o.resolve(c.v).then(function(e){i("next",e,a,u)},function(e){i("throw",e,a,u)}):o.resolve(c).then(function(e){s.value=e,a(s)},function(e){return i("throw",e,a,u)})}catch(e){u(e)}}var a;this.next||(r(e.prototype),r(e.prototype,"function"==typeof Symbol&&Symbol.asyncIterator||"@asyncIterator",function(){return this})),r(this,"_invoke",function(e,t,r){function n(){return new o(function(t,n){i(e,r,t,n)})}return a=a?a.then(n,n):n()},!0)},e.exports.__esModule=!0,e.exports.default=e.exports}(x);var b=x.exports;!function(e){var t=d,r=b;e.exports=function(e,n,o,i,a){return new r(t().w(e,n,o,i),a||Promise)},e.exports.__esModule=!0,e.exports.default=e.exports}(h);var y=h.exports;!function(e){var t=y;e.exports=function(e,r,n,o,i){var a=t(e,r,n,o,i);return a.next().then(function(e){return e.done?e.value:a.next()})},e.exports.__esModule=!0,e.exports.default=e.exports}(v);var m=v.exports,w={exports:{}};!function(e){e.exports=function(e){var t=Object(e),r=[];for(var n in t)r.unshift(n);return function e(){for(;r.length;)if((n=r.pop())in t)return e.value=n,e.done=!1,e;return e.done=!0,e}},e.exports.__esModule=!0,e.exports.default=e.exports}(w);var g=w.exports,k={exports:{}},S={exports:{}};!function(e){function t(r){return e.exports=t="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,t(r)}e.exports=t,e.exports.__esModule=!0,e.exports.default=e.exports}(S);var _=S.exports;!function(e){var t=_.default;e.exports=function(e){if(null!=e){var r=e["function"==typeof Symbol&&Symbol.iterator||"@@iterator"],n=0;if(r)return r.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length))return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}}}throw new TypeError(t(e)+" is not iterable")},e.exports.__esModule=!0,e.exports.default=e.exports}(k);var O=k.exports;!function(e){var t=c,r=d,n=m,o=y,i=b,a=g,u=O;function s(){var c=r(),l=c.m(s),p=(Object.getPrototypeOf?Object.getPrototypeOf(l):l.__proto__).constructor;function f(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))}var d={throw:1,return:2,break:3,continue:3};function v(e){var t,r;return function(n){t||(t={stop:function(){return r(n.a,2)},catch:function(){return n.v},abrupt:function(e,t){return r(n.a,d[e],t)},delegateYield:function(e,o,i){return t.resultName=o,r(n.d,u(e),i)},finish:function(e){return r(n.f,e)}},r=function(e,r,o){n.p=t.prev,n.n=t.next;try{return e(r,o)}finally{t.next=n.n}}),t.resultName&&(t[t.resultName]=n.v,t.resultName=void 0),t.sent=n.v,t.next=n.n;try{return e.call(this,t)}finally{n.p=t.prev,n.n=t.next}}}return(e.exports=s=function(){return{wrap:function(e,t,r,n){return c.w(v(e),t,r,n&&n.reverse())},isGeneratorFunction:f,mark:c.m,awrap:function(e,r){return new t(e,r)},AsyncIterator:i,async:function(e,t,r,i,a){return(f(t)?o:n)(v(e),t,r,i,a)},keys:a,values:u}},e.exports.__esModule=!0,e.exports.default=e.exports)()}e.exports=s,e.exports.__esModule=!0,e.exports.default=e.exports}(u);var M=(0,u.exports)(),j=M;try{regeneratorRuntime=M}catch(e){"object"===("undefined"==typeof globalThis?"undefined":n(globalThis))?globalThis.regeneratorRuntime=M:Function("r","regeneratorRuntime = r")(M)}var P=a(j);function U(e,t,r,n){return new(r||(r=Promise))(function(o,i){function a(e){try{s(n.next(e))}catch(e){i(e)}}function u(e){try{s(n.throw(e))}catch(e){i(e)}}function s(e){var t;e.done?o(e.value):(t=e.value,t instanceof r?t:new r(function(e){e(t)})).then(a,u)}s((n=n.apply(e,t||[])).next())})}"function"==typeof SuppressedError&&SuppressedError;var E=5368709120,T=102400,C=function(){return i(function e(t){var r,n,o,i;if(function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.ossParams=null,this.expiresAt=0,this.tokenRequest=null,this.reqUrl=t.reqUrl,this.expire=null!==(r=t.expire)&&void 0!==r?r:3600,this.dir=null!==(n=t.dir)&&void 0!==n?n:"public",this.multipartUploadSize=null!==(o=t.multipartUploadSize)&&void 0!==o?o:104857600,this.multipartUploadParams=null!==(i=t.multipartUploadParams)&&void 0!==i?i:{},!Number.isFinite(this.expire)||this.expire<=0)throw new Error("expire 必须为大于 0 的秒数");if(!Number.isFinite(this.multipartUploadSize)||this.multipartUploadSize<0)throw new Error("multipartUploadSize 必须为非负字节数")},[{key:"getToken",value:function(){return U(this,arguments,void 0,function(){var e=this,r=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return P.mark(function n(){return P.wrap(function(n){for(;;)switch(n.prev=n.next){case 0:if(e.reqUrl){n.next=1;break}throw new Error("请求token的地址不存在");case 1:if(!e.tokenRequest){n.next=2;break}return n.abrupt("return",e.tokenRequest);case 2:return e.tokenRequest=function(){return U(e,void 0,void 0,P.mark(function e(){var n,o,i,a,u,s,c,l,p,f,d,v;return P.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return(u=new URL(this.reqUrl,null===(n=globalThis.location)||void 0===n?void 0:n.href)).searchParams.set("expire",String(this.expire)),e.next=1,fetch(u.toString());case 1:if((s=e.sent).ok){e.next=2;break}throw new Error("获取 OBS 临时凭证失败:HTTP ".concat(s.status));case 2:return e.next=3,s.json();case 3:if(c=e.sent,l=c.data,p=null!==(o=null==l?void 0:l.securityToken)&&void 0!==o?o:null==l?void 0:l.stsToken,(null==l?void 0:l.host)&&l.endpoint&&l.bucket&&l.accessKeyId&&l.accessKeySecret&&p){e.next=4;break}throw new Error("OBS 临时凭证缺少必要字段");case 4:if(f=new URL(l.endpoint),/^https?:$/.test(f.protocol)){e.next=5;break}throw new Error("OBS endpoint 必须为 HTTP 或 HTTPS Endpoint");case 5:if(d=Date.now(),v=l.expiration?Date.parse(l.expiration):d+1e3*this.expire,Number.isFinite(v)&&!(v<=d)){e.next=6;break}throw new Error("OBS 临时凭证过期时间无效或已过期");case 6:return r||!this.client||(null===(i=this.ossParams)||void 0===i?void 0:i.endpoint)!==l.endpoint||(null===(a=this.ossParams)||void 0===a?void 0:a.bucket)!==l.bucket?this.client=new t({access_key_id:l.accessKeyId,secret_access_key:l.accessKeySecret,security_token:p,server:l.endpoint,signature:"obs",is_signature_negotiation:!1}):this.client.refresh(l.accessKeyId,l.accessKeySecret,p),this.ossParams=l,this.expiresAt=v-Math.min(6e4,.1*(v-d)),e.abrupt("return",l);case 7:case"end":return e.stop()}},e,this)}))}(),n.prev=3,n.next=4,e.tokenRequest;case 4:return n.abrupt("return",n.sent);case 5:return n.prev=5,e.tokenRequest=null,n.finish(5);case 6:case"end":return n.stop()}},n,null,[[3,,5,6]])})()})}},{key:"getContext",value:function(e){return U(this,void 0,void 0,P.mark(function t(){return P.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:if(e){t.next=1;break}throw new Error("文件不存在");case 1:if(this.reqUrl){t.next=2;break}throw new Error("请求token的地址不存在");case 2:if(this.client&&!(Date.now()>=this.expiresAt)){t.next=3;break}return t.next=3,this.getToken();case 3:return t.abrupt("return",{client:this.client,token:this.ossParams});case 4:case"end":return t.stop()}},t,this)}))}},{key:"upload",value:function(e){return U(this,arguments,void 0,function(e){var t=this,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2?arguments[2]:void 0;return P.mark(function o(){var i;return P.wrap(function(o){for(;;)switch(o.prev=o.next){case 0:if(e){o.next=1;break}throw new Error("文件不存在");case 1:if(!((i=Object.assign(Object.assign({},t.multipartUploadParams),n)).checkpoint||e.size>t.multipartUploadSize||e.size>E)){o.next=2;break}return o.abrupt("return",t.multipartUpload(e,r,i));case 2:return o.abrupt("return",t.directUpload(e,r));case 3:case"end":return o.stop()}},o)})()})}},{key:"directUpload",value:function(e){return U(this,arguments,void 0,function(e){var t=this,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return P.mark(function n(){var o,i,a,u,s;return P.wrap(function(n){for(;;)switch(n.prev=n.next){case 0:if(e){n.next=1;break}throw new Error("文件不存在");case 1:if(!(e.size>E)){n.next=2;break}throw new Error("文件大小不能超过5GB");case 2:return n.next=3,t.getContext(e);case 3:return o=n.sent,i=o.client,a=o.token,u=t.getName(r,e),n.next=4,i.putObject(Object.assign({Bucket:a.bucket,Key:u,SourceFile:e},e.type?{ContentType:e.type}:{}));case 4:return s=n.sent,n.abrupt("return",t.getResult(s,u,a));case 5:case"end":return n.stop()}},n)})()})}},{key:"multipartUpload",value:function(e){return U(this,arguments,void 0,function(e){var t=this,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2?arguments[2]:void 0;return P.mark(function o(){var i,a,u,s,c,l,p,f,d,v,h,x,b,y,m,w,g,k,S,_;return P.wrap(function(o){for(;;)switch(o.prev=o.next){case 0:if(e){o.next=1;break}throw new Error("文件不存在");case 1:if(!(e.size>536870912e5)){o.next=2;break}throw new Error("文件超过 OBS 分段上传上限");case 2:if((f=Object.assign(Object.assign({},t.multipartUploadParams),n)).checkpoint||!(e.size<T)){o.next=3;break}return o.abrupt("return",t.directUpload(e,r));case 3:if(d=null!==(i=f.parallel)&&void 0!==i?i:5,v=null!==(a=f.partSize)&&void 0!==a?a:1048576,Number.isInteger(d)&&!(d<1)){o.next=4;break}throw new Error("parallel 必须为大于 0 的整数");case 4:if(!(!Number.isInteger(v)||v<T||v>E)){o.next=5;break}throw new Error("partSize 必须为 100KB~5GB 的整数字节数");case 5:return o.next=6,t.getContext(e);case 6:if(h=o.sent,x=h.client,b=h.token,!(y=f.checkpoint)||y.key&&y.bucket===b.bucket&&(null===(u=y.sourceFile)||void 0===u?void 0:u.name)===e.name&&(null===(s=y.fileStat)||void 0===s?void 0:s.fileSize)===e.size&&(null===(c=y.fileStat)||void 0===c?void 0:c.lastModified)===e.lastModified){o.next=7;break}throw new Error("checkpoint 与当前文件或 OBS 桶不匹配");case 7:return m=null!==(l=null==y?void 0:y.key)&&void 0!==l?l:t.getName(r,e),w=t.getCdnUrl(b.host,m),g=0,o.next=8,x.uploadFile(Object.assign(Object.assign({Bucket:b.bucket,Key:m,SourceFile:e,TaskNum:d,PartSize:v},e.type?{ContentType:e.type}:{}),{UploadCheckpoint:y,ResumeCallback:function(e,t){var r,n;y=t;var o=t.parts.reduce(function(e,t){return e+(t.isCompleted?t.partSize:0)},0);g=t.fileStat.fileSize>0?Math.min(1,Math.max(0,o/t.fileStat.fileSize)):0,null===(r=f.resumeCallback)||void 0===r||r.call(f,e,t),null===(n=f.progress)||void 0===n||n.call(f,g,w,t,k)},ProgressCallback:function(e,t){var r;g=t>0?Math.min(1,Math.max(0,e/t)):0,null===(r=f.progress)||void 0===r||r.call(f,g,w,y,k)},EventCallback:function(e,t,r){var n,o;k=r,null===(n=f.eventCallback)||void 0===n||n.call(f,e,t,r),"uploadPartSucceed"===e&&(null===(o=f.progress)||void 0===o||o.call(f,g,w,y,r))}}));case 8:return S=o.sent,_=t.getResult(S,m,b),null===(p=f.progress)||void 0===p||p.call(f,1,w,y,S),o.abrupt("return",_);case 9:case"end":return o.stop()}},o)})()})}},{key:"getResult",value:function(e,t,r){var n,o,i,a,u,s,c,l=null===(n=null==e?void 0:e.CommonMsg)||void 0===n?void 0:n.Status;if(!(l>=200&&l<300)){var p=new Error("OBS 上传失败:".concat(null!==(a=null!==(i=null===(o=null==e?void 0:e.CommonMsg)||void 0===o?void 0:o.Code)&&void 0!==i?i:l)&&void 0!==a?a:"未知状态"," ").concat(null!==(s=null===(u=null==e?void 0:e.CommonMsg)||void 0===u?void 0:u.Message)&&void 0!==s?s:""));throw Object.assign(p,{ossResParams:e}),p}var f=new URL(r.endpoint);return f.hostname="".concat(r.bucket,".").concat(f.hostname),f.pathname="/".concat(t.split("/").map(encodeURIComponent).join("/")),f.search="",f.hash="",{cdnUrl:this.getCdnUrl(r.host,t),ossUrl:(null===(c=e.InterfaceResult)||void 0===c?void 0:c.Location)||f.toString(),fileName:t,ossResParams:e}}},{key:"getCdnUrl",value:function(e,t){return"".concat(e.replace(/\/+$/,""),"/").concat(t.split("/").map(encodeURIComponent).join("/"))}},{key:"getYYYYMMDDHHMMSS",value:function(e){var t=e||new Date,r=t.getFullYear(),n=String(t.getMonth()+1).padStart(2,"0"),o=String(t.getDate()).padStart(2,"0"),i=String(t.getHours()).padStart(2,"0"),a=String(t.getMinutes()).padStart(2,"0"),u=String(t.getSeconds()).padStart(2,"0");return"".concat(r).concat(n).concat(o).concat(i).concat(a).concat(u)}},{key:"getSafeFileExtension",value:function(e){var t=e.match(/\.([a-zA-Z0-9]+)$/);return t?t[1].replace(/[^a-zA-Z0-9]/g,"").toLowerCase():""}},{key:"getName",value:function(e,t){var n="".concat(this.dir).concat(e).replace(/\/+$/,""),o=this.getYYYYMMDDHHMMSS(),i=this.getSafeFileExtension(t.name);return"hw-oss-web".concat(n,"/").concat(o,"_").concat(r.nanoid(16)).concat(i?"."+i:"")}}])}();e.HwOss=C});
3
+ var n,o,i="function"==typeof Symbol?Symbol:{},a=i.iterator||"@@iterator",u=i.toStringTag||"@@toStringTag";function s(e,r,i,a){var u=r&&r.prototype instanceof l?r:l,s=Object.create(u.prototype);return t(s,"_invoke",function(e,t,r){var i,a,u,s=0,l=r||[],p=!1,f={p:0,n:0,v:n,a:d,f:d.bind(n,4),d:function(e,t){return i=e,a=0,u=n,f.n=t,c}};function d(e,t){for(a=e,u=t,o=0;!p&&s&&!r&&o<l.length;o++){var r,i=l[o],d=f.p,v=i[2];e>3?(r=v===t)&&(u=i[(a=i[4])?5:(a=3,3)],i[4]=i[5]=n):i[0]<=d&&((r=e<2&&d<i[1])?(a=0,f.v=t,f.n=i[1]):d<v&&(r=e<3||i[0]>t||t>v)&&(i[4]=e,i[5]=t,f.n=v,a=0))}if(r||e>1)return c;throw p=!0,t}return function(r,l,v){if(s>1)throw TypeError("Generator is already running");for(p&&1===l&&d(l,v),a=l,u=v;(o=a<2?n:u)||!p;){i||(a?a<3?(a>1&&(f.n=-1),d(a,u)):f.n=u:f.v=u);try{if(s=2,i){if(a||(r="next"),o=i[r]){if(!(o=o.call(i,u)))throw TypeError("iterator result is not an object");if(!o.done)return o;u=o.value,a<2&&(a=0)}else 1===a&&(o=i.return)&&o.call(i),a<2&&(u=TypeError("The iterator does not provide a '"+r+"' method"),a=1);i=n}else if((o=(p=f.n<0)?u:e.call(t,f))!==c)break}catch(e){i=n,a=1,u=e}finally{s=1}}return{value:o,done:p}}}(e,i,a),!0),s}var c={};function l(){}function p(){}function f(){}o=Object.getPrototypeOf;var d=[][a]?o(o([][a]())):(t(o={},a,function(){return this}),o),v=f.prototype=l.prototype=Object.create(d);function h(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,f):(e.__proto__=f,t(e,u,"GeneratorFunction")),e.prototype=Object.create(v),e}return p.prototype=f,t(v,"constructor",f),t(f,"constructor",p),p.displayName="GeneratorFunction",t(f,u,"GeneratorFunction"),t(v),t(v,u,"Generator"),t(v,a,function(){return this}),t(v,"toString",function(){return"[object Generator]"}),(e.exports=r=function(){return{w:s,m:h}},e.exports.__esModule=!0,e.exports.default=e.exports)()}e.exports=r,e.exports.__esModule=!0,e.exports.default=e.exports}(l);var d=l.exports,v={exports:{}},h={exports:{}},x={exports:{}};!function(e){var t=c,r=f;e.exports=function e(n,o){function i(e,r,a,u){try{var s=n[e](r),c=s.value;return c instanceof t?o.resolve(c.v).then(function(e){i("next",e,a,u)},function(e){i("throw",e,a,u)}):o.resolve(c).then(function(e){s.value=e,a(s)},function(e){return i("throw",e,a,u)})}catch(e){u(e)}}var a;this.next||(r(e.prototype),r(e.prototype,"function"==typeof Symbol&&Symbol.asyncIterator||"@asyncIterator",function(){return this})),r(this,"_invoke",function(e,t,r){function n(){return new o(function(t,n){i(e,r,t,n)})}return a=a?a.then(n,n):n()},!0)},e.exports.__esModule=!0,e.exports.default=e.exports}(x);var y=x.exports;!function(e){var t=d,r=y;e.exports=function(e,n,o,i,a){return new r(t().w(e,n,o,i),a||Promise)},e.exports.__esModule=!0,e.exports.default=e.exports}(h);var b=h.exports;!function(e){var t=b;e.exports=function(e,r,n,o,i){var a=t(e,r,n,o,i);return a.next().then(function(e){return e.done?e.value:a.next()})},e.exports.__esModule=!0,e.exports.default=e.exports}(v);var m=v.exports,g={exports:{}};!function(e){e.exports=function(e){var t=Object(e),r=[];for(var n in t)r.unshift(n);return function e(){for(;r.length;)if((n=r.pop())in t)return e.value=n,e.done=!1,e;return e.done=!0,e}},e.exports.__esModule=!0,e.exports.default=e.exports}(g);var w=g.exports,k={exports:{}},S={exports:{}};!function(e){function t(r){return e.exports=t="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,t(r)}e.exports=t,e.exports.__esModule=!0,e.exports.default=e.exports}(S);var _=S.exports;!function(e){var t=_.default;e.exports=function(e){if(null!=e){var r=e["function"==typeof Symbol&&Symbol.iterator||"@@iterator"],n=0;if(r)return r.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length))return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}}}throw new TypeError(t(e)+" is not iterable")},e.exports.__esModule=!0,e.exports.default=e.exports}(k);var O=k.exports;!function(e){var t=c,r=d,n=m,o=b,i=y,a=w,u=O;function s(){var c=r(),l=c.m(s),p=(Object.getPrototypeOf?Object.getPrototypeOf(l):l.__proto__).constructor;function f(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))}var d={throw:1,return:2,break:3,continue:3};function v(e){var t,r;return function(n){t||(t={stop:function(){return r(n.a,2)},catch:function(){return n.v},abrupt:function(e,t){return r(n.a,d[e],t)},delegateYield:function(e,o,i){return t.resultName=o,r(n.d,u(e),i)},finish:function(e){return r(n.f,e)}},r=function(e,r,o){n.p=t.prev,n.n=t.next;try{return e(r,o)}finally{t.next=n.n}}),t.resultName&&(t[t.resultName]=n.v,t.resultName=void 0),t.sent=n.v,t.next=n.n;try{return e.call(this,t)}finally{n.p=t.prev,n.n=t.next}}}return(e.exports=s=function(){return{wrap:function(e,t,r,n){return c.w(v(e),t,r,n&&n.reverse())},isGeneratorFunction:f,mark:c.m,awrap:function(e,r){return new t(e,r)},AsyncIterator:i,async:function(e,t,r,i,a){return(f(t)?o:n)(v(e),t,r,i,a)},keys:a,values:u}},e.exports.__esModule=!0,e.exports.default=e.exports)()}e.exports=s,e.exports.__esModule=!0,e.exports.default=e.exports}(u);var M=(0,u.exports)(),j=M;try{regeneratorRuntime=M}catch(e){"object"===("undefined"==typeof globalThis?"undefined":n(globalThis))?globalThis.regeneratorRuntime=M:Function("r","regeneratorRuntime = r")(M)}var U=a(j);function P(e,t,r,n){return new(r||(r=Promise))(function(o,i){function a(e){try{s(n.next(e))}catch(e){i(e)}}function u(e){try{s(n.throw(e))}catch(e){i(e)}}function s(e){var t;e.done?o(e.value):(t=e.value,t instanceof r?t:new r(function(e){e(t)})).then(a,u)}s((n=n.apply(e,t||[])).next())})}"function"==typeof SuppressedError&&SuppressedError;var E=5368709120,T=102400,C=function(){return i(function e(t){var r,n,o,i;if(function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.ossParams=null,this.expiresAt=0,this.tokenRequest=null,this.reqUrl=t.reqUrl,this.expire=null!==(r=t.expire)&&void 0!==r?r:3600,this.dir=null!==(n=t.dir)&&void 0!==n?n:"public",this.multipartUploadSize=null!==(o=t.multipartUploadSize)&&void 0!==o?o:104857600,this.multipartUploadParams=null!==(i=t.multipartUploadParams)&&void 0!==i?i:{},!Number.isFinite(this.expire)||this.expire<=0)throw new Error("expire 必须为大于 0 的秒数");if(!Number.isFinite(this.multipartUploadSize)||this.multipartUploadSize<0)throw new Error("multipartUploadSize 必须为非负字节数")},[{key:"getToken",value:function(){return P(this,arguments,void 0,function(){var e=this,r=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return U.mark(function n(){return U.wrap(function(n){for(;;)switch(n.prev=n.next){case 0:if(e.reqUrl){n.next=1;break}throw new Error("请求token的地址不存在");case 1:if(!e.tokenRequest){n.next=2;break}return n.abrupt("return",e.tokenRequest);case 2:return e.tokenRequest=function(){return P(e,void 0,void 0,U.mark(function e(){var n,o,i,a,u,s,c,l,p,f,d,v;return U.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return(u=new URL(this.reqUrl,null===(n=globalThis.location)||void 0===n?void 0:n.href)).searchParams.set("expire",String(this.expire)),e.next=1,fetch(u.toString());case 1:if((s=e.sent).ok){e.next=2;break}throw new Error("获取 OBS 临时凭证失败:HTTP ".concat(s.status));case 2:return e.next=3,s.json();case 3:if(c=e.sent,l=c.data,p=null!==(o=null==l?void 0:l.securityToken)&&void 0!==o?o:null==l?void 0:l.stsToken,(null==l?void 0:l.host)&&l.endpoint&&l.bucket&&l.accessKeyId&&l.accessKeySecret&&p){e.next=4;break}throw new Error("OBS 临时凭证缺少必要字段");case 4:if(f=new URL(l.endpoint),/^https?:$/.test(f.protocol)){e.next=5;break}throw new Error("OBS endpoint 必须为 HTTP 或 HTTPS Endpoint");case 5:if(d=Date.now(),v=l.expiration?Date.parse(l.expiration):d+1e3*this.expire,Number.isFinite(v)&&!(v<=d)){e.next=6;break}throw new Error("OBS 临时凭证过期时间无效或已过期");case 6:return r||!this.client||(null===(i=this.ossParams)||void 0===i?void 0:i.endpoint)!==l.endpoint||(null===(a=this.ossParams)||void 0===a?void 0:a.bucket)!==l.bucket?this.client=new t({access_key_id:l.accessKeyId,secret_access_key:l.accessKeySecret,security_token:p,server:l.endpoint,signature:"obs",is_signature_negotiation:!1}):this.client.refresh(l.accessKeyId,l.accessKeySecret,p),this.ossParams=l,this.expiresAt=v-Math.min(6e4,.1*(v-d)),e.abrupt("return",l);case 7:case"end":return e.stop()}},e,this)}))}(),n.prev=3,n.next=4,e.tokenRequest;case 4:return n.abrupt("return",n.sent);case 5:return n.prev=5,e.tokenRequest=null,n.finish(5);case 6:case"end":return n.stop()}},n,null,[[3,,5,6]])})()})}},{key:"getContext",value:function(e){return P(this,void 0,void 0,U.mark(function t(){return U.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:if(e){t.next=1;break}throw new Error("文件不存在");case 1:if(this.reqUrl){t.next=2;break}throw new Error("请求token的地址不存在");case 2:if(this.client&&!(Date.now()>=this.expiresAt)){t.next=3;break}return t.next=3,this.getToken();case 3:return t.abrupt("return",{client:this.client,token:this.ossParams});case 4:case"end":return t.stop()}},t,this)}))}},{key:"upload",value:function(e){return P(this,arguments,void 0,function(e){var t=this,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2?arguments[2]:void 0;return U.mark(function o(){var i;return U.wrap(function(o){for(;;)switch(o.prev=o.next){case 0:if(e){o.next=1;break}throw new Error("文件不存在");case 1:if(!((i=Object.assign(Object.assign({},t.multipartUploadParams),n)).checkpoint||e.size>t.multipartUploadSize||e.size>E)){o.next=2;break}return o.abrupt("return",t.multipartUpload(e,r,i));case 2:return o.abrupt("return",t.directUpload(e,r));case 3:case"end":return o.stop()}},o)})()})}},{key:"directUpload",value:function(e){return P(this,arguments,void 0,function(e){var t=this,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return U.mark(function n(){var o,i,a,u,s;return U.wrap(function(n){for(;;)switch(n.prev=n.next){case 0:if(e){n.next=1;break}throw new Error("文件不存在");case 1:if(!(e.size>E)){n.next=2;break}throw new Error("文件大小不能超过5GB");case 2:return n.next=3,t.getContext(e);case 3:return o=n.sent,i=o.client,a=o.token,u=t.getName(r,e),n.next=4,i.putObject(Object.assign({Bucket:a.bucket,Key:u,SourceFile:e},e.type?{ContentType:e.type}:{}));case 4:return s=n.sent,n.abrupt("return",t.getResult(s,u,a));case 5:case"end":return n.stop()}},n)})()})}},{key:"multipartUpload",value:function(e){return P(this,arguments,void 0,function(e){var t=this,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2?arguments[2]:void 0;return U.mark(function o(){var i,a,u,s,c,l,p,f,d,v,h,x,y,b,m,g,w,k,S,_;return U.wrap(function(o){for(;;)switch(o.prev=o.next){case 0:if(e){o.next=1;break}throw new Error("文件不存在");case 1:if(!(e.size>536870912e5)){o.next=2;break}throw new Error("文件超过 OBS 分段上传上限");case 2:if((f=Object.assign(Object.assign({},t.multipartUploadParams),n)).checkpoint||!(e.size<T)){o.next=3;break}return o.abrupt("return",t.directUpload(e,r));case 3:if(d=null!==(i=f.parallel)&&void 0!==i?i:5,v=null!==(a=f.partSize)&&void 0!==a?a:1048576,Number.isInteger(d)&&!(d<1)){o.next=4;break}throw new Error("parallel 必须为大于 0 的整数");case 4:if(!(!Number.isInteger(v)||v<T||v>E)){o.next=5;break}throw new Error("partSize 必须为 100KB~5GB 的整数字节数");case 5:return o.next=6,t.getContext(e);case 6:if(h=o.sent,x=h.client,y=h.token,!(b=f.checkpoint)||b.key&&b.bucket===y.bucket&&(null===(u=b.sourceFile)||void 0===u?void 0:u.name)===e.name&&(null===(s=b.fileStat)||void 0===s?void 0:s.fileSize)===e.size&&(null===(c=b.fileStat)||void 0===c?void 0:c.lastModified)===e.lastModified){o.next=7;break}throw new Error("checkpoint 与当前文件或 OBS 桶不匹配");case 7:return m=null!==(l=null==b?void 0:b.key)&&void 0!==l?l:t.getName(r,e),g=t.getCdnUrl(y.host,m),w=0,o.next=8,x.uploadFile(Object.assign(Object.assign({Bucket:y.bucket,Key:m,SourceFile:e,TaskNum:d,PartSize:v},e.type?{ContentType:e.type}:{}),{UploadCheckpoint:b,ResumeCallback:function(e,t){var r,n;b=t;var o=t.parts.reduce(function(e,t){return e+(t.isCompleted?t.partSize:0)},0);w=t.fileStat.fileSize>0?Math.min(1,Math.max(0,o/t.fileStat.fileSize)):0,null===(r=f.resumeCallback)||void 0===r||r.call(f,e,t),null===(n=f.progress)||void 0===n||n.call(f,w,g,t,k)},ProgressCallback:function(e,t){var r;w=t>0?Math.min(1,Math.max(0,e/t)):0,null===(r=f.progress)||void 0===r||r.call(f,w,g,b,k)},EventCallback:function(e,t,r){var n,o;k=r,null===(n=f.eventCallback)||void 0===n||n.call(f,e,t,r),"uploadPartSucceed"===e&&(null===(o=f.progress)||void 0===o||o.call(f,w,g,b,r))}}));case 8:return S=o.sent,_=t.getResult(S,m,y),null===(p=f.progress)||void 0===p||p.call(f,1,g,b,S),o.abrupt("return",_);case 9:case"end":return o.stop()}},o)})()})}},{key:"getResult",value:function(e,t,r){var n,o,i,a,u,s,c,l=null===(n=null==e?void 0:e.CommonMsg)||void 0===n?void 0:n.Status;if(!(l>=200&&l<300)){var p=new Error("OBS 上传失败:".concat(null!==(a=null!==(i=null===(o=null==e?void 0:e.CommonMsg)||void 0===o?void 0:o.Code)&&void 0!==i?i:l)&&void 0!==a?a:"未知状态"," ").concat(null!==(s=null===(u=null==e?void 0:e.CommonMsg)||void 0===u?void 0:u.Message)&&void 0!==s?s:""));throw Object.assign(p,{ossResParams:e}),p}var f=new URL(r.endpoint);f.hostname="".concat(r.bucket,".").concat(f.hostname),f.pathname="/".concat(t.split("/").map(encodeURIComponent).join("/")),f.search="",f.hash="";var d=null===(c=e.InterfaceResult)||void 0===c?void 0:c.Location,v=f.toString();if("string"==typeof d)try{var h=new URL(d);/^https?:$/.test(h.protocol)&&(v=h.toString())}catch(e){}return{cdnUrl:this.getCdnUrl(r.host,t),ossUrl:v,fileName:t,ossResParams:e}}},{key:"getCdnUrl",value:function(e,t){return"".concat(e.replace(/\/+$/,""),"/").concat(t.split("/").map(encodeURIComponent).join("/"))}},{key:"getYYYYMMDDHHMMSS",value:function(e){var t=e||new Date,r=t.getFullYear(),n=String(t.getMonth()+1).padStart(2,"0"),o=String(t.getDate()).padStart(2,"0"),i=String(t.getHours()).padStart(2,"0"),a=String(t.getMinutes()).padStart(2,"0"),u=String(t.getSeconds()).padStart(2,"0");return"".concat(r).concat(n).concat(o).concat(i).concat(a).concat(u)}},{key:"getSafeFileExtension",value:function(e){var t=e.match(/\.([a-zA-Z0-9]+)$/);return t?t[1].replace(/[^a-zA-Z0-9]/g,"").toLowerCase():""}},{key:"getName",value:function(e,t){var n="".concat(this.dir).concat(e).replace(/\/+$/,""),o=this.getYYYYMMDDHHMMSS(),i=this.getSafeFileExtension(t.name);return"hw-oss-web".concat(n,"/").concat(o,"_").concat(r.nanoid(16)).concat(i?"."+i:"")}}])}();e.HwOss=C});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bnfe/obs-upload",
3
- "version": "1.0.1",
3
+ "version": "1.0.3",
4
4
  "description": "华为云 OBS 浏览器文件上传",
5
5
  "main": "dist/obs-upload.cjs.js",
6
6
  "module": "dist/obs-upload.esm.js",