@onekeyfe/hd-transport-react-native 1.1.27 → 1.2.0-alpha.0
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/BleManager.d.ts.map +1 -1
- package/dist/BleTransport.d.ts +2 -0
- package/dist/BleTransport.d.ts.map +1 -1
- package/dist/bleStrategy.d.ts +15 -0
- package/dist/bleStrategy.d.ts.map +1 -0
- package/dist/constants.d.ts +4 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/index.d.ts +58 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +814 -122
- package/dist/logger.d.ts +14 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +5 -5
- package/src/BleManager.ts +11 -14
- package/src/BleTransport.ts +9 -5
- package/src/__tests__/bleStrategy.test.ts +47 -0
- package/src/bleStrategy.ts +60 -0
- package/src/constants.ts +25 -1
- package/src/index.ts +888 -65
- package/src/logger.ts +19 -0
- package/src/types.ts +3 -0
- package/src/utils/validateNotify.ts +4 -4
package/dist/BleManager.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BleManager.d.ts","sourceRoot":"","sources":["../src/BleManager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"BleManager.d.ts","sourceRoot":"","sources":["../src/BleManager.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AASnE,eAAO,MAAM,qBAAqB,iBAAkB,MAAM,EAAE,0BACZ,CAAC;AAEjD,eAAO,MAAM,gBAAgB,6BAAwC,CAAC;AAEtE,eAAO,MAAM,UAAU,eAAgB,MAAM;;;EAAoC,CAAC;AAElF,eAAO,MAAM,iBAAiB,kBAAmB,MAAM,KAAG,QAAQ,UAAU,GAAG,SAAS,CA+BpF,CAAC"}
|
package/dist/BleTransport.d.ts
CHANGED
|
@@ -8,6 +8,8 @@ export default class BleTransport {
|
|
|
8
8
|
notifyCharacteristic: Characteristic;
|
|
9
9
|
notifySubscription?: Subscription;
|
|
10
10
|
disconnectSubscription?: Subscription;
|
|
11
|
+
notifyTransactionId?: string;
|
|
12
|
+
monitorToken?: number;
|
|
11
13
|
static MAX_RETRIES: number;
|
|
12
14
|
static RETRY_DELAY: number;
|
|
13
15
|
constructor(device: Device, writeCharacteristic: Characteristic, notifyCharacteristic: Characteristic);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BleTransport.d.ts","sourceRoot":"","sources":["../src/BleTransport.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"BleTransport.d.ts","sourceRoot":"","sources":["../src/BleTransport.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAIjF,MAAM,CAAC,OAAO,OAAO,YAAY;IAC/B,EAAE,EAAE,MAAM,CAAC;IAEX,IAAI,SAA6B;IAEjC,MAAM,EAAE,MAAM,CAAC;IAEf,OAAO,SAAM;IAEb,mBAAmB,EAAE,cAAc,CAAC;IAEpC,oBAAoB,EAAE,cAAc,CAAC;IAErC,kBAAkB,CAAC,EAAE,YAAY,CAAC;IAElC,sBAAsB,CAAC,EAAE,YAAY,CAAC;IAEtC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAE7B,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,MAAM,CAAC,WAAW,SAAK;IAEvB,MAAM,CAAC,WAAW,SAAQ;gBAGxB,MAAM,EAAE,MAAM,EACd,mBAAmB,EAAE,cAAc,EACnC,oBAAoB,EAAE,cAAc;IAchC,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,SAA2B,GAAG,OAAO,CAAC,IAAI,CAAC;CA2BzF"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export type BlePlatform = 'ios' | 'android' | string;
|
|
2
|
+
export type BleWriteCapability = {
|
|
3
|
+
isWritableWithResponse?: boolean | null;
|
|
4
|
+
isWritableWithoutResponse?: boolean | null;
|
|
5
|
+
};
|
|
6
|
+
export type BleWriteMode = 'withResponse' | 'withoutResponse';
|
|
7
|
+
export declare function hasWritableCapability(characteristic: BleWriteCapability): boolean;
|
|
8
|
+
export declare function resolveBleWriteMode(characteristic: BleWriteCapability, preferredMode?: BleWriteMode): BleWriteMode;
|
|
9
|
+
export declare function resolveProtocolV2PacketCapacity({ platform, iosPacketLength, androidPacketLength, mtu, }: {
|
|
10
|
+
platform: BlePlatform;
|
|
11
|
+
iosPacketLength?: number;
|
|
12
|
+
androidPacketLength?: number;
|
|
13
|
+
mtu?: number | null;
|
|
14
|
+
}): number;
|
|
15
|
+
//# sourceMappingURL=bleStrategy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bleStrategy.d.ts","sourceRoot":"","sources":["../src/bleStrategy.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,SAAS,GAAG,MAAM,CAAC;AAErD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,sBAAsB,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACxC,yBAAyB,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;CAC5C,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,cAAc,GAAG,iBAAiB,CAAC;AAE9D,wBAAgB,qBAAqB,CAAC,cAAc,EAAE,kBAAkB,WAEvE;AAED,wBAAgB,mBAAmB,CACjC,cAAc,EAAE,kBAAkB,EAClC,aAAa,GAAE,YAAgC,GAC9C,YAAY,CAkBd;AAED,wBAAgB,+BAA+B,CAAC,EAC9C,QAAQ,EACR,eAAmC,EACnC,mBAA2C,EAC3C,GAAG,GACJ,EAAE;IACD,QAAQ,EAAE,WAAW,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB,UAWA"}
|
package/dist/constants.d.ts
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
export declare const IOS_PACKET_LENGTH = 128;
|
|
2
2
|
export declare const ANDROID_PACKET_LENGTH = 192;
|
|
3
|
+
export declare const ANDROID_DEFAULT_MTU = 23;
|
|
3
4
|
export declare const getBluetoothServiceUuids: () => string[];
|
|
4
5
|
export declare const getInfosForServiceUuid: (serviceUuid: string, deviceType: 'classic') => {
|
|
5
6
|
serviceUuid: string;
|
|
6
7
|
writeUuid?: string | undefined;
|
|
7
8
|
notifyUuid?: string | undefined;
|
|
8
9
|
} | null;
|
|
10
|
+
export declare const normalizeBleUuid: (uuid?: string | null) => string;
|
|
11
|
+
export declare const getBleUuidKey: (uuid?: string | null) => string;
|
|
12
|
+
export declare const isSameBleUuid: (left?: string | null, right?: string | null) => boolean;
|
|
9
13
|
//# sourceMappingURL=constants.d.ts.map
|
package/dist/constants.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB,MAAM,CAAC;AACrC,eAAO,MAAM,qBAAqB,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB,MAAM,CAAC;AACrC,eAAO,MAAM,qBAAqB,MAAM,CAAC;AACzC,eAAO,MAAM,mBAAmB,KAAK,CAAC;AA8BtC,eAAO,MAAM,wBAAwB,gBAA0B,CAAC;AAChE,eAAO,MAAM,sBAAsB,gBAAiB,MAAM,cAAc,SAAS;iBA1BhE,MAAM;;;QAyCtB,CAAC;AAEF,eAAO,MAAM,gBAAgB,UAAW,MAAM,GAAG,IAAI,WACP,CAAC;AAE/C,eAAO,MAAM,aAAa,UAAW,MAAM,GAAG,IAAI,WAGjD,CAAC;AAEF,eAAO,MAAM,aAAa,UAAW,MAAM,GAAG,IAAI,UAAU,MAAM,GAAG,IAAI,YAQxE,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as transport from '@onekeyfe/hd-transport';
|
|
2
|
-
import transport__default, { OneKeyDeviceInfoBase } from '@onekeyfe/hd-transport';
|
|
2
|
+
import transport__default, { ProtocolType, OneKeyDeviceInfoBase, TransportCallOptions } from '@onekeyfe/hd-transport';
|
|
3
3
|
import { Device, Characteristic, Subscription, BleManager } from 'react-native-ble-plx';
|
|
4
4
|
import { Deferred } from '@onekeyfe/hd-shared';
|
|
5
5
|
import EventEmitter from 'events';
|
|
@@ -13,6 +13,8 @@ declare class BleTransport {
|
|
|
13
13
|
notifyCharacteristic: Characteristic;
|
|
14
14
|
notifySubscription?: Subscription;
|
|
15
15
|
disconnectSubscription?: Subscription;
|
|
16
|
+
notifyTransactionId?: string;
|
|
17
|
+
monitorToken?: number;
|
|
16
18
|
static MAX_RETRIES: number;
|
|
17
19
|
static RETRY_DELAY: number;
|
|
18
20
|
constructor(device: Device, writeCharacteristic: Characteristic, notifyCharacteristic: Characteristic);
|
|
@@ -25,16 +27,36 @@ type TransportOptions = {
|
|
|
25
27
|
type BleAcquireInput = {
|
|
26
28
|
uuid: string;
|
|
27
29
|
forceCleanRunPromise?: boolean;
|
|
30
|
+
expectedProtocol?: ProtocolType;
|
|
28
31
|
};
|
|
29
32
|
|
|
30
33
|
type ResolvedBleCharacteristics = {
|
|
31
34
|
writeCharacteristic: Characteristic;
|
|
32
35
|
notifyCharacteristic: Characteristic;
|
|
33
36
|
};
|
|
37
|
+
type ProtocolV2BleTuning = {
|
|
38
|
+
iosPacketLength?: number;
|
|
39
|
+
androidPacketLength?: number;
|
|
40
|
+
highVolumeWriteBurstSize?: number;
|
|
41
|
+
highVolumeWritePauseMs?: number;
|
|
42
|
+
highVolumeWriteFlushDelayMs?: number;
|
|
43
|
+
highVolumeWriteWithResponse?: boolean;
|
|
44
|
+
};
|
|
45
|
+
declare function configureProtocolV2BleTuning(tuning?: ProtocolV2BleTuning): void;
|
|
46
|
+
declare function resetProtocolV2BleTuning(): void;
|
|
47
|
+
declare function getProtocolV2BleTuning(): {
|
|
48
|
+
iosPacketLength: number;
|
|
49
|
+
androidPacketLength: number;
|
|
50
|
+
highVolumeWriteBurstSize: number;
|
|
51
|
+
highVolumeWritePauseMs: number;
|
|
52
|
+
highVolumeWriteFlushDelayMs: number;
|
|
53
|
+
highVolumeWriteWithResponse: boolean;
|
|
54
|
+
};
|
|
34
55
|
type IOneKeyDevice = OneKeyDeviceInfoBase & Device;
|
|
35
56
|
declare class ReactNativeBleTransport {
|
|
36
57
|
blePlxManager: BleManager | undefined;
|
|
37
58
|
_messages: ReturnType<typeof transport__default.parseConfigure> | undefined;
|
|
59
|
+
_messagesV2: ReturnType<typeof transport__default.parseConfigure> | undefined;
|
|
38
60
|
name: string;
|
|
39
61
|
configured: boolean;
|
|
40
62
|
stopped: boolean;
|
|
@@ -42,9 +64,19 @@ declare class ReactNativeBleTransport {
|
|
|
42
64
|
runPromise: Deferred<any> | null;
|
|
43
65
|
emitter?: EventEmitter;
|
|
44
66
|
firmwareUploadWriteRecoveryIds: Set<string>;
|
|
67
|
+
private deviceProtocol;
|
|
68
|
+
private deviceProtocolHints;
|
|
69
|
+
private protocolV2Assemblers;
|
|
70
|
+
private protocolV2FrameQueues;
|
|
71
|
+
private protocolV2FramePromises;
|
|
72
|
+
private activeProtocolV2Call;
|
|
73
|
+
private nextProtocolV2CallToken;
|
|
74
|
+
private monitorTokens;
|
|
75
|
+
private nextMonitorToken;
|
|
45
76
|
constructor(options: TransportOptions);
|
|
46
|
-
init(
|
|
77
|
+
init(logger: any, emitter: EventEmitter): void;
|
|
47
78
|
configure(signedData: any): void;
|
|
79
|
+
configureProtocolV2(signedData: any): void;
|
|
48
80
|
listen(): void;
|
|
49
81
|
getPlxManager(): Promise<BleManager>;
|
|
50
82
|
resolveCharacteristics(device: Device): Promise<ResolvedBleCharacteristics>;
|
|
@@ -53,14 +85,34 @@ declare class ReactNativeBleTransport {
|
|
|
53
85
|
enumerate(): Promise<IOneKeyDevice[]>;
|
|
54
86
|
acquire(input: BleAcquireInput): Promise<{
|
|
55
87
|
uuid: string;
|
|
88
|
+
protocolType: ProtocolType;
|
|
56
89
|
}>;
|
|
57
|
-
_monitorCharacteristic(characteristic: Characteristic, uuid: string): Subscription;
|
|
58
|
-
release(uuid: string): Promise<boolean>;
|
|
90
|
+
_monitorCharacteristic(characteristic: Characteristic, uuid: string, monitorToken: number, notifyTransactionId: string): Subscription;
|
|
91
|
+
release(uuid: string, onclose?: boolean): Promise<boolean>;
|
|
59
92
|
post(session: string, name: string, data: Record<string, unknown>): Promise<void>;
|
|
60
|
-
call(uuid: string, name: string, data: Record<string, unknown
|
|
93
|
+
call(uuid: string, name: string, data: Record<string, unknown>, options?: TransportCallOptions): Promise<transport.MessageFromOneKey>;
|
|
94
|
+
private callProtocolV1;
|
|
61
95
|
stop(): void;
|
|
62
96
|
disconnect(session: string): Promise<void>;
|
|
63
97
|
cancel(): void;
|
|
98
|
+
private getCachedTransport;
|
|
99
|
+
private createProtocolMismatchError;
|
|
100
|
+
private createProtocolDetectionError;
|
|
101
|
+
private clearProbeProtocol;
|
|
102
|
+
private detectProtocol;
|
|
103
|
+
private resetProbeStateAfterProtocolProbe;
|
|
104
|
+
private probeProtocolV1;
|
|
105
|
+
private probeProtocolV2;
|
|
106
|
+
private handleProtocolV2Notification;
|
|
107
|
+
private getProtocolV2FrameQueue;
|
|
108
|
+
private resolveProtocolV2Frame;
|
|
109
|
+
private rejectAllProtocolV2Frames;
|
|
110
|
+
private resetProtocolV2Frames;
|
|
111
|
+
private isActiveProtocolV2Call;
|
|
112
|
+
private readProtocolV2Frame;
|
|
113
|
+
private writeProtocolV2Frame;
|
|
114
|
+
private callProtocolV2;
|
|
115
|
+
getProtocolType(path: string): ProtocolType | undefined;
|
|
64
116
|
}
|
|
65
117
|
|
|
66
|
-
export { IOneKeyDevice, ReactNativeBleTransport as default };
|
|
118
|
+
export { IOneKeyDevice, ProtocolV2BleTuning, configureProtocolV2BleTuning, ReactNativeBleTransport as default, getProtocolV2BleTuning, resetProtocolV2BleTuning };
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAIL,UAAU,IAAI,aAAa,EAE5B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|