@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.
- package/.env.example +14 -0
- package/README.md +223 -0
- package/dist/__tests__/errors.test.d.ts +5 -0
- package/dist/__tests__/errors.test.js +147 -0
- package/dist/__tests__/errors.test.js.map +1 -0
- package/dist/__tests__/prompts.test.d.ts +1 -0
- package/dist/__tests__/prompts.test.js +73 -0
- package/dist/__tests__/prompts.test.js.map +1 -0
- package/dist/__tests__/resources.test.d.ts +1 -0
- package/dist/__tests__/resources.test.js +79 -0
- package/dist/__tests__/resources.test.js.map +1 -0
- package/dist/__tests__/validation.test.d.ts +15 -0
- package/dist/__tests__/validation.test.js +64 -0
- package/dist/__tests__/validation.test.js.map +1 -0
- package/dist/config.d.ts +19 -0
- package/dist/config.js +81 -0
- package/dist/config.js.map +1 -0
- package/dist/http/httpClient.d.ts +40 -0
- package/dist/http/httpClient.js +341 -0
- package/dist/http/httpClient.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +60 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/errors.d.ts +21 -0
- package/dist/mcp/errors.js +214 -0
- package/dist/mcp/errors.js.map +1 -0
- package/dist/mcp/logging.d.ts +21 -0
- package/dist/mcp/logging.js +241 -0
- package/dist/mcp/logging.js.map +1 -0
- package/dist/mcp/prompts.d.ts +9 -0
- package/dist/mcp/prompts.js +165 -0
- package/dist/mcp/prompts.js.map +1 -0
- package/dist/mcp/resources.d.ts +9 -0
- package/dist/mcp/resources.js +125 -0
- package/dist/mcp/resources.js.map +1 -0
- package/dist/mcp/tools_futures.d.ts +5 -0
- package/dist/mcp/tools_futures.js +694 -0
- package/dist/mcp/tools_futures.js.map +1 -0
- package/dist/mcp/tools_spot.d.ts +11 -0
- package/dist/mcp/tools_spot.js +2225 -0
- package/dist/mcp/tools_spot.js.map +1 -0
- package/dist/private/FuturesClient.d.ts +57 -0
- package/dist/private/FuturesClient.js +181 -0
- package/dist/private/FuturesClient.js.map +1 -0
- package/dist/private/SpotClient.d.ts +44 -0
- package/dist/private/SpotClient.js +201 -0
- package/dist/private/SpotClient.js.map +1 -0
- package/dist/private/ZebpayAPI.d.ts +19 -0
- package/dist/private/ZebpayAPI.js +172 -0
- package/dist/private/ZebpayAPI.js.map +1 -0
- package/dist/public/PublicClient.d.ts +79 -0
- package/dist/public/PublicClient.js +283 -0
- package/dist/public/PublicClient.js.map +1 -0
- package/dist/public/PublicFuturesClient.d.ts +27 -0
- package/dist/public/PublicFuturesClient.js +187 -0
- package/dist/public/PublicFuturesClient.js.map +1 -0
- package/dist/security/credentials.d.ts +42 -0
- package/dist/security/credentials.js +80 -0
- package/dist/security/credentials.js.map +1 -0
- package/dist/security/signing.d.ts +33 -0
- package/dist/security/signing.js +56 -0
- package/dist/security/signing.js.map +1 -0
- package/dist/types/responses.d.ts +130 -0
- package/dist/types/responses.js +6 -0
- package/dist/types/responses.js.map +1 -0
- package/dist/utils/cache.d.ts +29 -0
- package/dist/utils/cache.js +72 -0
- package/dist/utils/cache.js.map +1 -0
- package/dist/utils/fileLogger.d.ts +10 -0
- package/dist/utils/fileLogger.js +81 -0
- package/dist/utils/fileLogger.js.map +1 -0
- package/dist/utils/metrics.d.ts +35 -0
- package/dist/utils/metrics.js +94 -0
- package/dist/utils/metrics.js.map +1 -0
- package/dist/utils/responseFormatter.d.ts +93 -0
- package/dist/utils/responseFormatter.js +268 -0
- package/dist/utils/responseFormatter.js.map +1 -0
- package/dist/validation/schemas.d.ts +70 -0
- package/dist/validation/schemas.js +48 -0
- package/dist/validation/schemas.js.map +1 -0
- package/dist/validation/validators.d.ts +28 -0
- package/dist/validation/validators.js +129 -0
- package/dist/validation/validators.js.map +1 -0
- package/docs/LOGGING.md +371 -0
- package/docs/zebpay-ai-trading-beginner.png +0 -0
- package/mcp-config.json.example +20 -0
- package/package.json +54 -0
- package/scripts/README.md +103 -0
- package/scripts/clear-logs.js +52 -0
- package/scripts/log-stats.js +264 -0
- package/scripts/log-viewer.js +288 -0
- package/server.json +31 -0
- package/src/__tests__/errors.test.ts +180 -0
- package/src/__tests__/prompts.test.ts +89 -0
- package/src/__tests__/resources.test.ts +95 -0
- package/src/__tests__/validation.test.ts +88 -0
- package/src/config.ts +108 -0
- package/src/http/httpClient.ts +398 -0
- package/src/index.ts +71 -0
- package/src/mcp/errors.ts +262 -0
- package/src/mcp/logging.ts +284 -0
- package/src/mcp/prompts.ts +206 -0
- package/src/mcp/resources.ts +163 -0
- package/src/mcp/tools_futures.ts +874 -0
- package/src/mcp/tools_spot.ts +2702 -0
- package/src/private/FuturesClient.ts +189 -0
- package/src/private/SpotClient.ts +250 -0
- package/src/private/ZebpayAPI.ts +205 -0
- package/src/public/PublicClient.ts +381 -0
- package/src/public/PublicFuturesClient.ts +228 -0
- package/src/security/credentials.ts +114 -0
- package/src/security/signing.ts +98 -0
- package/src/types/responses.ts +146 -0
- package/src/utils/cache.ts +90 -0
- package/src/utils/fileLogger.ts +88 -0
- package/src/utils/metrics.ts +135 -0
- package/src/utils/responseFormatter.ts +361 -0
- package/src/validation/schemas.ts +66 -0
- package/src/validation/validators.ts +189 -0
- package/tsconfig.json +21 -0
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
/*
|
|
2
|
+
MCP prompt registrations for common Zebpay trading workflows.
|
|
3
|
+
*/
|
|
4
|
+
import { z } from "zod";
|
|
5
|
+
/**
|
|
6
|
+
* Registers MCP prompts for common Zebpay trading workflows.
|
|
7
|
+
* Prompts help LLMs understand common use cases and provide structured guidance.
|
|
8
|
+
*/
|
|
9
|
+
export function registerPrompts(server, spot, publicClient, config) {
|
|
10
|
+
// Prompt: Check Balance Before Trading
|
|
11
|
+
if (spot) {
|
|
12
|
+
try {
|
|
13
|
+
server.prompt("check-balance-before-trade", "Check account balance before placing a trade to ensure sufficient funds are available. This prompt guides you through verifying balance and understanding trading requirements.", {
|
|
14
|
+
symbol: z.string().describe("Trading pair symbol in format BASE-QUOTE (e.g., 'BTC-INR', 'ETH-INR'). The symbol determines which currencies to check."),
|
|
15
|
+
side: z.enum(["BUY", "SELL"]).describe("Order side: 'BUY' checks quote currency balance (e.g., INR for BTC-INR), 'SELL' checks base currency balance (e.g., BTC for BTC-INR)."),
|
|
16
|
+
}, async ({ symbol, side }) => {
|
|
17
|
+
const normalizedSymbol = symbol.trim().toUpperCase();
|
|
18
|
+
const [baseCurrency, quoteCurrency] = normalizedSymbol.split("-");
|
|
19
|
+
const currencyToCheck = side === "BUY" ? quoteCurrency : baseCurrency;
|
|
20
|
+
return {
|
|
21
|
+
description: `Check balance for ${currencyToCheck} before ${side === "BUY" ? "buying" : "selling"} ${baseCurrency}`,
|
|
22
|
+
messages: [
|
|
23
|
+
{
|
|
24
|
+
role: "user",
|
|
25
|
+
content: {
|
|
26
|
+
type: "text",
|
|
27
|
+
text: `I want to ${side === "BUY" ? "buy" : "sell"} ${normalizedSymbol}.
|
|
28
|
+
|
|
29
|
+
Please:
|
|
30
|
+
1. Check my ${currencyToCheck} balance using zebpay_spot_getBalance with currencies="${currencyToCheck}"
|
|
31
|
+
2. Get the current price of ${normalizedSymbol} using zebpay_public_getTicker with symbol="${normalizedSymbol}"
|
|
32
|
+
3. Calculate if I have sufficient funds for the trade
|
|
33
|
+
4. If sufficient, place the order using zebpay_spot_placeMarketOrder
|
|
34
|
+
5. If insufficient, inform me of the shortfall
|
|
35
|
+
|
|
36
|
+
For ${side === "BUY" ? "buy" : "sell"} orders, I need ${side === "BUY" ? quoteCurrency : baseCurrency} balance.`,
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
],
|
|
40
|
+
};
|
|
41
|
+
});
|
|
42
|
+
console.error("Registered prompt: check-balance-before-trade");
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
console.error("Error registering check-balance-before-trade prompt:", error);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
// Prompt: Market Analysis
|
|
49
|
+
try {
|
|
50
|
+
server.prompt("analyze-market", "Perform comprehensive market analysis for a trading pair, including current price, order book depth, recent trades, and price history.", {
|
|
51
|
+
symbol: z.string().describe("Trading pair symbol in format BASE-QUOTE (e.g., 'BTC-INR', 'ETH-INR') to analyze."),
|
|
52
|
+
}, async ({ symbol }) => {
|
|
53
|
+
const normalizedSymbol = symbol.trim().toUpperCase();
|
|
54
|
+
return {
|
|
55
|
+
description: `Analyze market conditions for ${normalizedSymbol}`,
|
|
56
|
+
messages: [
|
|
57
|
+
{
|
|
58
|
+
role: "user",
|
|
59
|
+
content: {
|
|
60
|
+
type: "text",
|
|
61
|
+
text: `Please provide a comprehensive market analysis for ${normalizedSymbol}:
|
|
62
|
+
|
|
63
|
+
1. Current Price: Use zebpay_public_getTicker with symbol="${normalizedSymbol}" to get current price and 24h statistics
|
|
64
|
+
2. Order Book: Use zebpay_public_getOrderBook with symbol="${normalizedSymbol}" to analyze market depth and liquidity
|
|
65
|
+
3. Recent Trades: Use zebpay_public_getTrades with symbol="${normalizedSymbol}" to see recent trading activity
|
|
66
|
+
4. Price History: Use zebpay_public_getKlines with symbol="${normalizedSymbol}" to get historical price data (you'll need to specify interval, startTime, and endTime)
|
|
67
|
+
|
|
68
|
+
Please summarize:
|
|
69
|
+
- Current price and 24h change
|
|
70
|
+
- Market depth (spread, liquidity)
|
|
71
|
+
- Recent trading activity
|
|
72
|
+
- Price trends (if historical data is available)`,
|
|
73
|
+
},
|
|
74
|
+
},
|
|
75
|
+
],
|
|
76
|
+
};
|
|
77
|
+
});
|
|
78
|
+
console.error("Registered prompt: analyze-market");
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
console.error("Error registering analyze-market prompt:", error);
|
|
82
|
+
}
|
|
83
|
+
// Prompt: Compare Multiple Trading Pairs
|
|
84
|
+
try {
|
|
85
|
+
server.prompt("compare-trading-pairs", "Compare multiple trading pairs side-by-side to help make trading decisions. Shows prices, volumes, and price changes for multiple symbols.", {
|
|
86
|
+
symbols: z.string().describe("Comma-separated list of trading pair symbols (e.g., 'BTC-INR,ETH-INR,USDT-INR') to compare."),
|
|
87
|
+
}, async ({ symbols }) => {
|
|
88
|
+
const symbolList = symbols
|
|
89
|
+
.split(",")
|
|
90
|
+
.map((s) => s.trim().toUpperCase())
|
|
91
|
+
.filter(Boolean);
|
|
92
|
+
return {
|
|
93
|
+
description: `Compare trading pairs: ${symbolList.join(", ")}`,
|
|
94
|
+
messages: [
|
|
95
|
+
{
|
|
96
|
+
role: "user",
|
|
97
|
+
content: {
|
|
98
|
+
type: "text",
|
|
99
|
+
text: `Please compare the following trading pairs: ${symbolList.join(", ")}
|
|
100
|
+
|
|
101
|
+
For each symbol, use zebpay_public_getTicker to get:
|
|
102
|
+
- Current price
|
|
103
|
+
- 24h price change (absolute and percentage)
|
|
104
|
+
- 24h trading volume
|
|
105
|
+
- 24h high and low prices
|
|
106
|
+
|
|
107
|
+
Present the comparison in a clear table format showing:
|
|
108
|
+
1. Symbol
|
|
109
|
+
2. Current Price
|
|
110
|
+
3. 24h Change (%)
|
|
111
|
+
4. 24h Volume
|
|
112
|
+
5. 24h High/Low
|
|
113
|
+
|
|
114
|
+
This will help me understand which pairs are most active and have the best trading opportunities.`,
|
|
115
|
+
},
|
|
116
|
+
},
|
|
117
|
+
],
|
|
118
|
+
};
|
|
119
|
+
});
|
|
120
|
+
console.error("Registered prompt: compare-trading-pairs");
|
|
121
|
+
}
|
|
122
|
+
catch (error) {
|
|
123
|
+
console.error("Error registering compare-trading-pairs prompt:", error);
|
|
124
|
+
}
|
|
125
|
+
// Prompt: Get Exchange Information
|
|
126
|
+
try {
|
|
127
|
+
server.prompt("get-exchange-info", "Retrieve comprehensive exchange information including available trading pairs, trading rules, order limits, and supported currencies.", {}, async () => {
|
|
128
|
+
return {
|
|
129
|
+
description: "Get Zebpay exchange information and trading rules",
|
|
130
|
+
messages: [
|
|
131
|
+
{
|
|
132
|
+
role: "user",
|
|
133
|
+
content: {
|
|
134
|
+
type: "text",
|
|
135
|
+
text: `Please provide comprehensive information about the Zebpay exchange:
|
|
136
|
+
|
|
137
|
+
1. Exchange Information: Use zebpay_public_getExchangeInfo to get:
|
|
138
|
+
- Available trading pairs
|
|
139
|
+
- Trading rules and limits
|
|
140
|
+
- Order types supported
|
|
141
|
+
- Exchange-wide settings
|
|
142
|
+
|
|
143
|
+
2. Supported Currencies: Use zebpay_public_getCurrencies to get:
|
|
144
|
+
- List of all supported currencies
|
|
145
|
+
- Currency details (precision, type, etc.)
|
|
146
|
+
- Withdrawal/deposit settings
|
|
147
|
+
- Supported blockchain chains
|
|
148
|
+
|
|
149
|
+
Please summarize:
|
|
150
|
+
- Total number of trading pairs
|
|
151
|
+
- Major trading pairs available
|
|
152
|
+
- Supported currencies
|
|
153
|
+
- Key trading rules and limits`,
|
|
154
|
+
},
|
|
155
|
+
},
|
|
156
|
+
],
|
|
157
|
+
};
|
|
158
|
+
});
|
|
159
|
+
console.error("Registered prompt: get-exchange-info");
|
|
160
|
+
}
|
|
161
|
+
catch (error) {
|
|
162
|
+
console.error("Error registering get-exchange-info prompt:", error);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=prompts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/mcp/prompts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import { PublicClient } from "../public/PublicClient.js";
|
|
3
|
+
import { SpotClient } from "../private/SpotClient.js";
|
|
4
|
+
import { AppConfig } from "../config.js";
|
|
5
|
+
/**
|
|
6
|
+
* Registers MCP resources for Zebpay exchange data.
|
|
7
|
+
* Resources provide read-only access to exchange information that can be referenced by LLMs.
|
|
8
|
+
*/
|
|
9
|
+
export declare function registerResources(server: McpServer, publicClient: PublicClient, spot: SpotClient | null, config: AppConfig): void;
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/*
|
|
2
|
+
MCP resource registrations for Zebpay exchange data.
|
|
3
|
+
*/
|
|
4
|
+
import { createInternalError } from "./errors.js";
|
|
5
|
+
/**
|
|
6
|
+
* Registers MCP resources for Zebpay exchange data.
|
|
7
|
+
* Resources provide read-only access to exchange information that can be referenced by LLMs.
|
|
8
|
+
*/
|
|
9
|
+
export function registerResources(server, publicClient, spot, config) {
|
|
10
|
+
// Resource: Exchange Information
|
|
11
|
+
try {
|
|
12
|
+
server.resource("exchange-info", "zebpay://exchange/info", {
|
|
13
|
+
title: "Exchange Information",
|
|
14
|
+
description: "Current exchange information including available trading pairs, trading rules, order limits, and other exchange metadata. This resource is updated periodically.",
|
|
15
|
+
mimeType: "application/json",
|
|
16
|
+
}, async () => {
|
|
17
|
+
try {
|
|
18
|
+
const data = await publicClient.getExchangeInfo();
|
|
19
|
+
return {
|
|
20
|
+
contents: [
|
|
21
|
+
{
|
|
22
|
+
uri: "zebpay://exchange/info",
|
|
23
|
+
mimeType: "application/json",
|
|
24
|
+
text: JSON.stringify(data, null, 2),
|
|
25
|
+
},
|
|
26
|
+
],
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
throw createInternalError(`Failed to fetch exchange information: ${error instanceof Error ? error.message : String(error)}`, {});
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
console.error("Registered resource: zebpay://exchange/info");
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
console.error("Error registering exchange-info resource:", error);
|
|
37
|
+
}
|
|
38
|
+
// Resource: Supported Currencies
|
|
39
|
+
try {
|
|
40
|
+
server.resource("currencies", "zebpay://currencies", {
|
|
41
|
+
title: "Supported Currencies",
|
|
42
|
+
description: "List of all supported currencies and tokens on Zebpay exchange, including precision, type (crypto/fiat), withdrawal/deposit settings, supported blockchain chains, fees, and limits.",
|
|
43
|
+
mimeType: "application/json",
|
|
44
|
+
}, async () => {
|
|
45
|
+
try {
|
|
46
|
+
const data = await publicClient.getCurrencies();
|
|
47
|
+
return {
|
|
48
|
+
contents: [
|
|
49
|
+
{
|
|
50
|
+
uri: "zebpay://currencies",
|
|
51
|
+
mimeType: "application/json",
|
|
52
|
+
text: JSON.stringify(data, null, 2),
|
|
53
|
+
},
|
|
54
|
+
],
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
throw createInternalError(`Failed to fetch currencies: ${error instanceof Error ? error.message : String(error)}`, {});
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
console.error("Registered resource: zebpay://currencies");
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
console.error("Error registering currencies resource:", error);
|
|
65
|
+
}
|
|
66
|
+
// Resource: All Tickers (Market Prices)
|
|
67
|
+
try {
|
|
68
|
+
server.resource("all-tickers", "zebpay://market/tickers", {
|
|
69
|
+
title: "All Market Tickers",
|
|
70
|
+
description: "Current ticker/price information for all trading pairs on Zebpay exchange, including last price, bid/ask, 24h high/low, volume, and price changes.",
|
|
71
|
+
mimeType: "application/json",
|
|
72
|
+
}, async () => {
|
|
73
|
+
try {
|
|
74
|
+
const data = await publicClient.getAllTickers();
|
|
75
|
+
return {
|
|
76
|
+
contents: [
|
|
77
|
+
{
|
|
78
|
+
uri: "zebpay://market/tickers",
|
|
79
|
+
mimeType: "application/json",
|
|
80
|
+
text: JSON.stringify(data, null, 2),
|
|
81
|
+
},
|
|
82
|
+
],
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
throw createInternalError(`Failed to fetch all tickers: ${error instanceof Error ? error.message : String(error)}`, {});
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
console.error("Registered resource: zebpay://market/tickers");
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
console.error("Error registering all-tickers resource:", error);
|
|
93
|
+
}
|
|
94
|
+
// Resource: User Balance (only if authenticated)
|
|
95
|
+
if (spot) {
|
|
96
|
+
try {
|
|
97
|
+
server.resource("balance", "zebpay://account/balance", {
|
|
98
|
+
title: "Account Balance",
|
|
99
|
+
description: "Current balance of cryptocurrencies and fiat currencies in the user's spot trading account. Shows both available and locked balances.",
|
|
100
|
+
mimeType: "application/json",
|
|
101
|
+
}, async () => {
|
|
102
|
+
try {
|
|
103
|
+
const data = await spot.getBalance();
|
|
104
|
+
return {
|
|
105
|
+
contents: [
|
|
106
|
+
{
|
|
107
|
+
uri: "zebpay://account/balance",
|
|
108
|
+
mimeType: "application/json",
|
|
109
|
+
text: JSON.stringify(data, null, 2),
|
|
110
|
+
},
|
|
111
|
+
],
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
throw createInternalError(`Failed to fetch balance: ${error instanceof Error ? error.message : String(error)}`, {});
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
console.error("Registered resource: zebpay://account/balance");
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
console.error("Error registering balance resource:", error);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=resources.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resources.js","sourceRoot":"","sources":["../../src/mcp/resources.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import { PublicFuturesClient } from "../public/PublicFuturesClient.js";
|
|
3
|
+
import { FuturesClient } from "../private/FuturesClient.js";
|
|
4
|
+
import { AppConfig } from "../config.js";
|
|
5
|
+
export declare function registerFuturesTools(server: McpServer, futuresPublicClient: PublicFuturesClient, futuresPrivateClient: FuturesClient | null, config: AppConfig): void;
|