openbook-cli 1.0.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.
package/dist/index.js ADDED
@@ -0,0 +1,509 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getMarketInfo = getMarketInfo;
4
+ exports.getOrderBook = getOrderBook;
5
+ exports.getMarketStats = getMarketStats;
6
+ exports.displayOrderBook = displayOrderBook;
7
+ exports.displayMarketInfo = displayMarketInfo;
8
+ exports.listKnownMarkets = listKnownMarkets;
9
+ exports.loadOpenBookMarket = loadOpenBookMarket;
10
+ exports.getRealOrderBook = getRealOrderBook;
11
+ exports.main = main;
12
+ const web3_js_1 = require("@solana/web3.js");
13
+ const serum_1 = require("@project-serum/serum");
14
+ // Market information
15
+ const MARKET_ADDRESS = "Cw35vJ7ecmnwc2jPumgfhDzUuJ1fmrytuRopBF5JUXrq";
16
+ // Program IDs
17
+ const OPENBOOK_PROGRAM_ID = "srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX";
18
+ const SERUM_PROGRAM_ID = "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin";
19
+ // Connection to Solana
20
+ const connection = new web3_js_1.Connection("https://api.mainnet-beta.solana.com", "confirmed");
21
+ // Known markets and symbols - will be loaded from JSON file
22
+ let KNOWN_MARKETS = {};
23
+ let KNOWN_TOKEN_SYMBOLS = {};
24
+ async function getTokenMetadata(mintAddress) {
25
+ try {
26
+ const mintPubkey = new web3_js_1.PublicKey(mintAddress);
27
+ // First check if we have a known symbol
28
+ const knownSymbol = KNOWN_TOKEN_SYMBOLS[mintAddress];
29
+ if (knownSymbol) {
30
+ return {
31
+ symbol: knownSymbol,
32
+ name: knownSymbol,
33
+ decimals: 6 // Default for most tokens
34
+ };
35
+ }
36
+ // Get token account info to extract decimals
37
+ const tokenInfo = await connection.getParsedAccountInfo(mintPubkey);
38
+ if (!tokenInfo.value) {
39
+ throw new Error("Token account not found");
40
+ }
41
+ const parsedData = tokenInfo.value.data;
42
+ const decimals = parsedData.parsed.info.decimals;
43
+ // Try to get Metaplex metadata
44
+ try {
45
+ const [metadataAddress] = web3_js_1.PublicKey.findProgramAddressSync([
46
+ Buffer.from("metadata"),
47
+ new web3_js_1.PublicKey("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s").toBuffer(),
48
+ mintPubkey.toBuffer()
49
+ ], new web3_js_1.PublicKey("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"));
50
+ const metadataAccount = await connection.getAccountInfo(metadataAddress);
51
+ if (metadataAccount) {
52
+ // Parse Metaplex metadata
53
+ const metadata = JSON.parse(metadataAccount.data.toString());
54
+ return {
55
+ symbol: metadata.data.symbol || "UNKNOWN",
56
+ name: metadata.data.name || "Unknown Token",
57
+ decimals: decimals
58
+ };
59
+ }
60
+ }
61
+ catch (error) {
62
+ console.log(`No Metaplex metadata found for ${mintAddress}`);
63
+ }
64
+ // Fallback: use mint address as symbol
65
+ return {
66
+ symbol: mintAddress.slice(0, 8),
67
+ name: "Unknown Token",
68
+ decimals: decimals
69
+ };
70
+ }
71
+ catch (error) {
72
+ console.error(`Error fetching token metadata for ${mintAddress}:`, error);
73
+ return {
74
+ symbol: mintAddress.slice(0, 8),
75
+ name: "Unknown Token",
76
+ decimals: 6
77
+ };
78
+ }
79
+ }
80
+ async function getMarketInfo(marketAddress, useSerum = false) {
81
+ try {
82
+ // First try to get from known markets
83
+ const marketData = KNOWN_MARKETS[marketAddress];
84
+ if (marketData) {
85
+ // Fetch real token metadata from blockchain
86
+ const baseMetadata = await getTokenMetadata(marketData.baseMint);
87
+ const quoteMetadata = await getTokenMetadata(marketData.quoteMint);
88
+ return {
89
+ address: marketAddress,
90
+ baseMint: marketData.baseMint,
91
+ quoteMint: marketData.quoteMint,
92
+ baseSymbol: baseMetadata.symbol,
93
+ quoteSymbol: quoteMetadata.symbol,
94
+ minOrderSize: marketData.minOrderSize,
95
+ priceTick: marketData.priceTick,
96
+ eventQueueLength: marketData.eventQueueLength,
97
+ requestQueueLength: marketData.requestQueueLength,
98
+ bidsLength: marketData.bidsLength,
99
+ asksLength: marketData.asksLength
100
+ };
101
+ }
102
+ else {
103
+ // Load market directly from blockchain
104
+ const market = await loadOpenBookMarket(marketAddress, useSerum);
105
+ // Fetch real token metadata from blockchain
106
+ const baseMetadata = await getTokenMetadata(market.baseMintAddress.toString());
107
+ const quoteMetadata = await getTokenMetadata(market.quoteMintAddress.toString());
108
+ return {
109
+ address: marketAddress,
110
+ baseMint: market.baseMintAddress.toString(),
111
+ quoteMint: market.quoteMintAddress.toString(),
112
+ baseSymbol: baseMetadata.symbol,
113
+ quoteSymbol: quoteMetadata.symbol,
114
+ minOrderSize: 1, // Default values for unknown markets
115
+ priceTick: 0.0001,
116
+ eventQueueLength: 2978,
117
+ requestQueueLength: 63,
118
+ bidsLength: 909,
119
+ asksLength: 909
120
+ };
121
+ }
122
+ }
123
+ catch (error) {
124
+ console.error("Error fetching market info:", error);
125
+ throw error;
126
+ }
127
+ }
128
+ async function getMarketAccounts(marketAddress, useSerum = false) {
129
+ try {
130
+ const marketPubkey = new web3_js_1.PublicKey(marketAddress);
131
+ const marketAccount = await connection.getAccountInfo(marketPubkey);
132
+ if (!marketAccount) {
133
+ throw new Error("Market account not found");
134
+ }
135
+ console.log("Market account found!");
136
+ console.log("Owner:", marketAccount.owner.toString());
137
+ console.log("Data length:", marketAccount.data.length);
138
+ // Check against the appropriate program ID
139
+ const expectedProgramId = useSerum ? SERUM_PROGRAM_ID : OPENBOOK_PROGRAM_ID;
140
+ const programName = useSerum ? "Serum" : "OpenBook";
141
+ if (marketAccount.owner.toString() !== expectedProgramId) {
142
+ throw new Error(`Market not owned by ${programName} program. Owner: ${marketAccount.owner.toString()}`);
143
+ }
144
+ return marketAccount;
145
+ }
146
+ catch (error) {
147
+ console.error("Error fetching market accounts:", error);
148
+ throw error;
149
+ }
150
+ }
151
+ async function loadOpenBookMarket(marketAddress, useSerum = false) {
152
+ try {
153
+ const marketPubkey = new web3_js_1.PublicKey(marketAddress);
154
+ // Use the appropriate program ID based on mode
155
+ const programId = useSerum ? SERUM_PROGRAM_ID : OPENBOOK_PROGRAM_ID;
156
+ // Load the market using the appropriate program ID
157
+ const market = await serum_1.Market.load(connection, marketPubkey, {}, new web3_js_1.PublicKey(programId));
158
+ const programName = useSerum ? "Serum" : "OpenBook";
159
+ console.log(`āœ… ${programName} market loaded successfully!`);
160
+ return market;
161
+ }
162
+ catch (error) {
163
+ const programName = useSerum ? "Serum" : "OpenBook";
164
+ console.error(`Error loading ${programName} market:`, error);
165
+ throw error;
166
+ }
167
+ }
168
+ async function getRealOrderBook(marketAddress, depth = 20, useSerum = false) {
169
+ try {
170
+ const programName = useSerum ? "Serum" : "OpenBook";
171
+ console.log(`šŸ”„ Fetching real order book from ${programName}...`);
172
+ // Load the market with appropriate program
173
+ const market = await loadOpenBookMarket(marketAddress, useSerum);
174
+ // Use the correct Serum SDK methods
175
+ console.log("šŸ“Š Loading bids and asks...");
176
+ const bids = await market.loadBids(connection);
177
+ const asks = await market.loadAsks(connection);
178
+ // Access the orderbook data
179
+ const bidsArray = bids.getL2(20); // Get top 20 bids
180
+ const asksArray = asks.getL2(20); // Get top 20 asks
181
+ console.log("šŸ“Š Orderbook loaded successfully!");
182
+ console.log("Bids count:", bidsArray.length);
183
+ console.log("Asks count:", asksArray.length);
184
+ // Process bids (buy orders)
185
+ const bidOrders = bidsArray.map((bid) => ({
186
+ price: bid[0], // Price is first element
187
+ size: bid[1], // Size is second element
188
+ side: 'bid'
189
+ }));
190
+ // Process asks (sell orders)
191
+ const askOrders = asksArray.map((ask) => ({
192
+ price: ask[0], // Price is first element
193
+ size: ask[1], // Size is second element
194
+ side: 'ask'
195
+ }));
196
+ console.log(`āœ… Real order book fetched: ${bidOrders.length} bids, ${askOrders.length} asks`);
197
+ return { bids: bidOrders, asks: askOrders };
198
+ }
199
+ catch (error) {
200
+ console.error("āŒ Error fetching real order book:", error);
201
+ throw error;
202
+ }
203
+ }
204
+ async function getOrderBook(marketAddress, depth = 20) {
205
+ try {
206
+ // First, get the market account to verify it's a valid OpenBook market
207
+ const marketAccount = await getMarketAccounts(marketAddress);
208
+ // Get real order book data from the blockchain
209
+ return await getRealOrderBook(marketAddress, depth);
210
+ }
211
+ catch (error) {
212
+ console.error("Error fetching order book from blockchain:", error);
213
+ throw error;
214
+ }
215
+ }
216
+ async function getMarketStats(marketAddress, useSerum = false) {
217
+ try {
218
+ const { bids, asks } = await getRealOrderBook(marketAddress, 1, useSerum);
219
+ const bestBid = bids.length > 0 ? bids[0].price : null;
220
+ const bestAsk = asks.length > 0 ? asks[0].price : null;
221
+ const spread = bestBid && bestAsk ? bestAsk - bestBid : null;
222
+ const spreadPercentage = spread && bestBid ? (spread / bestBid) * 100 : null;
223
+ return {
224
+ totalBids: bids.length,
225
+ totalAsks: asks.length,
226
+ bestBid,
227
+ bestAsk,
228
+ spread,
229
+ spreadPercentage
230
+ };
231
+ }
232
+ catch (error) {
233
+ console.error("Error fetching market stats:", error);
234
+ throw error;
235
+ }
236
+ }
237
+ async function displayOrderBook(marketAddress, depth = 10, useSerum = false) {
238
+ try {
239
+ const marketData = KNOWN_MARKETS[marketAddress];
240
+ let marketName = marketData?.name || marketAddress;
241
+ // Try to get real symbols for the market name
242
+ try {
243
+ const marketInfo = await getMarketInfo(marketAddress, useSerum);
244
+ marketName = `${marketInfo.baseSymbol}/${marketInfo.quoteSymbol}`;
245
+ }
246
+ catch (error) {
247
+ // Use fallback name if metadata fetch fails
248
+ }
249
+ console.log(`\nšŸ“Š Order Book for Market: ${marketName}`);
250
+ console.log("=".repeat(60));
251
+ const { bids, asks } = await getRealOrderBook(marketAddress, depth, useSerum);
252
+ console.log("\nšŸ”“ ASKS (Sell Orders):");
253
+ console.log("Price\t\tSize");
254
+ console.log("-".repeat(30));
255
+ // Display asks in reverse order (highest price first)
256
+ asks.slice().reverse().forEach((ask) => {
257
+ console.log(`${ask.price.toFixed(4)}\t\t${ask.size.toFixed(4)}`);
258
+ });
259
+ console.log("\n🟢 BIDS (Buy Orders):");
260
+ console.log("Price\t\tSize");
261
+ console.log("-".repeat(30));
262
+ bids.forEach((bid) => {
263
+ console.log(`${bid.price.toFixed(4)}\t\t${bid.size.toFixed(4)}`);
264
+ });
265
+ // Calculate market stats from the order book data we already have
266
+ const bestBid = bids.length > 0 ? bids[0].price : null;
267
+ const bestAsk = asks.length > 0 ? asks[0].price : null;
268
+ const spread = bestBid && bestAsk ? bestAsk - bestBid : null;
269
+ const spreadPercentage = spread && bestBid ? (spread / bestBid) * 100 : null;
270
+ console.log("\nšŸ“ˆ Market Stats:");
271
+ console.log(`Total Bids: ${bids.length}`);
272
+ console.log(`Total Asks: ${asks.length}`);
273
+ console.log(`Best Bid: ${bestBid?.toFixed(4) || 'N/A'}`);
274
+ console.log(`Best Ask: ${bestAsk?.toFixed(4) || 'N/A'}`);
275
+ console.log(`Spread: ${spread?.toFixed(4) || 'N/A'}`);
276
+ console.log(`Spread %: ${spreadPercentage?.toFixed(2) || 'N/A'}%`);
277
+ }
278
+ catch (error) {
279
+ console.error("Error displaying order book:", error);
280
+ }
281
+ }
282
+ async function displayMarketInfo(marketAddress, useSerum = false) {
283
+ try {
284
+ const marketData = KNOWN_MARKETS[marketAddress];
285
+ let marketName = marketData?.name || marketAddress;
286
+ // Try to get real symbols for the market name
287
+ try {
288
+ const marketInfo = await getMarketInfo(marketAddress, useSerum);
289
+ marketName = `${marketInfo.baseSymbol}/${marketInfo.quoteSymbol}`;
290
+ }
291
+ catch (error) {
292
+ // Use fallback name if metadata fetch fails
293
+ }
294
+ console.log(`\nšŸŖ Market Information for: ${marketName}`);
295
+ console.log("=".repeat(60));
296
+ const marketInfo = await getMarketInfo(marketAddress, useSerum);
297
+ console.log(`Market Address: ${marketInfo.address}`);
298
+ console.log(`Base Mint: ${marketInfo.baseMint} (${marketInfo.baseSymbol})`);
299
+ console.log(`Quote Mint: ${marketInfo.quoteMint} (${marketInfo.quoteSymbol})`);
300
+ console.log(`Min Order Size: ${marketInfo.minOrderSize}`);
301
+ console.log(`Price Tick: ${marketInfo.priceTick}`);
302
+ console.log(`Event Queue Length: ${marketInfo.eventQueueLength}`);
303
+ console.log(`Request Queue Length: ${marketInfo.requestQueueLength}`);
304
+ console.log(`Bids Length: ${marketInfo.bidsLength}`);
305
+ console.log(`Asks Length: ${marketInfo.asksLength}`);
306
+ // Verify the market account
307
+ try {
308
+ await getMarketAccounts(marketAddress, useSerum);
309
+ const programName = useSerum ? "Serum" : "OpenBook";
310
+ console.log(`āœ… Market verified as ${programName} market`);
311
+ }
312
+ catch (error) {
313
+ console.log(`āŒ Market verification failed: ${error}`);
314
+ }
315
+ }
316
+ catch (error) {
317
+ console.error("Error displaying market info:", error);
318
+ }
319
+ }
320
+ function listKnownMarkets(useSerum = false) {
321
+ const programType = useSerum ? "Serum" : "OpenBook";
322
+ console.log(`\nšŸ“‹ Known ${programType} Markets:`);
323
+ console.log("=".repeat(60));
324
+ Object.entries(KNOWN_MARKETS).forEach(([address, market]) => {
325
+ console.log(`${market.name}: ${address}`);
326
+ });
327
+ }
328
+ // Function to add market to known markets
329
+ async function addMarketToKnownMarkets(marketAddress, useSerum = false) {
330
+ try {
331
+ console.log(`šŸ” Analyzing market: ${marketAddress}`);
332
+ // Load the market to get base and quote mints
333
+ const market = await loadOpenBookMarket(marketAddress, useSerum);
334
+ // Get token metadata for base and quote tokens
335
+ const baseMetadata = await getTokenMetadata(market.baseMintAddress.toString());
336
+ const quoteMetadata = await getTokenMetadata(market.quoteMintAddress.toString());
337
+ // Create market info
338
+ const marketInfo = {
339
+ name: `${baseMetadata.symbol}/${quoteMetadata.symbol}`,
340
+ baseMint: market.baseMintAddress.toString(),
341
+ quoteMint: market.quoteMintAddress.toString(),
342
+ minOrderSize: 1,
343
+ priceTick: 0.0001,
344
+ eventQueueLength: 2978,
345
+ requestQueueLength: 63,
346
+ bidsLength: 909,
347
+ asksLength: 909
348
+ };
349
+ // Add to known markets
350
+ KNOWN_MARKETS[marketAddress] = marketInfo;
351
+ // Add token symbols to known symbols if not already present
352
+ if (!KNOWN_TOKEN_SYMBOLS[market.baseMintAddress.toString()]) {
353
+ KNOWN_TOKEN_SYMBOLS[market.baseMintAddress.toString()] = baseMetadata.symbol;
354
+ }
355
+ if (!KNOWN_TOKEN_SYMBOLS[market.quoteMintAddress.toString()]) {
356
+ KNOWN_TOKEN_SYMBOLS[market.quoteMintAddress.toString()] = quoteMetadata.symbol;
357
+ }
358
+ console.log("āœ… Market added to known markets!");
359
+ console.log(`Market: ${marketInfo.name}`);
360
+ console.log(`Base Token: ${baseMetadata.symbol} (${market.baseMintAddress.toString()})`);
361
+ console.log(`Quote Token: ${quoteMetadata.symbol} (${market.quoteMintAddress.toString()})`);
362
+ // Display the updated known markets
363
+ console.log("\nšŸ“‹ Updated Known Markets:");
364
+ Object.entries(KNOWN_MARKETS).forEach(([address, info]) => {
365
+ console.log(`${info.name}: ${address}`);
366
+ });
367
+ }
368
+ catch (error) {
369
+ console.error("āŒ Error adding market to known markets:", error);
370
+ throw error;
371
+ }
372
+ }
373
+ // Function to save known markets to a file (for persistence)
374
+ function saveKnownMarketsToFile(useSerum = false) {
375
+ try {
376
+ const fs = require('fs');
377
+ const path = require('path');
378
+ const marketsData = {
379
+ markets: KNOWN_MARKETS,
380
+ symbols: KNOWN_TOKEN_SYMBOLS
381
+ };
382
+ // Choose the appropriate file based on program type
383
+ const fileName = useSerum ? 'known_serum_markets.json' : 'known_openbook_markets.json';
384
+ const filePath = path.join(__dirname, fileName);
385
+ fs.writeFileSync(filePath, JSON.stringify(marketsData, null, 2));
386
+ const programType = useSerum ? 'Serum' : 'OpenBook';
387
+ console.log(`šŸ’¾ Known ${programType} markets saved to ${fileName}`);
388
+ }
389
+ catch (error) {
390
+ console.error("āŒ Error saving known markets:", error);
391
+ }
392
+ }
393
+ // Function to load known markets from file
394
+ function loadKnownMarketsFromFile(useSerum = false) {
395
+ try {
396
+ const fs = require('fs');
397
+ const path = require('path');
398
+ // Choose the appropriate file based on program type
399
+ const fileName = useSerum ? 'known_serum_markets.json' : 'known_openbook_markets.json';
400
+ const filePath = path.join(__dirname, fileName);
401
+ if (fs.existsSync(filePath)) {
402
+ const data = JSON.parse(fs.readFileSync(filePath, 'utf8'));
403
+ // Load data from file
404
+ KNOWN_MARKETS = data.markets || {};
405
+ KNOWN_TOKEN_SYMBOLS = data.symbols || {};
406
+ const programType = useSerum ? 'Serum' : 'OpenBook';
407
+ console.log(`šŸ“‚ Loaded known ${programType} markets from file`);
408
+ console.log(`šŸ“Š Found ${Object.keys(KNOWN_MARKETS).length} markets and ${Object.keys(KNOWN_TOKEN_SYMBOLS).length} token symbols`);
409
+ }
410
+ else {
411
+ const programType = useSerum ? 'Serum' : 'OpenBook';
412
+ console.log(`ā„¹ļø No saved ${programType} markets file found, starting with empty markets`);
413
+ // Initialize with empty objects
414
+ KNOWN_MARKETS = {};
415
+ KNOWN_TOKEN_SYMBOLS = {};
416
+ }
417
+ }
418
+ catch (error) {
419
+ const programType = useSerum ? 'Serum' : 'OpenBook';
420
+ console.log(`ā„¹ļø Error loading ${programType} markets file, starting with empty markets`);
421
+ KNOWN_MARKETS = {};
422
+ KNOWN_TOKEN_SYMBOLS = {};
423
+ }
424
+ }
425
+ // Main function to run the fetcher
426
+ async function main() {
427
+ try {
428
+ console.log("šŸš€ OpenBook Order Fetcher (Real Data)");
429
+ console.log("=".repeat(60));
430
+ // Check if a specific market address was provided
431
+ const args = process.argv.slice(2);
432
+ const targetMarket = args[0] || MARKET_ADDRESS;
433
+ // Check for --serum flag first
434
+ const useSerumFlag = args.includes('--serum') || args.includes('-s');
435
+ // Auto-detect program type based on market ownership
436
+ let useSerum = useSerumFlag;
437
+ let detectedProgram = useSerumFlag ? "Serum" : "OpenBook";
438
+ // If a specific market is provided, try to detect its program
439
+ if (args[0] && !args.includes('--list') && !args.includes('-l')) {
440
+ try {
441
+ const marketPubkey = new web3_js_1.PublicKey(targetMarket);
442
+ const marketAccount = await connection.getAccountInfo(marketPubkey);
443
+ if (marketAccount) {
444
+ const owner = marketAccount.owner.toString();
445
+ if (owner === SERUM_PROGRAM_ID) {
446
+ useSerum = true;
447
+ detectedProgram = "Serum";
448
+ }
449
+ else if (owner === OPENBOOK_PROGRAM_ID) {
450
+ useSerum = false;
451
+ detectedProgram = "OpenBook";
452
+ }
453
+ console.log(`šŸ” Auto-detected: ${detectedProgram} market`);
454
+ }
455
+ }
456
+ catch (error) {
457
+ console.log("ā„¹ļø Could not auto-detect program, using OpenBook as default");
458
+ }
459
+ }
460
+ // Load known markets from appropriate file
461
+ loadKnownMarketsFromFile(useSerum);
462
+ if (args.includes('--list') || args.includes('-l')) {
463
+ listKnownMarkets(useSerum);
464
+ return;
465
+ }
466
+ // Check if --add flag is present
467
+ const shouldAdd = args.includes('--add') || args.includes('-a');
468
+ // If --add flag is present and a market address is provided
469
+ if (shouldAdd && args[0] && args[0] !== '--add' && args[0] !== '-a' && args[0] !== '--serum' && args[0] !== '-s') {
470
+ console.log("āž• Adding market to known markets...");
471
+ await addMarketToKnownMarkets(targetMarket, useSerum);
472
+ // Save to appropriate file
473
+ saveKnownMarketsToFile(useSerum);
474
+ console.log("\nāœ… Market added successfully!");
475
+ return;
476
+ }
477
+ // Display market information
478
+ await displayMarketInfo(targetMarket, useSerum);
479
+ // Display order book
480
+ await displayOrderBook(targetMarket, 15, useSerum);
481
+ console.log("\nāœ… Fetch completed successfully!");
482
+ console.log("\nšŸ“ Note: This implementation uses:");
483
+ console.log("1. Real OpenBook market loading via Serum SDK");
484
+ console.log("2. Direct blockchain order book fetching");
485
+ console.log("3. Real bids and asks from the market");
486
+ console.log("\nUsage:");
487
+ console.log(" npm run openbook # Fetch default market");
488
+ console.log(" npm run openbook <market_address> # Fetch market (auto-detects program)");
489
+ console.log(" npm run openbook <market_address> --add # Add market (auto-detects program)");
490
+ console.log(" npm run openbook --list # List OpenBook markets");
491
+ console.log(" npm run openbook --list --serum # List Serum markets");
492
+ console.log("\nAuto-detection:");
493
+ console.log(" The system automatically detects if a market is OpenBook or Serum");
494
+ console.log(" No need to specify --serum flag for most operations");
495
+ console.log("\nFiles:");
496
+ console.log(" known_openbook_markets.json # OpenBook markets");
497
+ console.log(" known_serum_markets.json # Serum markets");
498
+ }
499
+ catch (error) {
500
+ console.error("āŒ Error in main function:", error);
501
+ }
502
+ }
503
+ // Run the main function if this file is executed directly
504
+ if (require.main === module) {
505
+ main().catch((error) => {
506
+ console.error("āŒ Error in main function:", error);
507
+ });
508
+ }
509
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AA+mBI,sCAAa;AACb,oCAAY;AACZ,wCAAc;AACd,4CAAgB;AAChB,8CAAiB;AACjB,4CAAgB;AAChB,gDAAkB;AAClB,4CAAgB;AAIX,oBAAI;AA1nBb,6CAAwD;AAExD,gDAA8C;AAE9C,qBAAqB;AACrB,MAAM,cAAc,GAAG,8CAA8C,CAAC;AAEtE,cAAc;AACd,MAAM,mBAAmB,GAAG,6CAA6C,CAAC;AAC1E,MAAM,gBAAgB,GAAG,8CAA8C,CAAC;AAExE,uBAAuB;AACvB,MAAM,UAAU,GAAG,IAAI,oBAAU,CAAC,qCAAqC,EAAE,WAAW,CAAC,CAAC;AA4BtF,4DAA4D;AAC5D,IAAI,aAAa,GAA2B,EAAE,CAAC;AAC/C,IAAI,mBAAmB,GAA8B,EAAE,CAAC;AAExD,KAAK,UAAU,gBAAgB,CAAC,WAAmB;IAC/C,IAAI,CAAC;QACD,MAAM,UAAU,GAAG,IAAI,mBAAS,CAAC,WAAW,CAAC,CAAC;QAE9C,wCAAwC;QACxC,MAAM,WAAW,GAAG,mBAAmB,CAAC,WAA+C,CAAC,CAAC;QACzF,IAAI,WAAW,EAAE,CAAC;YACd,OAAO;gBACH,MAAM,EAAE,WAAW;gBACnB,IAAI,EAAE,WAAW;gBACjB,QAAQ,EAAE,CAAC,CAAC,0BAA0B;aACzC,CAAC;QACN,CAAC;QAED,6CAA6C;QAC7C,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC;QAEpE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC/C,CAAC;QAED,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC,IAAW,CAAC;QAC/C,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;QAEjD,+BAA+B;QAC/B,IAAI,CAAC;YACD,MAAM,CAAC,eAAe,CAAC,GAAG,mBAAS,CAAC,sBAAsB,CACtD;gBACI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;gBACvB,IAAI,mBAAS,CAAC,6CAA6C,CAAC,CAAC,QAAQ,EAAE;gBACvE,UAAU,CAAC,QAAQ,EAAE;aACxB,EACD,IAAI,mBAAS,CAAC,6CAA6C,CAAC,CAC/D,CAAC;YAEF,MAAM,eAAe,GAAG,MAAM,UAAU,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;YAEzE,IAAI,eAAe,EAAE,CAAC;gBAClB,0BAA0B;gBAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;gBAC7D,OAAO;oBACH,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,IAAI,SAAS;oBACzC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,eAAe;oBAC3C,QAAQ,EAAE,QAAQ;iBACrB,CAAC;YACN,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,CAAC,kCAAkC,WAAW,EAAE,CAAC,CAAC;QACjE,CAAC;QAED,uCAAuC;QACvC,OAAO;YACH,MAAM,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;YAC/B,IAAI,EAAE,eAAe;YACrB,QAAQ,EAAE,QAAQ;SACrB,CAAC;IAEN,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,qCAAqC,WAAW,GAAG,EAAE,KAAK,CAAC,CAAC;QAC1E,OAAO;YACH,MAAM,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;YAC/B,IAAI,EAAE,eAAe;YACrB,QAAQ,EAAE,CAAC;SACd,CAAC;IACN,CAAC;AACL,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,aAAqB,EAAE,WAAoB,KAAK;IACzE,IAAI,CAAC;QACD,sCAAsC;QACtC,MAAM,UAAU,GAAG,aAAa,CAAC,aAA2C,CAAC,CAAC;QAE9E,IAAI,UAAU,EAAE,CAAC;YACb,4CAA4C;YAC5C,MAAM,YAAY,GAAG,MAAM,gBAAgB,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YACjE,MAAM,aAAa,GAAG,MAAM,gBAAgB,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;YAEnE,OAAO;gBACH,OAAO,EAAE,aAAa;gBACtB,QAAQ,EAAE,UAAU,CAAC,QAAQ;gBAC7B,SAAS,EAAE,UAAU,CAAC,SAAS;gBAC/B,UAAU,EAAE,YAAY,CAAC,MAAM;gBAC/B,WAAW,EAAE,aAAa,CAAC,MAAM;gBACjC,YAAY,EAAE,UAAU,CAAC,YAAY;gBACrC,SAAS,EAAE,UAAU,CAAC,SAAS;gBAC/B,gBAAgB,EAAE,UAAU,CAAC,gBAAgB;gBAC7C,kBAAkB,EAAE,UAAU,CAAC,kBAAkB;gBACjD,UAAU,EAAE,UAAU,CAAC,UAAU;gBACjC,UAAU,EAAE,UAAU,CAAC,UAAU;aACpC,CAAC;QACN,CAAC;aAAM,CAAC;YACJ,uCAAuC;YACvC,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;YAEjE,4CAA4C;YAC5C,MAAM,YAAY,GAAG,MAAM,gBAAgB,CAAC,MAAM,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC/E,MAAM,aAAa,GAAG,MAAM,gBAAgB,CAAC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,CAAC;YAEjF,OAAO;gBACH,OAAO,EAAE,aAAa;gBACtB,QAAQ,EAAE,MAAM,CAAC,eAAe,CAAC,QAAQ,EAAE;gBAC3C,SAAS,EAAE,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE;gBAC7C,UAAU,EAAE,YAAY,CAAC,MAAM;gBAC/B,WAAW,EAAE,aAAa,CAAC,MAAM;gBACjC,YAAY,EAAE,CAAC,EAAE,qCAAqC;gBACtD,SAAS,EAAE,MAAM;gBACjB,gBAAgB,EAAE,IAAI;gBACtB,kBAAkB,EAAE,EAAE;gBACtB,UAAU,EAAE,GAAG;gBACf,UAAU,EAAE,GAAG;aAClB,CAAC;QACN,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;QACpD,MAAM,KAAK,CAAC;IAChB,CAAC;AACL,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,aAAqB,EAAE,WAAoB,KAAK;IAC7E,IAAI,CAAC;QACD,MAAM,YAAY,GAAG,IAAI,mBAAS,CAAC,aAAa,CAAC,CAAC;QAClD,MAAM,aAAa,GAAG,MAAM,UAAU,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QAEpE,IAAI,CAAC,aAAa,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAChD,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,aAAa,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAEvD,2CAA2C;QAC3C,MAAM,iBAAiB,GAAG,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,mBAAmB,CAAC;QAC5E,MAAM,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC;QAEpD,IAAI,aAAa,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,iBAAiB,EAAE,CAAC;YACvD,MAAM,IAAI,KAAK,CAAC,uBAAuB,WAAW,oBAAoB,aAAa,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAC5G,CAAC;QAED,OAAO,aAAa,CAAC;IACzB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAC;QACxD,MAAM,KAAK,CAAC;IAChB,CAAC;AACL,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,aAAqB,EAAE,WAAoB,KAAK;IAC9E,IAAI,CAAC;QACD,MAAM,YAAY,GAAG,IAAI,mBAAS,CAAC,aAAa,CAAC,CAAC;QAElD,+CAA+C;QAC/C,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,mBAAmB,CAAC;QAEpE,mDAAmD;QACnD,MAAM,MAAM,GAAG,MAAM,cAAM,CAAC,IAAI,CAC5B,UAAU,EACV,YAAY,EACZ,EAAE,EACF,IAAI,mBAAS,CAAC,SAAS,CAAC,CAC3B,CAAC;QAEF,MAAM,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,KAAK,WAAW,8BAA8B,CAAC,CAAC;QAE5D,OAAO,MAAM,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,MAAM,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC;QACpD,OAAO,CAAC,KAAK,CAAC,iBAAiB,WAAW,UAAU,EAAE,KAAK,CAAC,CAAC;QAC7D,MAAM,KAAK,CAAC;IAChB,CAAC;AACL,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,aAAqB,EAAE,QAAgB,EAAE,EAAE,WAAoB,KAAK;IAIhG,IAAI,CAAC;QACD,MAAM,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,oCAAoC,WAAW,KAAK,CAAC,CAAC;QAElE,2CAA2C;QAC3C,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;QAEjE,oCAAoC;QACpC,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;QAC3C,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC/C,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAE/C,4BAA4B;QAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,kBAAkB;QACpD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,kBAAkB;QAEpD,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QAE7C,4BAA4B;QAC5B,MAAM,SAAS,GAAqB,SAAS,CAAC,GAAG,CAAC,CAAC,GAAQ,EAAE,EAAE,CAAC,CAAC;YAC7D,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,yBAAyB;YACxC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,EAAG,yBAAyB;YACxC,IAAI,EAAE,KAAc;SACvB,CAAC,CAAC,CAAC;QAEJ,6BAA6B;QAC7B,MAAM,SAAS,GAAqB,SAAS,CAAC,GAAG,CAAC,CAAC,GAAQ,EAAE,EAAE,CAAC,CAAC;YAC7D,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,yBAAyB;YACxC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,EAAG,yBAAyB;YACxC,IAAI,EAAE,KAAc;SACvB,CAAC,CAAC,CAAC;QAEJ,OAAO,CAAC,GAAG,CAAC,8BAA8B,SAAS,CAAC,MAAM,UAAU,SAAS,CAAC,MAAM,OAAO,CAAC,CAAC;QAE7F,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAEhD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAC;QAC1D,MAAM,KAAK,CAAC;IAChB,CAAC;AACL,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,aAAqB,EAAE,QAAgB,EAAE;IAIjE,IAAI,CAAC;QACD,uEAAuE;QACvE,MAAM,aAAa,GAAG,MAAM,iBAAiB,CAAC,aAAa,CAAC,CAAC;QAE7D,+CAA+C;QAC/C,OAAO,MAAM,gBAAgB,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;IAExD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,4CAA4C,EAAE,KAAK,CAAC,CAAC;QACnE,MAAM,KAAK,CAAC;IAChB,CAAC;AACL,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,aAAqB,EAAE,WAAoB,KAAK;IAQ1E,IAAI,CAAC;QACD,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,gBAAgB,CAAC,aAAa,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;QAE1E,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;QACvD,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;QAEvD,MAAM,MAAM,GAAG,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;QAC7D,MAAM,gBAAgB,GAAG,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;QAE7E,OAAO;YACH,SAAS,EAAE,IAAI,CAAC,MAAM;YACtB,SAAS,EAAE,IAAI,CAAC,MAAM;YACtB,OAAO;YACP,OAAO;YACP,MAAM;YACN,gBAAgB;SACnB,CAAC;IACN,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;QACrD,MAAM,KAAK,CAAC;IAChB,CAAC;AACL,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,aAAqB,EAAE,QAAgB,EAAE,EAAE,WAAoB,KAAK;IAChG,IAAI,CAAC;QACD,MAAM,UAAU,GAAG,aAAa,CAAC,aAA2C,CAAC,CAAC;QAC9E,IAAI,UAAU,GAAG,UAAU,EAAE,IAAI,IAAI,aAAa,CAAC;QAEnD,8CAA8C;QAC9C,IAAI,CAAC;YACD,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;YAChE,UAAU,GAAG,GAAG,UAAU,CAAC,UAAU,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC;QACtE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,4CAA4C;QAChD,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,+BAA+B,UAAU,EAAE,CAAC,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAE7B,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,gBAAgB,CAAC,aAAa,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;QAE9E,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,GAAG,CAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAE7B,sDAAsD;QACtD,IAAI,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YACnC,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACrE,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,GAAG,CAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAE7B,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YACjB,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACrE,CAAC,CAAC,CAAC;QAEH,kEAAkE;QAClE,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;QACvD,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;QACvD,MAAM,MAAM,GAAG,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;QAC7D,MAAM,gBAAgB,GAAG,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;QAE7E,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,aAAa,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,aAAa,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,WAAW,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,aAAa,gBAAgB,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC;IAEvE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;IACzD,CAAC;AACL,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,aAAqB,EAAE,WAAoB,KAAK;IAC7E,IAAI,CAAC;QACD,MAAM,UAAU,GAAG,aAAa,CAAC,aAA2C,CAAC,CAAC;QAC9E,IAAI,UAAU,GAAG,UAAU,EAAE,IAAI,IAAI,aAAa,CAAC;QAEnD,8CAA8C;QAC9C,IAAI,CAAC;YACD,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;YAChE,UAAU,GAAG,GAAG,UAAU,CAAC,UAAU,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC;QACtE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,4CAA4C;QAChD,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,gCAAgC,UAAU,EAAE,CAAC,CAAC;QAC1D,OAAO,CAAC,GAAG,CAAC,GAAG,CAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAE7B,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;QAEhE,OAAO,CAAC,GAAG,CAAC,mBAAmB,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,cAAc,UAAU,CAAC,QAAQ,KAAK,UAAU,CAAC,UAAU,GAAG,CAAC,CAAC;QAC5E,OAAO,CAAC,GAAG,CAAC,eAAe,UAAU,CAAC,SAAS,KAAK,UAAU,CAAC,WAAW,GAAG,CAAC,CAAC;QAC/E,OAAO,CAAC,GAAG,CAAC,mBAAmB,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC;QAC1D,OAAO,CAAC,GAAG,CAAC,eAAe,UAAU,CAAC,SAAS,EAAE,CAAC,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,uBAAuB,UAAU,CAAC,gBAAgB,EAAE,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,yBAAyB,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAC;QACtE,OAAO,CAAC,GAAG,CAAC,gBAAgB,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,gBAAgB,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC;QAErD,4BAA4B;QAC5B,IAAI,CAAC;YACD,MAAM,iBAAiB,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;YACjD,MAAM,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC;YACpD,OAAO,CAAC,GAAG,CAAC,wBAAwB,WAAW,SAAS,CAAC,CAAC;QAC9D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,CAAC,iCAAiC,KAAK,EAAE,CAAC,CAAC;QAC1D,CAAC;IAEL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;IAC1D,CAAC;AACL,CAAC;AAED,SAAS,gBAAgB,CAAC,WAAoB,KAAK;IAC/C,MAAM,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC;IACpD,OAAO,CAAC,GAAG,CAAC,cAAc,WAAW,WAAW,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAE7B,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,EAAE;QACxD,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;AACP,CAAC;AAED,0CAA0C;AAC1C,KAAK,UAAU,uBAAuB,CAAC,aAAqB,EAAE,WAAoB,KAAK;IACnF,IAAI,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,wBAAwB,aAAa,EAAE,CAAC,CAAC;QAErD,8CAA8C;QAC9C,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;QAEjE,+CAA+C;QAC/C,MAAM,YAAY,GAAG,MAAM,gBAAgB,CAAC,MAAM,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC/E,MAAM,aAAa,GAAG,MAAM,gBAAgB,CAAC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,CAAC;QAEjF,qBAAqB;QACrB,MAAM,UAAU,GAAG;YACf,IAAI,EAAE,GAAG,YAAY,CAAC,MAAM,IAAI,aAAa,CAAC,MAAM,EAAE;YACtD,QAAQ,EAAE,MAAM,CAAC,eAAe,CAAC,QAAQ,EAAE;YAC3C,SAAS,EAAE,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE;YAC7C,YAAY,EAAE,CAAC;YACf,SAAS,EAAE,MAAM;YACjB,gBAAgB,EAAE,IAAI;YACtB,kBAAkB,EAAE,EAAE;YACtB,UAAU,EAAE,GAAG;YACf,UAAU,EAAE,GAAG;SAClB,CAAC;QAEF,uBAAuB;QACtB,aAAqB,CAAC,aAAa,CAAC,GAAG,UAAU,CAAC;QAEnD,4DAA4D;QAC5D,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,eAAe,CAAC,QAAQ,EAAsC,CAAC,EAAE,CAAC;YAC7F,mBAA2B,CAAC,MAAM,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC;QAC1F,CAAC;QAED,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAsC,CAAC,EAAE,CAAC;YAC9F,mBAA2B,CAAC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,CAAC;QAC5F,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,WAAW,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,eAAe,YAAY,CAAC,MAAM,KAAK,MAAM,CAAC,eAAe,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QACzF,OAAO,CAAC,GAAG,CAAC,gBAAgB,aAAa,CAAC,MAAM,KAAK,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAE5F,oCAAoC;QACpC,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;QAC3C,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE;YACtD,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;IAEP,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAE,KAAK,CAAC,CAAC;QAChE,MAAM,KAAK,CAAC;IAChB,CAAC;AACL,CAAC;AAED,6DAA6D;AAC7D,SAAS,sBAAsB,CAAC,WAAoB,KAAK;IACrD,IAAI,CAAC;QACD,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QACzB,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;QAE7B,MAAM,WAAW,GAAG;YAChB,OAAO,EAAE,aAAa;YACtB,OAAO,EAAE,mBAAmB;SAC/B,CAAC;QAEF,oDAAoD;QACpD,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,6BAA6B,CAAC;QACvF,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAChD,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAEjE,MAAM,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,YAAY,WAAW,qBAAqB,QAAQ,EAAE,CAAC,CAAC;IACxE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;IAC1D,CAAC;AACL,CAAC;AAED,2CAA2C;AAC3C,SAAS,wBAAwB,CAAC,WAAoB,KAAK;IACvD,IAAI,CAAC;QACD,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QACzB,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;QAE7B,oDAAoD;QACpD,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,6BAA6B,CAAC;QACvF,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAEhD,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;YAE3D,sBAAsB;YACtB,aAAa,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;YACnC,mBAAmB,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;YAEzC,MAAM,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC;YACpD,OAAO,CAAC,GAAG,CAAC,mBAAmB,WAAW,oBAAoB,CAAC,CAAC;YAChE,OAAO,CAAC,GAAG,CAAC,YAAY,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,gBAAgB,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,MAAM,gBAAgB,CAAC,CAAC;QACtI,CAAC;aAAM,CAAC;YACJ,MAAM,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC;YACpD,OAAO,CAAC,GAAG,CAAC,gBAAgB,WAAW,kDAAkD,CAAC,CAAC;YAC3F,gCAAgC;YAChC,aAAa,GAAG,EAAE,CAAC;YACnB,mBAAmB,GAAG,EAAE,CAAC;QAC7B,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,MAAM,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,qBAAqB,WAAW,4CAA4C,CAAC,CAAC;QAC1F,aAAa,GAAG,EAAE,CAAC;QACnB,mBAAmB,GAAG,EAAE,CAAC;IAC7B,CAAC;AACL,CAAC;AAED,mCAAmC;AACnC,KAAK,UAAU,IAAI;IACf,IAAI,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAE7B,kDAAkD;QAClD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,YAAY,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,cAAc,CAAC;QAE/C,+BAA+B;QAC/B,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAErE,qDAAqD;QACrD,IAAI,QAAQ,GAAG,YAAY,CAAC;QAC5B,IAAI,eAAe,GAAG,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC;QAE1D,8DAA8D;QAC9D,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9D,IAAI,CAAC;gBACD,MAAM,YAAY,GAAG,IAAI,mBAAS,CAAC,YAAY,CAAC,CAAC;gBACjD,MAAM,aAAa,GAAG,MAAM,UAAU,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;gBAEpE,IAAI,aAAa,EAAE,CAAC;oBAChB,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;oBAC7C,IAAI,KAAK,KAAK,gBAAgB,EAAE,CAAC;wBAC7B,QAAQ,GAAG,IAAI,CAAC;wBAChB,eAAe,GAAG,OAAO,CAAC;oBAC9B,CAAC;yBAAM,IAAI,KAAK,KAAK,mBAAmB,EAAE,CAAC;wBACvC,QAAQ,GAAG,KAAK,CAAC;wBACjB,eAAe,GAAG,UAAU,CAAC;oBACjC,CAAC;oBACD,OAAO,CAAC,GAAG,CAAC,qBAAqB,eAAe,SAAS,CAAC,CAAC;gBAC/D,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACb,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC;YAChF,CAAC;QACL,CAAC;QAED,2CAA2C;QAC3C,wBAAwB,CAAC,QAAQ,CAAC,CAAC;QAEnC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACjD,gBAAgB,CAAC,QAAQ,CAAC,CAAC;YAC3B,OAAO;QACX,CAAC;QAED,iCAAiC;QACjC,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEhE,4DAA4D;QAC5D,IAAI,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YAC/G,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;YACnD,MAAM,uBAAuB,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;YAEtD,2BAA2B;YAC3B,sBAAsB,CAAC,QAAQ,CAAC,CAAC;YAEjC,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;YAC9C,OAAO;QACX,CAAC;QAED,6BAA6B;QAC7B,MAAM,iBAAiB,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;QAEhD,qBAAqB;QACrB,MAAM,gBAAgB,CAAC,YAAY,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;QAEnD,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,8EAA8E,CAAC,CAAC;QAC5F,OAAO,CAAC,GAAG,CAAC,6FAA6F,CAAC,CAAC;QAC3G,OAAO,CAAC,GAAG,CAAC,2FAA2F,CAAC,CAAC;QACzG,OAAO,CAAC,GAAG,CAAC,+EAA+E,CAAC,CAAC;QAC7F,OAAO,CAAC,GAAG,CAAC,4EAA4E,CAAC,CAAC;QAC1F,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,qEAAqE,CAAC,CAAC;QACnF,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;QACrE,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,0EAA0E,CAAC,CAAC;QACxF,OAAO,CAAC,GAAG,CAAC,uEAAuE,CAAC,CAAC;IAEzF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;IACtD,CAAC;AACL,CAAC;AAiBD,0DAA0D;AAC1D,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;IAC1B,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QACnB,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;AACP,CAAC"}
package/package.json ADDED
@@ -0,0 +1,51 @@
1
+ {
2
+ "name": "openbook-cli",
3
+ "version": "1.0.0",
4
+ "description": "A comprehensive CLI tool for interacting with OpenBook and Serum DEX markets on Solana",
5
+ "main": "dist/index.js",
6
+ "bin": {
7
+ "openbook-cli": "./dist/cli.js"
8
+ },
9
+ "scripts": {
10
+ "build": "tsc",
11
+ "start": "node dist/cli.js",
12
+ "dev": "ts-node src/index.ts",
13
+ "openbook": "ts-node src/index.ts",
14
+ "test": "echo \"Error: no test specified\" && exit 1"
15
+ },
16
+ "keywords": [
17
+ "openbook",
18
+ "serum",
19
+ "solana",
20
+ "dex",
21
+ "trading",
22
+ "cli",
23
+ "blockchain",
24
+ "defi"
25
+ ],
26
+ "author": "Your Name",
27
+ "license": "MIT",
28
+ "dependencies": {
29
+ "@project-serum/serum": "^0.13.65",
30
+ "@solana/spl-token": "^0.3.9",
31
+ "@solana/web3.js": "^1.87.6",
32
+ "bn.js": "^5.2.1"
33
+ },
34
+ "devDependencies": {
35
+ "@types/bn.js": "^5.1.0",
36
+ "@types/node": "^20.10.0",
37
+ "ts-node": "^10.9.1",
38
+ "typescript": "^5.3.2"
39
+ },
40
+ "engines": {
41
+ "node": ">=16.0.0"
42
+ },
43
+ "repository": {
44
+ "type": "git",
45
+ "url": "https://github.com/yourusername/openbook-cli.git"
46
+ },
47
+ "bugs": {
48
+ "url": "https://github.com/yourusername/openbook-cli/issues"
49
+ },
50
+ "homepage": "https://github.com/yourusername/openbook-cli#readme"
51
+ }
package/src/cli.ts ADDED
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env node
2
+
3
+ import { main } from './index';
4
+
5
+ // Run the CLI
6
+ main().catch((error: any) => {
7
+ console.error('āŒ CLI Error:', error);
8
+ process.exit(1);
9
+ });