@sinoia/hubdoc-tools 1.3.3 → 1.3.5

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 (83) hide show
  1. package/dist/index.d.ts +1 -1
  2. package/dist/plugins/alfresco/index.d.ts +26 -0
  3. package/dist/plugins/alfresco/index.d.ts.map +1 -0
  4. package/dist/plugins/alfresco/index.js +405 -0
  5. package/dist/plugins/alfresco/index.js.map +1 -0
  6. package/dist/plugins/alfresco/plugin.json +12 -0
  7. package/dist/plugins/aws-s3/index.d.ts +23 -0
  8. package/dist/plugins/aws-s3/index.d.ts.map +1 -0
  9. package/dist/plugins/aws-s3/index.js +383 -0
  10. package/dist/plugins/aws-s3/index.js.map +1 -0
  11. package/dist/plugins/aws-s3/plugin.json +12 -0
  12. package/dist/plugins/azure-blob/index.d.ts +23 -0
  13. package/dist/plugins/azure-blob/index.d.ts.map +1 -0
  14. package/dist/plugins/azure-blob/index.js +340 -0
  15. package/dist/plugins/azure-blob/index.js.map +1 -0
  16. package/dist/plugins/azure-blob/plugin.json +12 -0
  17. package/dist/plugins/box/index.d.ts +26 -0
  18. package/dist/plugins/box/index.d.ts.map +1 -0
  19. package/dist/plugins/box/index.js +387 -0
  20. package/dist/plugins/box/index.js.map +1 -0
  21. package/dist/plugins/box/plugin.json +12 -0
  22. package/dist/plugins/core/index.d.ts +25 -0
  23. package/dist/plugins/core/index.d.ts.map +1 -0
  24. package/dist/plugins/core/index.js +400 -0
  25. package/dist/plugins/core/index.js.map +1 -0
  26. package/dist/plugins/core/plugin.json +26 -0
  27. package/dist/plugins/dropbox/index.d.ts +27 -0
  28. package/dist/plugins/dropbox/index.d.ts.map +1 -0
  29. package/dist/plugins/dropbox/index.js +375 -0
  30. package/dist/plugins/dropbox/index.js.map +1 -0
  31. package/dist/plugins/dropbox/plugin.json +12 -0
  32. package/dist/plugins/filesystem/index.d.ts +22 -0
  33. package/dist/plugins/filesystem/index.d.ts.map +1 -0
  34. package/dist/plugins/filesystem/index.js +306 -0
  35. package/dist/plugins/filesystem/index.js.map +1 -0
  36. package/dist/plugins/filesystem/plugin.json +12 -0
  37. package/dist/plugins/googledrive/index.d.ts +27 -0
  38. package/dist/plugins/googledrive/index.d.ts.map +1 -0
  39. package/dist/plugins/googledrive/index.js +383 -0
  40. package/dist/plugins/googledrive/index.js.map +1 -0
  41. package/dist/plugins/googledrive/plugin.json +12 -0
  42. package/dist/plugins/nuxeo/index.d.ts +24 -0
  43. package/dist/plugins/nuxeo/index.d.ts.map +1 -0
  44. package/dist/plugins/nuxeo/index.js +405 -0
  45. package/dist/plugins/nuxeo/index.js.map +1 -0
  46. package/dist/plugins/nuxeo/plugin.json +12 -0
  47. package/dist/plugins/onedrive/index.d.ts +25 -0
  48. package/dist/plugins/onedrive/index.d.ts.map +1 -0
  49. package/dist/plugins/onedrive/index.js +362 -0
  50. package/dist/plugins/onedrive/index.js.map +1 -0
  51. package/dist/plugins/onedrive/plugin.json +12 -0
  52. package/dist/plugins/opentext/index.d.ts +26 -0
  53. package/dist/plugins/opentext/index.d.ts.map +1 -0
  54. package/dist/plugins/opentext/index.js +440 -0
  55. package/dist/plugins/opentext/index.js.map +1 -0
  56. package/dist/plugins/opentext/plugin.json +12 -0
  57. package/dist/plugins/sharepoint/index.d.ts +27 -0
  58. package/dist/plugins/sharepoint/index.d.ts.map +1 -0
  59. package/dist/plugins/sharepoint/index.js +397 -0
  60. package/dist/plugins/sharepoint/index.js.map +1 -0
  61. package/dist/plugins/sharepoint/plugin.json +12 -0
  62. package/dist/services/hubdoc-api.d.ts +1 -1
  63. package/dist/services/hubdoc-api.js +1 -1
  64. package/dist/services/oauth-token-service.d.ts +1 -1
  65. package/dist/services/oauth-token-service.js +2 -2
  66. package/dist/services/permission-manager.d.ts +1 -1
  67. package/dist/services/permission-manager.js +1 -1
  68. package/dist/src/types/plugins.d.ts +111 -0
  69. package/dist/src/types/plugins.d.ts.map +1 -0
  70. package/dist/src/types/plugins.js +3 -0
  71. package/dist/src/types/plugins.js.map +1 -0
  72. package/dist/src/utils/concurrent-processor.d.ts +63 -0
  73. package/dist/src/utils/concurrent-processor.d.ts.map +1 -0
  74. package/dist/src/utils/concurrent-processor.js +240 -0
  75. package/dist/src/utils/concurrent-processor.js.map +1 -0
  76. package/dist/src/utils/xml-metadata.d.ts +47 -0
  77. package/dist/src/utils/xml-metadata.d.ts.map +1 -0
  78. package/dist/src/utils/xml-metadata.js +200 -0
  79. package/dist/src/utils/xml-metadata.js.map +1 -0
  80. package/dist/types/index.d.ts +1 -1
  81. package/package.json +10 -2
  82. package/plugins/aws-s3/index.ts +2 -2
  83. package/plugins/sharepoint/index.ts +1 -1
