@ledgerhq/device-transport-kit-react-native-hid 0.0.0-try-to-fix-20250429171448 → 0.0.0-web-ble-29-08---20250829104351

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/android/build.gradle +0 -9
  2. package/android/src/main/kotlin/com/ledger/androidtransporthid/TransportHidModule.kt +11 -2
  3. package/android/src/main/kotlin/com/ledger/androidtransporthid/bridge/serialization.kt +2 -0
  4. package/android/src/main/kotlin/com/ledger/devicesdk/shared/androidMain/transport/usb/DefaultAndroidUsbTransport.kt +57 -10
  5. package/android/src/main/kotlin/com/ledger/devicesdk/shared/androidMain/transport/usb/connection/AndroidUsbApduSender.kt +75 -33
  6. package/android/src/main/kotlin/com/ledger/devicesdk/shared/androidMain/transport/usb/utils/UsbDeviceMapper.kt +3 -0
  7. package/android/src/main/kotlin/com/ledger/devicesdk/shared/androidMainInternal/transport/deviceconnection/DeviceApduSender.kt +2 -1
  8. package/android/src/main/kotlin/com/ledger/devicesdk/shared/androidMainInternal/transport/deviceconnection/DeviceConnection.kt +5 -4
  9. package/android/src/main/kotlin/com/ledger/devicesdk/shared/androidMainInternal/transport/deviceconnection/DeviceConnectionStateMachine.kt +3 -2
  10. package/android/src/main/kotlin/com/ledger/devicesdk/shared/api/apdu/SendApduResult.kt +4 -0
  11. package/android/src/main/kotlin/com/ledger/devicesdk/shared/api/device/LedgerDevice.kt +16 -0
  12. package/android/src/main/kotlin/com/ledger/devicesdk/shared/internal/connection/InternalConnectedDevice.kt +1 -1
  13. package/android/src/test/kotlin/com/ledger/devicesdk/shared/androidMainInternal/transport/deviceconnection/DeviceConnectionStateMachineTest.kt +47 -31
  14. package/android/src/test/kotlin/com/ledger/devicesdk/shared/androidMainInternal/transport/deviceconnection/DeviceConnectionTest.kt +9 -5
  15. package/lib/cjs/api/bridge/DefaultNativeModuleWrapper.js +1 -1
  16. package/lib/cjs/api/bridge/DefaultNativeModuleWrapper.js.map +3 -3
  17. package/lib/cjs/api/bridge/mapper.js +1 -1
  18. package/lib/cjs/api/bridge/mapper.js.map +2 -2
  19. package/lib/cjs/api/bridge/mapper.test.js +1 -1
  20. package/lib/cjs/api/bridge/mapper.test.js.map +2 -2
  21. package/lib/cjs/api/bridge/types.js +1 -1
  22. package/lib/cjs/api/bridge/types.js.map +1 -1
  23. package/lib/cjs/api/transport/NativeModuleWrapper.js +1 -1
  24. package/lib/cjs/api/transport/NativeModuleWrapper.js.map +1 -1
  25. package/lib/cjs/api/transport/RNHidTransport.js +1 -1
  26. package/lib/cjs/api/transport/RNHidTransport.js.map +3 -3
  27. package/lib/cjs/api/transport/RNHidTransport.test.js +1 -1
  28. package/lib/cjs/api/transport/RNHidTransport.test.js.map +2 -2
  29. package/lib/cjs/package.json +11 -11
  30. package/lib/esm/api/bridge/DefaultNativeModuleWrapper.js +1 -1
  31. package/lib/esm/api/bridge/DefaultNativeModuleWrapper.js.map +3 -3
  32. package/lib/esm/api/bridge/mapper.js +1 -1
  33. package/lib/esm/api/bridge/mapper.js.map +3 -3
  34. package/lib/esm/api/bridge/mapper.test.js +1 -1
  35. package/lib/esm/api/bridge/mapper.test.js.map +3 -3
  36. package/lib/esm/api/bridge/types.js.map +1 -1
  37. package/lib/esm/api/transport/RNHidTransport.js +1 -1
  38. package/lib/esm/api/transport/RNHidTransport.js.map +3 -3
  39. package/lib/esm/api/transport/RNHidTransport.test.js +1 -1
  40. package/lib/esm/api/transport/RNHidTransport.test.js.map +2 -2
  41. package/lib/esm/package.json +11 -11
  42. package/lib/types/api/bridge/DefaultNativeModuleWrapper.d.ts +1 -1
  43. package/lib/types/api/bridge/DefaultNativeModuleWrapper.d.ts.map +1 -1
  44. package/lib/types/api/bridge/mapper.d.ts.map +1 -1
  45. package/lib/types/api/bridge/types.d.ts +2 -2
  46. package/lib/types/api/bridge/types.d.ts.map +1 -1
  47. package/lib/types/api/transport/NativeModuleWrapper.d.ts +1 -1
  48. package/lib/types/api/transport/NativeModuleWrapper.d.ts.map +1 -1
  49. package/lib/types/api/transport/RNHidTransport.d.ts.map +1 -1
  50. package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
  51. package/package.json +13 -13
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/api/transport/RNHidTransport.ts"],
4
- "sourcesContent": ["import {\n type ConnectError,\n type DeviceId,\n DisconnectError,\n type DisconnectHandler,\n type DmkError,\n type LoggerPublisherService,\n LogLevel,\n OpeningConnectionError,\n type Transport,\n TransportConnectedDevice,\n type TransportDiscoveredDevice,\n type TransportIdentifier,\n} from \"@ledgerhq/device-management-kit\";\nimport { type Either, Left, Right } from \"purify-ts\";\nimport { Observable } from \"rxjs\";\n\nimport { getObservableOfArraysNewItems } from \"@api/helpers/getObservableOfArraysNewItems\";\nimport { TRANSPORT_IDENTIFIER } from \"@api/transport/rnHidTransportIdentifier\";\n\nimport { SendApduError } from \"./Errors\";\nimport { type NativeModuleWrapper } from \"./NativeModuleWrapper\";\n\nexport class RNHidTransport implements Transport {\n private _loggerService: LoggerPublisherService;\n\n constructor(\n private readonly _isSupported: boolean,\n private readonly _nativeModuleWrapper: NativeModuleWrapper,\n _loggerServiceFactory: (tag: string) => LoggerPublisherService,\n ) {\n this._loggerService = _loggerServiceFactory(\"RNHidTransport\");\n this._nativeModuleWrapper.subscribeToTransportLogs().subscribe((log) => {\n const [logLevel, message, options] = log;\n const logMethod = {\n [LogLevel.Fatal]: this._loggerService.error.bind(this._loggerService),\n [LogLevel.Error]: this._loggerService.error.bind(this._loggerService),\n [LogLevel.Warning]: this._loggerService.warn.bind(this._loggerService),\n [LogLevel.Info]: this._loggerService.info.bind(this._loggerService),\n [LogLevel.Debug]: this._loggerService.debug.bind(this._loggerService),\n }[logLevel];\n logMethod(message, options);\n });\n }\n\n getIdentifier(): TransportIdentifier {\n return TRANSPORT_IDENTIFIER;\n }\n\n isSupported(): boolean {\n return this._isSupported;\n }\n\n startDiscovering(): Observable<TransportDiscoveredDevice> {\n const observable = new Observable<TransportDiscoveredDevice>(\n (subscriber) => {\n const subscription = getObservableOfArraysNewItems(\n this._nativeModuleWrapper.subscribeToDiscoveredDevicesEvents(),\n (device) => device.id,\n ).subscribe(subscriber);\n\n this._nativeModuleWrapper.startScan().catch((error) => {\n subscriber.error(error);\n this._loggerService.error(\"startDiscovering error\", error);\n });\n return () => subscription.unsubscribe();\n },\n );\n return observable;\n }\n\n stopDiscovering(): void {\n this._nativeModuleWrapper.stopScan().catch((error) => {\n this._loggerService.error(\"stopDiscovering error\", error);\n });\n }\n\n listenToAvailableDevices(): Observable<TransportDiscoveredDevice[]> {\n /**\n * NB: here we need to define the unsubscribe logic as there is no\n * \"stopListeningToKnownDevices\" method.\n * That's why we create a new observable rather than returning the one\n * returned by subscribeToDiscoveredDevicesEvents.\n */\n const observable = new Observable<TransportDiscoveredDevice[]>(\n (subscriber) => {\n const subscription = this._nativeModuleWrapper\n .subscribeToDiscoveredDevicesEvents()\n .subscribe((devices) => {\n subscriber.next(devices);\n });\n this._nativeModuleWrapper.startScan().catch((error) => {\n this._loggerService.error(\"startDiscovering error\", error);\n subscriber.error(error);\n });\n return () => {\n subscription.unsubscribe();\n this._nativeModuleWrapper.stopScan().catch((error) => {\n this._loggerService.error(\"stopDiscovering error\", error);\n });\n };\n },\n );\n return observable;\n }\n\n connect(_params: {\n deviceId: DeviceId;\n onDisconnect: DisconnectHandler;\n }): Promise<Either<ConnectError, TransportConnectedDevice>> {\n return this._nativeModuleWrapper\n .connectDevice(_params.deviceId)\n .then((result) => {\n return result.map(\n ({ sessionId, transportDeviceModel: deviceModel }) => {\n const sub = this._nativeModuleWrapper\n .subscribeToDeviceDisconnectedEvents()\n .subscribe((device) => {\n if (device.sessionId === sessionId) {\n _params.onDisconnect(sessionId);\n sub.unsubscribe();\n }\n });\n\n return new TransportConnectedDevice({\n id: sessionId,\n deviceModel,\n sendApdu: async (apdu) => {\n return this._nativeModuleWrapper\n .sendApdu(sessionId, apdu)\n .catch((e) => Left(new SendApduError(e)));\n },\n transport: this.getIdentifier(),\n type: \"USB\",\n });\n },\n );\n })\n .catch((error) => {\n return Left(new OpeningConnectionError(error));\n });\n }\n\n disconnect(_params: {\n connectedDevice: TransportConnectedDevice;\n }): Promise<Either<DmkError, void>> {\n return this._nativeModuleWrapper\n .disconnectDevice(_params.connectedDevice.id)\n .then(() => Right(undefined))\n .catch((error) => {\n return Left(new DisconnectError(error));\n });\n }\n}\n"],
5
- "mappings": "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",
6
- "names": ["DisconnectError", "LogLevel", "OpeningConnectionError", "TransportConnectedDevice", "Left", "Right", "Observable", "getObservableOfArraysNewItems", "TRANSPORT_IDENTIFIER", "SendApduError", "RNHidTransport", "_isSupported", "_nativeModuleWrapper", "_loggerServiceFactory", "log", "logLevel", "message", "options", "logMethod", "subscriber", "subscription", "device", "error", "devices", "_params", "result", "sessionId", "deviceModel", "sub", "apdu", "e"]
4
+ "sourcesContent": ["import {\n type ConnectError,\n type DeviceId,\n DisconnectError,\n type DisconnectHandler,\n type DmkError,\n type LoggerPublisherService,\n LogLevel,\n OpeningConnectionError,\n type Transport,\n TransportConnectedDevice,\n type TransportDiscoveredDevice,\n type TransportIdentifier,\n} from \"@ledgerhq/device-management-kit\";\nimport { type Either, Left, Right } from \"purify-ts\";\nimport { Observable } from \"rxjs\";\n\nimport { getObservableOfArraysNewItems } from \"@api/helpers/getObservableOfArraysNewItems\";\nimport { TRANSPORT_IDENTIFIER } from \"@api/transport/rnHidTransportIdentifier\";\n\nimport { SendApduError } from \"./Errors\";\nimport { type NativeModuleWrapper } from \"./NativeModuleWrapper\";\n\nexport class RNHidTransport implements Transport {\n private _loggerService: LoggerPublisherService;\n\n constructor(\n private readonly _isSupported: boolean,\n private readonly _nativeModuleWrapper: NativeModuleWrapper,\n _loggerServiceFactory: (tag: string) => LoggerPublisherService,\n ) {\n this._loggerService = _loggerServiceFactory(\"RNHidTransport\");\n this._nativeModuleWrapper.subscribeToTransportLogs().subscribe((log) => {\n const [logLevel, message, options] = log;\n const logMethod = {\n [LogLevel.Fatal]: this._loggerService.error.bind(this._loggerService),\n [LogLevel.Error]: this._loggerService.error.bind(this._loggerService),\n [LogLevel.Warning]: this._loggerService.warn.bind(this._loggerService),\n [LogLevel.Info]: this._loggerService.info.bind(this._loggerService),\n [LogLevel.Debug]: this._loggerService.debug.bind(this._loggerService),\n }[logLevel];\n logMethod(message, options);\n });\n }\n\n getIdentifier(): TransportIdentifier {\n return TRANSPORT_IDENTIFIER;\n }\n\n isSupported(): boolean {\n return this._isSupported;\n }\n\n startDiscovering(): Observable<TransportDiscoveredDevice> {\n const observable = new Observable<TransportDiscoveredDevice>(\n (subscriber) => {\n const subscription = getObservableOfArraysNewItems(\n this._nativeModuleWrapper.subscribeToDiscoveredDevicesEvents(),\n (device) => device.id,\n ).subscribe(subscriber);\n\n this._nativeModuleWrapper.startScan().catch((error) => {\n subscriber.error(error);\n this._loggerService.error(\"startDiscovering error\", error);\n });\n return () => subscription.unsubscribe();\n },\n );\n return observable;\n }\n\n stopDiscovering(): void {\n this._nativeModuleWrapper.stopScan().catch((error) => {\n this._loggerService.error(\"stopDiscovering error\", error);\n });\n }\n\n listenToAvailableDevices(): Observable<TransportDiscoveredDevice[]> {\n /**\n * NB: here we need to define the unsubscribe logic as there is no\n * \"stopListeningToKnownDevices\" method.\n * That's why we create a new observable rather than returning the one\n * returned by subscribeToDiscoveredDevicesEvents.\n */\n const observable = new Observable<TransportDiscoveredDevice[]>(\n (subscriber) => {\n const subscription = this._nativeModuleWrapper\n .subscribeToDiscoveredDevicesEvents()\n .subscribe((devices) => {\n subscriber.next(devices);\n });\n this._nativeModuleWrapper.startScan().catch((error) => {\n this._loggerService.error(\"startDiscovering error\", error);\n subscriber.error(error);\n });\n return () => {\n subscription.unsubscribe();\n this._nativeModuleWrapper.stopScan().catch((error) => {\n this._loggerService.error(\"stopDiscovering error\", error);\n });\n };\n },\n );\n return observable;\n }\n\n connect(_params: {\n deviceId: DeviceId;\n onDisconnect: DisconnectHandler;\n }): Promise<Either<ConnectError, TransportConnectedDevice>> {\n return this._nativeModuleWrapper\n .connectDevice(_params.deviceId)\n .then((result) => {\n return result.map(\n ({ sessionId, transportDeviceModel: deviceModel }) => {\n const sub = this._nativeModuleWrapper\n .subscribeToDeviceDisconnectedEvents()\n .subscribe((device) => {\n if (device.sessionId === sessionId) {\n _params.onDisconnect(sessionId);\n sub.unsubscribe();\n }\n });\n\n return new TransportConnectedDevice({\n id: sessionId,\n deviceModel,\n sendApdu: async (\n apdu,\n triggersDisconnection = false,\n abortTimeout = -1,\n ) => {\n return this._nativeModuleWrapper\n .sendApdu(\n sessionId,\n apdu,\n triggersDisconnection,\n abortTimeout,\n )\n .catch((e) => Left(new SendApduError(e)));\n },\n transport: this.getIdentifier(),\n type: \"USB\",\n });\n },\n );\n })\n .catch((error) => {\n return Left(new OpeningConnectionError(error));\n });\n }\n\n disconnect(_params: {\n connectedDevice: TransportConnectedDevice;\n }): Promise<Either<DmkError, void>> {\n return this._nativeModuleWrapper\n .disconnectDevice(_params.connectedDevice.id)\n .then(() => Right(undefined))\n .catch((error) => {\n return Left(new DisconnectError(error));\n });\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["DisconnectError", "LogLevel", "OpeningConnectionError", "TransportConnectedDevice", "Left", "Right", "Observable", "getObservableOfArraysNewItems", "TRANSPORT_IDENTIFIER", "SendApduError", "RNHidTransport", "_isSupported", "_nativeModuleWrapper", "_loggerServiceFactory", "log", "logLevel", "message", "options", "logMethod", "subscriber", "subscription", "device", "error", "devices", "_params", "result", "sessionId", "deviceModel", "sub", "apdu", "triggersDisconnection", "abortTimeout", "e"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{DeviceModelId as y,DisconnectError as A,LogLevel as I,OpeningConnectionError as M,StaticDeviceModelDataSource as O,TransportConnectedDevice as V}from"@ledgerhq/device-management-kit";import{Left as D,Right as p}from"purify-ts/Either";import{Subject as S}from"rxjs";import{TRANSPORT_IDENTIFIER as k}from"../transport/rnHidTransportIdentifier";import{SendApduError as B}from"./Errors";import{RNHidTransport as c}from"./RNHidTransport";const C=new O,E=(d,v)=>({id:d,transport:k,name:v,deviceModel:C.getDeviceModel({id:v})}),u=E("1",y.NANO_S),g=E("2",y.NANO_X),x=E("3",y.NANO_S);describe("RNHidTransport",()=>{let d,v,T,n;const h={error:vi.fn(),warn:vi.fn(),info:vi.fn(),debug:vi.fn(),subscribers:[]},s=vi.fn(()=>h),f=vi.fn(),w=vi.fn(),l=vi.fn(),R=vi.fn(),m=vi.fn();beforeEach(()=>{d=new S,v=new S,T=new S,vi.clearAllMocks(),f.mockResolvedValue(void 0),w.mockResolvedValue(void 0),l.mockResolvedValue(void 0),R.mockResolvedValue(void 0),m.mockResolvedValue(void 0),n={startScan:f,stopScan:w,subscribeToDiscoveredDevicesEvents:vi.fn(()=>d.asObservable()),subscribeToDeviceDisconnectedEvents:vi.fn(()=>v.asObservable()),subscribeToTransportLogs:vi.fn(()=>T.asObservable()),connectDevice:l,disconnectDevice:R,sendApdu:m}}),test("getIdentifier returns TRANSPORT_IDENTIFIER",()=>{const t=new c(!0,n,s);expect(t.getIdentifier()).toBe(k)}),describe("isSupported returns the provided support flag",()=>{test("supported",()=>{const t=new c(!0,n,s);expect(t.isSupported()).toBe(!0)}),test("not supported",()=>{const t=new c(!1,n,s);expect(t.isSupported()).toBe(!1)})}),test("constructor subscribes to transport logs and calls logger methods",()=>{new c(!0,n,s);const t=[I.Info,"Test message",{tag:"TestTag",data:{key:"value"},timestamp:123456789}];T.next(t),expect(h.info).toHaveBeenCalledWith("Test message",{tag:"TestTag",data:{key:"value"},timestamp:123456789})}),describe("startDiscovering",()=>{it("calls startScan",()=>{new c(!0,n,s).startDiscovering().subscribe(),expect(f).toHaveBeenCalled()}),it("emits new discovered devices",()=>new Promise((t,e)=>{const r=new c(!0,n,s),o=[];r.startDiscovering().subscribe({next:i=>{if(o.push(i),o.length===3)try{expect(o).toEqual([u,g,x]),t()}catch(a){e(a)}},error:e}),d.next([u]),d.next([u,g]),d.next([u,g,x])})),it("propagates startScan error",()=>new Promise((t,e)=>{const r=new c(!0,n,s),o=new Error("scan failed");f.mockRejectedValueOnce(o),r.startDiscovering().subscribe({next:()=>{},error:i=>{try{expect(i).toBe(o),t()}catch(a){e(a)}}})}))}),describe("stopDiscovering",()=>{it("calls stopScan",async()=>{await new c(!0,n,s).stopDiscovering(),expect(n.stopScan).toHaveBeenCalled()}),it("logs error when stopScan fails",async()=>{const t=new c(!0,n,s),e=new Error("stop failed");w.mockRejectedValueOnce(e),await t.stopDiscovering(),expect(h.error).toHaveBeenCalledWith("stopDiscovering error",e)})}),describe("listenToKnownDevices",()=>{it("emits arrays of discovered devices",()=>new Promise((t,e)=>{const r=new c(!0,n,s),o=[];r.listenToAvailableDevices().subscribe({next:i=>{if(o.push(i),o.length===2)try{expect(o).toEqual([[u,g],[u,x]]),t()}catch(a){e(a)}},complete:()=>{e("should not complete")},error:e}),d.next([u,g]),d.next([u,x])})),it("propagates startScan error",()=>new Promise((t,e)=>{const r=new c(!0,n,s),o=new Error("start scan failed");f.mockRejectedValueOnce(o),r.listenToAvailableDevices().subscribe({error:i=>{try{expect(i).toBe(o),t()}catch(a){e(a)}}})})),it("calls stopScan on unsubscribe",()=>{const t=new c(!0,n,s),e=new Error("stop scan failed");w.mockRejectedValueOnce(e),t.listenToAvailableDevices().subscribe({}).unsubscribe(),expect(w).toHaveBeenCalled()})}),describe("connect",()=>{describe("connection successful",()=>{it("should return a Right(TransportConnectedDevice) on successful connection",async()=>{const t={model:"TestModel"},e="session123";l.mockResolvedValueOnce(p({sessionId:e,transportDeviceModel:t}));const o=await new c(!0,n,s).connect({deviceId:e,onDisconnect:vi.fn()});expect(o.isRight()).toBe(!0);const i=o.extract();expect(i).toBeInstanceOf(V),expect(i.id).toBe(e),expect(i.deviceModel).toEqual(t),expect(i.transport).toBe(k),expect(i.type).toBe("USB")}),test("should trigger onDisconnect when a matching disconnect event is emitted",async()=>{const t={model:"TestModel"},e="session123";l.mockResolvedValueOnce(p({sessionId:e,transportDeviceModel:t}));const r=new c(!0,n,s),o=vi.fn();await r.connect({deviceId:e,onDisconnect:o}),v.next({sessionId:e}),expect(o).toHaveBeenCalledWith(e)}),test("should handle sendApdu success (Right)",async()=>{const t={model:"TestModel"},e="session123";l.mockResolvedValueOnce(p({sessionId:e,transportDeviceModel:t}));const i=(await new c(!0,n,s).connect({deviceId:e,onDisconnect:vi.fn()})).extract();m.mockResolvedValueOnce(p("apduResponse"));const a=new Uint8Array([1,2,3]),b=await i.sendApdu(a);expect(n.sendApdu).toHaveBeenCalledWith(e,a),expect(b).toEqual(p("apduResponse"))}),test("should handle sendApdu failure (Left)",async()=>{const t={model:"TestModel"},e="session123";l.mockResolvedValueOnce(p({sessionId:e,transportDeviceModel:t}));const i=(await new c(!0,n,s).connect({deviceId:e,onDisconnect:vi.fn()})).extract();m.mockResolvedValueOnce(D("some error"));const a=new Uint8Array([1,2,3]),b=await i.sendApdu(a);expect(b).toEqual(D("some error"))}),test("should handle sendApdu rejection",async()=>{const t={model:"TestModel"},e="session123";l.mockResolvedValueOnce(p({sessionId:e,transportDeviceModel:t}));const i=(await new c(!0,n,s).connect({deviceId:e,onDisconnect:vi.fn()})).extract(),a=new Error("apdu failed");m.mockRejectedValueOnce(a);const b=await i.sendApdu(new Uint8Array([]));expect(b).toEqual(D(new B(a)))})}),describe("connection failure",()=>{test("should return a Left when nativeModuleWrapper.connectDevice resolves a Left",async()=>{const t=new c(!0,n,s),e=D(new M("connection failed"));l.mockResolvedValueOnce(e);const r=await t.connect({deviceId:"any",onDisconnect:vi.fn()});expect(r).toEqual(e)}),test("should return a Left when nativeModuleWrapper.connectDevice rejects",async()=>{const t=new Error("connection failed"),e=new c(!0,n,s);l.mockRejectedValueOnce(t);const r=await e.connect({deviceId:"any",onDisconnect:vi.fn()});expect(r).toEqual(D(new M(t)))})})}),describe("disconnect",()=>{it("returns Right on successful disconnect",async()=>{const e=await new c(!0,n,s).disconnect({connectedDevice:{id:"session789"}});expect(n.disconnectDevice).toHaveBeenCalledWith("session789"),expect(e).toEqual(p(void 0))}),it("returns Left on disconnect failure",async()=>{const t=new c(!0,n,s),e=new Error("disconnect failed");R.mockRejectedValueOnce(e);const r=await t.disconnect({connectedDevice:{id:"session000"}});expect(r).toEqual(D(new A(e)))})})});
1
+ import{DeviceModelId as y,DisconnectError as A,LogLevel as I,OpeningConnectionError as M,StaticDeviceModelDataSource as O,TransportConnectedDevice as V}from"@ledgerhq/device-management-kit";import{Left as D,Right as p}from"purify-ts/Either";import{Subject as S}from"rxjs";import{TRANSPORT_IDENTIFIER as k}from"../transport/rnHidTransportIdentifier";import{SendApduError as B}from"./Errors";import{RNHidTransport as c}from"./RNHidTransport";const C=new O,E=(d,v)=>({id:d,transport:k,name:v,deviceModel:C.getDeviceModel({id:v})}),u=E("1",y.NANO_S),g=E("2",y.NANO_X),x=E("3",y.NANO_S);describe("RNHidTransport",()=>{let d,v,T,n;const h={error:vi.fn(),warn:vi.fn(),info:vi.fn(),debug:vi.fn(),subscribers:[]},s=vi.fn(()=>h),f=vi.fn(),w=vi.fn(),l=vi.fn(),R=vi.fn(),m=vi.fn();beforeEach(()=>{d=new S,v=new S,T=new S,vi.clearAllMocks(),f.mockResolvedValue(void 0),w.mockResolvedValue(void 0),l.mockResolvedValue(void 0),R.mockResolvedValue(void 0),m.mockResolvedValue(void 0),n={startScan:f,stopScan:w,subscribeToDiscoveredDevicesEvents:vi.fn(()=>d.asObservable()),subscribeToDeviceDisconnectedEvents:vi.fn(()=>v.asObservable()),subscribeToTransportLogs:vi.fn(()=>T.asObservable()),connectDevice:l,disconnectDevice:R,sendApdu:m}}),test("getIdentifier returns TRANSPORT_IDENTIFIER",()=>{const t=new c(!0,n,s);expect(t.getIdentifier()).toBe(k)}),describe("isSupported returns the provided support flag",()=>{test("supported",()=>{const t=new c(!0,n,s);expect(t.isSupported()).toBe(!0)}),test("not supported",()=>{const t=new c(!1,n,s);expect(t.isSupported()).toBe(!1)})}),test("constructor subscribes to transport logs and calls logger methods",()=>{new c(!0,n,s);const t=[I.Info,"Test message",{tag:"TestTag",data:{key:"value"},timestamp:123456789}];T.next(t),expect(h.info).toHaveBeenCalledWith("Test message",{tag:"TestTag",data:{key:"value"},timestamp:123456789})}),describe("startDiscovering",()=>{it("calls startScan",()=>{new c(!0,n,s).startDiscovering().subscribe(),expect(f).toHaveBeenCalled()}),it("emits new discovered devices",()=>new Promise((t,e)=>{const r=new c(!0,n,s),o=[];r.startDiscovering().subscribe({next:i=>{if(o.push(i),o.length===3)try{expect(o).toEqual([u,g,x]),t()}catch(a){e(a)}},error:e}),d.next([u]),d.next([u,g]),d.next([u,g,x])})),it("propagates startScan error",()=>new Promise((t,e)=>{const r=new c(!0,n,s),o=new Error("scan failed");f.mockRejectedValueOnce(o),r.startDiscovering().subscribe({next:()=>{},error:i=>{try{expect(i).toBe(o),t()}catch(a){e(a)}}})}))}),describe("stopDiscovering",()=>{it("calls stopScan",async()=>{await new c(!0,n,s).stopDiscovering(),expect(n.stopScan).toHaveBeenCalled()}),it("logs error when stopScan fails",async()=>{const t=new c(!0,n,s),e=new Error("stop failed");w.mockRejectedValueOnce(e),await t.stopDiscovering(),expect(h.error).toHaveBeenCalledWith("stopDiscovering error",e)})}),describe("listenToKnownDevices",()=>{it("emits arrays of discovered devices",()=>new Promise((t,e)=>{const r=new c(!0,n,s),o=[];r.listenToAvailableDevices().subscribe({next:i=>{if(o.push(i),o.length===2)try{expect(o).toEqual([[u,g],[u,x]]),t()}catch(a){e(a)}},complete:()=>{e("should not complete")},error:e}),d.next([u,g]),d.next([u,x])})),it("propagates startScan error",()=>new Promise((t,e)=>{const r=new c(!0,n,s),o=new Error("start scan failed");f.mockRejectedValueOnce(o),r.listenToAvailableDevices().subscribe({error:i=>{try{expect(i).toBe(o),t()}catch(a){e(a)}}})})),it("calls stopScan on unsubscribe",()=>{const t=new c(!0,n,s),e=new Error("stop scan failed");w.mockRejectedValueOnce(e),t.listenToAvailableDevices().subscribe({}).unsubscribe(),expect(w).toHaveBeenCalled()})}),describe("connect",()=>{describe("connection successful",()=>{it("should return a Right(TransportConnectedDevice) on successful connection",async()=>{const t={model:"TestModel"},e="session123";l.mockResolvedValueOnce(p({sessionId:e,transportDeviceModel:t}));const o=await new c(!0,n,s).connect({deviceId:e,onDisconnect:vi.fn()});expect(o.isRight()).toBe(!0);const i=o.extract();expect(i).toBeInstanceOf(V),expect(i.id).toBe(e),expect(i.deviceModel).toEqual(t),expect(i.transport).toBe(k),expect(i.type).toBe("USB")}),test("should trigger onDisconnect when a matching disconnect event is emitted",async()=>{const t={model:"TestModel"},e="session123";l.mockResolvedValueOnce(p({sessionId:e,transportDeviceModel:t}));const r=new c(!0,n,s),o=vi.fn();await r.connect({deviceId:e,onDisconnect:o}),v.next({sessionId:e}),expect(o).toHaveBeenCalledWith(e)}),test("should handle sendApdu success (Right)",async()=>{const t={model:"TestModel"},e="session123";l.mockResolvedValueOnce(p({sessionId:e,transportDeviceModel:t}));const i=(await new c(!0,n,s).connect({deviceId:e,onDisconnect:vi.fn()})).extract();m.mockResolvedValueOnce(p("apduResponse"));const a=new Uint8Array([1,2,3]),b=await i.sendApdu(a,!1,0);expect(n.sendApdu).toHaveBeenCalledWith(e,a,!1,0),expect(b).toEqual(p("apduResponse"))}),test("should handle sendApdu failure (Left)",async()=>{const t={model:"TestModel"},e="session123";l.mockResolvedValueOnce(p({sessionId:e,transportDeviceModel:t}));const i=(await new c(!0,n,s).connect({deviceId:e,onDisconnect:vi.fn()})).extract();m.mockResolvedValueOnce(D("some error"));const a=new Uint8Array([1,2,3]),b=await i.sendApdu(a);expect(b).toEqual(D("some error"))}),test("should handle sendApdu rejection",async()=>{const t={model:"TestModel"},e="session123";l.mockResolvedValueOnce(p({sessionId:e,transportDeviceModel:t}));const i=(await new c(!0,n,s).connect({deviceId:e,onDisconnect:vi.fn()})).extract(),a=new Error("apdu failed");m.mockRejectedValueOnce(a);const b=await i.sendApdu(new Uint8Array([]));expect(b).toEqual(D(new B(a)))})}),describe("connection failure",()=>{test("should return a Left when nativeModuleWrapper.connectDevice resolves a Left",async()=>{const t=new c(!0,n,s),e=D(new M("connection failed"));l.mockResolvedValueOnce(e);const r=await t.connect({deviceId:"any",onDisconnect:vi.fn()});expect(r).toEqual(e)}),test("should return a Left when nativeModuleWrapper.connectDevice rejects",async()=>{const t=new Error("connection failed"),e=new c(!0,n,s);l.mockRejectedValueOnce(t);const r=await e.connect({deviceId:"any",onDisconnect:vi.fn()});expect(r).toEqual(D(new M(t)))})})}),describe("disconnect",()=>{it("returns Right on successful disconnect",async()=>{const e=await new c(!0,n,s).disconnect({connectedDevice:{id:"session789"}});expect(n.disconnectDevice).toHaveBeenCalledWith("session789"),expect(e).toEqual(p(void 0))}),it("returns Left on disconnect failure",async()=>{const t=new c(!0,n,s),e=new Error("disconnect failed");R.mockRejectedValueOnce(e);const r=await t.disconnect({connectedDevice:{id:"session000"}});expect(r).toEqual(D(new A(e)))})})});
2
2
  //# sourceMappingURL=RNHidTransport.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/api/transport/RNHidTransport.test.ts"],
4
- "sourcesContent": ["import {\n DeviceModelId,\n DisconnectError,\n type LoggerPublisherService,\n LogLevel,\n type LogParams,\n OpeningConnectionError,\n StaticDeviceModelDataSource,\n TransportConnectedDevice,\n type TransportDiscoveredDevice,\n} from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts/Either\";\nimport { Subject } from \"rxjs\";\n\nimport { TRANSPORT_IDENTIFIER } from \"@api/transport/rnHidTransportIdentifier\";\n\nimport { SendApduError } from \"./Errors\";\nimport { type NativeModuleWrapper } from \"./NativeModuleWrapper\";\nimport { RNHidTransport } from \"./RNHidTransport\";\nimport { type InternalDeviceDisconnected } from \"./types\";\n\nconst deviceModelDataSource = new StaticDeviceModelDataSource();\n\nconst makeMockTransportDiscoveredDevice = (\n id: string,\n deviceModelId: DeviceModelId,\n): TransportDiscoveredDevice => ({\n id,\n transport: TRANSPORT_IDENTIFIER,\n name: deviceModelId,\n deviceModel: deviceModelDataSource.getDeviceModel({\n id: deviceModelId,\n }),\n});\n\nconst mockDiscoveredDevice1 = makeMockTransportDiscoveredDevice(\n \"1\",\n DeviceModelId.NANO_S,\n);\nconst mockDiscoveredDevice2 = makeMockTransportDiscoveredDevice(\n \"2\",\n DeviceModelId.NANO_X,\n);\nconst mockDiscoveredDevice3 = makeMockTransportDiscoveredDevice(\n \"3\",\n DeviceModelId.NANO_S,\n);\n\ndescribe(\"RNHidTransport\", () => {\n let discoveredDevicesSubject: Subject<Array<TransportDiscoveredDevice>>;\n let deviceDisconnectedSubject: Subject<InternalDeviceDisconnected>;\n let transportLogsSubject: Subject<LogParams>;\n let nativeModuleWrapper: NativeModuleWrapper;\n const fakeLogger: LoggerPublisherService = {\n error: vi.fn(),\n warn: vi.fn(),\n info: vi.fn(),\n debug: vi.fn(),\n subscribers: [],\n };\n const loggerServiceFactory = vi.fn(() => fakeLogger);\n\n const wrapperStartScan = vi.fn();\n const wrapperStopScan = vi.fn();\n const wrapperConnectDevice = vi.fn();\n const wrapperDisconnectDevice = vi.fn();\n const wrapperSendApdu = vi.fn();\n\n beforeEach(() => {\n discoveredDevicesSubject = new Subject();\n deviceDisconnectedSubject = new Subject();\n transportLogsSubject = new Subject();\n\n vi.clearAllMocks();\n\n wrapperStartScan.mockResolvedValue(undefined);\n wrapperStopScan.mockResolvedValue(undefined);\n wrapperConnectDevice.mockResolvedValue(undefined);\n wrapperDisconnectDevice.mockResolvedValue(undefined);\n wrapperSendApdu.mockResolvedValue(undefined);\n\n nativeModuleWrapper = {\n startScan: wrapperStartScan,\n stopScan: wrapperStopScan,\n subscribeToDiscoveredDevicesEvents: vi.fn(() =>\n discoveredDevicesSubject.asObservable(),\n ),\n subscribeToDeviceDisconnectedEvents: vi.fn(() =>\n deviceDisconnectedSubject.asObservable(),\n ),\n subscribeToTransportLogs: vi.fn(() =>\n transportLogsSubject.asObservable(),\n ),\n connectDevice: wrapperConnectDevice,\n disconnectDevice: wrapperDisconnectDevice,\n sendApdu: wrapperSendApdu,\n };\n });\n\n test(\"getIdentifier returns TRANSPORT_IDENTIFIER\", () => {\n // given\n const transport = new RNHidTransport(\n true,\n nativeModuleWrapper,\n loggerServiceFactory,\n );\n // then\n expect(transport.getIdentifier()).toBe(TRANSPORT_IDENTIFIER);\n });\n\n describe(\"isSupported returns the provided support flag\", () => {\n test(\"supported\", () => {\n // given\n const transportTrue = new RNHidTransport(\n true, // when\n nativeModuleWrapper,\n loggerServiceFactory,\n );\n // then\n expect(transportTrue.isSupported()).toBe(true);\n });\n\n test(\"not supported\", () => {\n // given\n const transportFalse = new RNHidTransport(\n false, // when\n nativeModuleWrapper,\n loggerServiceFactory,\n );\n // then\n expect(transportFalse.isSupported()).toBe(false);\n });\n });\n\n test(\"constructor subscribes to transport logs and calls logger methods\", () => {\n // given\n new RNHidTransport(true, nativeModuleWrapper, loggerServiceFactory);\n\n // when\n const logEvent: LogParams = [\n LogLevel.Info,\n \"Test message\",\n {\n tag: \"TestTag\",\n data: { key: \"value\" },\n timestamp: 123456789,\n },\n ];\n transportLogsSubject.next(logEvent);\n\n // then\n expect(fakeLogger.info).toHaveBeenCalledWith(\"Test message\", {\n tag: \"TestTag\",\n data: { key: \"value\" },\n timestamp: 123456789,\n });\n });\n\n describe(\"startDiscovering\", () => {\n it(\"calls startScan\", () => {\n // given\n const transport = new RNHidTransport(\n true,\n nativeModuleWrapper,\n loggerServiceFactory,\n );\n\n // when\n transport.startDiscovering().subscribe();\n\n // then\n expect(wrapperStartScan).toHaveBeenCalled();\n });\n\n it(\"emits new discovered devices\", () => {\n return new Promise<void>((resolve, reject) => {\n // given\n const transport = new RNHidTransport(\n true,\n nativeModuleWrapper,\n loggerServiceFactory,\n );\n const discoveredDevices: TransportDiscoveredDevice[] = [];\n\n // when\n transport.startDiscovering().subscribe({\n next: (device) => {\n discoveredDevices.push(device);\n if (discoveredDevices.length === 3) {\n try {\n // then\n expect(discoveredDevices).toEqual([\n mockDiscoveredDevice1,\n mockDiscoveredDevice2,\n mockDiscoveredDevice3,\n ]);\n resolve();\n } catch (e) {\n reject(e);\n }\n }\n },\n error: reject,\n });\n // Simulate getObservableOfArraysNewItems behavior:\n // emit first array with one device then the subsequent arrays with a new device.\n discoveredDevicesSubject.next([mockDiscoveredDevice1]);\n discoveredDevicesSubject.next([\n mockDiscoveredDevice1,\n mockDiscoveredDevice2,\n ]);\n discoveredDevicesSubject.next([\n mockDiscoveredDevice1,\n mockDiscoveredDevice2,\n mockDiscoveredDevice3,\n ]);\n });\n });\n\n it(\"propagates startScan error\", () => {\n return new Promise<void>((resolve, reject) => {\n // given\n const transport = new RNHidTransport(\n true,\n nativeModuleWrapper,\n loggerServiceFactory,\n );\n\n // when\n const error = new Error(\"scan failed\");\n wrapperStartScan.mockRejectedValueOnce(error);\n transport.startDiscovering().subscribe({\n next: () => {},\n error: (err) => {\n try {\n // then\n expect(err).toBe(error);\n resolve();\n } catch (e) {\n reject(e);\n }\n },\n });\n });\n });\n });\n\n describe(\"stopDiscovering\", () => {\n it(\"calls stopScan\", async () => {\n // given\n const transport = new RNHidTransport(\n true,\n nativeModuleWrapper,\n loggerServiceFactory,\n );\n\n // when\n await transport.stopDiscovering();\n\n // then\n expect(nativeModuleWrapper.stopScan).toHaveBeenCalled();\n });\n\n it(\"logs error when stopScan fails\", async () => {\n // given\n const transport = new RNHidTransport(\n true,\n nativeModuleWrapper,\n loggerServiceFactory,\n );\n\n // when\n const error = new Error(\"stop failed\");\n wrapperStopScan.mockRejectedValueOnce(error);\n\n // then\n await transport.stopDiscovering();\n expect(fakeLogger.error).toHaveBeenCalledWith(\n \"stopDiscovering error\",\n error,\n );\n });\n });\n\n describe(\"listenToKnownDevices\", () => {\n it(\"emits arrays of discovered devices\", () => {\n return new Promise<void>((resolve, reject) => {\n // given\n const transport = new RNHidTransport(\n true,\n nativeModuleWrapper,\n loggerServiceFactory,\n );\n const observedEvents: Array<Array<TransportDiscoveredDevice>> = [];\n\n // when\n transport.listenToAvailableDevices().subscribe({\n next: (devices) => {\n observedEvents.push(devices);\n if (observedEvents.length === 2) {\n try {\n // then\n expect(observedEvents).toEqual([\n [mockDiscoveredDevice1, mockDiscoveredDevice2],\n [mockDiscoveredDevice1, mockDiscoveredDevice3],\n ]);\n resolve();\n } catch (e) {\n reject(e);\n }\n }\n },\n complete: () => {\n reject(\"should not complete\");\n },\n error: reject,\n });\n\n discoveredDevicesSubject.next([\n mockDiscoveredDevice1,\n mockDiscoveredDevice2,\n ]);\n discoveredDevicesSubject.next([\n mockDiscoveredDevice1,\n mockDiscoveredDevice3,\n ]);\n });\n });\n\n it(\"propagates startScan error\", () => {\n return new Promise<void>((resolve, reject) => {\n // given\n const transport = new RNHidTransport(\n true,\n nativeModuleWrapper,\n loggerServiceFactory,\n );\n\n // when\n const error = new Error(\"start scan failed\");\n wrapperStartScan.mockRejectedValueOnce(error);\n transport.listenToAvailableDevices().subscribe({\n error: (err) => {\n // then\n try {\n expect(err).toBe(error);\n resolve();\n } catch (e) {\n reject(e);\n }\n },\n });\n });\n });\n\n it(\"calls stopScan on unsubscribe\", () => {\n // given\n const transport = new RNHidTransport(\n true,\n nativeModuleWrapper,\n loggerServiceFactory,\n );\n\n // when\n const error = new Error(\"stop scan failed\");\n wrapperStopScan.mockRejectedValueOnce(error);\n const subscription = transport.listenToAvailableDevices().subscribe({});\n subscription.unsubscribe();\n\n expect(wrapperStopScan).toHaveBeenCalled();\n });\n });\n\n describe(\"connect\", () => {\n describe(\"connection successful\", () => {\n it(\"should return a Right(TransportConnectedDevice) on successful connection\", async () => {\n // given\n const fakeDeviceModel = { model: \"TestModel\" };\n const sessionId = \"session123\";\n wrapperConnectDevice.mockResolvedValueOnce(\n Right({ sessionId, transportDeviceModel: fakeDeviceModel }),\n );\n const transport = new RNHidTransport(\n true,\n nativeModuleWrapper,\n loggerServiceFactory,\n );\n\n // when\n const result = await transport.connect({\n deviceId: sessionId,\n onDisconnect: vi.fn(),\n });\n\n // then\n expect(result.isRight()).toBe(true);\n const connectedDevice = result.extract() as TransportConnectedDevice;\n expect(connectedDevice).toBeInstanceOf(TransportConnectedDevice);\n expect(connectedDevice.id).toBe(sessionId);\n expect(connectedDevice.deviceModel).toEqual(fakeDeviceModel);\n expect(connectedDevice.transport).toBe(TRANSPORT_IDENTIFIER);\n expect(connectedDevice.type).toBe(\"USB\");\n });\n\n test(\"should trigger onDisconnect when a matching disconnect event is emitted\", async () => {\n // given\n const fakeDeviceModel = { model: \"TestModel\" };\n const sessionId = \"session123\";\n wrapperConnectDevice.mockResolvedValueOnce(\n Right({ sessionId, transportDeviceModel: fakeDeviceModel }),\n );\n const transport = new RNHidTransport(\n true,\n nativeModuleWrapper,\n loggerServiceFactory,\n );\n const onDisconnect = vi.fn();\n\n // when\n await transport.connect({\n deviceId: sessionId,\n onDisconnect,\n });\n deviceDisconnectedSubject.next({ sessionId });\n\n // then\n expect(onDisconnect).toHaveBeenCalledWith(sessionId);\n });\n\n test(\"should handle sendApdu success (Right)\", async () => {\n // given\n const fakeDeviceModel = { model: \"TestModel\" };\n const sessionId = \"session123\";\n wrapperConnectDevice.mockResolvedValueOnce(\n Right({ sessionId, transportDeviceModel: fakeDeviceModel }),\n );\n const transport = new RNHidTransport(\n true,\n nativeModuleWrapper,\n loggerServiceFactory,\n );\n const result = await transport.connect({\n deviceId: sessionId,\n onDisconnect: vi.fn(),\n });\n const connectedDevice = result.extract() as TransportConnectedDevice;\n\n // when\n wrapperSendApdu.mockResolvedValueOnce(Right(\"apduResponse\"));\n const apdu = new Uint8Array([1, 2, 3]);\n const apduResult = await connectedDevice.sendApdu(apdu);\n\n // then\n expect(nativeModuleWrapper.sendApdu).toHaveBeenCalledWith(\n sessionId,\n apdu,\n );\n expect(apduResult).toEqual(Right(\"apduResponse\"));\n });\n\n test(\"should handle sendApdu failure (Left)\", async () => {\n // given\n const fakeDeviceModel = { model: \"TestModel\" };\n const sessionId = \"session123\";\n wrapperConnectDevice.mockResolvedValueOnce(\n Right({ sessionId, transportDeviceModel: fakeDeviceModel }),\n );\n const transport = new RNHidTransport(\n true,\n nativeModuleWrapper,\n loggerServiceFactory,\n );\n const result = await transport.connect({\n deviceId: sessionId,\n onDisconnect: vi.fn(),\n });\n const connectedDevice = result.extract() as TransportConnectedDevice;\n\n // when\n wrapperSendApdu.mockResolvedValueOnce(Left(\"some error\"));\n const apdu = new Uint8Array([1, 2, 3]);\n const apduResult = await connectedDevice.sendApdu(apdu);\n\n // then\n expect(apduResult).toEqual(Left(\"some error\"));\n });\n\n test(\"should handle sendApdu rejection\", async () => {\n // given\n const fakeDeviceModel = { model: \"TestModel\" };\n const sessionId = \"session123\";\n wrapperConnectDevice.mockResolvedValueOnce(\n Right({ sessionId, transportDeviceModel: fakeDeviceModel }),\n );\n const transport = new RNHidTransport(\n true,\n nativeModuleWrapper,\n loggerServiceFactory,\n );\n const result = await transport.connect({\n deviceId: sessionId,\n onDisconnect: vi.fn(),\n });\n const connectedDevice = result.extract() as TransportConnectedDevice;\n const apduError = new Error(\"apdu failed\");\n\n // when\n wrapperSendApdu.mockRejectedValueOnce(apduError);\n const apduResult = await connectedDevice.sendApdu(new Uint8Array([]));\n\n // then\n expect(apduResult).toEqual(Left(new SendApduError(apduError)));\n });\n });\n\n describe(\"connection failure\", () => {\n test(\"should return a Left when nativeModuleWrapper.connectDevice resolves a Left\", async () => {\n // given\n const transport = new RNHidTransport(\n true,\n nativeModuleWrapper,\n loggerServiceFactory,\n );\n\n // when\n const errorResult = Left(\n new OpeningConnectionError(\"connection failed\"),\n );\n wrapperConnectDevice.mockResolvedValueOnce(errorResult);\n const result = await transport.connect({\n deviceId: \"any\",\n onDisconnect: vi.fn(),\n });\n\n // then\n expect(result).toEqual(errorResult);\n });\n\n test(\"should return a Left when nativeModuleWrapper.connectDevice rejects\", async () => {\n // given\n const error = new Error(\"connection failed\");\n const transport = new RNHidTransport(\n true,\n nativeModuleWrapper,\n loggerServiceFactory,\n );\n\n // when\n wrapperConnectDevice.mockRejectedValueOnce(error);\n const result = await transport.connect({\n deviceId: \"any\",\n onDisconnect: vi.fn(),\n });\n\n // then\n expect(result).toEqual(Left(new OpeningConnectionError(error)));\n });\n });\n });\n\n describe(\"disconnect\", () => {\n it(\"returns Right on successful disconnect\", async () => {\n // given\n const transport = new RNHidTransport(\n true,\n nativeModuleWrapper,\n loggerServiceFactory,\n );\n\n // when\n const result = await transport.disconnect({\n connectedDevice: { id: \"session789\" } as TransportConnectedDevice,\n });\n\n // then\n expect(nativeModuleWrapper.disconnectDevice).toHaveBeenCalledWith(\n \"session789\",\n );\n expect(result).toEqual(Right(undefined));\n });\n\n it(\"returns Left on disconnect failure\", async () => {\n // given\n const transport = new RNHidTransport(\n true,\n nativeModuleWrapper,\n loggerServiceFactory,\n );\n\n // when\n const error = new Error(\"disconnect failed\");\n wrapperDisconnectDevice.mockRejectedValueOnce(error);\n const result = await transport.disconnect({\n connectedDevice: { id: \"session000\" } as TransportConnectedDevice,\n });\n\n // then\n expect(result).toEqual(Left(new DisconnectError(error)));\n });\n });\n});\n"],
5
- "mappings": "AAAA,OACE,iBAAAA,EACA,mBAAAC,EAEA,YAAAC,EAEA,0BAAAC,EACA,+BAAAC,EACA,4BAAAC,MAEK,kCACP,OAAS,QAAAC,EAAM,SAAAC,MAAa,mBAC5B,OAAS,WAAAC,MAAe,OAExB,OAAS,wBAAAC,MAA4B,0CAErC,OAAS,iBAAAC,MAAqB,WAE9B,OAAS,kBAAAC,MAAsB,mBAG/B,MAAMC,EAAwB,IAAIR,EAE5BS,EAAoC,CACxCC,EACAC,KAC+B,CAC/B,GAAAD,EACA,UAAWL,EACX,KAAMM,EACN,YAAaH,EAAsB,eAAe,CAChD,GAAIG,CACN,CAAC,CACH,GAEMC,EAAwBH,EAC5B,IACAb,EAAc,MAChB,EACMiB,EAAwBJ,EAC5B,IACAb,EAAc,MAChB,EACMkB,EAAwBL,EAC5B,IACAb,EAAc,MAChB,EAEA,SAAS,iBAAkB,IAAM,CAC/B,IAAImB,EACAC,EACAC,EACAC,EACJ,MAAMC,EAAqC,CACzC,MAAO,GAAG,GAAG,EACb,KAAM,GAAG,GAAG,EACZ,KAAM,GAAG,GAAG,EACZ,MAAO,GAAG,GAAG,EACb,YAAa,CAAC,CAChB,EACMC,EAAuB,GAAG,GAAG,IAAMD,CAAU,EAE7CE,EAAmB,GAAG,GAAG,EACzBC,EAAkB,GAAG,GAAG,EACxBC,EAAuB,GAAG,GAAG,EAC7BC,EAA0B,GAAG,GAAG,EAChCC,EAAkB,GAAG,GAAG,EAE9B,WAAW,IAAM,CACfV,EAA2B,IAAIX,EAC/BY,EAA4B,IAAIZ,EAChCa,EAAuB,IAAIb,EAE3B,GAAG,cAAc,EAEjBiB,EAAiB,kBAAkB,MAAS,EAC5CC,EAAgB,kBAAkB,MAAS,EAC3CC,EAAqB,kBAAkB,MAAS,EAChDC,EAAwB,kBAAkB,MAAS,EACnDC,EAAgB,kBAAkB,MAAS,EAE3CP,EAAsB,CACpB,UAAWG,EACX,SAAUC,EACV,mCAAoC,GAAG,GAAG,IACxCP,EAAyB,aAAa,CACxC,EACA,oCAAqC,GAAG,GAAG,IACzCC,EAA0B,aAAa,CACzC,EACA,yBAA0B,GAAG,GAAG,IAC9BC,EAAqB,aAAa,CACpC,EACA,cAAeM,EACf,iBAAkBC,EAClB,SAAUC,CACZ,CACF,CAAC,EAED,KAAK,6CAA8C,IAAM,CAEvD,MAAMC,EAAY,IAAInB,EACpB,GACAW,EACAE,CACF,EAEA,OAAOM,EAAU,cAAc,CAAC,EAAE,KAAKrB,CAAoB,CAC7D,CAAC,EAED,SAAS,gDAAiD,IAAM,CAC9D,KAAK,YAAa,IAAM,CAEtB,MAAMsB,EAAgB,IAAIpB,EACxB,GACAW,EACAE,CACF,EAEA,OAAOO,EAAc,YAAY,CAAC,EAAE,KAAK,EAAI,CAC/C,CAAC,EAED,KAAK,gBAAiB,IAAM,CAE1B,MAAMC,EAAiB,IAAIrB,EACzB,GACAW,EACAE,CACF,EAEA,OAAOQ,EAAe,YAAY,CAAC,EAAE,KAAK,EAAK,CACjD,CAAC,CACH,CAAC,EAED,KAAK,oEAAqE,IAAM,CAE9E,IAAIrB,EAAe,GAAMW,EAAqBE,CAAoB,EAGlE,MAAMS,EAAsB,CAC1B/B,EAAS,KACT,eACA,CACE,IAAK,UACL,KAAM,CAAE,IAAK,OAAQ,EACrB,UAAW,SACb,CACF,EACAmB,EAAqB,KAAKY,CAAQ,EAGlC,OAAOV,EAAW,IAAI,EAAE,qBAAqB,eAAgB,CAC3D,IAAK,UACL,KAAM,CAAE,IAAK,OAAQ,EACrB,UAAW,SACb,CAAC,CACH,CAAC,EAED,SAAS,mBAAoB,IAAM,CACjC,GAAG,kBAAmB,IAAM,CAER,IAAIZ,EACpB,GACAW,EACAE,CACF,EAGU,iBAAiB,EAAE,UAAU,EAGvC,OAAOC,CAAgB,EAAE,iBAAiB,CAC5C,CAAC,EAED,GAAG,+BAAgC,IAC1B,IAAI,QAAc,CAACS,EAASC,IAAW,CAE5C,MAAML,EAAY,IAAInB,EACpB,GACAW,EACAE,CACF,EACMY,EAAiD,CAAC,EAGxDN,EAAU,iBAAiB,EAAE,UAAU,CACrC,KAAOO,GAAW,CAEhB,GADAD,EAAkB,KAAKC,CAAM,EACzBD,EAAkB,SAAW,EAC/B,GAAI,CAEF,OAAOA,CAAiB,EAAE,QAAQ,CAChCpB,EACAC,EACAC,CACF,CAAC,EACDgB,EAAQ,CACV,OAASI,EAAG,CACVH,EAAOG,CAAC,CACV,CAEJ,EACA,MAAOH,CACT,CAAC,EAGDhB,EAAyB,KAAK,CAACH,CAAqB,CAAC,EACrDG,EAAyB,KAAK,CAC5BH,EACAC,CACF,CAAC,EACDE,EAAyB,KAAK,CAC5BH,EACAC,EACAC,CACF,CAAC,CACH,CAAC,CACF,EAED,GAAG,6BAA8B,IACxB,IAAI,QAAc,CAACgB,EAASC,IAAW,CAE5C,MAAML,EAAY,IAAInB,EACpB,GACAW,EACAE,CACF,EAGMe,EAAQ,IAAI,MAAM,aAAa,EACrCd,EAAiB,sBAAsBc,CAAK,EAC5CT,EAAU,iBAAiB,EAAE,UAAU,CACrC,KAAM,IAAM,CAAC,EACb,MAAQU,GAAQ,CACd,GAAI,CAEF,OAAOA,CAAG,EAAE,KAAKD,CAAK,EACtBL,EAAQ,CACV,OAASI,EAAG,CACVH,EAAOG,CAAC,CACV,CACF,CACF,CAAC,CACH,CAAC,CACF,CACH,CAAC,EAED,SAAS,kBAAmB,IAAM,CAChC,GAAG,iBAAkB,SAAY,CAS/B,MAPkB,IAAI3B,EACpB,GACAW,EACAE,CACF,EAGgB,gBAAgB,EAGhC,OAAOF,EAAoB,QAAQ,EAAE,iBAAiB,CACxD,CAAC,EAED,GAAG,iCAAkC,SAAY,CAE/C,MAAMQ,EAAY,IAAInB,EACpB,GACAW,EACAE,CACF,EAGMe,EAAQ,IAAI,MAAM,aAAa,EACrCb,EAAgB,sBAAsBa,CAAK,EAG3C,MAAMT,EAAU,gBAAgB,EAChC,OAAOP,EAAW,KAAK,EAAE,qBACvB,wBACAgB,CACF,CACF,CAAC,CACH,CAAC,EAED,SAAS,uBAAwB,IAAM,CACrC,GAAG,qCAAsC,IAChC,IAAI,QAAc,CAACL,EAASC,IAAW,CAE5C,MAAML,EAAY,IAAInB,EACpB,GACAW,EACAE,CACF,EACMiB,EAA0D,CAAC,EAGjEX,EAAU,yBAAyB,EAAE,UAAU,CAC7C,KAAOY,GAAY,CAEjB,GADAD,EAAe,KAAKC,CAAO,EACvBD,EAAe,SAAW,EAC5B,GAAI,CAEF,OAAOA,CAAc,EAAE,QAAQ,CAC7B,CAACzB,EAAuBC,CAAqB,EAC7C,CAACD,EAAuBE,CAAqB,CAC/C,CAAC,EACDgB,EAAQ,CACV,OAASI,EAAG,CACVH,EAAOG,CAAC,CACV,CAEJ,EACA,SAAU,IAAM,CACdH,EAAO,qBAAqB,CAC9B,EACA,MAAOA,CACT,CAAC,EAEDhB,EAAyB,KAAK,CAC5BH,EACAC,CACF,CAAC,EACDE,EAAyB,KAAK,CAC5BH,EACAE,CACF,CAAC,CACH,CAAC,CACF,EAED,GAAG,6BAA8B,IACxB,IAAI,QAAc,CAACgB,EAASC,IAAW,CAE5C,MAAML,EAAY,IAAInB,EACpB,GACAW,EACAE,CACF,EAGMe,EAAQ,IAAI,MAAM,mBAAmB,EAC3Cd,EAAiB,sBAAsBc,CAAK,EAC5CT,EAAU,yBAAyB,EAAE,UAAU,CAC7C,MAAQU,GAAQ,CAEd,GAAI,CACF,OAAOA,CAAG,EAAE,KAAKD,CAAK,EACtBL,EAAQ,CACV,OAASI,EAAG,CACVH,EAAOG,CAAC,CACV,CACF,CACF,CAAC,CACH,CAAC,CACF,EAED,GAAG,gCAAiC,IAAM,CAExC,MAAMR,EAAY,IAAInB,EACpB,GACAW,EACAE,CACF,EAGMe,EAAQ,IAAI,MAAM,kBAAkB,EAC1Cb,EAAgB,sBAAsBa,CAAK,EACtBT,EAAU,yBAAyB,EAAE,UAAU,CAAC,CAAC,EACzD,YAAY,EAEzB,OAAOJ,CAAe,EAAE,iBAAiB,CAC3C,CAAC,CACH,CAAC,EAED,SAAS,UAAW,IAAM,CACxB,SAAS,wBAAyB,IAAM,CACtC,GAAG,2EAA4E,SAAY,CAEzF,MAAMiB,EAAkB,CAAE,MAAO,WAAY,EACvCC,EAAY,aAClBjB,EAAqB,sBACnBpB,EAAM,CAAE,UAAAqC,EAAW,qBAAsBD,CAAgB,CAAC,CAC5D,EAQA,MAAME,EAAS,MAPG,IAAIlC,EACpB,GACAW,EACAE,CACF,EAG+B,QAAQ,CACrC,SAAUoB,EACV,aAAc,GAAG,GAAG,CACtB,CAAC,EAGD,OAAOC,EAAO,QAAQ,CAAC,EAAE,KAAK,EAAI,EAClC,MAAMC,EAAkBD,EAAO,QAAQ,EACvC,OAAOC,CAAe,EAAE,eAAezC,CAAwB,EAC/D,OAAOyC,EAAgB,EAAE,EAAE,KAAKF,CAAS,EACzC,OAAOE,EAAgB,WAAW,EAAE,QAAQH,CAAe,EAC3D,OAAOG,EAAgB,SAAS,EAAE,KAAKrC,CAAoB,EAC3D,OAAOqC,EAAgB,IAAI,EAAE,KAAK,KAAK,CACzC,CAAC,EAED,KAAK,0EAA2E,SAAY,CAE1F,MAAMH,EAAkB,CAAE,MAAO,WAAY,EACvCC,EAAY,aAClBjB,EAAqB,sBACnBpB,EAAM,CAAE,UAAAqC,EAAW,qBAAsBD,CAAgB,CAAC,CAC5D,EACA,MAAMb,EAAY,IAAInB,EACpB,GACAW,EACAE,CACF,EACMuB,EAAe,GAAG,GAAG,EAG3B,MAAMjB,EAAU,QAAQ,CACtB,SAAUc,EACV,aAAAG,CACF,CAAC,EACD3B,EAA0B,KAAK,CAAE,UAAAwB,CAAU,CAAC,EAG5C,OAAOG,CAAY,EAAE,qBAAqBH,CAAS,CACrD,CAAC,EAED,KAAK,yCAA0C,SAAY,CAEzD,MAAMD,EAAkB,CAAE,MAAO,WAAY,EACvCC,EAAY,aAClBjB,EAAqB,sBACnBpB,EAAM,CAAE,UAAAqC,EAAW,qBAAsBD,CAAgB,CAAC,CAC5D,EAUA,MAAMG,GAJS,MALG,IAAInC,EACpB,GACAW,EACAE,CACF,EAC+B,QAAQ,CACrC,SAAUoB,EACV,aAAc,GAAG,GAAG,CACtB,CAAC,GAC8B,QAAQ,EAGvCf,EAAgB,sBAAsBtB,EAAM,cAAc,CAAC,EAC3D,MAAMyC,EAAO,IAAI,WAAW,CAAC,EAAG,EAAG,CAAC,CAAC,EAC/BC,EAAa,MAAMH,EAAgB,SAASE,CAAI,EAGtD,OAAO1B,EAAoB,QAAQ,EAAE,qBACnCsB,EACAI,CACF,EACA,OAAOC,CAAU,EAAE,QAAQ1C,EAAM,cAAc,CAAC,CAClD,CAAC,EAED,KAAK,wCAAyC,SAAY,CAExD,MAAMoC,EAAkB,CAAE,MAAO,WAAY,EACvCC,EAAY,aAClBjB,EAAqB,sBACnBpB,EAAM,CAAE,UAAAqC,EAAW,qBAAsBD,CAAgB,CAAC,CAC5D,EAUA,MAAMG,GAJS,MALG,IAAInC,EACpB,GACAW,EACAE,CACF,EAC+B,QAAQ,CACrC,SAAUoB,EACV,aAAc,GAAG,GAAG,CACtB,CAAC,GAC8B,QAAQ,EAGvCf,EAAgB,sBAAsBvB,EAAK,YAAY,CAAC,EACxD,MAAM0C,EAAO,IAAI,WAAW,CAAC,EAAG,EAAG,CAAC,CAAC,EAC/BC,EAAa,MAAMH,EAAgB,SAASE,CAAI,EAGtD,OAAOC,CAAU,EAAE,QAAQ3C,EAAK,YAAY,CAAC,CAC/C,CAAC,EAED,KAAK,mCAAoC,SAAY,CAEnD,MAAMqC,EAAkB,CAAE,MAAO,WAAY,EACvCC,EAAY,aAClBjB,EAAqB,sBACnBpB,EAAM,CAAE,UAAAqC,EAAW,qBAAsBD,CAAgB,CAAC,CAC5D,EAUA,MAAMG,GAJS,MALG,IAAInC,EACpB,GACAW,EACAE,CACF,EAC+B,QAAQ,CACrC,SAAUoB,EACV,aAAc,GAAG,GAAG,CACtB,CAAC,GAC8B,QAAQ,EACjCM,EAAY,IAAI,MAAM,aAAa,EAGzCrB,EAAgB,sBAAsBqB,CAAS,EAC/C,MAAMD,EAAa,MAAMH,EAAgB,SAAS,IAAI,WAAW,CAAC,CAAC,CAAC,EAGpE,OAAOG,CAAU,EAAE,QAAQ3C,EAAK,IAAII,EAAcwC,CAAS,CAAC,CAAC,CAC/D,CAAC,CACH,CAAC,EAED,SAAS,qBAAsB,IAAM,CACnC,KAAK,8EAA+E,SAAY,CAE9F,MAAMpB,EAAY,IAAInB,EACpB,GACAW,EACAE,CACF,EAGM2B,EAAc7C,EAClB,IAAIH,EAAuB,mBAAmB,CAChD,EACAwB,EAAqB,sBAAsBwB,CAAW,EACtD,MAAMN,EAAS,MAAMf,EAAU,QAAQ,CACrC,SAAU,MACV,aAAc,GAAG,GAAG,CACtB,CAAC,EAGD,OAAOe,CAAM,EAAE,QAAQM,CAAW,CACpC,CAAC,EAED,KAAK,sEAAuE,SAAY,CAEtF,MAAMZ,EAAQ,IAAI,MAAM,mBAAmB,EACrCT,EAAY,IAAInB,EACpB,GACAW,EACAE,CACF,EAGAG,EAAqB,sBAAsBY,CAAK,EAChD,MAAMM,EAAS,MAAMf,EAAU,QAAQ,CACrC,SAAU,MACV,aAAc,GAAG,GAAG,CACtB,CAAC,EAGD,OAAOe,CAAM,EAAE,QAAQvC,EAAK,IAAIH,EAAuBoC,CAAK,CAAC,CAAC,CAChE,CAAC,CACH,CAAC,CACH,CAAC,EAED,SAAS,aAAc,IAAM,CAC3B,GAAG,yCAA0C,SAAY,CASvD,MAAMM,EAAS,MAPG,IAAIlC,EACpB,GACAW,EACAE,CACF,EAG+B,WAAW,CACxC,gBAAiB,CAAE,GAAI,YAAa,CACtC,CAAC,EAGD,OAAOF,EAAoB,gBAAgB,EAAE,qBAC3C,YACF,EACA,OAAOuB,CAAM,EAAE,QAAQtC,EAAM,MAAS,CAAC,CACzC,CAAC,EAED,GAAG,qCAAsC,SAAY,CAEnD,MAAMuB,EAAY,IAAInB,EACpB,GACAW,EACAE,CACF,EAGMe,EAAQ,IAAI,MAAM,mBAAmB,EAC3CX,EAAwB,sBAAsBW,CAAK,EACnD,MAAMM,EAAS,MAAMf,EAAU,WAAW,CACxC,gBAAiB,CAAE,GAAI,YAAa,CACtC,CAAC,EAGD,OAAOe,CAAM,EAAE,QAAQvC,EAAK,IAAIL,EAAgBsC,CAAK,CAAC,CAAC,CACzD,CAAC,CACH,CAAC,CACH,CAAC",
4
+ "sourcesContent": ["import {\n DeviceModelId,\n DisconnectError,\n type LoggerPublisherService,\n LogLevel,\n type LogParams,\n OpeningConnectionError,\n StaticDeviceModelDataSource,\n TransportConnectedDevice,\n type TransportDiscoveredDevice,\n} from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts/Either\";\nimport { Subject } from \"rxjs\";\n\nimport { TRANSPORT_IDENTIFIER } from \"@api/transport/rnHidTransportIdentifier\";\n\nimport { SendApduError } from \"./Errors\";\nimport { type NativeModuleWrapper } from \"./NativeModuleWrapper\";\nimport { RNHidTransport } from \"./RNHidTransport\";\nimport { type InternalDeviceDisconnected } from \"./types\";\n\nconst deviceModelDataSource = new StaticDeviceModelDataSource();\n\nconst makeMockTransportDiscoveredDevice = (\n id: string,\n deviceModelId: DeviceModelId,\n): TransportDiscoveredDevice => ({\n id,\n transport: TRANSPORT_IDENTIFIER,\n name: deviceModelId,\n deviceModel: deviceModelDataSource.getDeviceModel({\n id: deviceModelId,\n }),\n});\n\nconst mockDiscoveredDevice1 = makeMockTransportDiscoveredDevice(\n \"1\",\n DeviceModelId.NANO_S,\n);\nconst mockDiscoveredDevice2 = makeMockTransportDiscoveredDevice(\n \"2\",\n DeviceModelId.NANO_X,\n);\nconst mockDiscoveredDevice3 = makeMockTransportDiscoveredDevice(\n \"3\",\n DeviceModelId.NANO_S,\n);\n\ndescribe(\"RNHidTransport\", () => {\n let discoveredDevicesSubject: Subject<Array<TransportDiscoveredDevice>>;\n let deviceDisconnectedSubject: Subject<InternalDeviceDisconnected>;\n let transportLogsSubject: Subject<LogParams>;\n let nativeModuleWrapper: NativeModuleWrapper;\n const fakeLogger: LoggerPublisherService = {\n error: vi.fn(),\n warn: vi.fn(),\n info: vi.fn(),\n debug: vi.fn(),\n subscribers: [],\n };\n const loggerServiceFactory = vi.fn(() => fakeLogger);\n\n const wrapperStartScan = vi.fn();\n const wrapperStopScan = vi.fn();\n const wrapperConnectDevice = vi.fn();\n const wrapperDisconnectDevice = vi.fn();\n const wrapperSendApdu = vi.fn();\n\n beforeEach(() => {\n discoveredDevicesSubject = new Subject();\n deviceDisconnectedSubject = new Subject();\n transportLogsSubject = new Subject();\n\n vi.clearAllMocks();\n\n wrapperStartScan.mockResolvedValue(undefined);\n wrapperStopScan.mockResolvedValue(undefined);\n wrapperConnectDevice.mockResolvedValue(undefined);\n wrapperDisconnectDevice.mockResolvedValue(undefined);\n wrapperSendApdu.mockResolvedValue(undefined);\n\n nativeModuleWrapper = {\n startScan: wrapperStartScan,\n stopScan: wrapperStopScan,\n subscribeToDiscoveredDevicesEvents: vi.fn(() =>\n discoveredDevicesSubject.asObservable(),\n ),\n subscribeToDeviceDisconnectedEvents: vi.fn(() =>\n deviceDisconnectedSubject.asObservable(),\n ),\n subscribeToTransportLogs: vi.fn(() =>\n transportLogsSubject.asObservable(),\n ),\n connectDevice: wrapperConnectDevice,\n disconnectDevice: wrapperDisconnectDevice,\n sendApdu: wrapperSendApdu,\n };\n });\n\n test(\"getIdentifier returns TRANSPORT_IDENTIFIER\", () => {\n // given\n const transport = new RNHidTransport(\n true,\n nativeModuleWrapper,\n loggerServiceFactory,\n );\n // then\n expect(transport.getIdentifier()).toBe(TRANSPORT_IDENTIFIER);\n });\n\n describe(\"isSupported returns the provided support flag\", () => {\n test(\"supported\", () => {\n // given\n const transportTrue = new RNHidTransport(\n true, // when\n nativeModuleWrapper,\n loggerServiceFactory,\n );\n // then\n expect(transportTrue.isSupported()).toBe(true);\n });\n\n test(\"not supported\", () => {\n // given\n const transportFalse = new RNHidTransport(\n false, // when\n nativeModuleWrapper,\n loggerServiceFactory,\n );\n // then\n expect(transportFalse.isSupported()).toBe(false);\n });\n });\n\n test(\"constructor subscribes to transport logs and calls logger methods\", () => {\n // given\n new RNHidTransport(true, nativeModuleWrapper, loggerServiceFactory);\n\n // when\n const logEvent: LogParams = [\n LogLevel.Info,\n \"Test message\",\n {\n tag: \"TestTag\",\n data: { key: \"value\" },\n timestamp: 123456789,\n },\n ];\n transportLogsSubject.next(logEvent);\n\n // then\n expect(fakeLogger.info).toHaveBeenCalledWith(\"Test message\", {\n tag: \"TestTag\",\n data: { key: \"value\" },\n timestamp: 123456789,\n });\n });\n\n describe(\"startDiscovering\", () => {\n it(\"calls startScan\", () => {\n // given\n const transport = new RNHidTransport(\n true,\n nativeModuleWrapper,\n loggerServiceFactory,\n );\n\n // when\n transport.startDiscovering().subscribe();\n\n // then\n expect(wrapperStartScan).toHaveBeenCalled();\n });\n\n it(\"emits new discovered devices\", () => {\n return new Promise<void>((resolve, reject) => {\n // given\n const transport = new RNHidTransport(\n true,\n nativeModuleWrapper,\n loggerServiceFactory,\n );\n const discoveredDevices: TransportDiscoveredDevice[] = [];\n\n // when\n transport.startDiscovering().subscribe({\n next: (device) => {\n discoveredDevices.push(device);\n if (discoveredDevices.length === 3) {\n try {\n // then\n expect(discoveredDevices).toEqual([\n mockDiscoveredDevice1,\n mockDiscoveredDevice2,\n mockDiscoveredDevice3,\n ]);\n resolve();\n } catch (e) {\n reject(e);\n }\n }\n },\n error: reject,\n });\n // Simulate getObservableOfArraysNewItems behavior:\n // emit first array with one device then the subsequent arrays with a new device.\n discoveredDevicesSubject.next([mockDiscoveredDevice1]);\n discoveredDevicesSubject.next([\n mockDiscoveredDevice1,\n mockDiscoveredDevice2,\n ]);\n discoveredDevicesSubject.next([\n mockDiscoveredDevice1,\n mockDiscoveredDevice2,\n mockDiscoveredDevice3,\n ]);\n });\n });\n\n it(\"propagates startScan error\", () => {\n return new Promise<void>((resolve, reject) => {\n // given\n const transport = new RNHidTransport(\n true,\n nativeModuleWrapper,\n loggerServiceFactory,\n );\n\n // when\n const error = new Error(\"scan failed\");\n wrapperStartScan.mockRejectedValueOnce(error);\n transport.startDiscovering().subscribe({\n next: () => {},\n error: (err) => {\n try {\n // then\n expect(err).toBe(error);\n resolve();\n } catch (e) {\n reject(e);\n }\n },\n });\n });\n });\n });\n\n describe(\"stopDiscovering\", () => {\n it(\"calls stopScan\", async () => {\n // given\n const transport = new RNHidTransport(\n true,\n nativeModuleWrapper,\n loggerServiceFactory,\n );\n\n // when\n await transport.stopDiscovering();\n\n // then\n expect(nativeModuleWrapper.stopScan).toHaveBeenCalled();\n });\n\n it(\"logs error when stopScan fails\", async () => {\n // given\n const transport = new RNHidTransport(\n true,\n nativeModuleWrapper,\n loggerServiceFactory,\n );\n\n // when\n const error = new Error(\"stop failed\");\n wrapperStopScan.mockRejectedValueOnce(error);\n\n // then\n await transport.stopDiscovering();\n expect(fakeLogger.error).toHaveBeenCalledWith(\n \"stopDiscovering error\",\n error,\n );\n });\n });\n\n describe(\"listenToKnownDevices\", () => {\n it(\"emits arrays of discovered devices\", () => {\n return new Promise<void>((resolve, reject) => {\n // given\n const transport = new RNHidTransport(\n true,\n nativeModuleWrapper,\n loggerServiceFactory,\n );\n const observedEvents: Array<Array<TransportDiscoveredDevice>> = [];\n\n // when\n transport.listenToAvailableDevices().subscribe({\n next: (devices) => {\n observedEvents.push(devices);\n if (observedEvents.length === 2) {\n try {\n // then\n expect(observedEvents).toEqual([\n [mockDiscoveredDevice1, mockDiscoveredDevice2],\n [mockDiscoveredDevice1, mockDiscoveredDevice3],\n ]);\n resolve();\n } catch (e) {\n reject(e);\n }\n }\n },\n complete: () => {\n reject(\"should not complete\");\n },\n error: reject,\n });\n\n discoveredDevicesSubject.next([\n mockDiscoveredDevice1,\n mockDiscoveredDevice2,\n ]);\n discoveredDevicesSubject.next([\n mockDiscoveredDevice1,\n mockDiscoveredDevice3,\n ]);\n });\n });\n\n it(\"propagates startScan error\", () => {\n return new Promise<void>((resolve, reject) => {\n // given\n const transport = new RNHidTransport(\n true,\n nativeModuleWrapper,\n loggerServiceFactory,\n );\n\n // when\n const error = new Error(\"start scan failed\");\n wrapperStartScan.mockRejectedValueOnce(error);\n transport.listenToAvailableDevices().subscribe({\n error: (err) => {\n // then\n try {\n expect(err).toBe(error);\n resolve();\n } catch (e) {\n reject(e);\n }\n },\n });\n });\n });\n\n it(\"calls stopScan on unsubscribe\", () => {\n // given\n const transport = new RNHidTransport(\n true,\n nativeModuleWrapper,\n loggerServiceFactory,\n );\n\n // when\n const error = new Error(\"stop scan failed\");\n wrapperStopScan.mockRejectedValueOnce(error);\n const subscription = transport.listenToAvailableDevices().subscribe({});\n subscription.unsubscribe();\n\n expect(wrapperStopScan).toHaveBeenCalled();\n });\n });\n\n describe(\"connect\", () => {\n describe(\"connection successful\", () => {\n it(\"should return a Right(TransportConnectedDevice) on successful connection\", async () => {\n // given\n const fakeDeviceModel = { model: \"TestModel\" };\n const sessionId = \"session123\";\n wrapperConnectDevice.mockResolvedValueOnce(\n Right({ sessionId, transportDeviceModel: fakeDeviceModel }),\n );\n const transport = new RNHidTransport(\n true,\n nativeModuleWrapper,\n loggerServiceFactory,\n );\n\n // when\n const result = await transport.connect({\n deviceId: sessionId,\n onDisconnect: vi.fn(),\n });\n\n // then\n expect(result.isRight()).toBe(true);\n const connectedDevice = result.extract() as TransportConnectedDevice;\n expect(connectedDevice).toBeInstanceOf(TransportConnectedDevice);\n expect(connectedDevice.id).toBe(sessionId);\n expect(connectedDevice.deviceModel).toEqual(fakeDeviceModel);\n expect(connectedDevice.transport).toBe(TRANSPORT_IDENTIFIER);\n expect(connectedDevice.type).toBe(\"USB\");\n });\n\n test(\"should trigger onDisconnect when a matching disconnect event is emitted\", async () => {\n // given\n const fakeDeviceModel = { model: \"TestModel\" };\n const sessionId = \"session123\";\n wrapperConnectDevice.mockResolvedValueOnce(\n Right({ sessionId, transportDeviceModel: fakeDeviceModel }),\n );\n const transport = new RNHidTransport(\n true,\n nativeModuleWrapper,\n loggerServiceFactory,\n );\n const onDisconnect = vi.fn();\n\n // when\n await transport.connect({\n deviceId: sessionId,\n onDisconnect,\n });\n deviceDisconnectedSubject.next({ sessionId });\n\n // then\n expect(onDisconnect).toHaveBeenCalledWith(sessionId);\n });\n\n test(\"should handle sendApdu success (Right)\", async () => {\n // given\n const fakeDeviceModel = { model: \"TestModel\" };\n const sessionId = \"session123\";\n wrapperConnectDevice.mockResolvedValueOnce(\n Right({ sessionId, transportDeviceModel: fakeDeviceModel }),\n );\n const transport = new RNHidTransport(\n true,\n nativeModuleWrapper,\n loggerServiceFactory,\n );\n const result = await transport.connect({\n deviceId: sessionId,\n onDisconnect: vi.fn(),\n });\n const connectedDevice = result.extract() as TransportConnectedDevice;\n\n // when\n wrapperSendApdu.mockResolvedValueOnce(Right(\"apduResponse\"));\n const apdu = new Uint8Array([1, 2, 3]);\n const apduResult = await connectedDevice.sendApdu(apdu, false, 0);\n\n // then\n expect(nativeModuleWrapper.sendApdu).toHaveBeenCalledWith(\n sessionId,\n apdu,\n false,\n 0,\n );\n expect(apduResult).toEqual(Right(\"apduResponse\"));\n });\n\n test(\"should handle sendApdu failure (Left)\", async () => {\n // given\n const fakeDeviceModel = { model: \"TestModel\" };\n const sessionId = \"session123\";\n wrapperConnectDevice.mockResolvedValueOnce(\n Right({ sessionId, transportDeviceModel: fakeDeviceModel }),\n );\n const transport = new RNHidTransport(\n true,\n nativeModuleWrapper,\n loggerServiceFactory,\n );\n const result = await transport.connect({\n deviceId: sessionId,\n onDisconnect: vi.fn(),\n });\n const connectedDevice = result.extract() as TransportConnectedDevice;\n\n // when\n wrapperSendApdu.mockResolvedValueOnce(Left(\"some error\"));\n const apdu = new Uint8Array([1, 2, 3]);\n const apduResult = await connectedDevice.sendApdu(apdu);\n\n // then\n expect(apduResult).toEqual(Left(\"some error\"));\n });\n\n test(\"should handle sendApdu rejection\", async () => {\n // given\n const fakeDeviceModel = { model: \"TestModel\" };\n const sessionId = \"session123\";\n wrapperConnectDevice.mockResolvedValueOnce(\n Right({ sessionId, transportDeviceModel: fakeDeviceModel }),\n );\n const transport = new RNHidTransport(\n true,\n nativeModuleWrapper,\n loggerServiceFactory,\n );\n const result = await transport.connect({\n deviceId: sessionId,\n onDisconnect: vi.fn(),\n });\n const connectedDevice = result.extract() as TransportConnectedDevice;\n const apduError = new Error(\"apdu failed\");\n\n // when\n wrapperSendApdu.mockRejectedValueOnce(apduError);\n const apduResult = await connectedDevice.sendApdu(new Uint8Array([]));\n\n // then\n expect(apduResult).toEqual(Left(new SendApduError(apduError)));\n });\n });\n\n describe(\"connection failure\", () => {\n test(\"should return a Left when nativeModuleWrapper.connectDevice resolves a Left\", async () => {\n // given\n const transport = new RNHidTransport(\n true,\n nativeModuleWrapper,\n loggerServiceFactory,\n );\n\n // when\n const errorResult = Left(\n new OpeningConnectionError(\"connection failed\"),\n );\n wrapperConnectDevice.mockResolvedValueOnce(errorResult);\n const result = await transport.connect({\n deviceId: \"any\",\n onDisconnect: vi.fn(),\n });\n\n // then\n expect(result).toEqual(errorResult);\n });\n\n test(\"should return a Left when nativeModuleWrapper.connectDevice rejects\", async () => {\n // given\n const error = new Error(\"connection failed\");\n const transport = new RNHidTransport(\n true,\n nativeModuleWrapper,\n loggerServiceFactory,\n );\n\n // when\n wrapperConnectDevice.mockRejectedValueOnce(error);\n const result = await transport.connect({\n deviceId: \"any\",\n onDisconnect: vi.fn(),\n });\n\n // then\n expect(result).toEqual(Left(new OpeningConnectionError(error)));\n });\n });\n });\n\n describe(\"disconnect\", () => {\n it(\"returns Right on successful disconnect\", async () => {\n // given\n const transport = new RNHidTransport(\n true,\n nativeModuleWrapper,\n loggerServiceFactory,\n );\n\n // when\n const result = await transport.disconnect({\n connectedDevice: { id: \"session789\" } as TransportConnectedDevice,\n });\n\n // then\n expect(nativeModuleWrapper.disconnectDevice).toHaveBeenCalledWith(\n \"session789\",\n );\n expect(result).toEqual(Right(undefined));\n });\n\n it(\"returns Left on disconnect failure\", async () => {\n // given\n const transport = new RNHidTransport(\n true,\n nativeModuleWrapper,\n loggerServiceFactory,\n );\n\n // when\n const error = new Error(\"disconnect failed\");\n wrapperDisconnectDevice.mockRejectedValueOnce(error);\n const result = await transport.disconnect({\n connectedDevice: { id: \"session000\" } as TransportConnectedDevice,\n });\n\n // then\n expect(result).toEqual(Left(new DisconnectError(error)));\n });\n });\n});\n"],
5
+ "mappings": "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",
6
6
  "names": ["DeviceModelId", "DisconnectError", "LogLevel", "OpeningConnectionError", "StaticDeviceModelDataSource", "TransportConnectedDevice", "Left", "Right", "Subject", "TRANSPORT_IDENTIFIER", "SendApduError", "RNHidTransport", "deviceModelDataSource", "makeMockTransportDiscoveredDevice", "id", "deviceModelId", "mockDiscoveredDevice1", "mockDiscoveredDevice2", "mockDiscoveredDevice3", "discoveredDevicesSubject", "deviceDisconnectedSubject", "transportLogsSubject", "nativeModuleWrapper", "fakeLogger", "loggerServiceFactory", "wrapperStartScan", "wrapperStopScan", "wrapperConnectDevice", "wrapperDisconnectDevice", "wrapperSendApdu", "transport", "transportTrue", "transportFalse", "logEvent", "resolve", "reject", "discoveredDevices", "device", "e", "error", "err", "observedEvents", "devices", "fakeDeviceModel", "sessionId", "result", "connectedDevice", "onDisconnect", "apdu", "apduResult", "apduError", "errorResult"]
7
7
  }
