@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,374 @@
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.HubDocImportService = void 0;
7
+ const fs_extra_1 = __importDefault(require("fs-extra"));
8
+ const csv_parser_1 = __importDefault(require("csv-parser"));
9
+ const path_1 = __importDefault(require("path"));
10
+ const hubdoc_client_1 = require("./hubdoc-client");
11
+ const concurrent_processor_1 = require("../utils/concurrent-processor");
12
+ const chalk_1 = __importDefault(require("chalk"));
13
+ /**
14
+ * Service for importing documents to HubDoc using CSV mapping files
15
+ */
16
+ class HubDocImportService {
17
+ constructor(config) {
18
+ this.config = config;
19
+ this.client = new hubdoc_client_1.HubDocClient(config);
20
+ }
21
+ /**
22
+ * Test connection to HubDoc API
23
+ */
24
+ async testConnection() {
25
+ return await this.client.testConnection();
26
+ }
27
+ /**
28
+ * Parse CSV mapping file into DocumentMapping objects
29
+ */
30
+ async parseMappingFile(filePath, baseDir) {
31
+ if (!await fs_extra_1.default.pathExists(filePath)) {
32
+ throw new Error(`Mapping file not found: ${filePath}`);
33
+ }
34
+ console.log(chalk_1.default.blue(`šŸ“‹ Parsing mapping file: ${filePath}`));
35
+ return new Promise((resolve, reject) => {
36
+ const mappings = [];
37
+ const errors = [];
38
+ fs_extra_1.default.createReadStream(filePath)
39
+ .pipe((0, csv_parser_1.default)())
40
+ .on('data', (row, index) => {
41
+ try {
42
+ const mapping = this.parseRowToMapping(row, index + 1, baseDir);
43
+ if (mapping) {
44
+ mappings.push(mapping);
45
+ }
46
+ }
47
+ catch (error) {
48
+ errors.push(`Row ${index + 2}: ${error.message}`);
49
+ }
50
+ })
51
+ .on('end', () => {
52
+ if (errors.length > 0) {
53
+ console.error(chalk_1.default.red('āŒ CSV parsing errors:'));
54
+ errors.forEach(error => console.error(chalk_1.default.red(` ${error}`)));
55
+ reject(new Error(`${errors.length} errors found in CSV file`));
56
+ }
57
+ else {
58
+ console.log(chalk_1.default.green(`āœ… Parsed ${mappings.length} mappings from CSV`));
59
+ resolve(mappings);
60
+ }
61
+ })
62
+ .on('error', reject);
63
+ });
64
+ }
65
+ /**
66
+ * Parse CSV row into DocumentMapping object
67
+ */
68
+ parseRowToMapping(row, rowNumber, baseDir) {
69
+ // Skip empty rows
70
+ if (!row.filePath && !row.file_path && !row.sourcePath && !row.source_path) {
71
+ return null;
72
+ }
73
+ // Get file path (support multiple column names)
74
+ const filePath = row.filePath || row.file_path || row.sourcePath || row.source_path;
75
+ if (!filePath) {
76
+ throw new Error('Missing file path column (expected: filePath, file_path, sourcePath, or source_path)');
77
+ }
78
+ // Resolve full path
79
+ const fullFilePath = path_1.default.isAbsolute(filePath) ? filePath :
80
+ path_1.default.resolve(baseDir || process.cwd(), filePath);
81
+ // Build mapping object
82
+ const mapping = {
83
+ filePath: fullFilePath,
84
+ workspace: row.workspace || row.workspaceName || row.workspace_name,
85
+ targetFolder: row.targetFolder || row.target_folder || row.folderPath || row.folder_path,
86
+ domain: row.domain,
87
+ metadata: {}
88
+ };
89
+ // Parse metadata from additional columns
90
+ const metadataColumns = ['title', 'description', 'category', 'tags', 'author', 'project', 'client'];
91
+ metadataColumns.forEach(col => {
92
+ if (row[col]) {
93
+ mapping.metadata[col] = row[col];
94
+ }
95
+ });
96
+ // Parse custom metadata (JSON columns)
97
+ if (row.metadata) {
98
+ try {
99
+ mapping.metadata = { ...mapping.metadata, ...JSON.parse(row.metadata) };
100
+ }
101
+ catch (error) {
102
+ console.warn(chalk_1.default.yellow(`āš ļø Row ${rowNumber}: Invalid JSON in metadata column, ignoring`));
103
+ }
104
+ }
105
+ // Parse permissions
106
+ if (row.permissions) {
107
+ try {
108
+ mapping.permissions = JSON.parse(row.permissions);
109
+ }
110
+ catch (error) {
111
+ console.warn(chalk_1.default.yellow(`āš ļø Row ${rowNumber}: Invalid JSON in permissions column, ignoring`));
112
+ }
113
+ }
114
+ else {
115
+ // Build permissions from individual columns
116
+ const permissions = {};
117
+ if (row.readUsers || row.read_users) {
118
+ permissions.read = {
119
+ users: (row.readUsers || row.read_users).split(',').map((u) => u.trim())
120
+ };
121
+ }
122
+ if (row.writeUsers || row.write_users) {
123
+ permissions.write = {
124
+ users: (row.writeUsers || row.write_users).split(',').map((u) => u.trim())
125
+ };
126
+ }
127
+ if (row.readGroups || row.read_groups) {
128
+ permissions.read = {
129
+ ...permissions.read,
130
+ groups: (row.readGroups || row.read_groups).split(',').map((g) => g.trim())
131
+ };
132
+ }
133
+ if (row.writeGroups || row.write_groups) {
134
+ permissions.write = {
135
+ ...permissions.write,
136
+ groups: (row.writeGroups || row.write_groups).split(',').map((g) => g.trim())
137
+ };
138
+ }
139
+ if (Object.keys(permissions).length > 0) {
140
+ mapping.permissions = permissions;
141
+ }
142
+ }
143
+ return mapping;
144
+ }
145
+ /**
146
+ * Validate mapping file and mappings
147
+ */
148
+ async validateMappings(mappings) {
149
+ const result = {
150
+ valid: true,
151
+ errors: [],
152
+ warnings: [],
153
+ mappingCount: mappings.length
154
+ };
155
+ console.log(chalk_1.default.blue(`šŸ” Validating ${mappings.length} mappings...`));
156
+ for (let i = 0; i < mappings.length; i++) {
157
+ const mapping = mappings[i];
158
+ const rowNum = i + 1;
159
+ // Check if file exists
160
+ if (!await fs_extra_1.default.pathExists(mapping.filePath)) {
161
+ result.errors.push(`Row ${rowNum}: File not found: ${mapping.filePath}`);
162
+ result.valid = false;
163
+ continue;
164
+ }
165
+ // Check file size
166
+ try {
167
+ const stats = await fs_extra_1.default.stat(mapping.filePath);
168
+ if (stats.size === 0) {
169
+ result.warnings.push(`Row ${rowNum}: File is empty: ${mapping.filePath}`);
170
+ }
171
+ else if (stats.size > 100 * 1024 * 1024) { // 100MB
172
+ result.warnings.push(`Row ${rowNum}: Large file (${Math.round(stats.size / 1024 / 1024)}MB): ${mapping.filePath}`);
173
+ }
174
+ }
175
+ catch (error) {
176
+ result.errors.push(`Row ${rowNum}: Cannot read file: ${mapping.filePath}`);
177
+ result.valid = false;
178
+ }
179
+ // Validate workspace name
180
+ if (mapping.workspace && mapping.workspace.length > 255) {
181
+ result.errors.push(`Row ${rowNum}: Workspace name too long (max 255 chars): ${mapping.workspace}`);
182
+ result.valid = false;
183
+ }
184
+ // Validate folder path
185
+ if (mapping.targetFolder) {
186
+ if (mapping.targetFolder.length > 1000) {
187
+ result.errors.push(`Row ${rowNum}: Folder path too long (max 1000 chars): ${mapping.targetFolder}`);
188
+ result.valid = false;
189
+ }
190
+ // Check for invalid characters
191
+ const invalidChars = /[<>:"|?*]/;
192
+ if (invalidChars.test(mapping.targetFolder)) {
193
+ result.errors.push(`Row ${rowNum}: Invalid characters in folder path: ${mapping.targetFolder}`);
194
+ result.valid = false;
195
+ }
196
+ }
197
+ // Validate domain
198
+ if (mapping.domain && mapping.domain.length > 100) {
199
+ result.errors.push(`Row ${rowNum}: Domain name too long (max 100 chars): ${mapping.domain}`);
200
+ result.valid = false;
201
+ }
202
+ }
203
+ // Summary
204
+ if (result.valid) {
205
+ console.log(chalk_1.default.green(`āœ… Validation passed for ${mappings.length} mappings`));
206
+ }
207
+ else {
208
+ console.log(chalk_1.default.red(`āŒ Validation failed with ${result.errors.length} errors`));
209
+ }
210
+ if (result.warnings.length > 0) {
211
+ console.log(chalk_1.default.yellow(`āš ļø ${result.warnings.length} warnings found`));
212
+ }
213
+ return result;
214
+ }
215
+ /**
216
+ * Import documents using mappings
217
+ */
218
+ async importDocuments(mappings, options = {}) {
219
+ const startTime = Date.now();
220
+ console.log(chalk_1.default.blue(`šŸ“¦ Starting import of ${mappings.length} documents`));
221
+ // Filter mappings if needed
222
+ let filteredMappings = mappings;
223
+ if (options.domain) {
224
+ filteredMappings = mappings.filter(m => m.domain === options.domain);
225
+ console.log(chalk_1.default.gray(`šŸ” Filtered to ${filteredMappings.length} mappings for domain: ${options.domain}`));
226
+ }
227
+ const results = [];
228
+ if (options.dryRun) {
229
+ console.log(chalk_1.default.yellow('🧪 DRY RUN MODE - No files will be uploaded'));
230
+ // Simulate dry run results
231
+ for (const mapping of filteredMappings) {
232
+ results.push({
233
+ success: true,
234
+ filePath: mapping.filePath,
235
+ document: undefined // No actual upload in dry run
236
+ });
237
+ }
238
+ }
239
+ else {
240
+ // Actual import
241
+ if (options.concurrency && options.concurrency > 1) {
242
+ // Concurrent import
243
+ const processingResult = await concurrent_processor_1.ConcurrentProcessor.processWithProgress(filteredMappings, async (mapping) => {
244
+ return await this.client.importDocument(mapping);
245
+ }, {
246
+ concurrency: options.concurrency,
247
+ operation: 'Import',
248
+ itemName: 'documents'
249
+ });
250
+ results.push(...processingResult.results.filter(r => r !== undefined));
251
+ // Add error results
252
+ const errorResults = processingResult.errors.map(({ item, error }) => ({
253
+ success: false,
254
+ filePath: item.filePath,
255
+ error: error.message
256
+ }));
257
+ results.push(...errorResults);
258
+ }
259
+ else {
260
+ // Sequential import
261
+ for (let i = 0; i < filteredMappings.length; i++) {
262
+ const mapping = filteredMappings[i];
263
+ const progress = `(${i + 1}/${filteredMappings.length})`;
264
+ console.log(chalk_1.default.cyan(`${progress} Importing: ${path_1.default.basename(mapping.filePath)}`));
265
+ try {
266
+ const result = await this.client.importDocument(mapping);
267
+ results.push(result);
268
+ }
269
+ catch (error) {
270
+ results.push({
271
+ success: false,
272
+ filePath: mapping.filePath,
273
+ error: error.message
274
+ });
275
+ }
276
+ // Progress update every 10 documents
277
+ if ((i + 1) % 10 === 0) {
278
+ console.log(chalk_1.default.blue(`šŸ“Š Progress: ${i + 1}/${filteredMappings.length} processed`));
279
+ }
280
+ }
281
+ }
282
+ }
283
+ const endTime = Date.now();
284
+ const duration = endTime - startTime;
285
+ const summary = {
286
+ total: filteredMappings.length,
287
+ successful: results.filter(r => r.success).length,
288
+ failed: results.filter(r => !r.success).length,
289
+ skipped: mappings.length - filteredMappings.length,
290
+ results,
291
+ duration
292
+ };
293
+ this.printImportSummary(summary, options.dryRun);
294
+ return summary;
295
+ }
296
+ /**
297
+ * Bulk import with CSV file
298
+ */
299
+ async bulkImportFromCsv(options) {
300
+ console.log(chalk_1.default.blue(`šŸš€ Starting bulk import from: ${options.mappingFile}`));
301
+ // Step 1: Parse CSV
302
+ const mappings = await this.parseMappingFile(options.mappingFile, options.baseDir);
303
+ // Step 2: Validate mappings
304
+ if (!options.dryRun) {
305
+ const validation = await this.validateMappings(mappings);
306
+ if (!validation.valid) {
307
+ throw new Error(`Validation failed with ${validation.errors.length} errors. Fix the issues and try again.`);
308
+ }
309
+ if (validation.warnings.length > 0 && options.interactive) {
310
+ console.log(chalk_1.default.yellow('\nāš ļø Warnings found:'));
311
+ validation.warnings.forEach(warning => console.log(chalk_1.default.yellow(` ${warning}`)));
312
+ // In a real interactive scenario, you'd prompt the user here
313
+ console.log(chalk_1.default.blue('Continuing with import...'));
314
+ }
315
+ }
316
+ if (options.validateOnly) {
317
+ console.log(chalk_1.default.green('āœ… Validation complete. Use --no-validate-only to proceed with import.'));
318
+ return {
319
+ total: mappings.length,
320
+ successful: 0,
321
+ failed: 0,
322
+ skipped: 0,
323
+ results: [],
324
+ duration: 0,
325
+ mappingFile: options.mappingFile
326
+ };
327
+ }
328
+ // Step 3: Test connection
329
+ if (!options.dryRun) {
330
+ console.log(chalk_1.default.blue('šŸ”— Testing API connection...'));
331
+ const connected = await this.testConnection();
332
+ if (!connected) {
333
+ throw new Error('Failed to connect to HubDoc API. Check your configuration.');
334
+ }
335
+ }
336
+ // Step 4: Import documents
337
+ return await this.importDocuments(mappings, options);
338
+ }
339
+ /**
340
+ * Print import summary
341
+ */
342
+ printImportSummary(summary, isDryRun = false) {
343
+ const durationStr = (summary.duration / 1000).toFixed(1);
344
+ console.log('\n' + chalk_1.default.bold(`šŸ“Š Import Summary ${isDryRun ? '(DRY RUN)' : ''}`));
345
+ console.log(chalk_1.default.green(`āœ… Successful: ${summary.successful}`));
346
+ if (summary.failed > 0) {
347
+ console.log(chalk_1.default.red(`āŒ Failed: ${summary.failed}`));
348
+ const failedResults = summary.results.filter(r => !r.success);
349
+ if (failedResults.length > 0 && failedResults.length <= 10) {
350
+ console.log('\n' + chalk_1.default.red('Failed imports:'));
351
+ failedResults.forEach(result => {
352
+ console.log(chalk_1.default.red(` • ${path_1.default.basename(result.filePath)}: ${result.error}`));
353
+ });
354
+ }
355
+ else if (failedResults.length > 10) {
356
+ console.log('\n' + chalk_1.default.red('Failed imports (showing first 10):'));
357
+ failedResults.slice(0, 10).forEach(result => {
358
+ console.log(chalk_1.default.red(` • ${path_1.default.basename(result.filePath)}: ${result.error}`));
359
+ });
360
+ console.log(chalk_1.default.red(` ... and ${failedResults.length - 10} more`));
361
+ }
362
+ }
363
+ if (summary.skipped > 0) {
364
+ console.log(chalk_1.default.gray(`ā­ļø Skipped: ${summary.skipped}`));
365
+ }
366
+ console.log(chalk_1.default.blue(`\nšŸ“ˆ Total processed: ${summary.total} documents in ${durationStr}s`));
367
+ if (summary.total > 0 && summary.duration > 0) {
368
+ const rate = (summary.total / (summary.duration / 1000)).toFixed(1);
369
+ console.log(chalk_1.default.gray(`⚔ Rate: ${rate} docs/second`));
370
+ }
371
+ }
372
+ }
373
+ exports.HubDocImportService = HubDocImportService;
374
+ //# sourceMappingURL=hubdoc-import-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hubdoc-import-service.js","sourceRoot":"","sources":["../../src/services/hubdoc-import-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env ts-node
2
+ /**
3
+ * Test script for HubDoc API integration
4
+ * Run with: npm run test-api
5
+ */
6
+ declare function testHubDocApi(): Promise<void>;
7
+ export { testHubDocApi };
8
+ //# sourceMappingURL=hubdoc-api-test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hubdoc-api-test.d.ts","sourceRoot":"","sources":["../../src/test/hubdoc-api-test.ts"],"names":[],"mappings":";AAOA;;;GAGG;AACH,iBAAe,aAAa,kBAiI3B;AAuBD,OAAO,EAAE,aAAa,EAAE,CAAC"}
@@ -0,0 +1,152 @@
1
+ #!/usr/bin/env ts-node
2
+ "use strict";
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.testHubDocApi = testHubDocApi;
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ const hubdoc_api_v2_1 = require("../services/hubdoc-api-v2");
10
+ const hubdoc_export_v2_1 = require("../services/hubdoc-export-v2");
11
+ const config_1 = require("../utils/config");
12
+ /**
13
+ * Test script for HubDoc API integration
14
+ * Run with: npm run test-api
15
+ */
16
+ async function testHubDocApi() {
17
+ console.log(chalk_1.default.bold('🧪 HubDoc API Integration Test'));
18
+ console.log('='.repeat(50));
19
+ try {
20
+ // Load configuration
21
+ const configManager = new config_1.ConfigManager();
22
+ const config = await configManager.loadConfig();
23
+ if (!config) {
24
+ console.error(chalk_1.default.red('āŒ No configuration found. Run: hubdoc-tool config'));
25
+ process.exit(1);
26
+ }
27
+ console.log(chalk_1.default.blue('šŸ“‹ Configuration loaded'));
28
+ console.log(chalk_1.default.gray(` API URL: ${config.apiUrl}`));
29
+ console.log(chalk_1.default.gray(` Token: ${config.token ? '***' + config.token.slice(-4) : 'Not set'}`));
30
+ // Initialize services
31
+ const apiService = new hubdoc_api_v2_1.HubDocApiServiceV2(config);
32
+ const exportService = new hubdoc_export_v2_1.HubDocExportServiceV2(config);
33
+ // Test 1: Connection
34
+ console.log(chalk_1.default.bold('\nšŸ”— Test 1: API Connection'));
35
+ const isConnected = await apiService.testConnection();
36
+ if (!isConnected) {
37
+ console.error(chalk_1.default.red('āŒ Connection failed'));
38
+ return;
39
+ }
40
+ // Test 2: Get workspaces
41
+ console.log(chalk_1.default.bold('\nšŸ“ Test 2: Workspaces'));
42
+ try {
43
+ const workspaces = await apiService.getWorkspaces();
44
+ console.log(chalk_1.default.green(`āœ… Found ${workspaces.length} workspace(s)`));
45
+ workspaces.slice(0, 5).forEach(workspace => {
46
+ console.log(chalk_1.default.cyan(` šŸ“‚ ${workspace.name} (ID: ${workspace.id})`));
47
+ });
48
+ if (workspaces.length > 5) {
49
+ console.log(chalk_1.default.gray(` ... and ${workspaces.length - 5} more`));
50
+ }
51
+ }
52
+ catch (error) {
53
+ console.error(chalk_1.default.red(`āŒ Workspaces test failed: ${error.message}`));
54
+ }
55
+ // Test 3: Get folders
56
+ console.log(chalk_1.default.bold('\nšŸ“‚ Test 3: Folders'));
57
+ try {
58
+ const folders = await apiService.getFolders();
59
+ console.log(chalk_1.default.green(`āœ… Found ${folders.length} folder(s)`));
60
+ folders.slice(0, 5).forEach(folder => {
61
+ const workspace = folder.workspace_id ? ` (Workspace: ${folder.workspace_id})` : '';
62
+ console.log(chalk_1.default.cyan(` šŸ“ ${folder.name}${workspace}`));
63
+ });
64
+ if (folders.length > 5) {
65
+ console.log(chalk_1.default.gray(` ... and ${folders.length - 5} more`));
66
+ }
67
+ }
68
+ catch (error) {
69
+ console.error(chalk_1.default.red(`āŒ Folders test failed: ${error.message}`));
70
+ }
71
+ // Test 4: Search functionality
72
+ console.log(chalk_1.default.bold('\nšŸ” Test 4: Search'));
73
+ try {
74
+ const searchResults = await apiService.search('pdf', 'file');
75
+ const files = searchResults.data || searchResults;
76
+ console.log(chalk_1.default.green(`āœ… Search returned ${files.length || 0} result(s)`));
77
+ if (files && files.length > 0) {
78
+ files.slice(0, 3).forEach((file) => {
79
+ console.log(chalk_1.default.cyan(` šŸ“„ ${file.name || 'Unknown'}`));
80
+ });
81
+ }
82
+ }
83
+ catch (error) {
84
+ console.error(chalk_1.default.red(`āŒ Search test failed: ${error.message}`));
85
+ }
86
+ // Test 5: Export statistics
87
+ console.log(chalk_1.default.bold('\nšŸ“Š Test 5: Export Statistics'));
88
+ try {
89
+ const stats = await exportService.getExportStats();
90
+ console.log(chalk_1.default.green('āœ… Export stats retrieved'));
91
+ console.log(chalk_1.default.cyan(` šŸ“ Workspaces: ${stats.totalWorkspaces}`));
92
+ console.log(chalk_1.default.cyan(` šŸ“‚ Folders: ${stats.totalFolders}`));
93
+ console.log(chalk_1.default.cyan(` šŸ“„ Files: ${stats.totalFiles}`));
94
+ console.log(chalk_1.default.cyan(` šŸ’¾ Total size: ${formatFileSize(stats.totalSize)}`));
95
+ }
96
+ catch (error) {
97
+ console.error(chalk_1.default.red(`āŒ Export stats test failed: ${error.message}`));
98
+ }
99
+ // Test 6: Create test workspace (if configured to do so)
100
+ const shouldTestWrite = process.env.HUBDOC_TEST_WRITE === 'true';
101
+ if (shouldTestWrite) {
102
+ console.log(chalk_1.default.bold('\nāœļø Test 6: Write Operations (Create Workspace)'));
103
+ try {
104
+ const testWorkspace = await apiService.createWorkspace({
105
+ name: `Test-Workspace-${Date.now()}`,
106
+ description: 'Test workspace created by hubdoc-tool integration test'
107
+ });
108
+ console.log(chalk_1.default.green(`āœ… Created test workspace: ${testWorkspace.name}`));
109
+ // Clean up - try to delete (if API supports it)
110
+ console.log(chalk_1.default.gray(' (Note: Manual cleanup of test workspace may be required)'));
111
+ }
112
+ catch (error) {
113
+ console.error(chalk_1.default.red(`āŒ Write operations test failed: ${error.message}`));
114
+ }
115
+ }
116
+ else {
117
+ console.log(chalk_1.default.yellow('\nāš ļø Test 6: Write Operations (Skipped)'));
118
+ console.log(chalk_1.default.gray(' Set HUBDOC_TEST_WRITE=true to enable write tests'));
119
+ }
120
+ // Summary
121
+ console.log(chalk_1.default.bold('\nšŸŽÆ Test Summary'));
122
+ console.log(chalk_1.default.green('āœ… API integration tests completed'));
123
+ console.log(chalk_1.default.blue('šŸ“ Review the results above for any issues'));
124
+ console.log(chalk_1.default.gray('\nšŸ’” Tips:'));
125
+ console.log(chalk_1.default.gray(' - If connection fails, check your API URL and token'));
126
+ console.log(chalk_1.default.gray(' - If no data is found, make sure your HubDoc instance has content'));
127
+ console.log(chalk_1.default.gray(' - For write tests, set HUBDOC_TEST_WRITE=true'));
128
+ }
129
+ catch (error) {
130
+ console.error(chalk_1.default.red(`šŸ’„ Test failed with error: ${error.message}`));
131
+ console.error(chalk_1.default.gray(error.stack));
132
+ process.exit(1);
133
+ }
134
+ }
135
+ function formatFileSize(bytes) {
136
+ const units = ['B', 'KB', 'MB', 'GB'];
137
+ let size = bytes;
138
+ let unitIndex = 0;
139
+ while (size >= 1024 && unitIndex < units.length - 1) {
140
+ size /= 1024;
141
+ unitIndex++;
142
+ }
143
+ return `${size.toFixed(1)} ${units[unitIndex]}`;
144
+ }
145
+ // Run the test if this file is executed directly
146
+ if (require.main === module) {
147
+ testHubDocApi().catch(error => {
148
+ console.error(chalk_1.default.red('Test execution failed:'), error);
149
+ process.exit(1);
150
+ });
151
+ }
152
+ //# sourceMappingURL=hubdoc-api-test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hubdoc-api-test.js","sourceRoot":"","sources":["../../src/test/hubdoc-api-test.ts"],"names":[],"mappings":"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"}
@@ -50,12 +50,23 @@ export interface ImportResult {
50
50
  error?: string;
51
51
  filePath: string;
52
52
  }
53
+ export interface ChunkedUploadProgress {
54
+ uploadId: string;
55
+ filename: string;
56
+ uploadedChunks: number;
57
+ totalChunks: number;
58
+ progress: number;
59
+ uploadedBytes: number;
60
+ totalBytes: number;
61
+ status: 'pending' | 'processing' | 'completed' | 'failed';
62
+ }
53
63
  export interface ImportProgressCallbacks {
54
64
  onStart?: (totalFiles: number, bulkUploadId: string) => void;
55
65
  onFileStart?: (mapping: DocumentMapping, index: number, total: number) => void;
56
66
  onFileComplete?: (mapping: DocumentMapping, result: ImportResult, index: number, total: number) => void;
57
67
  onFileError?: (mapping: DocumentMapping, error: Error, index: number, total: number) => void;
58
68
  onProgress?: (completed: number, total: number, successCount: number, errorCount: number) => void;
69
+ onChunkProgress?: (mapping: DocumentMapping, chunkProgress: ChunkedUploadProgress, index: number, total: number) => void;
59
70
  onComplete?: (results: ImportResult[], errors: Array<{
60
71
  item: DocumentMapping;
61
72
  index: number;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE3E,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;AAGxD,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC;AAClC,MAAM,MAAM,cAAc,GAAG,QAAQ,CAAC;AACtC,MAAM,MAAM,gBAAgB,GAAG,UAAU,CAAC;AAG1C,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IAGf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAGlB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC/B,WAAW,CAAC,EAAE;QACZ,IAAI,CAAC,EAAE;YACL,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;YACjB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;SACnB,CAAC;QACF,KAAK,CAAC,EAAE;YACN,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;YACjB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;SACnB,CAAC;KACH,CAAC;IACF,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE,SAAS,GAAG,YAAY,GAAG,WAAW,GAAG,QAAQ,CAAC;IAC3D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7D,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/E,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxG,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7F,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IAClG,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,eAAe,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,KAAK,CAAA;KAAE,CAAC,KAAK,IAAI,CAAC;IACtH,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CAC3C"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sinoia/hubdoc-tools",
3
- "version": "1.3.8",
3
+ "version": "1.4.0",
4
4
  "description": "Professional command-line tool for HubDoc document management and bulk import/export",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",