@sinoia/hubdoc-tools 1.3.8 → 1.4.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 (54) hide show
  1. package/dist/commands/export-v2.d.ts +45 -0
  2. package/dist/commands/export-v2.d.ts.map +1 -0
  3. package/dist/commands/export-v2.js +369 -0
  4. package/dist/commands/export-v2.js.map +1 -0
  5. package/dist/commands/import-v2.d.ts +32 -0
  6. package/dist/commands/import-v2.d.ts.map +1 -0
  7. package/dist/commands/import-v2.js +331 -0
  8. package/dist/commands/import-v2.js.map +1 -0
  9. package/dist/commands/import.d.ts.map +1 -1
  10. package/dist/commands/import.js +10 -2
  11. package/dist/commands/import.js.map +1 -1
  12. package/dist/index.d.ts +1 -1
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.js.map +1 -1
  15. package/dist/plugins/alfresco/plugin.json +1 -1
  16. package/dist/plugins/aws-s3/plugin.json +1 -1
  17. package/dist/plugins/azure-blob/plugin.json +1 -1
  18. package/dist/plugins/box/plugin.json +1 -1
  19. package/dist/plugins/core/plugin.json +1 -1
  20. package/dist/plugins/nuxeo/plugin.json +1 -1
  21. package/dist/plugins/o365-mail/index.d.ts +26 -0
  22. package/dist/plugins/o365-mail/index.d.ts.map +1 -0
  23. package/dist/plugins/o365-mail/index.js +392 -0
  24. package/dist/plugins/o365-mail/index.js.map +1 -0
  25. package/dist/plugins/o365-mail/plugin.json +8 -0
  26. package/dist/plugins/opentext/plugin.json +1 -1
  27. package/dist/plugins/sharepoint/plugin.json +1 -1
  28. package/dist/services/hubdoc-api-v2.d.ts +150 -0
  29. package/dist/services/hubdoc-api-v2.d.ts.map +1 -0
  30. package/dist/services/hubdoc-api-v2.js +418 -0
  31. package/dist/services/hubdoc-api-v2.js.map +1 -0
  32. package/dist/services/hubdoc-client.d.ts +246 -0
  33. package/dist/services/hubdoc-client.d.ts.map +1 -0
  34. package/dist/services/hubdoc-client.js +714 -0
  35. package/dist/services/hubdoc-client.js.map +1 -0
  36. package/dist/services/hubdoc-export-service.d.ts +90 -0
  37. package/dist/services/hubdoc-export-service.d.ts.map +1 -0
  38. package/dist/services/hubdoc-export-service.js +443 -0
  39. package/dist/services/hubdoc-export-service.js.map +1 -0
  40. package/dist/services/hubdoc-export-v2.d.ts +77 -0
  41. package/dist/services/hubdoc-export-v2.d.ts.map +1 -0
  42. package/dist/services/hubdoc-export-v2.js +329 -0
  43. package/dist/services/hubdoc-export-v2.js.map +1 -0
  44. package/dist/services/hubdoc-import-service.d.ts +64 -0
  45. package/dist/services/hubdoc-import-service.d.ts.map +1 -0
  46. package/dist/services/hubdoc-import-service.js +374 -0
  47. package/dist/services/hubdoc-import-service.js.map +1 -0
  48. package/dist/test/hubdoc-api-test.d.ts +8 -0
  49. package/dist/test/hubdoc-api-test.d.ts.map +1 -0
  50. package/dist/test/hubdoc-api-test.js +152 -0
  51. package/dist/test/hubdoc-api-test.js.map +1 -0
  52. package/dist/types/index.d.ts +11 -0
  53. package/dist/types/index.d.ts.map +1 -1
  54. package/package.json +1 -1
