@exodus/hw-ledger 2.8.1 → 2.9.1
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/CHANGELOG.md +10 -0
- package/lib/atoms/index.d.ts +2 -2
- package/lib/atoms/index.js +2 -2
- package/lib/index.d.ts +4 -4
- package/lib/index.js +3 -3
- package/lib/module/assets/basemainnet.d.ts +1 -1
- package/lib/module/assets/matic.d.ts +1 -1
- package/lib/module/assets/utils/derivation-paths.js +2 -2
- package/lib/module/assets/utils/psbt.d.ts +0 -1
- package/lib/module/assets/utils/xpub.d.ts +0 -1
- package/lib/module/assets/utils/xpub.js +2 -2
- package/lib/module/constants.js +1 -1
- package/lib/module/device.js +1 -1
- package/lib/module/management/application.d.ts +0 -1
- package/lib/plugin/index.d.ts +4 -3
- package/lib/plugin/index.js +5 -9
- package/lib/redux/index.d.ts +5 -5
- package/lib/redux/index.js +2 -2
- package/lib/redux/initial-state.d.ts +5 -1
- package/lib/redux/initial-state.js +1 -1
- package/lib/redux/selectors/{bluetoothEnabled.d.ts → bluetoothStatus.d.ts} +4 -4
- package/lib/redux/selectors/bluetoothStatus.js +8 -0
- package/lib/redux/selectors/index.d.ts +2 -2
- package/lib/redux/selectors/index.js +2 -2
- package/package.json +7 -8
- package/lib/redux/selectors/bluetoothEnabled.js +0 -8
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,16 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [2.9.1](https://github.com/ExodusMovement/exodus-hydra/compare/@exodus/hw-ledger@2.9.0...@exodus/hw-ledger@2.9.1) (2024-07-18)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package @exodus/hw-ledger
|
|
9
|
+
|
|
10
|
+
## [2.9.0](https://github.com/ExodusMovement/exodus-hydra/compare/@exodus/hw-ledger@2.8.1...@exodus/hw-ledger@2.9.0) (2024-07-16)
|
|
11
|
+
|
|
12
|
+
### Features
|
|
13
|
+
|
|
14
|
+
- **hw-ledger:** expose bluetooth status to clients ([#7848](https://github.com/ExodusMovement/exodus-hydra/issues/7848)) ([36943b1](https://github.com/ExodusMovement/exodus-hydra/commit/36943b194c286a07c44dd78bd3a1f03324c87ce8))
|
|
15
|
+
|
|
6
16
|
## [2.8.1](https://github.com/ExodusMovement/exodus-hydra/compare/@exodus/hw-ledger@2.8.0...@exodus/hw-ledger@2.8.1) (2024-07-10)
|
|
7
17
|
|
|
8
18
|
### Bug Fixes
|
package/lib/atoms/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export declare const
|
|
2
|
-
readonly id: "
|
|
1
|
+
export declare const bluetoothStatusAtomDefinition: {
|
|
2
|
+
readonly id: "bluetoothStatusAtom";
|
|
3
3
|
readonly type: "atom";
|
|
4
4
|
readonly factory: () => import("@exodus/atoms").Atom<boolean>;
|
|
5
5
|
readonly dependencies: readonly [];
|
package/lib/atoms/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createInMemoryAtom } from '@exodus/atoms';
|
|
2
|
-
export const
|
|
3
|
-
id: '
|
|
2
|
+
export const bluetoothStatusAtomDefinition = {
|
|
3
|
+
id: 'bluetoothStatusAtom',
|
|
4
4
|
type: 'atom',
|
|
5
5
|
factory: () => createInMemoryAtom({ defaultValue: false }),
|
|
6
6
|
dependencies: [],
|
package/lib/index.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ declare const hardwareWalletLedger: ({ bluetoothScannerTimeout, }?: Partial<HwLe
|
|
|
3
3
|
readonly id: "hardwareWalletLedger";
|
|
4
4
|
readonly definitions: readonly [{
|
|
5
5
|
readonly definition: {
|
|
6
|
-
readonly id: "
|
|
6
|
+
readonly id: "bluetoothStatusAtom";
|
|
7
7
|
readonly type: "atom";
|
|
8
8
|
readonly factory: () => import("libraries/atoms/lib").Atom<boolean>;
|
|
9
9
|
readonly dependencies: readonly [];
|
|
@@ -19,10 +19,10 @@ declare const hardwareWalletLedger: ({ bluetoothScannerTimeout, }?: Partial<HwLe
|
|
|
19
19
|
readonly definition: {
|
|
20
20
|
readonly id: "hardwareWalletLedgerPlugin";
|
|
21
21
|
readonly type: "plugin";
|
|
22
|
-
readonly factory: ({ logger, transportsFactories,
|
|
22
|
+
readonly factory: ({ logger, transportsFactories, bluetoothStatusAtom, bluetoothScanningAtom, port, }: {
|
|
23
23
|
logger: import("./shared/types").Logger;
|
|
24
24
|
transportsFactories: import("./module/types").TransportFactories;
|
|
25
|
-
|
|
25
|
+
bluetoothStatusAtom: import("libraries/atoms/lib").Atom<import("./redux/initial-state").BluetoothStatus>;
|
|
26
26
|
bluetoothScanningAtom: import("libraries/atoms/lib").Atom<boolean>;
|
|
27
27
|
port: import("./shared/types").Port;
|
|
28
28
|
}) => {
|
|
@@ -30,7 +30,7 @@ declare const hardwareWalletLedger: ({ bluetoothScannerTimeout, }?: Partial<HwLe
|
|
|
30
30
|
onLoad: () => void;
|
|
31
31
|
onStop: () => void;
|
|
32
32
|
};
|
|
33
|
-
readonly dependencies: readonly ["logger", "transportsFactories", "
|
|
33
|
+
readonly dependencies: readonly ["logger", "transportsFactories", "bluetoothStatusAtom", "bluetoothScanningAtom", "port"];
|
|
34
34
|
};
|
|
35
35
|
}, {
|
|
36
36
|
readonly definition: {
|
package/lib/index.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { bluetoothStatusAtomDefinition, bluetoothScanningAtomDefinition } from './atoms';
|
|
2
2
|
import ledgerDiscoveryDefinition from './module';
|
|
3
3
|
import hardwareWalletLedgerPluginDefinition from './plugin';
|
|
4
|
-
const hardwareWalletLedger = ({ bluetoothScannerTimeout =
|
|
4
|
+
const hardwareWalletLedger = ({ bluetoothScannerTimeout = 10_000, } = {}) => {
|
|
5
5
|
return {
|
|
6
6
|
id: 'hardwareWalletLedger',
|
|
7
7
|
definitions: [
|
|
8
8
|
{
|
|
9
|
-
definition:
|
|
9
|
+
definition: bluetoothStatusAtomDefinition,
|
|
10
10
|
},
|
|
11
11
|
{
|
|
12
12
|
definition: bluetoothScanningAtomDefinition,
|
|
@@ -3,6 +3,6 @@ declare const metadata: {
|
|
|
3
3
|
applicationName: string;
|
|
4
4
|
supportedVersions: string;
|
|
5
5
|
}[];
|
|
6
|
-
handler: (transport: import("@ledgerhq/hw-transport").default) => Promise<import("libraries/hw-common/lib").HardwareWalletAssetHandler
|
|
6
|
+
handler: (transport: import("@ledgerhq/hw-transport").default) => Promise<import("libraries/hw-common/lib").HardwareWalletAssetHandler>;
|
|
7
7
|
};
|
|
8
8
|
export default metadata;
|
|
@@ -3,6 +3,6 @@ declare const metadata: {
|
|
|
3
3
|
applicationName: string;
|
|
4
4
|
supportedVersions: string;
|
|
5
5
|
}[];
|
|
6
|
-
handler: (transport: import("@ledgerhq/hw-transport").default) => Promise<import("libraries/hw-common/lib").HardwareWalletAssetHandler
|
|
6
|
+
handler: (transport: import("@ledgerhq/hw-transport").default) => Promise<import("libraries/hw-common/lib").HardwareWalletAssetHandler>;
|
|
7
7
|
};
|
|
8
8
|
export default metadata;
|
|
@@ -25,12 +25,12 @@ export function assertBip44PathNumber(parts) {
|
|
|
25
25
|
}
|
|
26
26
|
export function buildBip44PathFromNumber(parts) {
|
|
27
27
|
const [purpose, coin, account, chainIndex, addressIndex] = parts;
|
|
28
|
-
const HARDENED_OFFSET =
|
|
28
|
+
const HARDENED_OFFSET = 0x80_00_00_00;
|
|
29
29
|
return `m/${purpose - HARDENED_OFFSET}'/${coin - HARDENED_OFFSET}'/${account - HARDENED_OFFSET}'/${chainIndex}/${addressIndex}`;
|
|
30
30
|
}
|
|
31
31
|
export function splitBip44PathToNumber(derivationPath) {
|
|
32
32
|
const [purpose, coin, account, change, address] = splitBip44DerivationPath(derivationPath);
|
|
33
|
-
const HARDENED_OFFSET =
|
|
33
|
+
const HARDENED_OFFSET = 0x80_00_00_00;
|
|
34
34
|
return [
|
|
35
35
|
Number(purpose.replaceAll(`'`, '')) + HARDENED_OFFSET,
|
|
36
36
|
Number(coin.replaceAll(`'`, '')) + HARDENED_OFFSET,
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
1
|
import { DefaultWalletPolicy, PsbtV2, WalletPolicy } from '@exodus/ledger-bitcoin';
|
|
3
2
|
export declare function assertPsbtOnlyHasAllowedDerivationPaths(psbt: PsbtV2, masterFingerprint: string, derivationPaths: string[]): void;
|
|
4
3
|
export declare function tagPsbtWithDerivationPaths(psbt: PsbtV2, masterFingerprint: string, derivationPathToPublicKeyMap: Record<string, Buffer>): void;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import bs58check from 'bs58check';
|
|
2
2
|
export function buildFauxXPUB(publicKey, chainCode) {
|
|
3
3
|
const LEN = 78;
|
|
4
|
-
const XPUB_PREFIX =
|
|
4
|
+
const XPUB_PREFIX = 0x04_88_b2_1e;
|
|
5
5
|
const buffer = Buffer.allocUnsafe(LEN);
|
|
6
|
-
const fingerprint =
|
|
6
|
+
const fingerprint = 0x00_00_00_00;
|
|
7
7
|
const depth = 0;
|
|
8
8
|
const index = 0;
|
|
9
9
|
buffer.writeUInt32BE(XPUB_PREFIX, 0);
|
package/lib/module/constants.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const APDU_PORT =
|
|
1
|
+
export const APDU_PORT = 40_000;
|
package/lib/module/device.js
CHANGED
package/lib/plugin/index.d.ts
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import type { Atom } from '@exodus/atoms';
|
|
2
2
|
import type { TransportFactories } from '../module/types';
|
|
3
3
|
import type { Logger, Port } from '../shared/types';
|
|
4
|
+
import { BluetoothStatus } from '../redux/initial-state';
|
|
4
5
|
declare const hardwareWalletLedgerPluginDefinition: {
|
|
5
6
|
readonly id: "hardwareWalletLedgerPlugin";
|
|
6
7
|
readonly type: "plugin";
|
|
7
|
-
readonly factory: ({ logger, transportsFactories,
|
|
8
|
+
readonly factory: ({ logger, transportsFactories, bluetoothStatusAtom, bluetoothScanningAtom, port, }: {
|
|
8
9
|
logger: Logger;
|
|
9
10
|
transportsFactories: TransportFactories;
|
|
10
|
-
|
|
11
|
+
bluetoothStatusAtom: Atom<BluetoothStatus>;
|
|
11
12
|
bluetoothScanningAtom: Atom<boolean>;
|
|
12
13
|
port: Port;
|
|
13
14
|
}) => {
|
|
@@ -15,6 +16,6 @@ declare const hardwareWalletLedgerPluginDefinition: {
|
|
|
15
16
|
onLoad: () => void;
|
|
16
17
|
onStop: () => void;
|
|
17
18
|
};
|
|
18
|
-
readonly dependencies: readonly ["logger", "transportsFactories", "
|
|
19
|
+
readonly dependencies: readonly ["logger", "transportsFactories", "bluetoothStatusAtom", "bluetoothScanningAtom", "port"];
|
|
19
20
|
};
|
|
20
21
|
export default hardwareWalletLedgerPluginDefinition;
|
package/lib/plugin/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { createAtomObserver } from '@exodus/atoms';
|
|
2
|
-
const createHardwareWalletLedgerPlugin = ({ logger, transportsFactories,
|
|
2
|
+
const createHardwareWalletLedgerPlugin = ({ logger, transportsFactories, bluetoothStatusAtom, bluetoothScanningAtom, port, }) => {
|
|
3
3
|
let subscription;
|
|
4
4
|
const observers = [
|
|
5
|
-
createAtomObserver({ atom:
|
|
5
|
+
createAtomObserver({ atom: bluetoothStatusAtom, port, event: 'bluetoothStatus' }),
|
|
6
6
|
createAtomObserver({ atom: bluetoothScanningAtom, port, event: 'bluetoothScanning' }),
|
|
7
7
|
];
|
|
8
8
|
observers.forEach((observer) => observer.register());
|
|
@@ -13,17 +13,13 @@ const createHardwareWalletLedgerPlugin = ({ logger, transportsFactories, bluetoo
|
|
|
13
13
|
return;
|
|
14
14
|
if (transportsFactories.bluetooth.observeState) {
|
|
15
15
|
subscription = transportsFactories.bluetooth.observeState({
|
|
16
|
-
next: (
|
|
17
|
-
bluetoothEnabledAtom.set(!!e.available);
|
|
18
|
-
},
|
|
16
|
+
next: ({ type, available }) => bluetoothStatusAtom.set({ type, available }),
|
|
19
17
|
error: (error) => logger.error(error),
|
|
20
18
|
});
|
|
21
19
|
}
|
|
22
20
|
else if (transportsFactories.bluetooth.observeAvailability) {
|
|
23
21
|
subscription = transportsFactories.bluetooth.observeAvailability({
|
|
24
|
-
next: (available) => {
|
|
25
|
-
bluetoothEnabledAtom.set(available);
|
|
26
|
-
},
|
|
22
|
+
next: (available) => bluetoothStatusAtom.set({ type: 'Unknown', available }),
|
|
27
23
|
error: (error) => logger.error(error),
|
|
28
24
|
});
|
|
29
25
|
}
|
|
@@ -51,7 +47,7 @@ const hardwareWalletLedgerPluginDefinition = {
|
|
|
51
47
|
dependencies: [
|
|
52
48
|
'logger',
|
|
53
49
|
'transportsFactories',
|
|
54
|
-
'
|
|
50
|
+
'bluetoothStatusAtom',
|
|
55
51
|
'bluetoothScanningAtom',
|
|
56
52
|
'port',
|
|
57
53
|
],
|
package/lib/redux/index.d.ts
CHANGED
|
@@ -4,18 +4,18 @@ declare const exchangeReduxDefinition: {
|
|
|
4
4
|
readonly type: "redux-module";
|
|
5
5
|
readonly initialState: LedgerHardwareWalletState;
|
|
6
6
|
readonly eventReducers: {
|
|
7
|
-
readonly
|
|
8
|
-
|
|
7
|
+
readonly bluetoothStatus: (state: LedgerHardwareWalletState, payload: boolean) => {
|
|
8
|
+
bluetoothStatus: boolean;
|
|
9
9
|
bluetoothScanning: boolean;
|
|
10
10
|
};
|
|
11
11
|
readonly bluetoothScanning: (state: LedgerHardwareWalletState, payload: boolean) => {
|
|
12
12
|
bluetoothScanning: boolean;
|
|
13
|
-
|
|
13
|
+
bluetoothStatus: import("./initial-state").BluetoothStatus;
|
|
14
14
|
};
|
|
15
15
|
};
|
|
16
16
|
readonly selectorDefinitions: ({
|
|
17
|
-
readonly id: "
|
|
18
|
-
readonly resultFunction: (state: LedgerHardwareWalletState) =>
|
|
17
|
+
readonly id: "bluetoothStatus";
|
|
18
|
+
readonly resultFunction: (state: LedgerHardwareWalletState) => import("./initial-state").BluetoothStatus;
|
|
19
19
|
readonly dependencies: readonly [{
|
|
20
20
|
readonly selector: string;
|
|
21
21
|
}];
|
package/lib/redux/index.js
CHANGED
|
@@ -6,9 +6,9 @@ const exchangeReduxDefinition = {
|
|
|
6
6
|
type: 'redux-module',
|
|
7
7
|
initialState,
|
|
8
8
|
eventReducers: {
|
|
9
|
-
|
|
9
|
+
bluetoothStatus: (state, payload) => ({
|
|
10
10
|
...state,
|
|
11
|
-
|
|
11
|
+
bluetoothStatus: payload,
|
|
12
12
|
}),
|
|
13
13
|
bluetoothScanning: (state, payload) => ({
|
|
14
14
|
...state,
|
|
@@ -1,5 +1,9 @@
|
|
|
1
|
+
export type BluetoothStatus = {
|
|
2
|
+
type: 'Unknown' | 'Resetting' | 'Unsupported' | 'Unauthorized' | 'PoweredOff' | 'PoweredOn';
|
|
3
|
+
available: boolean;
|
|
4
|
+
};
|
|
1
5
|
export type LedgerHardwareWalletState = {
|
|
2
|
-
|
|
6
|
+
bluetoothStatus: BluetoothStatus;
|
|
3
7
|
bluetoothScanning: boolean;
|
|
4
8
|
};
|
|
5
9
|
declare const initialState: LedgerHardwareWalletState;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { LedgerHardwareWalletState } from '../initial-state';
|
|
2
|
-
declare const
|
|
3
|
-
readonly id: "
|
|
4
|
-
readonly resultFunction: (state: LedgerHardwareWalletState) =>
|
|
2
|
+
declare const bluetoothStatusSelectorDefinition: {
|
|
3
|
+
readonly id: "bluetoothStatus";
|
|
4
|
+
readonly resultFunction: (state: LedgerHardwareWalletState) => import("../initial-state").BluetoothStatus;
|
|
5
5
|
readonly dependencies: readonly [{
|
|
6
6
|
readonly selector: string;
|
|
7
7
|
}];
|
|
8
8
|
};
|
|
9
|
-
export default
|
|
9
|
+
export default bluetoothStatusSelectorDefinition;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { MY_STATE } from '@exodus/redux-dependency-injection';
|
|
2
|
+
const resultFunction = (state) => state.bluetoothStatus;
|
|
3
|
+
const bluetoothStatusSelectorDefinition = {
|
|
4
|
+
id: 'bluetoothStatus',
|
|
5
|
+
resultFunction,
|
|
6
|
+
dependencies: [{ selector: MY_STATE }],
|
|
7
|
+
};
|
|
8
|
+
export default bluetoothStatusSelectorDefinition;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
declare const ledgerSelectors: ({
|
|
2
|
-
readonly id: "
|
|
3
|
-
readonly resultFunction: (state: import("../initial-state").LedgerHardwareWalletState) =>
|
|
2
|
+
readonly id: "bluetoothStatus";
|
|
3
|
+
readonly resultFunction: (state: import("../initial-state").LedgerHardwareWalletState) => import("../initial-state").BluetoothStatus;
|
|
4
4
|
readonly dependencies: readonly [{
|
|
5
5
|
readonly selector: string;
|
|
6
6
|
}];
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import bluetoothStatusSelectorDefinition from './bluetoothStatus';
|
|
2
2
|
import bluetoothScanningSelectorDefinition from './bluetoothScanning';
|
|
3
|
-
const ledgerSelectors = [
|
|
3
|
+
const ledgerSelectors = [bluetoothStatusSelectorDefinition, bluetoothScanningSelectorDefinition];
|
|
4
4
|
export default ledgerSelectors;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@exodus/hw-ledger",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.9.1",
|
|
4
4
|
"description": "The ledger module",
|
|
5
5
|
"author": "Exodus Movement, Inc.",
|
|
6
6
|
"repository": {
|
|
@@ -19,9 +19,9 @@
|
|
|
19
19
|
"./CHANGELOG.md"
|
|
20
20
|
],
|
|
21
21
|
"scripts": {
|
|
22
|
-
"build": "tsc --build tsconfig.build.json",
|
|
23
|
-
"build:watch": "tsc --build tsconfig.build.json && (concurrently 'tsc --build -w tsconfig.build.json')",
|
|
24
|
-
"clean": "tsc --build --clean",
|
|
22
|
+
"build": "run -T tsc --build tsconfig.build.json",
|
|
23
|
+
"build:watch": "run -T tsc --build tsconfig.build.json && (concurrently 'tsc --build -w tsconfig.build.json')",
|
|
24
|
+
"clean": "run -T tsc --build --clean",
|
|
25
25
|
"test": "run -T jest --testMatch='**/*.unit.test.js' --coverageDirectory coverage/unit",
|
|
26
26
|
"zemu:install": "docker pull zondax/builder-zemu:speculos-745fe46f81cfc18114b94a37beaefb58a09c0fcd",
|
|
27
27
|
"test:integration": "yarn zemu:install && run -T jest --runInBand",
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
"prepublishOnly": "yarn run -T build --scope @exodus/hw-ledger"
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"@exodus/atoms": "^
|
|
33
|
+
"@exodus/atoms": "^8.0.0",
|
|
34
34
|
"@exodus/bip322-js": "^1.1.0-exodus.4",
|
|
35
35
|
"@exodus/bitcoinjs-lib": "^6.1.5-exodus.0",
|
|
36
36
|
"@exodus/ethersproject-transactions": "^5.4.2-exodus.0",
|
|
@@ -69,8 +69,7 @@
|
|
|
69
69
|
"jest-when": "^3.5.2",
|
|
70
70
|
"redux": "^4.2.1",
|
|
71
71
|
"tiny-secp256k1": "^2.2.3",
|
|
72
|
-
"ts-jest": "^29.0.3"
|
|
73
|
-
"typescript": "^4.7.3"
|
|
72
|
+
"ts-jest": "^29.0.3"
|
|
74
73
|
},
|
|
75
|
-
"gitHead": "
|
|
74
|
+
"gitHead": "a76a22c96445bcaa05e18de0e0c323cf9dd04cba"
|
|
76
75
|
}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { MY_STATE } from '@exodus/redux-dependency-injection';
|
|
2
|
-
const resultFunction = (state) => state.bluetoothEnabled;
|
|
3
|
-
const bluetoothEnabledSelectorDefinition = {
|
|
4
|
-
id: 'bluetoothEnabled',
|
|
5
|
-
resultFunction,
|
|
6
|
-
dependencies: [{ selector: MY_STATE }],
|
|
7
|
-
};
|
|
8
|
-
export default bluetoothEnabledSelectorDefinition;
|