@onekeyfe/hd-common-connect-sdk 1.2.0-alpha.57 → 1.2.0-alpha.59

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 CHANGED
@@ -1,7 +1,6 @@
1
1
  # `@onekeyfe/hd-common-connect-sdk`
2
2
 
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.
3
+ `@onekeyfe/hd-common-connect-sdk` is a libarary that runs in the node enviroment. And communicates with transport in the normal way.
5
4
 
6
5
  ## Installation
7
6
 
@@ -25,18 +24,13 @@ import HardwareSDK from '@onekeyfe/hd-common-connect-sdk';
25
24
  function init() {
26
25
  HardwareSDK.init({
27
26
  debug: false,
28
- env: 'webusb',
29
27
  });
30
28
  }
31
29
  ```
32
30
 
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
-
36
31
  ## Docs
37
32
 
38
33
  Documentation is available [hardware-js-sdk](https://developer.onekey.so/connect-to-hardware/hardware-sdk/start)
39
34
 
40
35
  ## Examples
41
-
42
36
  // TODO: add example url
@@ -1,17 +1,15 @@
1
1
  import { CORE_EVENT, DEVICE, DEVICE_EVENT, initCore } from '@onekeyfe/hd-core';
2
- import { WebUsbTransport } from '@onekeyfe/hd-transport-web-device';
3
2
 
4
- import HardwareCommonConnectSdk, { createHardwareCommonConnectSdk } from '../src';
3
+ import HardwareCommonConnectSdk from '../src';
5
4
 
6
5
  jest.mock('@onekeyfe/hd-core', () => {
7
6
  const actual = jest.requireActual('@onekeyfe/hd-core');
8
7
  return {
9
8
  __esModule: true,
10
9
  ...actual,
11
- default: ({ eventEmitter, init, dispose, call }) => ({
10
+ default: ({ eventEmitter, init, dispose }) => ({
12
11
  init,
13
12
  dispose,
14
- call,
15
13
  on: (type, listener) => eventEmitter.on(type, listener),
16
14
  off: (type, listener) => eventEmitter.off(type, listener),
17
15
  removeAllListeners: type => eventEmitter.removeAllListeners(type),
@@ -79,11 +77,6 @@ describe('hd-common-connect-sdk device state events', () => {
79
77
  HardwareCommonConnectSdk.on(DEVICE.STATE, listener);
80
78
 
81
79
  await HardwareCommonConnectSdk.init({ env: 'webusb' });
82
- expect(initCore).toHaveBeenLastCalledWith(
83
- expect.objectContaining({ env: 'webusb' }),
84
- WebUsbTransport,
85
- undefined
86
- );
87
80
  const payload = {
88
81
  connectId: 'connect-id',
89
82
  revision: 1,
@@ -101,33 +94,4 @@ describe('hd-common-connect-sdk device state events', () => {
101
94
  HardwareCommonConnectSdk.removeAllListeners(DEVICE.STATE);
102
95
  await HardwareCommonConnectSdk.dispose();
103
96
  });
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
- });
133
97
  });
package/dist/index.d.ts CHANGED
@@ -1,18 +1,9 @@
1
- import { CoreMethodExtension, CoreApi } from '@onekeyfe/hd-core';
1
+ import * as _onekeyfe_hd_core 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;
14
4
  declare const messagePromises: {
15
5
  [key: number]: Deferred<any>;
16
6
  };
7
+ declare const HardwareCommonConnectSdk: _onekeyfe_hd_core.CoreApi;
17
8
 
18
- export { HardwareCommonConnectSdkExtension, HardwareCommonConnectSdkOptions, createHardwareCommonConnectSdk, HardwareCommonConnectSdk as default, messagePromises };
9
+ export { 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');
8
7
  var HttpTransport = require('@onekeyfe/hd-transport-http');
9
- var LowlevelTransport = require('@onekeyfe/hd-transport-lowlevel');
10
8
  var hdTransportWebDevice = require('@onekeyfe/hd-transport-web-device');
9
+ var LowlevelTransport = require('@onekeyfe/hd-transport-lowlevel');
10
+ var EmulatorTransport = require('@onekeyfe/hd-transport-emulator');
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);
34
33
  var HttpTransport__default = /*#__PURE__*/_interopDefaultLegacy(HttpTransport);
35
34
  var LowlevelTransport__default = /*#__PURE__*/_interopDefaultLegacy(LowlevelTransport);
35
+ var EmulatorTransport__default = /*#__PURE__*/_interopDefaultLegacy(EmulatorTransport);
36
36
 
37
37
  /******************************************************************************
38
38
  Copyright (c) Microsoft Corporation.
@@ -579,6 +579,7 @@ function eventTargetAgnosticAddListener(emitter, name, listener, flags) {
579
579
  }
580
580
  }
581
581
 
582
+ var eventEmitter = new events.exports();
582
583
  var Log = HardwareSdk.getLogger(HardwareSdk.LoggerNames.HdCommonConnectSdk);
583
584
  var getTransport = function (env) { return __awaiter(void 0, void 0, void 0, function () {
584
585
  var NodeUsbTransport;
@@ -604,225 +605,185 @@ var getTransport = function (env) { return __awaiter(void 0, void 0, void 0, fun
604
605
  }
605
606
  });
606
607
  }); };
607
- var createSdkInstance = function (options) {
608
- var _a, _b;
609
- if (options === void 0) { options = {}; }
610
- var eventEmitter = new events.exports.EventEmitter();
608
+ var _core;
609
+ var _settings = HardwareSdk.parseConnectSettings();
610
+ var _messageID = 0;
611
+ var messagePromises = {};
612
+ var dispose = function () { return __awaiter(void 0, void 0, void 0, function () {
611
613
  var core;
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);
638
- }
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);
614
+ var _a;
615
+ return __generator(this, function (_b) {
616
+ switch (_b.label) {
617
+ case 0:
618
+ core = _core;
619
+ _core = undefined;
620
+ eventEmitter.removeAllListeners();
621
+ Object.keys(messagePromises).forEach(function (key) {
622
+ delete messagePromises[Number(key)];
623
+ });
624
+ _settings = HardwareSdk.parseConnectSettings();
625
+ return [4 /*yield*/, ((_a = core === null || core === void 0 ? void 0 : core.dispose) === null || _a === void 0 ? void 0 : _a.call(core))];
626
+ case 1:
627
+ _b.sent();
628
+ return [2 /*return*/];
663
629
  }
664
- switch (event) {
665
- case HardwareSdk.UI_EVENT:
666
- eventEmitter.emit(message.event, message);
630
+ });
631
+ }); };
632
+ var uiResponse = function (response) {
633
+ if (!_core) {
634
+ throw hdShared.ERRORS.TypedError(hdShared.HardwareErrorCode.NotInitialized);
635
+ }
636
+ var type = response.type, payload = response.payload;
637
+ _core.handleMessage({ event: HardwareSdk.UI_EVENT, type: type, payload: payload });
638
+ };
639
+ var cancel = function (connectId) {
640
+ if (_core === undefined)
641
+ return;
642
+ _core.handleMessage({ event: HardwareSdk.IFRAME.CANCEL, type: HardwareSdk.IFRAME.CANCEL, payload: { connectId: connectId } });
643
+ };
644
+ function handleMessage(message) {
645
+ var event = message.event;
646
+ if (!_core) {
647
+ return;
648
+ }
649
+ var blockLog = HardwareSdk.getLogBlockLabel(message);
650
+ if (event !== HardwareSdk.LOG_EVENT) {
651
+ Log.debug('hd-common-connect-sdk handleMessage', blockLog !== null && blockLog !== void 0 ? blockLog : message);
652
+ }
653
+ switch (event) {
654
+ case HardwareSdk.UI_EVENT:
655
+ // pass UI event up
656
+ eventEmitter.emit(message.event, message);
657
+ eventEmitter.emit(message.type, message.payload);
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)) {
667
671
  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;
688
672
  }
689
- default:
690
- Log.log('No need to be captured message', message.event);
673
+ break;
674
+ case HardwareSdk.IFRAME.CALLBACK: {
675
+ var _a = message.payload, callbackId = _a.callbackId, data = _a.data, error = _a.error;
676
+ HardwareSdk.executeCallback(callbackId, data, error);
677
+ break;
691
678
  }
679
+ default:
680
+ Log.log('No need to be captured message', message.event);
692
681
  }
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) {
682
+ }
683
+ function postMessage(message, usePromise) {
684
+ if (usePromise === void 0) { usePromise = true; }
685
+ return __awaiter(this, void 0, void 0, function () {
686
+ var response;
687
+ return __generator(this, function (_a) {
688
+ switch (_a.label) {
720
689
  case 0:
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;
690
+ if (!_core) {
691
+ throw hdShared.ERRORS.TypedError('postMessage: _core not found');
692
+ }
693
+ if (!usePromise) return [3 /*break*/, 2];
694
+ _messageID++;
695
+ messagePromises[_messageID] = hdShared.createDeferred();
696
+ return [4 /*yield*/, _core.handleMessage(__assign(__assign({}, message), { id: "".concat(_messageID) }))];
725
697
  case 1:
726
- _b.trys.push([1, 7, , 8]);
727
- return [4 /*yield*/, getTransport(settings.env)];
698
+ response = _a.sent();
699
+ // return promise;
700
+ return [2 /*return*/, response];
728
701
  case 2:
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*/];
702
+ _core.handleMessage(message);
703
+ return [2 /*return*/];
751
704
  }
752
705
  });
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
- }
706
+ });
707
+ }
708
+ var init = function (settings, _, plugin) { return __awaiter(void 0, void 0, void 0, function () {
709
+ var Transport, error_1;
710
+ var _a;
711
+ return __generator(this, function (_b) {
712
+ switch (_b.label) {
713
+ case 0:
714
+ _settings = __assign(__assign(__assign({}, _settings), settings), { env: (_a = settings.env) !== null && _a !== void 0 ? _a : 'node' });
715
+ HardwareSdk.enableLog(!!settings.debug);
716
+ Log.debug('init');
717
+ _b.label = 1;
718
+ case 1:
719
+ _b.trys.push([1, 4, , 5]);
720
+ return [4 /*yield*/, getTransport(_settings.env)];
721
+ case 2:
722
+ Transport = _b.sent();
723
+ return [4 /*yield*/, HardwareSdk.initCore(_settings, Transport, plugin)];
724
+ case 3:
725
+ _core = _b.sent();
726
+ _core === null || _core === void 0 ? void 0 : _core.on(HardwareSdk.CORE_EVENT, handleMessage);
727
+ HardwareSdk.setLoggerPostMessage(handleMessage);
728
+ return [2 /*return*/, true];
729
+ case 4:
730
+ error_1 = _b.sent();
731
+ Log.error(HardwareSdk.createErrorMessage(error_1));
732
+ return [2 /*return*/, false];
733
+ case 5: return [2 /*return*/];
734
+ }
735
+ });
736
+ }); };
737
+ var call = function (params) { return __awaiter(void 0, void 0, void 0, function () {
738
+ var blockLog, response, error_2;
739
+ var _a, _b, _c;
740
+ return __generator(this, function (_d) {
741
+ switch (_d.label) {
742
+ case 0:
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);
790
762
  }
791
- return [2 /*return*/, response];
792
763
  }
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,
764
+ return [2 /*return*/, response];
765
+ }
766
+ return [2 /*return*/, HardwareSdk.createErrorMessage(hdShared.ERRORS.TypedError(hdShared.HardwareErrorCode.CallMethodNotResponse))];
767
+ case 3:
768
+ error_2 = _d.sent();
769
+ Log.error('__call error: ', error_2);
770
+ return [2 /*return*/, HardwareSdk.createErrorMessage(error_2)];
771
+ case 4: return [2 /*return*/];
772
+ }
813
773
  });
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;
774
+ }); };
775
+ var updateSettings = function () { return Promise.resolve(true); };
776
+ var switchTransport = function () { return Promise.resolve({ success: true }); };
777
+ var HardwareCommonConnectSdk = HardwareSdk__default["default"]({
778
+ eventEmitter: eventEmitter,
779
+ init: init,
780
+ call: call,
781
+ cancel: cancel,
782
+ dispose: dispose,
783
+ uiResponse: uiResponse,
784
+ updateSettings: updateSettings,
785
+ switchTransport: switchTransport,
786
+ });
825
787
 
826
- exports.createHardwareCommonConnectSdk = createHardwareCommonConnectSdk;
827
788
  exports["default"] = HardwareCommonConnectSdk;
828
789
  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.57",
3
+ "version": "1.2.0-alpha.59",
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.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"
23
+ "@onekeyfe/hd-core": "1.2.0-alpha.59",
24
+ "@onekeyfe/hd-shared": "1.2.0-alpha.59",
25
+ "@onekeyfe/hd-transport-emulator": "1.2.0-alpha.59",
26
+ "@onekeyfe/hd-transport-http": "1.2.0-alpha.59",
27
+ "@onekeyfe/hd-transport-lowlevel": "1.2.0-alpha.59",
28
+ "@onekeyfe/hd-transport-usb": "1.2.0-alpha.59",
29
+ "@onekeyfe/hd-transport-web-device": "1.2.0-alpha.59"
30
30
  },
31
- "gitHead": "3279714eb381518b8dec4837d388271e74a0a5e6"
31
+ "gitHead": "98794c3032aab55e13fb2afedc645d8281141d5f"
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,23 +20,22 @@ 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';
24
23
  import HttpTransport from '@onekeyfe/hd-transport-http';
25
- import LowlevelTransport from '@onekeyfe/hd-transport-lowlevel';
26
24
  import { ElectronBleTransport, WebUsbTransport } from '@onekeyfe/hd-transport-web-device';
25
+ import LowlevelTransport from '@onekeyfe/hd-transport-lowlevel';
26
+ import EmulatorTransport from '@onekeyfe/hd-transport-emulator';
27
27
 
28
+ import type { Deferred } from '@onekeyfe/hd-shared';
28
29
  import type {
29
30
  ConnectSettings,
30
31
  Core,
31
- CoreApi,
32
32
  CoreMessage,
33
- CoreMethodExtension,
34
33
  LowLevelCoreApi,
35
34
  UiResponseEvent,
36
35
  } from '@onekeyfe/hd-core';
37
- import type { Deferred } from '@onekeyfe/hd-shared';
38
36
  import type { LowlevelTransportSharedPlugin } from '@onekeyfe/hd-transport';
39
37
 
38
+ const eventEmitter = new EventEmitter();
40
39
  const Log = getLogger(LoggerNames.HdCommonConnectSdk);
41
40
 
42
41
  const getTransport = async (env: ConnectSettings['env']) => {
@@ -46,7 +45,8 @@ const getTransport = async (env: ConnectSettings['env']) => {
46
45
  if (env === 'webusb' || env === 'desktop-webusb') return WebUsbTransport;
47
46
  if (env === 'lowlevel') return LowlevelTransport;
48
47
  if (env === 'node-usb') {
49
- // Keep the native libusb binding out of browser and React Native bundles.
48
+ // Dynamic import usb is a native Node.js module (libusb C++ bindings)
49
+ // that cannot be resolved by browser/React Native bundlers
50
50
  const { default: NodeUsbTransport } = await import('@onekeyfe/hd-transport-usb');
51
51
  return NodeUsbTransport;
52
52
  }
@@ -54,218 +54,166 @@ const getTransport = async (env: ConnectSettings['env']) => {
54
54
  return HttpTransport;
55
55
  };
56
56
 
57
- export type HardwareCommonConnectSdkExtension<TExtensionApi extends object> = {
58
- methodExtensions: readonly CoreMethodExtension[];
59
- createApi: (call: CoreApi['call']) => TExtensionApi;
60
- };
57
+ let _core: Core | undefined;
58
+ let _settings = parseConnectSettings();
61
59
 
62
- export type HardwareCommonConnectSdkOptions<TExtensionApi extends object> = {
63
- extension?: HardwareCommonConnectSdkExtension<TExtensionApi>;
64
- allowDestructiveOperations?: boolean;
65
- };
60
+ let _messageID = 0;
61
+ export const messagePromises: { [key: number]: Deferred<any> } = {};
66
62
 
67
- type SdkInstance<TExtensionApi extends object> = {
68
- sdk: CoreApi & TExtensionApi;
69
- messagePromises: { [key: number]: Deferred<any> };
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?.();
70
72
  };
71
73
 
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> } = {};
80
-
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);
95
- }
96
- const { type, payload } = response;
97
- core
98
- .handleMessage({ event: UI_EVENT, type, payload } as CoreMessage)
99
- .catch(error => Log.error(createErrorMessage(error)));
100
- };
74
+ const uiResponse = (response: UiResponseEvent) => {
75
+ if (!_core) {
76
+ throw ERRORS.TypedError(HardwareErrorCode.NotInitialized);
77
+ }
78
+ const { type, payload } = response;
79
+ _core.handleMessage({ event: UI_EVENT, type, payload } as CoreMessage);
80
+ };
101
81
 
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
- };
82
+ const cancel = (connectId?: string) => {
83
+ if (_core === undefined) return;
84
+ _core.handleMessage({ event: IFRAME.CANCEL, type: IFRAME.CANCEL, payload: { connectId } });
85
+ };
112
86
 
113
- function handleMessage(message: CoreMessage) {
114
- const { event } = message;
115
- if (!core) {
116
- return;
117
- }
87
+ function handleMessage(message: CoreMessage) {
88
+ const { event } = message;
89
+ if (!_core) {
90
+ return;
91
+ }
118
92
 
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);
93
+ const blockLog = getLogBlockLabel(message);
94
+ if (event !== LOG_EVENT) {
95
+ Log.debug('hd-common-connect-sdk handleMessage', blockLog ?? message);
96
+ }
97
+ switch (event) {
98
+ case UI_EVENT:
99
+ // pass UI event up
100
+ eventEmitter.emit(message.event, message);
101
+ eventEmitter.emit(message.type, message.payload);
102
+ break;
103
+ case LOG_EVENT:
104
+ case FIRMWARE_EVENT:
105
+ eventEmitter.emit(message.event, message);
106
+ break;
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
+ ) {
126
119
  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
120
  }
152
- default:
153
- Log.log('No need to be captured message', message.event);
121
+ break;
122
+ case IFRAME.CALLBACK: {
123
+ const { callbackId, data, error } = message.payload;
124
+ executeCallback(callbackId, data, error);
125
+ break;
154
126
  }
127
+ default:
128
+ Log.log('No need to be captured message', message.event);
155
129
  }
130
+ }
156
131
 
157
- async function postMessage(message: CoreMessage, usePromise = true) {
158
- if (!core) {
159
- throw ERRORS.TypedError('postMessage: _core not found');
160
- }
161
-
162
- if (usePromise) {
163
- messageID += 1;
164
- instanceMessagePromises[messageID] = createDeferred();
165
- return core.handleMessage({ ...message, id: `${messageID}` });
166
- }
132
+ async function postMessage(message: CoreMessage, usePromise = true) {
133
+ if (!_core) {
134
+ throw ERRORS.TypedError('postMessage: _core not found');
135
+ }
167
136
 
168
- await core.handleMessage(message);
137
+ if (usePromise) {
138
+ _messageID++;
139
+ messagePromises[_messageID] = createDeferred();
140
+ // const { promise } = messagePromises[_messageID];
141
+ const response = await _core.handleMessage({ ...message, id: `${_messageID}` });
142
+ // return promise;
143
+ return response;
169
144
  }
170
145
 
171
- const init = async (
172
- partialSettings: Partial<ConnectSettings>,
173
- _?: LowLevelCoreApi,
174
- plugin?: LowlevelTransportSharedPlugin
175
- ) => {
176
- settings = { ...settings, ...partialSettings, env: partialSettings.env ?? 'node' };
146
+ _core.handleMessage(message);
147
+ }
177
148
 
178
- enableLog(!!partialSettings.debug);
179
- Log.debug('init');
149
+ const init = async (
150
+ settings: Partial<ConnectSettings>,
151
+ _?: LowLevelCoreApi,
152
+ plugin?: LowlevelTransportSharedPlugin
153
+ ) => {
154
+ _settings = { ..._settings, ...settings, env: settings.env ?? 'node' };
180
155
 
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);
156
+ enableLog(!!settings.debug);
193
157
 
194
- return true;
195
- } catch (error) {
196
- Log.error(createErrorMessage(error));
197
- return false;
198
- }
199
- };
158
+ Log.debug('init');
200
159
 
201
- const call: CoreApi['call'] = async params => {
202
- const blockLog = getLogBlockLabel(params);
203
- Log.debug('call: ', blockLog ?? params);
160
+ try {
161
+ const Transport = await getTransport(_settings.env);
162
+ _core = await initCore(_settings, Transport, plugin);
163
+ _core?.on(CORE_EVENT, handleMessage);
164
+ setLoggerPostMessage(handleMessage);
204
165
 
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);
166
+ return true;
167
+ } catch (error) {
168
+ Log.error(createErrorMessage(error));
213
169
 
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
- }
230
- }
170
+ return false;
171
+ }
172
+ };
231
173
 
232
- return response;
233
- }
174
+ const call = async (params: any) => {
175
+ const blockLog = getLogBlockLabel(params);
176
+ Log.debug('call: ', blockLog ?? params);
234
177
 
235
- return createErrorMessage(ERRORS.TypedError(HardwareErrorCode.CallMethodNotResponse));
236
- } catch (error) {
237
- Log.error('__call error: ', error);
238
- return createErrorMessage(error);
239
- }
240
- };
178
+ try {
179
+ const response = await postMessage({ event: IFRAME.CALL, type: IFRAME.CALL, payload: params });
180
+ if (response) {
181
+ Log.debug('response: ', blockLog ? '[REDACTED]' : response);
241
182
 
242
- const updateSettings = () => Promise.resolve(true);
243
- const switchTransport = () => Promise.resolve({ success: true });
183
+ if (!response.success) {
184
+ if (response.payload?.code === HardwareErrorCode.BleUnsupported) {
185
+ postMessage(createUiMessage(UI_REQUEST.BLUETOOTH_UNSUPPORTED), false);
186
+ }
187
+ if (response.payload?.code === HardwareErrorCode.BlePoweredOff) {
188
+ postMessage(createUiMessage(UI_REQUEST.BLUETOOTH_POWERED_OFF), false);
189
+ }
190
+ if (response.payload?.code === HardwareErrorCode.BlePermissionError) {
191
+ postMessage(createUiMessage(UI_REQUEST.BLUETOOTH_PERMISSION), false);
192
+ }
193
+ }
244
194
 
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);
195
+ return response;
196
+ }
256
197
 
257
- return {
258
- sdk: Object.assign(sdk, extensionApi),
259
- messagePromises: instanceMessagePromises,
260
- };
198
+ return createErrorMessage(ERRORS.TypedError(HardwareErrorCode.CallMethodNotResponse));
199
+ } catch (error) {
200
+ Log.error('__call error: ', error);
201
+ return createErrorMessage(error);
202
+ }
261
203
  };
262
204
 
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 };
205
+ const updateSettings = () => Promise.resolve(true);
206
+ const switchTransport = () => Promise.resolve({ success: true });
207
+
208
+ const HardwareCommonConnectSdk = HardwareSdk({
209
+ eventEmitter,
210
+ init,
211
+ call,
212
+ cancel,
213
+ dispose,
214
+ uiResponse,
215
+ updateSettings,
216
+ switchTransport,
217
+ });
270
218
 
271
219
  export default HardwareCommonConnectSdk;