@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.
Files changed (179) hide show
  1. package/README.md +546 -0
  2. package/build/InjectedWallet.d.ts +22 -0
  3. package/build/InjectedWallet.js +58 -0
  4. package/build/InjectedWallet.js.map +1 -0
  5. package/build/NearConnector.d.ts +151 -0
  6. package/build/NearConnector.js +536 -0
  7. package/build/NearConnector.js.map +1 -0
  8. package/build/ParentFrameWallet.d.ts +22 -0
  9. package/build/ParentFrameWallet.js +66 -0
  10. package/build/ParentFrameWallet.js.map +1 -0
  11. package/build/SandboxedWallet/code.d.ts +7 -0
  12. package/build/SandboxedWallet/code.js +324 -0
  13. package/build/SandboxedWallet/code.js.map +1 -0
  14. package/build/SandboxedWallet/executor.d.ts +23 -0
  15. package/build/SandboxedWallet/executor.js +338 -0
  16. package/build/SandboxedWallet/executor.js.map +1 -0
  17. package/build/SandboxedWallet/iframe.d.ts +18 -0
  18. package/build/SandboxedWallet/iframe.js +78 -0
  19. package/build/SandboxedWallet/iframe.js.map +1 -0
  20. package/build/SandboxedWallet/index.d.ts +24 -0
  21. package/build/SandboxedWallet/index.js +54 -0
  22. package/build/SandboxedWallet/index.js.map +1 -0
  23. package/build/actions/index.d.ts +3 -0
  24. package/build/actions/index.js +105 -0
  25. package/build/actions/index.js.map +1 -0
  26. package/build/actions/types.d.ts +76 -0
  27. package/build/actions/types.js +3 -0
  28. package/build/actions/types.js.map +1 -0
  29. package/build/connection/health.d.ts +213 -0
  30. package/build/connection/health.js +391 -0
  31. package/build/connection/health.js.map +1 -0
  32. package/build/connection/index.d.ts +4 -0
  33. package/build/connection/index.js +48 -0
  34. package/build/connection/index.js.map +1 -0
  35. package/build/connection/reconnect.d.ts +261 -0
  36. package/build/connection/reconnect.js +454 -0
  37. package/build/connection/reconnect.js.map +1 -0
  38. package/build/connection/retry.d.ts +187 -0
  39. package/build/connection/retry.js +427 -0
  40. package/build/connection/retry.js.map +1 -0
  41. package/build/connection/state.d.ts +222 -0
  42. package/build/connection/state.js +431 -0
  43. package/build/connection/state.js.map +1 -0
  44. package/build/errors.d.ts +177 -0
  45. package/build/errors.js +546 -0
  46. package/build/errors.js.map +1 -0
  47. package/build/hardware/errors.d.ts +36 -0
  48. package/build/hardware/errors.js +127 -0
  49. package/build/hardware/errors.js.map +1 -0
  50. package/build/hardware/index.d.ts +7 -0
  51. package/build/hardware/index.js +39 -0
  52. package/build/hardware/index.js.map +1 -0
  53. package/build/hardware/near-app.d.ts +95 -0
  54. package/build/hardware/near-app.js +291 -0
  55. package/build/hardware/near-app.js.map +1 -0
  56. package/build/hardware/transport.d.ts +94 -0
  57. package/build/hardware/transport.js +267 -0
  58. package/build/hardware/transport.js.map +1 -0
  59. package/build/hardware/types.d.ts +98 -0
  60. package/build/hardware/types.js +72 -0
  61. package/build/hardware/types.js.map +1 -0
  62. package/build/helpers/analytics.d.ts +191 -0
  63. package/build/helpers/analytics.js +304 -0
  64. package/build/helpers/analytics.js.map +1 -0
  65. package/build/helpers/base58.d.ts +6 -0
  66. package/build/helpers/base58.js +47 -0
  67. package/build/helpers/base58.js.map +1 -0
  68. package/build/helpers/events.d.ts +42 -0
  69. package/build/helpers/events.js +68 -0
  70. package/build/helpers/events.js.map +1 -0
  71. package/build/helpers/html.d.ts +8 -0
  72. package/build/helpers/html.js +30 -0
  73. package/build/helpers/html.js.map +1 -0
  74. package/build/helpers/indexdb.d.ts +14 -0
  75. package/build/helpers/indexdb.js +166 -0
  76. package/build/helpers/indexdb.js.map +1 -0
  77. package/build/helpers/manifest.d.ts +147 -0
  78. package/build/helpers/manifest.js +329 -0
  79. package/build/helpers/manifest.js.map +1 -0
  80. package/build/helpers/queue.d.ts +11 -0
  81. package/build/helpers/queue.js +48 -0
  82. package/build/helpers/queue.js.map +1 -0
  83. package/build/helpers/session.d.ts +119 -0
  84. package/build/helpers/session.js +289 -0
  85. package/build/helpers/session.js.map +1 -0
  86. package/build/helpers/simulation.d.ts +128 -0
  87. package/build/helpers/simulation.js +441 -0
  88. package/build/helpers/simulation.js.map +1 -0
  89. package/build/helpers/storage.d.ts +58 -0
  90. package/build/helpers/storage.js +190 -0
  91. package/build/helpers/storage.js.map +1 -0
  92. package/build/helpers/trust.d.ts +157 -0
  93. package/build/helpers/trust.js +340 -0
  94. package/build/helpers/trust.js.map +1 -0
  95. package/build/helpers/url.d.ts +1 -0
  96. package/build/helpers/url.js +13 -0
  97. package/build/helpers/url.js.map +1 -0
  98. package/build/helpers/uuid.d.ts +1 -0
  99. package/build/helpers/uuid.js +14 -0
  100. package/build/helpers/uuid.js.map +1 -0
  101. package/build/index.d.ts +21 -0
  102. package/build/index.js +167 -0
  103. package/build/index.js.map +1 -0
  104. package/build/popups/IframeWalletPopup.d.ts +16 -0
  105. package/build/popups/IframeWalletPopup.js +38 -0
  106. package/build/popups/IframeWalletPopup.js.map +1 -0
  107. package/build/popups/NearWalletsPopup.d.ts +25 -0
  108. package/build/popups/NearWalletsPopup.js +153 -0
  109. package/build/popups/NearWalletsPopup.js.map +1 -0
  110. package/build/popups/Popup.d.ts +22 -0
  111. package/build/popups/Popup.js +94 -0
  112. package/build/popups/Popup.js.map +1 -0
  113. package/build/popups/styles.d.ts +1 -0
  114. package/build/popups/styles.js +257 -0
  115. package/build/popups/styles.js.map +1 -0
  116. package/build/security/audit-log.d.ts +123 -0
  117. package/build/security/audit-log.js +268 -0
  118. package/build/security/audit-log.js.map +1 -0
  119. package/build/security/csp.d.ts +68 -0
  120. package/build/security/csp.js +328 -0
  121. package/build/security/csp.js.map +1 -0
  122. package/build/security/index.d.ts +10 -0
  123. package/build/security/index.js +42 -0
  124. package/build/security/index.js.map +1 -0
  125. package/build/security/origin-guard.d.ts +90 -0
  126. package/build/security/origin-guard.js +244 -0
  127. package/build/security/origin-guard.js.map +1 -0
  128. package/build/security/rate-limiter.d.ts +84 -0
  129. package/build/security/rate-limiter.js +212 -0
  130. package/build/security/rate-limiter.js.map +1 -0
  131. package/build/security/secure-storage.d.ts +77 -0
  132. package/build/security/secure-storage.js +242 -0
  133. package/build/security/secure-storage.js.map +1 -0
  134. package/build/security/transaction-guard.d.ts +71 -0
  135. package/build/security/transaction-guard.js +239 -0
  136. package/build/security/transaction-guard.js.map +1 -0
  137. package/build/types.d.ts +508 -0
  138. package/build/types.js +3 -0
  139. package/build/types.js.map +1 -0
  140. package/build/ui/AccountSwitcherModal.d.ts +53 -0
  141. package/build/ui/AccountSwitcherModal.js +239 -0
  142. package/build/ui/AccountSwitcherModal.js.map +1 -0
  143. package/build/ui/Modal.d.ts +84 -0
  144. package/build/ui/Modal.js +278 -0
  145. package/build/ui/Modal.js.map +1 -0
  146. package/build/ui/TransactionModal.d.ts +84 -0
  147. package/build/ui/TransactionModal.js +406 -0
  148. package/build/ui/TransactionModal.js.map +1 -0
  149. package/build/ui/WalletSelectorModal.d.ts +97 -0
  150. package/build/ui/WalletSelectorModal.js +481 -0
  151. package/build/ui/WalletSelectorModal.js.map +1 -0
  152. package/build/ui/icons.d.ts +19 -0
  153. package/build/ui/icons.js +65 -0
  154. package/build/ui/icons.js.map +1 -0
  155. package/build/ui/index.d.ts +10 -0
  156. package/build/ui/index.js +31 -0
  157. package/build/ui/index.js.map +1 -0
  158. package/build/ui/styles.d.ts +5 -0
  159. package/build/ui/styles.js +973 -0
  160. package/build/ui/styles.js.map +1 -0
  161. package/build/ui/theme.d.ts +133 -0
  162. package/build/ui/theme.js +204 -0
  163. package/build/ui/theme.js.map +1 -0
  164. package/build/wallets/external/index.d.ts +4 -0
  165. package/build/wallets/external/index.js +9 -0
  166. package/build/wallets/external/index.js.map +1 -0
  167. package/build/wallets/external/manager.d.ts +152 -0
  168. package/build/wallets/external/manager.js +586 -0
  169. package/build/wallets/external/manager.js.map +1 -0
  170. package/build/wallets/privileged/index.d.ts +5 -0
  171. package/build/wallets/privileged/index.js +12 -0
  172. package/build/wallets/privileged/index.js.map +1 -0
  173. package/build/wallets/privileged/ledger.d.ts +132 -0
  174. package/build/wallets/privileged/ledger.js +563 -0
  175. package/build/wallets/privileged/ledger.js.map +1 -0
  176. package/build/wallets/privileged/manager.d.ts +54 -0
  177. package/build/wallets/privileged/manager.js +174 -0
  178. package/build/wallets/privileged/manager.js.map +1 -0
  179. 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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"}