@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.
Files changed (52) hide show
  1. package/dist/api/BaseMethod.d.ts +5 -0
  2. package/dist/api/BaseMethod.d.ts.map +1 -1
  3. package/dist/api/FirmwareUpdate.d.ts.map +1 -1
  4. package/dist/api/FirmwareUpdateV2.d.ts.map +1 -1
  5. package/dist/api/FirmwareUpdateV3.d.ts.map +1 -1
  6. package/dist/api/allnetwork/AllNetworkGetAddressBase.d.ts.map +1 -1
  7. package/dist/api/evm/EVMSignTypedData.d.ts.map +1 -1
  8. package/dist/api/firmware/FirmwareUpdateBaseMethod.d.ts +4 -4
  9. package/dist/api/firmware/FirmwareUpdateBaseMethod.d.ts.map +1 -1
  10. package/dist/api/firmware/bootloaderHelper.d.ts +1 -1
  11. package/dist/api/firmware/bootloaderHelper.d.ts.map +1 -1
  12. package/dist/api/firmware/updateBootloader.d.ts +1 -1
  13. package/dist/api/firmware/updateBootloader.d.ts.map +1 -1
  14. package/dist/api/firmware/uploadFirmware.d.ts +5 -5
  15. package/dist/api/firmware/uploadFirmware.d.ts.map +1 -1
  16. package/dist/core/index.d.ts +6 -3
  17. package/dist/core/index.d.ts.map +1 -1
  18. package/dist/device/Device.d.ts +5 -2
  19. package/dist/device/Device.d.ts.map +1 -1
  20. package/dist/device/DeviceCommands.d.ts +8 -6
  21. package/dist/device/DeviceCommands.d.ts.map +1 -1
  22. package/dist/index.d.ts +51 -6
  23. package/dist/index.js +404 -76
  24. package/dist/types/device.d.ts +3 -0
  25. package/dist/types/device.d.ts.map +1 -1
  26. package/dist/utils/index.d.ts +1 -0
  27. package/dist/utils/index.d.ts.map +1 -1
  28. package/dist/utils/logger.d.ts +1 -1
  29. package/dist/utils/logger.d.ts.map +1 -1
  30. package/dist/utils/patch.d.ts +1 -1
  31. package/dist/utils/patch.d.ts.map +1 -1
  32. package/dist/utils/tracing.d.ts +34 -0
  33. package/dist/utils/tracing.d.ts.map +1 -0
  34. package/package.json +4 -4
  35. package/src/api/BaseMethod.ts +38 -1
  36. package/src/api/FirmwareUpdate.ts +2 -1
  37. package/src/api/FirmwareUpdateV2.ts +2 -1
  38. package/src/api/FirmwareUpdateV3.ts +2 -0
  39. package/src/api/allnetwork/AllNetworkGetAddressBase.ts +46 -15
  40. package/src/api/evm/EVMSignTypedData.ts +8 -2
  41. package/src/api/firmware/FirmwareUpdateBaseMethod.ts +16 -18
  42. package/src/api/firmware/bootloaderHelper.ts +3 -1
  43. package/src/api/firmware/updateBootloader.ts +6 -3
  44. package/src/api/firmware/uploadFirmware.ts +87 -21
  45. package/src/core/index.ts +135 -27
  46. package/src/data/messages/messages.json +11 -1
  47. package/src/device/Device.ts +24 -3
  48. package/src/device/DeviceCommands.ts +55 -13
  49. package/src/types/device.ts +5 -0
  50. package/src/utils/index.ts +1 -0
  51. package/src/utils/logger.ts +3 -2
  52. 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
+ }