@wps-agent/wps-sdk 1.0.0

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 (37) hide show
  1. package/dist/api/client.d.ts +374 -0
  2. package/dist/api/client.d.ts.map +1 -0
  3. package/dist/api/client.js +566 -0
  4. package/dist/api/client.js.map +1 -0
  5. package/dist/auth/providers/base.d.ts +23 -0
  6. package/dist/auth/providers/base.d.ts.map +1 -0
  7. package/dist/auth/providers/base.js +43 -0
  8. package/dist/auth/providers/base.js.map +1 -0
  9. package/dist/auth/providers/wps.d.ts +108 -0
  10. package/dist/auth/providers/wps.d.ts.map +1 -0
  11. package/dist/auth/providers/wps.js +242 -0
  12. package/dist/auth/providers/wps.js.map +1 -0
  13. package/dist/auth/server.d.ts +50 -0
  14. package/dist/auth/server.d.ts.map +1 -0
  15. package/dist/auth/server.js +251 -0
  16. package/dist/auth/server.js.map +1 -0
  17. package/dist/auth/storage/file.d.ts +70 -0
  18. package/dist/auth/storage/file.d.ts.map +1 -0
  19. package/dist/auth/storage/file.js +120 -0
  20. package/dist/auth/storage/file.js.map +1 -0
  21. package/dist/auth/storage/interface.d.ts +14 -0
  22. package/dist/auth/storage/interface.d.ts.map +1 -0
  23. package/dist/auth/storage/interface.js +5 -0
  24. package/dist/auth/storage/interface.js.map +1 -0
  25. package/dist/index.d.ts +16 -0
  26. package/dist/index.d.ts.map +1 -0
  27. package/dist/index.js +17 -0
  28. package/dist/index.js.map +1 -0
  29. package/dist/types/api-client.d.ts +229 -0
  30. package/dist/types/api-client.d.ts.map +1 -0
  31. package/dist/types/api-client.js +7 -0
  32. package/dist/types/api-client.js.map +1 -0
  33. package/dist/types/index.d.ts +5 -0
  34. package/dist/types/index.d.ts.map +1 -0
  35. package/dist/types/index.js +7 -0
  36. package/dist/types/index.js.map +1 -0
  37. package/package.json +53 -0
