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.
- package/README.md +247 -143
- package/dist/Destination.js +17 -7
- package/dist/Destination.js.map +1 -1
- package/dist/DeviceCapabilities.d.ts +2 -0
- package/dist/DeviceCapabilities.js.map +1 -1
- package/dist/DiscoveryTree.js.map +1 -1
- package/dist/Event.js.map +1 -1
- package/dist/EventTable.js.map +1 -1
- package/dist/HPApi.js +23 -15
- package/dist/HPApi.js.map +1 -1
- package/dist/InputSource.js +1 -1
- package/dist/InputSource.js.map +1 -1
- package/dist/Job.js +6 -6
- package/dist/Job.js.map +1 -1
- package/dist/JpegUtil.d.ts +0 -2
- package/dist/JpegUtil.js.map +1 -1
- package/dist/KnownShortcut.js.map +1 -1
- package/dist/PathHelper.js +2 -0
- package/dist/PathHelper.js.map +1 -1
- package/dist/ScanCaps.d.ts +6 -0
- package/dist/ScanCaps.js +18 -0
- package/dist/ScanCaps.js.map +1 -1
- package/dist/ScanContent.js.map +1 -1
- package/dist/ScanJobManifest.js.map +1 -1
- package/dist/ScanJobSettings.js.map +1 -1
- package/dist/ScanStatus.js.map +1 -1
- package/dist/WalkupScanDestination.js.map +1 -1
- package/dist/WalkupScanDestinations.js.map +1 -1
- package/dist/WalkupScanManifest.js.map +1 -1
- package/dist/WalkupScanToCompCaps.js.map +1 -1
- package/dist/WalkupScanToCompDestination.js.map +1 -1
- package/dist/WalkupScanToCompDestinations.js.map +1 -1
- package/dist/WalkupScanToCompEvent.js.map +1 -1
- package/dist/WalkupScanToCompManifest.js.map +1 -1
- package/dist/commitInfo.json +1 -1
- package/dist/delay.js +1 -2
- package/dist/delay.js.map +1 -1
- package/dist/healthcheck.js +1 -2
- package/dist/healthcheck.js.map +1 -1
- package/dist/index.js +22 -12
- package/dist/index.js.map +1 -1
- package/dist/listening.js +5 -6
- package/dist/listening.js.map +1 -1
- package/dist/nextcloud/NextcloudConfig.js.map +1 -1
- package/dist/nextcloud/nextcloud.js +4 -6
- package/dist/nextcloud/nextcloud.js.map +1 -1
- package/dist/paperless/PaperlessConfig.js.map +1 -1
- package/dist/paperless/paperless.js +4 -5
- package/dist/paperless/paperless.js.map +1 -1
- package/dist/pdfProcessing.js +4 -5
- package/dist/pdfProcessing.js.map +1 -1
- package/dist/postProcessing.js +2 -4
- package/dist/postProcessing.js.map +1 -1
- package/dist/readDeviceCapabilities.js +24 -20
- package/dist/readDeviceCapabilities.js.map +1 -1
- package/dist/scanProcessing.d.ts +2 -2
- package/dist/scanProcessing.js +28 -30
- package/dist/scanProcessing.js.map +1 -1
- package/package.json +19 -17
- package/dist/PaperlessCOnfig.d.ts +0 -7
- package/dist/PaperlessCOnfig.js +0 -3
- package/dist/PaperlessCOnfig.js.map +0 -1
- package/dist/PaperlessConfig.d.ts +0 -7
- package/dist/PaperlessConfig.js +0 -3
- package/dist/PaperlessConfig.js.map +0 -1
- package/dist/paperless.d.ts +0 -7
- package/dist/paperless.js +0 -83
- package/dist/paperless.js.map +0 -1
- package/dist/test/DiscoveryTree.test.d.ts +0 -1
- package/dist/test/DiscoveryTree.test.js +0 -68
- package/dist/test/DiscoveryTree.test.js.map +0 -1
- package/dist/test/EtagEventTable.test.d.ts +0 -1
- package/dist/test/EtagEventTable.test.js +0 -93
- package/dist/test/EtagEventTable.test.js.map +0 -1
- package/dist/test/Job.test.d.ts +0 -1
- package/dist/test/Job.test.js +0 -104
- package/dist/test/Job.test.js.map +0 -1
- package/dist/test/JpegUtil.test.d.ts +0 -1
- package/dist/test/JpegUtil.test.js +0 -53
- package/dist/test/JpegUtil.test.js.map +0 -1
- package/dist/test/PathHelper.test.d.ts +0 -1
- package/dist/test/PathHelper.test.js +0 -98
- package/dist/test/PathHelper.test.js.map +0 -1
- package/dist/test/ScanCaps.test.d.ts +0 -1
- package/dist/test/ScanCaps.test.js +0 -96
- package/dist/test/ScanCaps.test.js.map +0 -1
- package/dist/test/ScanJobManifest.test.d.ts +0 -1
- package/dist/test/ScanJobManifest.test.js +0 -56
- package/dist/test/ScanJobManifest.test.js.map +0 -1
- package/dist/test/ScanJobSettings.test.d.ts +0 -1
- package/dist/test/ScanJobSettings.test.js +0 -59
- package/dist/test/ScanJobSettings.test.js.map +0 -1
- package/dist/test/ScanStatus.test.d.ts +0 -1
- package/dist/test/ScanStatus.test.js +0 -75
- package/dist/test/ScanStatus.test.js.map +0 -1
- package/dist/test/WalkupScanDestination.test.d.ts +0 -1
- package/dist/test/WalkupScanDestination.test.js +0 -80
- package/dist/test/WalkupScanDestination.test.js.map +0 -1
- package/dist/test/WalkupScanDestinations.test.d.ts +0 -1
- package/dist/test/WalkupScanDestinations.test.js +0 -68
- package/dist/test/WalkupScanDestinations.test.js.map +0 -1
- package/dist/test/WalkupScanManifest.test.d.ts +0 -1
- package/dist/test/WalkupScanManifest.test.js +0 -46
- package/dist/test/WalkupScanManifest.test.js.map +0 -1
- package/dist/test/WalkupScanToCompCaps.test.d.ts +0 -1
- package/dist/test/WalkupScanToCompCaps.test.js +0 -56
- package/dist/test/WalkupScanToCompCaps.test.js.map +0 -1
- package/dist/test/WalkupScanToCompDestination.test.d.ts +0 -1
- package/dist/test/WalkupScanToCompDestination.test.js +0 -58
- package/dist/test/WalkupScanToCompDestination.test.js.map +0 -1
- package/dist/test/WalkupScanToCompDestinations.test.d.ts +0 -1
- package/dist/test/WalkupScanToCompDestinations.test.js +0 -58
- package/dist/test/WalkupScanToCompDestinations.test.js.map +0 -1
- package/dist/test/WalkupScanToCompEvent.test.d.ts +0 -1
- package/dist/test/WalkupScanToCompEvent.test.js +0 -46
- package/dist/test/WalkupScanToCompEvent.test.js.map +0 -1
- package/dist/test/WalkupScanToCompManifest.test.d.ts +0 -1
- package/dist/test/WalkupScanToCompManifest.test.js +0 -46
- package/dist/test/WalkupScanToCompManifest.test.js.map +0 -1
- package/dist/test/clean.d.ts +0 -1
- package/dist/test/clean.js +0 -21
- package/dist/test/clean.js.map +0 -1
- package/dist/test/nextcloud.test.d.ts +0 -1
- package/dist/test/nextcloud.test.js +0 -165
- package/dist/test/nextcloud.test.js.map +0 -1
- package/dist/test/scanProcessing.test.d.ts +0 -1
- package/dist/test/scanProcessing.test.js +0 -105
- package/dist/test/scanProcessing.test.js.map +0 -1
- package/dist/test-bonjour.d.ts +0 -1
- package/dist/test-bonjour.js +0 -20
- package/dist/test-bonjour.js.map +0 -1
- package/nodemon.json +0 -6
- package/src/Destination.ts +0 -63
- package/src/DeviceCapabilities.ts +0 -8
- package/src/DiscoveryTree.ts +0 -56
- package/src/Event.ts +0 -55
- package/src/EventTable.ts +0 -45
- package/src/HPApi.ts +0 -510
- package/src/InputSource.ts +0 -4
- package/src/Job.ts +0 -134
- package/src/JpegUtil.ts +0 -327
- package/src/KnownShortcut.ts +0 -6
- package/src/PathHelper.ts +0 -106
- package/src/ScanCaps.ts +0 -81
- package/src/ScanContent.ts +0 -15
- package/src/ScanJobManifest.ts +0 -56
- package/src/ScanJobSettings.ts +0 -84
- package/src/ScanStatus.ts +0 -48
- package/src/WalkupScanDestination.ts +0 -74
- package/src/WalkupScanDestinations.ts +0 -46
- package/src/WalkupScanManifest.ts +0 -59
- package/src/WalkupScanToCompCaps.ts +0 -36
- package/src/WalkupScanToCompDestination.ts +0 -79
- package/src/WalkupScanToCompDestinations.ts +0 -47
- package/src/WalkupScanToCompEvent.ts +0 -30
- package/src/WalkupScanToCompManifest.ts +0 -59
- package/src/commitInfo.json +0 -3
- package/src/delay.ts +0 -5
- package/src/healthcheck.ts +0 -17
- package/src/index.ts +0 -588
- package/src/listening.ts +0 -144
- package/src/nextcloud/NextcloudConfig.ts +0 -7
- package/src/nextcloud/nextcloud.ts +0 -146
- package/src/paperless/PaperlessConfig.ts +0 -7
- package/src/paperless/paperless.ts +0 -110
- package/src/pdfProcessing.ts +0 -67
- package/src/postProcessing.ts +0 -165
- package/src/readDeviceCapabilities.ts +0 -52
- package/src/scanProcessing.ts +0 -570
- package/tsconfig.json +0 -34
package/src/DiscoveryTree.ts
DELETED
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
import { Parser } from "xml2js";
|
|
3
|
-
const parser = new Parser();
|
|
4
|
-
import { promisify } from "util";
|
|
5
|
-
const parseString = promisify<string, DiscoveryTreeData>(parser.parseString);
|
|
6
|
-
|
|
7
|
-
export interface DiscoveryTreeData {
|
|
8
|
-
"ledm:DiscoveryTree": {
|
|
9
|
-
"ledm:SupportedIfc": {
|
|
10
|
-
"ledm:ManifestURI": string[];
|
|
11
|
-
"dd:ResourceType": string[];
|
|
12
|
-
}[];
|
|
13
|
-
};
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
export default class DiscoveryTree {
|
|
17
|
-
private readonly data: DiscoveryTreeData;
|
|
18
|
-
|
|
19
|
-
constructor(data: DiscoveryTreeData) {
|
|
20
|
-
this.data = data;
|
|
21
|
-
}
|
|
22
|
-
static async createDiscoveryTree(content: string): Promise<DiscoveryTree> {
|
|
23
|
-
const parsed = await parseString(content);
|
|
24
|
-
return new DiscoveryTree(parsed);
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
get WalkupScanToCompManifestURI(): string | null {
|
|
28
|
-
const hpLedmWalkupScanToCompManifest = this.data["ledm:DiscoveryTree"][
|
|
29
|
-
"ledm:SupportedIfc"
|
|
30
|
-
].find(
|
|
31
|
-
(x) => x["dd:ResourceType"][0] === "ledm:hpLedmWalkupScanToCompManifest",
|
|
32
|
-
);
|
|
33
|
-
if (hpLedmWalkupScanToCompManifest !== undefined) {
|
|
34
|
-
return hpLedmWalkupScanToCompManifest["ledm:ManifestURI"][0];
|
|
35
|
-
}
|
|
36
|
-
return null;
|
|
37
|
-
}
|
|
38
|
-
get WalkupScanManifestURI(): string | null {
|
|
39
|
-
const hpLedmWalkupScanToCompManifest = this.data["ledm:DiscoveryTree"][
|
|
40
|
-
"ledm:SupportedIfc"
|
|
41
|
-
].find((x) => x["dd:ResourceType"][0] === "hpCnxWalkupScanManifest");
|
|
42
|
-
if (hpLedmWalkupScanToCompManifest === undefined) {
|
|
43
|
-
return null;
|
|
44
|
-
}
|
|
45
|
-
return hpLedmWalkupScanToCompManifest["ledm:ManifestURI"][0];
|
|
46
|
-
}
|
|
47
|
-
get ScanJobManifestURI(): string | null {
|
|
48
|
-
const hpLedmWalkupScanToCompManifest = this.data["ledm:DiscoveryTree"][
|
|
49
|
-
"ledm:SupportedIfc"
|
|
50
|
-
].find((x) => x["dd:ResourceType"][0] === "ledm:hpLedmScanJobManifest");
|
|
51
|
-
if (hpLedmWalkupScanToCompManifest === undefined) {
|
|
52
|
-
return null;
|
|
53
|
-
}
|
|
54
|
-
return hpLedmWalkupScanToCompManifest["ledm:ManifestURI"][0];
|
|
55
|
-
}
|
|
56
|
-
}
|
package/src/Event.ts
DELETED
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
export type EventData = {
|
|
4
|
-
"dd:UnqualifiedEventCategory": string[];
|
|
5
|
-
"dd:AgingStamp": string[];
|
|
6
|
-
"ev:Payload": {
|
|
7
|
-
"dd:ResourceURI": {
|
|
8
|
-
"0": string;
|
|
9
|
-
};
|
|
10
|
-
"dd:ResourceType": {
|
|
11
|
-
"0": string;
|
|
12
|
-
};
|
|
13
|
-
}[];
|
|
14
|
-
};
|
|
15
|
-
|
|
16
|
-
export default class Event {
|
|
17
|
-
private readonly data: EventData;
|
|
18
|
-
constructor(data: EventData) {
|
|
19
|
-
this.data = data;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
get unqualifiedEventCategory(): string {
|
|
23
|
-
return this.data["dd:UnqualifiedEventCategory"][0];
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
get agingStamp(): string {
|
|
27
|
-
return this.data["dd:AgingStamp"][0];
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
get destinationURI(): string | undefined {
|
|
31
|
-
if (Object.prototype.hasOwnProperty.call(this.data, "ev:Payload")) {
|
|
32
|
-
const destination = this.data["ev:Payload"].find((v) =>
|
|
33
|
-
v["dd:ResourceType"]["0"].includes("Destination"),
|
|
34
|
-
);
|
|
35
|
-
|
|
36
|
-
return destination ? destination["dd:ResourceURI"]["0"] : undefined;
|
|
37
|
-
}
|
|
38
|
-
return undefined;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
get compEventURI(): string | undefined {
|
|
42
|
-
if (Object.prototype.hasOwnProperty.call(this.data, "ev:Payload")) {
|
|
43
|
-
const compEvent = this.data["ev:Payload"].find((v) =>
|
|
44
|
-
v["dd:ResourceType"]["0"].includes("CompEvent"),
|
|
45
|
-
);
|
|
46
|
-
|
|
47
|
-
return compEvent ? compEvent["dd:ResourceURI"]["0"] : undefined;
|
|
48
|
-
}
|
|
49
|
-
return undefined;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
get isScanEvent(): boolean {
|
|
53
|
-
return this.unqualifiedEventCategory === "ScanEvent";
|
|
54
|
-
}
|
|
55
|
-
}
|
package/src/EventTable.ts
DELETED
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
import Event, { EventData } from "./Event";
|
|
4
|
-
import { Parser } from "xml2js";
|
|
5
|
-
const parser = new Parser();
|
|
6
|
-
import { promisify } from "util";
|
|
7
|
-
const parseString = promisify<string, EventTableData>(parser.parseString);
|
|
8
|
-
|
|
9
|
-
export interface EtagEventTable {
|
|
10
|
-
etag: string;
|
|
11
|
-
eventTable: EventTable;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
export interface EventTableData {
|
|
15
|
-
"ev:EventTable"?: {
|
|
16
|
-
"ev:Event"?: EventData[];
|
|
17
|
-
};
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
export default class EventTable {
|
|
21
|
-
private readonly data: EventTableData;
|
|
22
|
-
constructor(data: EventTableData) {
|
|
23
|
-
this.data = data;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
static async createEtagEventTable(
|
|
27
|
-
content: string,
|
|
28
|
-
etagReceived: string,
|
|
29
|
-
): Promise<EtagEventTable> {
|
|
30
|
-
const parsed = await parseString(content);
|
|
31
|
-
return {
|
|
32
|
-
etag: etagReceived,
|
|
33
|
-
eventTable: new EventTable(parsed),
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
get events() {
|
|
38
|
-
const eventTable = this.data["ev:EventTable"];
|
|
39
|
-
if (eventTable != null && eventTable["ev:Event"] != null) {
|
|
40
|
-
return eventTable["ev:Event"].map((x) => new Event(x));
|
|
41
|
-
} else {
|
|
42
|
-
return [];
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
}
|
package/src/HPApi.ts
DELETED
|
@@ -1,510 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
import { promisify } from "util";
|
|
4
|
-
import fs from "fs";
|
|
5
|
-
import axios, {
|
|
6
|
-
AxiosError,
|
|
7
|
-
AxiosRequestConfig,
|
|
8
|
-
AxiosResponse,
|
|
9
|
-
RawAxiosRequestHeaders,
|
|
10
|
-
} from "axios";
|
|
11
|
-
import { URL } from "url";
|
|
12
|
-
import * as stream from "stream";
|
|
13
|
-
import { Stream } from "stream";
|
|
14
|
-
import EventTable, { EtagEventTable } from "./EventTable";
|
|
15
|
-
import Job from "./Job";
|
|
16
|
-
import ScanStatus from "./ScanStatus";
|
|
17
|
-
import WalkupScanDestination from "./WalkupScanDestination";
|
|
18
|
-
import WalkupScanToCompDestination from "./WalkupScanToCompDestination";
|
|
19
|
-
import WalkupScanDestinations from "./WalkupScanDestinations";
|
|
20
|
-
import WalkupScanToCompDestinations from "./WalkupScanToCompDestinations";
|
|
21
|
-
import ScanJobSettings from "./ScanJobSettings";
|
|
22
|
-
import Destination from "./Destination";
|
|
23
|
-
import WalkupScanToCompEvent from "./WalkupScanToCompEvent";
|
|
24
|
-
import DiscoveryTree from "./DiscoveryTree";
|
|
25
|
-
import WalkupScanToCompManifest from "./WalkupScanToCompManifest";
|
|
26
|
-
import WalkupScanToCompCaps from "./WalkupScanToCompCaps";
|
|
27
|
-
import WalkupScanManifest from "./WalkupScanManifest";
|
|
28
|
-
import ScanJobManifest from "./ScanJobManifest";
|
|
29
|
-
import ScanCaps from "./ScanCaps";
|
|
30
|
-
import { delay } from "./delay";
|
|
31
|
-
import * as net from "net";
|
|
32
|
-
|
|
33
|
-
let printerIP = "192.168.1.11";
|
|
34
|
-
let debug = false;
|
|
35
|
-
let callCount = 0;
|
|
36
|
-
|
|
37
|
-
export default class HPApi {
|
|
38
|
-
static setDeviceIP(ip: string): void {
|
|
39
|
-
printerIP = ip;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
static setDebug(dbg: boolean): void {
|
|
43
|
-
debug = dbg;
|
|
44
|
-
}
|
|
45
|
-
static isDebug(): boolean {
|
|
46
|
-
return debug;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
private static logDebug(
|
|
50
|
-
callId: number,
|
|
51
|
-
isRequest: boolean,
|
|
52
|
-
msg: object | string,
|
|
53
|
-
): void {
|
|
54
|
-
if (debug) {
|
|
55
|
-
const id = String(callId).padStart(4, "0");
|
|
56
|
-
const content = typeof msg === "string" ? msg : JSON.stringify(msg);
|
|
57
|
-
console.log(id + (isRequest ? " -> " : " <- ") + content);
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
private static async callAxios(
|
|
62
|
-
request: AxiosRequestConfig,
|
|
63
|
-
): Promise<AxiosResponse<string>> {
|
|
64
|
-
callCount++;
|
|
65
|
-
if (request.timeout === 0) {
|
|
66
|
-
request.timeout = 100_000;
|
|
67
|
-
}
|
|
68
|
-
HPApi.logDebug(callCount, true, request);
|
|
69
|
-
try {
|
|
70
|
-
const response = await axios(request);
|
|
71
|
-
HPApi.logDebug(callCount, false, {
|
|
72
|
-
status: response.status,
|
|
73
|
-
data: response.data,
|
|
74
|
-
headers: response.headers,
|
|
75
|
-
statusText: response.statusText,
|
|
76
|
-
});
|
|
77
|
-
return response;
|
|
78
|
-
} catch (error) {
|
|
79
|
-
const axiosError = error as AxiosError;
|
|
80
|
-
|
|
81
|
-
if (axiosError.isAxiosError) {
|
|
82
|
-
HPApi.logDebug(callCount, false, {
|
|
83
|
-
status: axiosError.response?.status,
|
|
84
|
-
data: axiosError.response?.data,
|
|
85
|
-
headers: axiosError.response?.headers,
|
|
86
|
-
statusText: axiosError.response?.statusText,
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
throw error;
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
static async isAlive(timeout: number | null = null): Promise<boolean> {
|
|
94
|
-
const definedTimeout = timeout || 10000; // default of 10 seconds
|
|
95
|
-
return new Promise((resolve) => {
|
|
96
|
-
const socket = net.createConnection(80, printerIP, () => {
|
|
97
|
-
clearTimeout(timer);
|
|
98
|
-
resolve(true);
|
|
99
|
-
socket.end();
|
|
100
|
-
});
|
|
101
|
-
const timer = setTimeout(() => {
|
|
102
|
-
resolve(false);
|
|
103
|
-
socket.end();
|
|
104
|
-
}, definedTimeout);
|
|
105
|
-
socket.on("error", () => {
|
|
106
|
-
clearTimeout(timer);
|
|
107
|
-
resolve(false);
|
|
108
|
-
});
|
|
109
|
-
});
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
static async waitDeviceUp(deviceUpPollingInterval: number): Promise<void> {
|
|
113
|
-
let first = true;
|
|
114
|
-
while (!(await HPApi.isAlive())) {
|
|
115
|
-
if (first) {
|
|
116
|
-
console.log(
|
|
117
|
-
`Device ip: ${printerIP} is down! [${new Date().toISOString()}]`,
|
|
118
|
-
);
|
|
119
|
-
}
|
|
120
|
-
first = false;
|
|
121
|
-
await delay(deviceUpPollingInterval);
|
|
122
|
-
}
|
|
123
|
-
if (!first) {
|
|
124
|
-
console.log(
|
|
125
|
-
`Device ip: ${printerIP} is up again! [${new Date().toISOString()}]`,
|
|
126
|
-
);
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
static async getDiscoveryTree(): Promise<DiscoveryTree> {
|
|
131
|
-
const response = await HPApi.callAxios({
|
|
132
|
-
baseURL: `http://${printerIP}`,
|
|
133
|
-
url: "/DevMgmt/DiscoveryTree.xml",
|
|
134
|
-
method: "GET",
|
|
135
|
-
responseType: "text",
|
|
136
|
-
});
|
|
137
|
-
|
|
138
|
-
if (response.status !== 200) {
|
|
139
|
-
throw new Error(response.statusText);
|
|
140
|
-
} else {
|
|
141
|
-
return DiscoveryTree.createDiscoveryTree(response.data);
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
static async getWalkupScanDestinations(
|
|
146
|
-
uri: string = "/WalkupScan/WalkupScanDestinations",
|
|
147
|
-
): Promise<WalkupScanDestinations> {
|
|
148
|
-
const response = await HPApi.callAxios({
|
|
149
|
-
baseURL: `http://${printerIP}`,
|
|
150
|
-
url: uri,
|
|
151
|
-
method: "GET",
|
|
152
|
-
responseType: "text",
|
|
153
|
-
});
|
|
154
|
-
|
|
155
|
-
if (response.status !== 200) {
|
|
156
|
-
throw new Error(response.statusText);
|
|
157
|
-
} else {
|
|
158
|
-
return WalkupScanDestinations.createWalkupScanDestinations(response.data);
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
static async getWalkupScanToCompDestinations(): Promise<WalkupScanToCompDestinations> {
|
|
163
|
-
const response = await HPApi.callAxios({
|
|
164
|
-
baseURL: `http://${printerIP}`,
|
|
165
|
-
url: "/WalkupScanToComp/WalkupScanToCompDestinations",
|
|
166
|
-
method: "GET",
|
|
167
|
-
responseType: "text",
|
|
168
|
-
});
|
|
169
|
-
|
|
170
|
-
if (response.status !== 200) {
|
|
171
|
-
throw new Error(response.statusText);
|
|
172
|
-
} else {
|
|
173
|
-
return WalkupScanToCompDestinations.createWalkupScanToCompDestinations(
|
|
174
|
-
response.data,
|
|
175
|
-
);
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
static async getWalkupScanManifest(uri: string): Promise<WalkupScanManifest> {
|
|
180
|
-
const response = await HPApi.callAxios({
|
|
181
|
-
baseURL: `http://${printerIP}`,
|
|
182
|
-
url: uri,
|
|
183
|
-
method: "GET",
|
|
184
|
-
responseType: "text",
|
|
185
|
-
});
|
|
186
|
-
|
|
187
|
-
if (response.status !== 200) {
|
|
188
|
-
throw new Error(response.statusText);
|
|
189
|
-
} else {
|
|
190
|
-
return WalkupScanManifest.createWalkupScanManifest(response.data);
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
static async getWalkupScanToCompManifest(
|
|
194
|
-
uri: string,
|
|
195
|
-
): Promise<WalkupScanToCompManifest> {
|
|
196
|
-
const response = await HPApi.callAxios({
|
|
197
|
-
baseURL: `http://${printerIP}`,
|
|
198
|
-
url: uri,
|
|
199
|
-
method: "GET",
|
|
200
|
-
responseType: "text",
|
|
201
|
-
});
|
|
202
|
-
|
|
203
|
-
if (response.status !== 200) {
|
|
204
|
-
throw new Error(response.statusText);
|
|
205
|
-
} else {
|
|
206
|
-
return WalkupScanToCompManifest.createWalkupScanToCompManifest(
|
|
207
|
-
response.data,
|
|
208
|
-
);
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
static async getScanJobManifest(uri: string): Promise<ScanJobManifest> {
|
|
213
|
-
const response = await HPApi.callAxios({
|
|
214
|
-
baseURL: `http://${printerIP}`,
|
|
215
|
-
url: uri,
|
|
216
|
-
method: "GET",
|
|
217
|
-
responseType: "text",
|
|
218
|
-
});
|
|
219
|
-
|
|
220
|
-
if (response.status !== 200) {
|
|
221
|
-
throw new Error(response.statusText);
|
|
222
|
-
} else {
|
|
223
|
-
return ScanJobManifest.createScanJobManifest(response.data);
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
static async getScanCaps(uri: string): Promise<ScanCaps> {
|
|
228
|
-
const response = await HPApi.callAxios({
|
|
229
|
-
baseURL: `http://${printerIP}`,
|
|
230
|
-
url: uri,
|
|
231
|
-
method: "GET",
|
|
232
|
-
responseType: "text",
|
|
233
|
-
});
|
|
234
|
-
|
|
235
|
-
if (response.status !== 200) {
|
|
236
|
-
throw new Error(response.statusText);
|
|
237
|
-
} else {
|
|
238
|
-
return ScanCaps.createScanCaps(response.data);
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
static async getWalkupScanToCompCaps(
|
|
243
|
-
uri: string,
|
|
244
|
-
): Promise<WalkupScanToCompCaps> {
|
|
245
|
-
const response = await HPApi.callAxios({
|
|
246
|
-
baseURL: `http://${printerIP}`,
|
|
247
|
-
url: uri,
|
|
248
|
-
method: "GET",
|
|
249
|
-
responseType: "text",
|
|
250
|
-
});
|
|
251
|
-
|
|
252
|
-
if (response.status !== 200) {
|
|
253
|
-
throw new Error(response.statusText);
|
|
254
|
-
} else {
|
|
255
|
-
return WalkupScanToCompCaps.createWalkupScanToCompCaps(response.data);
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
static async getWalkupScanToCompEvent(
|
|
260
|
-
compEventURI: string,
|
|
261
|
-
): Promise<WalkupScanToCompEvent> {
|
|
262
|
-
const response = await HPApi.callAxios({
|
|
263
|
-
baseURL: `http://${printerIP}`,
|
|
264
|
-
url: compEventURI,
|
|
265
|
-
method: "GET",
|
|
266
|
-
responseType: "text",
|
|
267
|
-
});
|
|
268
|
-
|
|
269
|
-
if (response.status !== 200) {
|
|
270
|
-
throw response;
|
|
271
|
-
} else {
|
|
272
|
-
return WalkupScanToCompEvent.createWalkupScanToCompEvent(response.data);
|
|
273
|
-
}
|
|
274
|
-
}
|
|
275
|
-
|
|
276
|
-
static async removeDestination(
|
|
277
|
-
walkupScanDestination: WalkupScanDestination | WalkupScanToCompDestination,
|
|
278
|
-
): Promise<boolean> {
|
|
279
|
-
let path: string;
|
|
280
|
-
|
|
281
|
-
if (walkupScanDestination.resourceURI.startsWith("http")) {
|
|
282
|
-
const urlInfo = new URL(walkupScanDestination.resourceURI);
|
|
283
|
-
if (urlInfo.pathname === null) {
|
|
284
|
-
throw new Error(
|
|
285
|
-
`invalid walkupScanDestination.resourceURI: ${walkupScanDestination.resourceURI}`,
|
|
286
|
-
);
|
|
287
|
-
}
|
|
288
|
-
path = urlInfo.pathname;
|
|
289
|
-
} else {
|
|
290
|
-
path = walkupScanDestination.resourceURI;
|
|
291
|
-
}
|
|
292
|
-
|
|
293
|
-
const response = await HPApi.callAxios({
|
|
294
|
-
baseURL: `http://${printerIP}`,
|
|
295
|
-
url: path,
|
|
296
|
-
method: "DELETE",
|
|
297
|
-
responseType: "text",
|
|
298
|
-
});
|
|
299
|
-
if (response.status === 204 || response.status == 200) {
|
|
300
|
-
return true;
|
|
301
|
-
} else {
|
|
302
|
-
throw response;
|
|
303
|
-
}
|
|
304
|
-
}
|
|
305
|
-
|
|
306
|
-
static async registerWalkupScanDestination(
|
|
307
|
-
destination: Destination,
|
|
308
|
-
): Promise<string> {
|
|
309
|
-
const xml = await destination.toXML();
|
|
310
|
-
const url = "/WalkupScan/WalkupScanDestinations";
|
|
311
|
-
const response = await HPApi.callAxios({
|
|
312
|
-
baseURL: `http://${printerIP}`,
|
|
313
|
-
url: url,
|
|
314
|
-
method: "POST",
|
|
315
|
-
headers: { "Content-Type": "text/xml" },
|
|
316
|
-
data: xml,
|
|
317
|
-
responseType: "text",
|
|
318
|
-
});
|
|
319
|
-
|
|
320
|
-
if (response.status === 201 && response.headers.location != null) {
|
|
321
|
-
return new URL(response.headers.location).pathname;
|
|
322
|
-
} else {
|
|
323
|
-
throw response;
|
|
324
|
-
}
|
|
325
|
-
}
|
|
326
|
-
static async registerWalkupScanToCompDestination(
|
|
327
|
-
destination: Destination,
|
|
328
|
-
): Promise<string> {
|
|
329
|
-
const xml = await destination.toXML();
|
|
330
|
-
const url = "/WalkupScanToComp/WalkupScanToCompDestinations";
|
|
331
|
-
const response = await HPApi.callAxios({
|
|
332
|
-
baseURL: `http://${printerIP}`,
|
|
333
|
-
url: url,
|
|
334
|
-
method: "POST",
|
|
335
|
-
headers: { "Content-Type": "text/xml" },
|
|
336
|
-
data: xml,
|
|
337
|
-
responseType: "text",
|
|
338
|
-
});
|
|
339
|
-
|
|
340
|
-
if (response.status === 201 && response.headers.location != null) {
|
|
341
|
-
return new URL(response.headers.location).pathname;
|
|
342
|
-
} else {
|
|
343
|
-
throw response;
|
|
344
|
-
}
|
|
345
|
-
}
|
|
346
|
-
|
|
347
|
-
static async getEvents(
|
|
348
|
-
etag: string = "",
|
|
349
|
-
decisecondTimeout: number = 0,
|
|
350
|
-
): Promise<EtagEventTable> {
|
|
351
|
-
const url = this.appendTimeout("/EventMgmt/EventTable", decisecondTimeout);
|
|
352
|
-
|
|
353
|
-
const headers = this.placeETagHeader(etag, {});
|
|
354
|
-
|
|
355
|
-
let response: AxiosResponse<string>;
|
|
356
|
-
try {
|
|
357
|
-
response = await HPApi.callAxios({
|
|
358
|
-
baseURL: `http://${printerIP}`,
|
|
359
|
-
url: url,
|
|
360
|
-
method: "GET",
|
|
361
|
-
responseType: "text",
|
|
362
|
-
headers: headers,
|
|
363
|
-
timeout: decisecondTimeout * 100 * 1.1,
|
|
364
|
-
});
|
|
365
|
-
} catch (error) {
|
|
366
|
-
const axiosError = error as AxiosError;
|
|
367
|
-
|
|
368
|
-
if (!axiosError.isAxiosError) throw error;
|
|
369
|
-
|
|
370
|
-
if (axiosError.response?.status === 304) {
|
|
371
|
-
return {
|
|
372
|
-
etag: etag,
|
|
373
|
-
eventTable: new EventTable({}),
|
|
374
|
-
};
|
|
375
|
-
}
|
|
376
|
-
throw error;
|
|
377
|
-
}
|
|
378
|
-
|
|
379
|
-
const etagReceived = response.headers["etag"];
|
|
380
|
-
if (etagReceived == null) {
|
|
381
|
-
throw response;
|
|
382
|
-
}
|
|
383
|
-
|
|
384
|
-
const content = response.data;
|
|
385
|
-
return EventTable.createEtagEventTable(content, etagReceived);
|
|
386
|
-
}
|
|
387
|
-
|
|
388
|
-
static placeETagHeader(
|
|
389
|
-
etag: string,
|
|
390
|
-
headers: RawAxiosRequestHeaders,
|
|
391
|
-
): RawAxiosRequestHeaders {
|
|
392
|
-
if (etag !== "") {
|
|
393
|
-
headers["If-None-Match"] = etag;
|
|
394
|
-
}
|
|
395
|
-
return headers;
|
|
396
|
-
}
|
|
397
|
-
|
|
398
|
-
static appendTimeout(url: string, timeout: number | null = null): string {
|
|
399
|
-
if (timeout == null) {
|
|
400
|
-
timeout = 1200;
|
|
401
|
-
}
|
|
402
|
-
if (timeout > 0) {
|
|
403
|
-
url += "?timeout=" + timeout;
|
|
404
|
-
}
|
|
405
|
-
return url;
|
|
406
|
-
}
|
|
407
|
-
|
|
408
|
-
static async getDestination(
|
|
409
|
-
destinationURL: string,
|
|
410
|
-
): Promise<WalkupScanDestination | WalkupScanToCompDestination> {
|
|
411
|
-
const response = await HPApi.callAxios({
|
|
412
|
-
baseURL: `http://${printerIP}`,
|
|
413
|
-
url: destinationURL,
|
|
414
|
-
method: "GET",
|
|
415
|
-
responseType: "text",
|
|
416
|
-
});
|
|
417
|
-
|
|
418
|
-
if (response.status !== 200) {
|
|
419
|
-
throw response;
|
|
420
|
-
} else {
|
|
421
|
-
const content = response.data;
|
|
422
|
-
if (destinationURL.includes("WalkupScanToComp")) {
|
|
423
|
-
return WalkupScanToCompDestination.createWalkupScanToCompDestination(
|
|
424
|
-
content,
|
|
425
|
-
);
|
|
426
|
-
} else {
|
|
427
|
-
return WalkupScanDestination.createWalkupScanDestination(content);
|
|
428
|
-
}
|
|
429
|
-
}
|
|
430
|
-
}
|
|
431
|
-
|
|
432
|
-
static async getScanStatus(): Promise<ScanStatus> {
|
|
433
|
-
const response = await HPApi.callAxios({
|
|
434
|
-
baseURL: `http://${printerIP}`,
|
|
435
|
-
url: "/Scan/Status",
|
|
436
|
-
method: "GET",
|
|
437
|
-
responseType: "text",
|
|
438
|
-
});
|
|
439
|
-
|
|
440
|
-
if (response.status !== 200) {
|
|
441
|
-
throw response;
|
|
442
|
-
} else {
|
|
443
|
-
const content = response.data;
|
|
444
|
-
return ScanStatus.createScanStatus(content);
|
|
445
|
-
}
|
|
446
|
-
}
|
|
447
|
-
|
|
448
|
-
static delay(t: number): Promise<void> {
|
|
449
|
-
return new Promise(function (resolve) {
|
|
450
|
-
setTimeout(resolve, t);
|
|
451
|
-
});
|
|
452
|
-
}
|
|
453
|
-
|
|
454
|
-
static async postJob(job: ScanJobSettings): Promise<string> {
|
|
455
|
-
await HPApi.delay(500);
|
|
456
|
-
const xml = await job.toXML();
|
|
457
|
-
const response = await HPApi.callAxios({
|
|
458
|
-
baseURL: `http://${printerIP}:8080`,
|
|
459
|
-
url: "/Scan/Jobs",
|
|
460
|
-
method: "POST",
|
|
461
|
-
headers: { "Content-Type": "text/xml" },
|
|
462
|
-
data: xml,
|
|
463
|
-
responseType: "text",
|
|
464
|
-
});
|
|
465
|
-
|
|
466
|
-
if (response.status === 201 && response.headers.location != null) {
|
|
467
|
-
return response.headers.location;
|
|
468
|
-
} else {
|
|
469
|
-
throw response;
|
|
470
|
-
}
|
|
471
|
-
}
|
|
472
|
-
|
|
473
|
-
/**
|
|
474
|
-
* @param jobURL
|
|
475
|
-
* @return {Promise<Job|*>}
|
|
476
|
-
*/
|
|
477
|
-
static async getJob(jobURL: string) {
|
|
478
|
-
const response = await HPApi.callAxios({
|
|
479
|
-
url: jobURL,
|
|
480
|
-
method: "GET",
|
|
481
|
-
responseType: "text",
|
|
482
|
-
});
|
|
483
|
-
|
|
484
|
-
if (response.status !== 200) {
|
|
485
|
-
throw response;
|
|
486
|
-
} else {
|
|
487
|
-
const content = response.data;
|
|
488
|
-
return Job.createJob(content);
|
|
489
|
-
}
|
|
490
|
-
}
|
|
491
|
-
|
|
492
|
-
static async downloadPage(
|
|
493
|
-
binaryURL: string,
|
|
494
|
-
destination: string,
|
|
495
|
-
): Promise<string> {
|
|
496
|
-
const { data }: AxiosResponse<Stream> = await axios.request<Stream>({
|
|
497
|
-
baseURL: `http://${printerIP}:8080`,
|
|
498
|
-
url: binaryURL,
|
|
499
|
-
method: "GET",
|
|
500
|
-
responseType: "stream",
|
|
501
|
-
});
|
|
502
|
-
|
|
503
|
-
const destinationFileStream = fs.createWriteStream(destination);
|
|
504
|
-
data.pipe(destinationFileStream);
|
|
505
|
-
|
|
506
|
-
await promisify(stream.finished)(destinationFileStream);
|
|
507
|
-
|
|
508
|
-
return destination;
|
|
509
|
-
}
|
|
510
|
-
}
|
package/src/InputSource.ts
DELETED