lighter-ts-sdk 1.0.0 → 1.0.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 (89) hide show
  1. package/README.md +62 -49
  2. package/dist/api/transaction-api.d.ts +5 -1
  3. package/dist/api/transaction-api.d.ts.map +1 -1
  4. package/dist/api/transaction-api.js.map +1 -1
  5. package/dist/api/ws-order-client.d.ts +82 -0
  6. package/dist/api/ws-order-client.d.ts.map +1 -0
  7. package/dist/api/ws-order-client.js +281 -0
  8. package/dist/api/ws-order-client.js.map +1 -0
  9. package/dist/index.d.ts +1 -1
  10. package/dist/index.js +1 -1
  11. package/dist/signer/signer-client.d.ts.map +1 -1
  12. package/dist/signer/signer-client.js +5 -3
  13. package/dist/signer/signer-client.js.map +1 -1
  14. package/dist/signer/wasm-signer-client.d.ts +104 -10
  15. package/dist/signer/wasm-signer-client.d.ts.map +1 -1
  16. package/dist/signer/wasm-signer-client.js +643 -356
  17. package/dist/signer/wasm-signer-client.js.map +1 -1
  18. package/dist/utils/advanced-cache.d.ts +66 -0
  19. package/dist/utils/advanced-cache.d.ts.map +1 -0
  20. package/dist/utils/advanced-cache.js +204 -0
  21. package/dist/utils/advanced-cache.js.map +1 -0
  22. package/dist/utils/exceptions.d.ts +24 -0
  23. package/dist/utils/exceptions.d.ts.map +1 -1
  24. package/dist/utils/exceptions.js +48 -1
  25. package/dist/utils/exceptions.js.map +1 -1
  26. package/dist/utils/logger.d.ts +35 -0
  27. package/dist/utils/logger.d.ts.map +1 -0
  28. package/dist/utils/logger.js +96 -0
  29. package/dist/utils/logger.js.map +1 -0
  30. package/dist/utils/memory-pool.d.ts +98 -0
  31. package/dist/utils/memory-pool.d.ts.map +1 -0
  32. package/dist/utils/memory-pool.js +190 -0
  33. package/dist/utils/memory-pool.js.map +1 -0
  34. package/dist/utils/node-wasm-signer.d.ts +8 -0
  35. package/dist/utils/node-wasm-signer.d.ts.map +1 -1
  36. package/dist/utils/node-wasm-signer.js +84 -29
  37. package/dist/utils/node-wasm-signer.js.map +1 -1
  38. package/dist/utils/nonce-cache.d.ts +29 -0
  39. package/dist/utils/nonce-cache.d.ts.map +1 -0
  40. package/dist/utils/nonce-cache.js +111 -0
  41. package/dist/utils/nonce-cache.js.map +1 -0
  42. package/dist/utils/optimized-http-client.d.ts +29 -0
  43. package/dist/utils/optimized-http-client.d.ts.map +1 -0
  44. package/dist/utils/optimized-http-client.js +142 -0
  45. package/dist/utils/optimized-http-client.js.map +1 -0
  46. package/dist/utils/performance-monitor.d.ts +41 -0
  47. package/dist/utils/performance-monitor.d.ts.map +1 -0
  48. package/dist/utils/performance-monitor.js +183 -0
  49. package/dist/utils/performance-monitor.js.map +1 -0
  50. package/dist/utils/request-batcher.d.ts +45 -0
  51. package/dist/utils/request-batcher.d.ts.map +1 -0
  52. package/dist/utils/request-batcher.js +177 -0
  53. package/dist/utils/request-batcher.js.map +1 -0
  54. package/dist/utils/wasm-manager.d.ts +30 -0
  55. package/dist/utils/wasm-manager.d.ts.map +1 -0
  56. package/dist/utils/wasm-manager.js +115 -0
  57. package/dist/utils/wasm-manager.js.map +1 -0
  58. package/docs/AccountApi.md +1 -1
  59. package/docs/GettingStarted.md +8 -8
  60. package/docs/OrderApi.md +1 -1
  61. package/docs/SignerClient.md +1 -1
  62. package/docs/TransactionApi.md +1 -1
  63. package/docs/WsClient.md +1 -1
  64. package/docs/types/Account.md +1 -1
  65. package/docs/types/ApiKeyPair.md +1 -1
  66. package/docs/types/CreateOrderParams.md +1 -1
  67. package/docs/types/MarketOrderParams.md +1 -1
  68. package/docs/types/SignerConfig.md +1 -1
  69. package/docs/types/WasmSignerConfig.md +1 -1
  70. package/examples/README.md +1 -1
  71. package/examples/account_info.ts +5 -2
  72. package/examples/cancel_all_orders.ts +77 -0
  73. package/examples/close_all_positions.ts +69 -0
  74. package/examples/create_cancel_order.ts +48 -8
  75. package/examples/create_market_order.ts +42 -1
  76. package/examples/create_market_order_if_slippage.ts +69 -0
  77. package/examples/create_market_order_max_slippage.ts +43 -43
  78. package/examples/create_sl_tp.ts +114 -29
  79. package/examples/create_with_multiple_keys.ts +77 -58
  80. package/examples/get_info.ts +1 -1
  81. package/examples/market_data_json.ts +80 -0
  82. package/examples/wait_for_transaction.ts +101 -0
  83. package/examples/ws.ts +64 -24
  84. package/examples/ws_async.ts +40 -39
  85. package/package.json +70 -70
  86. package/dist/utils/signer.d.ts +0 -15
  87. package/dist/utils/signer.d.ts.map +0 -1
  88. package/dist/utils/signer.js +0 -68
  89. package/dist/utils/signer.js.map +0 -1
