sumor 3.3.2 → 3.3.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 (70) hide show
  1. package/README.md +53 -0
  2. package/README.zh-CN.md +61 -7
  3. package/dist/server/controllers/logoutController.js +2 -2
  4. package/dist/server/controllers/mock/avatarController.d.ts +8 -0
  5. package/dist/server/controllers/mock/avatarController.d.ts.map +1 -0
  6. package/dist/server/controllers/mock/avatarController.js +15 -0
  7. package/dist/server/controllers/mock/avatarController.js.map +1 -0
  8. package/dist/server/controllers/mock/loginController.d.ts +8 -0
  9. package/dist/server/controllers/mock/loginController.d.ts.map +1 -0
  10. package/dist/server/controllers/mock/loginController.js +34 -0
  11. package/dist/server/controllers/mock/loginController.js.map +1 -0
  12. package/dist/server/controllers/mock/logoutController.d.ts +8 -0
  13. package/dist/server/controllers/mock/logoutController.d.ts.map +1 -0
  14. package/dist/server/controllers/mock/logoutController.js +17 -0
  15. package/dist/server/controllers/mock/logoutController.js.map +1 -0
  16. package/dist/server/controllers/mock/navController.d.ts +8 -0
  17. package/dist/server/controllers/mock/navController.d.ts.map +1 -0
  18. package/dist/server/controllers/mock/navController.js +93 -0
  19. package/dist/server/controllers/mock/navController.js.map +1 -0
  20. package/dist/server/controllers/mock/tokenController.d.ts +8 -0
  21. package/dist/server/controllers/mock/tokenController.d.ts.map +1 -0
  22. package/dist/server/controllers/mock/tokenController.js +89 -0
  23. package/dist/server/controllers/mock/tokenController.js.map +1 -0
  24. package/dist/server/controllers/oauthCallbackController.js +2 -2
  25. package/dist/server/controllers/tokenRefreshController.js +2 -2
  26. package/dist/server/index.d.ts +1 -1
  27. package/dist/server/index.js +2 -2
  28. package/dist/server/mock/mockConfig.d.ts +2 -4
  29. package/dist/server/mock/mockConfig.d.ts.map +1 -1
  30. package/dist/server/mock/mockConfig.js +11 -20
  31. package/dist/server/mock/mockConfig.js.map +1 -1
  32. package/dist/server/mock/mockRoutes.d.ts +13 -3
  33. package/dist/server/mock/mockRoutes.d.ts.map +1 -1
  34. package/dist/server/mock/mockRoutes.js +23 -85
  35. package/dist/server/mock/mockRoutes.js.map +1 -1
  36. package/dist/server/models/blacklistModel.js +2 -2
  37. package/dist/server/models/jwksModel.js +2 -2
  38. package/dist/server/routes.d.ts +1 -2
  39. package/dist/server/routes.d.ts.map +1 -1
  40. package/dist/server/routes.js +21 -29
  41. package/dist/server/routes.js.map +1 -1
  42. package/dist/server/services/OAuthService.d.ts +24 -0
  43. package/dist/server/services/OAuthService.d.ts.map +1 -0
  44. package/dist/server/services/OAuthService.js +32 -0
  45. package/dist/server/services/OAuthService.js.map +1 -0
  46. package/dist/server/services/oauth/MockDataGenerator.d.ts +18 -0
  47. package/dist/server/services/oauth/MockDataGenerator.d.ts.map +1 -0
  48. package/dist/server/services/oauth/MockDataGenerator.js +39 -0
  49. package/dist/server/services/oauth/MockDataGenerator.js.map +1 -0
  50. package/dist/server/services/oauth/OAuthMockService.d.ts +28 -0
  51. package/dist/server/services/oauth/OAuthMockService.d.ts.map +1 -0
  52. package/dist/server/services/oauth/OAuthMockService.js +184 -0
  53. package/dist/server/services/oauth/OAuthMockService.js.map +1 -0
  54. package/dist/server/services/oauth/OAuthProductionService.d.ts +22 -0
  55. package/dist/server/services/oauth/OAuthProductionService.d.ts.map +1 -0
  56. package/dist/server/services/oauth/OAuthProductionService.js +203 -0
  57. package/dist/server/services/oauth/OAuthProductionService.js.map +1 -0
  58. package/dist/server/services/oauth/OAuthServiceError.d.ts +9 -0
  59. package/dist/server/services/oauth/OAuthServiceError.d.ts.map +1 -0
  60. package/dist/server/services/oauth/OAuthServiceError.js +16 -0
  61. package/dist/server/services/oauth/OAuthServiceError.js.map +1 -0
  62. package/package.json +1 -1
  63. package/dist/server/mock/mockApiRoutes.d.ts +0 -14
  64. package/dist/server/mock/mockApiRoutes.d.ts.map +0 -1
  65. package/dist/server/mock/mockApiRoutes.js +0 -149
  66. package/dist/server/mock/mockApiRoutes.js.map +0 -1
  67. package/dist/server/services/oauthService.d.ts +0 -149
  68. package/dist/server/services/oauthService.d.ts.map +0 -1
  69. package/dist/server/services/oauthService.js +0 -360
  70. package/dist/server/services/oauthService.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OAuthMockService.js","sourceRoot":"","sources":["../../../../server/services/oauth/OAuthMockService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * OAuth 生产环境服务