@@ -0,0 +1,306 @@
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 fs_extra_1 = __importDefault(require("fs-extra"));
7
+ const path_1 = __importDefault(require("path"));
8
+ const glob_1 = require("glob");
9
+ const xml_metadata_1 = require("../../src/utils/xml-metadata");
10
+ class FileSystemPlugin {
11
+ constructor() {
12
+ this.name = 'filesystem';
13
+ this.version = '1.0.0';
14
+ this.description = 'Local filesystem document source';
15
+ this.supportedOperations = ['import', 'export', 'both'];
16
+ }
17
+ async testConnection(config) {
18
+ const fsConfig = config;
19
+ try {
20
+ const stats = await fs_extra_1.default.stat(fsConfig.basePath);
21
+ return stats.isDirectory();
22
+ }
23
+ catch {
24
+ return false;
25
+ }
26
+ }
27
+ async scan(config, options) {
28
+ const fsConfig = config;
29
+ const sources = [];
30
+ const errors = [];
31
+ try {
32
+ let pattern = '**/*';
33
+ if (options?.filters?.path) {
34
+ pattern = path_1.default.join(options.filters.path, '**/*');
35
+ }
36
+ const globOptions = {
37
+ cwd: fsConfig.basePath,
38
+ absolute: true,
39
+ dot: fsConfig.includeHidden || false,
40
+ followSymbolicLinks: fsConfig.followSymlinks || false
41
+ };
42
+ const files = await (0, glob_1.glob)(pattern, globOptions);
43
+ let totalSize = 0;
44
+ let processedCount = 0;
45
+ console.log(`📁 Found ${files.length} files${options?.limit ? ` (limit: ${options.limit})` : ''}`);
46
+ for (const filePath of files) {
47
+ // Check limit
48
+ if (options?.limit && processedCount >= options.limit) {
49
+ console.log(`📏 Reached limit of ${options.limit} files`);
50
+ break;
51
+ }
52
+ try {
53
+ const stats = await fs_extra_1.default.stat(filePath);
54
+ if (!stats.isFile())
55
+ continue;
56
+ // Apply filters
57
+ if (options?.filters?.maxSize && stats.size > options.filters.maxSize) {
58
+ continue;
59
+ }
60
+ if (options?.filters?.dateRange) {
61
+ const { from, to } = options.filters.dateRange;
62
+ if (from && stats.mtime < from)
63
+ continue;
64
+ if (to && stats.mtime > to)
65
+ continue;
66
+ }
67
+ const relativePath = path_1.default.relative(fsConfig.basePath, filePath);
68
+ const mimeType = this.getMimeType(filePath);
69
+ if (options?.filters?.mimeTypes && !options.filters.mimeTypes.includes(mimeType)) {
70
+ continue;
71
+ }
72
+ // Skip metadata files from being processed as documents
73
+ if (this.isMetadataFile(filePath)) {
74
+ continue;
75
+ }
76
+ // Build base metadata
77
+ const baseMetadata = {
78
+ fullPath: filePath,
79
+ directory: path_1.default.dirname(relativePath),
80
+ extension: path_1.default.extname(filePath)
81
+ };
82
+ // Try to find and parse XML metadata if enabled
83
+ let xmlMetadata = {};
84
+ if (fsConfig.useXmlMetadata !== false) { // Default to true unless explicitly disabled
85
+ try {
86
+ const metadataFile = xml_metadata_1.XmlMetadataParser.findMetadataFile(filePath);
87
+ if (metadataFile) {
88
+ const parsedXmlMetadata = await xml_metadata_1.XmlMetadataParser.parseMetadataFile(metadataFile);
89
+ xmlMetadata = xml_metadata_1.XmlMetadataParser.getHubDocMetadata(parsedXmlMetadata);
90
+ console.log(`📋 Found metadata for ${path_1.default.basename(filePath)}`);
91
+ }
92
+ }
93
+ catch (error) {
94
+ console.warn(`⚠️ Failed to parse metadata for ${filePath}: ${error}`);
95
+ }
96
+ }
97
+ sources.push({
98
+ id: filePath,
99
+ // Normalize filename to NFC to handle accented characters consistently across platforms
100
+ name: path_1.default.basename(filePath).normalize('NFC'),
101
+ path: relativePath,
102
+ size: stats.size,
103
+ mimeType,
104
+ lastModified: stats.mtime,
105
+ metadata: {
106
+ ...baseMetadata,
107
+ ...xmlMetadata
108
+ }
109
+ });
110
+ totalSize += stats.size;
111
+ processedCount++;
112
+ }
113
+ catch (error) {
114
+ errors.push(`Error reading ${filePath}: ${error.message}`);
115
+ }
116
+ }
117
+ return {
118
+ sources,
119
+ totalCount: sources.length,
120
+ totalSize,
121
+ errors
122
+ };
123
+ }
124
+ catch (error) {
125
+ return {
126
+ sources: [],
127
+ totalCount: 0,
128
+ totalSize: 0,
129
+ errors: [`Scan failed: ${error.message}`]
130
+ };
131
+ }
132
+ }
133
+ async import(config, sources, targetDir, options) {
134
+ const results = [];
135
+ const batchSize = options?.batchSize || 10;
136
+ // Process in batches
137
+ for (let i = 0; i < sources.length; i += batchSize) {
138
+ const batch = sources.slice(i, i + batchSize);
139
+ const batchPromises = batch.map(source => this.importSingle(source, targetDir));
140
+ const batchResults = await Promise.allSettled(batchPromises);
141
+ for (const result of batchResults) {
142
+ if (result.status === 'fulfilled') {
143
+ results.push(result.value);
144
+ }
145
+ else {
146
+ results.push({
147
+ success: false,
148
+ source: batch[results.length % batch.length],
149
+ error: result.reason?.message || 'Unknown error'
150
+ });
151
+ }
152
+ }
153
+ }
154
+ return results;
155
+ }
156
+ async importSingle(source, targetDir) {
157
+ try {
158
+ const targetPath = path_1.default.join(targetDir, source.path);
159
+ const targetDirectory = path_1.default.dirname(targetPath);
160
+ await fs_extra_1.default.ensureDir(targetDirectory);
161
+ await fs_extra_1.default.copy(source.id, targetPath);
162
+ const stats = await fs_extra_1.default.stat(targetPath);
163
+ return {
164
+ success: true,
165
+ source,
166
+ localPath: targetPath,
167
+ bytesTransferred: stats.size
168
+ };
169
+ }
170
+ catch (error) {
171
+ return {
172
+ success: false,
173
+ source,
174
+ error: error.message
175
+ };
176
+ }
177
+ }
178
+ async export(config, localSources, options) {
179
+ const fsConfig = config;
180
+ const results = [];
181
+ for (const source of localSources) {
182
+ try {
183
+ let targetPath;
184
+ if (options?.preserveStructure) {
185
+ targetPath = path_1.default.join(fsConfig.basePath, options.targetPath, source.path);
186
+ }
187
+ else {
188
+ targetPath = path_1.default.join(fsConfig.basePath, options?.targetPath || '', source.name);
189
+ }
190
+ const targetDir = path_1.default.dirname(targetPath);
191
+ await fs_extra_1.default.ensureDir(targetDir);
192
+ if (!options?.overwrite && await fs_extra_1.default.pathExists(targetPath)) {
193
+ results.push({
194
+ success: false,
195
+ targetPath,
196
+ source,
197
+ error: 'File already exists and overwrite is disabled'
198
+ });
199
+ continue;
200
+ }
201
+ await fs_extra_1.default.copy(source.id, targetPath);
202
+ const stats = await fs_extra_1.default.stat(targetPath);
203
+ results.push({
204
+ success: true,
205
+ targetPath,
206
+ source,
207
+ bytesTransferred: stats.size
208
+ });
209
+ }
210
+ catch (error) {
211
+ results.push({
212
+ success: false,
213
+ targetPath: '',
214
+ source,
215
+ error: error.message
216
+ });
217
+ }
218
+ }
219
+ return results;
220
+ }
221
+ getConfigSchema() {
222
+ return {
223
+ type: 'object',
224
+ properties: {
225
+ basePath: {
226
+ type: 'string',
227
+ description: 'Base directory path to scan',
228
+ required: true
229
+ },
230
+ includeHidden: {
231
+ type: 'boolean',
232
+ description: 'Include hidden files and directories',
233
+ default: false
234
+ },
235
+ followSymlinks: {
236
+ type: 'boolean',
237
+ description: 'Follow symbolic links',
238
+ default: false
239
+ },
240
+ useXmlMetadata: {
241
+ type: 'boolean',
242
+ description: 'Parse XML metadata files (e.g., *_metadata.xml)',
243
+ default: true
244
+ },
245
+ xmlMetadataPattern: {
246
+ type: 'string',
247
+ description: 'Pattern for metadata files',
248
+ default: '*_metadata.xml'
249
+ }
250
+ },
251
+ required: ['basePath']
252
+ };
253
+ }
254
+ async initialize(config) {
255
+ this.config = config;
256
+ // Validate base path exists
257
+ if (!await fs_extra_1.default.pathExists(this.config.basePath)) {
258
+ throw new Error(`Base path does not exist: ${this.config.basePath}`);
259
+ }
260
+ }
261
+ async destroy() {
262
+ this.config = undefined;
263
+ }
264
+ /**
265
+ * Check if a file is a metadata file and should be skipped from document processing
266
+ */
267
+ isMetadataFile(filePath) {
268
+ const fileName = path_1.default.basename(filePath).toLowerCase();
269
+ // Common metadata file patterns
270
+ const metadataPatterns = [
271
+ /_metadata\.xml$/,
272
+ /\.metadata\.xml$/,
273
+ /_meta\.xml$/,
274
+ /^metadata_.*\.xml$/
275
+ ];
276
+ return metadataPatterns.some(pattern => pattern.test(fileName));
277
+ }
278
+ getMimeType(filePath) {
279
+ const ext = path_1.default.extname(filePath).toLowerCase();
280
+ const mimeTypes = {
281
+ '.pdf': 'application/pdf',
282
+ '.doc': 'application/msword',
283
+ '.docx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
284
+ '.xls': 'application/vnd.ms-excel',
285
+ '.xlsx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
286
+ '.ppt': 'application/vnd.ms-powerpoint',
287
+ '.pptx': 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
288
+ '.txt': 'text/plain',
289
+ '.csv': 'text/csv',
290
+ '.json': 'application/json',
291
+ '.xml': 'application/xml',
292
+ '.jpg': 'image/jpeg',
293
+ '.jpeg': 'image/jpeg',
294
+ '.png': 'image/png',
295
+ '.gif': 'image/gif',
296
+ '.bmp': 'image/bmp',
297
+ '.tiff': 'image/tiff',
298
+ '.zip': 'application/zip',
299
+ '.rar': 'application/vnd.rar',
300
+ '.7z': 'application/x-7z-compressed'
301
+ };
302
+ return mimeTypes[ext] || 'application/octet-stream';
303
+ }
304
+ }
305
+ exports.default = FileSystemPlugin;
306
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../plugins/filesystem/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ {
2
+ "name": "filesystem",
3
+ "version": "1.0.0",
4
+ "description": "Local filesystem document source plugin",
5
+ "author": "HubDoc Tools",
6
+ "main": "index.js",
7
+ "hubdocToolVersion": "^1.0.0",
8
+ "dependencies": {
9
+ "fs-extra": "^11.1.0",
10
+ "glob": "^10.3.0"
11
+ }
12
+ }
@@ -0,0 +1,27 @@
1
+ import { DocumentSourcePlugin, DocumentSource, PluginConfig, ScanResult, PluginImportOptions, PluginExportOptions, ImportResult, ExportResult } from '../../src/types/plugins';
2
+ export default class GoogleDrivePlugin implements DocumentSourcePlugin {
3
+ readonly name = "googledrive";
4
+ readonly version = "1.0.0";
5
+ readonly description = "Google Drive document source";
6
+ readonly supportedOperations: readonly ["import", "export", "both"];
7
+ private config?;
8
+ private drive?;
9
+ private auth?;
10
+ testConnection(config: PluginConfig): Promise<boolean>;
11
+ scan(config: PluginConfig, options?: PluginImportOptions): Promise<ScanResult>;
12
+ private scanFolder;
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 createFolderStructure;
17
+ getConfigSchema(): Record<string, any>;
18
+ initialize(config: PluginConfig): Promise<void>;
19
+ destroy(): Promise<void>;
20
+ private createAuth;
21
+ private isGoogleWorkspaceDoc;
22
+ private getExportMimeType;
23
+ private getExportExtension;
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/googledrive/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;AAWjC,MAAM,CAAC,OAAO,OAAO,iBAAkB,YAAW,oBAAoB;IACpE,QAAQ,CAAC,IAAI,iBAAiB;IAC9B,QAAQ,CAAC,OAAO,WAAW;IAC3B,QAAQ,CAAC,WAAW,kCAAkC;IACtD,QAAQ,CAAC,mBAAmB,wCAAyC;IAErE,OAAO,CAAC,MAAM,CAAC,CAAoB;IACnC,OAAO,CAAC,KAAK,CAAC,CAAiB;IAC/B,OAAO,CAAC,IAAI,CAAC,CAAM;IAEb,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC;IActD,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,UAAU,CAAC;YAqDtE,UAAU;IAwClB,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;YAwBZ,YAAY;IAgFpB,MAAM,CAAC,CACX,MAAM,EAAE,YAAY,EACpB,YAAY,EAAE,cAAc,EAAE,EAC9B,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,YAAY,EAAE,CAAC;YAqDZ,qBAAqB;IA+BnC,eAAe,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAuChC,UAAU,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAU/C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;YAMhB,UAAU;IAiBxB,OAAO,CAAC,oBAAoB;IAQ5B,OAAO,CAAC,iBAAiB;IAUzB,OAAO,CAAC,kBAAkB;IAW1B,OAAO,CAAC,mBAAmB;IAqB3B,OAAO,CAAC,KAAK;CAGd"}