@ledgerhq/device-transport-kit-react-native-hid 0.0.0-rn-hid-20250221112139

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 (114) hide show
  1. package/LICENSE.MD +202 -0
  2. package/README.md +84 -0
  3. package/lib/cjs/api/RNHidTransportFactory.js +2 -0
  4. package/lib/cjs/api/RNHidTransportFactory.js.map +7 -0
  5. package/lib/cjs/api/bridge/DefaultNativeModuleWrapper.js +2 -0
  6. package/lib/cjs/api/bridge/DefaultNativeModuleWrapper.js.map +7 -0
  7. package/lib/cjs/api/bridge/NativeTransportModule.js +2 -0
  8. package/lib/cjs/api/bridge/NativeTransportModule.js.map +7 -0
  9. package/lib/cjs/api/bridge/StubNativeModuleWrapper.js +2 -0
  10. package/lib/cjs/api/bridge/StubNativeModuleWrapper.js.map +7 -0
  11. package/lib/cjs/api/bridge/mapper.js +2 -0
  12. package/lib/cjs/api/bridge/mapper.js.map +7 -0
  13. package/lib/cjs/api/bridge/mapper.test.js +2 -0
  14. package/lib/cjs/api/bridge/mapper.test.js.map +7 -0
  15. package/lib/cjs/api/bridge/types.js +2 -0
  16. package/lib/cjs/api/bridge/types.js.map +7 -0
  17. package/lib/cjs/api/helpers/base64Utils.js +2 -0
  18. package/lib/cjs/api/helpers/base64Utils.js.map +7 -0
  19. package/lib/cjs/api/helpers/base64Utils.test.js +2 -0
  20. package/lib/cjs/api/helpers/base64Utils.test.js.map +7 -0
  21. package/lib/cjs/api/helpers/getObservableOfArraysNewItems.js +2 -0
  22. package/lib/cjs/api/helpers/getObservableOfArraysNewItems.js.map +7 -0
  23. package/lib/cjs/api/helpers/getObservableOfArraysNewItems.test.js +2 -0
  24. package/lib/cjs/api/helpers/getObservableOfArraysNewItems.test.js.map +7 -0
  25. package/lib/cjs/api/transport/Errors.js +2 -0
  26. package/lib/cjs/api/transport/Errors.js.map +7 -0
  27. package/lib/cjs/api/transport/NativeModuleWrapper.js +2 -0
  28. package/lib/cjs/api/transport/NativeModuleWrapper.js.map +7 -0
  29. package/lib/cjs/api/transport/RNHidTransport.js +2 -0
  30. package/lib/cjs/api/transport/RNHidTransport.js.map +7 -0
  31. package/lib/cjs/api/transport/RNHidTransport.test.js +2 -0
  32. package/lib/cjs/api/transport/RNHidTransport.test.js.map +7 -0
  33. package/lib/cjs/api/transport/rnHidTransportIdentifier.js +2 -0
  34. package/lib/cjs/api/transport/rnHidTransportIdentifier.js.map +7 -0
  35. package/lib/cjs/api/transport/types.js +2 -0
  36. package/lib/cjs/api/transport/types.js.map +7 -0
  37. package/lib/cjs/index.js +2 -0
  38. package/lib/cjs/index.js.map +7 -0
  39. package/lib/cjs/package.json +60 -0
  40. package/lib/esm/api/RNHidTransportFactory.js +2 -0
  41. package/lib/esm/api/RNHidTransportFactory.js.map +7 -0
  42. package/lib/esm/api/bridge/DefaultNativeModuleWrapper.js +2 -0
  43. package/lib/esm/api/bridge/DefaultNativeModuleWrapper.js.map +7 -0
  44. package/lib/esm/api/bridge/NativeTransportModule.js +2 -0
  45. package/lib/esm/api/bridge/NativeTransportModule.js.map +7 -0
  46. package/lib/esm/api/bridge/StubNativeModuleWrapper.js +2 -0
  47. package/lib/esm/api/bridge/StubNativeModuleWrapper.js.map +7 -0
  48. package/lib/esm/api/bridge/mapper.js +2 -0
  49. package/lib/esm/api/bridge/mapper.js.map +7 -0
  50. package/lib/esm/api/bridge/mapper.test.js +2 -0
  51. package/lib/esm/api/bridge/mapper.test.js.map +7 -0
  52. package/lib/esm/api/bridge/types.js +2 -0
  53. package/lib/esm/api/bridge/types.js.map +7 -0
  54. package/lib/esm/api/helpers/base64Utils.js +2 -0
  55. package/lib/esm/api/helpers/base64Utils.js.map +7 -0
  56. package/lib/esm/api/helpers/base64Utils.test.js +2 -0
  57. package/lib/esm/api/helpers/base64Utils.test.js.map +7 -0
  58. package/lib/esm/api/helpers/getObservableOfArraysNewItems.js +2 -0
  59. package/lib/esm/api/helpers/getObservableOfArraysNewItems.js.map +7 -0
  60. package/lib/esm/api/helpers/getObservableOfArraysNewItems.test.js +2 -0
  61. package/lib/esm/api/helpers/getObservableOfArraysNewItems.test.js.map +7 -0
  62. package/lib/esm/api/transport/Errors.js +2 -0
  63. package/lib/esm/api/transport/Errors.js.map +7 -0
  64. package/lib/esm/api/transport/NativeModuleWrapper.js +1 -0
  65. package/lib/esm/api/transport/NativeModuleWrapper.js.map +7 -0
  66. package/lib/esm/api/transport/RNHidTransport.js +2 -0
  67. package/lib/esm/api/transport/RNHidTransport.js.map +7 -0
  68. package/lib/esm/api/transport/RNHidTransport.test.js +2 -0
  69. package/lib/esm/api/transport/RNHidTransport.test.js.map +7 -0
  70. package/lib/esm/api/transport/rnHidTransportIdentifier.js +2 -0
  71. package/lib/esm/api/transport/rnHidTransportIdentifier.js.map +7 -0
  72. package/lib/esm/api/transport/types.js +1 -0
  73. package/lib/esm/api/transport/types.js.map +7 -0
  74. package/lib/esm/index.js +2 -0
  75. package/lib/esm/index.js.map +7 -0
  76. package/lib/esm/package.json +60 -0
  77. package/lib/types/api/RNHidTransportFactory.d.ts +3 -0
  78. package/lib/types/api/RNHidTransportFactory.d.ts.map +1 -0
  79. package/lib/types/api/bridge/DefaultNativeModuleWrapper.d.ts +22 -0
  80. package/lib/types/api/bridge/DefaultNativeModuleWrapper.d.ts.map +1 -0
  81. package/lib/types/api/bridge/NativeTransportModule.d.ts +3 -0
  82. package/lib/types/api/bridge/NativeTransportModule.d.ts.map +1 -0
  83. package/lib/types/api/bridge/StubNativeModuleWrapper.d.ts +15 -0
  84. package/lib/types/api/bridge/StubNativeModuleWrapper.d.ts.map +1 -0
  85. package/lib/types/api/bridge/mapper.d.ts +10 -0
  86. package/lib/types/api/bridge/mapper.d.ts.map +1 -0
  87. package/lib/types/api/bridge/mapper.test.d.ts +2 -0
  88. package/lib/types/api/bridge/mapper.test.d.ts.map +1 -0
  89. package/lib/types/api/bridge/types.d.ts +61 -0
  90. package/lib/types/api/bridge/types.d.ts.map +1 -0
  91. package/lib/types/api/helpers/base64Utils.d.ts +13 -0
  92. package/lib/types/api/helpers/base64Utils.d.ts.map +1 -0
  93. package/lib/types/api/helpers/base64Utils.test.d.ts +2 -0
  94. package/lib/types/api/helpers/base64Utils.test.d.ts.map +1 -0
  95. package/lib/types/api/helpers/getObservableOfArraysNewItems.d.ts +15 -0
  96. package/lib/types/api/helpers/getObservableOfArraysNewItems.d.ts.map +1 -0
  97. package/lib/types/api/helpers/getObservableOfArraysNewItems.test.d.ts +2 -0
  98. package/lib/types/api/helpers/getObservableOfArraysNewItems.test.d.ts.map +1 -0
  99. package/lib/types/api/transport/Errors.d.ts +7 -0
  100. package/lib/types/api/transport/Errors.d.ts.map +1 -0
  101. package/lib/types/api/transport/NativeModuleWrapper.d.ts +23 -0
  102. package/lib/types/api/transport/NativeModuleWrapper.d.ts.map +1 -0
  103. package/lib/types/api/transport/RNHidTransport.d.ts +23 -0
  104. package/lib/types/api/transport/RNHidTransport.d.ts.map +1 -0
  105. package/lib/types/api/transport/RNHidTransport.test.d.ts +2 -0
  106. package/lib/types/api/transport/RNHidTransport.test.d.ts.map +1 -0
  107. package/lib/types/api/transport/rnHidTransportIdentifier.d.ts +2 -0
  108. package/lib/types/api/transport/rnHidTransportIdentifier.d.ts.map +1 -0
  109. package/lib/types/api/transport/types.d.ts +12 -0
  110. package/lib/types/api/transport/types.d.ts.map +1 -0
  111. package/lib/types/index.d.ts +3 -0
  112. package/lib/types/index.d.ts.map +1 -0
  113. package/lib/types/tsconfig.prod.tsbuildinfo +1 -0
  114. package/package.json +59 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 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": "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",
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
+ }
@@ -0,0 +1,2 @@
1
+ const I="RN_HID";export{I as TRANSPORT_IDENTIFIER};
2
+ //# sourceMappingURL=rnHidTransportIdentifier.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/api/transport/rnHidTransportIdentifier.ts"],
4
+ "sourcesContent": ["export const TRANSPORT_IDENTIFIER = \"RN_HID\";\n"],
5
+ "mappings": "AAAO,MAAMA,EAAuB",
6
+ "names": ["TRANSPORT_IDENTIFIER"]
7
+ }
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -0,0 +1,2 @@
1
+ import{RNHidTransportFactory as t}from"./api/RNHidTransportFactory";import{TRANSPORT_IDENTIFIER as a}from"./api/transport/rnHidTransportIdentifier";export{t as RNHidTransportFactory,a as rnHidTransportIdentifier};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/index.ts"],
4
+ "sourcesContent": ["export { RNHidTransportFactory } from \"@api/RNHidTransportFactory\";\nexport { TRANSPORT_IDENTIFIER as rnHidTransportIdentifier } from \"@api/transport/rnHidTransportIdentifier\";\n"],
5
+ "mappings": "AAAA,OAAS,yBAAAA,MAA6B,6BACtC,OAAiC,wBAAxBC,MAAwD",
6
+ "names": ["RNHidTransportFactory", "TRANSPORT_IDENTIFIER"]
7
+ }
@@ -0,0 +1,60 @@
1
+ {
2
+ "name": "@ledgerhq/device-transport-kit-react-native-hid",
3
+ "version": "0.0.1",
4
+ "license": "Apache-2.0",
5
+ "private": false,
6
+ "react-native": "src/index.ts",
7
+ "nativePackage": true,
8
+ "exports": {
9
+ ".": {
10
+ "types": "./lib/types/index.d.ts",
11
+ "import": "./lib/esm/index.js",
12
+ "require": "./lib/cjs/index.js"
13
+ },
14
+ "./*": {
15
+ "types": "./lib/types/*",
16
+ "import": "./lib/esm/*",
17
+ "require": "./lib/cjs/*"
18
+ }
19
+ },
20
+ "files": [
21
+ "./lib"
22
+ ],
23
+ "scripts": {
24
+ "prebuild": "rimraf lib",
25
+ "build": "pnpm lmdk-build --entryPoints src/index.ts,src/**/*.ts --tsconfig tsconfig.prod.json",
26
+ "dev": "concurrently \"pnpm watch:builds\" \"pnpm watch:types\"",
27
+ "watch:builds": "pnpm lmdk-watch --entryPoints src/index.ts,src/**/*.ts --tsconfig tsconfig.prod.json",
28
+ "watch:types": "concurrently \"tsc --watch -p tsconfig.prod.json\" \"tsc-alias --watch -p tsconfig.prod.json\"",
29
+ "lint": "eslint",
30
+ "lint:fix": "pnpm lint --fix",
31
+ "postpack": "find . -name '*.tgz' -exec cp {} ../../../dist/ \\; ",
32
+ "prettier": "prettier . --check",
33
+ "prettier:fix": "prettier . --write",
34
+ "typecheck": "tsc --noEmit",
35
+ "test": "vitest run --passWithNoTests",
36
+ "test:watch": "vitest --passWithNoTests",
37
+ "test:coverage": "vitest run --coverage --passWithNoTests"
38
+ },
39
+ "dependencies": {
40
+ "@sentry/minimal": "^6.19.7",
41
+ "purify-ts": "^2.1.0",
42
+ "uuid": "^10.0.0"
43
+ },
44
+ "devDependencies": {
45
+ "@ledgerhq/device-management-kit": "workspace:*",
46
+ "@ledgerhq/esbuild-tools": "workspace:*",
47
+ "@ledgerhq/eslint-config-dsdk": "workspace:*",
48
+ "@ledgerhq/vitest-config-dmk": "workspace:*",
49
+ "@ledgerhq/prettier-config-dsdk": "workspace:*",
50
+ "@ledgerhq/tsconfig-dsdk": "workspace:*",
51
+ "@types/uuid": "^10.0.0",
52
+ "react-native": "^0.76.3",
53
+ "rxjs": "^7.8.1"
54
+ },
55
+ "peerDependencies": {
56
+ "@ledgerhq/device-management-kit": "workspace:*",
57
+ "react-native": ">0.72",
58
+ "rxjs": "^7.8.1"
59
+ }
60
+ }
@@ -0,0 +1,3 @@
1
+ import type { TransportFactory } from "@ledgerhq/device-management-kit";
2
+ export declare const RNHidTransportFactory: TransportFactory;
3
+ //# sourceMappingURL=RNHidTransportFactory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RNHidTransportFactory.d.ts","sourceRoot":"","sources":["../../../src/api/RNHidTransportFactory.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAQxE,eAAO,MAAM,qBAAqB,EAAE,gBAkBnC,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { type DeviceModelDataSource, type LogParams, type SendApduResult, type TransportDiscoveredDevice } from "@ledgerhq/device-management-kit";
2
+ import { Observable } from "rxjs";
3
+ import { type NativeModuleWrapper } from "../transport/NativeModuleWrapper";
4
+ import { type InternalConnectionResult, type InternalDeviceDisconnected } from "../transport/types";
5
+ import { type NativeTransportModuleType } from "./types";
6
+ export declare class DefaultNativeModuleWrapper implements NativeModuleWrapper {
7
+ private readonly _nativeModule;
8
+ private readonly _deviceModelDataSource;
9
+ constructor(args: {
10
+ nativeModule: NativeTransportModuleType;
11
+ deviceModelDataSource: DeviceModelDataSource;
12
+ });
13
+ startScan(): Promise<void>;
14
+ stopScan(): Promise<void>;
15
+ subscribeToDiscoveredDevicesEvents(): Observable<Array<TransportDiscoveredDevice>>;
16
+ subscribeToDeviceDisconnectedEvents(): Observable<InternalDeviceDisconnected>;
17
+ subscribeToTransportLogs(): Observable<LogParams>;
18
+ connectDevice(uid: string): Promise<InternalConnectionResult>;
19
+ disconnectDevice(sessionId: string): Promise<void>;
20
+ sendApdu(sessionId: string, apdu: Uint8Array): Promise<SendApduResult>;
21
+ }
22
+ //# sourceMappingURL=DefaultNativeModuleWrapper.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,3 @@
1
+ import type { NativeTransportModuleType } from "./types";
2
+ export declare const NativeTransportModule: NativeTransportModuleType;
3
+ //# sourceMappingURL=NativeTransportModule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NativeTransportModule.d.ts","sourceRoot":"","sources":["../../../../src/api/bridge/NativeTransportModule.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,SAAS,CAAC;AAGzD,eAAO,MAAM,qBAAqB,EAAE,yBACI,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { LogParams, SendApduResult, TransportDiscoveredDevice } from "@ledgerhq/device-management-kit";
2
+ import { type Observable } from "rxjs";
3
+ import { type NativeModuleWrapper } from "../transport/NativeModuleWrapper";
4
+ import type { InternalConnectionResult, InternalDeviceDisconnected } from "../transport/types";
5
+ export declare class StubNativeModuleWrapper implements NativeModuleWrapper {
6
+ startScan(): Promise<void>;
7
+ stopScan(): Promise<void>;
8
+ subscribeToDiscoveredDevicesEvents(): Observable<Array<TransportDiscoveredDevice>>;
9
+ subscribeToTransportLogs(): Observable<LogParams>;
10
+ connectDevice(): Promise<InternalConnectionResult>;
11
+ disconnectDevice(): Promise<void>;
12
+ sendApdu(): Promise<SendApduResult>;
13
+ subscribeToDeviceDisconnectedEvents(): Observable<InternalDeviceDisconnected>;
14
+ }
15
+ //# sourceMappingURL=StubNativeModuleWrapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StubNativeModuleWrapper.d.ts","sourceRoot":"","sources":["../../../../src/api/bridge/StubNativeModuleWrapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,cAAc,EACd,yBAAyB,EAC1B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAQ,KAAK,UAAU,EAAE,MAAM,MAAM,CAAC;AAE7C,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAC9E,OAAO,KAAK,EACV,wBAAwB,EACxB,0BAA0B,EAC3B,MAAM,sBAAsB,CAAC;AAE9B,qBAAa,uBAAwB,YAAW,mBAAmB;IACjE,SAAS;IAIT,QAAQ;IAIR,kCAAkC,IAAI,UAAU,CAC9C,KAAK,CAAC,yBAAyB,CAAC,CACjC;IAID,wBAAwB,IAAI,UAAU,CAAC,SAAS,CAAC;IAIjD,aAAa,IAAI,OAAO,CAAC,wBAAwB,CAAC;IAIlD,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIjC,QAAQ,IAAI,OAAO,CAAC,cAAc,CAAC;IAInC,mCAAmC,IAAI,UAAU,CAAC,0BAA0B,CAAC;CAG9E"}
@@ -0,0 +1,10 @@
1
+ import { type DeviceModelDataSource, type LogParams, type SendApduResult, type TransportDeviceModel, type TransportDiscoveredDevice } from "@ledgerhq/device-management-kit";
2
+ import { type InternalConnectionResult, type InternalDeviceDisconnected } from "../transport/types";
3
+ import { type NativeDeviceConnectionLost, type NativeDiscoveryDevice, type NativeInternalConnectionResult, type NativeLedgerDevice, type NativeLog, type NativeSendApduResult } from "./types";
4
+ export declare function mapNativeLedgerDeviceToDeviceModel(nativeLedgerDevice: NativeLedgerDevice, deviceModelDataSource: DeviceModelDataSource): TransportDeviceModel | null;
5
+ export declare function mapNativeDiscoveryDeviceToTransportDiscoveredDevice(nativeDevice: NativeDiscoveryDevice, deviceModelDataSource: DeviceModelDataSource): TransportDiscoveredDevice | null;
6
+ export declare function mapNativeTransportLogToLog(log: NativeLog): LogParams;
7
+ export declare function mapNativeConnectionResultToConnectionResult(result: NativeInternalConnectionResult, deviceModelDataSource: DeviceModelDataSource): InternalConnectionResult;
8
+ export declare function mapNativeSendApduResultToSendApduResult(result: NativeSendApduResult): SendApduResult;
9
+ export declare function mapNativeDeviceConnectionLostToDeviceDisconnected(nativeDeviceConnectionLost: NativeDeviceConnectionLost): InternalDeviceDisconnected;
10
+ //# sourceMappingURL=mapper.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=mapper.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapper.test.d.ts","sourceRoot":"","sources":["../../../../src/api/bridge/mapper.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,61 @@
1
+ import { type NativeModule } from "react-native";
2
+ export type NativeLedgerDevice = {
3
+ name: "NanoS" | "NanoSPlus" | "NanoX" | "Flex" | "Stax";
4
+ usbProductIdMask: string;
5
+ };
6
+ export type NativeDiscoveryDevice = {
7
+ uid: string;
8
+ name: string;
9
+ ledgerDevice: NativeLedgerDevice;
10
+ };
11
+ type NativeLogLevel = "debug" | "info" | "warning" | "error";
12
+ export type NativeLog = {
13
+ level: NativeLogLevel;
14
+ tag: string;
15
+ message: string;
16
+ jsonPayload: Record<string, string>;
17
+ timestamp: string;
18
+ };
19
+ export type NativeInternalConnectionResult = {
20
+ success: true;
21
+ sessionId: string;
22
+ ledgerDevice: NativeLedgerDevice;
23
+ deviceName: string;
24
+ } | {
25
+ success: false;
26
+ error: string;
27
+ };
28
+ export type NativeSendApduResult = {
29
+ success: true;
30
+ apdu: string;
31
+ } | {
32
+ success: false;
33
+ error: string;
34
+ };
35
+ export type NativeDeviceConnectionLost = {
36
+ id: string;
37
+ };
38
+ /**
39
+ * Events
40
+ */
41
+ /** DiscoveredDevices */
42
+ export declare const DISCOVERED_DEVICES_EVENT = "DiscoveredDevices";
43
+ export type DiscoveredDevicesEventPayload = Array<NativeDiscoveryDevice>;
44
+ /** TransportLog */
45
+ export declare const TRANSPORT_LOG_EVENT = "TransportLog";
46
+ export type LogEventPayload = NativeLog;
47
+ /** DeviceDisconnected */
48
+ export declare const DEVICE_DISCONNECTED_EVENT = "DeviceDisconnected";
49
+ export type DeviceDisconnectedEventPayload = NativeDeviceConnectionLost;
50
+ /**
51
+ * Signature of the native transport module.
52
+ */
53
+ export type NativeTransportModuleType = {
54
+ startScan: () => Promise<void>;
55
+ stopScan: () => Promise<void>;
56
+ connectDevice: (uid: string) => Promise<NativeInternalConnectionResult>;
57
+ disconnectDevice: (sessionId: string) => Promise<void>;
58
+ sendApdu: (sessionId: string, apdu: string) => Promise<NativeSendApduResult>;
59
+ } & NativeModule;
60
+ export {};
61
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Encodes a Uint8Array to a Base64-encoded string.
3
+ * @param byteArray - The Uint8Array to encode.
4
+ * @returns A Base64-encoded string representing the byte array.
5
+ */
6
+ export declare function uint8ArrayToBase64(byteArray: Uint8Array): string;
7
+ /**
8
+ * Decodes a Base64-encoded string to a Uint8Array.
9
+ * @param base64 - The Base64-encoded string to decode.
10
+ * @returns A Uint8Array representing the decoded byte array.
11
+ */
12
+ export declare function base64ToUint8Array(base64: string): Uint8Array;
13
+ //# sourceMappingURL=base64Utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base64Utils.d.ts","sourceRoot":"","sources":["../../../../src/api/helpers/base64Utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,UAAU,GAAG,MAAM,CAMhE;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAO7D"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=base64Utils.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base64Utils.test.d.ts","sourceRoot":"","sources":["../../../../src/api/helpers/base64Utils.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,15 @@
1
+ import { type Observable } from "rxjs";
2
+ /**
3
+ * Returns an Observable that emits each unique item from arrays emitted by the source Observable.
4
+ *
5
+ * This function flattens the arrays emitted by the source Observable and uses the provided keySelector
6
+ * to determine uniqueness. Each item is emitted only once, even if it appears in multiple arrays.
7
+ *
8
+ * @template T - The type of items in the arrays.
9
+ * @template K - The type of the unique key extracted from each item.
10
+ * @param observable - An Observable that emits arrays of items.
11
+ * @param keySelector - A function that extracts a unique key from an item.
12
+ * @returns An Observable emitting each unique item exactly once.
13
+ */
14
+ export declare function getObservableOfArraysNewItems<T, K>(observable: Observable<Array<T>>, keySelector: (item: T) => K): Observable<T>;
15
+ //# sourceMappingURL=getObservableOfArraysNewItems.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getObservableOfArraysNewItems.d.ts","sourceRoot":"","sources":["../../../../src/api/helpers/getObservableOfArraysNewItems.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,UAAU,EAAE,MAAM,MAAM,CAAC;AAE3D;;;;;;;;;;;GAWG;AACH,wBAAgB,6BAA6B,CAAC,CAAC,EAAE,CAAC,EAChD,UAAU,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAChC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAC1B,UAAU,CAAC,CAAC,CAAC,CAKf"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=getObservableOfArraysNewItems.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getObservableOfArraysNewItems.test.d.ts","sourceRoot":"","sources":["../../../../src/api/helpers/getObservableOfArraysNewItems.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,7 @@
1
+ import { GeneralDmkError } from "@ledgerhq/device-management-kit";
2
+ export declare class SendApduError extends GeneralDmkError {
3
+ readonly err?: unknown | undefined;
4
+ readonly _tag = "HidTransportSendApduUnknownError";
5
+ constructor(err?: unknown | undefined);
6
+ }
7
+ //# sourceMappingURL=Errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Errors.d.ts","sourceRoot":"","sources":["../../../../src/api/transport/Errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAElE,qBAAa,aAAc,SAAQ,eAAe;IAEpC,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO;IADlC,SAAkB,IAAI,sCAAsC;gBACvC,GAAG,CAAC,EAAE,OAAO,YAAA;CAGnC"}
@@ -0,0 +1,23 @@
1
+ import { type LogParams, type SendApduResult, type TransportDiscoveredDevice } from "@ledgerhq/device-management-kit";
2
+ import { type Observable } from "rxjs";
3
+ import { type InternalConnectionResult, type InternalDeviceDisconnected } from "./types";
4
+ /**
5
+ * Interface for the native module wrapper.
6
+ * This interface is used to abstract the native module implementation & its
7
+ * types, basically the implementation of the "bridge".
8
+ * It is useful in case the (future) iOS native module signature is different
9
+ * from the Android one.
10
+ * It allows the RNHidTransport implementation to be platform-agnostic and
11
+ * independent from the native module implementation.
12
+ */
13
+ export interface NativeModuleWrapper {
14
+ startScan(): Promise<void>;
15
+ stopScan(): Promise<void>;
16
+ subscribeToDiscoveredDevicesEvents(): Observable<Array<TransportDiscoveredDevice>>;
17
+ subscribeToDeviceDisconnectedEvents(): Observable<InternalDeviceDisconnected>;
18
+ subscribeToTransportLogs(): Observable<LogParams>;
19
+ connectDevice(uid: string): Promise<InternalConnectionResult>;
20
+ disconnectDevice(uid: string): Promise<void>;
21
+ sendApdu(sessionId: string, apdu: Uint8Array): Promise<SendApduResult>;
22
+ }
23
+ //# sourceMappingURL=NativeModuleWrapper.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,23 @@
1
+ import { type ConnectError, type DeviceId, type DisconnectHandler, type DmkError, type LoggerPublisherService, type Transport, TransportConnectedDevice, type TransportDiscoveredDevice, type TransportIdentifier } from "@ledgerhq/device-management-kit";
2
+ import { type Either } from "purify-ts";
3
+ import { Observable } from "rxjs";
4
+ import { type NativeModuleWrapper } from "./NativeModuleWrapper";
5
+ export declare class RNHidTransport implements Transport {
6
+ private readonly _isSupported;
7
+ private readonly _nativeModuleWrapper;
8
+ private _loggerService;
9
+ constructor(_isSupported: boolean, _nativeModuleWrapper: NativeModuleWrapper, _loggerServiceFactory: (tag: string) => LoggerPublisherService);
10
+ getIdentifier(): TransportIdentifier;
11
+ isSupported(): boolean;
12
+ startDiscovering(): Observable<TransportDiscoveredDevice>;
13
+ stopDiscovering(): void;
14
+ listenToAvailableDevices(): Observable<TransportDiscoveredDevice[]>;
15
+ connect(_params: {
16
+ deviceId: DeviceId;
17
+ onDisconnect: DisconnectHandler;
18
+ }): Promise<Either<ConnectError, TransportConnectedDevice>>;
19
+ disconnect(_params: {
20
+ connectedDevice: TransportConnectedDevice;
21
+ }): Promise<Either<DmkError, void>>;
22
+ }
23
+ //# sourceMappingURL=RNHidTransport.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=RNHidTransport.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RNHidTransport.test.d.ts","sourceRoot":"","sources":["../../../../src/api/transport/RNHidTransport.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export declare const TRANSPORT_IDENTIFIER = "RN_HID";
2
+ //# sourceMappingURL=rnHidTransportIdentifier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rnHidTransportIdentifier.d.ts","sourceRoot":"","sources":["../../../../src/api/transport/rnHidTransportIdentifier.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,oBAAoB,WAAW,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { type ConnectError, type TransportDeviceModel } from "@ledgerhq/device-management-kit";
2
+ import { type Either } from "purify-ts";
3
+ type InternalConnectionSuccess = {
4
+ sessionId: string;
5
+ transportDeviceModel: TransportDeviceModel;
6
+ };
7
+ export type InternalConnectionResult = Either<ConnectError, InternalConnectionSuccess>;
8
+ export type InternalDeviceDisconnected = {
9
+ sessionId: string;
10
+ };
11
+ export {};
12
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/api/transport/types.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,oBAAoB,EAC1B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,WAAW,CAAC;AAExC,KAAK,yBAAyB,GAAG;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,oBAAoB,EAAE,oBAAoB,CAAC;CAC5C,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,MAAM,CAC3C,YAAY,EACZ,yBAAyB,CAC1B,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { RNHidTransportFactory } from "./api/RNHidTransportFactory";
2
+ export { TRANSPORT_IDENTIFIER as rnHidTransportIdentifier } from "./api/transport/rnHidTransportIdentifier";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,oBAAoB,IAAI,wBAAwB,EAAE,MAAM,yCAAyC,CAAC"}