@kdcloudjs/kwc-shared-utils 0.0.2 → 0.0.4

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.
Files changed (46) hide show
  1. package/README.md +109 -0
  2. package/dist/api/index.cjs.js +2 -0
  3. package/dist/api/index.cjs.js.map +1 -0
  4. package/dist/api/index.esm.js +2 -0
  5. package/dist/api/index.esm.js.map +1 -0
  6. package/dist/client/index.cjs.js +2 -0
  7. package/dist/client/index.cjs.js.map +1 -0
  8. package/dist/client/index.esm.js +2 -0
  9. package/dist/client/index.esm.js.map +1 -0
  10. package/dist/index.cjs.js +1 -1
  11. package/dist/index.cjs.js.map +1 -1
  12. package/dist/index.esm.js +1 -1
  13. package/dist/index.esm.js.map +1 -1
  14. package/dist/kingdeeDataService/index.cjs.js +2 -0
  15. package/dist/kingdeeDataService/index.cjs.js.map +1 -0
  16. package/dist/kingdeeDataService/index.esm.js +2 -0
  17. package/dist/kingdeeDataService/index.esm.js.map +1 -0
  18. package/dist/openApi/index.cjs.js +2 -0
  19. package/dist/openApi/index.cjs.js.map +1 -0
  20. package/dist/openApi/index.esm.js +2 -0
  21. package/dist/openApi/index.esm.js.map +1 -0
  22. package/dist/sendBosPlatformEvent/index.cjs.js +2 -0
  23. package/dist/sendBosPlatformEvent/index.cjs.js.map +1 -0
  24. package/dist/sendBosPlatformEvent/index.esm.js +2 -0
  25. package/dist/sendBosPlatformEvent/index.esm.js.map +1 -0
  26. package/dist/shared/index-B0ILkJm3.cjs.js +2 -0
  27. package/dist/shared/index-B0ILkJm3.cjs.js.map +1 -0
  28. package/dist/shared/index-B436uFgh.cjs.js +2 -0
  29. package/dist/shared/index-B436uFgh.cjs.js.map +1 -0
  30. package/dist/shared/index-C96d8r7U.cjs.js +2 -0
  31. package/dist/shared/index-C96d8r7U.cjs.js.map +1 -0
  32. package/dist/shared/index-CGzlSIt0.cjs.js +2 -0
  33. package/dist/shared/index-CGzlSIt0.cjs.js.map +1 -0
  34. package/dist/shared/index-CXYAeW-7.esm.js +2 -0
  35. package/dist/shared/index-CXYAeW-7.esm.js.map +1 -0
  36. package/dist/shared/index-KT-nyvfl.esm.js +2 -0
  37. package/dist/shared/index-KT-nyvfl.esm.js.map +1 -0
  38. package/dist/shared/index-RQMVLnNM.esm.js +2 -0
  39. package/dist/shared/index-RQMVLnNM.esm.js.map +1 -0
  40. package/dist/shared/index-UhtWZvgp.cjs.js +2 -0
  41. package/dist/shared/index-UhtWZvgp.cjs.js.map +1 -0
  42. package/dist/shared/index-pPqP08Tl.esm.js +2 -0
  43. package/dist/shared/index-pPqP08Tl.esm.js.map +1 -0
  44. package/dist/shared/index-qaD2HVRQ.esm.js +2 -0
  45. package/dist/shared/index-qaD2HVRQ.esm.js.map +1 -0
  46. package/package.json +6 -4
package/README.md ADDED
@@ -0,0 +1,109 @@
1
+ # KWC Shared Utils 使用文档
2
+
3
+ ## 概述
4
+ `@kdcloudjs/kwc-shared-utils` 是一个为 KWC 项目提供的共享工具库,包含:
5
+ - 客户端环境检测(`client`)
6
+ - 平台资源加载器(`platformResourceLoader`)
7
+ - OpenAPI 适配器与认证(`openApiAdapter`)
8
+ - 组件间消息中心(`messageService`)
9
+ - 其他实用模块(如 `kingdeeDataService`、`sendBosPlatformEvent`)
10
+
11
+ ## 安装
12
+ ```bash
13
+ npm install @kdcloudjs/kwc-shared-utils
14
+ ```
15
+
16
+ ## 导入
17
+ 支持 ES Module 和 CommonJS:
18
+ ```javascript
19
+ // ES Module
20
+ import { client, platformResourceLoader, openApiAdapter, messageService } from '@kdcloudjs/kwc-shared-utils'
21
+
22
+ // CommonJS
23
+ const { client, platformResourceLoader, openApiAdapter, messageService } = require('@kdcloudjs/kwc-shared-utils')
24
+ ```
25
+
26
+ ## 消息中心(发布-订阅)
27
+ 用于 React 组件与 Web Components 之间的解耦通信,支持本地与跨标签广播:
28
+ ```javascript
29
+ import { messageService } from '@kdcloudjs/kwc-shared-utils'
30
+
31
+ // 在组件实例上订阅(component 可为 React 组件实例或自定义元素实例)
32
+ const off = messageService.subscribe(component, 'user:login', (payload, { fromRemote }) => {
33
+ console.log('用户登录:', payload, '是否远程广播:', fromRemote)
34
+ })
35
+
36
+ // 发布消息(默认同时本地触发并跨标签广播)
37
+ messageService.publish('user:login', { id: 'u001', name: 'Alice' })
38
+
39
+ // 仅本地触发(不广播)
40
+ messageService.publish('user:login', { id: 'u001' }, { global: false })
41
+
42
+ // 取消订阅
43
+ off()
44
+
45
+ // 也可整体取消某组件在某事件上的订阅
46
+ messageService.unsubscribe(component, 'user:login')
47
+ ```
48
+ 特性:
49
+ - 使用 `BroadcastChannel`(自动降级到 `postMessage`)实现跨标签页/iframe 通信
50
+ - 每个组件实例的订阅以 `WeakMap` 管理,自动清理泄漏
51
+ - 错误隔离,单个订阅错误不会影响其他订阅者
52
+
53
+ ## OpenAPI 适配器与认证
54
+ 初始化认证并调用接口:
55
+ ```javascript
56
+ import { openApiAdapter } from '@kdcloudjs/kwc-shared-utils'
57
+
58
+ await openApiAdapter.initializeAuth({
59
+ endpoint: '/kapi/oauth2/getToken',
60
+ method: 'POST',
61
+ bodyParams: { /* appId、appSecret、nonce 等 */ },
62
+ // 仅内存存储(不持久化),无需也不接受其他存储策略
63
+ })
64
+
65
+ // 发起请求(示例:OpenAPI 服务调用)
66
+ const result = await openApiAdapter.doFetch({
67
+ endpointConfig: {
68
+ isv: 'kd', app: 'myapp', form: 'myform', serviceName: 'myservice', version: 'v2'
69
+ },
70
+ params: { query: 'test' }
71
+ })
72
+ ```
73
+
74
+ ### Token 存储安全
75
+ - 仅使用 `memory`(内存存储,不持久化),不支持 `session` 与 `local`,以最大限度降低 XSS 风险。
76
+ - 推荐由服务端设置 `HttpOnly`、`Secure`、`SameSite` 的 Cookie,通过接口换取临时访问令牌;前端不持久化 token。
77
+
78
+ ## 平台资源加载器
79
+ 动态加载外部脚本与样式:
80
+ ```javascript
81
+ import { platformResourceLoader } from '@kdcloudjs/kwc-shared-utils'
82
+
83
+ await platformResourceLoader.loadScript(document.head, 'https://example.com/script.js')
84
+ await platformResourceLoader.loadStyle(document.head, 'https://example.com/style.css')
85
+ ```
86
+ 特性:
87
+ - URL 级缓存,避免重复加载
88
+ - 支持 Promise 与回调
89
+
90
+ ## 客户端检测
91
+ 检测应用、浏览器与设备:
92
+ ```javascript
93
+ import { client } from '@kdcloudjs/kwc-shared-utils'
94
+
95
+ const appName = client.getAppName() // 'yunzhijia' | 'weixin' | 'dingding' 等
96
+ const isMobile = client.isMobile()
97
+ const browser = client.getBrowserName() // 'chrome' | 'edge' | 'safari' 等
98
+ ```
99
+
100
+ ## 构建与发布
101
+ 使用 Rollup 构建:
102
+ ```bash
103
+ npm run build
104
+ ```
105
+ 输出 `dist/`,含 CJS 与 ESM 两种格式,按模块分别打包并压缩。
106
+
107
+ ## 版本
108
+ - 当前版本:1.0.0
109
+ - 包名:`@kdcloudjs/kwc-shared-utils`
@@ -0,0 +1,2 @@
1
+ "use strict";var e=require("../shared/index-C96d8r7U.cjs.js");exports.AuthManager=e.AuthManager,exports.adapterApi=e.adapterApi,exports.authManager=e.authManager,exports.initializeAuth=e.initializeAuth,exports.isAuthenticated=e.isAuthenticated,exports.promiseApi=e.promiseApi;
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{A as AuthManager,a as adapterApi,b as authManager,c as initializeAuth,d as isAuthenticated,p as promiseApi}from"../shared/index-RQMVLnNM.esm.js";
2
+ //# sourceMappingURL=index.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ "use strict";var s=require("../shared/index-B436uFgh.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,Object.defineProperty(exports,"isMobile",{enumerable:!0,get:function(){return 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-pPqP08Tl.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-CKzrFqj6.cjs.js"),r=require("./shared/index-B0ILkJm3.cjs.js"),s=require("./shared/index-C96d8r7U.cjs.js"),i=require("./shared/index-B436uFgh.cjs.js"),d=require("./shared/index-Dtu_3V-z.cjs.js"),x=require("./shared/index-UhtWZvgp.cjs.js"),n=require("./shared/index-CGzlSIt0.cjs.js");exports.platformResourceLoader=e.index,exports.openApiAdapter=r.index,exports.bosApi=s.index,exports.client=i.index,exports.messageService=d.index,exports.kingdeeDataService=x.index,exports.sendBosPlatformEvent=n.index;
2
2
  //# sourceMappingURL=index.cjs.js.map
