Licensing, manifest, and MDB
Licensing
jsd.on('licensing:temporary-license-status', status => console.log(status.active));
await jsd.licensing.requestTemporaryLicenseStatus();
await jsd.licensing.requestJsdIdentification();Methods cover feature status, temporary license status, seed retrieval, identification, and activation. requestLicenseActivation({ license }) expects a Base64-encoded license. Activation completion is licensing:report, not the resolved submission promise. All methods · All events.
Manifest and logs
jsd.on('manifest:log', entry => console.log(entry.type, entry.log));
const logs = await jsd.manifest.requestLogs();requestLogs() collects paginated lines until END_LOG, polls progress every 100 ms, and rejects concurrent reads. Each read starts with an isolated log buffer. Session termination rejects an unfinished read and releases its polling timer. There is no built-in per-operation timeout.
Use requestLogsEvent({ previous }) for page control and requestLogsByDate({ since, until }) for date-filtered requests. Dates use local time fields encoded as MM/DD/HH/mm/ss.
To transfer a manifest, request sending with its byte size and CRC, send data blocks using the returned block position, and watch manifest:completed.
| resultKey | result |
|---|---|
| 0 | Success |
| 1 | CRC Error |
| 2 | Transference interrupted |
| 3 | Reset JSD and try again |
MDB card holder
jsd.on('mdbCardHolder:condition-status', state => console.log(state));
await jsd.mdbCardHolder.requestStatus({ deviceNumber: 1 });
await jsd.mdbCardHolder.requestIdentification({ deviceNumber: 1 });
await jsd.mdbCardHolder.requestBalanceData({ deviceNumber: 1 });Devices are 1 or 2; omitted device numbers default to 1. Supported operations cover enable/disable, capabilities, balance, sale approval/cancellation, successful or failed sale confirmation, end-session, cash recording, denied selections, and revalue. Local state is maintained independently for each client and device.
Feature configuration requires a disabled device. Sale approval requires the cached state on hold; amounts are protocol integers in 1–65535, with currency scaling determined by your device integration. Do not assume values are decimal currency units.
A payment integration should wait for approval, execute the physical dispense, report success or failure to the card holder, then end the session. Handle every stage's response before advancing. All methods · All events.