@@ -0,0 +1,566 @@
1
+ /**
2
+ * WPS API 客户端
3
+ *
4
+ * 封装对金山文档 API 的调用 - 纯 API 封装,无业务逻辑
5
+ */
6
+ import { z } from 'zod';
7
+ // 输入参数验证 Schema
8
+ const SearchFilesSchema = z.object({
9
+ keyword: z.string().optional(),
10
+ type: z.enum(['file_name', 'content', 'all']).default('all'),
11
+ pageSize: z.number().int().min(1).max(100).default(20),
12
+ pageToken: z.string().optional(),
13
+ fileType: z.enum(['folder', 'file', 'shortcut']).optional(),
14
+ withTotal: z.boolean().default(false),
15
+ });
16
+ /**
17
+ * WPS API 客户端
18
+ *
19
+ * 纯 API 封装,不包含任何业务逻辑
20
+ */
21
+ export class WpsApiClient {
22
+ authProvider;
23
+ userId;
24
+ logger;
25
+ apiBaseUrl;
26
+ constructor(options) {
27
+ this.authProvider = options.authProvider;
28
+ this.userId = options.userId || 'default';
29
+ this.logger = options.logger || console;
30
+ this.apiBaseUrl = options.apiBaseUrl || 'https://openapi.wps.cn';
31
+ }
32
+ /**
33
+ * 获取有效的 access_token
34
+ */
35
+ async getAccessToken() {
36
+ const token = await this.authProvider.getToken(this.userId);
37
+ if (!token) {
38
+ throw new Error('未找到有效的 access_token,请先完成授权');
39
+ }
40
+ return token.access_token;
41
+ }
42
+ /**
43
+ * 发送 HTTP 请求
44
+ */
45
+ async request(method, path, data, customHeaders) {
46
+ const token = await this.getAccessToken();
47
+ const url = `${this.apiBaseUrl}${path}`;
48
+ const headers = {
49
+ Authorization: `Bearer ${token}`,
50
+ 'Content-Type': 'application/json',
51
+ ...customHeaders,
52
+ };
53
+ this.logger.debug(`API 请求: ${method} ${url}`);
54
+ const response = await fetch(url, {
55
+ method,
56
+ headers,
57
+ body: data ? JSON.stringify(data) : undefined,
58
+ });
59
+ if (!response.ok) {
60
+ const errorText = await response.text();
61
+ throw new Error(`API 请求失败 (${response.status}): ${errorText}`);
62
+ }
63
+ return response.json();
64
+ }
65
+ // ========== Drive 相关 API ==========
66
+ /**
67
+ * 获取 Drive 列表
68
+ * API 文档: https://365.kdocs.cn/3rd/open/documents/app-integration-dev/wps365/server/yundoc/drive/get-drive-list
69
+ */
70
+ async getDrives(params) {
71
+ this.logger.info('获取 Drive 列表');
72
+ const query = new URLSearchParams();
73
+ query.append('page_size', params?.pageSize?.toString() || '10');
74
+ query.append('allotee_type', 'user');
75
+ query.append('sources', 'special');
76
+ const queryString = query.toString();
77
+ const path = queryString ? `/v7/drives?${queryString}` : '/v7/drives';
78
+ const response = await this.request('GET', path);
79
+ if (response.code !== 0) {
80
+ throw new Error(`获取 Drive 列表失败: ${response.msg}`);
81
+ }
82
+ return {
83
+ drives: response.data.items.map((item) => ({
84
+ id: item.id,
85
+ name: item.name,
86
+ companyId: item.company_id,
87
+ status: item.status,
88
+ quota: item.quota,
89
+ createdBy: {
90
+ id: item.created_by.id,
91
+ name: item.created_by.name,
92
+ type: item.created_by.type,
93
+ avatar: item.created_by.avatar,
94
+ companyId: item.created_by.company_id,
95
+ },
96
+ ctime: item.ctime,
97
+ mtime: item.mtime,
98
+ source: item.source,
99
+ description: item.description,
100
+ })),
101
+ nextPageToken: response.data.next_page_token,
102
+ };
103
+ }
104
+ // ========== 文件相关 API ==========
105
+ /**
106
+ * 创建文件/文件夹
107
+ * API 文档: https://openapi.wps.cn/v7/drives/{drive_id}/files/{parent_id}/create
108
+ */
109
+ async createFile(params) {
110
+ this.logger.info(`创建文件: ${params.name} (${params.fileType})`);
111
+ const response = await this.request('POST', `/v7/drives/${params.driveId}/files/${params.parentId}/create`, {
112
+ file_type: params.fileType,
113
+ name: params.name,
114
+ on_name_conflict: params.onNameConflict || 'rename',
115
+ });
116
+ if (response.code !== 0) {
117
+ throw new Error(`创建文件失败: ${response.msg}`);
118
+ }
119
+ return {
120
+ id: response.data.id,
121
+ linkId: response.data.link_id,
122
+ linkUrl: response.data.link_url,
123
+ driveId: response.data.drive_id,
124
+ name: response.data.name,
125
+ type: response.data.type,
126
+ };
127
+ }
128
+ /**
129
+ * 搜索文件
130
+ * API 文档: https://openapi.wps.cn/v7/files/search
131
+ */
132
+ async searchFiles(params) {
133
+ // 验证参数
134
+ const validated = SearchFilesSchema.parse(params);
135
+ this.logger.info(`搜索文件: ${validated.keyword || '(全部)'} (${validated.type})`);
136
+ const query = new URLSearchParams();
137
+ query.append('type', validated.type);
138
+ query.append('page_size', validated.pageSize.toString());
139
+ if (validated.keyword)
140
+ query.append('keyword', validated.keyword);
141
+ if (validated.pageToken)
142
+ query.append('page_token', validated.pageToken);
143
+ if (validated.fileType)
144
+ query.append('file_type', validated.fileType);
145
+ if (validated.withTotal)
146
+ query.append('with_total', 'true');
147
+ const response = await this.request('GET', `/v7/files/search?${query.toString()}`);
148
+ if (response.code !== 0) {
149
+ throw new Error(`搜索文件失败: ${response.msg}`);
150
+ }
151
+ return {
152
+ files: response.data.items.map((item) => ({
153
+ id: item.file.id,
154
+ name: item.file.name,
155
+ type: item.file.type,
156
+ linkUrl: item.file.link_url,
157
+ driveId: item.file.drive_id,
158
+ parentId: item.file.parent_id,
159
+ })),
160
+ total: response.data.total,
161
+ nextPageToken: response.data.next_page_token,
162
+ };
163
+ }
164
+ /**
165
+ * 获取文件信息
166
+ */
167
+ async getFile(driveId, fileId) {
168
+ this.logger.debug(`获取文件: ${fileId}`);
169
+ const response = await this.request('GET', `/v7/drives/${driveId}/files/${fileId}`);
170
+ if (response.code !== 0) {
171
+ throw new Error(`获取文件失败: ${response.msg}`);
172
+ }
173
+ return {
174
+ id: response.data.id,
175
+ name: response.data.name,
176
+ type: response.data.type,
177
+ linkUrl: response.data.link_url,
178
+ driveId: response.data.drive_id,
179
+ parentId: response.data.parent_id,
180
+ };
181
+ }
182
+ /**
183
+ * 列出文件
184
+ * API 文档: https://openapi.wps.cn/v7/drives/{drive_id}/files/{parent_id}/list
185
+ */
186
+ async listFiles(driveId, parentId, params) {
187
+ this.logger.debug(`列出文件: driveId=${driveId}, parentId=${parentId}`);
188
+ const query = new URLSearchParams();
189
+ query.append('page_size', (params?.pageSize || 100).toString());
190
+ if (params?.pageToken)
191
+ query.append('page_token', params.pageToken);
192
+ if (params?.fileType)
193
+ query.append('file_type', params.fileType);
194
+ if (params?.orderBy)
195
+ query.append('order_by', params.orderBy);
196
+ if (params?.orderByAsc !== undefined)
197
+ query.append('order_by_asc', params.orderByAsc.toString());
198
+ const queryString = query.toString();
199
+ const path = queryString
200
+ ? `/v7/drives/${driveId}/files/${parentId}/list?${queryString}`
201
+ : `/v7/drives/${driveId}/files/${parentId}/list`;
202
+ const response = await this.request('GET', path);
203
+ if (response.code !== 0) {
204
+ throw new Error(`列出文件失败: ${response.msg}`);
205
+ }
206
+ return {
207
+ files: response.data.items.map((item) => ({
208
+ id: item.id,
209
+ name: item.name,
210
+ type: item.type,
211
+ linkUrl: item.link_url,
212
+ driveId: item.drive_id,
213
+ parentId: item.parent_id,
214
+ createdAt: item.ctime,
215
+ modifiedAt: item.mtime,
216
+ fileSize: item.file_size,
217
+ })),
218
+ nextPageToken: response.data.next_page_token,
219
+ };
220
+ }
221
+ /**
222
+ * 删除文件
223
+ * API 文档: https://openapi.wps.cn/v7/drives/{drive_id}/files/{file_id}
224
+ */
225
+ async deleteFile(driveId, fileId) {
226
+ this.logger.info(`删除文件: ${fileId}`);
227
+ const response = await this.request('DELETE', `/v7/drives/${driveId}/files/${fileId}`);
228
+ if (response.code !== 0) {
229
+ throw new Error(`删除文件失败: ${response.msg}`);
230
+ }
231
+ }
232
+ /**
233
+ * 复制文件
234
+ * API 文档: https://openapi.wps.cn/v7/drives/{drive_id}/files/{file_id}/copy
235
+ */
236
+ async copyFile(params) {
237
+ this.logger.info(`复制文件: ${params.fileId}`);
238
+ const response = await this.request('POST', `/v7/drives/${params.driveId}/files/${params.fileId}/copy`, {
239
+ target_drive_id: params.targetDriveId,
240
+ target_parent_id: params.targetParentId,
241
+ on_name_conflict: params.onNameConflict || 'rename',
242
+ });
243
+ if (response.code !== 0) {
244
+ throw new Error(`复制文件失败: ${response.msg}`);
245
+ }
246
+ return {
247
+ id: response.data.id,
248
+ linkId: response.data.link_id,
249
+ linkUrl: response.data.link_url,
250
+ name: response.data.name,
251
+ };
252
+ }
253
+ /**
254
+ * 移动文件
255
+ * API 文档: https://openapi.wps.cn/v7/drives/{drive_id}/files/{file_id}/move
256
+ */
257
+ async moveFile(params) {
258
+ this.logger.info(`移动文件: ${params.fileId}`);
259
+ const response = await this.request('POST', `/v7/drives/${params.driveId}/files/${params.fileId}/move`, {
260
+ target_drive_id: params.targetDriveId,
261
+ target_parent_id: params.targetParentId,
262
+ on_name_conflict: params.onNameConflict || 'rename',
263
+ });
264
+ if (response.code !== 0) {
265
+ throw new Error(`移动文件失败: ${response.msg}`);
266
+ }
267
+ return {
268
+ id: response.data.id,
269
+ linkId: response.data.link_id,
270
+ linkUrl: response.data.link_url,
271
+ name: response.data.name,
272
+ };
273
+ }
274
+ /**
275
+ * 重命名文件
276
+ * API 文档: https://openapi.wps.cn/v7/drives/{drive_id}/files/{file_id}/rename
277
+ */
278
+ async renameFile(driveId, fileId, newName) {
279
+ this.logger.info(`重命名文件: ${fileId} -> ${newName}`);
280
+ const response = await this.request('POST', `/v7/drives/${driveId}/files/${fileId}/rename`, {
281
+ name: newName,
282
+ });
283
+ if (response.code !== 0) {
284
+ throw new Error(`重命名文件失败: ${response.msg}`);
285
+ }
286
+ return {
287
+ id: response.data.id,
288
+ name: response.data.name,
289
+ };
290
+ }
291
+ // ========== AirPage 相关 API ==========
292
+ /**
293
+ * 查询文档块
294
+ * API 文档: https://open.wps.cn/documents/app-integration-dev/wps365/server/airpage/introduce
295
+ * 端点: POST /v7/airpage/{file_id}/blocks
296
+ */
297
+ async getBlocks(fileId, arg) {
298
+ this.logger.debug(`获取块内容: ${fileId}, blockId: ${arg.blockId || 'doc'}`);
299
+ // 将 arg 参数进行 base64 编码
300
+ const encodedArg = Buffer.from(JSON.stringify(arg)).toString('base64');
301
+ const response = await this.request('POST', `/v7/airpage/${fileId}/blocks`, {
302
+ arg: encodedArg,
303
+ });
304
+ if (response.code !== 0) {
305
+ throw new Error(`获取块内容失败: ${response.msg}`);
306
+ }
307
+ return response.data.result;
308
+ }
309
+ /**
310
+ * 批量查询文档块
311
+ * API 文档: https://open.wps.cn/documents/app-integration-dev/wps365/server/airpage/introduce
312
+ * 端点: POST /v7/airpage/{file_id}/blocks/batch_get
313
+ */
314
+ async batchGetBlocks(fileId, arg) {
315
+ this.logger.debug(`批量获取块内容: ${fileId}, count: ${arg.blockIds.length}`);
316
+ const encodedArg = Buffer.from(JSON.stringify(arg)).toString('base64');
317
+ const response = await this.request('POST', `/v7/airpage/${fileId}/blocks/batch_get`, {
318
+ arg: encodedArg,
319
+ });
320
+ if (response.code !== 0) {
321
+ throw new Error(`批量获取块内容失败: ${response.msg}`);
322
+ }
323
+ return response.data.result;
324
+ }
325
+ /**
326
+ * 创建块内容
327
+ * API 文档: https://open.wps.cn/documents/app-integration-dev/wps365/server/airpage/introduce
328
+ * 端点: POST /v7/airpage/{file_id}/blocks/create
329
+ */
330
+ async createBlocks(fileId, arg) {
331
+ this.logger.info(`创建块内容: ${fileId}, blockId: ${arg.blockId}`);
332
+ // 将 arg 参数进行 base64 编码
333
+ const encodedArg = Buffer.from(JSON.stringify(arg)).toString('base64');
334
+ const response = await this.request('POST', `/v7/airpage/${fileId}/blocks/create`, {
335
+ arg: encodedArg,
336
+ });
337
+ if (response.code !== 0) {
338
+ throw new Error(`创建块内容失败: ${response.msg}`);
339
+ }
340
+ return response.data.results;
341
+ }
342
+ /**
343
+ * 更新文档块
344
+ * API 文档: https://open.wps.cn/documents/app-integration-dev/wps365/server/airpage/introduce
345
+ * 端点: POST /v7/airpage/{file_id}/blocks/update
346
+ */
347
+ async updateBlocks(fileId, arg) {
348
+ this.logger.info(`更新块内容: ${fileId}, operation: ${arg.operation}`);
349
+ const encodedArg = Buffer.from(JSON.stringify(arg)).toString('base64');
350
+ const response = await this.request('POST', `/v7/airpage/${fileId}/blocks/update`, {
351
+ arg: encodedArg,
352
+ });
353
+ if (response.code !== 0) {
354
+ throw new Error(`更新块内容失败: ${response.msg}`);
355
+ }
356
+ return response.data.result;
357
+ }
358
+ /**
359
+ * 批量更新文档块
360
+ * API 文档: https://open.wps.cn/documents/app-integration-dev/wps365/server/airpage/introduce
361
+ * 端点: POST /v7/airpage/{file_id}/blocks/batch_update
362
+ */
363
+ async batchUpdateBlocks(fileId, args) {
364
+ this.logger.info(`批量更新块内容: ${fileId}, count: ${args.length}`);
365
+ const encodedArg = Buffer.from(JSON.stringify(args)).toString('base64');
366
+ const response = await this.request('POST', `/v7/airpage/${fileId}/blocks/batch_update`, {
367
+ arg: encodedArg,
368
+ });
369
+ if (response.code !== 0) {
370
+ throw new Error(`批量更新块内容失败: ${response.msg}`);
371
+ }
372
+ return response.data.result;
373
+ }
374
+ /**
375
+ * 删除块内容
376
+ * API 文档: https://open.wps.cn/documents/app-integration-dev/wps365/server/airpage/introduce
377
+ * 端点: POST /v7/airpage/{file_id}/blocks/delete
378
+ */
379
+ async deleteBlocks(fileId, arg) {
380
+ this.logger.info(`删除块内容: ${fileId}, blockId: ${arg.blockId}`);
381
+ const encodedArg = Buffer.from(JSON.stringify(arg)).toString('base64');
382
+ const response = await this.request('POST', `/v7/airpage/${fileId}/blocks/delete`, {
383
+ arg: encodedArg,
384
+ });
385
+ if (response.code !== 0) {
386
+ throw new Error(`删除块内容失败: ${response.msg}`);
387
+ }
388
+ return response.data.result;
389
+ }
390
+ /**
391
+ * 批量删除块内容
392
+ * API 文档: https://open.wps.cn/documents/app-integration-dev/wps365/server/airpage/introduce
393
+ * 端点: POST /v7/airpage/{file_id}/blocks/batch_delete
394
+ */
395
+ async batchDeleteBlocks(fileId, args) {
396
+ this.logger.info(`批量删除块内容: ${fileId}, count: ${args.length}`);
397
+ const encodedArg = Buffer.from(JSON.stringify(args)).toString('base64');
398
+ const response = await this.request('POST', `/v7/airpage/${fileId}/blocks/batch_delete`, {
399
+ arg: encodedArg,
400
+ });
401
+ if (response.code !== 0) {
402
+ throw new Error(`批量删除块内容失败: ${response.msg}`);
403
+ }
404
+ return response.data.success_list;
405
+ }
406
+ /**
407
+ * 转换文档块
408
+ * API 文档: https://open.wps.cn/documents/app-integration-dev/wps365/server/airpage/introduce
409
+ * 端点: POST /v7/airpage/{file_id}/blocks/convert
410
+ */
411
+ async convertBlocks(fileId, arg) {
412
+ this.logger.info(`转换文档块: ${fileId}, format: ${arg.format}`);
413
+ const encodedArg = Buffer.from(JSON.stringify(arg)).toString('base64');
414
+ const response = await this.request('POST', `/v7/airpage/${fileId}/blocks/convert`, {
415
+ arg: encodedArg,
416
+ });
417
+ if (response.code !== 0) {
418
+ throw new Error(`转换文档块失败: ${response.msg}`);
419
+ }
420
+ const result = JSON.parse(Buffer.from(response.data.result, 'base64').toString('utf-8'));
421
+ return result.blocks;
422
+ }
423
+ // ========== 资源相关 API ==========
424
+ /**
425
+ * 申请上传地址(附件多段式上传 - 第一步)
426
+ * API 文档: https://365.kdocs.cn/3rd/open/documents/app-integration-dev/wps365/server/documents/attachments/multiupload-1-request-upload-address
427
+ */
428
+ async requestAttachmentUploadUrl(params) {
429
+ this.logger.info(`申请附件上传地址: ${params.fileName}`);
430
+ const response = await this.request('POST', `/v7/documents/${params.fileId}/attachments/upload/address`, {
431
+ name: params.fileName,
432
+ size: params.fileSize,
433
+ });
434
+ if (response.code !== 0) {
435
+ throw new Error(`申请上传地址失败: ${response.msg}`);
436
+ }
437
+ return {
438
+ uploadUrl: response.data.request.url,
439
+ uploadMethod: response.data.request.method,
440
+ uploadHeaders: response.data.request.headers,
441
+ key: response.data.send_back_params.key,
442
+ uploadId: response.data.upload_id,
443
+ };
444
+ }
445
+ /**
446
+ * 提交上传完成(附件多段式上传 - 第三步)
447
+ * API 文档: https://365.kdocs.cn/3rd/open/documents/app-integration-dev/wps365/server/documents/attachments/multiupload-3-commit-upload
448
+ */
449
+ async commitAttachmentUpload(params) {
450
+ this.logger.info(`提交附件上传完成: ${params.fileName}`);
451
+ const response = await this.request('POST', `/v7/documents/${params.fileId}/attachments/upload/complete`, {
452
+ params: {
453
+ etag: params.etag || '',
454
+ key: params.key,
455
+ },
456
+ upload_id: params.uploadId,
457
+ });
458
+ if (response.code !== 0) {
459
+ throw new Error(`提交上传完成失败: ${response.msg}`);
460
+ }
461
+ return {
462
+ attachmentId: response.data.attachment_id,
463
+ fileId: response.data.file_id,
464
+ fileName: response.data.file_name,
465
+ };
466
+ }
467
+ /**
468
+ * 批量查询附件信息
469
+ * API 文档: https://365.kdocs.cn/3rd/open/documents/app-integration-dev/wps365/server/documents/attachments/batch-query
470
+ */
471
+ async getAttachments(fileId) {
472
+ this.logger.debug(`查询附件列表: ${fileId}`);
473
+ const response = await this.request('GET', `/v3/files/${fileId}/attachments`);
474
+ if (response.code !== 0) {
475
+ throw new Error(`查询附件列表失败: ${response.msg}`);
476
+ }
477
+ return response.data.items.map((item) => ({
478
+ id: item.attachment_id,
479
+ fileName: item.file_name,
480
+ fileSize: item.file_size,
481
+ fileType: item.file_type,
482
+ downloadUrl: item.download_url,
483
+ createdAt: item.ctime,
484
+ }));
485
+ }
486
+ /**
487
+ * 上传附件(完整流程,封装多段式上传)
488
+ *
489
+ * @param fileId - 文档ID
490
+ * @param file - 文件对象(浏览器环境)或 Buffer(Node.js 环境)
491
+ * @param fileName - 文件名
492
+ * @param onProgress - 上传进度回调(可选)
493
+ *
494
+ * @example
495
+ * // 浏览器环境
496
+ * const result = await api.uploadAttachment('fileId', fileInput.files[0], 'document.pdf');
497
+ *
498
+ * // Node.js 环境
499
+ * const result = await api.uploadAttachment('fileId', fs.readFileSync('doc.pdf'), 'document.pdf');
500
+ */
501
+ async uploadAttachment(fileId, file, fileName, onProgress) {
502
+ let fileSize;
503
+ let actualFileName;
504
+ if (file instanceof File) {
505
+ fileSize = file.size;
506
+ actualFileName = fileName || file.name;
507
+ }
508
+ else {
509
+ fileSize = file.length;
510
+ actualFileName = fileName || 'attachment';
511
+ }
512
+ // 步骤1:申请上传地址
513
+ const uploadInfo = await this.requestAttachmentUploadUrl({
514
+ fileId,
515
+ fileName: actualFileName,
516
+ fileSize,
517
+ });
518
+ this.logger.debug(`获得上传地址: ${uploadInfo.uploadUrl}`);
519
+ const token = await this.getAccessToken();
520
+ try {
521
+ const uploadResponse = await fetch(uploadInfo.uploadUrl, {
522
+ method: uploadInfo.uploadMethod || 'PUT',
523
+ headers: {
524
+ Authorization: `Bearer ${token}`,
525
+ ...uploadInfo.uploadHeaders,
526
+ },
527
+ body: file,
528
+ });
529
+ if (!uploadResponse.ok) {
530
+ throw new Error(`文件上传失败: ${uploadResponse.statusText}`);
531
+ }
532
+ // 从云存储响应 header 中提取验证信息(WPS文档明确说明 etag 在 header 中)
533
+ const etag = JSON.parse(uploadResponse.headers.get('etag') || `""`);
534
+ const key = uploadResponse.headers.get('newfilename') ?? '';
535
+ // 步骤3:提交上传完成
536
+ const result = await this.commitAttachmentUpload({
537
+ fileId,
538
+ key,
539
+ uploadId: uploadInfo.uploadId,
540
+ fileName: actualFileName,
541
+ fileSize,
542
+ etag,
543
+ });
544
+ this.logger.info(`附件上传成功: ${result.attachmentId}`);
545
+ onProgress?.(100);
546
+ return result;
547
+ }
548
+ catch (error) {
549
+ this.logger.error(`附件上传失败: ${error.message}`);
550
+ throw error;
551
+ }
552
+ }
553
+ /**
554
+ * 上传图片(完整流程,封装多段式上传)
555
+ *
556
+ * @param fileId - 文档ID
557
+ * @param file - 图片文件对象或 Buffer
558
+ * @param fileName - 文件名(可选)
559
+ * @param onProgress - 上传进度回调(可选)
560
+ */
561
+ async uploadImage(fileId, file, fileName, onProgress) {
562
+ // 图片上传复用附件上传逻辑
563
+ return this.uploadAttachment(fileId, file, fileName, onProgress);
564
+ }
565
+ }
566
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAWxB,gBAAgB;AAChB,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;IAC5D,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACtD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC3D,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;CACtC,CAAC,CAAC;AAEH;;;;GAIG;AACH,MAAM,OAAO,YAAY;IACf,YAAY,CAAkB;IAC9B,MAAM,CAAS;IACf,MAAM,CAAS;IACf,UAAU,CAAS;IAE3B,YAAY,OAA2B;QACrC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;QACzC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,SAAS,CAAC;QAC1C,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC;QACxC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,wBAAwB,CAAC;IACnE,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,cAAc;QAC1B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAE5D,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAChD,CAAC;QAED,OAAO,KAAK,CAAC,YAAY,CAAC;IAC5B,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,OAAO,CACnB,MAAc,EACd,IAAY,EACZ,IAAc,EACd,aAAsC;QAEtC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAE1C,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,EAAE,CAAC;QACxC,MAAM,OAAO,GAA2B;YACtC,aAAa,EAAE,UAAU,KAAK,EAAE;YAChC,cAAc,EAAE,kBAAkB;YAClC,GAAG,aAAa;SACjB,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC;QAE9C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAChC,MAAM;YACN,OAAO;YACP,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;SAC9C,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,aAAa,QAAQ,CAAC,MAAM,MAAM,SAAS,EAAE,CAAC,CAAC;QACjE,CAAC;QAED,OAAO,QAAQ,CAAC,IAAI,EAAgB,CAAC;IACvC,CAAC;IAED,qCAAqC;IAErC;;;OAGG;IACH,KAAK,CAAC,SAAS,CAAC,MAAkD;QA0BhE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAEhC,MAAM,KAAK,GAAG,IAAI,eAAe,EAAE,CAAC;QACpC,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,IAAI,CAAC,CAAC;QAChE,KAAK,CAAC,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;QACrC,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAEnC,MAAM,WAAW,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,cAAc,WAAW,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC;QAEtE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CA6BhC,KAAK,EAAE,IAAI,CAAC,CAAC;QAEhB,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,kBAAkB,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;QACpD,CAAC;QAED,OAAO;YACL,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBACzC,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,SAAS,EAAE,IAAI,CAAC,UAAU;gBAC1B,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,SAAS,EAAE;oBACT,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE;oBACtB,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI;oBAC1B,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI;oBAC1B,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;oBAC9B,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,UAAU;iBACtC;gBACD,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,WAAW,EAAE,IAAI,CAAC,WAAW;aAC9B,CAAC,CAAC;YACH,aAAa,EAAE,QAAQ,CAAC,IAAI,CAAC,eAAe;SAC7C,CAAC;IACJ,CAAC;IAED,iCAAiC;IAEjC;;;OAGG;IACH,KAAK,CAAC,UAAU,CAAC,MAMhB;QAQC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC;QAE9D,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAWhC,MAAM,EAAE,cAAc,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,QAAQ,SAAS,EAAE;YACzE,SAAS,EAAE,MAAM,CAAC,QAAQ;YAC1B,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,gBAAgB,EAAE,MAAM,CAAC,cAAc,IAAI,QAAQ;SACpD,CAAC,CAAC;QAEH,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,WAAW,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;QAC7C,CAAC;QAED,OAAO;YACL,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE;YACpB,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,OAAO;YAC7B,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ;YAC/B,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ;YAC/B,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI;YACxB,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI;SACzB,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,WAAW,CAAC,MAOjB;QAYC,OAAO;QACP,MAAM,SAAS,GAAG,iBAAiB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAElD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,SAAS,CAAC,OAAO,IAAI,MAAM,KAAK,SAAS,CAAC,IAAI,GAAG,CAAC,CAAC;QAE7E,MAAM,KAAK,GAAG,IAAI,eAAe,EAAE,CAAC;QACpC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;QACrC,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;QACzD,IAAI,SAAS,CAAC,OAAO;YAAE,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;QAClE,IAAI,SAAS,CAAC,SAAS;YAAE,KAAK,CAAC,MAAM,CAAC,YAAY,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;QACzE,IAAI,SAAS,CAAC,QAAQ;YAAE,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;QACtE,IAAI,SAAS,CAAC,SAAS;YAAE,KAAK,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QAE5D,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAiBhC,KAAK,EAAE,oBAAoB,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAElD,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,WAAW,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;QAC7C,CAAC;QAED,OAAO;YACL,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBACxC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE;gBAChB,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI;gBACpB,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI;gBACpB,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ;gBAC3B,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ;gBAC3B,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS;aAC9B,CAAC,CAAC;YACH,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK;YAC1B,aAAa,EAAE,QAAQ,CAAC,IAAI,CAAC,eAAe;SAC7C,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CACX,OAAe,EACf,MAAc;QASd,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,MAAM,EAAE,CAAC,CAAC;QACrC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAWhC,KAAK,EAAE,cAAc,OAAO,UAAU,MAAM,EAAE,CAAC,CAAC;QAEnD,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,WAAW,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;QAC7C,CAAC;QAED,OAAO;YACL,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE;YACpB,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI;YACxB,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI;YACxB,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ;YAC/B,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ;YAC/B,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,SAAS;SAClC,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,SAAS,CACb,OAAe,EACf,QAAgB,EAChB,MAMC;QAeD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,OAAO,cAAc,QAAQ,EAAE,CAAC,CAAC;QAEpE,MAAM,KAAK,GAAG,IAAI,eAAe,EAAE,CAAC;QACpC,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,MAAM,EAAE,QAAQ,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;QAChE,IAAI,MAAM,EAAE,SAAS;YAAE,KAAK,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QACpE,IAAI,MAAM,EAAE,QAAQ;YAAE,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QACjE,IAAI,MAAM,EAAE,OAAO;YAAE,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QAC9D,IAAI,MAAM,EAAE,UAAU,KAAK,SAAS;YAClC,KAAK,CAAC,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;QAE7D,MAAM,WAAW,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,WAAW;YACtB,CAAC,CAAC,cAAc,OAAO,UAAU,QAAQ,SAAS,WAAW,EAAE;YAC/D,CAAC,CAAC,cAAc,OAAO,UAAU,QAAQ,OAAO,CAAC;QAEnD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAiBhC,KAAK,EAAE,IAAI,CAAC,CAAC;QAEhB,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,WAAW,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;QAC7C,CAAC;QAED,OAAO;YACL,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBACxC,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,OAAO,EAAE,IAAI,CAAC,QAAQ;gBACtB,OAAO,EAAE,IAAI,CAAC,QAAQ;gBACtB,QAAQ,EAAE,IAAI,CAAC,SAAS;gBACxB,SAAS,EAAE,IAAI,CAAC,KAAK;gBACrB,UAAU,EAAE,IAAI,CAAC,KAAK;gBACtB,QAAQ,EAAE,IAAI,CAAC,SAAS;aACzB,CAAC,CAAC;YACH,aAAa,EAAE,QAAQ,CAAC,IAAI,CAAC,eAAe;SAC7C,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,UAAU,CAAC,OAAe,EAAE,MAAc;QAC9C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,MAAM,EAAE,CAAC,CAAC;QAEpC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAGhC,QAAQ,EAAE,cAAc,OAAO,UAAU,MAAM,EAAE,CAAC,CAAC;QAEtD,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,WAAW,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,QAAQ,CAAC,MAMd;QAMC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAE3C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAShC,MAAM,EAAE,cAAc,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,MAAM,OAAO,EAAE;YACrE,eAAe,EAAE,MAAM,CAAC,aAAa;YACrC,gBAAgB,EAAE,MAAM,CAAC,cAAc;YACvC,gBAAgB,EAAE,MAAM,CAAC,cAAc,IAAI,QAAQ;SACpD,CAAC,CAAC;QAEH,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,WAAW,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;QAC7C,CAAC;QAED,OAAO;YACL,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE;YACpB,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,OAAO;YAC7B,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ;YAC/B,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI;SACzB,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,QAAQ,CAAC,MAMd;QAMC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAE3C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAShC,MAAM,EAAE,cAAc,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,MAAM,OAAO,EAAE;YACrE,eAAe,EAAE,MAAM,CAAC,aAAa;YACrC,gBAAgB,EAAE,MAAM,CAAC,cAAc;YACvC,gBAAgB,EAAE,MAAM,CAAC,cAAc,IAAI,QAAQ;SACpD,CAAC,CAAC;QAEH,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,WAAW,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;QAC7C,CAAC;QAED,OAAO;YACL,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE;YACpB,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,OAAO;YAC7B,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ;YAC/B,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI;SACzB,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,UAAU,CACd,OAAe,EACf,MAAc,EACd,OAAe;QAKf,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,MAAM,OAAO,OAAO,EAAE,CAAC,CAAC;QAEnD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAOhC,MAAM,EAAE,cAAc,OAAO,UAAU,MAAM,SAAS,EAAE;YACzD,IAAI,EAAE,OAAO;SACd,CAAC,CAAC;QAEH,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,YAAY,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;QAC9C,CAAC;QAED,OAAO;YACL,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE;YACpB,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI;SACzB,CAAC;IACJ,CAAC;IAED,uCAAuC;IAEvC;;;;OAIG;IACH,KAAK,CAAC,SAAS,CACb,MAAc,EACd,GAAyB;QAWzB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,MAAM,cAAc,GAAG,CAAC,OAAO,IAAI,KAAK,EAAE,CAAC,CAAC;QAExE,uBAAuB;QACvB,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAEvE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAehC,MAAM,EAAE,eAAe,MAAM,SAAS,EAAE;YACzC,GAAG,EAAE,UAAU;SAChB,CAAC,CAAC;QAEH,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,YAAY,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;QAC9C,CAAC;QAED,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;IAC9B,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,cAAc,CAClB,MAAc,EACd,GAA2B;QAW3B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,MAAM,YAAY,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QAEvE,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAEvE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAehC,MAAM,EAAE,eAAe,MAAM,mBAAmB,EAAE;YACnD,GAAG,EAAE,UAAU;SAChB,CAAC,CAAC;QAEH,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,cAAc,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;QAChD,CAAC;QAED,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;IAC9B,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,YAAY,CAChB,MAAc,EACd,GAIC;QAKD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,MAAM,cAAc,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QAE9D,uBAAuB;QACvB,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAEvE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAShC,MAAM,EAAE,eAAe,MAAM,gBAAgB,EAAE;YAChD,GAAG,EAAE,UAAU;SAChB,CAAC,CAAC;QAEH,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,YAAY,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;QAC9C,CAAC;QAED,OAAO,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;IAC/B,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,YAAY,CAChB,MAAc,EACd,GAIC;QAKD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,MAAM,gBAAgB,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC;QAElE,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAEvE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAShC,MAAM,EAAE,eAAe,MAAM,gBAAgB,EAAE;YAChD,GAAG,EAAE,UAAU;SAChB,CAAC,CAAC;QAEH,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,YAAY,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;QAC9C,CAAC;QAED,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;IAC9B,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,iBAAiB,CACrB,MAAc,EACd,IAIE;QAKF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,MAAM,YAAY,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QAE9D,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAExE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAShC,MAAM,EAAE,eAAe,MAAM,sBAAsB,EAAE;YACtD,GAAG,EAAE,UAAU;SAChB,CAAC,CAAC;QAEH,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,cAAc,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;QAChD,CAAC;QAED,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;IAC9B,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,YAAY,CAChB,MAAc,EACd,GAIC;QAKD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,MAAM,cAAc,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QAE9D,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAEvE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAShC,MAAM,EAAE,eAAe,MAAM,gBAAgB,EAAE;YAChD,GAAG,EAAE,UAAU;SAChB,CAAC,CAAC;QAEH,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,YAAY,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;QAC9C,CAAC;QAED,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;IAC9B,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,iBAAiB,CACrB,MAAc,EACd,IAIE;QAOF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,MAAM,YAAY,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QAE9D,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAExE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAUhC,MAAM,EAAE,eAAe,MAAM,sBAAsB,EAAE;YACtD,GAAG,EAAE,UAAU;SAChB,CAAC,CAAC;QAEH,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,cAAc,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;QAChD,CAAC;QAED,OAAO,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC;IACpC,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,aAAa,CACjB,MAAc,EACd,GAGC;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,MAAM,aAAa,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QAE5D,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAEvE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAMhC,MAAM,EAAE,eAAe,MAAM,iBAAiB,EAAE;YACjD,GAAG,EAAE,UAAU;SAChB,CAAC,CAAC;QAEH,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,YAAY,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;QAC9C,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QACzF,OAAO,MAAM,CAAC,MAAM,CAAC;IACvB,CAAC;IAED,iCAAiC;IAEjC;;;OAGG;IACH,KAAK,CAAC,0BAA0B,CAAC,MAKhC;QAOC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QAEjD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAehC,MAAM,EAAE,iBAAiB,MAAM,CAAC,MAAM,6BAA6B,EAAE;YACtE,IAAI,EAAE,MAAM,CAAC,QAAQ;YACrB,IAAI,EAAE,MAAM,CAAC,QAAQ;SACtB,CAAC,CAAC;QAEH,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,aAAa,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;QAC/C,CAAC;QAED,OAAO;YACL,SAAS,EAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG;YACpC,YAAY,EAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM;YAC1C,aAAa,EAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO;YAC5C,GAAG,EAAE,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG;YACvC,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,SAAS;SAOlC,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,sBAAsB,CAAC,MAO5B;QAKC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QAEjD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAQhC,MAAM,EAAE,iBAAiB,MAAM,CAAC,MAAM,8BAA8B,EAAE;YACvE,MAAM,EAAE;gBACN,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,EAAE;gBACvB,GAAG,EAAE,MAAM,CAAC,GAAG;aAChB;YACD,SAAS,EAAE,MAAM,CAAC,QAAQ;SAC3B,CAAC,CAAC;QAEH,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,aAAa,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;QAC/C,CAAC;QAED,OAAO;YACL,YAAY,EAAE,QAAQ,CAAC,IAAI,CAAC,aAAa;YACzC,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,OAAO;YAC7B,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,SAAS;SAClC,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,cAAc,CAAC,MAAc;QAUjC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,MAAM,EAAE,CAAC,CAAC;QAEvC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAahC,KAAK,EAAE,aAAa,MAAM,cAAc,CAAC,CAAC;QAE7C,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,aAAa,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;QAC/C,CAAC;QAED,OAAO,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACxC,EAAE,EAAE,IAAI,CAAC,aAAa;YACtB,QAAQ,EAAE,IAAI,CAAC,SAAS;YACxB,QAAQ,EAAE,IAAI,CAAC,SAAS;YACxB,QAAQ,EAAE,IAAI,CAAC,SAAS;YACxB,WAAW,EAAE,IAAI,CAAC,YAAY;YAC9B,SAAS,EAAE,IAAI,CAAC,KAAK;SACtB,CAAC,CAAC,CAAC;IACN,CAAC;IAED;;;;;;;;;;;;;;OAcG;IACH,KAAK,CAAC,gBAAgB,CACpB,MAAc,EACd,IAAmB,EACnB,QAAiB,EACjB,UAAuC;QAMvC,IAAI,QAAgB,CAAC;QACrB,IAAI,cAAsB,CAAC;QAE3B,IAAI,IAAI,YAAY,IAAI,EAAE,CAAC;YACzB,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;YACrB,cAAc,GAAG,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC;QACzC,CAAC;aAAM,CAAC;YACN,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC;YACvB,cAAc,GAAG,QAAQ,IAAI,YAAY,CAAC;QAC5C,CAAC;QAED,aAAa;QACb,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,0BAA0B,CAAC;YACvD,MAAM;YACN,QAAQ,EAAE,cAAc;YACxB,QAAQ;SACT,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,UAAU,CAAC,SAAS,EAAE,CAAC,CAAC;QAErD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAE1C,IAAI,CAAC;YACH,MAAM,cAAc,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,SAAS,EAAE;gBACvD,MAAM,EAAE,UAAU,CAAC,YAAY,IAAI,KAAK;gBACxC,OAAO,EAAE;oBACP,aAAa,EAAE,UAAU,KAAK,EAAE;oBAChC,GAAG,UAAU,CAAC,aAAa;iBAC5B;gBACD,IAAI,EAAE,IAAI;aACX,CAAC,CAAC;YAEH,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,CAAC;gBACvB,MAAM,IAAI,KAAK,CAAC,WAAW,cAAc,CAAC,UAAU,EAAE,CAAC,CAAC;YAC1D,CAAC;YAED,mDAAmD;YACnD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC;YACpE,MAAM,GAAG,GAAG,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;YAE5D,aAAa;YACb,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC;gBAC/C,MAAM;gBACN,GAAG;gBACH,QAAQ,EAAE,UAAU,CAAC,QAAQ;gBAC7B,QAAQ,EAAE,cAAc;gBACxB,QAAQ;gBACR,IAAI;aACL,CAAC,CAAC;YAEH,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;YACnD,UAAU,EAAE,CAAC,GAAG,CAAC,CAAC;YAElB,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAY,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;YACzD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,WAAW,CACf,MAAc,EACd,IAAmB,EACnB,QAAiB,EACjB,UAAuC;QAMvC,eAAe;QACf,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;IACnE,CAAC;CACF"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * OAuth2.0 认证提供商基类
3
+ */
4
+ import type { AuthProvider, OAuth2Config, TokenResponse } from '@wps-agent/shared';
5
+ export declare abstract class BaseOAuth2Provider implements AuthProvider {
6
+ protected config: OAuth2Config;
7
+ protected httpClient: {
8
+ post(url: string, data: unknown): Promise<{
9
+ data: TokenResponse;
10
+ }>;
11
+ };
12
+ constructor(config: OAuth2Config, httpClient: {
13
+ post(url: string, data: unknown): Promise<{
14
+ data: TokenResponse;
15
+ }>;
16
+ });
17
+ getAuthorizationUrl(state?: string): string;
18
+ exchangeCodeForToken(code: string): Promise<TokenResponse>;
19
+ refreshToken(refreshToken: string): Promise<TokenResponse>;
20
+ abstract validateToken(token: string): Promise<boolean>;
21
+ abstract revokeToken(token: string): Promise<void>;
22
+ }
23
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/auth/providers/base.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEnF,8BAAsB,kBAAmB,YAAW,YAAY;IAE5D,SAAS,CAAC,MAAM,EAAE,YAAY;IAC9B,SAAS,CAAC,UAAU,EAAE;QACpB,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;YAAE,IAAI,EAAE,aAAa,CAAA;SAAE,CAAC,CAAC;KACpE;gBAHS,MAAM,EAAE,YAAY,EACpB,UAAU,EAAE;QACpB,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;YAAE,IAAI,EAAE,aAAa,CAAA;SAAE,CAAC,CAAC;KACpE;IAGH,mBAAmB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM;IAerC,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAY1D,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAWhE,QAAQ,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IACvD,QAAQ,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CACnD"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * OAuth2.0 认证提供商基类
3
+ */
4
+ export class BaseOAuth2Provider {
5
+ config;
6
+ httpClient;
7
+ constructor(config, httpClient) {
8
+ this.config = config;
9
+ this.httpClient = httpClient;
10
+ }
11
+ getAuthorizationUrl(state) {
12
+ const params = new URLSearchParams({
13
+ client_id: this.config.client_id,
14
+ redirect_uri: this.config.redirect_uri,
15
+ response_type: 'code',
16
+ scope: this.config.scopes.join(' '),
17
+ });
18
+ if (state) {
19
+ params.append('state', state);
20
+ }
21
+ return `${this.config.authorization_url}?${params.toString()}`;
22
+ }
23
+ async exchangeCodeForToken(code) {
24
+ const response = await this.httpClient.post(this.config.token_url, {
25
+ grant_type: 'authorization_code',
26
+ code,
27
+ client_id: this.config.client_id,
28
+ client_secret: this.config.client_secret,
29
+ redirect_uri: this.config.redirect_uri,
30
+ });
31
+ return response.data;
32
+ }
33
+ async refreshToken(refreshToken) {
34
+ const response = await this.httpClient.post(this.config.token_url, {
35
+ grant_type: 'refresh_token',
36
+ refresh_token: refreshToken,
37
+ client_id: this.config.client_id,
38
+ client_secret: this.config.client_secret,
39
+ });
40
+ return response.data;
41
+ }
42
+ }
43
+ //# sourceMappingURL=base.js.map