@@ -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":"yGAIA,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,YAAa,CAAA,EAC1BC,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,MAAMoB,GACNC,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,MAAMf,GACNC,QAAQD,MAAM,wCAChB,GAEJ,CAEA,iBAAM6D,GACJ,OAAKnF,KAAKiE,oBAINjE,KAAKI,kBAAoBJ,KAAKK,mBAC1BL,KAAKK,YACJL,KAAKiE,wBAFd,EAIF,EAGF,MAAMmB,EAAc,IAAItF,ECnNT,MAAMuF,EACnB,WAAAtF,CAAYuF,GACVtF,KAAKuF,KAAO,qBAEZvF,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,uEACdtB,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,OAAoB,IAAhBE,EAAKL,QAAsC,MAAnBK,EAAKD,UACxB,CAAEC,KAAMA,EAAKA,KAAMf,MAAO,MACL,QAAnBe,EAAKD,iBACRpC,KAAKoF,YAAY1C,qBAChB1C,KAAK4H,eAAejH,IAGtB,CACL0B,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,mBAAmBC,UAAU3D,WAAayD,EAAQzD,iBAGzBe,IAAvB0C,EAAQxD,aACVyD,mBAAmBC,UAAU1D,WAAawD,EAAQxD,iBAGvBc,IAAzB0C,EAAQrD,eACVsD,mBAAmBC,UAAUvD,aAAeqD,EAAQrD,aAExD,ECrMF,SAASwD,EAAY3I,GACnB,IAAKA,IAAWA,EAAO4I,eACrB,MAAM,IAAI7H,MAAM,sBAGlB,MAAM6H,eAAEA,GAAmB5I,EAC3B,GAA8B,iBAAnB4I,EAA6B,OAAO5I,EAC/C,GAAI4I,EAAe3I,SAAU,OAAO2I,EAAe3I,SACnD,IAAK2I,EAAeC,IAClB,MAAM,IAAI9H,MAAM,+BAGlB,IAAK6H,EAAeE,IAClB,MAAM,IAAI/H,MAAM,+BAGlB,IAAK6H,EAAeG,KAClB,MAAM,IAAIhI,MAAM,gCAGlB,IAAK6H,EAAeI,YAClB,MAAM,IAAIjI,MAAM,uCAGlB,MAAO,SAAS6H,EAAeK,SAAW,QAAQL,EAAeC,OAAOD,EAAeE,OAAOF,EAAeG,QAAQH,EAAeI,aACtI,CAEO,MAAME,EA5Fb,SAA2BC,EAAgB,MAAOC,EAAgB,CAAA,GA4BhE,OA3BA,SAA6BC,GAC3B,GAAoC,mBAAzBA,EAAqC,CAC9C,MAAMC,EAAU,IAAIb,EAAmBY,GAEjCE,EAAiBD,EAAQ9D,OAAOgE,KAAKF,GAgB3C,OAfAA,EAAQ9D,OAAS,SAAUxF,GACzB,MAAMyJ,EAAa,CACjBxJ,SAAU0I,EAAY3I,GACtBE,OAAQiJ,KACLC,KACApJ,GAQL,cANOyJ,EAAWb,eAEd5I,GAA4B,iBAAXA,IAAwBA,EAAOC,WAClDwJ,EAAWnJ,OAASN,EAAOM,QAAUN,GAGhCuJ,EAAeE,EACxB,EACOH,CACT,CAEE,OAQNI,eAAiCP,EAAeC,EAAepJ,SAEvDyE,EAAYD,cAGlB,MAAMiF,EAAa,CACjBxJ,SAAU0I,EAAY3I,GACtBE,OAAQiJ,KACLC,KACApJ,UAEEyJ,EAAWb,eAGd5I,GAA4B,iBAAXA,IAAwBA,EAAOC,WAClDwJ,EAAWnJ,OAASN,EAAOM,QAAUN,GAGvC,OAAO,IAAImI,QAAQ,CAACC,EAASuB,KAC3B,MAAML,EAAU,IAAIb,EAAoB3H,IAClCA,EAAOH,MACTgJ,EAAO7I,EAAOH,OAEdyH,EAAQtH,KAKZwI,EAAQ/D,UACR+D,EAAQ9D,OAAOiE,IAEnB,CAvCaG,CAAkBT,EAAeC,EADzBC,GAAwB,CAAA,EAI3C,CAEF,CA+DuBQ,CAAkB,iGF2HlCH,eAA8B1J,GACnC,aAAayE,EAAY1E,WAAWC,EACtC,kBAEO,WACL,OAAOyE,EAAYnB,iBACrB,IGhOA,MAAMwG,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,CCpDO,SAASO,IACd,MAAMZ,EAAYD,UAAUC,UAAUa,cACtC,MAAO,eAAeZ,KAAKD,KAAe,0CAA0CC,KAAKD,EAC3F,CAEO,SAASc,IACd,MAAMd,EAAYD,UAAUC,UAAUa,cACtC,MAAO,MAAMZ,KAAKD,EACpB,CAEO,SAASe,IACd,MAAMf,EAAYD,UAAUC,UAAUa,cACtC,MAAO,OAAOZ,KAAKD,KAAe,MAAMC,KAAKD,EAC/C,CAEO,SAASgB,IACd,OAAOF,KAAoBC,GAC7B,CAEO,SAASE,IACd,MAAMjB,EAAYD,UAAUC,UAAUa,cACtC,MAAO,gBAAgBZ,KAAKD,EAC9B,CAEO,SAASkB,IACd,MAAMlB,EAAYD,UAAUC,UAAUa,cACtC,MAAO,eAAeZ,KAAKD,EAC7B,CAEO,SAASmB,IACd,MAAMnB,EAAYD,UAAUC,UAAUa,cACtC,MAAO,SAASZ,KAAKD,KAAe,wCAAwCC,KAAKD,EACnF,CAEA,MAAMoB,EACI,SADJA,EAEE,OAFFA,EAGK,UAHLA,EAIA,KAJAA,EAKI,SALJA,EAMK,UCxCJ,SAASC,IACd,MAAMvB,EAAQC,UAAUC,UAAUa,cAC5BS,EAAgB,iBAAkBC,QAAUxB,UAAUyB,eAAiB,GAAKzB,UAAU0B,iBAAmB,EAE/G,MAAQ,iEAAiExB,KAAKH,IAAYwB,GAAiBC,OAAOG,YAD3F,IAEzB,gDFiDO,WACL,OAAI7B,IAAgBD,EACXM,IAAuBN,EACvBO,IAA0BP,EAC1BQ,IAAeR,EACfU,IAAmBV,EACnBW,IAAeX,EACfc,EAAiBd,EACjBe,IAAmBf,EAChBA,CACd,iBCrBO,WACL,OAAIgB,IAAmBQ,EACdJ,IAAiBI,EACjBH,IAAoBG,EACpBD,IAAmBC,EACnBF,IAAeE,EACZA,CACd,2GC3CO,WACL,OAAQC,GACV"}
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-D_DekteB.esm.js";export{i as openApiAdapter}from"./shared/index-CXYAeW-7.esm.js";export{i as bosApi}from"./shared/index-RQMVLnNM.esm.js";export{i as client}from"./shared/index-pPqP08Tl.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
@@ -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,2 @@
1
+ import"../shared/index-ChQWdmu9.esm.js";export{f as fetchDataWithCache,a as invalidateCache,s as subscribe,u as updateCache}from"../shared/index-KT-nyvfl.esm.js";
2
+ //# sourceMappingURL=index.esm.js.map
@@ -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,2 @@
1
+ export{A as AuthManager,a as authManager,d as doFetch,b as initializeAuth,c as isAuthenticated}from"../shared/index-CXYAeW-7.esm.js";
2
+ //# sourceMappingURL=index.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../shared/index-CGzlSIt0.cjs.js");exports.default=e.sendBosPlatformEvent,exports.showForm=e.showFormRequest;
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{s as default,a as showForm}from"../shared/index-qaD2HVRQ.esm.js";
2
+ //# sourceMappingURL=index.esm.js.map
@@ -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
+ "use strict";const e="yunzhijia",t="yunzhijia_desktop",n="yunzhijia_old_desktop",r="weixin",o="dingding",i="wxwork",s="welink",u="feishu",a="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 A(){return g()?e:c()?t:d()?n:x()?r:f()?i:p()?o:w?s:k()?u:a}function h(){const e=navigator.userAgent.toLowerCase();return/chrome|crios/.test(e)&&!/edg|edge|opr|opera|fxios|samsungbrowser/.test(e)}function m(){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 m()||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 j="chrome",z="edge",D="firefox",M="ie",E="safari",P="unknown";function W(){return h()?j:l()?z:O()?D:L()?E:C()?M:P}function b(){const e=navigator.userAgent.toLowerCase();b=/Android|iPhone|iPad/i.test(e)||/Harmony/i.test(e)&&/Mobile/i.test(e);const t="ontouchstart"in window||navigator.maxTouchPoints>0,n=/Macintosh/i.test(e)&&t;return b||n}function y(){return!b()}var _=Object.freeze({__proto__:null,getAppName:A,getBrowserName:W,isChrome:h,isChromiumEdge:m,isDD:p,isEdge:l,isFeiShu:k,isFirefox:O,isIE:C,isLegacyEdge:v,get isMobile(){return b},isPC:y,isSafari:L,isWX:x,isWeLink:w,isWxWork:f,isYzj:g,isYzjDesktop:c,isYzjOldDesktop:d});exports.getApp=A,exports.getBrowser=W,exports.index=_,exports.isChrome=h,exports.isChromiumEdge=m,exports.isDD=p,exports.isEdge=l,exports.isFeiShu=k,exports.isFirefox=O,exports.isIE=C,exports.isLegacyEdge=v,exports.isMobile=b,exports.isPC=y,exports.isSafari=L,exports.isWX=x,exports.isWeLink=w,exports.isWxWork=f,exports.isYzj=g,exports.isYzjDesktop=c,exports.isYzjOldDesktop=d;
2
+ //# sourceMappingURL=index-B436uFgh.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-B436uFgh.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 userAgent = navigator.userAgent.toLowerCase()\n isMobile = /Android|iPhone|iPad/i.test(userAgent) || (/Harmony/i.test(userAgent) && /Mobile/i.test(userAgent))\n\n // 检测触摸屏设备(增强平板识别)\n const isTouchScreen = 'ontouchstart' in window || navigator.maxTouchPoints > 0\n\n // 特殊处理iPad:iPadOS 13+的UA包含Macintosh但支持触摸\n const isiPad = /Macintosh/i.test(userAgent) && isTouchScreen\n\n return isMobile || isiPad\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","isTouchScreen","window","maxTouchPoints","isiPad","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,MAAMvB,EAAYD,UAAUC,UAAUc,cACtCS,EAAW,uBAAuBtB,KAAKD,IAAe,WAAWC,KAAKD,IAAc,UAAUC,KAAKD,GAGnG,MAAMwB,EAAgB,iBAAkBC,QAAU1B,UAAU2B,eAAiB,EAGvEC,EAAS,aAAa1B,KAAKD,IAAcwB,EAE/C,OAAOD,GAAYI,CACrB,CAEO,SAASC,IACd,OAAQL,GACV"}
@@ -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:r,method:i}=this.authConfig;try{const n=await fetch(t,{method:i,headers:e,body:JSON.stringify(r)});if(!n.ok)throw new Error(`Authentication failed: ${n.status} - ${n.statusText}`);const a=await n.json();if(!0===a.status&&"0"===a.errorCode)return this.accessToken=a.data.access_token,this.refreshToken=a.data.refresh_token,this.saveTokensToStorage(),a;throw new Error(`Authentication failed: ${a.errorCode} - ${a.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(r=>{try{r(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 r(t){return await e.initialize(t)}function i(){return e.isAuthenticated()}class n{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),r=this.getCachedData(e);if(r)return void this.dataCallback(r);let i=null;for(let r=0;r<this.maxRetries;r++)try{const r=await this.performRequest(t);return this.setCacheData(e,r),void this.dataCallback(r)}catch(t){if(i=t,t&&"AbortError"===t.name)return;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(t){const{endpoint:e,method:r="GET",params:i={},headers:n={}}=t;this.abortController&&this.abortController.abort(),this.abortController=new AbortController;let a=e;if("GET"===r&&i){a=`${a}?${new URLSearchParams(i).toString()}`}const s={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(a,s);if(!o.ok)throw new Error(`HTTP error! Status: ${o.status} - ${o.statusText}`);const c=await o.json();return c?{data:c,error:null}:{data:null,error:{message:c.message,errorCode:c.errorCode,status:c.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,e){if(!t&&!e)throw new Error("No config provided");if(!t?.endpointConfig&&!e?.endpointConfig)throw new Error("No endpointConfig provided");let r=t?.endpointConfig,i=e?.endpointConfig;if("string"==typeof r)return r;if("string"==typeof i)return i;if(r&&r.endpoint)return r.endpoint;if(i&&i.endpoint)return i.endpoint;r=r||{},i=i||{};const n=r.isv||i.isv||"kd",a=r.app||i.app,s=r.source||i.source,o=r.version||i.version||"v1",c=r.sourceId||i.sourceId,h=r.subSource||i.subSource,u=r.action||i.action;if(!a)throw new Error("Invalid config app provided");if(!s)throw new Error("Invalid config source provided");let d=`${location.pathname}kwc/${o}/${n}/${a}/${s}`;return c&&(d+=`/${c}`,h&&(d+=`/${h}`),u&&(d+=`/${u}`)),d.startsWith("/")||(d=`/${d}`),d}function s(t="GET",e={}){return function(r){if("function"!=typeof r)throw new Error("Adapter API expects a data callback function");const i=new n(r),s=i.update.bind(i);return i.update=function(r){const i={endpoint:a(r,e),method:t,...e,...r};return delete i.endpointConfig,r&&"object"==typeof r&&!r.endpoint&&(i.params=r.params),s(i)},i}}const o=s("GET"),c=s("POST"),h=s("DELETE"),u=s("PUT"),d=s("PATCH");var l=Object.freeze({__proto__:null,doDelete:h,doGet:o,doPatch:d,doPost:c,doPut:u});function g(t,e){if(!t&&!e)throw new Error("No config provided");if(!t?.endpointConfig&&!e?.endpointConfig)throw new Error("No endpointConfig provided");let r=t?.endpointConfig,i=e?.endpointConfig;if("string"==typeof r)return r;if("string"==typeof i)return i;if(r&&r.endpoint)return r.endpoint;if(i&&i.endpoint)return i.endpoint;r=r||{},i=i||{};const n=r.isv||i.isv||"kd",a=r.app||i.app,s=r.source||i.source,o=r.version||i.version||"v1",c=r.sourceId||i.sourceId,h=r.subSource||i.subSource,u=r.action||i.action;if(!a)throw new Error("Invalid config app provided");if(!s)throw new Error("Invalid config source provided");let d=`${location.pathname}kwc/${o}/${n}/${a}/${s}`;return c&&(d+=`/${c}`,h&&(d+=`/${h}`),u&&(d+=`/${u}`)),d.startsWith("/")||(d=`/${d}`),d}function p(t="GET",e={}){return function(r={}){const i={endpoint:g(r,e),method:t,...e,...r};delete i.endpointConfig,r&&"object"==typeof r&&!r.endpoint&&(i.params=r.params);let a=null,s=!1,o=null;return function(t,e,r){const i=t=>{try{Object.defineProperty(t,"cancel",{value:e,configurable:!0,enumerable:!1}),Object.defineProperty(t,"adapter",{get:()=>r,configurable:!0,enumerable:!1})}catch{}const n=t.then.bind(t),a=t.catch.bind(t),s=t.finally?t.finally.bind(t):void 0;return t.then=(...t)=>{const e=n(...t);return i(e),e},t.catch=(...t)=>{const e=a(...t);return i(e),e},s&&(t.finally=(...t)=>{const e=s(...t);return i(e),e}),t};return i(t)}(new Promise((t,e)=>{o=e,a=new n(r=>{if(!s){s=!0;try{a&&a.disconnect()}catch{}r.error?e(r.error):t(r)}}),a.connect(),a.update(i)}),()=>{if(!a)return{aborted:!1,removed:!1};let t=!1;try{a.abortController&&(a.abortController.abort(),t=!0)}catch{}!s&&o&&(s=!0,o({message:"Request canceled",status:"CANCELED"}));try{a.disconnect()}catch{}return{aborted:t,removed:!1}},a)}}const f=p("GET"),m=p("POST"),y=p("DELETE"),w=p("PUT"),_=p("PATCH");var k=Object.freeze({__proto__:null,doDelete:y,doGet:f,doPatch:_,doPost:m,doPut:w}),T=Object.freeze({__proto__:null,AuthManager:t,adapterApi:l,authManager:e,initializeAuth:r,isAuthenticated:i,promiseApi:k});exports.AuthManager=t,exports.adapterApi=l,exports.authManager=e,exports.index=T,exports.initializeAuth=r,exports.isAuthenticated=i,exports.promiseApi=k;
2
+ //# sourceMappingURL=index-C96d8r7U.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-C96d8r7U.cjs.js","sources":["../../src/modules/api/authManager.js","../../src/modules/api/adapter.js","../../src/modules/api/adapterApi.js","../../src/modules/api/promiseApi.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 = '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(cachedData);\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 (error && error.name === 'AbortError') {\n return;\n }\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 Adapter from './adapter'\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\nfunction createAdapterMethod(defaultMethod = 'GET', defaultConfig = {}) {\n return function adapterFactory(dataCallback) {\n if (typeof dataCallback !== 'function') {\n throw new Error('Adapter API expects a data callback function');\n }\n\n const adapter = new Adapter(dataCallback);\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\n // 注:适配器方式不提供取消能力;如需取消请使用 promiseApi。\n\n return adapter;\n }\n}\n\nexport const doGet = createAdapterMethod('GET')\nexport const doPost = createAdapterMethod('POST')\nexport const doDelete = createAdapterMethod('DELETE')\nexport const doPut = createAdapterMethod('PUT')\nexport const doPatch = createAdapterMethod('PATCH')","import Adapter from './adapter'\n\n// 将取消能力附加到 Promise,并在链式调用中继承\nfunction attachCancelable(basePromise, cancel, adapter) {\n const setCancelable = (p) => {\n try {\n Object.defineProperty(p, 'cancel', { value: cancel, configurable: true, enumerable: false });\n Object.defineProperty(p, 'adapter', { get: () => adapter, configurable: true, enumerable: false });\n } catch {}\n\n const nativeThen = p.then.bind(p);\n const nativeCatch = p.catch.bind(p);\n const nativeFinally = p.finally ? p.finally.bind(p) : undefined;\n\n p.then = (...args) => {\n const next = nativeThen(...args);\n setCancelable(next);\n return next;\n }\n\n p.catch = (...args) => {\n const next = nativeCatch(...args);\n setCancelable(next);\n return next;\n }\n\n if (nativeFinally) {\n p.finally = (...args) => {\n const next = nativeFinally(...args);\n setCancelable(next);\n return next;\n }\n }\n\n return p;\n }\n\n return setCancelable(basePromise);\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\nfunction createPromiseMethod(defaultMethod = 'GET', defaultConfig = {}) {\n return function promiseCall(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 let adapter = null;\n let isSettled = false;\n let rejectRef = null;\n\n const promise = new Promise((resolve, reject) => {\n rejectRef = reject;\n adapter = new Adapter((result) => {\n if (isSettled) return;\n isSettled = true;\n try { adapter && adapter.disconnect(); } catch {}\n\n if (result.error) {\n reject(result.error);\n } else {\n resolve(result);\n }\n });\n\n adapter.connect();\n adapter.update(fullConfig);\n });\n\n const cancel = () => {\n if (!adapter) return { aborted: false, removed: false };\n let aborted = false;\n try {\n if (adapter.abortController) {\n adapter.abortController.abort();\n aborted = true;\n }\n } catch {}\n if (!isSettled && rejectRef) {\n isSettled = true;\n rejectRef({ message: 'Request canceled', status: 'CANCELED' });\n }\n try { adapter.disconnect(); } catch {}\n return { aborted, removed: false };\n }\n\n return attachCancelable(promise, cancel, adapter);\n }\n}\n\nexport const doGet = createPromiseMethod('GET')\nexport const doPost = createPromiseMethod('POST')\nexport const doDelete = createPromiseMethod('DELETE')\nexport const doPut = createPromiseMethod('PUT')\nexport const doPatch = createPromiseMethod('PATCH')"],"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","cachedData","getCachedData","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","getEndpoint","defaultConfig","endpointConfig","defaultEndpointConfig","isv","app","source","version","sourceId","subSource","action","location","pathname","startsWith","createAdapterMethod","defaultMethod","adapter","originalUpdate","bind","fullConfig","doGet","doPost","doDelete","doPut","doPatch","createPromiseMethod","isSettled","rejectRef","basePromise","cancel","setCancelable","p","Object","defineProperty","configurable","enumerable","nativeThen","then","nativeCatch","catch","nativeFinally","finally","args","attachCancelable","reject","aborted","removed"],"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
+ 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
+ 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:r,method:n}=this.authConfig;try{const i=await fetch(t,{method:n,headers:e,body:JSON.stringify(r)});if(!i.ok)throw new Error(`Authentication failed: ${i.status} - ${i.statusText}`);const a=await i.json();if(!0===a.status&&"0"===a.errorCode)return this.accessToken=a.data.access_token,this.refreshToken=a.data.refresh_token,this.saveTokensToStorage(),a;throw new Error(`Authentication failed: ${a.errorCode} - ${a.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(r=>{try{r(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 r(t){return await e.initialize(t)}function n(){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),r=this.getCachedData(e);if(r)return void this.dataCallback(r);let n=null;for(let r=0;r<this.maxRetries;r++)try{const r=await this.performRequest(t);return this.setCacheData(e,r),void this.dataCallback(r)}catch(t){if(n=t,t&&"AbortError"===t.name)return;r<this.maxRetries&&await this.delay(this.retryDelay*Math.pow(2,r))}this.dataCallback({data:null,error:{message:n.message,status:n.status||"NETWORK_ERROR",retries:this.maxRetries}})}async performRequest(t){const{endpoint:e,method:r="GET",params:n={},headers:i={}}=t;this.abortController&&this.abortController.abort(),this.abortController=new AbortController;let a=e;if("GET"===r&&n){a=`${a}?${new URLSearchParams(n).toString()}`}const s={method:r,headers:{"Content-Type":"application/json",access_token:this.authManager.getAccessToken(),...i},body:"GET"===r?null:JSON.stringify(n),signal:this.abortController.signal},o=await fetch(a,s);if(!o.ok)throw new Error(`HTTP error! Status: ${o.status} - ${o.statusText}`);const c=await o.json();return c?{data:c,error:null}:{data:null,error:{message:c.message,errorCode:c.errorCode,status:c.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,e){if(!t&&!e)throw new Error("No config provided");if(!t?.endpointConfig&&!e?.endpointConfig)throw new Error("No endpointConfig provided");let r=t?.endpointConfig,n=e?.endpointConfig;if("string"==typeof r)return r;if("string"==typeof n)return n;if(r&&r.endpoint)return r.endpoint;if(n&&n.endpoint)return n.endpoint;r=r||{},n=n||{};const i=r.isv||n.isv||"kd",a=r.app||n.app,s=r.source||n.source,o=r.version||n.version||"v1",c=r.sourceId||n.sourceId,h=r.subSource||n.subSource,u=r.action||n.action;if(!a)throw new Error("Invalid config app provided");if(!s)throw new Error("Invalid config source provided");let d=`${location.pathname}kwc/${o}/${i}/${a}/${s}`;return c&&(d+=`/${c}`,h&&(d+=`/${h}`),u&&(d+=`/${u}`)),d.startsWith("/")||(d=`/${d}`),d}function s(t="GET",e={}){return function(r){if("function"!=typeof r)throw new Error("Adapter API expects a data callback function");const n=new i(r),s=n.update.bind(n);return n.update=function(r){const n={endpoint:a(r,e),method:t,...e,...r};return delete n.endpointConfig,r&&"object"==typeof r&&!r.endpoint&&(n.params=r.params),s(n)},n}}const o=s("GET"),c=s("POST"),h=s("DELETE"),u=s("PUT"),d=s("PATCH");var l=Object.freeze({__proto__:null,doDelete:h,doGet:o,doPatch:d,doPost:c,doPut:u});function g(t,e){if(!t&&!e)throw new Error("No config provided");if(!t?.endpointConfig&&!e?.endpointConfig)throw new Error("No endpointConfig provided");let r=t?.endpointConfig,n=e?.endpointConfig;if("string"==typeof r)return r;if("string"==typeof n)return n;if(r&&r.endpoint)return r.endpoint;if(n&&n.endpoint)return n.endpoint;r=r||{},n=n||{};const i=r.isv||n.isv||"kd",a=r.app||n.app,s=r.source||n.source,o=r.version||n.version||"v1",c=r.sourceId||n.sourceId,h=r.subSource||n.subSource,u=r.action||n.action;if(!a)throw new Error("Invalid config app provided");if(!s)throw new Error("Invalid config source provided");let d=`${location.pathname}kwc/${o}/${i}/${a}/${s}`;return c&&(d+=`/${c}`,h&&(d+=`/${h}`),u&&(d+=`/${u}`)),d.startsWith("/")||(d=`/${d}`),d}function p(t="GET",e={}){return function(r={}){const n={endpoint:g(r,e),method:t,...e,...r};delete n.endpointConfig,r&&"object"==typeof r&&!r.endpoint&&(n.params=r.params);let a=null,s=!1,o=null;return function(t,e,r){const n=t=>{try{Object.defineProperty(t,"cancel",{value:e,configurable:!0,enumerable:!1}),Object.defineProperty(t,"adapter",{get:()=>r,configurable:!0,enumerable:!1})}catch{}const i=t.then.bind(t),a=t.catch.bind(t),s=t.finally?t.finally.bind(t):void 0;return t.then=(...t)=>{const e=i(...t);return n(e),e},t.catch=(...t)=>{const e=a(...t);return n(e),e},s&&(t.finally=(...t)=>{const e=s(...t);return n(e),e}),t};return n(t)}(new Promise((t,e)=>{o=e,a=new i(r=>{if(!s){s=!0;try{a&&a.disconnect()}catch{}r.error?e(r.error):t(r)}}),a.connect(),a.update(n)}),()=>{if(!a)return{aborted:!1,removed:!1};let t=!1;try{a.abortController&&(a.abortController.abort(),t=!0)}catch{}!s&&o&&(s=!0,o({message:"Request canceled",status:"CANCELED"}));try{a.disconnect()}catch{}return{aborted:t,removed:!1}},a)}}const f=p("GET"),m=p("POST"),y=p("DELETE"),w=p("PUT"),_=p("PATCH");var k=Object.freeze({__proto__:null,doDelete:y,doGet:f,doPatch:_,doPost:m,doPut:w}),T=Object.freeze({__proto__:null,AuthManager:t,adapterApi:l,authManager:e,initializeAuth:r,isAuthenticated:n,promiseApi:k});export{t as A,l as a,e as b,r as c,n as d,T as i,k as p};
2
+ //# sourceMappingURL=index-RQMVLnNM.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-RQMVLnNM.esm.js","sources":["../../src/modules/api/authManager.js","../../src/modules/api/adapter.js","../../src/modules/api/adapterApi.js","../../src/modules/api/promiseApi.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 = '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(cachedData);\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 (error && error.name === 'AbortError') {\n return;\n }\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 Adapter from './adapter'\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\nfunction createAdapterMethod(defaultMethod = 'GET', defaultConfig = {}) {\n return function adapterFactory(dataCallback) {\n if (typeof dataCallback !== 'function') {\n throw new Error('Adapter API expects a data callback function');\n }\n\n const adapter = new Adapter(dataCallback);\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\n // 注:适配器方式不提供取消能力;如需取消请使用 promiseApi。\n\n return adapter;\n }\n}\n\nexport const doGet = createAdapterMethod('GET')\nexport const doPost = createAdapterMethod('POST')\nexport const doDelete = createAdapterMethod('DELETE')\nexport const doPut = createAdapterMethod('PUT')\nexport const doPatch = createAdapterMethod('PATCH')","import Adapter from './adapter'\n\n// 将取消能力附加到 Promise,并在链式调用中继承\nfunction attachCancelable(basePromise, cancel, adapter) {\n const setCancelable = (p) => {\n try {\n Object.defineProperty(p, 'cancel', { value: cancel, configurable: true, enumerable: false });\n Object.defineProperty(p, 'adapter', { get: () => adapter, configurable: true, enumerable: false });\n } catch {}\n\n const nativeThen = p.then.bind(p);\n const nativeCatch = p.catch.bind(p);\n const nativeFinally = p.finally ? p.finally.bind(p) : undefined;\n\n p.then = (...args) => {\n const next = nativeThen(...args);\n setCancelable(next);\n return next;\n }\n\n p.catch = (...args) => {\n const next = nativeCatch(...args);\n setCancelable(next);\n return next;\n }\n\n if (nativeFinally) {\n p.finally = (...args) => {\n const next = nativeFinally(...args);\n setCancelable(next);\n return next;\n }\n }\n\n return p;\n }\n\n return setCancelable(basePromise);\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\nfunction createPromiseMethod(defaultMethod = 'GET', defaultConfig = {}) {\n return function promiseCall(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 let adapter = null;\n let isSettled = false;\n let rejectRef = null;\n\n const promise = new Promise((resolve, reject) => {\n rejectRef = reject;\n adapter = new Adapter((result) => {\n if (isSettled) return;\n isSettled = true;\n try { adapter && adapter.disconnect(); } catch {}\n\n if (result.error) {\n reject(result.error);\n } else {\n resolve(result);\n }\n });\n\n adapter.connect();\n adapter.update(fullConfig);\n });\n\n const cancel = () => {\n if (!adapter) return { aborted: false, removed: false };\n let aborted = false;\n try {\n if (adapter.abortController) {\n adapter.abortController.abort();\n aborted = true;\n }\n } catch {}\n if (!isSettled && rejectRef) {\n isSettled = true;\n rejectRef({ message: 'Request canceled', status: 'CANCELED' });\n }\n try { adapter.disconnect(); } catch {}\n return { aborted, removed: false };\n }\n\n return attachCancelable(promise, cancel, adapter);\n }\n}\n\nexport const doGet = createPromiseMethod('GET')\nexport const doPost = createPromiseMethod('POST')\nexport const doDelete = createPromiseMethod('DELETE')\nexport const doPut = createPromiseMethod('PUT')\nexport const doPatch = createPromiseMethod('PATCH')"],"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","cachedData","getCachedData","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","getEndpoint","defaultConfig","endpointConfig","defaultEndpointConfig","isv","app","source","version","sourceId","subSource","action","location","pathname","startsWith","createAdapterMethod","defaultMethod","adapter","originalUpdate","bind","fullConfig","doGet","doPost","doDelete","doPut","doPatch","createPromiseMethod","isSettled","rejectRef","basePromise","cancel","setCancelable","p","Object","defineProperty","configurable","enumerable","nativeThen","then","nativeCatch","catch","nativeFinally","finally","args","attachCancelable","reject","aborted","removed"],"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,EAKjBuF,eAAeC,EAAe3E,GACnC,aAAayE,EAAY1E,WAAWC,EACtC,CAEO,SAASsD,IACd,OAAOmB,EAAYnB,iBACrB,CC9Ne,MAAMsB,EACnB,WAAAxF,CAAYyF,GACVxF,KAAKyF,KAAO,iBAEZzF,KAAKwF,aAAeA,EACpBxF,KAAKW,OAAS,CAAA,EACdX,KAAK0F,gBAAkB,KAEvB1F,KAAK2F,WAAa,EAClB3F,KAAK4F,WAAa,EAClB5F,KAAK6F,WAAa,IAClB7F,KAAK8F,MAAQ,IAAIC,IACjB/F,KAAKgG,aAAe,IAEpBhG,KAAKoF,YAAcA,EAGnBpF,KAAKiG,gBAAkB,IAAIF,IAC3B/F,KAAKkG,aAAe,GACpBlG,KAAKmG,mBAAoB,CAC3B,CAGA,OAAAC,GAAW,CAGX,MAAAC,CAAO1F,GACLX,KAAKW,OAAS,IAAKA,GACnBX,KAAK2F,WAAa,EAEd3F,KAAKsG,gBAAgB3F,GACvBX,KAAKuG,mBAAmB5F,GAExBX,KAAKwF,aAAa,CAAEnD,KAAM,KAAMf,MAAO,MAE3C,CAGA,UAAAkF,GACMxG,KAAK0F,iBACP1F,KAAK0F,gBAAgBe,QAGvBzG,KAAK8F,MAAMY,QACX1G,KAAKiG,gBAAgBS,QACrB1G,KAAKkG,aAAe,GACpBlG,KAAKmG,mBAAoB,CAC3B,CAEA,iBAAMhB,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,eAAAqC,CAAiB3F,GACf,OAAOA,GAAUA,EAAOC,eAAgC+F,IAApBhG,EAAOC,QAC7C,CAEA,wBAAM2F,CAAmB5F,GACvB,MAAMiG,EAAa5G,KAAK6G,mBAAmBlG,GAE3C,GAAIX,KAAKiG,gBAAgBa,IAAIF,GAC3BrF,QAAQoB,IAAI,0BADd,CAKA3C,KAAKkG,aAAaa,KAAK,CAAEpG,SAAQiG,aAAYhC,SAAU5E,KAAK4E,WAC5D5E,KAAKiG,gBAAgBe,IAAIJ,GAAY,GAErC,UACQ5G,KAAKoF,YAAYD,aACzB,CAAE,MAAO7D,GAWP,OAVAC,QAAQD,MAAM,mEACdtB,KAAKwF,aAAa,CAChBnD,KAAM,KACNf,MAAO,CACLmB,QAAS,gBAAgBnB,EAAMmB,UAC/BT,OAAQ,cACRiF,cAAe3F,UAGnBtB,KAAKiG,gBAAgBlB,OAAO6B,EAE9B,CAEK5G,KAAKmG,mBACRnG,KAAKkH,qBAtBP,CAwBF,CAEA,yBAAMA,GAEJ,IADAlH,KAAKmG,mBAAoB,EAClBnG,KAAKkG,aAAaiB,OAAS,GAAG,CACnC,MAAMC,EAAUpH,KAAKkG,aAAamB,QAClC,UACQrH,KAAKsH,mBAAmBF,EAAQzG,OACxC,CAAE,MAAOW,GACPC,QAAQD,MAAM,uBAAwBA,EACxC,CAAC,QACCtB,KAAKiG,gBAAgBlB,OAAOqC,EAAQR,WACtC,OAGM5G,KAAKuH,MAAM,GACnB,CACAvH,KAAKmG,mBAAoB,CAC3B,CAEA,wBAAMmB,CAAmB3G,GACvB,MAAM6G,EAAWxH,KAAKyH,iBAAiB9G,GAEjC+G,EAAa1H,KAAK2H,cAAcH,GACtC,GAAIE,EAEF,YADA1H,KAAKwF,aAAakC,GAIpB,IAAIE,EAAY,KAChB,IAAK,IAAIC,EAAU,EAAGA,EAAU7H,KAAK4F,WAAYiC,IAC/C,IACE,MAAMpG,QAAezB,KAAK8H,eAAenH,GAIzC,OAFAX,KAAK+H,aAAaP,EAAU/F,QAC5BzB,KAAKwF,aAAa/D,EAEpB,CAAE,MAAOH,GAGP,GAFAsG,EAAYtG,EAERA,GAAwB,eAAfA,EAAMmE,KACjB,OAGEoC,EAAU7H,KAAK4F,kBACX5F,KAAKuH,MAAMvH,KAAK6F,WAAa1C,KAAK6E,IAAI,EAAGH,GAEnD,CAGF7H,KAAKwF,aAAa,CAChBnD,KAAM,KACNf,MAAO,CACLmB,QAASmF,EAAUnF,QACnBT,OAAQ4F,EAAU5F,QAAU,gBAC5BiG,QAASjI,KAAK4F,aAGpB,CAEA,oBAAMkC,CAAenH,GACnB,MAAMC,SAAEA,EAAQC,OAAEA,EAAS,MAAKI,OAAEA,EAAS,GAAEH,QAAEA,EAAU,CAAA,GAAOH,EAE5DX,KAAK0F,iBACP1F,KAAK0F,gBAAgBe,QAGvBzG,KAAK0F,gBAAkB,IAAIwC,gBAE3B,IAAIC,EAAMvH,EACV,GAAe,QAAXC,GAAoBI,EAAQ,CAE9BkH,EAAM,GAAGA,KADY,IAAIC,gBAAgBnH,GACZoC,YAC/B,CAEA,MAAMgF,EAAiB,CACrBxH,SACAC,QAAS,CACP,eAAgB,mBAChBwB,aAAgBtC,KAAKoF,YAAYpB,oBAC9BlD,GAELC,KAAiB,QAAXF,EAAmB,KAAOgB,KAAKC,UAAUb,GAC/CqH,OAAQtI,KAAK0F,gBAAgB4C,QAGzB3G,QAAiBC,MAAMuG,EAAKE,GAClC,IAAK1G,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,aAAA2F,CAAcH,GACZ,MAAMe,EAASvI,KAAK8F,MAAM0C,IAAIhB,GAC9B,OAAIe,GAAUhF,KAAKkF,MAAQF,EAAOzF,UAAY9C,KAAKgG,aAC1CuC,EAAOlG,MAGZkG,GACFvI,KAAK8F,MAAMf,OAAOyC,GAEb,KACT,CAEA,YAAAO,CAAaP,EAAUnF,GAMrB,GALArC,KAAK8F,MAAMkB,IAAIQ,EAAU,CACvBnF,OACAS,UAAWS,KAAKkF,QAGdzI,KAAK8F,MAAM4C,KAAO,IAAK,CACzB,MAAMC,EAAW3I,KAAK8F,MAAM8C,OAAOC,OAAOC,MAC1C9I,KAAK8F,MAAMf,OAAO4D,EACpB,CACF,CAEA,gBAAAlB,CAAiB9G,GACf,OAAOkB,KAAKC,UAAU,CACpBlB,SAAUD,EAAOC,SACjBK,OAAQN,EAAOM,OACfJ,OAAQF,EAAOE,QAAU,OAE7B,CAEA,kBAAAgG,CAAmBlG,GACjB,OAAOX,KAAKyH,iBAAiB9G,EAC/B,CAEA,KAAA4G,CAAMwB,GACJ,OAAO,IAAIC,QAAQC,GAAWC,WAAWD,EAASF,GACpD,CAEA,oBAAOI,GACLnJ,KAAK8F,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,ECxQF,SAASwD,EAAY7I,EAAQ8I,GAC3B,IAAK9I,IAAW8I,EACd,MAAM,IAAI/H,MAAM,sBAGlB,IAAKf,GAAQ+I,iBAAmBD,GAAeC,eAC7C,MAAM,IAAIhI,MAAM,8BAGlB,IAAIgI,EAAiB/I,GAAQ+I,eACzBC,EAAwBF,GAAeC,eAC3C,GAA8B,iBAAnBA,EAA6B,OAAOA,EAC/C,GAAqC,iBAA1BC,EAAoC,OAAOA,EAEtD,GAAID,GAAkBA,EAAe9I,SACnC,OAAO8I,EAAe9I,SAGxB,GAAI+I,GAAyBA,EAAsB/I,SACjD,OAAO+I,EAAsB/I,SAG/B8I,EAAiBA,GAAkB,CAAA,EACnCC,EAAwBA,GAAyB,CAAA,EAEjD,MAAMC,EAAMF,EAAeE,KAAOD,EAAsBC,KAAO,KACzDC,EAAMH,EAAeG,KAAOF,EAAsBE,IAClDC,EAASJ,EAAeI,QAAUH,EAAsBG,OACxDC,EAAUL,EAAeK,SAAWJ,EAAsBI,SAAW,KACrEC,EAAWN,EAAeM,UAAYL,EAAsBK,SAC5DC,EAAYP,EAAeO,WAAaN,EAAsBM,UAC9DC,EAASR,EAAeQ,QAAUP,EAAsBO,OAE9D,IAAKL,EACH,MAAM,IAAInI,MAAM,+BAGlB,IAAKoI,EACH,MAAM,IAAIpI,MAAM,kCAGlB,IAAID,EAAS,GAAG0I,SAASC,eAAeL,KAAWH,KAAOC,KAAOC,IAiBjE,OAhBIE,IACFvI,GAAU,IAAIuI,IAEVC,IACFxI,GAAU,IAAIwI,KAGZC,IACFzI,GAAU,IAAIyI,MAIbzI,EAAO4I,WAAW,OACrB5I,EAAS,IAAIA,KAGRA,CACT,CAEA,SAAS6I,EAAoBC,EAAgB,MAAOd,EAAgB,CAAA,GAClE,OAAO,SAAwBjE,GAC7B,GAA4B,mBAAjBA,EACT,MAAM,IAAI9D,MAAM,gDAGlB,MAAM8I,EAAU,IAAIjF,EAAQC,GAEtBiF,EAAiBD,EAAQnE,OAAOqE,KAAKF,GAmB3C,OAlBAA,EAAQnE,OAAS,SAAU1F,GACzB,MAAMgK,EAAa,CACjB/J,SAAU4I,EAAY7I,EAAQ8I,GAC9B5I,OAAQ0J,KACLd,KACA9I,GAQL,cANOgK,EAAWjB,eAEd/I,GAA4B,iBAAXA,IAAwBA,EAAOC,WAClD+J,EAAW1J,OAASN,EAAOM,QAGtBwJ,EAAeE,EACxB,EAIOH,CACT,CACF,CAEO,MAAMI,EAAQN,EAAoB,OAC5BO,EAASP,EAAoB,QAC7BQ,EAAWR,EAAoB,UAC/BS,EAAQT,EAAoB,OAC5BU,EAAUV,EAAoB,6FC1D3C,SAASd,EAAY7I,EAAQ8I,GAC3B,IAAK9I,IAAW8I,EACd,MAAM,IAAI/H,MAAM,sBAGlB,IAAKf,GAAQ+I,iBAAmBD,GAAeC,eAC7C,MAAM,IAAIhI,MAAM,8BAGlB,IAAIgI,EAAiB/I,GAAQ+I,eACzBC,EAAwBF,GAAeC,eAC3C,GAA8B,iBAAnBA,EAA6B,OAAOA,EAC/C,GAAqC,iBAA1BC,EAAoC,OAAOA,EAEtD,GAAID,GAAkBA,EAAe9I,SACnC,OAAO8I,EAAe9I,SAGxB,GAAI+I,GAAyBA,EAAsB/I,SACjD,OAAO+I,EAAsB/I,SAG/B8I,EAAiBA,GAAkB,CAAA,EACnCC,EAAwBA,GAAyB,CAAA,EAEjD,MAAMC,EAAMF,EAAeE,KAAOD,EAAsBC,KAAO,KACzDC,EAAMH,EAAeG,KAAOF,EAAsBE,IAClDC,EAASJ,EAAeI,QAAUH,EAAsBG,OACxDC,EAAUL,EAAeK,SAAWJ,EAAsBI,SAAW,KACrEC,EAAWN,EAAeM,UAAYL,EAAsBK,SAC5DC,EAAYP,EAAeO,WAAaN,EAAsBM,UAC9DC,EAASR,EAAeQ,QAAUP,EAAsBO,OAE9D,IAAKL,EACH,MAAM,IAAInI,MAAM,+BAGlB,IAAKoI,EACH,MAAM,IAAIpI,MAAM,kCAGlB,IAAID,EAAS,GAAG0I,SAASC,eAAeL,KAAWH,KAAOC,KAAOC,IAiBjE,OAhBIE,IACFvI,GAAU,IAAIuI,IAEVC,IACFxI,GAAU,IAAIwI,KAGZC,IACFzI,GAAU,IAAIyI,MAIbzI,EAAO4I,WAAW,OACrB5I,EAAS,IAAIA,KAGRA,CACT,CAEA,SAASwJ,EAAoBV,EAAgB,MAAOd,EAAgB,CAAA,GAClE,OAAO,SAAqB9I,EAAS,IACnC,MAAMgK,EAAa,CACjB/J,SAAU4I,EAAY7I,EAAQ8I,GAC9B5I,OAAQ0J,KACLd,KACA9I,UAEEgK,EAAWjB,eAEd/I,GAA4B,iBAAXA,IAAwBA,EAAOC,WAClD+J,EAAW1J,OAASN,EAAOM,QAG7B,IAAIuJ,EAAU,KACVU,GAAY,EACZC,EAAY,KAqChB,OAvJJ,SAA0BC,EAAaC,EAAQb,GAC7C,MAAMc,EAAiBC,IACrB,IACEC,OAAOC,eAAeF,EAAG,SAAU,CAAEzC,MAAOuC,EAAQK,cAAc,EAAMC,YAAY,IACpFH,OAAOC,eAAeF,EAAG,UAAW,CAAE/C,IAAK,IAAMgC,EAASkB,cAAc,EAAMC,YAAY,GAC5F,CAAE,MAAO,CAET,MAAMC,EAAaL,EAAEM,KAAKnB,KAAKa,GACzBO,EAAcP,EAAEQ,MAAMrB,KAAKa,GAC3BS,EAAgBT,EAAEU,QAAUV,EAAEU,QAAQvB,KAAKa,QAAK5E,EAsBtD,OApBA4E,EAAEM,KAAO,IAAIK,KACX,MAAMrD,EAAO+C,KAAcM,GAE3B,OADAZ,EAAczC,GACPA,GAGT0C,EAAEQ,MAAQ,IAAIG,KACZ,MAAMrD,EAAOiD,KAAeI,GAE5B,OADAZ,EAAczC,GACPA,GAGLmD,IACFT,EAAEU,QAAU,IAAIC,KACd,MAAMrD,EAAOmD,KAAiBE,GAE9B,OADAZ,EAAczC,GACPA,IAIJ0C,GAGT,OAAOD,EAAcF,EACvB,CAoHWe,CAnCS,IAAInD,QAAQ,CAACC,EAASmD,KACpCjB,EAAYiB,EACZ5B,EAAU,IAAIjF,EAAS9D,IACrB,IAAIyJ,EAAJ,CACAA,GAAY,EACZ,IAAMV,GAAWA,EAAQhE,YAAc,CAAE,MAAO,CAE5C/E,EAAOH,MACT8K,EAAO3K,EAAOH,OAEd2H,EAAQxH,EAPK,IAWjB+I,EAAQpE,UACRoE,EAAQnE,OAAOsE,KAGF,KACb,IAAKH,EAAS,MAAO,CAAE6B,SAAS,EAAOC,SAAS,GAChD,IAAID,GAAU,EACd,IACM7B,EAAQ9E,kBACV8E,EAAQ9E,gBAAgBe,QACxB4F,GAAU,EAEd,CAAE,MAAO,EACJnB,GAAaC,IAChBD,GAAY,EACZC,EAAU,CAAE1I,QAAS,mBAAoBT,OAAQ,cAEnD,IAAMwI,EAAQhE,YAAc,CAAE,MAAO,CACrC,MAAO,CAAE6F,UAASC,SAAS,IAGY9B,EAC3C,CACF,CAEO,MAAMI,EAAQK,EAAoB,OAC5BJ,EAASI,EAAoB,QAC7BH,EAAWG,EAAoB,UAC/BF,EAAQE,EAAoB,OAC5BD,EAAUC,EAAoB"}
@@ -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
+ const e="yunzhijia",n="yunzhijia_desktop",t="yunzhijia_old_desktop",r="weixin",o="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 f(){const e=navigator.userAgent;return/clientId:10204/.test(e)}function d(){const e=navigator.userAgent;return e.indexOf("MicroMessenger")>-1&&e.indexOf("wxwork")<0}function w(){const e=navigator.userAgent;return e.indexOf("MicroMessenger")>-1&&e.indexOf("wxwork")>-1}function x(){const e=navigator.userAgent,n=e.indexOf("DingTalk")>-1,t=-1===e.indexOf("MiniProgram")&&-1===e.indexOf("dd-web");return n&&t}function A(){const e=navigator.userAgent;return e.indexOf("welink")>-1||e.indexOf("cloudlink")>-1}function h(){return navigator.userAgent.indexOf("Lark/")>-1}function k(){return g()?e:c()?n:f()?t:d()?r:w()?i:x()?o:A?s:h()?a:u}function v(){const e=navigator.userAgent.toLowerCase();return/chrome|crios/.test(e)&&!/edg|edge|opr|opera|fxios|samsungbrowser/.test(e)}function m(){const e=navigator.userAgent.toLowerCase();return/edg/.test(e)}function p(){const e=navigator.userAgent.toLowerCase();return/edge/.test(e)&&!/edg/.test(e)}function l(){return m()||p()}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 j="chrome",M="edge",b="firefox",z="ie",P="safari",_="unknown";function y(){return v()?j:l()?M:O()?b:L()?P:C()?z:_}function D(){const e=navigator.userAgent.toLowerCase();D=/Android|iPhone|iPad/i.test(e)||/Harmony/i.test(e)&&/Mobile/i.test(e);const n="ontouchstart"in window||navigator.maxTouchPoints>0,t=/Macintosh/i.test(e)&&n;return D||t}function E(){return!D()}var S=Object.freeze({__proto__:null,getAppName:k,getBrowserName:y,isChrome:v,isChromiumEdge:m,isDD:x,isEdge:l,isFeiShu:h,isFirefox:O,isIE:C,isLegacyEdge:p,get isMobile(){return D},isPC:E,isSafari:L,isWX:d,isWeLink:A,isWxWork:w,isYzj:g,isYzjDesktop:c,isYzjOldDesktop:f});export{x as a,h as b,A as c,w as d,d as e,g as f,k as g,c as h,S as i,f as j,y as k,v as l,m,l as n,p as o,O as p,C as q,L as r,D as s,E as t};
2
+ //# sourceMappingURL=index-pPqP08Tl.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-pPqP08Tl.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 userAgent = navigator.userAgent.toLowerCase()\n isMobile = /Android|iPhone|iPad/i.test(userAgent) || (/Harmony/i.test(userAgent) && /Mobile/i.test(userAgent))\n\n // 检测触摸屏设备(增强平板识别)\n const isTouchScreen = 'ontouchstart' in window || navigator.maxTouchPoints > 0\n\n // 特殊处理iPad:iPadOS 13+的UA包含Macintosh但支持触摸\n const isiPad = /Macintosh/i.test(userAgent) && isTouchScreen\n\n return isMobile || isiPad\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","isTouchScreen","window","maxTouchPoints","isiPad","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,MAAMvB,EAAYD,UAAUC,UAAUc,cACtCS,EAAW,uBAAuBtB,KAAKD,IAAe,WAAWC,KAAKD,IAAc,UAAUC,KAAKD,GAGnG,MAAMwB,EAAgB,iBAAkBC,QAAU1B,UAAU2B,eAAiB,EAGvEC,EAAS,aAAa1B,KAAKD,IAAcwB,EAE/C,OAAOD,GAAYI,CACrB,CAEO,SAASC,IACd,OAAQL,GACV"}
@@ -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,7 +1,7 @@
1
1
  {
2
2
  "name": "@kdcloudjs/kwc-shared-utils",
3
- "version": "0.0.2",
4
- "description": "shared-utils for kwc",
3
+ "version": "0.0.4",
4
+ "description": "share-utils for kwc",
5
5
  "type": "module",
6
6
  "main": "dist/index.cjs.js",
7
7
  "module": "dist/index.esm.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
+ }