@zeroexcore/trader 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/README.md +125 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +28 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/book.d.ts +3 -0
- package/dist/commands/book.d.ts.map +1 -0
- package/dist/commands/book.js +44 -0
- package/dist/commands/book.js.map +1 -0
- package/dist/commands/diagnose.d.ts +3 -0
- package/dist/commands/diagnose.d.ts.map +1 -0
- package/dist/commands/diagnose.js +148 -0
- package/dist/commands/diagnose.js.map +1 -0
- package/dist/commands/nft/floor.d.ts +3 -0
- package/dist/commands/nft/floor.d.ts.map +1 -0
- package/dist/commands/nft/floor.js +30 -0
- package/dist/commands/nft/floor.js.map +1 -0
- package/dist/commands/nft/index.d.ts +3 -0
- package/dist/commands/nft/index.d.ts.map +1 -0
- package/dist/commands/nft/index.js +14 -0
- package/dist/commands/nft/index.js.map +1 -0
- package/dist/commands/nft/listings.d.ts +3 -0
- package/dist/commands/nft/listings.d.ts.map +1 -0
- package/dist/commands/nft/listings.js +37 -0
- package/dist/commands/nft/listings.js.map +1 -0
- package/dist/commands/nft/popular.d.ts +3 -0
- package/dist/commands/nft/popular.d.ts.map +1 -0
- package/dist/commands/nft/popular.js +32 -0
- package/dist/commands/nft/popular.js.map +1 -0
- package/dist/commands/nft/portfolio.d.ts +3 -0
- package/dist/commands/nft/portfolio.d.ts.map +1 -0
- package/dist/commands/nft/portfolio.js +43 -0
- package/dist/commands/nft/portfolio.js.map +1 -0
- package/dist/commands/nft/search.d.ts +3 -0
- package/dist/commands/nft/search.d.ts.map +1 -0
- package/dist/commands/nft/search.js +36 -0
- package/dist/commands/nft/search.js.map +1 -0
- package/dist/commands/nft.d.ts +3 -0
- package/dist/commands/nft.d.ts.map +1 -0
- package/dist/commands/nft.js +165 -0
- package/dist/commands/nft.js.map +1 -0
- package/dist/commands/nfts/floor.d.ts +3 -0
- package/dist/commands/nfts/floor.d.ts.map +1 -0
- package/dist/commands/nfts/floor.js +30 -0
- package/dist/commands/nfts/floor.js.map +1 -0
- package/dist/commands/nfts/index.d.ts +3 -0
- package/dist/commands/nfts/index.d.ts.map +1 -0
- package/dist/commands/nfts/index.js +14 -0
- package/dist/commands/nfts/index.js.map +1 -0
- package/dist/commands/nfts/listings.d.ts +3 -0
- package/dist/commands/nfts/listings.d.ts.map +1 -0
- package/dist/commands/nfts/listings.js +37 -0
- package/dist/commands/nfts/listings.js.map +1 -0
- package/dist/commands/nfts/popular.d.ts +3 -0
- package/dist/commands/nfts/popular.d.ts.map +1 -0
- package/dist/commands/nfts/popular.js +32 -0
- package/dist/commands/nfts/popular.js.map +1 -0
- package/dist/commands/nfts/positions.d.ts +3 -0
- package/dist/commands/nfts/positions.d.ts.map +1 -0
- package/dist/commands/nfts/positions.js +23 -0
- package/dist/commands/nfts/positions.js.map +1 -0
- package/dist/commands/nfts/search.d.ts +3 -0
- package/dist/commands/nfts/search.d.ts.map +1 -0
- package/dist/commands/nfts/search.js +36 -0
- package/dist/commands/nfts/search.js.map +1 -0
- package/dist/commands/perps/index.d.ts +3 -0
- package/dist/commands/perps/index.d.ts.map +1 -0
- package/dist/commands/perps/index.js +10 -0
- package/dist/commands/perps/index.js.map +1 -0
- package/dist/commands/perps/info.d.ts +3 -0
- package/dist/commands/perps/info.d.ts.map +1 -0
- package/dist/commands/perps/info.js +51 -0
- package/dist/commands/perps/info.js.map +1 -0
- package/dist/commands/perps/markets.d.ts +3 -0
- package/dist/commands/perps/markets.d.ts.map +1 -0
- package/dist/commands/perps/markets.js +43 -0
- package/dist/commands/perps/markets.js.map +1 -0
- package/dist/commands/perps/pool.d.ts +3 -0
- package/dist/commands/perps/pool.d.ts.map +1 -0
- package/dist/commands/perps/pool.js +33 -0
- package/dist/commands/perps/pool.js.map +1 -0
- package/dist/commands/perps/positions.d.ts +3 -0
- package/dist/commands/perps/positions.d.ts.map +1 -0
- package/dist/commands/perps/positions.js +68 -0
- package/dist/commands/perps/positions.js.map +1 -0
- package/dist/commands/perps/show.d.ts +3 -0
- package/dist/commands/perps/show.d.ts.map +1 -0
- package/dist/commands/perps/show.js +37 -0
- package/dist/commands/perps/show.js.map +1 -0
- package/dist/commands/perps.d.ts +3 -0
- package/dist/commands/perps.d.ts.map +1 -0
- package/dist/commands/perps.js +186 -0
- package/dist/commands/perps.js.map +1 -0
- package/dist/commands/portfolio.d.ts +3 -0
- package/dist/commands/portfolio.d.ts.map +1 -0
- package/dist/commands/portfolio.js +89 -0
- package/dist/commands/portfolio.js.map +1 -0
- package/dist/commands/positions/close.d.ts +3 -0
- package/dist/commands/positions/close.d.ts.map +1 -0
- package/dist/commands/positions/close.js +31 -0
- package/dist/commands/positions/close.js.map +1 -0
- package/dist/commands/positions/filter.d.ts +3 -0
- package/dist/commands/positions/filter.d.ts.map +1 -0
- package/dist/commands/positions/filter.js +20 -0
- package/dist/commands/positions/filter.js.map +1 -0
- package/dist/commands/positions/index.d.ts +3 -0
- package/dist/commands/positions/index.d.ts.map +1 -0
- package/dist/commands/positions/index.js +22 -0
- package/dist/commands/positions/index.js.map +1 -0
- package/dist/commands/positions/list.d.ts +3 -0
- package/dist/commands/positions/list.d.ts.map +1 -0
- package/dist/commands/positions/list.js +38 -0
- package/dist/commands/positions/list.js.map +1 -0
- package/dist/commands/positions/note.d.ts +3 -0
- package/dist/commands/positions/note.d.ts.map +1 -0
- package/dist/commands/positions/note.js +19 -0
- package/dist/commands/positions/note.js.map +1 -0
- package/dist/commands/positions/open.d.ts +3 -0
- package/dist/commands/positions/open.d.ts.map +1 -0
- package/dist/commands/positions/open.js +47 -0
- package/dist/commands/positions/open.js.map +1 -0
- package/dist/commands/positions/show.d.ts +3 -0
- package/dist/commands/positions/show.d.ts.map +1 -0
- package/dist/commands/positions/show.js +46 -0
- package/dist/commands/positions/show.js.map +1 -0
- package/dist/commands/positions/stats.d.ts +3 -0
- package/dist/commands/positions/stats.d.ts.map +1 -0
- package/dist/commands/positions/stats.js +27 -0
- package/dist/commands/positions/stats.js.map +1 -0
- package/dist/commands/positions/tag.d.ts +3 -0
- package/dist/commands/positions/tag.d.ts.map +1 -0
- package/dist/commands/positions/tag.js +19 -0
- package/dist/commands/positions/tag.js.map +1 -0
- package/dist/commands/positions/update.d.ts +3 -0
- package/dist/commands/positions/update.d.ts.map +1 -0
- package/dist/commands/positions/update.js +35 -0
- package/dist/commands/positions/update.js.map +1 -0
- package/dist/commands/positions.d.ts +3 -0
- package/dist/commands/positions.d.ts.map +1 -0
- package/dist/commands/positions.js +247 -0
- package/dist/commands/positions.js.map +1 -0
- package/dist/commands/predict/browse.d.ts +3 -0
- package/dist/commands/predict/browse.d.ts.map +1 -0
- package/dist/commands/predict/browse.js +46 -0
- package/dist/commands/predict/browse.js.map +1 -0
- package/dist/commands/predict/buy.d.ts +3 -0
- package/dist/commands/predict/buy.d.ts.map +1 -0
- package/dist/commands/predict/buy.js +79 -0
- package/dist/commands/predict/buy.js.map +1 -0
- package/dist/commands/predict/claim.d.ts +3 -0
- package/dist/commands/predict/claim.d.ts.map +1 -0
- package/dist/commands/predict/claim.js +58 -0
- package/dist/commands/predict/claim.js.map +1 -0
- package/dist/commands/predict/close.d.ts +3 -0
- package/dist/commands/predict/close.d.ts.map +1 -0
- package/dist/commands/predict/close.js +56 -0
- package/dist/commands/predict/close.js.map +1 -0
- package/dist/commands/predict/index.d.ts +3 -0
- package/dist/commands/predict/index.d.ts.map +1 -0
- package/dist/commands/predict/index.js +20 -0
- package/dist/commands/predict/index.js.map +1 -0
- package/dist/commands/predict/list.d.ts +3 -0
- package/dist/commands/predict/list.d.ts.map +1 -0
- package/dist/commands/predict/list.js +46 -0
- package/dist/commands/predict/list.js.map +1 -0
- package/dist/commands/predict/market.d.ts +3 -0
- package/dist/commands/predict/market.d.ts.map +1 -0
- package/dist/commands/predict/market.js +37 -0
- package/dist/commands/predict/market.js.map +1 -0
- package/dist/commands/predict/positions.d.ts +3 -0
- package/dist/commands/predict/positions.d.ts.map +1 -0
- package/dist/commands/predict/positions.js +71 -0
- package/dist/commands/predict/positions.js.map +1 -0
- package/dist/commands/predict/search.d.ts +3 -0
- package/dist/commands/predict/search.d.ts.map +1 -0
- package/dist/commands/predict/search.js +32 -0
- package/dist/commands/predict/search.js.map +1 -0
- package/dist/commands/predict/sell.d.ts +3 -0
- package/dist/commands/predict/sell.d.ts.map +1 -0
- package/dist/commands/predict/sell.js +65 -0
- package/dist/commands/predict/sell.js.map +1 -0
- package/dist/commands/predict/show.d.ts +3 -0
- package/dist/commands/predict/show.d.ts.map +1 -0
- package/dist/commands/predict/show.js +37 -0
- package/dist/commands/predict/show.js.map +1 -0
- package/dist/commands/predict/watch.d.ts +3 -0
- package/dist/commands/predict/watch.d.ts.map +1 -0
- package/dist/commands/predict/watch.js +73 -0
- package/dist/commands/predict/watch.js.map +1 -0
- package/dist/commands/predict.d.ts +3 -0
- package/dist/commands/predict.d.ts.map +1 -0
- package/dist/commands/predict.js +484 -0
- package/dist/commands/predict.js.map +1 -0
- package/dist/commands/shared.d.ts +18 -0
- package/dist/commands/shared.d.ts.map +1 -0
- package/dist/commands/shared.js +51 -0
- package/dist/commands/shared.js.map +1 -0
- package/dist/commands/tokens/add.d.ts +3 -0
- package/dist/commands/tokens/add.d.ts.map +1 -0
- package/dist/commands/tokens/add.js +17 -0
- package/dist/commands/tokens/add.js.map +1 -0
- package/dist/commands/tokens/browse.d.ts +3 -0
- package/dist/commands/tokens/browse.d.ts.map +1 -0
- package/dist/commands/tokens/browse.js +19 -0
- package/dist/commands/tokens/browse.js.map +1 -0
- package/dist/commands/tokens/index.d.ts +3 -0
- package/dist/commands/tokens/index.d.ts.map +1 -0
- package/dist/commands/tokens/index.js +22 -0
- package/dist/commands/tokens/index.js.map +1 -0
- package/dist/commands/tokens/info.d.ts +3 -0
- package/dist/commands/tokens/info.d.ts.map +1 -0
- package/dist/commands/tokens/info.js +13 -0
- package/dist/commands/tokens/info.js.map +1 -0
- package/dist/commands/tokens/list.d.ts +3 -0
- package/dist/commands/tokens/list.d.ts.map +1 -0
- package/dist/commands/tokens/list.js +16 -0
- package/dist/commands/tokens/list.js.map +1 -0
- package/dist/commands/tokens/positions.d.ts +3 -0
- package/dist/commands/tokens/positions.d.ts.map +1 -0
- package/dist/commands/tokens/positions.js +25 -0
- package/dist/commands/tokens/positions.js.map +1 -0
- package/dist/commands/tokens/quote.d.ts +3 -0
- package/dist/commands/tokens/quote.d.ts.map +1 -0
- package/dist/commands/tokens/quote.js +50 -0
- package/dist/commands/tokens/quote.js.map +1 -0
- package/dist/commands/tokens/remove.d.ts +3 -0
- package/dist/commands/tokens/remove.d.ts.map +1 -0
- package/dist/commands/tokens/remove.js +17 -0
- package/dist/commands/tokens/remove.js.map +1 -0
- package/dist/commands/tokens/search.d.ts +3 -0
- package/dist/commands/tokens/search.d.ts.map +1 -0
- package/dist/commands/tokens/search.js +19 -0
- package/dist/commands/tokens/search.js.map +1 -0
- package/dist/commands/tokens/swap.d.ts +3 -0
- package/dist/commands/tokens/swap.d.ts.map +1 -0
- package/dist/commands/tokens/swap.js +88 -0
- package/dist/commands/tokens/swap.js.map +1 -0
- package/dist/commands/trade/index.d.ts +3 -0
- package/dist/commands/trade/index.d.ts.map +1 -0
- package/dist/commands/trade/index.js +8 -0
- package/dist/commands/trade/index.js.map +1 -0
- package/dist/commands/trade/info.d.ts +3 -0
- package/dist/commands/trade/info.d.ts.map +1 -0
- package/dist/commands/trade/info.js +37 -0
- package/dist/commands/trade/info.js.map +1 -0
- package/dist/commands/trade/quote.d.ts +3 -0
- package/dist/commands/trade/quote.d.ts.map +1 -0
- package/dist/commands/trade/quote.js +56 -0
- package/dist/commands/trade/quote.js.map +1 -0
- package/dist/commands/trade/search.d.ts +3 -0
- package/dist/commands/trade/search.d.ts.map +1 -0
- package/dist/commands/trade/search.js +22 -0
- package/dist/commands/trade/search.js.map +1 -0
- package/dist/commands/trade/swap.d.ts +3 -0
- package/dist/commands/trade/swap.d.ts.map +1 -0
- package/dist/commands/trade/swap.js +70 -0
- package/dist/commands/trade/swap.js.map +1 -0
- package/dist/commands/trade.d.ts +5 -0
- package/dist/commands/trade.d.ts.map +1 -0
- package/dist/commands/trade.js +167 -0
- package/dist/commands/trade.js.map +1 -0
- package/dist/commands/wallet.d.ts +3 -0
- package/dist/commands/wallet.d.ts.map +1 -0
- package/dist/commands/wallet.js +45 -0
- package/dist/commands/wallet.js.map +1 -0
- package/dist/config.d.ts +86 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +169 -0
- package/dist/config.js.map +1 -0
- package/dist/utils/amounts.d.ts +40 -0
- package/dist/utils/amounts.d.ts.map +1 -0
- package/dist/utils/amounts.js +113 -0
- package/dist/utils/amounts.js.map +1 -0
- package/dist/utils/helius.d.ts +39 -0
- package/dist/utils/helius.d.ts.map +1 -0
- package/dist/utils/helius.js +253 -0
- package/dist/utils/helius.js.map +1 -0
- package/dist/utils/jupiter.d.ts +42 -0
- package/dist/utils/jupiter.d.ts.map +1 -0
- package/dist/utils/jupiter.js +106 -0
- package/dist/utils/jupiter.js.map +1 -0
- package/dist/utils/nft.d.ts +75 -0
- package/dist/utils/nft.d.ts.map +1 -0
- package/dist/utils/nft.js +168 -0
- package/dist/utils/nft.js.map +1 -0
- package/dist/utils/perps/doves-idl.d.ts +380 -0
- package/dist/utils/perps/doves-idl.d.ts.map +1 -0
- package/dist/utils/perps/doves-idl.js +379 -0
- package/dist/utils/perps/doves-idl.js.map +1 -0
- package/dist/utils/perps/idl.json +7241 -0
- package/dist/utils/perps/index.d.ts +45 -0
- package/dist/utils/perps/index.d.ts.map +1 -0
- package/dist/utils/perps/index.js +102 -0
- package/dist/utils/perps/index.js.map +1 -0
- package/dist/utils/perps/jupiter-perpetuals-idl.d.ts +7243 -0
- package/dist/utils/perps/jupiter-perpetuals-idl.d.ts.map +1 -0
- package/dist/utils/perps/jupiter-perpetuals-idl.js +7242 -0
- package/dist/utils/perps/jupiter-perpetuals-idl.js.map +1 -0
- package/dist/utils/positions.d.ts +198 -0
- package/dist/utils/positions.d.ts.map +1 -0
- package/dist/utils/positions.js +595 -0
- package/dist/utils/positions.js.map +1 -0
- package/dist/utils/prediction.d.ts +196 -0
- package/dist/utils/prediction.d.ts.map +1 -0
- package/dist/utils/prediction.js +187 -0
- package/dist/utils/prediction.js.map +1 -0
- package/dist/utils/solana.d.ts +9 -0
- package/dist/utils/solana.d.ts.map +1 -0
- package/dist/utils/solana.js +45 -0
- package/dist/utils/solana.js.map +1 -0
- package/dist/utils/token-book.d.ts +9 -0
- package/dist/utils/token-book.d.ts.map +1 -0
- package/dist/utils/token-book.js +69 -0
- package/dist/utils/token-book.js.map +1 -0
- package/dist/utils/token-info.d.ts +48 -0
- package/dist/utils/token-info.d.ts.map +1 -0
- package/dist/utils/token-info.js +332 -0
- package/dist/utils/token-info.js.map +1 -0
- package/dist/utils/wallet.d.ts +31 -0
- package/dist/utils/wallet.d.ts.map +1 -0
- package/dist/utils/wallet.js +181 -0
- package/dist/utils/wallet.js.map +1 -0
- package/package.json +46 -0
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
import { Connection, Keypair } from '@solana/web3.js';
|
|
2
|
+
import Big from 'big.js';
|
|
3
|
+
export interface PredictionEvent {
|
|
4
|
+
eventId: string;
|
|
5
|
+
isActive: boolean;
|
|
6
|
+
isLive: boolean;
|
|
7
|
+
category: string;
|
|
8
|
+
subcategory?: string;
|
|
9
|
+
tags: string[];
|
|
10
|
+
metadata: {
|
|
11
|
+
title: string;
|
|
12
|
+
subtitle?: string;
|
|
13
|
+
slug?: string;
|
|
14
|
+
series?: string;
|
|
15
|
+
imageUrl?: string;
|
|
16
|
+
closeTime?: string;
|
|
17
|
+
};
|
|
18
|
+
volumeUsd?: string;
|
|
19
|
+
beginAt?: string;
|
|
20
|
+
closeCondition?: string;
|
|
21
|
+
markets: PredictionMarket[];
|
|
22
|
+
}
|
|
23
|
+
export interface PredictionMarket {
|
|
24
|
+
marketId: string;
|
|
25
|
+
status: 'open' | 'closed';
|
|
26
|
+
result: 'yes' | 'no' | null;
|
|
27
|
+
openTime: number;
|
|
28
|
+
closeTime: number;
|
|
29
|
+
metadata: {
|
|
30
|
+
title: string;
|
|
31
|
+
rulesPrimary?: string;
|
|
32
|
+
rulesSecondary?: string;
|
|
33
|
+
};
|
|
34
|
+
pricing: {
|
|
35
|
+
buyYesPriceUsd: number;
|
|
36
|
+
sellYesPriceUsd: number;
|
|
37
|
+
buyNoPriceUsd: number;
|
|
38
|
+
sellNoPriceUsd: number;
|
|
39
|
+
volume?: number;
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
export interface PredictionPosition {
|
|
43
|
+
pubkey: string;
|
|
44
|
+
owner: string;
|
|
45
|
+
ownerPubkey: string;
|
|
46
|
+
market: string;
|
|
47
|
+
marketId: string;
|
|
48
|
+
eventId: string;
|
|
49
|
+
isYes: boolean;
|
|
50
|
+
contracts: string;
|
|
51
|
+
totalCostUsd: string;
|
|
52
|
+
avgPriceUsd: string;
|
|
53
|
+
valueUsd: string;
|
|
54
|
+
markPriceUsd: string;
|
|
55
|
+
sellPriceUsd: string;
|
|
56
|
+
pnlUsd: string;
|
|
57
|
+
pnlUsdPercent: number;
|
|
58
|
+
pnlUsdAfterFees: string;
|
|
59
|
+
pnlUsdAfterFeesPercent: number;
|
|
60
|
+
feesPaidUsd: string;
|
|
61
|
+
claimable: boolean;
|
|
62
|
+
claimed: boolean;
|
|
63
|
+
payoutUsd: string;
|
|
64
|
+
eventMetadata: {
|
|
65
|
+
title: string;
|
|
66
|
+
category: string;
|
|
67
|
+
};
|
|
68
|
+
marketMetadata: {
|
|
69
|
+
title: string;
|
|
70
|
+
status: string;
|
|
71
|
+
result: 'yes' | 'no' | null;
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
export interface OrderResponse {
|
|
75
|
+
transaction: string;
|
|
76
|
+
txMeta?: {
|
|
77
|
+
blockhash: string;
|
|
78
|
+
lastValidBlockHeight: number;
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* List prediction events with optional filters
|
|
83
|
+
*/
|
|
84
|
+
export declare function listEvents(options?: {
|
|
85
|
+
category?: string;
|
|
86
|
+
status?: string;
|
|
87
|
+
limit?: number;
|
|
88
|
+
offset?: number;
|
|
89
|
+
}): Promise<{
|
|
90
|
+
events: PredictionEvent[];
|
|
91
|
+
total: number;
|
|
92
|
+
}>;
|
|
93
|
+
/**
|
|
94
|
+
* Search events by keyword
|
|
95
|
+
*/
|
|
96
|
+
export declare function searchEvents(query: string): Promise<{
|
|
97
|
+
events: PredictionEvent[];
|
|
98
|
+
}>;
|
|
99
|
+
/**
|
|
100
|
+
* Get single event details
|
|
101
|
+
*/
|
|
102
|
+
export declare function getEvent(eventId: string): Promise<PredictionEvent>;
|
|
103
|
+
/**
|
|
104
|
+
* Get market details with pricing
|
|
105
|
+
*/
|
|
106
|
+
export declare function getMarket(marketId: string): Promise<PredictionMarket>;
|
|
107
|
+
/**
|
|
108
|
+
* Get user positions
|
|
109
|
+
*/
|
|
110
|
+
export declare function getPositions(ownerPubkey: string, options?: {
|
|
111
|
+
status?: 'open' | 'claimable' | 'all';
|
|
112
|
+
}): Promise<{
|
|
113
|
+
positions: PredictionPosition[];
|
|
114
|
+
}>;
|
|
115
|
+
export interface CreateOrderResponse {
|
|
116
|
+
transaction: string;
|
|
117
|
+
txMeta: {
|
|
118
|
+
blockhash: string;
|
|
119
|
+
lastValidBlockHeight: number;
|
|
120
|
+
};
|
|
121
|
+
externalOrderId: string;
|
|
122
|
+
order: {
|
|
123
|
+
orderPubkey: string;
|
|
124
|
+
marketId: string;
|
|
125
|
+
isBuy: boolean;
|
|
126
|
+
isYes: boolean;
|
|
127
|
+
contracts: string;
|
|
128
|
+
maxBuyPriceUsd: string | null;
|
|
129
|
+
orderCostUsd: string;
|
|
130
|
+
newAvgPriceUsd: string;
|
|
131
|
+
estimatedTotalFeeUsd: string;
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Create a buy order for YES or NO contracts
|
|
136
|
+
* @param amountUsd - Amount in USD to spend (e.g., 5 for $5)
|
|
137
|
+
*/
|
|
138
|
+
export declare function createOrder(params: {
|
|
139
|
+
ownerPubkey: string;
|
|
140
|
+
marketId: string;
|
|
141
|
+
isYes: boolean;
|
|
142
|
+
amountUsd: number | string;
|
|
143
|
+
}): Promise<CreateOrderResponse>;
|
|
144
|
+
/**
|
|
145
|
+
* Create a sell order to close position (partial)
|
|
146
|
+
*/
|
|
147
|
+
export declare function createSellOrder(params: {
|
|
148
|
+
ownerPubkey: string;
|
|
149
|
+
marketId: string;
|
|
150
|
+
isYes: boolean;
|
|
151
|
+
contracts: number;
|
|
152
|
+
minSellPriceUsd?: number;
|
|
153
|
+
}): Promise<OrderResponse>;
|
|
154
|
+
/**
|
|
155
|
+
* Close entire prediction position using DELETE endpoint
|
|
156
|
+
*/
|
|
157
|
+
export declare function closePredictionOrder(params: {
|
|
158
|
+
ownerPubkey: string;
|
|
159
|
+
positionPubkey: string;
|
|
160
|
+
}): Promise<OrderResponse>;
|
|
161
|
+
/**
|
|
162
|
+
* Sign and execute a prediction order
|
|
163
|
+
*/
|
|
164
|
+
export declare function executeOrder(connection: Connection, keypair: Keypair, orderResponse: OrderResponse | CreateOrderResponse): Promise<string>;
|
|
165
|
+
/**
|
|
166
|
+
* Claim winnings from a resolved position
|
|
167
|
+
*/
|
|
168
|
+
export declare function createClaimOrder(params: {
|
|
169
|
+
ownerPubkey: string;
|
|
170
|
+
positionPubkey: string;
|
|
171
|
+
}): Promise<OrderResponse>;
|
|
172
|
+
/**
|
|
173
|
+
* Convert micro USD to USD
|
|
174
|
+
* Handles empty strings and invalid values gracefully
|
|
175
|
+
*/
|
|
176
|
+
export declare function microToUsd(microUsd: number | string | null | undefined): Big;
|
|
177
|
+
/**
|
|
178
|
+
* Convert USD to micro USD
|
|
179
|
+
*/
|
|
180
|
+
export declare function usdToMicro(usd: number | string): Big;
|
|
181
|
+
/**
|
|
182
|
+
* Format price from micro USD to display
|
|
183
|
+
*/
|
|
184
|
+
export declare function formatPrice(microUsd: number | string | null | undefined): string;
|
|
185
|
+
/**
|
|
186
|
+
* Format price as percentage (since $1 = 100%)
|
|
187
|
+
*/
|
|
188
|
+
export declare function priceToPercent(microUsd: number | string | null | undefined): string;
|
|
189
|
+
/**
|
|
190
|
+
* Get market status summary
|
|
191
|
+
*/
|
|
192
|
+
export declare function getMarketStatus(): Promise<{
|
|
193
|
+
isOpen: boolean;
|
|
194
|
+
message?: string;
|
|
195
|
+
}>;
|
|
196
|
+
//# sourceMappingURL=prediction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prediction.d.ts","sourceRoot":"","sources":["../../src/utils/prediction.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import { VersionedTransaction } from '@solana/web3.js';
|
|
2
|
+
import Big from 'big.js';
|
|
3
|
+
import { apis, tokens, requireJupiterKey } from '../config.js';
|
|
4
|
+
import { sendAndConfirmTransaction } from './solana.js';
|
|
5
|
+
// Micro USD conversion (6 decimals)
|
|
6
|
+
const MICRO_USD = new Big(1_000_000);
|
|
7
|
+
function getApiKey() {
|
|
8
|
+
return requireJupiterKey();
|
|
9
|
+
}
|
|
10
|
+
async function predictionFetch(path, options) {
|
|
11
|
+
const response = await fetch(`${apis.jupiterPrediction}${path}`, {
|
|
12
|
+
...options,
|
|
13
|
+
headers: {
|
|
14
|
+
'Content-Type': 'application/json',
|
|
15
|
+
'x-api-key': getApiKey(),
|
|
16
|
+
...options?.headers,
|
|
17
|
+
},
|
|
18
|
+
});
|
|
19
|
+
if (!response.ok) {
|
|
20
|
+
const errorText = await response.text();
|
|
21
|
+
throw new Error(`Prediction API error (${response.status}): ${errorText}`);
|
|
22
|
+
}
|
|
23
|
+
return response.json();
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* List prediction events with optional filters
|
|
27
|
+
*/
|
|
28
|
+
export async function listEvents(options) {
|
|
29
|
+
const params = new URLSearchParams();
|
|
30
|
+
if (options?.category)
|
|
31
|
+
params.append('category', options.category);
|
|
32
|
+
if (options?.status)
|
|
33
|
+
params.append('status', options.status);
|
|
34
|
+
if (options?.limit)
|
|
35
|
+
params.append('limit', options.limit.toString());
|
|
36
|
+
if (options?.offset)
|
|
37
|
+
params.append('offset', options.offset.toString());
|
|
38
|
+
const query = params.toString() ? `?${params.toString()}` : '';
|
|
39
|
+
const response = await predictionFetch(`/events${query}`);
|
|
40
|
+
return { events: response.data || [], total: response.total || response.data?.length || 0 };
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Search events by keyword
|
|
44
|
+
*/
|
|
45
|
+
export async function searchEvents(query) {
|
|
46
|
+
const response = await predictionFetch(`/events/search?query=${encodeURIComponent(query)}`);
|
|
47
|
+
return { events: response.data || [] };
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Get single event details
|
|
51
|
+
*/
|
|
52
|
+
export async function getEvent(eventId) {
|
|
53
|
+
// Single event endpoint returns data directly, not wrapped
|
|
54
|
+
return predictionFetch(`/events/${eventId}`);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Get market details with pricing
|
|
58
|
+
*/
|
|
59
|
+
export async function getMarket(marketId) {
|
|
60
|
+
// Single market endpoint returns data directly, not wrapped
|
|
61
|
+
return predictionFetch(`/markets/${marketId}`);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Get user positions
|
|
65
|
+
*/
|
|
66
|
+
export async function getPositions(ownerPubkey, options) {
|
|
67
|
+
const params = new URLSearchParams();
|
|
68
|
+
params.append('ownerPubkey', ownerPubkey);
|
|
69
|
+
if (options?.status)
|
|
70
|
+
params.append('status', options.status);
|
|
71
|
+
const response = await predictionFetch(`/positions?${params.toString()}`);
|
|
72
|
+
return { positions: response.data || [] };
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Create a buy order for YES or NO contracts
|
|
76
|
+
* @param amountUsd - Amount in USD to spend (e.g., 5 for $5)
|
|
77
|
+
*/
|
|
78
|
+
export async function createOrder(params) {
|
|
79
|
+
const { ownerPubkey, marketId, isYes, amountUsd } = params;
|
|
80
|
+
// Convert USD to micro USD (6 decimals) - USDC has 6 decimals
|
|
81
|
+
const depositAmount = new Big(amountUsd).times(MICRO_USD).round(0, Big.roundDown).toString();
|
|
82
|
+
return predictionFetch('/orders', {
|
|
83
|
+
method: 'POST',
|
|
84
|
+
body: JSON.stringify({
|
|
85
|
+
ownerPubkey,
|
|
86
|
+
marketId,
|
|
87
|
+
isYes,
|
|
88
|
+
isBuy: true,
|
|
89
|
+
depositAmount,
|
|
90
|
+
depositMint: tokens.USDC,
|
|
91
|
+
}),
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Create a sell order to close position (partial)
|
|
96
|
+
*/
|
|
97
|
+
export async function createSellOrder(params) {
|
|
98
|
+
const { ownerPubkey, marketId, isYes, contracts, minSellPriceUsd } = params;
|
|
99
|
+
const body = {
|
|
100
|
+
ownerPubkey,
|
|
101
|
+
marketId,
|
|
102
|
+
isYes,
|
|
103
|
+
isBuy: false,
|
|
104
|
+
contracts,
|
|
105
|
+
};
|
|
106
|
+
// Add min sell price if specified (convert to micro USD)
|
|
107
|
+
if (minSellPriceUsd !== undefined) {
|
|
108
|
+
body.minSellPriceUsd = new Big(minSellPriceUsd).times(MICRO_USD).round(0).toString();
|
|
109
|
+
}
|
|
110
|
+
return predictionFetch('/orders', {
|
|
111
|
+
method: 'POST',
|
|
112
|
+
body: JSON.stringify(body),
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Close entire prediction position using DELETE endpoint
|
|
117
|
+
*/
|
|
118
|
+
export async function closePredictionOrder(params) {
|
|
119
|
+
const { ownerPubkey, positionPubkey } = params;
|
|
120
|
+
return predictionFetch(`/positions/${positionPubkey}`, {
|
|
121
|
+
method: 'DELETE',
|
|
122
|
+
body: JSON.stringify({ ownerPubkey }),
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Sign and execute a prediction order
|
|
127
|
+
*/
|
|
128
|
+
export async function executeOrder(connection, keypair, orderResponse) {
|
|
129
|
+
const { transaction: txBase64 } = orderResponse;
|
|
130
|
+
// Deserialize and sign
|
|
131
|
+
const transaction = VersionedTransaction.deserialize(Buffer.from(txBase64, 'base64'));
|
|
132
|
+
transaction.sign([keypair]);
|
|
133
|
+
// Send and confirm using enhanced utility
|
|
134
|
+
return sendAndConfirmTransaction(connection, transaction);
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Claim winnings from a resolved position
|
|
138
|
+
*/
|
|
139
|
+
export async function createClaimOrder(params) {
|
|
140
|
+
return predictionFetch(`/positions/${params.positionPubkey}/claim`, {
|
|
141
|
+
method: 'POST',
|
|
142
|
+
body: JSON.stringify({
|
|
143
|
+
ownerPubkey: params.ownerPubkey,
|
|
144
|
+
}),
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Convert micro USD to USD
|
|
149
|
+
* Handles empty strings and invalid values gracefully
|
|
150
|
+
*/
|
|
151
|
+
export function microToUsd(microUsd) {
|
|
152
|
+
if (microUsd === null || microUsd === undefined || microUsd === '') {
|
|
153
|
+
return new Big(0);
|
|
154
|
+
}
|
|
155
|
+
return new Big(microUsd).div(MICRO_USD);
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Convert USD to micro USD
|
|
159
|
+
*/
|
|
160
|
+
export function usdToMicro(usd) {
|
|
161
|
+
return new Big(usd).times(MICRO_USD);
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Format price from micro USD to display
|
|
165
|
+
*/
|
|
166
|
+
export function formatPrice(microUsd) {
|
|
167
|
+
return `$${microToUsd(microUsd).toFixed(2)}`;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Format price as percentage (since $1 = 100%)
|
|
171
|
+
*/
|
|
172
|
+
export function priceToPercent(microUsd) {
|
|
173
|
+
return `${microToUsd(microUsd).times(100).toFixed(1)}%`;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Get market status summary
|
|
177
|
+
*/
|
|
178
|
+
export async function getMarketStatus() {
|
|
179
|
+
try {
|
|
180
|
+
const response = await predictionFetch('/status');
|
|
181
|
+
return { isOpen: response.status === 'open' };
|
|
182
|
+
}
|
|
183
|
+
catch (error) {
|
|
184
|
+
return { isOpen: false, message: 'Unable to reach prediction market API' };
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=prediction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prediction.js","sourceRoot":"","sources":["../../src/utils/prediction.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Connection, VersionedTransaction, Transaction } from '@solana/web3.js';
|
|
2
|
+
/**
|
|
3
|
+
* Enhanced transaction sender that supports Helius Sender for lower latency
|
|
4
|
+
* Broadcasts to both validators and Jito simultaneously for best landing rates
|
|
5
|
+
*/
|
|
6
|
+
export declare function sendAndConfirmTransaction(connection: Connection, transaction: VersionedTransaction | Transaction, options?: {
|
|
7
|
+
skipPreflight?: boolean;
|
|
8
|
+
}): Promise<string>;
|
|
9
|
+
//# sourceMappingURL=solana.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solana.d.ts","sourceRoot":"","sources":["../../src/utils/solana.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAGhF;;;GAGG;AACH,wBAAsB,yBAAyB,CAC7C,UAAU,EAAE,UAAU,EACtB,WAAW,EAAE,oBAAoB,GAAG,WAAW,EAC/C,OAAO,GAAE;IAAE,aAAa,CAAC,EAAE,OAAO,CAAA;CAAO,GACxC,OAAO,CAAC,MAAM,CAAC,CAwCjB"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { Connection, VersionedTransaction } from '@solana/web3.js';
|
|
2
|
+
import { env, requireHeliusKey, apis } from '../config.js';
|
|
3
|
+
/**
|
|
4
|
+
* Enhanced transaction sender that supports Helius Sender for lower latency
|
|
5
|
+
* Broadcasts to both validators and Jito simultaneously for best landing rates
|
|
6
|
+
*/
|
|
7
|
+
export async function sendAndConfirmTransaction(connection, transaction, options = {}) {
|
|
8
|
+
const useHeliusSender = env.useHeliusSender();
|
|
9
|
+
let signature;
|
|
10
|
+
if (useHeliusSender) {
|
|
11
|
+
const apiKey = requireHeliusKey();
|
|
12
|
+
const heliusRpcUrl = apis.heliusRpc(apiKey);
|
|
13
|
+
// Create a dedicated connection for Helius Sender
|
|
14
|
+
const heliusConnection = new Connection(heliusRpcUrl);
|
|
15
|
+
if (transaction instanceof VersionedTransaction) {
|
|
16
|
+
signature = await heliusConnection.sendTransaction(transaction, {
|
|
17
|
+
skipPreflight: options.skipPreflight ?? true,
|
|
18
|
+
maxRetries: 0, // Helius Atlas handles retries better
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
signature = await heliusConnection.sendRawTransaction(transaction.serialize(), {
|
|
23
|
+
skipPreflight: options.skipPreflight ?? true,
|
|
24
|
+
maxRetries: 0,
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
console.log('🚀 Transaction submitted via Helius Sender');
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
if (transaction instanceof VersionedTransaction) {
|
|
31
|
+
signature = await connection.sendTransaction(transaction, {
|
|
32
|
+
skipPreflight: options.skipPreflight,
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
signature = await connection.sendRawTransaction(transaction.serialize(), {
|
|
37
|
+
skipPreflight: options.skipPreflight,
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
// Wait for confirmation
|
|
42
|
+
await connection.confirmTransaction(signature, 'confirmed');
|
|
43
|
+
return signature;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=solana.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solana.js","sourceRoot":"","sources":["../../src/utils/solana.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAe,MAAM,iBAAiB,CAAC;AAChF,OAAO,EAAE,GAAG,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAE3D;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,UAAsB,EACtB,WAA+C,EAC/C,UAAuC,EAAE;IAEzC,MAAM,eAAe,GAAG,GAAG,CAAC,eAAe,EAAE,CAAC;IAE9C,IAAI,SAAiB,CAAC;IAEtB,IAAI,eAAe,EAAE,CAAC;QACpB,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC;QAClC,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAE5C,kDAAkD;QAClD,MAAM,gBAAgB,GAAG,IAAI,UAAU,CAAC,YAAY,CAAC,CAAC;QAEtD,IAAI,WAAW,YAAY,oBAAoB,EAAE,CAAC;YAChD,SAAS,GAAG,MAAM,gBAAgB,CAAC,eAAe,CAAC,WAAW,EAAE;gBAC9D,aAAa,EAAE,OAAO,CAAC,aAAa,IAAI,IAAI;gBAC5C,UAAU,EAAE,CAAC,EAAE,sCAAsC;aACtD,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,SAAS,GAAG,MAAM,gBAAgB,CAAC,kBAAkB,CAAC,WAAW,CAAC,SAAS,EAAE,EAAE;gBAC7E,aAAa,EAAE,OAAO,CAAC,aAAa,IAAI,IAAI;gBAC5C,UAAU,EAAE,CAAC;aACd,CAAC,CAAC;QACL,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;IAC5D,CAAC;SAAM,CAAC;QACN,IAAI,WAAW,YAAY,oBAAoB,EAAE,CAAC;YAChD,SAAS,GAAG,MAAM,UAAU,CAAC,eAAe,CAAC,WAAW,EAAE;gBACxD,aAAa,EAAE,OAAO,CAAC,aAAa;aACrC,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,SAAS,GAAG,MAAM,UAAU,CAAC,kBAAkB,CAAC,WAAW,CAAC,SAAS,EAAE,EAAE;gBACvE,aAAa,EAAE,OAAO,CAAC,aAAa;aACrC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,wBAAwB;IACxB,MAAM,UAAU,CAAC,kBAAkB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAE5D,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** Load token address book - merges defaults with user additions */
|
|
2
|
+
export declare function loadTokenBook(): Record<string, string>;
|
|
3
|
+
/** Save token address book */
|
|
4
|
+
export declare function saveTokenBook(book: Record<string, string>): void;
|
|
5
|
+
/** Resolve ticker to address. Passes through if already an address. */
|
|
6
|
+
export declare function resolveToken(tickerOrAddress: string): string;
|
|
7
|
+
/** Reverse lookup: address → ticker */
|
|
8
|
+
export declare function getTickerFromAddress(address: string): string | null;
|
|
9
|
+
//# sourceMappingURL=token-book.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-book.d.ts","sourceRoot":"","sources":["../../src/utils/token-book.ts"],"names":[],"mappings":"AA8BA,oEAAoE;AACpE,wBAAgB,aAAa,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAiBtD;AAED,8BAA8B;AAC9B,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAMhE;AAED,uEAAuE;AACvE,wBAAgB,YAAY,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,CAK5D;AAED,uCAAuC;AACvC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAMnE"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import { paths, defaultTokenBook } from '../config.js';
|
|
4
|
+
const LEGACY_TOKEN_BOOK_PATH = path.join(process.cwd(), 'tokens.json');
|
|
5
|
+
function ensureDir() {
|
|
6
|
+
const dir = paths.openclawDir();
|
|
7
|
+
if (!fs.existsSync(dir)) {
|
|
8
|
+
fs.mkdirSync(dir, { mode: 0o700, recursive: true });
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
/** Migrate from legacy ./tokens.json to ~/.openclaw/trader-tokens.json */
|
|
12
|
+
function migrateFromLegacy() {
|
|
13
|
+
const target = paths.tokenBook();
|
|
14
|
+
if (fs.existsSync(target))
|
|
15
|
+
return;
|
|
16
|
+
if (fs.existsSync(LEGACY_TOKEN_BOOK_PATH)) {
|
|
17
|
+
try {
|
|
18
|
+
ensureDir();
|
|
19
|
+
const content = fs.readFileSync(LEGACY_TOKEN_BOOK_PATH, 'utf-8');
|
|
20
|
+
fs.writeFileSync(target, content, { encoding: 'utf-8', mode: 0o600 });
|
|
21
|
+
console.log(`📦 Migrated token book to ${target}`);
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
// Fall through to defaults
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/** Load token address book - merges defaults with user additions */
|
|
29
|
+
export function loadTokenBook() {
|
|
30
|
+
ensureDir();
|
|
31
|
+
migrateFromLegacy();
|
|
32
|
+
const bookPath = paths.tokenBook();
|
|
33
|
+
let userBook = {};
|
|
34
|
+
try {
|
|
35
|
+
if (fs.existsSync(bookPath)) {
|
|
36
|
+
userBook = JSON.parse(fs.readFileSync(bookPath, 'utf-8'));
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
// Fall through to defaults
|
|
41
|
+
}
|
|
42
|
+
// Defaults first, user overrides on top
|
|
43
|
+
return { ...defaultTokenBook, ...userBook };
|
|
44
|
+
}
|
|
45
|
+
/** Save token address book */
|
|
46
|
+
export function saveTokenBook(book) {
|
|
47
|
+
ensureDir();
|
|
48
|
+
fs.writeFileSync(paths.tokenBook(), JSON.stringify(book, null, 2), {
|
|
49
|
+
encoding: 'utf-8',
|
|
50
|
+
mode: 0o600,
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
/** Resolve ticker to address. Passes through if already an address. */
|
|
54
|
+
export function resolveToken(tickerOrAddress) {
|
|
55
|
+
if (tickerOrAddress.length > 32)
|
|
56
|
+
return tickerOrAddress;
|
|
57
|
+
const book = loadTokenBook();
|
|
58
|
+
return book[tickerOrAddress.toUpperCase()] || tickerOrAddress;
|
|
59
|
+
}
|
|
60
|
+
/** Reverse lookup: address → ticker */
|
|
61
|
+
export function getTickerFromAddress(address) {
|
|
62
|
+
const book = loadTokenBook();
|
|
63
|
+
for (const [ticker, addr] of Object.entries(book)) {
|
|
64
|
+
if (addr === address)
|
|
65
|
+
return ticker;
|
|
66
|
+
}
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=token-book.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-book.js","sourceRoot":"","sources":["../../src/utils/token-book.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Token information aggregation from multiple sources
|
|
3
|
+
* - Helius DAS API for metadata and verification
|
|
4
|
+
* - Jupiter for token list and verification status
|
|
5
|
+
* - DexScreener for market data
|
|
6
|
+
* - Birdeye for additional analytics
|
|
7
|
+
*/
|
|
8
|
+
export interface TokenInfo {
|
|
9
|
+
address: string;
|
|
10
|
+
symbol: string;
|
|
11
|
+
name: string;
|
|
12
|
+
decimals: number;
|
|
13
|
+
price?: number;
|
|
14
|
+
priceChange24h?: number;
|
|
15
|
+
volume24h?: number;
|
|
16
|
+
volumeChange24h?: number;
|
|
17
|
+
liquidity?: number;
|
|
18
|
+
marketCap?: number;
|
|
19
|
+
fdv?: number;
|
|
20
|
+
supply?: number;
|
|
21
|
+
verified?: boolean;
|
|
22
|
+
verifiedSource?: string;
|
|
23
|
+
freezeAuthority?: string | null;
|
|
24
|
+
mintAuthority?: string | null;
|
|
25
|
+
holders?: number;
|
|
26
|
+
logoUri?: string;
|
|
27
|
+
description?: string;
|
|
28
|
+
website?: string;
|
|
29
|
+
twitter?: string;
|
|
30
|
+
telegram?: string;
|
|
31
|
+
discord?: string;
|
|
32
|
+
markets?: {
|
|
33
|
+
dex: string;
|
|
34
|
+
pair: string;
|
|
35
|
+
liquidity: number;
|
|
36
|
+
}[];
|
|
37
|
+
sources: string[];
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Aggregate token info from all sources
|
|
41
|
+
* Simplified to use only Helius + DexScreener (most reliable)
|
|
42
|
+
*/
|
|
43
|
+
export declare function getTokenInfo(mintOrSymbol: string): Promise<TokenInfo>;
|
|
44
|
+
/**
|
|
45
|
+
* Format token info for display
|
|
46
|
+
*/
|
|
47
|
+
export declare function formatTokenInfo(info: TokenInfo): string;
|
|
48
|
+
//# sourceMappingURL=token-info.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-info.d.ts","sourceRoot":"","sources":["../../src/utils/token-info.ts"],"names":[],"mappings":"AAGA;;;;;;GAMG;AAEH,MAAM,WAAW,SAAS;IAExB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IAGjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IAGb,MAAM,CAAC,EAAE,MAAM,CAAC;IAGhB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAG9B,OAAO,CAAC,EAAE,MAAM,CAAC;IAGjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IAGjB,OAAO,CAAC,EAAE;QACR,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;KACnB,EAAE,CAAC;IAGJ,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAoND;;;GAGG;AACH,wBAAsB,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CA8D3E;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CA4FvD"}
|