UNPKG

tim-upload-plugin

Version:

Official Upload Plugin for Tencent Cloud Chat

2 lines (1 loc) 9.66 kB
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).TIMUploadPlugin=t()}(this,(function(){function e(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function t(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,s(o.key),o)}}function n(e,n,o){return n&&t(e.prototype,n),o&&t(e,o),Object.defineProperty(e,"prototype",{writable:!1}),e}function o(e,t,n){return(t=s(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function a(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?r(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var o=n.call(e,t||"default");if("object"!=typeof o)return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}function i(e){return(i="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)}var u="undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},l="undefined"!=typeof wx&&"function"==typeof wx.getSystemInfoSync&&("mac"===wx.getSystemInfoSync().platform||"windows"===wx.getSystemInfoSync().platform),f="undefined"!=typeof wx&&"function"==typeof wx.getSystemInfoSync&&Boolean(wx.getSystemInfoSync().fontSizeSetting)||l,c="undefined"!=typeof qq&&"function"==typeof qq.getSystemInfoSync&&Boolean(qq.getSystemInfoSync().fontSizeSetting),d="undefined"!=typeof tt&&"function"==typeof tt.getSystemInfoSync&&Boolean(tt.getSystemInfoSync().fontSizeSetting),p="undefined"!=typeof swan&&"function"==typeof swan.getSystemInfoSync&&Boolean(swan.getSystemInfoSync().fontSizeSetting),y="undefined"!=typeof my&&"function"==typeof my.getSystemInfoSync&&Boolean(my.getSystemInfoSync().fontSizeSetting),m="undefined"!=typeof uni&&"undefined"==typeof window&&"function"==typeof uni.requireNativePlugin,g=m&&"ios"===uni.getDeviceInfo().platform.toLocaleLowerCase(),h=(m&&uni.getDeviceInfo().platform.toLocaleLowerCase(),f||c||d||p||y||m),v=void 0!==u&&(void 0!==u.nativeModuleProxy||void 0!==u.ReactNative),b=c?qq:d?tt:p?swan:y?my:f?wx:m?uni:{},w=function(e){if("object"!==i(e)||null===e)return!1;var t=Object.getPrototypeOf(e);if(null===t)return!0;for(var n=t;null!==Object.getPrototypeOf(n);)n=Object.getPrototypeOf(n);return t===n};function S(e){if(null==e)return!0;if("boolean"==typeof e)return!1;if("number"==typeof e)return 0===e;if("string"==typeof e)return 0===e.length;if("function"==typeof e)return 0===e.length;if(Array.isArray(e))return 0===e.length;if(e instanceof Error)return""===e.message;if(w(e)){for(var t in e)if(Object.prototype.hasOwnProperty.call(e,t))return!1;return!0}return!1}var O=function(){return n((function t(){e(this,t),this._n="WebRequest"}),[{key:"request",value:function(e,t){var n=this,o="".concat(this._n,".request"),r=e.downloadUrl||"",s=(e.method||"PUT").toUpperCase(),i=e.url;if(console.log("%c tim-upload-plugin %c","background:#0abf5b; padding:1px; border-radius:3px; color: #fff","background:transparent","".concat(o," URL:").concat(i)),e.qs){var u=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"&",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"=";return S(e)?"":w(e)?Object.keys(e).map((function(o){var r=encodeURIComponent(o)+n;return Array.isArray(e[o])?e[o].map((function(e){return r+encodeURIComponent(e)})).join(t):r+encodeURIComponent(e[o])})).filter(Boolean).join(t):void 0}(e.qs);u&&(i+="".concat(-1===i.indexOf("?")?"?":"&").concat(u))}var l=new XMLHttpRequest;l.open(s,i,!0),l.responseType=e.dataType||"text";var f=e.headers||{};if(e.uploadByIP&&(f=a(a({},f),{},{host:e.uploadIP})),!S(f))for(var c in f)f.hasOwnProperty(c)&&"content-length"!==c.toLowerCase()&&"user-agent"!==c.toLowerCase()&&"origin"!==c.toLowerCase()&&"host"!==c.toLowerCase()&&l.setRequestHeader(c,f[c]);return l.onload=function(){if(200===l.status)t(null,n._xhrRes(l,n._xhrBody(l,r,e.uploadByIP&&e.uploadIP),f));else{if(e.uploadIP&&-1===e.url.indexOf(e.uploadIP))return e.url=function(e,t){return e.replace(/^http(s)?:\/\/(.*?)\//,"https://".concat(t,"/"))}(e.url,e.uploadIP),e.uploadByIP=!0,n.request(e,t);var o={code:l.status,message:JSON.stringify(l.responseText)};t(o,n._xhrRes(l,n._xhrBody(l,r,e.uploadByIP&&e.uploadIP),f))}},l.onerror=function(o){var a=n._xhrBody(l,r,e.uploadByIP&&e.uploadIP),s={code:l.status,message:JSON.stringify(l.responseText)};a||l.statusText||0!==l.status||(o.message="CORS blocked or network error"),t(s,n._xhrRes(l,a)),s=null},e.onProgress&&l.upload&&(l.upload.onprogress=function(t){var n=t.total,o=t.loaded,r=Math.floor(100*o/n);e.onProgress({total:n,loaded:o,percent:(r>=100?100:r)/100})}),l.send(e.resources),l}},{key:"_xhrRes",value:function(e,t){var n={};return e.getAllResponseHeaders().trim().split("\n").forEach((function(e){if(e){var t=e.indexOf(":"),o=e.substr(0,t).trim().toLowerCase(),r=e.substr(t+1).trim();n[o]=r}})),{statusCode:e.status,statusMessage:e.statusText,headers:n,data:t}}},{key:"_xhrBody",value:function(e,t,n){return 200===e.status&&t?{location:t,uploadIP:n}:{response:e.responseText,uploadIP:n}}}])}(),P=["unknown","image","video","audio","log"],I=["name"],C=function(){return n((function t(){e(this,t)}),[{key:"request",value:function(e,t){var n=this,o=e.resources,r=void 0===o?"":o,s=e.headers,i=void 0===s?{}:s,u=e.url,l=e.downloadUrl,f=void 0===l?"":l,c=u,d=null,p=f.match(/^(https?:\/\/[^/]+\/)([^/]*\/?)(.*)$/),m=decodeURIComponent(p[3]),h=m.indexOf("?")>-1?m.split("?")[0]:m,v={key:e.fileKey?e.fileKey:h,success_action_status:200,"Content-Type":""},w={};if(g){var S=u.split("?sign=");if(S.length>1){var O=S[1];c="".concat(S[0],"?sign=").concat(encodeURIComponent("".concat(O))),w.sign=decodeURIComponent(O),w.signature=decodeURIComponent(O)}}var C={url:c,header:i,name:"file",filePath:r,formData:a(a({},v),w),timeout:e.timeout||3e5};if(y){var x=C;x.name;C=a(a({},function(e,t){if(null==e)return{};var n,o,r=function(e,t){if(null==e)return{};var n={};for(var o in e)if({}.hasOwnProperty.call(e,o)){if(t.includes(o))continue;n[o]=e[o]}return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o<a.length;o++)n=a[o],t.includes(n)||{}.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}(x,I)),{},{fileName:"file",fileType:P[e.fileType]})}return(d=b.uploadFile(a(a({},C),{},{success:function(e){n._handleResponse({response:e,downloadUrl:f,callback:t})},fail:function(e){n._handleResponse({response:e,downloadUrl:f,callback:t})}}))).onProgressUpdate&&d.onProgressUpdate((function(t){e.onProgress&&e.onProgress({total:t.totalBytesExpectedToSend,loaded:t.totalBytesSent,percent:Math.floor(t.progress)/100})})),d}},{key:"_handleResponse",value:function(e){var t=e.downloadUrl,n=e.response,o=e.callback,r=n.header,s={};if(r)for(var i in r)r.hasOwnProperty(i)&&(s[i.toLowerCase()]=r[i]);var u=+n.statusCode;200===u?o(null,{statusCode:u,headers:s,data:a(a({},n.data),{},{location:t})}):o({code:u,message:JSON.stringify(n.data)},{statusCode:u,headers:s,data:void 0})}}])}(),x=function(){return n((function t(){e(this,t)}),[{key:"request",value:function(e,t){var n=this,o=e.resources,r=void 0===o?"":o,a=e.fileKey,s=void 0===a?"":a,i=e.url,u=e.downloadUrl,l=void 0===u?"":u,f=new FormData;f.append("key",s),f.append("success_action_status",200),f.append("file",{uri:r,type:"application/octet-stream",name:"uploaded_file"}),fetch(i,{method:"POST",headers:{"Content-Type":"multipart/form-data"},body:f}).then((function(e){n._handleResponse({response:e,downloadUrl:l,callback:t})})).catch((function(e){n._handleResponse({response:e,downloadUrl:l,callback:t})}))}},{key:"_handleResponse",value:function(e){var t=e.downloadUrl,n=e.response,o=e.callback,r=n.headers,a=n.status,s=r&&r.map||{};200===a?o(null,{statusCode:200,headers:s,data:{location:t}}):o({code:a,message:JSON.stringify(n)},{statusCode:a,headers:s,data:void 0})}}])}();return function(){return n((function t(){e(this,t),this.retry=1,this.tryCount=0,this.systemClockOffset=0,this.httpRequest=h?new C:v?new x:new O,console.log("TIMUploadPlugin.VERSION: ".concat("1.4.3"))}),[{key:"uploadFile",value:function(e,t){var n=this;return this.httpRequest.request(e,(function(o,r){o&&n.tryCount<n.retry&&n.allowRetry(o)?(n.tryCount++,n.uploadFile(e,t)):(n.tryCount=0,t(o,r))}))}},{key:"allowRetry",value:function(e){var t=!1,n=!1;if(e){var o=e.headers&&(e.headers.date||e.headers.Date)||e.error&&e.error.ServerTime;try{var r=e.error&&e.error.Code,a=e.error&&e.error.Message;("RequestTimeTooSkewed"===r||"AccessDenied"===r&&"Request has expired"===a)&&(n=!0)}catch(u){}if(n&&o){var s=Date.now(),i=Date.parse(o);Math.abs(s+this.systemClockOffset-i)>=3e4&&(this.systemClockOffset=i-s,t=!0)}else 5===Math.floor(e.statusCode/100)&&(t=!0)}return t}}],[{key:"getVersion",value:function(){return"1.4.3"}}])}()}));