diff --git a/.changeset/funny-ads-destroy.md b/.changeset/funny-ads-destroy.md new file mode 100644 index 000000000..be63c4253 --- /dev/null +++ b/.changeset/funny-ads-destroy.md @@ -0,0 +1,5 @@ +--- +"@ledgerhq/device-management-kit": minor +--- + +Add sendApdu in internal API interface diff --git a/.changeset/gold-needles-sell.md b/.changeset/gold-needles-sell.md new file mode 100644 index 000000000..6ac1bec5c --- /dev/null +++ b/.changeset/gold-needles-sell.md @@ -0,0 +1,5 @@ +--- +"@ledgerhq/device-signer-kit-bitcoin": minor +--- + +Add sendApdu in internal API interface diff --git a/.changeset/grumpy-olives-shave.md b/.changeset/grumpy-olives-shave.md new file mode 100644 index 000000000..2abf11755 --- /dev/null +++ b/.changeset/grumpy-olives-shave.md @@ -0,0 +1,5 @@ +--- +"@ledgerhq/device-signer-kit-solana": minor +--- + +Add sendApdu in internal API interface diff --git a/.changeset/smooth-fireants-sip.md b/.changeset/smooth-fireants-sip.md new file mode 100644 index 000000000..662526e44 --- /dev/null +++ b/.changeset/smooth-fireants-sip.md @@ -0,0 +1,5 @@ +--- +"@ledgerhq/device-signer-kit-ethereum": minor +--- + +Add sendApdu in internal API interface diff --git a/packages/device-management-kit/package.json b/packages/device-management-kit/package.json index 3edd064ca..728f5e7fc 100644 --- a/packages/device-management-kit/package.json +++ b/packages/device-management-kit/package.json @@ -1,7 +1,7 @@ { "name": "@ledgerhq/device-management-kit", "version": "0.6.0", - "private": true, + "private": false, "license": "Apache-2.0", "exports": { ".": { diff --git a/packages/device-management-kit/src/api/device-action/DeviceAction.ts b/packages/device-management-kit/src/api/device-action/DeviceAction.ts index a59f50e7a..b0ec333de 100644 --- a/packages/device-management-kit/src/api/device-action/DeviceAction.ts +++ b/packages/device-management-kit/src/api/device-action/DeviceAction.ts @@ -1,7 +1,9 @@ +import { type Either } from "purify-ts"; import { type Observable } from "rxjs"; import { type Command } from "@api/command/Command"; import { type CommandResult } from "@api/command/model/CommandResult"; +import { type ApduResponse } from "@api/device-session/ApduResponse"; import { type DeviceSessionState } from "@api/device-session/DeviceSessionState"; import { type DmkError } from "@api/Error"; import { type ManagerApiService } from "@internal/manager-api/service/ManagerApiService"; @@ -10,6 +12,9 @@ import { type SecureChannelService } from "@internal/secure-channel/service/Secu import { type DeviceActionState } from "./model/DeviceActionState"; export type InternalApi = { + readonly sendApdu: ( + apdu: Uint8Array, + ) => Promise>; readonly sendCommand: ( command: Command, ) => Promise>; diff --git a/packages/device-management-kit/src/api/device-action/__test-utils__/makeInternalApi.ts b/packages/device-management-kit/src/api/device-action/__test-utils__/makeInternalApi.ts index f330ed367..64d54eda7 100644 --- a/packages/device-management-kit/src/api/device-action/__test-utils__/makeInternalApi.ts +++ b/packages/device-management-kit/src/api/device-action/__test-utils__/makeInternalApi.ts @@ -2,6 +2,7 @@ import { type Mocked } from "vitest"; import { type InternalApi } from "@api/device-action/DeviceAction"; +const sendApduMock = vi.fn(); const sendCommandMock = vi.fn(); const apiGetDeviceSessionStateMock = vi.fn(); const apiGetDeviceSessionStateObservableMock = vi.fn(); @@ -11,6 +12,7 @@ const getSecureChannelServiceMock = vi.fn(); export function makeDeviceActionInternalApiMock(): Mocked { return { + sendApdu: sendApduMock, sendCommand: sendCommandMock, getDeviceSessionState: apiGetDeviceSessionStateMock, getDeviceSessionStateObservable: apiGetDeviceSessionStateObservableMock, diff --git a/packages/device-management-kit/src/internal/device-session/model/DeviceSession.ts b/packages/device-management-kit/src/internal/device-session/model/DeviceSession.ts index 1e2e79c28..2c0bc9f89 100644 --- a/packages/device-management-kit/src/internal/device-session/model/DeviceSession.ts +++ b/packages/device-management-kit/src/internal/device-session/model/DeviceSession.ts @@ -31,6 +31,11 @@ export type SessionConstructorArgs = { id?: DeviceSessionId; }; +type SendApduOptions = { + isPolling?: boolean; + triggersDisconnection?: boolean; +}; + /** * Represents a session with a device. */ @@ -103,10 +108,7 @@ export class DeviceSession { async sendApdu( rawApdu: Uint8Array, - options: { - isPolling: boolean; - triggersDisconnection: boolean; - } = { + options: SendApduOptions = { isPolling: false, triggersDisconnection: false, }, @@ -116,7 +118,9 @@ export class DeviceSession { return Left(new DeviceBusyError()); } - if (!options.isPolling) this.updateDeviceStatus(DeviceStatus.BUSY); + if (!options.isPolling) { + this.updateDeviceStatus(DeviceStatus.BUSY); + } const errorOrResponse = await this._connectedDevice.sendApdu( rawApdu, @@ -163,6 +167,7 @@ export class DeviceSession { deviceAction: DeviceAction, ): ExecuteDeviceActionReturnType { const { observable, cancel } = deviceAction._execute({ + sendApdu: async (apdu: Uint8Array) => this.sendApdu(apdu), sendCommand: async ( command: Command, ) => this.sendCommand(command), diff --git a/packages/signer/signer-btc/package.json b/packages/signer/signer-btc/package.json index a2ef67da1..4ebd1cbed 100644 --- a/packages/signer/signer-btc/package.json +++ b/packages/signer/signer-btc/package.json @@ -4,7 +4,7 @@ "license": "Apache-2.0", "main": "lib/cjs/index.js", "types": "lib/cjs/index.d.ts", - "private": true, + "private": false, "exports": { ".": { "types": "./lib/types/index.d.ts", diff --git a/packages/signer/signer-btc/src/internal/app-binder/device-action/__test-utils__/makeInternalApi.ts b/packages/signer/signer-btc/src/internal/app-binder/device-action/__test-utils__/makeInternalApi.ts index 59aac6ed1..9e5508881 100644 --- a/packages/signer/signer-btc/src/internal/app-binder/device-action/__test-utils__/makeInternalApi.ts +++ b/packages/signer/signer-btc/src/internal/app-binder/device-action/__test-utils__/makeInternalApi.ts @@ -1,6 +1,7 @@ import { type InternalApi } from "@ledgerhq/device-management-kit"; import { type Mocked } from "vitest"; +const sendApduMock = vi.fn(); const sendCommandMock = vi.fn(); const apiGetDeviceSessionStateMock = vi.fn(); const apiGetDeviceSessionStateObservableMock = vi.fn(); @@ -10,6 +11,7 @@ const getSecureChannelServiceMock = vi.fn(); export function makeDeviceActionInternalApiMock(): Mocked { return { + sendApdu: sendApduMock, sendCommand: sendCommandMock, getDeviceSessionState: apiGetDeviceSessionStateMock, getDeviceSessionStateObservable: apiGetDeviceSessionStateObservableMock, diff --git a/packages/signer/signer-eth/package.json b/packages/signer/signer-eth/package.json index 88cc94d38..1ccc8ceb7 100644 --- a/packages/signer/signer-eth/package.json +++ b/packages/signer/signer-eth/package.json @@ -1,7 +1,7 @@ { "name": "@ledgerhq/device-signer-kit-ethereum", "version": "1.1.0", - "private": true, + "private": false, "license": "Apache-2.0", "exports": { ".": { diff --git a/packages/signer/signer-eth/src/internal/app-binder/device-action/__test-utils__/makeInternalApi.ts b/packages/signer/signer-eth/src/internal/app-binder/device-action/__test-utils__/makeInternalApi.ts index 51b55a317..9e5508881 100644 --- a/packages/signer/signer-eth/src/internal/app-binder/device-action/__test-utils__/makeInternalApi.ts +++ b/packages/signer/signer-eth/src/internal/app-binder/device-action/__test-utils__/makeInternalApi.ts @@ -1,14 +1,17 @@ import { type InternalApi } from "@ledgerhq/device-management-kit"; import { type Mocked } from "vitest"; +const sendApduMock = vi.fn(); const sendCommandMock = vi.fn(); const apiGetDeviceSessionStateMock = vi.fn(); const apiGetDeviceSessionStateObservableMock = vi.fn(); const setDeviceSessionStateMock = vi.fn(); const getManagerApiServiceMock = vi.fn(); const getSecureChannelServiceMock = vi.fn(); + export function makeDeviceActionInternalApiMock(): Mocked { return { + sendApdu: sendApduMock, sendCommand: sendCommandMock, getDeviceSessionState: apiGetDeviceSessionStateMock, getDeviceSessionStateObservable: apiGetDeviceSessionStateObservableMock, diff --git a/packages/signer/signer-solana/package.json b/packages/signer/signer-solana/package.json index 2524594b8..0aab28660 100644 --- a/packages/signer/signer-solana/package.json +++ b/packages/signer/signer-solana/package.json @@ -1,7 +1,7 @@ { "name": "@ledgerhq/device-signer-kit-solana", "version": "1.1.0", - "private": true, + "private": false, "license": "Apache-2.0", "exports": { ".": { diff --git a/packages/signer/signer-solana/src/internal/app-binder/device-action/__test-utils__/makeInternalApi.ts b/packages/signer/signer-solana/src/internal/app-binder/device-action/__test-utils__/makeInternalApi.ts index 59aac6ed1..9e5508881 100644 --- a/packages/signer/signer-solana/src/internal/app-binder/device-action/__test-utils__/makeInternalApi.ts +++ b/packages/signer/signer-solana/src/internal/app-binder/device-action/__test-utils__/makeInternalApi.ts @@ -1,6 +1,7 @@ import { type InternalApi } from "@ledgerhq/device-management-kit"; import { type Mocked } from "vitest"; +const sendApduMock = vi.fn(); const sendCommandMock = vi.fn(); const apiGetDeviceSessionStateMock = vi.fn(); const apiGetDeviceSessionStateObservableMock = vi.fn(); @@ -10,6 +11,7 @@ const getSecureChannelServiceMock = vi.fn(); export function makeDeviceActionInternalApiMock(): Mocked { return { + sendApdu: sendApduMock, sendCommand: sendCommandMock, getDeviceSessionState: apiGetDeviceSessionStateMock, getDeviceSessionStateObservable: apiGetDeviceSessionStateObservableMock,