node-hp-scan-to 1.2.2 → 1.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +47 -10
- package/dist/Destination.js +36 -84
- package/dist/Destination.js.map +1 -1
- package/dist/DeviceCapabilities.d.ts +4 -0
- package/dist/DeviceCapabilities.js +3 -0
- package/dist/DeviceCapabilities.js.map +1 -0
- package/dist/DiscoveryTree.d.ts +16 -0
- package/dist/DiscoveryTree.js +38 -0
- package/dist/DiscoveryTree.js.map +1 -0
- package/dist/Event.d.ts +1 -1
- package/dist/Event.js +24 -39
- package/dist/Event.js.map +1 -1
- package/dist/EventTable.d.ts +5 -0
- package/dist/EventTable.js +24 -18
- package/dist/EventTable.js.map +1 -1
- package/dist/HPApi.d.ts +26 -18
- package/dist/HPApi.js +386 -461
- package/dist/HPApi.js.map +1 -1
- package/dist/Job.d.ts +8 -7
- package/dist/Job.js +69 -86
- package/dist/Job.js.map +1 -1
- package/dist/JpegUtil.js +73 -82
- package/dist/JpegUtil.js.map +1 -1
- package/dist/KnownShortcut.d.ts +1 -0
- package/dist/KnownShortcut.js +3 -0
- package/dist/KnownShortcut.js.map +1 -0
- package/dist/PathHelper.d.ts +2 -1
- package/dist/PathHelper.js +41 -68
- package/dist/PathHelper.js.map +1 -1
- package/dist/ScanCaps.d.ts +7 -0
- package/dist/ScanCaps.js +17 -0
- package/dist/ScanCaps.js.map +1 -0
- package/dist/ScanContent.js +18 -73
- package/dist/ScanContent.js.map +1 -1
- package/dist/ScanJobManifest.d.ts +23 -0
- package/dist/ScanJobManifest.js +24 -0
- package/dist/ScanJobManifest.js.map +1 -0
- package/dist/ScanJobSettings.d.ts +3 -1
- package/dist/ScanJobSettings.js +48 -88
- package/dist/ScanJobSettings.js.map +1 -1
- package/dist/ScanStatus.d.ts +1 -0
- package/dist/ScanStatus.js +27 -28
- package/dist/ScanStatus.js.map +1 -1
- package/dist/WalkupScanDestination.d.ts +11 -13
- package/dist/WalkupScanDestination.js +32 -35
- package/dist/WalkupScanDestination.js.map +1 -1
- package/dist/WalkupScanDestinations.d.ts +1 -0
- package/dist/WalkupScanDestinations.js +21 -18
- package/dist/WalkupScanDestinations.js.map +1 -1
- package/dist/WalkupScanManifest.d.ts +23 -0
- package/dist/WalkupScanManifest.js +25 -0
- package/dist/WalkupScanManifest.js.map +1 -0
- package/dist/WalkupScanToCompCaps.d.ts +12 -0
- package/dist/WalkupScanToCompCaps.js +20 -0
- package/dist/WalkupScanToCompCaps.js.map +1 -0
- package/dist/WalkupScanToCompDestination.d.ts +10 -14
- package/dist/WalkupScanToCompDestination.js +32 -38
- package/dist/WalkupScanToCompDestination.js.map +1 -1
- package/dist/WalkupScanToCompDestinations.d.ts +1 -0
- package/dist/WalkupScanToCompDestinations.js +21 -18
- package/dist/WalkupScanToCompDestinations.js.map +1 -1
- package/dist/WalkupScanToCompEvent.d.ts +2 -1
- package/dist/WalkupScanToCompEvent.js +14 -11
- package/dist/WalkupScanToCompEvent.js.map +1 -1
- package/dist/WalkupScanToCompManifest.d.ts +23 -0
- package/dist/WalkupScanToCompManifest.js +25 -0
- package/dist/WalkupScanToCompManifest.js.map +1 -0
- package/dist/delay.d.ts +1 -0
- package/dist/delay.js +10 -0
- package/dist/delay.js.map +1 -0
- package/dist/fixJpegSize.d.ts +19 -0
- package/dist/fixJpegSize.js +292 -0
- package/dist/fixJpegSize.js.map +1 -0
- package/dist/index.js +209 -607
- package/dist/index.js.map +1 -1
- package/dist/listening.d.ts +9 -0
- package/dist/listening.js +108 -0
- package/dist/listening.js.map +1 -0
- package/dist/models/Destination.d.ts +8 -0
- package/dist/models/Destination.js +68 -0
- package/dist/models/Destination.js.map +1 -0
- package/dist/models/DiscoveryTree.d.ts +16 -0
- package/dist/models/DiscoveryTree.js +38 -0
- package/dist/models/DiscoveryTree.js.map +1 -0
- package/dist/models/Event.d.ts +21 -0
- package/dist/models/Event.js +32 -0
- package/dist/models/Event.js.map +1 -0
- package/dist/models/EventTable.d.ts +16 -0
- package/dist/models/EventTable.js +33 -0
- package/dist/models/EventTable.js.map +1 -0
- package/dist/models/Job.d.ts +37 -0
- package/dist/models/Job.js +78 -0
- package/dist/models/Job.js.map +1 -0
- package/dist/models/ScanCaps.d.ts +7 -0
- package/dist/models/ScanCaps.js +17 -0
- package/dist/models/ScanCaps.js.map +1 -0
- package/dist/models/ScanJobManifest.d.ts +23 -0
- package/dist/models/ScanJobManifest.js +24 -0
- package/dist/models/ScanJobManifest.js.map +1 -0
- package/dist/models/ScanJobSettings.d.ts +8 -0
- package/dist/models/ScanJobSettings.js +56 -0
- package/dist/models/ScanJobSettings.js.map +1 -0
- package/dist/models/WalkupScanDestination.d.ts +22 -0
- package/dist/models/WalkupScanDestination.js +38 -0
- package/dist/models/WalkupScanDestination.js.map +1 -0
- package/dist/models/WalkupScanDestinations.d.ts +12 -0
- package/dist/models/WalkupScanDestinations.js +30 -0
- package/dist/models/WalkupScanDestinations.js.map +1 -0
- package/dist/models/WalkupScanManifest.d.ts +23 -0
- package/dist/models/WalkupScanManifest.js +25 -0
- package/dist/models/WalkupScanManifest.js.map +1 -0
- package/dist/models/WalkupScanToCompCaps.d.ts +12 -0
- package/dist/models/WalkupScanToCompCaps.js +20 -0
- package/dist/models/WalkupScanToCompCaps.js.map +1 -0
- package/dist/models/WalkupScanToCompDestination.d.ts +22 -0
- package/dist/models/WalkupScanToCompDestination.js +38 -0
- package/dist/models/WalkupScanToCompDestination.js.map +1 -0
- package/dist/models/WalkupScanToCompDestinations.d.ts +12 -0
- package/dist/models/WalkupScanToCompDestinations.js +30 -0
- package/dist/models/WalkupScanToCompDestinations.js.map +1 -0
- package/dist/models/WalkupScanToCompEvent.d.ts +11 -0
- package/dist/models/WalkupScanToCompEvent.js +20 -0
- package/dist/models/WalkupScanToCompEvent.js.map +1 -0
- package/dist/models/WalkupScanToCompManifest.d.ts +23 -0
- package/dist/models/WalkupScanToCompManifest.js +25 -0
- package/dist/models/WalkupScanToCompManifest.js.map +1 -0
- package/dist/readDeviceCapabilities.d.ts +2 -0
- package/dist/readDeviceCapabilities.js +41 -0
- package/dist/readDeviceCapabilities.js.map +1 -0
- package/dist/scanProcess.d.ts +19 -0
- package/dist/scanProcess.js +292 -0
- package/dist/scanProcess.js.map +1 -0
- package/dist/scanProcessing.d.ts +20 -0
- package/dist/scanProcessing.js +320 -0
- package/dist/scanProcessing.js.map +1 -0
- package/dist/src/Destination.d.ts +8 -0
- package/dist/src/Destination.js +68 -0
- package/dist/src/Destination.js.map +1 -0
- package/dist/src/DiscoveryTree.d.ts +16 -0
- package/dist/src/DiscoveryTree.js +38 -0
- package/dist/src/DiscoveryTree.js.map +1 -0
- package/dist/src/Event.d.ts +21 -0
- package/dist/src/Event.js +32 -0
- package/dist/src/Event.js.map +1 -0
- package/dist/src/EventTable.d.ts +16 -0
- package/dist/src/EventTable.js +33 -0
- package/dist/src/EventTable.js.map +1 -0
- package/dist/src/HPApi.d.ts +50 -0
- package/dist/src/HPApi.js +454 -0
- package/dist/src/HPApi.js.map +1 -0
- package/dist/src/Job.d.ts +37 -0
- package/dist/src/Job.js +78 -0
- package/dist/src/Job.js.map +1 -0
- package/dist/src/JpegUtil.d.ts +26 -0
- package/dist/src/JpegUtil.js +229 -0
- package/dist/src/JpegUtil.js.map +1 -0
- package/dist/src/KnownShortcut.d.ts +1 -0
- package/dist/src/KnownShortcut.js +3 -0
- package/dist/src/KnownShortcut.js.map +1 -0
- package/dist/src/PathHelper.d.ts +6 -0
- package/dist/src/PathHelper.js +52 -0
- package/dist/src/PathHelper.js.map +1 -0
- package/dist/src/ScanCaps.d.ts +7 -0
- package/dist/src/ScanCaps.js +17 -0
- package/dist/src/ScanCaps.js.map +1 -0
- package/dist/src/ScanJobManifest.d.ts +23 -0
- package/dist/src/ScanJobManifest.js +24 -0
- package/dist/src/ScanJobManifest.js.map +1 -0
- package/dist/src/ScanJobSettings.d.ts +8 -0
- package/dist/src/ScanJobSettings.js +56 -0
- package/dist/src/ScanJobSettings.js.map +1 -0
- package/dist/src/ScanStatus.d.ts +19 -0
- package/dist/src/ScanStatus.js +35 -0
- package/dist/src/ScanStatus.js.map +1 -0
- package/dist/src/WalkupScanDestination.d.ts +22 -0
- package/dist/src/WalkupScanDestination.js +38 -0
- package/dist/src/WalkupScanDestination.js.map +1 -0
- package/dist/src/WalkupScanDestinations.d.ts +12 -0
- package/dist/src/WalkupScanDestinations.js +30 -0
- package/dist/src/WalkupScanDestinations.js.map +1 -0
- package/dist/src/WalkupScanManifest.d.ts +23 -0
- package/dist/src/WalkupScanManifest.js +25 -0
- package/dist/src/WalkupScanManifest.js.map +1 -0
- package/dist/src/WalkupScanToCompCaps.d.ts +12 -0
- package/dist/src/WalkupScanToCompCaps.js +20 -0
- package/dist/src/WalkupScanToCompCaps.js.map +1 -0
- package/dist/src/WalkupScanToCompDestination.d.ts +22 -0
- package/dist/src/WalkupScanToCompDestination.js +38 -0
- package/dist/src/WalkupScanToCompDestination.js.map +1 -0
- package/dist/src/WalkupScanToCompDestinations.d.ts +12 -0
- package/dist/src/WalkupScanToCompDestinations.js +30 -0
- package/dist/src/WalkupScanToCompDestinations.js.map +1 -0
- package/dist/src/WalkupScanToCompEvent.d.ts +11 -0
- package/dist/src/WalkupScanToCompEvent.js +20 -0
- package/dist/src/WalkupScanToCompEvent.js.map +1 -0
- package/dist/src/WalkupScanToCompManifest.d.ts +23 -0
- package/dist/src/WalkupScanToCompManifest.js +25 -0
- package/dist/src/WalkupScanToCompManifest.js.map +1 -0
- package/dist/src/delay.d.ts +1 -0
- package/dist/src/delay.js +10 -0
- package/dist/src/delay.js.map +1 -0
- package/dist/test/DiscoveryTree.test.d.ts +1 -0
- package/dist/test/DiscoveryTree.test.js +68 -0
- package/dist/test/DiscoveryTree.test.js.map +1 -0
- package/dist/test/EtagEventTable.test.d.ts +1 -0
- package/dist/test/EtagEventTable.test.js +93 -0
- package/dist/test/EtagEventTable.test.js.map +1 -0
- package/dist/test/Job.test.d.ts +1 -0
- package/dist/test/Job.test.js +104 -0
- package/dist/test/Job.test.js.map +1 -0
- package/dist/test/JpegUtil.test.d.ts +1 -0
- package/dist/test/JpegUtil.test.js +51 -0
- package/dist/test/JpegUtil.test.js.map +1 -0
- package/dist/test/PathHelper.test.d.ts +1 -0
- package/dist/test/PathHelper.test.js +99 -0
- package/dist/test/PathHelper.test.js.map +1 -0
- package/dist/test/ScanJobManifest.test.d.ts +1 -0
- package/dist/test/ScanJobManifest.test.js +56 -0
- package/dist/test/ScanJobManifest.test.js.map +1 -0
- package/dist/test/ScanJobSettings.test.d.ts +1 -0
- package/dist/test/ScanJobSettings.test.js +53 -0
- package/dist/test/ScanJobSettings.test.js.map +1 -0
- package/dist/test/ScanStatus.test.d.ts +1 -0
- package/dist/test/ScanStatus.test.js +75 -0
- package/dist/test/ScanStatus.test.js.map +1 -0
- package/dist/test/WalkupScanDestination.test.d.ts +1 -0
- package/dist/test/WalkupScanDestination.test.js +80 -0
- package/dist/test/WalkupScanDestination.test.js.map +1 -0
- package/dist/test/WalkupScanDestinations.test.d.ts +1 -0
- package/dist/test/WalkupScanDestinations.test.js +68 -0
- package/dist/test/WalkupScanDestinations.test.js.map +1 -0
- package/dist/test/WalkupScanManifest.test.d.ts +1 -0
- package/dist/test/WalkupScanManifest.test.js +46 -0
- package/dist/test/WalkupScanManifest.test.js.map +1 -0
- package/dist/test/WalkupScanToCompCaps.test.d.ts +1 -0
- package/dist/test/WalkupScanToCompCaps.test.js +56 -0
- package/dist/test/WalkupScanToCompCaps.test.js.map +1 -0
- package/dist/test/WalkupScanToCompDestination.test.d.ts +1 -0
- package/dist/test/WalkupScanToCompDestination.test.js +58 -0
- package/dist/test/WalkupScanToCompDestination.test.js.map +1 -0
- package/dist/test/WalkupScanToCompDestinations.test.d.ts +1 -0
- package/dist/test/WalkupScanToCompDestinations.test.js +58 -0
- package/dist/test/WalkupScanToCompDestinations.test.js.map +1 -0
- package/dist/test/WalkupScanToCompEvent.test.d.ts +1 -0
- package/dist/test/WalkupScanToCompEvent.test.js +46 -0
- package/dist/test/WalkupScanToCompEvent.test.js.map +1 -0
- package/dist/test/WalkupScanToCompManifest.test.d.ts +1 -0
- package/dist/test/WalkupScanToCompManifest.test.js +46 -0
- package/dist/test/WalkupScanToCompManifest.test.js.map +1 -0
- package/dist/test/clean.d.ts +1 -0
- package/dist/test/clean.js +21 -0
- package/dist/test/clean.js.map +1 -0
- package/package.json +27 -18
- package/src/Destination.ts +1 -1
- package/src/DeviceCapabilities.ts +4 -0
- package/src/DiscoveryTree.ts +56 -0
- package/src/Event.ts +17 -7
- package/src/EventTable.ts +20 -0
- package/src/HPApi.ts +245 -103
- package/src/Job.ts +51 -29
- package/src/JpegUtil.ts +8 -4
- package/src/KnownShortcut.ts +6 -0
- package/src/PathHelper.ts +47 -13
- package/src/ScanCaps.ts +19 -0
- package/src/ScanContent.ts +4 -1
- package/src/ScanJobManifest.ts +55 -0
- package/src/ScanJobSettings.ts +18 -3
- package/src/ScanStatus.ts +9 -0
- package/src/WalkupScanDestination.ts +42 -18
- package/src/WalkupScanDestinations.ts +12 -0
- package/src/WalkupScanManifest.ts +59 -0
- package/src/WalkupScanToCompCaps.ts +36 -0
- package/src/WalkupScanToCompDestination.ts +38 -24
- package/src/WalkupScanToCompDestinations.ts +12 -0
- package/src/WalkupScanToCompEvent.ts +15 -3
- package/src/WalkupScanToCompManifest.ts +59 -0
- package/src/delay.ts +5 -0
- package/src/index.ts +267 -465
- package/src/listening.ts +145 -0
- package/src/readDeviceCapabilities.ts +46 -0
- package/src/scanProcessing.ts +535 -0
- package/tsconfig.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WalkupScanToCompDestinations.js","sourceRoot":"","sources":["../src/WalkupScanToCompDestinations.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;;;;
|
|
1
|
+
{"version":3,"file":"WalkupScanToCompDestinations.js","sourceRoot":"","sources":["../src/WalkupScanToCompDestinations.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;;;;AACb,mCAAgC;AAChC,MAAM,MAAM,GAAG,IAAI,eAAM,EAAE,CAAC;AAC5B,+BAAiC;AACjC,MAAM,WAAW,GAAG,IAAA,gBAAS,EAC3B,MAAM,CAAC,WAAW,CACnB,CAAC;AAEF,gGAEuC;AAQvC,MAAqB,4BAA4B;IAE/C,YAAY,IAAsC;QAChD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IACD,MAAM,CAAC,KAAK,CAAC,kCAAkC,CAC7C,OAAe;QAEf,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC;QAC1C,OAAO,IAAI,4BAA4B,CAAC,MAAM,CAAC,CAAC;IAClD,CAAC;IAED,IAAI,YAAY;QACd,IAAI,4BAA4B,GAC9B,IAAI,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;QAChD,IACE,4BAA4B,CAAC,cAAc,CACzC,iCAAiC,CAClC,EACD;YACA,OAAO,4BAA4B,CACjC,iCAAiC,CAClC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,qCAA2B,CAAC,CAAC,CAAC,CAAC,CAAC;SAClD;aAAM;YACL,OAAO,EAAE,CAAC;SACX;IACH,CAAC;CACF;AA3BD,+CA2BC","sourcesContent":["\"use strict\";\nimport { Parser } from \"xml2js\";\nconst parser = new Parser();\nimport { promisify } from \"util\";\nconst parseString = promisify<string, WalkupScanToCompDestinationsData>(\n parser.parseString\n);\n\nimport WalkupScanToCompDestination, {\n WalkupScanToCompDestinationData,\n} from \"./WalkupScanToCompDestination\";\n\nexport interface WalkupScanToCompDestinationsData {\n \"wus:WalkupScanToCompDestinations\": {\n \"wus:WalkupScanToCompDestination\": WalkupScanToCompDestinationData[];\n };\n}\n\nexport default class WalkupScanToCompDestinations {\n private readonly data: WalkupScanToCompDestinationsData;\n constructor(data: WalkupScanToCompDestinationsData) {\n this.data = data;\n }\n static async createWalkupScanToCompDestinations(\n content: string\n ): Promise<WalkupScanToCompDestinations> {\n const parsed = await parseString(content);\n return new WalkupScanToCompDestinations(parsed);\n }\n\n get destinations(): WalkupScanToCompDestination[] {\n let walkupScanToCompDestinations =\n this.data[\"wus:WalkupScanToCompDestinations\"];\n if (\n walkupScanToCompDestinations.hasOwnProperty(\n \"wus:WalkupScanToCompDestination\"\n )\n ) {\n return walkupScanToCompDestinations[\n \"wus:WalkupScanToCompDestination\"\n ].map((x) => new WalkupScanToCompDestination(x));\n } else {\n return [];\n }\n }\n}\n"]}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
export interface WalkupScanToCompEventData {
|
|
2
2
|
"wus:WalkupScanToCompEvent": {
|
|
3
|
-
|
|
3
|
+
"wus:WalkupScanToCompEventType": string[];
|
|
4
4
|
};
|
|
5
5
|
}
|
|
6
6
|
export default class WalkupScanToCompEvent {
|
|
7
7
|
private readonly data;
|
|
8
8
|
constructor(data: WalkupScanToCompEventData);
|
|
9
|
+
static createWalkupScanToCompEvent(content: string): Promise<WalkupScanToCompEvent>;
|
|
9
10
|
get eventType(): string;
|
|
10
11
|
}
|
|
@@ -1,17 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
const xml2js_1 = require("xml2js");
|
|
4
|
+
const parser = new xml2js_1.Parser();
|
|
5
|
+
const util_1 = require("util");
|
|
6
|
+
const parseString = (0, util_1.promisify)(parser.parseString);
|
|
7
|
+
class WalkupScanToCompEvent {
|
|
8
|
+
constructor(data) {
|
|
5
9
|
this.data = data;
|
|
6
10
|
}
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
}());
|
|
11
|
+
static async createWalkupScanToCompEvent(content) {
|
|
12
|
+
const parsed = await parseString(content);
|
|
13
|
+
return new WalkupScanToCompEvent(parsed);
|
|
14
|
+
}
|
|
15
|
+
get eventType() {
|
|
16
|
+
return this.data["wus:WalkupScanToCompEvent"]["wus:WalkupScanToCompEventType"][0];
|
|
17
|
+
}
|
|
18
|
+
}
|
|
16
19
|
exports.default = WalkupScanToCompEvent;
|
|
17
20
|
//# sourceMappingURL=WalkupScanToCompEvent.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WalkupScanToCompEvent.js","sourceRoot":"","sources":["../src/WalkupScanToCompEvent.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;
|
|
1
|
+
{"version":3,"file":"WalkupScanToCompEvent.js","sourceRoot":"","sources":["../src/WalkupScanToCompEvent.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AACb,mCAAgC;AAChC,MAAM,MAAM,GAAG,IAAI,eAAM,EAAE,CAAC;AAC5B,+BAAiC;AACjC,MAAM,WAAW,GAAG,IAAA,gBAAS,EAC3B,MAAM,CAAC,WAAW,CACnB,CAAC;AAQF,MAAqB,qBAAqB;IAExC,YAAY,IAA+B;QACzC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IACD,MAAM,CAAC,KAAK,CAAC,2BAA2B,CAAC,OAAe;QACtD,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC;QAC1C,OAAO,IAAI,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC3C,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAC3C,+BAA+B,CAChC,CAAC,CAAC,CAAC,CAAC;IACP,CAAC;CACF;AAfD,wCAeC","sourcesContent":["\"use strict\";\nimport { Parser } from \"xml2js\";\nconst parser = new Parser();\nimport { promisify } from \"util\";\nconst parseString = promisify<string, WalkupScanToCompEventData>(\n parser.parseString\n);\n\nexport interface WalkupScanToCompEventData {\n \"wus:WalkupScanToCompEvent\": {\n \"wus:WalkupScanToCompEventType\": string[];\n };\n}\n\nexport default class WalkupScanToCompEvent {\n private readonly data: WalkupScanToCompEventData;\n constructor(data: WalkupScanToCompEventData) {\n this.data = data;\n }\n static async createWalkupScanToCompEvent(content: string) {\n const parsed = await parseString(content);\n return new WalkupScanToCompEvent(parsed);\n }\n\n get eventType(): string {\n return this.data[\"wus:WalkupScanToCompEvent\"][\n \"wus:WalkupScanToCompEventType\"\n ][0];\n }\n}\n"]}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export interface WalkupScanToCompManifestData {
|
|
2
|
+
"man:Manifest": {
|
|
3
|
+
"map:ResourceMap": {
|
|
4
|
+
"map:ResourceLink": {
|
|
5
|
+
"dd:ResourceURI": string[];
|
|
6
|
+
}[];
|
|
7
|
+
"map:ResourceNode": {
|
|
8
|
+
"map:ResourceLink": {
|
|
9
|
+
"dd:ResourceURI": string[];
|
|
10
|
+
}[];
|
|
11
|
+
"map:ResourceType": {
|
|
12
|
+
"wus:WalkupScanToCompResourceType": string[];
|
|
13
|
+
}[];
|
|
14
|
+
}[];
|
|
15
|
+
}[];
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
export default class WalkupScanToCompManifest {
|
|
19
|
+
private readonly data;
|
|
20
|
+
constructor(data: WalkupScanToCompManifestData);
|
|
21
|
+
static createWalkupScanToCompManifest(content: string): Promise<WalkupScanToCompManifest>;
|
|
22
|
+
get WalkupScanToCompCapsURI(): string | null;
|
|
23
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const xml2js_1 = require("xml2js");
|
|
4
|
+
const parser = new xml2js_1.Parser();
|
|
5
|
+
const util_1 = require("util");
|
|
6
|
+
const parseString = (0, util_1.promisify)(parser.parseString);
|
|
7
|
+
class WalkupScanToCompManifest {
|
|
8
|
+
constructor(data) {
|
|
9
|
+
this.data = data;
|
|
10
|
+
}
|
|
11
|
+
static async createWalkupScanToCompManifest(content) {
|
|
12
|
+
const parsed = await parseString(content);
|
|
13
|
+
return new WalkupScanToCompManifest(parsed);
|
|
14
|
+
}
|
|
15
|
+
get WalkupScanToCompCapsURI() {
|
|
16
|
+
const walkupScanToCompCaps = this.data["man:Manifest"]["map:ResourceMap"]["0"]["map:ResourceNode"].find((x) => x["map:ResourceType"][0]["wus:WalkupScanToCompResourceType"][0] ===
|
|
17
|
+
"WalkupScanToCompCaps");
|
|
18
|
+
if (walkupScanToCompCaps === undefined) {
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
return (this.data["man:Manifest"]["map:ResourceMap"]["0"]["map:ResourceLink"][0]["dd:ResourceURI"][0] + walkupScanToCompCaps["map:ResourceLink"][0]["dd:ResourceURI"][0]);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
exports.default = WalkupScanToCompManifest;
|
|
25
|
+
//# sourceMappingURL=WalkupScanToCompManifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WalkupScanToCompManifest.js","sourceRoot":"","sources":["../src/WalkupScanToCompManifest.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AACb,mCAAgC;AAChC,MAAM,MAAM,GAAG,IAAI,eAAM,EAAE,CAAC;AAC5B,+BAAiC;AACjC,MAAM,WAAW,GAAG,IAAA,gBAAS,EAC3B,MAAM,CAAC,WAAW,CACnB,CAAC;AAoBF,MAAqB,wBAAwB;IAG3C,YAAY,IAAkC;QAC5C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IACD,MAAM,CAAC,KAAK,CAAC,8BAA8B,CACzC,OAAe;QAEf,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC;QAC1C,OAAO,IAAI,wBAAwB,CAAC,MAAM,CAAC,CAAC;IAC9C,CAAC;IAED,IAAI,uBAAuB;QACzB,MAAM,oBAAoB,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,iBAAiB,CAAC,CACvE,GAAG,CACJ,CAAC,kBAAkB,CAAC,CAAC,IAAI,CACxB,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,kCAAkC,CAAC,CAAC,CAAC,CAAC;YAC/D,sBAAsB,CACzB,CAAC;QAEF,IAAI,oBAAoB,KAAK,SAAS,EAAE;YACtC,OAAO,IAAI,CAAC;SACb;QAED,OAAO,CACL,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CACtE,gBAAgB,CACjB,CAAC,CAAC,CAAC,GAAG,oBAAoB,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CACxE,CAAC;IACJ,CAAC;CACF;AAhCD,2CAgCC","sourcesContent":["\"use strict\";\nimport { Parser } from \"xml2js\";\nconst parser = new Parser();\nimport { promisify } from \"util\";\nconst parseString = promisify<string, WalkupScanToCompManifestData>(\n parser.parseString\n);\n\nexport interface WalkupScanToCompManifestData {\n \"man:Manifest\": {\n \"map:ResourceMap\": {\n \"map:ResourceLink\": {\n \"dd:ResourceURI\": string[];\n }[];\n \"map:ResourceNode\": {\n \"map:ResourceLink\": {\n \"dd:ResourceURI\": string[];\n }[];\n \"map:ResourceType\": {\n \"wus:WalkupScanToCompResourceType\": string[];\n }[];\n }[];\n }[];\n };\n}\n\nexport default class WalkupScanToCompManifest {\n private readonly data: WalkupScanToCompManifestData;\n\n constructor(data: WalkupScanToCompManifestData) {\n this.data = data;\n }\n static async createWalkupScanToCompManifest(\n content: string\n ): Promise<WalkupScanToCompManifest> {\n const parsed = await parseString(content);\n return new WalkupScanToCompManifest(parsed);\n }\n\n get WalkupScanToCompCapsURI(): string | null {\n const walkupScanToCompCaps = this.data[\"man:Manifest\"][\"map:ResourceMap\"][\n \"0\"\n ][\"map:ResourceNode\"].find(\n (x) =>\n x[\"map:ResourceType\"][0][\"wus:WalkupScanToCompResourceType\"][0] ===\n \"WalkupScanToCompCaps\"\n );\n\n if (walkupScanToCompCaps === undefined) {\n return null;\n }\n\n return (\n this.data[\"man:Manifest\"][\"map:ResourceMap\"][\"0\"][\"map:ResourceLink\"][0][\n \"dd:ResourceURI\"\n ][0] + walkupScanToCompCaps[\"map:ResourceLink\"][0][\"dd:ResourceURI\"][0]\n );\n }\n}\n"]}
|
package/dist/delay.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function delay(t: number): Promise<void>;
|
package/dist/delay.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.delay = void 0;
|
|
4
|
+
function delay(t) {
|
|
5
|
+
return new Promise(function (resolve) {
|
|
6
|
+
setTimeout(resolve, t);
|
|
7
|
+
});
|
|
8
|
+
}
|
|
9
|
+
exports.delay = delay;
|
|
10
|
+
//# sourceMappingURL=delay.js.map
|
|
@@ -0,0 +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"]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import Event from "./Event";
|
|
2
|
+
import { DeviceCapabilities } from "./DeviceCapabilities";
|
|
3
|
+
export declare function saveScan(event: Event, folder: string, tempFolder: string, scanCount: number, deviceCapabilities: DeviceCapabilities, scanConfig: ScanConfig): Promise<void>;
|
|
4
|
+
export type DirectoryConfig = {
|
|
5
|
+
directory: string | undefined;
|
|
6
|
+
tempDirectory: string | undefined;
|
|
7
|
+
filePattern: string | undefined;
|
|
8
|
+
};
|
|
9
|
+
export type ScanConfig = {
|
|
10
|
+
resolution: number;
|
|
11
|
+
directoryConfig: DirectoryConfig;
|
|
12
|
+
};
|
|
13
|
+
export type AdfAutoScanConfig = ScanConfig & {
|
|
14
|
+
isDuplex: boolean;
|
|
15
|
+
generatePdf: boolean;
|
|
16
|
+
pollingInterval: number;
|
|
17
|
+
startScanDelay: number;
|
|
18
|
+
};
|
|
19
|
+
export declare function scanFromAdf(scanCount: number, folder: string, tempFolder: string, adfAutoScanConfig: AdfAutoScanConfig): Promise<void>;
|
|
@@ -0,0 +1,292 @@
|
|
|
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
|
+
exports.scanFromAdf = exports.saveScan = void 0;
|
|
7
|
+
const HPApi_1 = __importDefault(require("./HPApi"));
|
|
8
|
+
const promises_1 = __importDefault(require("fs/promises"));
|
|
9
|
+
const JpegUtil_1 = __importDefault(require("./JpegUtil"));
|
|
10
|
+
const listening_1 = require("./listening");
|
|
11
|
+
const ScanJobSettings_1 = __importDefault(require("./ScanJobSettings"));
|
|
12
|
+
const ScanContent_1 = require("./ScanContent");
|
|
13
|
+
const delay_1 = require("./delay");
|
|
14
|
+
const PathHelper_1 = __importDefault(require("./PathHelper"));
|
|
15
|
+
async function waitDeviceUntilItIsReadyToUploadOrCompleted(jobUrl) {
|
|
16
|
+
let job = null;
|
|
17
|
+
let isReadyToUpload = false;
|
|
18
|
+
do {
|
|
19
|
+
job = await HPApi_1.default.getJob(jobUrl);
|
|
20
|
+
if (job.jobState === "Canceled") {
|
|
21
|
+
return job;
|
|
22
|
+
}
|
|
23
|
+
else if (job.pageState === "ReadyToUpload" ||
|
|
24
|
+
job.jobState === "Completed") {
|
|
25
|
+
isReadyToUpload = true;
|
|
26
|
+
}
|
|
27
|
+
else if (job.jobState == "Processing") {
|
|
28
|
+
isReadyToUpload = false;
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
console.log(`Unknown jobState: ${job.jobState}`);
|
|
32
|
+
}
|
|
33
|
+
await (0, delay_1.delay)(300);
|
|
34
|
+
} while (!isReadyToUpload);
|
|
35
|
+
return job;
|
|
36
|
+
}
|
|
37
|
+
async function TryGetDestination(event) {
|
|
38
|
+
//this code can in some cases be executed before the user actually chooses between Document or Photo
|
|
39
|
+
//so lets fetch the contentType (Document or Photo) until we get a value
|
|
40
|
+
let destination = null;
|
|
41
|
+
for (let i = 0; i < 20; i++) {
|
|
42
|
+
const destinationURI = event.destinationURI;
|
|
43
|
+
if (destinationURI) {
|
|
44
|
+
destination = await HPApi_1.default.getDestination(destinationURI);
|
|
45
|
+
const shortcut = destination.shortcut;
|
|
46
|
+
if (shortcut != null) {
|
|
47
|
+
return destination;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
console.log(`No destination URI found`);
|
|
52
|
+
}
|
|
53
|
+
console.log(`No shortcut yet available, attempt: ${i + 1}/20`);
|
|
54
|
+
await new Promise((resolve) => setTimeout(resolve, 1000)); //wait 1s
|
|
55
|
+
}
|
|
56
|
+
console.log("Failing to detect destination shortcut");
|
|
57
|
+
console.log(JSON.stringify(destination));
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
async function fixJpegSize(filePath) {
|
|
61
|
+
const buffer = await promises_1.default.readFile(filePath);
|
|
62
|
+
let height = JpegUtil_1.default.fixSizeWithDNL(buffer);
|
|
63
|
+
if (height != null) {
|
|
64
|
+
// rewrite the fixed file
|
|
65
|
+
await promises_1.default.writeFile(filePath, buffer);
|
|
66
|
+
return height;
|
|
67
|
+
}
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
function createScanPage(job, currentPageNumber, filePath, sizeFixed) {
|
|
71
|
+
var _a, _b, _c;
|
|
72
|
+
let height = sizeFixed !== null && sizeFixed !== void 0 ? sizeFixed : job.imageHeight;
|
|
73
|
+
return {
|
|
74
|
+
path: filePath,
|
|
75
|
+
pageNumber: currentPageNumber,
|
|
76
|
+
width: (_a = job.imageWidth) !== null && _a !== void 0 ? _a : 0,
|
|
77
|
+
height: height !== null && height !== void 0 ? height : 0,
|
|
78
|
+
xResolution: (_b = job.xResolution) !== null && _b !== void 0 ? _b : 200,
|
|
79
|
+
yResolution: (_c = job.yResolution) !== null && _c !== void 0 ? _c : 200
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
async function handleProcessingState(job, inputSource, folder, scanCount, currentPageNumber, filePattern) {
|
|
83
|
+
if (job.pageState == "ReadyToUpload" &&
|
|
84
|
+
job.binaryURL != null &&
|
|
85
|
+
job.currentPageNumber != null) {
|
|
86
|
+
console.log(`Ready to download page job page ${job.currentPageNumber} at:`, job.binaryURL);
|
|
87
|
+
const destinationFilePath = PathHelper_1.default.getFileForPage(folder, scanCount, currentPageNumber, filePattern, "jpg");
|
|
88
|
+
const filePath = await HPApi_1.default.downloadPage(job.binaryURL, destinationFilePath);
|
|
89
|
+
console.log("Page downloaded to:", filePath);
|
|
90
|
+
let sizeFixed = null;
|
|
91
|
+
if (inputSource == "Adf") {
|
|
92
|
+
sizeFixed = await fixJpegSize(filePath);
|
|
93
|
+
if (sizeFixed == null) {
|
|
94
|
+
console.log(`File size has not been fixed, DNF may not have been found and approximate height is: ${job.imageHeight}`);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return createScanPage(job, currentPageNumber, filePath, sizeFixed);
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
console.log(`Unknown pageState: ${job.pageState}`);
|
|
101
|
+
await (0, delay_1.delay)(200);
|
|
102
|
+
return null;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
async function executeScanJob(scanJobSettings, inputSource, folder, scanCount, scanJobContent, filePattern) {
|
|
106
|
+
const jobUrl = await HPApi_1.default.postJob(scanJobSettings);
|
|
107
|
+
console.log("New job created:", jobUrl);
|
|
108
|
+
let job = await HPApi_1.default.getJob(jobUrl);
|
|
109
|
+
while (job.jobState !== "Completed") {
|
|
110
|
+
job = await waitDeviceUntilItIsReadyToUploadOrCompleted(jobUrl);
|
|
111
|
+
if (job.jobState == "Completed") {
|
|
112
|
+
continue;
|
|
113
|
+
}
|
|
114
|
+
if (job.jobState === "Processing") {
|
|
115
|
+
const page = await handleProcessingState(job, inputSource, folder, scanCount, scanJobContent.elements.length + 1, filePattern);
|
|
116
|
+
job = await HPApi_1.default.getJob(jobUrl);
|
|
117
|
+
if (page != null && job.jobState != "Canceled") {
|
|
118
|
+
scanJobContent.elements.push(page);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
else if (job.jobState === "Canceled") {
|
|
122
|
+
console.log("Job cancelled by device");
|
|
123
|
+
break;
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
console.log(`Unhandled jobState: ${job.jobState}`);
|
|
127
|
+
await (0, delay_1.delay)(200);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
console.log(`Job state: ${job.jobState}, totalPages: ${scanJobContent.elements.length}:`);
|
|
131
|
+
return job.jobState;
|
|
132
|
+
}
|
|
133
|
+
async function waitScanNewPageRequest(compEventURI) {
|
|
134
|
+
let startNewScanJob = false;
|
|
135
|
+
let wait = true;
|
|
136
|
+
while (wait) {
|
|
137
|
+
await new Promise((resolve) => setTimeout(resolve, 1000)); //wait 1s
|
|
138
|
+
let walkupScanToCompEvent = await HPApi_1.default.getWalkupScanToCompEvent(compEventURI);
|
|
139
|
+
let message = walkupScanToCompEvent.eventType;
|
|
140
|
+
if (message === "ScanNewPageRequested") {
|
|
141
|
+
startNewScanJob = true;
|
|
142
|
+
wait = false;
|
|
143
|
+
}
|
|
144
|
+
else if (message === "ScanPagesComplete") {
|
|
145
|
+
wait = false;
|
|
146
|
+
}
|
|
147
|
+
else if (message === "ScanRequested") {
|
|
148
|
+
// continue waiting
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
wait = false;
|
|
152
|
+
console.log(`Unknown eventType: ${message}`);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
return startNewScanJob;
|
|
156
|
+
}
|
|
157
|
+
async function executeScanJobs(scanJobSettings, inputSource, folder, scanCount, scanJobContent, firstEvent, deviceCapabilities, filePattern) {
|
|
158
|
+
let jobState = await executeScanJob(scanJobSettings, inputSource, folder, scanCount, scanJobContent, filePattern);
|
|
159
|
+
let lastEvent = firstEvent;
|
|
160
|
+
if (jobState === "Completed" &&
|
|
161
|
+
lastEvent.compEventURI &&
|
|
162
|
+
inputSource !== "Adf" &&
|
|
163
|
+
lastEvent.destinationURI &&
|
|
164
|
+
deviceCapabilities.supportsMultiItemScanFromPlaten) {
|
|
165
|
+
lastEvent = await (0, listening_1.waitForScanEvent)(lastEvent.destinationURI, lastEvent.agingStamp);
|
|
166
|
+
if (!lastEvent.compEventURI) {
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
let startNewScanJob = await waitScanNewPageRequest(lastEvent.compEventURI);
|
|
170
|
+
while (startNewScanJob) {
|
|
171
|
+
jobState = await executeScanJob(scanJobSettings, inputSource, folder, scanCount, scanJobContent, filePattern);
|
|
172
|
+
if (jobState !== "Completed") {
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
if (!lastEvent.destinationURI) {
|
|
176
|
+
break;
|
|
177
|
+
}
|
|
178
|
+
lastEvent = await (0, listening_1.waitForScanEvent)(lastEvent.destinationURI, lastEvent.agingStamp);
|
|
179
|
+
if (!lastEvent.compEventURI) {
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
startNewScanJob = await waitScanNewPageRequest(lastEvent.compEventURI);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
async function mergeToPdf(folder, scanCount, scanJobContent, filePattern) {
|
|
187
|
+
if (scanJobContent.elements.length > 0) {
|
|
188
|
+
const pdfFilePath = PathHelper_1.default.getFileForScan(folder, scanCount, filePattern, "pdf");
|
|
189
|
+
await (0, ScanContent_1.createPdfFrom)(scanJobContent, pdfFilePath);
|
|
190
|
+
scanJobContent.elements.forEach((e) => promises_1.default.unlink(e.path));
|
|
191
|
+
return pdfFilePath;
|
|
192
|
+
}
|
|
193
|
+
console.log(`No page available to build a pdf file`);
|
|
194
|
+
return null;
|
|
195
|
+
}
|
|
196
|
+
function displayPdfScan(pdfFilePath, scanJobContent) {
|
|
197
|
+
if (pdfFilePath === null) {
|
|
198
|
+
console.log(`Pdf generated has not been generated`);
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
console.log(`The following page(s) have been rendered inside '${pdfFilePath}': `);
|
|
202
|
+
scanJobContent.elements.forEach((e) => console.log(`\t- page ${e.pageNumber.toString().padStart(3, " ")} - ${e.width}x${e.height}`));
|
|
203
|
+
}
|
|
204
|
+
function displayJpegScan(scanJobContent) {
|
|
205
|
+
scanJobContent.elements.forEach((e) => console.log(`\t- page ${e.pageNumber.toString().padStart(3, " ")} - ${e.width}x${e.height} - ${e.path}`));
|
|
206
|
+
}
|
|
207
|
+
function isPdf(destination) {
|
|
208
|
+
if (destination.shortcut === "SavePDF" ||
|
|
209
|
+
destination.shortcut === "EmailPDF" ||
|
|
210
|
+
destination.shortcut == "SaveDocument1") {
|
|
211
|
+
return true;
|
|
212
|
+
}
|
|
213
|
+
else if (destination.shortcut === "SaveJPEG" ||
|
|
214
|
+
destination.shortcut === "SavePhoto1") {
|
|
215
|
+
return false;
|
|
216
|
+
}
|
|
217
|
+
else {
|
|
218
|
+
console.log(`Unexpected shortcut received: ${destination.shortcut}, considering it as non pdf target!`);
|
|
219
|
+
return false;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
async function saveScan(event, folder, tempFolder, scanCount, deviceCapabilities, scanConfig) {
|
|
223
|
+
if (event.compEventURI) {
|
|
224
|
+
const proceedToScan = await (0, listening_1.waitScanRequest)(event.compEventURI);
|
|
225
|
+
if (!proceedToScan) {
|
|
226
|
+
return;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
const destination = await TryGetDestination(event);
|
|
230
|
+
if (!destination) {
|
|
231
|
+
console.log("No shortcut selected!");
|
|
232
|
+
return;
|
|
233
|
+
}
|
|
234
|
+
console.log("Selected shortcut: " + destination.shortcut);
|
|
235
|
+
let toPdf;
|
|
236
|
+
let destinationFolder;
|
|
237
|
+
let contentType;
|
|
238
|
+
if (isPdf(destination)) {
|
|
239
|
+
toPdf = true;
|
|
240
|
+
contentType = "Document";
|
|
241
|
+
destinationFolder = tempFolder;
|
|
242
|
+
console.log(`Scan will be converted to pdf, using ${destinationFolder} as temp scan output directory for individual pages`);
|
|
243
|
+
}
|
|
244
|
+
else {
|
|
245
|
+
toPdf = false;
|
|
246
|
+
contentType = "Photo";
|
|
247
|
+
destinationFolder = folder;
|
|
248
|
+
}
|
|
249
|
+
const isDuplex = destination.scanPlexMode != null && destination.scanPlexMode != "Simplex";
|
|
250
|
+
console.log("ScanPlexMode is : " + destination.scanPlexMode);
|
|
251
|
+
const scanStatus = await HPApi_1.default.getScanStatus();
|
|
252
|
+
console.log("Afd is : " + scanStatus.adfState);
|
|
253
|
+
const inputSource = scanStatus.getInputSource();
|
|
254
|
+
const scanJobSettings = new ScanJobSettings_1.default(inputSource, contentType, scanConfig.resolution, isDuplex);
|
|
255
|
+
const scanJobContent = { elements: [] };
|
|
256
|
+
await executeScanJobs(scanJobSettings, inputSource, destinationFolder, scanCount, scanJobContent, event, deviceCapabilities, scanConfig.directoryConfig.filePattern);
|
|
257
|
+
console.log(`Scan of page(s) completed totalPages: ${scanJobContent.elements.length}:`);
|
|
258
|
+
if (toPdf) {
|
|
259
|
+
const pdfFilePath = await mergeToPdf(folder, scanCount, scanJobContent, scanConfig.directoryConfig.filePattern);
|
|
260
|
+
displayPdfScan(pdfFilePath, scanJobContent);
|
|
261
|
+
}
|
|
262
|
+
else {
|
|
263
|
+
displayJpegScan(scanJobContent);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
exports.saveScan = saveScan;
|
|
267
|
+
async function scanFromAdf(scanCount, folder, tempFolder, adfAutoScanConfig) {
|
|
268
|
+
let destinationFolder;
|
|
269
|
+
let contentType;
|
|
270
|
+
if (adfAutoScanConfig.generatePdf) {
|
|
271
|
+
contentType = "Document";
|
|
272
|
+
destinationFolder = tempFolder;
|
|
273
|
+
console.log(`Scan will be converted to pdf, using ${destinationFolder} as temp scan output directory for individual pages`);
|
|
274
|
+
}
|
|
275
|
+
else {
|
|
276
|
+
contentType = "Photo";
|
|
277
|
+
destinationFolder = folder;
|
|
278
|
+
}
|
|
279
|
+
const scanJobSettings = new ScanJobSettings_1.default("Adf", contentType, adfAutoScanConfig.resolution, adfAutoScanConfig.isDuplex);
|
|
280
|
+
const scanJobContent = { elements: [] };
|
|
281
|
+
await executeScanJob(scanJobSettings, "Adf", destinationFolder, scanCount, scanJobContent, adfAutoScanConfig.directoryConfig.filePattern);
|
|
282
|
+
console.log(`Scan of page(s) completed totalPages: ${scanJobContent.elements.length}:`);
|
|
283
|
+
if (adfAutoScanConfig.generatePdf) {
|
|
284
|
+
const pdfFilePath = await mergeToPdf(folder, scanCount, scanJobContent, adfAutoScanConfig.directoryConfig.filePattern);
|
|
285
|
+
displayPdfScan(pdfFilePath, scanJobContent);
|
|
286
|
+
}
|
|
287
|
+
else {
|
|
288
|
+
displayJpegScan(scanJobContent);
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
exports.scanFromAdf = scanFromAdf;
|
|
292
|
+
//# sourceMappingURL=fixJpegSize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fixJpegSize.js","sourceRoot":"","sources":["../src/fixJpegSize.ts"],"names":[],"mappings":"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","sourcesContent":["import Event from \"./Event\";\nimport WalkupScanDestination from \"./WalkupScanDestination\";\nimport WalkupScanToCompDestination from \"./WalkupScanToCompDestination\";\nimport HPApi from \"./HPApi\";\nimport fs from \"fs/promises\";\nimport JpegUtil from \"./JpegUtil\";\nimport { DeviceCapabilities } from \"./DeviceCapabilities\";\nimport { waitForScanEvent, waitScanRequest } from \"./listening\";\nimport ScanJobSettings from \"./ScanJobSettings\";\nimport { createPdfFrom, ScanContent, ScanPage } from \"./ScanContent\";\nimport Job from \"./Job\";\nimport { delay } from \"./delay\";\nimport PathHelper from \"./PathHelper\";\n\nasync function waitDeviceUntilItIsReadyToUploadOrCompleted(\n jobUrl: string\n): Promise<Job> {\n let job = null;\n let isReadyToUpload = false;\n do {\n job = await HPApi.getJob(jobUrl);\n if (job.jobState === \"Canceled\") {\n return job;\n } else if (\n job.pageState === \"ReadyToUpload\" ||\n job.jobState === \"Completed\"\n ) {\n isReadyToUpload = true;\n } else if (job.jobState == \"Processing\") {\n isReadyToUpload = false;\n } else {\n console.log(`Unknown jobState: ${job.jobState}`);\n }\n await delay(300);\n } while (!isReadyToUpload);\n return job;\n}\n\nasync function TryGetDestination(\n event: Event\n): Promise<WalkupScanDestination | WalkupScanToCompDestination | null> {\n //this code can in some cases be executed before the user actually chooses between Document or Photo\n //so lets fetch the contentType (Document or Photo) until we get a value\n let destination: WalkupScanDestination | WalkupScanToCompDestination | null =\n null;\n\n for (let i = 0; i < 20; i++) {\n const destinationURI = event.destinationURI;\n if (destinationURI) {\n destination = await HPApi.getDestination(destinationURI);\n\n const shortcut = destination.shortcut;\n if (shortcut != null) {\n return destination;\n }\n } else {\n console.log(`No destination URI found`);\n }\n\n console.log(`No shortcut yet available, attempt: ${i + 1}/20`);\n await new Promise((resolve) => setTimeout(resolve, 1000)); //wait 1s\n }\n\n console.log(\"Failing to detect destination shortcut\");\n console.log(JSON.stringify(destination));\n return null;\n}\n\nasync function fixJpegSize(filePath: string): Promise<number | null> {\n const buffer: Buffer = await fs.readFile(filePath);\n\n let height = JpegUtil.fixSizeWithDNL(buffer);\n if (height != null) {\n // rewrite the fixed file\n await fs.writeFile(filePath, buffer);\n return height;\n }\n return null;\n}\n\nfunction createScanPage(\n job: Job,\n currentPageNumber: number,\n filePath: string,\n sizeFixed: number | null\n): ScanPage {\n let height = sizeFixed ?? job.imageHeight;\n return {\n path: filePath,\n pageNumber: currentPageNumber,\n width: job.imageWidth ?? 0,\n height: height ?? 0,\n xResolution: job.xResolution ?? 200,\n yResolution: job.yResolution ?? 200\n };\n}\n\nasync function handleProcessingState(\n job: Job,\n inputSource: \"Adf\" | \"Platen\",\n folder: string,\n scanCount: number,\n currentPageNumber: number,\n filePattern: string | undefined\n): Promise<ScanPage | null> {\n if (\n job.pageState == \"ReadyToUpload\" &&\n job.binaryURL != null &&\n job.currentPageNumber != null\n ) {\n console.log(\n `Ready to download page job page ${job.currentPageNumber} at:`,\n job.binaryURL\n );\n\n const destinationFilePath = PathHelper.getFileForPage(\n folder,\n scanCount,\n currentPageNumber,\n filePattern,\n \"jpg\"\n );\n const filePath = await HPApi.downloadPage(\n job.binaryURL,\n destinationFilePath\n );\n console.log(\"Page downloaded to:\", filePath);\n\n let sizeFixed: null | number = null;\n if (inputSource == \"Adf\") {\n sizeFixed = await fixJpegSize(filePath);\n if (sizeFixed == null) {\n console.log(\n `File size has not been fixed, DNF may not have been found and approximate height is: ${job.imageHeight}`\n );\n }\n }\n return createScanPage(job, currentPageNumber, filePath, sizeFixed);\n } else {\n console.log(`Unknown pageState: ${job.pageState}`);\n await delay(200);\n return null;\n }\n}\n\nasync function executeScanJob(\n scanJobSettings: ScanJobSettings,\n inputSource: \"Adf\" | \"Platen\",\n folder: string,\n scanCount: number,\n scanJobContent: ScanContent,\n filePattern: string | undefined\n): Promise<\"Completed\" | \"Canceled\"> {\n const jobUrl = await HPApi.postJob(scanJobSettings);\n\n console.log(\"New job created:\", jobUrl);\n\n let job = await HPApi.getJob(jobUrl);\n while (job.jobState !== \"Completed\") {\n job = await waitDeviceUntilItIsReadyToUploadOrCompleted(jobUrl);\n\n if (job.jobState == \"Completed\") {\n continue;\n }\n\n if (job.jobState === \"Processing\") {\n const page = await handleProcessingState(\n job,\n inputSource,\n folder,\n scanCount,\n scanJobContent.elements.length + 1,\n filePattern\n );\n job = await HPApi.getJob(jobUrl);\n if (page != null && job.jobState != \"Canceled\") {\n scanJobContent.elements.push(page);\n }\n } else if (job.jobState === \"Canceled\") {\n console.log(\"Job cancelled by device\");\n break;\n } else {\n console.log(`Unhandled jobState: ${job.jobState}`);\n await delay(200);\n }\n }\n console.log(\n `Job state: ${job.jobState}, totalPages: ${scanJobContent.elements.length}:`\n );\n return job.jobState;\n}\n\nasync function waitScanNewPageRequest(compEventURI: string): Promise<boolean> {\n let startNewScanJob = false;\n let wait = true;\n while (wait) {\n await new Promise((resolve) => setTimeout(resolve, 1000)); //wait 1s\n\n let walkupScanToCompEvent = await HPApi.getWalkupScanToCompEvent(\n compEventURI\n );\n let message = walkupScanToCompEvent.eventType;\n\n if (message === \"ScanNewPageRequested\") {\n startNewScanJob = true;\n wait = false;\n } else if (message === \"ScanPagesComplete\") {\n wait = false;\n } else if (message === \"ScanRequested\") {\n // continue waiting\n } else {\n wait = false;\n console.log(`Unknown eventType: ${message}`);\n }\n }\n return startNewScanJob;\n}\n\nasync function executeScanJobs(\n scanJobSettings: ScanJobSettings,\n inputSource: \"Adf\" | \"Platen\",\n folder: string,\n scanCount: number,\n scanJobContent: ScanContent,\n firstEvent: Event,\n deviceCapabilities: DeviceCapabilities,\n filePattern: string | undefined\n) {\n let jobState = await executeScanJob(\n scanJobSettings,\n inputSource,\n folder,\n scanCount,\n scanJobContent,\n filePattern\n );\n let lastEvent = firstEvent;\n if (\n jobState === \"Completed\" &&\n lastEvent.compEventURI &&\n inputSource !== \"Adf\" &&\n lastEvent.destinationURI &&\n deviceCapabilities.supportsMultiItemScanFromPlaten\n ) {\n lastEvent = await waitForScanEvent(\n lastEvent.destinationURI,\n lastEvent.agingStamp\n );\n if (!lastEvent.compEventURI) {\n return;\n }\n let startNewScanJob = await waitScanNewPageRequest(lastEvent.compEventURI);\n while (startNewScanJob) {\n jobState = await executeScanJob(\n scanJobSettings,\n inputSource,\n folder,\n scanCount,\n scanJobContent,\n filePattern\n );\n if (jobState !== \"Completed\") {\n return;\n }\n if (!lastEvent.destinationURI) {\n break;\n }\n lastEvent = await waitForScanEvent(\n lastEvent.destinationURI,\n lastEvent.agingStamp\n );\n if (!lastEvent.compEventURI) {\n return;\n }\n startNewScanJob = await waitScanNewPageRequest(lastEvent.compEventURI);\n }\n }\n}\n\nasync function mergeToPdf(\n folder: string,\n scanCount: number,\n scanJobContent: ScanContent,\n filePattern: string | undefined\n): Promise<string | null> {\n if (scanJobContent.elements.length > 0) {\n const pdfFilePath = PathHelper.getFileForScan(\n folder,\n scanCount,\n filePattern,\n \"pdf\"\n );\n await createPdfFrom(scanJobContent, pdfFilePath);\n scanJobContent.elements.forEach((e) => fs.unlink(e.path));\n return pdfFilePath;\n }\n console.log(`No page available to build a pdf file`);\n return null;\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\nfunction isPdf(\n destination: WalkupScanDestination | WalkupScanToCompDestination\n) {\n if (\n destination.shortcut === \"SavePDF\" ||\n destination.shortcut === \"EmailPDF\" ||\n destination.shortcut == \"SaveDocument1\"\n ) {\n return true;\n } else if (\n destination.shortcut === \"SaveJPEG\" ||\n destination.shortcut === \"SavePhoto1\"\n ) {\n return false;\n } else {\n console.log(\n `Unexpected shortcut received: ${destination.shortcut}, considering it as non pdf target!`\n );\n return false;\n }\n}\n\nexport async function saveScan(\n event: Event,\n folder: string,\n tempFolder: string,\n scanCount: number,\n deviceCapabilities: DeviceCapabilities,\n scanConfig: ScanConfig\n): Promise<void> {\n if (event.compEventURI) {\n const proceedToScan = await waitScanRequest(event.compEventURI);\n if (!proceedToScan) {\n return;\n }\n }\n\n const destination = await TryGetDestination(event);\n if (!destination) {\n console.log(\"No shortcut selected!\");\n return;\n }\n console.log(\"Selected shortcut: \" + destination.shortcut);\n\n let toPdf: boolean;\n let destinationFolder: string;\n let contentType: \"Document\" | \"Photo\";\n if (isPdf(destination)) {\n toPdf = true;\n contentType = \"Document\";\n destinationFolder = tempFolder;\n console.log(\n `Scan will be converted to pdf, using ${destinationFolder} as temp scan output directory for individual pages`\n );\n } else {\n toPdf = false;\n contentType = \"Photo\";\n destinationFolder = folder;\n }\n\n const isDuplex =\n destination.scanPlexMode != null && destination.scanPlexMode != \"Simplex\";\n console.log(\"ScanPlexMode is : \" + destination.scanPlexMode);\n\n const scanStatus = await HPApi.getScanStatus();\n console.log(\"Afd is : \" + scanStatus.adfState);\n\n const inputSource = scanStatus.getInputSource();\n\n const scanJobSettings = new ScanJobSettings(\n inputSource,\n contentType,\n scanConfig.resolution,\n isDuplex\n );\n\n const scanJobContent: ScanContent = { elements: [] };\n\n await executeScanJobs(\n scanJobSettings,\n inputSource,\n destinationFolder,\n scanCount,\n scanJobContent,\n event,\n deviceCapabilities,\n scanConfig.directoryConfig.filePattern\n );\n\n console.log(\n `Scan of page(s) completed totalPages: ${scanJobContent.elements.length}:`\n );\n\n if (toPdf) {\n const pdfFilePath = await mergeToPdf(\n folder,\n scanCount,\n scanJobContent,\n scanConfig.directoryConfig.filePattern\n );\n displayPdfScan(pdfFilePath, scanJobContent);\n } else {\n displayJpegScan(scanJobContent);\n }\n}\n\nexport type DirectoryConfig = {\n directory: string | undefined;\n tempDirectory: string | undefined;\n filePattern: string | undefined;\n};\nexport type ScanConfig = {\n resolution: number;\n directoryConfig: DirectoryConfig;\n};\nexport type AdfAutoScanConfig = ScanConfig & {\n isDuplex: boolean;\n generatePdf: boolean;\n pollingInterval: number;\n startScanDelay: number;\n};\n\nexport async function scanFromAdf(\n scanCount: number,\n folder: string,\n tempFolder: string,\n adfAutoScanConfig: AdfAutoScanConfig\n) {\n let destinationFolder: string;\n let contentType: \"Document\" | \"Photo\";\n if (adfAutoScanConfig.generatePdf) {\n contentType = \"Document\";\n destinationFolder = tempFolder;\n console.log(\n `Scan will be converted to pdf, using ${destinationFolder} as temp scan output directory for individual pages`\n );\n } else {\n contentType = \"Photo\";\n destinationFolder = folder;\n }\n\n const scanJobSettings = new ScanJobSettings(\n \"Adf\",\n contentType,\n adfAutoScanConfig.resolution,\n adfAutoScanConfig.isDuplex\n );\n\n const scanJobContent: ScanContent = { elements: [] };\n\n await executeScanJob(\n scanJobSettings,\n \"Adf\",\n destinationFolder,\n scanCount,\n scanJobContent,\n adfAutoScanConfig.directoryConfig.filePattern\n );\n\n console.log(\n `Scan of page(s) completed totalPages: ${scanJobContent.elements.length}:`\n );\n\n if (adfAutoScanConfig.generatePdf) {\n const pdfFilePath = await mergeToPdf(\n folder,\n scanCount,\n scanJobContent,\n adfAutoScanConfig.directoryConfig.filePattern\n );\n displayPdfScan(pdfFilePath, scanJobContent);\n } else {\n displayJpegScan(scanJobContent);\n }\n}"]}
|