@@ -28,11 +28,11 @@
28
28
  ],
29
29
  "scripts": {
30
30
  "prebuild": "rimraf lib",
31
- "build": "pnpm lmdk-build --entryPoints src/index.ts,src/**/*.ts --tsconfig tsconfig.prod.json",
31
+ "build": "pnpm ldmk-tool build --entryPoints src/index.ts,src/**/*.ts --tsconfig tsconfig.prod.json",
32
32
  "dev": "concurrently \"pnpm watch:builds\" \"pnpm watch:types\"",
33
- "watch:builds": "pnpm lmdk-watch --entryPoints src/index.ts,src/**/*.ts --tsconfig tsconfig.prod.json",
33
+ "watch:builds": "pnpm ldmk-tool watch --entryPoints src/index.ts,src/**/*.ts --tsconfig tsconfig.prod.json",
34
34
  "watch:types": "concurrently \"tsc --watch -p tsconfig.prod.json\" \"tsc-alias --watch -p tsconfig.prod.json\"",
35
- "lint": "eslint",
35
+ "lint": "eslint src/**/*.ts",
36
36
  "lint:fix": "pnpm lint --fix",
37
37
  "postpack": "find . -name '*.tgz' -exec cp {} ../../../dist/ \\; ",
38
38
  "prettier": "prettier . --check",
@@ -43,24 +43,24 @@
43
43
  "test:coverage": "vitest run --coverage --passWithNoTests"
44
44
  },
