@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.
Files changed (341) hide show
  1. package/README.md +115 -34
  2. package/dist/__tests__/fixtures/plugins/connection-plugin/index.d.ts +15 -0
  3. package/dist/__tests__/fixtures/plugins/connection-plugin/index.d.ts.map +1 -0
  4. package/dist/__tests__/fixtures/plugins/connection-plugin/index.js +37 -0
  5. package/dist/__tests__/fixtures/plugins/connection-plugin/index.js.map +1 -0
  6. package/dist/__tests__/fixtures/plugins/scan-plugin/index.d.ts +15 -0
  7. package/dist/__tests__/fixtures/plugins/scan-plugin/index.d.ts.map +1 -0
  8. package/dist/__tests__/fixtures/plugins/scan-plugin/index.js +54 -0
  9. package/dist/__tests__/fixtures/plugins/scan-plugin/index.js.map +1 -0
  10. package/dist/__tests__/fixtures/plugins/test-plugin/index.d.ts +15 -0
  11. package/dist/__tests__/fixtures/plugins/test-plugin/index.d.ts.map +1 -0
  12. package/dist/__tests__/fixtures/plugins/test-plugin/index.js +34 -0
  13. package/dist/__tests__/fixtures/plugins/test-plugin/index.js.map +1 -0
  14. package/dist/__tests__/fixtures/plugins/workflow-plugin/index.d.ts +16 -0
  15. package/dist/__tests__/fixtures/plugins/workflow-plugin/index.d.ts.map +1 -0
  16. package/dist/__tests__/fixtures/plugins/workflow-plugin/index.js +145 -0
  17. package/dist/__tests__/fixtures/plugins/workflow-plugin/index.js.map +1 -0
  18. package/dist/api/api/authentication-api.d.ts +208 -0
  19. package/dist/api/api/authentication-api.d.ts.map +1 -0
  20. package/dist/api/api/authentication-api.js +385 -0
  21. package/dist/api/api/authentication-api.js.map +1 -0
  22. package/dist/api/api/bulk-uploads-api.d.ts +101 -0
  23. package/dist/api/api/bulk-uploads-api.d.ts.map +1 -0
  24. package/dist/api/api/bulk-uploads-api.js +195 -0
  25. package/dist/api/api/bulk-uploads-api.js.map +1 -0
  26. package/dist/api/api/contacts-api.d.ts +246 -0
  27. package/dist/api/api/contacts-api.d.ts.map +1 -0
  28. package/dist/api/api/contacts-api.js +465 -0
  29. package/dist/api/api/contacts-api.js.map +1 -0
  30. package/dist/api/api/documents-api.d.ts +267 -0
  31. package/dist/api/api/documents-api.d.ts.map +1 -0
  32. package/dist/api/api/documents-api.js +506 -0
  33. package/dist/api/api/documents-api.js.map +1 -0
  34. package/dist/api/api/folders-api.d.ts +255 -0
  35. package/dist/api/api/folders-api.d.ts.map +1 -0
  36. package/dist/api/api/folders-api.js +479 -0
  37. package/dist/api/api/folders-api.js.map +1 -0
  38. package/dist/api/api/groups-api.d.ts +246 -0
  39. package/dist/api/api/groups-api.d.ts.map +1 -0
  40. package/dist/api/api/groups-api.js +465 -0
  41. package/dist/api/api/groups-api.js.map +1 -0
  42. package/dist/api/api/permissions-api.d.ts +246 -0
  43. package/dist/api/api/permissions-api.d.ts.map +1 -0
  44. package/dist/api/api/permissions-api.js +465 -0
  45. package/dist/api/api/permissions-api.js.map +1 -0
  46. package/dist/api/api/workspaces-api.d.ts +213 -0
  47. package/dist/api/api/workspaces-api.d.ts.map +1 -0
  48. package/dist/api/api/workspaces-api.js +424 -0
  49. package/dist/api/api/workspaces-api.js.map +1 -0
  50. package/dist/api/api.d.ts +20 -0
  51. package/dist/api/api.d.ts.map +1 -0
  52. package/dist/api/api.js +38 -0
  53. package/dist/api/api.js.map +1 -0
  54. package/dist/api/base.d.ts +43 -0
  55. package/dist/api/base.d.ts.map +1 -0
  56. package/dist/api/base.js +49 -0
  57. package/dist/api/base.js.map +1 -0
  58. package/dist/api/common.d.ts +29 -0
  59. package/dist/api/common.d.ts.map +1 -0
  60. package/dist/api/common.js +109 -0
  61. package/dist/api/common.js.map +1 -0
  62. package/dist/api/configuration.d.ts +99 -0
  63. package/dist/api/configuration.d.ts.map +1 -0
  64. package/dist/api/configuration.js +49 -0
  65. package/dist/api/configuration.js.map +1 -0
  66. package/dist/api/index.d.ts +15 -0
  67. package/dist/api/index.d.ts.map +1 -0
  68. package/dist/api/index.js +33 -0
  69. package/dist/api/index.js.map +1 -0
  70. package/dist/api/models/api-v1-documents-documents-post-request1.d.ts +34 -0
  71. package/dist/api/models/api-v1-documents-documents-post-request1.d.ts.map +1 -0
  72. package/dist/api/models/api-v1-documents-documents-post-request1.js +16 -0
  73. package/dist/api/models/api-v1-documents-documents-post-request1.js.map +1 -0
  74. package/dist/api/models/api-v1-documents-documents-post201-response.d.ts +17 -0
  75. package/dist/api/models/api-v1-documents-documents-post201-response.d.ts.map +1 -0
  76. package/dist/api/models/api-v1-documents-documents-post201-response.js +16 -0
  77. package/dist/api/models/api-v1-documents-documents-post201-response.js.map +1 -0
  78. package/dist/api/models/api-v1-documents-folders-id-get200-response-all-of-items-inner-one-of.d.ts +17 -0
  79. package/dist/api/models/api-v1-documents-folders-id-get200-response-all-of-items-inner-one-of.d.ts.map +1 -0
  80. package/dist/api/models/api-v1-documents-folders-id-get200-response-all-of-items-inner-one-of.js +16 -0
  81. package/dist/api/models/api-v1-documents-folders-id-get200-response-all-of-items-inner-one-of.js.map +1 -0
  82. package/dist/api/models/api-v1-documents-folders-id-get200-response-all-of-items-inner-one-of1.d.ts +17 -0
  83. package/dist/api/models/api-v1-documents-folders-id-get200-response-all-of-items-inner-one-of1.d.ts.map +1 -0
  84. package/dist/api/models/api-v1-documents-folders-id-get200-response-all-of-items-inner-one-of1.js +16 -0
  85. package/dist/api/models/api-v1-documents-folders-id-get200-response-all-of-items-inner-one-of1.js.map +1 -0
  86. package/dist/api/models/api-v1-documents-folders-id-get200-response-all-of-items-inner.d.ts +18 -0
  87. package/dist/api/models/api-v1-documents-folders-id-get200-response-all-of-items-inner.d.ts.map +1 -0
  88. package/dist/api/models/api-v1-documents-folders-id-get200-response-all-of-items-inner.js +16 -0
  89. package/dist/api/models/api-v1-documents-folders-id-get200-response-all-of-items-inner.js.map +1 -0
  90. package/dist/api/models/api-v1-documents-folders-id-get200-response.d.ts +17 -0
  91. package/dist/api/models/api-v1-documents-folders-id-get200-response.d.ts.map +1 -0
  92. package/dist/api/models/api-v1-documents-folders-id-get200-response.js +16 -0
  93. package/dist/api/models/api-v1-documents-folders-id-get200-response.js.map +1 -0
  94. package/dist/api/models/bulk-upload-mutation.d.ts +34 -0
  95. package/dist/api/models/bulk-upload-mutation.d.ts.map +1 -0
  96. package/dist/api/models/bulk-upload-mutation.js +16 -0
  97. package/dist/api/models/bulk-upload-mutation.js.map +1 -0
  98. package/dist/api/models/bulk-upload.d.ts +91 -0
  99. package/dist/api/models/bulk-upload.d.ts.map +1 -0
  100. package/dist/api/models/bulk-upload.js +23 -0
  101. package/dist/api/models/bulk-upload.js.map +1 -0
  102. package/dist/api/models/contact-mutation.d.ts +30 -0
  103. package/dist/api/models/contact-mutation.d.ts.map +1 -0
  104. package/dist/api/models/contact-mutation.js +16 -0
  105. package/dist/api/models/contact-mutation.js.map +1 -0
  106. package/dist/api/models/contact.d.ts +54 -0
  107. package/dist/api/models/contact.d.ts.map +1 -0
  108. package/dist/api/models/contact.js +16 -0
  109. package/dist/api/models/contact.js.map +1 -0
  110. package/dist/api/models/document-document-type.d.ts +19 -0
  111. package/dist/api/models/document-document-type.d.ts.map +1 -0
  112. package/dist/api/models/document-document-type.js +16 -0
  113. package/dist/api/models/document-document-type.js.map +1 -0
  114. package/dist/api/models/document-domain.d.ts +19 -0
  115. package/dist/api/models/document-domain.d.ts.map +1 -0
  116. package/dist/api/models/document-domain.js +16 -0
  117. package/dist/api/models/document-domain.js.map +1 -0
  118. package/dist/api/models/document-folder.d.ts +19 -0
  119. package/dist/api/models/document-folder.d.ts.map +1 -0
  120. package/dist/api/models/document-folder.js +16 -0
  121. package/dist/api/models/document-folder.js.map +1 -0
  122. package/dist/api/models/document-mutation.d.ts +50 -0
  123. package/dist/api/models/document-mutation.d.ts.map +1 -0
  124. package/dist/api/models/document-mutation.js +16 -0
  125. package/dist/api/models/document-mutation.js.map +1 -0
  126. package/dist/api/models/document.d.ts +73 -0
  127. package/dist/api/models/document.d.ts.map +1 -0
  128. package/dist/api/models/document.js +16 -0
  129. package/dist/api/models/document.js.map +1 -0
  130. package/dist/api/models/folder-mutation.d.ts +38 -0
  131. package/dist/api/models/folder-mutation.d.ts.map +1 -0
  132. package/dist/api/models/folder-mutation.js +16 -0
  133. package/dist/api/models/folder-mutation.js.map +1 -0
  134. package/dist/api/models/folder-parent.d.ts +19 -0
  135. package/dist/api/models/folder-parent.d.ts.map +1 -0
  136. package/dist/api/models/folder-parent.js +16 -0
  137. package/dist/api/models/folder-parent.js.map +1 -0
  138. package/dist/api/models/folder.d.ts +65 -0
  139. package/dist/api/models/folder.d.ts.map +1 -0
  140. package/dist/api/models/folder.js +16 -0
  141. package/dist/api/models/folder.js.map +1 -0
  142. package/dist/api/models/group-mutation.d.ts +26 -0
  143. package/dist/api/models/group-mutation.d.ts.map +1 -0
  144. package/dist/api/models/group-mutation.js +16 -0
  145. package/dist/api/models/group-mutation.js.map +1 -0
  146. package/dist/api/models/group.d.ts +38 -0
  147. package/dist/api/models/group.d.ts.map +1 -0
  148. package/dist/api/models/group.js +16 -0
  149. package/dist/api/models/group.js.map +1 -0
  150. package/dist/api/models/index.d.ts +35 -0
  151. package/dist/api/models/index.d.ts.map +1 -0
  152. package/dist/api/models/index.js +51 -0
  153. package/dist/api/models/index.js.map +1 -0
  154. package/dist/api/models/model-error.d.ts +26 -0
  155. package/dist/api/models/model-error.d.ts.map +1 -0
  156. package/dist/api/models/model-error.js +16 -0
  157. package/dist/api/models/model-error.js.map +1 -0
  158. package/dist/api/models/oauth-revoke-post200-response.d.ts +15 -0
  159. package/dist/api/models/oauth-revoke-post200-response.d.ts.map +1 -0
  160. package/dist/api/models/oauth-revoke-post200-response.js +16 -0
  161. package/dist/api/models/oauth-revoke-post200-response.js.map +1 -0
  162. package/dist/api/models/permission-actor.d.ts +20 -0
  163. package/dist/api/models/permission-actor.d.ts.map +1 -0
  164. package/dist/api/models/permission-actor.js +16 -0
  165. package/dist/api/models/permission-actor.js.map +1 -0
  166. package/dist/api/models/permission-mutation.d.ts +44 -0
  167. package/dist/api/models/permission-mutation.d.ts.map +1 -0
  168. package/dist/api/models/permission-mutation.js +22 -0
  169. package/dist/api/models/permission-mutation.js.map +1 -0
  170. package/dist/api/models/permission-permissible.d.ts +20 -0
  171. package/dist/api/models/permission-permissible.d.ts.map +1 -0
  172. package/dist/api/models/permission-permissible.js +16 -0
  173. package/dist/api/models/permission-permissible.js.map +1 -0
  174. package/dist/api/models/permission.d.ts +60 -0
  175. package/dist/api/models/permission.d.ts.map +1 -0
  176. package/dist/api/models/permission.js +22 -0
  177. package/dist/api/models/permission.js.map +1 -0
  178. package/dist/api/models/token-response.d.ts +41 -0
  179. package/dist/api/models/token-response.d.ts.map +1 -0
  180. package/dist/api/models/token-response.js +16 -0
  181. package/dist/api/models/token-response.js.map +1 -0
  182. package/dist/api/models/user.d.ts +18 -0
  183. package/dist/api/models/user.d.ts.map +1 -0
  184. package/dist/api/models/user.js +16 -0
  185. package/dist/api/models/user.js.map +1 -0
  186. package/dist/api/models/workspace-mutation-settings-validation.d.ts +26 -0
  187. package/dist/api/models/workspace-mutation-settings-validation.d.ts.map +1 -0
  188. package/dist/api/models/workspace-mutation-settings-validation.js +16 -0
  189. package/dist/api/models/workspace-mutation-settings-validation.js.map +1 -0
  190. package/dist/api/models/workspace-mutation-settings.d.ts +60 -0
  191. package/dist/api/models/workspace-mutation-settings.d.ts.map +1 -0
  192. package/dist/api/models/workspace-mutation-settings.js +16 -0
  193. package/dist/api/models/workspace-mutation-settings.js.map +1 -0
  194. package/dist/api/models/workspace-mutation.d.ts +44 -0
  195. package/dist/api/models/workspace-mutation.d.ts.map +1 -0
  196. package/dist/api/models/workspace-mutation.js +16 -0
  197. package/dist/api/models/workspace-mutation.js.map +1 -0
  198. package/dist/api/models/workspace-settings-validation.d.ts +26 -0
  199. package/dist/api/models/workspace-settings-validation.d.ts.map +1 -0
  200. package/dist/api/models/workspace-settings-validation.js +16 -0
  201. package/dist/api/models/workspace-settings-validation.js.map +1 -0
  202. package/dist/api/models/workspace-settings.d.ts +60 -0
  203. package/dist/api/models/workspace-settings.d.ts.map +1 -0
  204. package/dist/api/models/workspace-settings.js +16 -0
  205. package/dist/api/models/workspace-settings.js.map +1 -0
  206. package/dist/api/models/workspace.d.ts +62 -0
  207. package/dist/api/models/workspace.d.ts.map +1 -0
  208. package/dist/api/models/workspace.js +16 -0
  209. package/dist/api/models/workspace.js.map +1 -0
  210. package/dist/cli/handlers/command-handlers.d.ts +29 -0
  211. package/dist/cli/handlers/command-handlers.d.ts.map +1 -0
  212. package/dist/cli/handlers/command-handlers.js +261 -0
  213. package/dist/cli/handlers/command-handlers.js.map +1 -0
  214. package/dist/cli/handlers/engine-handlers.d.ts +15 -0
  215. package/dist/cli/handlers/engine-handlers.d.ts.map +1 -0
  216. package/dist/cli/handlers/engine-handlers.js +174 -0
  217. package/dist/cli/handlers/engine-handlers.js.map +1 -0
  218. package/dist/cli/interactive.d.ts +15 -0
  219. package/dist/cli/interactive.d.ts.map +1 -0
  220. package/dist/cli/interactive.js +234 -0
  221. package/dist/cli/interactive.js.map +1 -0
  222. package/dist/cli.js +31 -740
  223. package/dist/cli.js.map +1 -1
  224. package/dist/commands/export.d.ts +1 -1
  225. package/dist/commands/export.d.ts.map +1 -1
  226. package/dist/commands/export.js +1 -1
  227. package/dist/commands/export.js.map +1 -1
  228. package/dist/commands/import.d.ts.map +1 -1
  229. package/dist/commands/import.js +5 -1
  230. package/dist/commands/import.js.map +1 -1
  231. package/dist/index.d.ts +27 -3
  232. package/dist/index.d.ts.map +1 -1
  233. package/dist/index.js +63 -20
  234. package/dist/index.js.map +1 -1
  235. package/dist/services/hubdoc-api.d.ts +26 -6
  236. package/dist/services/hubdoc-api.d.ts.map +1 -1
  237. package/dist/services/hubdoc-api.js +194 -43
  238. package/dist/services/hubdoc-api.js.map +1 -1
  239. package/dist/services/hubdoc-export.d.ts +1 -1
  240. package/dist/services/hubdoc-export.d.ts.map +1 -1
  241. package/dist/services/hubdoc-export.js +1 -1
  242. package/dist/services/hubdoc-export.js.map +1 -1
  243. package/dist/services/oauth-token-service.d.ts +27 -14
  244. package/dist/services/oauth-token-service.d.ts.map +1 -1
  245. package/dist/services/oauth-token-service.js +147 -80
  246. package/dist/services/oauth-token-service.js.map +1 -1
  247. package/dist/services/plugin-import.d.ts +2 -2
  248. package/dist/services/plugin-import.d.ts.map +1 -1
  249. package/dist/services/plugin-import.js +2 -2
  250. package/dist/services/plugin-import.js.map +1 -1
  251. package/dist/services/plugin-manager.d.ts +6 -1
  252. package/dist/services/plugin-manager.d.ts.map +1 -1
  253. package/dist/services/plugin-manager.js +28 -2
  254. package/dist/services/plugin-manager.js.map +1 -1
  255. package/dist/types/index.d.ts +11 -37
  256. package/dist/types/index.d.ts.map +1 -1
  257. package/dist/utils/config.d.ts +30 -1
  258. package/dist/utils/config.d.ts.map +1 -1
  259. package/dist/utils/config.js +187 -40
  260. package/dist/utils/config.js.map +1 -1
  261. package/dist/utils/csv.d.ts.map +1 -1
  262. package/dist/utils/csv.js +14 -3
  263. package/dist/utils/csv.js.map +1 -1
  264. package/package.json +23 -6
  265. package/.env.example +0 -23
  266. package/BAUTECH_HubDoc_Import.pptx +0 -0
  267. package/CHANGELOG.md +0 -134
  268. package/DEMO-DOCUMENTATION.html +0 -356
  269. package/DEMO-DOCUMENTATION.md +0 -411
  270. package/EXPORT-DOCUMENTATION.md +0 -333
  271. package/HUBDOC-API-V2.md +0 -248
  272. package/INSTALL.md +0 -175
  273. package/PACKAGING.md +0 -206
  274. package/PLUGINS.md +0 -328
  275. package/PRESENTATION-CLIENT.md +0 -100
  276. package/README-hubdoc-tool.md +0 -369
  277. package/README-npm.md +0 -238
  278. package/TESTING.md +0 -129
  279. package/config-examples/README.md +0 -36
  280. package/config-examples/alfresco-config.example.json +0 -8
  281. package/config-examples/azure-blob-config.example.json +0 -7
  282. package/config-examples/box-config.example.json +0 -5
  283. package/config-examples/nuxeo-config.example.json +0 -8
  284. package/config-examples/opentext-config.example.json +0 -7
  285. package/config-examples/s3-config.example.json +0 -8
  286. package/config-examples/sharepoint-config.example.json +0 -7
  287. package/demo/README.md +0 -199
  288. package/demo/demo-script.md +0 -284
  289. package/demo/generate-sample-csv.js +0 -351
  290. package/demo/mapping_bautech_15k.csv +0 -1
  291. package/demo/simulate-import.js +0 -273
  292. package/dist/commands/export-v2.d.ts +0 -45
  293. package/dist/commands/export-v2.d.ts.map +0 -1
  294. package/dist/commands/export-v2.js +0 -369
  295. package/dist/commands/export-v2.js.map +0 -1
  296. package/dist/commands/import-v2.d.ts +0 -32
  297. package/dist/commands/import-v2.d.ts.map +0 -1
  298. package/dist/commands/import-v2.js +0 -331
  299. package/dist/commands/import-v2.js.map +0 -1
  300. package/dist/services/hubdoc-api-v2.d.ts +0 -150
  301. package/dist/services/hubdoc-api-v2.d.ts.map +0 -1
  302. package/dist/services/hubdoc-api-v2.js +0 -418
  303. package/dist/services/hubdoc-api-v2.js.map +0 -1
  304. package/dist/services/hubdoc-client.d.ts +0 -246
  305. package/dist/services/hubdoc-client.d.ts.map +0 -1
  306. package/dist/services/hubdoc-client.js +0 -714
  307. package/dist/services/hubdoc-client.js.map +0 -1
  308. package/dist/services/hubdoc-export-service.d.ts +0 -90
  309. package/dist/services/hubdoc-export-service.d.ts.map +0 -1
  310. package/dist/services/hubdoc-export-service.js +0 -443
  311. package/dist/services/hubdoc-export-service.js.map +0 -1
  312. package/dist/services/hubdoc-export-v2.d.ts +0 -77
  313. package/dist/services/hubdoc-export-v2.d.ts.map +0 -1
  314. package/dist/services/hubdoc-export-v2.js +0 -329
  315. package/dist/services/hubdoc-export-v2.js.map +0 -1
  316. package/dist/services/hubdoc-import-service.d.ts +0 -64
  317. package/dist/services/hubdoc-import-service.d.ts.map +0 -1
  318. package/dist/services/hubdoc-import-service.js +0 -374
  319. package/dist/services/hubdoc-import-service.js.map +0 -1
  320. package/docs/README.md +0 -65
  321. package/docs/connectors/alfresco.md +0 -211
  322. package/docs/connectors/aws-s3.md +0 -187
  323. package/docs/connectors/azure-blob.md +0 -195
  324. package/docs/connectors/box.md +0 -115
  325. package/docs/connectors/nuxeo.md +0 -214
  326. package/docs/connectors/opentext.md +0 -234
  327. package/docs/connectors/sharepoint.md +0 -207
  328. package/documentation.html +0 -273
  329. package/jest.config.js +0 -15
  330. package/plugins/core/README.md +0 -122
  331. package/plugins/core/TESTING.md +0 -155
  332. package/plugins/core/plugin.json +0 -26
  333. package/plugins/dropbox/plugin.json +0 -12
  334. package/plugins/filesystem/plugin.json +0 -12
  335. package/plugins/googledrive/plugin.json +0 -12
  336. package/plugins/onedrive/TESTING.md +0 -197
  337. package/plugins/onedrive/plugin.json +0 -12
  338. package/scripts/build-windows-installer.ps1 +0 -132
  339. package/scripts/build-windows-installer.sh +0 -106
  340. package/scripts/prepare-publish.js +0 -62
  341. 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 oauth_token_service_1 = require("./services/oauth-token-service");
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(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
- const csvManager = new csv_1.CsvManager();
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
- const configManager = new config_1.ConfigManager();
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
- const configManager = new config_1.ConfigManager();
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
- // Config command
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
- const configManager = new config_1.ConfigManager();
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
- const configManager = new config_1.ConfigManager();
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
- const configManager = new config_1.ConfigManager();
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
- const configManager = new config_1.ConfigManager();
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