node-hp-scan-to 1.2.0 → 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.
package/dist/index.js CHANGED
@@ -48,7 +48,7 @@ var bonjour_1 = __importDefault(require("bonjour"));
48
48
  var Destination_1 = __importDefault(require("./Destination"));
49
49
  var ScanJobSettings_1 = __importDefault(require("./ScanJobSettings"));
50
50
  var HPApi_1 = __importDefault(require("./HPApi"));
51
- var JpegUtil_1 = __importDefault(require("../src/JpegUtil"));
51
+ var JpegUtil_1 = __importDefault(require("./JpegUtil"));
52
52
  var PathHelper_1 = __importDefault(require("./PathHelper"));
53
53
  var ScanContent_1 = require("./ScanContent");
54
54
  var program = new commander_1.Command();
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\n// noinspection XmlDeprecatedElement,HtmlDeprecatedTag\n\n\"use strict\";\n\nimport os from \"os\";\nimport fs from \"fs/promises\";\nimport { Command } from \"commander\";\nimport Bonjour from \"bonjour\";\n\nimport Destination from \"./Destination\";\nimport ScanJobSettings from \"./ScanJobSettings\";\nimport Event from \"./Event\";\nimport HPApi from \"./HPApi\";\nimport Job from \"./Job\";\nimport WalkupScanDestination from \"./WalkupScanDestination\";\nimport WalkupScanToCompDestination from \"./WalkupScanToCompDestination\";\nimport JpegUtil from \"../src/JpegUtil\";\nimport PathHelper from \"./PathHelper\";\nimport { createPdfFrom, ScanContent, ScanPage } from \"./ScanContent\";\n\nconst program = new Command();\n\nfunction delay(t: number): Promise<void> {\n return new Promise(function (resolve) {\n setTimeout(resolve, t);\n });\n}\n\nasync function waitForScanEvent(\n resourceURI: string,\n afterEtag: string | null = null\n): Promise<Event> {\n console.log(\"Start listening for new ScanEvent\");\n\n let eventTable = await HPApi.getEvents(afterEtag ?? \"\");\n let acceptedScanEvent = null;\n let currentEtag = eventTable.etag;\n while (acceptedScanEvent == null) {\n eventTable = await HPApi.getEvents(currentEtag, 1200);\n currentEtag = eventTable.etag;\n\n acceptedScanEvent = eventTable.eventTable.events.find(\n (ev) =>\n ev.isScanEvent &&\n ev.destinationURI &&\n ev.destinationURI.indexOf(resourceURI) >= 0\n );\n }\n return acceptedScanEvent;\n}\n\nasync function waitPrinterUntilItIsReadyToUploadOrCompleted(\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 register(): Promise<string> {\n let destination;\n const hostname = os.hostname();\n const toComp = await HPApi.getWalkupScanToCompCaps();\n\n if (toComp) {\n const walkupScanDestinations =\n await HPApi.getWalkupScanToCompDestinations();\n const destinations = walkupScanDestinations.destinations;\n\n console.log(\n \"Host destinations fetched:\",\n destinations.map((d) => d.name).join(\", \")\n );\n\n destination = destinations.find((x) => x.name === hostname);\n } else {\n const walkupScanDestinations = await HPApi.getWalkupScanDestinations();\n const destinations = walkupScanDestinations.destinations;\n\n console.log(\n \"Host destinations fetched:\",\n destinations.map((d) => d.name).join(\", \")\n );\n\n destination = destinations.find((x) => x.name === hostname);\n }\n\n let resourceURI;\n if (destination) {\n console.log(\n `Re-using existing destination: ${hostname} - ${destination.resourceURI}`\n );\n resourceURI = destination.resourceURI;\n } else {\n resourceURI = await HPApi.registerDestination(\n new Destination(hostname, hostname, toComp),\n toComp\n );\n console.log(`New Destination registered: ${hostname} - ${resourceURI}`);\n }\n return resourceURI;\n}\n\nasync function TryGetDestination(event: Event) {\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 !== \"\") {\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,\n height,\n xResolution: job.xResolution,\n yResolution: job.yResolution,\n };\n}\n\nasync function handleProcessingState(\n job: Job,\n inputSource: \"Adf\" | \"Platen\",\n folder: string,\n scanCount: number,\n currentPageNumber: number\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 program.opts().pattern,\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 waitScanRequest(compEventURI: string): Promise<boolean> {\n const waitMax = 50;\n for (let i = 0; i < waitMax; i++) {\n let walkupScanToCompEvent = await HPApi.getWalkupScanToCompEvent(\n compEventURI\n );\n let message = walkupScanToCompEvent.eventType;\n if (message === \"HostSelected\") {\n // this ok to wait\n } else if (message === \"ScanRequested\") {\n break;\n } else if (message === \"ScanNewPageRequested\") {\n break;\n } else if (message === \"ScanPagesComplete\") {\n console.log(\"no more page to scan, scan is finished\");\n return false;\n } else {\n console.log(`Unknown eventType: ${message}`);\n return false;\n }\n\n console.log(`Waiting user input: ${i + 1}/${waitMax}`);\n await new Promise((resolve) => setTimeout(resolve, 1000)); //wait 1s\n }\n return true;\n}\n\nasync function executeScanJob(\n scanJobSettings: ScanJobSettings,\n inputSource: \"Adf\" | \"Platen\",\n folder: string,\n scanCount: number,\n scanJobContent: ScanContent\n) {\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 waitPrinterUntilItIsReadyToUploadOrCompleted(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 );\n if (page != null) {\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: ${job.totalPageNumber}:`\n );\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) {\n await executeScanJob(\n scanJobSettings,\n inputSource,\n folder,\n scanCount,\n scanJobContent\n );\n let lastEvent = firstEvent;\n if (\n lastEvent.compEventURI &&\n inputSource !== \"Adf\" &&\n lastEvent.destinationURI\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 await executeScanJob(\n scanJobSettings,\n inputSource,\n folder,\n scanCount,\n scanJobContent\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(folder: string, scanCount: number, scanJobContent: ScanContent) {\n const pdfFilePath = PathHelper.getFileForScan(\n folder,\n scanCount,\n program.opts().pattern,\n \"pdf\"\n );\n await createPdfFrom(scanJobContent, pdfFilePath);\n scanJobContent.elements.forEach((e) => fs.unlink(e.path));\n return pdfFilePath;\n}\n\nfunction displayPdfScan(pdfFilePath: string, scanJobContent: ScanContent) {\n console.log(\n `The following page(s) have been rendered inside '${pdfFilePath}': `\n );\n scanJobContent.elements.forEach((e) =>\n console.log(\n `\\t- page ${e.pageNumber.toString().padStart(3, \" \")} - ${e.width}x${\n e.height\n }`\n )\n );\n}\n\nfunction displayJpegScan(scanJobContent: ScanContent) {\n scanJobContent.elements.forEach((e) =>\n console.log(\n `\\t- page ${e.pageNumber.toString().padStart(3, \" \")} - ${e.width}x${\n e.height\n } - ${e.path}`\n )\n );\n}\n\nasync function saveScan(\n event: Event,\n folder: string,\n scanCount: number\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 const contentType = destination.getContentType();\n const toPdf =\n destination.shortcut === \"SavePDF\" || destination.shortcut === \"EmailPDF\";\n\n const scanStatus = await HPApi.getScanStatus();\n console.log(\"Afd is : \" + scanStatus.adfState);\n\n let inputSource = scanStatus.getInputSource();\n\n let scanJobSettings = new ScanJobSettings(inputSource, contentType);\n\n let scanJobContent: ScanContent = { elements: [] };\n\n await executeScanJobs(\n scanJobSettings,\n inputSource,\n folder,\n scanCount,\n scanJobContent,\n event\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(folder, scanCount, scanJobContent);\n displayPdfScan(pdfFilePath, scanJobContent);\n } else {\n displayJpegScan(scanJobContent);\n }\n}\n\nlet iteration = 0;\nasync function init() {\n const folder = await PathHelper.getOutputFolder(program.opts().directory);\n console.log(`Target folder: ${folder}`);\n\n let scanCount = 0;\n\n let keepActive = true;\n let errorCount = 0;\n while (keepActive) {\n console.log(`Running iteration: ${iteration} - errorCount: ${errorCount}`);\n try {\n let resourceURI = await register();\n\n console.log(\"Waiting scan event for:\", resourceURI);\n const event = await waitForScanEvent(resourceURI);\n\n scanCount++;\n console.log(`Scan event captured, saving scan #${scanCount}`);\n await saveScan(event, folder, scanCount);\n } catch (e) {\n errorCount++;\n console.error(e);\n console.log(e);\n }\n\n if (errorCount === 50) {\n keepActive = false;\n }\n\n await delay(1000);\n }\n}\n\nfunction findOfficejetIp(): Promise<string> {\n return new Promise((resolve) => {\n const bonjour = Bonjour();\n console.log(\"Searching printer...\");\n let browser = bonjour.find(\n {\n type: \"http\",\n },\n (service) => {\n console.log(\".\");\n if (\n service.name.startsWith(program.opts().name) &&\n service.port === 80 &&\n service.type === \"http\" &&\n service.addresses != null\n ) {\n browser.stop();\n bonjour.destroy();\n console.log(`Found: ${service.name}`);\n resolve(service.addresses[0]);\n }\n }\n );\n browser.start();\n });\n}\n\nasync function main() {\n program.option(\n \"-ip, --address <ip>\",\n \"IP address of the printer (this overrides -p)\"\n );\n program.option(\n \"-n, --name <name>\",\n \"Name of the printer for service discovery\",\n \"HP Smart Tank Plus 570 series\"\n ); //or i.e. 'Deskjet 3520 series'\n program.option(\n \"-d, --directory <dir>\",\n \"Directory where scans are saved (defaults to /tmp/scan-to-pc<random>)\"\n );\n program.option(\n \"-p, --pattern <pattern>\",\n 'Pattern for filename (i.e. \"scan\"_dd.mm.yyyy_hh:MM:ss, without this its scanPage<number>)'\n );\n program.option(\"-D, --debug\", \"Enable debug\");\n program.parse(process.argv);\n\n let ip = program.opts().address || \"192.168.1.53\";\n if (!ip) {\n ip = await findOfficejetIp();\n }\n\n const debug = program.opts().debug != null;\n\n HPApi.setDebug(debug);\n HPApi.setPrinterIP(ip);\n await init();\n}\n\nmain();\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\n// noinspection XmlDeprecatedElement,HtmlDeprecatedTag\n\n\"use strict\";\n\nimport os from \"os\";\nimport fs from \"fs/promises\";\nimport { Command } from \"commander\";\nimport Bonjour from \"bonjour\";\n\nimport Destination from \"./Destination\";\nimport ScanJobSettings from \"./ScanJobSettings\";\nimport Event from \"./Event\";\nimport HPApi from \"./HPApi\";\nimport Job from \"./Job\";\nimport WalkupScanDestination from \"./WalkupScanDestination\";\nimport WalkupScanToCompDestination from \"./WalkupScanToCompDestination\";\nimport JpegUtil from \"./JpegUtil\";\nimport PathHelper from \"./PathHelper\";\nimport { createPdfFrom, ScanContent, ScanPage } from \"./ScanContent\";\n\nconst program = new Command();\n\nfunction delay(t: number): Promise<void> {\n return new Promise(function (resolve) {\n setTimeout(resolve, t);\n });\n}\n\nasync function waitForScanEvent(\n resourceURI: string,\n afterEtag: string | null = null\n): Promise<Event> {\n console.log(\"Start listening for new ScanEvent\");\n\n let eventTable = await HPApi.getEvents(afterEtag ?? \"\");\n let acceptedScanEvent = null;\n let currentEtag = eventTable.etag;\n while (acceptedScanEvent == null) {\n eventTable = await HPApi.getEvents(currentEtag, 1200);\n currentEtag = eventTable.etag;\n\n acceptedScanEvent = eventTable.eventTable.events.find(\n (ev) =>\n ev.isScanEvent &&\n ev.destinationURI &&\n ev.destinationURI.indexOf(resourceURI) >= 0\n );\n }\n return acceptedScanEvent;\n}\n\nasync function waitPrinterUntilItIsReadyToUploadOrCompleted(\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 register(): Promise<string> {\n let destination;\n const hostname = os.hostname();\n const toComp = await HPApi.getWalkupScanToCompCaps();\n\n if (toComp) {\n const walkupScanDestinations =\n await HPApi.getWalkupScanToCompDestinations();\n const destinations = walkupScanDestinations.destinations;\n\n console.log(\n \"Host destinations fetched:\",\n destinations.map((d) => d.name).join(\", \")\n );\n\n destination = destinations.find((x) => x.name === hostname);\n } else {\n const walkupScanDestinations = await HPApi.getWalkupScanDestinations();\n const destinations = walkupScanDestinations.destinations;\n\n console.log(\n \"Host destinations fetched:\",\n destinations.map((d) => d.name).join(\", \")\n );\n\n destination = destinations.find((x) => x.name === hostname);\n }\n\n let resourceURI;\n if (destination) {\n console.log(\n `Re-using existing destination: ${hostname} - ${destination.resourceURI}`\n );\n resourceURI = destination.resourceURI;\n } else {\n resourceURI = await HPApi.registerDestination(\n new Destination(hostname, hostname, toComp),\n toComp\n );\n console.log(`New Destination registered: ${hostname} - ${resourceURI}`);\n }\n return resourceURI;\n}\n\nasync function TryGetDestination(event: Event) {\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 !== \"\") {\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,\n height,\n xResolution: job.xResolution,\n yResolution: job.yResolution,\n };\n}\n\nasync function handleProcessingState(\n job: Job,\n inputSource: \"Adf\" | \"Platen\",\n folder: string,\n scanCount: number,\n currentPageNumber: number\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 program.opts().pattern,\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 waitScanRequest(compEventURI: string): Promise<boolean> {\n const waitMax = 50;\n for (let i = 0; i < waitMax; i++) {\n let walkupScanToCompEvent = await HPApi.getWalkupScanToCompEvent(\n compEventURI\n );\n let message = walkupScanToCompEvent.eventType;\n if (message === \"HostSelected\") {\n // this ok to wait\n } else if (message === \"ScanRequested\") {\n break;\n } else if (message === \"ScanNewPageRequested\") {\n break;\n } else if (message === \"ScanPagesComplete\") {\n console.log(\"no more page to scan, scan is finished\");\n return false;\n } else {\n console.log(`Unknown eventType: ${message}`);\n return false;\n }\n\n console.log(`Waiting user input: ${i + 1}/${waitMax}`);\n await new Promise((resolve) => setTimeout(resolve, 1000)); //wait 1s\n }\n return true;\n}\n\nasync function executeScanJob(\n scanJobSettings: ScanJobSettings,\n inputSource: \"Adf\" | \"Platen\",\n folder: string,\n scanCount: number,\n scanJobContent: ScanContent\n) {\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 waitPrinterUntilItIsReadyToUploadOrCompleted(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 );\n if (page != null) {\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: ${job.totalPageNumber}:`\n );\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) {\n await executeScanJob(\n scanJobSettings,\n inputSource,\n folder,\n scanCount,\n scanJobContent\n );\n let lastEvent = firstEvent;\n if (\n lastEvent.compEventURI &&\n inputSource !== \"Adf\" &&\n lastEvent.destinationURI\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 await executeScanJob(\n scanJobSettings,\n inputSource,\n folder,\n scanCount,\n scanJobContent\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(folder: string, scanCount: number, scanJobContent: ScanContent) {\n const pdfFilePath = PathHelper.getFileForScan(\n folder,\n scanCount,\n program.opts().pattern,\n \"pdf\"\n );\n await createPdfFrom(scanJobContent, pdfFilePath);\n scanJobContent.elements.forEach((e) => fs.unlink(e.path));\n return pdfFilePath;\n}\n\nfunction displayPdfScan(pdfFilePath: string, scanJobContent: ScanContent) {\n console.log(\n `The following page(s) have been rendered inside '${pdfFilePath}': `\n );\n scanJobContent.elements.forEach((e) =>\n console.log(\n `\\t- page ${e.pageNumber.toString().padStart(3, \" \")} - ${e.width}x${\n e.height\n }`\n )\n );\n}\n\nfunction displayJpegScan(scanJobContent: ScanContent) {\n scanJobContent.elements.forEach((e) =>\n console.log(\n `\\t- page ${e.pageNumber.toString().padStart(3, \" \")} - ${e.width}x${\n e.height\n } - ${e.path}`\n )\n );\n}\n\nasync function saveScan(\n event: Event,\n folder: string,\n scanCount: number\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 const contentType = destination.getContentType();\n const toPdf =\n destination.shortcut === \"SavePDF\" || destination.shortcut === \"EmailPDF\";\n\n const scanStatus = await HPApi.getScanStatus();\n console.log(\"Afd is : \" + scanStatus.adfState);\n\n let inputSource = scanStatus.getInputSource();\n\n let scanJobSettings = new ScanJobSettings(inputSource, contentType);\n\n let scanJobContent: ScanContent = { elements: [] };\n\n await executeScanJobs(\n scanJobSettings,\n inputSource,\n folder,\n scanCount,\n scanJobContent,\n event\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(folder, scanCount, scanJobContent);\n displayPdfScan(pdfFilePath, scanJobContent);\n } else {\n displayJpegScan(scanJobContent);\n }\n}\n\nlet iteration = 0;\nasync function init() {\n const folder = await PathHelper.getOutputFolder(program.opts().directory);\n console.log(`Target folder: ${folder}`);\n\n let scanCount = 0;\n\n let keepActive = true;\n let errorCount = 0;\n while (keepActive) {\n console.log(`Running iteration: ${iteration} - errorCount: ${errorCount}`);\n try {\n let resourceURI = await register();\n\n console.log(\"Waiting scan event for:\", resourceURI);\n const event = await waitForScanEvent(resourceURI);\n\n scanCount++;\n console.log(`Scan event captured, saving scan #${scanCount}`);\n await saveScan(event, folder, scanCount);\n } catch (e) {\n errorCount++;\n console.error(e);\n console.log(e);\n }\n\n if (errorCount === 50) {\n keepActive = false;\n }\n\n await delay(1000);\n }\n}\n\nfunction findOfficejetIp(): Promise<string> {\n return new Promise((resolve) => {\n const bonjour = Bonjour();\n console.log(\"Searching printer...\");\n let browser = bonjour.find(\n {\n type: \"http\",\n },\n (service) => {\n console.log(\".\");\n if (\n service.name.startsWith(program.opts().name) &&\n service.port === 80 &&\n service.type === \"http\" &&\n service.addresses != null\n ) {\n browser.stop();\n bonjour.destroy();\n console.log(`Found: ${service.name}`);\n resolve(service.addresses[0]);\n }\n }\n );\n browser.start();\n });\n}\n\nasync function main() {\n program.option(\n \"-ip, --address <ip>\",\n \"IP address of the printer (this overrides -p)\"\n );\n program.option(\n \"-n, --name <name>\",\n \"Name of the printer for service discovery\",\n \"HP Smart Tank Plus 570 series\"\n ); //or i.e. 'Deskjet 3520 series'\n program.option(\n \"-d, --directory <dir>\",\n \"Directory where scans are saved (defaults to /tmp/scan-to-pc<random>)\"\n );\n program.option(\n \"-p, --pattern <pattern>\",\n 'Pattern for filename (i.e. \"scan\"_dd.mm.yyyy_hh:MM:ss, without this its scanPage<number>)'\n );\n program.option(\"-D, --debug\", \"Enable debug\");\n program.parse(process.argv);\n\n let ip = program.opts().address || \"192.168.1.53\";\n if (!ip) {\n ip = await findOfficejetIp();\n }\n\n const debug = program.opts().debug != null;\n\n HPApi.setDebug(debug);\n HPApi.setPrinterIP(ip);\n await init();\n}\n\nmain();\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "node-hp-scan-to",
3
- "version": "1.2.0",
3
+ "version": "1.2.1",
4
4
  "description": "Scan document to Computer for HP All-in-One Printers",
5
5
  "keywords": [
6
6
  "Officejet",
@@ -64,7 +64,7 @@
64
64
  "bonjour": "^3.5.0",
65
65
  "commander": "^9.0.0",
66
66
  "dateformat": "^4.6.3",
67
- "eslint": "^8.1.0",
67
+ "eslint": "^8.15.0",
68
68
  "xml2js": "^0.4.23",
69
69
  "jspdf": "^2.5.1",
70
70
  "yarn": "^1.22.18"
package/src/index.ts CHANGED
@@ -15,7 +15,7 @@ import HPApi from "./HPApi";
15
15
  import Job from "./Job";
16
16
  import WalkupScanDestination from "./WalkupScanDestination";
17
17
  import WalkupScanToCompDestination from "./WalkupScanToCompDestination";
18
- import JpegUtil from "../src/JpegUtil";
18
+ import JpegUtil from "./JpegUtil";
19
19
  import PathHelper from "./PathHelper";
20
20
  import { createPdfFrom, ScanContent, ScanPage } from "./ScanContent";
21
21