@onekeyfe/hwk-ledger-connector-ble 1.1.26 → 1.1.27-alpha.30

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.
package/dist/index.d.mts CHANGED
@@ -10,6 +10,7 @@ interface LedgerBleConnectorOptions {
10
10
  declare class LedgerBleConnector extends LedgerConnectorBase {
11
11
  private readonly _livenessProbeTimeoutMs;
12
12
  constructor(options?: LedgerBleConnectorOptions);
13
+ protected _resolveConnectId(descriptor: DeviceDescriptor): string;
13
14
  /** BLE discovery uses a fresh scan window; enumerate cache is ignored. */
14
15
  protected _discoverDescriptors(dm: LedgerDeviceManager): Promise<DeviceDescriptor[]>;
15
16
  }
package/dist/index.d.ts CHANGED
@@ -10,6 +10,7 @@ interface LedgerBleConnectorOptions {
10
10
  declare class LedgerBleConnector extends LedgerConnectorBase {
11
11
  private readonly _livenessProbeTimeoutMs;
12
12
  constructor(options?: LedgerBleConnectorOptions);
13
+ protected _resolveConnectId(descriptor: DeviceDescriptor): string;
13
14
  /** BLE discovery uses a fresh scan window; enumerate cache is ignored. */
14
15
  protected _discoverDescriptors(dm: LedgerDeviceManager): Promise<DeviceDescriptor[]>;
15
16
  }
package/dist/index.js CHANGED
@@ -36,7 +36,6 @@ __export(index_exports, {
36
36
  module.exports = __toCommonJS(index_exports);
37
37
 
38
38
  // src/LedgerBleConnector.ts
39
- var import_react_native = require("react-native");
40
39
  var import_hwk_ledger_adapter = require("@onekeyfe/hwk-ledger-adapter");
41
40
  var rnBleMetadataByPath = /* @__PURE__ */ new Map();
42
41
  function patchLedgerRnBleTransportMetadata(transport) {
@@ -48,13 +47,10 @@ function patchLedgerRnBleTransportMetadata(transport) {
48
47
  target._mapDeviceToTransportDiscoveredDevice = function patchedMapDevice(device, services) {
49
48
  if (device.id) {
50
49
  rnBleMetadataByPath.set(device.id, {
51
- // RN BLE exposes the raw advertisement name separately from localName.
52
- // Keep both for diagnostics/display, but do not use either as connectId.
50
+ // On RN BLE, `name` is the stable Ledger four-character identifier
51
+ // (for example A58F), while `localName` is the user-visible label.
53
52
  bleName: device.name ?? void 0,
54
- localName: device.localName ?? void 0,
55
- rssi: device.rssi,
56
- serviceUUIDs: device.serviceUUIDs,
57
- isConnectable: device.isConnectable
53
+ localName: device.localName ?? void 0
58
54
  });
59
55
  }
60
56
  const result = original.call(this, device, services);
@@ -63,6 +59,9 @@ function patchLedgerRnBleTransportMetadata(transport) {
63
59
  }
64
60
  return result.map((mappedDevice) => ({
65
61
  ...mappedDevice,
62
+ // Preserve the stable BLE identifier through DMK's DiscoveredDevice.name.
63
+ // The UI display name is carried separately via localName below.
64
+ name: device.name || device.localName || mappedDevice.name || "",
66
65
  localName: device.localName || mappedDevice.localName
67
66
  }));
68
67
  };
@@ -75,15 +74,14 @@ var LedgerBleConnector = class extends import_hwk_ledger_adapter.LedgerConnector
75
74
  const { RNBleTransportFactory } = await import("@ledgerhq/device-transport-kit-react-native-ble");
76
75
  return ((args) => patchLedgerRnBleTransportMetadata(RNBleTransportFactory(args)));
77
76
  },
78
- {
79
- connectionType: "ble",
80
- dmk: options?.dmk,
81
- // iOS Core Bluetooth wedges ~30s on connect to non-advertising peripherals.
82
- requirePreFlightScan: import_react_native.Platform.OS === "ios"
83
- }
77
+ { connectionType: "ble", dmk: options?.dmk }
84
78
  );
85
79
  this._livenessProbeTimeoutMs = options?.livenessProbeTimeoutMs ?? 800;
86
80
  }
81
+ _resolveConnectId(descriptor) {
82
+ const ledgerBleDescriptor = descriptor;
83
+ return (0, import_hwk_ledger_adapter.extractBleHexId)(ledgerBleDescriptor.bleName) || (0, import_hwk_ledger_adapter.extractBleHexId)(ledgerBleDescriptor.name) || "";
84
+ }
87
85
  /** BLE discovery uses a fresh scan window; enumerate cache is ignored. */
88
86
  async _discoverDescriptors(dm) {
89
87
  const live = await dm.getLiveDevices(this._livenessProbeTimeoutMs);
@@ -92,12 +90,9 @@ var LedgerBleConnector = class extends import_hwk_ledger_adapter.LedgerConnector
92
90
  return {
93
91
  path: d.id,
94
92
  type: d.deviceModel.model,
95
- modelName: d.deviceModel.name,
96
93
  name: metadata?.localName || d.name,
97
94
  bleName: metadata?.bleName || d.name,
98
95
  localName: metadata?.localName,
99
- serviceUUIDs: metadata?.serviceUUIDs,
100
- isConnectable: metadata?.isConnectable,
101
96
  transport: d.transport,
102
97
  rssi: d.rssi
103
98
  };
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/LedgerBleConnector.ts"],"sourcesContent":["import { LedgerBleConnector } from './LedgerBleConnector';\n\nimport type { IConnector } from '@onekeyfe/hwk-adapter-core';\nimport type { DeviceManagementKit } from '@ledgerhq/device-management-kit';\nimport type { LedgerBleConnectorOptions } from './LedgerBleConnector';\n\nexport { LedgerBleConnector };\nexport type { LedgerBleConnectorOptions };\n\n/**\n * Create a LedgerBleConnector.\n *\n * @param dmk - Optional pre-built DMK instance. If omitted, the connector\n * will lazily create one using `@ledgerhq/device-management-kit`\n * and `@ledgerhq/device-transport-kit-react-native-ble`.\n */\nexport function createLedgerBleConnector(dmk?: DeviceManagementKit): IConnector {\n return new LedgerBleConnector({ dmk });\n}\n","import { Platform } from 'react-native';\nimport { LedgerConnectorBase } from '@onekeyfe/hwk-ledger-adapter';\n\nimport type { LedgerDeviceManager } from '@onekeyfe/hwk-ledger-adapter';\nimport type { DeviceDescriptor } from '@onekeyfe/hwk-adapter-core';\nimport type { DeviceManagementKit, TransportFactory } from '@ledgerhq/device-management-kit';\n\ntype RnBleRawDevice = {\n id?: string;\n name?: string | null;\n localName?: string | null;\n rssi?: number | null;\n serviceUUIDs?: string[] | null;\n isConnectable?: boolean | null;\n};\n\ntype RnBleTransportDiscoveredDevice = {\n id?: string;\n name?: string;\n localName?: string;\n};\n\ntype RnBleMapResult = {\n map?: (\n fn: (device: RnBleTransportDiscoveredDevice) => RnBleTransportDiscoveredDevice\n ) => RnBleMapResult;\n};\n\ntype RnBleTransportWithMapper = {\n _mapDeviceToTransportDiscoveredDevice?: (\n device: RnBleRawDevice,\n services?: string[]\n ) => RnBleMapResult;\n};\n\ntype RnBleMetadata = {\n bleName?: string;\n localName?: string;\n rssi?: number | null;\n serviceUUIDs?: string[] | null;\n isConnectable?: boolean | null;\n};\n\nconst rnBleMetadataByPath = new Map<string, RnBleMetadata>();\n\nfunction patchLedgerRnBleTransportMetadata(transport: unknown): unknown {\n const target = transport as RnBleTransportWithMapper;\n const original = target._mapDeviceToTransportDiscoveredDevice;\n if (typeof original !== 'function') {\n return transport;\n }\n\n target._mapDeviceToTransportDiscoveredDevice = function patchedMapDevice(\n this: RnBleTransportWithMapper,\n device: RnBleRawDevice,\n services?: string[]\n ) {\n if (device.id) {\n rnBleMetadataByPath.set(device.id, {\n // RN BLE exposes the raw advertisement name separately from localName.\n // Keep both for diagnostics/display, but do not use either as connectId.\n bleName: device.name ?? undefined,\n localName: device.localName ?? undefined,\n rssi: device.rssi,\n serviceUUIDs: device.serviceUUIDs,\n isConnectable: device.isConnectable,\n });\n }\n\n const result = original.call(this, device, services);\n if (!result.map) {\n return result;\n }\n return result.map((mappedDevice: RnBleTransportDiscoveredDevice) => ({\n ...mappedDevice,\n localName: device.localName || mappedDevice.localName,\n }));\n };\n\n return transport;\n}\n\nexport interface LedgerBleConnectorOptions {\n dmk?: DeviceManagementKit;\n /** Fresh-scan window for liveness probe (default 800ms; ~2+ adv intervals). */\n livenessProbeTimeoutMs?: number;\n}\n\nexport class LedgerBleConnector extends LedgerConnectorBase {\n private readonly _livenessProbeTimeoutMs: number;\n\n constructor(options?: LedgerBleConnectorOptions) {\n super(\n async () => {\n const { RNBleTransportFactory } = await import(\n '@ledgerhq/device-transport-kit-react-native-ble'\n );\n return ((args: Parameters<TransportFactory>[0]) =>\n patchLedgerRnBleTransportMetadata(RNBleTransportFactory(args))) as TransportFactory;\n },\n {\n connectionType: 'ble',\n dmk: options?.dmk,\n // iOS Core Bluetooth wedges ~30s on connect to non-advertising peripherals.\n requirePreFlightScan: Platform.OS === 'ios',\n }\n );\n this._livenessProbeTimeoutMs = options?.livenessProbeTimeoutMs ?? 800;\n }\n\n /** BLE discovery uses a fresh scan window; enumerate cache is ignored. */\n protected override async _discoverDescriptors(\n dm: LedgerDeviceManager\n ): Promise<DeviceDescriptor[]> {\n const live = await dm.getLiveDevices(this._livenessProbeTimeoutMs);\n return live.map(d => {\n const metadata = rnBleMetadataByPath.get(d.id);\n return {\n path: d.id,\n type: d.deviceModel.model,\n modelName: d.deviceModel.name,\n name: metadata?.localName || d.name,\n bleName: metadata?.bleName || d.name,\n localName: metadata?.localName,\n serviceUUIDs: metadata?.serviceUUIDs,\n isConnectable: metadata?.isConnectable,\n transport: d.transport,\n rssi: d.rssi,\n };\n });\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,0BAAyB;AACzB,gCAAoC;AA0CpC,IAAM,sBAAsB,oBAAI,IAA2B;AAE3D,SAAS,kCAAkC,WAA6B;AACtE,QAAM,SAAS;AACf,QAAM,WAAW,OAAO;AACxB,MAAI,OAAO,aAAa,YAAY;AAClC,WAAO;AAAA,EACT;AAEA,SAAO,wCAAwC,SAAS,iBAEtD,QACA,UACA;AACA,QAAI,OAAO,IAAI;AACb,0BAAoB,IAAI,OAAO,IAAI;AAAA;AAAA;AAAA,QAGjC,SAAS,OAAO,QAAQ;AAAA,QACxB,WAAW,OAAO,aAAa;AAAA,QAC/B,MAAM,OAAO;AAAA,QACb,cAAc,OAAO;AAAA,QACrB,eAAe,OAAO;AAAA,MACxB,CAAC;AAAA,IACH;AAEA,UAAM,SAAS,SAAS,KAAK,MAAM,QAAQ,QAAQ;AACnD,QAAI,CAAC,OAAO,KAAK;AACf,aAAO;AAAA,IACT;AACA,WAAO,OAAO,IAAI,CAAC,kBAAkD;AAAA,MACnE,GAAG;AAAA,MACH,WAAW,OAAO,aAAa,aAAa;AAAA,IAC9C,EAAE;AAAA,EACJ;AAEA,SAAO;AACT;AAQO,IAAM,qBAAN,cAAiC,8CAAoB;AAAA,EAG1D,YAAY,SAAqC;AAC/C;AAAA,MACE,YAAY;AACV,cAAM,EAAE,sBAAsB,IAAI,MAAM,OACtC,iDACF;AACA,gBAAQ,CAAC,SACP,kCAAkC,sBAAsB,IAAI,CAAC;AAAA,MACjE;AAAA,MACA;AAAA,QACE,gBAAgB;AAAA,QAChB,KAAK,SAAS;AAAA;AAAA,QAEd,sBAAsB,6BAAS,OAAO;AAAA,MACxC;AAAA,IACF;AACA,SAAK,0BAA0B,SAAS,0BAA0B;AAAA,EACpE;AAAA;AAAA,EAGA,MAAyB,qBACvB,IAC6B;AAC7B,UAAM,OAAO,MAAM,GAAG,eAAe,KAAK,uBAAuB;AACjE,WAAO,KAAK,IAAI,OAAK;AACnB,YAAM,WAAW,oBAAoB,IAAI,EAAE,EAAE;AAC7C,aAAO;AAAA,QACL,MAAM,EAAE;AAAA,QACR,MAAM,EAAE,YAAY;AAAA,QACpB,WAAW,EAAE,YAAY;AAAA,QACzB,MAAM,UAAU,aAAa,EAAE;AAAA,QAC/B,SAAS,UAAU,WAAW,EAAE;AAAA,QAChC,WAAW,UAAU;AAAA,QACrB,cAAc,UAAU;AAAA,QACxB,eAAe,UAAU;AAAA,QACzB,WAAW,EAAE;AAAA,QACb,MAAM,EAAE;AAAA,MACV;AAAA,IACF,CAAC;AAAA,EACH;AACF;;;ADnHO,SAAS,yBAAyB,KAAuC;AAC9E,SAAO,IAAI,mBAAmB,EAAE,IAAI,CAAC;AACvC;","names":[]}
1
+ {"version":3,"sources":["../src/index.ts","../src/LedgerBleConnector.ts"],"sourcesContent":["import { LedgerBleConnector } from './LedgerBleConnector';\n\nimport type { IConnector } from '@onekeyfe/hwk-adapter-core';\nimport type { DeviceManagementKit } from '@ledgerhq/device-management-kit';\nimport type { LedgerBleConnectorOptions } from './LedgerBleConnector';\n\nexport { LedgerBleConnector };\nexport type { LedgerBleConnectorOptions };\n\n/**\n * Create a LedgerBleConnector.\n *\n * @param dmk - Optional pre-built DMK instance. If omitted, the connector\n * will lazily create one using `@ledgerhq/device-management-kit`\n * and `@ledgerhq/device-transport-kit-react-native-ble`.\n */\nexport function createLedgerBleConnector(dmk?: DeviceManagementKit): IConnector {\n return new LedgerBleConnector({ dmk });\n}\n","import { LedgerConnectorBase, extractBleHexId } from '@onekeyfe/hwk-ledger-adapter';\n\nimport type { LedgerDeviceManager } from '@onekeyfe/hwk-ledger-adapter';\nimport type { DeviceDescriptor } from '@onekeyfe/hwk-adapter-core';\nimport type { DeviceManagementKit, TransportFactory } from '@ledgerhq/device-management-kit';\n\ntype RnBleRawDevice = {\n id?: string;\n name?: string | null;\n localName?: string | null;\n};\n\ntype RnBleTransportDiscoveredDevice = {\n id?: string;\n name?: string;\n localName?: string;\n};\n\ntype RnBleMapResult = {\n map?: (\n fn: (device: RnBleTransportDiscoveredDevice) => RnBleTransportDiscoveredDevice\n ) => RnBleMapResult;\n};\n\ntype RnBleTransportWithMapper = {\n _mapDeviceToTransportDiscoveredDevice?: (\n device: RnBleRawDevice,\n services?: string[]\n ) => RnBleMapResult;\n};\n\ntype LedgerBleDeviceDescriptor = DeviceDescriptor & {\n bleName?: string;\n localName?: string;\n};\n\ntype RnBleMetadata = {\n bleName?: string;\n localName?: string;\n};\n\nconst rnBleMetadataByPath = new Map<string, RnBleMetadata>();\n\nfunction patchLedgerRnBleTransportMetadata(transport: unknown): unknown {\n const target = transport as RnBleTransportWithMapper;\n const original = target._mapDeviceToTransportDiscoveredDevice;\n if (typeof original !== 'function') {\n return transport;\n }\n\n target._mapDeviceToTransportDiscoveredDevice = function patchedMapDevice(\n this: RnBleTransportWithMapper,\n device: RnBleRawDevice,\n services?: string[]\n ) {\n if (device.id) {\n rnBleMetadataByPath.set(device.id, {\n // On RN BLE, `name` is the stable Ledger four-character identifier\n // (for example A58F), while `localName` is the user-visible label.\n bleName: device.name ?? undefined,\n localName: device.localName ?? undefined,\n });\n }\n\n const result = original.call(this, device, services);\n if (!result.map) {\n return result;\n }\n return result.map((mappedDevice: RnBleTransportDiscoveredDevice) => ({\n ...mappedDevice,\n // Preserve the stable BLE identifier through DMK's DiscoveredDevice.name.\n // The UI display name is carried separately via localName below.\n name: device.name || device.localName || mappedDevice.name || '',\n localName: device.localName || mappedDevice.localName,\n }));\n };\n\n return transport;\n}\n\nexport interface LedgerBleConnectorOptions {\n dmk?: DeviceManagementKit;\n /** Fresh-scan window for liveness probe (default 800ms; ~2+ adv intervals). */\n livenessProbeTimeoutMs?: number;\n}\n\nexport class LedgerBleConnector extends LedgerConnectorBase {\n private readonly _livenessProbeTimeoutMs: number;\n\n constructor(options?: LedgerBleConnectorOptions) {\n super(\n async () => {\n const { RNBleTransportFactory } = await import(\n '@ledgerhq/device-transport-kit-react-native-ble'\n );\n return ((args: Parameters<TransportFactory>[0]) =>\n patchLedgerRnBleTransportMetadata(RNBleTransportFactory(args))) as TransportFactory;\n },\n { connectionType: 'ble', dmk: options?.dmk }\n );\n this._livenessProbeTimeoutMs = options?.livenessProbeTimeoutMs ?? 800;\n }\n\n protected override _resolveConnectId(descriptor: DeviceDescriptor): string {\n const ledgerBleDescriptor = descriptor as LedgerBleDeviceDescriptor;\n return (\n extractBleHexId(ledgerBleDescriptor.bleName) ||\n extractBleHexId(ledgerBleDescriptor.name) ||\n ''\n );\n }\n\n /** BLE discovery uses a fresh scan window; enumerate cache is ignored. */\n protected override async _discoverDescriptors(\n dm: LedgerDeviceManager\n ): Promise<DeviceDescriptor[]> {\n const live = await dm.getLiveDevices(this._livenessProbeTimeoutMs);\n return live.map(d => {\n const metadata = rnBleMetadataByPath.get(d.id);\n return {\n path: d.id,\n type: d.deviceModel.model,\n name: metadata?.localName || d.name,\n bleName: metadata?.bleName || d.name,\n localName: metadata?.localName,\n transport: d.transport,\n rssi: d.rssi,\n };\n });\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,gCAAqD;AAyCrD,IAAM,sBAAsB,oBAAI,IAA2B;AAE3D,SAAS,kCAAkC,WAA6B;AACtE,QAAM,SAAS;AACf,QAAM,WAAW,OAAO;AACxB,MAAI,OAAO,aAAa,YAAY;AAClC,WAAO;AAAA,EACT;AAEA,SAAO,wCAAwC,SAAS,iBAEtD,QACA,UACA;AACA,QAAI,OAAO,IAAI;AACb,0BAAoB,IAAI,OAAO,IAAI;AAAA;AAAA;AAAA,QAGjC,SAAS,OAAO,QAAQ;AAAA,QACxB,WAAW,OAAO,aAAa;AAAA,MACjC,CAAC;AAAA,IACH;AAEA,UAAM,SAAS,SAAS,KAAK,MAAM,QAAQ,QAAQ;AACnD,QAAI,CAAC,OAAO,KAAK;AACf,aAAO;AAAA,IACT;AACA,WAAO,OAAO,IAAI,CAAC,kBAAkD;AAAA,MACnE,GAAG;AAAA;AAAA;AAAA,MAGH,MAAM,OAAO,QAAQ,OAAO,aAAa,aAAa,QAAQ;AAAA,MAC9D,WAAW,OAAO,aAAa,aAAa;AAAA,IAC9C,EAAE;AAAA,EACJ;AAEA,SAAO;AACT;AAQO,IAAM,qBAAN,cAAiC,8CAAoB;AAAA,EAG1D,YAAY,SAAqC;AAC/C;AAAA,MACE,YAAY;AACV,cAAM,EAAE,sBAAsB,IAAI,MAAM,OACtC,iDACF;AACA,gBAAQ,CAAC,SACP,kCAAkC,sBAAsB,IAAI,CAAC;AAAA,MACjE;AAAA,MACA,EAAE,gBAAgB,OAAO,KAAK,SAAS,IAAI;AAAA,IAC7C;AACA,SAAK,0BAA0B,SAAS,0BAA0B;AAAA,EACpE;AAAA,EAEmB,kBAAkB,YAAsC;AACzE,UAAM,sBAAsB;AAC5B,eACE,2CAAgB,oBAAoB,OAAO,SAC3C,2CAAgB,oBAAoB,IAAI,KACxC;AAAA,EAEJ;AAAA;AAAA,EAGA,MAAyB,qBACvB,IAC6B;AAC7B,UAAM,OAAO,MAAM,GAAG,eAAe,KAAK,uBAAuB;AACjE,WAAO,KAAK,IAAI,OAAK;AACnB,YAAM,WAAW,oBAAoB,IAAI,EAAE,EAAE;AAC7C,aAAO;AAAA,QACL,MAAM,EAAE;AAAA,QACR,MAAM,EAAE,YAAY;AAAA,QACpB,MAAM,UAAU,aAAa,EAAE;AAAA,QAC/B,SAAS,UAAU,WAAW,EAAE;AAAA,QAChC,WAAW,UAAU;AAAA,QACrB,WAAW,EAAE;AAAA,QACb,MAAM,EAAE;AAAA,MACV;AAAA,IACF,CAAC;AAAA,EACH;AACF;;;ADlHO,SAAS,yBAAyB,KAAuC;AAC9E,SAAO,IAAI,mBAAmB,EAAE,IAAI,CAAC;AACvC;","names":[]}
package/dist/index.mjs CHANGED
@@ -1,6 +1,5 @@
1
1
  // src/LedgerBleConnector.ts
2
- import { Platform } from "react-native";
3
- import { LedgerConnectorBase } from "@onekeyfe/hwk-ledger-adapter";
2
+ import { LedgerConnectorBase, extractBleHexId } from "@onekeyfe/hwk-ledger-adapter";
4
3
  var rnBleMetadataByPath = /* @__PURE__ */ new Map();
5
4
  function patchLedgerRnBleTransportMetadata(transport) {
6
5
  const target = transport;
@@ -11,13 +10,10 @@ function patchLedgerRnBleTransportMetadata(transport) {
11
10
  target._mapDeviceToTransportDiscoveredDevice = function patchedMapDevice(device, services) {
12
11
  if (device.id) {
13
12
  rnBleMetadataByPath.set(device.id, {
14
- // RN BLE exposes the raw advertisement name separately from localName.
15
- // Keep both for diagnostics/display, but do not use either as connectId.
13
+ // On RN BLE, `name` is the stable Ledger four-character identifier
14
+ // (for example A58F), while `localName` is the user-visible label.
16
15
  bleName: device.name ?? void 0,
17
- localName: device.localName ?? void 0,
18
- rssi: device.rssi,
19
- serviceUUIDs: device.serviceUUIDs,
20
- isConnectable: device.isConnectable
16
+ localName: device.localName ?? void 0
21
17
  });
22
18
  }
23
19
  const result = original.call(this, device, services);
@@ -26,6 +22,9 @@ function patchLedgerRnBleTransportMetadata(transport) {
26
22
  }
27
23
  return result.map((mappedDevice) => ({
28
24
  ...mappedDevice,
25
+ // Preserve the stable BLE identifier through DMK's DiscoveredDevice.name.
26
+ // The UI display name is carried separately via localName below.
27
+ name: device.name || device.localName || mappedDevice.name || "",
29
28
  localName: device.localName || mappedDevice.localName
30
29
  }));
31
30
  };
@@ -38,15 +37,14 @@ var LedgerBleConnector = class extends LedgerConnectorBase {
38
37
  const { RNBleTransportFactory } = await import("@ledgerhq/device-transport-kit-react-native-ble");
39
38
  return ((args) => patchLedgerRnBleTransportMetadata(RNBleTransportFactory(args)));
40
39
  },
41
- {
42
- connectionType: "ble",
43
- dmk: options?.dmk,
44
- // iOS Core Bluetooth wedges ~30s on connect to non-advertising peripherals.
45
- requirePreFlightScan: Platform.OS === "ios"
46
- }
40
+ { connectionType: "ble", dmk: options?.dmk }
47
41
  );
48
42
  this._livenessProbeTimeoutMs = options?.livenessProbeTimeoutMs ?? 800;
49
43
  }
44
+ _resolveConnectId(descriptor) {
45
+ const ledgerBleDescriptor = descriptor;
46
+ return extractBleHexId(ledgerBleDescriptor.bleName) || extractBleHexId(ledgerBleDescriptor.name) || "";
47
+ }
50
48
  /** BLE discovery uses a fresh scan window; enumerate cache is ignored. */
51
49
  async _discoverDescriptors(dm) {
52
50
  const live = await dm.getLiveDevices(this._livenessProbeTimeoutMs);
@@ -55,12 +53,9 @@ var LedgerBleConnector = class extends LedgerConnectorBase {
55
53
  return {
56
54
  path: d.id,
57
55
  type: d.deviceModel.model,
58
- modelName: d.deviceModel.name,
59
56
  name: metadata?.localName || d.name,
60
57
  bleName: metadata?.bleName || d.name,
61
58
  localName: metadata?.localName,
62
- serviceUUIDs: metadata?.serviceUUIDs,
63
- isConnectable: metadata?.isConnectable,
64
59
  transport: d.transport,
65
60
  rssi: d.rssi
66
61
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/LedgerBleConnector.ts","../src/index.ts"],"sourcesContent":["import { Platform } from 'react-native';\nimport { LedgerConnectorBase } from '@onekeyfe/hwk-ledger-adapter';\n\nimport type { LedgerDeviceManager } from '@onekeyfe/hwk-ledger-adapter';\nimport type { DeviceDescriptor } from '@onekeyfe/hwk-adapter-core';\nimport type { DeviceManagementKit, TransportFactory } from '@ledgerhq/device-management-kit';\n\ntype RnBleRawDevice = {\n id?: string;\n name?: string | null;\n localName?: string | null;\n rssi?: number | null;\n serviceUUIDs?: string[] | null;\n isConnectable?: boolean | null;\n};\n\ntype RnBleTransportDiscoveredDevice = {\n id?: string;\n name?: string;\n localName?: string;\n};\n\ntype RnBleMapResult = {\n map?: (\n fn: (device: RnBleTransportDiscoveredDevice) => RnBleTransportDiscoveredDevice\n ) => RnBleMapResult;\n};\n\ntype RnBleTransportWithMapper = {\n _mapDeviceToTransportDiscoveredDevice?: (\n device: RnBleRawDevice,\n services?: string[]\n ) => RnBleMapResult;\n};\n\ntype RnBleMetadata = {\n bleName?: string;\n localName?: string;\n rssi?: number | null;\n serviceUUIDs?: string[] | null;\n isConnectable?: boolean | null;\n};\n\nconst rnBleMetadataByPath = new Map<string, RnBleMetadata>();\n\nfunction patchLedgerRnBleTransportMetadata(transport: unknown): unknown {\n const target = transport as RnBleTransportWithMapper;\n const original = target._mapDeviceToTransportDiscoveredDevice;\n if (typeof original !== 'function') {\n return transport;\n }\n\n target._mapDeviceToTransportDiscoveredDevice = function patchedMapDevice(\n this: RnBleTransportWithMapper,\n device: RnBleRawDevice,\n services?: string[]\n ) {\n if (device.id) {\n rnBleMetadataByPath.set(device.id, {\n // RN BLE exposes the raw advertisement name separately from localName.\n // Keep both for diagnostics/display, but do not use either as connectId.\n bleName: device.name ?? undefined,\n localName: device.localName ?? undefined,\n rssi: device.rssi,\n serviceUUIDs: device.serviceUUIDs,\n isConnectable: device.isConnectable,\n });\n }\n\n const result = original.call(this, device, services);\n if (!result.map) {\n return result;\n }\n return result.map((mappedDevice: RnBleTransportDiscoveredDevice) => ({\n ...mappedDevice,\n localName: device.localName || mappedDevice.localName,\n }));\n };\n\n return transport;\n}\n\nexport interface LedgerBleConnectorOptions {\n dmk?: DeviceManagementKit;\n /** Fresh-scan window for liveness probe (default 800ms; ~2+ adv intervals). */\n livenessProbeTimeoutMs?: number;\n}\n\nexport class LedgerBleConnector extends LedgerConnectorBase {\n private readonly _livenessProbeTimeoutMs: number;\n\n constructor(options?: LedgerBleConnectorOptions) {\n super(\n async () => {\n const { RNBleTransportFactory } = await import(\n '@ledgerhq/device-transport-kit-react-native-ble'\n );\n return ((args: Parameters<TransportFactory>[0]) =>\n patchLedgerRnBleTransportMetadata(RNBleTransportFactory(args))) as TransportFactory;\n },\n {\n connectionType: 'ble',\n dmk: options?.dmk,\n // iOS Core Bluetooth wedges ~30s on connect to non-advertising peripherals.\n requirePreFlightScan: Platform.OS === 'ios',\n }\n );\n this._livenessProbeTimeoutMs = options?.livenessProbeTimeoutMs ?? 800;\n }\n\n /** BLE discovery uses a fresh scan window; enumerate cache is ignored. */\n protected override async _discoverDescriptors(\n dm: LedgerDeviceManager\n ): Promise<DeviceDescriptor[]> {\n const live = await dm.getLiveDevices(this._livenessProbeTimeoutMs);\n return live.map(d => {\n const metadata = rnBleMetadataByPath.get(d.id);\n return {\n path: d.id,\n type: d.deviceModel.model,\n modelName: d.deviceModel.name,\n name: metadata?.localName || d.name,\n bleName: metadata?.bleName || d.name,\n localName: metadata?.localName,\n serviceUUIDs: metadata?.serviceUUIDs,\n isConnectable: metadata?.isConnectable,\n transport: d.transport,\n rssi: d.rssi,\n };\n });\n }\n}\n","import { LedgerBleConnector } from './LedgerBleConnector';\n\nimport type { IConnector } from '@onekeyfe/hwk-adapter-core';\nimport type { DeviceManagementKit } from '@ledgerhq/device-management-kit';\nimport type { LedgerBleConnectorOptions } from './LedgerBleConnector';\n\nexport { LedgerBleConnector };\nexport type { LedgerBleConnectorOptions };\n\n/**\n * Create a LedgerBleConnector.\n *\n * @param dmk - Optional pre-built DMK instance. If omitted, the connector\n * will lazily create one using `@ledgerhq/device-management-kit`\n * and `@ledgerhq/device-transport-kit-react-native-ble`.\n */\nexport function createLedgerBleConnector(dmk?: DeviceManagementKit): IConnector {\n return new LedgerBleConnector({ dmk });\n}\n"],"mappings":";AAAA,SAAS,gBAAgB;AACzB,SAAS,2BAA2B;AA0CpC,IAAM,sBAAsB,oBAAI,IAA2B;AAE3D,SAAS,kCAAkC,WAA6B;AACtE,QAAM,SAAS;AACf,QAAM,WAAW,OAAO;AACxB,MAAI,OAAO,aAAa,YAAY;AAClC,WAAO;AAAA,EACT;AAEA,SAAO,wCAAwC,SAAS,iBAEtD,QACA,UACA;AACA,QAAI,OAAO,IAAI;AACb,0BAAoB,IAAI,OAAO,IAAI;AAAA;AAAA;AAAA,QAGjC,SAAS,OAAO,QAAQ;AAAA,QACxB,WAAW,OAAO,aAAa;AAAA,QAC/B,MAAM,OAAO;AAAA,QACb,cAAc,OAAO;AAAA,QACrB,eAAe,OAAO;AAAA,MACxB,CAAC;AAAA,IACH;AAEA,UAAM,SAAS,SAAS,KAAK,MAAM,QAAQ,QAAQ;AACnD,QAAI,CAAC,OAAO,KAAK;AACf,aAAO;AAAA,IACT;AACA,WAAO,OAAO,IAAI,CAAC,kBAAkD;AAAA,MACnE,GAAG;AAAA,MACH,WAAW,OAAO,aAAa,aAAa;AAAA,IAC9C,EAAE;AAAA,EACJ;AAEA,SAAO;AACT;AAQO,IAAM,qBAAN,cAAiC,oBAAoB;AAAA,EAG1D,YAAY,SAAqC;AAC/C;AAAA,MACE,YAAY;AACV,cAAM,EAAE,sBAAsB,IAAI,MAAM,OACtC,iDACF;AACA,gBAAQ,CAAC,SACP,kCAAkC,sBAAsB,IAAI,CAAC;AAAA,MACjE;AAAA,MACA;AAAA,QACE,gBAAgB;AAAA,QAChB,KAAK,SAAS;AAAA;AAAA,QAEd,sBAAsB,SAAS,OAAO;AAAA,MACxC;AAAA,IACF;AACA,SAAK,0BAA0B,SAAS,0BAA0B;AAAA,EACpE;AAAA;AAAA,EAGA,MAAyB,qBACvB,IAC6B;AAC7B,UAAM,OAAO,MAAM,GAAG,eAAe,KAAK,uBAAuB;AACjE,WAAO,KAAK,IAAI,OAAK;AACnB,YAAM,WAAW,oBAAoB,IAAI,EAAE,EAAE;AAC7C,aAAO;AAAA,QACL,MAAM,EAAE;AAAA,QACR,MAAM,EAAE,YAAY;AAAA,QACpB,WAAW,EAAE,YAAY;AAAA,QACzB,MAAM,UAAU,aAAa,EAAE;AAAA,QAC/B,SAAS,UAAU,WAAW,EAAE;AAAA,QAChC,WAAW,UAAU;AAAA,QACrB,cAAc,UAAU;AAAA,QACxB,eAAe,UAAU;AAAA,QACzB,WAAW,EAAE;AAAA,QACb,MAAM,EAAE;AAAA,MACV;AAAA,IACF,CAAC;AAAA,EACH;AACF;;;ACnHO,SAAS,yBAAyB,KAAuC;AAC9E,SAAO,IAAI,mBAAmB,EAAE,IAAI,CAAC;AACvC;","names":[]}
1
+ {"version":3,"sources":["../src/LedgerBleConnector.ts","../src/index.ts"],"sourcesContent":["import { LedgerConnectorBase, extractBleHexId } from '@onekeyfe/hwk-ledger-adapter';\n\nimport type { LedgerDeviceManager } from '@onekeyfe/hwk-ledger-adapter';\nimport type { DeviceDescriptor } from '@onekeyfe/hwk-adapter-core';\nimport type { DeviceManagementKit, TransportFactory } from '@ledgerhq/device-management-kit';\n\ntype RnBleRawDevice = {\n id?: string;\n name?: string | null;\n localName?: string | null;\n};\n\ntype RnBleTransportDiscoveredDevice = {\n id?: string;\n name?: string;\n localName?: string;\n};\n\ntype RnBleMapResult = {\n map?: (\n fn: (device: RnBleTransportDiscoveredDevice) => RnBleTransportDiscoveredDevice\n ) => RnBleMapResult;\n};\n\ntype RnBleTransportWithMapper = {\n _mapDeviceToTransportDiscoveredDevice?: (\n device: RnBleRawDevice,\n services?: string[]\n ) => RnBleMapResult;\n};\n\ntype LedgerBleDeviceDescriptor = DeviceDescriptor & {\n bleName?: string;\n localName?: string;\n};\n\ntype RnBleMetadata = {\n bleName?: string;\n localName?: string;\n};\n\nconst rnBleMetadataByPath = new Map<string, RnBleMetadata>();\n\nfunction patchLedgerRnBleTransportMetadata(transport: unknown): unknown {\n const target = transport as RnBleTransportWithMapper;\n const original = target._mapDeviceToTransportDiscoveredDevice;\n if (typeof original !== 'function') {\n return transport;\n }\n\n target._mapDeviceToTransportDiscoveredDevice = function patchedMapDevice(\n this: RnBleTransportWithMapper,\n device: RnBleRawDevice,\n services?: string[]\n ) {\n if (device.id) {\n rnBleMetadataByPath.set(device.id, {\n // On RN BLE, `name` is the stable Ledger four-character identifier\n // (for example A58F), while `localName` is the user-visible label.\n bleName: device.name ?? undefined,\n localName: device.localName ?? undefined,\n });\n }\n\n const result = original.call(this, device, services);\n if (!result.map) {\n return result;\n }\n return result.map((mappedDevice: RnBleTransportDiscoveredDevice) => ({\n ...mappedDevice,\n // Preserve the stable BLE identifier through DMK's DiscoveredDevice.name.\n // The UI display name is carried separately via localName below.\n name: device.name || device.localName || mappedDevice.name || '',\n localName: device.localName || mappedDevice.localName,\n }));\n };\n\n return transport;\n}\n\nexport interface LedgerBleConnectorOptions {\n dmk?: DeviceManagementKit;\n /** Fresh-scan window for liveness probe (default 800ms; ~2+ adv intervals). */\n livenessProbeTimeoutMs?: number;\n}\n\nexport class LedgerBleConnector extends LedgerConnectorBase {\n private readonly _livenessProbeTimeoutMs: number;\n\n constructor(options?: LedgerBleConnectorOptions) {\n super(\n async () => {\n const { RNBleTransportFactory } = await import(\n '@ledgerhq/device-transport-kit-react-native-ble'\n );\n return ((args: Parameters<TransportFactory>[0]) =>\n patchLedgerRnBleTransportMetadata(RNBleTransportFactory(args))) as TransportFactory;\n },\n { connectionType: 'ble', dmk: options?.dmk }\n );\n this._livenessProbeTimeoutMs = options?.livenessProbeTimeoutMs ?? 800;\n }\n\n protected override _resolveConnectId(descriptor: DeviceDescriptor): string {\n const ledgerBleDescriptor = descriptor as LedgerBleDeviceDescriptor;\n return (\n extractBleHexId(ledgerBleDescriptor.bleName) ||\n extractBleHexId(ledgerBleDescriptor.name) ||\n ''\n );\n }\n\n /** BLE discovery uses a fresh scan window; enumerate cache is ignored. */\n protected override async _discoverDescriptors(\n dm: LedgerDeviceManager\n ): Promise<DeviceDescriptor[]> {\n const live = await dm.getLiveDevices(this._livenessProbeTimeoutMs);\n return live.map(d => {\n const metadata = rnBleMetadataByPath.get(d.id);\n return {\n path: d.id,\n type: d.deviceModel.model,\n name: metadata?.localName || d.name,\n bleName: metadata?.bleName || d.name,\n localName: metadata?.localName,\n transport: d.transport,\n rssi: d.rssi,\n };\n });\n }\n}\n","import { LedgerBleConnector } from './LedgerBleConnector';\n\nimport type { IConnector } from '@onekeyfe/hwk-adapter-core';\nimport type { DeviceManagementKit } from '@ledgerhq/device-management-kit';\nimport type { LedgerBleConnectorOptions } from './LedgerBleConnector';\n\nexport { LedgerBleConnector };\nexport type { LedgerBleConnectorOptions };\n\n/**\n * Create a LedgerBleConnector.\n *\n * @param dmk - Optional pre-built DMK instance. If omitted, the connector\n * will lazily create one using `@ledgerhq/device-management-kit`\n * and `@ledgerhq/device-transport-kit-react-native-ble`.\n */\nexport function createLedgerBleConnector(dmk?: DeviceManagementKit): IConnector {\n return new LedgerBleConnector({ dmk });\n}\n"],"mappings":";AAAA,SAAS,qBAAqB,uBAAuB;AAyCrD,IAAM,sBAAsB,oBAAI,IAA2B;AAE3D,SAAS,kCAAkC,WAA6B;AACtE,QAAM,SAAS;AACf,QAAM,WAAW,OAAO;AACxB,MAAI,OAAO,aAAa,YAAY;AAClC,WAAO;AAAA,EACT;AAEA,SAAO,wCAAwC,SAAS,iBAEtD,QACA,UACA;AACA,QAAI,OAAO,IAAI;AACb,0BAAoB,IAAI,OAAO,IAAI;AAAA;AAAA;AAAA,QAGjC,SAAS,OAAO,QAAQ;AAAA,QACxB,WAAW,OAAO,aAAa;AAAA,MACjC,CAAC;AAAA,IACH;AAEA,UAAM,SAAS,SAAS,KAAK,MAAM,QAAQ,QAAQ;AACnD,QAAI,CAAC,OAAO,KAAK;AACf,aAAO;AAAA,IACT;AACA,WAAO,OAAO,IAAI,CAAC,kBAAkD;AAAA,MACnE,GAAG;AAAA;AAAA;AAAA,MAGH,MAAM,OAAO,QAAQ,OAAO,aAAa,aAAa,QAAQ;AAAA,MAC9D,WAAW,OAAO,aAAa,aAAa;AAAA,IAC9C,EAAE;AAAA,EACJ;AAEA,SAAO;AACT;AAQO,IAAM,qBAAN,cAAiC,oBAAoB;AAAA,EAG1D,YAAY,SAAqC;AAC/C;AAAA,MACE,YAAY;AACV,cAAM,EAAE,sBAAsB,IAAI,MAAM,OACtC,iDACF;AACA,gBAAQ,CAAC,SACP,kCAAkC,sBAAsB,IAAI,CAAC;AAAA,MACjE;AAAA,MACA,EAAE,gBAAgB,OAAO,KAAK,SAAS,IAAI;AAAA,IAC7C;AACA,SAAK,0BAA0B,SAAS,0BAA0B;AAAA,EACpE;AAAA,EAEmB,kBAAkB,YAAsC;AACzE,UAAM,sBAAsB;AAC5B,WACE,gBAAgB,oBAAoB,OAAO,KAC3C,gBAAgB,oBAAoB,IAAI,KACxC;AAAA,EAEJ;AAAA;AAAA,EAGA,MAAyB,qBACvB,IAC6B;AAC7B,UAAM,OAAO,MAAM,GAAG,eAAe,KAAK,uBAAuB;AACjE,WAAO,KAAK,IAAI,OAAK;AACnB,YAAM,WAAW,oBAAoB,IAAI,EAAE,EAAE;AAC7C,aAAO;AAAA,QACL,MAAM,EAAE;AAAA,QACR,MAAM,EAAE,YAAY;AAAA,QACpB,MAAM,UAAU,aAAa,EAAE;AAAA,QAC/B,SAAS,UAAU,WAAW,EAAE;AAAA,QAChC,WAAW,UAAU;AAAA,QACrB,WAAW,EAAE;AAAA,QACb,MAAM,EAAE;AAAA,MACV;AAAA,IACF,CAAC;AAAA,EACH;AACF;;;AClHO,SAAS,yBAAyB,KAAuC;AAC9E,SAAO,IAAI,mBAAmB,EAAE,IAAI,CAAC;AACvC;","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@onekeyfe/hwk-ledger-connector-ble",
3
- "version": "1.1.26",
3
+ "version": "1.1.27-alpha.30",
4
4
  "description": "IConnector implementation for Ledger hardware wallets via React Native BLE",
5
5
  "author": "OneKey",
6
6
  "license": "MIT",
@@ -51,16 +51,13 @@
51
51
  "@ledgerhq/device-signer-kit-ethereum": "^1.9.0",
52
52
  "@ledgerhq/device-signer-kit-solana": "^1.7.0",
53
53
  "@ledgerhq/device-transport-kit-react-native-ble": "^1.0.0",
54
- "@onekeyfe/hwk-adapter-core": "1.1.26",
55
- "@onekeyfe/hwk-ledger-adapter": "1.1.26"
56
- },
57
- "peerDependencies": {
58
- "react-native": "*"
54
+ "@onekeyfe/hwk-adapter-core": "1.1.27-alpha.30",
55
+ "@onekeyfe/hwk-ledger-adapter": "1.1.27-alpha.30"
59
56
  },
60
57
  "devDependencies": {
61
58
  "rimraf": "^5.0.0",
62
59
  "tsup": "^8.0.0",
63
60
  "typescript": "^5.4.0"
64
61
  },
65
- "gitHead": "25f2737f5e9d357764fb82f558b024f763cdd30d"
62
+ "gitHead": "f1e3a93e766463007436eaa9aff4a271ffd8830c"
66
63
  }