@objectif-lune/ipp
v1.2.0
Published
Internet Printing Protocol (IPP) client library for Node.js (TypeScript modernization fork)
Readme
@objectif-lune/ipp
TypeScript modernization of the IPP Node.js library, maintained as a fork of the original project by William Kapke.
Fork Notice
This package is a fork of:
- Upstream: https://github.com/williamkapke/ipp
The fork keeps the original protocol tables and callback API shape while adding modern runtime support and tests for:
- Node 20+
- IPP/IPPS over Node
http/https - Streaming request bodies
- HTTP Basic authentication
Expect: 100-Continue
Install
npm install @objectif-lune/ippTransport Design
This package uses a single Node HTTP stack (http/https) for both ipp: and ipps: URLs.
Why not fetch?
- We intentionally keep native request lifecycle control for
Expect: 100-Continueand stream-first behavior.
Quick Usage
const ipp = require("@objectif-lune/ipp");
const printer = ipp.Printer("ipp://printer.local:631/ipp/print");
printer.execute(
"Get-Printer-Attributes",
{
"operation-attributes-tag": {
"requesting-user-name": "demo"
}
},
(error, response) => {
if (error) {
console.error(error);
return;
}
console.log(response);
}
);Promise APIs
ipp.requestAsync(optionsOrUrl, body)printer.executeAsync(operation, message)
Example:
const ipp = require("@objectif-lune/ipp");
const response = await ipp.requestAsync(
"ipp://printer.local:631/ipp/print",
Buffer.from("1234567890")
);
console.log(response);Basic Authentication
You can provide credentials either through explicit auth options or URL userinfo.
const ipp = require("@objectif-lune/ipp");
const printer = ipp.Printer("ipp://printer.local:631/ipp/print", {
auth: {
username: "alice",
password: "secret"
}
});
await printer.executeAsync("Get-Printer-Attributes", {
"operation-attributes-tag": {
"requesting-user-name": "alice"
}
});Streaming Support (IPP/IPPS)
For large documents, stream without buffering the full payload in memory.
const fs = require("node:fs");
const ipp = require("@objectif-lune/ipp");
const printer = ipp.Printer("ipps://printer.local:631/ipp/print");
await printer.executeAsync("Print-Job", {
"operation-attributes-tag": {
"requesting-user-name": "demo",
"job-name": "file.pdf",
"document-format": "application/pdf"
},
data: fs.createReadStream("./file.pdf")
});Direct request streaming is also supported via:
{ header: Buffer, data: Readable }
Expect: 100-Continue
The request layer supports Expect: 100-Continue using Node's native HTTP client events:
await ipp.requestAsync(
{
protocol: "ipp:",
hostname: "printer.local",
port: 631,
path: "/ipp/print",
headers: {
Expect: "100-Continue"
},
continue: () => {
// Called when server allows request body transfer.
}
},
Buffer.from("1234567890")
);Development
npm run build
npm run test
npm run test:coverage
npm run lint
npm run typecheckLicense
MIT
Copyright notices from the upstream project are preserved.