45
45
  "dependencies": {
46
- "@sentry/minimal": "^6.19.7",
47
- "purify-ts": "^2.1.0",
48
- "uuid": "^10.0.0"
46
+ "@sentry/minimal": "catalog:",
47
+ "purify-ts": "catalog:",
48
+ "uuid": "catalog:"
49
49
  },
50
50
  "devDependencies": {
51
51
  "@ledgerhq/device-management-kit": "workspace:*",
52
- "@ledgerhq/esbuild-tools": "workspace:*",
53
52
  "@ledgerhq/eslint-config-dsdk": "workspace:*",
53
+ "@ledgerhq/ldmk-tool": "workspace:*",
54
54
  "@ledgerhq/vitest-config-dmk": "workspace:*",
55
55
  "@ledgerhq/prettier-config-dsdk": "workspace:*",
56
56
  "@ledgerhq/tsconfig-dsdk": "workspace:*",
57
- "@types/uuid": "^10.0.0",
58
- "react-native": "^0.76.3",
59
- "rxjs": "^7.8.1"
57
+ "@types/uuid": "catalog:",
58
+ "react-native": "catalog:",
59
+ "rxjs": "catalog:"
60
60
  },
61
61
  "peerDependencies": {
62
62
  "@ledgerhq/device-management-kit": "workspace:*",
63
63
  "react-native": ">0.74.1",
64
- "rxjs": "^7.8.1"
64
+ "rxjs": "catalog:"
65
65
  }
