Socket
Socket
Sign inDemoInstall

@ledgerhq/hw-transport-mocker

Package Overview
Dependencies
2
Maintainers
20
Versions
323
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 6.27.12 to 6.27.15

lib-es/MockTransport.d.ts

49

CHANGELOG.md
# @ledgerhq/hw-transport-mocker
## 6.27.15
### Patch Changes
- Updated dependencies []:
- @ledgerhq/hw-transport@6.28.4
## 6.27.15-next.0
### Patch Changes
- Updated dependencies []:
- @ledgerhq/hw-transport@6.28.4-next.0
## 6.27.14
### Patch Changes
- Updated dependencies []:
- @ledgerhq/hw-transport@6.28.3
## 6.27.14-next.0
### Patch Changes
- Updated dependencies []:
- @ledgerhq/hw-transport@6.28.3-next.0
## 6.27.13
### Patch Changes
- Updated dependencies []:
- @ledgerhq/hw-transport@6.28.2
## 6.27.13-next.0
### Patch Changes
- Updated dependencies []:
- @ledgerhq/hw-transport@6.28.2-next.0
## 6.27.12

@@ -10,2 +52,9 @@

## 6.27.12-next.0
### Patch Changes
- Updated dependencies []:
- @ledgerhq/hw-transport@6.28.1-next.0
## 6.27.11

@@ -12,0 +61,0 @@

93

lib-es/createTransportRecorder.js

@@ -1,41 +0,1 @@

var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
if (typeof b !== "function" && b !== null)
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var __read = (this && this.__read) || function (o, n) {
var m = typeof Symbol === "function" && o[Symbol.iterator];
if (!m) return o;
var i = m.call(o), r, ar = [], e;
try {
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
}
catch (error) { e = { error: error }; }
finally {
try {
if (r && !r.done && (m = i["return"])) m.call(i);
}
finally { if (e) throw e.error; }
}
return ar;
};
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
if (ar || !(i in from)) {
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
ar[i] = from[i];
}
}
return to.concat(ar || Array.prototype.slice.call(from));
};
import Transport from "@ledgerhq/hw-transport";

