node-hp-scan-to 1.6.1 → 1.7.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 (170) hide show
  1. package/README.md +247 -143
  2. package/dist/Destination.js +17 -7
  3. package/dist/Destination.js.map +1 -1
  4. package/dist/DeviceCapabilities.d.ts +2 -0
  5. package/dist/DeviceCapabilities.js.map +1 -1
  6. package/dist/DiscoveryTree.js.map +1 -1
  7. package/dist/Event.js.map +1 -1
  8. package/dist/EventTable.js.map +1 -1
  9. package/dist/HPApi.js +23 -15
  10. package/dist/HPApi.js.map +1 -1
  11. package/dist/InputSource.js +1 -1
  12. package/dist/InputSource.js.map +1 -1
  13. package/dist/Job.js +6 -6
  14. package/dist/Job.js.map +1 -1
  15. package/dist/JpegUtil.d.ts +0 -2
  16. package/dist/JpegUtil.js.map +1 -1
  17. package/dist/KnownShortcut.js.map +1 -1
  18. package/dist/PathHelper.js +2 -0
  19. package/dist/PathHelper.js.map +1 -1
  20. package/dist/ScanCaps.d.ts +6 -0
  21. package/dist/ScanCaps.js +18 -0
  22. package/dist/ScanCaps.js.map +1 -1
  23. package/dist/ScanContent.js.map +1 -1
  24. package/dist/ScanJobManifest.js.map +1 -1
  25. package/dist/ScanJobSettings.js.map +1 -1
  26. package/dist/ScanStatus.js.map +1 -1
  27. package/dist/WalkupScanDestination.js.map +1 -1
  28. package/dist/WalkupScanDestinations.js.map +1 -1
  29. package/dist/WalkupScanManifest.js.map +1 -1
  30. package/dist/WalkupScanToCompCaps.js.map +1 -1
  31. package/dist/WalkupScanToCompDestination.js.map +1 -1
  32. package/dist/WalkupScanToCompDestinations.js.map +1 -1
  33. package/dist/WalkupScanToCompEvent.js.map +1 -1
  34. package/dist/WalkupScanToCompManifest.js.map +1 -1
  35. package/dist/commitInfo.json +1 -1
  36. package/dist/delay.js +1 -2
  37. package/dist/delay.js.map +1 -1
  38. package/dist/healthcheck.js +1 -2
  39. package/dist/healthcheck.js.map +1 -1
  40. package/dist/index.js +22 -12
  41. package/dist/index.js.map +1 -1
  42. package/dist/listening.js +5 -6
  43. package/dist/listening.js.map +1 -1
  44. package/dist/nextcloud/NextcloudConfig.js.map +1 -1
  45. package/dist/nextcloud/nextcloud.js +4 -6
  46. package/dist/nextcloud/nextcloud.js.map +1 -1
  47. package/dist/paperless/PaperlessConfig.js.map +1 -1
  48. package/dist/paperless/paperless.js +4 -5
  49. package/dist/paperless/paperless.js.map +1 -1
  50. package/dist/pdfProcessing.js +4 -5
  51. package/dist/pdfProcessing.js.map +1 -1
  52. package/dist/postProcessing.js +2 -4
  53. package/dist/postProcessing.js.map +1 -1
  54. package/dist/readDeviceCapabilities.js +24 -20
  55. package/dist/readDeviceCapabilities.js.map +1 -1
  56. package/dist/scanProcessing.d.ts +2 -2
  57. package/dist/scanProcessing.js +28 -30
  58. package/dist/scanProcessing.js.map +1 -1
  59. package/package.json +19 -17
  60. package/dist/PaperlessCOnfig.d.ts +0 -7
  61. package/dist/PaperlessCOnfig.js +0 -3
  62. package/dist/PaperlessCOnfig.js.map +0 -1
  63. package/dist/PaperlessConfig.d.ts +0 -7
  64. package/dist/PaperlessConfig.js +0 -3
  65. package/dist/PaperlessConfig.js.map +0 -1
  66. package/dist/paperless.d.ts +0 -7
  67. package/dist/paperless.js +0 -83
  68. package/dist/paperless.js.map +0 -1
  69. package/dist/test/DiscoveryTree.test.d.ts +0 -1
  70. package/dist/test/DiscoveryTree.test.js +0 -68
  71. package/dist/test/DiscoveryTree.test.js.map +0 -1
  72. package/dist/test/EtagEventTable.test.d.ts +0 -1
  73. package/dist/test/EtagEventTable.test.js +0 -93
  74. package/dist/test/EtagEventTable.test.js.map +0 -1
  75. package/dist/test/Job.test.d.ts +0 -1
  76. package/dist/test/Job.test.js +0 -104
  77. package/dist/test/Job.test.js.map +0 -1
  78. package/dist/test/JpegUtil.test.d.ts +0 -1
  79. package/dist/test/JpegUtil.test.js +0 -53
  80. package/dist/test/JpegUtil.test.js.map +0 -1
  81. package/dist/test/PathHelper.test.d.ts +0 -1
  82. package/dist/test/PathHelper.test.js +0 -98
  83. package/dist/test/PathHelper.test.js.map +0 -1
  84. package/dist/test/ScanCaps.test.d.ts +0 -1
  85. package/dist/test/ScanCaps.test.js +0 -96
  86. package/dist/test/ScanCaps.test.js.map +0 -1
  87. package/dist/test/ScanJobManifest.test.d.ts +0 -1
  88. package/dist/test/ScanJobManifest.test.js +0 -56
  89. package/dist/test/ScanJobManifest.test.js.map +0 -1
  90. package/dist/test/ScanJobSettings.test.d.ts +0 -1
  91. package/dist/test/ScanJobSettings.test.js +0 -59
  92. package/dist/test/ScanJobSettings.test.js.map +0 -1
  93. package/dist/test/ScanStatus.test.d.ts +0 -1
  94. package/dist/test/ScanStatus.test.js +0 -75
  95. package/dist/test/ScanStatus.test.js.map +0 -1
  96. package/dist/test/WalkupScanDestination.test.d.ts +0 -1
  97. package/dist/test/WalkupScanDestination.test.js +0 -80
  98. package/dist/test/WalkupScanDestination.test.js.map +0 -1
  99. package/dist/test/WalkupScanDestinations.test.d.ts +0 -1
  100. package/dist/test/WalkupScanDestinations.test.js +0 -68
  101. package/dist/test/WalkupScanDestinations.test.js.map +0 -1
  102. package/dist/test/WalkupScanManifest.test.d.ts +0 -1
  103. package/dist/test/WalkupScanManifest.test.js +0 -46
  104. package/dist/test/WalkupScanManifest.test.js.map +0 -1
  105. package/dist/test/WalkupScanToCompCaps.test.d.ts +0 -1
  106. package/dist/test/WalkupScanToCompCaps.test.js +0 -56
  107. package/dist/test/WalkupScanToCompCaps.test.js.map +0 -1
  108. package/dist/test/WalkupScanToCompDestination.test.d.ts +0 -1
  109. package/dist/test/WalkupScanToCompDestination.test.js +0 -58
  110. package/dist/test/WalkupScanToCompDestination.test.js.map +0 -1
  111. package/dist/test/WalkupScanToCompDestinations.test.d.ts +0 -1
  112. package/dist/test/WalkupScanToCompDestinations.test.js +0 -58
  113. package/dist/test/WalkupScanToCompDestinations.test.js.map +0 -1
  114. package/dist/test/WalkupScanToCompEvent.test.d.ts +0 -1
  115. package/dist/test/WalkupScanToCompEvent.test.js +0 -46
  116. package/dist/test/WalkupScanToCompEvent.test.js.map +0 -1
  117. package/dist/test/WalkupScanToCompManifest.test.d.ts +0 -1
  118. package/dist/test/WalkupScanToCompManifest.test.js +0 -46
  119. package/dist/test/WalkupScanToCompManifest.test.js.map +0 -1
  120. package/dist/test/clean.d.ts +0 -1
  121. package/dist/test/clean.js +0 -21
  122. package/dist/test/clean.js.map +0 -1
  123. package/dist/test/nextcloud.test.d.ts +0 -1
  124. package/dist/test/nextcloud.test.js +0 -165
  125. package/dist/test/nextcloud.test.js.map +0 -1
  126. package/dist/test/scanProcessing.test.d.ts +0 -1
  127. package/dist/test/scanProcessing.test.js +0 -105
  128. package/dist/test/scanProcessing.test.js.map +0 -1
  129. package/dist/test-bonjour.d.ts +0 -1
  130. package/dist/test-bonjour.js +0 -20
  131. package/dist/test-bonjour.js.map +0 -1
  132. package/nodemon.json +0 -6
  133. package/src/Destination.ts +0 -63
  134. package/src/DeviceCapabilities.ts +0 -8
  135. package/src/DiscoveryTree.ts +0 -56
  136. package/src/Event.ts +0 -55
  137. package/src/EventTable.ts +0 -45
  138. package/src/HPApi.ts +0 -510
  139. package/src/InputSource.ts +0 -4
  140. package/src/Job.ts +0 -134
  141. package/src/JpegUtil.ts +0 -327
  142. package/src/KnownShortcut.ts +0 -6
  143. package/src/PathHelper.ts +0 -106
  144. package/src/ScanCaps.ts +0 -81
  145. package/src/ScanContent.ts +0 -15
  146. package/src/ScanJobManifest.ts +0 -56
  147. package/src/ScanJobSettings.ts +0 -84
  148. package/src/ScanStatus.ts +0 -48
  149. package/src/WalkupScanDestination.ts +0 -74
  150. package/src/WalkupScanDestinations.ts +0 -46
  151. package/src/WalkupScanManifest.ts +0 -59
  152. package/src/WalkupScanToCompCaps.ts +0 -36
  153. package/src/WalkupScanToCompDestination.ts +0 -79
  154. package/src/WalkupScanToCompDestinations.ts +0 -47
  155. package/src/WalkupScanToCompEvent.ts +0 -30
  156. package/src/WalkupScanToCompManifest.ts +0 -59
  157. package/src/commitInfo.json +0 -3
  158. package/src/delay.ts +0 -5
  159. package/src/healthcheck.ts +0 -17
  160. package/src/index.ts +0 -588
  161. package/src/listening.ts +0 -144
  162. package/src/nextcloud/NextcloudConfig.ts +0 -7
  163. package/src/nextcloud/nextcloud.ts +0 -146
  164. package/src/paperless/PaperlessConfig.ts +0 -7
  165. package/src/paperless/paperless.ts +0 -110
  166. package/src/pdfProcessing.ts +0 -67
  167. package/src/postProcessing.ts +0 -165
  168. package/src/readDeviceCapabilities.ts +0 -52
  169. package/src/scanProcessing.ts +0 -570
  170. package/tsconfig.json +0 -34
