@ledgerhq/hw-transport-mocker
Version:
Ledger Hardware Wallet mocker utilities used for tests
56 lines (48 loc) • 1.42 kB
text/typescript
import Transport from "@ledgerhq/hw-transport";
import { log } from "@ledgerhq/logs";
import type { RecordStore } from "./RecordStore";
/**
* create a transport replayer with a record store.
* @param recordStore
*/
const createTransportReplayer = (recordStore: RecordStore): new () => Transport => {
console.warn("TO BE DEPRECATED: use openTransportReplayer instead");
class TransportReplayer extends Transport {
static isSupported = () => Promise.resolve(true);
static list = () => Promise.resolve([null]);
static listen = o => {
let unsubscribed;
setTimeout(() => {
if (unsubscribed) return;
o.next({
type: "add",
descriptor: null,
});
o.complete();
}, 0);
return {
unsubscribe: () => {
unsubscribed = true;
},
};
};
static open = () => Promise.resolve(new TransportReplayer());
setScrambleKey() {}
close() {
return Promise.resolve();
}
exchange(apdu: Buffer): Promise<Buffer> {
log("apdu", apdu.toString("hex"));
try {
const buffer = recordStore.replayExchange(apdu);
log("apdu", buffer.toString("hex"));
return Promise.resolve(buffer);
} catch (e) {
log("apdu-error", String(e));
return Promise.reject(e);
}
}
}
return TransportReplayer;
};
export default createTransportReplayer;