@@ -47,37 +7,28 @@ /**

*/
var createTransportRecorder = function (DecoratedTransport, recordStore) {
var TransportRecorder = /** @class */ (function (_super) {
__extends(TransportRecorder, _super);
function TransportRecorder(t) {
var _this = _super.call(this) || this;
_this.transport = t;
return _this;
const createTransportRecorder = (DecoratedTransport, recordStore) => {
class TransportRecorder extends Transport {
setScrambleKey() { }
close() {
return this.transport.close();
}
TransportRecorder.prototype.setScrambleKey = function () { };
TransportRecorder.prototype.close = function () {
return this.transport.close();
};
TransportRecorder.prototype.exchange = function (apdu) {
var output = this.transport.exchange(apdu);
output.then(function (out) {
constructor(t) {
super();
this.transport = t;
}
exchange(apdu) {
const output = this.transport.exchange(apdu);
output.then((out) => {
recordStore.recordExchange(apdu, out);
});
return output;
};
TransportRecorder.recordStore = recordStore;
TransportRecorder.isSupported = DecoratedTransport.constructor
.isSupported;
TransportRecorder.list = DecoratedTransport.constructor.list;
TransportRecorder.listen = DecoratedTransport.constructor.listen;
TransportRecorder.open = function (descriptor) {
var _a;
var args = [];
for (var _i = 1; _i < arguments.length; _i++) {
args[_i - 1] = arguments[_i];
}
return (_a = DecoratedTransport.constructor)
.open.apply(_a, __spreadArray([descriptor], __read(args), false)).then(function (t) { return new TransportRecorder(t); });
};
return TransportRecorder;
}(Transport));
}
}
TransportRecorder.recordStore = recordStore;
TransportRecorder.isSupported = DecoratedTransport.constructor
.isSupported;
TransportRecorder.list = DecoratedTransport.constructor.list;
TransportRecorder.listen = DecoratedTransport.constructor.listen;
TransportRecorder.open = (descriptor, ...args) => DecoratedTransport.constructor
.open(descriptor, ...args)
.then((t) => new TransportRecorder(t));
return TransportRecorder;

@@ -84,0 +35,0 @@ };

@@ -1,16 +0,1 @@

var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
if (typeof b !== "function" && b !== null)
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
import Transport from "@ledgerhq/hw-transport";

@@ -22,17 +7,13 @@ import { log } from "@ledgerhq/logs";

*/
var createTransportReplayer = function (recordStore) {
const createTransportReplayer = (recordStore) => {
console.warn("TO BE DEPRECATED: use openTransportReplayer instead");
var TransportReplayer = /** @class */ (function (_super) {
__extends(TransportReplayer, _super);
function TransportReplayer() {
return _super !== null && _super.apply(this, arguments) || this;
class TransportReplayer extends Transport {
setScrambleKey() { }
close() {
return Promise.resolve();
}
TransportReplayer.prototype.setScrambleKey = function () { };
TransportReplayer.prototype.close = function () {
return Promise.resolve();
};
TransportReplayer.prototype.exchange = function (apdu) {
exchange(apdu) {
log("apdu", apdu.toString("hex"));
try {
var buffer = recordStore.replayExchange(apdu);
const buffer = recordStore.replayExchange(apdu);
log("apdu", buffer.toString("hex"));

@@ -45,25 +26,24 @@ return Promise.resolve(buffer);

}
}
}
TransportReplayer.isSupported = () => Promise.resolve(true);
TransportReplayer.list = () => Promise.resolve([null]);
TransportReplayer.listen = (o) => {
let unsubscribed;
setTimeout(() => {
if (unsubscribed)
return;
o.next({
type: "add",
descriptor: null,
});
o.complete();
}, 0);
return {
unsubscribe: () => {
unsubscribed = true;
},
};
TransportReplayer.isSupported = function () { return Promise.resolve(true); };
TransportReplayer.list = function () { return Promise.resolve([null]); };
TransportReplayer.listen = function (o) {
var unsubscribed;
setTimeout(function () {
if (unsubscribed)
return;
o.next({
type: "add",
descriptor: null
});
o.complete();
}, 0);
return {
unsubscribe: function () {
unsubscribed = true;
}
};
};
TransportReplayer.open = function () { return Promise.resolve(new TransportReplayer()); };
return TransportReplayer;
}(Transport));
};
TransportReplayer.open = () => Promise.resolve(new TransportReplayer());
return TransportReplayer;

@@ -70,0 +50,0 @@ };

@@ -5,3 +5,4 @@ export * from "./RecordStore";

import openTransportReplayer from "./openTransportReplayer";
export { createTransportRecorder, createTransportReplayer, openTransportReplayer, };
import MockTransport from "./MockTransport";
export { createTransportRecorder, createTransportReplayer, openTransportReplayer, MockTransport, };
//# sourceMappingURL=index.d.ts.map

@@ -5,3 +5,4 @@ export * from "./RecordStore";

import openTransportReplayer from "./openTransportReplayer";
export { createTransportRecorder, createTransportReplayer, openTransportReplayer, };
import MockTransport from "./MockTransport";
export { createTransportRecorder, createTransportReplayer, openTransportReplayer, MockTransport, };
//# sourceMappingURL=index.js.map

@@ -1,49 +0,31 @@

var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
if (typeof b !== "function" && b !== null)
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
import Transport from "@ledgerhq/hw-transport";
import { log } from "@ledgerhq/logs";
var TransportReplayer = /** @class */ (function (_super) {
__extends(TransportReplayer, _super);
function TransportReplayer(recordStore) {
var _this = _super.call(this) || this;
_this.artificialExchangeDelay = 0;
_this.recordStore = recordStore;
return _this;
export class TransportReplayer extends Transport {
constructor(recordStore) {
super();
this.artificialExchangeDelay = 0;
this.recordStore = recordStore;
}
TransportReplayer.prototype.setArtificialExchangeDelay = function (delay) {
setArtificialExchangeDelay(delay) {
this.artificialExchangeDelay = delay;
};
TransportReplayer.prototype.setScrambleKey = function () { };
TransportReplayer.prototype.close = function () {
}
setScrambleKey() { }
close() {
return Promise.resolve();
};
TransportReplayer.prototype.exchange = function (apdu) {
var _this = this;
}
exchange(apdu) {
log("apdu", apdu.toString("hex"));
try {
var buffer_1 = this.recordStore.replayExchange(apdu);
log("apdu", buffer_1.toString("hex"));
const buffer = this.recordStore.replayExchange(apdu);
log("apdu", buffer.toString("hex"));
if (this.artificialExchangeDelay) {
return new Promise(function (resolve) {
setTimeout(function () {
resolve(buffer_1);
_this.setArtificialExchangeDelay(0);
}, _this.artificialExchangeDelay);
return new Promise((resolve) => {
setTimeout(() => {
resolve(buffer);
this.setArtificialExchangeDelay(0);
}, this.artificialExchangeDelay);
});
}
else {
return Promise.resolve(buffer_1);
return Promise.resolve(buffer);
}

@@ -55,28 +37,24 @@ }

}
}
}
TransportReplayer.isSupported = () => Promise.resolve(true);
TransportReplayer.list = () => Promise.resolve([null]);
TransportReplayer.listen = (o) => {
let unsubscribed;
setTimeout(() => {
if (unsubscribed)
return;
o.next({
type: "add",
descriptor: null,
});
o.complete();
}, 0);
return {
unsubscribe: () => {
unsubscribed = true;
},
};
TransportReplayer.isSupported = function () { return Promise.resolve(true); };
TransportReplayer.list = function () { return Promise.resolve([null]); };
TransportReplayer.listen = function (o) {
var unsubscribed;
setTimeout(function () {
if (unsubscribed)
return;
o.next({
type: "add",
descriptor: null
});
o.complete();
}, 0);
return {
unsubscribe: function () {
unsubscribed = true;
}
};
};
TransportReplayer.open = function (recordStore) {
return Promise.resolve(new TransportReplayer(recordStore));
};
return TransportReplayer;
}(Transport));
export { TransportReplayer };
};
TransportReplayer.open = (recordStore) => Promise.resolve(new TransportReplayer(recordStore));
/**

@@ -86,3 +64,3 @@ * create a transport replayer with a record store.

*/
var openTransportReplayer = function (recordStore) {
const openTransportReplayer = (recordStore) => {
return TransportReplayer.open(recordStore);

@@ -89,0 +67,0 @@ };

@@ -30,3 +30,3 @@ /// <reference types="node" />

}
export declare type Queue = [string, string][];
export type Queue = [string, string][];
/**

@@ -40,3 +40,3 @@ * - autoSkipUnknownApdu:

*/
export declare type RecordStoreOptions = {
export type RecordStoreOptions = {
autoSkipUnknownApdu: boolean;

@@ -43,0 +43,0 @@ warning: (arg0: string) => void;

@@ -1,28 +0,1 @@

var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __read = (this && this.__read) || function (o, n) {
var m = typeof Symbol === "function" && o[Symbol.iterator];
if (!m) return o;
var i = m.call(o), r, ar = [], e;
try {
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
}
catch (error) { e = { error: error }; }
finally {
try {
if (r && !r.done && (m = i["return"])) m.call(i);
}
finally { if (e) throw e.error; }
}
return ar;
};
/**

@@ -51,3 +24,3 @@ * thrown by the RecordStore.fromString parser.

this.name = "RecordStoreWrongAPDU";
this.message = "wrong apdu to replay line ".concat(line, ". Expected ").concat(expected, ", Got ").concat(got);
this.message = `wrong apdu to replay line ${line}. Expected ${expected}, Got ${got}`;
this.expectedAPDU = expected;

@@ -63,9 +36,9 @@ this.gotAPDU = got;

this.name = "RecordStoreRemainingAPDU";
this.message = "replay expected more APDUs to come:\n".concat(expected);
this.message = `replay expected more APDUs to come:\n${expected}`;
this.stack = new Error().stack;
}
RecordStoreRemainingAPDU.prototype = new Error();
var defaultOpts = {
const defaultOpts = {
autoSkipUnknownApdu: false,
warning: function (log) { return console.warn(log); }
warning: (log) => console.warn(log),
};

@@ -76,5 +49,4 @@ /**

*/
var RecordStore = /** @class */ (function () {
function RecordStore(queue, opts) {
var _this = this;
export class RecordStore {
constructor(queue, opts) {
this.passed = 0;

@@ -84,5 +56,5 @@ /**

*/
this.isEmpty = function () { return _this.queue.length === 0; };
this.isEmpty = () => this.queue.length === 0;
this.queue = queue || [];
this.opts = __assign(__assign({}, defaultOpts), opts);
this.opts = Object.assign(Object.assign({}, defaultOpts), opts);
}

@@ -94,5 +66,5 @@ /**

*/
RecordStore.prototype.recordExchange = function (apdu, out) {
recordExchange(apdu, out) {
this.queue.push([apdu.toString("hex"), out.toString("hex")]);
};
}
/**

@@ -102,8 +74,8 @@ * Replay an APDU (used by createTransportReplayer)

*/
RecordStore.prototype.replayExchange = function (apdu) {
var _a = this, queue = _a.queue, opts = _a.opts;
var apduHex = apdu.toString("hex");
for (var i = 0; i < queue.length; i++) {
var head = queue[i];
var line = 2 * (this.passed + i);
replayExchange(apdu) {
const { queue, opts } = this;
const apduHex = apdu.toString("hex");
for (let i = 0; i < queue.length; i++) {
const head = queue[i];
const line = 2 * (this.passed + i);
if (apduHex === head[0]) {

@@ -130,22 +102,19 @@ ++this.passed;

throw new RecordStoreQueueEmpty();
};
}
/**
* Check all APDUs was replayed. Throw if it's not the case.
*/
RecordStore.prototype.ensureQueueEmpty = function () {
ensureQueueEmpty() {
if (!this.isEmpty()) {
throw new RecordStoreRemainingAPDU(this.toString());
}
};
}
/**
* Print out the series of apdus
*/
RecordStore.prototype.toString = function () {
toString() {
return (this.queue
.map(function (_a) {
var _b = __read(_a, 2), send = _b[0], receive = _b[1];
return "=> ".concat(send, "\n<= ").concat(receive);
})
.map(([send, receive]) => `=> ${send}\n<= ${receive}`)
.join("\n") + "\n");
};
}
/**

@@ -156,12 +125,12 @@ * Create a RecordStore by parsing a string (a series of => HEX\n<= HEX)

*/
RecordStore.fromString = function (str, opts) {
var queue = [];
var value = [];
static fromString(str, opts) {
const queue = [];
let value = [];
str
.split("\n")
.map(function (line) { return line.replace(/ /g, ""); })
.filter(function (o) { return o; })
.forEach(function (line) {
.map((line) => line.replace(/ /g, ""))
.filter((o) => o)
.forEach((line) => {
if (value.length === 0) {
var m = line.match(/^=>([0-9a-fA-F]+)$/);
const m = line.match(/^=>([0-9a-fA-F]+)$/);
if (!m) {

@@ -173,3 +142,3 @@ throw new RecordStoreInvalidSynthax("expected an apdu input");

else {
var m = line.match(/^<=([0-9a-fA-F]+)$/);
const m = line.match(/^<=([0-9a-fA-F]+)$/);
if (!m) {

@@ -187,6 +156,4 @@ throw new RecordStoreInvalidSynthax("expected an apdu output");

return new RecordStore(queue, opts);
};
return RecordStore;
}());
export { RecordStore };
}
}
//# sourceMappingURL=RecordStore.js.map
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
if (typeof b !== "function" && b !== null)
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var __read = (this && this.__read) || function (o, n) {
var m = typeof Symbol === "function" && o[Symbol.iterator];
if (!m) return o;
var i = m.call(o), r, ar = [], e;
try {
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
}
catch (error) { e = { error: error }; }
finally {
try {
if (r && !r.done && (m = i["return"])) m.call(i);
}
finally { if (e) throw e.error; }
}
return ar;
};
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
if (ar || !(i in from)) {
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
ar[i] = from[i];
}
}
return to.concat(ar || Array.prototype.slice.call(from));
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
exports.__esModule = true;
var hw_transport_1 = __importDefault(require("@ledgerhq/hw-transport"));
Object.defineProperty(exports, "__esModule", { value: true });
const hw_transport_1 = __importDefault(require("@ledgerhq/hw-transport"));
/**

@@ -52,40 +12,31 @@ * decorate a real transport and proxy it to record the APDUs.

*/
var createTransportRecorder = function (DecoratedTransport, recordStore) {
var TransportRecorder = /** @class */ (function (_super) {
__extends(TransportRecorder, _super);
function TransportRecorder(t) {
var _this = _super.call(this) || this;
_this.transport = t;
return _this;
const createTransportRecorder = (DecoratedTransport, recordStore) => {
class TransportRecorder extends hw_transport_1.default {
setScrambleKey() { }
close() {
return this.transport.close();
}
TransportRecorder.prototype.setScrambleKey = function () { };
TransportRecorder.prototype.close = function () {
return this.transport.close();
};
TransportRecorder.prototype.exchange = function (apdu) {
var output = this.transport.exchange(apdu);
output.then(function (out) {
constructor(t) {
super();
this.transport = t;
}
exchange(apdu) {
const output = this.transport.exchange(apdu);
output.then((out) => {
recordStore.recordExchange(apdu, out);
});
return output;
};
TransportRecorder.recordStore = recordStore;
TransportRecorder.isSupported = DecoratedTransport.constructor
.isSupported;
TransportRecorder.list = DecoratedTransport.constructor.list;
TransportRecorder.listen = DecoratedTransport.constructor.listen;
TransportRecorder.open = function (descriptor) {
var _a;
var args = [];
for (var _i = 1; _i < arguments.length; _i++) {
args[_i - 1] = arguments[_i];
}
return (_a = DecoratedTransport.constructor)
.open.apply(_a, __spreadArray([descriptor], __read(args), false)).then(function (t) { return new TransportRecorder(t); });
};
return TransportRecorder;
}(hw_transport_1["default"]));
}
}
TransportRecorder.recordStore = recordStore;
TransportRecorder.isSupported = DecoratedTransport.constructor
.isSupported;
TransportRecorder.list = DecoratedTransport.constructor.list;
TransportRecorder.listen = DecoratedTransport.constructor.listen;
TransportRecorder.open = (descriptor, ...args) => DecoratedTransport.constructor
.open(descriptor, ...args)
.then((t) => new TransportRecorder(t));
return TransportRecorder;
};
exports["default"] = createTransportRecorder;
exports.default = createTransportRecorder;
//# sourceMappingURL=createTransportRecorder.js.map
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
if (typeof b !== "function" && b !== null)
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
exports.__esModule = true;
var hw_transport_1 = __importDefault(require("@ledgerhq/hw-transport"));
var logs_1 = require("@ledgerhq/logs");
Object.defineProperty(exports, "__esModule", { value: true });
const hw_transport_1 = __importDefault(require("@ledgerhq/hw-transport"));
const logs_1 = require("@ledgerhq/logs");
/**

@@ -27,17 +12,13 @@ * create a transport replayer with a record store.

*/
var createTransportReplayer = function (recordStore) {
const createTransportReplayer = (recordStore) => {
console.warn("TO BE DEPRECATED: use openTransportReplayer instead");
var TransportReplayer = /** @class */ (function (_super) {
__extends(TransportReplayer, _super);
function TransportReplayer() {
return _super !== null && _super.apply(this, arguments) || this;
class TransportReplayer extends hw_transport_1.default {
setScrambleKey() { }
close() {
return Promise.resolve();
}
TransportReplayer.prototype.setScrambleKey = function () { };
TransportReplayer.prototype.close = function () {
return Promise.resolve();
};
TransportReplayer.prototype.exchange = function (apdu) {
exchange(apdu) {
(0, logs_1.log)("apdu", apdu.toString("hex"));
try {
var buffer = recordStore.replayExchange(apdu);
const buffer = recordStore.replayExchange(apdu);
(0, logs_1.log)("apdu", buffer.toString("hex"));

@@ -50,28 +31,27 @@ return Promise.resolve(buffer);

}
}
}
TransportReplayer.isSupported = () => Promise.resolve(true);
TransportReplayer.list = () => Promise.resolve([null]);
TransportReplayer.listen = (o) => {
let unsubscribed;
setTimeout(() => {
if (unsubscribed)
return;
o.next({
type: "add",
descriptor: null,
});
o.complete();
}, 0);
return {
unsubscribe: () => {
unsubscribed = true;
},
};
TransportReplayer.isSupported = function () { return Promise.resolve(true); };
TransportReplayer.list = function () { return Promise.resolve([null]); };
TransportReplayer.listen = function (o) {
var unsubscribed;
setTimeout(function () {
if (unsubscribed)
return;
o.next({
type: "add",
descriptor: null
});
o.complete();
}, 0);
return {
unsubscribe: function () {
unsubscribed = true;
}
};
};
TransportReplayer.open = function () { return Promise.resolve(new TransportReplayer()); };
return TransportReplayer;
}(hw_transport_1["default"]));
};
TransportReplayer.open = () => Promise.resolve(new TransportReplayer());
return TransportReplayer;
};
exports["default"] = createTransportReplayer;
exports.default = createTransportReplayer;
//# sourceMappingURL=createTransportReplayer.js.map

@@ -5,3 +5,4 @@ export * from "./RecordStore";

import openTransportReplayer from "./openTransportReplayer";
export { createTransportRecorder, createTransportReplayer, openTransportReplayer, };
import MockTransport from "./MockTransport";
export { createTransportRecorder, createTransportReplayer, openTransportReplayer, MockTransport, };
//# sourceMappingURL=index.d.ts.map

@@ -19,11 +19,13 @@ "use strict";

};
exports.__esModule = true;
exports.openTransportReplayer = exports.createTransportReplayer = exports.createTransportRecorder = void 0;
Object.defineProperty(exports, "__esModule", { value: true });
exports.MockTransport = exports.openTransportReplayer = exports.createTransportReplayer = exports.createTransportRecorder = void 0;
__exportStar(require("./RecordStore"), exports);
var createTransportReplayer_1 = __importDefault(require("./createTransportReplayer"));
exports.createTransportReplayer = createTransportReplayer_1["default"];
var createTransportRecorder_1 = __importDefault(require("./createTransportRecorder"));
exports.createTransportRecorder = createTransportRecorder_1["default"];
var openTransportReplayer_1 = __importDefault(require("./openTransportReplayer"));
exports.openTransportReplayer = openTransportReplayer_1["default"];
const createTransportReplayer_1 = __importDefault(require("./createTransportReplayer"));
exports.createTransportReplayer = createTransportReplayer_1.default;
const createTransportRecorder_1 = __importDefault(require("./createTransportRecorder"));
exports.createTransportRecorder = createTransportRecorder_1.default;
const openTransportReplayer_1 = __importDefault(require("./openTransportReplayer"));
exports.openTransportReplayer = openTransportReplayer_1.default;
const MockTransport_1 = __importDefault(require("./MockTransport"));
exports.MockTransport = MockTransport_1.default;
//# sourceMappingURL=index.js.map
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
if (typeof b !== "function" && b !== null)
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
exports.__esModule = true;
Object.defineProperty(exports, "__esModule", { value: true });
exports.TransportReplayer = void 0;
var hw_transport_1 = __importDefault(require("@ledgerhq/hw-transport"));
var logs_1 = require("@ledgerhq/logs");
var TransportReplayer = /** @class */ (function (_super) {
__extends(TransportReplayer, _super);
function TransportReplayer(recordStore) {
var _this = _super.call(this) || this;
_this.artificialExchangeDelay = 0;
_this.recordStore = recordStore;
return _this;
const hw_transport_1 = __importDefault(require("@ledgerhq/hw-transport"));
const logs_1 = require("@ledgerhq/logs");
class TransportReplayer extends hw_transport_1.default {
constructor(recordStore) {
super();
this.artificialExchangeDelay = 0;
this.recordStore = recordStore;
}
TransportReplayer.prototype.setArtificialExchangeDelay = function (delay) {
setArtificialExchangeDelay(delay) {
this.artificialExchangeDelay = delay;
};
TransportReplayer.prototype.setScrambleKey = function () { };
TransportReplayer.prototype.close = function () {
}
setScrambleKey() { }
close() {
return Promise.resolve();
};
TransportReplayer.prototype.exchange = function (apdu) {
var _this = this;
}
exchange(apdu) {
(0, logs_1.log)("apdu", apdu.toString("hex"));
try {
var buffer_1 = this.recordStore.replayExchange(apdu);
(0, logs_1.log)("apdu", buffer_1.toString("hex"));
const buffer = this.recordStore.replayExchange(apdu);
(0, logs_1.log)("apdu", buffer.toString("hex"));
if (this.artificialExchangeDelay) {
return new Promise(function (resolve) {
setTimeout(function () {
resolve(buffer_1);
_this.setArtificialExchangeDelay(0);
}, _this.artificialExchangeDelay);
return new Promise((resolve) => {
setTimeout(() => {
resolve(buffer);
this.setArtificialExchangeDelay(0);
}, this.artificialExchangeDelay);
});
}
else {
return Promise.resolve(buffer_1);
return Promise.resolve(buffer);
}

@@ -61,28 +43,25 @@ }

}
}
}
exports.TransportReplayer = TransportReplayer;
TransportReplayer.isSupported = () => Promise.resolve(true);
TransportReplayer.list = () => Promise.resolve([null]);
TransportReplayer.listen = (o) => {
let unsubscribed;
setTimeout(() => {
if (unsubscribed)
return;
o.next({
type: "add",
descriptor: null,
});
o.complete();
}, 0);
return {
unsubscribe: () => {
unsubscribed = true;
},
};
TransportReplayer.isSupported = function () { return Promise.resolve(true); };
TransportReplayer.list = function () { return Promise.resolve([null]); };
TransportReplayer.listen = function (o) {
var unsubscribed;
setTimeout(function () {
if (unsubscribed)
return;
o.next({
type: "add",
descriptor: null
});
o.complete();
}, 0);
return {
unsubscribe: function () {
unsubscribed = true;
}
};
};
TransportReplayer.open = function (recordStore) {
return Promise.resolve(new TransportReplayer(recordStore));
};
return TransportReplayer;
}(hw_transport_1["default"]));
exports.TransportReplayer = TransportReplayer;
};
TransportReplayer.open = (recordStore) => Promise.resolve(new TransportReplayer(recordStore));
/**

@@ -92,6 +71,6 @@ * create a transport replayer with a record store.

*/
var openTransportReplayer = function (recordStore) {
const openTransportReplayer = (recordStore) => {
return TransportReplayer.open(recordStore);
};
exports["default"] = openTransportReplayer;
exports.default = openTransportReplayer;
//# sourceMappingURL=openTransportReplayer.js.map

@@ -30,3 +30,3 @@ /// <reference types="node" />

}
export declare type Queue = [string, string][];
export type Queue = [string, string][];
/**

@@ -40,3 +40,3 @@ * - autoSkipUnknownApdu:

*/
export declare type RecordStoreOptions = {
export type RecordStoreOptions = {
autoSkipUnknownApdu: boolean;

@@ -43,0 +43,0 @@ warning: (arg0: string) => void;

"use strict";
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __read = (this && this.__read) || function (o, n) {
var m = typeof Symbol === "function" && o[Symbol.iterator];
if (!m) return o;
var i = m.call(o), r, ar = [], e;
try {
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
}
catch (error) { e = { error: error }; }
finally {
try {
if (r && !r.done && (m = i["return"])) m.call(i);
}
finally { if (e) throw e.error; }
}
return ar;
};
exports.__esModule = true;
Object.defineProperty(exports, "__esModule", { value: true });
exports.RecordStore = exports.RecordStoreRemainingAPDU = exports.RecordStoreWrongAPDU = exports.RecordStoreQueueEmpty = exports.RecordStoreInvalidSynthax = void 0;

@@ -56,3 +29,3 @@ /**

this.name = "RecordStoreWrongAPDU";
this.message = "wrong apdu to replay line ".concat(line, ". Expected ").concat(expected, ", Got ").concat(got);
this.message = `wrong apdu to replay line ${line}. Expected ${expected}, Got ${got}`;
this.expectedAPDU = expected;

@@ -69,3 +42,3 @@ this.gotAPDU = got;

this.name = "RecordStoreRemainingAPDU";
this.message = "replay expected more APDUs to come:\n".concat(expected);
this.message = `replay expected more APDUs to come:\n${expected}`;
this.stack = new Error().stack;

@@ -75,5 +48,5 @@ }

RecordStoreRemainingAPDU.prototype = new Error();
var defaultOpts = {
const defaultOpts = {
autoSkipUnknownApdu: false,
warning: function (log) { return console.warn(log); }
warning: (log) => console.warn(log),
};

@@ -84,5 +57,4 @@ /**

*/
var RecordStore = /** @class */ (function () {
function RecordStore(queue, opts) {
var _this = this;
class RecordStore {
constructor(queue, opts) {
this.passed = 0;

@@ -92,5 +64,5 @@ /**

*/
this.isEmpty = function () { return _this.queue.length === 0; };
this.isEmpty = () => this.queue.length === 0;
this.queue = queue || [];
this.opts = __assign(__assign({}, defaultOpts), opts);
this.opts = Object.assign(Object.assign({}, defaultOpts), opts);
}

@@ -102,5 +74,5 @@ /**

*/
RecordStore.prototype.recordExchange = function (apdu, out) {
recordExchange(apdu, out) {
this.queue.push([apdu.toString("hex"), out.toString("hex")]);
};
}
/**

@@ -110,8 +82,8 @@ * Replay an APDU (used by createTransportReplayer)

*/
RecordStore.prototype.replayExchange = function (apdu) {
var _a = this, queue = _a.queue, opts = _a.opts;
var apduHex = apdu.toString("hex");
for (var i = 0; i < queue.length; i++) {
var head = queue[i];
var line = 2 * (this.passed + i);
replayExchange(apdu) {
const { queue, opts } = this;
const apduHex = apdu.toString("hex");
for (let i = 0; i < queue.length; i++) {
const head = queue[i];
const line = 2 * (this.passed + i);
if (apduHex === head[0]) {

@@ -138,22 +110,19 @@ ++this.passed;

throw new RecordStoreQueueEmpty();
};
}
/**
* Check all APDUs was replayed. Throw if it's not the case.
*/
RecordStore.prototype.ensureQueueEmpty = function () {
ensureQueueEmpty() {
if (!this.isEmpty()) {
throw new RecordStoreRemainingAPDU(this.toString());
}
};
}
/**
* Print out the series of apdus
*/
RecordStore.prototype.toString = function () {
toString() {
return (this.queue
.map(function (_a) {
var _b = __read(_a, 2), send = _b[0], receive = _b[1];
return "=> ".concat(send, "\n<= ").concat(receive);
})
.map(([send, receive]) => `=> ${send}\n<= ${receive}`)
.join("\n") + "\n");
};
}
/**

@@ -164,12 +133,12 @@ * Create a RecordStore by parsing a string (a series of => HEX\n<= HEX)

*/
RecordStore.fromString = function (str, opts) {
var queue = [];
var value = [];
static fromString(str, opts) {
const queue = [];
let value = [];
str
.split("\n")
.map(function (line) { return line.replace(/ /g, ""); })
.filter(function (o) { return o; })
.forEach(function (line) {
.map((line) => line.replace(/ /g, ""))
.filter((o) => o)
.forEach((line) => {
if (value.length === 0) {
var m = line.match(/^=>([0-9a-fA-F]+)$/);
const m = line.match(/^=>([0-9a-fA-F]+)$/);
if (!m) {

@@ -181,3 +150,3 @@ throw new RecordStoreInvalidSynthax("expected an apdu input");

else {
var m = line.match(/^<=([0-9a-fA-F]+)$/);
const m = line.match(/^<=([0-9a-fA-F]+)$/);
if (!m) {

@@ -195,6 +164,5 @@ throw new RecordStoreInvalidSynthax("expected an apdu output");

return new RecordStore(queue, opts);
};
return RecordStore;
}());
}
}
exports.RecordStore = RecordStore;
//# sourceMappingURL=RecordStore.js.map
{
"name": "@ledgerhq/hw-transport-mocker",
"version": "6.27.12",
"version": "6.27.15",
"description": "Ledger Hardware Wallet mocker utilities used for tests",

@@ -28,6 +28,16 @@ "keywords": [

"dependencies": {
"@ledgerhq/hw-transport": "^6.28.1",
"@ledgerhq/hw-transport": "^6.28.4",
"@ledgerhq/logs": "^6.10.1"
},
"gitHead": "dd0dea64b58e5a9125c8a422dcffd29e5ef6abec",
"devDependencies": {
"@types/jest": "^29.5.0",
"@types/node": "^18.15.3",
"documentation": "13.2.4",
"jest": "^28.1.1",
"rimraf": "^4.4.1",
"source-map-support": "^0.5.21",
"ts-jest": "^28.0.5",
"ts-node": "^10.4.0"
},
"scripts": {

@@ -34,0 +44,0 @@ "clean": "rimraf lib lib-es",

@@ -5,2 +5,3 @@ export * from "./RecordStore";

import openTransportReplayer from "./openTransportReplayer";
import MockTransport from "./MockTransport";
export {

@@ -10,2 +11,3 @@ createTransportRecorder,

openTransportReplayer,
MockTransport,
};

@@ -43,3 +43,3 @@ /**

*/
export function RecordStoreRemainingAPDU(expected: string) {
export function RecordStoreRemainingAPDU(expected: string): void {
this.name = "RecordStoreRemainingAPDU";

@@ -90,3 +90,3 @@ this.message = `replay expected more APDUs to come:\n${expected}`;

*/
isEmpty = () => this.queue.length === 0;
isEmpty = (): boolean => this.queue.length === 0;

@@ -98,3 +98,3 @@ /**

*/
recordExchange(apdu: Buffer, out: Buffer) {
recordExchange(apdu: Buffer, out: Buffer): void {
this.queue.push([apdu.toString("hex"), out.toString("hex")]);

@@ -142,3 +142,3 @@ }

*/
ensureQueueEmpty() {
ensureQueueEmpty(): void {
if (!this.isEmpty()) {

@@ -145,0 +145,0 @@ throw new RecordStoreRemainingAPDU(this.toString());

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc