sol-trade-sdk 0.1.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 (87) hide show
  1. package/README.md +390 -0
  2. package/dist/chunk-MMQAMIKR.mjs +3735 -0
  3. package/dist/chunk-NEZDFAYA.mjs +7744 -0
  4. package/dist/clients-VITWK7B6.mjs +1370 -0
  5. package/dist/index-1BK_FXsW.d.mts +2327 -0
  6. package/dist/index-1BK_FXsW.d.ts +2327 -0
  7. package/dist/index.d.mts +2659 -0
  8. package/dist/index.d.ts +2659 -0
  9. package/dist/index.js +13265 -0
  10. package/dist/index.mjs +562 -0
  11. package/dist/perf/index.d.mts +2 -0
  12. package/dist/perf/index.d.ts +2 -0
  13. package/dist/perf/index.js +3742 -0
  14. package/dist/perf/index.mjs +214 -0
  15. package/package.json +101 -0
  16. package/src/__tests__/complete_sdk.test.ts +354 -0
  17. package/src/__tests__/hotpath.test.ts +486 -0
  18. package/src/__tests__/nonce.test.ts +45 -0
  19. package/src/__tests__/sdk.test.ts +425 -0
  20. package/src/address-lookup/index.ts +197 -0
  21. package/src/cache/cache.ts +308 -0
  22. package/src/calc/index.ts +1058 -0
  23. package/src/calc/pumpfun.ts +124 -0
  24. package/src/common/bonding_curve.ts +272 -0
  25. package/src/common/compute-budget.ts +148 -0
  26. package/src/common/confirm-any-signature.ts +184 -0
  27. package/src/common/fast-timing.ts +481 -0
  28. package/src/common/fast_fn.ts +150 -0
  29. package/src/common/gas-fee-strategy.ts +253 -0
  30. package/src/common/map-pool.ts +23 -0
  31. package/src/common/nonce.ts +40 -0
  32. package/src/common/sdk-log.ts +460 -0
  33. package/src/common/seed.ts +381 -0
  34. package/src/common/spl-token.ts +578 -0
  35. package/src/common/subscription-handle.ts +644 -0
  36. package/src/common/trading-utils.ts +239 -0
  37. package/src/common/wsol-manager.ts +325 -0
  38. package/src/compute/compute_budget_manager.ts +187 -0
  39. package/src/compute/index.ts +21 -0
  40. package/src/constants/index.ts +96 -0
  41. package/src/execution/execution.ts +532 -0
  42. package/src/execution/index.ts +42 -0
  43. package/src/hotpath/executor.ts +464 -0
  44. package/src/hotpath/index.ts +64 -0
  45. package/src/hotpath/state.ts +435 -0
  46. package/src/index.ts +2117 -0
  47. package/src/instruction/bonk_builder.ts +730 -0
  48. package/src/instruction/index.ts +24 -0
  49. package/src/instruction/meteora_damm_v2_builder.ts +509 -0
  50. package/src/instruction/pumpfun_builder.ts +1183 -0
  51. package/src/instruction/pumpswap.ts +1123 -0
  52. package/src/instruction/raydium_amm_v4_builder.ts +692 -0
  53. package/src/instruction/raydium_cpmm_builder.ts +795 -0
  54. package/src/middleware/traits.ts +407 -0
  55. package/src/params/index.ts +483 -0
  56. package/src/perf/compiler-optimization.ts +529 -0
  57. package/src/perf/hardware.ts +631 -0
  58. package/src/perf/index.ts +9 -0
  59. package/src/perf/kernel-bypass.ts +656 -0
  60. package/src/perf/protocol.ts +682 -0
  61. package/src/perf/realtime.ts +592 -0
  62. package/src/perf/simd.ts +668 -0
  63. package/src/perf/syscall-bypass.ts +331 -0
  64. package/src/perf/ultra-low-latency.ts +505 -0
  65. package/src/perf/zero-copy.ts +589 -0
  66. package/src/pool/pool.ts +294 -0
  67. package/src/rpc/client.ts +345 -0
  68. package/src/sdk-errors.ts +13 -0
  69. package/src/security/index.ts +26 -0
  70. package/src/security/secure-key.ts +303 -0
  71. package/src/security/validators.ts +281 -0
  72. package/src/seed/pda.ts +262 -0
  73. package/src/serialization/index.ts +28 -0
  74. package/src/serialization/serialization.ts +288 -0
  75. package/src/swqos/clients.ts +1754 -0
  76. package/src/swqos/index.ts +50 -0
  77. package/src/swqos/providers.ts +1707 -0
  78. package/src/trading/core/async-executor.ts +702 -0
  79. package/src/trading/core/confirmation-monitor.ts +711 -0
  80. package/src/trading/core/index.ts +82 -0
  81. package/src/trading/core/retry-handler.ts +683 -0
  82. package/src/trading/core/transaction-pool.ts +780 -0
  83. package/src/trading/executor.ts +385 -0
  84. package/src/trading/factory.ts +282 -0
  85. package/src/trading/index.ts +30 -0
  86. package/src/types.ts +8 -0
  87. package/src/utils/index.ts +155 -0