package/dist/delay.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"delay.js","sourceRoot":"","sources":["../src/delay.ts"],"names":[],"mappings":";;;AAAA,SAAgB,KAAK,CAAC,CAAS;IAC7B,OAAO,IAAI,OAAO,CAAC,UAAU,OAAO;QAClC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;AACL,CAAC;AAJD,sBAIC","sourcesContent":["export function delay(t: number): Promise<void> {\n return new Promise(function (resolve) {\n setTimeout(resolve, t);\n });\n}\n"]}
1
+ {"version":3,"file":"delay.js","sourceRoot":"","sources":["../src/delay.ts"],"names":[],"mappings":";;AAAA,sBAIC;AAJD,SAAgB,KAAK,CAAC,CAAS;IAC7B,OAAO,IAAI,OAAO,CAAC,UAAU,OAAO;QAClC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.startHealthCheckServer = void 0;
6
+ exports.startHealthCheckServer = startHealthCheckServer;
7
7
  const http_1 = __importDefault(require("http"));
8
8
  function startHealthCheckServer(PORT) {
9
9
  const server = http_1.default.createServer((req, res) => {
@@ -20,5 +20,4 @@ function startHealthCheckServer(PORT) {
20
20
  console.log(`Health endpoint exposed on port ${PORT} on path: /health`);
21
21
  });
22
22
  }
23
- exports.startHealthCheckServer = startHealthCheckServer;
24
23
  //# sourceMappingURL=healthcheck.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"healthcheck.js","sourceRoot":"","sources":["../src/healthcheck.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAwB;AAExB,SAAgB,sBAAsB,CAAC,IAAY;IACjD,MAAM,MAAM,GAAG,cAAI,CAAC,YAAY,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC5C,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,IAAI,GAAG,CAAC,GAAG,KAAK,SAAS,EAAE;YACjD,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;YAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;SAChD;aAAM;YACL,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,YAAY,EAAE,CAAC,CAAC;YACrD,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;SACtB;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;QACvB,OAAO,CAAC,GAAG,CAAC,mCAAmC,IAAI,mBAAmB,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;AACL,CAAC;AAdD,wDAcC","sourcesContent":["import http from \"http\";\n\nexport function startHealthCheckServer(PORT: number) {\n const server = http.createServer((req, res) => {\n if (req.method === \"GET\" && req.url === \"/health\") {\n res.writeHead(200, { \"Content-Type\": \"application/json\" });\n res.end(JSON.stringify({ status: \"healthy\" }));\n } else {\n res.writeHead(404, { \"Content-Type\": \"text/plain\" });\n res.end(\"Not Found\");\n }\n });\n\n server.listen(PORT, () => {\n console.log(`Health endpoint exposed on port ${PORT} on path: /health`);\n });\n}\n"]}
1
+ {"version":3,"file":"healthcheck.js","sourceRoot":"","sources":["../src/healthcheck.ts"],"names":[],"mappings":";;;;;AAEA,wDAcC;AAhBD,gDAAwB;AAExB,SAAgB,sBAAsB,CAAC,IAAY;IACjD,MAAM,MAAM,GAAG,cAAI,CAAC,YAAY,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC5C,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,IAAI,GAAG,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;YAClD,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;YAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;QACjD,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,YAAY,EAAE,CAAC,CAAC;YACrD,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACvB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;QACvB,OAAO,CAAC,GAAG,CAAC,mCAAmC,IAAI,mBAAmB,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;AACL,CAAC"}
package/dist/index.js CHANGED
@@ -17,13 +17,23 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
17
17
  }) : function(o, v) {
18
18
  o["default"] = v;
19
19
  });
20
- var __importStar = (this && this.__importStar) || function (mod) {
21
- if (mod && mod.__esModule) return mod;
22
- var result = {};
23
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
24
- __setModuleDefault(result, mod);
25
- return result;
26
- };
20
+ var __importStar = (this && this.__importStar) || (function () {
21
+ var ownKeys = function(o) {
22
+ ownKeys = Object.getOwnPropertyNames || function (o) {
23
+ var ar = [];
24
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
25
+ return ar;
26
+ };
27
+ return ownKeys(o);
28
+ };
29
+ return function (mod) {
30
+ if (mod && mod.__esModule) return mod;
31
+ var result = {};
32
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
33
+ __setModuleDefault(result, mod);
34
+ return result;
35
+ };
36
+ })();
27
37
  var __importDefault = (this && this.__importDefault) || function (mod) {
28
38
  return (mod && mod.__esModule) ? mod : { "default": mod };
29
39
  };