66
66
  }
@@ -17,6 +17,6 @@ export declare class DefaultNativeModuleWrapper implements NativeModuleWrapper {
17
17
  subscribeToTransportLogs(): Observable<LogParams>;
18
18
  connectDevice(uid: string): Promise<InternalConnectionResult>;
19
19
  disconnectDevice(sessionId: string): Promise<void>;
20
- sendApdu(sessionId: string, apdu: Uint8Array): Promise<SendApduResult>;
20
+ sendApdu(sessionId: string, apdu: Uint8Array, triggersDisconnection: boolean, abortTimeout: number): Promise<SendApduResult>;
21
21
  }
22
22
  //# sourceMappingURL=DefaultNativeModuleWrapper.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DefaultNativeModuleWrapper.d.ts","sourceRoot":"","sources":["../../../../src/api/bridge/DefaultNativeModuleWrapper.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,yBAAyB,EAC/B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAGlC,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAC9E,OAAO,EACL,KAAK,wBAAwB,EAC7B,KAAK,0BAA0B,EAChC,MAAM,sBAAsB,CAAC;AAiB9B,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,SAAS,CAAC;AAEzD,qBAAa,0BAA2B,YAAW,mBAAmB;IACpE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA4B;IAC1D,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAwB;gBAEnD,IAAI,EAAE;QAChB,YAAY,EAAE,yBAAyB,CAAC;QACxC,qBAAqB,EAAE,qBAAqB,CAAC;KAC9C;IAKD,SAAS;IAIT,QAAQ;IAIR,kCAAkC,IAAI,UAAU,CAC9C,KAAK,CAAC,yBAAyB,CAAC,CACjC;IAyBD,mCAAmC,IAAI,UAAU,CAAC,0BAA0B,CAAC;IAkB7E,wBAAwB,IAAI,UAAU,CAAC,SAAS,CAAC;IAgB3C,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAQ7D,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlD,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,cAAc,CAAC;CAO7E"}
