Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
let Transport;
let saveToFile = null;
let recordStore;
const log = mainOptions.silent ? () => {} : (...args) => console.log(...args);
// --mock
// There are two ways to use the mock, either you record or you replay
// - record means that it's a decoration in node-hid that will just save to a file
// - replay means that it's going to re-use a recorded file and mock a transport instead of using an actual device
// replay mode is the default unless environment RECORD_APDU_TO_FILE is defined, this allow to easily replay tests in record mode.
if (mainOptions.file) {
if (process.env.RECORD_APDU_TO_FILE) {
log(`the APDUs will be recorded in ${mainOptions.file}`);
saveToFile = mainOptions.file;
recordStore = new RecordStore([]);
Transport = createTransportRecorder(
require("@ledgerhq/hw-transport-node-hid").default,
recordStore
);
} else {
recordStore = RecordStore.fromString(
fs.readFileSync(mainOptions.file, "utf8")
);
if (recordStore.isEmpty()) {
process.exit(0);
}
log(
`${recordStore.queue.length} mocked APDUs will be replayed from ${mainOptions.file}`
);
Transport = createTransportReplayer(recordStore);
}
const getTransportLike = () => {
return {
open: () => open(device || ""),
create: () => open(device || "")
};
};
// --file
// There are two ways to use the mock, either you record or you replay
// record: using --record means that it's a decoration in node-hid that will just save to a file
// replay: without --record, it's going to re-use a recorded file and mock a transport instead of using an actual device
if (file) {
if (record) {
log("proxy", `the APDUs will be recorded in ${file}`);
saveToFile = file;
recordStore = new RecordStore([]);
Transport = createTransportRecorder(getTransportLike(), recordStore);
} else {
recordStore = RecordStore.fromString(fs.readFileSync(file, "utf8"));
if (recordStore.isEmpty()) {
process.exit(0);
}
log(
"proxy",
`${recordStore.queue.length} mocked APDUs will be replayed from ${file}`
);
Transport = createTransportReplayer(recordStore);
}
} else {
Transport = getTransportLike();
}