Skip to content

Licensing, manifest, and MDB ​

Licensing ​

ts
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 ​

ts
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.

resultKeyresult
0Success
1CRC Error
2Transference interrupted
3Reset JSD and try again

All methods · All events.

MDB card holder ​

ts
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.

Explicit protocol, typed events, isolated transport.