@sinoia/hubdoc-tools 1.0.3 → 1.2.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/README.md +115 -34
- package/dist/__tests__/fixtures/plugins/connection-plugin/index.d.ts +15 -0
- package/dist/__tests__/fixtures/plugins/connection-plugin/index.d.ts.map +1 -0
- package/dist/__tests__/fixtures/plugins/connection-plugin/index.js +37 -0
- package/dist/__tests__/fixtures/plugins/connection-plugin/index.js.map +1 -0
- package/dist/__tests__/fixtures/plugins/scan-plugin/index.d.ts +15 -0
- package/dist/__tests__/fixtures/plugins/scan-plugin/index.d.ts.map +1 -0
- package/dist/__tests__/fixtures/plugins/scan-plugin/index.js +54 -0
- package/dist/__tests__/fixtures/plugins/scan-plugin/index.js.map +1 -0
- package/dist/__tests__/fixtures/plugins/test-plugin/index.d.ts +15 -0
- package/dist/__tests__/fixtures/plugins/test-plugin/index.d.ts.map +1 -0
- package/dist/__tests__/fixtures/plugins/test-plugin/index.js +34 -0
- package/dist/__tests__/fixtures/plugins/test-plugin/index.js.map +1 -0
- package/dist/__tests__/fixtures/plugins/workflow-plugin/index.d.ts +16 -0
- package/dist/__tests__/fixtures/plugins/workflow-plugin/index.d.ts.map +1 -0
- package/dist/__tests__/fixtures/plugins/workflow-plugin/index.js +145 -0
- package/dist/__tests__/fixtures/plugins/workflow-plugin/index.js.map +1 -0
- package/dist/api/api/authentication-api.d.ts +208 -0
- package/dist/api/api/authentication-api.d.ts.map +1 -0
- package/dist/api/api/authentication-api.js +385 -0
- package/dist/api/api/authentication-api.js.map +1 -0
- package/dist/api/api/bulk-uploads-api.d.ts +101 -0
- package/dist/api/api/bulk-uploads-api.d.ts.map +1 -0
- package/dist/api/api/bulk-uploads-api.js +195 -0
- package/dist/api/api/bulk-uploads-api.js.map +1 -0
- package/dist/api/api/contacts-api.d.ts +246 -0
- package/dist/api/api/contacts-api.d.ts.map +1 -0
- package/dist/api/api/contacts-api.js +465 -0
- package/dist/api/api/contacts-api.js.map +1 -0
- package/dist/api/api/documents-api.d.ts +267 -0
- package/dist/api/api/documents-api.d.ts.map +1 -0
- package/dist/api/api/documents-api.js +506 -0
- package/dist/api/api/documents-api.js.map +1 -0
- package/dist/api/api/folders-api.d.ts +255 -0
- package/dist/api/api/folders-api.d.ts.map +1 -0
- package/dist/api/api/folders-api.js +479 -0
- package/dist/api/api/folders-api.js.map +1 -0
- package/dist/api/api/groups-api.d.ts +246 -0
- package/dist/api/api/groups-api.d.ts.map +1 -0
- package/dist/api/api/groups-api.js +465 -0
- package/dist/api/api/groups-api.js.map +1 -0
- package/dist/api/api/permissions-api.d.ts +246 -0
- package/dist/api/api/permissions-api.d.ts.map +1 -0
- package/dist/api/api/permissions-api.js +465 -0
- package/dist/api/api/permissions-api.js.map +1 -0
- package/dist/api/api/workspaces-api.d.ts +213 -0
- package/dist/api/api/workspaces-api.d.ts.map +1 -0
- package/dist/api/api/workspaces-api.js +424 -0
- package/dist/api/api/workspaces-api.js.map +1 -0
- package/dist/api/api.d.ts +20 -0
- package/dist/api/api.d.ts.map +1 -0
- package/dist/api/api.js +38 -0
- package/dist/api/api.js.map +1 -0
- package/dist/api/base.d.ts +43 -0
- package/dist/api/base.d.ts.map +1 -0
- package/dist/api/base.js +49 -0
- package/dist/api/base.js.map +1 -0
- package/dist/api/common.d.ts +29 -0
- package/dist/api/common.d.ts.map +1 -0
- package/dist/api/common.js +109 -0
- package/dist/api/common.js.map +1 -0
- package/dist/api/configuration.d.ts +99 -0
- package/dist/api/configuration.d.ts.map +1 -0
- package/dist/api/configuration.js +49 -0
- package/dist/api/configuration.js.map +1 -0
- package/dist/api/index.d.ts +15 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +33 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/models/api-v1-documents-documents-post-request1.d.ts +34 -0
- package/dist/api/models/api-v1-documents-documents-post-request1.d.ts.map +1 -0
- package/dist/api/models/api-v1-documents-documents-post-request1.js +16 -0
- package/dist/api/models/api-v1-documents-documents-post-request1.js.map +1 -0
- package/dist/api/models/api-v1-documents-documents-post201-response.d.ts +17 -0
- package/dist/api/models/api-v1-documents-documents-post201-response.d.ts.map +1 -0
- package/dist/api/models/api-v1-documents-documents-post201-response.js +16 -0
- package/dist/api/models/api-v1-documents-documents-post201-response.js.map +1 -0
- package/dist/api/models/api-v1-documents-folders-id-get200-response-all-of-items-inner-one-of.d.ts +17 -0
- package/dist/api/models/api-v1-documents-folders-id-get200-response-all-of-items-inner-one-of.d.ts.map +1 -0
- package/dist/api/models/api-v1-documents-folders-id-get200-response-all-of-items-inner-one-of.js +16 -0
- package/dist/api/models/api-v1-documents-folders-id-get200-response-all-of-items-inner-one-of.js.map +1 -0
- package/dist/api/models/api-v1-documents-folders-id-get200-response-all-of-items-inner-one-of1.d.ts +17 -0
- package/dist/api/models/api-v1-documents-folders-id-get200-response-all-of-items-inner-one-of1.d.ts.map +1 -0
- package/dist/api/models/api-v1-documents-folders-id-get200-response-all-of-items-inner-one-of1.js +16 -0
- package/dist/api/models/api-v1-documents-folders-id-get200-response-all-of-items-inner-one-of1.js.map +1 -0
- package/dist/api/models/api-v1-documents-folders-id-get200-response-all-of-items-inner.d.ts +18 -0
- package/dist/api/models/api-v1-documents-folders-id-get200-response-all-of-items-inner.d.ts.map +1 -0
- package/dist/api/models/api-v1-documents-folders-id-get200-response-all-of-items-inner.js +16 -0
- package/dist/api/models/api-v1-documents-folders-id-get200-response-all-of-items-inner.js.map +1 -0
- package/dist/api/models/api-v1-documents-folders-id-get200-response.d.ts +17 -0
- package/dist/api/models/api-v1-documents-folders-id-get200-response.d.ts.map +1 -0
- package/dist/api/models/api-v1-documents-folders-id-get200-response.js +16 -0
- package/dist/api/models/api-v1-documents-folders-id-get200-response.js.map +1 -0
- package/dist/api/models/bulk-upload-mutation.d.ts +34 -0
- package/dist/api/models/bulk-upload-mutation.d.ts.map +1 -0
- package/dist/api/models/bulk-upload-mutation.js +16 -0
- package/dist/api/models/bulk-upload-mutation.js.map +1 -0
- package/dist/api/models/bulk-upload.d.ts +91 -0
- package/dist/api/models/bulk-upload.d.ts.map +1 -0
- package/dist/api/models/bulk-upload.js +23 -0
- package/dist/api/models/bulk-upload.js.map +1 -0
- package/dist/api/models/contact-mutation.d.ts +30 -0
- package/dist/api/models/contact-mutation.d.ts.map +1 -0
- package/dist/api/models/contact-mutation.js +16 -0
- package/dist/api/models/contact-mutation.js.map +1 -0
- package/dist/api/models/contact.d.ts +54 -0
- package/dist/api/models/contact.d.ts.map +1 -0
- package/dist/api/models/contact.js +16 -0
- package/dist/api/models/contact.js.map +1 -0
- package/dist/api/models/document-document-type.d.ts +19 -0
- package/dist/api/models/document-document-type.d.ts.map +1 -0
- package/dist/api/models/document-document-type.js +16 -0
- package/dist/api/models/document-document-type.js.map +1 -0
- package/dist/api/models/document-domain.d.ts +19 -0
- package/dist/api/models/document-domain.d.ts.map +1 -0
- package/dist/api/models/document-domain.js +16 -0
- package/dist/api/models/document-domain.js.map +1 -0
- package/dist/api/models/document-folder.d.ts +19 -0
- package/dist/api/models/document-folder.d.ts.map +1 -0
- package/dist/api/models/document-folder.js +16 -0
- package/dist/api/models/document-folder.js.map +1 -0
- package/dist/api/models/document-mutation.d.ts +50 -0
- package/dist/api/models/document-mutation.d.ts.map +1 -0
- package/dist/api/models/document-mutation.js +16 -0
- package/dist/api/models/document-mutation.js.map +1 -0
- package/dist/api/models/document.d.ts +73 -0
- package/dist/api/models/document.d.ts.map +1 -0
- package/dist/api/models/document.js +16 -0
- package/dist/api/models/document.js.map +1 -0
- package/dist/api/models/folder-mutation.d.ts +38 -0
- package/dist/api/models/folder-mutation.d.ts.map +1 -0
- package/dist/api/models/folder-mutation.js +16 -0
- package/dist/api/models/folder-mutation.js.map +1 -0
- package/dist/api/models/folder-parent.d.ts +19 -0
- package/dist/api/models/folder-parent.d.ts.map +1 -0
- package/dist/api/models/folder-parent.js +16 -0
- package/dist/api/models/folder-parent.js.map +1 -0
- package/dist/api/models/folder.d.ts +65 -0
- package/dist/api/models/folder.d.ts.map +1 -0
- package/dist/api/models/folder.js +16 -0
- package/dist/api/models/folder.js.map +1 -0
- package/dist/api/models/group-mutation.d.ts +26 -0
- package/dist/api/models/group-mutation.d.ts.map +1 -0
- package/dist/api/models/group-mutation.js +16 -0
- package/dist/api/models/group-mutation.js.map +1 -0
- package/dist/api/models/group.d.ts +38 -0
- package/dist/api/models/group.d.ts.map +1 -0
- package/dist/api/models/group.js +16 -0
- package/dist/api/models/group.js.map +1 -0
- package/dist/api/models/index.d.ts +35 -0
- package/dist/api/models/index.d.ts.map +1 -0
- package/dist/api/models/index.js +51 -0
- package/dist/api/models/index.js.map +1 -0
- package/dist/api/models/model-error.d.ts +26 -0
- package/dist/api/models/model-error.d.ts.map +1 -0
- package/dist/api/models/model-error.js +16 -0
- package/dist/api/models/model-error.js.map +1 -0
- package/dist/api/models/oauth-revoke-post200-response.d.ts +15 -0
- package/dist/api/models/oauth-revoke-post200-response.d.ts.map +1 -0
- package/dist/api/models/oauth-revoke-post200-response.js +16 -0
- package/dist/api/models/oauth-revoke-post200-response.js.map +1 -0
- package/dist/api/models/permission-actor.d.ts +20 -0
- package/dist/api/models/permission-actor.d.ts.map +1 -0
- package/dist/api/models/permission-actor.js +16 -0
- package/dist/api/models/permission-actor.js.map +1 -0
- package/dist/api/models/permission-mutation.d.ts +44 -0
- package/dist/api/models/permission-mutation.d.ts.map +1 -0
- package/dist/api/models/permission-mutation.js +22 -0
- package/dist/api/models/permission-mutation.js.map +1 -0
- package/dist/api/models/permission-permissible.d.ts +20 -0
- package/dist/api/models/permission-permissible.d.ts.map +1 -0
- package/dist/api/models/permission-permissible.js +16 -0
- package/dist/api/models/permission-permissible.js.map +1 -0
- package/dist/api/models/permission.d.ts +60 -0
- package/dist/api/models/permission.d.ts.map +1 -0
- package/dist/api/models/permission.js +22 -0
- package/dist/api/models/permission.js.map +1 -0
- package/dist/api/models/token-response.d.ts +41 -0
- package/dist/api/models/token-response.d.ts.map +1 -0
- package/dist/api/models/token-response.js +16 -0
- package/dist/api/models/token-response.js.map +1 -0
- package/dist/api/models/user.d.ts +18 -0
- package/dist/api/models/user.d.ts.map +1 -0
- package/dist/api/models/user.js +16 -0
- package/dist/api/models/user.js.map +1 -0
- package/dist/api/models/workspace-mutation-settings-validation.d.ts +26 -0
- package/dist/api/models/workspace-mutation-settings-validation.d.ts.map +1 -0
- package/dist/api/models/workspace-mutation-settings-validation.js +16 -0
- package/dist/api/models/workspace-mutation-settings-validation.js.map +1 -0
- package/dist/api/models/workspace-mutation-settings.d.ts +60 -0
- package/dist/api/models/workspace-mutation-settings.d.ts.map +1 -0
- package/dist/api/models/workspace-mutation-settings.js +16 -0
- package/dist/api/models/workspace-mutation-settings.js.map +1 -0
- package/dist/api/models/workspace-mutation.d.ts +44 -0
- package/dist/api/models/workspace-mutation.d.ts.map +1 -0
- package/dist/api/models/workspace-mutation.js +16 -0
- package/dist/api/models/workspace-mutation.js.map +1 -0
- package/dist/api/models/workspace-settings-validation.d.ts +26 -0
- package/dist/api/models/workspace-settings-validation.d.ts.map +1 -0
- package/dist/api/models/workspace-settings-validation.js +16 -0
- package/dist/api/models/workspace-settings-validation.js.map +1 -0
- package/dist/api/models/workspace-settings.d.ts +60 -0
- package/dist/api/models/workspace-settings.d.ts.map +1 -0
- package/dist/api/models/workspace-settings.js +16 -0
- package/dist/api/models/workspace-settings.js.map +1 -0
- package/dist/api/models/workspace.d.ts +62 -0
- package/dist/api/models/workspace.d.ts.map +1 -0
- package/dist/api/models/workspace.js +16 -0
- package/dist/api/models/workspace.js.map +1 -0
- package/dist/cli/handlers/command-handlers.d.ts +29 -0
- package/dist/cli/handlers/command-handlers.d.ts.map +1 -0
- package/dist/cli/handlers/command-handlers.js +261 -0
- package/dist/cli/handlers/command-handlers.js.map +1 -0
- package/dist/cli/handlers/engine-handlers.d.ts +15 -0
- package/dist/cli/handlers/engine-handlers.d.ts.map +1 -0
- package/dist/cli/handlers/engine-handlers.js +174 -0
- package/dist/cli/handlers/engine-handlers.js.map +1 -0
- package/dist/cli/interactive.d.ts +15 -0
- package/dist/cli/interactive.d.ts.map +1 -0
- package/dist/cli/interactive.js +234 -0
- package/dist/cli/interactive.js.map +1 -0
- package/dist/cli.js +31 -739
- package/dist/cli.js.map +1 -1
- package/dist/commands/export.d.ts +1 -1
- package/dist/commands/export.d.ts.map +1 -1
- package/dist/commands/export.js +1 -1
- package/dist/commands/export.js.map +1 -1
- package/dist/commands/import.js +1 -1
- package/dist/commands/import.js.map +1 -1
- package/dist/index.d.ts +27 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +62 -20
- package/dist/index.js.map +1 -1
- package/dist/services/hubdoc-api.d.ts +5 -0
- package/dist/services/hubdoc-api.d.ts.map +1 -1
- package/dist/services/hubdoc-api.js +48 -26
- package/dist/services/hubdoc-api.js.map +1 -1
- package/dist/services/hubdoc-export.d.ts +1 -1
- package/dist/services/hubdoc-export.d.ts.map +1 -1
- package/dist/services/hubdoc-export.js +1 -1
- package/dist/services/hubdoc-export.js.map +1 -1
- package/dist/services/oauth-token-service.d.ts +27 -14
- package/dist/services/oauth-token-service.d.ts.map +1 -1
- package/dist/services/oauth-token-service.js +147 -80
- package/dist/services/oauth-token-service.js.map +1 -1
- package/dist/services/plugin-import.d.ts +2 -2
- package/dist/services/plugin-import.d.ts.map +1 -1
- package/dist/services/plugin-import.js +2 -2
- package/dist/services/plugin-import.js.map +1 -1
- package/dist/services/plugin-manager.d.ts +1 -1
- package/dist/services/plugin-manager.d.ts.map +1 -1
- package/dist/services/plugin-manager.js +2 -2
- package/dist/services/plugin-manager.js.map +1 -1
- package/dist/types/index.d.ts +12 -37
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/config.d.ts +30 -1
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +187 -40
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/csv.d.ts +1 -0
- package/dist/utils/csv.d.ts.map +1 -1
- package/dist/utils/csv.js +21 -0
- package/dist/utils/csv.js.map +1 -1
- package/package.json +23 -6
- package/.env.example +0 -23
- package/BAUTECH_HubDoc_Import.pptx +0 -0
- package/CHANGELOG.md +0 -127
- package/DEMO-DOCUMENTATION.html +0 -356
- package/DEMO-DOCUMENTATION.md +0 -411
- package/EXPORT-DOCUMENTATION.md +0 -333
- package/HUBDOC-API-V2.md +0 -248
- package/INSTALL.md +0 -175
- package/PACKAGING.md +0 -206
- package/PLUGINS.md +0 -328
- package/PRESENTATION-CLIENT.md +0 -100
- package/README-hubdoc-tool.md +0 -369
- package/README-npm.md +0 -238
- package/TESTING.md +0 -129
- package/config-examples/README.md +0 -36
- package/config-examples/alfresco-config.example.json +0 -8
- package/config-examples/azure-blob-config.example.json +0 -7
- package/config-examples/box-config.example.json +0 -5
- package/config-examples/nuxeo-config.example.json +0 -8
- package/config-examples/opentext-config.example.json +0 -7
- package/config-examples/s3-config.example.json +0 -8
- package/config-examples/sharepoint-config.example.json +0 -7
- package/demo/README.md +0 -199
- package/demo/demo-script.md +0 -284
- package/demo/generate-sample-csv.js +0 -351
- package/demo/mapping_bautech_15k.csv +0 -1
- package/demo/simulate-import.js +0 -273
- package/dist/commands/export-v2.d.ts +0 -45
- package/dist/commands/export-v2.d.ts.map +0 -1
- package/dist/commands/export-v2.js +0 -369
- package/dist/commands/export-v2.js.map +0 -1
- package/dist/commands/import-v2.d.ts +0 -32
- package/dist/commands/import-v2.d.ts.map +0 -1
- package/dist/commands/import-v2.js +0 -331
- package/dist/commands/import-v2.js.map +0 -1
- package/dist/services/hubdoc-api-v2.d.ts +0 -150
- package/dist/services/hubdoc-api-v2.d.ts.map +0 -1
- package/dist/services/hubdoc-api-v2.js +0 -418
- package/dist/services/hubdoc-api-v2.js.map +0 -1
- package/dist/services/hubdoc-client.d.ts +0 -246
- package/dist/services/hubdoc-client.d.ts.map +0 -1
- package/dist/services/hubdoc-client.js +0 -714
- package/dist/services/hubdoc-client.js.map +0 -1
- package/dist/services/hubdoc-export-service.d.ts +0 -90
- package/dist/services/hubdoc-export-service.d.ts.map +0 -1
- package/dist/services/hubdoc-export-service.js +0 -443
- package/dist/services/hubdoc-export-service.js.map +0 -1
- package/dist/services/hubdoc-export-v2.d.ts +0 -77
- package/dist/services/hubdoc-export-v2.d.ts.map +0 -1
- package/dist/services/hubdoc-export-v2.js +0 -329
- package/dist/services/hubdoc-export-v2.js.map +0 -1
- package/dist/services/hubdoc-import-service.d.ts +0 -64
- package/dist/services/hubdoc-import-service.d.ts.map +0 -1
- package/dist/services/hubdoc-import-service.js +0 -374
- package/dist/services/hubdoc-import-service.js.map +0 -1
- package/docs/README.md +0 -65
- package/docs/connectors/alfresco.md +0 -211
- package/docs/connectors/aws-s3.md +0 -187
- package/docs/connectors/azure-blob.md +0 -195
- package/docs/connectors/box.md +0 -115
- package/docs/connectors/nuxeo.md +0 -214
- package/docs/connectors/opentext.md +0 -234
- package/docs/connectors/sharepoint.md +0 -207
- package/documentation.html +0 -273
- package/jest.config.js +0 -15
- package/plugins/core/README.md +0 -122
- package/plugins/core/TESTING.md +0 -155
- package/plugins/core/plugin.json +0 -26
- package/plugins/dropbox/plugin.json +0 -12
- package/plugins/filesystem/plugin.json +0 -12
- package/plugins/googledrive/plugin.json +0 -12
- package/plugins/onedrive/TESTING.md +0 -197
- package/plugins/onedrive/plugin.json +0 -12
- package/scripts/build-windows-installer.ps1 +0 -132
- package/scripts/build-windows-installer.sh +0 -106
- package/scripts/prepare-publish.js +0 -62
- package/scripts/restore-package.js +0 -29
package/README.md
CHANGED
|
@@ -18,12 +18,12 @@ hubdoc-tool --version
|
|
|
18
18
|
```
|
|
19
19
|
|
|
20
20
|
**🚀 Latest Features:**
|
|
21
|
-
-
|
|
22
|
-
-
|
|
23
|
-
-
|
|
24
|
-
-
|
|
25
|
-
-
|
|
26
|
-
-
|
|
21
|
+
- **🔐 Automatic OAuth2**: Zero-config authentication with automatic token refresh
|
|
22
|
+
- **📦 NPM Package**: Install globally with `npm install -g @sinoia/hubdoc-tools`
|
|
23
|
+
- **🔌 API Integration**: Full integration with official HubDoc Swagger/OpenAPI API
|
|
24
|
+
- **🧩 Plugin System**: Extensible architecture for external sources (OneDrive, Google Drive, S3, Dropbox)
|
|
25
|
+
- **✅ Enhanced Validation**: Pre-import validation and detailed error reporting
|
|
26
|
+
- **🎯 Interactive Mode**: Guided workflows with previews and confirmations
|
|
27
27
|
|
|
28
28
|
### Features
|
|
29
29
|
|
|
@@ -41,10 +41,11 @@ hubdoc-tool --version
|
|
|
41
41
|
- **Path Customization**: Specify custom target directories for exported files
|
|
42
42
|
|
|
43
43
|
**⚙️ General Features**
|
|
44
|
-
-
|
|
45
|
-
-
|
|
46
|
-
-
|
|
47
|
-
-
|
|
44
|
+
- **🔐 Automatic OAuth2**: Zero-config authentication with automatic token refresh and expiration handling
|
|
45
|
+
- **🎯 Interactive & CLI Modes**: Both interactive wizard and command-line interface
|
|
46
|
+
- **📁 Folder Management**: Automatic folder creation in HubDoc
|
|
47
|
+
- **📊 Progress Tracking**: Real-time import/export progress with detailed feedback
|
|
48
|
+
- **🔄 Token Management**: Automatic token refresh before expiration (60s buffer)
|
|
48
49
|
|
|
49
50
|
## 🚀 Quick Start
|
|
50
51
|
|
|
@@ -55,27 +56,49 @@ npm install -g @sinoia/hubdoc-tools
|
|
|
55
56
|
|
|
56
57
|
### 2. Configuration
|
|
57
58
|
|
|
58
|
-
####
|
|
59
|
+
#### Automatic Setup (OAuth2 - Recommended)
|
|
60
|
+
|
|
61
|
+
**Configuration is now fully automatic!** Simply set environment variables and run any command:
|
|
62
|
+
|
|
59
63
|
```bash
|
|
60
|
-
#
|
|
61
|
-
|
|
64
|
+
# Set OAuth2 credentials (one time)
|
|
65
|
+
export HUBDOC_API_URL=https://rec.hubdoc.sinoia.cloud
|
|
66
|
+
export HUBDOC_OAUTH_CLIENT_ID=your-client-id
|
|
67
|
+
export HUBDOC_OAUTH_CLIENT_SECRET=your-client-secret
|
|
68
|
+
export HUBDOC_OAUTH_SCOPES="read write"
|
|
69
|
+
|
|
70
|
+
# Run any command - authentication is automatic!
|
|
71
|
+
hubdoc-tool import --source ./documents
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
**What happens automatically:**
|
|
75
|
+
1. ✅ CLI checks for valid token
|
|
76
|
+
2. 🔄 Refreshes token if expired (using refresh_token)
|
|
77
|
+
3. 🌐 Opens browser for OAuth authentication if needed
|
|
78
|
+
4. 💾 Saves token to `.hubdoc-config.json`
|
|
79
|
+
5. ▶️ Proceeds with your command
|
|
80
|
+
|
|
81
|
+
**No manual token management required!**
|
|
82
|
+
|
|
83
|
+
#### Alternative: Configuration File
|
|
84
|
+
|
|
85
|
+
Create a `.hubdoc-config.json` file (environment variables override this):
|
|
62
86
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
87
|
+
```json
|
|
88
|
+
{
|
|
89
|
+
"apiUrl": "https://rec.hubdoc.sinoia.cloud",
|
|
90
|
+
"clientId": "your-client-id",
|
|
91
|
+
"clientSecret": "your-client-secret",
|
|
92
|
+
"scopes": ["read", "write"]
|
|
93
|
+
}
|
|
67
94
|
```
|
|
68
95
|
|
|
69
|
-
|
|
96
|
+
Or use `.env` file:
|
|
70
97
|
```bash
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
echo '{
|
|
76
|
-
"apiUrl": "https://your.hubdoc.instance/api/v1",
|
|
77
|
-
"token": "your-jwt-token"
|
|
78
|
-
}' > .hubdoc-config.json
|
|
98
|
+
HUBDOC_API_URL=https://rec.hubdoc.sinoia.cloud
|
|
99
|
+
HUBDOC_OAUTH_CLIENT_ID=your-client-id
|
|
100
|
+
HUBDOC_OAUTH_CLIENT_SECRET=your-client-secret
|
|
101
|
+
HUBDOC_OAUTH_SCOPES="read write"
|
|
79
102
|
```
|
|
80
103
|
|
|
81
104
|
### 3. Basic Usage
|
|
@@ -83,20 +106,23 @@ echo '{
|
|
|
83
106
|
# Generate mapping from local directory
|
|
84
107
|
hubdoc-tool generate-mapping ./documents
|
|
85
108
|
|
|
86
|
-
# Import documents
|
|
109
|
+
# Import documents (authentication is automatic!)
|
|
87
110
|
hubdoc-tool import --source /path/to/documents
|
|
88
111
|
hubdoc-tool import --mapping mapping.csv
|
|
112
|
+
hubdoc-tool import --direct ./invoices
|
|
89
113
|
|
|
90
114
|
# Export documents
|
|
91
|
-
hubdoc-tool export --scan
|
|
115
|
+
hubdoc-tool export --scan # Generate export mapping
|
|
92
116
|
hubdoc-tool export --mapping export-mapping.csv
|
|
117
|
+
hubdoc-tool export --generate-xml-metadata # With XML metadata
|
|
93
118
|
|
|
94
119
|
# Interactive mode
|
|
95
120
|
hubdoc-tool --interactive
|
|
96
121
|
|
|
97
|
-
#
|
|
98
|
-
hubdoc-tool
|
|
99
|
-
hubdoc-tool
|
|
122
|
+
# Use different engines for import
|
|
123
|
+
hubdoc-tool --engine onedrive
|
|
124
|
+
hubdoc-tool --engine googledrive
|
|
125
|
+
hubdoc-tool --engine s3
|
|
100
126
|
```
|
|
101
127
|
|
|
102
128
|
### 4. Plugin-based Sources
|
|
@@ -215,14 +241,69 @@ Each `*_metadata.xml` file contains:
|
|
|
215
241
|
</document>
|
|
216
242
|
```
|
|
217
243
|
|
|
244
|
+
## 🔐 OAuth2 Authentication
|
|
245
|
+
|
|
246
|
+
The tool uses **OAuth 2.0 Authorization Code Flow** with automatic token management:
|
|
247
|
+
|
|
248
|
+
### How It Works
|
|
249
|
+
|
|
250
|
+
1. **First Run**: If no valid token exists, the CLI automatically:
|
|
251
|
+
- Starts a local HTTP server on `localhost:8082`
|
|
252
|
+
- Opens your browser to the OAuth authorization page
|
|
253
|
+
- Receives the authorization code via callback
|
|
254
|
+
- Exchanges the code for an access token
|
|
255
|
+
- Saves the token and refresh token to `.hubdoc-config.json`
|
|
256
|
+
|
|
257
|
+
2. **Subsequent Runs**: The CLI automatically:
|
|
258
|
+
- Loads the saved token from config file or environment
|
|
259
|
+
- Checks if token is expired (with 60s buffer)
|
|
260
|
+
- Refreshes the token using refresh_token if needed
|
|
261
|
+
- Proceeds with your command
|
|
262
|
+
|
|
263
|
+
3. **No Manual Intervention**: You never need to manually manage tokens!
|
|
264
|
+
|
|
265
|
+
### Environment Variables
|
|
266
|
+
|
|
267
|
+
Priority order (highest to lowest):
|
|
268
|
+
1. **Environment variables** (override everything)
|
|
269
|
+
2. **`.env` file** (loaded automatically)
|
|
270
|
+
3. **`.hubdoc-config.json`** (saved tokens)
|
|
271
|
+
|
|
272
|
+
```bash
|
|
273
|
+
# Required for automatic OAuth
|
|
274
|
+
export HUBDOC_API_URL=https://rec.hubdoc.sinoia.cloud
|
|
275
|
+
export HUBDOC_OAUTH_CLIENT_ID=your-client-id
|
|
276
|
+
export HUBDOC_OAUTH_CLIENT_SECRET=your-client-secret
|
|
277
|
+
export HUBDOC_OAUTH_SCOPES="read write admin"
|
|
278
|
+
|
|
279
|
+
# Optional: provide a valid token directly (skips OAuth flow)
|
|
280
|
+
export HUBDOC_TOKEN=your-existing-token
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
### Token Expiration
|
|
284
|
+
|
|
285
|
+
- Tokens typically expire after **2 hours** (7200 seconds)
|
|
286
|
+
- The CLI checks expiration **60 seconds before** actual expiration
|
|
287
|
+
- Automatic refresh using the refresh_token (no browser required)
|
|
288
|
+
- If refresh fails, a new OAuth flow is initiated automatically
|
|
289
|
+
|
|
290
|
+
### Security Notes
|
|
291
|
+
|
|
292
|
+
- Tokens are stored in `.hubdoc-config.json` (add to `.gitignore`!)
|
|
293
|
+
- Client secrets should be stored in environment variables or `.env` file
|
|
294
|
+
- The local OAuth callback server only binds to `127.0.0.1` (localhost)
|
|
295
|
+
- Authorization codes are single-use and expire quickly
|
|
296
|
+
|
|
218
297
|
### API Configuration
|
|
219
298
|
|
|
220
299
|
The tool supports HubDoc APIs with endpoints like:
|
|
221
|
-
- `https://
|
|
300
|
+
- `https://rec.hubdoc.sinoia.cloud`
|
|
301
|
+
- `https://demo.hubdoc.sinoia.cloud`
|
|
222
302
|
|
|
223
303
|
Configuration can be stored as:
|
|
224
|
-
-
|
|
225
|
-
-
|
|
304
|
+
- Environment variables (recommended for credentials)
|
|
305
|
+
- `.env` file (for local development)
|
|
306
|
+
- `.hubdoc-config.json` file (for saved tokens)
|
|
226
307
|
|
|
227
308
|
## Plugin Architecture
|
|
228
309
|
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { DocumentSourcePlugin, PluginConfig, ScanResult, ImportResult, DocumentSource } from '../../../../types/plugins';
|
|
2
|
+
declare class ConnectionPlugin implements DocumentSourcePlugin {
|
|
3
|
+
readonly name = "connection-plugin";
|
|
4
|
+
readonly version = "1.0.0";
|
|
5
|
+
readonly description = "Plugin for testing connections";
|
|
6
|
+
readonly supportedOperations: readonly ["import"];
|
|
7
|
+
testConnection(config: PluginConfig): Promise<boolean>;
|
|
8
|
+
scan(config: PluginConfig): Promise<ScanResult>;
|
|
9
|
+
import(config: PluginConfig, sources: DocumentSource[], targetDir: string): Promise<ImportResult[]>;
|
|
10
|
+
getConfigSchema(): Record<string, any>;
|
|
11
|
+
initialize(config: PluginConfig): Promise<void>;
|
|
12
|
+
destroy(): Promise<void>;
|
|
13
|
+
}
|
|
14
|
+
export default ConnectionPlugin;
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/__tests__/fixtures/plugins/connection-plugin/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAEzH,cAAM,gBAAiB,YAAW,oBAAoB;IACpD,QAAQ,CAAC,IAAI,uBAAuB;IACpC,QAAQ,CAAC,OAAO,WAAW;IAC3B,QAAQ,CAAC,WAAW,oCAAoC;IACxD,QAAQ,CAAC,mBAAmB,sBAAuB;IAE7C,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC;IAKtD,IAAI,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC;IAS/C,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAIzG,eAAe,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAShC,UAAU,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAC/C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAC/B;AAED,eAAe,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
class ConnectionPlugin {
|
|
4
|
+
constructor() {
|
|
5
|
+
this.name = 'connection-plugin';
|
|
6
|
+
this.version = '1.0.0';
|
|
7
|
+
this.description = 'Plugin for testing connections';
|
|
8
|
+
this.supportedOperations = ['import'];
|
|
9
|
+
}
|
|
10
|
+
async testConnection(config) {
|
|
11
|
+
// Return true if config.valid is true, false otherwise
|
|
12
|
+
return config.valid === true;
|
|
13
|
+
}
|
|
14
|
+
async scan(config) {
|
|
15
|
+
return {
|
|
16
|
+
sources: [],
|
|
17
|
+
totalCount: 0,
|
|
18
|
+
totalSize: 0,
|
|
19
|
+
errors: []
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
async import(config, sources, targetDir) {
|
|
23
|
+
return [];
|
|
24
|
+
}
|
|
25
|
+
getConfigSchema() {
|
|
26
|
+
return {
|
|
27
|
+
type: 'object',
|
|
28
|
+
properties: {
|
|
29
|
+
valid: { type: 'boolean' }
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
async initialize(config) { }
|
|
34
|
+
async destroy() { }
|
|
35
|
+
}
|
|
36
|
+
exports.default = ConnectionPlugin;
|
|
37
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/__tests__/fixtures/plugins/connection-plugin/index.ts"],"names":[],"mappings":";;AAEA,MAAM,gBAAgB;IAAtB;QACW,SAAI,GAAG,mBAAmB,CAAC;QAC3B,YAAO,GAAG,OAAO,CAAC;QAClB,gBAAW,GAAG,gCAAgC,CAAC;QAC/C,wBAAmB,GAAG,CAAC,QAAQ,CAAU,CAAC;IA+BrD,CAAC;IA7BC,KAAK,CAAC,cAAc,CAAC,MAAoB;QACvC,uDAAuD;QACvD,OAAQ,MAAc,CAAC,KAAK,KAAK,IAAI,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,MAAoB;QAC7B,OAAO;YACL,OAAO,EAAE,EAAE;YACX,UAAU,EAAE,CAAC;YACb,SAAS,EAAE,CAAC;YACZ,MAAM,EAAE,EAAE;SACX,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,MAAoB,EAAE,OAAyB,EAAE,SAAiB;QAC7E,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,eAAe;QACb,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;aAC3B;SACF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,MAAoB,IAAkB,CAAC;IACxD,KAAK,CAAC,OAAO,KAAmB,CAAC;CAClC;AAED,kBAAe,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { DocumentSourcePlugin, PluginConfig, ScanResult, ImportResult, DocumentSource, PluginImportOptions } from '../../../../types/plugins';
|
|
2
|
+
declare class ScanPlugin implements DocumentSourcePlugin {
|
|
3
|
+
readonly name = "scan-plugin";
|
|
4
|
+
readonly version = "1.0.0";
|
|
5
|
+
readonly description = "Plugin for testing scan functionality";
|
|
6
|
+
readonly supportedOperations: readonly ["import"];
|
|
7
|
+
testConnection(config: PluginConfig): Promise<boolean>;
|
|
8
|
+
scan(config: PluginConfig, options?: PluginImportOptions): Promise<ScanResult>;
|
|
9
|
+
import(config: PluginConfig, sources: DocumentSource[], targetDir: string): Promise<ImportResult[]>;
|
|
10
|
+
getConfigSchema(): Record<string, any>;
|
|
11
|
+
initialize(config: PluginConfig): Promise<void>;
|
|
12
|
+
destroy(): Promise<void>;
|
|
13
|
+
}
|
|
14
|
+
export default ScanPlugin;
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/__tests__/fixtures/plugins/scan-plugin/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAE9I,cAAM,UAAW,YAAW,oBAAoB;IAC9C,QAAQ,CAAC,IAAI,iBAAiB;IAC9B,QAAQ,CAAC,OAAO,WAAW;IAC3B,QAAQ,CAAC,WAAW,2CAA2C;IAC/D,QAAQ,CAAC,mBAAmB,sBAAuB;IAE7C,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC;IAItD,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,UAAU,CAAC;IA8B9E,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAIzG,eAAe,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAOhC,UAAU,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAC/C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAC/B;AAED,eAAe,UAAU,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
class ScanPlugin {
|
|
4
|
+
constructor() {
|
|
5
|
+
this.name = 'scan-plugin';
|
|
6
|
+
this.version = '1.0.0';
|
|
7
|
+
this.description = 'Plugin for testing scan functionality';
|
|
8
|
+
this.supportedOperations = ['import'];
|
|
9
|
+
}
|
|
10
|
+
async testConnection(config) {
|
|
11
|
+
return true;
|
|
12
|
+
}
|
|
13
|
+
async scan(config, options) {
|
|
14
|
+
const sources = [
|
|
15
|
+
{
|
|
16
|
+
id: 'doc-1',
|
|
17
|
+
name: 'document1.pdf',
|
|
18
|
+
path: '/folder/document1.pdf',
|
|
19
|
+
size: 1024,
|
|
20
|
+
mimeType: 'application/pdf',
|
|
21
|
+
lastModified: new Date('2024-01-01'),
|
|
22
|
+
metadata: { source: 'test' }
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
id: 'doc-2',
|
|
26
|
+
name: 'document2.docx',
|
|
27
|
+
path: '/folder/document2.docx',
|
|
28
|
+
size: 2048,
|
|
29
|
+
mimeType: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
|
|
30
|
+
lastModified: new Date('2024-01-02'),
|
|
31
|
+
metadata: { source: 'test' }
|
|
32
|
+
}
|
|
33
|
+
];
|
|
34
|
+
return {
|
|
35
|
+
sources,
|
|
36
|
+
totalCount: sources.length,
|
|
37
|
+
totalSize: sources.reduce((sum, s) => sum + s.size, 0),
|
|
38
|
+
errors: []
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
async import(config, sources, targetDir) {
|
|
42
|
+
return [];
|
|
43
|
+
}
|
|
44
|
+
getConfigSchema() {
|
|
45
|
+
return {
|
|
46
|
+
type: 'object',
|
|
47
|
+
properties: {}
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
async initialize(config) { }
|
|
51
|
+
async destroy() { }
|
|
52
|
+
}
|
|
53
|
+
exports.default = ScanPlugin;
|
|
54
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/__tests__/fixtures/plugins/scan-plugin/index.ts"],"names":[],"mappings":";;AAEA,MAAM,UAAU;IAAhB;QACW,SAAI,GAAG,aAAa,CAAC;QACrB,YAAO,GAAG,OAAO,CAAC;QAClB,gBAAW,GAAG,uCAAuC,CAAC;QACtD,wBAAmB,GAAG,CAAC,QAAQ,CAAU,CAAC;IAiDrD,CAAC;IA/CC,KAAK,CAAC,cAAc,CAAC,MAAoB;QACvC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,MAAoB,EAAE,OAA6B;QAC5D,MAAM,OAAO,GAAqB;YAChC;gBACE,EAAE,EAAE,OAAO;gBACX,IAAI,EAAE,eAAe;gBACrB,IAAI,EAAE,uBAAuB;gBAC7B,IAAI,EAAE,IAAI;gBACV,QAAQ,EAAE,iBAAiB;gBAC3B,YAAY,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC;gBACpC,QAAQ,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE;aAC7B;YACD;gBACE,EAAE,EAAE,OAAO;gBACX,IAAI,EAAE,gBAAgB;gBACtB,IAAI,EAAE,wBAAwB;gBAC9B,IAAI,EAAE,IAAI;gBACV,QAAQ,EAAE,yEAAyE;gBACnF,YAAY,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC;gBACpC,QAAQ,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE;aAC7B;SACF,CAAC;QAEF,OAAO;YACL,OAAO;YACP,UAAU,EAAE,OAAO,CAAC,MAAM;YAC1B,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YACtD,MAAM,EAAE,EAAE;SACX,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,MAAoB,EAAE,OAAyB,EAAE,SAAiB;QAC7E,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,eAAe;QACb,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,EAAE;SACf,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,MAAoB,IAAkB,CAAC;IACxD,KAAK,CAAC,OAAO,KAAmB,CAAC;CAClC;AAED,kBAAe,UAAU,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { DocumentSourcePlugin, PluginConfig, ScanResult, ImportResult, DocumentSource } from '../../../../types/plugins';
|
|
2
|
+
declare class TestPlugin implements DocumentSourcePlugin {
|
|
3
|
+
readonly name = "test-plugin";
|
|
4
|
+
readonly version = "1.0.0";
|
|
5
|
+
readonly description = "Test plugin for unit tests";
|
|
6
|
+
readonly supportedOperations: readonly ["import"];
|
|
7
|
+
testConnection(config: PluginConfig): Promise<boolean>;
|
|
8
|
+
scan(config: PluginConfig): Promise<ScanResult>;
|
|
9
|
+
import(config: PluginConfig, sources: DocumentSource[], targetDir: string): Promise<ImportResult[]>;
|
|
10
|
+
getConfigSchema(): Record<string, any>;
|
|
11
|
+
initialize(config: PluginConfig): Promise<void>;
|
|
12
|
+
destroy(): Promise<void>;
|
|
13
|
+
}
|
|
14
|
+
export default TestPlugin;
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/__tests__/fixtures/plugins/test-plugin/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAEzH,cAAM,UAAW,YAAW,oBAAoB;IAC9C,QAAQ,CAAC,IAAI,iBAAiB;IAC9B,QAAQ,CAAC,OAAO,WAAW;IAC3B,QAAQ,CAAC,WAAW,gCAAgC;IACpD,QAAQ,CAAC,mBAAmB,sBAAuB;IAE7C,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC;IAItD,IAAI,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC;IAS/C,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAIzG,eAAe,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAOhC,UAAU,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAC/C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAC/B;AAED,eAAe,UAAU,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
class TestPlugin {
|
|
4
|
+
constructor() {
|
|
5
|
+
this.name = 'test-plugin';
|
|
6
|
+
this.version = '1.0.0';
|
|
7
|
+
this.description = 'Test plugin for unit tests';
|
|
8
|
+
this.supportedOperations = ['import'];
|
|
9
|
+
}
|
|
10
|
+
async testConnection(config) {
|
|
11
|
+
return true;
|
|
12
|
+
}
|
|
13
|
+
async scan(config) {
|
|
14
|
+
return {
|
|
15
|
+
sources: [],
|
|
16
|
+
totalCount: 0,
|
|
17
|
+
totalSize: 0,
|
|
18
|
+
errors: []
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
async import(config, sources, targetDir) {
|
|
22
|
+
return [];
|
|
23
|
+
}
|
|
24
|
+
getConfigSchema() {
|
|
25
|
+
return {
|
|
26
|
+
type: 'object',
|
|
27
|
+
properties: {}
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
async initialize(config) { }
|
|
31
|
+
async destroy() { }
|
|
32
|
+
}
|
|
33
|
+
exports.default = TestPlugin;
|
|
34
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/__tests__/fixtures/plugins/test-plugin/index.ts"],"names":[],"mappings":";;AAEA,MAAM,UAAU;IAAhB;QACW,SAAI,GAAG,aAAa,CAAC;QACrB,YAAO,GAAG,OAAO,CAAC;QAClB,gBAAW,GAAG,4BAA4B,CAAC;QAC3C,wBAAmB,GAAG,CAAC,QAAQ,CAAU,CAAC;IA4BrD,CAAC;IA1BC,KAAK,CAAC,cAAc,CAAC,MAAoB;QACvC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,MAAoB;QAC7B,OAAO;YACL,OAAO,EAAE,EAAE;YACX,UAAU,EAAE,CAAC;YACb,SAAS,EAAE,CAAC;YACZ,MAAM,EAAE,EAAE;SACX,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,MAAoB,EAAE,OAAyB,EAAE,SAAiB;QAC7E,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,eAAe;QACb,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,EAAE;SACf,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,MAAoB,IAAkB,CAAC;IACxD,KAAK,CAAC,OAAO,KAAmB,CAAC;CAClC;AAED,kBAAe,UAAU,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { DocumentSourcePlugin, PluginConfig, ScanResult, ImportResult, ExportResult, DocumentSource, PluginImportOptions, PluginExportOptions } from '../../../../types/plugins';
|
|
2
|
+
declare class WorkflowPlugin implements DocumentSourcePlugin {
|
|
3
|
+
readonly name = "workflow-plugin";
|
|
4
|
+
readonly version = "1.0.0";
|
|
5
|
+
readonly description = "Plugin for testing complete workflows";
|
|
6
|
+
readonly supportedOperations: readonly ["import", "export", "both"];
|
|
7
|
+
testConnection(config: PluginConfig): Promise<boolean>;
|
|
8
|
+
scan(config: PluginConfig, options?: PluginImportOptions): Promise<ScanResult>;
|
|
9
|
+
import(config: PluginConfig, sources: DocumentSource[], targetDir: string, options?: PluginImportOptions): Promise<ImportResult[]>;
|
|
10
|
+
export(config: PluginConfig, localSources: DocumentSource[], options?: PluginExportOptions): Promise<ExportResult[]>;
|
|
11
|
+
getConfigSchema(): Record<string, any>;
|
|
12
|
+
initialize(config: PluginConfig): Promise<void>;
|
|
13
|
+
destroy(): Promise<void>;
|
|
14
|
+
}
|
|
15
|
+
export default WorkflowPlugin;
|
|
16
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/__tests__/fixtures/plugins/workflow-plugin/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAEjL,cAAM,cAAe,YAAW,oBAAoB;IAClD,QAAQ,CAAC,IAAI,qBAAqB;IAClC,QAAQ,CAAC,OAAO,WAAW;IAC3B,QAAQ,CAAC,WAAW,2CAA2C;IAC/D,QAAQ,CAAC,mBAAmB,wCAAyC;IAE/D,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC;IAItD,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,UAAU,CAAC;IAkF9E,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAiClI,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAS1H,eAAe,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAShC,UAAU,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAC/C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAC/B;AAED,eAAe,cAAc,CAAC"}
|
|
@@ -0,0 +1,145 @@
|
|
|
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
|
+
class WorkflowPlugin {
|
|
9
|
+
constructor() {
|
|
10
|
+
this.name = 'workflow-plugin';
|
|
11
|
+
this.version = '1.0.0';
|
|
12
|
+
this.description = 'Plugin for testing complete workflows';
|
|
13
|
+
this.supportedOperations = ['import', 'export', 'both'];
|
|
14
|
+
}
|
|
15
|
+
async testConnection(config) {
|
|
16
|
+
return config.valid === true;
|
|
17
|
+
}
|
|
18
|
+
async scan(config, options) {
|
|
19
|
+
const sources = [
|
|
20
|
+
{
|
|
21
|
+
id: 'workflow-doc-1',
|
|
22
|
+
name: 'invoice-001.pdf',
|
|
23
|
+
path: '/accounting/invoices/invoice-001.pdf',
|
|
24
|
+
size: 125000,
|
|
25
|
+
mimeType: 'application/pdf',
|
|
26
|
+
lastModified: new Date('2024-01-15'),
|
|
27
|
+
metadata: {
|
|
28
|
+
department: 'accounting',
|
|
29
|
+
category: 'invoice',
|
|
30
|
+
fiscalYear: '2024'
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
id: 'workflow-doc-2',
|
|
35
|
+
name: 'contract-abc.docx',
|
|
36
|
+
path: '/legal/contracts/contract-abc.docx',
|
|
37
|
+
size: 85000,
|
|
38
|
+
mimeType: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
|
|
39
|
+
lastModified: new Date('2024-02-20'),
|
|
40
|
+
metadata: {
|
|
41
|
+
department: 'legal',
|
|
42
|
+
category: 'contract',
|
|
43
|
+
client: 'ABC Corp'
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
id: 'workflow-doc-3',
|
|
48
|
+
name: 'report-q1.xlsx',
|
|
49
|
+
path: '/finance/reports/report-q1.xlsx',
|
|
50
|
+
size: 450000,
|
|
51
|
+
mimeType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
|
|
52
|
+
lastModified: new Date('2024-03-31'),
|
|
53
|
+
metadata: {
|
|
54
|
+
department: 'finance',
|
|
55
|
+
category: 'report',
|
|
56
|
+
quarter: 'Q1',
|
|
57
|
+
year: '2024'
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
id: 'workflow-doc-4',
|
|
62
|
+
name: 'presentation.pptx',
|
|
63
|
+
path: '/marketing/presentations/presentation.pptx',
|
|
64
|
+
size: 3500000,
|
|
65
|
+
mimeType: 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
|
|
66
|
+
lastModified: new Date('2024-04-10'),
|
|
67
|
+
metadata: {
|
|
68
|
+
department: 'marketing',
|
|
69
|
+
category: 'presentation',
|
|
70
|
+
event: 'Product Launch 2024'
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
id: 'workflow-doc-5',
|
|
75
|
+
name: 'photo.jpg',
|
|
76
|
+
path: '/media/photos/photo.jpg',
|
|
77
|
+
size: 2100000,
|
|
78
|
+
mimeType: 'image/jpeg',
|
|
79
|
+
lastModified: new Date('2024-05-01'),
|
|
80
|
+
metadata: {
|
|
81
|
+
department: 'marketing',
|
|
82
|
+
category: 'media',
|
|
83
|
+
resolution: '4K'
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
];
|
|
87
|
+
// Apply limit if specified
|
|
88
|
+
const limit = options?.limit || sources.length;
|
|
89
|
+
const filteredSources = sources.slice(0, limit);
|
|
90
|
+
return {
|
|
91
|
+
sources: filteredSources,
|
|
92
|
+
totalCount: filteredSources.length,
|
|
93
|
+
totalSize: filteredSources.reduce((sum, s) => sum + s.size, 0),
|
|
94
|
+
errors: []
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
async import(config, sources, targetDir, options) {
|
|
98
|
+
const results = [];
|
|
99
|
+
for (const source of sources) {
|
|
100
|
+
try {
|
|
101
|
+
// Simulate successful download
|
|
102
|
+
const localPath = path_1.default.join(targetDir, source.path);
|
|
103
|
+
const localDir = path_1.default.dirname(localPath);
|
|
104
|
+
// Create directory structure
|
|
105
|
+
await fs_extra_1.default.ensureDir(localDir);
|
|
106
|
+
// Create mock file
|
|
107
|
+
await fs_extra_1.default.writeFile(localPath, `Mock content for ${source.name}`);
|
|
108
|
+
results.push({
|
|
109
|
+
success: true,
|
|
110
|
+
source,
|
|
111
|
+
localPath,
|
|
112
|
+
bytesTransferred: source.size
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
catch (error) {
|
|
116
|
+
results.push({
|
|
117
|
+
success: false,
|
|
118
|
+
source,
|
|
119
|
+
error: error.message
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return results;
|
|
124
|
+
}
|
|
125
|
+
async export(config, localSources, options) {
|
|
126
|
+
return localSources.map(source => ({
|
|
127
|
+
success: true,
|
|
128
|
+
targetPath: (options?.targetPath || '') + '/' + source.path,
|
|
129
|
+
source,
|
|
130
|
+
bytesTransferred: source.size
|
|
131
|
+
}));
|
|
132
|
+
}
|
|
133
|
+
getConfigSchema() {
|
|
134
|
+
return {
|
|
135
|
+
type: 'object',
|
|
136
|
+
properties: {
|
|
137
|
+
valid: { type: 'boolean', required: true }
|
|
138
|
+
}
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
async initialize(config) { }
|
|
142
|
+
async destroy() { }
|
|
143
|
+
}
|
|
144
|
+
exports.default = WorkflowPlugin;
|
|
145
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/__tests__/fixtures/plugins/workflow-plugin/index.ts"],"names":[],"mappings":"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"}
|