@@ -0,0 +1,460 @@
1
+ /**
2
+ * SDK Logging module for Sol Trade SDK
3
+ * Provides structured logging with multiple log levels and output formats.
4
+ */
5
+
6
+ // ===== Log Level Enum =====
7
+
8
+ /**
9
+ * Log level severity
10
+ */
11
+ export enum LogLevel {
12
+ DEBUG = 0,
13
+ INFO = 1,
14
+ WARN = 2,
15
+ ERROR = 3,
16
+ FATAL = 4,
17
+ NONE = 5,
18
+ }
19
+
20
+ /**
21
+ * Get log level name
22
+ */
23
+ export function getLogLevelName(level: LogLevel): string {
24
+ switch (level) {
25
+ case LogLevel.DEBUG:
26
+ return 'DEBUG';
27
+ case LogLevel.INFO:
28
+ return 'INFO';
29
+ case LogLevel.WARN:
30
+ return 'WARN';
31
+ case LogLevel.ERROR:
32
+ return 'ERROR';
33
+ case LogLevel.FATAL:
34
+ return 'FATAL';
35
+ case LogLevel.NONE:
36
+ return 'NONE';
37
+ default:
38
+ return 'UNKNOWN';
39
+ }
40
+ }
41
+
42
+ /**
43
+ * Parse log level from string
44
+ */
45
+ export function parseLogLevel(level: string): LogLevel {
46
+ switch (level.toUpperCase()) {
47
+ case 'DEBUG':
48
+ return LogLevel.DEBUG;
49
+ case 'INFO':
50
+ return LogLevel.INFO;
51
+ case 'WARN':
52
+ case 'WARNING':
53
+ return LogLevel.WARN;
54
+ case 'ERROR':
55
+ return LogLevel.ERROR;
56
+ case 'FATAL':
57
+ return LogLevel.FATAL;
58
+ case 'NONE':
59
+ return LogLevel.NONE;
60
+ default:
61
+ return LogLevel.INFO;
62
+ }
63
+ }
64
+
65
+ // ===== Log Entry Types =====
66
+
67
+ /**
68
+ * Log entry metadata
69
+ */
70
+ export interface LogMetadata {
71
+ [key: string]: unknown;
72
+ }
73
+
74
+ /**
75
+ * Log entry structure
76
+ */
77
+ export interface LogEntry {
78
+ timestamp: Date;
79
+ level: LogLevel;
80
+ levelName: string;
81
+ message: string;
82
+ context?: string;
83
+ metadata?: LogMetadata;
84
+ error?: Error;
85
+ }
86
+
87
+ /**
88
+ * Log formatter type
89
+ */
90
+ export type LogFormatter = (entry: LogEntry) => string;
91
+
92
+ // ===== Default Formatters =====
93
+
94
+ /**
95
+ * Simple text formatter
96
+ */
97
+ export function simpleFormatter(entry: LogEntry): string {
98
+ const timestamp = entry.timestamp.toISOString();
99
+ const context = entry.context ? `[${entry.context}] ` : '';
100
+ return `${timestamp} [${entry.levelName}] ${context}${entry.message}`;
101
+ }
102
+
103
+ /**
104
+ * Colored formatter for terminal output
105
+ */
106
+ export function coloredFormatter(entry: LogEntry): string {
107
+ const timestamp = entry.timestamp.toISOString();
108
+ const context = entry.context ? `[${entry.context}] ` : '';
109
+
110
+ const colors: Record<LogLevel, string> = {
111
+ [LogLevel.DEBUG]: '\x1b[36m', // Cyan
112
+ [LogLevel.INFO]: '\x1b[32m', // Green
113
+ [LogLevel.WARN]: '\x1b[33m', // Yellow
114
+ [LogLevel.ERROR]: '\x1b[31m', // Red
115
+ [LogLevel.FATAL]: '\x1b[35m', // Magenta
116
+ [LogLevel.NONE]: '\x1b[0m', // Reset
117
+ };
118
+
119
+ const reset = '\x1b[0m';
120
+ const color = colors[entry.level] || '';
121
+
122
+ return `${timestamp} ${color}[${entry.levelName}]${reset} ${context}${entry.message}`;
123
+ }
124
+
125
+ /**
126
+ * JSON formatter for structured logging
127
+ */
128
+ export function jsonFormatter(entry: LogEntry): string {
129
+ const logObj: Record<string, unknown> = {
130
+ timestamp: entry.timestamp.toISOString(),
131
+ level: entry.levelName,
132
+ message: entry.message,
133
+ };
134
+
135
+ if (entry.context) {
136
+ logObj.context = entry.context;
137
+ }
138
+
139
+ if (entry.metadata) {
140
+ logObj.metadata = entry.metadata;
141
+ }
142
+
143
+ if (entry.error) {
144
+ logObj.error = {
145
+ name: entry.error.name,
146
+ message: entry.error.message,
147
+ stack: entry.error.stack,
148
+ };
149
+ }
150
+
151
+ return JSON.stringify(logObj);
152
+ }
153
+
154
+ // ===== Log Output Interface =====
155
+
156
+ /**
157
+ * Log output destination
158
+ */
159
+ export interface LogOutput {
160
+ write(entry: LogEntry, formatted: string): void;
161
+ flush?(): void;
162
+ }
163
+
164
+ /**
165
+ * Console log output
166
+ */
167
+ export class ConsoleOutput implements LogOutput {
168
+ private useStderr: boolean;
169
+
170
+ constructor(useStderr: boolean = false) {
171
+ this.useStderr = useStderr;
172
+ }
173
+
174
+ write(entry: LogEntry, formatted: string): void {
175
+ if (this.useStderr && entry.level >= LogLevel.ERROR) {
176
+ console.error(formatted);
177
+ } else {
178
+ console.log(formatted);
179
+ }
180
+ }
181
+ }
182
+
183
+ /**
184
+ * Memory buffer output (for testing)
185
+ */
186
+ export class MemoryOutput implements LogOutput {
187
+ private entries: LogEntry[] = [];
188
+
189
+ write(entry: LogEntry): void {
190
+ this.entries.push(entry);
191
+ }
192
+
193
+ getEntries(): LogEntry[] {
194
+ return [...this.entries];
195
+ }
196
+
197
+ clear(): void {
198
+ this.entries = [];
199
+ }
200
+ }
201
+
202
+ /**
203
+ * Callback output for custom handling
204
+ */
205
+ export class CallbackOutput implements LogOutput {
206
+ constructor(private callback: (entry: LogEntry) => void) {}
207
+
208
+ write(entry: LogEntry): void {
209
+ this.callback(entry);
210
+ }
211
+ }
212
+
213
+ // ===== SDK Logger =====
214
+
215
+ /**
216
+ * SDK Logger configuration
217
+ */
218
+ export interface SDKLoggerConfig {
219
+ level: LogLevel;
220
+ formatter: LogFormatter;
221
+ outputs: LogOutput[];
222
+ context?: string;
223
+ includeTimestamp?: boolean;
224
+ }
225
+
226
+ /**
227
+ * SDK Logger class
228
+ */
229
+ export class SDKLogger {
230
+ private config: SDKLoggerConfig;
231
+
232
+ constructor(config: Partial<SDKLoggerConfig> = {}) {
233
+ this.config = {
234
+ level: LogLevel.INFO,
235
+ formatter: simpleFormatter,
236
+ outputs: [new ConsoleOutput()],
237
+ context: undefined,
238
+ includeTimestamp: true,
239
+ ...config,
240
+ };
241
+ }
242
+
243
+ /**
244
+ * Check if a log level is enabled
245
+ */
246
+ isEnabled(level: LogLevel): boolean {
247
+ return level >= this.config.level;
248
+ }
249
+
250
+ /**
251
+ * Log a message at the specified level
252
+ */
253
+ log(level: LogLevel, message: string, metadata?: LogMetadata, error?: Error): void {
254
+ if (!this.isEnabled(level)) {
255
+ return;
256
+ }
257
+
258
+ const entry: LogEntry = {
259
+ timestamp: new Date(),
260
+ level,
261
+ levelName: getLogLevelName(level),
262
+ message,
263
+ context: this.config.context,
264
+ metadata,
265
+ error,
266
+ };
267
+
268
+ const formatted = this.config.formatter(entry);
269
+
270
+ for (const output of this.config.outputs) {
271
+ output.write(entry, formatted);
272
+ }
273
+ }
274
+
275
+ /**
276
+ * Log debug message
277
+ */
278
+ debug(message: string, metadata?: LogMetadata): void {
279
+ this.log(LogLevel.DEBUG, message, metadata);
280
+ }
281
+
282
+ /**
283
+ * Log info message
284
+ */
285
+ info(message: string, metadata?: LogMetadata): void {
286
+ this.log(LogLevel.INFO, message, metadata);
287
+ }
288
+
289
+ /**
290
+ * Log warning message
291
+ */
292
+ warn(message: string, metadata?: LogMetadata, error?: Error): void {
293
+ this.log(LogLevel.WARN, message, metadata, error);
294
+ }
295
+
296
+ /**
297
+ * Log error message
298
+ */
299
+ error(message: string, metadata?: LogMetadata, error?: Error): void {
300
+ this.log(LogLevel.ERROR, message, metadata, error);
301
+ }
302
+
303
+ /**
304
+ * Log fatal message
305
+ */
306
+ fatal(message: string, metadata?: LogMetadata, error?: Error): void {
307
+ this.log(LogLevel.FATAL, message, metadata, error);
308
+ }
309
+
310
+ /**
311
+ * Create a child logger with a specific context
312
+ */
313
+ child(context: string): SDKLogger {
314
+ return new SDKLogger({
315
+ ...this.config,
316
+ context: this.config.context ? `${this.config.context}.${context}` : context,
317
+ });
318
+ }
319
+
320
+ /**
321
+ * Update logger configuration
322
+ */
323
+ setConfig(config: Partial<SDKLoggerConfig>): void {
324
+ this.config = { ...this.config, ...config };
325
+ }
326
+
327
+ /**
328
+ * Set log level
329
+ */
330
+ setLevel(level: LogLevel): void {
331
+ this.config.level = level;
332
+ }
333
+
334
+ /**
335
+ * Get current log level
336
+ */
337
+ getLevel(): LogLevel {
338
+ return this.config.level;
339
+ }
340
+
341
+ /**
342
+ * Add an output destination
343
+ */
344
+ addOutput(output: LogOutput): void {
345
+ this.config.outputs.push(output);
346
+ }
347
+
348
+ /**
349
+ * Remove all outputs
350
+ */
351
+ clearOutputs(): void {
352
+ this.config.outputs = [];
353
+ }
354
+ }
355
+
356
+ // ===== Global Logger Instance =====
357
+
358
+ let globalLogger: SDKLogger | null = null;
359
+
360
+ /**
361
+ * Get the global logger instance
362
+ */
363
+ export function getLogger(): SDKLogger {
364
+ if (!globalLogger) {
365
+ globalLogger = new SDKLogger();
366
+ }
367
+ return globalLogger;
368
+ }
369
+
370
+ /**
371
+ * Set the global logger instance
372
+ */
373
+ export function setLogger(logger: SDKLogger): void {
374
+ globalLogger = logger;
375
+ }
376
+
377
+ // ===== Setup Functions =====
378
+
379
+ /**
380
+ * Setup logging configuration
381
+ */
382
+ export interface LoggingSetup {
383
+ level?: LogLevel | string;
384
+ format?: 'simple' | 'colored' | 'json';
385
+ outputs?: LogOutput[];
386
+ context?: string;
387
+ }
388
+
389
+ /**
390
+ * Setup logging with the specified configuration
391
+ */
392
+ export function setupLogging(setup: LoggingSetup = {}): SDKLogger {
393
+ const level = typeof setup.level === 'string' ? parseLogLevel(setup.level) : (setup.level ?? LogLevel.INFO);
394
+
395
+ let formatter: LogFormatter;
396
+ switch (setup.format) {
397
+ case 'json':
398
+ formatter = jsonFormatter;
399
+ break;
400
+ case 'colored':
401
+ formatter = coloredFormatter;
402
+ break;
403
+ case 'simple':
404
+ default:
405
+ formatter = simpleFormatter;
406
+ break;
407
+ }
408
+
409
+ const logger = new SDKLogger({
410
+ level,
411
+ formatter,
412
+ outputs: setup.outputs ?? [new ConsoleOutput()],
413
+ context: setup.context,
414
+ });
415
+
416
+ setLogger(logger);
417
+ return logger;
418
+ }
419
+
420
+ /**
421
+ * Setup development logging (colored, verbose)
422
+ */
423
+ export function setupDevLogging(): SDKLogger {
424
+ return setupLogging({
425
+ level: LogLevel.DEBUG,
426
+ format: 'colored',
427
+ });
428
+ }
429
+
430
+ /**
431
+ * Setup production logging (JSON, info level)
432
+ */
433
+ export function setupProdLogging(): SDKLogger {
434
+ return setupLogging({
435
+ level: LogLevel.INFO,
436
+ format: 'json',
437
+ });
438
+ }
439
+
440
+ /**
441
+ * Disable all logging
442
+ */
443
+ export function disableLogging(): void {
444
+ setupLogging({
445
+ level: LogLevel.NONE,
446
+ });
447
+ }
448
+
449
+ // ===== Convenience Exports =====
450
+
451
+ /**
452
+ * Quick log functions using global logger
453
+ */
454
+ export const log = {
455
+ debug: (message: string, metadata?: LogMetadata) => getLogger().debug(message, metadata),
456
+ info: (message: string, metadata?: LogMetadata) => getLogger().info(message, metadata),
457
+ warn: (message: string, metadata?: LogMetadata, error?: Error) => getLogger().warn(message, metadata, error),
458
+ error: (message: string, metadata?: LogMetadata, error?: Error) => getLogger().error(message, metadata, error),
459
+ fatal: (message: string, metadata?: LogMetadata, error?: Error) => getLogger().fatal(message, metadata, error),
460
+ };