@@ -0,0 +1,111 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NonceCache = void 0;
4
+ class NonceCache {
5
+ constructor(fetchNonceCallback) {
6
+ this.fetchNonceCallback = fetchNonceCallback;
7
+ this.cache = new Map();
8
+ this.batchSize = 10; // Pre-fetch 10 nonces at a time
9
+ this.maxCacheAge = 30000; // 30 seconds
10
+ this.lastFetch = 0;
11
+ this.fetchPromise = null;
12
+ }
13
+ async getNextNonce(apiKeyIndex) {
14
+ const nonces = this.cache.get(apiKeyIndex);
15
+ // If no cached nonces or cache is empty, fetch new batch
16
+ if (!nonces || nonces.length === 0 || this.isCacheExpired()) {
17
+ await this.refreshNonces(apiKeyIndex);
18
+ }
19
+ const cachedNonces = this.cache.get(apiKeyIndex);
20
+ if (!cachedNonces || cachedNonces.length === 0) {
21
+ throw new Error('Failed to get nonce from cache');
22
+ }
23
+ // Return the first nonce and remove it from cache
24
+ const nonceInfo = cachedNonces.shift();
25
+ // Update the cache with the remaining nonces
26
+ this.cache.set(apiKeyIndex, cachedNonces);
27
+ // If cache is getting low, pre-fetch more nonces
28
+ if (cachedNonces.length <= 2) {
29
+ this.refreshNonces(apiKeyIndex).catch(console.error);
30
+ }
31
+ return nonceInfo.nonce;
32
+ }
33
+ async getNextNonces(apiKeyIndex, count) {
34
+ const nonces = [];
35
+ for (let i = 0; i < count; i++) {
36
+ const nonce = await this.getNextNonce(apiKeyIndex);
37
+ nonces.push(nonce);
38
+ }
39
+ return nonces;
40
+ }
41
+ async refreshNonces(apiKeyIndex) {
42
+ // Prevent concurrent fetches
43
+ if (this.fetchPromise) {
44
+ await this.fetchPromise;
45
+ return;
46
+ }
47
+ this.fetchPromise = this.doRefreshNonces(apiKeyIndex);
48
+ try {
49
+ await this.fetchPromise;
50
+ }
51
+ finally {
52
+ this.fetchPromise = null;
53
+ }
54
+ }
55
+ async doRefreshNonces(apiKeyIndex) {
56
+ try {
57
+ const newNonces = await this.fetchNonceCallback(apiKeyIndex, this.batchSize);
58
+ const nonceInfos = newNonces.map(nonce => ({
59
+ nonce,
60
+ timestamp: Date.now(),
61
+ apiKeyIndex
62
+ }));
63
+ this.cache.set(apiKeyIndex, nonceInfos);
64
+ this.lastFetch = Date.now();
65
+ console.log(`āœ… Cached ${newNonces.length} nonces for API key ${apiKeyIndex}`);
66
+ }
67
+ catch (error) {
68
+ console.error(`āŒ Failed to refresh nonces for API key ${apiKeyIndex}:`, error);
69
+ throw error;
70
+ }
71
+ }
72
+ isCacheExpired() {
73
+ return Date.now() - this.lastFetch > this.maxCacheAge;
74
+ }
75
+ // Pre-warm the cache for better performance
76
+ async preWarmCache(apiKeyIndices) {
77
+ const promises = apiKeyIndices.map(index => this.refreshNonces(index));
78
+ await Promise.all(promises);
79
+ }
80
+ // Clear cache for a specific API key
81
+ clearCache(apiKeyIndex) {
82
+ this.cache.delete(apiKeyIndex);
83
+ }
84
+ // Clear all cache
85
+ clearAllCache() {
86
+ this.cache.clear();
87
+ this.lastFetch = 0;
88
+ }
89
+ // Get cache statistics for monitoring
90
+ getCacheStats() {
91
+ const stats = {};
92
+ for (const [apiKeyIndex, nonces] of this.cache.entries()) {
93
+ if (nonces.length > 0) {
94
+ const timestamps = nonces.map(n => n.timestamp);
95
+ stats[apiKeyIndex] = {
96
+ count: nonces.length,
97
+ oldest: Math.min(...timestamps),
98
+ newest: Math.max(...timestamps)
99
+ };
100
+ }
101
+ }
102
+ return stats;
103
+ }
104
+ // Health check for cache
105
+ isHealthy() {
106
+ const now = Date.now();
107
+ return now - this.lastFetch < this.maxCacheAge * 2; // Allow some tolerance
108
+ }
109
+ }
110
+ exports.NonceCache = NonceCache;
111
+ //# sourceMappingURL=nonce-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nonce-cache.js","sourceRoot":"","sources":["../../src/utils/nonce-cache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ export interface HttpRequestOptions {
2
+ method: string;
3
+ url: string;
4
+ headers?: Record<string, string>;
5
+ body?: string;
6
+ timeout?: number;
7
+ }
8
+ export interface HttpResponse {
9
+ statusCode: number;
10
+ headers: Record<string, string>;
11
+ body: string;
12
+ }
13
+ export declare class OptimizedHttpClient {
14
+ private keepAliveAgent;
15
+ private httpAgent;
16
+ constructor();
17
+ request(options: HttpRequestOptions): Promise<HttpResponse>;
18
+ get(url: string, headers?: Record<string, string>): Promise<HttpResponse>;
19
+ post(url: string, body: string, headers?: Record<string, string>): Promise<HttpResponse>;
20
+ put(url: string, body: string, headers?: Record<string, string>): Promise<HttpResponse>;
21
+ delete(url: string, headers?: Record<string, string>): Promise<HttpResponse>;
22
+ destroy(): void;
23
+ getConnectionStats(): {
24
+ https: any;
25
+ http: any;
26
+ };
27
+ }
28
+ export declare const httpClient: OptimizedHttpClient;
29
+ //# sourceMappingURL=optimized-http-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"optimized-http-client.d.ts","sourceRoot":"","sources":["../../src/utils/optimized-http-client.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,cAAc,CAAc;IACpC,OAAO,CAAC,SAAS,CAAa;;IAuBxB,OAAO,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,YAAY,CAAC;IAiE3D,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC;IAIzE,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC;IAaxF,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC;IAavF,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC;IAKlF,OAAO,IAAI,IAAI;IAMf,kBAAkB,IAAI;QAAE,KAAK,EAAE,GAAG,CAAC;QAAC,IAAI,EAAE,GAAG,CAAA;KAAE;CAgBhD;AAGD,eAAO,MAAM,UAAU,qBAA4B,CAAC"}
@@ -0,0 +1,142 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.httpClient = exports.OptimizedHttpClient = void 0;
7
+ // Optimized HTTP client with connection pooling for better performance
8
+ const https_1 = __importDefault(require("https"));
9
+ const http_1 = __importDefault(require("http"));
10
+ const url_1 = require("url");
11
+ class OptimizedHttpClient {
12
+ constructor() {
13
+ // HTTPS agent with connection pooling
14
+ this.keepAliveAgent = new https_1.default.Agent({
15
+ keepAlive: true,
16
+ maxSockets: 20, // Increased from default 15
17
+ maxFreeSockets: 10, // Keep more free connections
18
+ timeout: 60000,
19
+ keepAliveMsecs: 30000, // Keep connections alive for 30s
20
+ scheduling: 'fifo' // First in, first out for fairness
21
+ });
22
+ // HTTP agent for non-HTTPS requests
23
+ this.httpAgent = new http_1.default.Agent({
24
+ keepAlive: true,
25
+ maxSockets: 20,
26
+ maxFreeSockets: 10,
27
+ timeout: 60000,
28
+ keepAliveMsecs: 30000
29
+ });
30
+ }
31
+ async request(options) {
32
+ const url = new url_1.URL(options.url);
33
+ const isHttps = url.protocol === 'https:';
34
+ const requestOptions = {
35
+ hostname: url.hostname,
36
+ port: url.port || (isHttps ? 443 : 80),
37
+ path: url.pathname + url.search,
38
+ method: options.method,
39
+ headers: {
40
+ 'Connection': 'keep-alive',
41
+ 'Accept-Encoding': 'gzip, deflate, br',
42
+ 'User-Agent': 'Lighter-TypeScript-SDK/1.0.0',
43
+ ...options.headers
44
+ },
45
+ agent: isHttps ? this.keepAliveAgent : this.httpAgent,
46
+ timeout: options.timeout || 10000
47
+ };
48
+ return new Promise((resolve, reject) => {
49
+ const req = (isHttps ? https_1.default : http_1.default).request(requestOptions, (res) => {
50
+ let body = '';
51
+ res.setEncoding('utf8');
52
+ res.on('data', (chunk) => {
53
+ body += chunk;
54
+ });
55
+ res.on('end', () => {
56
+ const headers = {};
57
+ for (const [key, value] of Object.entries(res.headers)) {
58
+ if (typeof value === 'string') {
59
+ headers[key] = value;
60
+ }
61
+ else if (Array.isArray(value)) {
62
+ headers[key] = value.join(', ');
63
+ }
64
+ }
65
+ resolve({
66
+ statusCode: res.statusCode || 0,
67
+ headers,
68
+ body
69
+ });
70
+ });
71
+ });
72
+ req.on('error', (error) => {
73
+ reject(error);
74
+ });
75
+ req.on('timeout', () => {
76
+ req.destroy();
77
+ reject(new Error('Request timeout'));
78
+ });
79
+ if (options.body) {
80
+ req.write(options.body);
81
+ }
82
+ req.end();
83
+ });
84
+ }
85
+ // Convenience methods
86
+ async get(url, headers) {
87
+ return this.request({ method: 'GET', url, headers: headers || {} });
88
+ }
89
+ async post(url, body, headers) {
90
+ return this.request({
91
+ method: 'POST',
92
+ url,
93
+ body,
94
+ headers: {
95
+ 'Content-Type': 'application/json',
96
+ 'Content-Length': Buffer.byteLength(body).toString(),
97
+ ...headers
98
+ }
99
+ });
100
+ }
101
+ async put(url, body, headers) {
102
+ return this.request({
103
+ method: 'PUT',
104
+ url,
105
+ body,
106
+ headers: {
107
+ 'Content-Type': 'application/json',
108
+ 'Content-Length': Buffer.byteLength(body).toString(),
109
+ ...headers
110
+ }
111
+ });
112
+ }
113
+ async delete(url, headers) {
114
+ return this.request({ method: 'DELETE', url, headers: headers || {} });
115
+ }
116
+ // Cleanup method
117
+ destroy() {
118
+ this.keepAliveAgent.destroy();
119
+ this.httpAgent.destroy();
120
+ }
121
+ // Get connection pool stats for monitoring
122
+ getConnectionStats() {
123
+ return {
124
+ https: {
125
+ totalSockets: this.keepAliveAgent.totalSockets || 0,
126
+ freeSockets: this.keepAliveAgent.freeSockets,
127
+ sockets: this.keepAliveAgent.sockets,
128
+ requests: this.keepAliveAgent.requests
129
+ },
130
+ http: {
131
+ totalSockets: this.httpAgent.totalSockets || 0,
132
+ freeSockets: this.httpAgent.freeSockets,
133
+ sockets: this.httpAgent.sockets,
134
+ requests: this.httpAgent.requests
135
+ }
136
+ };
137
+ }
138
+ }
139
+ exports.OptimizedHttpClient = OptimizedHttpClient;
140
+ // Singleton instance for reuse across the application
141
+ exports.httpClient = new OptimizedHttpClient();
142
+ //# sourceMappingURL=optimized-http-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"optimized-http-client.js","sourceRoot":"","sources":["../../src/utils/optimized-http-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ export interface PerformanceMetric {
2
+ name: string;
3
+ value: number;
4
+ timestamp: number;
5
+ tags?: Record<string, string>;
6
+ }
7
+ export interface PerformanceStats {
8
+ count: number;
9
+ min: number;
10
+ max: number;
11
+ avg: number;
12
+ p50: number;
13
+ p95: number;
14
+ p99: number;
15
+ total: number;
16
+ }
17
+ export declare class PerformanceMonitor {
18
+ private static instance;
19
+ private metrics;
20
+ private maxMetricsPerKey;
21
+ private isEnabled;
22
+ private constructor();
23
+ static getInstance(): PerformanceMonitor;
24
+ recordMetric(name: string, value: number, tags?: Record<string, string>): void;
25
+ getStats(name: string, tags?: Record<string, string>): PerformanceStats | null;
26
+ getAllStats(): Record<string, PerformanceStats>;
27
+ private getPercentile;
28
+ private getMetricKey;
29
+ startTimer(name: string, tags?: Record<string, string>): () => void;
30
+ recordCounter(name: string, value?: number, tags?: Record<string, string>): void;
31
+ recordGauge(name: string, value: number, tags?: Record<string, string>): void;
32
+ measureAsync<T extends any[], R>(name: string, fn: (...args: T) => Promise<R>, tags?: Record<string, string>): (...args: T) => Promise<R>;
33
+ measureSync<T extends any[], R>(name: string, fn: (...args: T) => R, tags?: Record<string, string>): (...args: T) => R;
34
+ clearMetrics(name?: string): void;
35
+ setEnabled(enabled: boolean): void;
36
+ isMonitoringEnabled(): boolean;
37
+ exportMetrics(): Record<string, any>;
38
+ printSummary(): void;
39
+ }
40
+ export declare const performanceMonitor: PerformanceMonitor;
41
+ //# sourceMappingURL=performance-monitor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"performance-monitor.d.ts","sourceRoot":"","sources":["../../src/utils/performance-monitor.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAmC;IAC1D,OAAO,CAAC,OAAO,CAA+B;IAC9C,OAAO,CAAC,gBAAgB,CAAQ;IAChC,OAAO,CAAC,SAAS,CAAQ;IAEzB,OAAO;IAEP,MAAM,CAAC,WAAW,IAAI,kBAAkB;IAOxC,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAkB9E,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,gBAAgB,GAAG,IAAI;IA+B9E,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC;IA8B/C,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,YAAY;IAcpB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,IAAI;IAQnE,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAInF,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAK7E,YAAY,CAAC,CAAC,SAAS,GAAG,EAAE,EAAE,CAAC,EAC7B,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,EAC9B,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC5B,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC;IAY7B,WAAW,CAAC,CAAC,SAAS,GAAG,EAAE,EAAE,CAAC,EAC5B,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,CAAC,EACrB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC5B,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,CAAC;IAapB,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IASjC,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAIlC,mBAAmB,IAAI,OAAO;IAK9B,aAAa,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IASpC,YAAY,IAAI,IAAI;CAqBrB;AAGD,eAAO,MAAM,kBAAkB,oBAAmC,CAAC"}
@@ -0,0 +1,183 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.performanceMonitor = exports.PerformanceMonitor = void 0;
4
+ class PerformanceMonitor {
5
+ constructor() {
6
+ this.metrics = new Map();
7
+ this.maxMetricsPerKey = 1000; // Keep last 1000 measurements
8
+ this.isEnabled = true;
9
+ }
10
+ static getInstance() {
11
+ if (!PerformanceMonitor.instance) {
12
+ PerformanceMonitor.instance = new PerformanceMonitor();
13
+ }
14
+ return PerformanceMonitor.instance;
15
+ }
16
+ recordMetric(name, value, tags) {
17
+ if (!this.isEnabled)
18
+ return;
19
+ const key = this.getMetricKey(name, tags);
20
+ if (!this.metrics.has(key)) {
21
+ this.metrics.set(key, []);
22
+ }
23
+ const values = this.metrics.get(key);
24
+ values.push(value);
25
+ // Keep only the most recent measurements
26
+ if (values.length > this.maxMetricsPerKey) {
27
+ values.shift();
28
+ }
29
+ }
30
+ getStats(name, tags) {
31
+ const key = this.getMetricKey(name, tags);
32
+ const values = this.metrics.get(key);
33
+ if (!values || values.length === 0) {
34
+ return null;
35
+ }
36
+ const sorted = [...values].sort((a, b) => a - b);
37
+ const count = sorted.length;
38
+ const total = sorted.reduce((sum, val) => sum + val, 0);
39
+ const avg = total / count;
40
+ const min = sorted[0] || 0;
41
+ const max = sorted[count - 1] || 0;
42
+ const p50 = this.getPercentile(sorted, 0.5);
43
+ const p95 = this.getPercentile(sorted, 0.95);
44
+ const p99 = this.getPercentile(sorted, 0.99);
45
+ return {
46
+ count,
47
+ min,
48
+ max,
49
+ avg,
50
+ p50,
51
+ p95,
52
+ p99,
53
+ total
54
+ };
55
+ }
56
+ getAllStats() {
57
+ const stats = {};
58
+ for (const [key, values] of this.metrics.entries()) {
59
+ const sorted = [...values].sort((a, b) => a - b);
60
+ const count = sorted.length;
61
+ const total = sorted.reduce((sum, val) => sum + val, 0);
62
+ const avg = total / count;
63
+ const min = sorted[0] || 0;
64
+ const max = sorted[count - 1] || 0;
65
+ const p50 = this.getPercentile(sorted, 0.5);
66
+ const p95 = this.getPercentile(sorted, 0.95);
67
+ const p99 = this.getPercentile(sorted, 0.99);
68
+ stats[key] = {
69
+ count,
70
+ min,
71
+ max,
72
+ avg,
73
+ p50,
74
+ p95,
75
+ p99,
76
+ total
77
+ };
78
+ }
79
+ return stats;
80
+ }
81
+ getPercentile(sorted, percentile) {
82
+ const index = Math.ceil(sorted.length * percentile) - 1;
83
+ return sorted[Math.max(0, index)] || 0;
84
+ }
85
+ getMetricKey(name, tags) {
86
+ if (!tags || Object.keys(tags).length === 0) {
87
+ return name;
88
+ }
89
+ const tagString = Object.entries(tags)
90
+ .sort(([a], [b]) => a.localeCompare(b))
91
+ .map(([key, value]) => `${key}:${value}`)
92
+ .join(',');
93
+ return `${name}{${tagString}}`;
94
+ }
95
+ // Convenience methods for common metrics
96
+ startTimer(name, tags) {
97
+ const start = performance.now();
98
+ return () => {
99
+ const duration = performance.now() - start;
100
+ this.recordMetric(name, duration, tags);
101
+ };
102
+ }
103
+ recordCounter(name, value = 1, tags) {
104
+ this.recordMetric(name, value, tags);
105
+ }
106
+ recordGauge(name, value, tags) {
107
+ this.recordMetric(name, value, tags);
108
+ }
109
+ // Performance decorators
110
+ measureAsync(name, fn, tags) {
111
+ return async (...args) => {
112
+ const endTimer = this.startTimer(name, tags);
113
+ try {
114
+ const result = await fn(...args);
115
+ return result;
116
+ }
117
+ finally {
118
+ endTimer();
119
+ }
120
+ };
121
+ }
122
+ measureSync(name, fn, tags) {
123
+ return (...args) => {
124
+ const endTimer = this.startTimer(name, tags);
125
+ try {
126
+ const result = fn(...args);
127
+ return result;
128
+ }
129
+ finally {
130
+ endTimer();
131
+ }
132
+ };
133
+ }
134
+ // Clear metrics
135
+ clearMetrics(name) {
136
+ if (name) {
137
+ this.metrics.delete(name);
138
+ }
139
+ else {
140
+ this.metrics.clear();
141
+ }
142
+ }
143
+ // Enable/disable monitoring
144
+ setEnabled(enabled) {
145
+ this.isEnabled = enabled;
146
+ }
147
+ isMonitoringEnabled() {
148
+ return this.isEnabled;
149
+ }
150
+ // Export metrics for external monitoring systems
151
+ exportMetrics() {
152
+ return {
153
+ timestamp: Date.now(),
154
+ metrics: this.getAllStats(),
155
+ enabled: this.isEnabled
156
+ };
157
+ }
158
+ // Print summary to console
159
+ printSummary() {
160
+ console.log('\nšŸ“Š PERFORMANCE METRICS SUMMARY');
161
+ console.log('===============================');
162
+ const stats = this.getAllStats();
163
+ const sortedKeys = Object.keys(stats).sort();
164
+ for (const key of sortedKeys) {
165
+ const stat = stats[key];
166
+ if (stat) {
167
+ console.log(`\n${key}:`);
168
+ console.log(` Count: ${stat.count}`);
169
+ console.log(` Min: ${stat.min.toFixed(2)}ms`);
170
+ console.log(` Max: ${stat.max.toFixed(2)}ms`);
171
+ console.log(` Avg: ${stat.avg.toFixed(2)}ms`);
172
+ console.log(` P50: ${stat.p50.toFixed(2)}ms`);
173
+ console.log(` P95: ${stat.p95.toFixed(2)}ms`);
174
+ console.log(` P99: ${stat.p99.toFixed(2)}ms`);
175
+ }
176
+ }
177
+ }
178
+ }
179
+ exports.PerformanceMonitor = PerformanceMonitor;
180
+ PerformanceMonitor.instance = null;
181
+ // Global instance
182
+ exports.performanceMonitor = PerformanceMonitor.getInstance();
183
+ //# sourceMappingURL=performance-monitor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"performance-monitor.js","sourceRoot":"","sources":["../../src/utils/performance-monitor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ export interface BatchRequest {
2
+ id: string;
3
+ type: 'CREATE_ORDER' | 'CANCEL_ORDER' | 'MODIFY_ORDER';
4
+ params: any;
5
+ timestamp: number;
6
+ }
7
+ export interface BatchResponse {
8
+ id: string;
9
+ success: boolean;
10
+ result?: any;
11
+ error?: string;
12
+ timestamp: number;
13
+ }
14
+ export interface BatchConfig {
15
+ maxBatchSize: number;
16
+ maxWaitTime: number;
17
+ flushInterval: number;
18
+ }
19
+ export declare class RequestBatcher {
20
+ private batchProcessor;
21
+ private config;
22
+ private pendingRequests;
23
+ private batchQueue;
24
+ private flushTimer;
25
+ private isProcessing;
26
+ constructor(batchProcessor: (requests: BatchRequest[]) => Promise<BatchResponse[]>, config?: Partial<BatchConfig>);
27
+ addRequest(type: 'CREATE_ORDER' | 'CANCEL_ORDER' | 'MODIFY_ORDER', params: any): Promise<any>;
28
+ private scheduleFlush;
29
+ private flush;
30
+ flushAll(): Promise<void>;
31
+ getStats(): {
32
+ pendingRequests: number;
33
+ batchQueue: number;
34
+ isProcessing: boolean;
35
+ };
36
+ destroy(): Promise<void>;
37
+ }
38
+ export declare function createOrderBatcher(batchProcessor: (requests: BatchRequest[]) => Promise<BatchResponse[]>, options?: {
39
+ maxBatchSize?: number;
40
+ maxWaitTime?: number;
41
+ flushInterval?: number;
42
+ }): RequestBatcher;
43
+ export declare function createHFTBatcher(batchProcessor: (requests: BatchRequest[]) => Promise<BatchResponse[]>): RequestBatcher;
44
+ export declare function createGeneralBatcher(batchProcessor: (requests: BatchRequest[]) => Promise<BatchResponse[]>): RequestBatcher;
45
+ //# sourceMappingURL=request-batcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-batcher.d.ts","sourceRoot":"","sources":["../../src/utils/request-batcher.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,cAAc,GAAG,cAAc,GAAG,cAAc,CAAC;IACvD,MAAM,EAAE,GAAG,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,cAAc;IAYvB,OAAO,CAAC,cAAc;IAXxB,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,eAAe,CAIlB;IACL,OAAO,CAAC,UAAU,CAAsB;IACxC,OAAO,CAAC,UAAU,CAA+B;IACjD,OAAO,CAAC,YAAY,CAAS;gBAGnB,cAAc,EAAE,CAAC,QAAQ,EAAE,YAAY,EAAE,KAAK,OAAO,CAAC,aAAa,EAAE,CAAC,EAC9E,MAAM,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC;IAUzB,UAAU,CAAC,IAAI,EAAE,cAAc,GAAG,cAAc,GAAG,cAAc,EAAE,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IA+BnG,OAAO,CAAC,aAAa;YAUP,KAAK;IA8Eb,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAW/B,QAAQ,IAAI;QACV,eAAe,EAAE,MAAM,CAAC;QACxB,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,OAAO,CAAC;KACvB;IAQK,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAgB/B;AAGD,wBAAgB,kBAAkB,CAChC,cAAc,EAAE,CAAC,QAAQ,EAAE,YAAY,EAAE,KAAK,OAAO,CAAC,aAAa,EAAE,CAAC,EACtE,OAAO,CAAC,EAAE;IACR,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,GACA,cAAc,CAEhB;AAGD,wBAAgB,gBAAgB,CAC9B,cAAc,EAAE,CAAC,QAAQ,EAAE,YAAY,EAAE,KAAK,OAAO,CAAC,aAAa,EAAE,CAAC,GACrE,cAAc,CAMhB;AAGD,wBAAgB,oBAAoB,CAClC,cAAc,EAAE,CAAC,QAAQ,EAAE,YAAY,EAAE,KAAK,OAAO,CAAC,aAAa,EAAE,CAAC,GACrE,cAAc,CAMhB"}