@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.
- package/dist/commands/export-v2.d.ts +45 -0
- package/dist/commands/export-v2.d.ts.map +1 -0
- package/dist/commands/export-v2.js +369 -0
- package/dist/commands/export-v2.js.map +1 -0
- package/dist/commands/import-v2.d.ts +32 -0
- package/dist/commands/import-v2.d.ts.map +1 -0
- package/dist/commands/import-v2.js +331 -0
- package/dist/commands/import-v2.js.map +1 -0
- package/dist/commands/import.d.ts.map +1 -1
- package/dist/commands/import.js +10 -2
- package/dist/commands/import.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/plugins/alfresco/plugin.json +1 -1
- package/dist/plugins/aws-s3/plugin.json +1 -1
- package/dist/plugins/azure-blob/plugin.json +1 -1
- package/dist/plugins/box/plugin.json +1 -1
- package/dist/plugins/core/plugin.json +1 -1
- package/dist/plugins/nuxeo/plugin.json +1 -1
- package/dist/plugins/o365-mail/index.d.ts +26 -0
- package/dist/plugins/o365-mail/index.d.ts.map +1 -0
- package/dist/plugins/o365-mail/index.js +392 -0
- package/dist/plugins/o365-mail/index.js.map +1 -0
- package/dist/plugins/o365-mail/plugin.json +8 -0
- package/dist/plugins/opentext/plugin.json +1 -1
- package/dist/plugins/sharepoint/plugin.json +1 -1
- package/dist/services/hubdoc-api-v2.d.ts +150 -0
- package/dist/services/hubdoc-api-v2.d.ts.map +1 -0
- package/dist/services/hubdoc-api-v2.js +418 -0
- package/dist/services/hubdoc-api-v2.js.map +1 -0
- package/dist/services/hubdoc-client.d.ts +246 -0
- package/dist/services/hubdoc-client.d.ts.map +1 -0
- package/dist/services/hubdoc-client.js +714 -0
- package/dist/services/hubdoc-client.js.map +1 -0
- package/dist/services/hubdoc-export-service.d.ts +90 -0
- package/dist/services/hubdoc-export-service.d.ts.map +1 -0
- package/dist/services/hubdoc-export-service.js +443 -0
- package/dist/services/hubdoc-export-service.js.map +1 -0
- package/dist/services/hubdoc-export-v2.d.ts +77 -0
- package/dist/services/hubdoc-export-v2.d.ts.map +1 -0
- package/dist/services/hubdoc-export-v2.js +329 -0
- package/dist/services/hubdoc-export-v2.js.map +1 -0
- package/dist/services/hubdoc-import-service.d.ts +64 -0
- package/dist/services/hubdoc-import-service.d.ts.map +1 -0
- package/dist/services/hubdoc-import-service.js +374 -0
- package/dist/services/hubdoc-import-service.js.map +1 -0
- package/dist/test/hubdoc-api-test.d.ts +8 -0
- package/dist/test/hubdoc-api-test.d.ts.map +1 -0
- package/dist/test/hubdoc-api-test.js +152 -0
- package/dist/test/hubdoc-api-test.js.map +1 -0
- package/dist/types/index.d.ts +11 -0
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { HubDocConfig } from '../types';
|
|
2
|
+
import { ExportMapping, ExportResult } from '../types/export';
|
|
3
|
+
export interface HubDocExportDocument {
|
|
4
|
+
id: string;
|
|
5
|
+
name: string;
|
|
6
|
+
size: number;
|
|
7
|
+
mime_type: string;
|
|
8
|
+
folder_path: string;
|
|
9
|
+
workspace_name?: string;
|
|
10
|
+
download_url: string;
|
|
11
|
+
metadata?: Record<string, any>;
|
|
12
|
+
created_at: string;
|
|
13
|
+
updated_at: string;
|
|
14
|
+
}
|
|
15
|
+
export declare class HubDocExportServiceV2 {
|
|
16
|
+
private apiService;
|
|
17
|
+
private config;
|
|
18
|
+
constructor(config: HubDocConfig);
|
|
19
|
+
/**
|
|
20
|
+
* Test API connection
|
|
21
|
+
*/
|
|
22
|
+
testConnection(): Promise<boolean>;
|
|
23
|
+
/**
|
|
24
|
+
* Generate export mapping from HubDoc documents
|
|
25
|
+
*/
|
|
26
|
+
generateExportMapping(workspaceFilter?: string, folderFilter?: string): Promise<ExportMapping[]>;
|
|
27
|
+
/**
|
|
28
|
+
* Export documents based on mapping
|
|
29
|
+
*/
|
|
30
|
+
exportDocuments(mappings: ExportMapping[], outputDir: string): Promise<ExportResult[]>;
|
|
31
|
+
/**
|
|
32
|
+
* Export a single document
|
|
33
|
+
*/
|
|
34
|
+
private exportSingleDocument;
|
|
35
|
+
/**
|
|
36
|
+
* Download document from HubDoc
|
|
37
|
+
*/
|
|
38
|
+
private downloadDocument;
|
|
39
|
+
/**
|
|
40
|
+
* Get files in a specific folder
|
|
41
|
+
*/
|
|
42
|
+
private getFilesInFolder;
|
|
43
|
+
/**
|
|
44
|
+
* Build full folder path from folder hierarchy
|
|
45
|
+
*/
|
|
46
|
+
private buildFolderPath;
|
|
47
|
+
/**
|
|
48
|
+
* Generate default target path for export
|
|
49
|
+
*/
|
|
50
|
+
private generateDefaultTargetPath;
|
|
51
|
+
/**
|
|
52
|
+
* Sanitize path for file system compatibility
|
|
53
|
+
*/
|
|
54
|
+
private sanitizePath;
|
|
55
|
+
/**
|
|
56
|
+
* Search documents across HubDoc
|
|
57
|
+
*/
|
|
58
|
+
searchDocuments(query: string, options?: {
|
|
59
|
+
workspace?: string;
|
|
60
|
+
fileType?: string;
|
|
61
|
+
limit?: number;
|
|
62
|
+
}): Promise<ExportMapping[]>;
|
|
63
|
+
/**
|
|
64
|
+
* Get export statistics
|
|
65
|
+
*/
|
|
66
|
+
getExportStats(): Promise<{
|
|
67
|
+
totalWorkspaces: number;
|
|
68
|
+
totalFolders: number;
|
|
69
|
+
totalFiles: number;
|
|
70
|
+
totalSize: number;
|
|
71
|
+
}>;
|
|
72
|
+
/**
|
|
73
|
+
* Sleep utility for rate limiting
|
|
74
|
+
*/
|
|
75
|
+
private sleep;
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=hubdoc-export-v2.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hubdoc-export-v2.d.ts","sourceRoot":"","sources":["../../src/services/hubdoc-export-v2.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAG9D,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,qBAAqB;IAChC,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,MAAM,CAAe;gBAEjB,MAAM,EAAE,YAAY;IAKhC;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IAIxC;;OAEG;IACG,qBAAqB,CACzB,eAAe,CAAC,EAAE,MAAM,EACxB,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,aAAa,EAAE,CAAC;IAgE3B;;OAEG;IACG,eAAe,CAAC,QAAQ,EAAE,aAAa,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAwD5F;;OAEG;YACW,oBAAoB;IAmClC;;OAEG;YACW,gBAAgB;IAgC9B;;OAEG;YACW,gBAAgB;IAoB9B;;OAEG;IACH,OAAO,CAAC,eAAe;IAkBvB;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAQjC;;OAEG;IACH,OAAO,CAAC,YAAY;IAOpB;;OAEG;IACG,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAgD5B;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC;QAC9B,eAAe,EAAE,MAAM,CAAC;QACxB,YAAY,EAAE,MAAM,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IAoCF;;OAEG;IACH,OAAO,CAAC,KAAK;CAGd"}
|
|
@@ -0,0 +1,329 @@
|
|
|
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.HubDocExportServiceV2 = void 0;
|
|
7
|
+
const axios_1 = __importDefault(require("axios"));
|
|
8
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
9
|
+
const path_1 = __importDefault(require("path"));
|
|
10
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
11
|
+
const hubdoc_api_v2_1 = require("./hubdoc-api-v2");
|
|
12
|
+
class HubDocExportServiceV2 {
|
|
13
|
+
constructor(config) {
|
|
14
|
+
this.config = config;
|
|
15
|
+
this.apiService = new hubdoc_api_v2_1.HubDocApiServiceV2(config);
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Test API connection
|
|
19
|
+
*/
|
|
20
|
+
async testConnection() {
|
|
21
|
+
return this.apiService.testConnection();
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Generate export mapping from HubDoc documents
|
|
25
|
+
*/
|
|
26
|
+
async generateExportMapping(workspaceFilter, folderFilter) {
|
|
27
|
+
console.log(chalk_1.default.blue('🔍 Scanning HubDoc documents...'));
|
|
28
|
+
const mappings = [];
|
|
29
|
+
try {
|
|
30
|
+
// Get all workspaces or filter by name
|
|
31
|
+
const workspaces = await this.apiService.getWorkspaces();
|
|
32
|
+
const targetWorkspaces = workspaceFilter
|
|
33
|
+
? workspaces.filter(w => w.name.includes(workspaceFilter))
|
|
34
|
+
: workspaces;
|
|
35
|
+
console.log(chalk_1.default.gray(` Found ${targetWorkspaces.length} workspace(s) to scan`));
|
|
36
|
+
for (const workspace of targetWorkspaces) {
|
|
37
|
+
console.log(chalk_1.default.blue(` 📁 Scanning workspace: ${workspace.name}`));
|
|
38
|
+
// Get folders in workspace
|
|
39
|
+
const folders = await this.apiService.getFolders(workspace.id);
|
|
40
|
+
// Build folder hierarchy for better path resolution
|
|
41
|
+
const folderMap = new Map();
|
|
42
|
+
folders.forEach(folder => folderMap.set(folder.id, folder));
|
|
43
|
+
for (const folder of folders) {
|
|
44
|
+
// Skip if folder filter is specified and doesn't match
|
|
45
|
+
if (folderFilter && !folder.name.includes(folderFilter)) {
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
// Get files in this folder
|
|
49
|
+
const files = await this.getFilesInFolder(folder.id);
|
|
50
|
+
for (const file of files) {
|
|
51
|
+
const folderPath = this.buildFolderPath(folder, folderMap);
|
|
52
|
+
const projectLocation = {
|
|
53
|
+
projectName: workspace.name,
|
|
54
|
+
folderPath: folderPath,
|
|
55
|
+
fullPath: `${workspace.name}/${folderPath}`
|
|
56
|
+
};
|
|
57
|
+
const mapping = {
|
|
58
|
+
documentId: file.id,
|
|
59
|
+
documentName: file.name,
|
|
60
|
+
projects: [projectLocation],
|
|
61
|
+
downloadUrl: file.download_url || `/files/${file.id}/download`,
|
|
62
|
+
targetPath: this.generateDefaultTargetPath(workspace.name, folderPath),
|
|
63
|
+
metadata: file.metadata
|
|
64
|
+
};
|
|
65
|
+
mappings.push(mapping);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
console.log(chalk_1.default.green(`✅ Found ${mappings.length} documents to export`));
|
|
70
|
+
return mappings;
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
console.error(chalk_1.default.red(`❌ Failed to generate export mapping: ${error.message}`));
|
|
74
|
+
throw error;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Export documents based on mapping
|
|
79
|
+
*/
|
|
80
|
+
async exportDocuments(mappings, outputDir) {
|
|
81
|
+
const results = [];
|
|
82
|
+
console.log(chalk_1.default.blue(`📦 Starting export of ${mappings.length} documents`));
|
|
83
|
+
console.log(chalk_1.default.gray(` Output directory: ${path_1.default.resolve(outputDir)}`));
|
|
84
|
+
// Ensure output directory exists
|
|
85
|
+
await fs_extra_1.default.ensureDir(outputDir);
|
|
86
|
+
let successCount = 0;
|
|
87
|
+
let failureCount = 0;
|
|
88
|
+
for (let i = 0; i < mappings.length; i++) {
|
|
89
|
+
const mapping = mappings[i];
|
|
90
|
+
try {
|
|
91
|
+
const result = await this.exportSingleDocument(mapping, outputDir);
|
|
92
|
+
results.push(result);
|
|
93
|
+
if (result.success) {
|
|
94
|
+
successCount++;
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
failureCount++;
|
|
98
|
+
}
|
|
99
|
+
// Progress update
|
|
100
|
+
if ((i + 1) % 10 === 0) {
|
|
101
|
+
console.log(chalk_1.default.blue(`📊 Progress: ${i + 1}/${mappings.length} processed`));
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
failureCount++;
|
|
106
|
+
results.push({
|
|
107
|
+
success: false,
|
|
108
|
+
documentId: mapping.documentId,
|
|
109
|
+
documentName: mapping.documentName,
|
|
110
|
+
exportedPath: '',
|
|
111
|
+
error: error.message
|
|
112
|
+
});
|
|
113
|
+
console.error(chalk_1.default.red(`❌ Export failed for ${mapping.documentName}: ${error.message}`));
|
|
114
|
+
}
|
|
115
|
+
// Small delay to avoid overwhelming the API
|
|
116
|
+
await this.sleep(50);
|
|
117
|
+
}
|
|
118
|
+
console.log(chalk_1.default.bold('\n📊 Export Summary'));
|
|
119
|
+
console.log(chalk_1.default.green(`✅ Successfully exported: ${successCount} documents`));
|
|
120
|
+
if (failureCount > 0) {
|
|
121
|
+
console.log(chalk_1.default.red(`❌ Failed exports: ${failureCount}`));
|
|
122
|
+
}
|
|
123
|
+
return results;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Export a single document
|
|
127
|
+
*/
|
|
128
|
+
async exportSingleDocument(mapping, baseOutputDir) {
|
|
129
|
+
try {
|
|
130
|
+
// Determine target path
|
|
131
|
+
const targetPath = mapping.targetPath || this.generateDefaultTargetPath(mapping.projects[0]?.projectName || 'Unknown', mapping.projects[0]?.folderPath || 'Documents');
|
|
132
|
+
const fullExportPath = path_1.default.join(baseOutputDir, targetPath, mapping.documentName);
|
|
133
|
+
const exportDir = path_1.default.dirname(fullExportPath);
|
|
134
|
+
// Ensure target directory exists
|
|
135
|
+
await fs_extra_1.default.ensureDir(exportDir);
|
|
136
|
+
// Download file
|
|
137
|
+
await this.downloadDocument(mapping.documentId, mapping.downloadUrl, fullExportPath);
|
|
138
|
+
return {
|
|
139
|
+
success: true,
|
|
140
|
+
documentId: mapping.documentId,
|
|
141
|
+
documentName: mapping.documentName,
|
|
142
|
+
exportedPath: fullExportPath
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
catch (error) {
|
|
146
|
+
return {
|
|
147
|
+
success: false,
|
|
148
|
+
documentId: mapping.documentId,
|
|
149
|
+
documentName: mapping.documentName,
|
|
150
|
+
exportedPath: '',
|
|
151
|
+
error: error.message
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Download document from HubDoc
|
|
157
|
+
*/
|
|
158
|
+
async downloadDocument(documentId, downloadUrl, targetPath) {
|
|
159
|
+
try {
|
|
160
|
+
// Construct full URL if relative
|
|
161
|
+
const fullUrl = downloadUrl.startsWith('http')
|
|
162
|
+
? downloadUrl
|
|
163
|
+
: `${this.config.apiUrl}${downloadUrl}`;
|
|
164
|
+
const response = await axios_1.default.get(fullUrl, {
|
|
165
|
+
headers: {
|
|
166
|
+
'Authorization': `Bearer ${this.config.token}`
|
|
167
|
+
},
|
|
168
|
+
responseType: 'stream',
|
|
169
|
+
timeout: 60000 // 60 seconds timeout for large files
|
|
170
|
+
});
|
|
171
|
+
const writer = fs_extra_1.default.createWriteStream(targetPath);
|
|
172
|
+
response.data.pipe(writer);
|
|
173
|
+
return new Promise((resolve, reject) => {
|
|
174
|
+
writer.on('finish', () => {
|
|
175
|
+
resolve();
|
|
176
|
+
});
|
|
177
|
+
writer.on('error', (error) => {
|
|
178
|
+
reject(error);
|
|
179
|
+
});
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
catch (error) {
|
|
183
|
+
throw new Error(`Download failed for document ${documentId}: ${error.message}`);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Get files in a specific folder
|
|
188
|
+
*/
|
|
189
|
+
async getFilesInFolder(folderId) {
|
|
190
|
+
try {
|
|
191
|
+
// Use the folder contents endpoint
|
|
192
|
+
const response = await axios_1.default.get(`${this.config.apiUrl}/folders/${folderId}/contents`, {
|
|
193
|
+
headers: {
|
|
194
|
+
'Authorization': `Bearer ${this.config.token}`,
|
|
195
|
+
'Accept': 'application/json'
|
|
196
|
+
}
|
|
197
|
+
});
|
|
198
|
+
// Filter to only return files (not subfolders)
|
|
199
|
+
const contents = response.data.data || response.data;
|
|
200
|
+
return contents.filter((item) => item.type === 'file' || !item.hasOwnProperty('type'));
|
|
201
|
+
}
|
|
202
|
+
catch (error) {
|
|
203
|
+
console.warn(chalk_1.default.yellow(`Warning: Could not get contents of folder ${folderId}: ${error.message}`));
|
|
204
|
+
return [];
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Build full folder path from folder hierarchy
|
|
209
|
+
*/
|
|
210
|
+
buildFolderPath(folder, folderMap) {
|
|
211
|
+
const pathParts = [];
|
|
212
|
+
let currentFolder = folder;
|
|
213
|
+
// Walk up the parent hierarchy
|
|
214
|
+
while (currentFolder) {
|
|
215
|
+
pathParts.unshift(currentFolder.name);
|
|
216
|
+
if (currentFolder.parent_id) {
|
|
217
|
+
currentFolder = folderMap.get(currentFolder.parent_id);
|
|
218
|
+
}
|
|
219
|
+
else {
|
|
220
|
+
currentFolder = undefined;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
return pathParts.join('/');
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Generate default target path for export
|
|
227
|
+
*/
|
|
228
|
+
generateDefaultTargetPath(workspaceName, folderPath) {
|
|
229
|
+
// Clean up path components
|
|
230
|
+
const cleanWorkspace = this.sanitizePath(workspaceName);
|
|
231
|
+
const cleanFolder = this.sanitizePath(folderPath);
|
|
232
|
+
return cleanFolder ? `${cleanWorkspace}/${cleanFolder}` : cleanWorkspace;
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Sanitize path for file system compatibility
|
|
236
|
+
*/
|
|
237
|
+
sanitizePath(pathComponent) {
|
|
238
|
+
return pathComponent
|
|
239
|
+
.replace(/[<>:"/\\|?*]/g, '_') // Replace invalid filename characters
|
|
240
|
+
.replace(/\s+/g, ' ') // Normalize whitespace
|
|
241
|
+
.trim();
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Search documents across HubDoc
|
|
245
|
+
*/
|
|
246
|
+
async searchDocuments(query, options) {
|
|
247
|
+
try {
|
|
248
|
+
console.log(chalk_1.default.blue(`🔍 Searching for: "${query}"`));
|
|
249
|
+
const searchResults = await this.apiService.search(query, 'file');
|
|
250
|
+
const files = searchResults.data || searchResults;
|
|
251
|
+
const mappings = [];
|
|
252
|
+
for (const file of files) {
|
|
253
|
+
// Apply filters if specified
|
|
254
|
+
if (options?.workspace && file.workspace_name !== options.workspace) {
|
|
255
|
+
continue;
|
|
256
|
+
}
|
|
257
|
+
if (options?.fileType && !file.name.toLowerCase().includes(options.fileType.toLowerCase())) {
|
|
258
|
+
continue;
|
|
259
|
+
}
|
|
260
|
+
const projectLocation = {
|
|
261
|
+
projectName: file.workspace_name || 'Unknown',
|
|
262
|
+
folderPath: file.folder_path || 'Documents',
|
|
263
|
+
fullPath: `${file.workspace_name || 'Unknown'}/${file.folder_path || 'Documents'}`
|
|
264
|
+
};
|
|
265
|
+
mappings.push({
|
|
266
|
+
documentId: file.id,
|
|
267
|
+
documentName: file.name,
|
|
268
|
+
projects: [projectLocation],
|
|
269
|
+
downloadUrl: file.download_url || `/files/${file.id}/download`,
|
|
270
|
+
targetPath: this.generateDefaultTargetPath(projectLocation.projectName, projectLocation.folderPath),
|
|
271
|
+
metadata: file.metadata
|
|
272
|
+
});
|
|
273
|
+
// Respect limit if specified
|
|
274
|
+
if (options?.limit && mappings.length >= options.limit) {
|
|
275
|
+
break;
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
console.log(chalk_1.default.green(`✅ Found ${mappings.length} matching documents`));
|
|
279
|
+
return mappings;
|
|
280
|
+
}
|
|
281
|
+
catch (error) {
|
|
282
|
+
console.error(chalk_1.default.red(`❌ Search failed: ${error.message}`));
|
|
283
|
+
return [];
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Get export statistics
|
|
288
|
+
*/
|
|
289
|
+
async getExportStats() {
|
|
290
|
+
try {
|
|
291
|
+
const workspaces = await this.apiService.getWorkspaces();
|
|
292
|
+
let totalFolders = 0;
|
|
293
|
+
let totalFiles = 0;
|
|
294
|
+
let totalSize = 0;
|
|
295
|
+
for (const workspace of workspaces) {
|
|
296
|
+
const folders = await this.apiService.getFolders(workspace.id);
|
|
297
|
+
totalFolders += folders.length;
|
|
298
|
+
for (const folder of folders) {
|
|
299
|
+
const files = await this.getFilesInFolder(folder.id);
|
|
300
|
+
totalFiles += files.length;
|
|
301
|
+
totalSize += files.reduce((sum, file) => sum + (file.size || 0), 0);
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
return {
|
|
305
|
+
totalWorkspaces: workspaces.length,
|
|
306
|
+
totalFolders,
|
|
307
|
+
totalFiles,
|
|
308
|
+
totalSize
|
|
309
|
+
};
|
|
310
|
+
}
|
|
311
|
+
catch (error) {
|
|
312
|
+
console.error(chalk_1.default.red(`❌ Failed to get export stats: ${error.message}`));
|
|
313
|
+
return {
|
|
314
|
+
totalWorkspaces: 0,
|
|
315
|
+
totalFolders: 0,
|
|
316
|
+
totalFiles: 0,
|
|
317
|
+
totalSize: 0
|
|
318
|
+
};
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* Sleep utility for rate limiting
|
|
323
|
+
*/
|
|
324
|
+
sleep(ms) {
|
|
325
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
exports.HubDocExportServiceV2 = HubDocExportServiceV2;
|
|
329
|
+
//# sourceMappingURL=hubdoc-export-v2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hubdoc-export-v2.js","sourceRoot":"","sources":["../../src/services/hubdoc-export-v2.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { ImportResult } from './hubdoc-client';
|
|
2
|
+
import { DocumentMapping, HubDocConfig } from '../types';
|
|
3
|
+
export interface ImportOptions {
|
|
4
|
+
mappingFile: string;
|
|
5
|
+
baseDir?: string;
|
|
6
|
+
concurrency?: number;
|
|
7
|
+
dryRun?: boolean;
|
|
8
|
+
validateOnly?: boolean;
|
|
9
|
+
batchSize?: number;
|
|
10
|
+
domain?: string;
|
|
11
|
+
interactive?: boolean;
|
|
12
|
+
}
|
|
13
|
+
export interface ValidationResult {
|
|
14
|
+
valid: boolean;
|
|
15
|
+
errors: string[];
|
|
16
|
+
warnings: string[];
|
|
17
|
+
mappingCount: number;
|
|
18
|
+
}
|
|
19
|
+
export interface ImportSummary {
|
|
20
|
+
total: number;
|
|
21
|
+
successful: number;
|
|
22
|
+
failed: number;
|
|
23
|
+
skipped: number;
|
|
24
|
+
results: ImportResult[];
|
|
25
|
+
duration: number;
|
|
26
|
+
mappingFile?: string;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Service for importing documents to HubDoc using CSV mapping files
|
|
30
|
+
*/
|
|
31
|
+
export declare class HubDocImportService {
|
|
32
|
+
private client;
|
|
33
|
+
private config;
|
|
34
|
+
constructor(config: HubDocConfig);
|
|
35
|
+
/**
|
|
36
|
+
* Test connection to HubDoc API
|
|
37
|
+
*/
|
|
38
|
+
testConnection(): Promise<boolean>;
|
|
39
|
+
/**
|
|
40
|
+
* Parse CSV mapping file into DocumentMapping objects
|
|
41
|
+
*/
|
|
42
|
+
parseMappingFile(filePath: string, baseDir?: string): Promise<DocumentMapping[]>;
|
|
43
|
+
/**
|
|
44
|
+
* Parse CSV row into DocumentMapping object
|
|
45
|
+
*/
|
|
46
|
+
private parseRowToMapping;
|
|
47
|
+
/**
|
|
48
|
+
* Validate mapping file and mappings
|
|
49
|
+
*/
|
|
50
|
+
validateMappings(mappings: DocumentMapping[]): Promise<ValidationResult>;
|
|
51
|
+
/**
|
|
52
|
+
* Import documents using mappings
|
|
53
|
+
*/
|
|
54
|
+
importDocuments(mappings: DocumentMapping[], options?: Partial<ImportOptions>): Promise<ImportSummary>;
|
|
55
|
+
/**
|
|
56
|
+
* Bulk import with CSV file
|
|
57
|
+
*/
|
|
58
|
+
bulkImportFromCsv(options: ImportOptions): Promise<ImportSummary>;
|
|
59
|
+
/**
|
|
60
|
+
* Print import summary
|
|
61
|
+
*/
|
|
62
|
+
private printImportSummary;
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=hubdoc-import-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hubdoc-import-service.d.ts","sourceRoot":"","sources":["../../src/services/hubdoc-import-service.ts"],"names":[],"mappings":"AAGA,OAAO,EAAgB,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAIzD,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,MAAM,CAAe;gBAEjB,MAAM,EAAE,YAAY;IAKhC;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IAIxC;;OAEG;IACG,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAqCtF;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAuFzB;;OAEG;IACG,gBAAgB,CAAC,QAAQ,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA4E9E;;OAEG;IACG,eAAe,CAAC,QAAQ,EAAE,eAAe,EAAE,EAAE,OAAO,GAAE,OAAO,CAAC,aAAa,CAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IA+FhH;;OAEG;IACG,iBAAiB,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;IAiDvE;;OAEG;IACH,OAAO,CAAC,kBAAkB;CAmC3B"}
|