1
+ {"version":3,"file":"DefaultNativeModuleWrapper.d.ts","sourceRoot":"","sources":["../../../../src/api/bridge/DefaultNativeModuleWrapper.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,yBAAyB,EAC/B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAGlC,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAC9E,OAAO,EACL,KAAK,wBAAwB,EAC7B,KAAK,0BAA0B,EAChC,MAAM,sBAAsB,CAAC;AAiB9B,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,SAAS,CAAC;AAEzD,qBAAa,0BAA2B,YAAW,mBAAmB;IACpE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA4B;IAC1D,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAwB;gBAEnD,IAAI,EAAE;QAChB,YAAY,EAAE,yBAAyB,CAAC;QACxC,qBAAqB,EAAE,qBAAqB,CAAC;KAC9C;IAKD,SAAS;IAIT,QAAQ;IAIR,kCAAkC,IAAI,UAAU,CAC9C,KAAK,CAAC,yBAAyB,CAAC,CACjC;IAyBD,mCAAmC,IAAI,UAAU,CAAC,0BAA0B,CAAC;IAkB7E,wBAAwB,IAAI,UAAU,CAAC,SAAS,CAAC;IAgB3C,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAQ7D,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlD,QAAQ,CACZ,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,UAAU,EAChB,qBAAqB,EAAE,OAAO,EAC9B,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,cAAc,CAAC;CAS3B"}
@@ -1 +1 @@
1
- {"version":3,"file":"mapper.d.ts","sourceRoot":"","sources":["../../../../src/api/bridge/mapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,qBAAqB,EAG1B,KAAK,SAAS,EAEd,KAAK,cAAc,EACnB,KAAK,oBAAoB,EACzB,KAAK,yBAAyB,EAC/B,MAAM,iCAAiC,CAAC;AAMzC,OAAO,EACL,KAAK,wBAAwB,EAC7B,KAAK,0BAA0B,EAChC,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,KAAK,0BAA0B,EAC/B,KAAK,qBAAqB,EAC1B,KAAK,8BAA8B,EACnC,KAAK,kBAAkB,EACvB,KAAK,SAAS,EACd,KAAK,oBAAoB,EAC1B,MAAM,SAAS,CAAC;AAEjB,wBAAgB,kCAAkC,CAChD,kBAAkB,EAAE,kBAAkB,EACtC,qBAAqB,EAAE,qBAAqB,GAC3C,oBAAoB,GAAG,IAAI,CAM7B;AAED,wBAAgB,mDAAmD,CACjE,YAAY,EAAE,qBAAqB,EACnC,qBAAqB,EAAE,qBAAqB,GAC3C,yBAAyB,GAAG,IAAI,CAalC;AAED,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,SAAS,GAAG,SAAS,CA8BpE;AAMD,wBAAgB,2CAA2C,CACzD,MAAM,EAAE,8BAA8B,EACtC,qBAAqB,EAAE,qBAAqB,GAC3C,wBAAwB,CAgB1B;AAED,wBAAgB,uCAAuC,CACrD,MAAM,EAAE,oBAAoB,GAC3B,cAAc,CAYhB;AAED,wBAAgB,iDAAiD,CAC/D,0BAA0B,EAAE,0BAA0B,GACrD,0BAA0B,CAI5B"}
1
+ {"version":3,"file":"mapper.d.ts","sourceRoot":"","sources":["../../../../src/api/bridge/mapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,qBAAqB,EAG1B,KAAK,SAAS,EAGd,KAAK,cAAc,EAEnB,KAAK,oBAAoB,EACzB,KAAK,yBAAyB,EAC/B,MAAM,iCAAiC,CAAC;AAMzC,OAAO,EACL,KAAK,wBAAwB,EAC7B,KAAK,0BAA0B,EAChC,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,KAAK,0BAA0B,EAC/B,KAAK,qBAAqB,EAC1B,KAAK,8BAA8B,EACnC,KAAK,kBAAkB,EACvB,KAAK,SAAS,EACd,KAAK,oBAAoB,EAC1B,MAAM,SAAS,CAAC;AAEjB,wBAAgB,kCAAkC,CAChD,kBAAkB,EAAE,kBAAkB,EACtC,qBAAqB,EAAE,qBAAqB,GAC3C,oBAAoB,GAAG,IAAI,CAM7B;AAED,wBAAgB,mDAAmD,CACjE,YAAY,EAAE,qBAAqB,EACnC,qBAAqB,EAAE,qBAAqB,GAC3C,yBAAyB,GAAG,IAAI,CAalC;AAED,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,SAAS,GAAG,SAAS,CA8BpE;AAMD,wBAAgB,2CAA2C,CACzD,MAAM,EAAE,8BAA8B,EACtC,qBAAqB,EAAE,qBAAqB,GAC3C,wBAAwB,CAgB1B;AAED,wBAAgB,uCAAuC,CACrD,MAAM,EAAE,oBAAoB,GAC3B,cAAc,CAgBhB;AAED,wBAAgB,iDAAiD,CAC/D,0BAA0B,EAAE,0BAA0B,GACrD,0BAA0B,CAI5B"}
@@ -30,7 +30,7 @@ export type NativeSendApduResult = {
30
30
  apdu: string;
31
31
  } | {
32
32
  success: false;
33
- error: string;
33
+ error: string | "SendApduTimeout";
34
34
  };
35
35
  export type NativeDeviceConnectionLost = {
36
36
  id: string;
@@ -55,7 +55,7 @@ export type NativeTransportModuleType = {
55
55
  stopScan: () => Promise<void>;
56
56
  connectDevice: (uid: string) => Promise<NativeInternalConnectionResult>;
57
57
  disconnectDevice: (sessionId: string) => Promise<void>;
58
- sendApdu: (sessionId: string, apdu: string) => Promise<NativeSendApduResult>;
58
+ sendApdu: (sessionId: string, apdu: string, triggersDisconnection: boolean, abortTimeout: number) => Promise<NativeSendApduResult>;
59
59
  } & NativeModule;
60
60
  export {};
61
61
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/api/bridge/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,OAAO,GAAG,WAAW,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;IACxD,gBAAgB,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,kBAAkB,CAAC;CAClC,CAAC;AAEF,KAAK,cAAc,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;AAE7D,MAAM,MAAM,SAAS,GAAG;IACtB,KAAK,EAAE,cAAc,CAAC;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,8BAA8B,GACtC;IACE,OAAO,EAAE,IAAI,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,kBAAkB,CAAC;IACjC,UAAU,EAAE,MAAM,CAAC;CACpB,GACD;IACE,OAAO,EAAE,KAAK,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEN,MAAM,MAAM,oBAAoB,GAC5B;IACE,OAAO,EAAE,IAAI,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd,GACD;IACE,OAAO,EAAE,KAAK,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEN,MAAM,MAAM,0BAA0B,GAAG;IACvC,EAAE,EAAE,MAAM,CAAC;CACZ,CAAC;AAEF;;GAEG;AAEH,wBAAwB;AACxB,eAAO,MAAM,wBAAwB,sBAAsB,CAAC;AAC5D,MAAM,MAAM,6BAA6B,GAAG,KAAK,CAAC,qBAAqB,CAAC,CAAC;AAEzE,mBAAmB;AACnB,eAAO,MAAM,mBAAmB,iBAAiB,CAAC;AAClD,MAAM,MAAM,eAAe,GAAG,SAAS,CAAC;AAExC,yBAAyB;AACzB,eAAO,MAAM,yBAAyB,uBAAuB,CAAC;AAC9D,MAAM,MAAM,8BAA8B,GAAG,0BAA0B,CAAC;AAExE;;GAEG;AACH,MAAM,MAAM,yBAAyB,GAAG;IACtC,SAAS,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,aAAa,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,8BAA8B,CAAC,CAAC;IACxE,gBAAgB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACvD,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,oBAAoB,CAAC,CAAC;CAC9E,GAAG,YAAY,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/api/bridge/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,OAAO,GAAG,WAAW,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;IACxD,gBAAgB,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,kBAAkB,CAAC;CAClC,CAAC;AAEF,KAAK,cAAc,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;AAE7D,MAAM,MAAM,SAAS,GAAG;IACtB,KAAK,EAAE,cAAc,CAAC;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,8BAA8B,GACtC;IACE,OAAO,EAAE,IAAI,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,kBAAkB,CAAC;IACjC,UAAU,EAAE,MAAM,CAAC;CACpB,GACD;IACE,OAAO,EAAE,KAAK,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEN,MAAM,MAAM,oBAAoB,GAC5B;IACE,OAAO,EAAE,IAAI,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd,GACD;IACE,OAAO,EAAE,KAAK,CAAC;IACf,KAAK,EAAE,MAAM,GAAG,iBAAiB,CAAC;CACnC,CAAC;AAEN,MAAM,MAAM,0BAA0B,GAAG;IACvC,EAAE,EAAE,MAAM,CAAC;CACZ,CAAC;AAEF;;GAEG;AAEH,wBAAwB;AACxB,eAAO,MAAM,wBAAwB,sBAAsB,CAAC;AAC5D,MAAM,MAAM,6BAA6B,GAAG,KAAK,CAAC,qBAAqB,CAAC,CAAC;AAEzE,mBAAmB;AACnB,eAAO,MAAM,mBAAmB,iBAAiB,CAAC;AAClD,MAAM,MAAM,eAAe,GAAG,SAAS,CAAC;AAExC,yBAAyB;AACzB,eAAO,MAAM,yBAAyB,uBAAuB,CAAC;AAC9D,MAAM,MAAM,8BAA8B,GAAG,0BAA0B,CAAC;AAExE;;GAEG;AACH,MAAM,MAAM,yBAAyB,GAAG;IACtC,SAAS,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,aAAa,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,8BAA8B,CAAC,CAAC;IACxE,gBAAgB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACvD,QAAQ,EAAE,CACR,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,qBAAqB,EAAE,OAAO,EAC9B,YAAY,EAAE,MAAM,KACjB,OAAO,CAAC,oBAAoB,CAAC,CAAC;CACpC,GAAG,YAAY,CAAC"}
@@ -18,6 +18,6 @@ export interface NativeModuleWrapper {
18
18
  subscribeToTransportLogs(): Observable<LogParams>;
19
19
  connectDevice(uid: string): Promise<InternalConnectionResult>;
20
20
  disconnectDevice(uid: string): Promise<void>;
21
- sendApdu(sessionId: string, apdu: Uint8Array): Promise<SendApduResult>;
21
+ sendApdu(sessionId: string, apdu: Uint8Array, triggersDisconnection: boolean, abortTimeout: number): Promise<SendApduResult>;
22
22
  }
23
23
  //# sourceMappingURL=NativeModuleWrapper.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"NativeModuleWrapper.d.ts","sourceRoot":"","sources":["../../../../src/api/transport/NativeModuleWrapper.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,yBAAyB,EAC/B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,MAAM,CAAC;AAEvC,OAAO,EACL,KAAK,wBAAwB,EAC7B,KAAK,0BAA0B,EAChC,MAAM,SAAS,CAAC;AAEjB;;;;;;;;GAQG;AACH,MAAM,WAAW,mBAAmB;IAClC,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,kCAAkC,IAAI,UAAU,CAC9C,KAAK,CAAC,yBAAyB,CAAC,CACjC,CAAC;IACF,mCAAmC,IAAI,UAAU,CAAC,0BAA0B,CAAC,CAAC;IAC9E,wBAAwB,IAAI,UAAU,CAAC,SAAS,CAAC,CAAC;IAClD,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAAC;IAC9D,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;CACxE"}
1
+ {"version":3,"file":"NativeModuleWrapper.d.ts","sourceRoot":"","sources":["../../../../src/api/transport/NativeModuleWrapper.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,yBAAyB,EAC/B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,MAAM,CAAC;AAEvC,OAAO,EACL,KAAK,wBAAwB,EAC7B,KAAK,0BAA0B,EAChC,MAAM,SAAS,CAAC;AAEjB;;;;;;;;GAQG;AACH,MAAM,WAAW,mBAAmB;IAClC,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,kCAAkC,IAAI,UAAU,CAC9C,KAAK,CAAC,yBAAyB,CAAC,CACjC,CAAC;IACF,mCAAmC,IAAI,UAAU,CAAC,0BAA0B,CAAC,CAAC;IAC9E,wBAAwB,IAAI,UAAU,CAAC,SAAS,CAAC,CAAC;IAClD,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAAC;IAC9D,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,QAAQ,CACN,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,UAAU,EAChB,qBAAqB,EAAE,OAAO,EAC9B,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,cAAc,CAAC,CAAC;CAC5B"}
@@ -1 +1 @@
1
- {"version":3,"file":"RNHidTransport.d.ts","sourceRoot":"","sources":["../../../../src/api/transport/RNHidTransport.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,QAAQ,EAEb,KAAK,iBAAiB,EACtB,KAAK,QAAQ,EACb,KAAK,sBAAsB,EAG3B,KAAK,SAAS,EACd,wBAAwB,EACxB,KAAK,yBAAyB,EAC9B,KAAK,mBAAmB,EACzB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,KAAK,MAAM,EAAe,MAAM,WAAW,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAMlC,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAEjE,qBAAa,cAAe,YAAW,SAAS;IAI5C,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,oBAAoB;IAJvC,OAAO,CAAC,cAAc,CAAyB;gBAG5B,YAAY,EAAE,OAAO,EACrB,oBAAoB,EAAE,mBAAmB,EAC1D,qBAAqB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,sBAAsB;IAgBhE,aAAa,IAAI,mBAAmB;IAIpC,WAAW,IAAI,OAAO;IAItB,gBAAgB,IAAI,UAAU,CAAC,yBAAyB,CAAC;IAkBzD,eAAe,IAAI,IAAI;IAMvB,wBAAwB,IAAI,UAAU,CAAC,yBAAyB,EAAE,CAAC;IA6BnE,OAAO,CAAC,OAAO,EAAE;QACf,QAAQ,EAAE,QAAQ,CAAC;QACnB,YAAY,EAAE,iBAAiB,CAAC;KACjC,GAAG,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,wBAAwB,CAAC,CAAC;IAkC3D,UAAU,CAAC,OAAO,EAAE;QAClB,eAAe,EAAE,wBAAwB,CAAC;KAC3C,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;CAQpC"}
1
+ {"version":3,"file":"RNHidTransport.d.ts","sourceRoot":"","sources":["../../../../src/api/transport/RNHidTransport.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,QAAQ,EAEb,KAAK,iBAAiB,EACtB,KAAK,QAAQ,EACb,KAAK,sBAAsB,EAG3B,KAAK,SAAS,EACd,wBAAwB,EACxB,KAAK,yBAAyB,EAC9B,KAAK,mBAAmB,EACzB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,KAAK,MAAM,EAAe,MAAM,WAAW,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAMlC,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAEjE,qBAAa,cAAe,YAAW,SAAS;IAI5C,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,oBAAoB;IAJvC,OAAO,CAAC,cAAc,CAAyB;gBAG5B,YAAY,EAAE,OAAO,EACrB,oBAAoB,EAAE,mBAAmB,EAC1D,qBAAqB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,sBAAsB;IAgBhE,aAAa,IAAI,mBAAmB;IAIpC,WAAW,IAAI,OAAO;IAItB,gBAAgB,IAAI,UAAU,CAAC,yBAAyB,CAAC;IAkBzD,eAAe,IAAI,IAAI;IAMvB,wBAAwB,IAAI,UAAU,CAAC,yBAAyB,EAAE,CAAC;IA6BnE,OAAO,CAAC,OAAO,EAAE;QACf,QAAQ,EAAE,QAAQ,CAAC;QACnB,YAAY,EAAE,iBAAiB,CAAC;KACjC,GAAG,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,wBAAwB,CAAC,CAAC;IA2C3D,UAAU,CAAC,OAAO,EAAE;QAClB,eAAe,EAAE,wBAAwB,CAAC;KAC3C,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;CAQpC"}