@kdcloudjs/kwc-shared-utils 0.0.2 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api/index.cjs.js +2 -0
- package/dist/api/index.cjs.js.map +1 -0
- package/dist/api/index.esm.js +2 -0
- package/dist/api/index.esm.js.map +1 -0
- package/dist/client/index.cjs.js +2 -0
- package/dist/client/index.cjs.js.map +1 -0
- package/dist/client/index.esm.js +2 -0
- package/dist/client/index.esm.js.map +1 -0
- package/dist/index.cjs.js +1 -1
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.esm.js +1 -1
- package/dist/index.esm.js.map +1 -1
- package/dist/kingdeeDataService/index.cjs.js +2 -0
- package/dist/kingdeeDataService/index.cjs.js.map +1 -0
- package/dist/kingdeeDataService/index.esm.js +2 -0
- package/dist/kingdeeDataService/index.esm.js.map +1 -0
- package/dist/openApi/index.cjs.js +2 -0
- package/dist/openApi/index.cjs.js.map +1 -0
- package/dist/openApi/index.esm.js +2 -0
- package/dist/openApi/index.esm.js.map +1 -0
- package/dist/platformResourceLoader/index.cjs.js +1 -1
- package/dist/platformResourceLoader/index.esm.js +1 -1
- package/dist/sendBosPlatformEvent/index.cjs.js +2 -0
- package/dist/sendBosPlatformEvent/index.cjs.js.map +1 -0
- package/dist/sendBosPlatformEvent/index.esm.js +2 -0
- package/dist/sendBosPlatformEvent/index.esm.js.map +1 -0
- package/dist/shared/index-B0ILkJm3.cjs.js +2 -0
- package/dist/shared/index-B0ILkJm3.cjs.js.map +1 -0
- package/dist/shared/index-BvVdlixE.esm.js +2 -0
- package/dist/shared/index-BvVdlixE.esm.js.map +1 -0
- package/dist/shared/index-C0BYHh-4.cjs.js +2 -0
- package/dist/shared/index-C0BYHh-4.cjs.js.map +1 -0
- package/dist/shared/index-CGzlSIt0.cjs.js +2 -0
- package/dist/shared/index-CGzlSIt0.cjs.js.map +1 -0
- package/dist/shared/index-CXYAeW-7.esm.js +2 -0
- package/dist/shared/index-CXYAeW-7.esm.js.map +1 -0
- package/dist/shared/index-DF7VNMGI.esm.js +2 -0
- package/dist/shared/index-DF7VNMGI.esm.js.map +1 -0
- package/dist/shared/index-DSwttGxP.cjs.js +2 -0
- package/dist/shared/index-DSwttGxP.cjs.js.map +1 -0
- package/dist/shared/index-KT-nyvfl.esm.js +2 -0
- package/dist/shared/index-KT-nyvfl.esm.js.map +1 -0
- package/dist/shared/index-UhtWZvgp.cjs.js +2 -0
- package/dist/shared/index-UhtWZvgp.cjs.js.map +1 -0
- package/dist/shared/index-qaD2HVRQ.esm.js +2 -0
- package/dist/shared/index-qaD2HVRQ.esm.js.map +1 -0
- package/package.json +5 -3
- package/dist/shared/index-CKzrFqj6.cjs.js +0 -2
- package/dist/shared/index-CKzrFqj6.cjs.js.map +0 -1
- package/dist/shared/index-D_DekteB.esm.js +0 -2
- package/dist/shared/index-D_DekteB.esm.js.map +0 -1
|
@@ -0,0 +1,2 @@
|
|
|
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:s,method:a}=this.authConfig;try{const i=await fetch(t,{method:a,headers:e,body:JSON.stringify(s)});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(s=>{try{s(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;class s{constructor(t){this.name="BosWireAdapter",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("Bos 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 s=null;for(let a=0;a<this.maxRetries;a++)try{const s=await this.performRequest(t);return this.setCacheData(e,s),void this.dataCallback(s)}catch(t){s=t,a<this.maxRetries&&await this.delay(this.retryDelay*Math.pow(2,a))}this.dataCallback({data:null,error:{message:s.message,status:s.status||"NETWORK_ERROR",retries:this.maxRetries}})}async performRequest(t){const{endpoint:e,method:s="GET",params:a={},headers:i={}}=t;this.abortController&&this.abortController.abort(),this.abortController=new AbortController;let r=e;if("GET"===s&&a){r=`${r}?${new URLSearchParams(a).toString()}`}const n={method:s,headers:{"Content-Type":"application/json",access_token:this.authManager.getAccessToken(),...i},body:"GET"===s?null:JSON.stringify(a),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 h?{data:h,error:null}:{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&&(BosWireAdapter.prototype.maxRetries=t.maxRetries),void 0!==t.retryDelay&&(BosWireAdapter.prototype.retryDelay=t.retryDelay),void 0!==t.cacheTimeout&&(BosWireAdapter.prototype.cacheTimeout=t.cacheTimeout)}}function a(t="GET",e={}){return function(a){if("function"==typeof a){const r=new s(a),n=r.update.bind(r);return r.update=function(s){const a={endpoint:i(s,e),method:t,...e,...s};return delete a.endpointConfig,s&&"object"==typeof s&&!s.endpoint&&(a.params=s.params),n(a)},r}return async function(t,e,a){const r={endpoint:i(a,e),method:t,...e,...a};delete r.endpointConfig,a&&"object"==typeof a&&!a.endpoint&&(r.params=a.params);return new Promise((t,e)=>{const a=new s(s=>{s.error?e(s.error):t(s)});a.connect(),a.update(r)})}(t,e,a||{})}}function i(t,e){if(!t&&!e)throw new Error("No config provided");if(!t.endpointConfig&&!e.endpointConfig)throw new Error("No endpointConfig provided");let s=t.endpointConfig,a=e.endpointConfig;if("string"==typeof s)return s;if("string"==typeof a)return a;if(s&&s.endpoint)return s.endpoint;if(a&&a.endpoint)return a.endpoint;s=s||{},a=a||{};const i=s.isv||a.isv||"kd",r=s.app||a.app,n=s.source||a.source,o=s.version||a.version||"v1",h=s.sourceId||a.sourceId,c=s.subSource||a.subSource,u=s.action||a.action;if(!r)throw new Error("Invalid config app provided");if(!n)throw new Error("Invalid config source provided");let l=`${location.pathname}kwc/${o}/${i}/${r}/${n}`;return h&&(l+=`/${h}`,c&&(l+=`/${c}`),u&&(l+=`/${u}`)),l.startsWith("/")||(l=`/${l}`),l}const r=a("GET"),n=a("POST"),o=a("DELETE"),h=a("PUT"),c=a("PATCH");exports.AuthManager=t,exports.authManager=e,exports.doDelete=o,exports.doGet=r,exports.doPatch=c,exports.doPost=n,exports.doPut=h,exports.initializeAuth=async function(t){return await e.initialize(t)},exports.isAuthenticated=function(){return e.isAuthenticated()};
|
|
2
|
+
//# sourceMappingURL=index.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":["../../src/modules/api/authManager.js","../../src/modules/api/adapter.js","../../src/modules/api/factory.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}\n","import authManager from \"./authManager\";\n\nexport default class Adapter {\n constructor(dataCallback) {\n this.name = 'BosWireAdapter';\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('Bos 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) {\n return { data: data, error: null };\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 BosWireAdapter.prototype.maxRetries = options.maxRetries;\n }\n\n if (options.retryDelay !== undefined) {\n BosWireAdapter.prototype.retryDelay = options.retryDelay;\n }\n\n if (options.cacheTimeout !== undefined) {\n BosWireAdapter.prototype.cacheTimeout = options.cacheTimeout;\n }\n }\n}\n","import OpenApiWireAdapter from \"./adapter\";\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, defaultConfig),\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;\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, defaultConfig),\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;\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, defaultConfig) {\n if (!config && !defaultConfig) {\n throw new Error('No config provided');\n }\n\n if (!config.endpointConfig && !defaultConfig.endpointConfig) {\n throw new Error('No endpointConfig provided');\n }\n\n let endpointConfig = config.endpointConfig;\n let defaultEndpointConfig = defaultConfig.endpointConfig;\n if (typeof endpointConfig === 'string') return endpointConfig;\n if (typeof defaultEndpointConfig === 'string') return defaultEndpointConfig;\n\n if (endpointConfig && endpointConfig.endpoint) {\n return endpointConfig.endpoint;\n }\n\n if (defaultEndpointConfig && defaultEndpointConfig.endpoint) {\n return defaultEndpointConfig.endpoint;\n }\n\n endpointConfig = endpointConfig || {};\n defaultEndpointConfig = defaultEndpointConfig || {};\n\n const isv = endpointConfig.isv || defaultEndpointConfig.isv || 'kd';\n const app = endpointConfig.app || defaultEndpointConfig.app;\n const source = endpointConfig.source || defaultEndpointConfig.source;\n const version = endpointConfig.version || defaultEndpointConfig.version || 'v1';\n const sourceId = endpointConfig.sourceId || defaultEndpointConfig.sourceId;\n const subSource = endpointConfig.subSource || defaultEndpointConfig.subSource;\n const action = endpointConfig.action || defaultEndpointConfig.action;\n\n if (!app) {\n throw new Error('Invalid config app provided');\n }\n\n if (!source) {\n throw new Error('Invalid config source provided');\n }\n\n let result = `${location.pathname}kwc/${version}/${isv}/${app}/${source}`\n if (sourceId) {\n result += `/${sourceId}`\n\n if (subSource) {\n result += `/${subSource}`\n }\n\n if (action) {\n result += `/${action}`\n }\n }\n\n if (!result.startsWith('/')) {\n result = `/${result}`\n }\n\n return result\n}\n\n\nexport const doGet = createWireAdapter('GET')\nexport const doPost = createWireAdapter('POST')\nexport const doDelete = createWireAdapter('DELETE')\nexport const doPut = createWireAdapter('PUT')\nexport const doPatch = createWireAdapter('PATCH')\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","BosWireAdapter","prototype","createWireAdapter","defaultMethod","defaultConfig","configOrDataCallback","adapter","OpenApiWireAdapter","originalUpdate","bind","fullConfig","getEndpoint","endpointConfig","async","reject","createPromiseCall","defaultEndpointConfig","isv","app","source","version","sourceId","subSource","action","location","pathname","startsWith","doGet","doPost","doDelete","doPut","doPatch"],"mappings":"aAIA,MAAMA,EACJ,WAAAC,GACEC,KAAKC,YAAc,KACnBD,KAAKE,aAAe,KACpBF,KAAKG,eAAgB,EACrBH,KAAKI,kBAAmB,EACxBJ,KAAKK,YAAc,KACnBL,KAAKM,WAAa,KAClBN,KAAKO,UAAY,IAAIC,IAGrBR,KAAKS,uBACP,CAEA,gBAAMC,CAAWC,GACf,GAAIX,KAAKG,eAAiBH,KAAKC,YAC7B,OAAO,EAGTD,KAAKM,WAAa,CAChBM,SAAUD,EAAOC,UAAY,wBAC7BC,OAAQF,EAAOE,QAAU,OACzBC,QAASH,EAAOG,SAAW,CACzB,eAAgB,oBAElBC,KAAMJ,EAAOK,YAAc,CAAA,EAC3BC,OAAQN,EAAOO,aAAe,CAAA,GAGhC,UACQlB,KAAKmB,eACXnB,KAAKG,eAAgB,EACrBH,KAAKoB,gBAAgB,cAAe,CAAEC,SAAS,GACjD,CAAE,MAAOC,GAGP,MAFAC,QAAQD,MAAM,4CAA6CA,GAC3DtB,KAAKoB,gBAAgB,cAAe,CAAEC,SAAS,EAAOC,UAChDA,CACR,CACF,CAEA,kBAAMH,GACJ,GAAInB,KAAKI,kBAAoBJ,KAAKK,YAChC,OAAOL,KAAKK,YAGdL,KAAKI,kBAAmB,EACxBJ,KAAKK,YAAcL,KAAKwB,yBAExB,IACE,MAAMC,QAAezB,KAAKK,YAE1B,OADAL,KAAKoB,gBAAgB,gBAAiB,CAAEC,SAAS,IAC1CI,CACT,CAAE,MAAOH,GAEP,MADAtB,KAAKoB,gBAAgB,gBAAiB,CAAEC,SAAS,EAAOC,UAClDA,CACR,CAAC,QACCtB,KAAKI,kBAAmB,EACxBJ,KAAKK,YAAc,IACrB,CACF,CAEA,4BAAMmB,GACJ,IAAKxB,KAAKM,WACR,MAAM,IAAIoB,MAAM,4CAGlB,MAAMd,SAAEA,EAAQE,QAAEA,EAAOC,KAAEA,EAAIF,OAAEA,GAAWb,KAAKM,WACjD,IACE,MAAMqB,QAAiBC,MAAMhB,EAAU,CACrCC,SACAC,UACAC,KAAMc,KAAKC,UAAUf,KAGvB,IAAKY,EAASI,GACZ,MAAM,IAAIL,MAAM,0BAA0BC,EAASK,YAAYL,EAASM,cAG1E,MAAMC,QAAiBP,EAASQ,OAChC,IAAwB,IAApBD,EAASF,QAA0C,MAAvBE,EAASE,UAMvC,OALApC,KAAKC,YAAciC,EAASG,KAAKC,aACjCtC,KAAKE,aAAegC,EAASG,KAAKE,cAElCvC,KAAKwC,sBAEEN,EAET,MAAM,IAAIR,MAAM,0BAA0BQ,EAASE,eAAeF,EAASO,UAC7E,CAAE,MAAOnB,GAEP,MADAC,QAAQD,MAAM,uCAAwCA,GAChDA,CACR,CACF,CAEA,wBAAMoB,GAIJ,OAHAnB,QAAQoB,IAAI,2CACZ3C,KAAKM,WAAWS,KAAK6B,MAAQ5C,KAAK6C,gBAClC7C,KAAKM,WAAWS,KAAK+B,UAAY9C,KAAK+C,kBAC/B/C,KAAKwB,wBACd,CAGA,aAAAqB,GACE,MAAO,uCAAuCG,QAAQ,QAAS,SAAUC,GACvE,MAAMC,EAAoB,GAAhBC,KAAKC,SAAgB,EAE/B,OADe,KAALH,EAAWC,EAAS,EAAJA,EAAU,GAC3BG,SAAS,GACpB,EACF,CAGA,eAAAN,CAAgBO,EAAO,IAAIC,MAQzB,MAAO,GAPMD,EAAKE,iBACJC,OAAOH,EAAKI,WAAa,GAAGC,SAAS,EAAG,QAC1CF,OAAOH,EAAKM,WAAWD,SAAS,EAAG,QACjCF,OAAOH,EAAKO,YAAYF,SAAS,EAAG,QAClCF,OAAOH,EAAKQ,cAAcH,SAAS,EAAG,QACtCF,OAAOH,EAAKS,cAAcJ,SAAS,EAAG,MAGxD,CAEA,cAAAK,GACE,OAAOhE,KAAKC,WACd,CAEA,eAAAgE,GACE,QAASjE,KAAKC,WAChB,CAEA,OAAAiE,GACE,OAAOlE,KAAKG,eAAiBH,KAAKiE,iBACpC,CAEA,MAAAE,GACEnE,KAAKoE,cACLpE,KAAKG,eAAgB,EACrBH,KAAKM,WAAa,KAClBN,KAAKoB,gBAAgB,SAAU,GACjC,CAEA,WAAAgD,GACEpE,KAAKC,YAAc,KACnBD,KAAKE,aAAe,KACpBF,KAAKqE,wBACP,CAEA,qBAAA5D,GACE,IACET,KAAKC,YAAcqE,aAAaC,QAAQ,sCACxCvE,KAAKE,aAAeoE,aAAaC,QAAQ,sCAC3C,CAAE,MAAOjD,GACPC,QAAQiD,KAAK,iDACf,CACF,CAEA,mBAAAhC,GACE,IACMxC,KAAKC,aACPqE,aAAaG,QAAQ,qCAAsCzE,KAAKC,aAG9DD,KAAKE,cACPoE,aAAaG,QAAQ,sCAAuCzE,KAAKE,aAErE,CAAE,MAAOoB,GACPC,QAAQiD,KAAK,8CACf,CACF,CAEA,sBAAAH,GACE,IACEC,aAAaI,WAAW,sCACxBJ,aAAaI,WAAW,sCAC1B,CAAE,MAAOpD,GACPC,QAAQiD,KAAK,gDACf,CACF,CAEA,WAAAG,CAAYC,GACV5E,KAAKO,UAAUsE,IAAID,EACrB,CAEA,cAAAE,CAAeF,GACb5E,KAAKO,UAAUwE,OAAOH,EACxB,CAEA,eAAAxD,CAAgB4D,EAAO3C,GACrBrC,KAAKO,UAAU0E,QAASC,IACtB,IACEA,EAASF,EAAO3C,EAClB,CAAE,MAAOf,GACPC,QAAQD,MAAM,wCAChB,GAEJ,CAEA,iBAAM6D,GACJ,OAAKnF,KAAKiE,oBAINjE,KAAKI,kBAAoBJ,KAAKK,mBAC1BL,KAAKK,YACJL,KAAKiE,wBAFd,EAIF,EAGG,MAACmB,EAAc,IAAItF,ECnNT,MAAMuF,EACnB,WAAAtF,CAAYuF,GACVtF,KAAKuF,KAAO,iBAEZvF,KAAKsF,aAAeA,EACpBtF,KAAKW,OAAS,CAAA,EACdX,KAAKwF,gBAAkB,KAEvBxF,KAAKyF,WAAa,EAClBzF,KAAK0F,WAAa,EAClB1F,KAAK2F,WAAa,IAClB3F,KAAK4F,MAAQ,IAAIC,IACjB7F,KAAK8F,aAAe,IAEpB9F,KAAKoF,YAAcA,EAGnBpF,KAAK+F,gBAAkB,IAAIF,IAC3B7F,KAAKgG,aAAe,GACpBhG,KAAKiG,mBAAoB,CAC3B,CAGA,OAAAC,GAAW,CAGX,MAAAC,CAAOxF,GACLX,KAAKW,OAAS,IAAKA,GACnBX,KAAKyF,WAAa,EAEdzF,KAAKoG,gBAAgBzF,GACvBX,KAAKqG,mBAAmB1F,GAExBX,KAAKsF,aAAa,CAAEjD,KAAM,KAAMf,MAAO,MAE3C,CAGA,UAAAgF,GACMtG,KAAKwF,iBACPxF,KAAKwF,gBAAgBe,QAGvBvG,KAAK4F,MAAMY,QACXxG,KAAK+F,gBAAgBS,QACrBxG,KAAKgG,aAAe,GACpBhG,KAAKiG,mBAAoB,CAC3B,CAEA,iBAAMd,GACJ,IAIE,OAHKnF,KAAKoF,YAAYlB,iBACdlE,KAAKoF,YAAYD,eAElB,CACT,CAAE,MAAM7D,GACN,MAAMA,CACR,CACF,CAEA,cAAA0C,GACE,OAAOhE,KAAKoF,YAAYpB,gBAC1B,CAEA,eAAAC,GACE,OAAOjE,KAAKoF,YAAYnB,iBAC1B,CAEA,eAAAmC,CAAiBzF,GACf,OAAOA,GAAUA,EAAOC,eAAgC6F,IAApB9F,EAAOC,QAC7C,CAEA,wBAAMyF,CAAmB1F,GACvB,MAAM+F,EAAa1G,KAAK2G,mBAAmBhG,GAE3C,GAAIX,KAAK+F,gBAAgBa,IAAIF,GAC3BnF,QAAQoB,IAAI,0BADd,CAKA3C,KAAKgG,aAAaa,KAAK,CAAElG,SAAQ+F,aAAY9B,SAAU5E,KAAK4E,WAC5D5E,KAAK+F,gBAAgBe,IAAIJ,GAAY,GAErC,UACQ1G,KAAKoF,YAAYD,aACzB,CAAE,MAAO7D,GAWP,OAVAC,QAAQD,MAAM,mEACdtB,KAAKsF,aAAa,CAChBjD,KAAM,KACNf,MAAO,CACLmB,QAAS,gBAAgBnB,EAAMmB,UAC/BT,OAAQ,cACR+E,cAAezF,UAGnBtB,KAAK+F,gBAAgBhB,OAAO2B,EAE9B,CAEK1G,KAAKiG,mBACRjG,KAAKgH,qBAtBP,CAwBF,CAEA,yBAAMA,GAEJ,IADAhH,KAAKiG,mBAAoB,EAClBjG,KAAKgG,aAAaiB,OAAS,GAAG,CACnC,MAAMC,EAAUlH,KAAKgG,aAAamB,QAClC,UACQnH,KAAKoH,mBAAmBF,EAAQvG,OACxC,CAAE,MAAOW,GACPC,QAAQD,MAAM,uBAAwBA,EACxC,CAAC,QACCtB,KAAK+F,gBAAgBhB,OAAOmC,EAAQR,WACtC,OAGM1G,KAAKqH,MAAM,GACnB,CACArH,KAAKiG,mBAAoB,CAC3B,CAEA,wBAAMmB,CAAmBzG,GACvB,MAAM2G,EAAWtH,KAAKuH,iBAAiB5G,GAGvC,GADmBX,KAAKwH,cAAcF,GAGpC,YADAtH,KAAKsF,aAAamC,WAIpB,IAAIC,EAAY,KAChB,IAAK,IAAIC,EAAU,EAAGA,EAAU3H,KAAK0F,WAAYiC,IAC/C,IACE,MAAMlG,QAAezB,KAAK4H,eAAejH,GAIzC,OAFAX,KAAK6H,aAAaP,EAAU7F,QAC5BzB,KAAKsF,aAAa7D,EAEpB,CAAE,MAAOH,GACPoG,EAAYpG,EAERqG,EAAU3H,KAAK0F,kBACX1F,KAAKqH,MAAMrH,KAAK2F,WAAaxC,KAAK2E,IAAI,EAAGH,GAEnD,CAGF3H,KAAKsF,aAAa,CAChBjD,KAAM,KACNf,MAAO,CACLmB,QAASiF,EAAUjF,QACnBT,OAAQ0F,EAAU1F,QAAU,gBAC5B+F,QAAS/H,KAAK0F,aAGpB,CAEA,oBAAMkC,CAAejH,GACnB,MAAMC,SAAEA,EAAQC,OAAEA,EAAS,MAAKI,OAAEA,EAAS,GAAEH,QAAEA,EAAU,CAAA,GAAOH,EAE5DX,KAAKwF,iBACPxF,KAAKwF,gBAAgBe,QAGvBvG,KAAKwF,gBAAkB,IAAIwC,gBAE3B,IAAIC,EAAMrH,EACV,GAAe,QAAXC,GAAoBI,EAAQ,CAE9BgH,EAAM,GAAGA,KADY,IAAIC,gBAAgBjH,GACZoC,YAC/B,CAEA,MAAM8E,EAAiB,CACrBtH,SACAC,QAAS,CACP,eAAgB,mBAChBwB,aAAgBtC,KAAKoF,YAAYpB,oBAC9BlD,GAELC,KAAiB,QAAXF,EAAmB,KAAOgB,KAAKC,UAAUb,GAC/CmH,OAAQpI,KAAKwF,gBAAgB4C,QAGzBzG,QAAiBC,MAAMqG,EAAKE,GAClC,IAAKxG,EAASI,GACZ,MAAM,IAAIL,MAAM,uBAAuBC,EAASK,YAAYL,EAASM,cAGvE,MAAMI,QAAaV,EAASQ,OAC5B,OAAIE,EACK,CAAEA,KAAMA,EAAMf,MAAO,MAGvB,CACLe,KAAM,KACNf,MAAO,CACLmB,QAASJ,EAAKI,QACdL,UAAWC,EAAKD,UAChBJ,OAAQK,EAAKL,QAGnB,CAEA,aAAAwF,CAAcF,GACZ,MAAMe,EAASrI,KAAK4F,MAAM0C,IAAIhB,GAC9B,OAAIe,GAAU9E,KAAKgF,MAAQF,EAAOvF,UAAY9C,KAAK8F,aAC1CuC,EAAOhG,MAGZgG,GACFrI,KAAK4F,MAAMb,OAAOuC,GAEb,KACT,CAEA,YAAAO,CAAaP,EAAUjF,GAMrB,GALArC,KAAK4F,MAAMkB,IAAIQ,EAAU,CACvBjF,OACAS,UAAWS,KAAKgF,QAGdvI,KAAK4F,MAAM4C,KAAO,IAAK,CACzB,MAAMC,EAAWzI,KAAK4F,MAAM8C,OAAOC,OAAOC,MAC1C5I,KAAK4F,MAAMb,OAAO0D,EACpB,CACF,CAEA,gBAAAlB,CAAiB5G,GACf,OAAOkB,KAAKC,UAAU,CACpBlB,SAAUD,EAAOC,SACjBK,OAAQN,EAAOM,OACfJ,OAAQF,EAAOE,QAAU,OAE7B,CAEA,kBAAA8F,CAAmBhG,GACjB,OAAOX,KAAKuH,iBAAiB5G,EAC/B,CAEA,KAAA0G,CAAMwB,GACJ,OAAO,IAAIC,QAAQC,GAAWC,WAAWD,EAASF,GACpD,CAEA,oBAAOI,GACLjJ,KAAK4F,MAAQ,IAAIC,GACnB,CAEA,gBAAOqD,CAAUC,QACY1C,IAAvB0C,EAAQzD,aACV0D,eAAeC,UAAU3D,WAAayD,EAAQzD,iBAGrBe,IAAvB0C,EAAQxD,aACVyD,eAAeC,UAAU1D,WAAawD,EAAQxD,iBAGnBc,IAAzB0C,EAAQrD,eACVsD,eAAeC,UAAUvD,aAAeqD,EAAQrD,aAEpD,ECpQF,SAASwD,EAAkBC,EAAgB,MAAOC,EAAgB,CAAA,GA4BhE,OA3BA,SAA6BC,GAC3B,GAAoC,mBAAzBA,EAAqC,CAC9C,MAAMC,EAAU,IAAIC,EAAmBF,GAEjCG,EAAiBF,EAAQvD,OAAO0D,KAAKH,GAgB3C,OAfAA,EAAQvD,OAAS,SAAUxF,GACzB,MAAMmJ,EAAa,CACjBlJ,SAAUmJ,EAAYpJ,EAAQ6I,GAC9B3I,OAAQ0I,KACLC,KACA7I,GAQL,cANOmJ,EAAWE,eAEdrJ,GAA4B,iBAAXA,IAAwBA,EAAOC,WAClDkJ,EAAW7I,OAASN,EAAOM,QAGtB2I,EAAeE,EACxB,EACOJ,CACT,CAEE,OAQNO,eAAiCV,EAAeC,EAAe7I,GAK7D,MAAMmJ,EAAa,CACjBlJ,SAAUmJ,EAAYpJ,EAAQ6I,GAC9B3I,OAAQ0I,KACLC,KACA7I,UAEEmJ,EAAWE,eAGdrJ,GAA4B,iBAAXA,IAAwBA,EAAOC,WAClDkJ,EAAW7I,OAASN,EAAOM,QAG7B,OAAO,IAAI6H,QAAQ,CAACC,EAASmB,KAC3B,MAAMR,EAAU,IAAIC,EAAoBlI,IAClCA,EAAOH,MACT4I,EAAOzI,EAAOH,OAEdyH,EAAQtH,KAKZiI,EAAQxD,UACRwD,EAAQvD,OAAO2D,IAEnB,CAvCaK,CAAkBZ,EAAeC,EADzBC,GAAwB,CAAA,EAI3C,CAEF,CAoCA,SAASM,EAAYpJ,EAAQ6I,GAC3B,IAAK7I,IAAW6I,EACd,MAAM,IAAI9H,MAAM,sBAGlB,IAAKf,EAAOqJ,iBAAmBR,EAAcQ,eAC3C,MAAM,IAAItI,MAAM,8BAGlB,IAAIsI,EAAiBrJ,EAAOqJ,eACxBI,EAAwBZ,EAAcQ,eAC1C,GAA8B,iBAAnBA,EAA6B,OAAOA,EAC/C,GAAqC,iBAA1BI,EAAoC,OAAOA,EAEtD,GAAIJ,GAAkBA,EAAepJ,SACnC,OAAOoJ,EAAepJ,SAGxB,GAAIwJ,GAAyBA,EAAsBxJ,SACjD,OAAOwJ,EAAsBxJ,SAG/BoJ,EAAiBA,GAAkB,CAAA,EACnCI,EAAwBA,GAAyB,CAAA,EAEjD,MAAMC,EAAML,EAAeK,KAAOD,EAAsBC,KAAO,KACzDC,EAAMN,EAAeM,KAAOF,EAAsBE,IAClDC,EAASP,EAAeO,QAAUH,EAAsBG,OACxDC,EAAUR,EAAeQ,SAAWJ,EAAsBI,SAAW,KACrEC,EAAWT,EAAeS,UAAYL,EAAsBK,SAC5DC,EAAYV,EAAeU,WAAaN,EAAsBM,UAC9DC,EAASX,EAAeW,QAAUP,EAAsBO,OAE9D,IAAKL,EACH,MAAM,IAAI5I,MAAM,+BAGlB,IAAK6I,EACH,MAAM,IAAI7I,MAAM,kCAGlB,IAAID,EAAS,GAAGmJ,SAASC,eAAeL,KAAWH,KAAOC,KAAOC,IAiBjE,OAhBIE,IACFhJ,GAAU,IAAIgJ,IAEVC,IACFjJ,GAAU,IAAIiJ,KAGZC,IACFlJ,GAAU,IAAIkJ,MAIblJ,EAAOqJ,WAAW,OACrBrJ,EAAS,IAAIA,KAGRA,CACT,CAGY,MAACsJ,EAAQzB,EAAkB,OAC1B0B,EAAS1B,EAAkB,QAC3B2B,EAAW3B,EAAkB,UAC7B4B,EAAQ5B,EAAkB,OAC1B6B,EAAU7B,EAAkB,kKFqFlCW,eAA8BtJ,GACnC,aAAayE,EAAY1E,WAAWC,EACtC,0BAEO,WACL,OAAOyE,EAAYnB,iBACrB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
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:s,method:a}=this.authConfig;try{const i=await fetch(t,{method:a,headers:e,body:JSON.stringify(s)});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(s=>{try{s(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 s(t){return await e.initialize(t)}function a(){return e.isAuthenticated()}class i{constructor(t){this.name="BosWireAdapter",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("Bos 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 s=null;for(let a=0;a<this.maxRetries;a++)try{const s=await this.performRequest(t);return this.setCacheData(e,s),void this.dataCallback(s)}catch(t){s=t,a<this.maxRetries&&await this.delay(this.retryDelay*Math.pow(2,a))}this.dataCallback({data:null,error:{message:s.message,status:s.status||"NETWORK_ERROR",retries:this.maxRetries}})}async performRequest(t){const{endpoint:e,method:s="GET",params:a={},headers:i={}}=t;this.abortController&&this.abortController.abort(),this.abortController=new AbortController;let r=e;if("GET"===s&&a){r=`${r}?${new URLSearchParams(a).toString()}`}const n={method:s,headers:{"Content-Type":"application/json",access_token:this.authManager.getAccessToken(),...i},body:"GET"===s?null:JSON.stringify(a),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 h?{data:h,error:null}:{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&&(BosWireAdapter.prototype.maxRetries=t.maxRetries),void 0!==t.retryDelay&&(BosWireAdapter.prototype.retryDelay=t.retryDelay),void 0!==t.cacheTimeout&&(BosWireAdapter.prototype.cacheTimeout=t.cacheTimeout)}}function r(t="GET",e={}){return function(s){if("function"==typeof s){const a=new i(s),r=a.update.bind(a);return a.update=function(s){const a={endpoint:n(s,e),method:t,...e,...s};return delete a.endpointConfig,s&&"object"==typeof s&&!s.endpoint&&(a.params=s.params),r(a)},a}return async function(t,e,s){const a={endpoint:n(s,e),method:t,...e,...s};delete a.endpointConfig,s&&"object"==typeof s&&!s.endpoint&&(a.params=s.params);return new Promise((t,e)=>{const s=new i(s=>{s.error?e(s.error):t(s)});s.connect(),s.update(a)})}(t,e,s||{})}}function n(t,e){if(!t&&!e)throw new Error("No config provided");if(!t.endpointConfig&&!e.endpointConfig)throw new Error("No endpointConfig provided");let s=t.endpointConfig,a=e.endpointConfig;if("string"==typeof s)return s;if("string"==typeof a)return a;if(s&&s.endpoint)return s.endpoint;if(a&&a.endpoint)return a.endpoint;s=s||{},a=a||{};const i=s.isv||a.isv||"kd",r=s.app||a.app,n=s.source||a.source,o=s.version||a.version||"v1",h=s.sourceId||a.sourceId,c=s.subSource||a.subSource,u=s.action||a.action;if(!r)throw new Error("Invalid config app provided");if(!n)throw new Error("Invalid config source provided");let l=`${location.pathname}kwc/${o}/${i}/${r}/${n}`;return h&&(l+=`/${h}`,c&&(l+=`/${c}`),u&&(l+=`/${u}`)),l.startsWith("/")||(l=`/${l}`),l}const o=r("GET"),h=r("POST"),c=r("DELETE"),u=r("PUT"),l=r("PATCH");export{t as AuthManager,e as authManager,c as doDelete,o as doGet,l as doPatch,h as doPost,u as doPut,s as initializeAuth,a as isAuthenticated};
|
|
2
|
+
//# sourceMappingURL=index.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../../src/modules/api/authManager.js","../../src/modules/api/adapter.js","../../src/modules/api/factory.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}\n","import authManager from \"./authManager\";\n\nexport default class Adapter {\n constructor(dataCallback) {\n this.name = 'BosWireAdapter';\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('Bos 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) {\n return { data: data, error: null };\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 BosWireAdapter.prototype.maxRetries = options.maxRetries;\n }\n\n if (options.retryDelay !== undefined) {\n BosWireAdapter.prototype.retryDelay = options.retryDelay;\n }\n\n if (options.cacheTimeout !== undefined) {\n BosWireAdapter.prototype.cacheTimeout = options.cacheTimeout;\n }\n }\n}\n","import OpenApiWireAdapter from \"./adapter\";\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, defaultConfig),\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;\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, defaultConfig),\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;\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, defaultConfig) {\n if (!config && !defaultConfig) {\n throw new Error('No config provided');\n }\n\n if (!config.endpointConfig && !defaultConfig.endpointConfig) {\n throw new Error('No endpointConfig provided');\n }\n\n let endpointConfig = config.endpointConfig;\n let defaultEndpointConfig = defaultConfig.endpointConfig;\n if (typeof endpointConfig === 'string') return endpointConfig;\n if (typeof defaultEndpointConfig === 'string') return defaultEndpointConfig;\n\n if (endpointConfig && endpointConfig.endpoint) {\n return endpointConfig.endpoint;\n }\n\n if (defaultEndpointConfig && defaultEndpointConfig.endpoint) {\n return defaultEndpointConfig.endpoint;\n }\n\n endpointConfig = endpointConfig || {};\n defaultEndpointConfig = defaultEndpointConfig || {};\n\n const isv = endpointConfig.isv || defaultEndpointConfig.isv || 'kd';\n const app = endpointConfig.app || defaultEndpointConfig.app;\n const source = endpointConfig.source || defaultEndpointConfig.source;\n const version = endpointConfig.version || defaultEndpointConfig.version || 'v1';\n const sourceId = endpointConfig.sourceId || defaultEndpointConfig.sourceId;\n const subSource = endpointConfig.subSource || defaultEndpointConfig.subSource;\n const action = endpointConfig.action || defaultEndpointConfig.action;\n\n if (!app) {\n throw new Error('Invalid config app provided');\n }\n\n if (!source) {\n throw new Error('Invalid config source provided');\n }\n\n let result = `${location.pathname}kwc/${version}/${isv}/${app}/${source}`\n if (sourceId) {\n result += `/${sourceId}`\n\n if (subSource) {\n result += `/${subSource}`\n }\n\n if (action) {\n result += `/${action}`\n }\n }\n\n if (!result.startsWith('/')) {\n result = `/${result}`\n }\n\n return result\n}\n\n\nexport const doGet = createWireAdapter('GET')\nexport const doPost = createWireAdapter('POST')\nexport const doDelete = createWireAdapter('DELETE')\nexport const doPut = createWireAdapter('PUT')\nexport const doPatch = createWireAdapter('PATCH')\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","async","initializeAuth","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","BosWireAdapter","prototype","createWireAdapter","defaultMethod","defaultConfig","configOrDataCallback","adapter","OpenApiWireAdapter","originalUpdate","bind","fullConfig","getEndpoint","endpointConfig","reject","createPromiseCall","defaultEndpointConfig","isv","app","source","version","sourceId","subSource","action","location","pathname","startsWith","doGet","doPost","doDelete","doPut","doPatch"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var s=require("../shared/index-DSwttGxP.cjs.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;
|
|
2
|
+
//# sourceMappingURL=index.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
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"../shared/index-BvVdlixE.esm.js";
|
|
2
|
+
//# sourceMappingURL=index.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
package/dist/index.cjs.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
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;
|
|
1
|
+
"use strict";var e=require("./shared/index-C0BYHh-4.cjs.js"),r=require("./shared/index-B0ILkJm3.cjs.js"),s=require("./shared/index-DSwttGxP.cjs.js"),i=require("./shared/index-Dtu_3V-z.cjs.js"),d=require("./shared/index-UhtWZvgp.cjs.js"),x=require("./shared/index-CGzlSIt0.cjs.js");exports.platformResourceLoader=e.index,exports.openApiAdapter=r.index,exports.client=s.index,exports.messageService=i.index,exports.kingdeeDataService=d.index,exports.sendBosPlatformEvent=x.index;
|
|
2
2
|
//# sourceMappingURL=index.cjs.js.map
|
package/dist/index.cjs.js.map
CHANGED
|
@@ -1 +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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"}
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
package/dist/index.esm.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
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};
|
|
1
|
+
export{i as platformResourceLoader}from"./shared/index-DF7VNMGI.esm.js";export{i as openApiAdapter}from"./shared/index-CXYAeW-7.esm.js";export{i as client}from"./shared/index-BvVdlixE.esm.js";export{i as messageService}from"./shared/index-ChQWdmu9.esm.js";export{i as kingdeeDataService}from"./shared/index-KT-nyvfl.esm.js";export{i as sendBosPlatformEvent}from"./shared/index-qaD2HVRQ.esm.js";
|
|
2
2
|
//# sourceMappingURL=index.esm.js.map
|
package/dist/index.esm.js.map
CHANGED
|
@@ -1 +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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"}
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";require("../shared/index-Dtu_3V-z.cjs.js");var e=require("../shared/index-UhtWZvgp.cjs.js");exports.fetchDataWithCache=e.fetchDataWithCache,exports.invalidateCache=e.invalidateCache,exports.subscribe=e.subscribe,exports.updateCache=e.updateCache;
|
|
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":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var t=require("../shared/index-B0ILkJm3.cjs.js");exports.AuthManager=t.AuthManager,exports.authManager=t.authManager,exports.doFetch=t.doFetch,exports.initializeAuth=t.initializeAuth,exports.isAuthenticated=t.isAuthenticated;
|
|
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,2 +1,2 @@
|
|
|
1
|
-
"use strict";var e=require("../shared/index-
|
|
1
|
+
"use strict";var e=require("../shared/index-C0BYHh-4.cjs.js");exports.loadScript=e.loadScript,exports.loadStyle=e.loadStyle;
|
|
2
2
|
//# sourceMappingURL=index.cjs.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export{l as loadScript,a as loadStyle}from"../shared/index-
|
|
1
|
+
export{l as loadScript,a as loadStyle}from"../shared/index-DF7VNMGI.esm.js";
|
|
2
2
|
//# sourceMappingURL=index.esm.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":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
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}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:i,method:s}=this.authConfig;try{const a=await fetch(t,{method:s,headers:e,body:JSON.stringify(i)});if(!a.ok)throw new Error(`Authentication failed: ${a.status} - ${a.statusText}`);const r=await a.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(){}saveTokensToStorage(){}clearTokensFromStorage(){}addListener(t){this.listeners.add(t)}removeListener(t){this.listeners.delete(t)}notifyListeners(t,e){this.listeners.forEach(i=>{try{i(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 i(t){return await e.initialize(t)}function s(){return e.isAuthenticated()}class a{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 i=null;for(let s=0;s<this.maxRetries;s++)try{const i=await this.performRequest(t);return this.setCacheData(e,i),void this.dataCallback(i)}catch(t){i=t,s<this.maxRetries&&await this.delay(this.retryDelay*Math.pow(2,s))}this.dataCallback({data:null,error:{message:i.message,status:i.status||"NETWORK_ERROR",retries:this.maxRetries}})}async performRequest(t){const{endpoint:e,method:i="GET",params:s={},headers:a={}}=t;this.abortController&&this.abortController.abort(),this.abortController=new AbortController;let r=e;if("GET"===i&&s){r=`${r}?${new URLSearchParams(s).toString()}`}const n={method:i,headers:{"Content-Type":"application/json",access_token:this.authManager.getAccessToken(),...a},body:"GET"===i?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",i={}){return function(s){if("function"==typeof s){const e=new a(s),n=e.update.bind(e);return e.update=function(e){const s={endpoint:r(e),method:t,...i,...e};return delete s.endpointConfig,e&&"object"==typeof e&&!e.endpoint&&(s.params=e.params||e),n(s)},e}return async function(t,i,s){await e.waitForAuth();const n={endpoint:r(s),method:t,...i,...s};delete n.endpointConfig,s&&"object"==typeof s&&!s.endpoint&&(n.params=s.params||s);return new Promise((t,e)=>{const i=new a(i=>{i.error?e(i.error):t(i)});i.connect(),i.update(n)})}(t,i,s||{})}}("POST");var o=Object.freeze({__proto__:null,AuthManager:t,authManager:e,doFetch:n,initializeAuth:i,isAuthenticated:s});exports.AuthManager=t,exports.authManager=e,exports.doFetch=n,exports.index=o,exports.initializeAuth=i,exports.isAuthenticated=s;
|
|
2
|
+
//# sourceMappingURL=index-B0ILkJm3.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-B0ILkJm3.cjs.js","sources":["../../src/modules/openApi/authManager.js","../../src/modules/openApi/adapter.js","../../src/modules/openApi/factory.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\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 // memory-only: no persistent storage to load from\n return;\n }\n\n saveTokensToStorage() {\n // memory-only: do not persist tokens\n return;\n }\n\n clearTokensFromStorage() {\n // memory-only: nothing to clear from persistent storage\n return;\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}\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')\n"],"names":["AuthManager","constructor","this","accessToken","refreshToken","isInitialized","isAuthenticating","authPromise","authConfig","listeners","Set","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","loadTokensFromStorage","addListener","callback","add","removeListener","delete","event","forEach","listener","waitForAuth","authManager","async","initializeAuth","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","reject","createPromiseCall","createWireAdapter"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
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};
|
|
2
|
+
//# sourceMappingURL=index-BvVdlixE.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-BvVdlixE.esm.js","sources":["../../src/modules/client/app.js","../../src/modules/client/browser.js","../../src/modules/client/device.js"],"sourcesContent":["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;\n","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;\n","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":["App","isYzj","agent","navigator","userAgent","test","isYzjDesktop","isYzjOldDesktop","isWX","indexOf","isWxWork","isDD","_isDD","isDDMiniProgram","isWeLink","isFeiShu","getApp","isChrome","toLowerCase","isChromiumEdge","isLegacyEdge","isEdge","isFirefox","isIE","isSafari","Browser","getBrowser","isMobile","isTouchDevice","window","maxTouchPoints","msMaxTouchPoints","innerWidth","isPC"],"mappings":"AAAA,MAAMA,EACC,YADDA,EAEQ,oBAFRA,EAGW,wBAHXA,EAIA,SAJAA,EAKA,WALAA,EAMI,SANJA,EAOI,SAPJA,EAQI,SARJA,EASK,UAGJ,SAASC,IACd,MAAMC,EAAQC,UAAUC,UACxB,MAAO,+CAA+CC,KAAKH,EAC7D,CAEO,SAASI,IACd,MAAMJ,EAAQC,UAAUC,UACxB,MAAO,gBAAgBC,KAAKH,EAC9B,CAEO,SAASK,IACd,MAAML,EAAQC,UAAUC,UACxB,MAAO,iBAAiBC,KAAKH,EAC/B,CAEO,SAASM,IACd,MAAMN,EAAQC,UAAUC,UACxB,OAAOF,EAAMO,QAAQ,mBAAoB,GAAMP,EAAMO,QAAQ,UAAY,CAC3E,CAEO,SAASC,IACd,MAAMR,EAAQC,UAAUC,UACxB,OAAOF,EAAMO,QAAQ,mBAAoB,GAAMP,EAAMO,QAAQ,WAAY,CAC3E,CAEO,SAASE,IACd,MAAMT,EAAQC,UAAUC,UAClBQ,EAAQV,EAAMO,QAAQ,aAAc,EACpCI,GAAmD,IAAjCX,EAAMO,QAAQ,iBAAqD,IAA5BP,EAAMO,QAAQ,UAC7E,OAAOG,GAASC,CAClB,CAEO,SAASC,IACd,MAAMZ,EAAQC,UAAUC,UACxB,OAAOF,EAAMO,QAAQ,WAAY,GAAMP,EAAMO,QAAQ,cAAe,CACtE,CAEO,SAASM,IAEd,OADcZ,UAAUC,UACXK,QAAQ,UAAW,CAClC,CAEO,SAASO,IACd,OAAIf,IAAgBD,EACXM,IAAuBN,EACvBO,IAA0BP,EAC1BQ,IAAeR,EACfU,IAAmBV,EACnBW,IAAeX,EACfc,EAAiBd,EACjBe,IAAmBf,EAChBA,CACd,CChEO,SAASiB,IACd,MAAMb,EAAYD,UAAUC,UAAUc,cACtC,MAAO,eAAeb,KAAKD,KAAe,0CAA0CC,KAAKD,EAC3F,CAEO,SAASe,IACd,MAAMf,EAAYD,UAAUC,UAAUc,cACtC,MAAO,MAAMb,KAAKD,EACpB,CAEO,SAASgB,IACd,MAAMhB,EAAYD,UAAUC,UAAUc,cACtC,MAAO,OAAOb,KAAKD,KAAe,MAAMC,KAAKD,EAC/C,CAEO,SAASiB,IACd,OAAOF,KAAoBC,GAC7B,CAEO,SAASE,IACd,MAAMlB,EAAYD,UAAUC,UAAUc,cACtC,MAAO,gBAAgBb,KAAKD,EAC9B,CAEO,SAASmB,IACd,MAAMnB,EAAYD,UAAUC,UAAUc,cACtC,MAAO,eAAeb,KAAKD,EAC7B,CAEO,SAASoB,IACd,MAAMpB,EAAYD,UAAUC,UAAUc,cACtC,MAAO,SAASb,KAAKD,KAAe,wCAAwCC,KAAKD,EACnF,CAEA,MAAMqB,EACI,SADJA,EAEE,OAFFA,EAGK,UAHLA,EAIA,KAJAA,EAKI,SALJA,EAMK,UAGJ,SAASC,IACd,OAAIT,IAAmBQ,EACdJ,IAAiBI,EACjBH,IAAoBG,EACpBD,IAAmBC,EACnBF,IAAeE,EACZA,CACd,CClDO,SAASE,IACd,MAAMzB,EAAQC,UAAUC,UAAUc,cAC5BU,EAAgB,iBAAkBC,QAAU1B,UAAU2B,eAAiB,GAAK3B,UAAU4B,iBAAmB,EAE/G,MAAQ,iEAAiE1B,KAAKH,IAAY0B,GAAiBC,OAAOG,YAD3F,IAEzB,CAEO,SAASC,IACd,OAAQN,GACV"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";const e=new Set,r=new Map,t=new WeakMap,n=document.createElement("a");function o(e){if(!e)return"";try{return new URL(e,window.location.href).href}catch{return n.href=e,n.href||String(e)}}function c(e){try{if(e&&e.template&&"function"==typeof e.template.appendChild)return e.template;if(e&&"function"==typeof e.appendChild)return e}catch{}return document.head}function i(e,r,t){if("function"==typeof e)try{e(r,t)}catch(e){console.error("[loadResource] callback error:",e)}}function s(n,s,l,a={}){if(n||(n=document.head),!s||"string"!=typeof s)throw new TypeError("Invalid script URL");const u="number"==typeof a.timeout?a.timeout:2e4,f=o(s);if(e.has(f))return i(l,null,f),Promise.resolve(f);const d=function(e){for(const r of Array.from(document.scripts)){if(!r.src)continue;try{if(o(r.src)!==e)continue}catch{continue}if(t.get(r))return r;const n=r.readyState;if("complete"===n||"loaded"===n)return t.set(r,!0),r}return null}(f);if(d)return e.add(f),i(l,null,f),Promise.resolve(f);if(r.has(f)){const e=r.get(f);return l&&e.callbacks.push(l),e.promise}let p,h;const m=new Promise((e,r)=>{p=e,h=r}),y={promise:m,callbacks:l?[l]:[],finished:!1};r.set(f,y);const w=document.createElement("script");function g(n){if(!y.finished)if(y.finished=!0,r.delete(f),clearTimeout(E),n){try{w.remove()}catch{}y.callbacks.forEach(e=>i(e,n,f)),h(n)}else t.set(w,!0),e.add(f),y.callbacks.forEach(e=>i(e,null,f)),p(f)}w.src=f,w.async=!0,a.typeModule&&(w.type="module"),a.crossOrigin&&(w.crossOrigin=a.crossOrigin);const E=setTimeout(()=>{g(new Error("Script load timeout: "+f))},u);w.onload=()=>g(null),w.onerror=()=>g(new Error("Script load error: "+f));const S=c(n);try{S.appendChild(w)}catch(e){g(new Error("Append target error: "+e.message))}return m}function l(n,s,l,a={}){if(n||(n=document.head),!s||"string"!=typeof s)throw new TypeError("Invalid CSS URL");const u="number"==typeof a.timeout?a.timeout:2e4,f=o(s);if(e.has(f))return i(l,null,f),Promise.resolve(f);const d=function(e){const r=Array.from(document.querySelectorAll('link[rel="stylesheet"]'));for(const n of r)if(n.href){try{if(o(n.href)!==e)continue}catch{continue}if(t.get(n))return n;try{if(n.sheet)return t.set(n,!0),n}catch{continue}}return null}(f);if(d)return e.add(f),i(l,null,f),Promise.resolve(f);if(r.has(f)){const e=r.get(f);return l&&e.callbacks.push(l),e.promise}let p,h;const m=new Promise((e,r)=>{p=e,h=r}),y={promise:m,callbacks:l?[l]:[],finished:!1};r.set(f,y);const w=document.createElement("link");function g(n){if(!y.finished)if(y.finished=!0,r.delete(f),clearTimeout(E),n){try{w.remove()}catch{}y.callbacks.forEach(e=>i(e,n,f)),h(n)}else t.set(w,!0),e.add(f),y.callbacks.forEach(e=>i(e,null,f)),p(f)}w.rel="stylesheet",w.href=f,a.crossOrigin&&(w.crossOrigin=a.crossOrigin);const E=setTimeout(()=>{g(new Error("Style load timeout: "+f))},u);w.onload=()=>g(null),w.onerror=()=>g(new Error("Style load error: "+f));const S=c(n);try{S.appendChild(w)}catch(e){g(new Error("Append target error: "+e.message))}return m}var a=Object.freeze({__proto__:null,loadScript:s,loadStyle:l});exports.index=a,exports.loadScript=s,exports.loadStyle=l;
|
|
2
|
+
//# sourceMappingURL=index-C0BYHh-4.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-C0BYHh-4.cjs.js","sources":["../../src/modules/platformResourceLoader/index.js"],"sourcesContent":["// 已成功加载的 URL\nconst loadedResources = new Set();\n\n// 正在加载中的资源(用于并发去重)\nconst inflight = new Map();\n\n// 节点加载状态(不污染 DOM)\nconst nodeLoaded = new WeakMap();\n\n// 默认超时时间(ms)\nconst DEFAULT_TIMEOUT = 20000;\n\nconst _a = document.createElement('a');\n\n/** 兼容所有浏览器的 URL 规范化 */\nfunction normalizeUrl(url) {\n if (!url) return '';\n try {\n return new URL(url, window.location.href).href;\n } catch {\n // 旧浏览器 fallback\n _a.href = url;\n return _a.href || String(url);\n }\n}\n\n/** 获取可安全 append 的目标节点(优先 template 再 elm 再 head) */\nfunction getAppendTarget(elm) {\n try{\n if (elm && elm.template && typeof elm.template.appendChild === 'function') return elm.template;\n if (elm && typeof elm.appendChild === 'function') return elm;\n } catch {}\n return document.head;\n}\n\n/** 查找并判断页面中是否存在已加载的 script */\nfunction findLoadedScript(normalizedUrl) {\n for (const s of Array.from(document.scripts)) {\n if (!s.src) continue;\n try {\n if (normalizeUrl(s.src) !== normalizedUrl) continue;\n } catch {\n continue;\n }\n\n if (nodeLoaded.get(s)) return s;\n\n // 老浏览器兼容(readyState)\n const rs = s.readyState;\n if (rs === 'complete' || rs === 'loaded') {\n nodeLoaded.set(s, true);\n return s;\n }\n }\n return null;\n}\n\n/** 查找并判断页面中是否存在已加载的 stylesheet */\nfunction findLoadedStyle(normalizedUrl) {\n const links = Array.from(document.querySelectorAll('link[rel=\"stylesheet\"]'));\n for (const l of links) {\n if (!l.href) continue;\n try {\n if (normalizeUrl(l.href) !== normalizedUrl) continue;\n } catch {\n continue;\n }\n\n if (nodeLoaded.get(l)) return l;\n\n // 若可访问 sheet,视为已加载\n try {\n if (l.sheet) {\n nodeLoaded.set(l, true);\n return l;\n }\n } catch {\n // 抛错时不要立即标记已加载,让 loadStyle 的 onload 正常回调处理\n continue;\n }\n }\n return null;\n}\n\n/** 安全调用回调 */\nfunction safeCallback(fn, err, url) {\n if (typeof fn === 'function') {\n try {\n fn(err, url);\n } catch (e) {\n console.error('[loadResource] callback error:', e);\n }\n }\n}\n\n/* ---------------------- loadScript ---------------------- */\nexport function loadScript(elm, url, callback, options = {}) {\n if (!elm) elm = document.head;\n if (!url || typeof url !== 'string') throw new TypeError('Invalid script URL');\n\n const timeoutMs = typeof options.timeout === 'number' ? options.timeout : DEFAULT_TIMEOUT;\n const normalizedUrl = normalizeUrl(url);\n\n // 已加载\n if (loadedResources.has(normalizedUrl)) {\n safeCallback(callback, null, normalizedUrl);\n return Promise.resolve(normalizedUrl);\n }\n\n const existing = findLoadedScript(normalizedUrl);\n if (existing) {\n loadedResources.add(normalizedUrl);\n safeCallback(callback, null, normalizedUrl);\n return Promise.resolve(normalizedUrl);\n }\n\n // 并发复用 inflight\n if (inflight.has(normalizedUrl)) {\n const entry = inflight.get(normalizedUrl);\n if (callback) entry.callbacks.push(callback);\n return entry.promise;\n }\n\n // 新建 entry\n let resolveFn, rejectFn;\n const promise = new Promise((resolve, reject) => {\n resolveFn = resolve;\n rejectFn = reject;\n });\n const entry = { promise, callbacks: callback ? [callback] : [], finished: false };\n inflight.set(normalizedUrl, entry);\n\n // 创建 script 元素\n const script = document.createElement('script');\n script.src = normalizedUrl;\n script.async = true;\n if (options.typeModule) script.type = 'module';\n if (options.crossOrigin) script.crossOrigin = options.crossOrigin;\n\n // 清理逻辑\n function cleanup(err) {\n if (entry.finished) return;\n entry.finished = true;\n inflight.delete(normalizedUrl);\n clearTimeout(timer);\n\n if (err) {\n try { script.remove(); } catch {}\n entry.callbacks.forEach(cb => safeCallback(cb, err, normalizedUrl));\n rejectFn(err);\n } else {\n nodeLoaded.set(script, true);\n loadedResources.add(normalizedUrl);\n entry.callbacks.forEach(cb => safeCallback(cb, null, normalizedUrl));\n resolveFn(normalizedUrl);\n }\n }\n\n const timer = setTimeout(() => {\n cleanup(new Error('Script load timeout: ' + normalizedUrl));\n }, timeoutMs);\n\n script.onload = () => cleanup(null);\n script.onerror = () => cleanup(new Error('Script load error: ' + normalizedUrl));\n\n const target = getAppendTarget(elm);\n try {\n target.appendChild(script);\n } catch (appendErr) {\n cleanup(new Error('Append target error: ' + appendErr.message));\n }\n\n return promise;\n}\n\n/* ---------------------- loadStyle ---------------------- */\nexport function loadStyle(elm, url, callback, options = {}) {\n if (!elm) elm = document.head;\n if (!url || typeof url !== 'string') throw new TypeError('Invalid CSS URL');\n\n const timeoutMs = typeof options.timeout === 'number' ? options.timeout : DEFAULT_TIMEOUT;\n const normalizedUrl = normalizeUrl(url);\n\n if (loadedResources.has(normalizedUrl)) {\n safeCallback(callback, null, normalizedUrl);\n return Promise.resolve(normalizedUrl);\n }\n\n const existing = findLoadedStyle(normalizedUrl);\n if (existing) {\n loadedResources.add(normalizedUrl);\n safeCallback(callback, null, normalizedUrl);\n return Promise.resolve(normalizedUrl);\n }\n\n if (inflight.has(normalizedUrl)) {\n const entry = inflight.get(normalizedUrl);\n if (callback) entry.callbacks.push(callback);\n return entry.promise;\n }\n\n let resolveFn, rejectFn;\n const promise = new Promise((resolve, reject) => {\n resolveFn = resolve;\n rejectFn = reject;\n });\n const entry = { promise, callbacks: callback ? [callback] : [], finished: false };\n inflight.set(normalizedUrl, entry);\n\n const link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = normalizedUrl;\n if (options.crossOrigin) link.crossOrigin = options.crossOrigin;\n\n function cleanup(err) {\n if (entry.finished) return;\n entry.finished = true;\n inflight.delete(normalizedUrl);\n clearTimeout(timer);\n\n if (err) {\n try { link.remove(); } catch {}\n entry.callbacks.forEach(cb => safeCallback(cb, err, normalizedUrl));\n rejectFn(err);\n } else {\n nodeLoaded.set(link, true);\n loadedResources.add(normalizedUrl);\n entry.callbacks.forEach(cb => safeCallback(cb, null, normalizedUrl));\n resolveFn(normalizedUrl);\n }\n }\n\n const timer = setTimeout(() => {\n cleanup(new Error('Style load timeout: ' + normalizedUrl));\n }, timeoutMs);\n\n link.onload = () => cleanup(null);\n link.onerror = () => cleanup(new Error('Style load error: ' + normalizedUrl));\n\n const target = getAppendTarget(elm);\n try {\n target.appendChild(link);\n } catch (appendErr) {\n cleanup(new Error('Append target error: ' + appendErr.message));\n }\n\n return promise;\n}\n"],"names":["loadedResources","Set","inflight","Map","nodeLoaded","WeakMap","_a","document","createElement","normalizeUrl","url","URL","window","location","href","String","getAppendTarget","elm","template","appendChild","head","safeCallback","fn","err","e","console","error","loadScript","callback","options","TypeError","timeoutMs","timeout","normalizedUrl","has","Promise","resolve","existing","s","Array","from","scripts","src","get","rs","readyState","set","findLoadedScript","add","entry","callbacks","push","promise","resolveFn","rejectFn","reject","finished","script","cleanup","delete","clearTimeout","timer","remove","forEach","cb","async","typeModule","type","crossOrigin","setTimeout","Error","onload","onerror","target","appendErr","message","loadStyle","links","querySelectorAll","l","sheet","findLoadedStyle","link","rel"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";function r(r,o){if(!window.spyApi||!window.spyApi.doPostActions)throw console.error("Current page is not a bos page"),new Error("Current page is not a bos page");if(!Array.isArray(o)||0===o.length)throw console.error("Payload must be an array"),new Error("Payload must be an array");for(let e of o){const{a:o,p:n}=e;window.spyApi.doPostActions(r,o,n)}}async function o(o,e={}){const n=await function(r,o={}){const{formId:e,parentPageId:n,params:t}=r,{version:s="v1",app:i,isv:a,url:c}=o;if(!s&&!c)throw new Error("version in config is required");if(!i&&!c)throw new Error("app in config is required");if(!e&&!c)throw new Error("formId is required");if(!a&&!c)throw new Error("isv in config is required");let w=c||`${location.pathname}kwc/${s}/${a}/${i}/kwcform/${e}/showconfig`;if(!c&&n&&(w=`${w}?parentPageId=${n}`),t&&Object.keys(t).length>0)try{const r=JSON.stringify(t),o=w.includes("?")?"&":"?";w=`${w}${o}params=${r}`}catch(r){console.error(r)}return new Promise((r,o)=>{fetch(w).then(r=>r.json()).then(o=>{r(o)}).catch(r=>{o(r)})})}(o,e);if(!n)throw new Error("showForm response is not valid");const{parentPageId:t,pageId:s}=o;r(s||t,n)}var e=Object.freeze({__proto__:null,default:r,showForm:o});exports.index=e,exports.sendBosPlatformEvent=r,exports.showFormRequest=o;
|
|
2
|
+
//# sourceMappingURL=index-CGzlSIt0.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-CGzlSIt0.cjs.js","sources":["../../src/modules/sendBosPlatformEvent/index.js","../../src/modules/sendBosPlatformEvent/showForm.js"],"sourcesContent":["import showForm from \"./showForm\";\n\n/**\n * 转发 bos 平台相关指令\n */\nexport default function sendBosPlatformEvent(pageId, payload) {\n if (!window.spyApi || !window.spyApi.doPostActions) {\n console.error('Current page is not a bos page');\n throw new Error('Current page is not a bos page');\n }\n\n if (!Array.isArray(payload) || payload.length === 0) {\n console.error('Payload must be an array');\n throw new Error('Payload must be an array');\n }\n\n for (let _payload of payload) {\n const { a: action, p: param } = _payload\n window.spyApi.doPostActions(pageId, action, param);\n }\n}\n\nasync function showFormRequest(formConfig, config = {}) {\n const response = await showForm(formConfig, config);\n if (!response) {\n throw new Error('showForm response is not valid');\n }\n\n const { parentPageId, pageId } = formConfig;\n const payload = response;\n const pId = pageId || parentPageId;\n sendBosPlatformEvent(pId, payload);\n}\n\nexport {\n showFormRequest as showForm\n}","function showForm(formConfig, config = {}) {\n const { formId, parentPageId, params } = formConfig;\n const { version = 'v1', app, isv, url: customUrl } = config;\n if (!version && !customUrl) {\n throw new Error('version in config is required');\n }\n\n if (!app && !customUrl) {\n throw new Error('app in config is required');\n }\n\n if (!formId && !customUrl) {\n throw new Error('formId is required');\n }\n\n if (!isv && !customUrl) {\n throw new Error('isv in config is required');\n }\n\n let url = customUrl || `${location.pathname}kwc/${version}/${isv}/${app}/kwcform/${formId}/showconfig`;\n\n if (!customUrl && parentPageId) {\n url = `${url}?parentPageId=${parentPageId}`;\n }\n\n if (params && Object.keys(params).length > 0) {\n try {\n const _params = JSON.stringify(params);\n const sign = url.includes('?') ? '&' : '?'\n url = `${url}${sign}params=${_params}`\n } catch (error) {\n console.error(error);\n }\n }\n\n return new Promise((resolve, reject) => {\n fetch(url).then(response => {\n return response.json();\n }).then(data => {\n resolve(data)\n }).catch(error => {\n reject(error)\n })\n })\n}\n\nexport default showForm;"],"names":["sendBosPlatformEvent","pageId","payload","window","spyApi","doPostActions","console","error","Error","Array","isArray","length","_payload","a","action","p","param","async","showFormRequest","formConfig","config","response","formId","parentPageId","params","version","app","isv","url","customUrl","location","pathname","Object","keys","_params","JSON","stringify","sign","includes","Promise","resolve","reject","fetch","then","json","data","catch","showForm"],"mappings":"aAKe,SAASA,EAAqBC,EAAQC,GACnD,IAAKC,OAAOC,SAAWD,OAAOC,OAAOC,cAEnC,MADAC,QAAQC,MAAM,kCACR,IAAIC,MAAM,kCAGlB,IAAKC,MAAMC,QAAQR,IAA+B,IAAnBA,EAAQS,OAErC,MADAL,QAAQC,MAAM,4BACR,IAAIC,MAAM,4BAGlB,IAAK,IAAII,KAAYV,EAAS,CAC5B,MAAQW,EAAGC,EAAQC,EAAGC,GAAUJ,EAChCT,OAAOC,OAAOC,cAAcJ,EAAQa,EAAQE,EAC9C,CACF,CAEAC,eAAeC,EAAgBC,EAAYC,EAAS,IAClD,MAAMC,QCvBR,SAAkBF,EAAYC,EAAS,IACrC,MAAME,OAAEA,EAAMC,aAAEA,EAAYC,OAAEA,GAAWL,GACnCM,QAAEA,EAAU,KAAIC,IAAEA,EAAGC,IAAEA,EAAKC,IAAKC,GAAcT,EACrD,IAAKK,IAAYI,EACf,MAAM,IAAIrB,MAAM,iCAGlB,IAAKkB,IAAQG,EACX,MAAM,IAAIrB,MAAM,6BAGlB,IAAKc,IAAWO,EACd,MAAM,IAAIrB,MAAM,sBAGlB,IAAKmB,IAAQE,EACX,MAAM,IAAIrB,MAAM,6BAGlB,IAAIoB,EAAMC,GAAa,GAAGC,SAASC,eAAeN,KAAWE,KAAOD,aAAeJ,eAMnF,IAJKO,GAAaN,IAChBK,EAAM,GAAGA,kBAAoBL,KAG3BC,GAAUQ,OAAOC,KAAKT,GAAQb,OAAS,EACzC,IACE,MAAMuB,EAAUC,KAAKC,UAAUZ,GACzBa,EAAOT,EAAIU,SAAS,KAAO,IAAM,IACvCV,EAAM,GAAGA,IAAMS,WAAcH,GAC/B,CAAE,MAAO3B,GACPD,QAAQC,MAAMA,EAChB,CAGF,OAAO,IAAIgC,QAAQ,CAACC,EAASC,KAC3BC,MAAMd,GAAKe,KAAKtB,GACPA,EAASuB,QACfD,KAAKE,IACNL,EAAQK,KACPC,MAAMvC,IACPkC,EAAOlC,MAGb,CDrByBwC,CAAS5B,EAAYC,GAC5C,IAAKC,EACH,MAAM,IAAIb,MAAM,kCAGlB,MAAMe,aAAEA,EAAYtB,OAAEA,GAAWkB,EAGjCnB,EADYC,GAAUsB,EADNF,EAGlB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
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}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:i,method:s}=this.authConfig;try{const a=await fetch(t,{method:s,headers:e,body:JSON.stringify(i)});if(!a.ok)throw new Error(`Authentication failed: ${a.status} - ${a.statusText}`);const r=await a.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(){}saveTokensToStorage(){}clearTokensFromStorage(){}addListener(t){this.listeners.add(t)}removeListener(t){this.listeners.delete(t)}notifyListeners(t,e){this.listeners.forEach(i=>{try{i(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 i(t){return await e.initialize(t)}function s(){return e.isAuthenticated()}class a{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 i=null;for(let s=0;s<this.maxRetries;s++)try{const i=await this.performRequest(t);return this.setCacheData(e,i),void this.dataCallback(i)}catch(t){i=t,s<this.maxRetries&&await this.delay(this.retryDelay*Math.pow(2,s))}this.dataCallback({data:null,error:{message:i.message,status:i.status||"NETWORK_ERROR",retries:this.maxRetries}})}async performRequest(t){const{endpoint:e,method:i="GET",params:s={},headers:a={}}=t;this.abortController&&this.abortController.abort(),this.abortController=new AbortController;let r=e;if("GET"===i&&s){r=`${r}?${new URLSearchParams(s).toString()}`}const n={method:i,headers:{"Content-Type":"application/json",access_token:this.authManager.getAccessToken(),...a},body:"GET"===i?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",i={}){return function(s){if("function"==typeof s){const e=new a(s),n=e.update.bind(e);return e.update=function(e){const s={endpoint:r(e),method:t,...i,...e};return delete s.endpointConfig,e&&"object"==typeof e&&!e.endpoint&&(s.params=e.params||e),n(s)},e}return async function(t,i,s){await e.waitForAuth();const n={endpoint:r(s),method:t,...i,...s};delete n.endpointConfig,s&&"object"==typeof s&&!s.endpoint&&(n.params=s.params||s);return new Promise((t,e)=>{const i=new a(i=>{i.error?e(i.error):t(i)});i.connect(),i.update(n)})}(t,i,s||{})}}("POST");var o=Object.freeze({__proto__:null,AuthManager:t,authManager:e,doFetch:n,initializeAuth:i,isAuthenticated:s});export{t as A,e as a,i as b,s as c,n as d,o as i};
|
|
2
|
+
//# sourceMappingURL=index-CXYAeW-7.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-CXYAeW-7.esm.js","sources":["../../src/modules/openApi/authManager.js","../../src/modules/openApi/adapter.js","../../src/modules/openApi/factory.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\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 // memory-only: no persistent storage to load from\n return;\n }\n\n saveTokensToStorage() {\n // memory-only: do not persist tokens\n return;\n }\n\n clearTokensFromStorage() {\n // memory-only: nothing to clear from persistent storage\n return;\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}\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')\n"],"names":["AuthManager","constructor","this","accessToken","refreshToken","isInitialized","isAuthenticating","authPromise","authConfig","listeners","Set","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","loadTokensFromStorage","addListener","callback","add","removeListener","delete","event","forEach","listener","waitForAuth","authManager","async","initializeAuth","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","reject","createPromiseCall","createWireAdapter"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=new Set,r=new Map,t=new WeakMap,n=document.createElement("a");function o(e){if(!e)return"";try{return new URL(e,window.location.href).href}catch{return n.href=e,n.href||String(e)}}function c(e){try{if(e&&e.template&&"function"==typeof e.template.appendChild)return e.template;if(e&&"function"==typeof e.appendChild)return e}catch{}return document.head}function i(e,r,t){if("function"==typeof e)try{e(r,t)}catch(e){console.error("[loadResource] callback error:",e)}}function s(n,s,l,a={}){if(n||(n=document.head),!s||"string"!=typeof s)throw new TypeError("Invalid script URL");const u="number"==typeof a.timeout?a.timeout:2e4,f=o(s);if(e.has(f))return i(l,null,f),Promise.resolve(f);const d=function(e){for(const r of Array.from(document.scripts)){if(!r.src)continue;try{if(o(r.src)!==e)continue}catch{continue}if(t.get(r))return r;const n=r.readyState;if("complete"===n||"loaded"===n)return t.set(r,!0),r}return null}(f);if(d)return e.add(f),i(l,null,f),Promise.resolve(f);if(r.has(f)){const e=r.get(f);return l&&e.callbacks.push(l),e.promise}let h,m;const p=new Promise((e,r)=>{h=e,m=r}),y={promise:p,callbacks:l?[l]:[],finished:!1};r.set(f,y);const w=document.createElement("script");function g(n){if(!y.finished)if(y.finished=!0,r.delete(f),clearTimeout(E),n){try{w.remove()}catch{}y.callbacks.forEach(e=>i(e,n,f)),m(n)}else t.set(w,!0),e.add(f),y.callbacks.forEach(e=>i(e,null,f)),h(f)}w.src=f,w.async=!0,a.typeModule&&(w.type="module"),a.crossOrigin&&(w.crossOrigin=a.crossOrigin);const E=setTimeout(()=>{g(new Error("Script load timeout: "+f))},u);w.onload=()=>g(null),w.onerror=()=>g(new Error("Script load error: "+f));const b=c(n);try{b.appendChild(w)}catch(e){g(new Error("Append target error: "+e.message))}return p}function l(n,s,l,a={}){if(n||(n=document.head),!s||"string"!=typeof s)throw new TypeError("Invalid CSS URL");const u="number"==typeof a.timeout?a.timeout:2e4,f=o(s);if(e.has(f))return i(l,null,f),Promise.resolve(f);const d=function(e){const r=Array.from(document.querySelectorAll('link[rel="stylesheet"]'));for(const n of r)if(n.href){try{if(o(n.href)!==e)continue}catch{continue}if(t.get(n))return n;try{if(n.sheet)return t.set(n,!0),n}catch{continue}}return null}(f);if(d)return e.add(f),i(l,null,f),Promise.resolve(f);if(r.has(f)){const e=r.get(f);return l&&e.callbacks.push(l),e.promise}let h,m;const p=new Promise((e,r)=>{h=e,m=r}),y={promise:p,callbacks:l?[l]:[],finished:!1};r.set(f,y);const w=document.createElement("link");function g(n){if(!y.finished)if(y.finished=!0,r.delete(f),clearTimeout(E),n){try{w.remove()}catch{}y.callbacks.forEach(e=>i(e,n,f)),m(n)}else t.set(w,!0),e.add(f),y.callbacks.forEach(e=>i(e,null,f)),h(f)}w.rel="stylesheet",w.href=f,a.crossOrigin&&(w.crossOrigin=a.crossOrigin);const E=setTimeout(()=>{g(new Error("Style load timeout: "+f))},u);w.onload=()=>g(null),w.onerror=()=>g(new Error("Style load error: "+f));const b=c(n);try{b.appendChild(w)}catch(e){g(new Error("Append target error: "+e.message))}return p}var a=Object.freeze({__proto__:null,loadScript:s,loadStyle:l});export{l as a,a as i,s as l};
|
|
2
|
+
//# sourceMappingURL=index-DF7VNMGI.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-DF7VNMGI.esm.js","sources":["../../src/modules/platformResourceLoader/index.js"],"sourcesContent":["// 已成功加载的 URL\nconst loadedResources = new Set();\n\n// 正在加载中的资源(用于并发去重)\nconst inflight = new Map();\n\n// 节点加载状态(不污染 DOM)\nconst nodeLoaded = new WeakMap();\n\n// 默认超时时间(ms)\nconst DEFAULT_TIMEOUT = 20000;\n\nconst _a = document.createElement('a');\n\n/** 兼容所有浏览器的 URL 规范化 */\nfunction normalizeUrl(url) {\n if (!url) return '';\n try {\n return new URL(url, window.location.href).href;\n } catch {\n // 旧浏览器 fallback\n _a.href = url;\n return _a.href || String(url);\n }\n}\n\n/** 获取可安全 append 的目标节点(优先 template 再 elm 再 head) */\nfunction getAppendTarget(elm) {\n try{\n if (elm && elm.template && typeof elm.template.appendChild === 'function') return elm.template;\n if (elm && typeof elm.appendChild === 'function') return elm;\n } catch {}\n return document.head;\n}\n\n/** 查找并判断页面中是否存在已加载的 script */\nfunction findLoadedScript(normalizedUrl) {\n for (const s of Array.from(document.scripts)) {\n if (!s.src) continue;\n try {\n if (normalizeUrl(s.src) !== normalizedUrl) continue;\n } catch {\n continue;\n }\n\n if (nodeLoaded.get(s)) return s;\n\n // 老浏览器兼容(readyState)\n const rs = s.readyState;\n if (rs === 'complete' || rs === 'loaded') {\n nodeLoaded.set(s, true);\n return s;\n }\n }\n return null;\n}\n\n/** 查找并判断页面中是否存在已加载的 stylesheet */\nfunction findLoadedStyle(normalizedUrl) {\n const links = Array.from(document.querySelectorAll('link[rel=\"stylesheet\"]'));\n for (const l of links) {\n if (!l.href) continue;\n try {\n if (normalizeUrl(l.href) !== normalizedUrl) continue;\n } catch {\n continue;\n }\n\n if (nodeLoaded.get(l)) return l;\n\n // 若可访问 sheet,视为已加载\n try {\n if (l.sheet) {\n nodeLoaded.set(l, true);\n return l;\n }\n } catch {\n // 抛错时不要立即标记已加载,让 loadStyle 的 onload 正常回调处理\n continue;\n }\n }\n return null;\n}\n\n/** 安全调用回调 */\nfunction safeCallback(fn, err, url) {\n if (typeof fn === 'function') {\n try {\n fn(err, url);\n } catch (e) {\n console.error('[loadResource] callback error:', e);\n }\n }\n}\n\n/* ---------------------- loadScript ---------------------- */\nexport function loadScript(elm, url, callback, options = {}) {\n if (!elm) elm = document.head;\n if (!url || typeof url !== 'string') throw new TypeError('Invalid script URL');\n\n const timeoutMs = typeof options.timeout === 'number' ? options.timeout : DEFAULT_TIMEOUT;\n const normalizedUrl = normalizeUrl(url);\n\n // 已加载\n if (loadedResources.has(normalizedUrl)) {\n safeCallback(callback, null, normalizedUrl);\n return Promise.resolve(normalizedUrl);\n }\n\n const existing = findLoadedScript(normalizedUrl);\n if (existing) {\n loadedResources.add(normalizedUrl);\n safeCallback(callback, null, normalizedUrl);\n return Promise.resolve(normalizedUrl);\n }\n\n // 并发复用 inflight\n if (inflight.has(normalizedUrl)) {\n const entry = inflight.get(normalizedUrl);\n if (callback) entry.callbacks.push(callback);\n return entry.promise;\n }\n\n // 新建 entry\n let resolveFn, rejectFn;\n const promise = new Promise((resolve, reject) => {\n resolveFn = resolve;\n rejectFn = reject;\n });\n const entry = { promise, callbacks: callback ? [callback] : [], finished: false };\n inflight.set(normalizedUrl, entry);\n\n // 创建 script 元素\n const script = document.createElement('script');\n script.src = normalizedUrl;\n script.async = true;\n if (options.typeModule) script.type = 'module';\n if (options.crossOrigin) script.crossOrigin = options.crossOrigin;\n\n // 清理逻辑\n function cleanup(err) {\n if (entry.finished) return;\n entry.finished = true;\n inflight.delete(normalizedUrl);\n clearTimeout(timer);\n\n if (err) {\n try { script.remove(); } catch {}\n entry.callbacks.forEach(cb => safeCallback(cb, err, normalizedUrl));\n rejectFn(err);\n } else {\n nodeLoaded.set(script, true);\n loadedResources.add(normalizedUrl);\n entry.callbacks.forEach(cb => safeCallback(cb, null, normalizedUrl));\n resolveFn(normalizedUrl);\n }\n }\n\n const timer = setTimeout(() => {\n cleanup(new Error('Script load timeout: ' + normalizedUrl));\n }, timeoutMs);\n\n script.onload = () => cleanup(null);\n script.onerror = () => cleanup(new Error('Script load error: ' + normalizedUrl));\n\n const target = getAppendTarget(elm);\n try {\n target.appendChild(script);\n } catch (appendErr) {\n cleanup(new Error('Append target error: ' + appendErr.message));\n }\n\n return promise;\n}\n\n/* ---------------------- loadStyle ---------------------- */\nexport function loadStyle(elm, url, callback, options = {}) {\n if (!elm) elm = document.head;\n if (!url || typeof url !== 'string') throw new TypeError('Invalid CSS URL');\n\n const timeoutMs = typeof options.timeout === 'number' ? options.timeout : DEFAULT_TIMEOUT;\n const normalizedUrl = normalizeUrl(url);\n\n if (loadedResources.has(normalizedUrl)) {\n safeCallback(callback, null, normalizedUrl);\n return Promise.resolve(normalizedUrl);\n }\n\n const existing = findLoadedStyle(normalizedUrl);\n if (existing) {\n loadedResources.add(normalizedUrl);\n safeCallback(callback, null, normalizedUrl);\n return Promise.resolve(normalizedUrl);\n }\n\n if (inflight.has(normalizedUrl)) {\n const entry = inflight.get(normalizedUrl);\n if (callback) entry.callbacks.push(callback);\n return entry.promise;\n }\n\n let resolveFn, rejectFn;\n const promise = new Promise((resolve, reject) => {\n resolveFn = resolve;\n rejectFn = reject;\n });\n const entry = { promise, callbacks: callback ? [callback] : [], finished: false };\n inflight.set(normalizedUrl, entry);\n\n const link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = normalizedUrl;\n if (options.crossOrigin) link.crossOrigin = options.crossOrigin;\n\n function cleanup(err) {\n if (entry.finished) return;\n entry.finished = true;\n inflight.delete(normalizedUrl);\n clearTimeout(timer);\n\n if (err) {\n try { link.remove(); } catch {}\n entry.callbacks.forEach(cb => safeCallback(cb, err, normalizedUrl));\n rejectFn(err);\n } else {\n nodeLoaded.set(link, true);\n loadedResources.add(normalizedUrl);\n entry.callbacks.forEach(cb => safeCallback(cb, null, normalizedUrl));\n resolveFn(normalizedUrl);\n }\n }\n\n const timer = setTimeout(() => {\n cleanup(new Error('Style load timeout: ' + normalizedUrl));\n }, timeoutMs);\n\n link.onload = () => cleanup(null);\n link.onerror = () => cleanup(new Error('Style load error: ' + normalizedUrl));\n\n const target = getAppendTarget(elm);\n try {\n target.appendChild(link);\n } catch (appendErr) {\n cleanup(new Error('Append target error: ' + appendErr.message));\n }\n\n return promise;\n}\n"],"names":["loadedResources","Set","inflight","Map","nodeLoaded","WeakMap","_a","document","createElement","normalizeUrl","url","URL","window","location","href","String","getAppendTarget","elm","template","appendChild","head","safeCallback","fn","err","e","console","error","loadScript","callback","options","TypeError","timeoutMs","timeout","normalizedUrl","has","Promise","resolve","existing","s","Array","from","scripts","src","get","rs","readyState","set","findLoadedScript","add","entry","callbacks","push","promise","resolveFn","rejectFn","reject","finished","script","cleanup","delete","clearTimeout","timer","remove","forEach","cb","async","typeModule","type","crossOrigin","setTimeout","Error","onload","onerror","target","appendErr","message","loadStyle","links","querySelectorAll","l","sheet","findLoadedStyle","link","rel"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
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;
|
|
2
|
+
//# sourceMappingURL=index-DSwttGxP.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-DSwttGxP.cjs.js","sources":["../../src/modules/client/app.js","../../src/modules/client/browser.js","../../src/modules/client/device.js"],"sourcesContent":["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;\n","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;\n","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":["App","isYzj","agent","navigator","userAgent","test","isYzjDesktop","isYzjOldDesktop","isWX","indexOf","isWxWork","isDD","_isDD","isDDMiniProgram","isWeLink","isFeiShu","getApp","isChrome","toLowerCase","isChromiumEdge","isLegacyEdge","isEdge","isFirefox","isIE","isSafari","Browser","getBrowser","isMobile","isTouchDevice","window","maxTouchPoints","msMaxTouchPoints","innerWidth","isPC"],"mappings":"aAAA,MAAMA,EACC,YADDA,EAEQ,oBAFRA,EAGW,wBAHXA,EAIA,SAJAA,EAKA,WALAA,EAMI,SANJA,EAOI,SAPJA,EAQI,SARJA,EASK,UAGJ,SAASC,IACd,MAAMC,EAAQC,UAAUC,UACxB,MAAO,+CAA+CC,KAAKH,EAC7D,CAEO,SAASI,IACd,MAAMJ,EAAQC,UAAUC,UACxB,MAAO,gBAAgBC,KAAKH,EAC9B,CAEO,SAASK,IACd,MAAML,EAAQC,UAAUC,UACxB,MAAO,iBAAiBC,KAAKH,EAC/B,CAEO,SAASM,IACd,MAAMN,EAAQC,UAAUC,UACxB,OAAOF,EAAMO,QAAQ,mBAAoB,GAAMP,EAAMO,QAAQ,UAAY,CAC3E,CAEO,SAASC,IACd,MAAMR,EAAQC,UAAUC,UACxB,OAAOF,EAAMO,QAAQ,mBAAoB,GAAMP,EAAMO,QAAQ,WAAY,CAC3E,CAEO,SAASE,IACd,MAAMT,EAAQC,UAAUC,UAClBQ,EAAQV,EAAMO,QAAQ,aAAc,EACpCI,GAAmD,IAAjCX,EAAMO,QAAQ,iBAAqD,IAA5BP,EAAMO,QAAQ,UAC7E,OAAOG,GAASC,CAClB,CAEO,SAASC,IACd,MAAMZ,EAAQC,UAAUC,UACxB,OAAOF,EAAMO,QAAQ,WAAY,GAAMP,EAAMO,QAAQ,cAAe,CACtE,CAEO,SAASM,IAEd,OADcZ,UAAUC,UACXK,QAAQ,UAAW,CAClC,CAEO,SAASO,IACd,OAAIf,IAAgBD,EACXM,IAAuBN,EACvBO,IAA0BP,EAC1BQ,IAAeR,EACfU,IAAmBV,EACnBW,IAAeX,EACfc,EAAiBd,EACjBe,IAAmBf,EAChBA,CACd,CChEO,SAASiB,IACd,MAAMb,EAAYD,UAAUC,UAAUc,cACtC,MAAO,eAAeb,KAAKD,KAAe,0CAA0CC,KAAKD,EAC3F,CAEO,SAASe,IACd,MAAMf,EAAYD,UAAUC,UAAUc,cACtC,MAAO,MAAMb,KAAKD,EACpB,CAEO,SAASgB,IACd,MAAMhB,EAAYD,UAAUC,UAAUc,cACtC,MAAO,OAAOb,KAAKD,KAAe,MAAMC,KAAKD,EAC/C,CAEO,SAASiB,IACd,OAAOF,KAAoBC,GAC7B,CAEO,SAASE,IACd,MAAMlB,EAAYD,UAAUC,UAAUc,cACtC,MAAO,gBAAgBb,KAAKD,EAC9B,CAEO,SAASmB,IACd,MAAMnB,EAAYD,UAAUC,UAAUc,cACtC,MAAO,eAAeb,KAAKD,EAC7B,CAEO,SAASoB,IACd,MAAMpB,EAAYD,UAAUC,UAAUc,cACtC,MAAO,SAASb,KAAKD,KAAe,wCAAwCC,KAAKD,EACnF,CAEA,MAAMqB,EACI,SADJA,EAEE,OAFFA,EAGK,UAHLA,EAIA,KAJAA,EAKI,SALJA,EAMK,UAGJ,SAASC,IACd,OAAIT,IAAmBQ,EACdJ,IAAiBI,EACjBH,IAAoBG,EACpBD,IAAmBC,EACnBF,IAAeE,EACZA,CACd,CClDO,SAASE,IACd,MAAMzB,EAAQC,UAAUC,UAAUc,cAC5BU,EAAgB,iBAAkBC,QAAU1B,UAAU2B,eAAiB,GAAK3B,UAAU4B,iBAAmB,EAE/G,MAAQ,iEAAiE1B,KAAKH,IAAY0B,GAAiBC,OAAOG,YAD3F,IAEzB,CAEO,SAASC,IACd,OAAQN,GACV"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{s as t,u as e,p as r}from"./index-ChQWdmu9.esm.js";const s=new Map,a=new Map,n=new Map;function o(t){if("object"!=typeof t||null===t)return t;if(Array.isArray(t))return t.map(o);const e=Object.keys(t).sort(),r={};for(const s of e)r[s]=o(t[s]);return r}function c(t){if(!t||"object"!=typeof t)return String(t);const e=o(t);return JSON.stringify(e)}function l(r,a){const n=c(r);s.has(n)&&a(s.get(n));const o={};return t(o,n,a),()=>{e(o,n,a)}}async function u(t,e,o={}){const{ttlMs:l=6e4,force:u=!1,dedupe:i=!0,abortPrevious:f=!0}=o,d=c(t),g=s.get(d),b=Date.now();if(g&&!u){const t=g.ttl??l;if(!g.ts||b-g.ts<=t)return g}if(i&&a.has(d)&&!u)return a.get(d);if(f&&n.has(d))try{n.get(d).abort()}catch(t){n.delete(d),a.delete(d),console.error("Failed to abort previous request",t)}const h=new AbortController;n.set(d,h);const p=(async()=>{try{const a=await e(t,{signal:h.signal});let n=null;try{n=await a.json()}catch{n=null}if(!a.ok){const t={data:null,error:{status:a.status,message:n&&n.message||"Request failed"},ts:b,ttl:l};return s.set(d,t),r(d,t),t}const o={data:n,error:null,ts:b,ttl:l};return s.set(d,o),r(d,o),o}catch(t){if("AbortError"===t?.name)return{data:null,error:{status:"ABORTED",message:t.message},aborted:!0};const e={data:null,error:{status:0,message:t?.message||"Network error"},ts:b,ttl:l};return s.set(d,e),r(d,e),e}finally{n.delete(d),a.delete(d)}})();return a.set(d,p),p}async function i(t,e){const r=c(t);if(s.has(r)&&s.delete(r),n.has(r)){try{n.get(r).abort()}catch{}n.delete(r)}a.delete(r),await u(t,e,{force:!0,dedupe:!1,abortPrevious:!1})}function f(t,e,a={}){const{ttlMs:n=6e4}=a,o=c(t),l={data:e,error:null,ts:Date.now(),ttl:n};s.set(o,l),r(o,l)}var d=Object.freeze({__proto__:null,fetchDataWithCache:u,invalidateCache:i,subscribe:l,updateCache:f});export{i as a,u as f,d as i,l as s,f as u};
|
|
2
|
+
//# sourceMappingURL=index-KT-nyvfl.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-KT-nyvfl.esm.js","sources":["../../src/modules/kingdeeDataService/index.js"],"sourcesContent":["import { subscribe as sub, publish, unsubscribe } from \"../messageService\";\n\nconst dataStore = new Map(); // key -> Data\nconst pendingMap = new Map(); // key -> Promise\nconst controllerMap = new Map(); // key -> AbortController\n\n\n/**\n * Sort object or array recursively\n * @param {Object} obj object or array to sort\n * @erturns {Object} sorted object or array\n */\nfunction sortObjectDeep(obj) {\n if (typeof obj !== 'object' || obj === null) {\n return obj;\n }\n\n if (Array.isArray(obj)) {\n return obj.map(sortObjectDeep);\n }\n\n const sortedKeys = Object.keys(obj).sort();\n const sortedObj = {};\n\n for (const key of sortedKeys) {\n sortedObj[key] = sortObjectDeep(obj[key]);\n }\n\n return sortedObj;\n}\n\n/**\n * KWC cache key generator\n * @param {Object} config Wire Adapter config\n * @returns {String} cache key\n */\nfunction getCacheKey(config) {\n if (!config || typeof config !== 'object') {\n return String(config);\n }\n\n const normalizedConfig = sortObjectDeep(config);\n return JSON.stringify(normalizedConfig);\n}\n\n/**\n * Subscribe to data changes\n * @param {Object} config adapter config\n * @param {Function} subscriber callback to be called when data changes\n * @returns {Function} unsubscribe function\n */\nexport function subscribe(config, subscriber) {\n const key = getCacheKey(config);\n if (dataStore.has(key)) {\n subscriber(dataStore.get(key));\n }\n\n const component = {}\n sub(component, key, subscriber)\n return () => {\n unsubscribe(component, key, subscriber);\n }\n}\n\n/**\n * Fetch data with cache\n * @param {Object} config configuration to generate cache key and url\n * @param {Function} dataFetcher function to fetch data\n * @param {Object} options fetch options\n * @param {Number} options.ttlMs cache ttl in milliseconds\n * @param {Boolean} options.force force fetch refresh\n * @param {Boolean} options.dedupe dedupe requests\n * @param {Boolean} options.abortPrevious abort previous request\n * @returns {Promise} promise that resolves to data or error\n */\nexport async function fetchDataWithCache(config, dataFetcher, options = {}) {\n const { ttlMs = 60000, force = false, dedupe = true, abortPrevious = true } = options;\n const key = getCacheKey(config);\n const cached = dataStore.get(key);\n const nowTs = Date.now();\n\n // Return cached if not expired and not force\n if (cached && !force) {\n const ttl = cached.ttl ?? ttlMs;\n if (!cached.ts || (nowTs - cached.ts) <= ttl) {\n return cached;\n }\n }\n\n // Concurrency dedupe: resuse in-flight promise if desired\n if (dedupe && pendingMap.has(key) && !force) {\n return pendingMap.get(key);\n }\n\n // Abort previous in-flight for the same key if requested\n if (abortPrevious && controllerMap.has(key)) {\n try {\n controllerMap.get(key).abort();\n } catch (error) {\n controllerMap.delete(key);\n pendingMap.delete(key);\n console.error('Failed to abort previous request', error);\n }\n }\n\n const controller = new AbortController();\n controllerMap.set(key, controller);\n\n const p = (async () => {\n try {\n const res = await dataFetcher(config, { signal: controller.signal });\n let payload = null;\n\n try {\n payload = await res.json();\n } catch {\n payload = null;\n }\n\n if (!res.ok) {\n const result = {\n data: null,\n error: { status: res.status, message: (payload && payload.message) || 'Request failed' },\n ts: nowTs,\n ttl: ttlMs\n };\n dataStore.set(key, result);\n publish(key, result);\n return result;\n }\n\n const result = { data: payload, error: null, ts: nowTs, ttl: ttlMs };\n dataStore.set(key, result);\n publish(key, result);\n return result;\n } catch (error) {\n if (error?.name === 'AbortError') {\n return { data: null, error: { status: 'ABORTED', message: error.message }, aborted: true }; \n }\n\n const result = { data: null, error: { status: 0, message: error?.message || 'Network error' }, ts: nowTs, ttl: ttlMs };\n dataStore.set(key, result);\n publish(key, result);\n return result;\n } finally {\n controllerMap.delete(key);\n pendingMap.delete(key);\n }\n })();\n\n pendingMap.set(key, p);\n return p;\n}\n\nexport async function invalidateCache(config, dataFetcher) {\n const key = getCacheKey(config);\n\n if (dataStore.has(key)) {\n dataStore.delete(key);\n }\n\n if (controllerMap.has(key)) {\n try {\n controllerMap.get(key).abort();\n } catch {}\n controllerMap.delete(key);\n }\n\n pendingMap.delete(key);\n await fetchDataWithCache(config, dataFetcher, { force: true, dedupe: false, abortPrevious: false });\n}\n\nexport function updateCache(config, data, options = {}) {\n const { ttlMs = 60000 } = options;\n const key = getCacheKey(config);\n const result = { data, error: null, ts: Date.now(), ttl: ttlMs };\n dataStore.set(key, result);\n publish(key, result);\n}"],"names":["dataStore","Map","pendingMap","controllerMap","sortObjectDeep","obj","Array","isArray","map","sortedKeys","Object","keys","sort","sortedObj","key","getCacheKey","config","String","normalizedConfig","JSON","stringify","subscribe","subscriber","has","get","component","sub","unsubscribe","async","fetchDataWithCache","dataFetcher","options","ttlMs","force","dedupe","abortPrevious","cached","nowTs","Date","now","ttl","ts","abort","error","delete","console","controller","AbortController","set","p","res","signal","payload","json","ok","result","data","status","message","publish","name","aborted","invalidateCache","updateCache"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var t=require("./index-Dtu_3V-z.cjs.js");const e=new Map,r=new Map,s=new Map;function a(t){if("object"!=typeof t||null===t)return t;if(Array.isArray(t))return t.map(a);const e=Object.keys(t).sort(),r={};for(const s of e)r[s]=a(t[s]);return r}function n(t){if(!t||"object"!=typeof t)return String(t);const e=a(t);return JSON.stringify(e)}function o(r,s){const a=n(r);e.has(a)&&s(e.get(a));const o={};return t.subscribe(o,a,s),()=>{t.unsubscribe(o,a,s)}}async function c(a,o,c={}){const{ttlMs:u=6e4,force:i=!1,dedupe:l=!0,abortPrevious:f=!0}=c,d=n(a),b=e.get(d),h=Date.now();if(b&&!i){const t=b.ttl??u;if(!b.ts||h-b.ts<=t)return b}if(l&&r.has(d)&&!i)return r.get(d);if(f&&s.has(d))try{s.get(d).abort()}catch(t){s.delete(d),r.delete(d),console.error("Failed to abort previous request",t)}const p=new AbortController;s.set(d,p);const g=(async()=>{try{const r=await o(a,{signal:p.signal});let s=null;try{s=await r.json()}catch{s=null}if(!r.ok){const a={data:null,error:{status:r.status,message:s&&s.message||"Request failed"},ts:h,ttl:u};return e.set(d,a),t.publish(d,a),a}const n={data:s,error:null,ts:h,ttl:u};return e.set(d,n),t.publish(d,n),n}catch(r){if("AbortError"===r?.name)return{data:null,error:{status:"ABORTED",message:r.message},aborted:!0};const s={data:null,error:{status:0,message:r?.message||"Network error"},ts:h,ttl:u};return e.set(d,s),t.publish(d,s),s}finally{s.delete(d),r.delete(d)}})();return r.set(d,g),g}async function u(t,a){const o=n(t);if(e.has(o)&&e.delete(o),s.has(o)){try{s.get(o).abort()}catch{}s.delete(o)}r.delete(o),await c(t,a,{force:!0,dedupe:!1,abortPrevious:!1})}function i(r,s,a={}){const{ttlMs:o=6e4}=a,c=n(r),u={data:s,error:null,ts:Date.now(),ttl:o};e.set(c,u),t.publish(c,u)}var l=Object.freeze({__proto__:null,fetchDataWithCache:c,invalidateCache:u,subscribe:o,updateCache:i});exports.fetchDataWithCache=c,exports.index=l,exports.invalidateCache=u,exports.subscribe=o,exports.updateCache=i;
|
|
2
|
+
//# sourceMappingURL=index-UhtWZvgp.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-UhtWZvgp.cjs.js","sources":["../../src/modules/kingdeeDataService/index.js"],"sourcesContent":["import { subscribe as sub, publish, unsubscribe } from \"../messageService\";\n\nconst dataStore = new Map(); // key -> Data\nconst pendingMap = new Map(); // key -> Promise\nconst controllerMap = new Map(); // key -> AbortController\n\n\n/**\n * Sort object or array recursively\n * @param {Object} obj object or array to sort\n * @erturns {Object} sorted object or array\n */\nfunction sortObjectDeep(obj) {\n if (typeof obj !== 'object' || obj === null) {\n return obj;\n }\n\n if (Array.isArray(obj)) {\n return obj.map(sortObjectDeep);\n }\n\n const sortedKeys = Object.keys(obj).sort();\n const sortedObj = {};\n\n for (const key of sortedKeys) {\n sortedObj[key] = sortObjectDeep(obj[key]);\n }\n\n return sortedObj;\n}\n\n/**\n * KWC cache key generator\n * @param {Object} config Wire Adapter config\n * @returns {String} cache key\n */\nfunction getCacheKey(config) {\n if (!config || typeof config !== 'object') {\n return String(config);\n }\n\n const normalizedConfig = sortObjectDeep(config);\n return JSON.stringify(normalizedConfig);\n}\n\n/**\n * Subscribe to data changes\n * @param {Object} config adapter config\n * @param {Function} subscriber callback to be called when data changes\n * @returns {Function} unsubscribe function\n */\nexport function subscribe(config, subscriber) {\n const key = getCacheKey(config);\n if (dataStore.has(key)) {\n subscriber(dataStore.get(key));\n }\n\n const component = {}\n sub(component, key, subscriber)\n return () => {\n unsubscribe(component, key, subscriber);\n }\n}\n\n/**\n * Fetch data with cache\n * @param {Object} config configuration to generate cache key and url\n * @param {Function} dataFetcher function to fetch data\n * @param {Object} options fetch options\n * @param {Number} options.ttlMs cache ttl in milliseconds\n * @param {Boolean} options.force force fetch refresh\n * @param {Boolean} options.dedupe dedupe requests\n * @param {Boolean} options.abortPrevious abort previous request\n * @returns {Promise} promise that resolves to data or error\n */\nexport async function fetchDataWithCache(config, dataFetcher, options = {}) {\n const { ttlMs = 60000, force = false, dedupe = true, abortPrevious = true } = options;\n const key = getCacheKey(config);\n const cached = dataStore.get(key);\n const nowTs = Date.now();\n\n // Return cached if not expired and not force\n if (cached && !force) {\n const ttl = cached.ttl ?? ttlMs;\n if (!cached.ts || (nowTs - cached.ts) <= ttl) {\n return cached;\n }\n }\n\n // Concurrency dedupe: resuse in-flight promise if desired\n if (dedupe && pendingMap.has(key) && !force) {\n return pendingMap.get(key);\n }\n\n // Abort previous in-flight for the same key if requested\n if (abortPrevious && controllerMap.has(key)) {\n try {\n controllerMap.get(key).abort();\n } catch (error) {\n controllerMap.delete(key);\n pendingMap.delete(key);\n console.error('Failed to abort previous request', error);\n }\n }\n\n const controller = new AbortController();\n controllerMap.set(key, controller);\n\n const p = (async () => {\n try {\n const res = await dataFetcher(config, { signal: controller.signal });\n let payload = null;\n\n try {\n payload = await res.json();\n } catch {\n payload = null;\n }\n\n if (!res.ok) {\n const result = {\n data: null,\n error: { status: res.status, message: (payload && payload.message) || 'Request failed' },\n ts: nowTs,\n ttl: ttlMs\n };\n dataStore.set(key, result);\n publish(key, result);\n return result;\n }\n\n const result = { data: payload, error: null, ts: nowTs, ttl: ttlMs };\n dataStore.set(key, result);\n publish(key, result);\n return result;\n } catch (error) {\n if (error?.name === 'AbortError') {\n return { data: null, error: { status: 'ABORTED', message: error.message }, aborted: true }; \n }\n\n const result = { data: null, error: { status: 0, message: error?.message || 'Network error' }, ts: nowTs, ttl: ttlMs };\n dataStore.set(key, result);\n publish(key, result);\n return result;\n } finally {\n controllerMap.delete(key);\n pendingMap.delete(key);\n }\n })();\n\n pendingMap.set(key, p);\n return p;\n}\n\nexport async function invalidateCache(config, dataFetcher) {\n const key = getCacheKey(config);\n\n if (dataStore.has(key)) {\n dataStore.delete(key);\n }\n\n if (controllerMap.has(key)) {\n try {\n controllerMap.get(key).abort();\n } catch {}\n controllerMap.delete(key);\n }\n\n pendingMap.delete(key);\n await fetchDataWithCache(config, dataFetcher, { force: true, dedupe: false, abortPrevious: false });\n}\n\nexport function updateCache(config, data, options = {}) {\n const { ttlMs = 60000 } = options;\n const key = getCacheKey(config);\n const result = { data, error: null, ts: Date.now(), ttl: ttlMs };\n dataStore.set(key, result);\n publish(key, result);\n}"],"names":["dataStore","Map","pendingMap","controllerMap","sortObjectDeep","obj","Array","isArray","map","sortedKeys","Object","keys","sort","sortedObj","key","getCacheKey","config","String","normalizedConfig","JSON","stringify","subscribe","subscriber","has","get","component","sub","unsubscribe","async","fetchDataWithCache","dataFetcher","options","ttlMs","force","dedupe","abortPrevious","cached","nowTs","Date","now","ttl","ts","abort","error","delete","console","controller","AbortController","set","p","res","signal","payload","json","ok","result","data","status","message","publish","name","aborted","invalidateCache","updateCache"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
function r(r,o){if(!window.spyApi||!window.spyApi.doPostActions)throw console.error("Current page is not a bos page"),new Error("Current page is not a bos page");if(!Array.isArray(o)||0===o.length)throw console.error("Payload must be an array"),new Error("Payload must be an array");for(let e of o){const{a:o,p:n}=e;window.spyApi.doPostActions(r,o,n)}}async function o(o,e={}){const n=await function(r,o={}){const{formId:e,parentPageId:n,params:i}=r,{version:t="v1",app:s,isv:a,url:c}=o;if(!t&&!c)throw new Error("version in config is required");if(!s&&!c)throw new Error("app in config is required");if(!e&&!c)throw new Error("formId is required");if(!a&&!c)throw new Error("isv in config is required");let w=c||`${location.pathname}kwc/${t}/${a}/${s}/kwcform/${e}/showconfig`;if(!c&&n&&(w=`${w}?parentPageId=${n}`),i&&Object.keys(i).length>0)try{const r=JSON.stringify(i),o=w.includes("?")?"&":"?";w=`${w}${o}params=${r}`}catch(r){console.error(r)}return new Promise((r,o)=>{fetch(w).then(r=>r.json()).then(o=>{r(o)}).catch(r=>{o(r)})})}(o,e);if(!n)throw new Error("showForm response is not valid");const{parentPageId:i,pageId:t}=o;r(t||i,n)}var e=Object.freeze({__proto__:null,default:r,showForm:o});export{o as a,e as i,r as s};
|
|
2
|
+
//# sourceMappingURL=index-qaD2HVRQ.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-qaD2HVRQ.esm.js","sources":["../../src/modules/sendBosPlatformEvent/index.js","../../src/modules/sendBosPlatformEvent/showForm.js"],"sourcesContent":["import showForm from \"./showForm\";\n\n/**\n * 转发 bos 平台相关指令\n */\nexport default function sendBosPlatformEvent(pageId, payload) {\n if (!window.spyApi || !window.spyApi.doPostActions) {\n console.error('Current page is not a bos page');\n throw new Error('Current page is not a bos page');\n }\n\n if (!Array.isArray(payload) || payload.length === 0) {\n console.error('Payload must be an array');\n throw new Error('Payload must be an array');\n }\n\n for (let _payload of payload) {\n const { a: action, p: param } = _payload\n window.spyApi.doPostActions(pageId, action, param);\n }\n}\n\nasync function showFormRequest(formConfig, config = {}) {\n const response = await showForm(formConfig, config);\n if (!response) {\n throw new Error('showForm response is not valid');\n }\n\n const { parentPageId, pageId } = formConfig;\n const payload = response;\n const pId = pageId || parentPageId;\n sendBosPlatformEvent(pId, payload);\n}\n\nexport {\n showFormRequest as showForm\n}","function showForm(formConfig, config = {}) {\n const { formId, parentPageId, params } = formConfig;\n const { version = 'v1', app, isv, url: customUrl } = config;\n if (!version && !customUrl) {\n throw new Error('version in config is required');\n }\n\n if (!app && !customUrl) {\n throw new Error('app in config is required');\n }\n\n if (!formId && !customUrl) {\n throw new Error('formId is required');\n }\n\n if (!isv && !customUrl) {\n throw new Error('isv in config is required');\n }\n\n let url = customUrl || `${location.pathname}kwc/${version}/${isv}/${app}/kwcform/${formId}/showconfig`;\n\n if (!customUrl && parentPageId) {\n url = `${url}?parentPageId=${parentPageId}`;\n }\n\n if (params && Object.keys(params).length > 0) {\n try {\n const _params = JSON.stringify(params);\n const sign = url.includes('?') ? '&' : '?'\n url = `${url}${sign}params=${_params}`\n } catch (error) {\n console.error(error);\n }\n }\n\n return new Promise((resolve, reject) => {\n fetch(url).then(response => {\n return response.json();\n }).then(data => {\n resolve(data)\n }).catch(error => {\n reject(error)\n })\n })\n}\n\nexport default showForm;"],"names":["sendBosPlatformEvent","pageId","payload","window","spyApi","doPostActions","console","error","Error","Array","isArray","length","_payload","a","action","p","param","async","showFormRequest","formConfig","config","response","formId","parentPageId","params","version","app","isv","url","customUrl","location","pathname","Object","keys","_params","JSON","stringify","sign","includes","Promise","resolve","reject","fetch","then","json","data","catch","showForm"],"mappings":"AAKe,SAASA,EAAqBC,EAAQC,GACnD,IAAKC,OAAOC,SAAWD,OAAOC,OAAOC,cAEnC,MADAC,QAAQC,MAAM,kCACR,IAAIC,MAAM,kCAGlB,IAAKC,MAAMC,QAAQR,IAA+B,IAAnBA,EAAQS,OAErC,MADAL,QAAQC,MAAM,4BACR,IAAIC,MAAM,4BAGlB,IAAK,IAAII,KAAYV,EAAS,CAC5B,MAAQW,EAAGC,EAAQC,EAAGC,GAAUJ,EAChCT,OAAOC,OAAOC,cAAcJ,EAAQa,EAAQE,EAC9C,CACF,CAEAC,eAAeC,EAAgBC,EAAYC,EAAS,IAClD,MAAMC,QCvBR,SAAkBF,EAAYC,EAAS,IACrC,MAAME,OAAEA,EAAMC,aAAEA,EAAYC,OAAEA,GAAWL,GACnCM,QAAEA,EAAU,KAAIC,IAAEA,EAAGC,IAAEA,EAAKC,IAAKC,GAAcT,EACrD,IAAKK,IAAYI,EACf,MAAM,IAAIrB,MAAM,iCAGlB,IAAKkB,IAAQG,EACX,MAAM,IAAIrB,MAAM,6BAGlB,IAAKc,IAAWO,EACd,MAAM,IAAIrB,MAAM,sBAGlB,IAAKmB,IAAQE,EACX,MAAM,IAAIrB,MAAM,6BAGlB,IAAIoB,EAAMC,GAAa,GAAGC,SAASC,eAAeN,KAAWE,KAAOD,aAAeJ,eAMnF,IAJKO,GAAaN,IAChBK,EAAM,GAAGA,kBAAoBL,KAG3BC,GAAUQ,OAAOC,KAAKT,GAAQb,OAAS,EACzC,IACE,MAAMuB,EAAUC,KAAKC,UAAUZ,GACzBa,EAAOT,EAAIU,SAAS,KAAO,IAAM,IACvCV,EAAM,GAAGA,IAAMS,WAAcH,GAC/B,CAAE,MAAO3B,GACPD,QAAQC,MAAMA,EAChB,CAGF,OAAO,IAAIgC,QAAQ,CAACC,EAASC,KAC3BC,MAAMd,GAAKe,KAAKtB,GACPA,EAASuB,QACfD,KAAKE,IACNL,EAAQK,KACPC,MAAMvC,IACPkC,EAAOlC,MAGb,CDrByBwC,CAAS5B,EAAYC,GAC5C,IAAKC,EACH,MAAM,IAAIb,MAAM,kCAGlB,MAAMe,aAAEA,EAAYtB,OAAEA,GAAWkB,EAGjCnB,EADYC,GAAUsB,EADNF,EAGlB"}
|
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.3",
|
|
4
4
|
"description": "shared-utils for kwc",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.cjs.js",
|
|
@@ -26,7 +26,9 @@
|
|
|
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",
|
|
30
29
|
"rollup-plugin-terser": "^7.0.2"
|
|
30
|
+
},
|
|
31
|
+
"devDependencies": {
|
|
32
|
+
"rollup-plugin-clear": "^2.0.7"
|
|
31
33
|
}
|
|
32
|
-
}
|
|
34
|
+
}
|
|
@@ -1,2 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,2 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|