Skip to content

Commit f9b391f

Browse files
authored
chore: sunset the broken hw-transport-node-ble (LedgerHQ#6344)
1 parent 31e0f6a commit f9b391f

File tree

16 files changed

+4028
-4163
lines changed

16 files changed

+4028
-4163
lines changed

README.md

-1
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,6 @@ These packages are deployed to the official npm repository under the `@ledgerhq`
171171
| [**@ledgerhq/hw-transport**](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs/packages/hw-transport) | `pnpm ljs:hw-transport` | [ledgerjs](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs) | [![npm](https://img.shields.io/npm/v/@ledgerhq/hw-transport.svg)](https://www.npmjs.com/package/@ledgerhq/hw-transport) |
172172
| [**@ledgerhq/hw-transport-http**](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs/packages/hw-transport-http) | `pnpm ljs:hw-transport-http` | [ledgerjs](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs) | [![npm](https://img.shields.io/npm/v/@ledgerhq/hw-transport-http.svg)](https://www.npmjs.com/package/@ledgerhq/hw-transport-http) |
173173
| [**@ledgerhq/hw-transport-mocker**](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs/packages/hw-transport-mocker) | `pnpm ljs:hw-transport-mocker` | [ledgerjs](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs) | [![npm](https://img.shields.io/npm/v/@ledgerhq/hw-transport-mocker.svg)](https://www.npmjs.com/package/@ledgerhq/hw-transport-mocker) |
174-
| [**@ledgerhq/hw-transport-node-ble**](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs/packages/hw-transport-node-ble) | `pnpm ljs:hw-transport-node` | [ledgerjs](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs) | [![npm](https://img.shields.io/npm/v/@ledgerhq/hw-transport-node-ble.svg)](https://www.npmjs.com/package/@ledgerhq/hw-transport-node-ble) |
175174
| [**@ledgerhq/hw-transport-node-hid**](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs/packages/hw-transport-node-hid) | `pnpm ljs:hw-transport-node` | [ledgerjs](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs) | [![npm](https://img.shields.io/npm/v/@ledgerhq/hw-transport-node-hid.svg)](https://www.npmjs.com/package/@ledgerhq/hw-transport-node-hid) |
176175
| [**@ledgerhq/hw-transport-node-hid-noevents**](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs/packages/hw-transport-node-hid-noevents) | `pnpm ljs:hw-transport-node` | [ledgerjs](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs) | [![npm](https://img.shields.io/npm/v/@ledgerhq/hw-transport-node-hid-noevents.svg)](https://www.npmjs.com/package/@ledgerhq/hw-transport-node-hid-noevents) |
177176
| [**@ledgerhq/hw-transport-node-hid-singleton**](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs/packages/hw-transport-node-hid-singleton) | `pnpm ljs:hw-transport-node` | [ledgerjs](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs) | [![npm](https://img.shields.io/npm/v/@ledgerhq/hw-transport-node-hid-singleton.svg)](https://www.npmjs.com/package/@ledgerhq/hw-transport-node-hid-singleton) |

apps/cli/package.json

-6
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,6 @@
2626
"lint:fix": "pnpm lint --fix",
2727
"test": "zx ./scripts/test.mjs"
2828
},
29-
"peerDependencies": {
30-
"@ledgerhq/hw-transport-node-ble": "workspace:^"
31-
},
32-
"optionalDependencies": {
33-
"@ledgerhq/hw-transport-node-ble": "workspace:^"
34-
},
3529
"dependencies": {
3630
"@ledgerhq/coin-framework": "workspace:^",
3731
"@ledgerhq/cryptoassets": "workspace:^",

apps/cli/src/live-common-setup.ts

+2-77
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ import { openTransportReplayer, RecordStore } from "@ledgerhq/hw-transport-mocke
55
import Transport from "@ledgerhq/hw-transport";
66
import { NotEnoughBalance } from "@ledgerhq/errors";
77
import { log } from "@ledgerhq/logs";
8-
import { firstValueFrom, Observable } from "rxjs";
9-
import { map, first, switchMap } from "rxjs/operators";
8+
import { Observable } from "rxjs";
9+
import { map } from "rxjs/operators";
1010
import createTransportHttp from "@ledgerhq/hw-transport-http";
1111
import SpeculosTransport, { SpeculosTransportOpts } from "@ledgerhq/hw-transport-node-speculos";
1212
import { registerTransportModule, disconnect } from "@ledgerhq/live-common/hw/index";
@@ -23,8 +23,6 @@ checkLibs({
2323
Transport,
2424
});
2525

26-
type BluetoothTransport = any;
27-
2826
let idCounter = 0;
2927
const mockTransports = {};
3028
const recordStores = {};
@@ -101,79 +99,6 @@ if (SPECULOS_APDU_PORT) {
10199
const cacheBle = {};
102100

103101
async function init() {
104-
let TransportNodeBle;
105-
106-
const getTransport = async (): Promise<BluetoothTransport> => {
107-
if (!TransportNodeBle) {
108-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
109-
// @ts-ignore
110-
const { default: mod } = await import("@ledgerhq/hw-transport-node-ble");
111-
TransportNodeBle = mod;
112-
}
113-
114-
return TransportNodeBle as BluetoothTransport;
115-
};
116-
117-
const openBleByQuery = async query => {
118-
const m = query.match(/^ble:?(.*)/);
119-
if (!m) throw new Error("ble regexp should match");
120-
const [, q] = m;
121-
if (cacheBle[query]) return cacheBle[query];
122-
const t = await (!q
123-
? ((await getTransport().constructor) as typeof TransportNodeBle).create()
124-
: // NOTE: NOT SURE HERE, CHECK IT BACK DEFORE MERGING
125-
await firstValueFrom(
126-
new Observable(
127-
((await getTransport().constructor) as typeof TransportNodeBle).listen,
128-
).pipe(
129-
first(
130-
(e: any) =>
131-
(e.device.name || "").toLowerCase().includes(q.toLowerCase()) ||
132-
e.device.id.toLowerCase() === q.toLowerCase(),
133-
),
134-
switchMap(e => TransportNodeBle.open(e.descriptor)),
135-
),
136-
));
137-
cacheBle[query] = t;
138-
(t as Transport).on("disconnect", () => {
139-
delete cacheBle[query];
140-
});
141-
return t;
142-
};
143-
144-
registerTransportModule({
145-
id: "ble",
146-
open: query => {
147-
if (query.startsWith("ble")) {
148-
return openBleByQuery(query);
149-
}
150-
},
151-
discovery: new Observable(o => {
152-
let s: any;
153-
154-
getTransport().then(module => {
155-
(module.constructor as typeof TransportNodeBle).listen(o);
156-
s = module;
157-
});
158-
159-
return () => s && s.unsubscribe();
160-
}).pipe(
161-
map((e: any) => ({
162-
type: e.type,
163-
id: "ble:" + e.device.id,
164-
name: e.device.name || "",
165-
})),
166-
),
167-
disconnect: async query =>
168-
query.startsWith("ble")
169-
? cacheBle[query]
170-
? ((await getTransport().constructor) as typeof TransportNodeBle).disconnect(
171-
cacheBle[query].id,
172-
)
173-
: Promise.resolve()
174-
: undefined,
175-
});
176-
177102
const {
178103
default: TransportNodeHid,
179104
// eslint-disable-next-line @typescript-eslint/no-var-requires

apps/ledger-live-mobile/ios/ledgerlivemobile.xcodeproj/project.pbxproj

+15-3
Original file line numberDiff line numberDiff line change
@@ -803,7 +803,11 @@
803803
"$(inherited)",
804804
" ",
805805
);
806-
OTHER_LDFLAGS = "$(inherited)";
806+
OTHER_LDFLAGS = (
807+
"$(inherited)",
808+
"-Wl",
809+
"-ld_classic",
810+
);
807811
REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native";
808812
SDKROOT = iphoneos;
809813
SWIFT_VERSION = 5.0;
@@ -930,7 +934,11 @@
930934
"$(inherited)",
931935
" ",
932936
);
933-
OTHER_LDFLAGS = "$(inherited)";
937+
OTHER_LDFLAGS = (
938+
"$(inherited)",
939+
"-Wl",
940+
"-ld_classic",
941+
);
934942
REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native";
935943
SDKROOT = iphoneos;
936944
SWIFT_VERSION = 5.0;
@@ -1001,7 +1009,11 @@
10011009
"$(inherited)",
10021010
" ",
10031011
);
1004-
OTHER_LDFLAGS = "$(inherited)";
1012+
OTHER_LDFLAGS = (
1013+
"$(inherited)",
1014+
"-Wl",
1015+
"-ld_classic",
1016+
);
10051017
REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native";
10061018
SDKROOT = iphoneos;
10071019
SWIFT_COMPILATION_MODE = wholemodule;

libs/ledgerjs/README.md

+12-12
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,12 @@ Welcome to Ledger's JavaScript libraries.
2222

2323
> The _hw-transport_ libraries implement communication protocol for our [hardware wallet devices](https://www.ledger.com/) (Ledger Nano / Ledger Nano S / Ledger Nano X / Ledger Blue) in many platforms: **Web, Node, Electron, React Native,...** and using many different communication channels: **U2F, HID, WebUSB, Bluetooth,...**
2424
25-
| Channels | U2F/WebAuthn | HID | WebUSB | Bluetooth |
26-
| -------- | ---------------------- | --- | ------ | --------- |
27-
| Blue | DEPRECATED<sup>1</sup> | YES | NO | NO |
28-
| Nano S | DEPRECATED<sup>1</sup> | YES | YES | NO |
25+
| Channels | U2F/WebAuthn | HID | WebUSB | Bluetooth |
26+
| ----------- | ---------------------- | --- | ------ | --------- |
27+
| Blue | DEPRECATED<sup>1</sup> | YES | NO | NO |
28+
| Nano S | DEPRECATED<sup>1</sup> | YES | YES | NO |
2929
| Nano S Plus | DEPRECATED<sup>1</sup> | YES | YES | NO |
30-
| Nano X | DEPRECATED<sup>1</sup> | YES | YES | YES |
30+
| Nano X | DEPRECATED<sup>1</sup> | YES | YES | YES |
3131

3232
1. U2F is deprecated. See https://github.com/LedgerHQ/ledger-live/wiki/LJS:MigrateWebUSB
3333

@@ -36,7 +36,7 @@ Summary of implementations available per platform
3636
| Platforms | U2F/WebAuthn | HID | WebUSB | Bluetooth |
3737
| ---------------- | ---------------------------------------- | --------------------------------------------- | ------------------------------------------- | ----------------------------------------- |
3838
| Web | `@ledgerhq/hw-transport-u2f` | `@ledgerhq/hw-transport-webhid` | `@ledgerhq/hw-transport-webusb` | `@ledgerhq/hw-transport-web-ble` |
39-
| Electron/Node.js | NO | `@ledgerhq/hw-transport-node-hid`<sup>1</sup> | NO | `@ledgerhq/hw-transport-node-ble` |
39+
| Electron/Node.js | NO | `@ledgerhq/hw-transport-node-hid`<sup>1</sup> | NO | NO |
4040
| iOS | NO | NO | NO | `@ledgerhq/react-native-hw-transport-ble` |
4141
| Android | `@ledgerhq/hw-transport-u2f`<sup>2</sup> | `@ledgerhq/react-native-hid` | `@ledgerhq/hw-transport-webusb`<sup>2</sup> | `@ledgerhq/react-native-hw-transport-ble` |
4242

@@ -69,7 +69,6 @@ Summary of implementations available per platform
6969
- [![npm](https://img.shields.io/npm/v/@ledgerhq/hw-transport-node-hid.svg)](https://www.npmjs.com/package/@ledgerhq/hw-transport-node-hid) [@ledgerhq/hw-transport-node-hid](./packages/hw-transport-node-hid) **[Node]**/Electron **(HID)** – historical implementation – uses `node-hid` and `usb`.
7070
- [![npm](https://img.shields.io/npm/v/@ledgerhq/hw-transport-node-hid-noevents.svg)](https://www.npmjs.com/package/@ledgerhq/hw-transport-node-hid-noevents) [@ledgerhq/hw-transport-node-hid-noevents](./packages/hw-transport-node-hid-noevents) **[Node]**/Electron **(HID)** – uses **only** `node-hid`. Does not provide USB events.
7171
- [![npm](https://img.shields.io/npm/v/@ledgerhq/hw-transport-node-hid-singleton.svg)](https://www.npmjs.com/package/@ledgerhq/hw-transport-node-hid-singleton) [@ledgerhq/hw-transport-node-hid-singleton](./packages/hw-transport-node-hid-singleton) **[Node]**/Electron **(HID)** – uses `node-hid` and `node-usb`. Focus on supporting one device at a time (potentially will have more robust events and less blocking cases)
72-
- [![npm](https://img.shields.io/npm/v/@ledgerhq/hw-transport-node-ble.svg)](https://www.npmjs.com/package/@ledgerhq/hw-transport-node-ble) [@ledgerhq/hw-transport-node-ble](./packages/hw-transport-node-ble) **[Node]**/Electron **(BLE)** (experimental) – uses `@abandonware/noble`.
7372
- [![npm](https://img.shields.io/npm/v/@ledgerhq/react-native-hw-transport-ble.svg)](https://www.npmjs.com/package/@ledgerhq/react-native-hw-transport-ble) [@ledgerhq/react-native-hw-transport-ble](./packages/react-native-hw-transport-ble) **[React Native]** **(Bluetooth)** – uses `react-native-ble-plx`
7473
- [![npm](https://img.shields.io/npm/v/@ledgerhq/react-native-hid.svg)](https://www.npmjs.com/package/@ledgerhq/react-native-hid) [@ledgerhq/react-native-hid](./packages/react-native-hid) **[React Native]** **(HID)** _Android_ – Ledger's native implementation
7574
- [![npm](https://img.shields.io/npm/v/@ledgerhq/hw-transport-http.svg)](https://www.npmjs.com/package/@ledgerhq/hw-transport-http) [@ledgerhq/hw-transport-http](./packages/hw-transport-http) **[DEV only]** universal HTTP channel. **NOT for PROD**.
@@ -135,7 +134,7 @@ const getBtcAddress = async () => {
135134
const result = await btc.getWalletPublicKey("44'/0'/0'/0/0");
136135
return result.bitcoinAddress;
137136
};
138-
getBtcAddress().then((a) => console.log(a));
137+
getBtcAddress().then(a => console.log(a));
139138
```
140139

141140
## Contributing
@@ -215,23 +214,24 @@ pnpm clean:ljs && pnpm build:ljs && pnpm doc:ljs && pnpm publish --filter="./lib
215214

216215
then, go to [/releases](https://github.com/LedgerHQ/ledger-live/releases) and create a release with change logs.
217216

218-
219217
---
220218

221219
## Are you adding the support of a blockchain to Ledger Live?
222220

223-
This part of the repository is where you will add your blockchain to the cryptoasset library.
221+
This part of the repository is where you will add your blockchain to the cryptoasset library.
224222

225223
For a smooth and quick integration:
226-
- See the developers’ documentation on the [Developer Portal](https://developers.ledger.com/docs/coin/general-process/) and
224+
225+
- See the developers’ documentation on the [Developer Portal](https://developers.ledger.com/docs/coin/general-process/) and
227226
- Go on [Discord](https://developers.ledger.com/discord-pro/) to chat with developer support and the developer community.
228227

229228
## Are you adding Ledger device support to your web/mobile/desktop application?
230229

231230
This part of the repository contains the transport libraries that will be used to establish the communication between your app and Ledger devices.
232231

233232
For a smooth and quick integration:
234-
- See the developers’ documentation on the [Developer Portal](https://developers.ledger.com/docs/transport/overview/) and
233+
234+
- See the developers’ documentation on the [Developer Portal](https://developers.ledger.com/docs/transport/overview/) and
235235
- Go on [Discord](https://developers.ledger.com/discord-pro/) to chat with developer support and the developer community.
236236

237237
---

libs/ledgerjs/packages/hw-transport-node-ble/.unimportedrc.json

-3
This file was deleted.

0 commit comments

Comments
 (0)