@sinoia/hubdoc-tools 1.3.4 → 1.3.6

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 (43) hide show
  1. package/dist/plugins/alfresco/index.d.ts +26 -0
  2. package/dist/plugins/alfresco/index.d.ts.map +1 -0
  3. package/dist/plugins/alfresco/index.js +405 -0
  4. package/dist/plugins/alfresco/index.js.map +1 -0
  5. package/dist/plugins/aws-s3/index.d.ts +23 -0
  6. package/dist/plugins/aws-s3/index.d.ts.map +1 -0
  7. package/dist/plugins/aws-s3/index.js +383 -0
  8. package/dist/plugins/aws-s3/index.js.map +1 -0
  9. package/dist/plugins/azure-blob/index.d.ts +23 -0
  10. package/dist/plugins/azure-blob/index.d.ts.map +1 -0
  11. package/dist/plugins/azure-blob/index.js +340 -0
  12. package/dist/plugins/azure-blob/index.js.map +1 -0
  13. package/dist/plugins/box/index.d.ts +26 -0
  14. package/dist/plugins/box/index.d.ts.map +1 -0
  15. package/dist/plugins/box/index.js +387 -0
  16. package/dist/plugins/box/index.js.map +1 -0
  17. package/dist/plugins/dropbox/index.d.ts +27 -0
  18. package/dist/plugins/dropbox/index.d.ts.map +1 -0
  19. package/dist/plugins/dropbox/index.js +375 -0
  20. package/dist/plugins/dropbox/index.js.map +1 -0
  21. package/dist/plugins/googledrive/index.d.ts +27 -0
  22. package/dist/plugins/googledrive/index.d.ts.map +1 -0
  23. package/dist/plugins/googledrive/index.js +383 -0
  24. package/dist/plugins/googledrive/index.js.map +1 -0
  25. package/dist/plugins/nuxeo/index.d.ts +24 -0
  26. package/dist/plugins/nuxeo/index.d.ts.map +1 -0
  27. package/dist/plugins/nuxeo/index.js +405 -0
  28. package/dist/plugins/nuxeo/index.js.map +1 -0
  29. package/dist/plugins/onedrive/index.d.ts +25 -0
  30. package/dist/plugins/onedrive/index.d.ts.map +1 -0
  31. package/dist/plugins/onedrive/index.js +362 -0
  32. package/dist/plugins/onedrive/index.js.map +1 -0
  33. package/dist/plugins/opentext/index.d.ts +26 -0
  34. package/dist/plugins/opentext/index.d.ts.map +1 -0
  35. package/dist/plugins/opentext/index.js +440 -0
  36. package/dist/plugins/opentext/index.js.map +1 -0
  37. package/dist/plugins/sharepoint/index.d.ts +27 -0
  38. package/dist/plugins/sharepoint/index.d.ts.map +1 -0
  39. package/dist/plugins/sharepoint/index.js +397 -0
  40. package/dist/plugins/sharepoint/index.js.map +1 -0
  41. package/package.json +7 -2
  42. package/plugins/aws-s3/index.ts +2 -2
  43. package/plugins/sharepoint/index.ts +1 -1
