@kdcloudjs/kwc-shared-utils 0.0.1

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.
@@ -0,0 +1 @@
1
+ "use strict";var s=require("../index-DSwttGxP.js");exports.getAppName=s.getApp,exports.getBrowserName=s.getBrowser,exports.isChrome=s.isChrome,exports.isChromiumEdge=s.isChromiumEdge,exports.isDD=s.isDD,exports.isEdge=s.isEdge,exports.isFeiShu=s.isFeiShu,exports.isFirefox=s.isFirefox,exports.isIE=s.isIE,exports.isLegacyEdge=s.isLegacyEdge,exports.isMobile=s.isMobile,exports.isPC=s.isPC,exports.isSafari=s.isSafari,exports.isWX=s.isWX,exports.isWeLink=s.isWeLink,exports.isWxWork=s.isWxWork,exports.isYzj=s.isYzj,exports.isYzjDesktop=s.isYzjDesktop,exports.isYzjOldDesktop=s.isYzjOldDesktop;
@@ -0,0 +1 @@
1
+ export{g as getAppName,k as getBrowserName,l as isChrome,m as isChromiumEdge,a as isDD,n as isEdge,b as isFeiShu,p as isFirefox,q as isIE,o as isLegacyEdge,s as isMobile,t as isPC,r as isSafari,e as isWX,c as isWeLink,d as isWxWork,f as isYzj,h as isYzjDesktop,j as isYzjOldDesktop}from"../index-BvVdlixE.js";
@@ -0,0 +1 @@
1
+ class t{constructor(){this.accessToken=null,this.refreshToken=null,this.isInitialized=!1,this.isAuthenticating=!1,this.authPromise=null,this.authConfig=null,this.listeners=new Set,this.loadTokensFromStorage()}async initialize(t){if(this.isInitialized&&this.accessToken)return!0;this.authConfig={endpoint:t.endpoint||"/kapi/oauth2/getToken",method:t.method||"POST",headers:t.headers||{"Content-Type":"application/json"},body:t.bodyParams||{},params:t.queryParams||{}};try{await this.authenticate(),this.isInitialized=!0,this.notifyListeners("initialized",{success:!0})}catch(t){throw console.error("AuthManager: Failed to initialize auth - ",t),this.notifyListeners("initialized",{success:!1,error:t}),t}}async authenticate(){if(this.isAuthenticating&&this.authPromise)return this.authPromise;this.isAuthenticating=!0,this.authPromise=this._performAuthentication();try{const t=await this.authPromise;return this.notifyListeners("authenticated",{success:!0}),t}catch(t){throw this.notifyListeners("authenticated",{success:!1,error:t}),t}finally{this.isAuthenticating=!1,this.authPromise=null}}async _performAuthentication(){if(!this.authConfig)throw new Error("Authentication configuration is missing.");const{endpoint:t,headers:e,body:a,method:s}=this.authConfig;try{const i=await fetch(t,{method:s,headers:e,body:JSON.stringify(a)});if(!i.ok)throw new Error(`Authentication failed: ${i.status} - ${i.statusText}`);const r=await i.json();if(!0===r.status&&"0"===r.errorCode)return this.accessToken=r.data.access_token,this.refreshToken=r.data.refresh_token,this.saveTokensToStorage(),r;throw new Error(`Authentication failed: ${r.errorCode} - ${r.message}`)}catch(t){throw console.error("AuthManager: Authentication failed -",t),t}}async refreshAccessToken(){return console.log("AuthManager: Refreshing access token..."),this.authConfig.body.nonce=this.generateNonce(),this.authConfig.body.timestamp=this.formatTimestamp(),this._performAuthentication()}generateNonce(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(t){const e=16*Math.random()|0;return("x"==t?e:3&e|8).toString(16)})}formatTimestamp(t=new Date){return`${t.getFullYear()}-${String(t.getMonth()+1).padStart(2,"0")}-${String(t.getDate()).padStart(2,"0")} ${String(t.getHours()).padStart(2,"0")}:${String(t.getMinutes()).padStart(2,"0")}:${String(t.getSeconds()).padStart(2,"0")}`}getAccessToken(){return this.accessToken}isAuthenticated(){return!!this.accessToken}isReady(){return this.isInitialized&&this.isAuthenticated()}logout(){this.clearTokens(),this.isInitialized=!1,this.authConfig=null,this.notifyListeners("logout",{})}clearTokens(){this.accessToken=null,this.refreshToken=null,this.clearTokensFromStorage()}loadTokensFromStorage(){try{this.accessToken=localStorage.getItem("__kapi_auth_manager_access_token__"),this.refreshToken=localStorage.getItem("__kapi_auth_manager_refresh_token__")}catch(t){console.warn("AuthManager: Error loading tokens from storage")}}saveTokensToStorage(){try{this.accessToken&&localStorage.setItem("__kapi_auth_manager_access_token__",this.accessToken),this.refreshToken&&localStorage.setItem("__kapi_auth_manager_refresh_token__",this.refreshToken)}catch(t){console.warn("AuthManager: Error saving tokens to storage")}}clearTokensFromStorage(){try{localStorage.removeItem("__kapi_auth_manager_access_token__"),localStorage.removeItem("__kapi_auth_manager_refresh_token__")}catch(t){console.warn("AuthManager: Error removing tokens to storage")}}addListener(t){this.listeners.add(t)}removeListener(t){this.listeners.delete(t)}notifyListeners(t,e){this.listeners.forEach(a=>{try{a(t,e)}catch(t){console.error("AuthManager: Error notifying listener")}})}async waitForAuth(){return!this.isAuthenticated()||(this.isAuthenticating&&this.authPromise?(await this.authPromise,this.isAuthenticated()):void 0)}}const e=new t;async function a(t){return await e.initialize(t)}function s(){return e.isAuthenticated()}class i{constructor(t){this.name="OpenApiWireAdapter",this.dataCallback=t,this.config={},this.abortController=null,this.retryCount=0,this.maxRetries=3,this.retryDelay=1e3,this.cache=new Map,this.cacheTimeout=3e5,this.authManager=e,this.pendingRequests=new Map,this.requestQueue=[],this.isProcessingQueue=!1}connect(){}update(t){this.config={...t},this.retryCount=0,this.shouldFetchData(t)?this.fetchDataWithQueue(t):this.dataCallback({data:null,error:null})}disconnect(){this.abortController&&this.abortController.abort(),this.cache.clear(),this.pendingRequests.clear(),this.requestQueue=[],this.isProcessingQueue=!1}async waitForAuth(){try{return this.authManager.isReady()||await this.authManager.waitForAuth(),!0}catch(t){throw t}}getAccessToken(){return this.authManager.getAccessToken()}isAuthenticated(){return this.authManager.isAuthenticated()}shouldFetchData(t){return t&&t.endpoint&&void 0!==t.endpoint}async fetchDataWithQueue(t){const e=this.generateRequestKey(t);if(this.pendingRequests.has(e))console.log("Request is inqueue");else{this.requestQueue.push({config:t,requestKey:e,callback:this.callback}),this.pendingRequests.set(e,!0);try{await this.authManager.waitForAuth()}catch(t){return console.error("OpenApi Adapter: Authentication failed, no need to send any request"),this.dataCallback({data:null,error:{message:`Auth failed: ${t.message}`,status:"AUTH_FAILED",originalError:t}}),void this.pendingRequests.delete(e)}this.isProcessingQueue||this.processRequestQueue()}}async processRequestQueue(){for(this.isProcessingQueue=!0;this.requestQueue.length>0;){const t=this.requestQueue.shift();try{await this.fetchDataWithRetry(t.config)}catch(t){console.error("Error fetching data:",t)}finally{this.pendingRequests.delete(t.requestKey)}await this.delay(10)}this.isProcessingQueue=!1}async fetchDataWithRetry(t){const e=this.generateCacheKey(t);if(this.getCachedData(e))return void this.dataCallback(cacheData);let a=null;for(let s=0;s<this.maxRetries;s++)try{const a=await this.performRequest(t);return this.setCacheData(e,a),void this.dataCallback(a)}catch(t){a=t,s<this.maxRetries&&await this.delay(this.retryDelay*Math.pow(2,s))}this.dataCallback({data:null,error:{message:a.message,status:a.status||"NETWORK_ERROR",retries:this.maxRetries}})}async performRequest(t){const{endpoint:e,method:a="GET",params:s={},headers:i={}}=t;this.abortController&&this.abortController.abort(),this.abortController=new AbortController;let r=e;if("GET"===a&&s){r=`${r}?${new URLSearchParams(s).toString()}`}const n={method:a,headers:{"Content-Type":"application/json",access_token:this.authManager.getAccessToken(),...i},body:"GET"===a?null:JSON.stringify(s),signal:this.abortController.signal},o=await fetch(r,n);if(!o.ok)throw new Error(`HTTP error! Status: ${o.status} - ${o.statusText}`);const h=await o.json();return!0===h.status&&"0"===h.errorCode?{data:h.data,error:null}:"401"===h.errorCode?(await this.authManager.refreshAccessToken(),this.performRequest(t)):{data:null,error:{message:h.message,errorCode:h.errorCode,status:h.status}}}getCachedData(t){const e=this.cache.get(t);return e&&Date.now()-e.timestamp<this.cacheTimeout?e.data:(e&&this.cache.delete(t),null)}setCacheData(t,e){if(this.cache.set(t,{data:e,timestamp:Date.now()}),this.cache.size>100){const t=this.cache.keys().next().value;this.cache.delete(t)}}generateCacheKey(t){return JSON.stringify({endpoint:t.endpoint,params:t.params,method:t.method||"GET"})}generateRequestKey(t){return this.generateCacheKey(t)}delay(t){return new Promise(e=>setTimeout(e,t))}static clearAllCache(){this.cache=new Map}static configure(t){void 0!==t.maxRetries&&(OpenApiWireAdapter.prototype.maxRetries=t.maxRetries),void 0!==t.retryDelay&&(OpenApiWireAdapter.prototype.retryDelay=t.retryDelay),void 0!==t.cacheTimeout&&(OpenApiWireAdapter.prototype.cacheTimeout=t.cacheTimeout)}}function r(t){if(!t||!t.endpointConfig)throw new Error("No config provided");const{endpointConfig:e}=t;if("string"==typeof e)return t;if(e.endpoint)return e.endpoint;if(!e.isv)throw new Error("Invalid config isv provided");if(!e.app)throw new Error("Invalid config app provided");if(!e.form)throw new Error("Invalid config form provided");if(!e.serviceName)throw new Error("Invalid config serviceName provided");return`/kapi/${e.version||"v2"}/${e.isv}/${e.app}/${e.form}/${e.serviceName}`}const n=function(t="GET",a={}){return function(s){if("function"==typeof s){const e=new i(s),n=e.update.bind(e);return e.update=function(e){const s={endpoint:r(e),method:t,...a,...e};return delete s.endpointConfig,e&&"object"==typeof e&&!e.endpoint&&(s.params=e.params||e),n(s)},e}return async function(t,a,s){await e.waitForAuth();const n={endpoint:r(s),method:t,...a,...s};delete n.endpointConfig,s&&"object"==typeof s&&!s.endpoint&&(n.params=s.params||s);return new Promise((t,e)=>{const a=new i(a=>{a.error?e(a.error):t(a)});a.connect(),a.update(n)})}(t,a,s||{})}}("POST");var o=Object.freeze({__proto__:null,AuthManager:t,authManager:e,doFetch:n,initializeAuth:a,isAuthenticated:s});export{t as A,e as a,a as b,s as c,n as d,o as i};
@@ -0,0 +1 @@
1
+ const n="yunzhijia",e="yunzhijia_desktop",t="yunzhijia_old_desktop",i="weixin",o="dingding",r="wxwork",s="welink",a="feishu",u="unknown";function g(){const n=navigator.userAgent;return/Qing\/.*;(iOS|iPhone|Android|iPadOS|Harmony)/.test(n)}function c(){const n=navigator.userAgent;return/App\/cloudhub/.test(n)}function d(){const n=navigator.userAgent;return/clientId:10204/.test(n)}function f(){const n=navigator.userAgent;return n.indexOf("MicroMessenger")>-1&&n.indexOf("wxwork")<0}function w(){const n=navigator.userAgent;return n.indexOf("MicroMessenger")>-1&&n.indexOf("wxwork")>-1}function x(){const n=navigator.userAgent,e=n.indexOf("DingTalk")>-1,t=-1===n.indexOf("MiniProgram")&&-1===n.indexOf("dd-web");return e&&t}function p(){const n=navigator.userAgent;return n.indexOf("welink")>-1||n.indexOf("cloudlink")>-1}function h(){return navigator.userAgent.indexOf("Lark/")>-1}function k(){return g()?n:c()?e:d()?t:f()?i:w()?r:x()?o:p?s:h()?a:u}function v(){const n=navigator.userAgent.toLowerCase();return/chrome|crios/.test(n)&&!/edg|edge|opr|opera|fxios|samsungbrowser/.test(n)}function A(){const n=navigator.userAgent.toLowerCase();return/edg/.test(n)}function m(){const n=navigator.userAgent.toLowerCase();return/edge/.test(n)&&!/edg/.test(n)}function l(){return A()||m()}function O(){const n=navigator.userAgent.toLowerCase();return/firefox|fxios/.test(n)}function b(){const n=navigator.userAgent.toLowerCase();return/msie|trident/.test(n)}function C(){const n=navigator.userAgent.toLowerCase();return/safari/.test(n)&&!/chrome|crios|edg|edge|fxios|opr|opera/.test(n)}const L="chrome",j="edge",z="firefox",M="ie",_="safari",y="unknown";function P(){return v()?L:l()?j:O()?z:C()?_:b()?M:y}function D(){const n=navigator.userAgent.toLowerCase(),e="ontouchstart"in window||navigator.maxTouchPoints>0||navigator.msMaxTouchPoints>0;return/android|webos|iphone|ipad|ipod|blackberry|iemobile|opera mini/i.test(n)||e&&window.innerWidth<=1024}function W(){return!D()}var E=Object.freeze({__proto__:null,getAppName:k,getBrowserName:P,isChrome:v,isChromiumEdge:A,isDD:x,isEdge:l,isFeiShu:h,isFirefox:O,isIE:b,isLegacyEdge:m,isMobile:D,isPC:W,isSafari:C,isWX:f,isWeLink:p,isWxWork:w,isYzj:g,isYzjDesktop:c,isYzjOldDesktop:d});export{x as a,h as b,p as c,w as d,f as e,g as f,k as g,c as h,E as i,d as j,P as k,v as l,A as m,l as n,m as o,O as p,b as q,C as r,D as s,W as t};
@@ -0,0 +1 @@
1
+ "use strict";const e=new Set;function t(t,n,o){if(t||(t=document.head),!n||"string"!=typeof n)throw new TypeError("Invalid script URL");return e.has(n)?("function"==typeof o&&o(null,n),Promise.resolve(n)):new Promise((r,l)=>{const i=document.createElement("script");i.src=n,i.type="text/javascript",i.async=!0,i.onload=()=>{e.add(n),"function"==typeof o&&o(null,n),r(n)},i.onerror=e=>{"function"==typeof o&&o(e,n),l(e)};(t.template||t).appendChild(i)})}function n(t,n,o){if(t||(t=document.head),!n||"string"!=typeof n)throw new TypeError("Invalid CSS URL");return e.has(n)?("function"==typeof o&&o(null,n),Promise.resolve(n)):new Promise((r,l)=>{const i=document.createElement("link");i.rel="stylesheet",i.type="text/css",i.href=n,i.onload=()=>{e.add(n),"function"==typeof o&&o(null,n),r(n)},i.onerror=e=>{"function"==typeof o&&o(e,n),l(e)};(t.template||t).appendChild(i)})}var o=Object.freeze({__proto__:null,loadScript:t,loadStyle:n});exports.index=o,exports.loadScript=t,exports.loadStyle=n;
@@ -0,0 +1 @@
1
+ "use strict";const e="yunzhijia",t="yunzhijia_desktop",n="yunzhijia_old_desktop",o="weixin",r="dingding",i="wxwork",s="welink",a="feishu",u="unknown";function g(){const e=navigator.userAgent;return/Qing\/.*;(iOS|iPhone|Android|iPadOS|Harmony)/.test(e)}function c(){const e=navigator.userAgent;return/App\/cloudhub/.test(e)}function d(){const e=navigator.userAgent;return/clientId:10204/.test(e)}function x(){const e=navigator.userAgent;return e.indexOf("MicroMessenger")>-1&&e.indexOf("wxwork")<0}function f(){const e=navigator.userAgent;return e.indexOf("MicroMessenger")>-1&&e.indexOf("wxwork")>-1}function p(){const e=navigator.userAgent,t=e.indexOf("DingTalk")>-1,n=-1===e.indexOf("MiniProgram")&&-1===e.indexOf("dd-web");return t&&n}function w(){const e=navigator.userAgent;return e.indexOf("welink")>-1||e.indexOf("cloudlink")>-1}function k(){return navigator.userAgent.indexOf("Lark/")>-1}function h(){return g()?e:c()?t:d()?n:x()?o:f()?i:p()?r:w?s:k()?a:u}function m(){const e=navigator.userAgent.toLowerCase();return/chrome|crios/.test(e)&&!/edg|edge|opr|opera|fxios|samsungbrowser/.test(e)}function A(){const e=navigator.userAgent.toLowerCase();return/edg/.test(e)}function v(){const e=navigator.userAgent.toLowerCase();return/edge/.test(e)&&!/edg/.test(e)}function l(){return A()||v()}function O(){const e=navigator.userAgent.toLowerCase();return/firefox|fxios/.test(e)}function C(){const e=navigator.userAgent.toLowerCase();return/msie|trident/.test(e)}function L(){const e=navigator.userAgent.toLowerCase();return/safari/.test(e)&&!/chrome|crios|edg|edge|fxios|opr|opera/.test(e)}const b="chrome",j="edge",z="firefox",D="ie",W="safari",E="unknown";function M(){return m()?b:l()?j:O()?z:L()?W:C()?D:E}function y(){const e=navigator.userAgent.toLowerCase(),t="ontouchstart"in window||navigator.maxTouchPoints>0||navigator.msMaxTouchPoints>0;return/android|webos|iphone|ipad|ipod|blackberry|iemobile|opera mini/i.test(e)||t&&window.innerWidth<=1024}function P(){return!y()}var _=Object.freeze({__proto__:null,getAppName:h,getBrowserName:M,isChrome:m,isChromiumEdge:A,isDD:p,isEdge:l,isFeiShu:k,isFirefox:O,isIE:C,isLegacyEdge:v,isMobile:y,isPC:P,isSafari:L,isWX:x,isWeLink:w,isWxWork:f,isYzj:g,isYzjDesktop:c,isYzjOldDesktop:d});exports.getApp=h,exports.getBrowser=M,exports.index=_,exports.isChrome=m,exports.isChromiumEdge=A,exports.isDD=p,exports.isEdge=l,exports.isFeiShu=k,exports.isFirefox=O,exports.isIE=C,exports.isLegacyEdge=v,exports.isMobile=y,exports.isPC=P,exports.isSafari=L,exports.isWX=x,exports.isWeLink=w,exports.isWxWork=f,exports.isYzj=g,exports.isYzjDesktop=c,exports.isYzjOldDesktop=d;
@@ -0,0 +1 @@
1
+ "use strict";class t{constructor(){this.accessToken=null,this.refreshToken=null,this.isInitialized=!1,this.isAuthenticating=!1,this.authPromise=null,this.authConfig=null,this.listeners=new Set,this.loadTokensFromStorage()}async initialize(t){if(this.isInitialized&&this.accessToken)return!0;this.authConfig={endpoint:t.endpoint||"/kapi/oauth2/getToken",method:t.method||"POST",headers:t.headers||{"Content-Type":"application/json"},body:t.bodyParams||{},params:t.queryParams||{}};try{await this.authenticate(),this.isInitialized=!0,this.notifyListeners("initialized",{success:!0})}catch(t){throw console.error("AuthManager: Failed to initialize auth - ",t),this.notifyListeners("initialized",{success:!1,error:t}),t}}async authenticate(){if(this.isAuthenticating&&this.authPromise)return this.authPromise;this.isAuthenticating=!0,this.authPromise=this._performAuthentication();try{const t=await this.authPromise;return this.notifyListeners("authenticated",{success:!0}),t}catch(t){throw this.notifyListeners("authenticated",{success:!1,error:t}),t}finally{this.isAuthenticating=!1,this.authPromise=null}}async _performAuthentication(){if(!this.authConfig)throw new Error("Authentication configuration is missing.");const{endpoint:t,headers:e,body:a,method:i}=this.authConfig;try{const s=await fetch(t,{method:i,headers:e,body:JSON.stringify(a)});if(!s.ok)throw new Error(`Authentication failed: ${s.status} - ${s.statusText}`);const r=await s.json();if(!0===r.status&&"0"===r.errorCode)return this.accessToken=r.data.access_token,this.refreshToken=r.data.refresh_token,this.saveTokensToStorage(),r;throw new Error(`Authentication failed: ${r.errorCode} - ${r.message}`)}catch(t){throw console.error("AuthManager: Authentication failed -",t),t}}async refreshAccessToken(){return console.log("AuthManager: Refreshing access token..."),this.authConfig.body.nonce=this.generateNonce(),this.authConfig.body.timestamp=this.formatTimestamp(),this._performAuthentication()}generateNonce(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(t){const e=16*Math.random()|0;return("x"==t?e:3&e|8).toString(16)})}formatTimestamp(t=new Date){return`${t.getFullYear()}-${String(t.getMonth()+1).padStart(2,"0")}-${String(t.getDate()).padStart(2,"0")} ${String(t.getHours()).padStart(2,"0")}:${String(t.getMinutes()).padStart(2,"0")}:${String(t.getSeconds()).padStart(2,"0")}`}getAccessToken(){return this.accessToken}isAuthenticated(){return!!this.accessToken}isReady(){return this.isInitialized&&this.isAuthenticated()}logout(){this.clearTokens(),this.isInitialized=!1,this.authConfig=null,this.notifyListeners("logout",{})}clearTokens(){this.accessToken=null,this.refreshToken=null,this.clearTokensFromStorage()}loadTokensFromStorage(){try{this.accessToken=localStorage.getItem("__kapi_auth_manager_access_token__"),this.refreshToken=localStorage.getItem("__kapi_auth_manager_refresh_token__")}catch(t){console.warn("AuthManager: Error loading tokens from storage")}}saveTokensToStorage(){try{this.accessToken&&localStorage.setItem("__kapi_auth_manager_access_token__",this.accessToken),this.refreshToken&&localStorage.setItem("__kapi_auth_manager_refresh_token__",this.refreshToken)}catch(t){console.warn("AuthManager: Error saving tokens to storage")}}clearTokensFromStorage(){try{localStorage.removeItem("__kapi_auth_manager_access_token__"),localStorage.removeItem("__kapi_auth_manager_refresh_token__")}catch(t){console.warn("AuthManager: Error removing tokens to storage")}}addListener(t){this.listeners.add(t)}removeListener(t){this.listeners.delete(t)}notifyListeners(t,e){this.listeners.forEach(a=>{try{a(t,e)}catch(t){console.error("AuthManager: Error notifying listener")}})}async waitForAuth(){return!this.isAuthenticated()||(this.isAuthenticating&&this.authPromise?(await this.authPromise,this.isAuthenticated()):void 0)}}const e=new t;async function a(t){return await e.initialize(t)}function i(){return e.isAuthenticated()}class s{constructor(t){this.name="OpenApiWireAdapter",this.dataCallback=t,this.config={},this.abortController=null,this.retryCount=0,this.maxRetries=3,this.retryDelay=1e3,this.cache=new Map,this.cacheTimeout=3e5,this.authManager=e,this.pendingRequests=new Map,this.requestQueue=[],this.isProcessingQueue=!1}connect(){}update(t){this.config={...t},this.retryCount=0,this.shouldFetchData(t)?this.fetchDataWithQueue(t):this.dataCallback({data:null,error:null})}disconnect(){this.abortController&&this.abortController.abort(),this.cache.clear(),this.pendingRequests.clear(),this.requestQueue=[],this.isProcessingQueue=!1}async waitForAuth(){try{return this.authManager.isReady()||await this.authManager.waitForAuth(),!0}catch(t){throw t}}getAccessToken(){return this.authManager.getAccessToken()}isAuthenticated(){return this.authManager.isAuthenticated()}shouldFetchData(t){return t&&t.endpoint&&void 0!==t.endpoint}async fetchDataWithQueue(t){const e=this.generateRequestKey(t);if(this.pendingRequests.has(e))console.log("Request is inqueue");else{this.requestQueue.push({config:t,requestKey:e,callback:this.callback}),this.pendingRequests.set(e,!0);try{await this.authManager.waitForAuth()}catch(t){return console.error("OpenApi Adapter: Authentication failed, no need to send any request"),this.dataCallback({data:null,error:{message:`Auth failed: ${t.message}`,status:"AUTH_FAILED",originalError:t}}),void this.pendingRequests.delete(e)}this.isProcessingQueue||this.processRequestQueue()}}async processRequestQueue(){for(this.isProcessingQueue=!0;this.requestQueue.length>0;){const t=this.requestQueue.shift();try{await this.fetchDataWithRetry(t.config)}catch(t){console.error("Error fetching data:",t)}finally{this.pendingRequests.delete(t.requestKey)}await this.delay(10)}this.isProcessingQueue=!1}async fetchDataWithRetry(t){const e=this.generateCacheKey(t);if(this.getCachedData(e))return void this.dataCallback(cacheData);let a=null;for(let i=0;i<this.maxRetries;i++)try{const a=await this.performRequest(t);return this.setCacheData(e,a),void this.dataCallback(a)}catch(t){a=t,i<this.maxRetries&&await this.delay(this.retryDelay*Math.pow(2,i))}this.dataCallback({data:null,error:{message:a.message,status:a.status||"NETWORK_ERROR",retries:this.maxRetries}})}async performRequest(t){const{endpoint:e,method:a="GET",params:i={},headers:s={}}=t;this.abortController&&this.abortController.abort(),this.abortController=new AbortController;let r=e;if("GET"===a&&i){r=`${r}?${new URLSearchParams(i).toString()}`}const n={method:a,headers:{"Content-Type":"application/json",access_token:this.authManager.getAccessToken(),...s},body:"GET"===a?null:JSON.stringify(i),signal:this.abortController.signal},o=await fetch(r,n);if(!o.ok)throw new Error(`HTTP error! Status: ${o.status} - ${o.statusText}`);const h=await o.json();return!0===h.status&&"0"===h.errorCode?{data:h.data,error:null}:"401"===h.errorCode?(await this.authManager.refreshAccessToken(),this.performRequest(t)):{data:null,error:{message:h.message,errorCode:h.errorCode,status:h.status}}}getCachedData(t){const e=this.cache.get(t);return e&&Date.now()-e.timestamp<this.cacheTimeout?e.data:(e&&this.cache.delete(t),null)}setCacheData(t,e){if(this.cache.set(t,{data:e,timestamp:Date.now()}),this.cache.size>100){const t=this.cache.keys().next().value;this.cache.delete(t)}}generateCacheKey(t){return JSON.stringify({endpoint:t.endpoint,params:t.params,method:t.method||"GET"})}generateRequestKey(t){return this.generateCacheKey(t)}delay(t){return new Promise(e=>setTimeout(e,t))}static clearAllCache(){this.cache=new Map}static configure(t){void 0!==t.maxRetries&&(OpenApiWireAdapter.prototype.maxRetries=t.maxRetries),void 0!==t.retryDelay&&(OpenApiWireAdapter.prototype.retryDelay=t.retryDelay),void 0!==t.cacheTimeout&&(OpenApiWireAdapter.prototype.cacheTimeout=t.cacheTimeout)}}function r(t){if(!t||!t.endpointConfig)throw new Error("No config provided");const{endpointConfig:e}=t;if("string"==typeof e)return t;if(e.endpoint)return e.endpoint;if(!e.isv)throw new Error("Invalid config isv provided");if(!e.app)throw new Error("Invalid config app provided");if(!e.form)throw new Error("Invalid config form provided");if(!e.serviceName)throw new Error("Invalid config serviceName provided");return`/kapi/${e.version||"v2"}/${e.isv}/${e.app}/${e.form}/${e.serviceName}`}const n=function(t="GET",a={}){return function(i){if("function"==typeof i){const e=new s(i),n=e.update.bind(e);return e.update=function(e){const i={endpoint:r(e),method:t,...a,...e};return delete i.endpointConfig,e&&"object"==typeof e&&!e.endpoint&&(i.params=e.params||e),n(i)},e}return async function(t,a,i){await e.waitForAuth();const n={endpoint:r(i),method:t,...a,...i};delete n.endpointConfig,i&&"object"==typeof i&&!i.endpoint&&(n.params=i.params||i);return new Promise((t,e)=>{const a=new s(a=>{a.error?e(a.error):t(a)});a.connect(),a.update(n)})}(t,a,i||{})}}("POST");var o=Object.freeze({__proto__:null,AuthManager:t,authManager:e,doFetch:n,initializeAuth:a,isAuthenticated:i});exports.AuthManager=t,exports.authManager=e,exports.doFetch=n,exports.index=o,exports.initializeAuth=a,exports.isAuthenticated=i;
@@ -0,0 +1 @@
1
+ const e=new Set;function t(t,n,o){if(t||(t=document.head),!n||"string"!=typeof n)throw new TypeError("Invalid script URL");return e.has(n)?("function"==typeof o&&o(null,n),Promise.resolve(n)):new Promise((r,l)=>{const a=document.createElement("script");a.src=n,a.type="text/javascript",a.async=!0,a.onload=()=>{e.add(n),"function"==typeof o&&o(null,n),r(n)},a.onerror=e=>{"function"==typeof o&&o(e,n),l(e)};(t.template||t).appendChild(a)})}function n(t,n,o){if(t||(t=document.head),!n||"string"!=typeof n)throw new TypeError("Invalid CSS URL");return e.has(n)?("function"==typeof o&&o(null,n),Promise.resolve(n)):new Promise((r,l)=>{const a=document.createElement("link");a.rel="stylesheet",a.type="text/css",a.href=n,a.onload=()=>{e.add(n),"function"==typeof o&&o(null,n),r(n)},a.onerror=e=>{"function"==typeof o&&o(e,n),l(e)};(t.template||t).appendChild(a)})}var o=Object.freeze({__proto__:null,loadScript:t,loadStyle:n});export{n as a,o as i,t as l};
@@ -0,0 +1 @@
1
+ "use strict";var e=require("./index-CKzrFqj6.js"),r=require("./index-DYR8v7vJ.js"),i=require("./index-DSwttGxP.js");exports.platformResourceLoader=e.index,exports.openApiAdapter=r.index,exports.client=i.index;
@@ -0,0 +1 @@
1
+ export{i as platformResourceLoader}from"./index-D_DekteB.js";export{i as openApiAdapter}from"./index-BtNjXfsX.js";export{i as client}from"./index-BvVdlixE.js";
@@ -0,0 +1 @@
1
+ "use strict";var t=require("../index-DYR8v7vJ.js");exports.AuthManager=t.AuthManager,exports.authManager=t.authManager,exports.doFetch=t.doFetch,exports.initializeAuth=t.initializeAuth,exports.isAuthenticated=t.isAuthenticated;
@@ -0,0 +1 @@
1
+ export{A as AuthManager,a as authManager,d as doFetch,b as initializeAuth,c as isAuthenticated}from"../index-BtNjXfsX.js";
@@ -0,0 +1 @@
1
+ "use strict";var e=require("../index-CKzrFqj6.js");exports.loadScript=e.loadScript,exports.loadStyle=e.loadStyle;
@@ -0,0 +1 @@
1
+ export{l as loadScript,a as loadStyle}from"../index-D_DekteB.js";
package/package.json ADDED
@@ -0,0 +1,31 @@
1
+ {
2
+ "name": "@kdcloudjs/kwc-shared-utils",
3
+ "version": "0.0.1",
4
+ "description": "shared-utils for kwc",
5
+ "type": "module",
6
+ "main": "dist/index.cjs.js",
7
+ "module": "dist/index.esm.js",
8
+ "exports": {
9
+ ".": {
10
+ "require": "./dist/index.cjs.js",
11
+ "import": "./dist/index.esm.js"
12
+ },
13
+ "./*": {
14
+ "require": "./dist/*/index.cjs.js",
15
+ "import": "./dist/*/index.esm.js"
16
+ }
17
+ },
18
+ "scripts": {
19
+ "build": "rollup -c",
20
+ "prepublish": "npm run build"
21
+ },
22
+ "files": [
23
+ "dist"
24
+ ],
25
+ "dependencies": {
26
+ "@rollup/plugin-commonjs": "^28.0.6",
27
+ "@rollup/plugin-node-resolve": "^16.0.1",
28
+ "rollup": "^4.50.0",
29
+ "rollup-plugin-terser": "^7.0.2"
30
+ }
31
+ }