node-hp-scan-to 1.0.1 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/README.md +92 -11
  2. package/dist/Destination.d.ts +8 -7
  3. package/dist/Destination.js +115 -84
  4. package/dist/Destination.js.map +1 -1
  5. package/dist/Event.d.ts +21 -17
  6. package/dist/Event.js +46 -30
  7. package/dist/Event.js.map +1 -1
  8. package/dist/EventTable.d.ts +11 -11
  9. package/dist/EventTable.js +26 -26
  10. package/dist/EventTable.js.map +1 -1
  11. package/dist/HPApi.d.ts +42 -29
  12. package/dist/HPApi.js +528 -333
  13. package/dist/HPApi.js.map +1 -1
  14. package/dist/Job.d.ts +36 -24
  15. package/dist/Job.js +94 -62
  16. package/dist/Job.js.map +1 -1
  17. package/dist/JpegUtil.d.ts +26 -0
  18. package/dist/JpegUtil.js +238 -0
  19. package/dist/JpegUtil.js.map +1 -0
  20. package/dist/PathHelper.d.ts +5 -0
  21. package/dist/PathHelper.js +79 -0
  22. package/dist/PathHelper.js.map +1 -0
  23. package/dist/ScanContent.d.ts +12 -0
  24. package/dist/ScanContent.js +82 -0
  25. package/dist/ScanContent.js.map +1 -0
  26. package/dist/ScanJobSettings.d.ts +6 -6
  27. package/dist/ScanJobSettings.js +95 -94
  28. package/dist/ScanJobSettings.js.map +1 -1
  29. package/dist/ScanStatus.d.ts +18 -18
  30. package/dist/ScanStatus.js +35 -29
  31. package/dist/ScanStatus.js.map +1 -1
  32. package/dist/WalkupScanDestination.d.ts +24 -24
  33. package/dist/WalkupScanDestination.js +40 -40
  34. package/dist/WalkupScanDestination.js.map +1 -1
  35. package/dist/WalkupScanDestinations.d.ts +11 -11
  36. package/dist/WalkupScanDestinations.js +26 -26
  37. package/dist/WalkupScanDestinations.js.map +1 -1
  38. package/dist/WalkupScanToCompDestination.d.ts +26 -0
  39. package/dist/WalkupScanToCompDestination.js +44 -0
  40. package/dist/WalkupScanToCompDestination.js.map +1 -0
  41. package/dist/WalkupScanToCompDestinations.d.ts +11 -0
  42. package/dist/WalkupScanToCompDestinations.js +27 -0
  43. package/dist/WalkupScanToCompDestinations.js.map +1 -0
  44. package/dist/WalkupScanToCompEvent.d.ts +10 -0
  45. package/dist/WalkupScanToCompEvent.js +17 -0
  46. package/dist/WalkupScanToCompEvent.js.map +1 -0
  47. package/dist/index.d.ts +2 -2
  48. package/dist/index.js +630 -292
  49. package/dist/index.js.map +1 -1
  50. package/nodemon.json +5 -5
  51. package/package.json +72 -57
  52. package/src/Destination.ts +63 -45
  53. package/src/Event.ts +45 -31
  54. package/src/EventTable.ts +25 -25
  55. package/src/HPApi.ts +365 -222
  56. package/src/Job.ts +100 -62
  57. package/src/JpegUtil.ts +319 -0
  58. package/src/PathHelper.ts +44 -0
  59. package/src/ScanContent.ts +34 -0
  60. package/src/ScanJobSettings.ts +55 -55
  61. package/src/ScanStatus.ts +36 -31
  62. package/src/WalkupScanDestination.ts +46 -44
  63. package/src/WalkupScanDestinations.ts +29 -27
  64. package/src/WalkupScanToCompDestination.ts +55 -0
  65. package/src/WalkupScanToCompDestinations.ts +34 -0
  66. package/src/WalkupScanToCompEvent.ts +18 -0
  67. package/src/index.ts +555 -205
  68. package/tsconfig.json +34 -0
