@shadow-corp/nearconnect 1.0.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/README.md +546 -0
- package/build/InjectedWallet.d.ts +22 -0
- package/build/InjectedWallet.js +58 -0
- package/build/InjectedWallet.js.map +1 -0
- package/build/NearConnector.d.ts +151 -0
- package/build/NearConnector.js +536 -0
- package/build/NearConnector.js.map +1 -0
- package/build/ParentFrameWallet.d.ts +22 -0
- package/build/ParentFrameWallet.js +66 -0
- package/build/ParentFrameWallet.js.map +1 -0
- package/build/SandboxedWallet/code.d.ts +7 -0
- package/build/SandboxedWallet/code.js +324 -0
- package/build/SandboxedWallet/code.js.map +1 -0
- package/build/SandboxedWallet/executor.d.ts +23 -0
- package/build/SandboxedWallet/executor.js +338 -0
- package/build/SandboxedWallet/executor.js.map +1 -0
- package/build/SandboxedWallet/iframe.d.ts +18 -0
- package/build/SandboxedWallet/iframe.js +78 -0
- package/build/SandboxedWallet/iframe.js.map +1 -0
- package/build/SandboxedWallet/index.d.ts +24 -0
- package/build/SandboxedWallet/index.js +54 -0
- package/build/SandboxedWallet/index.js.map +1 -0
- package/build/actions/index.d.ts +3 -0
- package/build/actions/index.js +105 -0
- package/build/actions/index.js.map +1 -0
- package/build/actions/types.d.ts +76 -0
- package/build/actions/types.js +3 -0
- package/build/actions/types.js.map +1 -0
- package/build/connection/health.d.ts +213 -0
- package/build/connection/health.js +391 -0
- package/build/connection/health.js.map +1 -0
- package/build/connection/index.d.ts +4 -0
- package/build/connection/index.js +48 -0
- package/build/connection/index.js.map +1 -0
- package/build/connection/reconnect.d.ts +261 -0
- package/build/connection/reconnect.js +454 -0
- package/build/connection/reconnect.js.map +1 -0
- package/build/connection/retry.d.ts +187 -0
- package/build/connection/retry.js +427 -0
- package/build/connection/retry.js.map +1 -0
- package/build/connection/state.d.ts +222 -0
- package/build/connection/state.js +431 -0
- package/build/connection/state.js.map +1 -0
- package/build/errors.d.ts +177 -0
- package/build/errors.js +546 -0
- package/build/errors.js.map +1 -0
- package/build/hardware/errors.d.ts +36 -0
- package/build/hardware/errors.js +127 -0
- package/build/hardware/errors.js.map +1 -0
- package/build/hardware/index.d.ts +7 -0
- package/build/hardware/index.js +39 -0
- package/build/hardware/index.js.map +1 -0
- package/build/hardware/near-app.d.ts +95 -0
- package/build/hardware/near-app.js +291 -0
- package/build/hardware/near-app.js.map +1 -0
- package/build/hardware/transport.d.ts +94 -0
- package/build/hardware/transport.js +267 -0
- package/build/hardware/transport.js.map +1 -0
- package/build/hardware/types.d.ts +98 -0
- package/build/hardware/types.js +72 -0
- package/build/hardware/types.js.map +1 -0
- package/build/helpers/analytics.d.ts +191 -0
- package/build/helpers/analytics.js +304 -0
- package/build/helpers/analytics.js.map +1 -0
- package/build/helpers/base58.d.ts +6 -0
- package/build/helpers/base58.js +47 -0
- package/build/helpers/base58.js.map +1 -0
- package/build/helpers/events.d.ts +42 -0
- package/build/helpers/events.js +68 -0
- package/build/helpers/events.js.map +1 -0
- package/build/helpers/html.d.ts +8 -0
- package/build/helpers/html.js +30 -0
- package/build/helpers/html.js.map +1 -0
- package/build/helpers/indexdb.d.ts +14 -0
- package/build/helpers/indexdb.js +166 -0
- package/build/helpers/indexdb.js.map +1 -0
- package/build/helpers/manifest.d.ts +147 -0
- package/build/helpers/manifest.js +329 -0
- package/build/helpers/manifest.js.map +1 -0
- package/build/helpers/queue.d.ts +11 -0
- package/build/helpers/queue.js +48 -0
- package/build/helpers/queue.js.map +1 -0
- package/build/helpers/session.d.ts +119 -0
- package/build/helpers/session.js +289 -0
- package/build/helpers/session.js.map +1 -0
- package/build/helpers/simulation.d.ts +128 -0
- package/build/helpers/simulation.js +441 -0
- package/build/helpers/simulation.js.map +1 -0
- package/build/helpers/storage.d.ts +58 -0
- package/build/helpers/storage.js +190 -0
- package/build/helpers/storage.js.map +1 -0
- package/build/helpers/trust.d.ts +157 -0
- package/build/helpers/trust.js +340 -0
- package/build/helpers/trust.js.map +1 -0
- package/build/helpers/url.d.ts +1 -0
- package/build/helpers/url.js +13 -0
- package/build/helpers/url.js.map +1 -0
- package/build/helpers/uuid.d.ts +1 -0
- package/build/helpers/uuid.js +14 -0
- package/build/helpers/uuid.js.map +1 -0
- package/build/index.d.ts +21 -0
- package/build/index.js +167 -0
- package/build/index.js.map +1 -0
- package/build/popups/IframeWalletPopup.d.ts +16 -0
- package/build/popups/IframeWalletPopup.js +38 -0
- package/build/popups/IframeWalletPopup.js.map +1 -0
- package/build/popups/NearWalletsPopup.d.ts +25 -0
- package/build/popups/NearWalletsPopup.js +153 -0
- package/build/popups/NearWalletsPopup.js.map +1 -0
- package/build/popups/Popup.d.ts +22 -0
- package/build/popups/Popup.js +94 -0
- package/build/popups/Popup.js.map +1 -0
- package/build/popups/styles.d.ts +1 -0
- package/build/popups/styles.js +257 -0
- package/build/popups/styles.js.map +1 -0
- package/build/security/audit-log.d.ts +123 -0
- package/build/security/audit-log.js +268 -0
- package/build/security/audit-log.js.map +1 -0
- package/build/security/csp.d.ts +68 -0
- package/build/security/csp.js +328 -0
- package/build/security/csp.js.map +1 -0
- package/build/security/index.d.ts +10 -0
- package/build/security/index.js +42 -0
- package/build/security/index.js.map +1 -0
- package/build/security/origin-guard.d.ts +90 -0
- package/build/security/origin-guard.js +244 -0
- package/build/security/origin-guard.js.map +1 -0
- package/build/security/rate-limiter.d.ts +84 -0
- package/build/security/rate-limiter.js +212 -0
- package/build/security/rate-limiter.js.map +1 -0
- package/build/security/secure-storage.d.ts +77 -0
- package/build/security/secure-storage.js +242 -0
- package/build/security/secure-storage.js.map +1 -0
- package/build/security/transaction-guard.d.ts +71 -0
- package/build/security/transaction-guard.js +239 -0
- package/build/security/transaction-guard.js.map +1 -0
- package/build/types.d.ts +508 -0
- package/build/types.js +3 -0
- package/build/types.js.map +1 -0
- package/build/ui/AccountSwitcherModal.d.ts +53 -0
- package/build/ui/AccountSwitcherModal.js +239 -0
- package/build/ui/AccountSwitcherModal.js.map +1 -0
- package/build/ui/Modal.d.ts +84 -0
- package/build/ui/Modal.js +278 -0
- package/build/ui/Modal.js.map +1 -0
- package/build/ui/TransactionModal.d.ts +84 -0
- package/build/ui/TransactionModal.js +406 -0
- package/build/ui/TransactionModal.js.map +1 -0
- package/build/ui/WalletSelectorModal.d.ts +97 -0
- package/build/ui/WalletSelectorModal.js +481 -0
- package/build/ui/WalletSelectorModal.js.map +1 -0
- package/build/ui/icons.d.ts +19 -0
- package/build/ui/icons.js +65 -0
- package/build/ui/icons.js.map +1 -0
- package/build/ui/index.d.ts +10 -0
- package/build/ui/index.js +31 -0
- package/build/ui/index.js.map +1 -0
- package/build/ui/styles.d.ts +5 -0
- package/build/ui/styles.js +973 -0
- package/build/ui/styles.js.map +1 -0
- package/build/ui/theme.d.ts +133 -0
- package/build/ui/theme.js +204 -0
- package/build/ui/theme.js.map +1 -0
- package/build/wallets/external/index.d.ts +4 -0
- package/build/wallets/external/index.js +9 -0
- package/build/wallets/external/index.js.map +1 -0
- package/build/wallets/external/manager.d.ts +152 -0
- package/build/wallets/external/manager.js +586 -0
- package/build/wallets/external/manager.js.map +1 -0
- package/build/wallets/privileged/index.d.ts +5 -0
- package/build/wallets/privileged/index.js +12 -0
- package/build/wallets/privileged/index.js.map +1 -0
- package/build/wallets/privileged/ledger.d.ts +132 -0
- package/build/wallets/privileged/ledger.js +563 -0
- package/build/wallets/privileged/ledger.js.map +1 -0
- package/build/wallets/privileged/manager.d.ts +54 -0
- package/build/wallets/privileged/manager.js +174 -0
- package/build/wallets/privileged/manager.js.map +1 -0
- package/package.json +33 -0
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Hardware Wallet Error Handling
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.HardwareError = void 0;
|
|
7
|
+
exports.createHardwareError = createHardwareError;
|
|
8
|
+
exports.handleLedgerStatus = handleLedgerStatus;
|
|
9
|
+
exports.isHardwareError = isHardwareError;
|
|
10
|
+
exports.isUserRejection = isUserRejection;
|
|
11
|
+
exports.isDeviceNotFound = isDeviceNotFound;
|
|
12
|
+
exports.isAppNotOpen = isAppNotOpen;
|
|
13
|
+
const types_1 = require("./types");
|
|
14
|
+
/**
|
|
15
|
+
* Hardware wallet error class
|
|
16
|
+
*/
|
|
17
|
+
class HardwareError extends Error {
|
|
18
|
+
code;
|
|
19
|
+
details;
|
|
20
|
+
constructor(code, message, details) {
|
|
21
|
+
super(message);
|
|
22
|
+
this.name = 'HardwareError';
|
|
23
|
+
this.code = code;
|
|
24
|
+
this.details = details;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
exports.HardwareError = HardwareError;
|
|
28
|
+
/**
|
|
29
|
+
* Create a hardware error with standard message
|
|
30
|
+
*/
|
|
31
|
+
function createHardwareError(code, customMessage, details) {
|
|
32
|
+
const message = customMessage || getDefaultMessage(code);
|
|
33
|
+
return new HardwareError(code, message, details);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Get default user-friendly message for error code
|
|
37
|
+
*/
|
|
38
|
+
function getDefaultMessage(code) {
|
|
39
|
+
switch (code) {
|
|
40
|
+
case types_1.HardwareErrorCode.DEVICE_NOT_FOUND:
|
|
41
|
+
return 'Hardware wallet not found. Please connect your device and try again.';
|
|
42
|
+
case types_1.HardwareErrorCode.DEVICE_LOCKED:
|
|
43
|
+
return 'Device is locked. Please unlock your hardware wallet.';
|
|
44
|
+
case types_1.HardwareErrorCode.DEVICE_BUSY:
|
|
45
|
+
return 'Device is busy. Please close other applications using the device.';
|
|
46
|
+
case types_1.HardwareErrorCode.CONNECTION_FAILED:
|
|
47
|
+
return 'Failed to connect to hardware wallet.';
|
|
48
|
+
case types_1.HardwareErrorCode.DISCONNECTED:
|
|
49
|
+
return 'Hardware wallet disconnected unexpectedly.';
|
|
50
|
+
case types_1.HardwareErrorCode.APP_NOT_OPEN:
|
|
51
|
+
return 'Please open the NEAR app on your hardware wallet.';
|
|
52
|
+
case types_1.HardwareErrorCode.WRONG_APP:
|
|
53
|
+
return 'Wrong app open on device. Please open the NEAR app.';
|
|
54
|
+
case types_1.HardwareErrorCode.APP_VERSION_UNSUPPORTED:
|
|
55
|
+
return 'NEAR app version is not supported. Please update the app.';
|
|
56
|
+
case types_1.HardwareErrorCode.USER_REJECTED:
|
|
57
|
+
return 'Transaction rejected on device.';
|
|
58
|
+
case types_1.HardwareErrorCode.TIMEOUT:
|
|
59
|
+
return 'Operation timed out. Please try again.';
|
|
60
|
+
case types_1.HardwareErrorCode.INVALID_DATA:
|
|
61
|
+
return 'Invalid data received from device.';
|
|
62
|
+
case types_1.HardwareErrorCode.DERIVATION_PATH_ERROR:
|
|
63
|
+
return 'Invalid derivation path.';
|
|
64
|
+
case types_1.HardwareErrorCode.TRANSACTION_TOO_LARGE:
|
|
65
|
+
return 'Transaction is too large for the device to sign.';
|
|
66
|
+
case types_1.HardwareErrorCode.TRANSPORT_ERROR:
|
|
67
|
+
return 'Communication error with device.';
|
|
68
|
+
case types_1.HardwareErrorCode.WEBHID_NOT_SUPPORTED:
|
|
69
|
+
return 'WebHID is not supported in this browser. Please use Chrome or Edge.';
|
|
70
|
+
default:
|
|
71
|
+
return 'Unknown hardware wallet error.';
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Map Ledger status code to error
|
|
76
|
+
*/
|
|
77
|
+
function handleLedgerStatus(statusCode) {
|
|
78
|
+
if (statusCode === types_1.LEDGER_STATUS.OK) {
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
switch (statusCode) {
|
|
82
|
+
case types_1.LEDGER_STATUS.USER_REJECTED:
|
|
83
|
+
case types_1.LEDGER_STATUS.CONDITIONS_NOT_SATISFIED:
|
|
84
|
+
throw createHardwareError(types_1.HardwareErrorCode.USER_REJECTED);
|
|
85
|
+
case types_1.LEDGER_STATUS.DEVICE_LOCKED:
|
|
86
|
+
throw createHardwareError(types_1.HardwareErrorCode.DEVICE_LOCKED);
|
|
87
|
+
case types_1.LEDGER_STATUS.APP_NOT_OPEN:
|
|
88
|
+
case types_1.LEDGER_STATUS.CLA_NOT_SUPPORTED:
|
|
89
|
+
throw createHardwareError(types_1.HardwareErrorCode.APP_NOT_OPEN);
|
|
90
|
+
case types_1.LEDGER_STATUS.INS_NOT_SUPPORTED:
|
|
91
|
+
throw createHardwareError(types_1.HardwareErrorCode.APP_VERSION_UNSUPPORTED, 'This operation is not supported by your NEAR app version');
|
|
92
|
+
case types_1.LEDGER_STATUS.WRONG_LENGTH:
|
|
93
|
+
case types_1.LEDGER_STATUS.INVALID_DATA:
|
|
94
|
+
throw createHardwareError(types_1.HardwareErrorCode.INVALID_DATA);
|
|
95
|
+
case types_1.LEDGER_STATUS.COMMAND_NOT_ALLOWED:
|
|
96
|
+
throw createHardwareError(types_1.HardwareErrorCode.DEVICE_BUSY, 'Device rejected the command. Please try again.');
|
|
97
|
+
default:
|
|
98
|
+
throw createHardwareError(types_1.HardwareErrorCode.UNKNOWN, `Unknown Ledger error: 0x${statusCode.toString(16)}`);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Check if an error is a HardwareError
|
|
103
|
+
*/
|
|
104
|
+
function isHardwareError(error) {
|
|
105
|
+
return error instanceof HardwareError;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Check if error indicates user rejection
|
|
109
|
+
*/
|
|
110
|
+
function isUserRejection(error) {
|
|
111
|
+
return isHardwareError(error) && error.code === types_1.HardwareErrorCode.USER_REJECTED;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Check if error indicates device not connected
|
|
115
|
+
*/
|
|
116
|
+
function isDeviceNotFound(error) {
|
|
117
|
+
return isHardwareError(error) && error.code === types_1.HardwareErrorCode.DEVICE_NOT_FOUND;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Check if error indicates app not open
|
|
121
|
+
*/
|
|
122
|
+
function isAppNotOpen(error) {
|
|
123
|
+
return (isHardwareError(error) &&
|
|
124
|
+
(error.code === types_1.HardwareErrorCode.APP_NOT_OPEN ||
|
|
125
|
+
error.code === types_1.HardwareErrorCode.WRONG_APP));
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/hardware/errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hardware Wallet Module
|
|
3
|
+
*/
|
|
4
|
+
export * from './types';
|
|
5
|
+
export { HardwareError, createHardwareError, handleLedgerStatus, isHardwareError, isUserRejection, isDeviceNotFound, isAppNotOpen, } from './errors';
|
|
6
|
+
export { LedgerTransport, detectLedgerModel } from './transport';
|
|
7
|
+
export { LedgerNearApp, type NearAppVersion, type PublicKeyResult, type SignatureResult, } from './near-app';
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Hardware Wallet Module
|
|
4
|
+
*/
|
|
5
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
8
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
9
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
10
|
+
}
|
|
11
|
+
Object.defineProperty(o, k2, desc);
|
|
12
|
+
}) : (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
o[k2] = m[k];
|
|
15
|
+
}));
|
|
16
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
17
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
18
|
+
};
|
|
19
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
+
exports.LedgerNearApp = exports.detectLedgerModel = exports.LedgerTransport = exports.isAppNotOpen = exports.isDeviceNotFound = exports.isUserRejection = exports.isHardwareError = exports.handleLedgerStatus = exports.createHardwareError = exports.HardwareError = void 0;
|
|
21
|
+
// Types
|
|
22
|
+
__exportStar(require("./types"), exports);
|
|
23
|
+
// Errors
|
|
24
|
+
var errors_1 = require("./errors");
|
|
25
|
+
Object.defineProperty(exports, "HardwareError", { enumerable: true, get: function () { return errors_1.HardwareError; } });
|
|
26
|
+
Object.defineProperty(exports, "createHardwareError", { enumerable: true, get: function () { return errors_1.createHardwareError; } });
|
|
27
|
+
Object.defineProperty(exports, "handleLedgerStatus", { enumerable: true, get: function () { return errors_1.handleLedgerStatus; } });
|
|
28
|
+
Object.defineProperty(exports, "isHardwareError", { enumerable: true, get: function () { return errors_1.isHardwareError; } });
|
|
29
|
+
Object.defineProperty(exports, "isUserRejection", { enumerable: true, get: function () { return errors_1.isUserRejection; } });
|
|
30
|
+
Object.defineProperty(exports, "isDeviceNotFound", { enumerable: true, get: function () { return errors_1.isDeviceNotFound; } });
|
|
31
|
+
Object.defineProperty(exports, "isAppNotOpen", { enumerable: true, get: function () { return errors_1.isAppNotOpen; } });
|
|
32
|
+
// Transport
|
|
33
|
+
var transport_1 = require("./transport");
|
|
34
|
+
Object.defineProperty(exports, "LedgerTransport", { enumerable: true, get: function () { return transport_1.LedgerTransport; } });
|
|
35
|
+
Object.defineProperty(exports, "detectLedgerModel", { enumerable: true, get: function () { return transport_1.detectLedgerModel; } });
|
|
36
|
+
// NEAR App
|
|
37
|
+
var near_app_1 = require("./near-app");
|
|
38
|
+
Object.defineProperty(exports, "LedgerNearApp", { enumerable: true, get: function () { return near_app_1.LedgerNearApp; } });
|
|
39
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hardware/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;;AAEH,QAAQ;AACR,0CAAwB;AAExB,SAAS;AACT,mCAQkB;AAPhB,uGAAA,aAAa,OAAA;AACb,6GAAA,mBAAmB,OAAA;AACnB,4GAAA,kBAAkB,OAAA;AAClB,yGAAA,eAAe,OAAA;AACf,yGAAA,eAAe,OAAA;AACf,0GAAA,gBAAgB,OAAA;AAChB,sGAAA,YAAY,OAAA;AAGd,YAAY;AACZ,yCAAiE;AAAxD,4GAAA,eAAe,OAAA;AAAE,8GAAA,iBAAiB,OAAA;AAE3C,WAAW;AACX,uCAKoB;AAJlB,yGAAA,aAAa,OAAA"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ledger NEAR App Interface
|
|
3
|
+
*
|
|
4
|
+
* High-level interface for the NEAR app on Ledger devices
|
|
5
|
+
*/
|
|
6
|
+
import { LedgerTransport } from './transport';
|
|
7
|
+
import { type LedgerDeviceInfo } from './types';
|
|
8
|
+
export interface NearAppVersion {
|
|
9
|
+
major: number;
|
|
10
|
+
minor: number;
|
|
11
|
+
patch: number;
|
|
12
|
+
version: string;
|
|
13
|
+
}
|
|
14
|
+
export interface PublicKeyResult {
|
|
15
|
+
publicKey: string;
|
|
16
|
+
address: string;
|
|
17
|
+
}
|
|
18
|
+
export interface SignatureResult {
|
|
19
|
+
signature: Uint8Array;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* High-level interface to the NEAR app on Ledger devices
|
|
23
|
+
*/
|
|
24
|
+
export declare class LedgerNearApp {
|
|
25
|
+
private transport;
|
|
26
|
+
constructor(transport: LedgerTransport);
|
|
27
|
+
/**
|
|
28
|
+
* Create a new instance and connect to device
|
|
29
|
+
*/
|
|
30
|
+
static connect(): Promise<LedgerNearApp>;
|
|
31
|
+
/**
|
|
32
|
+
* Check if transport is supported
|
|
33
|
+
*/
|
|
34
|
+
static isSupported(): boolean;
|
|
35
|
+
/**
|
|
36
|
+
* Check if connected
|
|
37
|
+
*/
|
|
38
|
+
isConnected(): boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Disconnect from device
|
|
41
|
+
*/
|
|
42
|
+
disconnect(): Promise<void>;
|
|
43
|
+
/**
|
|
44
|
+
* Get device info
|
|
45
|
+
*/
|
|
46
|
+
getDeviceInfo(): Promise<LedgerDeviceInfo>;
|
|
47
|
+
/**
|
|
48
|
+
* Get NEAR app version
|
|
49
|
+
*/
|
|
50
|
+
getVersion(): Promise<NearAppVersion>;
|
|
51
|
+
/**
|
|
52
|
+
* Get public key from device
|
|
53
|
+
*
|
|
54
|
+
* @param path - BIP44 derivation path (e.g., "44'/397'/0'/0'/1'")
|
|
55
|
+
* @param display - Whether to display address on device for verification
|
|
56
|
+
*/
|
|
57
|
+
getPublicKey(path: string, display?: boolean): Promise<PublicKeyResult>;
|
|
58
|
+
/**
|
|
59
|
+
* Sign a transaction
|
|
60
|
+
*
|
|
61
|
+
* @param path - BIP44 derivation path
|
|
62
|
+
* @param txBytes - Serialized transaction bytes (borsh encoded)
|
|
63
|
+
*/
|
|
64
|
+
signTransaction(path: string, txBytes: Uint8Array): Promise<SignatureResult>;
|
|
65
|
+
/**
|
|
66
|
+
* Sign a NEP-413 message
|
|
67
|
+
*
|
|
68
|
+
* @param path - BIP44 derivation path
|
|
69
|
+
* @param message - Message to sign
|
|
70
|
+
* @param nonce - 32-byte nonce for replay protection
|
|
71
|
+
* @param recipient - Intended recipient
|
|
72
|
+
* @param callbackUrl - Optional callback URL
|
|
73
|
+
*/
|
|
74
|
+
signMessage(path: string, message: string, nonce: Uint8Array, recipient: string, callbackUrl?: string): Promise<SignatureResult>;
|
|
75
|
+
/**
|
|
76
|
+
* Send data in chunks for large payloads
|
|
77
|
+
*/
|
|
78
|
+
private sendChunked;
|
|
79
|
+
/**
|
|
80
|
+
* Serialize BIP44 path to bytes
|
|
81
|
+
*/
|
|
82
|
+
private serializePath;
|
|
83
|
+
/**
|
|
84
|
+
* Convert bytes to hex string
|
|
85
|
+
*/
|
|
86
|
+
private bytesToHex;
|
|
87
|
+
/**
|
|
88
|
+
* Convert bytes to base58 (for NEAR public key format)
|
|
89
|
+
*/
|
|
90
|
+
private bytesToBase58;
|
|
91
|
+
/**
|
|
92
|
+
* Write uint32 little-endian to buffer
|
|
93
|
+
*/
|
|
94
|
+
private writeUint32LE;
|
|
95
|
+
}
|
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Ledger NEAR App Interface
|
|
4
|
+
*
|
|
5
|
+
* High-level interface for the NEAR app on Ledger devices
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.LedgerNearApp = void 0;
|
|
9
|
+
const transport_1 = require("./transport");
|
|
10
|
+
const types_1 = require("./types");
|
|
11
|
+
const errors_1 = require("./errors");
|
|
12
|
+
// =============================================================================
|
|
13
|
+
// Ledger NEAR App
|
|
14
|
+
// =============================================================================
|
|
15
|
+
/**
|
|
16
|
+
* High-level interface to the NEAR app on Ledger devices
|
|
17
|
+
*/
|
|
18
|
+
class LedgerNearApp {
|
|
19
|
+
transport;
|
|
20
|
+
constructor(transport) {
|
|
21
|
+
this.transport = transport;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Create a new instance and connect to device
|
|
25
|
+
*/
|
|
26
|
+
static async connect() {
|
|
27
|
+
const transport = new transport_1.LedgerTransport();
|
|
28
|
+
await transport.connect();
|
|
29
|
+
return new LedgerNearApp(transport);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Check if transport is supported
|
|
33
|
+
*/
|
|
34
|
+
static isSupported() {
|
|
35
|
+
return transport_1.LedgerTransport.isSupported();
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Check if connected
|
|
39
|
+
*/
|
|
40
|
+
isConnected() {
|
|
41
|
+
return this.transport.isConnected();
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Disconnect from device
|
|
45
|
+
*/
|
|
46
|
+
async disconnect() {
|
|
47
|
+
await this.transport.disconnect();
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Get device info
|
|
51
|
+
*/
|
|
52
|
+
async getDeviceInfo() {
|
|
53
|
+
const deviceInfo = this.transport.getDeviceInfo();
|
|
54
|
+
const version = await this.getVersion();
|
|
55
|
+
return {
|
|
56
|
+
model: deviceInfo ? (0, transport_1.detectLedgerModel)(deviceInfo.productId) : 'unknown',
|
|
57
|
+
nearAppVersion: version.version,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Get NEAR app version
|
|
62
|
+
*/
|
|
63
|
+
async getVersion() {
|
|
64
|
+
const response = await this.transport.send({
|
|
65
|
+
cla: types_1.NEAR_CLA,
|
|
66
|
+
ins: types_1.NEAR_INS.GET_VERSION,
|
|
67
|
+
p1: 0x00,
|
|
68
|
+
p2: 0x00,
|
|
69
|
+
});
|
|
70
|
+
(0, errors_1.handleLedgerStatus)(response.statusCode);
|
|
71
|
+
if (response.data.length < 3) {
|
|
72
|
+
throw (0, errors_1.createHardwareError)(types_1.HardwareErrorCode.INVALID_DATA, 'Invalid version response');
|
|
73
|
+
}
|
|
74
|
+
const major = response.data[0];
|
|
75
|
+
const minor = response.data[1];
|
|
76
|
+
const patch = response.data[2];
|
|
77
|
+
return {
|
|
78
|
+
major,
|
|
79
|
+
minor,
|
|
80
|
+
patch,
|
|
81
|
+
version: `${major}.${minor}.${patch}`,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Get public key from device
|
|
86
|
+
*
|
|
87
|
+
* @param path - BIP44 derivation path (e.g., "44'/397'/0'/0'/1'")
|
|
88
|
+
* @param display - Whether to display address on device for verification
|
|
89
|
+
*/
|
|
90
|
+
async getPublicKey(path, display = false) {
|
|
91
|
+
const pathBuffer = this.serializePath(path);
|
|
92
|
+
const response = await this.transport.send({
|
|
93
|
+
cla: types_1.NEAR_CLA,
|
|
94
|
+
ins: types_1.NEAR_INS.GET_PUBLIC_KEY,
|
|
95
|
+
p1: display ? 0x01 : 0x00,
|
|
96
|
+
p2: 0x00,
|
|
97
|
+
data: pathBuffer,
|
|
98
|
+
}, display ? 60000 : 10000 // Longer timeout if displaying on device
|
|
99
|
+
);
|
|
100
|
+
(0, errors_1.handleLedgerStatus)(response.statusCode);
|
|
101
|
+
// Response format: 32 bytes public key
|
|
102
|
+
if (response.data.length < 32) {
|
|
103
|
+
throw (0, errors_1.createHardwareError)(types_1.HardwareErrorCode.INVALID_DATA, 'Invalid public key response');
|
|
104
|
+
}
|
|
105
|
+
const publicKeyBytes = response.data.slice(0, 32);
|
|
106
|
+
const publicKeyHex = this.bytesToHex(publicKeyBytes);
|
|
107
|
+
const publicKeyBase58 = this.bytesToBase58(publicKeyBytes);
|
|
108
|
+
return {
|
|
109
|
+
publicKey: publicKeyHex,
|
|
110
|
+
address: `ed25519:${publicKeyBase58}`,
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Sign a transaction
|
|
115
|
+
*
|
|
116
|
+
* @param path - BIP44 derivation path
|
|
117
|
+
* @param txBytes - Serialized transaction bytes (borsh encoded)
|
|
118
|
+
*/
|
|
119
|
+
async signTransaction(path, txBytes) {
|
|
120
|
+
const pathBuffer = this.serializePath(path);
|
|
121
|
+
// Combine path and transaction data
|
|
122
|
+
const data = new Uint8Array(pathBuffer.length + txBytes.length);
|
|
123
|
+
data.set(pathBuffer, 0);
|
|
124
|
+
data.set(txBytes, pathBuffer.length);
|
|
125
|
+
// Send in chunks if needed (Ledger has packet size limits)
|
|
126
|
+
const response = await this.sendChunked(types_1.NEAR_INS.SIGN_TRANSACTION, data, 60000 // 60 second timeout for user confirmation
|
|
127
|
+
);
|
|
128
|
+
(0, errors_1.handleLedgerStatus)(response.statusCode);
|
|
129
|
+
// Response is 64 bytes signature
|
|
130
|
+
if (response.data.length < 64) {
|
|
131
|
+
throw (0, errors_1.createHardwareError)(types_1.HardwareErrorCode.INVALID_DATA, 'Invalid signature response');
|
|
132
|
+
}
|
|
133
|
+
return {
|
|
134
|
+
signature: response.data.slice(0, 64),
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Sign a NEP-413 message
|
|
139
|
+
*
|
|
140
|
+
* @param path - BIP44 derivation path
|
|
141
|
+
* @param message - Message to sign
|
|
142
|
+
* @param nonce - 32-byte nonce for replay protection
|
|
143
|
+
* @param recipient - Intended recipient
|
|
144
|
+
* @param callbackUrl - Optional callback URL
|
|
145
|
+
*/
|
|
146
|
+
async signMessage(path, message, nonce, recipient, callbackUrl) {
|
|
147
|
+
const pathBuffer = this.serializePath(path);
|
|
148
|
+
// Encode message payload according to NEP-413
|
|
149
|
+
const messageBytes = new TextEncoder().encode(message);
|
|
150
|
+
const recipientBytes = new TextEncoder().encode(recipient);
|
|
151
|
+
const callbackBytes = callbackUrl ? new TextEncoder().encode(callbackUrl) : new Uint8Array(0);
|
|
152
|
+
// Build payload
|
|
153
|
+
const totalLength = pathBuffer.length +
|
|
154
|
+
32 + // nonce
|
|
155
|
+
4 + recipientBytes.length +
|
|
156
|
+
4 + messageBytes.length +
|
|
157
|
+
4 + callbackBytes.length;
|
|
158
|
+
const data = new Uint8Array(totalLength);
|
|
159
|
+
let offset = 0;
|
|
160
|
+
// Path
|
|
161
|
+
data.set(pathBuffer, offset);
|
|
162
|
+
offset += pathBuffer.length;
|
|
163
|
+
// Nonce (32 bytes)
|
|
164
|
+
data.set(nonce.slice(0, 32), offset);
|
|
165
|
+
offset += 32;
|
|
166
|
+
// Recipient
|
|
167
|
+
this.writeUint32LE(data, offset, recipientBytes.length);
|
|
168
|
+
offset += 4;
|
|
169
|
+
data.set(recipientBytes, offset);
|
|
170
|
+
offset += recipientBytes.length;
|
|
171
|
+
// Message
|
|
172
|
+
this.writeUint32LE(data, offset, messageBytes.length);
|
|
173
|
+
offset += 4;
|
|
174
|
+
data.set(messageBytes, offset);
|
|
175
|
+
offset += messageBytes.length;
|
|
176
|
+
// Callback
|
|
177
|
+
this.writeUint32LE(data, offset, callbackBytes.length);
|
|
178
|
+
offset += 4;
|
|
179
|
+
data.set(callbackBytes, offset);
|
|
180
|
+
const response = await this.sendChunked(types_1.NEAR_INS.SIGN_NEP413_MESSAGE, data, 60000);
|
|
181
|
+
(0, errors_1.handleLedgerStatus)(response.statusCode);
|
|
182
|
+
if (response.data.length < 64) {
|
|
183
|
+
throw (0, errors_1.createHardwareError)(types_1.HardwareErrorCode.INVALID_DATA, 'Invalid signature response');
|
|
184
|
+
}
|
|
185
|
+
return {
|
|
186
|
+
signature: response.data.slice(0, 64),
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Send data in chunks for large payloads
|
|
191
|
+
*/
|
|
192
|
+
async sendChunked(instruction, data, timeout) {
|
|
193
|
+
const CHUNK_SIZE = 250; // Max data per APDU
|
|
194
|
+
let offset = 0;
|
|
195
|
+
let response = null;
|
|
196
|
+
while (offset < data.length) {
|
|
197
|
+
const isFirst = offset === 0;
|
|
198
|
+
const isLast = offset + CHUNK_SIZE >= data.length;
|
|
199
|
+
const chunk = data.slice(offset, offset + CHUNK_SIZE);
|
|
200
|
+
// P1: 0x00 = first/only, 0x01 = more, 0x02 = last
|
|
201
|
+
const p1 = isFirst && isLast ? 0x00 : isFirst ? 0x00 : isLast ? 0x02 : 0x01;
|
|
202
|
+
response = await this.transport.send({
|
|
203
|
+
cla: types_1.NEAR_CLA,
|
|
204
|
+
ins: instruction,
|
|
205
|
+
p1,
|
|
206
|
+
p2: 0x00,
|
|
207
|
+
data: chunk,
|
|
208
|
+
}, isLast ? timeout : 10000);
|
|
209
|
+
// Check for early errors (except for "more data needed" responses)
|
|
210
|
+
if (!isLast && response.statusCode !== types_1.LEDGER_STATUS.OK) {
|
|
211
|
+
(0, errors_1.handleLedgerStatus)(response.statusCode);
|
|
212
|
+
}
|
|
213
|
+
offset += CHUNK_SIZE;
|
|
214
|
+
}
|
|
215
|
+
if (!response) {
|
|
216
|
+
throw (0, errors_1.createHardwareError)(types_1.HardwareErrorCode.INVALID_DATA, 'No response from device');
|
|
217
|
+
}
|
|
218
|
+
return response;
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Serialize BIP44 path to bytes
|
|
222
|
+
*/
|
|
223
|
+
serializePath(path) {
|
|
224
|
+
// Remove 'm/' prefix if present
|
|
225
|
+
const cleanPath = path.startsWith('m/') ? path.slice(2) : path;
|
|
226
|
+
const elements = cleanPath.split('/');
|
|
227
|
+
// 1 byte for length + 4 bytes per element
|
|
228
|
+
const buffer = new Uint8Array(1 + elements.length * 4);
|
|
229
|
+
buffer[0] = elements.length;
|
|
230
|
+
let offset = 1;
|
|
231
|
+
for (const element of elements) {
|
|
232
|
+
const hardened = element.endsWith("'");
|
|
233
|
+
const index = parseInt(hardened ? element.slice(0, -1) : element, 10);
|
|
234
|
+
if (isNaN(index)) {
|
|
235
|
+
throw (0, errors_1.createHardwareError)(types_1.HardwareErrorCode.DERIVATION_PATH_ERROR, `Invalid path element: ${element}`);
|
|
236
|
+
}
|
|
237
|
+
const value = hardened ? index + 0x80000000 : index;
|
|
238
|
+
// Big-endian
|
|
239
|
+
buffer[offset++] = (value >> 24) & 0xff;
|
|
240
|
+
buffer[offset++] = (value >> 16) & 0xff;
|
|
241
|
+
buffer[offset++] = (value >> 8) & 0xff;
|
|
242
|
+
buffer[offset++] = value & 0xff;
|
|
243
|
+
}
|
|
244
|
+
return buffer;
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Convert bytes to hex string
|
|
248
|
+
*/
|
|
249
|
+
bytesToHex(bytes) {
|
|
250
|
+
return Array.from(bytes)
|
|
251
|
+
.map(b => b.toString(16).padStart(2, '0'))
|
|
252
|
+
.join('');
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Convert bytes to base58 (for NEAR public key format)
|
|
256
|
+
*/
|
|
257
|
+
bytesToBase58(bytes) {
|
|
258
|
+
const ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';
|
|
259
|
+
let num = BigInt(0);
|
|
260
|
+
for (const byte of bytes) {
|
|
261
|
+
num = num * BigInt(256) + BigInt(byte);
|
|
262
|
+
}
|
|
263
|
+
let result = '';
|
|
264
|
+
while (num > 0) {
|
|
265
|
+
const remainder = Number(num % BigInt(58));
|
|
266
|
+
num = num / BigInt(58);
|
|
267
|
+
result = ALPHABET[remainder] + result;
|
|
268
|
+
}
|
|
269
|
+
// Add leading '1's for leading zero bytes
|
|
270
|
+
for (const byte of bytes) {
|
|
271
|
+
if (byte === 0) {
|
|
272
|
+
result = '1' + result;
|
|
273
|
+
}
|
|
274
|
+
else {
|
|
275
|
+
break;
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
return result;
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Write uint32 little-endian to buffer
|
|
282
|
+
*/
|
|
283
|
+
writeUint32LE(buffer, offset, value) {
|
|
284
|
+
buffer[offset] = value & 0xff;
|
|
285
|
+
buffer[offset + 1] = (value >> 8) & 0xff;
|
|
286
|
+
buffer[offset + 2] = (value >> 16) & 0xff;
|
|
287
|
+
buffer[offset + 3] = (value >> 24) & 0xff;
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
exports.LedgerNearApp = LedgerNearApp;
|
|
291
|
+
//# sourceMappingURL=near-app.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"near-app.js","sourceRoot":"","sources":["../../src/hardware/near-app.ts"],"names":[],"mappings":"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"}
|