@@ -0,0 +1,440 @@
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
+ const axios_1 = __importDefault(require("axios"));
7
+ const fs_extra_1 = __importDefault(require("fs-extra"));
8
+ const path_1 = __importDefault(require("path"));
9
+ class OpenTextPlugin {
10
+ constructor() {
11
+ this.name = 'opentext';
12
+ this.version = '1.0.0';
13
+ this.description = 'OpenText Content Server document source';
14
+ this.supportedOperations = ['import', 'export', 'both'];
15
+ }
16
+ async testConnection(config) {
17
+ try {
18
+ const client = await this.createApiClient(config);
19
+ const response = await client.get('/nodes/2000'); // Test access to Enterprise workspace
20
+ return response.status === 200;
21
+ }
22
+ catch (error) {
23
+ console.error(`OpenText connection test failed: ${error.message}`);
24
+ return false;
25
+ }
26
+ }
27
+ async scan(config, options) {
28
+ this.config = config;
29
+ this.apiClient = await this.createApiClient(this.config);
30
+ const sources = [];
31
+ const errors = [];
32
+ let totalSize = 0;
33
+ try {
34
+ const limit = this.config.limit || options?.limit;
35
+ console.log(`🔍 Scanning OpenText Content Server${limit ? ` (limit: ${limit})` : ''}...`);
36
+ const startingFolderId = this.config.startingFolderId || 2000; // Enterprise workspace
37
+ const nodes = await this.scanNode(startingFolderId);
38
+ let processedCount = 0;
39
+ for (const node of nodes) {
40
+ if (!node.container && node.type === 144) { // Type 144 is Document
41
+ const source = {
42
+ id: node.id.toString(),
43
+ name: node.name,
44
+ path: await this.getNodePath(node.id),
45
+ size: node.size || 0,
46
+ mimeType: node.mime_type || this.getMimeType(node.name),
47
+ lastModified: new Date(node.modify_date),
48
+ metadata: {
49
+ opentextId: node.id,
50
+ nodeType: node.type,
51
+ typeName: node.type_name,
52
+ createdAt: node.create_date,
53
+ createdBy: node.created_by_name,
54
+ modifiedBy: node.modified_by_name,
55
+ parentId: node.parent_id,
56
+ versionNumber: node.version_number,
57
+ description: node.description,
58
+ reserved: node.reserved,
59
+ reservedBy: node.reserved_by,
60
+ reservedDate: node.reserved_date
61
+ }
62
+ };
63
+ // Apply filters
64
+ if (this.shouldIncludeSource(source, options)) {
65
+ sources.push(source);
66
+ totalSize += source.size;
67
+ processedCount++;
68
+ // Check limit
69
+ if (limit && processedCount >= limit) {
70
+ console.log(`📏 Reached limit of ${limit} files`);
71
+ break;
72
+ }
73
+ }
74
+ }
75
+ }
76
+ return {
77
+ sources,
78
+ totalCount: sources.length,
79
+ totalSize,
80
+ errors
81
+ };
82
+ }
83
+ catch (error) {
84
+ return {
85
+ sources: [],
86
+ totalCount: 0,
87
+ totalSize: 0,
88
+ errors: [`OpenText scan failed: ${error.message}`]
89
+ };
90
+ }
91
+ }
92
+ async scanNode(nodeId, parentPath = '') {
93
+ if (!this.apiClient)
94
+ throw new Error('API client not initialized');
95
+ const allNodes = [];
96
+ let page = 1;
97
+ const limit = 100;
98
+ try {
99
+ while (true) {
100
+ const response = await this.apiClient.get(`/nodes/${nodeId}/nodes`, {
101
+ params: {
102
+ limit: limit,
103
+ page: page,
104
+ expand: 'properties{original_id,parent_id,name,type,type_name,container,size,create_date,modify_date,created_by,created_by_name,modified_by,modified_by_name,mime_type,version_number,description,reserved,reserved_by,reserved_date}'
105
+ }
106
+ });
107
+ const nodes = response.data.results || [];
108
+ if (nodes.length === 0) {
109
+ break;
110
+ }
111
+ for (const node of nodes) {
112
+ const nodePath = parentPath ? `${parentPath}/${node.name}` : node.name;
113
+ node.fullPath = nodePath;
114
+ if (!node.container) {
115
+ // It's a document
116
+ allNodes.push(node);
117
+ }
118
+ else {
119
+ // It's a folder, recursively scan it
120
+ const subNodes = await this.scanNode(node.id, nodePath);
121
+ allNodes.push(...subNodes);
122
+ }
123
+ }
124
+ // Check if there are more pages
125
+ if (nodes.length < limit) {
126
+ break;
127
+ }
128
+ page++;
129
+ }
130
+ return allNodes;
131
+ }
132
+ catch (error) {
133
+ if (error.response?.status === 404) {
134
+ console.warn(`Warning: Node not found: ${nodeId}`);
135
+ return [];
136
+ }
137
+ throw error;
138
+ }
139
+ }
140
+ async import(config, sources, targetDir, options) {
141
+ this.config = config;
142
+ this.apiClient = await this.createApiClient(this.config);
143
+ const results = [];
144
+ const batchSize = options?.batchSize || 5;
145
+ // Process in batches to respect API limits
146
+ for (let i = 0; i < sources.length; i += batchSize) {
147
+ const batch = sources.slice(i, i + batchSize);
148
+ for (const source of batch) {
149
+ const result = await this.importSingle(source, targetDir);
150
+ results.push(result);
151
+ // Small delay to respect rate limits
152
+ await this.sleep(300);
153
+ }
154
+ }
155
+ return results;
156
+ }
157
+ async importSingle(source, targetDir) {
158
+ try {
159
+ if (!this.apiClient)
160
+ throw new Error('API client not initialized');
161
+ const targetPath = path_1.default.join(targetDir, source.path);
162
+ const targetDirectory = path_1.default.dirname(targetPath);
163
+ await fs_extra_1.default.ensureDir(targetDirectory);
164
+ // Download file content from OpenText
165
+ const response = await this.apiClient.get(`/nodes/${source.id}/content`, {
166
+ responseType: 'stream'
167
+ });
168
+ const writer = fs_extra_1.default.createWriteStream(targetPath);
169
+ response.data.pipe(writer);
170
+ return new Promise((resolve) => {
171
+ writer.on('finish', () => {
172
+ resolve({
173
+ success: true,
174
+ source,
175
+ localPath: targetPath,
176
+ bytesTransferred: source.size
177
+ });
178
+ });
179
+ writer.on('error', (error) => {
180
+ resolve({
181
+ success: false,
182
+ source,
183
+ error: error.message
184
+ });
185
+ });
186
+ });
187
+ }
188
+ catch (error) {
189
+ return {
190
+ success: false,
191
+ source,
192
+ error: error.message
193
+ };
194
+ }
195
+ }
196
+ async export(config, localSources, options) {
197
+ this.config = config;
198
+ this.apiClient = await this.createApiClient(this.config);
199
+ const results = [];
200
+ const rootFolderId = this.config.startingFolderId || 2000;
201
+ for (const source of localSources) {
202
+ try {
203
+ // Determine target folder
204
+ let targetFolderId = rootFolderId;
205
+ if (options?.preserveStructure && source.path.includes('/')) {
206
+ const folderPath = path_1.default.dirname(source.path);
207
+ targetFolderId = await this.createFolderStructure(folderPath, rootFolderId);
208
+ }
209
+ // Read local file
210
+ const fileContent = await fs_extra_1.default.readFile(source.id);
211
+ // Normalize filename to NFC to handle accented characters consistently across platforms
212
+ const fileName = (options?.preserveStructure ? path_1.default.basename(source.path) : source.name).normalize('NFC');
213
+ // Upload file to OpenText using multipart form data
214
+ const FormData = require('form-data');
215
+ const form = new FormData();
216
+ form.append('type', '144'); // Document type
217
+ form.append('name', fileName);
218
+ form.append('description', `Uploaded via hubdoc-tools`);
219
+ form.append('file', fileContent, fileName);
220
+ const response = await this.apiClient.post(`/nodes/${targetFolderId}/nodes`, form, {
221
+ headers: {
222
+ ...form.getHeaders()
223
+ }
224
+ });
225
+ const targetPath = options?.preserveStructure ? source.path : source.name;
226
+ results.push({
227
+ success: true,
228
+ targetPath,
229
+ source,
230
+ bytesTransferred: source.size
231
+ });
232
+ }
233
+ catch (error) {
234
+ results.push({
235
+ success: false,
236
+ targetPath: options?.targetPath || '',
237
+ source,
238
+ error: error.message
239
+ });
240
+ }
241
+ }
242
+ return results;
243
+ }
244
+ async createFolderStructure(folderPath, parentId) {
245
+ if (!this.apiClient)
246
+ throw new Error('API client not initialized');
247
+ const parts = folderPath.split('/').filter(part => part.length > 0);
248
+ let currentParentId = parentId;
249
+ for (const folderName of parts) {
250
+ try {
251
+ // Check if folder already exists
252
+ const response = await this.apiClient.get(`/nodes/${currentParentId}/nodes`, {
253
+ params: {
254
+ where_name: folderName,
255
+ where_type: 0, // Folder type
256
+ limit: 1
257
+ }
258
+ });
259
+ const existingFolder = response.data.results?.[0];
260
+ if (existingFolder) {
261
+ currentParentId = existingFolder.id;
262
+ }
263
+ else {
264
+ // Create new folder
265
+ const createResponse = await this.apiClient.post(`/nodes/${currentParentId}/nodes`, {
266
+ type: 0, // Folder type
267
+ name: folderName,
268
+ description: `Created by hubdoc-tools`
269
+ });
270
+ currentParentId = createResponse.data.id;
271
+ }
272
+ }
273
+ catch (error) {
274
+ throw new Error(`Failed to create folder structure: ${error.message}`);
275
+ }
276
+ }
277
+ return currentParentId;
278
+ }
279
+ async getNodePath(nodeId) {
280
+ if (!this.apiClient)
281
+ throw new Error('API client not initialized');
282
+ try {
283
+ // Get the node's ancestors to build the full path
284
+ const response = await this.apiClient.get(`/nodes/${nodeId}/ancestors`);
285
+ const ancestors = response.data.ancestors || [];
286
+ // Filter out the Enterprise workspace and build path
287
+ const pathParts = ancestors
288
+ .filter((ancestor) => ancestor.id !== 2000) // Skip Enterprise workspace
289
+ .map((ancestor) => ancestor.name);
290
+ // Get the node itself to add its name
291
+ const nodeResponse = await this.apiClient.get(`/nodes/${nodeId}`);
292
+ const nodeName = nodeResponse.data.results.name;
293
+ pathParts.push(nodeName);
294
+ return pathParts.join('/');
295
+ }
296
+ catch (error) {
297
+ // Fallback to just the node ID if path resolution fails
298
+ return `node_${nodeId}`;
299
+ }
300
+ }
301
+ getConfigSchema() {
302
+ return {
303
+ type: 'object',
304
+ properties: {
305
+ baseUrl: {
306
+ type: 'string',
307
+ description: 'OpenText Content Server base URL (e.g., http://localhost/otcs/cs.exe/api/v1)',
308
+ required: true
309
+ },
310
+ username: {
311
+ type: 'string',
312
+ description: 'OpenText username',
313
+ required: false
314
+ },
315
+ password: {
316
+ type: 'string',
317
+ description: 'OpenText password',
318
+ required: false
319
+ },
320
+ ticket: {
321
+ type: 'string',
322
+ description: 'OTDS authentication ticket (alternative to username/password)',
323
+ required: false
324
+ },
325
+ startingFolderId: {
326
+ type: 'number',
327
+ description: 'Starting folder ID (default: 2000 for Enterprise workspace)',
328
+ default: 2000
329
+ },
330
+ limit: {
331
+ type: 'number',
332
+ description: 'Maximum number of documents to scan (useful for testing)',
333
+ required: false
334
+ }
335
+ },
336
+ required: ['baseUrl'],
337
+ oneOf: [
338
+ { required: ['baseUrl', 'username', 'password'] },
339
+ { required: ['baseUrl', 'ticket'] }
340
+ ]
341
+ };
342
+ }
343
+ async initialize(config) {
344
+ this.config = config;
345
+ if (!this.config.baseUrl) {
346
+ throw new Error('OpenText base URL is required');
347
+ }
348
+ if (!this.config.username && !this.config.ticket) {
349
+ throw new Error('Either username/password or OTDS ticket is required');
350
+ }
351
+ if (this.config.username && !this.config.password) {
352
+ throw new Error('Password is required when using username authentication');
353
+ }
354
+ this.apiClient = await this.createApiClient(this.config);
355
+ }
356
+ async destroy() {
357
+ // Log out if we have an auth token
358
+ if (this.authToken && this.apiClient) {
359
+ try {
360
+ await this.apiClient.post('/auth');
361
+ }
362
+ catch (error) {
363
+ // Ignore logout errors
364
+ }
365
+ }
366
+ this.config = undefined;
367
+ this.apiClient = undefined;
368
+ this.authToken = undefined;
369
+ }
370
+ async createApiClient(config) {
371
+ const client = axios_1.default.create({
372
+ baseURL: config.baseUrl,
373
+ headers: {
374
+ 'Content-Type': 'application/json'
375
+ },
376
+ timeout: 30000
377
+ });
378
+ // Authenticate and get token
379
+ if (config.ticket) {
380
+ // Use OTDS ticket
381
+ client.defaults.headers.common['OTDSTicket'] = config.ticket;
382
+ }
383
+ else if (config.username && config.password) {
384
+ // Login with username/password
385
+ const authResponse = await client.post('/auth', {
386
+ username: config.username,
387
+ password: config.password
388
+ });
389
+ this.authToken = authResponse.data.ticket;
390
+ client.defaults.headers.common['OTCSTicket'] = this.authToken;
391
+ }
392
+ return client;
393
+ }
394
+ getMimeType(fileName) {
395
+ const ext = path_1.default.extname(fileName).toLowerCase();
396
+ const mimeTypes = {
397
+ '.pdf': 'application/pdf',
398
+ '.doc': 'application/msword',
399
+ '.docx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
400
+ '.xls': 'application/vnd.ms-excel',
401
+ '.xlsx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
402
+ '.ppt': 'application/vnd.ms-powerpoint',
403
+ '.pptx': 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
404
+ '.txt': 'text/plain',
405
+ '.csv': 'text/csv',
406
+ '.json': 'application/json',
407
+ '.xml': 'application/xml',
408
+ '.jpg': 'image/jpeg',
409
+ '.jpeg': 'image/jpeg',
410
+ '.png': 'image/png',
411
+ '.gif': 'image/gif',
412
+ '.zip': 'application/zip'
413
+ };
414
+ return mimeTypes[ext] || 'application/octet-stream';
415
+ }
416
+ shouldIncludeSource(source, options) {
417
+ // Apply size filter
418
+ if (options?.filters?.maxSize && source.size > options.filters.maxSize) {
419
+ return false;
420
+ }
421
+ // Apply date range filter
422
+ if (options?.filters?.dateRange) {
423
+ const { from, to } = options.filters.dateRange;
424
+ if (from && source.lastModified < from)
425
+ return false;
426
+ if (to && source.lastModified > to)
427
+ return false;
428
+ }
429
+ // Apply MIME type filter
430
+ if (options?.filters?.mimeTypes && !options.filters.mimeTypes.includes(source.mimeType)) {
431
+ return false;
432
+ }
433
+ return true;
434
+ }
435
+ sleep(ms) {
436
+ return new Promise(resolve => setTimeout(resolve, ms));
437
+ }
438
+ }
439
+ exports.default = OpenTextPlugin;
440
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../plugins/opentext/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { DocumentSourcePlugin, DocumentSource, PluginConfig, ScanResult, PluginImportOptions, PluginExportOptions, ImportResult, ExportResult } from '../../src/types/plugins';
2
+ export default class SharePointPlugin implements DocumentSourcePlugin {
3
+ readonly name = "sharepoint";
4
+ readonly version = "1.0.0";
5
+ readonly description = "SharePoint Online document source";
6
+ readonly supportedOperations: readonly ["import", "export", "both"];
7
+ private config?;
8
+ private apiClient?;
9
+ private readonly baseUrl;
10
+ testConnection(config: PluginConfig): Promise<boolean>;
11
+ scan(config: PluginConfig, options?: PluginImportOptions): Promise<ScanResult>;
12
+ private scanDriveFolder;
13
+ import(config: PluginConfig, sources: DocumentSource[], targetDir: string, options?: PluginImportOptions): Promise<ImportResult[]>;
14
+ private importSingle;
15
+ export?(config: PluginConfig, localSources: DocumentSource[], options?: PluginExportOptions): Promise<ExportResult[]>;
16
+ private getSiteInfo;
17
+ private getDefaultDriveId;
18
+ private createFolderStructure;
19
+ getConfigSchema(): Record<string, any>;
20
+ initialize(config: PluginConfig): Promise<void>;
21
+ destroy(): Promise<void>;
22
+ private createApiClient;
23
+ private getItemPath;
24
+ private shouldIncludeSource;
25
+ private sleep;
26
+ }
27
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../plugins/sharepoint/index.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,YAAY,EACZ,UAAU,EACV,mBAAmB,EACnB,mBAAmB,EACnB,YAAY,EACZ,YAAY,EACb,MAAM,yBAAyB,CAAC;AA8CjC,MAAM,CAAC,OAAO,OAAO,gBAAiB,YAAW,oBAAoB;IACnE,QAAQ,CAAC,IAAI,gBAAgB;IAC7B,QAAQ,CAAC,OAAO,WAAW;IAC3B,QAAQ,CAAC,WAAW,uCAAuC;IAC3D,QAAQ,CAAC,mBAAmB,wCAAyC;IAErE,OAAO,CAAC,MAAM,CAAC,CAAmB;IAClC,OAAO,CAAC,SAAS,CAAC,CAAgB;IAClC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsC;IAExD,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC;IAWtD,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,UAAU,CAAC;YA2EtE,eAAe;IA6CvB,MAAM,CACV,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,cAAc,EAAE,EACzB,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,YAAY,EAAE,CAAC;YAuBZ,YAAY;IAkDpB,MAAM,CAAC,CACX,MAAM,EAAE,YAAY,EACpB,YAAY,EAAE,cAAc,EAAE,EAC9B,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,YAAY,EAAE,CAAC;YAqEZ,WAAW;YAUX,iBAAiB;YAOjB,qBAAqB;IAqCnC,eAAe,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAkChC,UAAU,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAU/C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAK9B,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,WAAW;IAoBnB,OAAO,CAAC,mBAAmB;IAqB3B,OAAO,CAAC,KAAK;CAGd"}