v0.68.0
Highlights
- Nano S support removed. Speculos dropped the model from the emulator image that zemu ships as default, so
nanosis gone fromTModel. The default model is nownanosp. Supported devices: Nano S+, Nano X, Stax, Flex and Apex P. - gRPC server works again from the npm package. Previous releases shipped
zemu.protoin the wrong folder, sostartGRPCServer()failed withENOENT. The file is now next to the compiled router and a test guards it. - Transport keeps the
@ledgerhq/hw-transportcontract.getTransport().send(...)returns the response for status words listed instatusListinstead of throwing. Non-0x9000status words are still recorded, sowaitUntilScreenIs,waitForTextandgetEventsfail fast on critical codes.getLastTransportError()andclearTransportError()are public. - Container lifecycle hardened.
start()retries with fresh host ports when Docker reports a port conflict and removes the container on any failure after creation.stop()tolerates already-stopped and already-removed containers. Docker helpers return Promises. - Container pool removed. It never worked outside this repository and its cleanup removed containers of other test workers.
IStartOptions.disablePoolremains as a deprecated no-op. - Retries on a dedicated HTTP client. zemu no longer installs
axios-retryinterceptors on the global axios instance on every request. start()no longer mutates the options object passed by the caller.WINDOW_APEXis 300x400, matching Speculos.- Dependencies updated;
pnpm audit --prodreports no advisories.
Breaking changes
nanosremoved fromTModel,checkElfand the window tables.Zemu.initializePool,enablePool,disablePool,isPoolEnabled,cleanupPoolandgetPoolStatusremoved.getTransport().send(...)returns a Buffer for status words instatusList;exchange()no longer throws on non-0x9000status words.Zemu.stopAllEmuContainers()returns a Promise;startGRPCServer()returns a Promise that resolves with the bound port.
Migrating
- Replace
model: 'nanos'with'nanosp'(or another supported model) and remove Nano S ELFs from your device list. - If a test relied on
send(..., statusList)throwing for an accepted status word, check the last two bytes of the returned Buffer instead. - If you called
startGRPCServerwithout awaiting it,awaitit now: bind failures reject. - Remove any call to the pool APIs.
Full changes: #643