sumor 3.1.0 → 3.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/web/OAuthStore.d.ts +88 -0
- package/dist/web/OAuthStore.d.ts.map +1 -0
- package/dist/web/OAuthStore.js +164 -0
- package/dist/web/OAuthStore.js.map +1 -0
- package/dist/web/Sumor.d.ts +2 -35
- package/dist/web/Sumor.d.ts.map +1 -1
- package/dist/web/Sumor.js +32 -94
- package/dist/web/Sumor.js.map +1 -1
- package/dist/web/UrlHelper.d.ts +29 -0
- package/dist/web/UrlHelper.d.ts.map +1 -0
- package/dist/web/UrlHelper.js +40 -0
- package/dist/web/UrlHelper.js.map +1 -0
- package/dist/web/index.d.ts +2 -1
- package/dist/web/index.d.ts.map +1 -1
- package/dist/web/index.js +3 -2
- package/dist/web/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OAuth Store - OAuth令牌和用户信息存储管理
|
|
3
|
+
* 通过 window.OAuthToken 进行持久化
|
|
4
|
+
*/
|
|
5
|
+
export interface UserInfo {
|
|
6
|
+
id: string;
|
|
7
|
+
isVerified: number;
|
|
8
|
+
roles: string;
|
|
9
|
+
permissions: string;
|
|
10
|
+
}
|
|
11
|
+
export interface OAuthTokenResponse {
|
|
12
|
+
endpoint: string;
|
|
13
|
+
authorizeUrl: string;
|
|
14
|
+
user: UserInfo | null;
|
|
15
|
+
}
|
|
16
|
+
export type UserChangeCallback = (user: UserInfo | null) => void;
|
|
17
|
+
declare class OAuthStore {
|
|
18
|
+
private userChangeSubscribers;
|
|
19
|
+
private refreshSubscribers;
|
|
20
|
+
constructor();
|
|
21
|
+
/**
|
|
22
|
+
* 初始化 window.OAuthToken 存储
|
|
23
|
+
*/
|
|
24
|
+
private initializeStorage;
|
|
25
|
+
/**
|
|
26
|
+
* 获取存储的 OAuth 数据
|
|
27
|
+
*/
|
|
28
|
+
private getStoredData;
|
|
29
|
+
/**
|
|
30
|
+
* 获取 endpoint
|
|
31
|
+
*/
|
|
32
|
+
getEndpoint(): string;
|
|
33
|
+
/**
|
|
34
|
+
* 设置 endpoint
|
|
35
|
+
*/
|
|
36
|
+
setEndpoint(endpoint: string): void;
|
|
37
|
+
/**
|
|
38
|
+
* 获取 authorizeUrl
|
|
39
|
+
*/
|
|
40
|
+
getAuthorizeUrl(): string;
|
|
41
|
+
/**
|
|
42
|
+
* 设置 authorizeUrl
|
|
43
|
+
*/
|
|
44
|
+
setAuthorizeUrl(authorizeUrl: string): void;
|
|
45
|
+
/**
|
|
46
|
+
* 获取用户信息
|
|
47
|
+
*/
|
|
48
|
+
getUser(): UserInfo | null;
|
|
49
|
+
/**
|
|
50
|
+
* 设置用户信息
|
|
51
|
+
*/
|
|
52
|
+
setUser(user: UserInfo | null): void;
|
|
53
|
+
/**
|
|
54
|
+
* 获取 OAuth 数据
|
|
55
|
+
*/
|
|
56
|
+
getData(): OAuthTokenResponse;
|
|
57
|
+
/**
|
|
58
|
+
* 更新 OAuth 数据
|
|
59
|
+
*/
|
|
60
|
+
setData(tokenResponse: OAuthTokenResponse): void;
|
|
61
|
+
/**
|
|
62
|
+
* 清空用户数据
|
|
63
|
+
*/
|
|
64
|
+
clear(): void;
|
|
65
|
+
/**
|
|
66
|
+
* 订阅用户变化事件
|
|
67
|
+
*/
|
|
68
|
+
onUserChange(callback: UserChangeCallback): void;
|
|
69
|
+
/**
|
|
70
|
+
* 触发用户变化事件
|
|
71
|
+
*/
|
|
72
|
+
private emitUserChange;
|
|
73
|
+
/**
|
|
74
|
+
* 订阅令牌刷新事件
|
|
75
|
+
*/
|
|
76
|
+
subscribeTokenRefresh(callback: () => void): void;
|
|
77
|
+
/**
|
|
78
|
+
* 触发所有令牌刷新回调
|
|
79
|
+
*/
|
|
80
|
+
onTokenRefreshed(): void;
|
|
81
|
+
/**
|
|
82
|
+
* 清空令牌刷新订阅
|
|
83
|
+
*/
|
|
84
|
+
clearRefreshSubscribers(): void;
|
|
85
|
+
}
|
|
86
|
+
export declare const oauthStore: OAuthStore;
|
|
87
|
+
export {};
|
|
88
|
+
//# sourceMappingURL=OAuthStore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OAuthStore.d.ts","sourceRoot":"","sources":["../../web/OAuthStore.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAA;IACV,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE,MAAM,CAAA;IACpB,IAAI,EAAE,QAAQ,GAAG,IAAI,CAAA;CACtB;AAED,MAAM,MAAM,kBAAkB,GAAG,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,KAAK,IAAI,CAAA;AAEhE,cAAM,UAAU;IACd,OAAO,CAAC,qBAAqB,CAAgC;IAC7D,OAAO,CAAC,kBAAkB,CAAwB;;IASlD;;OAEG;IACH,OAAO,CAAC,iBAAiB;IASzB;;OAEG;IACH,OAAO,CAAC,aAAa;IAIrB;;OAEG;IACH,WAAW,IAAI,MAAM;IAKrB;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAOnC;;OAEG;IACH,eAAe,IAAI,MAAM;IAKzB;;OAEG;IACH,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;IAO3C;;OAEG;IACH,OAAO,IAAI,QAAQ,GAAG,IAAI;IAK1B;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,GAAG,IAAI;IAYpC;;OAEG;IACH,OAAO,IAAI,kBAAkB;IAS7B;;OAEG;IACH,OAAO,CAAC,aAAa,EAAE,kBAAkB,GAAG,IAAI;IAchD;;OAEG;IACH,KAAK,IAAI,IAAI;IASb;;OAEG;IACH,YAAY,CAAC,QAAQ,EAAE,kBAAkB,GAAG,IAAI;IAIhD;;OAEG;IACH,OAAO,CAAC,cAAc;IAUtB;;OAEG;IACH,qBAAqB,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IAIjD;;OAEG;IACH,gBAAgB,IAAI,IAAI;IAKxB;;OAEG;IACH,uBAAuB,IAAI,IAAI;CAGhC;AAGD,eAAO,MAAM,UAAU,YAAmB,CAAA"}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OAuth Store - OAuth令牌和用户信息存储管理
|
|
3
|
+
* 通过 window.OAuthToken 进行持久化
|
|
4
|
+
*/
|
|
5
|
+
class OAuthStore {
|
|
6
|
+
constructor() {
|
|
7
|
+
this.userChangeSubscribers = [];
|
|
8
|
+
this.refreshSubscribers = [];
|
|
9
|
+
// 从 window.OAuthToken 中初始化
|
|
10
|
+
if (!this.getStoredData()) {
|
|
11
|
+
this.initializeStorage();
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* 初始化 window.OAuthToken 存储
|
|
16
|
+
*/
|
|
17
|
+
initializeStorage() {
|
|
18
|
+
;
|
|
19
|
+
window.OAuthToken = {
|
|
20
|
+
endpoint: '',
|
|
21
|
+
authorizeUrl: '',
|
|
22
|
+
user: null,
|
|
23
|
+
refreshSubscribers: []
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* 获取存储的 OAuth 数据
|
|
28
|
+
*/
|
|
29
|
+
getStoredData() {
|
|
30
|
+
return window.OAuthToken;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* 获取 endpoint
|
|
34
|
+
*/
|
|
35
|
+
getEndpoint() {
|
|
36
|
+
const data = this.getStoredData();
|
|
37
|
+
return data?.endpoint || '';
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* 设置 endpoint
|
|
41
|
+
*/
|
|
42
|
+
setEndpoint(endpoint) {
|
|
43
|
+
const data = this.getStoredData();
|
|
44
|
+
if (data) {
|
|
45
|
+
data.endpoint = endpoint;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* 获取 authorizeUrl
|
|
50
|
+
*/
|
|
51
|
+
getAuthorizeUrl() {
|
|
52
|
+
const data = this.getStoredData();
|
|
53
|
+
return data?.authorizeUrl || '';
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* 设置 authorizeUrl
|
|
57
|
+
*/
|
|
58
|
+
setAuthorizeUrl(authorizeUrl) {
|
|
59
|
+
const data = this.getStoredData();
|
|
60
|
+
if (data) {
|
|
61
|
+
data.authorizeUrl = authorizeUrl;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* 获取用户信息
|
|
66
|
+
*/
|
|
67
|
+
getUser() {
|
|
68
|
+
const data = this.getStoredData();
|
|
69
|
+
return data?.user || null;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* 设置用户信息
|
|
73
|
+
*/
|
|
74
|
+
setUser(user) {
|
|
75
|
+
const data = this.getStoredData();
|
|
76
|
+
if (data) {
|
|
77
|
+
const previousUser = data.user;
|
|
78
|
+
data.user = user;
|
|
79
|
+
// 如果用户信息发生变化,触发回调
|
|
80
|
+
if (previousUser !== user) {
|
|
81
|
+
this.emitUserChange();
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* 获取 OAuth 数据
|
|
87
|
+
*/
|
|
88
|
+
getData() {
|
|
89
|
+
const data = this.getStoredData();
|
|
90
|
+
return {
|
|
91
|
+
endpoint: data?.endpoint || '',
|
|
92
|
+
authorizeUrl: data?.authorizeUrl || '',
|
|
93
|
+
user: data?.user || null
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* 更新 OAuth 数据
|
|
98
|
+
*/
|
|
99
|
+
setData(tokenResponse) {
|
|
100
|
+
const data = this.getStoredData();
|
|
101
|
+
if (data) {
|
|
102
|
+
const previousUser = data.user;
|
|
103
|
+
data.endpoint = tokenResponse.endpoint;
|
|
104
|
+
data.authorizeUrl = tokenResponse.authorizeUrl;
|
|
105
|
+
data.user = tokenResponse.user;
|
|
106
|
+
// 如果用户信息发生变化,触发回调
|
|
107
|
+
if (previousUser !== tokenResponse.user) {
|
|
108
|
+
this.emitUserChange();
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* 清空用户数据
|
|
114
|
+
*/
|
|
115
|
+
clear() {
|
|
116
|
+
const data = this.getStoredData();
|
|
117
|
+
if (data) {
|
|
118
|
+
data.endpoint = '';
|
|
119
|
+
data.authorizeUrl = '';
|
|
120
|
+
data.user = null;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* 订阅用户变化事件
|
|
125
|
+
*/
|
|
126
|
+
onUserChange(callback) {
|
|
127
|
+
this.userChangeSubscribers.push(callback);
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* 触发用户变化事件
|
|
131
|
+
*/
|
|
132
|
+
emitUserChange() {
|
|
133
|
+
this.userChangeSubscribers.forEach(callback => {
|
|
134
|
+
try {
|
|
135
|
+
callback(this.getUser());
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
console.error('User change callback error:', error);
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* 订阅令牌刷新事件
|
|
144
|
+
*/
|
|
145
|
+
subscribeTokenRefresh(callback) {
|
|
146
|
+
this.refreshSubscribers.push(callback);
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* 触发所有令牌刷新回调
|
|
150
|
+
*/
|
|
151
|
+
onTokenRefreshed() {
|
|
152
|
+
this.refreshSubscribers.forEach(callback => callback());
|
|
153
|
+
this.refreshSubscribers = [];
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* 清空令牌刷新订阅
|
|
157
|
+
*/
|
|
158
|
+
clearRefreshSubscribers() {
|
|
159
|
+
this.refreshSubscribers = [];
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
// 导出单例
|
|
163
|
+
export const oauthStore = new OAuthStore();
|
|
164
|
+
//# sourceMappingURL=OAuthStore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OAuthStore.js","sourceRoot":"","sources":["../../web/OAuthStore.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAiBH,MAAM,UAAU;IAId;QAHQ,0BAAqB,GAA8B,EAAE,CAAA;QACrD,uBAAkB,GAAsB,EAAE,CAAA;QAGhD,2BAA2B;QAC3B,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;YAC1B,IAAI,CAAC,iBAAiB,EAAE,CAAA;QAC1B,CAAC;IACH,CAAC;IAED;;OAEG;IACK,iBAAiB;QACvB,CAAC;QAAC,MAAc,CAAC,UAAU,GAAG;YAC5B,QAAQ,EAAE,EAAE;YACZ,YAAY,EAAE,EAAE;YAChB,IAAI,EAAE,IAAI;YACV,kBAAkB,EAAE,EAAE;SACvB,CAAA;IACH,CAAC;IAED;;OAEG;IACK,aAAa;QACnB,OAAQ,MAAc,CAAC,UAAU,CAAA;IACnC,CAAC;IAED;;OAEG;IACH,WAAW;QACT,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,CAAA;QACjC,OAAO,IAAI,EAAE,QAAQ,IAAI,EAAE,CAAA;IAC7B,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,QAAgB;QAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,CAAA;QACjC,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;QAC1B,CAAC;IACH,CAAC;IAED;;OAEG;IACH,eAAe;QACb,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,CAAA;QACjC,OAAO,IAAI,EAAE,YAAY,IAAI,EAAE,CAAA;IACjC,CAAC;IAED;;OAEG;IACH,eAAe,CAAC,YAAoB;QAClC,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,CAAA;QACjC,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,YAAY,GAAG,YAAY,CAAA;QAClC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,OAAO;QACL,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,CAAA;QACjC,OAAO,IAAI,EAAE,IAAI,IAAI,IAAI,CAAA;IAC3B,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,IAAqB;QAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,CAAA;QACjC,IAAI,IAAI,EAAE,CAAC;YACT,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAA;YAC9B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;YAChB,kBAAkB;YAClB,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;gBAC1B,IAAI,CAAC,cAAc,EAAE,CAAA;YACvB,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACH,OAAO;QACL,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,CAAA;QACjC,OAAO;YACL,QAAQ,EAAE,IAAI,EAAE,QAAQ,IAAI,EAAE;YAC9B,YAAY,EAAE,IAAI,EAAE,YAAY,IAAI,EAAE;YACtC,IAAI,EAAE,IAAI,EAAE,IAAI,IAAI,IAAI;SACzB,CAAA;IACH,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,aAAiC;QACvC,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,CAAA;QACjC,IAAI,IAAI,EAAE,CAAC;YACT,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAA;YAC9B,IAAI,CAAC,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAA;YACtC,IAAI,CAAC,YAAY,GAAG,aAAa,CAAC,YAAY,CAAA;YAC9C,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC,IAAI,CAAA;YAC9B,kBAAkB;YAClB,IAAI,YAAY,KAAK,aAAa,CAAC,IAAI,EAAE,CAAC;gBACxC,IAAI,CAAC,cAAc,EAAE,CAAA;YACvB,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,CAAA;QACjC,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAA;YAClB,IAAI,CAAC,YAAY,GAAG,EAAE,CAAA;YACtB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAClB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,QAA4B;QACvC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IAC3C,CAAC;IAED;;OAEG;IACK,cAAc;QACpB,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;YAC5C,IAAI,CAAC;gBACH,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAA;YAC1B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAA;YACrD,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;IAED;;OAEG;IACH,qBAAqB,CAAC,QAAoB;QACxC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IACxC,CAAC;IAED;;OAEG;IACH,gBAAgB;QACd,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAA;QACvD,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAA;IAC9B,CAAC;IAED;;OAEG;IACH,uBAAuB;QACrB,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAA;IAC9B,CAAC;CACF;AAED,OAAO;AACP,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,UAAU,EAAE,CAAA"}
|
package/dist/web/Sumor.d.ts
CHANGED
|
@@ -2,47 +2,19 @@
|
|
|
2
2
|
* Sumor Class - 轻呈云客户端主类
|
|
3
3
|
*/
|
|
4
4
|
import { AxiosInstance, AxiosRequestConfig } from 'axios';
|
|
5
|
-
|
|
6
|
-
* API 错误信息
|
|
7
|
-
*/
|
|
8
|
-
export declare class ApiError extends Error {
|
|
9
|
-
code: string | number;
|
|
10
|
-
status?: number;
|
|
11
|
-
constructor(message: string, code: string | number, status?: number);
|
|
12
|
-
}
|
|
13
|
-
export interface UserInfo {
|
|
14
|
-
id: string;
|
|
15
|
-
isVerified: number;
|
|
16
|
-
roles: string;
|
|
17
|
-
permissions: string;
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* 用户变化回调类型
|
|
21
|
-
*/
|
|
22
|
-
export type UserChangeCallback = (user: UserInfo | null) => void;
|
|
5
|
+
import { UserInfo } from './OAuthStore';
|
|
23
6
|
export declare class Sumor {
|
|
24
|
-
endpoint: string;
|
|
25
|
-
authorizeUrl: string;
|
|
26
|
-
user: UserInfo | null;
|
|
27
7
|
axios: AxiosInstance;
|
|
28
8
|
private loaded;
|
|
29
9
|
private loadTime;
|
|
30
10
|
private readonly CACHE_TTL;
|
|
31
11
|
private isRefreshing;
|
|
32
|
-
private refreshSubscribers;
|
|
33
|
-
private userChangeSubscribers;
|
|
34
12
|
constructor();
|
|
35
|
-
private subscribeTokenRefresh;
|
|
36
|
-
private onTokenRefreshed;
|
|
37
13
|
/**
|
|
38
14
|
* 订阅用户变化事件
|
|
39
15
|
* @param callback 用户变化时的回调函数
|
|
40
16
|
*/
|
|
41
|
-
onUserChange(callback:
|
|
42
|
-
/**
|
|
43
|
-
* 触发用户变化事件
|
|
44
|
-
*/
|
|
45
|
-
private emitUserChange;
|
|
17
|
+
onUserChange(callback: (user: UserInfo | null) => void): void;
|
|
46
18
|
/**
|
|
47
19
|
* 创建 Axios 实例并配置拦截器
|
|
48
20
|
*/
|
|
@@ -66,11 +38,6 @@ export declare class Sumor {
|
|
|
66
38
|
* @param force 是否强制刷新,忽略缓存
|
|
67
39
|
*/
|
|
68
40
|
refreshToken(force?: boolean): Promise<void>;
|
|
69
|
-
getAvatarUrl(id: string): string;
|
|
70
|
-
getHomeUrl(): string;
|
|
71
|
-
getSiteUrl(): string;
|
|
72
|
-
getUserUrl(): string;
|
|
73
|
-
getFeedbackUrl(): string;
|
|
74
41
|
/**
|
|
75
42
|
* 登录:跳转到授权页面
|
|
76
43
|
*/
|
package/dist/web/Sumor.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Sumor.d.ts","sourceRoot":"","sources":["../../web/Sumor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAc,EAAE,aAAa,EAAE,kBAAkB,EAAc,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"Sumor.d.ts","sourceRoot":"","sources":["../../web/Sumor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAc,EAAE,aAAa,EAAE,kBAAkB,EAAc,MAAM,OAAO,CAAA;AAC5E,OAAO,EAAc,QAAQ,EAAsB,MAAM,cAAc,CAAA;AAkBvE,qBAAa,KAAK;IACT,KAAK,EAAE,aAAa,CAAA;IAC3B,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,QAAQ,CAAY;IAC5B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAU;IACpC,OAAO,CAAC,YAAY,CAAiB;;IAOrC;;;OAGG;IACH,YAAY,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,KAAK,IAAI,GAAG,IAAI;IAI7D;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAsG3B;;OAEG;IACG,OAAO,CAAC,CAAC,GAAG,GAAG,EACnB,GAAG,EAAE,MAAM,EACX,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,EAChC,MAAM,CAAC,EAAE,kBAAkB,GAC1B,OAAO,CAAC,CAAC,CAAC;IAQb;;OAEG;IACG,GAAG,CAAC,CAAC,GAAG,GAAG,EACf,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC5B,MAAM,CAAC,EAAE,kBAAkB,GAC1B,OAAO,CAAC,CAAC,CAAC;IAIb;;OAEG;IACG,IAAI,CAAC,CAAC,GAAG,GAAG,EAChB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,MAAM,CAAC,EAAE,kBAAkB,GAC1B,OAAO,CAAC,CAAC,CAAC;IAIb,OAAO,CAAC,YAAY;IAQpB;;;;OAIG;IACG,YAAY,CAAC,KAAK,GAAE,OAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAiCzD;;OAEG;IACH,KAAK;IASL;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAY7B;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAIpC;;;;;;;;;OASG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,GAAE,MAAY,GAAG,OAAO;IAkB/D;;;;OAIG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;CAS/B"}
|
package/dist/web/Sumor.js
CHANGED
|
@@ -2,57 +2,22 @@
|
|
|
2
2
|
* Sumor Class - 轻呈云客户端主类
|
|
3
3
|
*/
|
|
4
4
|
import axios from 'axios';
|
|
5
|
-
|
|
6
|
-
* API 错误信息
|
|
7
|
-
*/
|
|
8
|
-
export class ApiError extends Error {
|
|
9
|
-
constructor(message, code, status) {
|
|
10
|
-
super(message);
|
|
11
|
-
this.code = code;
|
|
12
|
-
this.status = status;
|
|
13
|
-
this.name = 'ApiError';
|
|
14
|
-
}
|
|
15
|
-
}
|
|
5
|
+
import { oauthStore } from './OAuthStore';
|
|
16
6
|
export class Sumor {
|
|
17
7
|
constructor() {
|
|
18
|
-
this.endpoint = '';
|
|
19
|
-
this.authorizeUrl = '';
|
|
20
|
-
this.user = null;
|
|
21
8
|
this.loaded = false;
|
|
22
9
|
this.loadTime = 0;
|
|
23
10
|
this.CACHE_TTL = 3600000; // 1小时,单位毫秒
|
|
24
11
|
this.isRefreshing = false;
|
|
25
|
-
this.refreshSubscribers = [];
|
|
26
|
-
this.userChangeSubscribers = [];
|
|
27
12
|
console.log('初始化轻呈云客户端...');
|
|
28
13
|
this.axios = this.createAxiosInstance();
|
|
29
14
|
}
|
|
30
|
-
subscribeTokenRefresh(callback) {
|
|
31
|
-
this.refreshSubscribers.push(callback);
|
|
32
|
-
}
|
|
33
|
-
onTokenRefreshed() {
|
|
34
|
-
this.refreshSubscribers.forEach(callback => callback());
|
|
35
|
-
this.refreshSubscribers = [];
|
|
36
|
-
}
|
|
37
15
|
/**
|
|
38
16
|
* 订阅用户变化事件
|
|
39
17
|
* @param callback 用户变化时的回调函数
|
|
40
18
|
*/
|
|
41
19
|
onUserChange(callback) {
|
|
42
|
-
|
|
43
|
-
}
|
|
44
|
-
/**
|
|
45
|
-
* 触发用户变化事件
|
|
46
|
-
*/
|
|
47
|
-
emitUserChange() {
|
|
48
|
-
this.userChangeSubscribers.forEach(callback => {
|
|
49
|
-
try {
|
|
50
|
-
callback(this.user);
|
|
51
|
-
}
|
|
52
|
-
catch (error) {
|
|
53
|
-
console.error('User change callback error:', error);
|
|
54
|
-
}
|
|
55
|
-
});
|
|
20
|
+
oauthStore.onUserChange(callback);
|
|
56
21
|
}
|
|
57
22
|
/**
|
|
58
23
|
* 创建 Axios 实例并配置拦截器
|
|
@@ -80,7 +45,8 @@ export class Sumor {
|
|
|
80
45
|
instance.interceptors.response.use(response => {
|
|
81
46
|
const data = response.data;
|
|
82
47
|
if (data.code !== 'OK') {
|
|
83
|
-
const error = new
|
|
48
|
+
const error = new Error(data.message || '请求失败');
|
|
49
|
+
error.code = data.code;
|
|
84
50
|
return Promise.reject(error);
|
|
85
51
|
}
|
|
86
52
|
return data.data !== undefined ? data.data : true;
|
|
@@ -97,17 +63,12 @@ export class Sumor {
|
|
|
97
63
|
});
|
|
98
64
|
const response = await refreshInstance.put('/api/oauth/token', {});
|
|
99
65
|
if (response.status === 200) {
|
|
100
|
-
//
|
|
66
|
+
// 如果响应中包含新的用户信息,更新到 OAuthStore
|
|
101
67
|
if (response.data && response.data.data && response.data.data.user) {
|
|
102
|
-
|
|
103
|
-
this.user = response.data.data.user;
|
|
104
|
-
// 如果用户信息发生变化,触发回调
|
|
105
|
-
if (this.user !== previousUser) {
|
|
106
|
-
this.emitUserChange();
|
|
107
|
-
}
|
|
68
|
+
oauthStore.setUser(response.data.data.user);
|
|
108
69
|
}
|
|
109
70
|
this.isRefreshing = false;
|
|
110
|
-
|
|
71
|
+
oauthStore.onTokenRefreshed();
|
|
111
72
|
return instance(originalRequest);
|
|
112
73
|
}
|
|
113
74
|
else {
|
|
@@ -116,17 +77,17 @@ export class Sumor {
|
|
|
116
77
|
}
|
|
117
78
|
catch (refreshError) {
|
|
118
79
|
this.isRefreshing = false;
|
|
119
|
-
|
|
80
|
+
oauthStore.clearRefreshSubscribers();
|
|
120
81
|
// 清空用户信息,表示已退出登录
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
return Promise.reject(
|
|
82
|
+
oauthStore.setUser(null);
|
|
83
|
+
const error = new Error('令牌已过期,请重新登录');
|
|
84
|
+
error.code = 'TOKEN_REFRESH_FAILED';
|
|
85
|
+
return Promise.reject(error);
|
|
125
86
|
}
|
|
126
87
|
}
|
|
127
88
|
else {
|
|
128
89
|
return new Promise((resolve, reject) => {
|
|
129
|
-
|
|
90
|
+
oauthStore.subscribeTokenRefresh(() => {
|
|
130
91
|
resolve(instance(originalRequest));
|
|
131
92
|
});
|
|
132
93
|
});
|
|
@@ -134,11 +95,13 @@ export class Sumor {
|
|
|
134
95
|
}
|
|
135
96
|
if (error.response?.data) {
|
|
136
97
|
const data = error.response.data;
|
|
137
|
-
const
|
|
138
|
-
|
|
98
|
+
const err = new Error(data.message || error.message || '请求失败');
|
|
99
|
+
err.code = data.code || 'REQUEST_FAILED';
|
|
100
|
+
return Promise.reject(err);
|
|
139
101
|
}
|
|
140
|
-
const
|
|
141
|
-
|
|
102
|
+
const err = new Error(error.message || '网络错误');
|
|
103
|
+
err.code = 'NETWORK_ERROR';
|
|
104
|
+
return Promise.reject(err);
|
|
142
105
|
});
|
|
143
106
|
return instance;
|
|
144
107
|
}
|
|
@@ -182,7 +145,6 @@ export class Sumor {
|
|
|
182
145
|
if (!force && this.isCacheValid()) {
|
|
183
146
|
return;
|
|
184
147
|
}
|
|
185
|
-
const previousUser = this.user;
|
|
186
148
|
try {
|
|
187
149
|
// 直接调用 PUT /api/oauth/token 刷新接口
|
|
188
150
|
// 浏览器会自动在请求中包含 HttpOnly Cookie 中的 refresh_token
|
|
@@ -192,52 +154,28 @@ export class Sumor {
|
|
|
192
154
|
// 响应已被拦截器处理,返回的是 { endpoint, authorizeUrl, user }
|
|
193
155
|
if (response) {
|
|
194
156
|
const data = response;
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
this.user = data.user || null;
|
|
198
|
-
console.log('[Sumor] User info updated:', this.user);
|
|
157
|
+
oauthStore.setData(data);
|
|
158
|
+
console.log('[Sumor] User info updated:', oauthStore.getUser());
|
|
199
159
|
}
|
|
200
160
|
this.loaded = true;
|
|
201
161
|
this.loadTime = Date.now();
|
|
202
|
-
// 如果用户信息发生变化,触发回调
|
|
203
|
-
if (this.user !== previousUser) {
|
|
204
|
-
console.log('[Sumor] User changed, emitting event');
|
|
205
|
-
this.emitUserChange();
|
|
206
|
-
}
|
|
207
162
|
}
|
|
208
163
|
catch (error) {
|
|
209
164
|
console.error('[Sumor] Failed to refresh OAuth info:', error);
|
|
210
165
|
// 刷新失败时,清除用户信息(401 表示未认证)
|
|
211
166
|
if (error.response?.status === 401 || error.code === 'TOKEN_REFRESH_FAILED') {
|
|
212
167
|
console.log('[Sumor] Token refresh failed or unauthorized, clearing user');
|
|
213
|
-
|
|
214
|
-
this.user = null;
|
|
215
|
-
this.emitUserChange();
|
|
216
|
-
}
|
|
168
|
+
oauthStore.clear();
|
|
217
169
|
}
|
|
218
170
|
}
|
|
219
171
|
}
|
|
220
|
-
getAvatarUrl(id) {
|
|
221
|
-
return this.endpoint + `/api/user/avatar/${id}`;
|
|
222
|
-
}
|
|
223
|
-
getHomeUrl() {
|
|
224
|
-
return this.endpoint;
|
|
225
|
-
}
|
|
226
|
-
getSiteUrl() {
|
|
227
|
-
return this.endpoint + '/site';
|
|
228
|
-
}
|
|
229
|
-
getUserUrl() {
|
|
230
|
-
return this.endpoint + '/user';
|
|
231
|
-
}
|
|
232
|
-
getFeedbackUrl() {
|
|
233
|
-
return this.endpoint + '/user/feedback';
|
|
234
|
-
}
|
|
235
172
|
/**
|
|
236
173
|
* 登录:跳转到授权页面
|
|
237
174
|
*/
|
|
238
175
|
login() {
|
|
239
|
-
|
|
240
|
-
|
|
176
|
+
const authorizeUrl = oauthStore.getAuthorizeUrl();
|
|
177
|
+
if (authorizeUrl) {
|
|
178
|
+
window.location.href = authorizeUrl;
|
|
241
179
|
}
|
|
242
180
|
else {
|
|
243
181
|
throw new Error('无法获取授权 URL');
|
|
@@ -252,13 +190,11 @@ export class Sumor {
|
|
|
252
190
|
}
|
|
253
191
|
catch (error) {
|
|
254
192
|
console.error('Logout error:', error);
|
|
255
|
-
// 即使请求失败,仍然返回(由调用方处理清除本地状态)
|
|
256
193
|
throw error;
|
|
257
194
|
}
|
|
258
195
|
finally {
|
|
259
196
|
// 清空本地用户信息
|
|
260
|
-
|
|
261
|
-
this.emitUserChange();
|
|
197
|
+
oauthStore.clear();
|
|
262
198
|
}
|
|
263
199
|
}
|
|
264
200
|
/**
|
|
@@ -278,10 +214,11 @@ export class Sumor {
|
|
|
278
214
|
* - hasPermission('posts', '*') 或 hasPermission('posts') 检查是否有任何 posts 权限
|
|
279
215
|
*/
|
|
280
216
|
hasPermission(module, operation = '*') {
|
|
281
|
-
|
|
217
|
+
const user = oauthStore.getUser();
|
|
218
|
+
if (!user || !user.permissions) {
|
|
282
219
|
return false;
|
|
283
220
|
}
|
|
284
|
-
const userPermissions =
|
|
221
|
+
const userPermissions = user.permissions.split(',').map(p => p.trim());
|
|
285
222
|
// 如果 operation 为 *,检查是否有该模块的任何权限
|
|
286
223
|
if (operation === '*') {
|
|
287
224
|
return userPermissions.some(permission => permission.startsWith(`${module}:`));
|
|
@@ -296,10 +233,11 @@ export class Sumor {
|
|
|
296
233
|
* @returns 是否拥有该角色
|
|
297
234
|
*/
|
|
298
235
|
hasRole(role) {
|
|
299
|
-
|
|
236
|
+
const user = oauthStore.getUser();
|
|
237
|
+
if (!user || !user.roles) {
|
|
300
238
|
return false;
|
|
301
239
|
}
|
|
302
|
-
const userRoles =
|
|
240
|
+
const userRoles = user.roles.split(',');
|
|
303
241
|
return userRoles.some(r => r.trim() === role);
|
|
304
242
|
}
|
|
305
243
|
}
|
package/dist/web/Sumor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Sumor.js","sourceRoot":"","sources":["../../web/Sumor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAwD,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"Sumor.js","sourceRoot":"","sources":["../../web/Sumor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* URL Helper - 提供各种应用内 URL 的快速访问方法
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* OAuth URL 访问对象
|
|
6
|
+
*/
|
|
7
|
+
export declare const oauthUrl: {
|
|
8
|
+
/**
|
|
9
|
+
* 获取用户头像 URL
|
|
10
|
+
*/
|
|
11
|
+
avatar(id: string): string;
|
|
12
|
+
/**
|
|
13
|
+
* 获取首页 URL
|
|
14
|
+
*/
|
|
15
|
+
home(): string;
|
|
16
|
+
/**
|
|
17
|
+
* 获取站点管理页面 URL
|
|
18
|
+
*/
|
|
19
|
+
site(): string;
|
|
20
|
+
/**
|
|
21
|
+
* 获取用户中心 URL
|
|
22
|
+
*/
|
|
23
|
+
user(): string;
|
|
24
|
+
/**
|
|
25
|
+
* 获取反馈页面 URL
|
|
26
|
+
*/
|
|
27
|
+
feedback(): string;
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=UrlHelper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UrlHelper.d.ts","sourceRoot":"","sources":["../../web/UrlHelper.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;GAEG;AACH,eAAO,MAAM,QAAQ;IACnB;;OAEG;eACQ,MAAM,GAAG,MAAM;IAI1B;;OAEG;YACK,MAAM;IAId;;OAEG;YACK,MAAM;IAId;;OAEG;YACK,MAAM;IAId;;OAEG;gBACS,MAAM;CAGnB,CAAA"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* URL Helper - 提供各种应用内 URL 的快速访问方法
|
|
3
|
+
*/
|
|
4
|
+
import { oauthStore } from './OAuthStore';
|
|
5
|
+
/**
|
|
6
|
+
* OAuth URL 访问对象
|
|
7
|
+
*/
|
|
8
|
+
export const oauthUrl = {
|
|
9
|
+
/**
|
|
10
|
+
* 获取用户头像 URL
|
|
11
|
+
*/
|
|
12
|
+
avatar(id) {
|
|
13
|
+
return oauthStore.getEndpoint() + `/api/user/avatar/${id}`;
|
|
14
|
+
},
|
|
15
|
+
/**
|
|
16
|
+
* 获取首页 URL
|
|
17
|
+
*/
|
|
18
|
+
home() {
|
|
19
|
+
return oauthStore.getEndpoint();
|
|
20
|
+
},
|
|
21
|
+
/**
|
|
22
|
+
* 获取站点管理页面 URL
|
|
23
|
+
*/
|
|
24
|
+
site() {
|
|
25
|
+
return oauthStore.getEndpoint() + '/site';
|
|
26
|
+
},
|
|
27
|
+
/**
|
|
28
|
+
* 获取用户中心 URL
|
|
29
|
+
*/
|
|
30
|
+
user() {
|
|
31
|
+
return oauthStore.getEndpoint() + '/user';
|
|
32
|
+
},
|
|
33
|
+
/**
|
|
34
|
+
* 获取反馈页面 URL
|
|
35
|
+
*/
|
|
36
|
+
feedback() {
|
|
37
|
+
return oauthStore.getEndpoint() + '/user/feedback';
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=UrlHelper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UrlHelper.js","sourceRoot":"","sources":["../../web/UrlHelper.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAEzC;;GAEG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB;;OAEG;IACH,MAAM,CAAC,EAAU;QACf,OAAO,UAAU,CAAC,WAAW,EAAE,GAAG,oBAAoB,EAAE,EAAE,CAAA;IAC5D,CAAC;IAED;;OAEG;IACH,IAAI;QACF,OAAO,UAAU,CAAC,WAAW,EAAE,CAAA;IACjC,CAAC;IAED;;OAEG;IACH,IAAI;QACF,OAAO,UAAU,CAAC,WAAW,EAAE,GAAG,OAAO,CAAA;IAC3C,CAAC;IAED;;OAEG;IACH,IAAI;QACF,OAAO,UAAU,CAAC,WAAW,EAAE,GAAG,OAAO,CAAA;IAC3C,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,OAAO,UAAU,CAAC,WAAW,EAAE,GAAG,gBAAgB,CAAA;IACpD,CAAC;CACF,CAAA"}
|
package/dist/web/index.d.ts
CHANGED
package/dist/web/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../web/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,wBAAsB,UAAU,kBAa/B;AAED,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../web/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,wBAAsB,UAAU,kBAa/B;AAED,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA"}
|
package/dist/web/index.js
CHANGED
|
@@ -10,8 +10,9 @@ export async function setupSumor() {
|
|
|
10
10
|
await sumor.refreshToken();
|
|
11
11
|
// 挂载到全局 window 对象
|
|
12
12
|
window.sumor = sumor;
|
|
13
|
-
console.log('[setupSumor] Sumor initialized
|
|
13
|
+
console.log('[setupSumor] Sumor initialized');
|
|
14
14
|
console.log('✓ 完成轻呈云客户端初始化');
|
|
15
15
|
}
|
|
16
|
-
export { Sumor
|
|
16
|
+
export { Sumor } from './Sumor';
|
|
17
|
+
export { oauthUrl } from './UrlHelper';
|
|
17
18
|
//# sourceMappingURL=index.js.map
|
package/dist/web/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../web/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAE/B,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAA;IACtD,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAA;IAEzB,YAAY;IACZ,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAA;IACnD,MAAM,KAAK,CAAC,YAAY,EAAE,CAAA;IAE1B,kBAAkB;IAClB,MAAM,CAAC,KAAK,GAAG,KAAK,CAAA;IAEpB,OAAO,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../web/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAE/B,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAA;IACtD,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAA;IAEzB,YAAY;IACZ,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAA;IACnD,MAAM,KAAK,CAAC,YAAY,EAAE,CAAA;IAE1B,kBAAkB;IAClB,MAAM,CAAC,KAAK,GAAG,KAAK,CAAA;IAEpB,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAA;IAC7C,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAA;AAC9B,CAAC;AAED,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA"}
|