-
Notifications
You must be signed in to change notification settings - Fork 317
API Overrides
- ✅ 2.2 | ✅ 2.1 | ✅ 2.0 | ⛔ 1.9 | ...
QZ Tray 2.1+ uses native promises and an internal sha256 hashing and requires only WebSocket dependency.
Click to expand QZ Tray 2.0 overrides
QZ Tray 2.0 is bundled with RSVP to provide ECMAScript 6 Promise support. If RSVP is not desired, it can be overridden using qz.api.setPromiseType(...) to avoid ReferenceError: RSVP is not defined or Uncaught TypeError: Cannot read property 'promise' of null. Override examples are provided below.
-
Include the new promise library:
<script type="text/javascript" src="https://rawgit.com/kriskowal/q/v1/q.js"></script>
or via npm :
npm install q -
Override Promise with Q using
qz.api.setPromiseType(...).// Q qz.api.setPromiseType(require('q').Promise); // RSVP qz.api.setPromiseType(require('rsvp').Promise); // Bluebird qz.api.setPromiseType(resolver => new Promise(resolver));
As of Node 6.5, WebSockets are only available through 3rd party libraries causing Error: WebSocket not supported by this browser.
qz.api.setWebSocketType(require('ws')); // require('websocket').w3cwebsocketInstall dependencies:
npm install qz-tray wsProvide API overrides and start talking to QZ Tray:
var qz = require('qz-tray');
qz.api.setWebSocketType(require('ws'));
qz.websocket.connect()
.then(qz.printers.getDefault)
.then(function(printer) {
console.log("The default printer is: " + printer);
})
.then(qz.websocket.disconnect)
.then(function() {
process.exit(0);
})
.catch(function(err) {
console.error(err);
process.exit(1);
});This is only for the API overrides. To set up signing, see assets/signing/sign-message.ts.
Install dependencies:
npm install qz-trayProvide API overrides and start talking to QZ Tray:
import * as qz from 'qz-tray';
qz.websocket.connect()
.then(qz.printers.getDefault)
.then(printer => console.log("The default printer is: " + printer))
.then(qz.websocket.disconnect)
.catch(err => console.error(err));Note, Angular 9 and higher will error with the following:
- ERROR in ./node_modules/qz-tray/qz-tray.js
- Module not found: Error: Can't resolve 'path' in 'node_modules/qz-tray'Add the following entry to your package.json to omit path from AOT compilation:
"browser": { "path": false }Note, Angular 11 and higher will error with the following:
- Could not find a declaration file for module 'qz-tray'. '/Users/owner/my-app/node_modules/qz-tray/qz-tray.js' implicitly has an 'any' type.Add a file to src/qz-tray.d.ts with the following content:
declare module 'qz-tray';QZ Tray 2.0 (continued)
- Override RSVP with native Promises using
qz.api.setPromiseType(...).
qz.api.setPromiseType(function promise(resolver) { return new Promise(resolver); });A hashing algorithm is required for signature validation. Use qz.api.setSha256Type(...) to override the default hashing library and avoid TypeError: _qz.tools.hash is not a function.
Since QZ Tray 2.0.5, the native browser crypto can be used. This will only work with HTTPS pages.
qz.api.setSha256Type(function(data) {
return crypto.createHash('sha256').update(data).digest('hex');
});-
2.0.1and older only. Newer versions include this logic by default.
- Requires
sha.js
var createHash = require('sha.js');
qz.api.setSha256Type(function(data) {
return createHash('sha256').update(data).digest('hex');
});npm install js-sha256import { sha256 } from 'js-sha256'; // QZ Tray 2.0 and older
qz.api.setSha256Type(data => sha256(data)); // QZ Tray 2.0 and older
qz.api.setPromiseType(resolver => new Promise(resolver)); // QZ Tray 2.0 and older