@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,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ledger Transport Layer
|
|
3
|
+
*
|
|
4
|
+
* Low-level WebHID communication with Ledger devices
|
|
5
|
+
*/
|
|
6
|
+
import { type APDUCommand, type APDUResponse, type LedgerModel } from './types';
|
|
7
|
+
declare global {
|
|
8
|
+
interface Navigator {
|
|
9
|
+
hid?: HID;
|
|
10
|
+
}
|
|
11
|
+
interface HID {
|
|
12
|
+
requestDevice(options: {
|
|
13
|
+
filters: Array<{
|
|
14
|
+
vendorId: number;
|
|
15
|
+
}>;
|
|
16
|
+
}): Promise<HIDDevice[]>;
|
|
17
|
+
}
|
|
18
|
+
interface HIDDevice {
|
|
19
|
+
opened: boolean;
|
|
20
|
+
vendorId: number;
|
|
21
|
+
productId: number;
|
|
22
|
+
open(): Promise<void>;
|
|
23
|
+
close(): Promise<void>;
|
|
24
|
+
sendReport(reportId: number, data: Uint8Array): Promise<void>;
|
|
25
|
+
addEventListener(type: 'inputreport', listener: (event: HIDInputReportEvent) => void): void;
|
|
26
|
+
}
|
|
27
|
+
interface HIDInputReportEvent {
|
|
28
|
+
data: DataView;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Ledger WebHID Transport
|
|
33
|
+
*
|
|
34
|
+
* Handles low-level communication with Ledger devices via WebHID API.
|
|
35
|
+
* Implements the Ledger HID framing protocol.
|
|
36
|
+
*/
|
|
37
|
+
export declare class LedgerTransport {
|
|
38
|
+
private device;
|
|
39
|
+
private responseBuffer;
|
|
40
|
+
private pendingResolve;
|
|
41
|
+
private pendingReject;
|
|
42
|
+
constructor();
|
|
43
|
+
/**
|
|
44
|
+
* Check if WebHID is supported in this browser
|
|
45
|
+
*/
|
|
46
|
+
static isSupported(): boolean;
|
|
47
|
+
/**
|
|
48
|
+
* Request user to select a Ledger device
|
|
49
|
+
*/
|
|
50
|
+
connect(): Promise<void>;
|
|
51
|
+
/**
|
|
52
|
+
* Disconnect from the device
|
|
53
|
+
*/
|
|
54
|
+
disconnect(): Promise<void>;
|
|
55
|
+
/**
|
|
56
|
+
* Check if connected to a device
|
|
57
|
+
*/
|
|
58
|
+
isConnected(): boolean;
|
|
59
|
+
/**
|
|
60
|
+
* Get device info
|
|
61
|
+
*/
|
|
62
|
+
getDeviceInfo(): {
|
|
63
|
+
vendorId: number;
|
|
64
|
+
productId: number;
|
|
65
|
+
} | null;
|
|
66
|
+
/**
|
|
67
|
+
* Send an APDU command and receive response
|
|
68
|
+
*/
|
|
69
|
+
send(command: APDUCommand, timeout?: number): Promise<APDUResponse>;
|
|
70
|
+
/**
|
|
71
|
+
* Build APDU buffer from command
|
|
72
|
+
*/
|
|
73
|
+
private buildAPDU;
|
|
74
|
+
/**
|
|
75
|
+
* Frame APDU into HID packets
|
|
76
|
+
*
|
|
77
|
+
* Ledger HID protocol:
|
|
78
|
+
* - First packet: [channel (2)] [tag (1)] [seq (2)] [length (2)] [data...]
|
|
79
|
+
* - Subsequent: [channel (2)] [tag (1)] [seq (2)] [data...]
|
|
80
|
+
*/
|
|
81
|
+
private frameAPDU;
|
|
82
|
+
/**
|
|
83
|
+
* Handle incoming HID report
|
|
84
|
+
*/
|
|
85
|
+
private handleInputReport;
|
|
86
|
+
/**
|
|
87
|
+
* Wait for response with timeout
|
|
88
|
+
*/
|
|
89
|
+
private waitForResponse;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Detect Ledger model from product ID
|
|
93
|
+
*/
|
|
94
|
+
export declare function detectLedgerModel(productId: number): LedgerModel;
|
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Ledger Transport Layer
|
|
4
|
+
*
|
|
5
|
+
* Low-level WebHID communication with Ledger devices
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.LedgerTransport = void 0;
|
|
9
|
+
exports.detectLedgerModel = detectLedgerModel;
|
|
10
|
+
const types_1 = require("./types");
|
|
11
|
+
const errors_1 = require("./errors");
|
|
12
|
+
// =============================================================================
|
|
13
|
+
// Constants
|
|
14
|
+
// =============================================================================
|
|
15
|
+
const LEDGER_VENDOR_ID = 0x2c97;
|
|
16
|
+
const HID_PACKET_SIZE = 64;
|
|
17
|
+
const CHANNEL_ID = 0x0101;
|
|
18
|
+
const TAG_APDU = 0x05;
|
|
19
|
+
// =============================================================================
|
|
20
|
+
// Transport Class
|
|
21
|
+
// =============================================================================
|
|
22
|
+
/**
|
|
23
|
+
* Ledger WebHID Transport
|
|
24
|
+
*
|
|
25
|
+
* Handles low-level communication with Ledger devices via WebHID API.
|
|
26
|
+
* Implements the Ledger HID framing protocol.
|
|
27
|
+
*/
|
|
28
|
+
class LedgerTransport {
|
|
29
|
+
device = null;
|
|
30
|
+
responseBuffer = new Uint8Array(0);
|
|
31
|
+
pendingResolve = null;
|
|
32
|
+
pendingReject = null;
|
|
33
|
+
constructor() {
|
|
34
|
+
// Check WebHID support on construction
|
|
35
|
+
if (!LedgerTransport.isSupported()) {
|
|
36
|
+
throw (0, errors_1.createHardwareError)(types_1.HardwareErrorCode.WEBHID_NOT_SUPPORTED);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Check if WebHID is supported in this browser
|
|
41
|
+
*/
|
|
42
|
+
static isSupported() {
|
|
43
|
+
return typeof navigator !== 'undefined' && 'hid' in navigator;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Request user to select a Ledger device
|
|
47
|
+
*/
|
|
48
|
+
async connect() {
|
|
49
|
+
if (this.device?.opened) {
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
try {
|
|
53
|
+
// Request device from user
|
|
54
|
+
const devices = await navigator.hid.requestDevice({
|
|
55
|
+
filters: [{ vendorId: LEDGER_VENDOR_ID }],
|
|
56
|
+
});
|
|
57
|
+
if (devices.length === 0) {
|
|
58
|
+
throw (0, errors_1.createHardwareError)(types_1.HardwareErrorCode.DEVICE_NOT_FOUND);
|
|
59
|
+
}
|
|
60
|
+
this.device = devices[0];
|
|
61
|
+
await this.device.open();
|
|
62
|
+
// Set up input report handler
|
|
63
|
+
this.device.addEventListener('inputreport', this.handleInputReport.bind(this));
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
if (error instanceof DOMException) {
|
|
67
|
+
if (error.name === 'NotAllowedError') {
|
|
68
|
+
throw (0, errors_1.createHardwareError)(types_1.HardwareErrorCode.USER_REJECTED, 'User cancelled device selection');
|
|
69
|
+
}
|
|
70
|
+
if (error.name === 'NotFoundError') {
|
|
71
|
+
throw (0, errors_1.createHardwareError)(types_1.HardwareErrorCode.DEVICE_NOT_FOUND);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
throw error;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Disconnect from the device
|
|
79
|
+
*/
|
|
80
|
+
async disconnect() {
|
|
81
|
+
if (this.device) {
|
|
82
|
+
try {
|
|
83
|
+
await this.device.close();
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
// Ignore close errors
|
|
87
|
+
}
|
|
88
|
+
this.device = null;
|
|
89
|
+
}
|
|
90
|
+
this.responseBuffer = new Uint8Array(0);
|
|
91
|
+
this.pendingResolve = null;
|
|
92
|
+
this.pendingReject = null;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Check if connected to a device
|
|
96
|
+
*/
|
|
97
|
+
isConnected() {
|
|
98
|
+
return this.device?.opened ?? false;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Get device info
|
|
102
|
+
*/
|
|
103
|
+
getDeviceInfo() {
|
|
104
|
+
if (!this.device)
|
|
105
|
+
return null;
|
|
106
|
+
return {
|
|
107
|
+
vendorId: this.device.vendorId,
|
|
108
|
+
productId: this.device.productId,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Send an APDU command and receive response
|
|
113
|
+
*/
|
|
114
|
+
async send(command, timeout = 30000) {
|
|
115
|
+
if (!this.device?.opened) {
|
|
116
|
+
throw (0, errors_1.createHardwareError)(types_1.HardwareErrorCode.DEVICE_NOT_FOUND);
|
|
117
|
+
}
|
|
118
|
+
// Build APDU
|
|
119
|
+
const apdu = this.buildAPDU(command);
|
|
120
|
+
// Frame into HID packets
|
|
121
|
+
const packets = this.frameAPDU(apdu);
|
|
122
|
+
// Send all packets
|
|
123
|
+
for (const packet of packets) {
|
|
124
|
+
await this.device.sendReport(0, packet);
|
|
125
|
+
}
|
|
126
|
+
// Wait for response with timeout
|
|
127
|
+
const responseData = await this.waitForResponse(timeout);
|
|
128
|
+
// Parse response
|
|
129
|
+
const statusCode = (responseData[responseData.length - 2] << 8) | responseData[responseData.length - 1];
|
|
130
|
+
const data = responseData.slice(0, -2);
|
|
131
|
+
return { data, statusCode };
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Build APDU buffer from command
|
|
135
|
+
*/
|
|
136
|
+
buildAPDU(command) {
|
|
137
|
+
const dataLength = command.data?.length ?? 0;
|
|
138
|
+
const apdu = new Uint8Array(5 + dataLength);
|
|
139
|
+
apdu[0] = command.cla;
|
|
140
|
+
apdu[1] = command.ins;
|
|
141
|
+
apdu[2] = command.p1;
|
|
142
|
+
apdu[3] = command.p2;
|
|
143
|
+
apdu[4] = dataLength;
|
|
144
|
+
if (command.data) {
|
|
145
|
+
apdu.set(command.data, 5);
|
|
146
|
+
}
|
|
147
|
+
return apdu;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Frame APDU into HID packets
|
|
151
|
+
*
|
|
152
|
+
* Ledger HID protocol:
|
|
153
|
+
* - First packet: [channel (2)] [tag (1)] [seq (2)] [length (2)] [data...]
|
|
154
|
+
* - Subsequent: [channel (2)] [tag (1)] [seq (2)] [data...]
|
|
155
|
+
*/
|
|
156
|
+
frameAPDU(apdu) {
|
|
157
|
+
const packets = [];
|
|
158
|
+
let offset = 0;
|
|
159
|
+
let sequence = 0;
|
|
160
|
+
// First packet includes length
|
|
161
|
+
const firstPacket = new Uint8Array(HID_PACKET_SIZE);
|
|
162
|
+
firstPacket[0] = CHANNEL_ID >> 8;
|
|
163
|
+
firstPacket[1] = CHANNEL_ID & 0xff;
|
|
164
|
+
firstPacket[2] = TAG_APDU;
|
|
165
|
+
firstPacket[3] = sequence >> 8;
|
|
166
|
+
firstPacket[4] = sequence & 0xff;
|
|
167
|
+
firstPacket[5] = apdu.length >> 8;
|
|
168
|
+
firstPacket[6] = apdu.length & 0xff;
|
|
169
|
+
const firstDataLength = Math.min(apdu.length, HID_PACKET_SIZE - 7);
|
|
170
|
+
firstPacket.set(apdu.slice(0, firstDataLength), 7);
|
|
171
|
+
packets.push(firstPacket);
|
|
172
|
+
offset = firstDataLength;
|
|
173
|
+
sequence++;
|
|
174
|
+
// Subsequent packets
|
|
175
|
+
while (offset < apdu.length) {
|
|
176
|
+
const packet = new Uint8Array(HID_PACKET_SIZE);
|
|
177
|
+
packet[0] = CHANNEL_ID >> 8;
|
|
178
|
+
packet[1] = CHANNEL_ID & 0xff;
|
|
179
|
+
packet[2] = TAG_APDU;
|
|
180
|
+
packet[3] = sequence >> 8;
|
|
181
|
+
packet[4] = sequence & 0xff;
|
|
182
|
+
const dataLength = Math.min(apdu.length - offset, HID_PACKET_SIZE - 5);
|
|
183
|
+
packet.set(apdu.slice(offset, offset + dataLength), 5);
|
|
184
|
+
packets.push(packet);
|
|
185
|
+
offset += dataLength;
|
|
186
|
+
sequence++;
|
|
187
|
+
}
|
|
188
|
+
return packets;
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Handle incoming HID report
|
|
192
|
+
*/
|
|
193
|
+
handleInputReport(event) {
|
|
194
|
+
const data = new Uint8Array(event.data.buffer);
|
|
195
|
+
// Check channel and tag
|
|
196
|
+
const channel = (data[0] << 8) | data[1];
|
|
197
|
+
const tag = data[2];
|
|
198
|
+
if (channel !== CHANNEL_ID || tag !== TAG_APDU) {
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
const sequence = (data[3] << 8) | data[4];
|
|
202
|
+
if (sequence === 0) {
|
|
203
|
+
// First packet - get total length
|
|
204
|
+
const totalLength = (data[5] << 8) | data[6];
|
|
205
|
+
this.responseBuffer = new Uint8Array(totalLength);
|
|
206
|
+
const dataStart = 7;
|
|
207
|
+
const dataLength = Math.min(totalLength, HID_PACKET_SIZE - dataStart);
|
|
208
|
+
this.responseBuffer.set(data.slice(dataStart, dataStart + dataLength), 0);
|
|
209
|
+
}
|
|
210
|
+
else {
|
|
211
|
+
// Subsequent packet
|
|
212
|
+
const dataStart = 5;
|
|
213
|
+
const offset = HID_PACKET_SIZE - 7 + (sequence - 1) * (HID_PACKET_SIZE - 5);
|
|
214
|
+
const remaining = this.responseBuffer.length - offset;
|
|
215
|
+
const dataLength = Math.min(remaining, HID_PACKET_SIZE - dataStart);
|
|
216
|
+
this.responseBuffer.set(data.slice(dataStart, dataStart + dataLength), offset);
|
|
217
|
+
}
|
|
218
|
+
// Check if we have complete response
|
|
219
|
+
const expectedPackets = Math.ceil((this.responseBuffer.length + 7) / (HID_PACKET_SIZE - 5));
|
|
220
|
+
const isComplete = sequence >= expectedPackets - 1;
|
|
221
|
+
if (isComplete && this.pendingResolve) {
|
|
222
|
+
this.pendingResolve(this.responseBuffer);
|
|
223
|
+
this.pendingResolve = null;
|
|
224
|
+
this.pendingReject = null;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Wait for response with timeout
|
|
229
|
+
*/
|
|
230
|
+
waitForResponse(timeout) {
|
|
231
|
+
return new Promise((resolve, reject) => {
|
|
232
|
+
this.pendingResolve = resolve;
|
|
233
|
+
this.pendingReject = reject;
|
|
234
|
+
this.responseBuffer = new Uint8Array(0);
|
|
235
|
+
const timeoutId = setTimeout(() => {
|
|
236
|
+
this.pendingResolve = null;
|
|
237
|
+
this.pendingReject = null;
|
|
238
|
+
reject((0, errors_1.createHardwareError)(types_1.HardwareErrorCode.TIMEOUT));
|
|
239
|
+
}, timeout);
|
|
240
|
+
// Store original resolve to clear timeout
|
|
241
|
+
const originalResolve = this.pendingResolve;
|
|
242
|
+
this.pendingResolve = (data) => {
|
|
243
|
+
clearTimeout(timeoutId);
|
|
244
|
+
originalResolve(data);
|
|
245
|
+
};
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
exports.LedgerTransport = LedgerTransport;
|
|
250
|
+
/**
|
|
251
|
+
* Detect Ledger model from product ID
|
|
252
|
+
*/
|
|
253
|
+
function detectLedgerModel(productId) {
|
|
254
|
+
switch (productId) {
|
|
255
|
+
case types_1.LEDGER_PRODUCT_IDS.NANO_S:
|
|
256
|
+
return 'nano-s';
|
|
257
|
+
case types_1.LEDGER_PRODUCT_IDS.NANO_S_PLUS:
|
|
258
|
+
return 'nano-s-plus';
|
|
259
|
+
case types_1.LEDGER_PRODUCT_IDS.NANO_X:
|
|
260
|
+
return 'nano-x';
|
|
261
|
+
case types_1.LEDGER_PRODUCT_IDS.STAX:
|
|
262
|
+
return 'stax';
|
|
263
|
+
default:
|
|
264
|
+
return 'unknown';
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
//# sourceMappingURL=transport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../../src/hardware/transport.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hardware Wallet Types
|
|
3
|
+
*
|
|
4
|
+
* Types, constants, and interfaces for hardware wallet support
|
|
5
|
+
*/
|
|
6
|
+
export type HardwareWalletType = 'ledger' | 'trezor';
|
|
7
|
+
/** NEAR app CLA byte */
|
|
8
|
+
export declare const NEAR_CLA = 128;
|
|
9
|
+
/** NEAR app instruction codes */
|
|
10
|
+
export declare const NEAR_INS: {
|
|
11
|
+
readonly GET_VERSION: 0;
|
|
12
|
+
readonly GET_PUBLIC_KEY: 4;
|
|
13
|
+
readonly SIGN_TRANSACTION: 2;
|
|
14
|
+
readonly SIGN_NEP413_MESSAGE: 7;
|
|
15
|
+
};
|
|
16
|
+
/** Ledger status codes */
|
|
17
|
+
export declare const LEDGER_STATUS: {
|
|
18
|
+
readonly OK: 36864;
|
|
19
|
+
readonly WRONG_LENGTH: 26368;
|
|
20
|
+
readonly INVALID_DATA: 27264;
|
|
21
|
+
readonly CONDITIONS_NOT_SATISFIED: 27013;
|
|
22
|
+
readonly COMMAND_NOT_ALLOWED: 27014;
|
|
23
|
+
readonly INS_NOT_SUPPORTED: 27904;
|
|
24
|
+
readonly CLA_NOT_SUPPORTED: 28160;
|
|
25
|
+
readonly APP_NOT_OPEN: 28161;
|
|
26
|
+
readonly UNKNOWN: 28416;
|
|
27
|
+
readonly USER_REJECTED: 27013;
|
|
28
|
+
readonly DEVICE_LOCKED: 27010;
|
|
29
|
+
};
|
|
30
|
+
/** Default BIP44 derivation path for NEAR */
|
|
31
|
+
export declare const DEFAULT_DERIVATION_PATH = "44'/397'/0'/0'/1'";
|
|
32
|
+
/** Ledger device product IDs for model detection */
|
|
33
|
+
export declare const LEDGER_PRODUCT_IDS: {
|
|
34
|
+
readonly NANO_S: 4113;
|
|
35
|
+
readonly NANO_S_PLUS: 20497;
|
|
36
|
+
readonly NANO_X: 16401;
|
|
37
|
+
readonly STAX: 24593;
|
|
38
|
+
};
|
|
39
|
+
export declare enum HardwareErrorCode {
|
|
40
|
+
DEVICE_NOT_FOUND = "DEVICE_NOT_FOUND",
|
|
41
|
+
DEVICE_LOCKED = "DEVICE_LOCKED",
|
|
42
|
+
DEVICE_BUSY = "DEVICE_BUSY",
|
|
43
|
+
CONNECTION_FAILED = "CONNECTION_FAILED",
|
|
44
|
+
DISCONNECTED = "DISCONNECTED",
|
|
45
|
+
APP_NOT_OPEN = "APP_NOT_OPEN",
|
|
46
|
+
WRONG_APP = "WRONG_APP",
|
|
47
|
+
APP_VERSION_UNSUPPORTED = "APP_VERSION_UNSUPPORTED",
|
|
48
|
+
USER_REJECTED = "USER_REJECTED",
|
|
49
|
+
TIMEOUT = "TIMEOUT",
|
|
50
|
+
INVALID_DATA = "INVALID_DATA",
|
|
51
|
+
DERIVATION_PATH_ERROR = "DERIVATION_PATH_ERROR",
|
|
52
|
+
TRANSACTION_TOO_LARGE = "TRANSACTION_TOO_LARGE",
|
|
53
|
+
TRANSPORT_ERROR = "TRANSPORT_ERROR",
|
|
54
|
+
WEBHID_NOT_SUPPORTED = "WEBHID_NOT_SUPPORTED",
|
|
55
|
+
UNKNOWN = "UNKNOWN"
|
|
56
|
+
}
|
|
57
|
+
export interface LedgerConfig {
|
|
58
|
+
enabled?: boolean;
|
|
59
|
+
derivationPath?: string;
|
|
60
|
+
}
|
|
61
|
+
export interface TrezorConfig {
|
|
62
|
+
enabled?: boolean;
|
|
63
|
+
derivationPath?: string;
|
|
64
|
+
}
|
|
65
|
+
export interface HardwareConfig {
|
|
66
|
+
ledger?: LedgerConfig | boolean;
|
|
67
|
+
trezor?: TrezorConfig | boolean;
|
|
68
|
+
}
|
|
69
|
+
export type LedgerModel = 'nano-s' | 'nano-s-plus' | 'nano-x' | 'stax' | 'unknown';
|
|
70
|
+
export interface LedgerDeviceInfo {
|
|
71
|
+
model: LedgerModel;
|
|
72
|
+
nearAppVersion?: string;
|
|
73
|
+
}
|
|
74
|
+
export interface APDUCommand {
|
|
75
|
+
cla: number;
|
|
76
|
+
ins: number;
|
|
77
|
+
p1: number;
|
|
78
|
+
p2: number;
|
|
79
|
+
data?: Uint8Array;
|
|
80
|
+
}
|
|
81
|
+
export interface APDUResponse {
|
|
82
|
+
data: Uint8Array;
|
|
83
|
+
statusCode: number;
|
|
84
|
+
}
|
|
85
|
+
export interface HardwareWaitingEvent {
|
|
86
|
+
walletId: string;
|
|
87
|
+
action: 'connect' | 'get_public_key' | 'sign' | 'sign_message';
|
|
88
|
+
message: string;
|
|
89
|
+
}
|
|
90
|
+
export interface HardwareConfirmEvent {
|
|
91
|
+
walletId: string;
|
|
92
|
+
action: 'connect' | 'get_public_key' | 'sign' | 'sign_message';
|
|
93
|
+
}
|
|
94
|
+
export interface HardwareRejectedEvent {
|
|
95
|
+
walletId: string;
|
|
96
|
+
action: 'connect' | 'get_public_key' | 'sign' | 'sign_message';
|
|
97
|
+
reason: string;
|
|
98
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Hardware Wallet Types
|
|
4
|
+
*
|
|
5
|
+
* Types, constants, and interfaces for hardware wallet support
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.HardwareErrorCode = exports.LEDGER_PRODUCT_IDS = exports.DEFAULT_DERIVATION_PATH = exports.LEDGER_STATUS = exports.NEAR_INS = exports.NEAR_CLA = void 0;
|
|
9
|
+
// =============================================================================
|
|
10
|
+
// Ledger Constants
|
|
11
|
+
// =============================================================================
|
|
12
|
+
/** NEAR app CLA byte */
|
|
13
|
+
exports.NEAR_CLA = 0x80;
|
|
14
|
+
/** NEAR app instruction codes */
|
|
15
|
+
exports.NEAR_INS = {
|
|
16
|
+
GET_VERSION: 0x00,
|
|
17
|
+
GET_PUBLIC_KEY: 0x04,
|
|
18
|
+
SIGN_TRANSACTION: 0x02,
|
|
19
|
+
SIGN_NEP413_MESSAGE: 0x07,
|
|
20
|
+
};
|
|
21
|
+
/** Ledger status codes */
|
|
22
|
+
exports.LEDGER_STATUS = {
|
|
23
|
+
OK: 0x9000,
|
|
24
|
+
WRONG_LENGTH: 0x6700,
|
|
25
|
+
INVALID_DATA: 0x6a80,
|
|
26
|
+
CONDITIONS_NOT_SATISFIED: 0x6985,
|
|
27
|
+
COMMAND_NOT_ALLOWED: 0x6986,
|
|
28
|
+
INS_NOT_SUPPORTED: 0x6d00,
|
|
29
|
+
CLA_NOT_SUPPORTED: 0x6e00,
|
|
30
|
+
APP_NOT_OPEN: 0x6e01,
|
|
31
|
+
UNKNOWN: 0x6f00,
|
|
32
|
+
USER_REJECTED: 0x6985,
|
|
33
|
+
DEVICE_LOCKED: 0x6982,
|
|
34
|
+
};
|
|
35
|
+
/** Default BIP44 derivation path for NEAR */
|
|
36
|
+
exports.DEFAULT_DERIVATION_PATH = "44'/397'/0'/0'/1'";
|
|
37
|
+
/** Ledger device product IDs for model detection */
|
|
38
|
+
exports.LEDGER_PRODUCT_IDS = {
|
|
39
|
+
NANO_S: 0x1011,
|
|
40
|
+
NANO_S_PLUS: 0x5011,
|
|
41
|
+
NANO_X: 0x4011,
|
|
42
|
+
STAX: 0x6011,
|
|
43
|
+
};
|
|
44
|
+
// =============================================================================
|
|
45
|
+
// Hardware Error Codes
|
|
46
|
+
// =============================================================================
|
|
47
|
+
var HardwareErrorCode;
|
|
48
|
+
(function (HardwareErrorCode) {
|
|
49
|
+
// Device errors
|
|
50
|
+
HardwareErrorCode["DEVICE_NOT_FOUND"] = "DEVICE_NOT_FOUND";
|
|
51
|
+
HardwareErrorCode["DEVICE_LOCKED"] = "DEVICE_LOCKED";
|
|
52
|
+
HardwareErrorCode["DEVICE_BUSY"] = "DEVICE_BUSY";
|
|
53
|
+
HardwareErrorCode["CONNECTION_FAILED"] = "CONNECTION_FAILED";
|
|
54
|
+
HardwareErrorCode["DISCONNECTED"] = "DISCONNECTED";
|
|
55
|
+
// App errors
|
|
56
|
+
HardwareErrorCode["APP_NOT_OPEN"] = "APP_NOT_OPEN";
|
|
57
|
+
HardwareErrorCode["WRONG_APP"] = "WRONG_APP";
|
|
58
|
+
HardwareErrorCode["APP_VERSION_UNSUPPORTED"] = "APP_VERSION_UNSUPPORTED";
|
|
59
|
+
// User errors
|
|
60
|
+
HardwareErrorCode["USER_REJECTED"] = "USER_REJECTED";
|
|
61
|
+
HardwareErrorCode["TIMEOUT"] = "TIMEOUT";
|
|
62
|
+
// Data errors
|
|
63
|
+
HardwareErrorCode["INVALID_DATA"] = "INVALID_DATA";
|
|
64
|
+
HardwareErrorCode["DERIVATION_PATH_ERROR"] = "DERIVATION_PATH_ERROR";
|
|
65
|
+
HardwareErrorCode["TRANSACTION_TOO_LARGE"] = "TRANSACTION_TOO_LARGE";
|
|
66
|
+
// Transport errors
|
|
67
|
+
HardwareErrorCode["TRANSPORT_ERROR"] = "TRANSPORT_ERROR";
|
|
68
|
+
HardwareErrorCode["WEBHID_NOT_SUPPORTED"] = "WEBHID_NOT_SUPPORTED";
|
|
69
|
+
// Unknown
|
|
70
|
+
HardwareErrorCode["UNKNOWN"] = "UNKNOWN";
|
|
71
|
+
})(HardwareErrorCode || (exports.HardwareErrorCode = HardwareErrorCode = {}));
|
|
72
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/hardware/types.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAQH,gFAAgF;AAChF,mBAAmB;AACnB,gFAAgF;AAEhF,wBAAwB;AACX,QAAA,QAAQ,GAAG,IAAI,CAAC;AAE7B,iCAAiC;AACpB,QAAA,QAAQ,GAAG;IACtB,WAAW,EAAE,IAAI;IACjB,cAAc,EAAE,IAAI;IACpB,gBAAgB,EAAE,IAAI;IACtB,mBAAmB,EAAE,IAAI;CACjB,CAAC;AAEX,0BAA0B;AACb,QAAA,aAAa,GAAG;IAC3B,EAAE,EAAE,MAAM;IACV,YAAY,EAAE,MAAM;IACpB,YAAY,EAAE,MAAM;IACpB,wBAAwB,EAAE,MAAM;IAChC,mBAAmB,EAAE,MAAM;IAC3B,iBAAiB,EAAE,MAAM;IACzB,iBAAiB,EAAE,MAAM;IACzB,YAAY,EAAE,MAAM;IACpB,OAAO,EAAE,MAAM;IACf,aAAa,EAAE,MAAM;IACrB,aAAa,EAAE,MAAM;CACb,CAAC;AAEX,6CAA6C;AAChC,QAAA,uBAAuB,GAAG,mBAAmB,CAAC;AAE3D,oDAAoD;AACvC,QAAA,kBAAkB,GAAG;IAChC,MAAM,EAAE,MAAM;IACd,WAAW,EAAE,MAAM;IACnB,MAAM,EAAE,MAAM;IACd,IAAI,EAAE,MAAM;CACJ,CAAC;AAEX,gFAAgF;AAChF,uBAAuB;AACvB,gFAAgF;AAEhF,IAAY,iBA4BX;AA5BD,WAAY,iBAAiB;IAC3B,gBAAgB;IAChB,0DAAqC,CAAA;IACrC,oDAA+B,CAAA;IAC/B,gDAA2B,CAAA;IAC3B,4DAAuC,CAAA;IACvC,kDAA6B,CAAA;IAE7B,aAAa;IACb,kDAA6B,CAAA;IAC7B,4CAAuB,CAAA;IACvB,wEAAmD,CAAA;IAEnD,cAAc;IACd,oDAA+B,CAAA;IAC/B,wCAAmB,CAAA;IAEnB,cAAc;IACd,kDAA6B,CAAA;IAC7B,oEAA+C,CAAA;IAC/C,oEAA+C,CAAA;IAE/C,mBAAmB;IACnB,wDAAmC,CAAA;IACnC,kEAA6C,CAAA;IAE7C,UAAU;IACV,wCAAmB,CAAA;AACrB,CAAC,EA5BW,iBAAiB,iCAAjB,iBAAiB,QA4B5B"}
|