3
+ * 通过 HTTP 客户端与真实 OAuth 服务交互
4
+ */
5
+ import type { ITokenResponse, IJWKSResponse, IBlacklistCheckResponse, ISendWechatMessageResponse, IBroadcastWechatMessageResponse } from '../../types/oauth';
6
+ export declare class OAuthProductionService {
7
+ exchangeCode(grantType: string, code: string, redirectUri: string, codeVerifier: string): Promise<ITokenResponse>;
8
+ getJWKS(): Promise<IJWKSResponse>;
9
+ checkBlacklist(sessionId: string): Promise<IBlacklistCheckResponse>;
10
+ revokeSession(sessionId: string): Promise<void>;
11
+ refreshAccessToken(refreshToken: string): Promise<ITokenResponse>;
12
+ sendWechatMessage(templateId: string, userId: string, data: Record<string, any>, url?: string): Promise<ISendWechatMessageResponse>;
13
+ broadcastWechatMessage(templateId: string, data: Record<string, {
14
+ value: string;
15
+ }>, roleIds: string[], url?: string): Promise<IBroadcastWechatMessageResponse>;
16
+ getUserInfo(userId: string): Promise<any>;
17
+ getUsersInfo(userIds: string[]): Promise<(any | null)[]>;
18
+ searchUsers(searchTerm: string, limit?: number): Promise<any[]>;
19
+ getPermissions(): Promise<any>;
20
+ updatePermissions(permissionsConfig: any): Promise<any>;
21
+ }
22
+ //# sourceMappingURL=OAuthProductionService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OAuthProductionService.d.ts","sourceRoot":"","sources":["../../../../server/services/oauth/OAuthProductionService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EACV,cAAc,EACd,aAAa,EACb,uBAAuB,EACvB,0BAA0B,EAC1B,+BAA+B,EAChC,MAAM,mBAAmB,CAAA;AAE1B,qBAAa,sBAAsB;IAC3B,YAAY,CAChB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,cAAc,CAAC;IAmBpB,OAAO,IAAI,OAAO,CAAC,aAAa,CAAC;IAcjC,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAkBnE,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAa/C,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAkBjE,iBAAiB,CACrB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,0BAA0B,CAAC;IAuBhC,sBAAsB,CAC1B,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,EACvC,OAAO,EAAE,MAAM,EAAE,EACjB,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,+BAA+B,CAAC;IAuBrC,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAgBzC,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC;IAyBxD,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAuBnE,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC;IAc9B,iBAAiB,CAAC,iBAAiB,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;CAa9D"}
@@ -0,0 +1,203 @@
1
+ "use strict";
2
+ /**
3
+ * OAuth 生产环境服务
4
+ * 通过 HTTP 客户端与真实 OAuth 服务交互
5
+ */
6
+ var __importDefault = (this && this.__importDefault) || function (mod) {
7
+ return (mod && mod.__esModule) ? mod : { "default": mod };
8
+ };
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.OAuthProductionService = void 0;
11
+ const http_1 = __importDefault(require("../../utils/http"));
12
+ const OAuthServiceError_1 = require("./OAuthServiceError");
13
+ class OAuthProductionService {
14
+ async exchangeCode(grantType, code, redirectUri, codeVerifier) {
15
+ try {
16
+ const httpClient = (0, http_1.default)();
17
+ const response = await httpClient.post('/token', {
18
+ code,
19
+ redirectUri
20
+ });
21
+ const body = response.data;
22
+ const tokenData = body?.data ?? response.data;
23
+ return tokenData;
24
+ }
25
+ catch (error) {
26
+ const errorMsg = error.response?.data?.message || error.message || '授权码交换失败';
27
+ throw new OAuthServiceError_1.OAuthServiceError('EXCHANGE_CODE_FAILED', errorMsg, error.response?.data);
28
+ }
29
+ }
30
+ async getJWKS() {
31
+ try {
32
+ const httpClient = (0, http_1.default)();
33
+ const response = await httpClient.get('/jwks');
34
+ const body = response.data;
35
+ return body?.data ?? response.data;
36
+ }
37
+ catch (error) {
38
+ const errorMsg = error.message || 'JWKS 获取失败';
39
+ throw new OAuthServiceError_1.OAuthServiceError('GET_JWKS_FAILED', errorMsg, error.response?.data);
40
+ }
41
+ }
42
+ async checkBlacklist(sessionId) {
43
+ try {
44
+ const httpClient = (0, http_1.default)();
45
+ const response = await httpClient.get(`/sessions/${sessionId}/blacklist`);
46
+ const body = response.data;
47
+ const inner = body?.data;
48
+ if (inner !== undefined) {
49
+ return { code: body.code, data: inner };
50
+ }
51
+ return response.data;
52
+ }
53
+ catch (error) {
54
+ const errorMsg = error.message || '会话黑名单检查失败';
55
+ throw new OAuthServiceError_1.OAuthServiceError('CHECK_BLACKLIST_FAILED', errorMsg, error.response?.data);
56
+ }
57
+ }
58
+ async revokeSession(sessionId) {
59
+ try {
60
+ const httpClient = (0, http_1.default)();
61
+ await httpClient.post('/logout', {
62
+ sessionId
63
+ });
64
+ }
65
+ catch (error) {
66
+ const errorMsg = error.message || '会话撤销失败';
67
+ throw new OAuthServiceError_1.OAuthServiceError('REVOKE_SESSION_FAILED', errorMsg, error.response?.data);
68
+ }
69
+ }
70
+ async refreshAccessToken(refreshToken) {
71
+ try {
72
+ const httpClient = (0, http_1.default)();
73
+ const response = await httpClient.put('/token', {
74
+ refreshToken
75
+ });
76
+ const body = response.data;
77
+ const tokenData = body?.data ?? response.data;
78
+ return tokenData;
79
+ }
80
+ catch (error) {
81
+ const errorMsg = error.response?.data?.message || error.message || 'Access Token 刷新失败';
82
+ throw new OAuthServiceError_1.OAuthServiceError('REFRESH_TOKEN_FAILED', errorMsg, error.response?.data);
83
+ }
84
+ }
85
+ async sendWechatMessage(templateId, userId, data, url) {
86
+ try {
87
+ const payload = {
88
+ templateId,
89
+ userId,
90
+ data
91
+ };
92
+ if (url) {
93
+ payload.url = url;
94
+ }
95
+ const httpClient = (0, http_1.default)();
96
+ const response = await httpClient.post('/message/wechat', payload);
97
+ return response.data;
98
+ }
99
+ catch (error) {
100
+ const errorMsg = error.response?.data?.message || error.message || '微信消息发送失败';
101
+ throw new OAuthServiceError_1.OAuthServiceError('SEND_WECHAT_MESSAGE_FAILED', errorMsg, error.response?.data);
102
+ }
103
+ }
104
+ async broadcastWechatMessage(templateId, data, roleIds, url) {
105
+ try {
106
+ const payload = {
107
+ templateId,
108
+ data,
109
+ roleIds
110
+ };
111
+ if (url) {
112
+ payload.url = url;
113
+ }
114
+ const httpClient = (0, http_1.default)();
115
+ const response = await httpClient.post('/message/wechat/broadcast', payload);
116
+ return response.data;
117
+ }
118
+ catch (error) {
119
+ const errorMsg = error.response?.data?.message || error.message || '批量发送微信消息失败';
120
+ throw new OAuthServiceError_1.OAuthServiceError('BROADCAST_WECHAT_MESSAGE_FAILED', errorMsg, error.response?.data);
121
+ }
122
+ }
123
+ async getUserInfo(userId) {
124
+ try {
125
+ if (!userId) {
126
+ return null;
127
+ }
128
+ const httpClient = (0, http_1.default)();
129
+ const response = await httpClient.get(`/users/${userId}`);
130
+ const user = response.data?.data || null;
131
+ return user;
132
+ }
133
+ catch (error) {
134
+ return null;
135
+ }
136
+ }
137
+ async getUsersInfo(userIds) {
138
+ try {
139
+ if (!userIds || userIds.length === 0) {
140
+ return [];
141
+ }
142
+ const uniqueIds = [...new Set(userIds.filter(Boolean))];
143
+ const httpClient = (0, http_1.default)();
144
+ const promises = uniqueIds.map(userId => this.getUserInfo(userId).catch(() => null));
145
+ const results = await Promise.all(promises);
146
+ const userMap = new Map();
147
+ uniqueIds.forEach((userId, index) => {
148
+ userMap.set(userId, results[index]);
149
+ });
150
+ const orderedResults = userIds.map(id => userMap.get(id) || null);
151
+ return orderedResults;
152
+ }
153
+ catch (error) {
154
+ return userIds.map(() => null);
155
+ }
156
+ }
157
+ async searchUsers(searchTerm, limit = 20) {
158
+ try {
159
+ if (!searchTerm || searchTerm.trim() === '') {
160
+ return [];
161
+ }
162
+ const httpClient = (0, http_1.default)();
163
+ const response = await httpClient.get('/users', {
164
+ params: {
165
+ term: searchTerm.trim(),
166
+ limit: Math.min(limit, 100),
167
+ skip: 0
168
+ }
169
+ });
170
+ const users = response.data?.data || [];
171
+ return users;
172
+ }
173
+ catch (error) {
174
+ return [];
175
+ }
176
+ }
177
+ async getPermissions() {
178
+ try {
179
+ const httpClient = (0, http_1.default)();
180
+ const response = await httpClient.get('/permissions');
181
+ const body = response.data;
182
+ return body?.data ?? response.data;
183
+ }
184
+ catch (error) {
185
+ const errorMsg = error.message || '权限配置获取失败';
186
+ throw new OAuthServiceError_1.OAuthServiceError('GET_PERMISSIONS_FAILED', errorMsg, error.response?.data);
187
+ }
188
+ }
189
+ async updatePermissions(permissionsConfig) {
190
+ try {
191
+ const httpClient = (0, http_1.default)();
192
+ const response = await httpClient.put('/permissions', { ...permissionsConfig });
193
+ const body = response.data;
194
+ return body?.data ?? response.data;
195
+ }
196
+ catch (error) {
197
+ const errorMsg = error.message || '权限配置更新失败';
198
+ throw new OAuthServiceError_1.OAuthServiceError('UPDATE_PERMISSIONS_FAILED', errorMsg, error.response?.data);
199
+ }
200
+ }
201
+ }
202
+ exports.OAuthProductionService = OAuthProductionService;
203
+ //# sourceMappingURL=OAuthProductionService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OAuthProductionService.js","sourceRoot":"","sources":["../../../../server/services/oauth/OAuthProductionService.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;AAEH,4DAA4C;AAC5C,2DAAuD;AASvD,MAAa,sBAAsB;IACjC,KAAK,CAAC,YAAY,CAChB,SAAiB,EACjB,IAAY,EACZ,WAAmB,EACnB,YAAoB;QAEpB,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,IAAA,cAAa,GAAE,CAAA;YAClC,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE;gBAC/C,IAAI;gBACJ,WAAW;aACZ,CAAC,CAAA;YAEF,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAgD,CAAA;YACtE,MAAM,SAAS,GAAG,IAAI,EAAE,IAAI,IAAK,QAAQ,CAAC,IAAuB,CAAA;YAEjE,OAAO,SAAS,CAAA;QAClB,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,IAAI,KAAK,CAAC,OAAO,IAAI,SAAS,CAAA;YAE5E,MAAM,IAAI,qCAAiB,CAAC,sBAAsB,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;QACrF,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,IAAA,cAAa,GAAE,CAAA;YAClC,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;YAE9C,MAAM,IAAI,GAAG,QAAQ,CAAC,IAA+C,CAAA;YACrE,OAAO,IAAI,EAAE,IAAI,IAAK,QAAQ,CAAC,IAAsB,CAAA;QACvD,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,IAAI,WAAW,CAAA;YAE7C,MAAM,IAAI,qCAAiB,CAAC,iBAAiB,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;QAChF,CAAC;IACH,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,SAAiB;QACpC,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,IAAA,cAAa,GAAE,CAAA;YAClC,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,aAAa,SAAS,YAAY,CAAC,CAAA;YAEzE,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAiE,CAAA;YACvF,MAAM,KAAK,GAAG,IAAI,EAAE,IAAI,CAAA;YACxB,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAA;YACzC,CAAC;YACD,OAAO,QAAQ,CAAC,IAA+B,CAAA;QACjD,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,IAAI,WAAW,CAAA;YAE7C,MAAM,IAAI,qCAAiB,CAAC,wBAAwB,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;QACvF,CAAC;IACH,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,SAAiB;QACnC,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,IAAA,cAAa,GAAE,CAAA;YAClC,MAAM,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE;gBAC/B,SAAS;aACV,CAAC,CAAA;QACJ,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,IAAI,QAAQ,CAAA;YAE1C,MAAM,IAAI,qCAAiB,CAAC,uBAAuB,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;QACtF,CAAC;IACH,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,YAAoB;QAC3C,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,IAAA,cAAa,GAAE,CAAA;YAClC,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE;gBAC9C,YAAY;aACb,CAAC,CAAA;YAEF,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAgD,CAAA;YACtE,MAAM,SAAS,GAAG,IAAI,EAAE,IAAI,IAAK,QAAQ,CAAC,IAAuB,CAAA;YAEjE,OAAO,SAAS,CAAA;QAClB,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,IAAI,KAAK,CAAC,OAAO,IAAI,mBAAmB,CAAA;YAEtF,MAAM,IAAI,qCAAiB,CAAC,sBAAsB,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;QACrF,CAAC;IACH,CAAC;IAED,KAAK,CAAC,iBAAiB,CACrB,UAAkB,EAClB,MAAc,EACd,IAAyB,EACzB,GAAY;QAEZ,IAAI,CAAC;YACH,MAAM,OAAO,GAAQ;gBACnB,UAAU;gBACV,MAAM;gBACN,IAAI;aACL,CAAA;YAED,IAAI,GAAG,EAAE,CAAC;gBACR,OAAO,CAAC,GAAG,GAAG,GAAG,CAAA;YACnB,CAAC;YAED,MAAM,UAAU,GAAG,IAAA,cAAa,GAAE,CAAA;YAClC,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAA;YAElE,OAAO,QAAQ,CAAC,IAAkC,CAAA;QACpD,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,IAAI,KAAK,CAAC,OAAO,IAAI,UAAU,CAAA;YAE7E,MAAM,IAAI,qCAAiB,CAAC,4BAA4B,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;QAC3F,CAAC;IACH,CAAC;IAED,KAAK,CAAC,sBAAsB,CAC1B,UAAkB,EAClB,IAAuC,EACvC,OAAiB,EACjB,GAAY;QAEZ,IAAI,CAAC;YACH,MAAM,OAAO,GAAQ;gBACnB,UAAU;gBACV,IAAI;gBACJ,OAAO;aACR,CAAA;YAED,IAAI,GAAG,EAAE,CAAC;gBACR,OAAO,CAAC,GAAG,GAAG,GAAG,CAAA;YACnB,CAAC;YAED,MAAM,UAAU,GAAG,IAAA,cAAa,GAAE,CAAA;YAClC,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,2BAA2B,EAAE,OAAO,CAAC,CAAA;YAE5E,OAAO,QAAQ,CAAC,IAAuC,CAAA;QACzD,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,IAAI,KAAK,CAAC,OAAO,IAAI,YAAY,CAAA;YAE/E,MAAM,IAAI,qCAAiB,CAAC,iCAAiC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;QAChG,CAAC;IACH,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,MAAc;QAC9B,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO,IAAI,CAAA;YACb,CAAC;YAED,MAAM,UAAU,GAAG,IAAA,cAAa,GAAE,CAAA;YAClC,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,UAAU,MAAM,EAAE,CAAC,CAAA;YACzD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,IAAI,IAAI,IAAI,CAAA;YAExC,OAAO,IAAI,CAAA;QACb,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,OAAiB;QAClC,IAAI,CAAC;YACH,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACrC,OAAO,EAAE,CAAA;YACX,CAAC;YAED,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;YACvD,MAAM,UAAU,GAAG,IAAA,cAAa,GAAE,CAAA;YAClC,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;YAEpF,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;YAE3C,MAAM,OAAO,GAAG,IAAI,GAAG,EAAe,CAAA;YACtC,SAAS,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;gBAClC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAA;YACrC,CAAC,CAAC,CAAA;YAEF,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,CAAA;YAEjE,OAAO,cAAc,CAAA;QACvB,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAA;QAChC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,UAAkB,EAAE,QAAgB,EAAE;QACtD,IAAI,CAAC;YACH,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;gBAC5C,OAAO,EAAE,CAAA;YACX,CAAC;YAED,MAAM,UAAU,GAAG,IAAA,cAAa,GAAE,CAAA;YAClC,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE;gBAC9C,MAAM,EAAE;oBACN,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE;oBACvB,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC;oBAC3B,IAAI,EAAE,CAAC;iBACR;aACF,CAAC,CAAA;YAEF,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,CAAA;YAEvC,OAAO,KAAK,CAAA;QACd,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,EAAE,CAAA;QACX,CAAC;IACH,CAAC;IAED,KAAK,CAAC,cAAc;QAClB,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,IAAA,cAAa,GAAE,CAAA;YAClC,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;YAErD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAqC,CAAA;YAC3D,OAAO,IAAI,EAAE,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAA;QACpC,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,IAAI,UAAU,CAAA;YAE5C,MAAM,IAAI,qCAAiB,CAAC,wBAAwB,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;QACvF,CAAC;IACH,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,iBAAsB;QAC5C,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,IAAA,cAAa,GAAE,CAAA;YAClC,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,cAAc,EAAE,EAAE,GAAG,iBAAiB,EAAE,CAAC,CAAA;YAE/E,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAqC,CAAA;YAC3D,OAAO,IAAI,EAAE,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAA;QACpC,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,IAAI,UAAU,CAAA;YAE5C,MAAM,IAAI,qCAAiB,CAAC,2BAA2B,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;QAC1F,CAAC;IACH,CAAC;CACF;AA3OD,wDA2OC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * OAuth 服务自定义错误
3
+ */
4
+ export declare class OAuthServiceError extends Error {
5
+ code: string;
6
+ details?: any;
7
+ constructor(code: string, message: string, details?: any);
8
+ }
9
+ //# sourceMappingURL=OAuthServiceError.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OAuthServiceError.d.ts","sourceRoot":"","sources":["../../../../server/services/oauth/OAuthServiceError.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,qBAAa,iBAAkB,SAAQ,KAAK;IAEjC,IAAI,EAAE,MAAM;IAEZ,OAAO,CAAC,EAAE,GAAG;gBAFb,IAAI,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACR,OAAO,CAAC,EAAE,GAAG;CAKvB"}
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ /**
3
+ * OAuth 服务自定义错误
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.OAuthServiceError = void 0;
7
+ class OAuthServiceError extends Error {
8
+ constructor(code, message, details) {
9
+ super(message);
10
+ this.code = code;
11
+ this.details = details;
12
+ this.name = 'OAuthServiceError';
13
+ }
14
+ }
15
+ exports.OAuthServiceError = OAuthServiceError;
16
+ //# sourceMappingURL=OAuthServiceError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OAuthServiceError.js","sourceRoot":"","sources":["../../../../server/services/oauth/OAuthServiceError.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,MAAa,iBAAkB,SAAQ,KAAK;IAC1C,YACS,IAAY,EACnB,OAAe,EACR,OAAa;QAEpB,KAAK,CAAC,OAAO,CAAC,CAAA;QAJP,SAAI,GAAJ,IAAI,CAAQ;QAEZ,YAAO,GAAP,OAAO,CAAM;QAGpB,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAA;IACjC,CAAC;CACF;AATD,8CASC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sumor",
3
- "version": "3.3.2",
3
+ "version": "3.3.4",
4
4
  "description": "Sumor OAuth framework",
5
5
  "main": "dist/server/index.js",
6
6
  "types": "dist/server/index.d.ts",
@@ -1,14 +0,0 @@
1
- /**
2
- * Mock API 路由(挂载到 /api/oauth/mock)
3
- *
4
- * 提供给 web SDK 在 mock 模式下直接调用的接口,无需页面跳转。
5
- *
6
- * 路由列表:
7
- * POST /api/oauth/mock/login - 签发 mock token,返回用户信息
8
- * POST /api/oauth/mock/logout - 清除 mock token cookie
9
- * GET /api/oauth/mock/avatar/:id - 返回 404(mock 模式无头像服务)
10
- * GET /api/oauth/mock/nav/:target - 导航占位页(home/site/user/feedback)
11
- */
12
- declare const mockApiRoutes: import("express-serve-static-core").Router;
13
- export default mockApiRoutes;
14
- //# sourceMappingURL=mockApiRoutes.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mockApiRoutes.d.ts","sourceRoot":"","sources":["../../../server/mock/mockApiRoutes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAYH,QAAA,MAAM,aAAa,4CAAmB,CAAA;AA0ItC,eAAe,aAAa,CAAA"}
@@ -1,149 +0,0 @@
1
- "use strict";
2
- /**
3
- * Mock API 路由(挂载到 /api/oauth/mock)
4
- *
5
- * 提供给 web SDK 在 mock 模式下直接调用的接口,无需页面跳转。
6
- *
7
- * 路由列表:
8
- * POST /api/oauth/mock/login - 签发 mock token,返回用户信息
9
- * POST /api/oauth/mock/logout - 清除 mock token cookie
10
- * GET /api/oauth/mock/avatar/:id - 返回 404(mock 模式无头像服务)
11
- * GET /api/oauth/mock/nav/:target - 导航占位页(home/site/user/feedback)
12
- */
13
- var __importDefault = (this && this.__importDefault) || function (mod) {
14
- return (mod && mod.__esModule) ? mod : { "default": mod };
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- const express_1 = __importDefault(require("express"));
18
- const mockConfig_1 = require("./mockConfig");
19
- const mockTokenUtils_1 = require("./mockTokenUtils");
20
- const oauthTokenUtils_1 = require("../utils/oauthTokenUtils");
21
- const mockApiRoutes = express_1.default.Router();
22
- /**
23
- * POST /api/oauth/mock/login
24
- * 直接签发 mock token,写入 HttpOnly Cookie,并返回用户信息
25
- * web SDK 拿到用户信息后直接更新 store,无需页面跳转
26
- */
27
- mockApiRoutes.post('/login', (_req, res) => {
28
- const { user } = (0, mockConfig_1.getMockConfig)();
29
- const accessToken = (0, mockTokenUtils_1.generateMockAccessToken)(user);
30
- const refreshToken = (0, mockTokenUtils_1.generateMockRefreshToken)(user);
31
- (0, oauthTokenUtils_1.setOAuthTokenCookie)(res, accessToken, mockTokenUtils_1.MOCK_ACCESS_TOKEN_EXPIRES_IN, 'access');
32
- (0, oauthTokenUtils_1.setOAuthTokenCookie)(res, refreshToken, mockTokenUtils_1.MOCK_REFRESH_TOKEN_EXPIRES_IN, 'refresh');
33
- return res.json({
34
- code: 'OK',
35
- message: '登录成功',
36
- data: {
37
- isMock: true,
38
- user: {
39
- id: user.userId,
40
- isVerified: user.isVerified,
41
- roles: user.roles,
42
- permissions: user.permissions
43
- }
44
- }
45
- });
46
- });
47
- /**
48
- * POST /api/oauth/mock/logout
49
- * 清除 mock token cookie
50
- */
51
- mockApiRoutes.post('/logout', (_req, res) => {
52
- res.clearCookie('access_token');
53
- res.clearCookie('refresh_token');
54
- return res.json({ code: 'OK', message: '登出成功' });
55
- });
56
- /**
57
- * GET /api/oauth/mock/avatar/:id
58
- * mock 模式无头像服务,直接返回 404
59
- */
60
- mockApiRoutes.get('/avatar/:id', (_req, res) => {
61
- res.status(404).end();
62
- });
63
- const NAV_LABELS = {
64
- home: '首页',
65
- site: '站点管理',
66
- user: '用户中心',
67
- feedback: '意见反馈'
68
- };
69
- /**
70
- * GET /api/oauth/mock/nav/:target
71
- * mock 模式导航占位页,展示目标页面名称并提供回退按钮
72
- */
73
- mockApiRoutes.get('/nav/:target', (req, res) => {
74
- const target = req.params['target'];
75
- const label = NAV_LABELS[target] || target;
76
- res.setHeader('Content-Type', 'text/html; charset=utf-8');
77
- res.send(`<!DOCTYPE html>
78
- <html lang="zh-CN">
79
- <head>
80
- <meta charset="UTF-8" />
81
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
82
- <title>[Mock] ${label}</title>
83
- <style>
84
- *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
85
- body {
86
- min-height: 100vh;
87
- display: flex;
88
- align-items: center;
89
- justify-content: center;
90
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
91
- background: #f5f5f5;
92
- color: #333;
93
- }
94
- .card {
95
- background: #fff;
96
- border-radius: 12px;
97
- box-shadow: 0 4px 24px rgba(0,0,0,.08);
98
- padding: 48px 56px;
99
- text-align: center;
100
- max-width: 420px;
101
- width: 90%;
102
- }
103
- .badge {
104
- display: inline-block;
105
- background: #fff3cd;
106
- color: #856404;
107
- font-size: 12px;
108
- font-weight: 600;
109
- letter-spacing: .5px;
110
- padding: 3px 10px;
111
- border-radius: 99px;
112
- margin-bottom: 20px;
113
- }
114
- h1 {
115
- font-size: 24px;
116
- font-weight: 700;
117
- margin-bottom: 8px;
118
- }
119
- p {
120
- font-size: 14px;
121
- color: #888;
122
- margin-bottom: 32px;
123
- line-height: 1.6;
124
- }
125
- button {
126
- background: #333;
127
- color: #fff;
128
- border: none;
129
- border-radius: 8px;
130
- padding: 10px 28px;
131
- font-size: 14px;
132
- cursor: pointer;
133
- transition: background .15s;
134
- }
135
- button:hover { background: #555; }
136
- </style>
137
- </head>
138
- <body>
139
- <div class="card">
140
- <span class="badge">MOCK</span>
141
- <h1>${label}</h1>
142
- <p>当前处于 Mock 模式,此页面为占位页。<br/>真实环境中将跳转到 OAuth 服务的「${label}」页面。</p>
143
- <button onclick="history.back()">返回上一页</button>
144
- </div>
145
- </body>
146
- </html>`);
147
- });
148
- exports.default = mockApiRoutes;
149
- //# sourceMappingURL=mockApiRoutes.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mockApiRoutes.js","sourceRoot":"","sources":["../../../server/mock/mockApiRoutes.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;;;;AAEH,sDAAoD;AACpD,6CAA4C;AAC5C,qDAKyB;AACzB,8DAA8D;AAE9D,MAAM,aAAa,GAAG,iBAAO,CAAC,MAAM,EAAE,CAAA;AAEtC;;;;GAIG;AACH,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAa,EAAE,GAAa,EAAE,EAAE;IAC5D,MAAM,EAAE,IAAI,EAAE,GAAG,IAAA,0BAAa,GAAE,CAAA;IAEhC,MAAM,WAAW,GAAG,IAAA,wCAAuB,EAAC,IAAI,CAAC,CAAA;IACjD,MAAM,YAAY,GAAG,IAAA,yCAAwB,EAAC,IAAI,CAAC,CAAA;IAEnD,IAAA,qCAAmB,EAAC,GAAG,EAAE,WAAW,EAAE,6CAA4B,EAAE,QAAQ,CAAC,CAAA;IAC7E,IAAA,qCAAmB,EAAC,GAAG,EAAE,YAAY,EAAE,8CAA6B,EAAE,SAAS,CAAC,CAAA;IAEhF,OAAO,GAAG,CAAC,IAAI,CAAC;QACd,IAAI,EAAE,IAAI;QACV,OAAO,EAAE,MAAM;QACf,IAAI,EAAE;YACJ,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE;gBACJ,EAAE,EAAE,IAAI,CAAC,MAAM;gBACf,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,WAAW,EAAE,IAAI,CAAC,WAAW;aAC9B;SACF;KACF,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF;;;GAGG;AACH,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,IAAa,EAAE,GAAa,EAAE,EAAE;IAC7D,GAAG,CAAC,WAAW,CAAC,cAAc,CAAC,CAAA;IAC/B,GAAG,CAAC,WAAW,CAAC,eAAe,CAAC,CAAA;IAEhC,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAA;AAClD,CAAC,CAAC,CAAA;AAEF;;;GAGG;AACH,aAAa,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,IAAa,EAAE,GAAa,EAAE,EAAE;IAChE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAA;AACvB,CAAC,CAAC,CAAA;AAEF,MAAM,UAAU,GAA2B;IACzC,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;IACZ,QAAQ,EAAE,MAAM;CACjB,CAAA;AAED;;;GAGG;AACH,aAAa,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC,GAAY,EAAE,GAAa,EAAE,EAAE;IAChE,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAW,CAAA;IAC7C,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,MAAM,CAAA;IAE1C,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,0BAA0B,CAAC,CAAA;IACzD,GAAG,CAAC,IAAI,CAAC;;;;;kBAKO,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UA2Db,KAAK;uDACwC,KAAK;;;;QAIpD,CAAC,CAAA;AACT,CAAC,CAAC,CAAA;AAEF,kBAAe,aAAa,CAAA"}
@@ -1,149 +0,0 @@
1
- /**
2
- * OAuth 服务层
3
- *
4
- * 提供 OAuth 相关的业务操作,包括 Token 管理、黑名单检查等。
5
- * 在 APIs 层基础上添加了错误处理、日志记录等功能。
6
- */
7
- import type { ITokenResponse, IJWKSResponse, IBlacklistCheckResponse, ISendWechatMessageResponse, IBroadcastWechatMessageResponse } from '../types/oauth';
8
- /**
9
- * OAuth 服务自定义错误
10
- */
11
- export declare class OAuthServiceError extends Error {
12
- code: string;
13
- details?: any;
14
- constructor(code: string, message: string, details?: any);
15
- }
16
- /**
17
- * OAuth 服务类
18
- * 提供 OAuth 相关的业务操作和 API 调用
19
- */
20
- export declare class OAuthService {
21
- constructor();
22
- /**
23
- * 用授权码交换 Token
24
- * RFC 6749 §4.1.3
25
- *
26
- * @param grantType 授权类型,固定为 'authorization_code'
27
- * @param code 授权码
28
- * @param redirectUri 回调地址
29
- * @param codeVerifier PKCE code_verifier
30
- * @returns Token 响应
31
- * @throws OAuthServiceError 当交换失败时抛出异常
32
- */
33
- exchangeCode(grantType: string, code: string, redirectUri: string, codeVerifier: string): Promise<ITokenResponse>;
34
- /**
35
- * 获取授权服务器的 JWKS(JSON Web Key Set)
36
- * 用于获取签名公钥,验证 JWT
37
- *
38
- * @returns JWKS 响应,包含签名密钥列表
39
- * @throws OAuthServiceError 当获取失败时抛出异常
40
- */
41
- getJWKS(): Promise<IJWKSResponse>;
42
- /**
43
- * 检查会话是否在黑名单中
44
- * 用于检查会话是否已被撤销
45
- *
46
- * @param sessionId 会话 ID(UUID)
47
- * @returns 黑名单检查响应
48
- * @throws OAuthServiceError 当检查失败时抛出异常
49
- */
50
- checkBlacklist(sessionId: string): Promise<IBlacklistCheckResponse>;
51
- /**
52
- * 撤销会话(注销 Token)
53
- * RFC 7009
54
- *
55
- * @param sessionId 要撤销的会话 ID
56
- * @throws OAuthServiceError 当撤销失败时抛出异常
57
- */
58
- revokeSession(sessionId: string): Promise<void>;
59
- /**
60
- * 刷新 Access Token
61
- * RFC 6749 §6
62
- *
63
- * @param refreshToken 刷新令牌(仅支持驼峰格式 refreshToken,不支持下划线 refresh_token)
64
- * @returns Token 响应,与 exchangeCode 格式一致
65
- * @throws OAuthServiceError 当刷新失败时抛出异常
66
- */
67
- refreshAccessToken(refreshToken: string): Promise<ITokenResponse>;
68
- /**
69
- * 发送微信模板消息
70
- *
71
- * @param templateId 微信消息模板ID
72
- * @param userId 用户ID,系统会内部查找对应的微信OpenID
73
- * @param data 消息模板数据,键值对形式
74
- * @param url 点击消息后跳转的URL(可选)
75
- * @returns 发送结果,包含消息ID
76
- * @throws OAuthServiceError 当发送失败时抛出异常
77
- */
78
- sendWechatMessage(templateId: string, userId: string, data: Record<string, any>, url?: string): Promise<ISendWechatMessageResponse>;
79
- /**
80
- * 批量发送微信模板消息给指定角色的用户
81
- *
82
- * @param templateId 微信消息模板ID
83
- * @param data 消息模板数据,格式: { "key": { "value": "content" }, ... }
84
- * @param roleIds 目标用户的角色ID数组
85
- * @param url 点击消息后跳转的URL(可选)
86
- * @returns 批量发送结果,包含发送统计和详细结果
87
- * @throws OAuthServiceError 当批量发送失败时抛出异常
88
- */
89
- broadcastWechatMessage(templateId: string, data: Record<string, {
90
- value: string;
91
- }>, roleIds: string[], url?: string): Promise<IBroadcastWechatMessageResponse>;
92
- /**
93
- * 获取单个用户信息
94
- * GET /api/oauth/users/:userId
95
- *
96
- * @param userId 用户ID
97
- * @returns 用户信息或 null(如果用户不存在)
98
- * @throws OAuthServiceError 当获取失败时抛出异常
99
- */
100
- getUserInfo(userId: string): Promise<any>;
101
- /**
102
- * 批量获取用户信息
103
- * 并行请求多个用户信息,提高性能
104
- *
105
- * @param userIds 用户ID数组
106
- * @returns 用户信息数组(保持输入顺序,不存在的用户为 null)
107
- * @throws OAuthServiceError 当批量获取失败时抛出异常
108
- */
109
- getUsersInfo(userIds: string[]): Promise<(any | null)[]>;
110
- /**
111
- * 搜索用户
112
- * GET /api/oauth/users?term=xxx&limit=20
113
- *
114
- * @param searchTerm 搜索词
115
- * @param limit 返回最多数量(默认20,最大100)
116
- * @returns 搜索到的用户数组
117
- * @throws OAuthServiceError 当搜索失败时抛出异常
118
- */
119
- searchUsers(searchTerm: string, limit?: number): Promise<any[]>;
120
- /**
121
- * 获取当前客户端的权限配置
122
- * GET /api/oauth/permissions
123
- *
124
- * @returns 权限树和客户端权限配置
125
- * @throws OAuthServiceError 当获取失败时抛出异常
126
- */
127
- getPermissions(): Promise<any>;
128
- /**
129
- * 更新当前客户端的权限配置
130
- * PUT /api/oauth/permissions
131
- *
132
- * @param permissionsConfig 权限配置对象,包含:
133
- * - permissions: 权限数组 ["module:operation"]
134
- * - permissionLabels: 模块标签数组 [{module, zh, en}]
135
- * @returns 更新后的权限配置
136
- * @throws OAuthServiceError 当更新失败时抛出异常
137
- */
138
- updatePermissions(permissionsConfig: any): Promise<any>;
139
- }
140
- /**
141
- * 初始化 OAuth 服务
142
- */
143
- export declare const initOAuthService: () => OAuthService;
144
- /**
145
- * 获取 OAuth 服务实例
146
- */
147
- export declare const getOAuthService: () => OAuthService | null;
148
- export default OAuthService;
149
- //# sourceMappingURL=oauthService.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"oauthService.d.ts","sourceRoot":"","sources":["../../../server/services/oauthService.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EACV,cAAc,EACd,aAAa,EACb,uBAAuB,EACvB,0BAA0B,EAC1B,+BAA+B,EAChC,MAAM,gBAAgB,CAAA;AAEvB;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,KAAK;IAEjC,IAAI,EAAE,MAAM;IAEZ,OAAO,CAAC,EAAE,GAAG;gBAFb,IAAI,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACR,OAAO,CAAC,EAAE,GAAG;CAKvB;AAED;;;GAGG;AACH,qBAAa,YAAY;;IAGvB;;;;;;;;;;OAUG;IACG,YAAY,CAChB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,cAAc,CAAC;IAoB1B;;;;;;OAMG;IACG,OAAO,IAAI,OAAO,CAAC,aAAa,CAAC;IAevC;;;;;;;OAOG;IACG,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAmBzE;;;;;;OAMG;IACG,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAarD;;;;;;;OAOG;IACG,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAmBvE;;;;;;;;;OASG;IACG,iBAAiB,CACrB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,0BAA0B,CAAC;IAuBtC;;;;;;;;;OASG;IACG,sBAAsB,CAC1B,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,EACvC,OAAO,EAAE,MAAM,EAAE,EACjB,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,+BAA+B,CAAC;IAuB3C;;;;;;;OAOG;IACG,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAgB/C;;;;;;;OAOG;IACG,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC;IA+B9D;;;;;;;;OAQG;IACG,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAuBzE;;;;;;OAMG;IACG,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC;IAepC;;;;;;;;;OASG;IACG,iBAAiB,CAAC,iBAAiB,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;CAkB9D;AAKD;;GAEG;AACH,eAAO,MAAM,gBAAgB,QAAO,YAOnC,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,eAAe,QAAO,YAAY,GAAG,IAEjD,CAAA;AAED,eAAe,YAAY,CAAA"}