package/dist/HPApi.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"HPApi.js","sourceRoot":"","sources":["../src/HPApi.ts"],"names":[],"mappings":"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","sourcesContent":["\"use strict\";\r\n\r\nimport WalkupScanDestination, {WalkupScanDestinationData} from \"./WalkupScanDestination\";\r\n\r\nimport util from \"util\";\r\nimport fs from \"fs\";\r\nimport axios from \"axios\";\r\nimport url from \"url\";\r\nimport xml2js from \"xml2js\";\r\nimport EventTable, {EventTableData} from \"./EventTable\";\r\nimport Job, {JobData} from \"./Job\";\r\nimport ScanStatus, {ScanStatusData} from \"./ScanStatus\";\r\nimport WalkupScanDestinations, {WalkupScanDestinationsData} from \"./WalkupScanDestinations\";\r\nimport ScanJobSettings from \"./ScanJobSettings\";\r\nimport Destination from \"./Destination\";\r\n\r\nconst parser = new xml2js.Parser();\r\nconst parseString = util.promisify(parser.parseString);\r\nlet printerIP = \"192.168.1.11\";\r\n\r\nexport default class HPApi {\r\n static setPrinterIP(ip: string) {\r\n printerIP = ip;\r\n }\r\n\r\n\r\n static async getWalkupScanDestinations(): Promise<WalkupScanDestinations> {\r\n const response = await axios({\r\n baseURL: `http://${printerIP}`,\r\n url: \"/WalkupScan/WalkupScanDestinations\",\r\n method: \"GET\",\r\n responseType: \"text\"\r\n });\r\n\r\n if (response.status !== 200) {\r\n throw new Error(response.statusText);\r\n } else {\r\n const parsed = await parseString(response.data) as WalkupScanDestinationsData;\r\n return new WalkupScanDestinations(parsed);\r\n }\r\n }\r\n\r\n static async removeDestination(walkupScanDestination : WalkupScanDestination) {\r\n let urlInfo = url.parse(walkupScanDestination.resourceURI);\r\n\r\n const response = await axios({\r\n baseURL: `http://${printerIP}`,\r\n url: urlInfo.pathname,\r\n method: \"DELETE\",\r\n responseType: \"text\"\r\n });\r\n if (response.status === 204) {\r\n return true;\r\n } else {\r\n throw response;\r\n }\r\n }\r\n\r\n static async registerDestination(destination: Destination) {\r\n const xml = await destination.toXML();\r\n const response = await axios({\r\n baseURL: `http://${printerIP}`,\r\n url: \"/WalkupScan/WalkupScanDestinations\",\r\n method: \"POST\",\r\n headers: { \"Content-Type\": \"text/xml\" },\r\n data: xml,\r\n responseType: \"text\"\r\n });\r\n\r\n if (response.status === 201) {\r\n return response.headers.location;\r\n } else {\r\n throw response;\r\n }\r\n }\r\n\r\n static async getEvents(etag = \"\", timeout = 0): Promise<{etag: string, eventTable: EventTable}> {\r\n let url = this.appendTimeout(timeout, \"/EventMgmt/EventTable\");\r\n\r\n let headers = this.placeETagHeader(etag, {});\r\n\r\n let response;\r\n try {\r\n response = await axios({\r\n baseURL: `http://${printerIP}`,\r\n url: url,\r\n method: \"GET\",\r\n responseType: \"text\",\r\n headers: headers\r\n });\r\n } catch (error) {\r\n response = error.response;\r\n if (response.status === 304) {\r\n return {\r\n etag: etag,\r\n eventTable: new EventTable({})\r\n };\r\n }\r\n throw error;\r\n }\r\n\r\n const parsed = await parseString(response.data);\r\n return {\r\n etag: response.headers[\"etag\"],\r\n eventTable: new EventTable(parsed as EventTableData)\r\n };\r\n }\r\n\r\n static placeETagHeader(etag: string, headers: object) {\r\n if (etag !== \"\") {\r\n headers = {\r\n \"If-None-Match\": etag\r\n };\r\n }\r\n return headers;\r\n }\r\n\r\n static appendTimeout(\r\n timeout: number | null = null,\r\n url: string\r\n ) : string {\r\n if (timeout == null) {\r\n timeout = 1200;\r\n }\r\n if (timeout > 0) {\r\n url += \"?timeout=\" + timeout;\r\n }\r\n return url;\r\n }\r\n\r\n static async getDestination(destinationURL : string) {\r\n const response = await axios({\r\n url: destinationURL,\r\n method: \"GET\",\r\n responseType: \"text\"\r\n });\r\n\r\n if (response.status !== 200) {\r\n throw response;\r\n } else {\r\n const parsed = await parseString(response.data) as WalkupScanDestinationData;\r\n return new WalkupScanDestination(parsed);\r\n }\r\n }\r\n\r\n static async getScanStatus() {\r\n const response = await axios({\r\n baseURL: `http://${printerIP}`,\r\n url: \"/Scan/Status\",\r\n method: \"GET\",\r\n responseType: \"text\"\r\n });\r\n\r\n if (response.status !== 200) {\r\n throw response;\r\n } else {\r\n const parsed = await parseString(response.data) as ScanStatusData;\r\n return new ScanStatus(parsed);\r\n }\r\n }\r\n\r\n static delay(t: number) {\r\n return new Promise(function(resolve) {\r\n setTimeout(resolve, t);\r\n });\r\n }\r\n\r\n static async postJob(job : ScanJobSettings) {\r\n await HPApi.delay(500);\r\n const xml = await job.toXML();\r\n const response = await axios({\r\n baseURL: `http://${printerIP}:8080`,\r\n url: \"/Scan/Jobs\",\r\n method: \"POST\",\r\n headers: { \"Content-Type\": \"text/xml\" },\r\n data: xml,\r\n responseType: \"text\"\r\n });\r\n\r\n if (response.status === 201) {\r\n return response.headers.location;\r\n } else {\r\n throw response;\r\n }\r\n }\r\n\r\n /**\r\n * @param jobURL\r\n * @return {Promise<Job|*>}\r\n */\r\n static async getJob(jobURL :string) {\r\n const response = await axios({\r\n url: jobURL,\r\n method: \"GET\",\r\n responseType: \"text\"\r\n });\r\n\r\n if (response.status !== 200) {\r\n throw response;\r\n } else {\r\n const parsed = await parseString(response.data) as JobData;\r\n return new Job(parsed);\r\n }\r\n }\r\n\r\n static async downloadPage(binaryURL: string, destination: string) {\r\n const response = await axios({\r\n baseURL: `http://${printerIP}:8080`,\r\n url: binaryURL,\r\n method: \"GET\",\r\n responseType: \"stream\"\r\n });\r\n\r\n response.data.pipe(fs.createWriteStream(destination));\r\n\r\n return new Promise((resolve, reject) => {\r\n response.data\r\n .on(\"end\", () => resolve(destination))\r\n .on(\"error\", (error: Error) => reject(error));\r\n });\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"HPApi.js","sourceRoot":"","sources":["../src/HPApi.ts"],"names":[],"mappings":"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","sourcesContent":["\"use strict\";\n\nimport WalkupScanDestination, {\n WalkupScanDestinationData,\n} from \"./WalkupScanDestination\";\nimport WalkupScanToCompDestination, {\n WalkupScanToCompDestinationData,\n} from \"./WalkupScanToCompDestination\";\nimport { promisify } from \"util\";\nimport fs from \"fs\";\nimport axios, {\n AxiosError,\n AxiosRequestConfig,\n AxiosRequestHeaders,\n AxiosResponse,\n} from \"axios\";\nimport { URL } from \"url\";\nimport { Parser } from \"xml2js\";\nimport * as stream from 'stream/promises';\nimport EventTable, { EventTableData } from \"./EventTable\";\nimport Job, { JobData } from \"./Job\";\nimport ScanStatus, { ScanStatusData } from \"./ScanStatus\";\nimport WalkupScanDestinations, {\n WalkupScanDestinationsData,\n} from \"./WalkupScanDestinations\";\nimport WalkupScanToCompDestinations, {\n WalkupScanToCompDestinationsData,\n} from \"./WalkupScanToCompDestinations\";\nimport ScanJobSettings from \"./ScanJobSettings\";\nimport Destination from \"./Destination\";\nimport { Stream } from \"stream\";\nimport WalkupScanToCompEvent, {\n WalkupScanToCompEventData,\n} from \"./WalkupScanToCompEvent\";\n\nconst parser = new Parser();\nconst parseString = promisify<string, any>(parser.parseString);\nlet printerIP = \"192.168.1.11\";\nlet debug = false;\nlet callCount = 0;\n\nexport default class HPApi {\n static setPrinterIP(ip: string) {\n printerIP = ip;\n }\n\n static setDebug(dbg: boolean) {\n debug = dbg;\n }\n\n private static logDebug(callId: number, isRequest: boolean, msg: any) {\n if (debug) {\n const id = String(callId).padStart(4, \"0\");\n const content = typeof msg === \"string\" ? msg : JSON.stringify(msg);\n console.log(id + (isRequest ? \" -> \" : \" <- \") + content);\n }\n }\n\n private static async callAxios(request: AxiosRequestConfig) {\n callCount++;\n HPApi.logDebug(callCount, true, request);\n try {\n const response = (await axios(request)) as AxiosResponse<string>;\n HPApi.logDebug(callCount, false, {\n status: response.status,\n data: response.data,\n headers: response.headers,\n statusText: response.statusText,\n });\n return response;\n } catch (error) {\n const axiosError = error as AxiosError;\n\n if (axiosError.isAxiosError) {\n HPApi.logDebug(callCount, false, {\n status: axiosError.response?.status,\n data: axiosError.response?.data,\n headers: axiosError.response?.headers,\n statusText: axiosError.response?.statusText,\n });\n }\n throw error;\n }\n }\n\n static async getWalkupScanDestinations(): Promise<WalkupScanDestinations> {\n const response = await HPApi.callAxios({\n baseURL: `http://${printerIP}`,\n url: \"/WalkupScan/WalkupScanDestinations\",\n method: \"GET\",\n responseType: \"text\",\n });\n\n if (response.status !== 200) {\n throw new Error(response.statusText);\n } else {\n const parsed = (await parseString(\n response.data\n )) as WalkupScanDestinationsData;\n return new WalkupScanDestinations(parsed);\n }\n }\n\n static async getWalkupScanToCompDestinations(): Promise<WalkupScanToCompDestinations> {\n const response = await HPApi.callAxios({\n baseURL: `http://${printerIP}`,\n url: \"/WalkupScanToComp/WalkupScanToCompDestinations\",\n method: \"GET\",\n responseType: \"text\",\n });\n\n if (response.status !== 200) {\n throw new Error(response.statusText);\n } else {\n const parsed = (await parseString(\n response.data\n )) as WalkupScanToCompDestinationsData;\n return new WalkupScanToCompDestinations(parsed);\n }\n }\n\n static async getWalkupScanToCompCaps(): Promise<boolean> {\n return HPApi.callAxios({\n baseURL: `http://${printerIP}`,\n url: \"/WalkupScanToComp/WalkupScanToCompCaps\",\n method: \"GET\",\n responseType: \"text\",\n }).then(\n (response) => response.status == 200,\n () => false\n );\n }\n\n static async getWalkupScanToCompEvent(compEventURI: string): Promise<WalkupScanToCompEvent> {\n const response = await HPApi.callAxios({\n baseURL: `http://${printerIP}`,\n url: compEventURI,\n method: \"GET\",\n responseType: \"text\",\n });\n\n if (response.status !== 200) {\n throw response;\n } else {\n return HPApi.createWalkupScanToCompEvent(response.data);\n }\n }\n\n static async removeDestination(walkupScanDestination: WalkupScanDestination) {\n let urlInfo = new URL(walkupScanDestination.resourceURI);\n\n if (urlInfo.pathname === null) {\n throw new Error(\n `invalid walkupScanDestination.resourceURI: ${walkupScanDestination.resourceURI}`\n );\n }\n\n const response = await HPApi.callAxios({\n baseURL: `http://${printerIP}`,\n url: urlInfo.pathname,\n method: \"DELETE\",\n responseType: \"text\",\n });\n if (response.status === 204) {\n return true;\n } else {\n throw response;\n }\n }\n\n static async registerDestination(destination: Destination, toComp: boolean) {\n let xml = await destination.toXML();\n let url = \"/WalkupScan/WalkupScanDestinations\";\n if (toComp) {\n url = \"/WalkupScanToComp/WalkupScanToCompDestinations\";\n }\n const response = await HPApi.callAxios({\n baseURL: `http://${printerIP}`,\n url: url,\n method: \"POST\",\n headers: { \"Content-Type\": \"text/xml\" },\n data: xml,\n responseType: \"text\",\n });\n\n if (response.status === 201) {\n return new URL(response.headers.location).pathname;\n } else {\n throw response;\n }\n }\n\n static async getEvents(\n etag = \"\",\n timeout = 0\n ): Promise<{ etag: string; eventTable: EventTable }> {\n let url = this.appendTimeout(\"/EventMgmt/EventTable\", timeout);\n\n let headers = this.placeETagHeader(etag, {});\n\n let response: AxiosResponse<string>;\n try {\n response = await HPApi.callAxios({\n baseURL: `http://${printerIP}`,\n url: url,\n method: \"GET\",\n responseType: \"text\",\n headers: headers,\n });\n } catch (error) {\n const axiosError = error as AxiosError;\n\n if (!axiosError.isAxiosError) throw error;\n\n if (axiosError.response?.status === 304) {\n return {\n etag: etag,\n eventTable: new EventTable({}),\n };\n }\n throw error;\n }\n\n const parsed = await parseString(response.data);\n return {\n etag: response.headers[\"etag\"],\n eventTable: new EventTable(parsed as EventTableData),\n };\n }\n\n static placeETagHeader(etag: string, headers: AxiosRequestHeaders) {\n if (etag !== \"\") {\n headers = {\n \"If-None-Match\": etag,\n };\n }\n return headers;\n }\n\n static appendTimeout(url: string, timeout: number | null = null): string {\n if (timeout == null) {\n timeout = 1200;\n }\n if (timeout > 0) {\n url += \"?timeout=\" + timeout;\n }\n return url;\n }\n\n static async getDestination(destinationURL: string) {\n const response = await HPApi.callAxios({\n baseURL: `http://${printerIP}`,\n url: destinationURL,\n method: \"GET\",\n responseType: \"text\",\n });\n\n if (response.status !== 200) {\n throw response;\n } else {\n const content = response.data;\n if (destinationURL.includes(\"WalkupScanToComp\")) {\n return this.createWalkupScanToCompDestination(content);\n } else {\n return this.createWalkupScanDestination(content);\n }\n }\n }\n\n static async createWalkupScanDestination(content: string) {\n const parsed = (await parseString(content)) as WalkupScanDestinationData;\n return new WalkupScanDestination(parsed);\n }\n\n static async createWalkupScanToCompDestination(content: string) {\n const parsed = (await parseString(\n content\n )) as WalkupScanToCompDestinationData;\n return new WalkupScanToCompDestination(parsed);\n }\n\n static async createWalkupScanToCompEvent(content: string) {\n const parsed = (await parseString(content)) as WalkupScanToCompEventData;\n return new WalkupScanToCompEvent(parsed);\n }\n\n static async getScanStatus() {\n const response = await HPApi.callAxios({\n baseURL: `http://${printerIP}`,\n url: \"/Scan/Status\",\n method: \"GET\",\n responseType: \"text\",\n });\n\n if (response.status !== 200) {\n throw response;\n } else {\n const parsed = (await parseString(response.data)) as ScanStatusData;\n return new ScanStatus(parsed);\n }\n }\n\n static delay(t: number) {\n return new Promise(function (resolve) {\n setTimeout(resolve, t);\n });\n }\n\n static async postJob(job: ScanJobSettings) {\n await HPApi.delay(500);\n const xml = await job.toXML();\n const response = await HPApi.callAxios({\n baseURL: `http://${printerIP}:8080`,\n url: \"/Scan/Jobs\",\n method: \"POST\",\n headers: { \"Content-Type\": \"text/xml\" },\n data: xml,\n responseType: \"text\",\n });\n\n if (response.status === 201) {\n return response.headers.location;\n } else {\n throw response;\n }\n }\n\n /**\n * @param jobURL\n * @return {Promise<Job|*>}\n */\n static async getJob(jobURL: string) {\n const response = await HPApi.callAxios({\n url: jobURL,\n method: \"GET\",\n responseType: \"text\",\n });\n\n if (response.status !== 200) {\n throw response;\n } else {\n const parsed = (await parseString(response.data)) as JobData;\n return new Job(parsed);\n }\n }\n\n static async downloadPage(\n binaryURL: string,\n destination: string\n ): Promise<string> {\n const { data }: AxiosResponse<Stream> = await axios.request<Stream>({\n baseURL: `http://${printerIP}:8080`,\n url: binaryURL,\n method: \"GET\",\n responseType: \"stream\",\n });\n\n const destinationFileStream = fs.createWriteStream(destination);\n data.pipe(destinationFileStream);\n\n await stream.finished(destinationFileStream);\n\n return destination;\n }\n}\n"]}
package/dist/Job.d.ts CHANGED
@@ -1,24 +1,36 @@
1
- export interface JobData {
2
- "j:Job": {
3
- ScanJob: {
4
- PreScanPage?: {
5
- PageState: string[];
6
- BinaryURL: string[];
7
- PageNumber: string[];
8
- }[];
9
- PostScanPage: {
10
- PageNumber: string[];
11
- }[];
12
- }[];
13
- "j:JobState": string[];
14
- };
15
- }
16
- export default class Job {
17
- private readonly data;
18
- constructor(data: JobData);
19
- readonly currentPageNumber: string | null;
20
- readonly totalPageNumber: number;
21
- readonly jobState: "Completed" | "Processing" | "ReadyToUpload" | string;
22
- readonly pageState: string;
23
- readonly binaryURL: string | null;
24
- }
1
+ export interface JobData {
2
+ "j:Job": {
3
+ ScanJob: {
4
+ PreScanPage?: {
5
+ PageState: string[];
6
+ BinaryURL: string[];
7
+ PageNumber: string[];
8
+ BufferInfo: {
9
+ ImageWidth: string[];
10
+ ImageHeight: string[];
11
+ ScanSettings: {
12
+ XResolution: string[];
13
+ YResolution: string[];
14
+ }[];
15
+ }[];
16
+ }[];
17
+ PostScanPage: {
18
+ PageNumber: string[];
19
+ }[];
20
+ }[];
21
+ "j:JobState": string[];
22
+ };
23
+ }
24
+ export default class Job {
25
+ private readonly data;
26
+ constructor(data: JobData);
27
+ get currentPageNumber(): string | null;
28
+ get totalPageNumber(): number;
29
+ get jobState(): "Completed" | "Processing" | "ReadyToUpload" | "Canceled" | string;
30
+ get pageState(): string;
31
+ get binaryURL(): string | null;
32
+ get imageWidth(): number;
33
+ get imageHeight(): number;
34
+ get xResolution(): number;
35
+ get yResolution(): number;
36
+ }
package/dist/Job.js CHANGED
@@ -1,63 +1,95 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- var Job = /** @class */ (function () {
4
- function Job(data) {
5
- this.data = data;
6
- }
7
- Object.defineProperty(Job.prototype, "currentPageNumber", {
8
- get: function () {
9
- var preScanPage = this.data["j:Job"].ScanJob[0].PreScanPage;
10
- if (preScanPage) {
11
- return preScanPage[0].PageNumber[0];
12
- }
13
- else {
14
- return null;
15
- }
16
- },
17
- enumerable: true,
18
- configurable: true
19
- });
20
- Object.defineProperty(Job.prototype, "totalPageNumber", {
21
- get: function () {
22
- return parseInt(this.data["j:Job"].ScanJob[0].PostScanPage[0].PageNumber[0], 10);
23
- },
24
- enumerable: true,
25
- configurable: true
26
- });
27
- Object.defineProperty(Job.prototype, "jobState", {
28
- get: function () {
29
- return this.data["j:Job"]["j:JobState"][0];
30
- },
31
- enumerable: true,
32
- configurable: true
33
- });
34
- Object.defineProperty(Job.prototype, "pageState", {
35
- get: function () {
36
- var preScanPage = this.data["j:Job"].ScanJob[0].PreScanPage;
37
- if (preScanPage) {
38
- return preScanPage[0].PageState[0];
39
- }
40
- else {
41
- return "";
42
- }
43
- },
44
- enumerable: true,
45
- configurable: true
46
- });
47
- Object.defineProperty(Job.prototype, "binaryURL", {
48
- get: function () {
49
- var preScanPage = this.data["j:Job"].ScanJob[0].PreScanPage;
50
- if (preScanPage) {
51
- return preScanPage[0].BinaryURL[0];
52
- }
53
- else {
54
- return null;
55
- }
56
- },
57
- enumerable: true,
58
- configurable: true
59
- });
60
- return Job;
61
- }());
62
- exports.default = Job;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var Job = /** @class */ (function () {
4
+ function Job(data) {
5
+ this.data = data;
6
+ }
7
+ Object.defineProperty(Job.prototype, "currentPageNumber", {
8
+ get: function () {
9
+ var preScanPage = this.data["j:Job"].ScanJob[0].PreScanPage;
10
+ if (preScanPage) {
11
+ return preScanPage[0].PageNumber[0];
12
+ }
13
+ else {
14
+ return null;
15
+ }
16
+ },
17
+ enumerable: false,
18
+ configurable: true
19
+ });
20
+ Object.defineProperty(Job.prototype, "totalPageNumber", {
21
+ get: function () {
22
+ return parseInt(this.data["j:Job"].ScanJob[0].PostScanPage[0].PageNumber[0], 10);
23
+ },
24
+ enumerable: false,
25
+ configurable: true
26
+ });
27
+ Object.defineProperty(Job.prototype, "jobState", {
28
+ get: function () {
29
+ return this.data["j:Job"]["j:JobState"][0];
30
+ },
31
+ enumerable: false,
32
+ configurable: true
33
+ });
34
+ Object.defineProperty(Job.prototype, "pageState", {
35
+ get: function () {
36
+ var preScanPage = this.data["j:Job"].ScanJob[0].PreScanPage;
37
+ if (preScanPage) {
38
+ return preScanPage[0].PageState[0];
39
+ }
40
+ else {
41
+ return "";
42
+ }
43
+ },
44
+ enumerable: false,
45
+ configurable: true
46
+ });
47
+ Object.defineProperty(Job.prototype, "binaryURL", {
48
+ get: function () {
49
+ var preScanPage = this.data["j:Job"].ScanJob[0].PreScanPage;
50
+ if (preScanPage) {
51
+ return preScanPage[0].BinaryURL[0];
52
+ }
53
+ else {
54
+ return null;
55
+ }
56
+ },
57
+ enumerable: false,
58
+ configurable: true
59
+ });
60
+ Object.defineProperty(Job.prototype, "imageWidth", {
61
+ get: function () {
62
+ var _a, _b, _c, _d, _e;
63
+ return parseInt((_e = (_d = (_c = (_b = (_a = this.data["j:Job"].ScanJob[0].PreScanPage) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.BufferInfo) === null || _c === void 0 ? void 0 : _c[0]) === null || _d === void 0 ? void 0 : _d.ImageWidth[0]) !== null && _e !== void 0 ? _e : "");
64
+ },
65
+ enumerable: false,
66
+ configurable: true
67
+ });
68
+ Object.defineProperty(Job.prototype, "imageHeight", {
69
+ get: function () {
70
+ var _a, _b, _c, _d, _e;
71
+ return parseInt((_e = (_d = (_c = (_b = (_a = this.data["j:Job"].ScanJob[0].PreScanPage) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.BufferInfo) === null || _c === void 0 ? void 0 : _c[0]) === null || _d === void 0 ? void 0 : _d.ImageHeight[0]) !== null && _e !== void 0 ? _e : "");
72
+ },
73
+ enumerable: false,
74
+ configurable: true
75
+ });
76
+ Object.defineProperty(Job.prototype, "xResolution", {
77
+ get: function () {
78
+ var _a, _b, _c, _d, _e, _f, _g;
79
+ return parseInt((_g = (_f = (_e = (_d = (_c = (_b = (_a = this.data["j:Job"].ScanJob[0].PreScanPage) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.BufferInfo) === null || _c === void 0 ? void 0 : _c[0]) === null || _d === void 0 ? void 0 : _d.ScanSettings) === null || _e === void 0 ? void 0 : _e[0]) === null || _f === void 0 ? void 0 : _f.XResolution[0]) !== null && _g !== void 0 ? _g : "");
80
+ },
81
+ enumerable: false,
82
+ configurable: true
83
+ });
84
+ Object.defineProperty(Job.prototype, "yResolution", {
85
+ get: function () {
86
+ var _a, _b, _c, _d, _e, _f, _g;
87
+ return parseInt((_g = (_f = (_e = (_d = (_c = (_b = (_a = this.data["j:Job"].ScanJob[0].PreScanPage) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.BufferInfo) === null || _c === void 0 ? void 0 : _c[0]) === null || _d === void 0 ? void 0 : _d.ScanSettings) === null || _e === void 0 ? void 0 : _e[0]) === null || _f === void 0 ? void 0 : _f.YResolution[0]) !== null && _g !== void 0 ? _g : "");
88
+ },
89
+ enumerable: false,
90
+ configurable: true
91
+ });
92
+ return Job;
93
+ }());
94
+ exports.default = Job;
63
95
  //# sourceMappingURL=Job.js.map
package/dist/Job.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Job.js","sourceRoot":"","sources":["../src/Job.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAkBb;IAEE,aAAY,IAAa;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,sBAAI,kCAAiB;aAArB;YACE,IAAI,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;YAC5D,IAAI,WAAW,EAAE;gBACf,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;aACrC;iBAAM;gBACL,OAAO,IAAI,CAAC;aACb;QACH,CAAC;;;OAAA;IAED,sBAAI,gCAAe;aAAnB;YACE,OAAO,QAAQ,CACb,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAC3D,EAAE,CACH,CAAC;QACJ,CAAC;;;OAAA;IAED,sBAAI,yBAAQ;aAAZ;YACE,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7C,CAAC;;;OAAA;IAED,sBAAI,0BAAS;aAAb;YACE,IAAI,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;YAC5D,IAAI,WAAW,EAAE;gBACf,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;aACpC;iBAAM;gBACL,OAAO,EAAE,CAAC;aACX;QACH,CAAC;;;OAAA;IAED,sBAAI,0BAAS;aAAb;YACE,IAAI,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;YAC5D,IAAI,WAAW,EAAE;gBACf,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;aACpC;iBAAM;gBACL,OAAO,IAAI,CAAC;aACb;QACH,CAAC;;;OAAA;IACH,UAAC;AAAD,CAAC,AA3CD,IA2CC","sourcesContent":["\"use strict\";\r\n\r\nexport interface JobData {\r\n \"j:Job\": {\r\n ScanJob: {\r\n PreScanPage?: {\r\n PageState: string[];\r\n BinaryURL: string[];\r\n PageNumber: string[];\r\n }[];\r\n PostScanPage: {\r\n PageNumber: string[];\r\n }[];\r\n }[];\r\n \"j:JobState\": string[];\r\n };\r\n}\r\n\r\nexport default class Job {\r\n private readonly data: JobData;\r\n constructor(data: JobData) {\r\n this.data = data;\r\n }\r\n\r\n get currentPageNumber(): string | null {\r\n let preScanPage = this.data[\"j:Job\"].ScanJob[0].PreScanPage;\r\n if (preScanPage) {\r\n return preScanPage[0].PageNumber[0];\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n get totalPageNumber(): number {\r\n return parseInt(\r\n this.data[\"j:Job\"].ScanJob[0].PostScanPage[0].PageNumber[0],\r\n 10\r\n );\r\n }\r\n\r\n get jobState(): \"Completed\" | \"Processing\" | \"ReadyToUpload\" | string {\r\n return this.data[\"j:Job\"][\"j:JobState\"][0];\r\n }\r\n\r\n get pageState(): string {\r\n let preScanPage = this.data[\"j:Job\"].ScanJob[0].PreScanPage;\r\n if (preScanPage) {\r\n return preScanPage[0].PageState[0];\r\n } else {\r\n return \"\";\r\n }\r\n }\r\n\r\n get binaryURL(): string | null {\r\n let preScanPage = this.data[\"j:Job\"].ScanJob[0].PreScanPage;\r\n if (preScanPage) {\r\n return preScanPage[0].BinaryURL[0];\r\n } else {\r\n return null;\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"Job.js","sourceRoot":"","sources":["../src/Job.ts"],"names":[],"mappings":"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","sourcesContent":["\"use strict\";\n\nexport interface JobData {\n \"j:Job\": {\n ScanJob: {\n PreScanPage?: {\n PageState: string[];\n BinaryURL: string[];\n PageNumber: string[];\n BufferInfo: {\n ImageWidth: string[];\n ImageHeight: string[];\n ScanSettings: {\n XResolution: string[];\n YResolution: string[];\n }[];\n }[];\n }[];\n PostScanPage: {\n PageNumber: string[];\n }[];\n }[];\n \"j:JobState\": string[];\n };\n}\n\nexport default class Job {\n private readonly data: JobData;\n constructor(data: JobData) {\n this.data = data;\n }\n\n get currentPageNumber(): string | null {\n let preScanPage = this.data[\"j:Job\"].ScanJob[0].PreScanPage;\n if (preScanPage) {\n return preScanPage[0].PageNumber[0];\n } else {\n return null;\n }\n }\n\n get totalPageNumber(): number {\n return parseInt(\n this.data[\"j:Job\"].ScanJob[0].PostScanPage[0].PageNumber[0],\n 10\n );\n }\n\n get jobState():\n | \"Completed\"\n | \"Processing\"\n | \"ReadyToUpload\"\n | \"Canceled\"\n | string {\n return this.data[\"j:Job\"][\"j:JobState\"][0];\n }\n\n get pageState(): string {\n let preScanPage = this.data[\"j:Job\"].ScanJob[0].PreScanPage;\n if (preScanPage) {\n return preScanPage[0].PageState[0];\n } else {\n return \"\";\n }\n }\n\n get binaryURL(): string | null {\n let preScanPage = this.data[\"j:Job\"].ScanJob[0].PreScanPage;\n if (preScanPage) {\n return preScanPage[0].BinaryURL[0];\n } else {\n return null;\n }\n }\n\n get imageWidth(): number {\n return parseInt(\n this.data[\"j:Job\"].ScanJob[0].PreScanPage?.[0]?.BufferInfo?.[0]\n ?.ImageWidth[0] ?? \"\"\n );\n }\n get imageHeight(): number {\n return parseInt(\n this.data[\"j:Job\"].ScanJob[0].PreScanPage?.[0]?.BufferInfo?.[0]\n ?.ImageHeight[0] ?? \"\"\n );\n }\n get xResolution(): number {\n return parseInt(\n this.data[\"j:Job\"].ScanJob[0].PreScanPage?.[0]?.BufferInfo?.[0]\n ?.ScanSettings?.[0]?.XResolution[0] ?? \"\"\n );\n }\n get yResolution(): number {\n return parseInt(\n this.data[\"j:Job\"].ScanJob[0].PreScanPage?.[0]?.BufferInfo?.[0]\n ?.ScanSettings?.[0]?.YResolution[0] ?? \"\"\n );\n }\n}\n"]}
@@ -0,0 +1,26 @@
1
+ /// <reference types="node" />
2
+ export default class JpegUtil {
3
+ static setDebug(dbg: boolean): void;
4
+ private static logDebug;
5
+ private static numToHex;
6
+ static GetJpgSize(buffer: Buffer): {
7
+ height: number;
8
+ width: number;
9
+ } | null;
10
+ static setJpgSize(buffer: Buffer, size: {
11
+ height: number;
12
+ width: number;
13
+ }): boolean;
14
+ static setJpgHeight(buffer: Buffer, height: number): boolean;
15
+ static fixSizeWithDNL(buffer: Buffer): number | null;
16
+ private static writeHeightInStartOfFrame;
17
+ static readNumberOfLineFromDNL(buffer: Buffer, start: number, length: number): number | null;
18
+ static parse(buffer: Buffer, markerHandler: {
19
+ [key: string]: (start: number, length: number) => boolean;
20
+ }): boolean;
21
+ private static isValidJpegHeader;
22
+ private static isSOIHeader;
23
+ private static getBlockLength;
24
+ private static findCurrentBlockSize;
25
+ private static parseMarker;
26
+ }
@@ -0,0 +1,238 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var debug = false;
4
+ var start_of_Frame_0 = "FFC0";
5
+ var define_number_of_lines = "FFDC";
6
+ var JpegUtil = /** @class */ (function () {
7
+ function JpegUtil() {
8
+ }
9
+ JpegUtil.setDebug = function (dbg) {
10
+ debug = dbg;
11
+ };
12
+ JpegUtil.logDebug = function (msg) {
13
+ if (debug) {
14
+ console.log(msg);
15
+ }
16
+ };
17
+ JpegUtil.numToHex = function (s) {
18
+ return s.toString(16).padStart(2, "0").toUpperCase();
19
+ };
20
+ JpegUtil.GetJpgSize = function (buffer) {
21
+ var _a;
22
+ var size = null;
23
+ this.parse(buffer, (_a = {},
24
+ _a[start_of_Frame_0] = function (start, length) {
25
+ // read the the "Start of frame" marker which contains the file size
26
+ if (6 < length) {
27
+ var pHeight = buffer[start + 3] * 256 + buffer[start + 4];
28
+ var pWidth = buffer[start + 5] * 256 + buffer[start + 6];
29
+ size = { height: pHeight, width: pWidth };
30
+ }
31
+ // stop processing
32
+ return true;
33
+ },
34
+ _a));
35
+ return size;
36
+ };
37
+ JpegUtil.setJpgSize = function (buffer, size) {
38
+ var _a;
39
+ var sizeWritten = false;
40
+ var parsingSucceed = this.parse(buffer, (_a = {},
41
+ _a[start_of_Frame_0] = function (start, length) {
42
+ // read the the "Start of frame" marker which contains the file size
43
+ // write the picture size
44
+ if (6 < length) {
45
+ var height = Buffer.from([0x00, 0x00]);
46
+ height.writeInt16BE(size.height);
47
+ buffer[start + 3] = height[0];
48
+ buffer[start + 4] = height[1];
49
+ var width = Buffer.from([0x00, 0x00]);
50
+ width.writeInt16BE(size.width);
51
+ buffer[start + 5] = width[0];
52
+ buffer[start + 6] = width[1];
53
+ sizeWritten = true;
54
+ }
55
+ // stop processing
56
+ return true;
57
+ },
58
+ _a));
59
+ if (!parsingSucceed) {
60
+ return false;
61
+ }
62
+ return sizeWritten;
63
+ };
64
+ JpegUtil.setJpgHeight = function (buffer, height) {
65
+ var _a;
66
+ var _this = this;
67
+ var heightWritten = false;
68
+ var parsingSucceed = this.parse(buffer, (_a = {},
69
+ _a[start_of_Frame_0] = function (start, length) {
70
+ // read the the "Start of frame" marker which contains the file size
71
+ // write the picture size
72
+ heightWritten = _this.writeHeightInStartOfFrame(buffer, start, length, height);
73
+ // stop processing
74
+ return true;
75
+ },
76
+ _a));
77
+ if (!parsingSucceed) {
78
+ return false;
79
+ }
80
+ return heightWritten;
81
+ };
82
+ JpegUtil.fixSizeWithDNL = function (buffer) {
83
+ var _a;
84
+ var _this = this;
85
+ var numberOfLine = null;
86
+ var startOfStartOfFrame = null;
87
+ var lengthOfStartOfFrame = null;
88
+ this.parse(buffer, (_a = {},
89
+ _a[define_number_of_lines] = function (start, length) {
90
+ numberOfLine = _this.readNumberOfLineFromDNL(buffer, start, length);
91
+ return false; // don't stop
92
+ },
93
+ _a[start_of_Frame_0] = function (start, length) {
94
+ startOfStartOfFrame = start;
95
+ lengthOfStartOfFrame = length;
96
+ return false; // don't stop
97
+ },
98
+ _a));
99
+ if (numberOfLine == null) {
100
+ this.logDebug("DNL marker not found impossible to fix height");
101
+ return null;
102
+ }
103
+ if (startOfStartOfFrame == null || lengthOfStartOfFrame == null) {
104
+ this.logDebug("Start of frame 0 not found, either jpeg parsing is broken either the stream is corrupted");
105
+ return null;
106
+ }
107
+ if (this.writeHeightInStartOfFrame(buffer, startOfStartOfFrame, lengthOfStartOfFrame, numberOfLine)) {
108
+ return numberOfLine;
109
+ }
110
+ return null;
111
+ };
112
+ JpegUtil.writeHeightInStartOfFrame = function (buffer, startOfStartOfFrame, lengthOfStartOfFrame, numberOfLine) {
113
+ // write the picture height
114
+ if (6 < lengthOfStartOfFrame) {
115
+ var heightBuffer = Buffer.from([0x00, 0x00]);
116
+ heightBuffer.writeInt16BE(numberOfLine);
117
+ buffer[startOfStartOfFrame + 3] = heightBuffer[0];
118
+ buffer[startOfStartOfFrame + 4] = heightBuffer[1];
119
+ return true;
120
+ }
121
+ return false;
122
+ };
123
+ JpegUtil.readNumberOfLineFromDNL = function (buffer, start, length) {
124
+ var numberOfLine = null;
125
+ // read the number of line
126
+ if (3 < length) {
127
+ numberOfLine = buffer[start + 2] * 256 + buffer[start + 3];
128
+ }
129
+ return numberOfLine;
130
+ };
131
+ JpegUtil.parse = function (buffer, markerHandler) {
132
+ var i = 0;
133
+ if (!this.isSOIHeader(i, buffer)) {
134
+ this.logDebug("Not a valid SOI header");
135
+ return false;
136
+ }
137
+ i += 4;
138
+ // Check for valid JPEG header (null terminated JFIF)
139
+ if (!this.isValidJpegHeader(i, buffer)) {
140
+ this.logDebug("Not a valid JFIF string");
141
+ return false;
142
+ }
143
+ return this.parseMarker(buffer, i, markerHandler);
144
+ };
145
+ JpegUtil.isValidJpegHeader = function (i, buffer) {
146
+ return (i + 6 < buffer.length &&
147
+ buffer[i + 2] == "J".charCodeAt(0) &&
148
+ buffer[i + 3] == "F".charCodeAt(0) &&
149
+ buffer[i + 4] == "I".charCodeAt(0) &&
150
+ buffer[i + 5] == "F".charCodeAt(0) &&
151
+ buffer[i + 6] == 0x00);
152
+ };
153
+ JpegUtil.isSOIHeader = function (i, buffer) {
154
+ return (i + 3 < buffer.length &&
155
+ buffer[i] == 0xff &&
156
+ buffer[i + 1] == 0xd8 &&
157
+ buffer[i + 2] == 0xff &&
158
+ buffer[i + 3] == 0xe0);
159
+ };
160
+ JpegUtil.getBlockLength = function (buffer, i, marker) {
161
+ if (marker === "FFDA" ||
162
+ marker === "FFD0" ||
163
+ marker === "FFD1" ||
164
+ marker === "FFD2" ||
165
+ marker === "FFD3" ||
166
+ marker === "FFD4" ||
167
+ marker === "FFD5" ||
168
+ marker === "FFD6" ||
169
+ marker === "FFD7") {
170
+ return JpegUtil.findCurrentBlockSize(buffer, i + 2, marker);
171
+ }
172
+ else {
173
+ // read the new block length
174
+ var blockLength = buffer[i + 2] * 256 + buffer[i + 3];
175
+ this.logDebug("block size for ".concat(marker, " is ").concat(blockLength));
176
+ return blockLength;
177
+ }
178
+ };
179
+ JpegUtil.findCurrentBlockSize = function (buffer, i, current_marker) {
180
+ for (var j = 0; i + j < buffer.length; j++) {
181
+ if (buffer[i + j] === 0xff) {
182
+ if (i + j + 1 < buffer.length) {
183
+ if (buffer[i + j + 1] == 0x00) {
184
+ // it's ok just continue
185
+ }
186
+ else {
187
+ // we've just found the end of the Start of Scan
188
+ return j;
189
+ }
190
+ }
191
+ else {
192
+ this.logDebug("Premature end of stream reach while searching for the block size inside marker ".concat(current_marker));
193
+ return null;
194
+ }
195
+ }
196
+ }
197
+ return null;
198
+ };
199
+ JpegUtil.parseMarker = function (buffer, i, markerHandler) {
200
+ var marker = "";
201
+ //Retrieve the block length of the first block since the first block will not contain the size of file
202
+ var blockLength = buffer[i] * 256 + buffer[i + 1];
203
+ //Increase the file index to get to the next block
204
+ i += blockLength;
205
+ while (i < buffer.length) {
206
+ if (buffer[i] != 0xff) {
207
+ this.logDebug("We should be at the begining of the next block, but got: " +
208
+ buffer[i]);
209
+ return false;
210
+ }
211
+ if (i + 1 >= buffer.length) {
212
+ this.logDebug("End of stream prematurely found in marker: " + marker);
213
+ return false;
214
+ }
215
+ if (buffer[i + 1] == 0x00) {
216
+ this.logDebug("Bad marker at ".concat(i, " 0x00 just after marker ").concat(marker));
217
+ return false;
218
+ }
219
+ marker = this.numToHex(buffer[i]) + this.numToHex(buffer[i + 1]);
220
+ var foundBlockLength = this.getBlockLength(buffer, i, marker);
221
+ if (foundBlockLength == null) {
222
+ this.logDebug("Was not able to determine block size for marker ".concat(marker));
223
+ return false;
224
+ }
225
+ blockLength = foundBlockLength;
226
+ var handler = markerHandler[marker];
227
+ if (handler != null && handler(i + 2, blockLength)) {
228
+ return true;
229
+ }
230
+ i = i + 2 + blockLength;
231
+ }
232
+ this.logDebug("End of payload reached");
233
+ return true;
234
+ };
235
+ return JpegUtil;
236
+ }());
237
+ exports.default = JpegUtil;
238
+ //# sourceMappingURL=JpegUtil.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JpegUtil.js","sourceRoot":"","sources":["../src/JpegUtil.ts"],"names":[],"mappings":"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","sourcesContent":["let debug = false;\n\nconst start_of_Frame_0 = \"FFC0\";\nconst define_number_of_lines = \"FFDC\";\n\nexport default class JpegUtil {\n static setDebug(dbg: boolean) {\n debug = dbg;\n }\n\n private static logDebug(msg: any) {\n if (debug) {\n console.log(msg);\n }\n }\n\n private static numToHex(s: number) {\n return s.toString(16).padStart(2, \"0\").toUpperCase();\n }\n\n static GetJpgSize(buffer: Buffer): { height: number; width: number } | null {\n let size: { height: number; width: number } | null = null;\n this.parse(buffer, {\n [start_of_Frame_0]: (start: number, length: number) => {\n // read the the \"Start of frame\" marker which contains the file size\n if (6 < length) {\n const pHeight = buffer[start + 3] * 256 + buffer[start + 4];\n const pWidth = buffer[start + 5] * 256 + buffer[start + 6];\n\n size = { height: pHeight, width: pWidth };\n }\n\n // stop processing\n return true;\n },\n });\n return size;\n }\n\n static setJpgSize(\n buffer: Buffer,\n size: { height: number; width: number }\n ): boolean {\n let sizeWritten = false;\n const parsingSucceed = this.parse(buffer, {\n [start_of_Frame_0]: (start: number, length: number) => {\n // read the the \"Start of frame\" marker which contains the file size\n\n // write the picture size\n if (6 < length) {\n const height = Buffer.from([0x00, 0x00]);\n height.writeInt16BE(size.height);\n buffer[start + 3] = height[0];\n buffer[start + 4] = height[1];\n\n const width = Buffer.from([0x00, 0x00]);\n width.writeInt16BE(size.width);\n buffer[start + 5] = width[0];\n buffer[start + 6] = width[1];\n\n sizeWritten = true;\n }\n\n // stop processing\n return true;\n },\n });\n\n if (!parsingSucceed) {\n return false;\n }\n\n return sizeWritten;\n }\n\n static setJpgHeight(buffer: Buffer, height: number): boolean {\n let heightWritten = false;\n const parsingSucceed = this.parse(buffer, {\n [start_of_Frame_0]: (start: number, length: number) => {\n // read the the \"Start of frame\" marker which contains the file size\n\n // write the picture size\n heightWritten = this.writeHeightInStartOfFrame(\n buffer,\n start,\n length,\n height\n );\n\n // stop processing\n return true;\n },\n });\n\n if (!parsingSucceed) {\n return false;\n }\n\n return heightWritten;\n }\n\n static fixSizeWithDNL(buffer: Buffer): number | null {\n let numberOfLine: number | null = null;\n let startOfStartOfFrame: number | null = null;\n let lengthOfStartOfFrame: number | null = null;\n this.parse(buffer, {\n [define_number_of_lines]: (start: number, length: number) => {\n numberOfLine = this.readNumberOfLineFromDNL(buffer, start, length);\n return false; // don't stop\n },\n [start_of_Frame_0]: (start: number, length: number) => {\n startOfStartOfFrame = start;\n lengthOfStartOfFrame = length;\n return false; // don't stop\n },\n });\n\n if (numberOfLine == null) {\n this.logDebug(\"DNL marker not found impossible to fix height\");\n return null;\n }\n\n if (startOfStartOfFrame == null || lengthOfStartOfFrame == null) {\n this.logDebug(\n \"Start of frame 0 not found, either jpeg parsing is broken either the stream is corrupted\"\n );\n return null;\n }\n\n if (\n this.writeHeightInStartOfFrame(\n buffer,\n startOfStartOfFrame,\n lengthOfStartOfFrame,\n numberOfLine\n )\n ) {\n return numberOfLine;\n }\n return null;\n }\n\n private static writeHeightInStartOfFrame(\n buffer: Buffer,\n startOfStartOfFrame: number,\n lengthOfStartOfFrame: number,\n numberOfLine: number\n ) : boolean {\n // write the picture height\n if (6 < lengthOfStartOfFrame) {\n const heightBuffer = Buffer.from([0x00, 0x00]);\n heightBuffer.writeInt16BE(numberOfLine);\n buffer[startOfStartOfFrame + 3] = heightBuffer[0];\n buffer[startOfStartOfFrame + 4] = heightBuffer[1];\n\n return true;\n }\n\n return false;\n }\n\n static readNumberOfLineFromDNL(\n buffer: Buffer,\n start: number,\n length: number\n ): number | null {\n let numberOfLine: number | null = null;\n\n // read the number of line\n if (3 < length) {\n numberOfLine = buffer[start + 2] * 256 + buffer[start + 3];\n }\n\n return numberOfLine;\n }\n static parse(\n buffer: Buffer,\n markerHandler: { [key: string]: (start: number, length: number) => boolean }\n ): boolean {\n let i: number = 0;\n\n if (!this.isSOIHeader(i, buffer)) {\n this.logDebug(\"Not a valid SOI header\");\n return false;\n }\n\n i += 4;\n\n // Check for valid JPEG header (null terminated JFIF)\n if (!this.isValidJpegHeader(i, buffer)) {\n this.logDebug(\"Not a valid JFIF string\");\n return false;\n }\n\n return this.parseMarker(buffer, i, markerHandler);\n }\n\n private static isValidJpegHeader(i: number, buffer: Buffer) {\n return (\n i + 6 < buffer.length &&\n buffer[i + 2] == \"J\".charCodeAt(0) &&\n buffer[i + 3] == \"F\".charCodeAt(0) &&\n buffer[i + 4] == \"I\".charCodeAt(0) &&\n buffer[i + 5] == \"F\".charCodeAt(0) &&\n buffer[i + 6] == 0x00\n );\n }\n\n private static isSOIHeader(i: number, buffer: Buffer) {\n return (\n i + 3 < buffer.length &&\n buffer[i] == 0xff &&\n buffer[i + 1] == 0xd8 &&\n buffer[i + 2] == 0xff &&\n buffer[i + 3] == 0xe0\n );\n }\n\n private static getBlockLength(\n buffer: Buffer,\n i: number,\n marker: string\n ): number | null {\n if (\n marker === \"FFDA\" ||\n marker === \"FFD0\" ||\n marker === \"FFD1\" ||\n marker === \"FFD2\" ||\n marker === \"FFD3\" ||\n marker === \"FFD4\" ||\n marker === \"FFD5\" ||\n marker === \"FFD6\" ||\n marker === \"FFD7\"\n ) {\n return JpegUtil.findCurrentBlockSize(buffer, i + 2, marker);\n } else {\n // read the new block length\n const blockLength = buffer[i + 2] * 256 + buffer[i + 3];\n\n this.logDebug(`block size for ${marker} is ${blockLength}`);\n return blockLength;\n }\n }\n\n private static findCurrentBlockSize(\n buffer: Buffer,\n i: number,\n current_marker: string\n ): number | null {\n for (let j = 0; i + j < buffer.length; j++) {\n if (buffer[i + j] === 0xff) {\n if (i + j + 1 < buffer.length) {\n if (buffer[i + j + 1] == 0x00) {\n // it's ok just continue\n } else {\n // we've just found the end of the Start of Scan\n return j;\n }\n } else {\n this.logDebug(\n `Premature end of stream reach while searching for the block size inside marker ${current_marker}`\n );\n return null;\n }\n }\n }\n return null;\n }\n\n private static parseMarker(buffer: Buffer, i: number, markerHandler: { [key: string]: (start: number, length: number) => boolean }) : boolean {\n let marker = \"\";\n\n //Retrieve the block length of the first block since the first block will not contain the size of file\n let blockLength = buffer[i] * 256 + buffer[i + 1];\n\n //Increase the file index to get to the next block\n i += blockLength;\n while (i < buffer.length) {\n if (buffer[i] != 0xff) {\n this.logDebug(\n \"We should be at the begining of the next block, but got: \" +\n buffer[i]\n );\n return false;\n }\n\n if (i + 1 >= buffer.length) {\n this.logDebug(\"End of stream prematurely found in marker: \" + marker);\n return false;\n }\n\n if (buffer[i + 1] == 0x00) {\n this.logDebug(`Bad marker at ${i} 0x00 just after marker ${marker}`);\n return false;\n }\n\n marker = this.numToHex(buffer[i]) + this.numToHex(buffer[i + 1]);\n\n const foundBlockLength = this.getBlockLength(buffer, i, marker);\n if (foundBlockLength == null) {\n this.logDebug(\n `Was not able to determine block size for marker ${marker}`\n );\n return false;\n }\n blockLength = foundBlockLength;\n\n const handler = markerHandler[marker];\n if (handler != null && handler(i + 2, blockLength)) {\n return true;\n }\n\n i = i + 2 + blockLength;\n }\n\n this.logDebug(\"End of payload reached\");\n return true;\n }\n}\n"]}
@@ -0,0 +1,5 @@
1
+ export default class PathHelper {
2
+ static getFileForPage(folder: string, scanCount: number, currentPageNumber: number, filePattern: string | undefined, extension: string): string;
3
+ static getFileForScan(folder: string, scanCount: number, filePattern: string | undefined, extension: string): string;
4
+ static getOutputFolder(folder: string | undefined): Promise<string>;
5
+ }