@@ -0,0 +1,418 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.HubDocApiServiceV2 = void 0;
7
+ const axios_1 = __importDefault(require("axios"));
8
+ const form_data_1 = __importDefault(require("form-data"));
9
+ const fs_extra_1 = __importDefault(require("fs-extra"));
10
+ const path_1 = __importDefault(require("path"));
11
+ const chalk_1 = __importDefault(require("chalk"));
12
+ class HubDocApiServiceV2 {
13
+ constructor(config) {
14
+ this.config = config;
15
+ this.client = axios_1.default.create({
16
+ baseURL: config.apiUrl,
17
+ headers: {
18
+ 'Authorization': `Bearer ${config.token}`,
19
+ 'Accept': 'application/json'
20
+ },
21
+ timeout: 30000
22
+ });
23
+ // Add request interceptor for debugging
24
+ this.client.interceptors.request.use(request => {
25
+ console.log(chalk_1.default.gray(`🔗 ${request.method?.toUpperCase()} ${request.url}`));
26
+ return request;
27
+ });
28
+ // Add response interceptor for error handling
29
+ this.client.interceptors.response.use(response => response, error => {
30
+ if (error.response) {
31
+ console.error(chalk_1.default.red(`❌ API Error ${error.response.status}: ${error.response.data?.message || error.message}`));
32
+ }
33
+ else {
34
+ console.error(chalk_1.default.red(`❌ Network Error: ${error.message}`));
35
+ }
36
+ return Promise.reject(error);
37
+ });
38
+ }
39
+ /**
40
+ * Test API connection
41
+ */
42
+ async testConnection() {
43
+ try {
44
+ // Try to get current user info to test authentication
45
+ const response = await this.client.get('/auth/me');
46
+ console.log(chalk_1.default.green(`✅ Connected as: ${response.data.email || 'User'}`));
47
+ return true;
48
+ }
49
+ catch (error) {
50
+ console.error(chalk_1.default.red('❌ API connection failed:'), error.message);
51
+ return false;
52
+ }
53
+ }
54
+ /**
55
+ * Login and get JWT token
56
+ */
57
+ async login(email, password) {
58
+ try {
59
+ const response = await axios_1.default.post(`${this.config.apiUrl}/auth/login`, {
60
+ email,
61
+ password
62
+ });
63
+ const token = response.data.token;
64
+ if (!token) {
65
+ throw new Error('No token received from login response');
66
+ }
67
+ // Update client headers with new token
68
+ this.client.defaults.headers['Authorization'] = `Bearer ${token}`;
69
+ console.log(chalk_1.default.green('✅ Login successful'));
70
+ return token;
71
+ }
72
+ catch (error) {
73
+ throw new Error(`Login failed: ${error.response?.data?.message || error.message}`);
74
+ }
75
+ }
76
+ /**
77
+ * Get all workspaces
78
+ */
79
+ async getWorkspaces() {
80
+ try {
81
+ const response = await this.client.get('/workspaces');
82
+ return response.data.data || response.data; // Handle pagination
83
+ }
84
+ catch (error) {
85
+ throw new Error(`Failed to fetch workspaces: ${error.message}`);
86
+ }
87
+ }
88
+ /**
89
+ * Create a new workspace
90
+ */
91
+ async createWorkspace(request) {
92
+ try {
93
+ const response = await this.client.post('/workspaces', request);
94
+ console.log(chalk_1.default.blue(`📁 Created workspace: ${request.name}`));
95
+ return response.data;
96
+ }
97
+ catch (error) {
98
+ throw new Error(`Failed to create workspace "${request.name}": ${error.message}`);
99
+ }
100
+ }
101
+ /**
102
+ * Find workspace by name
103
+ */
104
+ async findWorkspace(name) {
105
+ const workspaces = await this.getWorkspaces();
106
+ return workspaces.find(w => w.name === name) || null;
107
+ }
108
+ /**
109
+ * Find or create workspace
110
+ */
111
+ async findOrCreateWorkspace(name, permissions) {
112
+ let workspace = await this.findWorkspace(name);
113
+ if (!workspace) {
114
+ const request = {
115
+ name,
116
+ description: `Auto-created workspace for: ${name}`
117
+ };
118
+ if (permissions) {
119
+ request.permissions = this.convertPermissions(permissions);
120
+ }
121
+ workspace = await this.createWorkspace(request);
122
+ }
123
+ return workspace;
124
+ }
125
+ /**
126
+ * Get folders in workspace
127
+ */
128
+ async getFolders(workspaceId) {
129
+ try {
130
+ const params = {};
131
+ if (workspaceId) {
132
+ params.workspace_id = workspaceId;
133
+ }
134
+ const response = await this.client.get('/folders', { params });
135
+ return response.data.data || response.data;
136
+ }
137
+ catch (error) {
138
+ throw new Error(`Failed to fetch folders: ${error.message}`);
139
+ }
140
+ }
141
+ /**
142
+ * Create a new folder
143
+ */
144
+ async createFolder(request) {
145
+ try {
146
+ const response = await this.client.post('/folders', request);
147
+ console.log(chalk_1.default.blue(`📁 Created folder: ${request.name}`));
148
+ return response.data;
149
+ }
150
+ catch (error) {
151
+ throw new Error(`Failed to create folder "${request.name}": ${error.message}`);
152
+ }
153
+ }
154
+ /**
155
+ * Find or create folder hierarchy
156
+ */
157
+ async findOrCreateFolderPath(folderPath, workspaceId, permissions) {
158
+ const pathParts = folderPath.split('/').filter(part => part.trim().length > 0);
159
+ let parentId;
160
+ let currentFolder;
161
+ for (const folderName of pathParts) {
162
+ const folders = await this.getFolders(workspaceId);
163
+ // Find existing folder
164
+ currentFolder = folders.find(f => f.name === folderName &&
165
+ f.parent_id === parentId &&
166
+ (!workspaceId || f.workspace_id === workspaceId));
167
+ if (!currentFolder) {
168
+ // Create new folder
169
+ const request = {
170
+ name: folderName,
171
+ parent_id: parentId,
172
+ workspace_id: workspaceId
173
+ };
174
+ if (permissions) {
175
+ request.permissions = this.convertPermissions(permissions);
176
+ }
177
+ currentFolder = await this.createFolder(request);
178
+ }
179
+ parentId = currentFolder.id;
180
+ }
181
+ if (!currentFolder) {
182
+ throw new Error(`Failed to create folder path: ${folderPath}`);
183
+ }
184
+ return currentFolder;
185
+ }
186
+ /**
187
+ * Upload a file
188
+ */
189
+ async uploadFile(filePath, request) {
190
+ if (!await fs_extra_1.default.pathExists(filePath)) {
191
+ throw new Error(`File not found: ${filePath}`);
192
+ }
193
+ const formData = new form_data_1.default();
194
+ const fileStream = fs_extra_1.default.createReadStream(filePath);
195
+ const fileName = path_1.default.basename(filePath);
196
+ const stats = await fs_extra_1.default.stat(filePath);
197
+ formData.append('file', fileStream, {
198
+ filename: fileName,
199
+ contentType: this.getMimeType(filePath)
200
+ });
201
+ // Add optional parameters
202
+ if (request.folder_id) {
203
+ formData.append('folder_id', request.folder_id);
204
+ }
205
+ if (request.workspace_id) {
206
+ formData.append('workspace_id', request.workspace_id);
207
+ }
208
+ if (request.metadata) {
209
+ formData.append('metadata', JSON.stringify(request.metadata));
210
+ }
211
+ if (request.permissions) {
212
+ formData.append('permissions', JSON.stringify(request.permissions));
213
+ }
214
+ try {
215
+ const response = await this.client.post('/files', formData, {
216
+ headers: {
217
+ ...formData.getHeaders(),
218
+ },
219
+ maxContentLength: Infinity,
220
+ maxBodyLength: Infinity
221
+ });
222
+ const file = response.data;
223
+ console.log(chalk_1.default.green(`✅ Uploaded: ${fileName} (${this.formatFileSize(stats.size)})`));
224
+ return file;
225
+ }
226
+ catch (error) {
227
+ throw new Error(`Failed to upload file "${fileName}": ${error.response?.data?.message || error.message}`);
228
+ }
229
+ }
230
+ /**
231
+ * Import document using mapping
232
+ */
233
+ async importDocument(mapping) {
234
+ const result = {
235
+ success: false,
236
+ filePath: mapping.filePath
237
+ };
238
+ try {
239
+ let workspaceId;
240
+ let folderId;
241
+ // Handle workspace
242
+ if (mapping.workspace) {
243
+ const workspace = await this.findOrCreateWorkspace(mapping.workspace, mapping.permissions);
244
+ workspaceId = workspace.id;
245
+ }
246
+ // Handle folder
247
+ if (mapping.targetFolder) {
248
+ const folder = await this.findOrCreateFolderPath(mapping.targetFolder, workspaceId, mapping.permissions);
249
+ folderId = folder.id;
250
+ }
251
+ // Prepare upload request
252
+ const uploadRequest = {
253
+ folder_id: folderId,
254
+ workspace_id: workspaceId,
255
+ metadata: mapping.metadata
256
+ };
257
+ if (mapping.permissions) {
258
+ uploadRequest.permissions = this.convertPermissions(mapping.permissions);
259
+ }
260
+ // Upload file
261
+ const file = await this.uploadFile(mapping.filePath, uploadRequest);
262
+ result.success = true;
263
+ result.document = {
264
+ id: file.id,
265
+ name: file.name,
266
+ size: file.size,
267
+ mime_type: file.mime_type,
268
+ folder_id: file.folder_id,
269
+ workspace_id: file.workspace_id,
270
+ created_at: file.created_at,
271
+ updated_at: file.updated_at
272
+ };
273
+ const targetLocation = [
274
+ mapping.workspace,
275
+ mapping.targetFolder,
276
+ path_1.default.basename(mapping.filePath)
277
+ ].filter(Boolean).join(' → ');
278
+ console.log(chalk_1.default.green(`✅ Imported: ${targetLocation}`));
279
+ }
280
+ catch (error) {
281
+ result.error = error.message;
282
+ console.error(chalk_1.default.red(`❌ Failed to import ${mapping.filePath}: ${error.message}`));
283
+ }
284
+ return result;
285
+ }
286
+ /**
287
+ * Bulk import documents
288
+ */
289
+ async bulkImport(mappings, options = {}) {
290
+ const { batchSize = 10, concurrent = false } = options;
291
+ const results = [];
292
+ console.log(chalk_1.default.blue(`📦 Starting bulk import of ${mappings.length} documents`));
293
+ console.log(chalk_1.default.gray(` Batch size: ${batchSize}, Concurrent: ${concurrent}`));
294
+ if (concurrent) {
295
+ // Concurrent processing in batches
296
+ for (let i = 0; i < mappings.length; i += batchSize) {
297
+ const batch = mappings.slice(i, i + batchSize);
298
+ const batchPromises = batch.map(mapping => this.importDocument(mapping));
299
+ const batchResults = await Promise.allSettled(batchPromises);
300
+ for (const promiseResult of batchResults) {
301
+ if (promiseResult.status === 'fulfilled') {
302
+ results.push(promiseResult.value);
303
+ }
304
+ else {
305
+ results.push({
306
+ success: false,
307
+ filePath: 'unknown',
308
+ error: promiseResult.reason?.message || 'Unknown error'
309
+ });
310
+ }
311
+ }
312
+ // Progress update
313
+ console.log(chalk_1.default.blue(`📊 Progress: ${results.length}/${mappings.length} processed`));
314
+ }
315
+ }
316
+ else {
317
+ // Sequential processing
318
+ for (let i = 0; i < mappings.length; i++) {
319
+ const result = await this.importDocument(mappings[i]);
320
+ results.push(result);
321
+ // Progress update every 10 documents
322
+ if ((i + 1) % 10 === 0) {
323
+ console.log(chalk_1.default.blue(`📊 Progress: ${i + 1}/${mappings.length} processed`));
324
+ }
325
+ }
326
+ }
327
+ const successful = results.filter(r => r.success).length;
328
+ const failed = results.length - successful;
329
+ console.log(chalk_1.default.bold('\n📊 Bulk Import Summary'));
330
+ console.log(chalk_1.default.green(`✅ Successful: ${successful}`));
331
+ if (failed > 0) {
332
+ console.log(chalk_1.default.red(`❌ Failed: ${failed}`));
333
+ }
334
+ return results;
335
+ }
336
+ /**
337
+ * Search files and folders
338
+ */
339
+ async search(query, type) {
340
+ try {
341
+ const params = { q: query };
342
+ if (type) {
343
+ params.type = type;
344
+ }
345
+ const response = await this.client.get('/search', { params });
346
+ return response.data;
347
+ }
348
+ catch (error) {
349
+ throw new Error(`Search failed: ${error.message}`);
350
+ }
351
+ }
352
+ /**
353
+ * Convert DocumentMapping permissions to HubDoc API format
354
+ */
355
+ convertPermissions(permissions) {
356
+ if (!permissions)
357
+ return [];
358
+ const result = [];
359
+ if (permissions.read) {
360
+ result.push({
361
+ level: 'read',
362
+ users: permissions.read.users || [],
363
+ groups: permissions.read.groups || []
364
+ });
365
+ }
366
+ if (permissions.write) {
367
+ result.push({
368
+ level: 'write',
369
+ users: permissions.write.users || [],
370
+ groups: permissions.write.groups || []
371
+ });
372
+ }
373
+ return result;
374
+ }
375
+ /**
376
+ * Get MIME type from file extension
377
+ */
378
+ getMimeType(filePath) {
379
+ const ext = path_1.default.extname(filePath).toLowerCase();
380
+ const mimeTypes = {
381
+ '.pdf': 'application/pdf',
382
+ '.doc': 'application/msword',
383
+ '.docx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
384
+ '.xls': 'application/vnd.ms-excel',
385
+ '.xlsx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
386
+ '.ppt': 'application/vnd.ms-powerpoint',
387
+ '.pptx': 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
388
+ '.txt': 'text/plain',
389
+ '.csv': 'text/csv',
390
+ '.json': 'application/json',
391
+ '.xml': 'application/xml',
392
+ '.jpg': 'image/jpeg',
393
+ '.jpeg': 'image/jpeg',
394
+ '.png': 'image/png',
395
+ '.gif': 'image/gif',
396
+ '.bmp': 'image/bmp',
397
+ '.tiff': 'image/tiff',
398
+ '.zip': 'application/zip',
399
+ '.rar': 'application/vnd.rar'
400
+ };
401
+ return mimeTypes[ext] || 'application/octet-stream';
402
+ }
403
+ /**
404
+ * Format file size for display
405
+ */
406
+ formatFileSize(bytes) {
407
+ const units = ['B', 'KB', 'MB', 'GB'];
408
+ let size = bytes;
409
+ let unitIndex = 0;
410
+ while (size >= 1024 && unitIndex < units.length - 1) {
411
+ size /= 1024;
412
+ unitIndex++;
413
+ }
414
+ return `${size.toFixed(1)} ${units[unitIndex]}`;
415
+ }
416
+ }
417
+ exports.HubDocApiServiceV2 = HubDocApiServiceV2;
418
+ //# sourceMappingURL=hubdoc-api-v2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hubdoc-api-v2.js","sourceRoot":"","sources":["../../src/services/hubdoc-api-v2.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA6C;AAC7C,0DAAiC;AACjC,wDAA0B;AAC1B,gDAAwB;AAExB,kDAA0B;AAqF1B,MAAa,kBAAkB;IAI7B,YAAY,MAAoB;QAC9B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,eAAK,CAAC,MAAM,CAAC;YACzB,OAAO,EAAE,MAAM,CAAC,MAAM;YACtB,OAAO,EAAE;gBACP,eAAe,EAAE,UAAU,MAAM,CAAC,KAAK,EAAE;gBACzC,QAAQ,EAAE,kBAAkB;aAC7B;YACD,OAAO,EAAE,KAAK;SACf,CAAC,CAAC;QAEH,wCAAwC;QACxC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;YAC7C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,MAAM,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAC9E,OAAO,OAAO,CAAC;QACjB,CAAC,CAAC,CAAC;QAEH,8CAA8C;QAC9C,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CACnC,QAAQ,CAAC,EAAE,CAAC,QAAQ,EACpB,KAAK,CAAC,EAAE;YACN,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACnB,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,eAAe,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YACrH,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,oBAAoB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YAChE,CAAC;YACD,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC,CACF,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc;QAClB,IAAI,CAAC;YACH,sDAAsD;YACtD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACnD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,mBAAmB,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC;YAC7E,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,0BAA0B,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YACpE,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK,CAAC,KAAa,EAAE,QAAgB;QACzC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,eAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,aAAa,EAAE;gBACpE,KAAK;gBACL,QAAQ;aACT,CAAC,CAAC;YAEH,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;YAClC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;YAC3D,CAAC;YAED,uCAAuC;YACvC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,KAAK,EAAE,CAAC;YAElE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC;YAC/C,OAAO,KAAK,CAAC;QACf,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,iBAAiB,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACrF,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa;QACjB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YACtD,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,oBAAoB;QAClE,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,+BAA+B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe,CAAC,OAA+B;QACnD,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;YAChE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,yBAAyB,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YACjE,OAAO,QAAQ,CAAC,IAAI,CAAC;QACvB,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,+BAA+B,OAAO,CAAC,IAAI,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACpF,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,IAAY;QAC9B,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAC9C,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC;IACvD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,qBAAqB,CAAC,IAAY,EAAE,WAA4C;QACpF,IAAI,SAAS,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAE/C,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,OAAO,GAA2B;gBACtC,IAAI;gBACJ,WAAW,EAAE,+BAA+B,IAAI,EAAE;aACnD,CAAC;YAEF,IAAI,WAAW,EAAE,CAAC;gBAChB,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;YAC7D,CAAC;YAED,SAAS,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QAClD,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,WAAoB;QACnC,IAAI,CAAC;YACH,MAAM,MAAM,GAAQ,EAAE,CAAC;YACvB,IAAI,WAAW,EAAE,CAAC;gBAChB,MAAM,CAAC,YAAY,GAAG,WAAW,CAAC;YACpC,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;YAC/D,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC;QAC7C,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,4BAA4B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAAC,OAA4B;QAC7C,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAC7D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,sBAAsB,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YAC9D,OAAO,QAAQ,CAAC,IAAI,CAAC;QACvB,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,4BAA4B,OAAO,CAAC,IAAI,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACjF,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,sBAAsB,CAAC,UAAkB,EAAE,WAAoB,EAAE,WAA4C;QACjH,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAE/E,IAAI,QAA4B,CAAC;QACjC,IAAI,aAAyC,CAAC;QAE9C,KAAK,MAAM,UAAU,IAAI,SAAS,EAAE,CAAC;YACnC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;YAEnD,uBAAuB;YACvB,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAC/B,CAAC,CAAC,IAAI,KAAK,UAAU;gBACrB,CAAC,CAAC,SAAS,KAAK,QAAQ;gBACxB,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,YAAY,KAAK,WAAW,CAAC,CACjD,CAAC;YAEF,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,oBAAoB;gBACpB,MAAM,OAAO,GAAwB;oBACnC,IAAI,EAAE,UAAU;oBAChB,SAAS,EAAE,QAAQ;oBACnB,YAAY,EAAE,WAAW;iBAC1B,CAAC;gBAEF,IAAI,WAAW,EAAE,CAAC;oBAChB,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;gBAC7D,CAAC;gBAED,aAAa,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;YACnD,CAAC;YAED,QAAQ,GAAG,aAAa,CAAC,EAAE,CAAC;QAC9B,CAAC;QAED,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,iCAAiC,UAAU,EAAE,CAAC,CAAC;QACjE,CAAC;QAED,OAAO,aAAa,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,QAAgB,EAAE,OAA0B;QAC3D,IAAI,CAAC,MAAM,kBAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,mBAAmB,QAAQ,EAAE,CAAC,CAAC;QACjD,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,mBAAQ,EAAE,CAAC;QAChC,MAAM,UAAU,GAAG,kBAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QACjD,MAAM,QAAQ,GAAG,cAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACzC,MAAM,KAAK,GAAG,MAAM,kBAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEtC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE;YAClC,QAAQ,EAAE,QAAQ;YAClB,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;SACxC,CAAC,CAAC;QAEH,0BAA0B;QAC1B,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;QAClD,CAAC;QACD,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YACzB,QAAQ,CAAC,MAAM,CAAC,cAAc,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;QACxD,CAAC;QACD,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACrB,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;QAChE,CAAC;QACD,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;YACxB,QAAQ,CAAC,MAAM,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;QACtE,CAAC;QAED,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE;gBAC1D,OAAO,EAAE;oBACP,GAAG,QAAQ,CAAC,UAAU,EAAE;iBACzB;gBACD,gBAAgB,EAAE,QAAQ;gBAC1B,aAAa,EAAE,QAAQ;aACxB,CAAC,CAAC;YAEH,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,eAAe,QAAQ,KAAK,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YAEzF,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,0BAA0B,QAAQ,MAAM,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC5G,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAAC,OAAwB;QAC3C,MAAM,MAAM,GAAiB;YAC3B,OAAO,EAAE,KAAK;YACd,QAAQ,EAAE,OAAO,CAAC,QAAQ;SAC3B,CAAC;QAEF,IAAI,CAAC;YACH,IAAI,WAA+B,CAAC;YACpC,IAAI,QAA4B,CAAC;YAEjC,mBAAmB;YACnB,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;gBACtB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;gBAC3F,WAAW,GAAG,SAAS,CAAC,EAAE,CAAC;YAC7B,CAAC;YAED,gBAAgB;YAChB,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;gBACzB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAC9C,OAAO,CAAC,YAAY,EACpB,WAAW,EACX,OAAO,CAAC,WAAW,CACpB,CAAC;gBACF,QAAQ,GAAG,MAAM,CAAC,EAAE,CAAC;YACvB,CAAC;YAED,yBAAyB;YACzB,MAAM,aAAa,GAAsB;gBACvC,SAAS,EAAE,QAAQ;gBACnB,YAAY,EAAE,WAAW;gBACzB,QAAQ,EAAE,OAAO,CAAC,QAAQ;aAC3B,CAAC;YAEF,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;gBACxB,aAAa,CAAC,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YAC3E,CAAC;YAED,cAAc;YACd,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;YAEpE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;YACtB,MAAM,CAAC,QAAQ,GAAG;gBAChB,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,YAAY,EAAE,IAAI,CAAC,YAAY;gBAC/B,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,UAAU,EAAE,IAAI,CAAC,UAAU;aAC5B,CAAC;YAEF,MAAM,cAAc,GAAG;gBACrB,OAAO,CAAC,SAAS;gBACjB,OAAO,CAAC,YAAY;gBACpB,cAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC;aAChC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAE9B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,eAAe,cAAc,EAAE,CAAC,CAAC,CAAC;QAE5D,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC;YAC7B,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,sBAAsB,OAAO,CAAC,QAAQ,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACvF,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,QAA2B,EAAE,UAAwD,EAAE;QACtG,MAAM,EAAE,SAAS,GAAG,EAAE,EAAE,UAAU,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;QACvD,MAAM,OAAO,GAAmB,EAAE,CAAC;QAEnC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,8BAA8B,QAAQ,CAAC,MAAM,YAAY,CAAC,CAAC,CAAC;QACnF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,kBAAkB,SAAS,iBAAiB,UAAU,EAAE,CAAC,CAAC,CAAC;QAElF,IAAI,UAAU,EAAE,CAAC;YACf,mCAAmC;YACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC;gBACpD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC;gBAC/C,MAAM,aAAa,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;gBAEzE,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;gBAE7D,KAAK,MAAM,aAAa,IAAI,YAAY,EAAE,CAAC;oBACzC,IAAI,aAAa,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;wBACzC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;oBACpC,CAAC;yBAAM,CAAC;wBACN,OAAO,CAAC,IAAI,CAAC;4BACX,OAAO,EAAE,KAAK;4BACd,QAAQ,EAAE,SAAS;4BACnB,KAAK,EAAE,aAAa,CAAC,MAAM,EAAE,OAAO,IAAI,eAAe;yBACxD,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;gBAED,kBAAkB;gBAClB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,gBAAgB,OAAO,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,YAAY,CAAC,CAAC,CAAC;YACzF,CAAC;QACH,CAAC;aAAM,CAAC;YACN,wBAAwB;YACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACzC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;gBACtD,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAErB,qCAAqC;gBACrC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC;oBACvB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,MAAM,YAAY,CAAC,CAAC,CAAC;gBAChF,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;QACzD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,UAAU,CAAC;QAE3C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,iBAAiB,UAAU,EAAE,CAAC,CAAC,CAAC;QACxD,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,aAAa,MAAM,EAAE,CAAC,CAAC,CAAC;QAChD,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,KAAa,EAAE,IAAsC;QAChE,IAAI,CAAC;YACH,MAAM,MAAM,GAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC;YACjC,IAAI,IAAI,EAAE,CAAC;gBACT,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;YACrB,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;YAC9D,OAAO,QAAQ,CAAC,IAAI,CAAC;QACvB,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,kBAAkB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAED;;OAEG;IACK,kBAAkB,CAAC,WAA2C;QACpE,IAAI,CAAC,WAAW;YAAE,OAAO,EAAE,CAAC;QAE5B,MAAM,MAAM,GAAU,EAAE,CAAC;QAEzB,IAAI,WAAW,CAAC,IAAI,EAAE,CAAC;YACrB,MAAM,CAAC,IAAI,CAAC;gBACV,KAAK,EAAE,MAAM;gBACb,KAAK,EAAE,WAAW,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;gBACnC,MAAM,EAAE,WAAW,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE;aACtC,CAAC,CAAC;QACL,CAAC;QAED,IAAI,WAAW,CAAC,KAAK,EAAE,CAAC;YACtB,MAAM,CAAC,IAAI,CAAC;gBACV,KAAK,EAAE,OAAO;gBACd,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE;gBACpC,MAAM,EAAE,WAAW,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE;aACvC,CAAC,CAAC;QACL,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACK,WAAW,CAAC,QAAgB;QAClC,MAAM,GAAG,GAAG,cAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;QACjD,MAAM,SAAS,GAA2B;YACxC,MAAM,EAAE,iBAAiB;YACzB,MAAM,EAAE,oBAAoB;YAC5B,OAAO,EAAE,yEAAyE;YAClF,MAAM,EAAE,0BAA0B;YAClC,OAAO,EAAE,mEAAmE;YAC5E,MAAM,EAAE,+BAA+B;YACvC,OAAO,EAAE,2EAA2E;YACpF,MAAM,EAAE,YAAY;YACpB,MAAM,EAAE,UAAU;YAClB,OAAO,EAAE,kBAAkB;YAC3B,MAAM,EAAE,iBAAiB;YACzB,MAAM,EAAE,YAAY;YACpB,OAAO,EAAE,YAAY;YACrB,MAAM,EAAE,WAAW;YACnB,MAAM,EAAE,WAAW;YACnB,MAAM,EAAE,WAAW;YACnB,OAAO,EAAE,YAAY;YACrB,MAAM,EAAE,iBAAiB;YACzB,MAAM,EAAE,qBAAqB;SAC9B,CAAC;QAEF,OAAO,SAAS,CAAC,GAAG,CAAC,IAAI,0BAA0B,CAAC;IACtD,CAAC;IAED;;OAEG;IACK,cAAc,CAAC,KAAa;QAClC,MAAM,KAAK,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACtC,IAAI,IAAI,GAAG,KAAK,CAAC;QACjB,IAAI,SAAS,GAAG,CAAC,CAAC;QAElB,OAAO,IAAI,IAAI,IAAI,IAAI,SAAS,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpD,IAAI,IAAI,IAAI,CAAC;YACb,SAAS,EAAE,CAAC;QACd,CAAC;QAED,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;IAClD,CAAC;CACF;AAxdD,gDAwdC"}
@@ -0,0 +1,246 @@
1
+ import { HubDocConfig, DocumentMapping } from '../types';
2
+ export interface HubDocWorkspace {
3
+ id: string;
4
+ name: string;
5
+ description?: string;
6
+ domain?: string;
7
+ permissions: {
8
+ level: 'read' | 'write' | 'admin';
9
+ users: string[];
10
+ groups: string[];
11
+ }[];
12
+ metadata?: Record<string, any>;
13
+ created_at: string;
14
+ updated_at: string;
15
+ }
16
+ export interface HubDocFolder {
17
+ id: string;
18
+ name: string;
19
+ parent_id?: string;
20
+ workspace_id?: string;
21
+ domain?: string;
22
+ path?: string;
23
+ permissions: {
24
+ level: 'read' | 'write' | 'admin';
25
+ users: string[];
26
+ groups: string[];
27
+ }[];
28
+ metadata?: Record<string, any>;
29
+ created_at: string;
30
+ updated_at: string;
31
+ }
32
+ export interface HubDocFile {
33
+ id: string;
34
+ name: string;
35
+ size: number;
36
+ mime_type: string;
37
+ folder_id?: string;
38
+ workspace_id?: string;
39
+ domain?: string;
40
+ version: number;
41
+ metadata?: Record<string, any>;
42
+ permissions: {
43
+ level: 'read' | 'write' | 'admin';
44
+ users: string[];
45
+ groups: string[];
46
+ }[];
47
+ download_url?: string;
48
+ created_at: string;
49
+ updated_at: string;
50
+ }
51
+ export interface PaginationParams {
52
+ page?: number;
53
+ limit?: number;
54
+ sort?: string;
55
+ order?: 'asc' | 'desc';
56
+ }
57
+ export interface PaginatedResponse<T> {
58
+ data: T[];
59
+ pagination: {
60
+ current_page: number;
61
+ total_pages: number;
62
+ total_items: number;
63
+ items_per_page: number;
64
+ has_next: boolean;
65
+ has_prev: boolean;
66
+ };
67
+ }
68
+ export interface CreateWorkspaceRequest {
69
+ name: string;
70
+ description?: string;
71
+ domain?: string;
72
+ permissions?: {
73
+ level: 'read' | 'write' | 'admin';
74
+ users?: string[];
75
+ groups?: string[];
76
+ }[];
77
+ metadata?: Record<string, any>;
78
+ }
79
+ export interface CreateFolderRequest {
80
+ name: string;
81
+ parent_id?: string;
82
+ workspace_id?: string;
83
+ domain?: string;
84
+ permissions?: {
85
+ level: 'read' | 'write' | 'admin';
86
+ users?: string[];
87
+ groups?: string[];
88
+ }[];
89
+ metadata?: Record<string, any>;
90
+ }
91
+ export interface UploadFileRequest {
92
+ folder_id?: string;
93
+ workspace_id?: string;
94
+ domain?: string;
95
+ permissions?: {
96
+ level: 'read' | 'write' | 'admin';
97
+ users?: string[];
98
+ groups?: string[];
99
+ }[];
100
+ metadata?: Record<string, any>;
101
+ }
102
+ export interface ExportItem {
103
+ id: string;
104
+ name: string;
105
+ type: 'workspace' | 'folder' | 'file';
106
+ parent_id?: string;
107
+ workspace_id?: string;
108
+ folder_id?: string;
109
+ path: string;
110
+ size?: number;
111
+ metadata?: Record<string, any>;
112
+ download_url?: string;
113
+ }
114
+ export interface ImportResult {
115
+ success: boolean;
116
+ filePath: string;
117
+ document?: HubDocFile;
118
+ error?: string;
119
+ }
120
+ /**
121
+ * Complete HubDoc API Client with workspaces, folders, files, and pagination support
122
+ */
123
+ export declare class HubDocClient {
124
+ private client;
125
+ private config;
126
+ constructor(config: HubDocConfig);
127
+ /**
128
+ * Test API connection and authentication
129
+ */
130
+ testConnection(): Promise<boolean>;
131
+ /**
132
+ * Login and get JWT token
133
+ */
134
+ login(email: string, password: string): Promise<string>;
135
+ /**
136
+ * OAuth2 Client Credentials flow
137
+ */
138
+ authenticateOAuth2(): Promise<string>;
139
+ /**
140
+ * Get all workspaces with pagination support
141
+ */
142
+ getWorkspaces(params?: PaginationParams & {
143
+ domain?: string;
144
+ }): Promise<PaginatedResponse<HubDocWorkspace>>;
145
+ /**
146
+ * Get all workspaces (paginated iterator)
147
+ */
148
+ getAllWorkspaces(domain?: string): Promise<HubDocWorkspace[]>;
149
+ /**
150
+ * Create a new workspace
151
+ */
152
+ createWorkspace(request: CreateWorkspaceRequest): Promise<HubDocWorkspace>;
153
+ /**
154
+ * Get workspace by ID
155
+ */
156
+ getWorkspace(id: string): Promise<HubDocWorkspace>;
157
+ /**
158
+ * Find workspace by name and optionally domain
159
+ */
160
+ findWorkspace(name: string, domain?: string): Promise<HubDocWorkspace | null>;
161
+ /**
162
+ * Find or create workspace
163
+ */
164
+ findOrCreateWorkspace(name: string, domain?: string, permissions?: DocumentMapping['permissions']): Promise<HubDocWorkspace>;
165
+ /**
166
+ * Get folders with pagination support
167
+ */
168
+ getFolders(params?: PaginationParams & {
169
+ workspace_id?: string;
170
+ parent_id?: string;
171
+ domain?: string;
172
+ }): Promise<PaginatedResponse<HubDocFolder>>;
173
+ /**
174
+ * Get all folders (paginated iterator)
175
+ */
176
+ getAllFolders(workspaceId?: string, domain?: string): Promise<HubDocFolder[]>;
177
+ /**
178
+ * Create a new folder
179
+ */
180
+ createFolder(request: CreateFolderRequest): Promise<HubDocFolder>;
181
+ /**
182
+ * Get folder by ID
183
+ */
184
+ getFolder(id: string): Promise<HubDocFolder>;
185
+ /**
186
+ * Find or create folder hierarchy
187
+ */
188
+ findOrCreateFolderPath(folderPath: string, workspaceId?: string, domain?: string, permissions?: DocumentMapping['permissions']): Promise<HubDocFolder>;
189
+ /**
190
+ * Get files with pagination support
191
+ */
192
+ getFiles(params?: PaginationParams & {
193
+ folder_id?: string;
194
+ workspace_id?: string;
195
+ domain?: string;
196
+ }): Promise<PaginatedResponse<HubDocFile>>;
197
+ /**
198
+ * Get all files (paginated iterator)
199
+ */
200
+ getAllFiles(folderId?: string, workspaceId?: string, domain?: string): Promise<HubDocFile[]>;
201
+ /**
202
+ * Upload a file
203
+ */
204
+ uploadFile(filePath: string, request: UploadFileRequest): Promise<HubDocFile>;
205
+ /**
206
+ * Get file by ID
207
+ */
208
+ getFile(id: string): Promise<HubDocFile>;
209
+ /**
210
+ * Download a file
211
+ */
212
+ downloadFile(id: string, targetPath: string): Promise<void>;
213
+ /**
214
+ * Scan all accessible files and folders for export
215
+ */
216
+ scanForExport(domain?: string): Promise<ExportItem[]>;
217
+ /**
218
+ * Import document using mapping
219
+ */
220
+ importDocument(mapping: DocumentMapping): Promise<ImportResult>;
221
+ /**
222
+ * Search across workspaces, folders, and files
223
+ */
224
+ search(query: string, type?: 'workspace' | 'folder' | 'file', domain?: string): Promise<any>;
225
+ /**
226
+ * Format paginated response
227
+ */
228
+ private formatPaginatedResponse;
229
+ /**
230
+ * Build full folder path from hierarchy
231
+ */
232
+ private buildFolderPath;
233
+ /**
234
+ * Convert DocumentMapping permissions to HubDoc API format
235
+ */
236
+ private convertPermissions;
237
+ /**
238
+ * Get MIME type from file extension
239
+ */
240
+ private getMimeType;
241
+ /**
242
+ * Format file size for display
243
+ */
244
+ private formatFileSize;
245
+ }
246
+ //# sourceMappingURL=hubdoc-client.d.ts.map