@zebpay_rajesh/zebpay-mcp-server 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.

Potentially problematic release.


This version of @zebpay_rajesh/zebpay-mcp-server might be problematic. Click here for more details.

Files changed (120) hide show
  1. package/.env.example +14 -0
  2. package/README.md +223 -0
  3. package/dist/__tests__/errors.test.d.ts +5 -0
  4. package/dist/__tests__/errors.test.js +147 -0
  5. package/dist/__tests__/errors.test.js.map +1 -0
  6. package/dist/__tests__/prompts.test.d.ts +1 -0
  7. package/dist/__tests__/prompts.test.js +73 -0
  8. package/dist/__tests__/prompts.test.js.map +1 -0
  9. package/dist/__tests__/resources.test.d.ts +1 -0
  10. package/dist/__tests__/resources.test.js +79 -0
  11. package/dist/__tests__/resources.test.js.map +1 -0
  12. package/dist/__tests__/validation.test.d.ts +15 -0
  13. package/dist/__tests__/validation.test.js +64 -0
  14. package/dist/__tests__/validation.test.js.map +1 -0
  15. package/dist/config.d.ts +19 -0
  16. package/dist/config.js +81 -0
  17. package/dist/config.js.map +1 -0
  18. package/dist/http/httpClient.d.ts +40 -0
  19. package/dist/http/httpClient.js +341 -0
  20. package/dist/http/httpClient.js.map +1 -0
  21. package/dist/index.d.ts +1 -0
  22. package/dist/index.js +60 -0
  23. package/dist/index.js.map +1 -0
  24. package/dist/mcp/errors.d.ts +21 -0
  25. package/dist/mcp/errors.js +214 -0
  26. package/dist/mcp/errors.js.map +1 -0
  27. package/dist/mcp/logging.d.ts +21 -0
  28. package/dist/mcp/logging.js +241 -0
  29. package/dist/mcp/logging.js.map +1 -0
  30. package/dist/mcp/prompts.d.ts +9 -0
  31. package/dist/mcp/prompts.js +165 -0
  32. package/dist/mcp/prompts.js.map +1 -0
  33. package/dist/mcp/resources.d.ts +9 -0
  34. package/dist/mcp/resources.js +125 -0
  35. package/dist/mcp/resources.js.map +1 -0
  36. package/dist/mcp/tools_futures.d.ts +5 -0
  37. package/dist/mcp/tools_futures.js +694 -0
  38. package/dist/mcp/tools_futures.js.map +1 -0
  39. package/dist/mcp/tools_spot.d.ts +11 -0
  40. package/dist/mcp/tools_spot.js +2225 -0
  41. package/dist/mcp/tools_spot.js.map +1 -0
  42. package/dist/private/FuturesClient.d.ts +57 -0
  43. package/dist/private/FuturesClient.js +181 -0
  44. package/dist/private/FuturesClient.js.map +1 -0
  45. package/dist/private/SpotClient.d.ts +44 -0
  46. package/dist/private/SpotClient.js +201 -0
  47. package/dist/private/SpotClient.js.map +1 -0
  48. package/dist/private/ZebpayAPI.d.ts +19 -0
  49. package/dist/private/ZebpayAPI.js +172 -0
  50. package/dist/private/ZebpayAPI.js.map +1 -0
  51. package/dist/public/PublicClient.d.ts +79 -0
  52. package/dist/public/PublicClient.js +283 -0
  53. package/dist/public/PublicClient.js.map +1 -0
  54. package/dist/public/PublicFuturesClient.d.ts +27 -0
  55. package/dist/public/PublicFuturesClient.js +187 -0
  56. package/dist/public/PublicFuturesClient.js.map +1 -0
  57. package/dist/security/credentials.d.ts +42 -0
  58. package/dist/security/credentials.js +80 -0
  59. package/dist/security/credentials.js.map +1 -0
  60. package/dist/security/signing.d.ts +33 -0
  61. package/dist/security/signing.js +56 -0
  62. package/dist/security/signing.js.map +1 -0
  63. package/dist/types/responses.d.ts +130 -0
  64. package/dist/types/responses.js +6 -0
  65. package/dist/types/responses.js.map +1 -0
  66. package/dist/utils/cache.d.ts +29 -0
  67. package/dist/utils/cache.js +72 -0
  68. package/dist/utils/cache.js.map +1 -0
  69. package/dist/utils/fileLogger.d.ts +10 -0
  70. package/dist/utils/fileLogger.js +81 -0
  71. package/dist/utils/fileLogger.js.map +1 -0
  72. package/dist/utils/metrics.d.ts +35 -0
  73. package/dist/utils/metrics.js +94 -0
  74. package/dist/utils/metrics.js.map +1 -0
  75. package/dist/utils/responseFormatter.d.ts +93 -0
  76. package/dist/utils/responseFormatter.js +268 -0
  77. package/dist/utils/responseFormatter.js.map +1 -0
  78. package/dist/validation/schemas.d.ts +70 -0
  79. package/dist/validation/schemas.js +48 -0
  80. package/dist/validation/schemas.js.map +1 -0
  81. package/dist/validation/validators.d.ts +28 -0
  82. package/dist/validation/validators.js +129 -0
  83. package/dist/validation/validators.js.map +1 -0
  84. package/docs/LOGGING.md +371 -0
  85. package/docs/zebpay-ai-trading-beginner.png +0 -0
  86. package/mcp-config.json.example +20 -0
  87. package/package.json +54 -0
  88. package/scripts/README.md +103 -0
  89. package/scripts/clear-logs.js +52 -0
  90. package/scripts/log-stats.js +264 -0
  91. package/scripts/log-viewer.js +288 -0
  92. package/server.json +31 -0
  93. package/src/__tests__/errors.test.ts +180 -0
  94. package/src/__tests__/prompts.test.ts +89 -0
  95. package/src/__tests__/resources.test.ts +95 -0
  96. package/src/__tests__/validation.test.ts +88 -0
  97. package/src/config.ts +108 -0
  98. package/src/http/httpClient.ts +398 -0
  99. package/src/index.ts +71 -0
  100. package/src/mcp/errors.ts +262 -0
  101. package/src/mcp/logging.ts +284 -0
  102. package/src/mcp/prompts.ts +206 -0
  103. package/src/mcp/resources.ts +163 -0
  104. package/src/mcp/tools_futures.ts +874 -0
  105. package/src/mcp/tools_spot.ts +2702 -0
  106. package/src/private/FuturesClient.ts +189 -0
  107. package/src/private/SpotClient.ts +250 -0
  108. package/src/private/ZebpayAPI.ts +205 -0
  109. package/src/public/PublicClient.ts +381 -0
  110. package/src/public/PublicFuturesClient.ts +228 -0
  111. package/src/security/credentials.ts +114 -0
  112. package/src/security/signing.ts +98 -0
  113. package/src/types/responses.ts +146 -0
  114. package/src/utils/cache.ts +90 -0
  115. package/src/utils/fileLogger.ts +88 -0
  116. package/src/utils/metrics.ts +135 -0
  117. package/src/utils/responseFormatter.ts +361 -0
  118. package/src/validation/schemas.ts +66 -0
  119. package/src/validation/validators.ts +189 -0
  120. package/tsconfig.json +21 -0
