From f19864f4cfefe27b29875355b62972b6de5765db Mon Sep 17 00:00:00 2001 From: Chris Duncan Date: Mon, 18 May 2026 10:09:20 -0700 Subject: [PATCH] Enqueue from call, not within called function. --- src/lib/ledger/connect.ts | 7 +++--- src/lib/ledger/version.ts | 47 ++++++++++++++++++--------------------- 2 files changed, 26 insertions(+), 28 deletions(-) diff --git a/src/lib/ledger/connect.ts b/src/lib/ledger/connect.ts index 3b13d7d..aeb463d 100644 --- a/src/lib/ledger/connect.ts +++ b/src/lib/ledger/connect.ts @@ -3,7 +3,8 @@ import { LedgerStatus, LedgerTransport } from '.' import { _account } from './account' -import { version } from './version' +import { queue } from './queue' +import { _version } from './version' /** * Check if the Nano app is currently open and set device status accordingly. @@ -18,13 +19,13 @@ import { version } from './version' export async function _connect (transport: LedgerTransport): Promise { let status: LedgerStatus = 'DISCONNECTED' try { - const v = await version(transport) + const v = await queue(async () => _version(transport)) if (v.status === 'LOCKED_DEVICE') { status = 'LOCKED' } else if (v.status !== 'OK') { status = 'DISCONNECTED' } else if (v.name === 'Nano') { - const a = await _account(transport) + const a = await queue(async () => _account(transport)) if (a.status === 'OK') { status = 'CONNECTED' } else if (a.status === 'SECURITY_STATUS_NOT_SATISFIED') { diff --git a/src/lib/ledger/version.ts b/src/lib/ledger/version.ts index ccbd2b7..0c6745c 100644 --- a/src/lib/ledger/version.ts +++ b/src/lib/ledger/version.ts @@ -1,9 +1,8 @@ //! SPDX-FileCopyrightText: 2025 Chris Duncan //! SPDX-License-Identifier: GPL-3.0-or-later -import { APDU_CODES, LedgerResponse, LedgerTransport, STATUS_CODES, LISTEN_TIMEOUT, OPEN_TIMEOUT } from '.' +import { APDU_CODES, LedgerResponse, LedgerTransport, LISTEN_TIMEOUT, OPEN_TIMEOUT, STATUS_CODES } from '.' import { bytes, dec } from '../convert' -import { queue } from './queue' interface LedgerVersionResponse extends LedgerResponse { name: string | null, @@ -17,30 +16,28 @@ interface LedgerVersionResponse extends LedgerResponse { * * @returns Status, process name, and version */ -export async function version (transport: LedgerTransport): Promise { - return queue(async () => { - try { - const t = await transport.create(OPEN_TIMEOUT, LISTEN_TIMEOUT) - const response = await t - .send(0xb0, APDU_CODES.version, APDU_CODES.paramUnused, APDU_CODES.paramUnused) - .catch((err: any) => dec.toBytes(err.statusCode)) - .finally(async () => await t.close()) as Uint8Array +export async function _version (transport: LedgerTransport): Promise { + try { + const t = await transport.create(OPEN_TIMEOUT, LISTEN_TIMEOUT) + const response = await t + .send(0xb0, APDU_CODES.version, APDU_CODES.paramUnused, APDU_CODES.paramUnused) + .catch((err: any) => dec.toBytes(err.statusCode)) + .finally(async () => await t.close()) as Uint8Array - const statusCode = bytes.toDec(response.slice(-2)) as number - const status = STATUS_CODES[statusCode] ?? 'UNKNOWN_ERROR' - if (status !== 'OK') { - return { status, name: null, version: null } - } + const statusCode = bytes.toDec(response.slice(-2)) as number + const status = STATUS_CODES[statusCode] ?? 'UNKNOWN_ERROR' + if (status !== 'OK') { + return { status, name: null, version: null } + } - const nameLength = response[1] - const name = response.slice(2, 2 + nameLength).toString() - const versionLength = response[2 + nameLength] - const version = response.slice(2 + nameLength + 1, 2 + nameLength + 1 + versionLength).toString() + const nameLength = response[1] + const name = response.slice(2, 2 + nameLength).toString() + const versionLength = response[2 + nameLength] + const version = response.slice(2 + nameLength + 1, 2 + nameLength + 1 + versionLength).toString() - return { status, name, version } - } catch (err: any) { - console.error('Ledger.#version()', err) - return { status: err.message, name: null, version: null } - } - }) + return { status, name, version } + } catch (err: any) { + console.error('Ledger.#version()', err) + return { status: err.message, name: null, version: null } + } } -- 2.47.3