{"_id":"@accurateitsolutionorg/nexi-zvt-client","_rev":"2-560d455fa97235795e1ba3c9baa4921d","name":"@accurateitsolutionorg/nexi-zvt-client","dist-tags":{"latest":"0.2.0"},"versions":{"0.1.0":{"name":"@accurateitsolutionorg/nexi-zvt-client","version":"0.1.0","keywords":["zvt","payment-terminal","nexi","ccv","a77"],"license":"MIT","_id":"@accurateitsolutionorg/nexi-zvt-client@0.1.0","maintainers":[{"name":"accurateitsolutionorg","email":"vatharsh@gmail.com"}],"dist":{"shasum":"53499d0a051d509adefff2648c356466ebaf3f49","tarball":"https://registry.npmjs.org/@accurateitsolutionorg/nexi-zvt-client/-/nexi-zvt-client-0.1.0.tgz","fileCount":36,"integrity":"sha512-yKrKc5Z1Jzt73tnDo+W+xORMJ0hhob6v+ds+lAjrHUDmVsahOu0fNu2YNzCTEz7EuXKiHWa2BZesMx6eTc3DOw==","signatures":[{"sig":"MEQCIDhtfWWggzMF5oTGME2EpQ5QthAvLNjIcP1c7BQ7TmJNAiAi/95IZsZr2feghUPHNqyvACMPa46xWgovvLHZFJBn4Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":98399},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"build":"tsc -p tsconfig.json","clean":"rm -rf dist"},"_npmUser":{"name":"accurateitsolutionorg","email":"vatharsh@gmail.com"},"_npmVersion":"10.9.2","description":"ZVT protocol client and mock terminal for CCV/Nexi payment terminals (A77) over TCP.","directories":{},"_nodeVersion":"23.11.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/nexi-zvt-client_0.1.0_1783926797886_0.5627354272677665","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@accurateitsolutionorg/nexi-zvt-client","version":"0.2.0","description":"ZVT protocol client and mock terminal for CCV/Nexi payment terminals (A77) over TCP.","type":"module","main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"build":"tsc -p tsconfig.json","clean":"rm -rf dist"},"keywords":["zvt","payment-terminal","nexi","ccv","a77"],"license":"MIT","engines":{"node":">=18"},"publishConfig":{"access":"public"},"_id":"@accurateitsolutionorg/nexi-zvt-client@0.2.0","_nodeVersion":"23.11.1","_npmVersion":"10.9.2","dist":{"integrity":"sha512-w5R6M9hK34yzB8xHuofalow3pOuZ3OTjgIUnXuWqsLXEgiJSXhzCFGPtnN59e81OdOCfDvX9OCIbXdBs0Eejeg==","shasum":"a0c36e8ea77c93f5589cc220840530d566a8c000","tarball":"https://registry.npmjs.org/@accurateitsolutionorg/nexi-zvt-client/-/nexi-zvt-client-0.2.0.tgz","fileCount":36,"unpackedSize":102090,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCT6C0+kpUnM9AJHq8dnNBc5wR7FX0t3AuSfneIBQFv+QIhANNcdkZUGmWLVinY0VH5M5z+1u9dXTLS8G06ziuyQKRT"}]},"_npmUser":{"name":"accurateitsolutionorg","email":"vatharsh@gmail.com"},"directories":{},"maintainers":[{"name":"accurateitsolutionorg","email":"vatharsh@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/nexi-zvt-client_0.2.0_1783927410537_0.007553845284537175"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-13T07:13:17.766Z","modified":"2026-07-13T07:23:30.808Z","0.1.0":"2026-07-13T07:13:18.013Z","0.2.0":"2026-07-13T07:23:30.697Z"},"license":"MIT","keywords":["zvt","payment-terminal","nexi","ccv","a77"],"description":"ZVT protocol client and mock terminal for CCV/Nexi payment terminals (A77) over TCP.","maintainers":[{"name":"accurateitsolutionorg","email":"vatharsh@gmail.com"}],"readme":"# @accurateitsolutionorg/nexi-zvt-client\n\nZVT protocol client for CCV/Nexi payment terminals (tested against the A77) over TCP, plus a mock terminal for hardware-free development and tests.\n\n## Install\n\n```bash\nnpm install @accurateitsolutionorg/nexi-zvt-client\n```\n\n## Usage\n\n```ts\nimport { ZvtClient } from '@accurateitsolutionorg/nexi-zvt-client';\n\nconst client = new ZvtClient({ host: '192.168.1.50', port: 20007, password: '000000' });\nclient.on('log', (line) => console.log(line));\nclient.on('status', (s) => console.log('status:', s.text));\nclient.on('printLine', (line) => console.log('receipt:', line));\n\nawait client.connect();\nawait client.register();\nconst result = await client.payment(100); // EUR 1.00\nconsole.log(result.approved, result.resultText);\n```\n\n## Mock terminal\n\n```ts\nimport { MockTerminal } from '@accurateitsolutionorg/nexi-zvt-client';\n\nconst mock = new MockTerminal({ scenario: 'approve' });\nawait mock.start(); // listens on 127.0.0.1:20007\n```\n\nScenarios: `approve`, `decline`, `decline-expired`, `timeout`, `slow`, `drop`.\n\n## Examples\n\nRunnable, end-to-end examples ship in the package under `examples/`:\n\n```bash\n# Hardware-free: spins up the mock terminal and pays against it\nnode examples/mock-usage.js\n\n# Against a real terminal on your network\nnode examples/real-terminal.js 192.168.1.50\n```\n\n## Request/response tracing\n\nEvery call to `register()`, `payment()`, `reversal()`, `endOfDay()`, or `abort()` captures the full list of APDUs sent to and received from the terminal for that operation:\n\n```ts\nconst trace = await client.register(); // FrameTrace[]\nconst result = await client.payment(100);\nconsole.log(result.trace); // FrameTrace[] — same shape, attached to the result\n\n// After a thrown error (timeout, NACK, connection drop), the trace of the\n// operation that failed is still available:\ntry {\n  await client.register();\n} catch (e) {\n  console.log(client.getLastTrace());\n}\n```\n\nEach `FrameTrace` is `{ direction: 'sent' | 'received', ctrl: number, ctrlHex: string, hex: string, timestamp: string }` — plain, JSON-serializable data, safe to log or send over IPC.\n\n## What's exported\n\n- `ZvtClient`, `ZvtClientConfig`, `ZvtClientEvents`, `PaymentResult`, `FrameTrace`\n- `MockTerminal`, `MockTerminalOptions`, `MockScenario`\n- Low-level protocol helpers: `Apdu`, `ApduAssembler`, `buildApdu`, `buildAck`, `buildNack`, `isAck`, `isNack`, `toHex`, `ctrlHex`\n- BCD helpers: `amountToBcd`, `bcdToAmountCents`, `digitStringToBcd`, `bcdToDigitString`, `numberToBcd`, `bcdToNumber`\n- Status parsing: `parseStatusInformation`, `StatusInformation`\n- Constants: `CMD`, `CURRENCY_EUR`, `DEFAULT_CONFIG_BYTE`, `errorText`, `intermediateStatusText`\n\n## Implemented ZVT commands\n\n| Command | Direction | Purpose |\n| --- | --- | --- |\n| `06 00` | ECR -> PT | Registration |\n| `06 01` | ECR -> PT | Authorization/payment |\n| `06 30` | ECR -> PT | Reversal by receipt number |\n| `06 50` | ECR -> PT | End-of-day |\n| `06 B0` | ECR -> PT | Abort/cancel |\n| `04 FF` | PT -> ECR | Intermediate status |\n| `04 0F` | PT -> ECR | Status information BMPs |\n| `06 D1` | PT -> ECR | Receipt print line |\n| `06 0F` | PT -> ECR | Completion |\n| `06 1E` | PT -> ECR | Terminal abort |\n","readmeFilename":"README.md"}