@@ -0,0 +1,172 @@
1
+ /*
2
+ Core ZebpayAPI encapsulates signing, sending, and error normalization.
3
+ */
4
+ import { buildAuthHeaders, buildQueryStringAuthHeaders, signQueryString, signPayloadString, signRequest } from "../security/signing.js";
5
+ import { HttpError } from "../http/httpClient.js";
6
+ import { convertHttpErrorToMcpError, createInternalError } from "../mcp/errors.js";
7
+ import { McpError } from "@modelcontextprotocol/sdk/types.js";
8
+ export class ZebpayAPI {
9
+ constructor(config, creds, http) {
10
+ this.config = config;
11
+ this.creds = creds;
12
+ this.http = http;
13
+ }
14
+ baseUrl(useFutures) {
15
+ return useFutures ? this.config.futuresBaseUrl : this.config.spotBaseUrl;
16
+ }
17
+ buildUrl(useFutures, path, queryParams) {
18
+ const trimmed = path.startsWith("/") ? path : `/${path}`;
19
+ let url = `${this.baseUrl(useFutures)}${trimmed}`;
20
+ if (queryParams && Object.keys(queryParams).length > 0) {
21
+ const queryString = Object.entries(queryParams)
22
+ .map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(value)}`)
23
+ .join("&");
24
+ url += `?${queryString}`;
25
+ // Debug logging
26
+ if (this.config.logLevel === "debug") {
27
+ console.error(JSON.stringify({
28
+ level: "debug",
29
+ msg: "buildUrl details",
30
+ queryParams,
31
+ queryString,
32
+ finalUrl: url
33
+ }));
34
+ }
35
+ }
36
+ return url;
37
+ }
38
+ async request({ method, path, body, useFutures = false, queryParams: providedQueryParams }) {
39
+ const apiKey = this.creds.getApiKey();
40
+ const secret = this.creds.getSecretKey();
41
+ const methodUpper = method.toUpperCase();
42
+ const isGetOrDelete = methodUpper === "GET" || methodUpper === "DELETE";
43
+ const isPost = methodUpper === "POST";
44
+ const includeBody = isPost && body !== undefined && body !== null;
45
+ let url;
46
+ let authHeaders;
47
+ let finalBody = body;
48
+ if (isGetOrDelete) {
49
+ // For GET and DELETE requests, use query-string based signing (Zebpay API format)
50
+ const timestamp = Date.now().toString();
51
+ const queryParams = {
52
+ timestamp,
53
+ ...providedQueryParams, // Merge provided query params with timestamp
54
+ };
55
+ // Build query string for signing (sorted alphabetically for consistent signing)
56
+ // This same sorted order must be used in the URL to match the signature
57
+ const sortedEntries = Object.entries(queryParams)
58
+ .sort(([a], [b]) => a.localeCompare(b));
59
+ const queryString = sortedEntries
60
+ .map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(value)}`)
61
+ .join("&");
62
+ // Sign the query string
63
+ const signature = signQueryString(queryString, secret);
64
+ // Build auth headers (only API key and signature, no timestamp header)
65
+ authHeaders = buildQueryStringAuthHeaders(apiKey, signature, this.config.signingHeaders);
66
+ // Build URL with the same sorted query string to match the signature
67
+ const trimmed = path.startsWith("/") ? path : `/${path}`;
68
+ url = `${this.baseUrl(useFutures)}${trimmed}?${queryString}`;
69
+ // Debug logging
70
+ if (this.config.logLevel === "debug") {
71
+ console.error(JSON.stringify({
72
+ level: "debug",
73
+ msg: `${methodUpper} request details`,
74
+ path,
75
+ queryString,
76
+ timestamp,
77
+ url,
78
+ hasQueryParams: url.includes("?")
79
+ }));
80
+ }
81
+ }
82
+ else if (isPost) {
83
+ // For POST requests, sign the JSON body directly (Zebpay API format)
84
+ const timestamp = Date.now();
85
+ // Prepare payload with timestamp added
86
+ const payload = body ? { ...body, timestamp } : { timestamp };
87
+ // Stringify the payload (deterministic JSON stringify)
88
+ const payloadString = JSON.stringify(payload);
89
+ // Sign the payload string directly
90
+ const signature = signPayloadString(payloadString, secret);
91
+ // Build auth headers (only API key and signature, no timestamp header)
92
+ authHeaders = buildQueryStringAuthHeaders(apiKey, signature, this.config.signingHeaders);
93
+ // Set the final body with timestamp included
94
+ finalBody = payload;
95
+ url = this.buildUrl(useFutures, path);
96
+ // Debug logging
97
+ if (this.config.logLevel === "debug") {
98
+ console.error(JSON.stringify({
99
+ level: "debug",
100
+ msg: "POST request details",
101
+ path,
102
+ payloadString,
103
+ timestamp,
104
+ signature
105
+ }));
106
+ }
107
+ }
108
+ else {
109
+ // For other methods (PUT, PATCH, etc.), fall back to original signing method
110
+ const signature = signRequest(method, path, includeBody ? body : undefined, secret, {
111
+ headers: this.config.signingHeaders,
112
+ includeBody,
113
+ });
114
+ authHeaders = buildAuthHeaders(apiKey, signature, this.config.signingHeaders);
115
+ url = this.buildUrl(useFutures, path);
116
+ }
117
+ try {
118
+ const res = await this.http.request({
119
+ method,
120
+ url,
121
+ headers: authHeaders,
122
+ body: isPost ? finalBody : (isGetOrDelete ? undefined : body),
123
+ timeoutMs: this.config.timeoutMs,
124
+ retryCount: this.config.retryCount,
125
+ });
126
+ return res.data;
127
+ }
128
+ catch (err) {
129
+ if (err instanceof HttpError) {
130
+ // Extract error message from various possible response formats
131
+ let errorMessage = err.message || "Unknown API error";
132
+ // Extract error message and preserve full details for better error handling
133
+ let errorDetails = err.details;
134
+ if (err.details) {
135
+ if (typeof err.details === "string") {
136
+ errorMessage = err.details;
137
+ }
138
+ else if (typeof err.details === "object") {
139
+ // Check common error response fields (in order of preference)
140
+ const details = err.details;
141
+ // Extract statusDescription first (most specific)
142
+ if (typeof details.statusDescription === "string" && details.statusDescription) {
143
+ errorMessage = details.statusDescription;
144
+ }
145
+ else if (typeof details.error === "string" && details.error) {
146
+ errorMessage = details.error;
147
+ }
148
+ else if (typeof details.message === "string" && details.message) {
149
+ errorMessage = details.message;
150
+ }
151
+ else if (typeof details.msg === "string" && details.msg) {
152
+ errorMessage = details.msg;
153
+ }
154
+ else if (typeof details.errorMessage === "string" && details.errorMessage) {
155
+ errorMessage = details.errorMessage;
156
+ }
157
+ // Preserve the full details object for error conversion
158
+ errorDetails = details;
159
+ }
160
+ }
161
+ throw convertHttpErrorToMcpError(err.status, errorMessage, errorDetails, err.isHtmlResponse);
162
+ }
163
+ // Re-throw MCP errors as-is
164
+ if (err instanceof McpError) {
165
+ throw err;
166
+ }
167
+ // Wrap other errors as internal errors
168
+ throw createInternalError(err instanceof Error ? err.message : String(err), { originalError: String(err) });
169
+ }
170
+ }
171
+ }
172
+ //# sourceMappingURL=ZebpayAPI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ZebpayAPI.js","sourceRoot":"","sources":["../../src/private/ZebpayAPI.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,79 @@
1
+ import { HttpClient } from "../http/httpClient.js";
2
+ import { AppConfig } from "../config.js";
3
+ export interface TickerParams {
4
+ symbol: string;
5
+ }
6
+ export interface OrderBookParams {
7
+ symbol: string;
8
+ limit?: number;
9
+ }
10
+ export interface OrderBookTickerParams {
11
+ symbol: string;
12
+ }
13
+ export interface TradesParams {
14
+ symbol: string;
15
+ limit?: number;
16
+ page?: number;
17
+ }
18
+ export interface KlineParams {
19
+ symbol: string;
20
+ interval: string;
21
+ startTime: number;
22
+ endTime: number;
23
+ limit?: number;
24
+ category?: string;
25
+ }
26
+ export interface MarketTickerParams {
27
+ symbol: string;
28
+ group?: string;
29
+ }
30
+ export interface MarketBookParams {
31
+ symbol: string;
32
+ converted?: number;
33
+ }
34
+ export declare class PublicClient {
35
+ private readonly config;
36
+ private readonly http;
37
+ constructor(config: AppConfig, http: HttpClient);
38
+ private buildUrl;
39
+ private buildMarketUrl;
40
+ /**
41
+ * Helper method to handle HTTP requests with consistent error handling
42
+ */
43
+ private handleRequest;
44
+ /**
45
+ * Get all tickers from Zebpay API.
46
+ * Endpoint: GET /api/v2/market/allTickers
47
+ */
48
+ getAllTickers(): Promise<unknown>;
49
+ /**
50
+ * Get ticker for a specific symbol from Zebpay API.
51
+ * Endpoint: GET /api/v2/market/ticker?symbol={symbol}
52
+ */
53
+ getTicker(params: TickerParams): Promise<unknown>;
54
+ getOrderBook(params: OrderBookParams): Promise<unknown>;
55
+ /**
56
+ * Get order book ticker for a specific symbol from Zebpay API.
57
+ * Endpoint: GET /api/v2/market/orderbook/ticker?symbol={symbol}
58
+ */
59
+ getOrderBookTicker(params: OrderBookTickerParams): Promise<unknown>;
60
+ getTrades(params: TradesParams): Promise<unknown>;
61
+ getKlines(params: KlineParams): Promise<unknown>;
62
+ getExchangeInfo(): Promise<unknown>;
63
+ getCurrencies(): Promise<unknown>;
64
+ /**
65
+ * Get market information from Zebpay market API.
66
+ * Endpoint: GET /api/v1/market
67
+ */
68
+ getMarket(): Promise<unknown>;
69
+ /**
70
+ * Get ticker for a specific symbol from Zebpay market API.
71
+ * Endpoint: GET /api/v1/market/{symbol}/ticker
72
+ */
73
+ getMarketTicker(params: MarketTickerParams): Promise<unknown>;
74
+ /**
75
+ * Get order book for a specific symbol from Zebpay market API.
76
+ * Endpoint: GET /api/v1/market/{symbol}/book
77
+ */
78
+ getMarketBook(params: MarketBookParams): Promise<unknown>;
79
+ }
@@ -0,0 +1,283 @@
1
+ /*
2
+ Public client for market data and public endpoints (no authentication required).
3
+ */
4
+ import { HttpError } from "../http/httpClient.js";
5
+ import { tickerCache, orderBookCache, exchangeInfoCache, currenciesCache } from "../utils/cache.js";
6
+ import { convertHttpErrorToMcpError } from "../mcp/errors.js";
7
+ import { McpError } from "@modelcontextprotocol/sdk/types.js";
8
+ export class PublicClient {
9
+ constructor(config, http) {
10
+ this.config = config;
11
+ this.http = http;
12
+ }
13
+ buildUrl(path, queryParams) {
14
+ const trimmed = path.startsWith("/") ? path : `/${path}`;
15
+ let url = `${this.config.spotBaseUrl}${trimmed}`;
16
+ if (queryParams && Object.keys(queryParams).length > 0) {
17
+ const queryString = Object.entries(queryParams)
18
+ .map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(value)}`)
19
+ .join("&");
20
+ url += `?${queryString}`;
21
+ }
22
+ return url;
23
+ }
24
+ buildMarketUrl(path, queryParams) {
25
+ // Market API uses configurable base URL from config
26
+ const trimmed = path.startsWith("/") ? path : `/${path}`;
27
+ let url = `${this.config.marketBaseUrl}${trimmed}`;
28
+ if (queryParams && Object.keys(queryParams).length > 0) {
29
+ const queryString = Object.entries(queryParams)
30
+ .map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(value)}`)
31
+ .join("&");
32
+ url += `?${queryString}`;
33
+ }
34
+ return url;
35
+ }
36
+ /**
37
+ * Helper method to handle HTTP requests with consistent error handling
38
+ */
39
+ async handleRequest(requestFn) {
40
+ try {
41
+ const response = await requestFn();
42
+ return response.data;
43
+ }
44
+ catch (err) {
45
+ if (err instanceof HttpError) {
46
+ // Extract error message from various possible response formats
47
+ let errorMessage = err.message || "Unknown API error";
48
+ if (err.details) {
49
+ if (typeof err.details === "string") {
50
+ errorMessage = err.details;
51
+ }
52
+ else if (typeof err.details === "object") {
53
+ // Check common error response fields (in order of preference)
54
+ const details = err.details;
55
+ errorMessage =
56
+ (typeof details.statusDescription === "string" && details.statusDescription) ||
57
+ (typeof details.error === "string" && details.error) ||
58
+ (typeof details.message === "string" && details.message) ||
59
+ (typeof details.msg === "string" && details.msg) ||
60
+ (typeof details.errorMessage === "string" && details.errorMessage) ||
61
+ errorMessage;
62
+ }
63
+ }
64
+ throw convertHttpErrorToMcpError(err.status, errorMessage, err.details);
65
+ }
66
+ // Re-throw MCP errors as-is
67
+ if (err instanceof McpError) {
68
+ throw err;
69
+ }
70
+ // Re-throw other errors
71
+ throw err;
72
+ }
73
+ }
74
+ /**
75
+ * Get all tickers from Zebpay API.
76
+ * Endpoint: GET /api/v2/market/allTickers
77
+ */
78
+ async getAllTickers() {
79
+ const cacheKey = "allTickers";
80
+ const cached = tickerCache.get(cacheKey);
81
+ if (cached) {
82
+ return cached;
83
+ }
84
+ const path = "/market/allTickers";
85
+ const url = this.buildUrl(path);
86
+ const data = await this.handleRequest(() => this.http.request({
87
+ method: "GET",
88
+ url,
89
+ timeoutMs: this.config.timeoutMs,
90
+ retryCount: this.config.retryCount,
91
+ }));
92
+ tickerCache.set(cacheKey, data);
93
+ return data;
94
+ }
95
+ /**
96
+ * Get ticker for a specific symbol from Zebpay API.
97
+ * Endpoint: GET /api/v2/market/ticker?symbol={symbol}
98
+ */
99
+ async getTicker(params) {
100
+ const cacheKey = `ticker:${params.symbol}`;
101
+ const cached = tickerCache.get(cacheKey);
102
+ if (cached) {
103
+ return cached;
104
+ }
105
+ const path = "/market/ticker";
106
+ const queryParams = {
107
+ symbol: params.symbol,
108
+ };
109
+ const url = this.buildUrl(path, queryParams);
110
+ const data = await this.handleRequest(() => this.http.request({
111
+ method: "GET",
112
+ url,
113
+ timeoutMs: this.config.timeoutMs,
114
+ retryCount: this.config.retryCount,
115
+ }));
116
+ tickerCache.set(cacheKey, data);
117
+ return data;
118
+ }
119
+ async getOrderBook(params) {
120
+ const cacheKey = `orderbook:${params.symbol}:${params.limit || "default"}`;
121
+ const cached = orderBookCache.get(cacheKey);
122
+ if (cached) {
123
+ return cached;
124
+ }
125
+ const path = "/market/orderbook";
126
+ const queryParams = {
127
+ symbol: params.symbol,
128
+ };
129
+ if (params.limit !== undefined) {
130
+ queryParams.limit = params.limit.toString();
131
+ }
132
+ const url = this.buildUrl(path, queryParams);
133
+ const data = await this.handleRequest(() => this.http.request({
134
+ method: "GET",
135
+ url,
136
+ timeoutMs: this.config.timeoutMs,
137
+ retryCount: this.config.retryCount,
138
+ }));
139
+ orderBookCache.set(cacheKey, data);
140
+ return data;
141
+ }
142
+ /**
143
+ * Get order book ticker for a specific symbol from Zebpay API.
144
+ * Endpoint: GET /api/v2/market/orderbook/ticker?symbol={symbol}
145
+ */
146
+ async getOrderBookTicker(params) {
147
+ const path = "/market/orderbook/ticker";
148
+ const queryParams = {
149
+ symbol: params.symbol,
150
+ };
151
+ const url = this.buildUrl(path, queryParams);
152
+ return this.handleRequest(() => this.http.request({
153
+ method: "GET",
154
+ url,
155
+ timeoutMs: this.config.timeoutMs,
156
+ retryCount: this.config.retryCount,
157
+ }));
158
+ }
159
+ async getTrades(params) {
160
+ const path = "/market/trades";
161
+ const queryParams = {
162
+ symbol: params.symbol,
163
+ };
164
+ if (params.limit !== undefined) {
165
+ queryParams.limit = params.limit.toString();
166
+ }
167
+ if (params.page !== undefined) {
168
+ queryParams.page = params.page.toString();
169
+ }
170
+ const url = this.buildUrl(path, queryParams);
171
+ return this.handleRequest(() => this.http.request({
172
+ method: "GET",
173
+ url,
174
+ timeoutMs: this.config.timeoutMs,
175
+ retryCount: this.config.retryCount,
176
+ }));
177
+ }
178
+ async getKlines(params) {
179
+ const path = "/market/klines";
180
+ const queryParams = {
181
+ symbol: params.symbol,
182
+ interval: params.interval,
183
+ startTime: params.startTime.toString(),
184
+ endTime: params.endTime.toString(),
185
+ };
186
+ if (params.limit !== undefined) {
187
+ queryParams.limit = params.limit.toString();
188
+ }
189
+ if (params.category !== undefined) {
190
+ queryParams.category = params.category;
191
+ }
192
+ const url = this.buildUrl(path, queryParams);
193
+ return this.handleRequest(() => this.http.request({
194
+ method: "GET",
195
+ url,
196
+ timeoutMs: this.config.timeoutMs,
197
+ retryCount: this.config.retryCount,
198
+ }));
199
+ }
200
+ async getExchangeInfo() {
201
+ const cacheKey = "exchangeInfo";
202
+ const cached = exchangeInfoCache.get(cacheKey);
203
+ if (cached) {
204
+ return cached;
205
+ }
206
+ const path = "/ex/exchangeInfo";
207
+ const url = this.buildUrl(path);
208
+ const data = await this.handleRequest(() => this.http.request({
209
+ method: "GET",
210
+ url,
211
+ timeoutMs: this.config.timeoutMs,
212
+ retryCount: this.config.retryCount,
213
+ }));
214
+ exchangeInfoCache.set(cacheKey, data);
215
+ return data;
216
+ }
217
+ async getCurrencies() {
218
+ const cacheKey = "currencies";
219
+ const cached = currenciesCache.get(cacheKey);
220
+ if (cached) {
221
+ return cached;
222
+ }
223
+ const path = "/ex/currencies";
224
+ const url = this.buildUrl(path);
225
+ const data = await this.handleRequest(() => this.http.request({
226
+ method: "GET",
227
+ url,
228
+ timeoutMs: this.config.timeoutMs,
229
+ retryCount: this.config.retryCount,
230
+ }));
231
+ currenciesCache.set(cacheKey, data);
232
+ return data;
233
+ }
234
+ /**
235
+ * Get market information from Zebpay market API.
236
+ * Endpoint: GET /api/v1/market
237
+ */
238
+ async getMarket() {
239
+ const path = "";
240
+ const url = this.buildMarketUrl(path);
241
+ return this.handleRequest(() => this.http.request({
242
+ method: "GET",
243
+ url,
244
+ timeoutMs: this.config.timeoutMs,
245
+ retryCount: this.config.retryCount,
246
+ }));
247
+ }
248
+ /**
249
+ * Get ticker for a specific symbol from Zebpay market API.
250
+ * Endpoint: GET /api/v1/market/{symbol}/ticker
251
+ */
252
+ async getMarketTicker(params) {
253
+ const path = `/${params.symbol}/ticker`;
254
+ const queryParams = params.group
255
+ ? { group: params.group }
256
+ : undefined;
257
+ const url = this.buildMarketUrl(path, queryParams);
258
+ return this.handleRequest(() => this.http.request({
259
+ method: "GET",
260
+ url,
261
+ timeoutMs: this.config.timeoutMs,
262
+ retryCount: this.config.retryCount,
263
+ }));
264
+ }
265
+ /**
266
+ * Get order book for a specific symbol from Zebpay market API.
267
+ * Endpoint: GET /api/v1/market/{symbol}/book
268
+ */
269
+ async getMarketBook(params) {
270
+ const path = `/${params.symbol}/book`;
271
+ const queryParams = params.converted !== undefined
272
+ ? { converted: params.converted.toString() }
273
+ : undefined;
274
+ const url = this.buildMarketUrl(path, queryParams);
275
+ return this.handleRequest(() => this.http.request({
276
+ method: "GET",
277
+ url,
278
+ timeoutMs: this.config.timeoutMs,
279
+ retryCount: this.config.retryCount,
280
+ }));
281
+ }
282
+ }
283
+ //# sourceMappingURL=PublicClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PublicClient.js","sourceRoot":"","sources":["../../src/public/PublicClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { HttpClient } from "../http/httpClient.js";
2
+ import { AppConfig } from "../config.js";
3
+ export interface FuturesSymbolParams {
4
+ symbol: string;
5
+ }
6
+ export interface FuturesOrderBookParams {
7
+ symbol: string;
8
+ limit?: number;
9
+ }
10
+ export declare class PublicFuturesClient {
11
+ private readonly config;
12
+ private readonly http;
13
+ constructor(config: AppConfig, http: HttpClient);
14
+ private buildUrl;
15
+ private buildRootUrl;
16
+ private handleRequest;
17
+ getHealthCheckStatus(): Promise<unknown>;
18
+ getMarkets(): Promise<unknown>;
19
+ getMarketInfo(): Promise<unknown>;
20
+ getOrderBook(params: FuturesOrderBookParams): Promise<unknown>;
21
+ getTicker24Hr(params: FuturesSymbolParams): Promise<unknown>;
22
+ getAggregateTrades(params: FuturesSymbolParams & {
23
+ limit?: number;
24
+ }): Promise<unknown>;
25
+ getExchangeInfo(): Promise<unknown>;
26
+ getExchangePairs(): Promise<unknown>;
27
+ }