@onekeyfe/hd-common-connect-sdk 1.2.0-alpha.55 → 1.2.0-alpha.57
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/README.md +7 -1
- package/__tests__/device-state-event.test.js +38 -2
- package/dist/index.d.ts +12 -3
- package/dist/index.js +208 -169
- package/package.json +9 -9
- package/src/index.ts +192 -140
package/README.md
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# `@onekeyfe/hd-common-connect-sdk`
|
|
2
2
|
|
|
3
|
-
`@onekeyfe/hd-common-connect-sdk`
|
|
3
|
+
`@onekeyfe/hd-common-connect-sdk` selects the transport for Node, browser WebUSB,
|
|
4
|
+
Electron BLE, low-level, and emulator environments. It does not use an iframe.
|
|
4
5
|
|
|
5
6
|
## Installation
|
|
6
7
|
|
|
@@ -24,13 +25,18 @@ import HardwareSDK from '@onekeyfe/hd-common-connect-sdk';
|
|
|
24
25
|
function init() {
|
|
25
26
|
HardwareSDK.init({
|
|
26
27
|
debug: false,
|
|
28
|
+
env: 'webusb',
|
|
27
29
|
});
|
|
28
30
|
}
|
|
29
31
|
```
|
|
30
32
|
|
|
33
|
+
Test and factory-only methods are intentionally absent from the default SDK. Use
|
|
34
|
+
`@onekeyfe/hd-test-api` when those methods are required.
|
|
35
|
+
|
|
31
36
|
## Docs
|
|
32
37
|
|
|
33
38
|
Documentation is available [hardware-js-sdk](https://developer.onekey.so/connect-to-hardware/hardware-sdk/start)
|
|
34
39
|
|
|
35
40
|
## Examples
|
|
41
|
+
|
|
36
42
|
// TODO: add example url
|
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
import { CORE_EVENT, DEVICE, DEVICE_EVENT, initCore } from '@onekeyfe/hd-core';
|
|
2
|
+
import { WebUsbTransport } from '@onekeyfe/hd-transport-web-device';
|
|
2
3
|
|
|
3
|
-
import HardwareCommonConnectSdk from '../src';
|
|
4
|
+
import HardwareCommonConnectSdk, { createHardwareCommonConnectSdk } from '../src';
|
|
4
5
|
|
|
5
6
|
jest.mock('@onekeyfe/hd-core', () => {
|
|
6
7
|
const actual = jest.requireActual('@onekeyfe/hd-core');
|
|
7
8
|
return {
|
|
8
9
|
__esModule: true,
|
|
9
10
|
...actual,
|
|
10
|
-
default: ({ eventEmitter, init, dispose }) => ({
|
|
11
|
+
default: ({ eventEmitter, init, dispose, call }) => ({
|
|
11
12
|
init,
|
|
12
13
|
dispose,
|
|
14
|
+
call,
|
|
13
15
|
on: (type, listener) => eventEmitter.on(type, listener),
|
|
14
16
|
off: (type, listener) => eventEmitter.off(type, listener),
|
|
15
17
|
removeAllListeners: type => eventEmitter.removeAllListeners(type),
|
|
@@ -77,6 +79,11 @@ describe('hd-common-connect-sdk device state events', () => {
|
|
|
77
79
|
HardwareCommonConnectSdk.on(DEVICE.STATE, listener);
|
|
78
80
|
|
|
79
81
|
await HardwareCommonConnectSdk.init({ env: 'webusb' });
|
|
82
|
+
expect(initCore).toHaveBeenLastCalledWith(
|
|
83
|
+
expect.objectContaining({ env: 'webusb' }),
|
|
84
|
+
WebUsbTransport,
|
|
85
|
+
undefined
|
|
86
|
+
);
|
|
80
87
|
const payload = {
|
|
81
88
|
connectId: 'connect-id',
|
|
82
89
|
revision: 1,
|
|
@@ -94,4 +101,33 @@ describe('hd-common-connect-sdk device state events', () => {
|
|
|
94
101
|
HardwareCommonConnectSdk.removeAllListeners(DEVICE.STATE);
|
|
95
102
|
await HardwareCommonConnectSdk.dispose();
|
|
96
103
|
});
|
|
104
|
+
|
|
105
|
+
test('keeps method extensions scoped to the created SDK instance', async () => {
|
|
106
|
+
const methodExtension = {
|
|
107
|
+
name: 'test-extension',
|
|
108
|
+
methods: {},
|
|
109
|
+
};
|
|
110
|
+
const extendedSdk = createHardwareCommonConnectSdk({
|
|
111
|
+
extension: {
|
|
112
|
+
methodExtensions: [methodExtension],
|
|
113
|
+
createApi: () => ({ extensionMarker: () => 'enabled' }),
|
|
114
|
+
},
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
expect(extendedSdk.extensionMarker()).toBe('enabled');
|
|
118
|
+
expect(HardwareCommonConnectSdk).not.toHaveProperty('extensionMarker');
|
|
119
|
+
|
|
120
|
+
initCore.mockResolvedValue({ on: jest.fn(), dispose: jest.fn() });
|
|
121
|
+
await extendedSdk.init({ env: 'webusb' });
|
|
122
|
+
expect(initCore).toHaveBeenLastCalledWith(
|
|
123
|
+
expect.objectContaining({ env: 'webusb' }),
|
|
124
|
+
WebUsbTransport,
|
|
125
|
+
undefined,
|
|
126
|
+
{
|
|
127
|
+
methodExtensions: [methodExtension],
|
|
128
|
+
allowDestructiveOperations: false,
|
|
129
|
+
}
|
|
130
|
+
);
|
|
131
|
+
await extendedSdk.dispose();
|
|
132
|
+
});
|
|
97
133
|
});
|
package/dist/index.d.ts
CHANGED
|
@@ -1,9 +1,18 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { CoreMethodExtension, CoreApi } from '@onekeyfe/hd-core';
|
|
2
2
|
import { Deferred } from '@onekeyfe/hd-shared';
|
|
3
3
|
|
|
4
|
+
type HardwareCommonConnectSdkExtension<TExtensionApi extends object> = {
|
|
5
|
+
methodExtensions: readonly CoreMethodExtension[];
|
|
6
|
+
createApi: (call: CoreApi['call']) => TExtensionApi;
|
|
7
|
+
};
|
|
8
|
+
type HardwareCommonConnectSdkOptions<TExtensionApi extends object> = {
|
|
9
|
+
extension?: HardwareCommonConnectSdkExtension<TExtensionApi>;
|
|
10
|
+
allowDestructiveOperations?: boolean;
|
|
11
|
+
};
|
|
12
|
+
declare const createHardwareCommonConnectSdk: <TExtensionApi extends object = Record<never, never>>(options?: HardwareCommonConnectSdkOptions<TExtensionApi>) => CoreApi & TExtensionApi;
|
|
13
|
+
declare const HardwareCommonConnectSdk: CoreApi & object;
|
|
4
14
|
declare const messagePromises: {
|
|
5
15
|
[key: number]: Deferred<any>;
|
|
6
16
|
};
|
|
7
|
-
declare const HardwareCommonConnectSdk: _onekeyfe_hd_core.CoreApi;
|
|
8
17
|
|
|
9
|
-
export { HardwareCommonConnectSdk as default, messagePromises };
|
|
18
|
+
export { HardwareCommonConnectSdkExtension, HardwareCommonConnectSdkOptions, createHardwareCommonConnectSdk, HardwareCommonConnectSdk as default, messagePromises };
|
package/dist/index.js
CHANGED
|
@@ -4,10 +4,10 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
4
4
|
|
|
5
5
|
var HardwareSdk = require('@onekeyfe/hd-core');
|
|
6
6
|
var hdShared = require('@onekeyfe/hd-shared');
|
|
7
|
+
var EmulatorTransport = require('@onekeyfe/hd-transport-emulator');
|
|
7
8
|
var HttpTransport = require('@onekeyfe/hd-transport-http');
|
|
8
|
-
var hdTransportWebDevice = require('@onekeyfe/hd-transport-web-device');
|
|
9
9
|
var LowlevelTransport = require('@onekeyfe/hd-transport-lowlevel');
|
|
10
|
-
var
|
|
10
|
+
var hdTransportWebDevice = require('@onekeyfe/hd-transport-web-device');
|
|
11
11
|
|
|
12
12
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
13
13
|
|
|
@@ -30,9 +30,9 @@ function _interopNamespace(e) {
|
|
|
30
30
|
}
|
|
31
31
|
|
|
32
32
|
var HardwareSdk__default = /*#__PURE__*/_interopDefaultLegacy(HardwareSdk);
|
|
33
|
+
var EmulatorTransport__default = /*#__PURE__*/_interopDefaultLegacy(EmulatorTransport);
|
|
33
34
|
var HttpTransport__default = /*#__PURE__*/_interopDefaultLegacy(HttpTransport);
|
|
34
35
|
var LowlevelTransport__default = /*#__PURE__*/_interopDefaultLegacy(LowlevelTransport);
|
|
35
|
-
var EmulatorTransport__default = /*#__PURE__*/_interopDefaultLegacy(EmulatorTransport);
|
|
36
36
|
|
|
37
37
|
/******************************************************************************
|
|
38
38
|
Copyright (c) Microsoft Corporation.
|
|
@@ -579,7 +579,6 @@ function eventTargetAgnosticAddListener(emitter, name, listener, flags) {
|
|
|
579
579
|
}
|
|
580
580
|
}
|
|
581
581
|
|
|
582
|
-
var eventEmitter = new events.exports();
|
|
583
582
|
var Log = HardwareSdk.getLogger(HardwareSdk.LoggerNames.HdCommonConnectSdk);
|
|
584
583
|
var getTransport = function (env) { return __awaiter(void 0, void 0, void 0, function () {
|
|
585
584
|
var NodeUsbTransport;
|
|
@@ -605,185 +604,225 @@ var getTransport = function (env) { return __awaiter(void 0, void 0, void 0, fun
|
|
|
605
604
|
}
|
|
606
605
|
});
|
|
607
606
|
}); };
|
|
608
|
-
var
|
|
609
|
-
var
|
|
610
|
-
|
|
611
|
-
var
|
|
612
|
-
var dispose = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
607
|
+
var createSdkInstance = function (options) {
|
|
608
|
+
var _a, _b;
|
|
609
|
+
if (options === void 0) { options = {}; }
|
|
610
|
+
var eventEmitter = new events.exports.EventEmitter();
|
|
613
611
|
var core;
|
|
614
|
-
var
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
612
|
+
var settings = HardwareSdk.parseConnectSettings();
|
|
613
|
+
var messageID = 0;
|
|
614
|
+
var instanceMessagePromises = {};
|
|
615
|
+
var dispose = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
616
|
+
var currentCore;
|
|
617
|
+
var _a;
|
|
618
|
+
return __generator(this, function (_b) {
|
|
619
|
+
switch (_b.label) {
|
|
620
|
+
case 0:
|
|
621
|
+
currentCore = core;
|
|
622
|
+
core = undefined;
|
|
623
|
+
eventEmitter.removeAllListeners();
|
|
624
|
+
Object.keys(instanceMessagePromises).forEach(function (key) {
|
|
625
|
+
delete instanceMessagePromises[Number(key)];
|
|
626
|
+
});
|
|
627
|
+
settings = HardwareSdk.parseConnectSettings();
|
|
628
|
+
return [4 /*yield*/, ((_a = currentCore === null || currentCore === void 0 ? void 0 : currentCore.dispose) === null || _a === void 0 ? void 0 : _a.call(currentCore))];
|
|
629
|
+
case 1:
|
|
630
|
+
_b.sent();
|
|
631
|
+
return [2 /*return*/];
|
|
632
|
+
}
|
|
633
|
+
});
|
|
634
|
+
}); };
|
|
635
|
+
var uiResponse = function (response) {
|
|
636
|
+
if (!core) {
|
|
637
|
+
throw hdShared.ERRORS.TypedError(hdShared.HardwareErrorCode.NotInitialized);
|
|
629
638
|
}
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
}
|
|
644
|
-
function
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
break;
|
|
659
|
-
case HardwareSdk.LOG_EVENT:
|
|
660
|
-
case HardwareSdk.FIRMWARE_EVENT:
|
|
661
|
-
eventEmitter.emit(message.event, message);
|
|
662
|
-
break;
|
|
663
|
-
case HardwareSdk.DEVICE_EVENT:
|
|
664
|
-
if ([
|
|
665
|
-
HardwareSdk.DEVICE.CONNECT,
|
|
666
|
-
HardwareSdk.DEVICE.DISCONNECT,
|
|
667
|
-
HardwareSdk.DEVICE.FEATURES,
|
|
668
|
-
HardwareSdk.DEVICE.STATE,
|
|
669
|
-
HardwareSdk.DEVICE.SUPPORT_FEATURES,
|
|
670
|
-
].includes(message.type)) {
|
|
639
|
+
var type = response.type, payload = response.payload;
|
|
640
|
+
core
|
|
641
|
+
.handleMessage({ event: HardwareSdk.UI_EVENT, type: type, payload: payload })
|
|
642
|
+
.catch(function (error) { return Log.error(HardwareSdk.createErrorMessage(error)); });
|
|
643
|
+
};
|
|
644
|
+
var cancel = function (connectId) {
|
|
645
|
+
if (!core)
|
|
646
|
+
return;
|
|
647
|
+
core
|
|
648
|
+
.handleMessage({
|
|
649
|
+
event: HardwareSdk.IFRAME.CANCEL,
|
|
650
|
+
type: HardwareSdk.IFRAME.CANCEL,
|
|
651
|
+
payload: { connectId: connectId },
|
|
652
|
+
})
|
|
653
|
+
.catch(function (error) { return Log.error(HardwareSdk.createErrorMessage(error)); });
|
|
654
|
+
};
|
|
655
|
+
function handleMessage(message) {
|
|
656
|
+
var event = message.event;
|
|
657
|
+
if (!core) {
|
|
658
|
+
return;
|
|
659
|
+
}
|
|
660
|
+
var blockLog = HardwareSdk.getLogBlockLabel(message);
|
|
661
|
+
if (event !== HardwareSdk.LOG_EVENT) {
|
|
662
|
+
Log.debug('hd-common-connect-sdk handleMessage', blockLog !== null && blockLog !== void 0 ? blockLog : message);
|
|
663
|
+
}
|
|
664
|
+
switch (event) {
|
|
665
|
+
case HardwareSdk.UI_EVENT:
|
|
666
|
+
eventEmitter.emit(message.event, message);
|
|
671
667
|
eventEmitter.emit(message.type, message.payload);
|
|
668
|
+
break;
|
|
669
|
+
case HardwareSdk.LOG_EVENT:
|
|
670
|
+
case HardwareSdk.FIRMWARE_EVENT:
|
|
671
|
+
eventEmitter.emit(message.event, message);
|
|
672
|
+
break;
|
|
673
|
+
case HardwareSdk.DEVICE_EVENT:
|
|
674
|
+
if ([
|
|
675
|
+
HardwareSdk.DEVICE.CONNECT,
|
|
676
|
+
HardwareSdk.DEVICE.DISCONNECT,
|
|
677
|
+
HardwareSdk.DEVICE.FEATURES,
|
|
678
|
+
HardwareSdk.DEVICE.STATE,
|
|
679
|
+
HardwareSdk.DEVICE.SUPPORT_FEATURES,
|
|
680
|
+
].includes(message.type)) {
|
|
681
|
+
eventEmitter.emit(message.type, message.payload);
|
|
682
|
+
}
|
|
683
|
+
break;
|
|
684
|
+
case HardwareSdk.IFRAME.CALLBACK: {
|
|
685
|
+
var _a = message.payload, callbackId = _a.callbackId, data = _a.data, error = _a.error;
|
|
686
|
+
HardwareSdk.executeCallback(callbackId, data, error);
|
|
687
|
+
break;
|
|
672
688
|
}
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
var _a = message.payload, callbackId = _a.callbackId, data = _a.data, error = _a.error;
|
|
676
|
-
HardwareSdk.executeCallback(callbackId, data, error);
|
|
677
|
-
break;
|
|
689
|
+
default:
|
|
690
|
+
Log.log('No need to be captured message', message.event);
|
|
678
691
|
}
|
|
679
|
-
default:
|
|
680
|
-
Log.log('No need to be captured message', message.event);
|
|
681
692
|
}
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
693
|
+
function postMessage(message, usePromise) {
|
|
694
|
+
if (usePromise === void 0) { usePromise = true; }
|
|
695
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
696
|
+
return __generator(this, function (_a) {
|
|
697
|
+
switch (_a.label) {
|
|
698
|
+
case 0:
|
|
699
|
+
if (!core) {
|
|
700
|
+
throw hdShared.ERRORS.TypedError('postMessage: _core not found');
|
|
701
|
+
}
|
|
702
|
+
if (usePromise) {
|
|
703
|
+
messageID += 1;
|
|
704
|
+
instanceMessagePromises[messageID] = hdShared.createDeferred();
|
|
705
|
+
return [2 /*return*/, core.handleMessage(__assign(__assign({}, message), { id: "".concat(messageID) }))];
|
|
706
|
+
}
|
|
707
|
+
return [4 /*yield*/, core.handleMessage(message)];
|
|
708
|
+
case 1:
|
|
709
|
+
_a.sent();
|
|
710
|
+
return [2 /*return*/];
|
|
711
|
+
}
|
|
712
|
+
});
|
|
713
|
+
});
|
|
714
|
+
}
|
|
715
|
+
var init = function (partialSettings, _, plugin) { return __awaiter(void 0, void 0, void 0, function () {
|
|
716
|
+
var Transport, error_1;
|
|
717
|
+
var _a;
|
|
718
|
+
return __generator(this, function (_b) {
|
|
719
|
+
switch (_b.label) {
|
|
689
720
|
case 0:
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
_messageID++;
|
|
695
|
-
messagePromises[_messageID] = hdShared.createDeferred();
|
|
696
|
-
return [4 /*yield*/, _core.handleMessage(__assign(__assign({}, message), { id: "".concat(_messageID) }))];
|
|
721
|
+
settings = __assign(__assign(__assign({}, settings), partialSettings), { env: (_a = partialSettings.env) !== null && _a !== void 0 ? _a : 'node' });
|
|
722
|
+
HardwareSdk.enableLog(!!partialSettings.debug);
|
|
723
|
+
Log.debug('init');
|
|
724
|
+
_b.label = 1;
|
|
697
725
|
case 1:
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
return [2 /*return*/, response];
|
|
726
|
+
_b.trys.push([1, 7, , 8]);
|
|
727
|
+
return [4 /*yield*/, getTransport(settings.env)];
|
|
701
728
|
case 2:
|
|
702
|
-
|
|
703
|
-
return [
|
|
729
|
+
Transport = _b.sent();
|
|
730
|
+
if (!options.extension) return [3 /*break*/, 4];
|
|
731
|
+
return [4 /*yield*/, HardwareSdk.initCore(settings, Transport, plugin, {
|
|
732
|
+
methodExtensions: options.extension.methodExtensions,
|
|
733
|
+
allowDestructiveOperations: options.allowDestructiveOperations === true,
|
|
734
|
+
})];
|
|
735
|
+
case 3:
|
|
736
|
+
core = _b.sent();
|
|
737
|
+
return [3 /*break*/, 6];
|
|
738
|
+
case 4: return [4 /*yield*/, HardwareSdk.initCore(settings, Transport, plugin)];
|
|
739
|
+
case 5:
|
|
740
|
+
core = _b.sent();
|
|
741
|
+
_b.label = 6;
|
|
742
|
+
case 6:
|
|
743
|
+
core === null || core === void 0 ? void 0 : core.on(HardwareSdk.CORE_EVENT, handleMessage);
|
|
744
|
+
HardwareSdk.setLoggerPostMessage(handleMessage);
|
|
745
|
+
return [2 /*return*/, true];
|
|
746
|
+
case 7:
|
|
747
|
+
error_1 = _b.sent();
|
|
748
|
+
Log.error(HardwareSdk.createErrorMessage(error_1));
|
|
749
|
+
return [2 /*return*/, false];
|
|
750
|
+
case 8: return [2 /*return*/];
|
|
704
751
|
}
|
|
705
752
|
});
|
|
706
|
-
});
|
|
707
|
-
|
|
708
|
-
var
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
});
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
blockLog = HardwareSdk.getLogBlockLabel(params);
|
|
744
|
-
Log.debug('call: ', blockLog !== null && blockLog !== void 0 ? blockLog : params);
|
|
745
|
-
_d.label = 1;
|
|
746
|
-
case 1:
|
|
747
|
-
_d.trys.push([1, 3, , 4]);
|
|
748
|
-
return [4 /*yield*/, postMessage({ event: HardwareSdk.IFRAME.CALL, type: HardwareSdk.IFRAME.CALL, payload: params })];
|
|
749
|
-
case 2:
|
|
750
|
-
response = _d.sent();
|
|
751
|
-
if (response) {
|
|
752
|
-
Log.debug('response: ', blockLog ? '[REDACTED]' : response);
|
|
753
|
-
if (!response.success) {
|
|
754
|
-
if (((_a = response.payload) === null || _a === void 0 ? void 0 : _a.code) === hdShared.HardwareErrorCode.BleUnsupported) {
|
|
755
|
-
postMessage(HardwareSdk.createUiMessage(HardwareSdk.UI_REQUEST.BLUETOOTH_UNSUPPORTED), false);
|
|
756
|
-
}
|
|
757
|
-
if (((_b = response.payload) === null || _b === void 0 ? void 0 : _b.code) === hdShared.HardwareErrorCode.BlePoweredOff) {
|
|
758
|
-
postMessage(HardwareSdk.createUiMessage(HardwareSdk.UI_REQUEST.BLUETOOTH_POWERED_OFF), false);
|
|
759
|
-
}
|
|
760
|
-
if (((_c = response.payload) === null || _c === void 0 ? void 0 : _c.code) === hdShared.HardwareErrorCode.BlePermissionError) {
|
|
761
|
-
postMessage(HardwareSdk.createUiMessage(HardwareSdk.UI_REQUEST.BLUETOOTH_PERMISSION), false);
|
|
753
|
+
}); };
|
|
754
|
+
var call = function (params) { return __awaiter(void 0, void 0, void 0, function () {
|
|
755
|
+
var blockLog, response, error_2;
|
|
756
|
+
var _a, _b, _c;
|
|
757
|
+
return __generator(this, function (_d) {
|
|
758
|
+
switch (_d.label) {
|
|
759
|
+
case 0:
|
|
760
|
+
blockLog = HardwareSdk.getLogBlockLabel(params);
|
|
761
|
+
Log.debug('call: ', blockLog !== null && blockLog !== void 0 ? blockLog : params);
|
|
762
|
+
_d.label = 1;
|
|
763
|
+
case 1:
|
|
764
|
+
_d.trys.push([1, 3, , 4]);
|
|
765
|
+
return [4 /*yield*/, postMessage({
|
|
766
|
+
event: HardwareSdk.IFRAME.CALL,
|
|
767
|
+
type: HardwareSdk.IFRAME.CALL,
|
|
768
|
+
payload: params,
|
|
769
|
+
})];
|
|
770
|
+
case 2:
|
|
771
|
+
response = _d.sent();
|
|
772
|
+
if (response) {
|
|
773
|
+
Log.debug('response: ', blockLog ? '[REDACTED]' : response);
|
|
774
|
+
if (!response.success) {
|
|
775
|
+
if (((_a = response.payload) === null || _a === void 0 ? void 0 : _a.code) === hdShared.HardwareErrorCode.BleUnsupported) {
|
|
776
|
+
postMessage(HardwareSdk.createUiMessage(HardwareSdk.UI_REQUEST.BLUETOOTH_UNSUPPORTED), false).catch(function (error) {
|
|
777
|
+
return Log.error(HardwareSdk.createErrorMessage(error));
|
|
778
|
+
});
|
|
779
|
+
}
|
|
780
|
+
if (((_b = response.payload) === null || _b === void 0 ? void 0 : _b.code) === hdShared.HardwareErrorCode.BlePoweredOff) {
|
|
781
|
+
postMessage(HardwareSdk.createUiMessage(HardwareSdk.UI_REQUEST.BLUETOOTH_POWERED_OFF), false).catch(function (error) {
|
|
782
|
+
return Log.error(HardwareSdk.createErrorMessage(error));
|
|
783
|
+
});
|
|
784
|
+
}
|
|
785
|
+
if (((_c = response.payload) === null || _c === void 0 ? void 0 : _c.code) === hdShared.HardwareErrorCode.BlePermissionError) {
|
|
786
|
+
postMessage(HardwareSdk.createUiMessage(HardwareSdk.UI_REQUEST.BLUETOOTH_PERMISSION), false).catch(function (error) {
|
|
787
|
+
return Log.error(HardwareSdk.createErrorMessage(error));
|
|
788
|
+
});
|
|
789
|
+
}
|
|
762
790
|
}
|
|
791
|
+
return [2 /*return*/, response];
|
|
763
792
|
}
|
|
764
|
-
return [2 /*return*/,
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
793
|
+
return [2 /*return*/, HardwareSdk.createErrorMessage(hdShared.ERRORS.TypedError(hdShared.HardwareErrorCode.CallMethodNotResponse))];
|
|
794
|
+
case 3:
|
|
795
|
+
error_2 = _d.sent();
|
|
796
|
+
Log.error('__call error: ', error_2);
|
|
797
|
+
return [2 /*return*/, HardwareSdk.createErrorMessage(error_2)];
|
|
798
|
+
case 4: return [2 /*return*/];
|
|
799
|
+
}
|
|
800
|
+
});
|
|
801
|
+
}); };
|
|
802
|
+
var updateSettings = function () { return Promise.resolve(true); };
|
|
803
|
+
var switchTransport = function () { return Promise.resolve({ success: true }); };
|
|
804
|
+
var sdk = HardwareSdk__default["default"]({
|
|
805
|
+
eventEmitter: eventEmitter,
|
|
806
|
+
init: init,
|
|
807
|
+
call: call,
|
|
808
|
+
cancel: cancel,
|
|
809
|
+
dispose: dispose,
|
|
810
|
+
uiResponse: uiResponse,
|
|
811
|
+
updateSettings: updateSettings,
|
|
812
|
+
switchTransport: switchTransport,
|
|
773
813
|
});
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
switchTransport: switchTransport,
|
|
786
|
-
});
|
|
814
|
+
var extensionApi = (_b = (_a = options.extension) === null || _a === void 0 ? void 0 : _a.createApi(sdk.call)) !== null && _b !== void 0 ? _b : {};
|
|
815
|
+
return {
|
|
816
|
+
sdk: Object.assign(sdk, extensionApi),
|
|
817
|
+
messagePromises: instanceMessagePromises,
|
|
818
|
+
};
|
|
819
|
+
};
|
|
820
|
+
var createHardwareCommonConnectSdk = function (options) {
|
|
821
|
+
if (options === void 0) { options = {}; }
|
|
822
|
+
return createSdkInstance(options).sdk;
|
|
823
|
+
};
|
|
824
|
+
var _a = createSdkInstance(), HardwareCommonConnectSdk = _a.sdk, messagePromises = _a.messagePromises;
|
|
787
825
|
|
|
826
|
+
exports.createHardwareCommonConnectSdk = createHardwareCommonConnectSdk;
|
|
788
827
|
exports["default"] = HardwareCommonConnectSdk;
|
|
789
828
|
exports.messagePromises = messagePromises;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@onekeyfe/hd-common-connect-sdk",
|
|
3
|
-
"version": "1.2.0-alpha.
|
|
3
|
+
"version": "1.2.0-alpha.57",
|
|
4
4
|
"author": "OneKey",
|
|
5
5
|
"homepage": "https://github.com/OneKeyHQ/hardware-js-sdk#readme",
|
|
6
6
|
"license": "ISC",
|
|
@@ -20,13 +20,13 @@
|
|
|
20
20
|
"lint:fix": "eslint . --fix"
|
|
21
21
|
},
|
|
22
22
|
"dependencies": {
|
|
23
|
-
"@onekeyfe/hd-core": "1.2.0-alpha.
|
|
24
|
-
"@onekeyfe/hd-shared": "1.2.0-alpha.
|
|
25
|
-
"@onekeyfe/hd-transport-emulator": "1.2.0-alpha.
|
|
26
|
-
"@onekeyfe/hd-transport-http": "1.2.0-alpha.
|
|
27
|
-
"@onekeyfe/hd-transport-lowlevel": "1.2.0-alpha.
|
|
28
|
-
"@onekeyfe/hd-transport-usb": "1.2.0-alpha.
|
|
29
|
-
"@onekeyfe/hd-transport-web-device": "1.2.0-alpha.
|
|
23
|
+
"@onekeyfe/hd-core": "1.2.0-alpha.57",
|
|
24
|
+
"@onekeyfe/hd-shared": "1.2.0-alpha.57",
|
|
25
|
+
"@onekeyfe/hd-transport-emulator": "1.2.0-alpha.57",
|
|
26
|
+
"@onekeyfe/hd-transport-http": "1.2.0-alpha.57",
|
|
27
|
+
"@onekeyfe/hd-transport-lowlevel": "1.2.0-alpha.57",
|
|
28
|
+
"@onekeyfe/hd-transport-usb": "1.2.0-alpha.57",
|
|
29
|
+
"@onekeyfe/hd-transport-web-device": "1.2.0-alpha.57"
|
|
30
30
|
},
|
|
31
|
-
"gitHead": "
|
|
31
|
+
"gitHead": "3279714eb381518b8dec4837d388271e74a0a5e6"
|
|
32
32
|
}
|
package/src/index.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import EventEmitter from 'events';
|
|
1
|
+
import { EventEmitter } from 'events';
|
|
2
2
|
import HardwareSdk, {
|
|
3
3
|
CORE_EVENT,
|
|
4
4
|
DEVICE,
|
|
@@ -20,22 +20,23 @@ import HardwareSdk, {
|
|
|
20
20
|
setLoggerPostMessage,
|
|
21
21
|
} from '@onekeyfe/hd-core';
|
|
22
22
|
import { ERRORS, HardwareErrorCode, createDeferred } from '@onekeyfe/hd-shared';
|
|
23
|
+
import EmulatorTransport from '@onekeyfe/hd-transport-emulator';
|
|
23
24
|
import HttpTransport from '@onekeyfe/hd-transport-http';
|
|
24
|
-
import { ElectronBleTransport, WebUsbTransport } from '@onekeyfe/hd-transport-web-device';
|
|
25
25
|
import LowlevelTransport from '@onekeyfe/hd-transport-lowlevel';
|
|
26
|
-
import
|
|
26
|
+
import { ElectronBleTransport, WebUsbTransport } from '@onekeyfe/hd-transport-web-device';
|
|
27
27
|
|
|
28
|
-
import type { Deferred } from '@onekeyfe/hd-shared';
|
|
29
28
|
import type {
|
|
30
29
|
ConnectSettings,
|
|
31
30
|
Core,
|
|
31
|
+
CoreApi,
|
|
32
32
|
CoreMessage,
|
|
33
|
+
CoreMethodExtension,
|
|
33
34
|
LowLevelCoreApi,
|
|
34
35
|
UiResponseEvent,
|
|
35
36
|
} from '@onekeyfe/hd-core';
|
|
37
|
+
import type { Deferred } from '@onekeyfe/hd-shared';
|
|
36
38
|
import type { LowlevelTransportSharedPlugin } from '@onekeyfe/hd-transport';
|
|
37
39
|
|
|
38
|
-
const eventEmitter = new EventEmitter();
|
|
39
40
|
const Log = getLogger(LoggerNames.HdCommonConnectSdk);
|
|
40
41
|
|
|
41
42
|
const getTransport = async (env: ConnectSettings['env']) => {
|
|
@@ -45,8 +46,7 @@ const getTransport = async (env: ConnectSettings['env']) => {
|
|
|
45
46
|
if (env === 'webusb' || env === 'desktop-webusb') return WebUsbTransport;
|
|
46
47
|
if (env === 'lowlevel') return LowlevelTransport;
|
|
47
48
|
if (env === 'node-usb') {
|
|
48
|
-
//
|
|
49
|
-
// that cannot be resolved by browser/React Native bundlers
|
|
49
|
+
// Keep the native libusb binding out of browser and React Native bundles.
|
|
50
50
|
const { default: NodeUsbTransport } = await import('@onekeyfe/hd-transport-usb');
|
|
51
51
|
return NodeUsbTransport;
|
|
52
52
|
}
|
|
@@ -54,166 +54,218 @@ const getTransport = async (env: ConnectSettings['env']) => {
|
|
|
54
54
|
return HttpTransport;
|
|
55
55
|
};
|
|
56
56
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
let _messageID = 0;
|
|
61
|
-
export const messagePromises: { [key: number]: Deferred<any> } = {};
|
|
62
|
-
|
|
63
|
-
const dispose = async () => {
|
|
64
|
-
const core = _core;
|
|
65
|
-
_core = undefined;
|
|
66
|
-
eventEmitter.removeAllListeners();
|
|
67
|
-
Object.keys(messagePromises).forEach(key => {
|
|
68
|
-
delete messagePromises[Number(key)];
|
|
69
|
-
});
|
|
70
|
-
_settings = parseConnectSettings();
|
|
71
|
-
await core?.dispose?.();
|
|
57
|
+
export type HardwareCommonConnectSdkExtension<TExtensionApi extends object> = {
|
|
58
|
+
methodExtensions: readonly CoreMethodExtension[];
|
|
59
|
+
createApi: (call: CoreApi['call']) => TExtensionApi;
|
|
72
60
|
};
|
|
73
61
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
}
|
|
78
|
-
const { type, payload } = response;
|
|
79
|
-
_core.handleMessage({ event: UI_EVENT, type, payload } as CoreMessage);
|
|
62
|
+
export type HardwareCommonConnectSdkOptions<TExtensionApi extends object> = {
|
|
63
|
+
extension?: HardwareCommonConnectSdkExtension<TExtensionApi>;
|
|
64
|
+
allowDestructiveOperations?: boolean;
|
|
80
65
|
};
|
|
81
66
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
67
|
+
type SdkInstance<TExtensionApi extends object> = {
|
|
68
|
+
sdk: CoreApi & TExtensionApi;
|
|
69
|
+
messagePromises: { [key: number]: Deferred<any> };
|
|
85
70
|
};
|
|
86
71
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
72
|
+
const createSdkInstance = <TExtensionApi extends object>(
|
|
73
|
+
options: HardwareCommonConnectSdkOptions<TExtensionApi> = {}
|
|
74
|
+
): SdkInstance<TExtensionApi> => {
|
|
75
|
+
const eventEmitter = new EventEmitter();
|
|
76
|
+
let core: Core | undefined;
|
|
77
|
+
let settings = parseConnectSettings();
|
|
78
|
+
let messageID = 0;
|
|
79
|
+
const instanceMessagePromises: { [key: number]: Deferred<any> } = {};
|
|
92
80
|
|
|
93
|
-
const
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
case DEVICE_EVENT:
|
|
108
|
-
if (
|
|
109
|
-
(
|
|
110
|
-
[
|
|
111
|
-
DEVICE.CONNECT,
|
|
112
|
-
DEVICE.DISCONNECT,
|
|
113
|
-
DEVICE.FEATURES,
|
|
114
|
-
DEVICE.STATE,
|
|
115
|
-
DEVICE.SUPPORT_FEATURES,
|
|
116
|
-
] as string[]
|
|
117
|
-
).includes(message.type)
|
|
118
|
-
) {
|
|
119
|
-
eventEmitter.emit(message.type, message.payload);
|
|
120
|
-
}
|
|
121
|
-
break;
|
|
122
|
-
case IFRAME.CALLBACK: {
|
|
123
|
-
const { callbackId, data, error } = message.payload;
|
|
124
|
-
executeCallback(callbackId, data, error);
|
|
125
|
-
break;
|
|
81
|
+
const dispose = async () => {
|
|
82
|
+
const currentCore = core;
|
|
83
|
+
core = undefined;
|
|
84
|
+
eventEmitter.removeAllListeners();
|
|
85
|
+
Object.keys(instanceMessagePromises).forEach(key => {
|
|
86
|
+
delete instanceMessagePromises[Number(key)];
|
|
87
|
+
});
|
|
88
|
+
settings = parseConnectSettings();
|
|
89
|
+
await currentCore?.dispose?.();
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
const uiResponse = (response: UiResponseEvent) => {
|
|
93
|
+
if (!core) {
|
|
94
|
+
throw ERRORS.TypedError(HardwareErrorCode.NotInitialized);
|
|
126
95
|
}
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
96
|
+
const { type, payload } = response;
|
|
97
|
+
core
|
|
98
|
+
.handleMessage({ event: UI_EVENT, type, payload } as CoreMessage)
|
|
99
|
+
.catch(error => Log.error(createErrorMessage(error)));
|
|
100
|
+
};
|
|
131
101
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
102
|
+
const cancel = (connectId?: string) => {
|
|
103
|
+
if (!core) return;
|
|
104
|
+
core
|
|
105
|
+
.handleMessage({
|
|
106
|
+
event: IFRAME.CANCEL,
|
|
107
|
+
type: IFRAME.CANCEL,
|
|
108
|
+
payload: { connectId },
|
|
109
|
+
})
|
|
110
|
+
.catch(error => Log.error(createErrorMessage(error)));
|
|
111
|
+
};
|
|
136
112
|
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
113
|
+
function handleMessage(message: CoreMessage) {
|
|
114
|
+
const { event } = message;
|
|
115
|
+
if (!core) {
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
const blockLog = getLogBlockLabel(message);
|
|
120
|
+
if (event !== LOG_EVENT) {
|
|
121
|
+
Log.debug('hd-common-connect-sdk handleMessage', blockLog ?? message);
|
|
122
|
+
}
|
|
123
|
+
switch (event) {
|
|
124
|
+
case UI_EVENT:
|
|
125
|
+
eventEmitter.emit(message.event, message);
|
|
126
|
+
eventEmitter.emit(message.type, message.payload);
|
|
127
|
+
break;
|
|
128
|
+
case LOG_EVENT:
|
|
129
|
+
case FIRMWARE_EVENT:
|
|
130
|
+
eventEmitter.emit(message.event, message);
|
|
131
|
+
break;
|
|
132
|
+
case DEVICE_EVENT:
|
|
133
|
+
if (
|
|
134
|
+
(
|
|
135
|
+
[
|
|
136
|
+
DEVICE.CONNECT,
|
|
137
|
+
DEVICE.DISCONNECT,
|
|
138
|
+
DEVICE.FEATURES,
|
|
139
|
+
DEVICE.STATE,
|
|
140
|
+
DEVICE.SUPPORT_FEATURES,
|
|
141
|
+
] as string[]
|
|
142
|
+
).includes(message.type)
|
|
143
|
+
) {
|
|
144
|
+
eventEmitter.emit(message.type, message.payload);
|
|
145
|
+
}
|
|
146
|
+
break;
|
|
147
|
+
case IFRAME.CALLBACK: {
|
|
148
|
+
const { callbackId, data, error } = message.payload;
|
|
149
|
+
executeCallback(callbackId, data, error);
|
|
150
|
+
break;
|
|
151
|
+
}
|
|
152
|
+
default:
|
|
153
|
+
Log.log('No need to be captured message', message.event);
|
|
154
|
+
}
|
|
144
155
|
}
|
|
145
156
|
|
|
146
|
-
|
|
147
|
-
|
|
157
|
+
async function postMessage(message: CoreMessage, usePromise = true) {
|
|
158
|
+
if (!core) {
|
|
159
|
+
throw ERRORS.TypedError('postMessage: _core not found');
|
|
160
|
+
}
|
|
148
161
|
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
_settings = { ..._settings, ...settings, env: settings.env ?? 'node' };
|
|
162
|
+
if (usePromise) {
|
|
163
|
+
messageID += 1;
|
|
164
|
+
instanceMessagePromises[messageID] = createDeferred();
|
|
165
|
+
return core.handleMessage({ ...message, id: `${messageID}` });
|
|
166
|
+
}
|
|
155
167
|
|
|
156
|
-
|
|
168
|
+
await core.handleMessage(message);
|
|
169
|
+
}
|
|
157
170
|
|
|
158
|
-
|
|
171
|
+
const init = async (
|
|
172
|
+
partialSettings: Partial<ConnectSettings>,
|
|
173
|
+
_?: LowLevelCoreApi,
|
|
174
|
+
plugin?: LowlevelTransportSharedPlugin
|
|
175
|
+
) => {
|
|
176
|
+
settings = { ...settings, ...partialSettings, env: partialSettings.env ?? 'node' };
|
|
159
177
|
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
_core = await initCore(_settings, Transport, plugin);
|
|
163
|
-
_core?.on(CORE_EVENT, handleMessage);
|
|
164
|
-
setLoggerPostMessage(handleMessage);
|
|
178
|
+
enableLog(!!partialSettings.debug);
|
|
179
|
+
Log.debug('init');
|
|
165
180
|
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
181
|
+
try {
|
|
182
|
+
const Transport = await getTransport(settings.env);
|
|
183
|
+
if (options.extension) {
|
|
184
|
+
core = await initCore(settings, Transport, plugin, {
|
|
185
|
+
methodExtensions: options.extension.methodExtensions,
|
|
186
|
+
allowDestructiveOperations: options.allowDestructiveOperations === true,
|
|
187
|
+
});
|
|
188
|
+
} else {
|
|
189
|
+
core = await initCore(settings, Transport, plugin);
|
|
190
|
+
}
|
|
191
|
+
core?.on(CORE_EVENT, handleMessage);
|
|
192
|
+
setLoggerPostMessage(handleMessage);
|
|
169
193
|
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
194
|
+
return true;
|
|
195
|
+
} catch (error) {
|
|
196
|
+
Log.error(createErrorMessage(error));
|
|
197
|
+
return false;
|
|
198
|
+
}
|
|
199
|
+
};
|
|
173
200
|
|
|
174
|
-
const call = async
|
|
175
|
-
|
|
176
|
-
|
|
201
|
+
const call: CoreApi['call'] = async params => {
|
|
202
|
+
const blockLog = getLogBlockLabel(params);
|
|
203
|
+
Log.debug('call: ', blockLog ?? params);
|
|
177
204
|
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
205
|
+
try {
|
|
206
|
+
const response = await postMessage({
|
|
207
|
+
event: IFRAME.CALL,
|
|
208
|
+
type: IFRAME.CALL,
|
|
209
|
+
payload: params,
|
|
210
|
+
});
|
|
211
|
+
if (response) {
|
|
212
|
+
Log.debug('response: ', blockLog ? '[REDACTED]' : response);
|
|
182
213
|
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
214
|
+
if (!response.success) {
|
|
215
|
+
if (response.payload?.code === HardwareErrorCode.BleUnsupported) {
|
|
216
|
+
postMessage(createUiMessage(UI_REQUEST.BLUETOOTH_UNSUPPORTED), false).catch(error =>
|
|
217
|
+
Log.error(createErrorMessage(error))
|
|
218
|
+
);
|
|
219
|
+
}
|
|
220
|
+
if (response.payload?.code === HardwareErrorCode.BlePoweredOff) {
|
|
221
|
+
postMessage(createUiMessage(UI_REQUEST.BLUETOOTH_POWERED_OFF), false).catch(error =>
|
|
222
|
+
Log.error(createErrorMessage(error))
|
|
223
|
+
);
|
|
224
|
+
}
|
|
225
|
+
if (response.payload?.code === HardwareErrorCode.BlePermissionError) {
|
|
226
|
+
postMessage(createUiMessage(UI_REQUEST.BLUETOOTH_PERMISSION), false).catch(error =>
|
|
227
|
+
Log.error(createErrorMessage(error))
|
|
228
|
+
);
|
|
229
|
+
}
|
|
192
230
|
}
|
|
231
|
+
|
|
232
|
+
return response;
|
|
193
233
|
}
|
|
194
234
|
|
|
195
|
-
return
|
|
235
|
+
return createErrorMessage(ERRORS.TypedError(HardwareErrorCode.CallMethodNotResponse));
|
|
236
|
+
} catch (error) {
|
|
237
|
+
Log.error('__call error: ', error);
|
|
238
|
+
return createErrorMessage(error);
|
|
196
239
|
}
|
|
240
|
+
};
|
|
197
241
|
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
242
|
+
const updateSettings = () => Promise.resolve(true);
|
|
243
|
+
const switchTransport = () => Promise.resolve({ success: true });
|
|
244
|
+
|
|
245
|
+
const sdk = HardwareSdk({
|
|
246
|
+
eventEmitter,
|
|
247
|
+
init,
|
|
248
|
+
call,
|
|
249
|
+
cancel,
|
|
250
|
+
dispose,
|
|
251
|
+
uiResponse,
|
|
252
|
+
updateSettings,
|
|
253
|
+
switchTransport,
|
|
254
|
+
});
|
|
255
|
+
const extensionApi = options.extension?.createApi(sdk.call) ?? ({} as TExtensionApi);
|
|
256
|
+
|
|
257
|
+
return {
|
|
258
|
+
sdk: Object.assign(sdk, extensionApi),
|
|
259
|
+
messagePromises: instanceMessagePromises,
|
|
260
|
+
};
|
|
203
261
|
};
|
|
204
262
|
|
|
205
|
-
const
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
cancel,
|
|
213
|
-
dispose,
|
|
214
|
-
uiResponse,
|
|
215
|
-
updateSettings,
|
|
216
|
-
switchTransport,
|
|
217
|
-
});
|
|
263
|
+
export const createHardwareCommonConnectSdk = <TExtensionApi extends object = Record<never, never>>(
|
|
264
|
+
options: HardwareCommonConnectSdkOptions<TExtensionApi> = {}
|
|
265
|
+
): CoreApi & TExtensionApi => createSdkInstance(options).sdk;
|
|
266
|
+
|
|
267
|
+
const { sdk: HardwareCommonConnectSdk, messagePromises } = createSdkInstance();
|
|
268
|
+
|
|
269
|
+
export { messagePromises };
|
|
218
270
|
|
|
219
271
|
export default HardwareCommonConnectSdk;
|