@sinoia/hubdoc-tools 1.0.3 → 1.2.0

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