@sinoia/hubdoc-tools 1.0.0 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +59 -0
- package/dist/commands/import.d.ts +1 -1
- package/dist/commands/import.d.ts.map +1 -1
- package/dist/commands/import.js +65 -8
- package/dist/commands/import.js.map +1 -1
- package/dist/services/hubdoc-api.d.ts +5 -3
- package/dist/services/hubdoc-api.d.ts.map +1 -1
- package/dist/services/hubdoc-api.js +42 -9
- package/dist/services/hubdoc-api.js.map +1 -1
- package/dist/types/index.d.ts +23 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/csv.d.ts +16 -0
- package/dist/utils/csv.d.ts.map +1 -1
- package/dist/utils/csv.js +111 -9
- package/dist/utils/csv.js.map +1 -1
- package/package.json +1 -1
- package/create_presentation.py +0 -768
- package/test-all-connectors.js +0 -135
- package/test-azure-blob.js +0 -69
- package/test-box.js +0 -66
- package/test-core-plugin.js +0 -39
- package/test-engine-integration.js +0 -81
- package/test-logging.js +0 -69
- package/test-onedrive.js +0 -98
- package/test-s3.js +0 -70
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,65 @@ All notable changes to the HubDoc Tools project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [1.2.0] - 2025-01-XX
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
- **BulkUpload Integration**: Full support for Corex API BulkUpload workflow
|
|
12
|
+
- Creates a single BulkUpload session at the start of each import
|
|
13
|
+
- Tracks upload progress with real-time statistics (processed/successful/failed files)
|
|
14
|
+
- Displays detailed BulkUpload status in import summary
|
|
15
|
+
- Supports concurrent uploads with shared BulkUpload ID
|
|
16
|
+
- **Resume Capability**: Import process can be stopped and resumed
|
|
17
|
+
- CSV tracking with status columns (`pending`, `processing`, `completed`, `failed`)
|
|
18
|
+
- Automatic detection of existing BulkUpload sessions
|
|
19
|
+
- Skips already completed files on resume
|
|
20
|
+
- Preserves Document IDs and error messages in CSV
|
|
21
|
+
- Stores BulkUpload ID for session continuity
|
|
22
|
+
- **Enhanced Import Summary**: Added BulkUpload status section with ID, progress percentage, and file counts
|
|
23
|
+
- **API Types**: New `HubDocBulkUpload` interface matching Corex API schema
|
|
24
|
+
- **API Service Methods**:
|
|
25
|
+
- `createBulkUpload()`: Create BulkUpload session with total file count
|
|
26
|
+
- `getBulkUploadStatus()`: Retrieve real-time BulkUpload status
|
|
27
|
+
- **CSV Manager Methods**:
|
|
28
|
+
- `updateMappingStatus()`: Update individual file status in CSV
|
|
29
|
+
- `updateAllMappingsWithBulkUploadId()`: Link all files to same BulkUpload session
|
|
30
|
+
|
|
31
|
+
### Changed
|
|
32
|
+
- **Import Workflow**: Refactored to use BulkUpload-first approach
|
|
33
|
+
- `createBulkUpload()` called before file processing (or reuses existing)
|
|
34
|
+
- All uploaded files attached to the same BulkUpload session
|
|
35
|
+
- Final status retrieved via `getBulkUploadStatus()`
|
|
36
|
+
- CSV updated in real-time after each file upload
|
|
37
|
+
- **Upload Field**: Changed from `uploaded_files[]` to `uploaded_file` (singular) to match Corex API v1 specification
|
|
38
|
+
- **API Service Methods**:
|
|
39
|
+
- `uploadDocument()` now accepts optional `bulkUploadId` parameter
|
|
40
|
+
- `importDocument()` passes `bulkUploadId` to upload operation
|
|
41
|
+
- **CSV Schema**: Extended with tracking columns
|
|
42
|
+
- `Status`: Current file status (pending/processing/completed/failed)
|
|
43
|
+
- `Error`: Error message if upload failed
|
|
44
|
+
- `Document ID`: Corex document ID after successful upload
|
|
45
|
+
- `Bulk Upload ID`: Associated BulkUpload session ID
|
|
46
|
+
|
|
47
|
+
### Technical Details
|
|
48
|
+
- **BulkUpload Features**:
|
|
49
|
+
- Single session creation with total file count
|
|
50
|
+
- Source automatically set to `hubdoc-tools`
|
|
51
|
+
- Support for concurrent jobs sharing the same BulkUpload
|
|
52
|
+
- Progress tracking: `pending` → `in_progress` → `completed`/`failed`
|
|
53
|
+
- Real-time statistics: total, processed, successful, failed files
|
|
54
|
+
- Session resumption maintains same BulkUpload ID
|
|
55
|
+
- **Parallel Import**: Works seamlessly with `--concurrent-jobs` option
|
|
56
|
+
- All workers share the same BulkUpload ID
|
|
57
|
+
- Backend atomically updates file counts
|
|
58
|
+
- Final status reflects aggregated results from all concurrent uploads
|
|
59
|
+
- CSV updates are thread-safe (sequential writes)
|
|
60
|
+
- **Resume Workflow**:
|
|
61
|
+
1. Detect existing BulkUpload ID in CSV
|
|
62
|
+
2. Fetch current status from API
|
|
63
|
+
3. Filter out completed files
|
|
64
|
+
4. Resume upload with same BulkUpload session
|
|
65
|
+
5. Continue updating CSV in real-time
|
|
66
|
+
|
|
8
67
|
## [1.1.0] - 2024-01-XX
|
|
9
68
|
|
|
10
69
|
### Added
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"import.d.ts","sourceRoot":"","sources":["../../src/commands/import.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"import.d.ts","sourceRoot":"","sources":["../../src/commands/import.ts"],"names":[],"mappings":"AAKA,OAAO,EAAqC,YAAY,EAAE,aAAa,EAAgB,MAAM,UAAU,CAAC;AAIxG,qBAAa,aAAa;IACxB,OAAO,CAAC,UAAU,CAAmB;IACrC,OAAO,CAAC,UAAU,CAAa;gBAEnB,MAAM,EAAE,YAAY;IAK1B,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;YA+HtC,oBAAoB;IAyBlC,OAAO,CAAC,YAAY;CA0CrB"}
|
package/dist/commands/import.js
CHANGED
|
@@ -4,13 +4,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.ImportCommand = void 0;
|
|
7
|
-
const path_1 = __importDefault(require("path"));
|
|
8
|
-
const glob_1 = require("glob");
|
|
9
7
|
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
+
const glob_1 = require("glob");
|
|
10
9
|
const ora_1 = __importDefault(require("ora"));
|
|
10
|
+
const path_1 = __importDefault(require("path"));
|
|
11
11
|
const hubdoc_api_1 = require("../services/hubdoc-api");
|
|
12
|
-
const csv_1 = require("../utils/csv");
|
|
13
12
|
const concurrent_processor_1 = require("../utils/concurrent-processor");
|
|
13
|
+
const csv_1 = require("../utils/csv");
|
|
14
14
|
class ImportCommand {
|
|
15
15
|
constructor(config) {
|
|
16
16
|
this.apiService = new hubdoc_api_1.HubDocApiService(config);
|
|
@@ -27,30 +27,77 @@ class ImportCommand {
|
|
|
27
27
|
}
|
|
28
28
|
spinner.succeed('Connected to HubDoc API');
|
|
29
29
|
let mappings;
|
|
30
|
+
let mappingFile;
|
|
31
|
+
let existingBulkUploadId;
|
|
30
32
|
if (options.mode === 'direct') {
|
|
31
33
|
mappings = await this.createDirectMappings(options.sourceDir);
|
|
32
34
|
console.log(chalk_1.default.blue(`📁 Found ${mappings.length} files to import`));
|
|
33
35
|
}
|
|
34
36
|
else {
|
|
35
|
-
|
|
37
|
+
mappingFile = options.mappingFile;
|
|
38
|
+
mappings = await this.csvManager.readMappingFile(mappingFile);
|
|
36
39
|
console.log(chalk_1.default.blue(`📄 Loaded ${mappings.length} mappings from CSV`));
|
|
40
|
+
// Check if there's an existing BulkUpload to resume
|
|
41
|
+
existingBulkUploadId = mappings.find(m => m.bulkUploadId)?.bulkUploadId;
|
|
42
|
+
// Filter out already completed files for resume capability
|
|
43
|
+
const pendingMappings = mappings.filter(m => m.status !== 'completed');
|
|
44
|
+
const completedCount = mappings.length - pendingMappings.length;
|
|
45
|
+
if (completedCount > 0) {
|
|
46
|
+
console.log(chalk_1.default.yellow(`⏭️ Skipping ${completedCount} already completed files`));
|
|
47
|
+
}
|
|
48
|
+
mappings = pendingMappings;
|
|
37
49
|
}
|
|
38
50
|
if (mappings.length === 0) {
|
|
39
51
|
console.log(chalk_1.default.yellow('⚠️ No files to import'));
|
|
40
52
|
return;
|
|
41
53
|
}
|
|
54
|
+
// Create or reuse BulkUpload
|
|
55
|
+
let bulkUpload;
|
|
56
|
+
if (existingBulkUploadId) {
|
|
57
|
+
spinner.start('Resuming existing bulk upload...');
|
|
58
|
+
bulkUpload = await this.apiService.getBulkUploadStatus(existingBulkUploadId);
|
|
59
|
+
spinner.succeed(`Resuming bulk upload (ID: ${bulkUpload.id})`);
|
|
60
|
+
console.log(chalk_1.default.cyan(` Already processed: ${bulkUpload.processed_files}/${bulkUpload.total_files}`));
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
spinner.start('Creating bulk upload...');
|
|
64
|
+
bulkUpload = await this.apiService.createBulkUpload(mappings.length, undefined, undefined, false, 'hubdoc-tools');
|
|
65
|
+
spinner.succeed(`Bulk upload created (ID: ${bulkUpload.id})`);
|
|
66
|
+
// Update all mappings with the bulk upload ID if using mapping file
|
|
67
|
+
if (mappingFile) {
|
|
68
|
+
await this.csvManager.updateAllMappingsWithBulkUploadId(mappingFile, bulkUpload.id);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
42
71
|
// Start import process with concurrent jobs
|
|
43
72
|
const concurrentJobs = options.concurrentJobs || 1;
|
|
44
73
|
spinner.stop();
|
|
45
74
|
const processingResult = await concurrent_processor_1.ConcurrentProcessor.processWithProgress(mappings, async (mapping, index) => {
|
|
46
|
-
|
|
75
|
+
// Update status to processing if using mapping file
|
|
76
|
+
if (mappingFile) {
|
|
77
|
+
await this.csvManager.updateMappingStatus(mappingFile, mapping.filePath, 'processing');
|
|
78
|
+
}
|
|
79
|
+
const result = await this.apiService.importDocument(mapping, bulkUpload.id);
|
|
80
|
+
// Update status based on result if using mapping file
|
|
81
|
+
if (mappingFile) {
|
|
82
|
+
if (result.success) {
|
|
83
|
+
await this.csvManager.updateMappingStatus(mappingFile, mapping.filePath, 'completed', result.document?.id, undefined);
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
await this.csvManager.updateMappingStatus(mappingFile, mapping.filePath, 'failed', undefined, result.error);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return result;
|
|
47
90
|
}, {
|
|
48
91
|
concurrency: concurrentJobs,
|
|
49
92
|
operation: 'Import',
|
|
50
93
|
itemName: 'documents'
|
|
51
94
|
});
|
|
95
|
+
// Fetch final BulkUpload status
|
|
96
|
+
spinner.start('Fetching bulk upload status...');
|
|
97
|
+
const finalStatus = await this.apiService.getBulkUploadStatus(bulkUpload.id);
|
|
98
|
+
spinner.succeed('Bulk upload completed');
|
|
52
99
|
// Summary
|
|
53
|
-
this.printSummary(processingResult.results, processingResult.errors);
|
|
100
|
+
this.printSummary(processingResult.results, processingResult.errors, finalStatus);
|
|
54
101
|
}
|
|
55
102
|
catch (error) {
|
|
56
103
|
spinner.fail(`Import failed: ${error.message}`);
|
|
@@ -79,11 +126,21 @@ class ImportCommand {
|
|
|
79
126
|
throw error;
|
|
80
127
|
}
|
|
81
128
|
}
|
|
82
|
-
printSummary(results, errors) {
|
|
129
|
+
printSummary(results, errors, bulkUpload) {
|
|
83
130
|
const successful = results.filter(r => r && r.success);
|
|
84
131
|
const failed = results.filter(r => r && !r.success);
|
|
85
132
|
console.log('\n' + chalk_1.default.bold('📊 Import Summary'));
|
|
86
|
-
|
|
133
|
+
if (bulkUpload) {
|
|
134
|
+
console.log(chalk_1.default.cyan(`\n🗂️ Bulk Upload Status:`));
|
|
135
|
+
console.log(chalk_1.default.cyan(` ID: ${bulkUpload.id}`));
|
|
136
|
+
console.log(chalk_1.default.cyan(` Status: ${bulkUpload.status}`));
|
|
137
|
+
console.log(chalk_1.default.cyan(` Progress: ${bulkUpload.progress.toFixed(1)}%`));
|
|
138
|
+
console.log(chalk_1.default.green(` ✅ Successful: ${bulkUpload.successful_files}/${bulkUpload.total_files}`));
|
|
139
|
+
if (bulkUpload.failed_files > 0) {
|
|
140
|
+
console.log(chalk_1.default.red(` ❌ Failed: ${bulkUpload.failed_files}`));
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
console.log(chalk_1.default.green(`\n✅ Successful: ${successful.length}`));
|
|
87
144
|
const totalErrors = failed.length + errors.length;
|
|
88
145
|
if (totalErrors > 0) {
|
|
89
146
|
console.log(chalk_1.default.red(`❌ Failed: ${totalErrors}`));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"import.js","sourceRoot":"","sources":["../../src/commands/import.ts"],"names":[],"mappings":";;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"import.js","sourceRoot":"","sources":["../../src/commands/import.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { DocumentMapping, HubDocBulkUpload, HubDocConfig, HubDocDocument, HubDocFolder, ImportResult } from '../types';
|
|
2
2
|
export declare class HubDocApiService {
|
|
3
3
|
private client;
|
|
4
4
|
private config;
|
|
@@ -9,8 +9,10 @@ export declare class HubDocApiService {
|
|
|
9
9
|
findOrCreateFolder(name: string, workspaceId?: string): Promise<HubDocFolder>;
|
|
10
10
|
getWorkspaces(): Promise<any[]>;
|
|
11
11
|
findWorkspace(name: string): Promise<any | null>;
|
|
12
|
-
|
|
12
|
+
createBulkUpload(totalFiles: number, folderId?: string, workspaceId?: string, autoClassify?: boolean, source?: string): Promise<HubDocBulkUpload>;
|
|
13
|
+
getBulkUploadStatus(bulkUploadId: string): Promise<HubDocBulkUpload>;
|
|
14
|
+
uploadDocument(filePath: string, folderId: string, mapping: DocumentMapping, bulkUploadId?: string): Promise<HubDocDocument>;
|
|
13
15
|
private setDocumentPermissions;
|
|
14
|
-
importDocument(mapping: DocumentMapping): Promise<ImportResult>;
|
|
16
|
+
importDocument(mapping: DocumentMapping, bulkUploadId?: string): Promise<ImportResult>;
|
|
15
17
|
}
|
|
16
18
|
//# sourceMappingURL=hubdoc-api.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hubdoc-api.d.ts","sourceRoot":"","sources":["../../src/services/hubdoc-api.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"hubdoc-api.d.ts","sourceRoot":"","sources":["../../src/services/hubdoc-api.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAEvH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,MAAM,CAAe;gBAEjB,MAAM,EAAE,YAAY;IAuB1B,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IAUlC,UAAU,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IASrC,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAcvE,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAiB7E,aAAa,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAS/B,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC;IAKhD,gBAAgB,CACpB,UAAU,EAAE,MAAM,EAClB,QAAQ,CAAC,EAAE,MAAM,EACjB,WAAW,CAAC,EAAE,MAAM,EACpB,YAAY,GAAE,OAAe,EAC7B,MAAM,GAAE,MAAuB,GAC9B,OAAO,CAAC,gBAAgB,CAAC;IAuBtB,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IASpE,cAAc,CAClB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,eAAe,EACxB,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,cAAc,CAAC;YAkDZ,sBAAsB;IAyB9B,cAAc,CAAC,OAAO,EAAE,eAAe,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;CAoC7F"}
|
|
@@ -5,10 +5,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.HubDocApiService = void 0;
|
|
7
7
|
const axios_1 = __importDefault(require("axios"));
|
|
8
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
8
9
|
const form_data_1 = __importDefault(require("form-data"));
|
|
9
10
|
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
10
11
|
const path_1 = __importDefault(require("path"));
|
|
11
|
-
const chalk_1 = __importDefault(require("chalk"));
|
|
12
12
|
class HubDocApiService {
|
|
13
13
|
constructor(config) {
|
|
14
14
|
this.config = config;
|
|
@@ -86,23 +86,56 @@ class HubDocApiService {
|
|
|
86
86
|
const workspaces = await this.getWorkspaces();
|
|
87
87
|
return workspaces.find(w => w.name === name) || null;
|
|
88
88
|
}
|
|
89
|
-
async
|
|
89
|
+
async createBulkUpload(totalFiles, folderId, workspaceId, autoClassify = false, source = 'hubdoc-tools') {
|
|
90
|
+
try {
|
|
91
|
+
const data = {
|
|
92
|
+
total_files: totalFiles,
|
|
93
|
+
source,
|
|
94
|
+
auto_classify: autoClassify
|
|
95
|
+
};
|
|
96
|
+
if (folderId) {
|
|
97
|
+
data.documents_folder_id = folderId;
|
|
98
|
+
}
|
|
99
|
+
if (workspaceId) {
|
|
100
|
+
data.workspace_id = workspaceId;
|
|
101
|
+
}
|
|
102
|
+
const response = await this.client.post('/documents/bulk_uploads', data);
|
|
103
|
+
return response.data;
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
throw new Error(`Failed to create bulk upload: ${error.message}`);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
async getBulkUploadStatus(bulkUploadId) {
|
|
110
|
+
try {
|
|
111
|
+
const response = await this.client.get(`/documents/bulk_uploads/${bulkUploadId}`);
|
|
112
|
+
return response.data;
|
|
113
|
+
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
throw new Error(`Failed to get bulk upload status: ${error.message}`);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
async uploadDocument(filePath, folderId, mapping, bulkUploadId) {
|
|
90
119
|
if (!await fs_extra_1.default.pathExists(filePath)) {
|
|
91
120
|
throw new Error(`File not found: ${filePath}`);
|
|
92
121
|
}
|
|
93
122
|
const formData = new form_data_1.default();
|
|
94
123
|
const fileStream = fs_extra_1.default.createReadStream(filePath);
|
|
95
124
|
const fileName = path_1.default.basename(filePath);
|
|
96
|
-
formData.append('
|
|
97
|
-
formData.append('
|
|
125
|
+
formData.append('uploaded_file', fileStream, fileName);
|
|
126
|
+
formData.append('documents_folder_id', folderId);
|
|
127
|
+
// Add bulk_upload_id if provided
|
|
128
|
+
if (bulkUploadId) {
|
|
129
|
+
formData.append('bulk_upload_id', bulkUploadId);
|
|
130
|
+
}
|
|
98
131
|
// Add metadata if provided
|
|
99
132
|
if (mapping.metadata) {
|
|
100
133
|
Object.entries(mapping.metadata).forEach(([key, value]) => {
|
|
101
|
-
formData.append(`
|
|
134
|
+
formData.append(`metadata_user[${key}]`, String(value));
|
|
102
135
|
});
|
|
103
136
|
}
|
|
104
137
|
try {
|
|
105
|
-
const response = await this.client.post('/documents', formData, {
|
|
138
|
+
const response = await this.client.post('/documents/documents', formData, {
|
|
106
139
|
headers: {
|
|
107
140
|
...formData.getHeaders(),
|
|
108
141
|
'Content-Type': 'multipart/form-data'
|
|
@@ -142,7 +175,7 @@ class HubDocApiService {
|
|
|
142
175
|
console.warn(chalk_1.default.yellow(`Warning: Failed to set ${permissionType} permissions for document ${documentId}: ${error.message}`));
|
|
143
176
|
}
|
|
144
177
|
}
|
|
145
|
-
async importDocument(mapping) {
|
|
178
|
+
async importDocument(mapping, bulkUploadId) {
|
|
146
179
|
const result = {
|
|
147
180
|
success: false,
|
|
148
181
|
filePath: mapping.filePath
|
|
@@ -160,8 +193,8 @@ class HubDocApiService {
|
|
|
160
193
|
// Find or create target folder
|
|
161
194
|
const folderName = mapping.targetFolder || 'Imported Documents';
|
|
162
195
|
const folder = await this.findOrCreateFolder(folderName, workspaceId);
|
|
163
|
-
// Upload document
|
|
164
|
-
const document = await this.uploadDocument(mapping.filePath, folder.id, mapping);
|
|
196
|
+
// Upload document with bulk_upload_id
|
|
197
|
+
const document = await this.uploadDocument(mapping.filePath, folder.id, mapping, bulkUploadId);
|
|
165
198
|
result.success = true;
|
|
166
199
|
result.document = document;
|
|
167
200
|
console.log(chalk_1.default.green(`✅ Uploaded: ${path_1.default.basename(mapping.filePath)} → ${folderName}`));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hubdoc-api.js","sourceRoot":"","sources":["../../src/services/hubdoc-api.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA6C;AAC7C,0DAAiC;AACjC,wDAA0B;AAC1B,gDAAwB;
|
|
1
|
+
{"version":3,"file":"hubdoc-api.js","sourceRoot":"","sources":["../../src/services/hubdoc-api.ts"],"names":[],"mappings":"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"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -21,6 +21,10 @@ export interface DocumentMapping {
|
|
|
21
21
|
groups?: string[];
|
|
22
22
|
};
|
|
23
23
|
};
|
|
24
|
+
status?: 'pending' | 'processing' | 'completed' | 'failed';
|
|
25
|
+
error?: string;
|
|
26
|
+
documentId?: string;
|
|
27
|
+
bulkUploadId?: string;
|
|
24
28
|
}
|
|
25
29
|
export interface ImportOptions {
|
|
26
30
|
mode: 'direct' | 'mapping';
|
|
@@ -45,6 +49,25 @@ export interface HubDocDocument {
|
|
|
45
49
|
created_at?: string;
|
|
46
50
|
updated_at?: string;
|
|
47
51
|
}
|
|
52
|
+
export interface HubDocBulkUpload {
|
|
53
|
+
id: string;
|
|
54
|
+
status: 'pending' | 'in_progress' | 'completed' | 'failed';
|
|
55
|
+
source: string;
|
|
56
|
+
total_files: number;
|
|
57
|
+
processed_files: number;
|
|
58
|
+
successful_files: number;
|
|
59
|
+
failed_files: number;
|
|
60
|
+
progress: number;
|
|
61
|
+
auto_classify: boolean;
|
|
62
|
+
folder_id?: string;
|
|
63
|
+
workspace_id?: string;
|
|
64
|
+
user_id: string;
|
|
65
|
+
started_at?: string;
|
|
66
|
+
completed_at?: string;
|
|
67
|
+
metadata?: Record<string, any>;
|
|
68
|
+
created_at: string;
|
|
69
|
+
updated_at: string;
|
|
70
|
+
}
|
|
48
71
|
export interface ImportResult {
|
|
49
72
|
success: boolean;
|
|
50
73
|
document?: HubDocDocument;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;CAChC;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;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/csv.d.ts
CHANGED
|
@@ -20,5 +20,21 @@ export declare class CsvManager {
|
|
|
20
20
|
* Generic method to read CSV file
|
|
21
21
|
*/
|
|
22
22
|
readCsv(filePath: string): Promise<any[]>;
|
|
23
|
+
/**
|
|
24
|
+
* Update the status of a specific mapping in the CSV file
|
|
25
|
+
*/
|
|
26
|
+
updateMappingStatus(csvFilePath: string, filePath: string, status: 'pending' | 'processing' | 'completed' | 'failed', documentId?: string, error?: string, bulkUploadId?: string): Promise<void>;
|
|
27
|
+
/**
|
|
28
|
+
* Update all mappings with a bulk upload ID
|
|
29
|
+
*/
|
|
30
|
+
updateAllMappingsWithBulkUploadId(csvFilePath: string, bulkUploadId: string): Promise<void>;
|
|
31
|
+
/**
|
|
32
|
+
* Write all mappings back to CSV file
|
|
33
|
+
*/
|
|
34
|
+
private writeMappingsToFile;
|
|
35
|
+
/**
|
|
36
|
+
* Serialize permissions back to string format
|
|
37
|
+
*/
|
|
38
|
+
private serializePermissions;
|
|
23
39
|
}
|
|
24
40
|
//# sourceMappingURL=csv.d.ts.map
|
package/dist/utils/csv.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"csv.d.ts","sourceRoot":"","sources":["../../src/utils/csv.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"csv.d.ts","sourceRoot":"","sources":["../../src/utils/csv.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,qBAAa,UAAU;IACf,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,GAAE,MAAsB,GAAG,OAAO,CAAC,IAAI,CAAC;IAwCzF,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;YAqDrD,WAAW;IAUzB,OAAO,CAAC,aAAa;IAWrB,OAAO,CAAC,gBAAgB;IAsBxB;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,GAAG,MAAM;IAoBzE;;OAEG;IACG,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIhE;;OAEG;IACG,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAkB/C;;OAEG;IACG,mBAAmB,CACvB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,SAAS,GAAG,YAAY,GAAG,WAAW,GAAG,QAAQ,EACzD,UAAU,CAAC,EAAE,MAAM,EACnB,KAAK,CAAC,EAAE,MAAM,EACd,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,IAAI,CAAC;IAwBhB;;OAEG;IACG,iCAAiC,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBjG;;OAEG;YACW,mBAAmB;IA+BjC;;OAEG;IACH,OAAO,CAAC,oBAAoB;CAa7B"}
|
package/dist/utils/csv.js
CHANGED
|
@@ -4,12 +4,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.CsvManager = void 0;
|
|
7
|
-
const
|
|
7
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
8
8
|
const csv_parser_1 = __importDefault(require("csv-parser"));
|
|
9
9
|
const csv_writer_1 = require("csv-writer");
|
|
10
|
-
const
|
|
10
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
11
11
|
const glob_1 = require("glob");
|
|
12
|
-
const
|
|
12
|
+
const path_1 = __importDefault(require("path"));
|
|
13
13
|
class CsvManager {
|
|
14
14
|
async generateMappingFile(sourceDir, outputPath = 'mapping.csv') {
|
|
15
15
|
const files = await this.getAllFiles(sourceDir);
|
|
@@ -18,7 +18,11 @@ class CsvManager {
|
|
|
18
18
|
targetFolder: '',
|
|
19
19
|
workspace: '',
|
|
20
20
|
metadata: '',
|
|
21
|
-
permissions: ''
|
|
21
|
+
permissions: '',
|
|
22
|
+
status: 'pending',
|
|
23
|
+
error: '',
|
|
24
|
+
documentId: '',
|
|
25
|
+
bulkUploadId: ''
|
|
22
26
|
}));
|
|
23
27
|
const csvWriter = (0, csv_writer_1.createObjectCsvWriter)({
|
|
24
28
|
path: outputPath,
|
|
@@ -27,7 +31,11 @@ class CsvManager {
|
|
|
27
31
|
{ id: 'targetFolder', title: 'Target Folder' },
|
|
28
32
|
{ id: 'workspace', title: 'Workspace' },
|
|
29
33
|
{ id: 'metadata', title: 'Metadata (JSON)' },
|
|
30
|
-
{ id: 'permissions', title: 'Permissions (users:group1,group2|groups:user1,user2)' }
|
|
34
|
+
{ id: 'permissions', title: 'Permissions (users:group1,group2|groups:user1,user2)' },
|
|
35
|
+
{ id: 'status', title: 'Status' },
|
|
36
|
+
{ id: 'error', title: 'Error' },
|
|
37
|
+
{ id: 'documentId', title: 'Document ID' },
|
|
38
|
+
{ id: 'bulkUploadId', title: 'Bulk Upload ID' }
|
|
31
39
|
]
|
|
32
40
|
});
|
|
33
41
|
await csvWriter.writeRecords(mappingData);
|
|
@@ -36,9 +44,8 @@ class CsvManager {
|
|
|
36
44
|
console.log(chalk_1.default.gray(` - Target Folder: Name of the folder in HubDoc (will be created if doesn't exist)`));
|
|
37
45
|
console.log(chalk_1.default.gray(` - Workspace: Name of the workspace (optional)`));
|
|
38
46
|
console.log(chalk_1.default.gray(` - Metadata: JSON object with additional metadata`));
|
|
39
|
-
console.log(chalk_1.default.gray(` -
|
|
40
|
-
console.log(chalk_1.default.gray(` -
|
|
41
|
-
console.log(chalk_1.default.gray(` - Format: users:user1,user2|groups:group1,group2`));
|
|
47
|
+
console.log(chalk_1.default.gray(` - Permissions: Format users:user1,user2|groups:group1,group2`));
|
|
48
|
+
console.log(chalk_1.default.gray(` - Status: Auto-updated during import (pending/processing/completed/failed)`));
|
|
42
49
|
}
|
|
43
50
|
async readMappingFile(filePath) {
|
|
44
51
|
if (!await fs_extra_1.default.pathExists(filePath)) {
|
|
@@ -69,7 +76,11 @@ class CsvManager {
|
|
|
69
76
|
targetFolder: data['Target Folder'] || data.targetFolder || undefined,
|
|
70
77
|
workspace: data['Workspace'] || data.workspace || undefined,
|
|
71
78
|
metadata: this.parseMetadata(data['Metadata (JSON)'] || data.metadata),
|
|
72
|
-
permissions
|
|
79
|
+
permissions,
|
|
80
|
+
status: (data['Status'] || data.status || 'pending'),
|
|
81
|
+
error: data['Error'] || data.error || undefined,
|
|
82
|
+
documentId: data['Document ID'] || data.documentId || undefined,
|
|
83
|
+
bulkUploadId: data['Bulk Upload ID'] || data.bulkUploadId || undefined
|
|
73
84
|
};
|
|
74
85
|
results.push(mapping);
|
|
75
86
|
}
|
|
@@ -168,6 +179,97 @@ class CsvManager {
|
|
|
168
179
|
.on('error', reject);
|
|
169
180
|
});
|
|
170
181
|
}
|
|
182
|
+
/**
|
|
183
|
+
* Update the status of a specific mapping in the CSV file
|
|
184
|
+
*/
|
|
185
|
+
async updateMappingStatus(csvFilePath, filePath, status, documentId, error, bulkUploadId) {
|
|
186
|
+
try {
|
|
187
|
+
// Read all mappings
|
|
188
|
+
const mappings = await this.readMappingFile(csvFilePath);
|
|
189
|
+
// Find and update the specific mapping
|
|
190
|
+
const mappingIndex = mappings.findIndex(m => m.filePath === filePath);
|
|
191
|
+
if (mappingIndex === -1) {
|
|
192
|
+
console.warn(chalk_1.default.yellow(`⚠️ Warning: Mapping not found for file: ${filePath}`));
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
mappings[mappingIndex].status = status;
|
|
196
|
+
if (documentId)
|
|
197
|
+
mappings[mappingIndex].documentId = documentId;
|
|
198
|
+
if (error)
|
|
199
|
+
mappings[mappingIndex].error = error;
|
|
200
|
+
if (bulkUploadId)
|
|
201
|
+
mappings[mappingIndex].bulkUploadId = bulkUploadId;
|
|
202
|
+
// Write all mappings back to CSV
|
|
203
|
+
await this.writeMappingsToFile(csvFilePath, mappings);
|
|
204
|
+
}
|
|
205
|
+
catch (error) {
|
|
206
|
+
console.warn(chalk_1.default.yellow(`⚠️ Warning: Failed to update CSV status: ${error.message}`));
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Update all mappings with a bulk upload ID
|
|
211
|
+
*/
|
|
212
|
+
async updateAllMappingsWithBulkUploadId(csvFilePath, bulkUploadId) {
|
|
213
|
+
try {
|
|
214
|
+
const mappings = await this.readMappingFile(csvFilePath);
|
|
215
|
+
// Update all mappings with the bulk upload ID
|
|
216
|
+
mappings.forEach(m => {
|
|
217
|
+
if (!m.bulkUploadId) {
|
|
218
|
+
m.bulkUploadId = bulkUploadId;
|
|
219
|
+
}
|
|
220
|
+
});
|
|
221
|
+
await this.writeMappingsToFile(csvFilePath, mappings);
|
|
222
|
+
}
|
|
223
|
+
catch (error) {
|
|
224
|
+
console.warn(chalk_1.default.yellow(`⚠️ Warning: Failed to update bulk upload ID: ${error.message}`));
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Write all mappings back to CSV file
|
|
229
|
+
*/
|
|
230
|
+
async writeMappingsToFile(csvFilePath, mappings) {
|
|
231
|
+
const csvData = mappings.map(m => ({
|
|
232
|
+
filePath: m.filePath,
|
|
233
|
+
targetFolder: m.targetFolder || '',
|
|
234
|
+
workspace: m.workspace || '',
|
|
235
|
+
metadata: m.metadata ? JSON.stringify(m.metadata) : '',
|
|
236
|
+
permissions: this.serializePermissions(m.permissions),
|
|
237
|
+
status: m.status || 'pending',
|
|
238
|
+
error: m.error || '',
|
|
239
|
+
documentId: m.documentId || '',
|
|
240
|
+
bulkUploadId: m.bulkUploadId || ''
|
|
241
|
+
}));
|
|
242
|
+
const csvWriter = (0, csv_writer_1.createObjectCsvWriter)({
|
|
243
|
+
path: csvFilePath,
|
|
244
|
+
header: [
|
|
245
|
+
{ id: 'filePath', title: 'File Path' },
|
|
246
|
+
{ id: 'targetFolder', title: 'Target Folder' },
|
|
247
|
+
{ id: 'workspace', title: 'Workspace' },
|
|
248
|
+
{ id: 'metadata', title: 'Metadata (JSON)' },
|
|
249
|
+
{ id: 'permissions', title: 'Permissions (users:group1,group2|groups:user1,user2)' },
|
|
250
|
+
{ id: 'status', title: 'Status' },
|
|
251
|
+
{ id: 'error', title: 'Error' },
|
|
252
|
+
{ id: 'documentId', title: 'Document ID' },
|
|
253
|
+
{ id: 'bulkUploadId', title: 'Bulk Upload ID' }
|
|
254
|
+
]
|
|
255
|
+
});
|
|
256
|
+
await csvWriter.writeRecords(csvData);
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Serialize permissions back to string format
|
|
260
|
+
*/
|
|
261
|
+
serializePermissions(permissions) {
|
|
262
|
+
if (!permissions)
|
|
263
|
+
return '';
|
|
264
|
+
const parts = [];
|
|
265
|
+
if (permissions.read?.users && permissions.read.users.length > 0) {
|
|
266
|
+
parts.push(`users:${permissions.read.users.join(',')}`);
|
|
267
|
+
}
|
|
268
|
+
if (permissions.read?.groups && permissions.read.groups.length > 0) {
|
|
269
|
+
parts.push(`groups:${permissions.read.groups.join(',')}`);
|
|
270
|
+
}
|
|
271
|
+
return parts.join('|');
|
|
272
|
+
}
|
|
171
273
|
}
|
|
172
274
|
exports.CsvManager = CsvManager;
|
|
173
275
|
//# sourceMappingURL=csv.js.map
|