@@ -162,7 +172,7 @@ function getConfig(name) {
162
172
  function setupScanParameters(command) {
163
173
  command.option("-d, --directory <dir>", "Directory where scans are saved (default: /tmp/scan-to-pcRANDOM)");
164
174
  command.option("-t, --temp-directory <dir>", "Temp directory used for processing (default: /tmp/scan-to-pcRANDOM)");
165
- command.option("-p, --pattern <pattern>", 'Pattern for filename (i.e. "scan"_dd.mm.yyyy_hh:MM:ss, without this its scanPageNUMBER)');
175
+ command.option("-p, --pattern <pattern>", 'Pattern for filename (i.e. "scan"_dd.mm.yyyy_hh:MM:ss, default would be scanPageNUMBER), make sure that the pattern is enclosed in extra quotes');
166
176
  command.option("-r, --resolution <dpi>", "Resolution in DPI of the scans (default: 200)");
167
177
  command.option("-w, --width <width>", "With in pixel of the scans (default: 2481)");
168
178
  command.option("-h, --height <height>", "Height in pixel of the scans (default: 3507)");
@@ -280,8 +290,8 @@ function getScanConfiguration(option) {
280
290
  const width = configWidth.toLowerCase() === "max"
281
291
  ? Number.MAX_SAFE_INTEGER
282
292
  : parseInt(configWidth, 10);
283
- const configHeight = (option.width || getConfig("height") || "0").toString();
284
- const height = configWidth.toLowerCase() === "max"
293
+ const configHeight = (option.height || getConfig("height") || 0).toString();
294
+ const height = configHeight.toLowerCase() === "max"
285
295
  ? Number.MAX_SAFE_INTEGER
286
296
  : parseInt(configHeight, 10);
287
297
  const paperlessConfig = getPaperlessConfig(option);
@@ -351,7 +361,7 @@ async function main() {
351
361
  const scanConfig = getScanConfiguration(options);
352
362
  const adfScanConfig = {
353
363
  ...scanConfig,
354
- isDuplex: options.isDuplex || getConfig("autoscan_duplex") || false,
364
+ isDuplex: options.duplex || getConfig("autoscan_duplex") || false,
355
365
  generatePdf: options.pdf || getConfig("autoscan_pdf") || false,
356
366
  pollingInterval: options.pollingInterval ||
357
367
  getConfig("autoscan_pollingInterval") ||
@@ -366,7 +376,7 @@ async function main() {
366
376
  const cmdClearRegistrations = commander_1.program.createCommand("clear-registrations");
367
377
  cmdClearRegistrations
368
378
  .description("Clear the list or registered target on the device")
369
- .action(async (options, cmd) => {
379
+ .action(async (_, cmd) => {
370
380
  await clearRegistrationsCmd(cmd);
371
381
  });
372
382
  commander_1.program.addCommand(cmdClearRegistrations);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\n// noinspection XmlDeprecatedElement,HtmlDeprecatedTag\n\n\"use strict\";\n\nimport os from \"os\";\nimport { Command, Option, OptionValues, program } from \"commander\";\nimport { Bonjour } from \"bonjour-service\";\nimport config from \"config\";\nimport HPApi from \"./HPApi\";\nimport PathHelper from \"./PathHelper\";\nimport { delay } from \"./delay\";\nimport { readDeviceCapabilities } from \"./readDeviceCapabilities\";\nimport {\n clearRegistrations,\n RegistrationConfig,\n waitScanEvent,\n} from \"./listening\";\nimport {\n AdfAutoScanConfig,\n DirectoryConfig,\n saveScanFromEvent,\n ScanConfig,\n scanFromAdf,\n waitAdfLoaded,\n} from \"./scanProcessing\";\nimport * as commitInfo from \"./commitInfo.json\";\nimport { PaperlessConfig } from \"./paperless/PaperlessConfig\";\nimport { NextcloudConfig } from \"./nextcloud/NextcloudConfig\";\nimport { startHealthCheckServer } from \"./healthcheck\";\nimport fs from \"fs\";\n\nlet iteration = 0;\n\nasync function listenCmd(\n registrationConfig: RegistrationConfig,\n scanConfig: ScanConfig,\n deviceUpPollingInterval: number,\n) {\n // first make sure the device is reachable\n await HPApi.waitDeviceUp(deviceUpPollingInterval);\n let deviceUp = true;\n\n const folder = await PathHelper.getOutputFolder(\n scanConfig.directoryConfig.directory,\n );\n console.log(`Target folder: ${folder}`);\n\n const tempFolder = await PathHelper.getOutputFolder(\n scanConfig.directoryConfig.tempDirectory,\n );\n console.log(`Temp folder: ${tempFolder}`);\n\n const deviceCapabilities = await readDeviceCapabilities();\n\n let scanCount = 0;\n let keepActive = true;\n let errorCount = 0;\n while (keepActive) {\n iteration++;\n console.log(`Running iteration: ${iteration} - errorCount: ${errorCount}`);\n try {\n const event = await waitScanEvent(deviceCapabilities, registrationConfig);\n scanCount = await PathHelper.getNextScanNumber(\n folder,\n scanCount,\n scanConfig.directoryConfig.filePattern,\n );\n console.log(`Scan event captured, saving scan #${scanCount}`);\n await saveScanFromEvent(\n event,\n folder,\n tempFolder,\n scanCount,\n deviceCapabilities,\n scanConfig,\n );\n } catch (e) {\n if (await HPApi.isAlive()) {\n console.log(e);\n errorCount++;\n } else {\n if (HPApi.isDebug()) {\n console.log(e);\n }\n deviceUp = false;\n }\n }\n\n if (errorCount === 50) {\n keepActive = false;\n }\n\n if (!deviceUp) {\n await HPApi.waitDeviceUp(deviceUpPollingInterval);\n } else {\n await delay(1000);\n }\n }\n}\n\nasync function adfAutoscanCmd(\n adfAutoScanConfig: AdfAutoScanConfig,\n deviceUpPollingInterval: number,\n) {\n // first make sure the device is reachable\n await HPApi.waitDeviceUp(deviceUpPollingInterval);\n let deviceUp = true;\n\n const folder = await PathHelper.getOutputFolder(\n adfAutoScanConfig.directoryConfig.directory,\n );\n console.log(`Target folder: ${folder}`);\n\n const tempFolder = await PathHelper.getOutputFolder(\n adfAutoScanConfig.directoryConfig.tempDirectory,\n );\n console.log(`Temp folder: ${tempFolder}`);\n\n const deviceCapabilities = await readDeviceCapabilities();\n\n let scanCount = 0;\n let keepActive = true;\n let errorCount = 0;\n while (keepActive) {\n iteration++;\n console.log(`Running iteration: ${iteration} - errorCount: ${errorCount}`);\n try {\n await waitAdfLoaded(\n adfAutoScanConfig.pollingInterval,\n adfAutoScanConfig.startScanDelay,\n );\n\n scanCount++;\n\n console.log(`Scan event captured, saving scan #${scanCount}`);\n\n await scanFromAdf(\n scanCount,\n folder,\n tempFolder,\n adfAutoScanConfig,\n deviceCapabilities,\n new Date(),\n );\n } catch (e) {\n console.log(e);\n if (await HPApi.isAlive()) {\n errorCount++;\n } else {\n deviceUp = false;\n }\n }\n\n if (errorCount === 50) {\n keepActive = false;\n }\n\n if (!deviceUp) {\n await HPApi.waitDeviceUp(deviceUpPollingInterval);\n } else {\n await delay(1000);\n }\n }\n}\n\nasync function clearRegistrationsCmd(cmd: Command) {\n const parentOption = cmd.parent!.opts();\n\n const ip = await getDeviceIp(parentOption);\n HPApi.setDeviceIP(ip);\n\n const isDebug = getIsDebug(parentOption);\n HPApi.setDebug(isDebug);\n await clearRegistrations();\n}\n\nfunction findOfficejetIp(deviceNamePrefix: string): Promise<string> {\n return new Promise((resolve) => {\n const bonjour = new Bonjour();\n console.log(\"Searching device...\");\n const browser = bonjour.find(\n {\n type: \"http\",\n },\n (service) => {\n console.log(\".\");\n if (\n service.name.startsWith(deviceNamePrefix) &&\n service.port === 80 &&\n service.type === \"http\" &&\n service.addresses != null\n ) {\n browser.stop();\n bonjour.destroy();\n console.log(`Found: ${service.name}`);\n resolve(service.addresses[0]);\n }\n },\n );\n browser.start();\n });\n}\n\nfunction getConfig<T>(name: string): T | undefined {\n return config.has(name) ? config.get<T>(name) : undefined;\n}\n\nfunction setupScanParameters(command: Command): Command {\n command.option(\n \"-d, --directory <dir>\",\n \"Directory where scans are saved (default: /tmp/scan-to-pcRANDOM)\",\n );\n command.option(\n \"-t, --temp-directory <dir>\",\n \"Temp directory used for processing (default: /tmp/scan-to-pcRANDOM)\",\n );\n command.option(\n \"-p, --pattern <pattern>\",\n 'Pattern for filename (i.e. \"scan\"_dd.mm.yyyy_hh:MM:ss, without this its scanPageNUMBER)',\n );\n command.option(\n \"-r, --resolution <dpi>\",\n \"Resolution in DPI of the scans (default: 200)\",\n );\n command.option(\n \"-w, --width <width>\",\n \"With in pixel of the scans (default: 2481)\",\n );\n command.option(\n \"-h, --height <height>\",\n \"Height in pixel of the scans (default: 3507)\",\n );\n command.option(\n \"-s, --paperless-post-document-url <paperless_post_document_url>\",\n \"The paperless post document url (example: https://domain.tld/api/documents/post_document/)\",\n );\n\n command.option(\n \"-o, --paperless-token <paperless_token>\",\n \"The paperless token\",\n );\n command.option(\n \"--paperless-group-multi-page-scan-into-a-pdf\",\n \"Combine multiple scanned images into a single PDF document\",\n );\n command.option(\n \"--paperless-always-send-as-pdf-file\",\n \"Always convert scan job to pdf before sending to paperless\",\n );\n command.option(\n \"-k, --keep-files\",\n \"Keep the scan files on the file system (default: false)\",\n );\n\n command.option(\n \"--nextcloud-url <nextcloud_url>\",\n \"The nextcloud url (example: https://domain.tld)\",\n );\n command.option(\n \"--nextcloud-username <nextcloud_username>\",\n \"The nextcloud username\",\n );\n command.option(\n \"--nextcloud-password <nextcloud_app_password>\",\n \"The nextcloud app password for username. Either this or nextcloud-password-file is required\",\n );\n command.option(\n \"--nextcloud-password-file <nextcloud_app_password_file>\",\n \"File name that contains the nextcloud app password for username. Either this or nextcloud-password is required\",\n );\n command.option(\n \"--nextcloud-upload-folder <nextcloud_upload_folder>\",\n \"The upload folder where documents or images are uploaded (default: scan)\",\n );\n return command;\n}\n\nfunction setupParameterOpts(command: Command): Command {\n command.option(\n \"-a, --address <ip>\",\n \"IP address of the device (this overrides -p)\",\n );\n command.option(\n \"--device-up-polling-interval <deviceUpPollingInterval>\",\n \"Device up polling interval in milliseconds\",\n parseFloat,\n );\n command.option(\n \"-n, --name <name>\",\n \"Name of the device for service discovery\",\n ); // i.e. 'Deskjet 3520 series'\n\n command.option(\"-D, --debug\", \"Enable debug\");\n return command;\n}\n\nasync function getDeviceIp(options: OptionValues) {\n let ip = options.address || getConfig(\"ip\");\n if (!ip) {\n const name = options.name || getConfig(\"name\");\n ip = await findOfficejetIp(name || \"HP Smart Tank Plus 570 series\");\n }\n console.log(`Using device ip: ${ip}`);\n return ip;\n}\n\nfunction getIsDebug(options: OptionValues) {\n const debug =\n options.debug != null ? true : getConfig<boolean>(\"debug\") || false;\n\n if (debug) {\n console.log(`IsDebug: ${debug}`);\n }\n return debug;\n}\n\nfunction getPaperlessConfig(\n parentOption: OptionValues,\n): PaperlessConfig | undefined {\n const paperlessPostDocumentUrl: string =\n parentOption.paperlessPostDocumentUrl ||\n getConfig(\"paperless_post_document_url\");\n const configPaperlessToken: string =\n parentOption.paperlessToken || getConfig(\"paperless_token\");\n\n if (paperlessPostDocumentUrl && configPaperlessToken) {\n const configPaperlessKeepFiles: boolean =\n parentOption.keepFiles || getConfig(\"keep_files\") || false;\n const groupMultiPageScanIntoAPdf: boolean =\n parentOption.paperlessGroupMultiPageScanIntoAPdf ||\n getConfig(\"paperless_group_multi_page_scan_into_a_pdf\") ||\n false;\n const alwaysSendAsPdfFile: boolean =\n parentOption.paperlessAlwaysSendAsPdfFile ||\n getConfig(\"paperless_always_send_as_pdf_file\") ||\n false;\n\n console.log(\n `Paperless configuration provided, post document url: ${paperlessPostDocumentUrl}, the token length: ${configPaperlessToken.length}, keepFiles: ${configPaperlessKeepFiles}`,\n );\n return {\n postDocumentUrl: paperlessPostDocumentUrl,\n authToken: configPaperlessToken,\n keepFiles: configPaperlessKeepFiles,\n groupMultiPageScanIntoAPdf: groupMultiPageScanIntoAPdf,\n alwaysSendAsPdfFile: alwaysSendAsPdfFile,\n };\n } else {\n return undefined;\n }\n}\n\nfunction getNextcloudConfig(\n parentOption: OptionValues,\n): NextcloudConfig | undefined {\n const configNextcloudUrl: string =\n parentOption.nextcloudUrl || getConfig(\"nextcloud_url\");\n const configNextcloudUsername: string =\n parentOption.nextcloudUsername || getConfig(\"nextcloud_username\");\n let configNextcloudPassword: string =\n parentOption.nextcloudPassword || getConfig(\"nextcloud_password\");\n const configNextcloudPasswordFile: string =\n parentOption.nextcloudPasswordFile || getConfig(\"nextcloud_password_file\");\n\n if (\n configNextcloudUrl &&\n configNextcloudUsername &&\n (configNextcloudPassword || configNextcloudPasswordFile)\n ) {\n const configNextcloudUploadFolder =\n parentOption.nextcloudUploadFolder ||\n getConfig(\"nextcloud_upload_folder\") ||\n \"scan\";\n const configNextcloudKeepFiles: boolean =\n parentOption.keepFiles || getConfig(\"keep_files\") || false;\n\n if (configNextcloudPasswordFile) {\n configNextcloudPassword = fs\n .readFileSync(configNextcloudPasswordFile, \"utf8\")\n .trimEnd();\n }\n\n console.log(\n `Nextcloud configuration provided, url: ${configNextcloudUrl}, username: ${configNextcloudUsername}, password length: ${configNextcloudPassword.length}, upload folder: ${configNextcloudUploadFolder}, keepFiles: ${configNextcloudKeepFiles}`,\n );\n return {\n baseUrl: configNextcloudUrl,\n username: configNextcloudUsername,\n password: configNextcloudPassword,\n uploadFolder: configNextcloudUploadFolder,\n keepFiles: configNextcloudKeepFiles,\n };\n } else {\n return undefined;\n }\n}\n\nfunction getHealthCheckSetting(option: OptionValues) {\n const healthCheckEnabled: boolean =\n option.healthCheck || getConfig(\"enableHealthCheck\") === true;\n let healthCheckPort: number;\n if (option.healthCheckPort) {\n healthCheckPort = parseInt(option.healthCheckPort, 10);\n } else {\n healthCheckPort = getConfig<number>(\"healthCheckPort\") || 3000;\n }\n return {\n isHealthCheckEnabled: healthCheckEnabled,\n healthCheckPort: healthCheckPort,\n };\n}\n\nfunction getScanConfiguration(option: OptionValues) {\n const directoryConfig: DirectoryConfig = {\n directory: option.directory || getConfig(\"directory\"),\n tempDirectory: option.tempDirectory || getConfig(\"tempDirectory\"),\n filePattern: option.pattern || getConfig(\"pattern\"),\n };\n\n const configWidth = (option.width || getConfig(\"width\") || 0).toString();\n const width =\n configWidth.toLowerCase() === \"max\"\n ? Number.MAX_SAFE_INTEGER\n : parseInt(configWidth, 10);\n\n const configHeight = (option.width || getConfig(\"height\") || \"0\").toString();\n const height =\n configWidth.toLowerCase() === \"max\"\n ? Number.MAX_SAFE_INTEGER\n : parseInt(configHeight, 10);\n\n const paperlessConfig = getPaperlessConfig(option);\n const nextcloudConfig = getNextcloudConfig(option);\n\n const scanConfig: ScanConfig = {\n resolution: parseInt(\n option.resolution || getConfig(\"resolution\") || \"200\",\n 10,\n ),\n width: width,\n height: height,\n directoryConfig,\n paperlessConfig,\n nextcloudConfig,\n };\n return scanConfig;\n}\n\nfunction getDeviceUpPollingInterval(parentOption: OptionValues) {\n return (\n parentOption.deviceUpPollingInterval ||\n getConfig(\"deviceUpPollingInterval\") ||\n 1000\n );\n}\n\nasync function main() {\n setupParameterOpts(program);\n const cmdListen = program.createCommand(\"listen\");\n setupScanParameters(cmdListen)\n .description(\"Listen the device for new scan job to save to this target\")\n .option(\n \"-l, --label <label>\",\n \"The label to display on the device (the default is the hostname)\",\n )\n .addOption(\n new Option(\"--health-check\", \"Start an http health check endpoint\"),\n )\n .addOption(\n new Option(\n \"--health-check-port <health-check-port>\",\n \"Start an http health check endpoint\",\n ),\n )\n .action(async (options, cmd) => {\n const parentOption = cmd.parent.opts();\n\n const ip = await getDeviceIp(parentOption);\n HPApi.setDeviceIP(ip);\n\n const isDebug = getIsDebug(parentOption);\n HPApi.setDebug(isDebug);\n\n const registrationConfig: RegistrationConfig = {\n label: options.label || getConfig(\"label\") || os.hostname(),\n };\n\n const deviceUpPollingInterval = getDeviceUpPollingInterval(parentOption);\n\n const healthCheckSetting = getHealthCheckSetting(options);\n if (healthCheckSetting.isHealthCheckEnabled) {\n startHealthCheckServer(healthCheckSetting.healthCheckPort);\n }\n\n const scanConfig = getScanConfiguration(options);\n\n await listenCmd(registrationConfig, scanConfig, deviceUpPollingInterval);\n });\n program.addCommand(cmdListen, { isDefault: true });\n\n const cmdAdfAutoscan = program.createCommand(\"adf-autoscan\");\n setupScanParameters(cmdAdfAutoscan)\n .addOption(\n new Option(\"--duplex\", \"If specified, the scan will be in duplex\"),\n )\n .addOption(\n new Option(\n \"--pdf\",\n \"If specified, the scan result will be a pdf document, the default is multiple jpeg files\",\n ),\n )\n .addOption(\n new Option(\n \"--pollingInterval <pollingInterval>\",\n \"Time interval in millisecond between each lookup for content in the automatic document feeder\",\n ),\n )\n .description(\n \"Automatically trigger a new scan job to this target once paper is detected in the automatic document feeder (adf)\",\n )\n .addOption(\n new Option(\n \"--start-scan-delay <startScanDelay>\",\n \"Once document are detected to be in the adf, this specify the wait delay in millisecond before triggering the scan\",\n ),\n )\n .addOption(\n new Option(\"--health-check\", \"Start an http health check endpoint\"),\n )\n .addOption(\n new Option(\n \"--health-check-port <port>\",\n \"Start an http health check endpoint\",\n ),\n )\n .description(\n \"Automatically trigger a new scan job to this target once paper is detected in the automatic document feeder (adf)\",\n )\n .action(async (options, cmd) => {\n const parentOption = cmd.parent.opts();\n\n const ip = await getDeviceIp(parentOption);\n HPApi.setDeviceIP(ip);\n\n const isDebug = getIsDebug(parentOption);\n HPApi.setDebug(isDebug);\n\n const deviceUpPollingInterval = getDeviceUpPollingInterval(parentOption);\n\n const healthCheckSetting = getHealthCheckSetting(options);\n if (healthCheckSetting.isHealthCheckEnabled) {\n startHealthCheckServer(healthCheckSetting.healthCheckPort);\n }\n\n const scanConfig = getScanConfiguration(options);\n\n const adfScanConfig: AdfAutoScanConfig = {\n ...scanConfig,\n isDuplex: options.isDuplex || getConfig(\"autoscan_duplex\") || false,\n generatePdf: options.pdf || getConfig(\"autoscan_pdf\") || false,\n pollingInterval:\n options.pollingInterval ||\n getConfig(\"autoscan_pollingInterval\") ||\n 1000,\n startScanDelay:\n options.startScanDelay ||\n getConfig(\"autoscan_startScanDelay\") ||\n 5000,\n };\n\n await adfAutoscanCmd(adfScanConfig, deviceUpPollingInterval);\n });\n program.addCommand(cmdAdfAutoscan);\n\n const cmdClearRegistrations = program.createCommand(\"clear-registrations\");\n cmdClearRegistrations\n .description(\"Clear the list or registered target on the device\")\n .action(async (options, cmd) => {\n await clearRegistrationsCmd(cmd);\n });\n program.addCommand(cmdClearRegistrations);\n\n await program.parseAsync(process.argv);\n}\n\nconsole.log(`Current commit ID: ${commitInfo.commitId}`);\nmain().catch((err) => console.log(err));\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/listening.js CHANGED
@@ -3,7 +3,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.clearRegistrations = exports.waitScanEvent = exports.waitForScanEvent = exports.waitScanRequest = void 0;
6
+ exports.waitScanRequest = waitScanRequest;
7
+ exports.waitForScanEvent = waitForScanEvent;
8
+ exports.waitScanEvent = waitScanEvent;
9
+ exports.clearRegistrations = clearRegistrations;
7
10
  const HPApi_1 = __importDefault(require("./HPApi"));
8
11
  const Destination_1 = __importDefault(require("./Destination"));
9
12
  async function waitScanRequest(compEventURI) {
@@ -33,10 +36,9 @@ async function waitScanRequest(compEventURI) {
33
36
  }
34
37
  return true;
35
38
  }
36
- exports.waitScanRequest = waitScanRequest;
37
39
  async function waitForScanEvent(resourceURI, afterEtag = null) {
38
40
  console.log("Start listening for new ScanEvent");
39
- let eventTable = await HPApi_1.default.getEvents(afterEtag !== null && afterEtag !== void 0 ? afterEtag : "");
41
+ let eventTable = await HPApi_1.default.getEvents(afterEtag ?? "");
40
42
  let acceptedScanEvent = null;
41
43
  let currentEtag = eventTable.etag;
42
44
  while (acceptedScanEvent == null) {
@@ -48,7 +50,6 @@ async function waitForScanEvent(resourceURI, afterEtag = null) {
48
50
  }
49
51
  return acceptedScanEvent;
50
52
  }
51
- exports.waitForScanEvent = waitForScanEvent;
52
53
  async function registerWalkupScanToCompDestination(registrationConfig) {
53
54
  const walkupScanDestinations = await HPApi_1.default.getWalkupScanToCompDestinations();
54
55
  const destinations = walkupScanDestinations.destinations;
@@ -96,7 +97,6 @@ async function waitScanEvent(deviceCapabilities, registrationConfig) {
96
97
  console.log("Waiting scan event for:", resourceURI);
97
98
  return await waitForScanEvent(resourceURI);
98
99
  }
99
- exports.waitScanEvent = waitScanEvent;
100
100
  async function clearRegistrations() {
101
101
  const dests = await HPApi_1.default.getWalkupScanToCompDestinations();
102
102
  for (let i = 0; i < dests.destinations.length; i++) {
@@ -104,5 +104,4 @@ async function clearRegistrations() {
104
104
  await HPApi_1.default.removeDestination(dests.destinations[i]);
105
105
  }
106
106
  }
107
- exports.clearRegistrations = clearRegistrations;
108
107
  //# sourceMappingURL=listening.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"listening.js","sourceRoot":"","sources":["../src/listening.ts"],"names":[],"mappings":"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","sourcesContent":["import HPApi from \"./HPApi\";\nimport Event from \"./Event\";\nimport Destination from \"./Destination\";\nimport { DeviceCapabilities } from \"./DeviceCapabilities\";\n\nexport async function waitScanRequest(compEventURI: string): Promise<boolean> {\n const waitMax = 50;\n for (let i = 0; i < waitMax; i++) {\n const walkupScanToCompEvent =\n await HPApi.getWalkupScanToCompEvent(compEventURI);\n const message = walkupScanToCompEvent.eventType;\n if (message === \"HostSelected\") {\n // this ok to wait\n } else if (message === \"ScanRequested\") {\n break;\n } else if (message === \"ScanNewPageRequested\") {\n break;\n } else if (message === \"ScanPagesComplete\") {\n console.log(\"no more page to scan, scan is finished\");\n return false;\n } else {\n console.log(`Unknown eventType: ${message}`);\n return false;\n }\n\n console.log(`Waiting user input: ${i + 1}/${waitMax}`);\n await new Promise((resolve) => setTimeout(resolve, 1000)); //wait 1s\n }\n return true;\n}\n\nexport async function waitForScanEvent(\n resourceURI: string,\n afterEtag: string | null = null,\n): Promise<Event> {\n console.log(\"Start listening for new ScanEvent\");\n\n let eventTable = await HPApi.getEvents(afterEtag ?? \"\");\n let acceptedScanEvent = null;\n let currentEtag = eventTable.etag;\n while (acceptedScanEvent == null) {\n eventTable = await HPApi.getEvents(currentEtag, 1200);\n currentEtag = eventTable.etag;\n\n acceptedScanEvent = eventTable.eventTable.events.find(\n (ev) =>\n ev.isScanEvent &&\n ev.destinationURI &&\n ev.destinationURI.indexOf(resourceURI) >= 0,\n );\n }\n return acceptedScanEvent;\n}\n\nasync function registerWalkupScanToCompDestination(\n registrationConfig: RegistrationConfig,\n): Promise<string> {\n const walkupScanDestinations = await HPApi.getWalkupScanToCompDestinations();\n const destinations = walkupScanDestinations.destinations;\n\n console.log(\n \"Host destinations fetched:\",\n destinations.map((d) => d.name).join(\", \"),\n );\n\n const hostname = registrationConfig.label;\n const destination = destinations.find((x) => x.name === hostname);\n\n let resourceURI;\n if (destination) {\n console.log(\n `Re-using existing destination: ${hostname} - ${destination.resourceURI}`,\n );\n resourceURI = destination.resourceURI;\n } else {\n resourceURI = await HPApi.registerWalkupScanToCompDestination(\n new Destination(hostname, hostname, true),\n );\n console.log(`New Destination registered: ${hostname} - ${resourceURI}`);\n }\n\n console.log(`Using: ${hostname}`);\n\n return resourceURI;\n}\n\nasync function registerWalkupScanDestination(\n registrationConfig: RegistrationConfig,\n): Promise<string> {\n const walkupScanDestinations = await HPApi.getWalkupScanDestinations();\n const destinations = walkupScanDestinations.destinations;\n\n console.log(\n \"Host destinations fetched:\",\n destinations.map((d) => d.name).join(\", \"),\n );\n\n const hostname = registrationConfig.label;\n const destination = destinations.find((x) => x.name === hostname);\n\n let resourceURI;\n if (destination) {\n console.log(\n `Re-using existing destination: ${hostname} - ${destination.resourceURI}`,\n );\n resourceURI = destination.resourceURI;\n } else {\n resourceURI = await HPApi.registerWalkupScanDestination(\n new Destination(hostname, hostname, false),\n );\n console.log(`New Destination registered: ${hostname} - ${resourceURI}`);\n }\n\n console.log(`Using: ${hostname}`);\n\n return resourceURI;\n}\n\nexport type RegistrationConfig = {\n label: string;\n};\n\nexport async function waitScanEvent(\n deviceCapabilities: DeviceCapabilities,\n registrationConfig: RegistrationConfig,\n): Promise<Event> {\n let resourceURI: string;\n if (deviceCapabilities.useWalkupScanToComp) {\n resourceURI = await registerWalkupScanToCompDestination(registrationConfig);\n } else {\n resourceURI = await registerWalkupScanDestination(registrationConfig);\n }\n\n console.log(\"Waiting scan event for:\", resourceURI);\n return await waitForScanEvent(resourceURI);\n}\n\nexport async function clearRegistrations() {\n const dests = await HPApi.getWalkupScanToCompDestinations();\n for (let i = 0; i < dests.destinations.length; i++) {\n console.log(`Removing: ${dests.destinations[i].name}`);\n await HPApi.removeDestination(dests.destinations[i]);\n }\n}\n"]}
1
+ {"version":3,"file":"listening.js","sourceRoot":"","sources":["../src/listening.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"NextcloudConfig.js","sourceRoot":"","sources":["../../src/nextcloud/NextcloudConfig.ts"],"names":[],"mappings":"","sourcesContent":["export type NextcloudConfig = {\n baseUrl: string;\n username: string;\n password: string;\n uploadFolder: string;\n keepFiles: boolean;\n};\n"]}
1
+ {"version":3,"file":"NextcloudConfig.js","sourceRoot":"","sources":["../../src/nextcloud/NextcloudConfig.ts"],"names":[],"mappings":""}
@@ -3,7 +3,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.uploadPdfToNextcloud = exports.uploadImagesToNextcloud = void 0;
6
+ exports.uploadImagesToNextcloud = uploadImagesToNextcloud;
7
+ exports.uploadPdfToNextcloud = uploadPdfToNextcloud;
7
8
  const axios_1 = __importDefault(require("axios"));
8
9
  const promises_1 = __importDefault(require("fs/promises"));
9
10
  const path_1 = __importDefault(require("path"));
@@ -15,7 +16,6 @@ async function uploadImagesToNextcloud(scanJobContent, nextcloudConfig) {
15
16
  }
16
17
  });
17
18
  }
18
- exports.uploadImagesToNextcloud = uploadImagesToNextcloud;
19
19
  async function uploadPdfToNextcloud(pdfFilePath, nextcloudConfig) {
20
20
  await checkFolderAndUpload(nextcloudConfig, async () => {
21
21
  if (pdfFilePath) {
@@ -26,7 +26,6 @@ async function uploadPdfToNextcloud(pdfFilePath, nextcloudConfig) {
26
26
  }
27
27
  });
28
28
  }
29
- exports.uploadPdfToNextcloud = uploadPdfToNextcloud;
30
29
  async function uploadToNextcloud(filePath, nextcloudConfig) {
31
30
  const { baseUrl, username, password, uploadFolder } = nextcloudConfig;
32
31
  const fileName = path_1.default.basename(filePath);
@@ -71,7 +70,6 @@ async function checkFolderAndUpload(nextcloudConfig, uploadFunction) {
71
70
  await uploadFunction();
72
71
  }
73
72
  async function checkNextcloudFolderExists(nextcloudConfig) {
74
- var _a, _b;
75
73
  const { baseUrl, username, password, uploadFolder } = nextcloudConfig;
76
74
  const folderUrl = buildFolderUrl(baseUrl, username, uploadFolder);
77
75
  const auth = { username, password };
@@ -88,10 +86,10 @@ async function checkNextcloudFolderExists(nextcloudConfig) {
88
86
  }
89
87
  catch (error) {
90
88
  const axiosError = error;
91
- if (((_a = axiosError.response) === null || _a === void 0 ? void 0 : _a.status) === 404) {
89
+ if (axiosError.response?.status === 404) {
92
90
  console.warn(`Upload folder '${uploadFolder}' not found in Nextcloud`);
93
91
  }
94
- else if (((_b = axiosError.response) === null || _b === void 0 ? void 0 : _b.status) === 401) {
92
+ else if (axiosError.response?.status === 401) {
95
93
  console.warn(`User has no permission to access upload folder '${uploadFolder}' in Nextcloud`);
96
94
  }
97
95
  else {
@@ -1 +1 @@
1
- {"version":3,"file":"nextcloud.js","sourceRoot":"","sources":["../../src/nextcloud/nextcloud.ts"],"names":[],"mappings":"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","sourcesContent":["import axios, { AxiosError } from \"axios\";\nimport { ScanContent } from \"../ScanContent\";\nimport { NextcloudConfig } from \"./NextcloudConfig\";\nimport fs from \"fs/promises\";\nimport path from \"path\";\n\nexport async function uploadImagesToNextcloud(\n scanJobContent: ScanContent,\n nextcloudConfig: NextcloudConfig,\n) {\n await checkFolderAndUpload(nextcloudConfig, async () => {\n for (const element of scanJobContent.elements) {\n const { path: filePath } = element;\n await uploadToNextcloud(filePath, nextcloudConfig);\n }\n });\n}\n\nexport async function uploadPdfToNextcloud(\n pdfFilePath: string | null,\n nextcloudConfig: NextcloudConfig,\n) {\n await checkFolderAndUpload(nextcloudConfig, async () => {\n if (pdfFilePath) {\n await uploadToNextcloud(pdfFilePath, nextcloudConfig);\n } else {\n console.log(\n \"Pdf generation has failed, nothing is going to be uploaded to Nextcloud\",\n );\n }\n });\n}\n\nasync function uploadToNextcloud(\n filePath: string,\n nextcloudConfig: NextcloudConfig,\n): Promise<void> {\n const { baseUrl, username, password, uploadFolder } = nextcloudConfig;\n const fileName = path.basename(filePath);\n\n const folderUrl = buildFolderUrl(baseUrl, username, uploadFolder);\n const uploadUrl = buildUrl(folderUrl, [fileName]);\n\n let fileBuffer: Buffer;\n try {\n fileBuffer = await fs.readFile(filePath);\n } catch (e) {\n console.error(\"Fail to read file:\", e);\n return;\n }\n const auth = { username, password };\n\n console.log(`Start uploading to Nextcloud: ${fileName}`);\n try {\n const response = await axios({\n method: \"PUT\",\n url: uploadUrl,\n auth,\n data: fileBuffer,\n });\n\n let action: string;\n if (response.status === 201) {\n action = \"created\";\n } else {\n action = \"updated\";\n }\n console.log(\n `Document successfully ${action} file at Nextcloud. (Folder: ${uploadFolder}, File: ${fileName})`,\n );\n } catch (error) {\n console.error(\"Fail to upload document:\", error);\n }\n}\n\nasync function checkFolderAndUpload(\n nextcloudConfig: NextcloudConfig,\n uploadFunction: () => Promise<void>,\n) {\n const folderExists = await checkNextcloudFolderExists(nextcloudConfig);\n if (!folderExists) {\n console.log(\n \"Upload folder does not exist or user has no permission; skipping upload\",\n );\n return;\n }\n\n await uploadFunction();\n}\n\nasync function checkNextcloudFolderExists(\n nextcloudConfig: NextcloudConfig,\n): Promise<boolean> {\n const { baseUrl, username, password, uploadFolder } = nextcloudConfig;\n const folderUrl = buildFolderUrl(baseUrl, username, uploadFolder);\n const auth = { username, password };\n\n console.log(\"Check if upload folder exists\");\n try {\n // Check if the upload folder exists\n await axios({\n method: \"PROPFIND\",\n url: folderUrl,\n auth,\n headers: { Depth: 0 },\n });\n console.log(`Found upload folder '${uploadFolder}' in Nextcloud`);\n } catch (error) {\n const axiosError = error as AxiosError;\n if (axiosError.response?.status === 404) {\n console.warn(`Upload folder '${uploadFolder}' not found in Nextcloud`);\n } else if (axiosError.response?.status === 401) {\n console.warn(\n `User has no permission to access upload folder '${uploadFolder}' in Nextcloud`,\n );\n } else {\n console.error(\"Fail to check upload folder exists:\", axiosError.toJSON());\n }\n console.trace(\"Error response:\", axiosError.response);\n return false;\n }\n return true;\n}\n\nfunction buildFolderUrl(\n baseUrl: string,\n username: string,\n uploadFolder: string,\n) {\n return buildUrl(baseUrl, [\n \"remote.php\",\n \"dav\",\n \"files\",\n username,\n uploadFolder,\n ]);\n}\n\nfunction buildUrl(baseUrl: string, path: string[]): string {\n const url = new URL(baseUrl);\n const search = /^\\/+|\\/+$/g;\n path.forEach((part) => {\n url.pathname = `${url.pathname.replace(search, \"\")}/${encodeURIComponent(part.replace(search, \"\"))}`;\n });\n return url.toString();\n}\n"]}
1
+ {"version":3,"file":"nextcloud.js","sourceRoot":"","sources":["../../src/nextcloud/nextcloud.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"PaperlessConfig.js","sourceRoot":"","sources":["../../src/paperless/PaperlessConfig.ts"],"names":[],"mappings":"","sourcesContent":["export type PaperlessConfig = {\n postDocumentUrl: string;\n authToken: string;\n keepFiles: boolean;\n groupMultiPageScanIntoAPdf: boolean;\n alwaysSendAsPdfFile: boolean;\n};\n"]}
1
+ {"version":3,"file":"PaperlessConfig.js","sourceRoot":"","sources":["../../src/paperless/PaperlessConfig.ts"],"names":[],"mappings":""}
@@ -3,7 +3,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.uploadPdfToPaperless = exports.mergeToPdfAndUploadAsSingleDocumentToPaperless = exports.convertImagesToPdfAndUploadAsSeparateDocumentsToPaperless = exports.uploadImagesAsSeparateDocumentsToPaperless = void 0;
6
+ exports.uploadImagesAsSeparateDocumentsToPaperless = uploadImagesAsSeparateDocumentsToPaperless;
7
+ exports.convertImagesToPdfAndUploadAsSeparateDocumentsToPaperless = convertImagesToPdfAndUploadAsSeparateDocumentsToPaperless;
8
+ exports.mergeToPdfAndUploadAsSingleDocumentToPaperless = mergeToPdfAndUploadAsSingleDocumentToPaperless;
9
+ exports.uploadPdfToPaperless = uploadPdfToPaperless;
7
10
  const fs_1 = __importDefault(require("fs"));
8
11
  const form_data_1 = __importDefault(require("form-data"));
9
12
  const axios_1 = __importDefault(require("axios"));
@@ -15,7 +18,6 @@ async function uploadImagesAsSeparateDocumentsToPaperless(scanJobContent, paperl
15
18
  await uploadToPaperless(filePath, paperlessConfig);
16
19
  }
17
20
  }
18
- exports.uploadImagesAsSeparateDocumentsToPaperless = uploadImagesAsSeparateDocumentsToPaperless;
19
21
  async function convertImagesToPdfAndUploadAsSeparateDocumentsToPaperless(scanJobContent, paperlessConfig) {
20
22
  for (let i = 0; i < scanJobContent.elements.length; ++i) {
21
23
  const pdfFilePath = await (0, pdfProcessing_1.convertToPdf)(scanJobContent.elements[i], !paperlessConfig.keepFiles);
@@ -29,7 +31,6 @@ async function convertImagesToPdfAndUploadAsSeparateDocumentsToPaperless(scanJob
29
31
  }
30
32
  }
31
33
  }
32
- exports.convertImagesToPdfAndUploadAsSeparateDocumentsToPaperless = convertImagesToPdfAndUploadAsSeparateDocumentsToPaperless;
33
34
  async function mergeToPdfAndUploadAsSingleDocumentToPaperless(folder, scanCount, scanJobContent, scanConfig, scanDate, paperlessConfig) {
34
35
  const pdfFilePath = await (0, pdfProcessing_1.mergeToPdf)(folder, scanCount, scanJobContent, scanConfig.directoryConfig.filePattern, scanDate, !paperlessConfig.keepFiles);
35
36
  if (pdfFilePath) {
@@ -41,7 +42,6 @@ async function mergeToPdfAndUploadAsSingleDocumentToPaperless(folder, scanCount,
41
42
  console.log("Pdf generation has failed, nothing is going to be uploaded to paperless");
42
43
  }
43
44
  }
44
- exports.mergeToPdfAndUploadAsSingleDocumentToPaperless = mergeToPdfAndUploadAsSingleDocumentToPaperless;
45
45
  async function uploadPdfToPaperless(pdfFilePath, paperlessConfig) {
46
46
  if (pdfFilePath) {
47
47
  await uploadToPaperless(pdfFilePath, paperlessConfig);
@@ -50,7 +50,6 @@ async function uploadPdfToPaperless(pdfFilePath, paperlessConfig) {
50
50
  console.log("Pdf generation has failed, nothing is going to be uploaded to paperless");
51
51
  }
52
52
  }
53
- exports.uploadPdfToPaperless = uploadPdfToPaperless;
54
53
  async function uploadToPaperless(filePath, paperlessConfig) {
55
54
  const url = paperlessConfig.postDocumentUrl;
56
55
  const authToken = paperlessConfig.authToken;
@@ -1 +1 @@
1
- {"version":3,"file":"paperless.js","sourceRoot":"","sources":["../../src/paperless/paperless.ts"],"names":[],"mappings":"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","sourcesContent":["import fsSync from \"fs\";\nimport FormData from \"form-data\";\nimport axios from \"axios\";\nimport { ScanConfig } from \"../scanProcessing\";\nimport { ScanContent } from \"../ScanContent\";\nimport fs from \"fs/promises\";\nimport { convertToPdf, mergeToPdf } from \"../pdfProcessing\";\nimport { PaperlessConfig } from \"./PaperlessConfig\";\n\nexport async function uploadImagesAsSeparateDocumentsToPaperless(\n scanJobContent: ScanContent,\n paperlessConfig: PaperlessConfig,\n) {\n for (let i = 0; i < scanJobContent.elements.length; ++i) {\n const filePath = scanJobContent.elements[i].path;\n await uploadToPaperless(filePath, paperlessConfig);\n }\n}\n\nexport async function convertImagesToPdfAndUploadAsSeparateDocumentsToPaperless(\n scanJobContent: ScanContent,\n paperlessConfig: PaperlessConfig,\n) {\n for (let i = 0; i < scanJobContent.elements.length; ++i) {\n const pdfFilePath = await convertToPdf(\n scanJobContent.elements[i],\n !paperlessConfig.keepFiles,\n );\n if (pdfFilePath) {\n await uploadToPaperless(pdfFilePath, paperlessConfig);\n await fs.unlink(pdfFilePath);\n } else {\n console.log(\n \"Pdf generation has failed, nothing is going to be uploaded to paperless for: \" +\n scanJobContent.elements[i].path,\n );\n }\n }\n}\n\nexport async function mergeToPdfAndUploadAsSingleDocumentToPaperless(\n folder: string,\n scanCount: number,\n scanJobContent: ScanContent,\n scanConfig: ScanConfig,\n scanDate: Date,\n paperlessConfig: PaperlessConfig,\n) {\n const pdfFilePath = await mergeToPdf(\n folder,\n scanCount,\n scanJobContent,\n scanConfig.directoryConfig.filePattern,\n scanDate,\n !paperlessConfig.keepFiles,\n );\n if (pdfFilePath) {\n await uploadToPaperless(pdfFilePath, paperlessConfig);\n await fs.unlink(pdfFilePath);\n console.log(\n `Pdf document ${pdfFilePath} has been removed from the filesystem`,\n );\n } else {\n console.log(\n \"Pdf generation has failed, nothing is going to be uploaded to paperless\",\n );\n }\n}\n\nexport async function uploadPdfToPaperless(\n pdfFilePath: string | null,\n paperlessConfig: PaperlessConfig,\n) {\n if (pdfFilePath) {\n await uploadToPaperless(pdfFilePath, paperlessConfig);\n } else {\n console.log(\n \"Pdf generation has failed, nothing is going to be uploaded to paperless\",\n );\n }\n}\n\nasync function uploadToPaperless(\n filePath: string,\n paperlessConfig: PaperlessConfig,\n): Promise<void> {\n const url = paperlessConfig.postDocumentUrl;\n\n const authToken = paperlessConfig.authToken;\n\n const fileStream = fsSync.createReadStream(filePath);\n\n const form = new FormData();\n form.append(\"document\", fileStream);\n\n console.log(`Start uploading to paperless: ${filePath}`);\n try {\n const response = await axios.post(url, form, {\n headers: {\n ...form.getHeaders(),\n Authorization: `Token ${authToken}`,\n },\n });\n\n console.log(\"Document successfully uploaded to paperless:\", response.data);\n } catch (error) {\n console.error(\"Fail to upload document:\", error);\n }\n fileStream.close();\n}\n"]}
1
+ {"version":3,"file":"paperless.js","sourceRoot":"","sources":["../../src/paperless/paperless.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.createPdfFrom = exports.convertToPdf = exports.mergeToPdf = void 0;
6
+ exports.mergeToPdf = mergeToPdf;
7
+ exports.convertToPdf = convertToPdf;
8
+ exports.createPdfFrom = createPdfFrom;
7
9
  const PathHelper_1 = __importDefault(require("./PathHelper"));
8
10
  const promises_1 = __importDefault(require("fs/promises"));
9
11
  const path_1 = __importDefault(require("path"));
@@ -20,7 +22,6 @@ async function mergeToPdf(folder, scanCount, scanJobContent, filePattern, date,
20
22
  console.log(`No page available to build a pdf file`);
21
23
  return null;
22
24
  }
23
- exports.mergeToPdf = mergeToPdf;
24
25
  async function convertToPdf(scanPage, deleteFile) {
25
26
  const fileName = path_1.default.basename(scanPage.path, path_1.default.extname(scanPage.path));
26
27
  const pdfFilePath = path_1.default.join(path_1.default.dirname(scanPage.path), `${fileName}.pdf`);
@@ -30,7 +31,6 @@ async function convertToPdf(scanPage, deleteFile) {
30
31
  }
31
32
  return pdfFilePath;
32
33
  }
33
- exports.convertToPdf = convertToPdf;
34
34
  async function createPdfFrom(scanContent, destination) {
35
35
  let doc = null;
36
36
  for (const element of scanContent.elements) {
@@ -46,7 +46,6 @@ async function createPdfFrom(scanContent, destination) {
46
46
  const imageByteBuffer = await promises_1.default.readFile(element.path);
47
47
  doc.addImage(imageByteBuffer, "JPEG", 0, 0, widthInInches, heightInInches);
48
48
  }
49
- doc === null || doc === void 0 ? void 0 : doc.save(destination);
49
+ doc?.save(destination);
50
50
  }
51
- exports.createPdfFrom = createPdfFrom;
52
51
  //# sourceMappingURL=pdfProcessing.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pdfProcessing.js","sourceRoot":"","sources":["../src/pdfProcessing.ts"],"names":[],"mappings":";;;;;;AACA,8DAAsC;AACtC,2DAA6B;AAC7B,gDAAwB;AACxB,iCAA8B;AAEvB,KAAK,UAAU,UAAU,CAC9B,MAAc,EACd,SAAiB,EACjB,cAA2B,EAC3B,WAA+B,EAC/B,IAAU,EACV,WAAoB;IAEpB,IAAI,cAAc,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;QACtC,MAAM,WAAW,GAAW,oBAAU,CAAC,cAAc,CACnD,MAAM,EACN,SAAS,EACT,WAAW,EACX,KAAK,EACL,IAAI,CACL,CAAC;QACF,MAAM,aAAa,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;QACjD,IAAI,WAAW,EAAE;YACf,MAAM,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,kBAAE,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SAC1E;QACD,OAAO,WAAW,CAAC;KACpB;IACD,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;IACrD,OAAO,IAAI,CAAC;AACd,CAAC;AAxBD,gCAwBC;AAEM,KAAK,UAAU,YAAY,CAChC,QAAkB,EAClB,UAAmB;IAEnB,MAAM,QAAQ,GAAG,cAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,cAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3E,MAAM,WAAW,GAAG,cAAI,CAAC,IAAI,CAAC,cAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,QAAQ,MAAM,CAAC,CAAC;IAE9E,MAAM,aAAa,CAAC,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;IAC3D,IAAI,UAAU,EAAE;QACd,MAAM,kBAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;KAChC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC;AAZD,oCAYC;AAEM,KAAK,UAAU,aAAa,CACjC,WAAwB,EACxB,WAAmB;IAEnB,IAAI,GAAG,GAAiB,IAAI,CAAC;IAC7B,KAAK,MAAM,OAAO,IAAI,WAAW,CAAC,QAAQ,EAAE;QAC1C,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,WAAW,CAAC;QAC1D,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;QAC5D,MAAM,MAAM,GAAG,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;QAE/C,IAAI,GAAG,IAAI,IAAI,EAAE;YACf,GAAG,GAAG,IAAI,aAAK,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;SAC5D;aAAM;YACL,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;SACrB;QAED,MAAM,eAAe,GAAG,MAAM,kBAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACxD,GAAG,CAAC,QAAQ,CAAC,eAAe,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,aAAa,EAAE,cAAc,CAAC,CAAC;KAC5E;IACD,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,IAAI,CAAC,WAAW,CAAC,CAAC;AACzB,CAAC;AApBD,sCAoBC","sourcesContent":["import { ScanContent, ScanPage } from \"./ScanContent\";\nimport PathHelper from \"./PathHelper\";\nimport fs from \"fs/promises\";\nimport path from \"path\";\nimport { jsPDF } from \"jspdf\";\n\nexport async function mergeToPdf(\n folder: string,\n scanCount: number,\n scanJobContent: ScanContent,\n filePattern: string | undefined,\n date: Date,\n deleteFiles: boolean,\n): Promise<string | null> {\n if (scanJobContent.elements.length > 0) {\n const pdfFilePath: string = PathHelper.getFileForScan(\n folder,\n scanCount,\n filePattern,\n \"pdf\",\n date,\n );\n await createPdfFrom(scanJobContent, pdfFilePath);\n if (deleteFiles) {\n await Promise.all(scanJobContent.elements.map((e) => fs.unlink(e.path)));\n }\n return pdfFilePath;\n }\n console.log(`No page available to build a pdf file`);\n return null;\n}\n\nexport async function convertToPdf(\n scanPage: ScanPage,\n deleteFile: boolean,\n): Promise<string | null> {\n const fileName = path.basename(scanPage.path, path.extname(scanPage.path));\n const pdfFilePath = path.join(path.dirname(scanPage.path), `${fileName}.pdf`);\n\n await createPdfFrom({ elements: [scanPage] }, pdfFilePath);\n if (deleteFile) {\n await fs.unlink(scanPage.path);\n }\n return pdfFilePath;\n}\n\nexport async function createPdfFrom(\n scanContent: ScanContent,\n destination: string,\n) {\n let doc: jsPDF | null = null;\n for (const element of scanContent.elements) {\n const widthInInches = element.width / element.xResolution;\n const heightInInches = element.height / element.yResolution;\n const format = [widthInInches, heightInInches];\n\n if (doc == null) {\n doc = new jsPDF({ unit: \"in\", floatPrecision: 3, format });\n } else {\n doc.addPage(format);\n }\n\n const imageByteBuffer = await fs.readFile(element.path);\n doc.addImage(imageByteBuffer, \"JPEG\", 0, 0, widthInInches, heightInInches);\n }\n doc?.save(destination);\n}\n"]}
1
+ {"version":3,"file":"pdfProcessing.js","sourceRoot":"","sources":["../src/pdfProcessing.ts"],"names":[],"mappings":";;;;;AAMA,gCAwBC;AAED,oCAYC;AAED,sCAoBC;AAjED,8DAAsC;AACtC,2DAA6B;AAC7B,gDAAwB;AACxB,iCAA8B;AAEvB,KAAK,UAAU,UAAU,CAC9B,MAAc,EACd,SAAiB,EACjB,cAA2B,EAC3B,WAA+B,EAC/B,IAAU,EACV,WAAoB;IAEpB,IAAI,cAAc,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvC,MAAM,WAAW,GAAW,oBAAU,CAAC,cAAc,CACnD,MAAM,EACN,SAAS,EACT,WAAW,EACX,KAAK,EACL,IAAI,CACL,CAAC;QACF,MAAM,aAAa,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;QACjD,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,kBAAE,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3E,CAAC;QACD,OAAO,WAAW,CAAC;IACrB,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;IACrD,OAAO,IAAI,CAAC;AACd,CAAC;AAEM,KAAK,UAAU,YAAY,CAChC,QAAkB,EAClB,UAAmB;IAEnB,MAAM,QAAQ,GAAG,cAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,cAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3E,MAAM,WAAW,GAAG,cAAI,CAAC,IAAI,CAAC,cAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,QAAQ,MAAM,CAAC,CAAC;IAE9E,MAAM,aAAa,CAAC,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;IAC3D,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,kBAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC;AAEM,KAAK,UAAU,aAAa,CACjC,WAAwB,EACxB,WAAmB;IAEnB,IAAI,GAAG,GAAiB,IAAI,CAAC;IAC7B,KAAK,MAAM,OAAO,IAAI,WAAW,CAAC,QAAQ,EAAE,CAAC;QAC3C,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,WAAW,CAAC;QAC1D,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;QAC5D,MAAM,MAAM,GAAG,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;QAE/C,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;YAChB,GAAG,GAAG,IAAI,aAAK,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QAC7D,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACtB,CAAC;QAED,MAAM,eAAe,GAAG,MAAM,kBAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACxD,GAAG,CAAC,QAAQ,CAAC,eAAe,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,aAAa,EAAE,cAAc,CAAC,CAAC;IAC7E,CAAC;IACD,GAAG,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;AACzB,CAAC"}
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.postProcessing = void 0;
6
+ exports.postProcessing = postProcessing;
7
7
  const pdfProcessing_1 = require("./pdfProcessing");
8
8
  const paperless_1 = require("./paperless/paperless");
9
9
  const nextcloud_1 = require("./nextcloud/nextcloud");
@@ -16,7 +16,6 @@ async function postProcessing(scanConfig, folder, tempFolder, scanCount, scanJob
16
16
  await handleImagePostProcessing(folder, scanCount, scanJobContent, scanDate, scanConfig);
17
17
  }
18
18
  }
19
- exports.postProcessing = postProcessing;
20
19
  async function handlePdfPostProcessing(folder, tempFolder, scanCount, scanJobContent, scanDate, scanConfig) {
21
20
  const paperlessConfig = scanConfig.paperlessConfig;
22
21
  const nextcloudConfig = scanConfig.nextcloudConfig;
@@ -67,8 +66,7 @@ function displayJpegScan(scanJobContent) {
67
66
  scanJobContent.elements.forEach((e) => console.log(`\t- page ${e.pageNumber.toString().padStart(3, " ")} - ${e.width}x${e.height} - ${e.path}`));
68
67
  }
69
68
  async function cleanUpFilesIfNeeded(filePaths, paperlessConfig, nextcloudConfig) {
70
- var _a, _b;
71
- let keepFiles = (_b = (_a = paperlessConfig === null || paperlessConfig === void 0 ? void 0 : paperlessConfig.keepFiles) !== null && _a !== void 0 ? _a : nextcloudConfig === null || nextcloudConfig === void 0 ? void 0 : nextcloudConfig.keepFiles) !== null && _b !== void 0 ? _b : true;
69
+ const keepFiles = paperlessConfig?.keepFiles ?? nextcloudConfig?.keepFiles ?? true;
72
70
  if (!keepFiles) {
73
71
  await Promise.all(filePaths.map(async (filePath) => {
74
72
  await promises_1.default.unlink(filePath);
@@ -1 +1 @@
1
- {"version":3,"file":"postProcessing.js","sourceRoot":"","sources":["../src/postProcessing.ts"],"names":[],"mappings":"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","sourcesContent":["import { ScanContent } from \"./ScanContent\";\nimport { mergeToPdf } from \"./pdfProcessing\";\nimport {\n convertImagesToPdfAndUploadAsSeparateDocumentsToPaperless,\n mergeToPdfAndUploadAsSingleDocumentToPaperless,\n uploadImagesAsSeparateDocumentsToPaperless,\n uploadPdfToPaperless,\n} from \"./paperless/paperless\";\nimport {\n uploadPdfToNextcloud,\n uploadImagesToNextcloud,\n} from \"./nextcloud/nextcloud\";\nimport { ScanConfig } from \"./scanProcessing\";\nimport fs from \"fs/promises\";\nimport { PaperlessConfig } from \"./paperless/PaperlessConfig\";\nimport { NextcloudConfig } from \"./nextcloud/NextcloudConfig\";\n\nexport async function postProcessing(\n scanConfig: ScanConfig,\n folder: string,\n tempFolder: string,\n scanCount: number,\n scanJobContent: ScanContent,\n scanDate: Date,\n toPdf: boolean,\n) {\n if (toPdf) {\n await handlePdfPostProcessing(\n folder,\n tempFolder,\n scanCount,\n scanJobContent,\n scanDate,\n scanConfig,\n );\n } else {\n await handleImagePostProcessing(\n folder,\n scanCount,\n scanJobContent,\n scanDate,\n scanConfig,\n );\n }\n}\n\nasync function handlePdfPostProcessing(\n folder: string,\n tempFolder: string,\n scanCount: number,\n scanJobContent: ScanContent,\n scanDate: Date,\n scanConfig: ScanConfig,\n) {\n const paperlessConfig = scanConfig.paperlessConfig;\n const nextcloudConfig = scanConfig.nextcloudConfig;\n\n const pdfFilePath = await mergeToPdf(\n paperlessConfig ? tempFolder : folder,\n scanCount,\n scanJobContent,\n scanConfig.directoryConfig.filePattern,\n scanDate,\n true,\n );\n if (pdfFilePath != null) {\n displayPdfScan(pdfFilePath, scanJobContent);\n if (paperlessConfig) {\n await uploadPdfToPaperless(pdfFilePath, paperlessConfig);\n }\n if (nextcloudConfig) {\n await uploadPdfToNextcloud(pdfFilePath, nextcloudConfig);\n }\n await cleanUpFilesIfNeeded([pdfFilePath], paperlessConfig, nextcloudConfig);\n }\n}\n\nasync function handleImagePostProcessing(\n folder: string,\n scanCount: number,\n scanJobContent: ScanContent,\n scanDate: Date,\n scanConfig: ScanConfig,\n) {\n const paperlessConfig = scanConfig.paperlessConfig;\n const nextcloudConfig = scanConfig.nextcloudConfig;\n\n displayJpegScan(scanJobContent);\n if (paperlessConfig) {\n if (paperlessConfig.groupMultiPageScanIntoAPdf) {\n await mergeToPdfAndUploadAsSingleDocumentToPaperless(\n folder,\n scanCount,\n scanJobContent,\n scanConfig,\n scanDate,\n paperlessConfig,\n );\n } else {\n if (paperlessConfig.alwaysSendAsPdfFile) {\n await convertImagesToPdfAndUploadAsSeparateDocumentsToPaperless(\n scanJobContent,\n paperlessConfig,\n );\n } else {\n await uploadImagesAsSeparateDocumentsToPaperless(\n scanJobContent,\n paperlessConfig,\n );\n }\n }\n }\n if (nextcloudConfig) {\n await uploadImagesToNextcloud(scanJobContent, nextcloudConfig);\n }\n const filePaths = scanJobContent.elements.map((element) => element.path);\n await cleanUpFilesIfNeeded(filePaths, paperlessConfig, nextcloudConfig);\n}\n\nfunction displayPdfScan(\n pdfFilePath: string | null,\n scanJobContent: ScanContent,\n) {\n if (pdfFilePath === null) {\n console.log(`Pdf generated has not been generated`);\n return;\n }\n console.log(\n `The following page(s) have been rendered inside '${pdfFilePath}': `,\n );\n scanJobContent.elements.forEach((e) =>\n console.log(\n `\\t- page ${e.pageNumber.toString().padStart(3, \" \")} - ${e.width}x${\n e.height\n }`,\n ),\n );\n}\n\nfunction displayJpegScan(scanJobContent: ScanContent) {\n scanJobContent.elements.forEach((e) =>\n console.log(\n `\\t- page ${e.pageNumber.toString().padStart(3, \" \")} - ${e.width}x${\n e.height\n } - ${e.path}`,\n ),\n );\n}\n\nasync function cleanUpFilesIfNeeded(\n filePaths: string[],\n paperlessConfig: PaperlessConfig | undefined,\n nextcloudConfig: NextcloudConfig | undefined,\n) {\n let keepFiles: boolean =\n paperlessConfig?.keepFiles ?? nextcloudConfig?.keepFiles ?? true;\n if (!keepFiles) {\n await Promise.all(\n filePaths.map(async (filePath) => {\n await fs.unlink(filePath);\n console.log(`File ${filePath} has been removed from the filesystem`);\n }),\n );\n }\n}\n"]}
1
+ {"version":3,"file":"postProcessing.js","sourceRoot":"","sources":["../src/postProcessing.ts"],"names":[],"mappings":"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"}