@onekeyfe/hd-core 1.1.19-alpha.0 → 1.1.19-alpha.2
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/dist/api/BaseMethod.d.ts +5 -0
- package/dist/api/BaseMethod.d.ts.map +1 -1
- package/dist/api/FirmwareUpdate.d.ts.map +1 -1
- package/dist/api/FirmwareUpdateV2.d.ts.map +1 -1
- package/dist/api/FirmwareUpdateV3.d.ts.map +1 -1
- package/dist/api/allnetwork/AllNetworkGetAddressBase.d.ts.map +1 -1
- package/dist/api/evm/EVMSignTypedData.d.ts.map +1 -1
- package/dist/api/firmware/FirmwareUpdateBaseMethod.d.ts +4 -4
- package/dist/api/firmware/FirmwareUpdateBaseMethod.d.ts.map +1 -1
- package/dist/api/firmware/bootloaderHelper.d.ts +1 -1
- package/dist/api/firmware/bootloaderHelper.d.ts.map +1 -1
- package/dist/api/firmware/updateBootloader.d.ts +1 -1
- package/dist/api/firmware/updateBootloader.d.ts.map +1 -1
- package/dist/api/firmware/uploadFirmware.d.ts +5 -5
- package/dist/api/firmware/uploadFirmware.d.ts.map +1 -1
- package/dist/core/index.d.ts +6 -3
- package/dist/core/index.d.ts.map +1 -1
- package/dist/device/Device.d.ts +5 -2
- package/dist/device/Device.d.ts.map +1 -1
- package/dist/device/DeviceCommands.d.ts +8 -6
- package/dist/device/DeviceCommands.d.ts.map +1 -1
- package/dist/index.d.ts +51 -6
- package/dist/index.js +404 -76
- package/dist/types/device.d.ts +3 -0
- package/dist/types/device.d.ts.map +1 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/logger.d.ts +1 -1
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/patch.d.ts +1 -1
- package/dist/utils/patch.d.ts.map +1 -1
- package/dist/utils/tracing.d.ts +34 -0
- package/dist/utils/tracing.d.ts.map +1 -0
- package/package.json +4 -4
- package/src/api/BaseMethod.ts +38 -1
- package/src/api/FirmwareUpdate.ts +2 -1
- package/src/api/FirmwareUpdateV2.ts +2 -1
- package/src/api/FirmwareUpdateV3.ts +2 -0
- package/src/api/allnetwork/AllNetworkGetAddressBase.ts +46 -15
- package/src/api/evm/EVMSignTypedData.ts +8 -2
- package/src/api/firmware/FirmwareUpdateBaseMethod.ts +16 -18
- package/src/api/firmware/bootloaderHelper.ts +3 -1
- package/src/api/firmware/updateBootloader.ts +6 -3
- package/src/api/firmware/uploadFirmware.ts +87 -21
- package/src/core/index.ts +135 -27
- package/src/data/messages/messages.json +11 -1
- package/src/device/Device.ts +24 -3
- package/src/device/DeviceCommands.ts +55 -13
- package/src/types/device.ts +5 -0
- package/src/utils/index.ts +1 -0
- package/src/utils/logger.ts +3 -2
- package/src/utils/tracing.ts +238 -0
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SDK Tracing Utilities
|
|
3
|
+
* Tracks object instances and request call chains across multiple SDK instances
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { getLogger, LoggerNames } from './logger';
|
|
7
|
+
|
|
8
|
+
// Global counters (cross-SDK instances)
|
|
9
|
+
|
|
10
|
+
const Log = getLogger(LoggerNames.Core);
|
|
11
|
+
|
|
12
|
+
let globalInstanceCounter = 0;
|
|
13
|
+
let sdkInstanceCounter = 0;
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Generate SDK instance ID
|
|
17
|
+
* @returns Format: "SDK-<number>-<timestamp>"
|
|
18
|
+
* @example "SDK-1-123456"
|
|
19
|
+
*/
|
|
20
|
+
export function generateSdkInstanceId(): string {
|
|
21
|
+
sdkInstanceCounter++;
|
|
22
|
+
const timestamp = Date.now().toString().slice(-6);
|
|
23
|
+
return `SDK-${sdkInstanceCounter}-${timestamp}`;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Generate globally unique instance ID
|
|
28
|
+
* @param type Instance type (Device, DeviceCommands, BaseMethod, etc.)
|
|
29
|
+
* @param sdkInstanceId SDK instance ID (optional)
|
|
30
|
+
* @returns Format: <SDK>.<type>-<number>-<timestamp>
|
|
31
|
+
* @example "SDK-1.Device-1-123456" or "Device-1-123456"
|
|
32
|
+
*/
|
|
33
|
+
export function generateInstanceId(type: string, sdkInstanceId?: string): string {
|
|
34
|
+
globalInstanceCounter++;
|
|
35
|
+
const timestamp = Date.now().toString().slice(-6);
|
|
36
|
+
const baseId = `${type}-${globalInstanceCounter}-${timestamp}`;
|
|
37
|
+
return sdkInstanceId ? `${sdkInstanceId}.${baseId}` : baseId;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// Request context management
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Request context information
|
|
44
|
+
*/
|
|
45
|
+
export interface RequestContext {
|
|
46
|
+
/** Request unique ID (reuses BaseMethod.responseID) */
|
|
47
|
+
responseID: number;
|
|
48
|
+
/** SDK instance ID */
|
|
49
|
+
sdkInstanceId?: string;
|
|
50
|
+
/** API method name */
|
|
51
|
+
methodName: string;
|
|
52
|
+
/** Device connection ID */
|
|
53
|
+
connectId?: string;
|
|
54
|
+
/** Device instance ID */
|
|
55
|
+
deviceInstanceId?: string;
|
|
56
|
+
/** DeviceCommands instance ID */
|
|
57
|
+
commandsInstanceId?: string;
|
|
58
|
+
/** Parent request ID (for nested calls like allNetworkGetAddress) */
|
|
59
|
+
parentResponseID?: number;
|
|
60
|
+
/** Request start time */
|
|
61
|
+
startTime: number;
|
|
62
|
+
/** Request end time */
|
|
63
|
+
endTime?: number;
|
|
64
|
+
/** Request status */
|
|
65
|
+
status?: 'pending' | 'running' | 'success' | 'error' | 'cancelled';
|
|
66
|
+
/** Error message */
|
|
67
|
+
error?: string;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* SDK instance tracing context
|
|
72
|
+
*/
|
|
73
|
+
export interface SdkTracingContext {
|
|
74
|
+
/** SDK instance ID */
|
|
75
|
+
sdkInstanceId: string;
|
|
76
|
+
/** Creation timestamp */
|
|
77
|
+
createdAt: number;
|
|
78
|
+
/** Active requests */
|
|
79
|
+
activeRequests: Map<number, RequestContext>;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// Global SDK instance tracking map
|
|
83
|
+
const sdkInstances = new Map<string, SdkTracingContext>();
|
|
84
|
+
|
|
85
|
+
// Global request map (cross-SDK instances for quick lookup)
|
|
86
|
+
const globalActiveRequests = new Map<number, RequestContext>();
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Create SDK instance tracing context
|
|
90
|
+
*/
|
|
91
|
+
export function createSdkTracingContext(): SdkTracingContext {
|
|
92
|
+
const sdkInstanceId = generateSdkInstanceId();
|
|
93
|
+
const context: SdkTracingContext = {
|
|
94
|
+
sdkInstanceId,
|
|
95
|
+
createdAt: Date.now(),
|
|
96
|
+
activeRequests: new Map(),
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
sdkInstances.set(sdkInstanceId, context);
|
|
100
|
+
|
|
101
|
+
return context;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Create and register request context
|
|
106
|
+
* @param responseID Request ID (reuses BaseMethod.responseID)
|
|
107
|
+
* @param methodName API method name
|
|
108
|
+
* @param options Additional options
|
|
109
|
+
*/
|
|
110
|
+
export function createRequestContext(
|
|
111
|
+
responseID: number,
|
|
112
|
+
methodName: string,
|
|
113
|
+
options?: {
|
|
114
|
+
sdkInstanceId?: string;
|
|
115
|
+
connectId?: string;
|
|
116
|
+
deviceInstanceId?: string;
|
|
117
|
+
commandsInstanceId?: string;
|
|
118
|
+
parentResponseID?: number;
|
|
119
|
+
}
|
|
120
|
+
): RequestContext {
|
|
121
|
+
const context: RequestContext = {
|
|
122
|
+
responseID,
|
|
123
|
+
sdkInstanceId: options?.sdkInstanceId,
|
|
124
|
+
methodName,
|
|
125
|
+
connectId: options?.connectId,
|
|
126
|
+
deviceInstanceId: options?.deviceInstanceId,
|
|
127
|
+
commandsInstanceId: options?.commandsInstanceId,
|
|
128
|
+
parentResponseID: options?.parentResponseID,
|
|
129
|
+
startTime: Date.now(),
|
|
130
|
+
status: 'pending',
|
|
131
|
+
};
|
|
132
|
+
|
|
133
|
+
// Register to global map
|
|
134
|
+
globalActiveRequests.set(context.responseID, context);
|
|
135
|
+
|
|
136
|
+
// Register to SDK instance map
|
|
137
|
+
if (options?.sdkInstanceId) {
|
|
138
|
+
const sdkContext = sdkInstances.get(options.sdkInstanceId);
|
|
139
|
+
if (sdkContext) {
|
|
140
|
+
sdkContext.activeRequests.set(context.responseID, context);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
return context;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Update request context
|
|
149
|
+
*/
|
|
150
|
+
export function updateRequestContext(responseID: number, updates: Partial<RequestContext>): void {
|
|
151
|
+
const context = globalActiveRequests.get(responseID);
|
|
152
|
+
if (context) {
|
|
153
|
+
Object.assign(context, updates);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* Complete request context
|
|
159
|
+
*/
|
|
160
|
+
export function completeRequestContext(responseID: number, error?: Error): void {
|
|
161
|
+
const context = globalActiveRequests.get(responseID);
|
|
162
|
+
if (context) {
|
|
163
|
+
context.endTime = Date.now();
|
|
164
|
+
context.status = error ? 'error' : 'success';
|
|
165
|
+
if (error) {
|
|
166
|
+
context.error = error.message;
|
|
167
|
+
Log.error(
|
|
168
|
+
`[RequestContext] [completeRequestContext] Error: ${formatRequestContext(context)}`
|
|
169
|
+
);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
// Remove from active list
|
|
173
|
+
globalActiveRequests.delete(responseID);
|
|
174
|
+
|
|
175
|
+
// Remove from SDK instance
|
|
176
|
+
if (context.sdkInstanceId) {
|
|
177
|
+
const sdkContext = sdkInstances.get(context.sdkInstanceId);
|
|
178
|
+
if (sdkContext) {
|
|
179
|
+
sdkContext.activeRequests.delete(responseID);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
// Query API
|
|
186
|
+
|
|
187
|
+
/**
|
|
188
|
+
* Get active requests for specific Device instance
|
|
189
|
+
*/
|
|
190
|
+
export function getActiveRequestsByDeviceInstance(deviceInstanceId: string): RequestContext[] {
|
|
191
|
+
return Array.from(globalActiveRequests.values()).filter(
|
|
192
|
+
ctx => ctx.deviceInstanceId === deviceInstanceId
|
|
193
|
+
);
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
// Format output
|
|
197
|
+
|
|
198
|
+
/**
|
|
199
|
+
* Format request context for logging
|
|
200
|
+
*/
|
|
201
|
+
export function formatRequestContext(context: RequestContext): string {
|
|
202
|
+
const duration = context.endTime
|
|
203
|
+
? context.endTime - context.startTime
|
|
204
|
+
: Date.now() - context.startTime;
|
|
205
|
+
|
|
206
|
+
const parts = [
|
|
207
|
+
`[req:${context.responseID}]`,
|
|
208
|
+
context.sdkInstanceId ? `sdk=${context.sdkInstanceId}` : null,
|
|
209
|
+
`method=${context.methodName}`,
|
|
210
|
+
context.connectId ? `connectId=${context.connectId}` : null,
|
|
211
|
+
context.deviceInstanceId ? `deviceInst=${context.deviceInstanceId}` : null,
|
|
212
|
+
context.commandsInstanceId ? `commandsInst=${context.commandsInstanceId}` : null,
|
|
213
|
+
context.parentResponseID ? `parent=${context.parentResponseID}` : null,
|
|
214
|
+
`duration=${duration}ms`,
|
|
215
|
+
`status=${context.status}`,
|
|
216
|
+
`error=${context.error}`,
|
|
217
|
+
].filter(Boolean);
|
|
218
|
+
|
|
219
|
+
return parts.join(' ');
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
// Cleanup and reset
|
|
223
|
+
|
|
224
|
+
/**
|
|
225
|
+
* Cleanup specific SDK instance
|
|
226
|
+
*/
|
|
227
|
+
export function cleanupSdkInstance(sdkInstanceId: string): void {
|
|
228
|
+
const sdkContext = sdkInstances.get(sdkInstanceId);
|
|
229
|
+
if (sdkContext) {
|
|
230
|
+
// Remove SDK requests from global active requests
|
|
231
|
+
for (const responseID of sdkContext.activeRequests.keys()) {
|
|
232
|
+
globalActiveRequests.delete(responseID);
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
// Remove SDK instance
|
|
236
|
+
sdkInstances.delete(sdkInstanceId);
|
|
237
|
+
}
|
|
238
|
+
}
|