client.devices
client.devices
client.devices împachetează /api/v1/devices/* — CRUD pe dispozitive fiscale, status în timp real și istoric de conexiune, configurare antet/subsol/TVA/operator, ajutoare de tipărire pe dispozitiv, alerte și fluxul de claim/release folosit de aplicația mobilă E-BON. Fiecare metodă returnează aceeași formă de obiect ca endpoint-ul REST corespondent documentat la API Dispozitive.
Toate eșecurile la nivel HTTP apar ca EBonApiError — vezi Erori și catalogul de erori HTTP de la /ro/api/errors.
client.devices.list(query?)
Listează toate dispozitivele, opțional filtrate după status sau locationId.
async list(query?: ListDevicesQuery): Promise<Device[]>
| Nume | Tip | Obligatoriu | Note |
|---|---|---|---|
status | string | nu | Una din online, offline, error — vezi DeviceStatus în @e-bon/types. |
locationId | string | nu | Filtrează la o singură locație. |
Returnează un array de obiecte Device.
const onlineTills = await client.devices.list({ status: 'online' });
console.log(onlineTills.map((d) => d.id));
client.devices.get(id)
Obține un singur dispozitiv după ID.
async get(id: string): Promise<Device>
| Nume | Tip | Obligatoriu | Note |
|---|---|---|---|
id | string | da | Identificatorul dispozitivului. |
Returnează un singur Device.
const device = await client.devices.get('dev_01HZ...');
client.devices.create(body)
Înregistrează un nou dispozitiv fiscal.
async create(body: CreateDeviceBody): Promise<Device>
| Nume | Tip | Obligatoriu | Note |
|---|---|---|---|
name | string | da | Etichetă lizibilă pentru oameni. |
protocol | DeviceProtocol | da | Protocol pe fir — vezi @e-bon/types. |
transport | DeviceTransport | da | tcp, bluetooth, usb, etc. |
connectionParams | ConnectionParams | da | Detalii de conexiune specifice protocolului. |
locationId | string | nu | Locație opțională de atribuit. |
Returnează Device-ul creat.
const device = await client.devices.create({
name: 'Casa 1',
protocol: 'datecs_dp25',
transport: 'tcp',
connectionParams: { host: '10.0.0.20', port: 4001 },
});
client.devices.update(id, body)
Actualizează proprietățile dispozitivului.
async update(id: string, body: UpdateDeviceBody): Promise<Device>
| Nume | Tip | Obligatoriu | Note |
|---|---|---|---|
name | string | nu | Redenumește dispozitivul. |
connectionParams | ConnectionParams | nu | Înlocuiește întregul obiect connectionParams. |
locationId | string | null | nu | Mută la o locație, sau null pentru detașare. |
Returnează Device-ul actualizat.
await client.devices.update('dev_01HZ...', { name: 'Casa A' });
client.devices.delete(id)
Șterge un dispozitiv.
async delete(id: string): Promise<undefined>
| Nume | Tip | Obligatoriu | Note |
|---|---|---|---|
id | string | da | Identificatorul dispozitivului. |
Returnează undefined la succes.
await client.devices.delete('dev_01HZ...');
client.devices.getStatuses()
Obține statusurile dispozitivelor în lot.
async getStatuses(): Promise<DeviceStatusesResult>
Fără parametri. Returnează { statuses: Record<deviceId, DeviceStatusInfo> }.
const { statuses } = await client.devices.getStatuses();
client.devices.getStatus(id)
Obține statusul de conexiune al dispozitivului.
async getStatus(id: string): Promise<DeviceStatusInfo>
| Nume | Tip | Obligatoriu | Note |
|---|---|---|---|
id | string | da | Identificatorul dispozitivului. |
Returnează un singur DeviceStatusInfo.
const status = await client.devices.getStatus('dev_01HZ...');
client.devices.getConnectionHistory(id)
Obține istoricul de conexiune al dispozitivului.
async getConnectionHistory(id: string): Promise<ConnectionHistoryResult>
| Nume | Tip | Obligatoriu | Note |
|---|---|---|---|
id | string | da | Identificatorul dispozitivului. |
Returnează { events: ConnectionEvent[] } cu intrările cronologice de conectare/deconectare.
const { events } = await client.devices.getConnectionHistory('dev_01HZ...');
client.devices.sendCommand(id, body)
Trimite o comandă către un dispozitiv specific.
async sendCommand(id: string, body: SendDeviceCommandBody): Promise<FiscalCommand>
| Nume | Tip | Obligatoriu | Note |
|---|---|---|---|
type | CommandType | da | Tipul comenzii — vezi @e-bon/types. |
payload | unknown | nu | Payload specific comenzii (forma depinde de type). |
Returnează înregistrarea FiscalCommand creată (statusul începe ca pending). Abonează-te la WebSocket-ul de evenimente pentru command.completed / command.failed.
const cmd = await client.devices.sendCommand('dev_01HZ...', {
type: 'print_x_report',
});
client.devices.getReceipts(id, query?)
Listează bonurile pentru un dispozitiv specific.
async getReceipts(id: string, query?: ListDeviceReceiptsQuery): Promise<Receipt[]>
| Nume | Tip | Obligatoriu | Note |
|---|---|---|---|
type | string | nu | Filtru pe tipul bonului — vezi ReceiptType. |
startDate | string | nu | Limită inferioară ISO-8601 (inclusiv). |
endDate | string | nu | Limită superioară ISO-8601 (inclusiv). |
limit | number | nu | Dimensiunea paginii; serverul plafonează maximul. |
startAfter | string | nu | Cursor — trimite ID-ul ultimului bon din pagina anterioară. |
Returnează un array de Receipt. (SDK-ul desface plicul { receipts }.)
const recent = await client.devices.getReceipts('dev_01HZ...', { limit: 50 });
client.devices.getCashBalance(id)
Obține soldul de numerar pentru un dispozitiv.
async getCashBalance(id: string): Promise<CashBalanceResult>
| Nume | Tip | Obligatoriu | Note |
|---|---|---|---|
id | string | da | Identificatorul dispozitivului. |
Returnează { cashBalance, currency, deviceId, timestamp }.
const { cashBalance } = await client.devices.getCashBalance('dev_01HZ...');
client.devices.setDatetime(id, body)
Setează data/ora dispozitivului.
async setDatetime(id: string, body: SetDatetimeBody): Promise<undefined>
| Nume | Tip | Obligatoriu | Note |
|---|---|---|---|
datetime | string | da | Datetime ISO-8601 de împins către ceasul AMEF. |
Returnează undefined la succes.
await client.devices.setDatetime('dev_01HZ...', { datetime: new Date().toISOString() });
client.devices.printDuplicate(id)
Tipărește duplicatul ultimului bon.
async printDuplicate(id: string): Promise<undefined>
| Nume | Tip | Obligatoriu | Note |
|---|---|---|---|
id | string | da | Identificatorul dispozitivului. |
Returnează undefined la succes.
await client.devices.printDuplicate('dev_01HZ...');
client.devices.nonFiscalReceipt(id, body)
Tipărește un bon text non-fiscal.
async nonFiscalReceipt(id: string, body: NonFiscalReceiptBody): Promise<undefined>
| Nume | Tip | Obligatoriu | Note |
|---|---|---|---|
lines | string[] | da | O intrare per linie tipărită. |
header | string | nu | Antet opțional tipărit primul. |
Returnează undefined la succes.
await client.devices.nonFiscalReceipt('dev_01HZ...', {
lines: ['Bun venit', 'Pe curând'],
});
client.devices.uploadLogo(id, body)
Încarcă siglă pe dispozitiv.
async uploadLogo(id: string, body: UploadLogoBody): Promise<undefined>
| Nume | Tip | Obligatoriu | Note |
|---|---|---|---|
logo | string | da | Bitmap codat base64 (specific driverului). |
Returnează undefined la succes.
await client.devices.uploadLogo('dev_01HZ...', { logo: base64Bitmap });
client.devices.deleteLogo(id)
Șterge sigla de pe dispozitiv.
async deleteLogo(id: string): Promise<undefined>
| Nume | Tip | Obligatoriu | Note |
|---|---|---|---|
id | string | da | Identificatorul dispozitivului. |
Returnează undefined la succes.
await client.devices.deleteLogo('dev_01HZ...');
client.devices.getVatRates(id)
Obține cotele de TVA configurate pe un dispozitiv.
async getVatRates(id: string): Promise<VatRatesResult>
| Nume | Tip | Obligatoriu | Note |
|---|---|---|---|
id | string | da | Identificatorul dispozitivului. |
Returnează { rates: VatRate[], deviceId, timestamp }.
const { rates } = await client.devices.getVatRates('dev_01HZ...');
client.devices.getVatCapabilities(id)
Obține capabilitățile de TVA ale unui dispozitiv.
async getVatCapabilities(id: string): Promise<VatCapabilitiesResult>
| Nume | Tip | Obligatoriu | Note |
|---|---|---|---|
id | string | da | Identificatorul dispozitivului. |
Returnează { capabilities, deviceId, timestamp } care descrie ce acceptă firmware-ul AMEF.
const caps = await client.devices.getVatCapabilities('dev_01HZ...');
client.devices.setVatRates(id, body)
Setează cotele de TVA pe un dispozitiv.
async setVatRates(id: string, body: SetVatRatesBody): Promise<undefined>
| Nume | Tip | Obligatoriu | Note |
|---|---|---|---|
rates | VatRate[] | da | Array de intrări { name, percentage }. |
Returnează undefined la succes.
await client.devices.setVatRates('dev_01HZ...', {
rates: [
{ name: 'A', percentage: 19 },
{ name: 'B', percentage: 9 },
],
});
client.devices.getHeaderFooterCapabilities(id)
Obține capabilitățile de antet/subsol ale unui dispozitiv.
async getHeaderFooterCapabilities(id: string): Promise<HeaderFooterCapabilitiesResult>
| Nume | Tip | Obligatoriu | Note |
|---|---|---|---|
id | string | da | Identificatorul dispozitivului. |
Returnează { capabilities: { maxHeaderLines, maxFooterLines, maxCharsPerLine }, deviceId, timestamp }.
const caps = await client.devices.getHeaderFooterCapabilities('dev_01HZ...');
client.devices.getHeaderFooter(id)
Obține liniile de antet și subsol configurate pe un dispozitiv.
async getHeaderFooter(id: string): Promise<HeaderFooterResult>
| Nume | Tip | Obligatoriu | Note |
|---|---|---|---|
id | string | da | Identificatorul dispozitivului. |
Returnează { header: string[], footer: string[], deviceId, timestamp }.
const { header, footer } = await client.devices.getHeaderFooter('dev_01HZ...');
client.devices.setHeaderFooter(id, body)
Setează liniile de antet și subsol pe un dispozitiv.
async setHeaderFooter(id: string, body: SetHeaderFooterBody): Promise<undefined>
| Nume | Tip | Obligatoriu | Note |
|---|---|---|---|
header | string[] | da | Linii de antet (respectă maxHeaderLines). |
footer | string[] | da | Linii de subsol (respectă maxFooterLines). |
Returnează undefined la succes.
await client.devices.setHeaderFooter('dev_01HZ...', {
header: ['ACME SRL', 'CUI RO12345678'],
footer: ['Mulțumim!'],
});
client.devices.getOperatorCapabilities(id)
Obține capabilitățile operatorului pentru un dispozitiv.
async getOperatorCapabilities(id: string): Promise<OperatorCapabilitiesResult>
| Nume | Tip | Obligatoriu | Note |
|---|---|---|---|
id | string | da | Identificatorul dispozitivului. |
Returnează { capabilities: { maxOperators, maxNameLength, maxPasswordLength, supportsPassword }, deviceId, timestamp }.
const caps = await client.devices.getOperatorCapabilities('dev_01HZ...');
client.devices.setOperator(id, body)
Setează numele/parola operatorului pe un dispozitiv.
async setOperator(id: string, body: SetOperatorBody): Promise<undefined>
| Nume | Tip | Obligatoriu | Note |
|---|---|---|---|
operatorId | number | da | Indexul slotului — limitat de maxOperators. |
name | string | da | Numele afișat al operatorului. |
password | string | nu | Necesar doar când dispozitivul supportsPassword. |
Returnează undefined la succes.
await client.devices.setOperator('dev_01HZ...', { operatorId: 1, name: 'Ana' });
client.devices.getInfo(id)
Obține informații live despre dispozitiv (serial, firmware, memorie fiscală, producător).
async getInfo(id: string): Promise<DeviceInfoResult>
| Nume | Tip | Obligatoriu | Note |
|---|---|---|---|
id | string | da | Identificatorul dispozitivului. |
Returnează { serialNumber, firmwareVersion, fiscalMemoryStatus, manufacturer, model? }.
const info = await client.devices.getInfo('dev_01HZ...');
client.devices.getLastReceiptInfo(id)
Obține informații despre ultimul bon de pe dispozitiv.
async getLastReceiptInfo(id: string): Promise<LastReceiptInfoResult>
| Nume | Tip | Obligatoriu | Note |
|---|---|---|---|
id | string | da | Identificatorul dispozitivului. |
Returnează { receiptNumber, date, total, fiscalMemoryNumber?, deviceId, timestamp }.
const last = await client.devices.getLastReceiptInfo('dev_01HZ...');
client.devices.voidOpenReceipt(id)
Anulează un bon deschis pe dispozitiv.
async voidOpenReceipt(id: string): Promise<VoidOpenReceiptResult>
| Nume | Tip | Obligatoriu | Note |
|---|---|---|---|
id | string | da | Identificatorul dispozitivului. |
Returnează { success, message, deviceId, timestamp }.
const res = await client.devices.voidOpenReceipt('dev_01HZ...');
client.devices.printReversalReceipt(id, body)
Tipărește un bon de stornare pe dispozitiv.
async printReversalReceipt(id: string, body: ReversalReceiptBody): Promise<ReversalReceiptResult>
| Nume | Tip | Obligatoriu | Note |
|---|---|---|---|
uniqueSaleNumber | string | da | Identificator de vânzare de pe bonul original. |
originalReceiptNumber | string | da | Numărul bonului original. |
originalReceiptDateTime | string | da | Marca de timp ISO-8601 a bonului original. |
fiscalMemorySerialNumber | string | da | Numărul de serie al memoriei fiscale a dispozitivului original. |
originalZReportNumber | string | nu | Numărul raportului Z care conține bonul original. |
reason | 'operator_error' | 'refund' | 'tax_base_reduction' | da | Cod de motiv legal. |
items | ReversalReceiptItem[] | da | Articole de stornat — { name, quantity, price, vatRate }. |
payments | ReversalReceiptPayment[] | nu | Linii opționale de plată pentru rambursare. |
Returnează { success, message, receiptNumber?, deviceId, timestamp }.
await client.devices.printReversalReceipt('dev_01HZ...', {
uniqueSaleNumber: 'SALE-1042',
originalReceiptNumber: '0001234',
originalReceiptDateTime: '2026-04-20T11:32:00+03:00',
fiscalMemorySerialNumber: 'DY12345678',
reason: 'refund',
items: [{ name: 'Tricou', quantity: 1, price: 49.9, vatRate: 19 }],
});
client.devices.getAlerts(id, query?)
Obține alertele pentru un dispozitiv specific.
async getAlerts(id: string, query?: ListDeviceAlertsQuery): Promise<DeviceAlert[]>
| Nume | Tip | Obligatoriu | Note |
|---|---|---|---|
severity | string | nu | Filtrează după DeviceAlertSeverity. |
Returnează un array de DeviceAlert. (SDK-ul desface plicul { alerts }.)
const alerts = await client.devices.getAlerts('dev_01HZ...', { severity: 'error' });
client.devices.getAllAlerts(query?)
Obține alertele în lot pentru toate dispozitivele organizației.
async getAllAlerts(query?: ListDeviceAlertsQuery): Promise<BatchAlertsResult>
| Nume | Tip | Obligatoriu | Note |
|---|---|---|---|
severity | string | nu | Filtrează după DeviceAlertSeverity. |
Returnează { alerts: Record<deviceId, DeviceAlert[]> }.
const { alerts } = await client.devices.getAllAlerts();
client.devices.claim(id, body)
Preia controlul unui dispozitiv.
async claim(id: string, body: ClaimDeviceBody): Promise<undefined>
| Nume | Tip | Obligatoriu | Note |
|---|---|---|---|
appInstanceId | string | da | Instanța aplicației mobile care preia controlul. |
Returnează undefined la succes.
await client.devices.claim('dev_01HZ...', { appInstanceId: 'app_inst_01HZ...' });
client.devices.release(id)
Eliberează controlul unui dispozitiv.
async release(id: string): Promise<undefined>
| Nume | Tip | Obligatoriu | Note |
|---|---|---|---|
id | string | da | Identificatorul dispozitivului. |
Returnează undefined la succes.
await client.devices.release('dev_01HZ...');
Erori
Clasele de excepție FiscalError și EBonApiError, enumerarea ErrorCode și mulțimea RETRYABLE_ERRORS re-exportate din @e-bon/sdk și un model recomandat de reîncercare.
client.commands
Referință pentru CommandsResource — trimite comenzi fiscale asincron, listează, interoghează o singură comandă și anulează una în așteptare, oglindind /api/v1/commands.