@kdcloudjs/kwc-shared-utils 0.0.1 → 0.0.2
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/dist/index.cjs.js +2 -1
- package/dist/index.cjs.js.map +1 -0
- package/dist/index.esm.js +2 -1
- package/dist/index.esm.js.map +1 -0
- package/dist/messageService/index.cjs.js +2 -0
- package/dist/messageService/index.cjs.js.map +1 -0
- package/dist/messageService/index.esm.js +2 -0
- package/dist/messageService/index.esm.js.map +1 -0
- package/dist/platformResourceLoader/index.cjs.js +2 -1
- package/dist/platformResourceLoader/index.cjs.js.map +1 -0
- package/dist/platformResourceLoader/index.esm.js +2 -1
- package/dist/platformResourceLoader/index.esm.js.map +1 -0
- package/dist/{index-CKzrFqj6.js → shared/index-CKzrFqj6.cjs.js} +1 -0
- package/dist/shared/index-CKzrFqj6.cjs.js.map +1 -0
- package/dist/shared/index-ChQWdmu9.esm.js +2 -0
- package/dist/shared/index-ChQWdmu9.esm.js.map +1 -0
- package/dist/{index-D_DekteB.js → shared/index-D_DekteB.esm.js} +1 -0
- package/dist/shared/index-D_DekteB.esm.js.map +1 -0
- package/dist/shared/index-Dtu_3V-z.cjs.js +2 -0
- package/dist/shared/index-Dtu_3V-z.cjs.js.map +1 -0
- package/package.json +2 -1
- package/dist/client/index.cjs.js +0 -1
- package/dist/client/index.esm.js +0 -1
- package/dist/index-BtNjXfsX.js +0 -1
- package/dist/index-BvVdlixE.js +0 -1
- package/dist/index-DSwttGxP.js +0 -1
- package/dist/index-DYR8v7vJ.js +0 -1
- package/dist/openApi/index.cjs.js +0 -1
- package/dist/openApi/index.esm.js +0 -1
package/dist/index.cjs.js
CHANGED
|
@@ -1 +1,2 @@
|
|
|
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;
|
|
1
|
+
"use strict";var e=require("./shared/index-CKzrFqj6.cjs.js"),t=require("./shared/index-Dtu_3V-z.cjs.js");class r{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(e){if(this.isInitialized&&this.accessToken)return!0;this.authConfig={endpoint:e.endpoint||"/kapi/oauth2/getToken",method:e.method||"POST",headers:e.headers||{"Content-Type":"application/json"},body:e.bodyParams||{},params:e.queryParams||{}};try{await this.authenticate(),this.isInitialized=!0,this.notifyListeners("initialized",{success:!0})}catch(e){throw console.error("AuthManager: Failed to initialize auth - ",e),this.notifyListeners("initialized",{success:!1,error:e}),e}}async authenticate(){if(this.isAuthenticating&&this.authPromise)return this.authPromise;this.isAuthenticating=!0,this.authPromise=this._performAuthentication();try{const e=await this.authPromise;return this.notifyListeners("authenticated",{success:!0}),e}catch(e){throw this.notifyListeners("authenticated",{success:!1,error:e}),e}finally{this.isAuthenticating=!1,this.authPromise=null}}async _performAuthentication(){if(!this.authConfig)throw new Error("Authentication configuration is missing.");const{endpoint:e,headers:t,body:r,method:i}=this.authConfig;try{const n=await fetch(e,{method:i,headers:t,body:JSON.stringify(r)});if(!n.ok)throw new Error(`Authentication failed: ${n.status} - ${n.statusText}`);const s=await n.json();if(!0===s.status&&"0"===s.errorCode)return this.accessToken=s.data.access_token,this.refreshToken=s.data.refresh_token,this.saveTokensToStorage(),s;throw new Error(`Authentication failed: ${s.errorCode} - ${s.message}`)}catch(e){throw console.error("AuthManager: Authentication failed -",e),e}}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(e){const t=16*Math.random()|0;return("x"==e?t:3&t|8).toString(16)})}formatTimestamp(e=new Date){return`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,"0")}-${String(e.getDate()).padStart(2,"0")} ${String(e.getHours()).padStart(2,"0")}:${String(e.getMinutes()).padStart(2,"0")}:${String(e.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(e){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(e){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(e){console.warn("AuthManager: Error removing tokens to storage")}}addListener(e){this.listeners.add(e)}removeListener(e){this.listeners.delete(e)}notifyListeners(e,t){this.listeners.forEach(r=>{try{r(e,t)}catch(e){console.error("AuthManager: Error notifying listener")}})}async waitForAuth(){return!this.isAuthenticated()||(this.isAuthenticating&&this.authPromise?(await this.authPromise,this.isAuthenticated()):void 0)}}const i=new r;class n{constructor(e){this.name="OpenApiWireAdapter",this.dataCallback=e,this.config={},this.abortController=null,this.retryCount=0,this.maxRetries=3,this.retryDelay=1e3,this.cache=new Map,this.cacheTimeout=3e5,this.authManager=i,this.pendingRequests=new Map,this.requestQueue=[],this.isProcessingQueue=!1}connect(){}update(e){this.config={...e},this.retryCount=0,this.shouldFetchData(e)?this.fetchDataWithQueue(e):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(e){throw e}}getAccessToken(){return this.authManager.getAccessToken()}isAuthenticated(){return this.authManager.isAuthenticated()}shouldFetchData(e){return e&&e.endpoint&&void 0!==e.endpoint}async fetchDataWithQueue(e){const t=this.generateRequestKey(e);if(this.pendingRequests.has(t))console.log("Request is inqueue");else{this.requestQueue.push({config:e,requestKey:t,callback:this.callback}),this.pendingRequests.set(t,!0);try{await this.authManager.waitForAuth()}catch(e){return console.error("OpenApi Adapter: Authentication failed, no need to send any request"),this.dataCallback({data:null,error:{message:`Auth failed: ${e.message}`,status:"AUTH_FAILED",originalError:e}}),void this.pendingRequests.delete(t)}this.isProcessingQueue||this.processRequestQueue()}}async processRequestQueue(){for(this.isProcessingQueue=!0;this.requestQueue.length>0;){const e=this.requestQueue.shift();try{await this.fetchDataWithRetry(e.config)}catch(e){console.error("Error fetching data:",e)}finally{this.pendingRequests.delete(e.requestKey)}await this.delay(10)}this.isProcessingQueue=!1}async fetchDataWithRetry(e){const t=this.generateCacheKey(e);if(this.getCachedData(t))return void this.dataCallback(cacheData);let r=null;for(let i=0;i<this.maxRetries;i++)try{const r=await this.performRequest(e);return this.setCacheData(t,r),void this.dataCallback(r)}catch(e){r=e,i<this.maxRetries&&await this.delay(this.retryDelay*Math.pow(2,i))}this.dataCallback({data:null,error:{message:r.message,status:r.status||"NETWORK_ERROR",retries:this.maxRetries}})}async performRequest(e){const{endpoint:t,method:r="GET",params:i={},headers:n={}}=e;this.abortController&&this.abortController.abort(),this.abortController=new AbortController;let s=t;if("GET"===r&&i){s=`${s}?${new URLSearchParams(i).toString()}`}const a={method:r,headers:{"Content-Type":"application/json",access_token:this.authManager.getAccessToken(),...n},body:"GET"===r?null:JSON.stringify(i),signal:this.abortController.signal},o=await fetch(s,a);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(e)):{data:null,error:{message:h.message,errorCode:h.errorCode,status:h.status}}}getCachedData(e){const t=this.cache.get(e);return t&&Date.now()-t.timestamp<this.cacheTimeout?t.data:(t&&this.cache.delete(e),null)}setCacheData(e,t){if(this.cache.set(e,{data:t,timestamp:Date.now()}),this.cache.size>100){const e=this.cache.keys().next().value;this.cache.delete(e)}}generateCacheKey(e){return JSON.stringify({endpoint:e.endpoint,params:e.params,method:e.method||"GET"})}generateRequestKey(e){return this.generateCacheKey(e)}delay(e){return new Promise(t=>setTimeout(t,e))}static clearAllCache(){this.cache=new Map}static configure(e){void 0!==e.maxRetries&&(OpenApiWireAdapter.prototype.maxRetries=e.maxRetries),void 0!==e.retryDelay&&(OpenApiWireAdapter.prototype.retryDelay=e.retryDelay),void 0!==e.cacheTimeout&&(OpenApiWireAdapter.prototype.cacheTimeout=e.cacheTimeout)}}function s(e){if(!e||!e.endpointConfig)throw new Error("No config provided");const{endpointConfig:t}=e;if("string"==typeof t)return e;if(t.endpoint)return t.endpoint;if(!t.isv)throw new Error("Invalid config isv provided");if(!t.app)throw new Error("Invalid config app provided");if(!t.form)throw new Error("Invalid config form provided");if(!t.serviceName)throw new Error("Invalid config serviceName provided");return`/kapi/${t.version||"v2"}/${t.isv}/${t.app}/${t.form}/${t.serviceName}`}const a=function(e="GET",t={}){return function(r){if("function"==typeof r){const i=new n(r),a=i.update.bind(i);return i.update=function(r){const i={endpoint:s(r),method:e,...t,...r};return delete i.endpointConfig,r&&"object"==typeof r&&!r.endpoint&&(i.params=r.params||r),a(i)},i}return async function(e,t,r){await i.waitForAuth();const a={endpoint:s(r),method:e,...t,...r};delete a.endpointConfig,r&&"object"==typeof r&&!r.endpoint&&(a.params=r.params||r);return new Promise((e,t)=>{const r=new n(r=>{r.error?t(r.error):e(r)});r.connect(),r.update(a)})}(e,t,r||{})}}("POST");var o=Object.freeze({__proto__:null,AuthManager:r,authManager:i,doFetch:a,initializeAuth:async function(e){return await i.initialize(e)},isAuthenticated:function(){return i.isAuthenticated()}});const h="yunzhijia",c="yunzhijia_desktop",u="yunzhijia_old_desktop",d="weixin",g="dingding",l="wxwork",f="welink",p="feishu",m="unknown";function y(){const e=navigator.userAgent;return/Qing\/.*;(iOS|iPhone|Android|iPadOS|Harmony)/.test(e)}function w(){const e=navigator.userAgent;return/App\/cloudhub/.test(e)}function k(){const e=navigator.userAgent;return/clientId:10204/.test(e)}function A(){const e=navigator.userAgent;return e.indexOf("MicroMessenger")>-1&&e.indexOf("wxwork")<0}function x(){const e=navigator.userAgent;return e.indexOf("MicroMessenger")>-1&&e.indexOf("wxwork")>-1}function _(){const e=navigator.userAgent,t=e.indexOf("DingTalk")>-1,r=-1===e.indexOf("MiniProgram")&&-1===e.indexOf("dd-web");return t&&r}function T(){const e=navigator.userAgent;return e.indexOf("welink")>-1||e.indexOf("cloudlink")>-1}function v(){return navigator.userAgent.indexOf("Lark/")>-1}function C(){const e=navigator.userAgent.toLowerCase();return/chrome|crios/.test(e)&&!/edg|edge|opr|opera|fxios|samsungbrowser/.test(e)}function b(){const e=navigator.userAgent.toLowerCase();return/edg/.test(e)}function S(){const e=navigator.userAgent.toLowerCase();return/edge/.test(e)&&!/edg/.test(e)}function R(){return b()||S()}function M(){const e=navigator.userAgent.toLowerCase();return/firefox|fxios/.test(e)}function E(){const e=navigator.userAgent.toLowerCase();return/msie|trident/.test(e)}function O(){const e=navigator.userAgent.toLowerCase();return/safari/.test(e)&&!/chrome|crios|edg|edge|fxios|opr|opera/.test(e)}const P="chrome",q="edge",D="firefox",L="ie",z="safari",$="unknown";function j(){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}var I=Object.freeze({__proto__:null,getAppName:function(){return y()?h:w()?c:k()?u:A()?d:x()?l:_()?g:T?f:v()?p:m},getBrowserName:function(){return C()?P:R()?q:M()?D:O()?z:E()?L:$},isChrome:C,isChromiumEdge:b,isDD:_,isEdge:R,isFeiShu:v,isFirefox:M,isIE:E,isLegacyEdge:S,isMobile:j,isPC:function(){return!j()},isSafari:O,isWX:A,isWeLink:T,isWxWork:x,isYzj:y,isYzjDesktop:w,isYzjOldDesktop:k});exports.platformResourceLoader=e.index,exports.messageService=t.index,exports.client=I,exports.openApiAdapter=o;
|
|
2
|
+
//# sourceMappingURL=index.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":["../src/modules/openApi/authManager.js","../src/modules/openApi/adapter.js","../src/modules/openApi/factory.js","../src/modules/client/app.js","../src/modules/client/browser.js","../src/modules/client/device.js"],"sourcesContent":["/**\n * Global open api auth manager\n */\n\nclass AuthManager { \n constructor() {\n this.accessToken = null; \n this.refreshToken = null;\n this.isInitialized = false;\n this.isAuthenticating = false;\n this.authPromise = null;\n this.authConfig = null;\n this.listeners = new Set();\n\n // Try to load tokens from storage\n this.loadTokensFromStorage();\n }\n\n async initialize(config) {\n if (this.isInitialized && this.accessToken) {\n return true;\n }\n\n this.authConfig = {\n endpoint: config.endpoint || '/kapi/oauth2/getToken',\n method: config.method || 'POST',\n headers: config.headers || {\n 'Content-Type': 'application/json'\n },\n body: config.bodyParams|| {},\n params: config.queryParams || {}\n };\n\n try {\n await this.authenticate();\n this.isInitialized = true;\n this.notifyListeners('initialized', { success: true });\n } catch (error) {\n console.error('AuthManager: Failed to initialize auth - ', error);\n this.notifyListeners('initialized', { success: false, error });\n throw error;\n }\n }\n\n async authenticate() {\n if (this.isAuthenticating && this.authPromise) {\n return this.authPromise;\n }\n\n this.isAuthenticating = true;\n this.authPromise = this._performAuthentication();\n\n try {\n const result = await this.authPromise;\n this.notifyListeners('authenticated', { success: true });\n return result;\n } catch (error) {\n this.notifyListeners('authenticated', { success: false, error });\n throw error;\n } finally {\n this.isAuthenticating = false;\n this.authPromise = null;\n }\n }\n\n async _performAuthentication() {\n if (!this.authConfig) {\n throw new Error('Authentication configuration is missing.');\n }\n\n const { endpoint, headers, body, method } = this.authConfig;\n try {\n const response = await fetch(endpoint, {\n method,\n headers,\n body: JSON.stringify(body)\n });\n\n if (!response.ok) {\n throw new Error(`Authentication failed: ${response.status} - ${response.statusText}`);\n }\n\n const authData = await response.json();\n if (authData.status === true && authData.errorCode === '0') {\n this.accessToken = authData.data.access_token;\n this.refreshToken = authData.data.refresh_token;\n\n this.saveTokensToStorage();\n\n return authData;\n }\n throw new Error(`Authentication failed: ${authData.errorCode} - ${authData.message}`);\n } catch (error) {\n console.error('AuthManager: Authentication failed -', error);\n throw error;\n }\n }\n\n async refreshAccessToken() {\n console.log('AuthManager: Refreshing access token...')\n this.authConfig.body.nonce = this.generateNonce();\n this.authConfig.body.timestamp = this.formatTimestamp();\n return this._performAuthentication();\n }\n\n // 生成随机UUID作为nonce\n generateNonce() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n const r = Math.random() * 16 | 0;\n const v = c == 'x' ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n }\n\n // 格式化时间戳为 YYYY-MM-DD HH:mm:ss 格式\n formatTimestamp(date = new Date()) {\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const day = String(date.getDate()).padStart(2, '0');\n const hours = String(date.getHours()).padStart(2, '0');\n const minutes = String(date.getMinutes()).padStart(2, '0');\n const seconds = String(date.getSeconds()).padStart(2, '0');\n\n return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;\n }\n\n getAccessToken() {\n return this.accessToken;\n }\n\n isAuthenticated() {\n return !!this.accessToken;\n }\n\n isReady() {\n return this.isInitialized && this.isAuthenticated();\n }\n\n logout() {\n this.clearTokens();\n this.isInitialized = false;\n this.authConfig = null;\n this.notifyListeners('logout', {});\n }\n\n clearTokens() {\n this.accessToken = null;\n this.refreshToken = null;\n this.clearTokensFromStorage();\n }\n\n loadTokensFromStorage() { \n try {\n this.accessToken = localStorage.getItem('__kapi_auth_manager_access_token__');\n this.refreshToken = localStorage.getItem('__kapi_auth_manager_refresh_token__');\n } catch (error) {\n console.warn('AuthManager: Error loading tokens from storage');\n }\n }\n\n saveTokensToStorage() {\n try {\n if (this.accessToken) {\n localStorage.setItem('__kapi_auth_manager_access_token__', this.accessToken);\n }\n\n if (this.refreshToken) {\n localStorage.setItem('__kapi_auth_manager_refresh_token__', this.refreshToken);\n }\n } catch(error) {\n console.warn('AuthManager: Error saving tokens to storage');\n }\n }\n\n clearTokensFromStorage() {\n try {\n localStorage.removeItem('__kapi_auth_manager_access_token__');\n localStorage.removeItem('__kapi_auth_manager_refresh_token__');\n } catch (error) {\n console.warn('AuthManager: Error removing tokens to storage');\n }\n }\n\n addListener(callback) {\n this.listeners.add(callback);\n }\n\n removeListener(callback) {\n this.listeners.delete(callback);\n }\n\n notifyListeners(event, data) {\n this.listeners.forEach((listener) => {\n try {\n listener(event, data);\n } catch(error) {\n console.error('AuthManager: Error notifying listener')\n }\n });\n }\n\n async waitForAuth() {\n if (!this.isAuthenticated()) {\n return true;\n }\n\n if (this.isAuthenticating && this.authPromise) {\n await this.authPromise;\n return this.isAuthenticated();\n }\n }\n}\n\nconst authManager = new AuthManager();\n\nexport { authManager, AuthManager };\nexport default authManager;\n\nexport async function initializeAuth(config) {\n return await authManager.initialize(config);\n}\n\nexport function isAuthenticated() {\n return authManager.isAuthenticated();\n}","import authManager from \"./authManager\";\n\nexport default class Adapter {\n constructor(dataCallback) {\n this.name = 'OpenApiWireAdapter';\n\n this.dataCallback = dataCallback;\n this.config = {};\n this.abortController = null;\n\n this.retryCount = 0; // current retry count\n this.maxRetries = 3; // max retry times\n this.retryDelay = 1000;\n this.cache = new Map();\n this.cacheTimeout = 5 * 60 * 1000; // cache timeout in milliseconds, default is 5mins\n\n this.authManager = authManager;\n\n // Request queue\n this.pendingRequests = new Map();\n this.requestQueue = [];\n this.isProcessingQueue = false;\n }\n\n // Lifecycle - create connect\n connect() {}\n\n // Lifecycle - update data\n update(config) {\n this.config = { ...config };\n this.retryCount = 0;\n\n if (this.shouldFetchData(config)) {\n this.fetchDataWithQueue(config);\n } else {\n this.dataCallback({ data: null, error: null });\n }\n }\n\n // Lifecycle - destroy\n disconnect() {\n if (this.abortController) {\n this.abortController.abort();\n }\n\n this.cache.clear();\n this.pendingRequests.clear();\n this.requestQueue = [];\n this.isProcessingQueue = false;\n }\n\n async waitForAuth() {\n try {\n if (!this.authManager.isReady()) {\n await this.authManager.waitForAuth();\n }\n return true;\n } catch(error) {\n throw error;\n }\n }\n\n getAccessToken() {\n return this.authManager.getAccessToken();\n }\n\n isAuthenticated() {\n return this.authManager.isAuthenticated();\n }\n\n shouldFetchData (config) {\n return config && config.endpoint && config.endpoint !== undefined;\n }\n\n async fetchDataWithQueue(config) {\n const requestKey = this.generateRequestKey(config);\n\n if (this.pendingRequests.has(requestKey)) {\n console.log('Request is inqueue');\n return;\n }\n\n this.requestQueue.push({ config, requestKey, callback: this.callback });\n this.pendingRequests.set(requestKey, true);\n\n try {\n await this.authManager.waitForAuth();\n } catch (error) {\n console.error('OpenApi Adapter: Authentication failed, no need to send any request');\n this.dataCallback({\n data: null,\n error: {\n message: `Auth failed: ${error.message}`,\n status: 'AUTH_FAILED',\n originalError: error\n }\n });\n this.pendingRequests.delete(requestKey);\n return;\n }\n\n if (!this.isProcessingQueue) {\n this.processRequestQueue();\n }\n }\n\n async processRequestQueue() { \n this.isProcessingQueue = true;\n while (this.requestQueue.length > 0) {\n const request = this.requestQueue.shift();\n try {\n await this.fetchDataWithRetry(request.config);\n } catch (error) {\n console.error('Error fetching data:', error)\n } finally {\n this.pendingRequests.delete(request.requestKey);\n }\n\n // avoid too fast\n await this.delay(10);\n }\n this.isProcessingQueue = false;\n }\n\n async fetchDataWithRetry(config) { \n const cacheKey = this.generateCacheKey(config);\n \n const cachedData = this.getCachedData(cacheKey);\n if (cachedData) {\n this.dataCallback(cacheData);\n return;\n }\n\n let lastError = null;\n for (let attempt = 0; attempt < this.maxRetries; attempt++) {\n try {\n const result = await this.performRequest(config);\n\n this.setCacheData(cacheKey, result);\n this.dataCallback(result);\n return;\n } catch (error) {\n lastError = error;\n\n if (attempt < this.maxRetries) {\n await this.delay(this.retryDelay * Math.pow(2, attempt));\n }\n }\n }\n\n this.dataCallback({\n data: null,\n error: {\n message: lastError.message,\n status: lastError.status || 'NETWORK_ERROR',\n retries: this.maxRetries\n }\n })\n }\n\n async performRequest(config) {\n const { endpoint, method = 'GET', params = {}, headers = {} } = config;\n\n if (this.abortController) {\n this.abortController.abort();\n }\n\n this.abortController = new AbortController();\n\n let url = endpoint;\n if (method === 'GET' && params) {\n const searchParams = new URLSearchParams(params);\n url = `${url}?${searchParams.toString()}`\n }\n\n const requestOptions = {\n method,\n headers: {\n 'Content-Type': 'application/json',\n 'access_token': this.authManager.getAccessToken(),\n ...headers\n },\n body: method === 'GET' ? null : JSON.stringify(params),\n signal: this.abortController.signal\n }\n\n const response = await fetch(url, requestOptions);\n if (!response.ok) {\n throw new Error(`HTTP error! Status: ${response.status} - ${response.statusText}`);\n }\n\n const data = await response.json();\n if (data.status === true && data.errorCode === '0') {\n return { data: data.data, error: null };\n } else if (data.errorCode === '401') {\n await this.authManager.refreshAccessToken();\n return this.performRequest(config);\n }\n\n return {\n data: null,\n error: {\n message: data.message,\n errorCode: data.errorCode,\n status: data.status\n }\n }\n }\n\n getCachedData(cacheKey) {\n const cached = this.cache.get(cacheKey);\n if (cached && Date.now() - cached.timestamp < this.cacheTimeout) {\n return cached.data;\n }\n\n if (cached) {\n this.cache.delete(cacheKey);\n }\n return null;\n }\n\n setCacheData(cacheKey, data) {\n this.cache.set(cacheKey, {\n data,\n timestamp: Date.now(),\n });\n\n if (this.cache.size > 100) {\n const firstKey = this.cache.keys().next().value;\n this.cache.delete(firstKey);\n }\n }\n\n generateCacheKey(config) {\n return JSON.stringify({\n endpoint: config.endpoint,\n params: config.params,\n method: config.method || 'GET'\n })\n }\n\n generateRequestKey(config) {\n return this.generateCacheKey(config);\n }\n\n delay(ms) {\n return new Promise(resolve => setTimeout(resolve, ms));\n }\n\n static clearAllCache() {\n this.cache = new Map();\n }\n\n static configure(options) {\n if (options.maxRetries !== undefined) {\n OpenApiWireAdapter.prototype.maxRetries = options.maxRetries;\n }\n\n if (options.retryDelay !== undefined) {\n OpenApiWireAdapter.prototype.retryDelay = options.retryDelay;\n }\n\n if (options.cacheTimeout !== undefined) {\n OpenApiWireAdapter.prototype.cacheTimeout = options.cacheTimeout;\n }\n }\n}","import OpenApiWireAdapter from \"./adapter\";\nimport authManager from \"./authManager\";\n\nfunction createWireAdapter(defaultMethod = 'GET', defaultConfig = {}) {\n function wireAdapterFunction(configOrDataCallback) {\n if (typeof configOrDataCallback === 'function') {\n const adapter = new OpenApiWireAdapter(configOrDataCallback);\n\n const originalUpdate = adapter.update.bind(adapter);\n adapter.update = function (config) {\n const fullConfig = {\n endpoint: getEndpoint(config),\n method: defaultMethod,\n ...defaultConfig,\n ...config\n }\n delete fullConfig.endpointConfig;\n\n if (config && typeof config === 'object' && !config.endpoint) {\n fullConfig.params = config.params || config;\n }\n\n return originalUpdate(fullConfig);\n }\n return adapter;\n } else {\n const config = configOrDataCallback || {};\n return createPromiseCall(defaultMethod, defaultConfig, config);\n }\n \n }\n return wireAdapterFunction;\n}\n\n// 创建 Promise 调用的辅助函数\nasync function createPromiseCall(defaultMethod, defaultConfig, config) {\n // 等待认证完成\n await authManager.waitForAuth();\n\n // 合并默认配置和传入的配置\n const fullConfig = {\n endpoint: getEndpoint(config),\n method: defaultMethod,\n ...defaultConfig,\n ...config\n }\n delete fullConfig.endpointConfig;\n\n // 如果传入的是 params,直接使用\n if (config && typeof config === 'object' && !config.endpoint) {\n fullConfig.params = config.params || config;\n }\n\n return new Promise((resolve, reject) => {\n const adapter = new OpenApiWireAdapter((result) => {\n if (result.error) {\n reject(result.error);\n } else {\n resolve(result);\n }\n });\n\n // 连接并更新配置\n adapter.connect();\n adapter.update(fullConfig);\n });\n}\n\nfunction getEndpoint(config) { \n if (!config || !config.endpointConfig) {\n throw new Error('No config provided');\n }\n\n const { endpointConfig } = config;\n if (typeof endpointConfig === 'string') return config;\n if (endpointConfig.endpoint) return endpointConfig.endpoint;\n if (!endpointConfig.isv) {\n throw new Error('Invalid config isv provided');\n }\n\n if (!endpointConfig.app) {\n throw new Error('Invalid config app provided');\n }\n\n if (!endpointConfig.form) {\n throw new Error('Invalid config form provided');\n }\n\n if (!endpointConfig.serviceName) {\n throw new Error('Invalid config serviceName provided');\n }\n\n return `/kapi/${endpointConfig.version || 'v2'}/${endpointConfig.isv}/${endpointConfig.app}/${endpointConfig.form}/${endpointConfig.serviceName}`\n}\n\nexport const doFetch = createWireAdapter('POST')","const App = {\n yzj: 'yunzhijia',\n yzjDesktop: 'yunzhijia_desktop',\n yzjOldDesktop: 'yunzhijia_old_desktop',\n wx: 'weixin',\n dd: 'dingding',\n wxwork: 'wxwork',\n welink: 'welink',\n feishu: 'feishu',\n unknown: 'unknown'\n}\n\nexport function isYzj() {\n const agent = navigator.userAgent;\n return /Qing\\/.*;(iOS|iPhone|Android|iPadOS|Harmony)/.test(agent);\n}\n\nexport function isYzjDesktop() {\n const agent = navigator.userAgent;\n return /App\\/cloudhub/.test(agent);\n}\n\nexport function isYzjOldDesktop() {\n const agent = navigator.userAgent;\n return /clientId:10204/.test(agent);\n}\n\nexport function isWX() {\n const agent = navigator.userAgent;\n return agent.indexOf('MicroMessenger') > -1 && agent.indexOf('wxwork') < 0;\n}\n\nexport function isWxWork() {\n const agent = navigator.userAgent;\n return agent.indexOf('MicroMessenger') > -1 && agent.indexOf('wxwork') > -1;\n}\n\nexport function isDD() {\n const agent = navigator.userAgent;\n const _isDD = agent.indexOf('DingTalk') > -1;\n const isDDMiniProgram = agent.indexOf('MiniProgram') === -1 && agent.indexOf('dd-web') === -1;\n return _isDD && isDDMiniProgram;\n}\n\nexport function isWeLink() {\n const agent = navigator.userAgent;\n return agent.indexOf('welink') > -1 || agent.indexOf('cloudlink') > -1;\n}\n\nexport function isFeiShu() {\n const agent = navigator.userAgent;\n return agent.indexOf('Lark/') > -1;\n}\n\nexport function getApp() {\n if (isYzj()) return App.yzj;\n else if (isYzjDesktop()) return App.yzjDesktop;\n else if (isYzjOldDesktop()) return App.yzjOldDesktop;\n else if (isWX()) return App.wx;\n else if (isWxWork()) return App.wxwork;\n else if (isDD()) return App.dd;\n else if (isWeLink) return App.welink;\n else if (isFeiShu()) return App.feishu;\n else return App.unknown;\n}\n\nexport default getApp;","export function isChrome() {\n const userAgent = navigator.userAgent.toLowerCase();\n return /chrome|crios/.test(userAgent) && !/edg|edge|opr|opera|fxios|samsungbrowser/.test(userAgent);\n}\n\nexport function isChromiumEdge() {\n const userAgent = navigator.userAgent.toLowerCase();\n return /edg/.test(userAgent);\n}\n\nexport function isLegacyEdge() {\n const userAgent = navigator.userAgent.toLowerCase();\n return /edge/.test(userAgent) && !/edg/.test(userAgent);\n}\n\nexport function isEdge() {\n return isChromiumEdge() || isLegacyEdge();\n}\n\nexport function isFirefox() {\n const userAgent = navigator.userAgent.toLowerCase();\n return /firefox|fxios/.test(userAgent);\n}\n\nexport function isIE() {\n const userAgent = navigator.userAgent.toLowerCase();\n return /msie|trident/.test(userAgent);\n}\n\nexport function isSafari() {\n const userAgent = navigator.userAgent.toLowerCase();\n return /safari/.test(userAgent) && !/chrome|crios|edg|edge|fxios|opr|opera/.test(userAgent);\n}\n\nconst Browser = {\n chrome: 'chrome',\n edge: 'edge',\n firefox: 'firefox',\n ie: 'ie',\n safari: 'safari',\n unknown: 'unknown'\n}\n\nexport function getBrowser() {\n if (isChrome()) return Browser.chrome;\n else if (isEdge()) return Browser.edge;\n else if (isFirefox()) return Browser.firefox;\n else if (isSafari()) return Browser.safari;\n else if (isIE()) return Browser.ie;\n else return Browser.unknown;\n}\n\nexport default getBrowser;","export function isMobile() {\n const agent = navigator.userAgent.toLowerCase();\n const isTouchDevice = 'ontouchstart' in window || navigator.maxTouchPoints > 0 || navigator.msMaxTouchPoints > 0;\n const maxMobileWidth = 1024;\n return (/android|webos|iphone|ipad|ipod|blackberry|iemobile|opera mini/i.test(agent)) || (isTouchDevice && window.innerWidth <= maxMobileWidth)\n}\n\nexport function isPC() {\n return !isMobile();\n}"],"names":["AuthManager","constructor","this","accessToken","refreshToken","isInitialized","isAuthenticating","authPromise","authConfig","listeners","Set","loadTokensFromStorage","initialize","config","endpoint","method","headers","body","bodyParams","params","queryParams","authenticate","notifyListeners","success","error","console","_performAuthentication","result","Error","response","fetch","JSON","stringify","ok","status","statusText","authData","json","errorCode","data","access_token","refresh_token","saveTokensToStorage","message","refreshAccessToken","log","nonce","generateNonce","timestamp","formatTimestamp","replace","c","r","Math","random","toString","date","Date","getFullYear","String","getMonth","padStart","getDate","getHours","getMinutes","getSeconds","getAccessToken","isAuthenticated","isReady","logout","clearTokens","clearTokensFromStorage","localStorage","getItem","warn","setItem","removeItem","addListener","callback","add","removeListener","delete","event","forEach","listener","waitForAuth","authManager","Adapter","dataCallback","name","abortController","retryCount","maxRetries","retryDelay","cache","Map","cacheTimeout","pendingRequests","requestQueue","isProcessingQueue","connect","update","shouldFetchData","fetchDataWithQueue","disconnect","abort","clear","undefined","requestKey","generateRequestKey","has","push","set","originalError","processRequestQueue","length","request","shift","fetchDataWithRetry","delay","cacheKey","generateCacheKey","getCachedData","cacheData","lastError","attempt","performRequest","setCacheData","pow","retries","AbortController","url","URLSearchParams","requestOptions","signal","cached","get","now","size","firstKey","keys","next","value","ms","Promise","resolve","setTimeout","clearAllCache","configure","options","OpenApiWireAdapter","prototype","getEndpoint","endpointConfig","isv","app","form","serviceName","version","doFetch","defaultMethod","defaultConfig","configOrDataCallback","adapter","originalUpdate","bind","fullConfig","async","reject","createPromiseCall","createWireAdapter","App","isYzj","agent","navigator","userAgent","test","isYzjDesktop","isYzjOldDesktop","isWX","indexOf","isWxWork","isDD","_isDD","isDDMiniProgram","isWeLink","isFeiShu","isChrome","toLowerCase","isChromiumEdge","isLegacyEdge","isEdge","isFirefox","isIE","isSafari","Browser","isMobile","isTouchDevice","window","maxTouchPoints","msMaxTouchPoints","innerWidth"],"mappings":"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"}
|
package/dist/index.esm.js
CHANGED
|
@@ -1 +1,2 @@
|
|
|
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";
|
|
1
|
+
export{i as platformResourceLoader}from"./shared/index-D_DekteB.esm.js";export{i as messageService}from"./shared/index-ChQWdmu9.esm.js";class e{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(e){if(this.isInitialized&&this.accessToken)return!0;this.authConfig={endpoint:e.endpoint||"/kapi/oauth2/getToken",method:e.method||"POST",headers:e.headers||{"Content-Type":"application/json"},body:e.bodyParams||{},params:e.queryParams||{}};try{await this.authenticate(),this.isInitialized=!0,this.notifyListeners("initialized",{success:!0})}catch(e){throw console.error("AuthManager: Failed to initialize auth - ",e),this.notifyListeners("initialized",{success:!1,error:e}),e}}async authenticate(){if(this.isAuthenticating&&this.authPromise)return this.authPromise;this.isAuthenticating=!0,this.authPromise=this._performAuthentication();try{const e=await this.authPromise;return this.notifyListeners("authenticated",{success:!0}),e}catch(e){throw this.notifyListeners("authenticated",{success:!1,error:e}),e}finally{this.isAuthenticating=!1,this.authPromise=null}}async _performAuthentication(){if(!this.authConfig)throw new Error("Authentication configuration is missing.");const{endpoint:e,headers:t,body:i,method:r}=this.authConfig;try{const n=await fetch(e,{method:r,headers:t,body:JSON.stringify(i)});if(!n.ok)throw new Error(`Authentication failed: ${n.status} - ${n.statusText}`);const s=await n.json();if(!0===s.status&&"0"===s.errorCode)return this.accessToken=s.data.access_token,this.refreshToken=s.data.refresh_token,this.saveTokensToStorage(),s;throw new Error(`Authentication failed: ${s.errorCode} - ${s.message}`)}catch(e){throw console.error("AuthManager: Authentication failed -",e),e}}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(e){const t=16*Math.random()|0;return("x"==e?t:3&t|8).toString(16)})}formatTimestamp(e=new Date){return`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,"0")}-${String(e.getDate()).padStart(2,"0")} ${String(e.getHours()).padStart(2,"0")}:${String(e.getMinutes()).padStart(2,"0")}:${String(e.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(e){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(e){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(e){console.warn("AuthManager: Error removing tokens to storage")}}addListener(e){this.listeners.add(e)}removeListener(e){this.listeners.delete(e)}notifyListeners(e,t){this.listeners.forEach(i=>{try{i(e,t)}catch(e){console.error("AuthManager: Error notifying listener")}})}async waitForAuth(){return!this.isAuthenticated()||(this.isAuthenticating&&this.authPromise?(await this.authPromise,this.isAuthenticated()):void 0)}}const t=new e;class r{constructor(e){this.name="OpenApiWireAdapter",this.dataCallback=e,this.config={},this.abortController=null,this.retryCount=0,this.maxRetries=3,this.retryDelay=1e3,this.cache=new Map,this.cacheTimeout=3e5,this.authManager=t,this.pendingRequests=new Map,this.requestQueue=[],this.isProcessingQueue=!1}connect(){}update(e){this.config={...e},this.retryCount=0,this.shouldFetchData(e)?this.fetchDataWithQueue(e):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(e){throw e}}getAccessToken(){return this.authManager.getAccessToken()}isAuthenticated(){return this.authManager.isAuthenticated()}shouldFetchData(e){return e&&e.endpoint&&void 0!==e.endpoint}async fetchDataWithQueue(e){const t=this.generateRequestKey(e);if(this.pendingRequests.has(t))console.log("Request is inqueue");else{this.requestQueue.push({config:e,requestKey:t,callback:this.callback}),this.pendingRequests.set(t,!0);try{await this.authManager.waitForAuth()}catch(e){return console.error("OpenApi Adapter: Authentication failed, no need to send any request"),this.dataCallback({data:null,error:{message:`Auth failed: ${e.message}`,status:"AUTH_FAILED",originalError:e}}),void this.pendingRequests.delete(t)}this.isProcessingQueue||this.processRequestQueue()}}async processRequestQueue(){for(this.isProcessingQueue=!0;this.requestQueue.length>0;){const e=this.requestQueue.shift();try{await this.fetchDataWithRetry(e.config)}catch(e){console.error("Error fetching data:",e)}finally{this.pendingRequests.delete(e.requestKey)}await this.delay(10)}this.isProcessingQueue=!1}async fetchDataWithRetry(e){const t=this.generateCacheKey(e);if(this.getCachedData(t))return void this.dataCallback(cacheData);let i=null;for(let r=0;r<this.maxRetries;r++)try{const i=await this.performRequest(e);return this.setCacheData(t,i),void this.dataCallback(i)}catch(e){i=e,r<this.maxRetries&&await this.delay(this.retryDelay*Math.pow(2,r))}this.dataCallback({data:null,error:{message:i.message,status:i.status||"NETWORK_ERROR",retries:this.maxRetries}})}async performRequest(e){const{endpoint:t,method:i="GET",params:r={},headers:n={}}=e;this.abortController&&this.abortController.abort(),this.abortController=new AbortController;let s=t;if("GET"===i&&r){s=`${s}?${new URLSearchParams(r).toString()}`}const a={method:i,headers:{"Content-Type":"application/json",access_token:this.authManager.getAccessToken(),...n},body:"GET"===i?null:JSON.stringify(r),signal:this.abortController.signal},o=await fetch(s,a);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(e)):{data:null,error:{message:h.message,errorCode:h.errorCode,status:h.status}}}getCachedData(e){const t=this.cache.get(e);return t&&Date.now()-t.timestamp<this.cacheTimeout?t.data:(t&&this.cache.delete(e),null)}setCacheData(e,t){if(this.cache.set(e,{data:t,timestamp:Date.now()}),this.cache.size>100){const e=this.cache.keys().next().value;this.cache.delete(e)}}generateCacheKey(e){return JSON.stringify({endpoint:e.endpoint,params:e.params,method:e.method||"GET"})}generateRequestKey(e){return this.generateCacheKey(e)}delay(e){return new Promise(t=>setTimeout(t,e))}static clearAllCache(){this.cache=new Map}static configure(e){void 0!==e.maxRetries&&(OpenApiWireAdapter.prototype.maxRetries=e.maxRetries),void 0!==e.retryDelay&&(OpenApiWireAdapter.prototype.retryDelay=e.retryDelay),void 0!==e.cacheTimeout&&(OpenApiWireAdapter.prototype.cacheTimeout=e.cacheTimeout)}}function n(e){if(!e||!e.endpointConfig)throw new Error("No config provided");const{endpointConfig:t}=e;if("string"==typeof t)return e;if(t.endpoint)return t.endpoint;if(!t.isv)throw new Error("Invalid config isv provided");if(!t.app)throw new Error("Invalid config app provided");if(!t.form)throw new Error("Invalid config form provided");if(!t.serviceName)throw new Error("Invalid config serviceName provided");return`/kapi/${t.version||"v2"}/${t.isv}/${t.app}/${t.form}/${t.serviceName}`}const s=function(e="GET",i={}){return function(s){if("function"==typeof s){const t=new r(s),a=t.update.bind(t);return t.update=function(t){const r={endpoint:n(t),method:e,...i,...t};return delete r.endpointConfig,t&&"object"==typeof t&&!t.endpoint&&(r.params=t.params||t),a(r)},t}return async function(e,i,s){await t.waitForAuth();const a={endpoint:n(s),method:e,...i,...s};delete a.endpointConfig,s&&"object"==typeof s&&!s.endpoint&&(a.params=s.params||s);return new Promise((e,t)=>{const i=new r(i=>{i.error?t(i.error):e(i)});i.connect(),i.update(a)})}(e,i,s||{})}}("POST");var a=Object.freeze({__proto__:null,AuthManager:e,authManager:t,doFetch:s,initializeAuth:async function(e){return await t.initialize(e)},isAuthenticated:function(){return t.isAuthenticated()}});const o="yunzhijia",h="yunzhijia_desktop",c="yunzhijia_old_desktop",u="weixin",d="dingding",g="wxwork",l="welink",f="feishu",p="unknown";function m(){const e=navigator.userAgent;return/Qing\/.*;(iOS|iPhone|Android|iPadOS|Harmony)/.test(e)}function y(){const e=navigator.userAgent;return/App\/cloudhub/.test(e)}function w(){const e=navigator.userAgent;return/clientId:10204/.test(e)}function k(){const e=navigator.userAgent;return e.indexOf("MicroMessenger")>-1&&e.indexOf("wxwork")<0}function A(){const e=navigator.userAgent;return e.indexOf("MicroMessenger")>-1&&e.indexOf("wxwork")>-1}function x(){const e=navigator.userAgent,t=e.indexOf("DingTalk")>-1,i=-1===e.indexOf("MiniProgram")&&-1===e.indexOf("dd-web");return t&&i}function _(){const e=navigator.userAgent;return e.indexOf("welink")>-1||e.indexOf("cloudlink")>-1}function T(){return navigator.userAgent.indexOf("Lark/")>-1}function v(){const e=navigator.userAgent.toLowerCase();return/chrome|crios/.test(e)&&!/edg|edge|opr|opera|fxios|samsungbrowser/.test(e)}function C(){const e=navigator.userAgent.toLowerCase();return/edg/.test(e)}function b(){const e=navigator.userAgent.toLowerCase();return/edge/.test(e)&&!/edg/.test(e)}function S(){return C()||b()}function R(){const e=navigator.userAgent.toLowerCase();return/firefox|fxios/.test(e)}function M(){const e=navigator.userAgent.toLowerCase();return/msie|trident/.test(e)}function E(){const e=navigator.userAgent.toLowerCase();return/safari/.test(e)&&!/chrome|crios|edg|edge|fxios|opr|opera/.test(e)}const O="chrome",P="edge",D="firefox",q="ie",L="safari",z="unknown";function $(){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}var I=Object.freeze({__proto__:null,getAppName:function(){return m()?o:y()?h:w()?c:k()?u:A()?g:x()?d:_?l:T()?f:p},getBrowserName:function(){return v()?O:S()?P:R()?D:E()?L:M()?q:z},isChrome:v,isChromiumEdge:C,isDD:x,isEdge:S,isFeiShu:T,isFirefox:R,isIE:M,isLegacyEdge:b,isMobile:$,isPC:function(){return!$()},isSafari:E,isWX:k,isWeLink:_,isWxWork:A,isYzj:m,isYzjDesktop:y,isYzjOldDesktop:w});export{I as client,a as openApiAdapter};
|
|
2
|
+
//# sourceMappingURL=index.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../src/modules/openApi/authManager.js","../src/modules/openApi/adapter.js","../src/modules/openApi/factory.js","../src/modules/client/app.js","../src/modules/client/browser.js","../src/modules/client/device.js"],"sourcesContent":["/**\n * Global open api auth manager\n */\n\nclass AuthManager { \n constructor() {\n this.accessToken = null; \n this.refreshToken = null;\n this.isInitialized = false;\n this.isAuthenticating = false;\n this.authPromise = null;\n this.authConfig = null;\n this.listeners = new Set();\n\n // Try to load tokens from storage\n this.loadTokensFromStorage();\n }\n\n async initialize(config) {\n if (this.isInitialized && this.accessToken) {\n return true;\n }\n\n this.authConfig = {\n endpoint: config.endpoint || '/kapi/oauth2/getToken',\n method: config.method || 'POST',\n headers: config.headers || {\n 'Content-Type': 'application/json'\n },\n body: config.bodyParams|| {},\n params: config.queryParams || {}\n };\n\n try {\n await this.authenticate();\n this.isInitialized = true;\n this.notifyListeners('initialized', { success: true });\n } catch (error) {\n console.error('AuthManager: Failed to initialize auth - ', error);\n this.notifyListeners('initialized', { success: false, error });\n throw error;\n }\n }\n\n async authenticate() {\n if (this.isAuthenticating && this.authPromise) {\n return this.authPromise;\n }\n\n this.isAuthenticating = true;\n this.authPromise = this._performAuthentication();\n\n try {\n const result = await this.authPromise;\n this.notifyListeners('authenticated', { success: true });\n return result;\n } catch (error) {\n this.notifyListeners('authenticated', { success: false, error });\n throw error;\n } finally {\n this.isAuthenticating = false;\n this.authPromise = null;\n }\n }\n\n async _performAuthentication() {\n if (!this.authConfig) {\n throw new Error('Authentication configuration is missing.');\n }\n\n const { endpoint, headers, body, method } = this.authConfig;\n try {\n const response = await fetch(endpoint, {\n method,\n headers,\n body: JSON.stringify(body)\n });\n\n if (!response.ok) {\n throw new Error(`Authentication failed: ${response.status} - ${response.statusText}`);\n }\n\n const authData = await response.json();\n if (authData.status === true && authData.errorCode === '0') {\n this.accessToken = authData.data.access_token;\n this.refreshToken = authData.data.refresh_token;\n\n this.saveTokensToStorage();\n\n return authData;\n }\n throw new Error(`Authentication failed: ${authData.errorCode} - ${authData.message}`);\n } catch (error) {\n console.error('AuthManager: Authentication failed -', error);\n throw error;\n }\n }\n\n async refreshAccessToken() {\n console.log('AuthManager: Refreshing access token...')\n this.authConfig.body.nonce = this.generateNonce();\n this.authConfig.body.timestamp = this.formatTimestamp();\n return this._performAuthentication();\n }\n\n // 生成随机UUID作为nonce\n generateNonce() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n const r = Math.random() * 16 | 0;\n const v = c == 'x' ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n }\n\n // 格式化时间戳为 YYYY-MM-DD HH:mm:ss 格式\n formatTimestamp(date = new Date()) {\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const day = String(date.getDate()).padStart(2, '0');\n const hours = String(date.getHours()).padStart(2, '0');\n const minutes = String(date.getMinutes()).padStart(2, '0');\n const seconds = String(date.getSeconds()).padStart(2, '0');\n\n return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;\n }\n\n getAccessToken() {\n return this.accessToken;\n }\n\n isAuthenticated() {\n return !!this.accessToken;\n }\n\n isReady() {\n return this.isInitialized && this.isAuthenticated();\n }\n\n logout() {\n this.clearTokens();\n this.isInitialized = false;\n this.authConfig = null;\n this.notifyListeners('logout', {});\n }\n\n clearTokens() {\n this.accessToken = null;\n this.refreshToken = null;\n this.clearTokensFromStorage();\n }\n\n loadTokensFromStorage() { \n try {\n this.accessToken = localStorage.getItem('__kapi_auth_manager_access_token__');\n this.refreshToken = localStorage.getItem('__kapi_auth_manager_refresh_token__');\n } catch (error) {\n console.warn('AuthManager: Error loading tokens from storage');\n }\n }\n\n saveTokensToStorage() {\n try {\n if (this.accessToken) {\n localStorage.setItem('__kapi_auth_manager_access_token__', this.accessToken);\n }\n\n if (this.refreshToken) {\n localStorage.setItem('__kapi_auth_manager_refresh_token__', this.refreshToken);\n }\n } catch(error) {\n console.warn('AuthManager: Error saving tokens to storage');\n }\n }\n\n clearTokensFromStorage() {\n try {\n localStorage.removeItem('__kapi_auth_manager_access_token__');\n localStorage.removeItem('__kapi_auth_manager_refresh_token__');\n } catch (error) {\n console.warn('AuthManager: Error removing tokens to storage');\n }\n }\n\n addListener(callback) {\n this.listeners.add(callback);\n }\n\n removeListener(callback) {\n this.listeners.delete(callback);\n }\n\n notifyListeners(event, data) {\n this.listeners.forEach((listener) => {\n try {\n listener(event, data);\n } catch(error) {\n console.error('AuthManager: Error notifying listener')\n }\n });\n }\n\n async waitForAuth() {\n if (!this.isAuthenticated()) {\n return true;\n }\n\n if (this.isAuthenticating && this.authPromise) {\n await this.authPromise;\n return this.isAuthenticated();\n }\n }\n}\n\nconst authManager = new AuthManager();\n\nexport { authManager, AuthManager };\nexport default authManager;\n\nexport async function initializeAuth(config) {\n return await authManager.initialize(config);\n}\n\nexport function isAuthenticated() {\n return authManager.isAuthenticated();\n}","import authManager from \"./authManager\";\n\nexport default class Adapter {\n constructor(dataCallback) {\n this.name = 'OpenApiWireAdapter';\n\n this.dataCallback = dataCallback;\n this.config = {};\n this.abortController = null;\n\n this.retryCount = 0; // current retry count\n this.maxRetries = 3; // max retry times\n this.retryDelay = 1000;\n this.cache = new Map();\n this.cacheTimeout = 5 * 60 * 1000; // cache timeout in milliseconds, default is 5mins\n\n this.authManager = authManager;\n\n // Request queue\n this.pendingRequests = new Map();\n this.requestQueue = [];\n this.isProcessingQueue = false;\n }\n\n // Lifecycle - create connect\n connect() {}\n\n // Lifecycle - update data\n update(config) {\n this.config = { ...config };\n this.retryCount = 0;\n\n if (this.shouldFetchData(config)) {\n this.fetchDataWithQueue(config);\n } else {\n this.dataCallback({ data: null, error: null });\n }\n }\n\n // Lifecycle - destroy\n disconnect() {\n if (this.abortController) {\n this.abortController.abort();\n }\n\n this.cache.clear();\n this.pendingRequests.clear();\n this.requestQueue = [];\n this.isProcessingQueue = false;\n }\n\n async waitForAuth() {\n try {\n if (!this.authManager.isReady()) {\n await this.authManager.waitForAuth();\n }\n return true;\n } catch(error) {\n throw error;\n }\n }\n\n getAccessToken() {\n return this.authManager.getAccessToken();\n }\n\n isAuthenticated() {\n return this.authManager.isAuthenticated();\n }\n\n shouldFetchData (config) {\n return config && config.endpoint && config.endpoint !== undefined;\n }\n\n async fetchDataWithQueue(config) {\n const requestKey = this.generateRequestKey(config);\n\n if (this.pendingRequests.has(requestKey)) {\n console.log('Request is inqueue');\n return;\n }\n\n this.requestQueue.push({ config, requestKey, callback: this.callback });\n this.pendingRequests.set(requestKey, true);\n\n try {\n await this.authManager.waitForAuth();\n } catch (error) {\n console.error('OpenApi Adapter: Authentication failed, no need to send any request');\n this.dataCallback({\n data: null,\n error: {\n message: `Auth failed: ${error.message}`,\n status: 'AUTH_FAILED',\n originalError: error\n }\n });\n this.pendingRequests.delete(requestKey);\n return;\n }\n\n if (!this.isProcessingQueue) {\n this.processRequestQueue();\n }\n }\n\n async processRequestQueue() { \n this.isProcessingQueue = true;\n while (this.requestQueue.length > 0) {\n const request = this.requestQueue.shift();\n try {\n await this.fetchDataWithRetry(request.config);\n } catch (error) {\n console.error('Error fetching data:', error)\n } finally {\n this.pendingRequests.delete(request.requestKey);\n }\n\n // avoid too fast\n await this.delay(10);\n }\n this.isProcessingQueue = false;\n }\n\n async fetchDataWithRetry(config) { \n const cacheKey = this.generateCacheKey(config);\n \n const cachedData = this.getCachedData(cacheKey);\n if (cachedData) {\n this.dataCallback(cacheData);\n return;\n }\n\n let lastError = null;\n for (let attempt = 0; attempt < this.maxRetries; attempt++) {\n try {\n const result = await this.performRequest(config);\n\n this.setCacheData(cacheKey, result);\n this.dataCallback(result);\n return;\n } catch (error) {\n lastError = error;\n\n if (attempt < this.maxRetries) {\n await this.delay(this.retryDelay * Math.pow(2, attempt));\n }\n }\n }\n\n this.dataCallback({\n data: null,\n error: {\n message: lastError.message,\n status: lastError.status || 'NETWORK_ERROR',\n retries: this.maxRetries\n }\n })\n }\n\n async performRequest(config) {\n const { endpoint, method = 'GET', params = {}, headers = {} } = config;\n\n if (this.abortController) {\n this.abortController.abort();\n }\n\n this.abortController = new AbortController();\n\n let url = endpoint;\n if (method === 'GET' && params) {\n const searchParams = new URLSearchParams(params);\n url = `${url}?${searchParams.toString()}`\n }\n\n const requestOptions = {\n method,\n headers: {\n 'Content-Type': 'application/json',\n 'access_token': this.authManager.getAccessToken(),\n ...headers\n },\n body: method === 'GET' ? null : JSON.stringify(params),\n signal: this.abortController.signal\n }\n\n const response = await fetch(url, requestOptions);\n if (!response.ok) {\n throw new Error(`HTTP error! Status: ${response.status} - ${response.statusText}`);\n }\n\n const data = await response.json();\n if (data.status === true && data.errorCode === '0') {\n return { data: data.data, error: null };\n } else if (data.errorCode === '401') {\n await this.authManager.refreshAccessToken();\n return this.performRequest(config);\n }\n\n return {\n data: null,\n error: {\n message: data.message,\n errorCode: data.errorCode,\n status: data.status\n }\n }\n }\n\n getCachedData(cacheKey) {\n const cached = this.cache.get(cacheKey);\n if (cached && Date.now() - cached.timestamp < this.cacheTimeout) {\n return cached.data;\n }\n\n if (cached) {\n this.cache.delete(cacheKey);\n }\n return null;\n }\n\n setCacheData(cacheKey, data) {\n this.cache.set(cacheKey, {\n data,\n timestamp: Date.now(),\n });\n\n if (this.cache.size > 100) {\n const firstKey = this.cache.keys().next().value;\n this.cache.delete(firstKey);\n }\n }\n\n generateCacheKey(config) {\n return JSON.stringify({\n endpoint: config.endpoint,\n params: config.params,\n method: config.method || 'GET'\n })\n }\n\n generateRequestKey(config) {\n return this.generateCacheKey(config);\n }\n\n delay(ms) {\n return new Promise(resolve => setTimeout(resolve, ms));\n }\n\n static clearAllCache() {\n this.cache = new Map();\n }\n\n static configure(options) {\n if (options.maxRetries !== undefined) {\n OpenApiWireAdapter.prototype.maxRetries = options.maxRetries;\n }\n\n if (options.retryDelay !== undefined) {\n OpenApiWireAdapter.prototype.retryDelay = options.retryDelay;\n }\n\n if (options.cacheTimeout !== undefined) {\n OpenApiWireAdapter.prototype.cacheTimeout = options.cacheTimeout;\n }\n }\n}","import OpenApiWireAdapter from \"./adapter\";\nimport authManager from \"./authManager\";\n\nfunction createWireAdapter(defaultMethod = 'GET', defaultConfig = {}) {\n function wireAdapterFunction(configOrDataCallback) {\n if (typeof configOrDataCallback === 'function') {\n const adapter = new OpenApiWireAdapter(configOrDataCallback);\n\n const originalUpdate = adapter.update.bind(adapter);\n adapter.update = function (config) {\n const fullConfig = {\n endpoint: getEndpoint(config),\n method: defaultMethod,\n ...defaultConfig,\n ...config\n }\n delete fullConfig.endpointConfig;\n\n if (config && typeof config === 'object' && !config.endpoint) {\n fullConfig.params = config.params || config;\n }\n\n return originalUpdate(fullConfig);\n }\n return adapter;\n } else {\n const config = configOrDataCallback || {};\n return createPromiseCall(defaultMethod, defaultConfig, config);\n }\n \n }\n return wireAdapterFunction;\n}\n\n// 创建 Promise 调用的辅助函数\nasync function createPromiseCall(defaultMethod, defaultConfig, config) {\n // 等待认证完成\n await authManager.waitForAuth();\n\n // 合并默认配置和传入的配置\n const fullConfig = {\n endpoint: getEndpoint(config),\n method: defaultMethod,\n ...defaultConfig,\n ...config\n }\n delete fullConfig.endpointConfig;\n\n // 如果传入的是 params,直接使用\n if (config && typeof config === 'object' && !config.endpoint) {\n fullConfig.params = config.params || config;\n }\n\n return new Promise((resolve, reject) => {\n const adapter = new OpenApiWireAdapter((result) => {\n if (result.error) {\n reject(result.error);\n } else {\n resolve(result);\n }\n });\n\n // 连接并更新配置\n adapter.connect();\n adapter.update(fullConfig);\n });\n}\n\nfunction getEndpoint(config) { \n if (!config || !config.endpointConfig) {\n throw new Error('No config provided');\n }\n\n const { endpointConfig } = config;\n if (typeof endpointConfig === 'string') return config;\n if (endpointConfig.endpoint) return endpointConfig.endpoint;\n if (!endpointConfig.isv) {\n throw new Error('Invalid config isv provided');\n }\n\n if (!endpointConfig.app) {\n throw new Error('Invalid config app provided');\n }\n\n if (!endpointConfig.form) {\n throw new Error('Invalid config form provided');\n }\n\n if (!endpointConfig.serviceName) {\n throw new Error('Invalid config serviceName provided');\n }\n\n return `/kapi/${endpointConfig.version || 'v2'}/${endpointConfig.isv}/${endpointConfig.app}/${endpointConfig.form}/${endpointConfig.serviceName}`\n}\n\nexport const doFetch = createWireAdapter('POST')","const App = {\n yzj: 'yunzhijia',\n yzjDesktop: 'yunzhijia_desktop',\n yzjOldDesktop: 'yunzhijia_old_desktop',\n wx: 'weixin',\n dd: 'dingding',\n wxwork: 'wxwork',\n welink: 'welink',\n feishu: 'feishu',\n unknown: 'unknown'\n}\n\nexport function isYzj() {\n const agent = navigator.userAgent;\n return /Qing\\/.*;(iOS|iPhone|Android|iPadOS|Harmony)/.test(agent);\n}\n\nexport function isYzjDesktop() {\n const agent = navigator.userAgent;\n return /App\\/cloudhub/.test(agent);\n}\n\nexport function isYzjOldDesktop() {\n const agent = navigator.userAgent;\n return /clientId:10204/.test(agent);\n}\n\nexport function isWX() {\n const agent = navigator.userAgent;\n return agent.indexOf('MicroMessenger') > -1 && agent.indexOf('wxwork') < 0;\n}\n\nexport function isWxWork() {\n const agent = navigator.userAgent;\n return agent.indexOf('MicroMessenger') > -1 && agent.indexOf('wxwork') > -1;\n}\n\nexport function isDD() {\n const agent = navigator.userAgent;\n const _isDD = agent.indexOf('DingTalk') > -1;\n const isDDMiniProgram = agent.indexOf('MiniProgram') === -1 && agent.indexOf('dd-web') === -1;\n return _isDD && isDDMiniProgram;\n}\n\nexport function isWeLink() {\n const agent = navigator.userAgent;\n return agent.indexOf('welink') > -1 || agent.indexOf('cloudlink') > -1;\n}\n\nexport function isFeiShu() {\n const agent = navigator.userAgent;\n return agent.indexOf('Lark/') > -1;\n}\n\nexport function getApp() {\n if (isYzj()) return App.yzj;\n else if (isYzjDesktop()) return App.yzjDesktop;\n else if (isYzjOldDesktop()) return App.yzjOldDesktop;\n else if (isWX()) return App.wx;\n else if (isWxWork()) return App.wxwork;\n else if (isDD()) return App.dd;\n else if (isWeLink) return App.welink;\n else if (isFeiShu()) return App.feishu;\n else return App.unknown;\n}\n\nexport default getApp;","export function isChrome() {\n const userAgent = navigator.userAgent.toLowerCase();\n return /chrome|crios/.test(userAgent) && !/edg|edge|opr|opera|fxios|samsungbrowser/.test(userAgent);\n}\n\nexport function isChromiumEdge() {\n const userAgent = navigator.userAgent.toLowerCase();\n return /edg/.test(userAgent);\n}\n\nexport function isLegacyEdge() {\n const userAgent = navigator.userAgent.toLowerCase();\n return /edge/.test(userAgent) && !/edg/.test(userAgent);\n}\n\nexport function isEdge() {\n return isChromiumEdge() || isLegacyEdge();\n}\n\nexport function isFirefox() {\n const userAgent = navigator.userAgent.toLowerCase();\n return /firefox|fxios/.test(userAgent);\n}\n\nexport function isIE() {\n const userAgent = navigator.userAgent.toLowerCase();\n return /msie|trident/.test(userAgent);\n}\n\nexport function isSafari() {\n const userAgent = navigator.userAgent.toLowerCase();\n return /safari/.test(userAgent) && !/chrome|crios|edg|edge|fxios|opr|opera/.test(userAgent);\n}\n\nconst Browser = {\n chrome: 'chrome',\n edge: 'edge',\n firefox: 'firefox',\n ie: 'ie',\n safari: 'safari',\n unknown: 'unknown'\n}\n\nexport function getBrowser() {\n if (isChrome()) return Browser.chrome;\n else if (isEdge()) return Browser.edge;\n else if (isFirefox()) return Browser.firefox;\n else if (isSafari()) return Browser.safari;\n else if (isIE()) return Browser.ie;\n else return Browser.unknown;\n}\n\nexport default getBrowser;","export function isMobile() {\n const agent = navigator.userAgent.toLowerCase();\n const isTouchDevice = 'ontouchstart' in window || navigator.maxTouchPoints > 0 || navigator.msMaxTouchPoints > 0;\n const maxMobileWidth = 1024;\n return (/android|webos|iphone|ipad|ipod|blackberry|iemobile|opera mini/i.test(agent)) || (isTouchDevice && window.innerWidth <= maxMobileWidth)\n}\n\nexport function isPC() {\n return !isMobile();\n}"],"names":["AuthManager","constructor","this","accessToken","refreshToken","isInitialized","isAuthenticating","authPromise","authConfig","listeners","Set","loadTokensFromStorage","initialize","config","endpoint","method","headers","body","bodyParams","params","queryParams","authenticate","notifyListeners","success","error","console","_performAuthentication","result","Error","response","fetch","JSON","stringify","ok","status","statusText","authData","json","errorCode","data","access_token","refresh_token","saveTokensToStorage","message","refreshAccessToken","log","nonce","generateNonce","timestamp","formatTimestamp","replace","c","r","Math","random","toString","date","Date","getFullYear","String","getMonth","padStart","getDate","getHours","getMinutes","getSeconds","getAccessToken","isAuthenticated","isReady","logout","clearTokens","clearTokensFromStorage","localStorage","getItem","warn","setItem","removeItem","addListener","callback","add","removeListener","delete","event","forEach","listener","waitForAuth","authManager","Adapter","dataCallback","name","abortController","retryCount","maxRetries","retryDelay","cache","Map","cacheTimeout","pendingRequests","requestQueue","isProcessingQueue","connect","update","shouldFetchData","fetchDataWithQueue","disconnect","abort","clear","undefined","requestKey","generateRequestKey","has","push","set","originalError","processRequestQueue","length","request","shift","fetchDataWithRetry","delay","cacheKey","generateCacheKey","getCachedData","cacheData","lastError","attempt","performRequest","setCacheData","pow","retries","AbortController","url","URLSearchParams","requestOptions","signal","cached","get","now","size","firstKey","keys","next","value","ms","Promise","resolve","setTimeout","clearAllCache","configure","options","OpenApiWireAdapter","prototype","getEndpoint","endpointConfig","isv","app","form","serviceName","version","doFetch","defaultMethod","defaultConfig","configOrDataCallback","adapter","originalUpdate","bind","fullConfig","async","reject","createPromiseCall","createWireAdapter","App","isYzj","agent","navigator","userAgent","test","isYzjDesktop","isYzjOldDesktop","isWX","indexOf","isWxWork","isDD","_isDD","isDDMiniProgram","isWeLink","isFeiShu","isChrome","toLowerCase","isChromiumEdge","isLegacyEdge","isEdge","isFirefox","isIE","isSafari","Browser","isMobile","isTouchDevice","window","maxTouchPoints","msMaxTouchPoints","innerWidth"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../shared/index-Dtu_3V-z.cjs.js");exports.__core__=e.__core__,exports.default=e.index$1,exports.publish=e.publish,exports.subscribe=e.subscribe,exports.unsubscribe=e.unsubscribe;
|
|
2
|
+
//# sourceMappingURL=index.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -1 +1,2 @@
|
|
|
1
|
-
"use strict";var e=require("../index-CKzrFqj6.js");exports.loadScript=e.loadScript,exports.loadStyle=e.loadStyle;
|
|
1
|
+
"use strict";var e=require("../shared/index-CKzrFqj6.cjs.js");exports.loadScript=e.loadScript,exports.loadStyle=e.loadStyle;
|
|
2
|
+
//# sourceMappingURL=index.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -1 +1,2 @@
|
|
|
1
|
-
export{l as loadScript,a as loadStyle}from"../index-D_DekteB.js";
|
|
1
|
+
export{l as loadScript,a as loadStyle}from"../shared/index-D_DekteB.esm.js";
|
|
2
|
+
//# sourceMappingURL=index.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -1 +1,2 @@
|
|
|
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;
|
|
2
|
+
//# sourceMappingURL=index-CKzrFqj6.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-CKzrFqj6.cjs.js","sources":["../../src/modules/platformResourceLoader/index.js"],"sourcesContent":["// 用于缓存已加载资源的URL,避免重复加载\nconst loadedResources = new Set();\n\n/**\n * 加载一个外部脚本资源\n * @param {element} elm - 需要将资源注入到该元素下,通常是 document.head\n * @param {string} url - 脚本的URL\n * @param {Function} callback - 加载成功或失败后的回调函数\n * @returns {Promise} - 返回一个Promise,便于异步处理\n */\nexport function loadScript(elm, url, callback) {\n // 参数校验\n if (!elm) {\n elm = document.head\n }\n if (!url || typeof url !== 'string') {\n throw new TypeError('Invalid script URL');\n }\n // 如果URL已经加载过,直接回调\n if (loadedResources.has(url)) {\n if (typeof callback === 'function') {\n callback(null, url);\n }\n return Promise.resolve(url);\n }\n\n return new Promise((resolve, reject) => {\n const script = document.createElement('script');\n script.src = url;\n script.type = 'text/javascript';\n script.async = true;\n\n script.onload = () => {\n loadedResources.add(url); // 添加到已加载缓存\n if (typeof callback === 'function') {\n callback(null, url);\n }\n resolve(url);\n };\n\n script.onerror = (error) => {\n if (typeof callback === 'function') {\n callback(error, url);\n }\n reject(error);\n };\n\n const target = elm.template || elm\n target.appendChild(script);\n });\n}\n\n/**\n * 加载一个外部CSS样式表资源\n * @param {element} elm - 需要将资源注入到该元素下,通常是 document.head\n * @param {string} url - 样式表的URL\n * @param {Function} callback - 加载成功或失败后的回调函数\n * @returns {Promise} - 返回一个Promise,便于异步处理\n */\nexport function loadStyle(elm, url, callback) {\n // 参数校验\n if (!elm) {\n elm = document.head\n }\n if (!url || typeof url !== 'string') {\n throw new TypeError('Invalid CSS URL');\n }\n if (loadedResources.has(url)) {\n if (typeof callback === 'function') {\n callback(null, url);\n }\n return Promise.resolve(url);\n }\n\n return new Promise((resolve, reject) => {\n const link = document.createElement('link');\n link.rel = 'stylesheet';\n link.type = 'text/css';\n link.href = url;\n\n link.onload = () => {\n loadedResources.add(url);\n if (typeof callback === 'function') {\n callback(null, url);\n }\n resolve(url);\n };\n\n link.onerror = (error) => {\n if (typeof callback === 'function') {\n callback(error, url);\n }\n reject(error);\n };\n\n const target = elm.template || elm\n target.appendChild(link);\n });\n}"],"names":["loadedResources","Set","loadScript","elm","url","callback","document","head","TypeError","has","Promise","resolve","reject","script","createElement","src","type","async","onload","add","onerror","error","template","appendChild","loadStyle","link","rel","href"],"mappings":"aACA,MAAMA,EAAkB,IAAIC,IASrB,SAASC,EAAWC,EAAKC,EAAKC,GAKnC,GAHKF,IACHA,EAAMG,SAASC,OAEZH,GAAsB,iBAARA,EACjB,MAAM,IAAII,UAAU,sBAGtB,OAAIR,EAAgBS,IAAIL,IACE,mBAAbC,GACTA,EAAS,KAAMD,GAEVM,QAAQC,QAAQP,IAGlB,IAAIM,QAAQ,CAACC,EAASC,KAC3B,MAAMC,EAASP,SAASQ,cAAc,UACtCD,EAAOE,IAAMX,EACbS,EAAOG,KAAO,kBACdH,EAAOI,OAAQ,EAEfJ,EAAOK,OAAS,KACdlB,EAAgBmB,IAAIf,GACI,mBAAbC,GACTA,EAAS,KAAMD,GAEjBO,EAAQP,IAGVS,EAAOO,QAAWC,IACQ,mBAAbhB,GACTA,EAASgB,EAAOjB,GAElBQ,EAAOS,KAGMlB,EAAImB,UAAYnB,GACxBoB,YAAYV,IAEvB,CASO,SAASW,EAAUrB,EAAKC,EAAKC,GAKlC,GAHKF,IACHA,EAAMG,SAASC,OAEZH,GAAsB,iBAARA,EACjB,MAAM,IAAII,UAAU,mBAEtB,OAAIR,EAAgBS,IAAIL,IACE,mBAAbC,GACTA,EAAS,KAAMD,GAEVM,QAAQC,QAAQP,IAGlB,IAAIM,QAAQ,CAACC,EAASC,KAC3B,MAAMa,EAAOnB,SAASQ,cAAc,QACpCW,EAAKC,IAAM,aACXD,EAAKT,KAAO,WACZS,EAAKE,KAAOvB,EAEZqB,EAAKP,OAAS,KACZlB,EAAgBmB,IAAIf,GACI,mBAAbC,GACTA,EAAS,KAAMD,GAEjBO,EAAQP,IAGVqB,EAAKL,QAAWC,IACU,mBAAbhB,GACTA,EAASgB,EAAOjB,GAElBQ,EAAOS,KAGMlB,EAAImB,UAAYnB,GACxBoB,YAAYE,IAEvB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
function s(){return`${Math.random().toString(36).slice(2)}${Date.now().toString(36)}`}const e=new class{constructor(){this.localSubs=new WeakMap,this.components=new Set,this.instanceId=s(),this.bc=null,this._listenBroadcast()}_listenBroadcast(){try{this.bc=new BroadcastChannel("__kdcloud_kwc_pubsub_channel__"),this.bc.onmessage=s=>this._onMessage(s.data)}catch{const s=s=>{const e=s.data;e?.__KDCLOUD_KWC_PUBSUB__&&this._onMessage(e)};window.addEventListener("message",s),this._messageHandler=s}}_onMessage(s={}){const{event:e,payload:t,senderId:n}=s;e&&n!==this.instanceId&&this._emitLocal(e,t,!0)}_postBroadcast(s,e){const t={event:s,payload:e,senderId:this.instanceId,__KDCLOUD_KWC_PUBSUB__:!0};try{this.bc?this.bc.postMessage(t):window.postMessage(t,"*")}catch(s){console.error("[my-pubsub] Broadcast failed:",s)}}_ensureFor(s){return this.localSubs.has(s)||(this.localSubs.set(s,new Map),this.components.add(s)),this.localSubs.get(s)}subscribe(e,t,n){if("object"!=typeof e||!e)throw new TypeError("[my-pubsub] subscribe: 第一个参数必须是有效的组件实例");if("string"!=typeof t)throw new TypeError("[my-pubsub] subscribe: event 必须是字符串");if("function"!=typeof n)throw new TypeError("[my-pubsub] subscribe: callback 必须是函数");const o=this._ensureFor(e);o.has(t)||o.set(t,new Map);const i=o.get(t),r=s();return i.set(r,n),()=>{this._unsubscribeById(e,t,r)}}_unsubscribeById(s,e,t){const n=this.localSubs.get(s);if(!n)return;const o=n.get(e);o&&(o.delete(t),0===o.size&&n.delete(e),0===n.size&&this._cleanup(s))}unsubscribe(s,e,t){if(!s||"object"!=typeof s)return;const n=this.localSubs.get(s);if(!n)return;if(!e)return void this._cleanup(s);const o=n.get(e);if(o){if(void 0===t)return n.delete(e),void(0===n.size&&this._cleanup(s));if("string"==typeof t)this._unsubscribeById(s,e,t);else if("function"==typeof t)for(const[n,i]of o.entries())if(i===t){this._unsubscribeById(s,e,n);break}}}publish(s,e,{global:t=!0}={}){if("string"!=typeof s)throw new TypeError("[my-pubsub] publish: event 必须是字符串");this._emitLocal(s,e,!1),t&&this._postBroadcast(s,e)}_emitLocal(s,e,t=!1){const n=Array.from(this.components);for(const o of n){const n=this.localSubs.get(o);if(!n){this.components.delete(o);continue}const i=n.get(s);if(!i)continue;const r=Array.from(i.values());for(const n of r)try{n(e,{fromRemote:t})}catch(e){console.error(`[my-pubsub] callback error in event "${s}":`,e)}}}_cleanup(s){try{this.localSubs.delete(s),this.components.delete(s)}catch(s){console.warn("[my-pubsub] cleanup failed:",s)}}getSubscriptionStats(){const s={totalComponents:this.components.size,events:new Map};for(const e of this.components){const t=this.localSubs.get(e);if(t)for(const[e,n]of t.entries())s.events.has(e)||s.events.set(e,0),s.events.set(e,s.events.get(e)+n.size)}return s}};function t(s,t,n){return e.subscribe(s,t,n)}function n(s,t,n){return e.publish(s,t,n)}function o(s,t,n){return e.unsubscribe(s,t,n)}const i=e;var r={subscribe:t,publish:n,unsubscribe:o},c=Object.freeze({__proto__:null,__core__:i,default:r,publish:n,subscribe:t,unsubscribe:o});export{i as _,r as a,c as i,n as p,t as s,o as u};
|
|
2
|
+
//# sourceMappingURL=index-ChQWdmu9.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-ChQWdmu9.esm.js","sources":["../../src/modules/messageService/index.js"],"sourcesContent":["const CHANNEL_KEY = '__kdcloud_kwc_pubsub_channel__';\n\n// 使用更高效的ID生成方法\nfunction genId() {\n return `${Math.random().toString(36).slice(2)}${Date.now().toString(36)}`;\n}\n\nclass PubSubCore {\n constructor() {\n this.localSubs = new WeakMap();\n this.components = new Set();\n this.instanceId = genId();\n this.bc = null;\n this._listenBroadcast();\n }\n\n _listenBroadcast() {\n try {\n // 优先使用 BroadcastChannel\n this.bc = new BroadcastChannel(CHANNEL_KEY);\n this.bc.onmessage = (ev) => this._onMessage(ev.data);\n } catch {\n // 降级方案\n const messageHandler = (ev) => {\n const d = ev.data;\n if (d?.__KDCLOUD_KWC_PUBSUB__) this._onMessage(d);\n };\n window.addEventListener('message', messageHandler);\n \n // 保存引用以便后续清理(如果需要)\n this._messageHandler = messageHandler;\n }\n }\n\n _onMessage(data = {}) {\n const { event, payload, senderId } = data;\n // 使用短路运算简化条件判断\n if (!event || senderId === this.instanceId) return;\n this._emitLocal(event, payload, true);\n }\n\n _postBroadcast(event, payload) {\n const message = { \n event, \n payload, \n senderId: this.instanceId,\n __KDCLOUD_KWC_PUBSUB__: true // 统一添加标识\n };\n \n try {\n if (this.bc) {\n this.bc.postMessage(message);\n } else {\n window.postMessage(message, '*');\n }\n } catch (error) {\n console.error('[my-pubsub] Broadcast failed:', error);\n }\n }\n\n _ensureFor(component) {\n if (!this.localSubs.has(component)) {\n this.localSubs.set(component, new Map());\n this.components.add(component);\n }\n return this.localSubs.get(component);\n }\n\n /**\n * 订阅事件\n * @param {Object} component - 组件实例\n * @param {string} event - 事件名称\n * @param {Function} callback - 回调函数\n * @returns {Function} 取消订阅函数\n */\n subscribe(component, event, callback) {\n // 参数校验\n if (typeof component !== 'object' || !component) {\n throw new TypeError('[my-pubsub] subscribe: 第一个参数必须是有效的组件实例');\n }\n if (typeof event !== 'string') {\n throw new TypeError('[my-pubsub] subscribe: event 必须是字符串');\n }\n if (typeof callback !== 'function') {\n throw new TypeError('[my-pubsub] subscribe: callback 必须是函数');\n }\n\n const subsForComp = this._ensureFor(component);\n if (!subsForComp.has(event)) {\n subsForComp.set(event, new Map());\n }\n\n const mapForEvent = subsForComp.get(event);\n const subId = genId();\n mapForEvent.set(subId, callback);\n\n // 返回取消订阅函数\n return () => {\n this._unsubscribeById(component, event, subId);\n };\n }\n\n /**\n * 内部方法:根据ID取消订阅\n */\n _unsubscribeById(component, event, subId) {\n const subs = this.localSubs.get(component);\n if (!subs) return;\n\n const evMap = subs.get(event);\n if (!evMap) return;\n\n evMap.delete(subId);\n \n // 清理空Map\n if (evMap.size === 0) {\n subs.delete(event);\n }\n if (subs.size === 0) {\n this._cleanup(component);\n }\n }\n\n /**\n * 取消订阅\n */\n unsubscribe(component, event, callbackOrId) {\n if (!component || typeof component !== 'object') return;\n \n const subs = this.localSubs.get(component);\n if (!subs) return;\n\n // 清理整个组件\n if (!event) {\n this._cleanup(component);\n return;\n }\n\n const evMap = subs.get(event);\n if (!evMap) return;\n\n // 未提供第三个参数:清理整个事件\n if (typeof callbackOrId === 'undefined') {\n subs.delete(event);\n if (subs.size === 0) this._cleanup(component);\n return;\n }\n\n // 根据类型处理\n if (typeof callbackOrId === 'string') {\n this._unsubscribeById(component, event, callbackOrId);\n } else if (typeof callbackOrId === 'function') {\n // 向后兼容:根据回调函数删除\n for (const [id, cb] of evMap.entries()) {\n if (cb === callbackOrId) {\n this._unsubscribeById(component, event, id);\n break; // 只删除第一个匹配的,避免误删\n }\n }\n }\n }\n\n publish(event, payload, { global = true } = {}) {\n if (typeof event !== 'string') {\n throw new TypeError('[my-pubsub] publish: event 必须是字符串');\n }\n \n // 先本地触发\n this._emitLocal(event, payload, false);\n \n // 再广播\n if (global) {\n this._postBroadcast(event, payload);\n }\n }\n\n _emitLocal(event, payload, fromRemote = false) {\n // 使用数组缓存避免在迭代过程中修改Set\n const components = Array.from(this.components);\n \n for (const comp of components) {\n const subsForComp = this.localSubs.get(comp);\n if (!subsForComp) {\n this.components.delete(comp);\n continue;\n }\n\n const evMap = subsForComp.get(event);\n if (!evMap) continue;\n\n // 使用数组缓存回调,避免在迭代过程中修改Map\n const callbacks = Array.from(evMap.values());\n \n for (const cb of callbacks) {\n try {\n cb(payload, { fromRemote });\n } catch (err) {\n console.error(`[my-pubsub] callback error in event \"${event}\":`, err);\n }\n }\n }\n }\n\n _cleanup(component) {\n try {\n this.localSubs.delete(component);\n this.components.delete(component);\n } catch (err) {\n console.warn('[my-pubsub] cleanup failed:', err);\n }\n }\n\n /**\n * 获取当前订阅状态(调试用)\n */\n getSubscriptionStats() {\n const stats = {\n totalComponents: this.components.size,\n events: new Map()\n };\n\n for (const comp of this.components) {\n const subs = this.localSubs.get(comp);\n if (subs) {\n for (const [event, eventMap] of subs.entries()) {\n if (!stats.events.has(event)) {\n stats.events.set(event, 0);\n }\n stats.events.set(event, stats.events.get(event) + eventMap.size);\n }\n }\n }\n\n return stats;\n }\n}\n\n// 单例模式\nconst core = new PubSubCore();\n\n/* 导出 API */\nexport function subscribe(component, event, callback) {\n return core.subscribe(component, event, callback);\n}\n\nexport function publish(event, payload, options) {\n return core.publish(event, payload, options);\n}\n\nexport function unsubscribe(component, event, callbackOrId) {\n return core.unsubscribe(component, event, callbackOrId);\n}\n\n// 导出核心实例用于调试\nexport const __core__ = core;\n\nexport default { subscribe, publish, unsubscribe };"],"names":["genId","Math","random","toString","slice","Date","now","core","constructor","this","localSubs","WeakMap","components","Set","instanceId","bc","_listenBroadcast","BroadcastChannel","onmessage","ev","_onMessage","data","messageHandler","d","__KDCLOUD_KWC_PUBSUB__","window","addEventListener","_messageHandler","event","payload","senderId","_emitLocal","_postBroadcast","message","postMessage","error","console","_ensureFor","component","has","set","Map","add","get","subscribe","callback","TypeError","subsForComp","mapForEvent","subId","_unsubscribeById","subs","evMap","delete","size","_cleanup","unsubscribe","callbackOrId","id","cb","entries","publish","global","fromRemote","Array","from","comp","callbacks","values","err","warn","getSubscriptionStats","stats","totalComponents","events","eventMap","options","__core__","index"],"mappings":"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"}
|
|
@@ -1 +1,2 @@
|
|
|
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};
|
|
2
|
+
//# sourceMappingURL=index-D_DekteB.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-D_DekteB.esm.js","sources":["../../src/modules/platformResourceLoader/index.js"],"sourcesContent":["// 用于缓存已加载资源的URL,避免重复加载\nconst loadedResources = new Set();\n\n/**\n * 加载一个外部脚本资源\n * @param {element} elm - 需要将资源注入到该元素下,通常是 document.head\n * @param {string} url - 脚本的URL\n * @param {Function} callback - 加载成功或失败后的回调函数\n * @returns {Promise} - 返回一个Promise,便于异步处理\n */\nexport function loadScript(elm, url, callback) {\n // 参数校验\n if (!elm) {\n elm = document.head\n }\n if (!url || typeof url !== 'string') {\n throw new TypeError('Invalid script URL');\n }\n // 如果URL已经加载过,直接回调\n if (loadedResources.has(url)) {\n if (typeof callback === 'function') {\n callback(null, url);\n }\n return Promise.resolve(url);\n }\n\n return new Promise((resolve, reject) => {\n const script = document.createElement('script');\n script.src = url;\n script.type = 'text/javascript';\n script.async = true;\n\n script.onload = () => {\n loadedResources.add(url); // 添加到已加载缓存\n if (typeof callback === 'function') {\n callback(null, url);\n }\n resolve(url);\n };\n\n script.onerror = (error) => {\n if (typeof callback === 'function') {\n callback(error, url);\n }\n reject(error);\n };\n\n const target = elm.template || elm\n target.appendChild(script);\n });\n}\n\n/**\n * 加载一个外部CSS样式表资源\n * @param {element} elm - 需要将资源注入到该元素下,通常是 document.head\n * @param {string} url - 样式表的URL\n * @param {Function} callback - 加载成功或失败后的回调函数\n * @returns {Promise} - 返回一个Promise,便于异步处理\n */\nexport function loadStyle(elm, url, callback) {\n // 参数校验\n if (!elm) {\n elm = document.head\n }\n if (!url || typeof url !== 'string') {\n throw new TypeError('Invalid CSS URL');\n }\n if (loadedResources.has(url)) {\n if (typeof callback === 'function') {\n callback(null, url);\n }\n return Promise.resolve(url);\n }\n\n return new Promise((resolve, reject) => {\n const link = document.createElement('link');\n link.rel = 'stylesheet';\n link.type = 'text/css';\n link.href = url;\n\n link.onload = () => {\n loadedResources.add(url);\n if (typeof callback === 'function') {\n callback(null, url);\n }\n resolve(url);\n };\n\n link.onerror = (error) => {\n if (typeof callback === 'function') {\n callback(error, url);\n }\n reject(error);\n };\n\n const target = elm.template || elm\n target.appendChild(link);\n });\n}"],"names":["loadedResources","Set","loadScript","elm","url","callback","document","head","TypeError","has","Promise","resolve","reject","script","createElement","src","type","async","onload","add","onerror","error","template","appendChild","loadStyle","link","rel","href"],"mappings":"AACA,MAAMA,EAAkB,IAAIC,IASrB,SAASC,EAAWC,EAAKC,EAAKC,GAKnC,GAHKF,IACHA,EAAMG,SAASC,OAEZH,GAAsB,iBAARA,EACjB,MAAM,IAAII,UAAU,sBAGtB,OAAIR,EAAgBS,IAAIL,IACE,mBAAbC,GACTA,EAAS,KAAMD,GAEVM,QAAQC,QAAQP,IAGlB,IAAIM,QAAQ,CAACC,EAASC,KAC3B,MAAMC,EAASP,SAASQ,cAAc,UACtCD,EAAOE,IAAMX,EACbS,EAAOG,KAAO,kBACdH,EAAOI,OAAQ,EAEfJ,EAAOK,OAAS,KACdlB,EAAgBmB,IAAIf,GACI,mBAAbC,GACTA,EAAS,KAAMD,GAEjBO,EAAQP,IAGVS,EAAOO,QAAWC,IACQ,mBAAbhB,GACTA,EAASgB,EAAOjB,GAElBQ,EAAOS,KAGMlB,EAAImB,UAAYnB,GACxBoB,YAAYV,IAEvB,CASO,SAASW,EAAUrB,EAAKC,EAAKC,GAKlC,GAHKF,IACHA,EAAMG,SAASC,OAEZH,GAAsB,iBAARA,EACjB,MAAM,IAAII,UAAU,mBAEtB,OAAIR,EAAgBS,IAAIL,IACE,mBAAbC,GACTA,EAAS,KAAMD,GAEVM,QAAQC,QAAQP,IAGlB,IAAIM,QAAQ,CAACC,EAASC,KAC3B,MAAMa,EAAOnB,SAASQ,cAAc,QACpCW,EAAKC,IAAM,aACXD,EAAKT,KAAO,WACZS,EAAKE,KAAOvB,EAEZqB,EAAKP,OAAS,KACZlB,EAAgBmB,IAAIf,GACI,mBAAbC,GACTA,EAAS,KAAMD,GAEjBO,EAAQP,IAGVqB,EAAKL,QAAWC,IACU,mBAAbhB,GACTA,EAASgB,EAAOjB,GAElBQ,EAAOS,KAGMlB,EAAImB,UAAYnB,GACxBoB,YAAYE,IAEvB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";function s(){return`${Math.random().toString(36).slice(2)}${Date.now().toString(36)}`}const e=new class{constructor(){this.localSubs=new WeakMap,this.components=new Set,this.instanceId=s(),this.bc=null,this._listenBroadcast()}_listenBroadcast(){try{this.bc=new BroadcastChannel("__kdcloud_kwc_pubsub_channel__"),this.bc.onmessage=s=>this._onMessage(s.data)}catch{const s=s=>{const e=s.data;e?.__KDCLOUD_KWC_PUBSUB__&&this._onMessage(e)};window.addEventListener("message",s),this._messageHandler=s}}_onMessage(s={}){const{event:e,payload:t,senderId:n}=s;e&&n!==this.instanceId&&this._emitLocal(e,t,!0)}_postBroadcast(s,e){const t={event:s,payload:e,senderId:this.instanceId,__KDCLOUD_KWC_PUBSUB__:!0};try{this.bc?this.bc.postMessage(t):window.postMessage(t,"*")}catch(s){console.error("[my-pubsub] Broadcast failed:",s)}}_ensureFor(s){return this.localSubs.has(s)||(this.localSubs.set(s,new Map),this.components.add(s)),this.localSubs.get(s)}subscribe(e,t,n){if("object"!=typeof e||!e)throw new TypeError("[my-pubsub] subscribe: 第一个参数必须是有效的组件实例");if("string"!=typeof t)throw new TypeError("[my-pubsub] subscribe: event 必须是字符串");if("function"!=typeof n)throw new TypeError("[my-pubsub] subscribe: callback 必须是函数");const o=this._ensureFor(e);o.has(t)||o.set(t,new Map);const r=o.get(t),i=s();return r.set(i,n),()=>{this._unsubscribeById(e,t,i)}}_unsubscribeById(s,e,t){const n=this.localSubs.get(s);if(!n)return;const o=n.get(e);o&&(o.delete(t),0===o.size&&n.delete(e),0===n.size&&this._cleanup(s))}unsubscribe(s,e,t){if(!s||"object"!=typeof s)return;const n=this.localSubs.get(s);if(!n)return;if(!e)return void this._cleanup(s);const o=n.get(e);if(o){if(void 0===t)return n.delete(e),void(0===n.size&&this._cleanup(s));if("string"==typeof t)this._unsubscribeById(s,e,t);else if("function"==typeof t)for(const[n,r]of o.entries())if(r===t){this._unsubscribeById(s,e,n);break}}}publish(s,e,{global:t=!0}={}){if("string"!=typeof s)throw new TypeError("[my-pubsub] publish: event 必须是字符串");this._emitLocal(s,e,!1),t&&this._postBroadcast(s,e)}_emitLocal(s,e,t=!1){const n=Array.from(this.components);for(const o of n){const n=this.localSubs.get(o);if(!n){this.components.delete(o);continue}const r=n.get(s);if(!r)continue;const i=Array.from(r.values());for(const n of i)try{n(e,{fromRemote:t})}catch(e){console.error(`[my-pubsub] callback error in event "${s}":`,e)}}}_cleanup(s){try{this.localSubs.delete(s),this.components.delete(s)}catch(s){console.warn("[my-pubsub] cleanup failed:",s)}}getSubscriptionStats(){const s={totalComponents:this.components.size,events:new Map};for(const e of this.components){const t=this.localSubs.get(e);if(t)for(const[e,n]of t.entries())s.events.has(e)||s.events.set(e,0),s.events.set(e,s.events.get(e)+n.size)}return s}};function t(s,t,n){return e.subscribe(s,t,n)}function n(s,t,n){return e.publish(s,t,n)}function o(s,t,n){return e.unsubscribe(s,t,n)}const r=e;var i={subscribe:t,publish:n,unsubscribe:o},c=Object.freeze({__proto__:null,__core__:r,default:i,publish:n,subscribe:t,unsubscribe:o});exports.__core__=r,exports.index=c,exports.index$1=i,exports.publish=n,exports.subscribe=t,exports.unsubscribe=o;
|
|
2
|
+
//# sourceMappingURL=index-Dtu_3V-z.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-Dtu_3V-z.cjs.js","sources":["../../src/modules/messageService/index.js"],"sourcesContent":["const CHANNEL_KEY = '__kdcloud_kwc_pubsub_channel__';\n\n// 使用更高效的ID生成方法\nfunction genId() {\n return `${Math.random().toString(36).slice(2)}${Date.now().toString(36)}`;\n}\n\nclass PubSubCore {\n constructor() {\n this.localSubs = new WeakMap();\n this.components = new Set();\n this.instanceId = genId();\n this.bc = null;\n this._listenBroadcast();\n }\n\n _listenBroadcast() {\n try {\n // 优先使用 BroadcastChannel\n this.bc = new BroadcastChannel(CHANNEL_KEY);\n this.bc.onmessage = (ev) => this._onMessage(ev.data);\n } catch {\n // 降级方案\n const messageHandler = (ev) => {\n const d = ev.data;\n if (d?.__KDCLOUD_KWC_PUBSUB__) this._onMessage(d);\n };\n window.addEventListener('message', messageHandler);\n \n // 保存引用以便后续清理(如果需要)\n this._messageHandler = messageHandler;\n }\n }\n\n _onMessage(data = {}) {\n const { event, payload, senderId } = data;\n // 使用短路运算简化条件判断\n if (!event || senderId === this.instanceId) return;\n this._emitLocal(event, payload, true);\n }\n\n _postBroadcast(event, payload) {\n const message = { \n event, \n payload, \n senderId: this.instanceId,\n __KDCLOUD_KWC_PUBSUB__: true // 统一添加标识\n };\n \n try {\n if (this.bc) {\n this.bc.postMessage(message);\n } else {\n window.postMessage(message, '*');\n }\n } catch (error) {\n console.error('[my-pubsub] Broadcast failed:', error);\n }\n }\n\n _ensureFor(component) {\n if (!this.localSubs.has(component)) {\n this.localSubs.set(component, new Map());\n this.components.add(component);\n }\n return this.localSubs.get(component);\n }\n\n /**\n * 订阅事件\n * @param {Object} component - 组件实例\n * @param {string} event - 事件名称\n * @param {Function} callback - 回调函数\n * @returns {Function} 取消订阅函数\n */\n subscribe(component, event, callback) {\n // 参数校验\n if (typeof component !== 'object' || !component) {\n throw new TypeError('[my-pubsub] subscribe: 第一个参数必须是有效的组件实例');\n }\n if (typeof event !== 'string') {\n throw new TypeError('[my-pubsub] subscribe: event 必须是字符串');\n }\n if (typeof callback !== 'function') {\n throw new TypeError('[my-pubsub] subscribe: callback 必须是函数');\n }\n\n const subsForComp = this._ensureFor(component);\n if (!subsForComp.has(event)) {\n subsForComp.set(event, new Map());\n }\n\n const mapForEvent = subsForComp.get(event);\n const subId = genId();\n mapForEvent.set(subId, callback);\n\n // 返回取消订阅函数\n return () => {\n this._unsubscribeById(component, event, subId);\n };\n }\n\n /**\n * 内部方法:根据ID取消订阅\n */\n _unsubscribeById(component, event, subId) {\n const subs = this.localSubs.get(component);\n if (!subs) return;\n\n const evMap = subs.get(event);\n if (!evMap) return;\n\n evMap.delete(subId);\n \n // 清理空Map\n if (evMap.size === 0) {\n subs.delete(event);\n }\n if (subs.size === 0) {\n this._cleanup(component);\n }\n }\n\n /**\n * 取消订阅\n */\n unsubscribe(component, event, callbackOrId) {\n if (!component || typeof component !== 'object') return;\n \n const subs = this.localSubs.get(component);\n if (!subs) return;\n\n // 清理整个组件\n if (!event) {\n this._cleanup(component);\n return;\n }\n\n const evMap = subs.get(event);\n if (!evMap) return;\n\n // 未提供第三个参数:清理整个事件\n if (typeof callbackOrId === 'undefined') {\n subs.delete(event);\n if (subs.size === 0) this._cleanup(component);\n return;\n }\n\n // 根据类型处理\n if (typeof callbackOrId === 'string') {\n this._unsubscribeById(component, event, callbackOrId);\n } else if (typeof callbackOrId === 'function') {\n // 向后兼容:根据回调函数删除\n for (const [id, cb] of evMap.entries()) {\n if (cb === callbackOrId) {\n this._unsubscribeById(component, event, id);\n break; // 只删除第一个匹配的,避免误删\n }\n }\n }\n }\n\n publish(event, payload, { global = true } = {}) {\n if (typeof event !== 'string') {\n throw new TypeError('[my-pubsub] publish: event 必须是字符串');\n }\n \n // 先本地触发\n this._emitLocal(event, payload, false);\n \n // 再广播\n if (global) {\n this._postBroadcast(event, payload);\n }\n }\n\n _emitLocal(event, payload, fromRemote = false) {\n // 使用数组缓存避免在迭代过程中修改Set\n const components = Array.from(this.components);\n \n for (const comp of components) {\n const subsForComp = this.localSubs.get(comp);\n if (!subsForComp) {\n this.components.delete(comp);\n continue;\n }\n\n const evMap = subsForComp.get(event);\n if (!evMap) continue;\n\n // 使用数组缓存回调,避免在迭代过程中修改Map\n const callbacks = Array.from(evMap.values());\n \n for (const cb of callbacks) {\n try {\n cb(payload, { fromRemote });\n } catch (err) {\n console.error(`[my-pubsub] callback error in event \"${event}\":`, err);\n }\n }\n }\n }\n\n _cleanup(component) {\n try {\n this.localSubs.delete(component);\n this.components.delete(component);\n } catch (err) {\n console.warn('[my-pubsub] cleanup failed:', err);\n }\n }\n\n /**\n * 获取当前订阅状态(调试用)\n */\n getSubscriptionStats() {\n const stats = {\n totalComponents: this.components.size,\n events: new Map()\n };\n\n for (const comp of this.components) {\n const subs = this.localSubs.get(comp);\n if (subs) {\n for (const [event, eventMap] of subs.entries()) {\n if (!stats.events.has(event)) {\n stats.events.set(event, 0);\n }\n stats.events.set(event, stats.events.get(event) + eventMap.size);\n }\n }\n }\n\n return stats;\n }\n}\n\n// 单例模式\nconst core = new PubSubCore();\n\n/* 导出 API */\nexport function subscribe(component, event, callback) {\n return core.subscribe(component, event, callback);\n}\n\nexport function publish(event, payload, options) {\n return core.publish(event, payload, options);\n}\n\nexport function unsubscribe(component, event, callbackOrId) {\n return core.unsubscribe(component, event, callbackOrId);\n}\n\n// 导出核心实例用于调试\nexport const __core__ = core;\n\nexport default { subscribe, publish, unsubscribe };"],"names":["genId","Math","random","toString","slice","Date","now","core","constructor","this","localSubs","WeakMap","components","Set","instanceId","bc","_listenBroadcast","BroadcastChannel","onmessage","ev","_onMessage","data","messageHandler","d","__KDCLOUD_KWC_PUBSUB__","window","addEventListener","_messageHandler","event","payload","senderId","_emitLocal","_postBroadcast","message","postMessage","error","console","_ensureFor","component","has","set","Map","add","get","subscribe","callback","TypeError","subsForComp","mapForEvent","subId","_unsubscribeById","subs","evMap","delete","size","_cleanup","unsubscribe","callbackOrId","id","cb","entries","publish","global","fromRemote","Array","from","comp","callbacks","values","err","warn","getSubscriptionStats","stats","totalComponents","events","eventMap","options","__core__","index"],"mappings":"aAGA,SAASA,IACP,MAAO,GAAGC,KAAKC,SAASC,SAAS,IAAIC,MAAM,KAAKC,KAAKC,MAAMH,SAAS,KACtE,CAyOA,MAAMI,EAAO,IAvOb,MACE,WAAAC,GACEC,KAAKC,UAAY,IAAIC,QACrBF,KAAKG,WAAa,IAAIC,IACtBJ,KAAKK,WAAad,IAClBS,KAAKM,GAAK,KACVN,KAAKO,kBACP,CAEA,gBAAAA,GACE,IAEEP,KAAKM,GAAK,IAAIE,iBAnBA,kCAoBdR,KAAKM,GAAGG,UAAaC,GAAOV,KAAKW,WAAWD,EAAGE,KACjD,CAAE,MAEA,MAAMC,EAAkBH,IACtB,MAAMI,EAAIJ,EAAGE,KACTE,GAAGC,wBAAwBf,KAAKW,WAAWG,IAEjDE,OAAOC,iBAAiB,UAAWJ,GAGnCb,KAAKkB,gBAAkBL,CACzB,CACF,CAEA,UAAAF,CAAWC,EAAO,IAChB,MAAMO,MAAEA,EAAKC,QAAEA,EAAOC,SAAEA,GAAaT,EAEhCO,GAASE,IAAarB,KAAKK,YAChCL,KAAKsB,WAAWH,EAAOC,GAAS,EAClC,CAEA,cAAAG,CAAeJ,EAAOC,GACpB,MAAMI,EAAU,CACdL,QACAC,UACAC,SAAUrB,KAAKK,WACfU,wBAAwB,GAG1B,IACMf,KAAKM,GACPN,KAAKM,GAAGmB,YAAYD,GAEpBR,OAAOS,YAAYD,EAAS,IAEhC,CAAE,MAAOE,GACPC,QAAQD,MAAM,gCAAiCA,EACjD,CACF,CAEA,UAAAE,CAAWC,GAKT,OAJK7B,KAAKC,UAAU6B,IAAID,KACtB7B,KAAKC,UAAU8B,IAAIF,EAAW,IAAIG,KAClChC,KAAKG,WAAW8B,IAAIJ,IAEf7B,KAAKC,UAAUiC,IAAIL,EAC5B,CASA,SAAAM,CAAUN,EAAWV,EAAOiB,GAE1B,GAAyB,iBAAdP,IAA2BA,EACpC,MAAM,IAAIQ,UAAU,0CAEtB,GAAqB,iBAAVlB,EACT,MAAM,IAAIkB,UAAU,uCAEtB,GAAwB,mBAAbD,EACT,MAAM,IAAIC,UAAU,yCAGtB,MAAMC,EAActC,KAAK4B,WAAWC,GAC/BS,EAAYR,IAAIX,IACnBmB,EAAYP,IAAIZ,EAAO,IAAIa,KAG7B,MAAMO,EAAcD,EAAYJ,IAAIf,GAC9BqB,EAAQjD,IAId,OAHAgD,EAAYR,IAAIS,EAAOJ,GAGhB,KACLpC,KAAKyC,iBAAiBZ,EAAWV,EAAOqB,GAE5C,CAKA,gBAAAC,CAAiBZ,EAAWV,EAAOqB,GACjC,MAAME,EAAO1C,KAAKC,UAAUiC,IAAIL,GAChC,IAAKa,EAAM,OAEX,MAAMC,EAAQD,EAAKR,IAAIf,GAClBwB,IAELA,EAAMC,OAAOJ,GAGM,IAAfG,EAAME,MACRH,EAAKE,OAAOzB,GAEI,IAAduB,EAAKG,MACP7C,KAAK8C,SAASjB,GAElB,CAKA,WAAAkB,CAAYlB,EAAWV,EAAO6B,GAC5B,IAAKnB,GAAkC,iBAAdA,EAAwB,OAEjD,MAAMa,EAAO1C,KAAKC,UAAUiC,IAAIL,GAChC,IAAKa,EAAM,OAGX,IAAKvB,EAEH,YADAnB,KAAK8C,SAASjB,GAIhB,MAAMc,EAAQD,EAAKR,IAAIf,GACvB,GAAKwB,EAAL,CAGA,QAA4B,IAAjBK,EAGT,OAFAN,EAAKE,OAAOzB,QACM,IAAduB,EAAKG,MAAY7C,KAAK8C,SAASjB,IAKrC,GAA4B,iBAAjBmB,EACThD,KAAKyC,iBAAiBZ,EAAWV,EAAO6B,QACnC,GAA4B,mBAAjBA,EAEhB,IAAK,MAAOC,EAAIC,KAAOP,EAAMQ,UAC3B,GAAID,IAAOF,EAAc,CACvBhD,KAAKyC,iBAAiBZ,EAAWV,EAAO8B,GACxC,KACF,CAlBQ,CAqBd,CAEA,OAAAG,CAAQjC,EAAOC,GAASiC,OAAEA,GAAS,GAAS,IAC1C,GAAqB,iBAAVlC,EACT,MAAM,IAAIkB,UAAU,qCAItBrC,KAAKsB,WAAWH,EAAOC,GAAS,GAG5BiC,GACFrD,KAAKuB,eAAeJ,EAAOC,EAE/B,CAEA,UAAAE,CAAWH,EAAOC,EAASkC,GAAa,GAEtC,MAAMnD,EAAaoD,MAAMC,KAAKxD,KAAKG,YAEnC,IAAK,MAAMsD,KAAQtD,EAAY,CAC7B,MAAMmC,EAActC,KAAKC,UAAUiC,IAAIuB,GACvC,IAAKnB,EAAa,CAChBtC,KAAKG,WAAWyC,OAAOa,GACvB,QACF,CAEA,MAAMd,EAAQL,EAAYJ,IAAIf,GAC9B,IAAKwB,EAAO,SAGZ,MAAMe,EAAYH,MAAMC,KAAKb,EAAMgB,UAEnC,IAAK,MAAMT,KAAMQ,EACf,IACER,EAAG9B,EAAS,CAAEkC,cAChB,CAAE,MAAOM,GACPjC,QAAQD,MAAM,wCAAwCP,MAAWyC,EACnE,CAEJ,CACF,CAEA,QAAAd,CAASjB,GACP,IACE7B,KAAKC,UAAU2C,OAAOf,GACtB7B,KAAKG,WAAWyC,OAAOf,EACzB,CAAE,MAAO+B,GACPjC,QAAQkC,KAAK,8BAA+BD,EAC9C,CACF,CAKA,oBAAAE,GACE,MAAMC,EAAQ,CACZC,gBAAiBhE,KAAKG,WAAW0C,KACjCoB,OAAQ,IAAIjC,KAGd,IAAK,MAAMyB,KAAQzD,KAAKG,WAAY,CAClC,MAAMuC,EAAO1C,KAAKC,UAAUiC,IAAIuB,GAChC,GAAIf,EACF,IAAK,MAAOvB,EAAO+C,KAAaxB,EAAKS,UAC9BY,EAAME,OAAOnC,IAAIX,IACpB4C,EAAME,OAAOlC,IAAIZ,EAAO,GAE1B4C,EAAME,OAAOlC,IAAIZ,EAAO4C,EAAME,OAAO/B,IAAIf,GAAS+C,EAASrB,KAGjE,CAEA,OAAOkB,CACT,GAOK,SAAS5B,EAAUN,EAAWV,EAAOiB,GAC1C,OAAOtC,EAAKqC,UAAUN,EAAWV,EAAOiB,EAC1C,CAEO,SAASgB,EAAQjC,EAAOC,EAAS+C,GACtC,OAAOrE,EAAKsD,QAAQjC,EAAOC,EAAS+C,EACtC,CAEO,SAASpB,EAAYlB,EAAWV,EAAO6B,GAC5C,OAAOlD,EAAKiD,YAAYlB,EAAWV,EAAO6B,EAC5C,CAGY,MAACoB,EAAWtE,EAExB,IAAAuE,EAAe,CAAElC,YAAWiB,UAASL"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kdcloudjs/kwc-shared-utils",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.2",
|
|
4
4
|
"description": "shared-utils for kwc",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.cjs.js",
|
|
@@ -26,6 +26,7 @@
|
|
|
26
26
|
"@rollup/plugin-commonjs": "^28.0.6",
|
|
27
27
|
"@rollup/plugin-node-resolve": "^16.0.1",
|
|
28
28
|
"rollup": "^4.50.0",
|
|
29
|
+
"rollup-plugin-clear": "^2.0.7",
|
|
29
30
|
"rollup-plugin-terser": "^7.0.2"
|
|
30
31
|
}
|
|
31
32
|
}
|
package/dist/client/index.cjs.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
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;
|
package/dist/client/index.esm.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
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";
|
package/dist/index-BtNjXfsX.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
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};
|
package/dist/index-BvVdlixE.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
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};
|
package/dist/index-DSwttGxP.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
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;
|
package/dist/index-DYR8v7vJ.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
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;
|
|
@@ -1 +0,0 @@
|
|
|
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;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export{A as AuthManager,a as authManager,d as doFetch,b as initializeAuth,c as isAuthenticated}from"../index-BtNjXfsX.js";
|