@sinoia/hubdoc-tools 1.0.4 → 1.2.1
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 -740
- 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.d.ts.map +1 -1
- package/dist/commands/import.js +5 -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 +63 -20
- package/dist/index.js.map +1 -1
- package/dist/services/hubdoc-api.d.ts +26 -6
- package/dist/services/hubdoc-api.d.ts.map +1 -1
- package/dist/services/hubdoc-api.js +194 -43
- 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 +6 -1
- package/dist/services/plugin-manager.d.ts.map +1 -1
- package/dist/services/plugin-manager.js +28 -2
- package/dist/services/plugin-manager.js.map +1 -1
- package/dist/types/index.d.ts +11 -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.map +1 -1
- package/dist/utils/csv.js +14 -3
- 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 -134
- 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/dist/cli.js
CHANGED
|
@@ -6,23 +6,26 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
7
|
const commander_1 = require("commander");
|
|
8
8
|
const chalk_1 = __importDefault(require("chalk"));
|
|
9
|
-
const inquirer_1 = __importDefault(require("inquirer"));
|
|
10
9
|
const path_1 = __importDefault(require("path"));
|
|
11
10
|
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
12
|
-
const config_1 = require("./utils/config");
|
|
13
|
-
const csv_1 = require("./utils/csv");
|
|
14
|
-
const import_1 = require("./commands/import");
|
|
15
|
-
const export_1 = require("./commands/export");
|
|
16
|
-
const plugin_import_1 = require("./services/plugin-import");
|
|
17
11
|
const operation_logger_1 = require("./utils/operation-logger");
|
|
18
|
-
const
|
|
12
|
+
const interactive_1 = require("./cli/interactive");
|
|
13
|
+
const engine_handlers_1 = require("./cli/handlers/engine-handlers");
|
|
14
|
+
const command_handlers_1 = require("./cli/handlers/command-handlers");
|
|
15
|
+
// Get version from package.json
|
|
16
|
+
const getVersion = () => {
|
|
17
|
+
const packageJsonPath = path_1.default.join(__dirname, '..', 'package.json');
|
|
18
|
+
const packageJson = fs_extra_1.default.readJsonSync(packageJsonPath);
|
|
19
|
+
return packageJson.version;
|
|
20
|
+
};
|
|
19
21
|
const program = new commander_1.Command();
|
|
20
|
-
const version = require('../package.json').version;
|
|
21
22
|
program
|
|
22
23
|
.name('hubdoc-tool')
|
|
23
24
|
.description('Document import/export tool for HubDoc solution')
|
|
24
|
-
.version(
|
|
25
|
+
.version(getVersion());
|
|
26
|
+
// ============================================================================
|
|
25
27
|
// Main command - engine selection
|
|
28
|
+
// ============================================================================
|
|
26
29
|
program
|
|
27
30
|
.command('run', { isDefault: true })
|
|
28
31
|
.description('Run HubDoc tool with engine selection')
|
|
@@ -39,14 +42,14 @@ program
|
|
|
39
42
|
let selectedEngine = options.engine;
|
|
40
43
|
// Interactive engine selection if requested or no engine specified
|
|
41
44
|
if (options.interactive || (!options.engine || options.engine === 'filesystem')) {
|
|
42
|
-
selectedEngine = await runEngineSelection(options.interactive);
|
|
45
|
+
selectedEngine = await (0, interactive_1.runEngineSelection)(options.interactive);
|
|
43
46
|
}
|
|
44
47
|
console.log(chalk_1.default.blue(`🚀 Starting HubDoc Tool with ${selectedEngine} engine...`));
|
|
45
48
|
logger.log('INFO', 'INIT', selectedEngine, `Starting HubDoc Tool with ${selectedEngine} engine`, {
|
|
46
49
|
options: { ...options, logFile: logger.getLogPath() }
|
|
47
50
|
});
|
|
48
51
|
// Route to appropriate engine handling
|
|
49
|
-
await handleEngineOperation(selectedEngine, options, logger);
|
|
52
|
+
await (0, engine_handlers_1.handleEngineOperation)(selectedEngine, options, logger);
|
|
50
53
|
logger.completeOperation(true);
|
|
51
54
|
console.log(chalk_1.default.green(`✅ Operation completed. Log: ${logger.getLogPath()}`));
|
|
52
55
|
}
|
|
@@ -58,7 +61,9 @@ program
|
|
|
58
61
|
process.exit(1);
|
|
59
62
|
}
|
|
60
63
|
});
|
|
64
|
+
// ============================================================================
|
|
61
65
|
// Generate mapping command
|
|
66
|
+
// ============================================================================
|
|
62
67
|
program
|
|
63
68
|
.command('generate-mapping [source-dir]')
|
|
64
69
|
.alias('gen')
|
|
@@ -70,27 +75,20 @@ Examples:
|
|
|
70
75
|
$ hubdoc-tool generate-mapping ./documents
|
|
71
76
|
$ hubdoc-tool generate-mapping --source /path/to/documents
|
|
72
77
|
$ hubdoc-tool gen --source /home/user/docs --output my-mapping.csv
|
|
73
|
-
|
|
78
|
+
|
|
74
79
|
If no directory is specified, current working directory is used.`)
|
|
75
80
|
.action(async (sourceDir, options) => {
|
|
76
81
|
try {
|
|
77
|
-
|
|
78
|
-
// Determine source directory from argument or option
|
|
79
|
-
const targetDir = sourceDir || options.source || process.cwd();
|
|
80
|
-
const resolvedDir = path_1.default.resolve(targetDir);
|
|
81
|
-
if (!await fs_extra_1.default.pathExists(resolvedDir)) {
|
|
82
|
-
console.error(chalk_1.default.red(`❌ Directory not found: ${targetDir}`));
|
|
83
|
-
process.exit(1);
|
|
84
|
-
}
|
|
85
|
-
console.log(chalk_1.default.blue(`🔍 Scanning directory: ${resolvedDir}`));
|
|
86
|
-
await csvManager.generateMappingFile(resolvedDir, options.output);
|
|
82
|
+
await (0, command_handlers_1.handleGenerateMapping)(sourceDir, options);
|
|
87
83
|
}
|
|
88
84
|
catch (error) {
|
|
89
85
|
console.error(chalk_1.default.red(`❌ Error: ${error.message}`));
|
|
90
86
|
process.exit(1);
|
|
91
87
|
}
|
|
92
88
|
});
|
|
89
|
+
// ============================================================================
|
|
93
90
|
// Import command
|
|
91
|
+
// ============================================================================
|
|
94
92
|
program
|
|
95
93
|
.command('import')
|
|
96
94
|
.description('Import documents to HubDoc')
|
|
@@ -105,82 +103,20 @@ Examples:
|
|
|
105
103
|
$ hubdoc-tool import --source /path/to/documents
|
|
106
104
|
$ hubdoc-tool import --mapping mapping.csv
|
|
107
105
|
$ hubdoc-tool import --interactive
|
|
108
|
-
|
|
106
|
+
|
|
109
107
|
The tool can now import from any directory without being in that directory.`)
|
|
110
108
|
.action(async (options) => {
|
|
111
109
|
try {
|
|
112
|
-
|
|
113
|
-
let config;
|
|
114
|
-
// Load or create configuration
|
|
115
|
-
if (!await configManager.hasConfig()) {
|
|
116
|
-
console.log(chalk_1.default.yellow('⚙️ No configuration found. Running setup wizard...'));
|
|
117
|
-
config = await configManager.runConfigWizard();
|
|
118
|
-
}
|
|
119
|
-
else {
|
|
120
|
-
const loadedConfig = await configManager.loadConfig();
|
|
121
|
-
if (!loadedConfig) {
|
|
122
|
-
console.log(chalk_1.default.red('❌ Failed to load configuration. Please run setup again.'));
|
|
123
|
-
process.exit(1);
|
|
124
|
-
}
|
|
125
|
-
config = loadedConfig;
|
|
126
|
-
console.log(chalk_1.default.green('✅ Configuration loaded'));
|
|
127
|
-
}
|
|
128
|
-
let importOptions;
|
|
129
|
-
// Determine source directory for direct mode
|
|
130
|
-
const sourceDir = options.direct || options.source;
|
|
131
|
-
if (options.interactive || (!sourceDir && !options.mapping)) {
|
|
132
|
-
// Interactive mode
|
|
133
|
-
importOptions = await runInteractiveMode();
|
|
134
|
-
}
|
|
135
|
-
else {
|
|
136
|
-
// Non-interactive mode
|
|
137
|
-
if ((options.direct || options.source) && options.mapping) {
|
|
138
|
-
console.error(chalk_1.default.red('❌ Cannot use both direct import options (--direct/--source) and --mapping'));
|
|
139
|
-
process.exit(1);
|
|
140
|
-
}
|
|
141
|
-
if (options.direct && options.source) {
|
|
142
|
-
console.error(chalk_1.default.red('❌ Cannot use both --direct and --source options'));
|
|
143
|
-
process.exit(1);
|
|
144
|
-
}
|
|
145
|
-
if (sourceDir) {
|
|
146
|
-
if (!await fs_extra_1.default.pathExists(sourceDir)) {
|
|
147
|
-
console.error(chalk_1.default.red(`❌ Directory not found: ${sourceDir}`));
|
|
148
|
-
process.exit(1);
|
|
149
|
-
}
|
|
150
|
-
importOptions = {
|
|
151
|
-
mode: 'direct',
|
|
152
|
-
sourceDir: path_1.default.resolve(sourceDir),
|
|
153
|
-
concurrentJobs: parseInt(options.concurrentJobs) || 1,
|
|
154
|
-
interactive: false
|
|
155
|
-
};
|
|
156
|
-
}
|
|
157
|
-
else if (options.mapping) {
|
|
158
|
-
if (!await fs_extra_1.default.pathExists(options.mapping)) {
|
|
159
|
-
console.error(chalk_1.default.red(`❌ Mapping file not found: ${options.mapping}`));
|
|
160
|
-
process.exit(1);
|
|
161
|
-
}
|
|
162
|
-
importOptions = {
|
|
163
|
-
mode: 'mapping',
|
|
164
|
-
mappingFile: path_1.default.resolve(options.mapping),
|
|
165
|
-
concurrentJobs: parseInt(options.concurrentJobs) || 1,
|
|
166
|
-
interactive: false
|
|
167
|
-
};
|
|
168
|
-
}
|
|
169
|
-
else {
|
|
170
|
-
console.error(chalk_1.default.red('❌ Must specify either --direct or --mapping option'));
|
|
171
|
-
process.exit(1);
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
// Execute import
|
|
175
|
-
const importCommand = new import_1.ImportCommand(config);
|
|
176
|
-
await importCommand.execute(importOptions);
|
|
110
|
+
await (0, command_handlers_1.handleImport)(options);
|
|
177
111
|
}
|
|
178
112
|
catch (error) {
|
|
179
113
|
console.error(chalk_1.default.red(`❌ Import failed: ${error.message}`));
|
|
180
114
|
process.exit(1);
|
|
181
115
|
}
|
|
182
116
|
});
|
|
117
|
+
// ============================================================================
|
|
183
118
|
// Export command
|
|
119
|
+
// ============================================================================
|
|
184
120
|
program
|
|
185
121
|
.command('export')
|
|
186
122
|
.description('Export documents from HubDoc')
|
|
@@ -194,360 +130,22 @@ program
|
|
|
194
130
|
.option('-i, --interactive', 'Interactive mode')
|
|
195
131
|
.action(async (options) => {
|
|
196
132
|
try {
|
|
197
|
-
|
|
198
|
-
let config;
|
|
199
|
-
// Load configuration
|
|
200
|
-
if (!await configManager.hasConfig()) {
|
|
201
|
-
console.log(chalk_1.default.yellow('⚙️ No configuration found. Running setup wizard...'));
|
|
202
|
-
config = await configManager.runConfigWizard();
|
|
203
|
-
}
|
|
204
|
-
else {
|
|
205
|
-
const loadedConfig = await configManager.loadConfig();
|
|
206
|
-
if (!loadedConfig) {
|
|
207
|
-
console.log(chalk_1.default.red('❌ Failed to load configuration. Please run setup again.'));
|
|
208
|
-
process.exit(1);
|
|
209
|
-
}
|
|
210
|
-
config = loadedConfig;
|
|
211
|
-
console.log(chalk_1.default.green('✅ Configuration loaded'));
|
|
212
|
-
}
|
|
213
|
-
let exportOptions;
|
|
214
|
-
if (options.interactive) {
|
|
215
|
-
// Interactive mode
|
|
216
|
-
exportOptions = await runExportInteractiveMode();
|
|
217
|
-
}
|
|
218
|
-
else {
|
|
219
|
-
// Non-interactive mode
|
|
220
|
-
if (options.scan) {
|
|
221
|
-
// Scan mode
|
|
222
|
-
exportOptions = {
|
|
223
|
-
mode: 'scan',
|
|
224
|
-
projectFilter: options.project,
|
|
225
|
-
domainFilter: options.domain,
|
|
226
|
-
mappingFile: options.mapping || 'export-mapping.csv',
|
|
227
|
-
interactive: false
|
|
228
|
-
};
|
|
229
|
-
}
|
|
230
|
-
else {
|
|
231
|
-
// Default: Export mode
|
|
232
|
-
if (!options.mapping && !await fs_extra_1.default.pathExists('export-mapping.csv')) {
|
|
233
|
-
console.error(chalk_1.default.red('❌ Export mapping file not found. Run with --scan first or specify --mapping file.'));
|
|
234
|
-
process.exit(1);
|
|
235
|
-
}
|
|
236
|
-
exportOptions = {
|
|
237
|
-
mode: 'export',
|
|
238
|
-
mappingFile: options.mapping || 'export-mapping.csv',
|
|
239
|
-
outputDir: options.output,
|
|
240
|
-
concurrentJobs: parseInt(options.concurrentJobs) || 1,
|
|
241
|
-
generateXmlMetadata: options.generateXmlMetadata,
|
|
242
|
-
interactive: false
|
|
243
|
-
};
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
// Execute export
|
|
247
|
-
const exportCommand = new export_1.ExportCommand(config);
|
|
248
|
-
await exportCommand.execute(exportOptions);
|
|
133
|
+
await (0, command_handlers_1.handleExport)(options);
|
|
249
134
|
}
|
|
250
135
|
catch (error) {
|
|
251
136
|
console.error(chalk_1.default.red(`❌ Export failed: ${error.message}`));
|
|
252
137
|
process.exit(1);
|
|
253
138
|
}
|
|
254
139
|
});
|
|
255
|
-
//
|
|
256
|
-
program
|
|
257
|
-
.command('config')
|
|
258
|
-
.description('Configure HubDoc API settings')
|
|
259
|
-
.option('--token <token>', 'Set API token directly')
|
|
260
|
-
.action(async (options) => {
|
|
261
|
-
try {
|
|
262
|
-
const configManager = new config_1.ConfigManager();
|
|
263
|
-
if (options.token) {
|
|
264
|
-
// Set token directly
|
|
265
|
-
console.log(chalk_1.default.blue('🔧 Setting API token...'));
|
|
266
|
-
// TODO: Implement direct token setting
|
|
267
|
-
console.log(chalk_1.default.yellow('Direct token setting not yet implemented. Use interactive config for now.'));
|
|
268
|
-
}
|
|
269
|
-
await configManager.runConfigWizard();
|
|
270
|
-
}
|
|
271
|
-
catch (error) {
|
|
272
|
-
console.error(chalk_1.default.red(`❌ Configuration failed: ${error.message}`));
|
|
273
|
-
process.exit(1);
|
|
274
|
-
}
|
|
275
|
-
});
|
|
276
|
-
// Get OAuth token command
|
|
277
|
-
program
|
|
278
|
-
.command('get-token')
|
|
279
|
-
.description('Get OAuth token for CLI usage')
|
|
280
|
-
.argument('<domain>', 'HubDoc domain (e.g., rec.hubdoc.sinoia.cloud)')
|
|
281
|
-
.option('--save', 'Save token to .hubdoc-config.json file automatically')
|
|
282
|
-
.option('--port <number>', 'Local server port for OAuth callback (default: 8888)', '8888')
|
|
283
|
-
.option('--timeout <seconds>', 'OAuth flow timeout in seconds (default: 300)', '300')
|
|
284
|
-
.addHelpText('after', `
|
|
285
|
-
Examples:
|
|
286
|
-
$ hubdoc-tool get-token rec.hubdoc.sinoia.cloud
|
|
287
|
-
$ hubdoc-tool get-token rec.hubdoc.sinoia.cloud --save
|
|
288
|
-
$ hubdoc-tool get-token demo.hubdoc.sinoia.cloud --port 8889 --timeout 600
|
|
289
|
-
|
|
290
|
-
This command will:
|
|
291
|
-
1. Start a local server on the specified port
|
|
292
|
-
2. Open your browser for HubDoc authentication
|
|
293
|
-
3. Retrieve the OAuth token automatically
|
|
294
|
-
4. Optionally save it to .hubdoc-config.json file`)
|
|
295
|
-
.action(async (domain, options) => {
|
|
296
|
-
try {
|
|
297
|
-
const configManager = new config_1.ConfigManager();
|
|
298
|
-
const tokenService = new oauth_token_service_1.OAuthTokenService();
|
|
299
|
-
const tokenOptions = {
|
|
300
|
-
domain,
|
|
301
|
-
save: options.save,
|
|
302
|
-
port: parseInt(options.port),
|
|
303
|
-
timeout: parseInt(options.timeout) * 1000,
|
|
304
|
-
configManager: configManager
|
|
305
|
-
};
|
|
306
|
-
console.log(chalk_1.default.blue(`🔐 Getting OAuth token for: ${domain}`));
|
|
307
|
-
const tokenInfo = await tokenService.getToken(tokenOptions);
|
|
308
|
-
console.log(chalk_1.default.green('\\n✅ Token retrieved successfully!'));
|
|
309
|
-
console.log(chalk_1.default.cyan(`🔑 Token: ${tokenInfo.token.substring(0, 20)}...`));
|
|
310
|
-
console.log(chalk_1.default.gray(`📅 Expires: ${tokenInfo.expires_at}`));
|
|
311
|
-
console.log(chalk_1.default.gray(`🔒 Scopes: ${tokenInfo.scopes.join(', ')}`));
|
|
312
|
-
if (!options.save) {
|
|
313
|
-
console.log(chalk_1.default.yellow('\\n💡 To save this token, run again with --save option'));
|
|
314
|
-
console.log(chalk_1.default.gray(' Or manually add to .hubdoc-config.json:'));
|
|
315
|
-
console.log(chalk_1.default.gray(` {`));
|
|
316
|
-
console.log(chalk_1.default.gray(` "apiUrl": "${tokenInfo.api_url}",`));
|
|
317
|
-
console.log(chalk_1.default.gray(` "token": "${tokenInfo.token}"`));
|
|
318
|
-
console.log(chalk_1.default.gray(` }`));
|
|
319
|
-
}
|
|
320
|
-
}
|
|
321
|
-
catch (error) {
|
|
322
|
-
console.error(chalk_1.default.red(`❌ Failed to get token: ${error.message}`));
|
|
323
|
-
process.exit(1);
|
|
324
|
-
}
|
|
325
|
-
});
|
|
326
|
-
// Revoke token command
|
|
327
|
-
program
|
|
328
|
-
.command('revoke-token')
|
|
329
|
-
.description('Revoke an OAuth token')
|
|
330
|
-
.argument('<domain>', 'HubDoc domain')
|
|
331
|
-
.argument('<token-id>', 'Token ID to revoke')
|
|
332
|
-
.action(async (domain, tokenId) => {
|
|
333
|
-
try {
|
|
334
|
-
const tokenService = new oauth_token_service_1.OAuthTokenService();
|
|
335
|
-
await tokenService.revokeToken(domain, tokenId);
|
|
336
|
-
}
|
|
337
|
-
catch (error) {
|
|
338
|
-
console.error(chalk_1.default.red(`❌ Failed to revoke token: ${error.message}`));
|
|
339
|
-
process.exit(1);
|
|
340
|
-
}
|
|
341
|
-
});
|
|
342
|
-
async function runInteractiveMode() {
|
|
343
|
-
console.log(chalk_1.default.blue('🚀 HubDoc Import Wizard'));
|
|
344
|
-
const questions = [
|
|
345
|
-
{
|
|
346
|
-
type: 'list',
|
|
347
|
-
name: 'mode',
|
|
348
|
-
message: 'Select import mode:',
|
|
349
|
-
choices: [
|
|
350
|
-
{
|
|
351
|
-
name: 'Direct Import - Import all files from a directory',
|
|
352
|
-
value: 'direct'
|
|
353
|
-
},
|
|
354
|
-
{
|
|
355
|
-
name: 'Mapping Import - Use a CSV mapping file',
|
|
356
|
-
value: 'mapping'
|
|
357
|
-
}
|
|
358
|
-
]
|
|
359
|
-
}
|
|
360
|
-
];
|
|
361
|
-
const answers = await inquirer_1.default.prompt(questions);
|
|
362
|
-
if (answers.mode === 'direct') {
|
|
363
|
-
const dirQuestion = await inquirer_1.default.prompt([
|
|
364
|
-
{
|
|
365
|
-
type: 'input',
|
|
366
|
-
name: 'sourceDir',
|
|
367
|
-
message: 'Enter source directory path:',
|
|
368
|
-
default: process.cwd(),
|
|
369
|
-
validate: async (input) => {
|
|
370
|
-
const resolvedPath = path_1.default.resolve(input);
|
|
371
|
-
if (!await fs_extra_1.default.pathExists(resolvedPath)) {
|
|
372
|
-
return `Directory not found: ${input}`;
|
|
373
|
-
}
|
|
374
|
-
return true;
|
|
375
|
-
}
|
|
376
|
-
}
|
|
377
|
-
]);
|
|
378
|
-
const concurrentQuestion = await inquirer_1.default.prompt([
|
|
379
|
-
{
|
|
380
|
-
type: 'number',
|
|
381
|
-
name: 'concurrentJobs',
|
|
382
|
-
message: 'Number of concurrent import jobs:',
|
|
383
|
-
default: 1,
|
|
384
|
-
validate: (input) => input > 0 && input <= 10 || 'Must be between 1 and 10'
|
|
385
|
-
}
|
|
386
|
-
]);
|
|
387
|
-
return {
|
|
388
|
-
mode: 'direct',
|
|
389
|
-
sourceDir: path_1.default.resolve(dirQuestion.sourceDir),
|
|
390
|
-
concurrentJobs: concurrentQuestion.concurrentJobs,
|
|
391
|
-
interactive: true
|
|
392
|
-
};
|
|
393
|
-
}
|
|
394
|
-
else {
|
|
395
|
-
const mappingQuestion = await inquirer_1.default.prompt([
|
|
396
|
-
{
|
|
397
|
-
type: 'input',
|
|
398
|
-
name: 'mappingFile',
|
|
399
|
-
message: 'Enter CSV mapping file path:',
|
|
400
|
-
default: 'mapping.csv',
|
|
401
|
-
validate: async (input) => {
|
|
402
|
-
const resolvedPath = path_1.default.resolve(input);
|
|
403
|
-
if (!await fs_extra_1.default.pathExists(resolvedPath)) {
|
|
404
|
-
return `Mapping file not found: ${input}`;
|
|
405
|
-
}
|
|
406
|
-
return true;
|
|
407
|
-
}
|
|
408
|
-
}
|
|
409
|
-
]);
|
|
410
|
-
const concurrentQuestion = await inquirer_1.default.prompt([
|
|
411
|
-
{
|
|
412
|
-
type: 'number',
|
|
413
|
-
name: 'concurrentJobs',
|
|
414
|
-
message: 'Number of concurrent import jobs:',
|
|
415
|
-
default: 1,
|
|
416
|
-
validate: (input) => input > 0 && input <= 10 || 'Must be between 1 and 10'
|
|
417
|
-
}
|
|
418
|
-
]);
|
|
419
|
-
return {
|
|
420
|
-
mode: 'mapping',
|
|
421
|
-
mappingFile: path_1.default.resolve(mappingQuestion.mappingFile),
|
|
422
|
-
concurrentJobs: concurrentQuestion.concurrentJobs,
|
|
423
|
-
interactive: true
|
|
424
|
-
};
|
|
425
|
-
}
|
|
426
|
-
}
|
|
427
|
-
async function runExportInteractiveMode() {
|
|
428
|
-
console.log(chalk_1.default.blue('📦 HubDoc Export Wizard'));
|
|
429
|
-
const questions = [
|
|
430
|
-
{
|
|
431
|
-
type: 'list',
|
|
432
|
-
name: 'mode',
|
|
433
|
-
message: 'Select export mode:',
|
|
434
|
-
choices: [
|
|
435
|
-
{
|
|
436
|
-
name: 'Scan Mode - Generate export mapping file',
|
|
437
|
-
value: 'scan'
|
|
438
|
-
},
|
|
439
|
-
{
|
|
440
|
-
name: 'Export Mode - Download documents using mapping file',
|
|
441
|
-
value: 'export'
|
|
442
|
-
}
|
|
443
|
-
]
|
|
444
|
-
}
|
|
445
|
-
];
|
|
446
|
-
const answers = await inquirer_1.default.prompt(questions);
|
|
447
|
-
if (answers.mode === 'scan') {
|
|
448
|
-
const scanQuestions = await inquirer_1.default.prompt([
|
|
449
|
-
{
|
|
450
|
-
type: 'input',
|
|
451
|
-
name: 'projectFilter',
|
|
452
|
-
message: 'Filter by project name (optional):',
|
|
453
|
-
default: ''
|
|
454
|
-
},
|
|
455
|
-
{
|
|
456
|
-
type: 'input',
|
|
457
|
-
name: 'domainFilter',
|
|
458
|
-
message: 'Filter by domain (optional):',
|
|
459
|
-
default: ''
|
|
460
|
-
},
|
|
461
|
-
{
|
|
462
|
-
type: 'input',
|
|
463
|
-
name: 'mappingFile',
|
|
464
|
-
message: 'Output mapping file:',
|
|
465
|
-
default: 'export-mapping.csv'
|
|
466
|
-
}
|
|
467
|
-
]);
|
|
468
|
-
return {
|
|
469
|
-
mode: 'scan',
|
|
470
|
-
projectFilter: scanQuestions.projectFilter || undefined,
|
|
471
|
-
domainFilter: scanQuestions.domainFilter || undefined,
|
|
472
|
-
mappingFile: scanQuestions.mappingFile,
|
|
473
|
-
interactive: true
|
|
474
|
-
};
|
|
475
|
-
}
|
|
476
|
-
else {
|
|
477
|
-
const exportQuestions = await inquirer_1.default.prompt([
|
|
478
|
-
{
|
|
479
|
-
type: 'input',
|
|
480
|
-
name: 'mappingFile',
|
|
481
|
-
message: 'Export mapping file:',
|
|
482
|
-
default: 'export-mapping.csv',
|
|
483
|
-
validate: async (input) => {
|
|
484
|
-
const resolvedPath = path_1.default.resolve(input);
|
|
485
|
-
if (!await fs_extra_1.default.pathExists(resolvedPath)) {
|
|
486
|
-
return `Mapping file not found: ${input}`;
|
|
487
|
-
}
|
|
488
|
-
return true;
|
|
489
|
-
}
|
|
490
|
-
},
|
|
491
|
-
{
|
|
492
|
-
type: 'input',
|
|
493
|
-
name: 'outputDir',
|
|
494
|
-
message: 'Output directory:',
|
|
495
|
-
default: './export'
|
|
496
|
-
},
|
|
497
|
-
{
|
|
498
|
-
type: 'confirm',
|
|
499
|
-
name: 'generateXmlMetadata',
|
|
500
|
-
message: 'Generate XML metadata files (*_metadata.xml)?',
|
|
501
|
-
default: false
|
|
502
|
-
}
|
|
503
|
-
]);
|
|
504
|
-
const concurrentQuestion = await inquirer_1.default.prompt([
|
|
505
|
-
{
|
|
506
|
-
type: 'number',
|
|
507
|
-
name: 'concurrentJobs',
|
|
508
|
-
message: 'Number of concurrent export jobs:',
|
|
509
|
-
default: 1,
|
|
510
|
-
validate: (input) => input > 0 && input <= 10 || 'Must be between 1 and 10'
|
|
511
|
-
}
|
|
512
|
-
]);
|
|
513
|
-
return {
|
|
514
|
-
mode: 'export',
|
|
515
|
-
mappingFile: path_1.default.resolve(exportQuestions.mappingFile),
|
|
516
|
-
outputDir: exportQuestions.outputDir,
|
|
517
|
-
concurrentJobs: concurrentQuestion.concurrentJobs,
|
|
518
|
-
generateXmlMetadata: exportQuestions.generateXmlMetadata,
|
|
519
|
-
interactive: true
|
|
520
|
-
};
|
|
521
|
-
}
|
|
522
|
-
}
|
|
140
|
+
// ============================================================================
|
|
523
141
|
// Plugin commands
|
|
142
|
+
// ============================================================================
|
|
524
143
|
program
|
|
525
144
|
.command('plugins')
|
|
526
145
|
.description('Manage document source plugins')
|
|
527
146
|
.action(async () => {
|
|
528
147
|
try {
|
|
529
|
-
|
|
530
|
-
const config = await configManager.loadConfig();
|
|
531
|
-
if (!config) {
|
|
532
|
-
console.log(chalk_1.default.yellow('⚙️ Configuration required. Please run: hubdoc-tool config'));
|
|
533
|
-
process.exit(1);
|
|
534
|
-
}
|
|
535
|
-
const pluginService = new plugin_import_1.PluginImportService(config);
|
|
536
|
-
await pluginService.initialize();
|
|
537
|
-
const pluginManager = pluginService.getPluginManager();
|
|
538
|
-
pluginManager.listPlugins();
|
|
539
|
-
console.log(chalk_1.default.blue('\n🔌 Connections:'));
|
|
540
|
-
const connections = pluginManager.getConnections();
|
|
541
|
-
if (connections.length === 0) {
|
|
542
|
-
console.log(chalk_1.default.gray(' No connections configured'));
|
|
543
|
-
console.log(chalk_1.default.gray(' Use: hubdoc-tool connect <plugin> to create connections'));
|
|
544
|
-
}
|
|
545
|
-
else {
|
|
546
|
-
connections.forEach(conn => {
|
|
547
|
-
const status = conn.isConnected ? chalk_1.default.green('✅ Connected') : chalk_1.default.red('❌ Disconnected');
|
|
548
|
-
console.log(` ${conn.name} (${conn.type}): ${status}`);
|
|
549
|
-
});
|
|
550
|
-
}
|
|
148
|
+
await (0, command_handlers_1.handlePlugins)();
|
|
551
149
|
}
|
|
552
150
|
catch (error) {
|
|
553
151
|
console.error(chalk_1.default.red(`❌ Error: ${error.message}`));
|
|
@@ -563,56 +161,7 @@ program
|
|
|
563
161
|
.option('-i, --interactive', 'Interactive configuration')
|
|
564
162
|
.action(async (plugin, options) => {
|
|
565
163
|
try {
|
|
566
|
-
|
|
567
|
-
const config = await configManager.loadConfig();
|
|
568
|
-
if (!config) {
|
|
569
|
-
console.log(chalk_1.default.yellow('⚙️ Configuration required. Please run: hubdoc-tool config'));
|
|
570
|
-
process.exit(1);
|
|
571
|
-
}
|
|
572
|
-
const pluginService = new plugin_import_1.PluginImportService(config);
|
|
573
|
-
await pluginService.initialize();
|
|
574
|
-
const pluginManager = pluginService.getPluginManager();
|
|
575
|
-
// Check if plugin exists
|
|
576
|
-
const availablePlugin = pluginManager.getPlugin(plugin);
|
|
577
|
-
if (!availablePlugin) {
|
|
578
|
-
console.error(chalk_1.default.red(`❌ Plugin not found: ${plugin}`));
|
|
579
|
-
console.log(chalk_1.default.blue('Available plugins:'));
|
|
580
|
-
pluginManager.getPlugins().forEach(p => {
|
|
581
|
-
console.log(` • ${p.manifest.name}`);
|
|
582
|
-
});
|
|
583
|
-
process.exit(1);
|
|
584
|
-
}
|
|
585
|
-
let connectionConfig = {};
|
|
586
|
-
const connectionName = options.name || `${plugin}-connection-${Date.now()}`;
|
|
587
|
-
if (options.interactive) {
|
|
588
|
-
// Interactive configuration
|
|
589
|
-
console.log(chalk_1.default.blue(`🔧 Configuring ${plugin} connection...`));
|
|
590
|
-
const schema = availablePlugin.plugin.getConfigSchema();
|
|
591
|
-
for (const [key, prop] of Object.entries(schema.properties || {})) {
|
|
592
|
-
if (schema.required?.includes(key)) {
|
|
593
|
-
const propObj = prop; // Type assertion for schema property
|
|
594
|
-
const answer = await inquirer_1.default.prompt([{
|
|
595
|
-
type: 'input',
|
|
596
|
-
name: key,
|
|
597
|
-
message: `Enter ${propObj.description || key}:`,
|
|
598
|
-
validate: (input) => input.trim().length > 0 || 'This field is required'
|
|
599
|
-
}]);
|
|
600
|
-
connectionConfig[key] = answer[key];
|
|
601
|
-
}
|
|
602
|
-
}
|
|
603
|
-
}
|
|
604
|
-
else if (options.config) {
|
|
605
|
-
// Load from file
|
|
606
|
-
connectionConfig = await fs_extra_1.default.readJson(options.config);
|
|
607
|
-
}
|
|
608
|
-
else {
|
|
609
|
-
console.error(chalk_1.default.red('❌ Configuration required. Use --interactive or --config options'));
|
|
610
|
-
process.exit(1);
|
|
611
|
-
}
|
|
612
|
-
// Create connection
|
|
613
|
-
const connectionId = `conn_${Date.now()}`;
|
|
614
|
-
await pluginManager.createConnection(connectionId, connectionName, plugin, connectionConfig);
|
|
615
|
-
console.log(chalk_1.default.green(`✅ Connection created: ${connectionName} (${connectionId})`));
|
|
164
|
+
await (0, command_handlers_1.handleConnect)(plugin, options);
|
|
616
165
|
}
|
|
617
166
|
catch (error) {
|
|
618
167
|
console.error(chalk_1.default.red(`❌ Failed to create connection: ${error.message}`));
|
|
@@ -629,25 +178,7 @@ program
|
|
|
629
178
|
.option('--mime-types <types>', 'Comma-separated MIME types filter')
|
|
630
179
|
.action(async (connectionId, options) => {
|
|
631
180
|
try {
|
|
632
|
-
|
|
633
|
-
const config = await configManager.loadConfig();
|
|
634
|
-
if (!config) {
|
|
635
|
-
console.log(chalk_1.default.yellow('⚙️ Configuration required. Please run: hubdoc-tool config'));
|
|
636
|
-
process.exit(1);
|
|
637
|
-
}
|
|
638
|
-
const pluginService = new plugin_import_1.PluginImportService(config);
|
|
639
|
-
await pluginService.initialize();
|
|
640
|
-
const scanOptions = {};
|
|
641
|
-
if (options.path || options.maxSize || options.mimeTypes) {
|
|
642
|
-
scanOptions.filters = {};
|
|
643
|
-
if (options.path)
|
|
644
|
-
scanOptions.filters.path = options.path;
|
|
645
|
-
if (options.maxSize)
|
|
646
|
-
scanOptions.filters.maxSize = parseInt(options.maxSize);
|
|
647
|
-
if (options.mimeTypes)
|
|
648
|
-
scanOptions.filters.mimeTypes = options.mimeTypes.split(',').map((t) => t.trim());
|
|
649
|
-
}
|
|
650
|
-
await pluginService.generatePluginMapping(connectionId, options.output, scanOptions);
|
|
181
|
+
await (0, command_handlers_1.handlePluginScan)(connectionId, options);
|
|
651
182
|
}
|
|
652
183
|
catch (error) {
|
|
653
184
|
console.error(chalk_1.default.red(`❌ Plugin scan failed: ${error.message}`));
|
|
@@ -661,252 +192,12 @@ program
|
|
|
661
192
|
.option('--temp-dir <dir>', 'Temporary directory for downloads')
|
|
662
193
|
.action(async (mappingFile, options) => {
|
|
663
194
|
try {
|
|
664
|
-
|
|
665
|
-
const config = await configManager.loadConfig();
|
|
666
|
-
if (!config) {
|
|
667
|
-
console.log(chalk_1.default.yellow('⚙️ Configuration required. Please run: hubdoc-tool config'));
|
|
668
|
-
process.exit(1);
|
|
669
|
-
}
|
|
670
|
-
if (!await fs_extra_1.default.pathExists(mappingFile)) {
|
|
671
|
-
console.error(chalk_1.default.red(`❌ Mapping file not found: ${mappingFile}`));
|
|
672
|
-
process.exit(1);
|
|
673
|
-
}
|
|
674
|
-
const pluginService = new plugin_import_1.PluginImportService(config);
|
|
675
|
-
await pluginService.initialize();
|
|
676
|
-
await pluginService.importFromPluginMapping(mappingFile, options.tempDir);
|
|
195
|
+
await (0, command_handlers_1.handlePluginImport)(mappingFile, options);
|
|
677
196
|
}
|
|
678
197
|
catch (error) {
|
|
679
198
|
console.error(chalk_1.default.red(`❌ Plugin import failed: ${error.message}`));
|
|
680
199
|
process.exit(1);
|
|
681
200
|
}
|
|
682
201
|
});
|
|
683
|
-
async function runEngineSelection(forceInteractive = false) {
|
|
684
|
-
if (!forceInteractive) {
|
|
685
|
-
// Default to filesystem if not interactive
|
|
686
|
-
console.log(chalk_1.default.gray('Using filesystem engine by default. Use --interactive to select engine.'));
|
|
687
|
-
return 'filesystem';
|
|
688
|
-
}
|
|
689
|
-
console.log(chalk_1.default.blue('🔧 Engine Selection'));
|
|
690
|
-
const engineChoices = [
|
|
691
|
-
{
|
|
692
|
-
name: 'Filesystem - Import local files and directories',
|
|
693
|
-
value: 'filesystem'
|
|
694
|
-
},
|
|
695
|
-
{
|
|
696
|
-
name: 'Core - Import from Core document management system',
|
|
697
|
-
value: 'core'
|
|
698
|
-
},
|
|
699
|
-
{
|
|
700
|
-
name: 'OneDrive - Import from Microsoft OneDrive',
|
|
701
|
-
value: 'onedrive'
|
|
702
|
-
},
|
|
703
|
-
{
|
|
704
|
-
name: 'Google Drive - Import from Google Drive',
|
|
705
|
-
value: 'googledrive'
|
|
706
|
-
},
|
|
707
|
-
{
|
|
708
|
-
name: 'Dropbox - Import from Dropbox',
|
|
709
|
-
value: 'dropbox'
|
|
710
|
-
},
|
|
711
|
-
{
|
|
712
|
-
name: 'Box - Import from Box Cloud Storage',
|
|
713
|
-
value: 'box'
|
|
714
|
-
},
|
|
715
|
-
{
|
|
716
|
-
name: 'AWS S3 - Import from Amazon S3',
|
|
717
|
-
value: 's3'
|
|
718
|
-
},
|
|
719
|
-
{
|
|
720
|
-
name: 'Azure Blob - Import from Azure Blob Storage',
|
|
721
|
-
value: 'azure-blob'
|
|
722
|
-
},
|
|
723
|
-
{
|
|
724
|
-
name: 'Alfresco - Import from Alfresco ECM',
|
|
725
|
-
value: 'alfresco'
|
|
726
|
-
},
|
|
727
|
-
{
|
|
728
|
-
name: 'SharePoint - Import from SharePoint Online',
|
|
729
|
-
value: 'sharepoint'
|
|
730
|
-
},
|
|
731
|
-
{
|
|
732
|
-
name: 'Nuxeo - Import from Nuxeo Platform',
|
|
733
|
-
value: 'nuxeo'
|
|
734
|
-
},
|
|
735
|
-
{
|
|
736
|
-
name: 'OpenText - Import from OpenText Content Server',
|
|
737
|
-
value: 'opentext'
|
|
738
|
-
}
|
|
739
|
-
];
|
|
740
|
-
const answer = await inquirer_1.default.prompt([
|
|
741
|
-
{
|
|
742
|
-
type: 'list',
|
|
743
|
-
name: 'engine',
|
|
744
|
-
message: 'Select document source engine:',
|
|
745
|
-
choices: engineChoices,
|
|
746
|
-
default: 'filesystem'
|
|
747
|
-
}
|
|
748
|
-
]);
|
|
749
|
-
return answer.engine;
|
|
750
|
-
}
|
|
751
|
-
async function handleEngineOperation(engine, options, logger) {
|
|
752
|
-
const configManager = new config_1.ConfigManager();
|
|
753
|
-
switch (engine) {
|
|
754
|
-
case 'filesystem':
|
|
755
|
-
await handleFilesystemEngine(options, configManager, logger);
|
|
756
|
-
break;
|
|
757
|
-
case 'onedrive':
|
|
758
|
-
case 'googledrive':
|
|
759
|
-
case 'dropbox':
|
|
760
|
-
case 'core':
|
|
761
|
-
case 'box':
|
|
762
|
-
case 's3':
|
|
763
|
-
case 'azure-blob':
|
|
764
|
-
case 'alfresco':
|
|
765
|
-
case 'sharepoint':
|
|
766
|
-
case 'nuxeo':
|
|
767
|
-
case 'opentext':
|
|
768
|
-
await handlePluginEngine(engine, options, configManager, logger);
|
|
769
|
-
break;
|
|
770
|
-
default:
|
|
771
|
-
throw new Error(`Unsupported engine: ${engine}`);
|
|
772
|
-
}
|
|
773
|
-
}
|
|
774
|
-
async function handleFilesystemEngine(options, configManager, logger) {
|
|
775
|
-
logger.startOperation('filesystem', 'import');
|
|
776
|
-
// Handle filesystem engine (existing direct import logic)
|
|
777
|
-
let sourceDir = options.source || process.cwd();
|
|
778
|
-
if (!sourceDir) {
|
|
779
|
-
const dirAnswer = await inquirer_1.default.prompt([
|
|
780
|
-
{
|
|
781
|
-
type: 'input',
|
|
782
|
-
name: 'sourceDir',
|
|
783
|
-
message: 'Enter source directory path:',
|
|
784
|
-
default: process.cwd(),
|
|
785
|
-
validate: async (input) => {
|
|
786
|
-
const resolvedPath = path_1.default.resolve(input);
|
|
787
|
-
if (!await fs_extra_1.default.pathExists(resolvedPath)) {
|
|
788
|
-
return `Directory not found: ${input}`;
|
|
789
|
-
}
|
|
790
|
-
return true;
|
|
791
|
-
}
|
|
792
|
-
}
|
|
793
|
-
]);
|
|
794
|
-
sourceDir = dirAnswer.sourceDir;
|
|
795
|
-
}
|
|
796
|
-
const resolvedDir = path_1.default.resolve(sourceDir);
|
|
797
|
-
if (!await fs_extra_1.default.pathExists(resolvedDir)) {
|
|
798
|
-
throw new Error(`Directory not found: ${sourceDir}`);
|
|
799
|
-
}
|
|
800
|
-
logger.log('INFO', 'SCAN', 'filesystem', `Scanning directory: ${resolvedDir}`);
|
|
801
|
-
// Load or create HubDoc configuration
|
|
802
|
-
let config;
|
|
803
|
-
if (!await configManager.hasConfig()) {
|
|
804
|
-
console.log(chalk_1.default.yellow('⚙️ No configuration found. Running setup wizard...'));
|
|
805
|
-
logger.log('INFO', 'INIT', 'filesystem', 'Running HubDoc configuration wizard');
|
|
806
|
-
config = await configManager.runConfigWizard();
|
|
807
|
-
}
|
|
808
|
-
else {
|
|
809
|
-
const loadedConfig = await configManager.loadConfig();
|
|
810
|
-
if (!loadedConfig) {
|
|
811
|
-
throw new Error('Failed to load configuration');
|
|
812
|
-
}
|
|
813
|
-
config = loadedConfig;
|
|
814
|
-
logger.log('INFO', 'INIT', 'filesystem', 'HubDoc configuration loaded');
|
|
815
|
-
}
|
|
816
|
-
logger.startImport('filesystem', 1); // We don't know count yet for filesystem
|
|
817
|
-
// Execute filesystem import
|
|
818
|
-
const importOptions = {
|
|
819
|
-
mode: 'direct',
|
|
820
|
-
sourceDir: resolvedDir,
|
|
821
|
-
interactive: true
|
|
822
|
-
};
|
|
823
|
-
const importCommand = new import_1.ImportCommand(config);
|
|
824
|
-
await importCommand.execute(importOptions);
|
|
825
|
-
logger.log('SUCCESS', 'IMPORT', 'filesystem', 'Filesystem import completed');
|
|
826
|
-
}
|
|
827
|
-
async function handlePluginEngine(engine, options, configManager, logger) {
|
|
828
|
-
logger.startOperation(engine, 'scan');
|
|
829
|
-
// Load configuration
|
|
830
|
-
const config = await configManager.loadConfig();
|
|
831
|
-
if (!config) {
|
|
832
|
-
console.log(chalk_1.default.yellow('⚙️ Configuration required. Please run: hubdoc-tool config'));
|
|
833
|
-
process.exit(1);
|
|
834
|
-
}
|
|
835
|
-
logger.log('INFO', 'INIT', engine, 'Initializing plugin service');
|
|
836
|
-
const pluginService = new plugin_import_1.PluginImportService(config);
|
|
837
|
-
await pluginService.initialize();
|
|
838
|
-
const pluginManager = pluginService.getPluginManager();
|
|
839
|
-
// Check if plugin exists
|
|
840
|
-
const availablePlugin = pluginManager.getPlugin(engine);
|
|
841
|
-
if (!availablePlugin) {
|
|
842
|
-
throw new Error(`Plugin not found: ${engine}`);
|
|
843
|
-
}
|
|
844
|
-
// Check for existing connections
|
|
845
|
-
const connections = pluginManager.getConnections().filter(conn => conn.type === engine);
|
|
846
|
-
let connectionId;
|
|
847
|
-
if (connections.length === 0) {
|
|
848
|
-
console.log(chalk_1.default.yellow(`⚙️ No ${engine} connection found. Creating one...`));
|
|
849
|
-
logger.log('INFO', 'INIT', engine, 'Creating new connection');
|
|
850
|
-
// Interactive connection setup
|
|
851
|
-
const schema = availablePlugin.plugin.getConfigSchema();
|
|
852
|
-
const connectionConfig = {};
|
|
853
|
-
for (const [key, prop] of Object.entries(schema.properties || {})) {
|
|
854
|
-
if (schema.required?.includes(key)) {
|
|
855
|
-
const propObj = prop;
|
|
856
|
-
const answer = await inquirer_1.default.prompt([{
|
|
857
|
-
type: propObj.type === 'number' ? 'number' : 'input',
|
|
858
|
-
name: key,
|
|
859
|
-
message: `Enter ${propObj.description || key}:`,
|
|
860
|
-
validate: (input) => {
|
|
861
|
-
if (propObj.type === 'number') {
|
|
862
|
-
return !isNaN(input) || 'Must be a number';
|
|
863
|
-
}
|
|
864
|
-
return input?.toString().trim().length > 0 || 'This field is required';
|
|
865
|
-
}
|
|
866
|
-
}]);
|
|
867
|
-
connectionConfig[key] = answer[key];
|
|
868
|
-
}
|
|
869
|
-
}
|
|
870
|
-
// Add limit if provided
|
|
871
|
-
if (options.limit) {
|
|
872
|
-
connectionConfig.limit = parseInt(options.limit);
|
|
873
|
-
}
|
|
874
|
-
// Create connection
|
|
875
|
-
connectionId = `conn_${engine}_${Date.now()}`;
|
|
876
|
-
const connectionName = `${engine}-connection`;
|
|
877
|
-
await pluginManager.createConnection(connectionId, connectionName, engine, connectionConfig);
|
|
878
|
-
console.log(chalk_1.default.green(`✅ Connection created: ${connectionName}`));
|
|
879
|
-
logger.log('SUCCESS', 'INIT', engine, `Connection created: ${connectionName}`);
|
|
880
|
-
}
|
|
881
|
-
else {
|
|
882
|
-
connectionId = connections[0].id;
|
|
883
|
-
console.log(chalk_1.default.green(`✅ Using existing connection: ${connections[0].name}`));
|
|
884
|
-
logger.log('INFO', 'INIT', engine, `Using existing connection: ${connections[0].name}`);
|
|
885
|
-
}
|
|
886
|
-
// Generate mapping and import
|
|
887
|
-
const mappingFile = `${engine}-mapping.csv`;
|
|
888
|
-
const scanOptions = {};
|
|
889
|
-
if (options.limit) {
|
|
890
|
-
scanOptions.limit = parseInt(options.limit);
|
|
891
|
-
}
|
|
892
|
-
if (options.concurrentJobs) {
|
|
893
|
-
scanOptions.concurrent = parseInt(options.concurrentJobs);
|
|
894
|
-
}
|
|
895
|
-
logger.startScan(engine, scanOptions);
|
|
896
|
-
console.log(chalk_1.default.blue(`🔍 Scanning ${engine} documents...`));
|
|
897
|
-
const scanStart = Date.now();
|
|
898
|
-
await pluginService.generatePluginMapping(connectionId, mappingFile, scanOptions);
|
|
899
|
-
const scanDuration = Date.now() - scanStart;
|
|
900
|
-
logger.completeScan(engine, {
|
|
901
|
-
documentsFound: 0, // TODO: Get actual count from plugin service
|
|
902
|
-
totalSize: 0, // TODO: Get actual size from plugin service
|
|
903
|
-
duration: scanDuration
|
|
904
|
-
});
|
|
905
|
-
logger.startImport(engine, 0); // TODO: Get document count
|
|
906
|
-
console.log(chalk_1.default.blue(`📥 Importing documents from ${engine}...`));
|
|
907
|
-
await pluginService.importFromPluginMapping(mappingFile);
|
|
908
|
-
logger.log('SUCCESS', 'IMPORT', engine, `Import completed from ${engine} engine`);
|
|
909
|
-
console.log(chalk_1.default.green(`✅ Import completed from ${engine} engine!`));
|
|
910
|
-
}
|
|
911
202
|
program.parse();
|
|
912
203
|
//# sourceMappingURL=cli.js.map
|