@liberfi.io/client 0.1.189 → 0.2.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 CHANGED
@@ -8,6 +8,7 @@ DEX API client for the Liberfi React SDK. This package wraps `@chainstream-io/sd
8
8
  - **Centralized DTO conversion** — All mapping functions live in `utils.ts`, separating data transformation from client orchestration.
9
9
  - **Interface conformance** — `Client implements API.IClient, API.ISubscribeClient` ensures compile-time contract enforcement.
10
10
  - **Composite subscriptions** — WebSocket methods compose multiple backend channels into a single `ISubscription` with a unified `unsubscribe()`.
11
+ - **Phase 3 bypass layer** — For endpoints the upstream `@chainstream-io/sdk` has not yet upgraded (`getTokenHolders`, `getTokenActivities`, `getWalletActivities`, `getWalletPortfoliosByTokens`, `getWalletPortfolioPnls`), `Client` uses an internal `phase3Http` fetch helper that calls the server directly and maps the raw DTOs back to domain types. Consumers keep the same `IClient` interface.
11
12
 
12
13
  ## Installation
13
14
 
package/dist/index.d.mts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { API, Chain, Token, TokenResolution, TokenCandle, TokenSecurity, TokenStats, TokenHolder, TokenMarketData, WalletPortfolios, WalletPnl, WalletPortfolioPnls, Portfolio, PortfolioPnl, Trade, Activity, TokenCreator as TokenCreator$1, TokenLiquidity } from '@liberfi.io/types';
2
- import { ChainSymbol, Resolution, RangeFilterCondition, TokenCreator, Token as Token$1, TokenStats as TokenStats$1, DexPool, TokenMarketData as TokenMarketData$1, TokenCandle as TokenCandle$1, SwapRouteInput, SendTxInput, PageResponseTokenHolder, TokenPage, SwapRouteResponse, BlockchainLatestBlock, SendTxResponse, WalletNetWorthPage, WalletPnlSummary, PnlDetailsResult, NetWorthByTokensResult, PageResponseTradeDetail, WsNewToken, WsTokenMetadata, WsCandle, WsTokenStat, WsTokenSupply, WsTokenHolder, WsTokenLiquidity, WsTokenBondingCurve, WsTokenMaxLiquidity, WsTokenTotalLiquidity, WsTradeActivity } from '@chainstream-io/sdk';
2
+ import { ChainSymbol, Resolution, RangeFilterCondition, TokenCreator, Token as Token$1, TokenStats as TokenStats$1, DexPool, TokenMarketData as TokenMarketData$1, TokenCandle as TokenCandle$1, SwapRouteInput, SendTxInput, TokenPage, SwapRouteResponse, BlockchainLatestBlock, SendTxResponse, WalletNetWorthPage, WalletPnlSummary, PnlDetailsResult, PageResponseTradeDetail, WsNewToken, WsTokenMetadata, WsCandle, WsTokenStat, WsTokenSupply, WsTokenHolder, WsTokenLiquidity, WsTokenBondingCurve, WsTokenMaxLiquidity, WsTokenTotalLiquidity, WsTradeActivity } from '@chainstream-io/sdk';
3
3
 
4
4
  declare global {
5
5
  interface Window {
@@ -8,7 +8,7 @@ declare global {
8
8
  };
9
9
  }
10
10
  }
11
- declare const _default: "0.1.189";
11
+ declare const _default: "0.2.0";
12
12
 
13
13
  /** Async or sync token provider for authentication. */
14
14
  interface ClientTokenProviderFn {
@@ -33,13 +33,14 @@ declare class Client implements API.IClient, API.ISubscribeClient {
33
33
  private readonly accessToken;
34
34
  private readonly options?;
35
35
  private readonly _client;
36
+ private readonly _phase3;
36
37
  constructor(accessToken: ClientTokenProvider, options?: ClientOptions | undefined);
37
38
  getToken(chain: Chain, address: string): Promise<Token>;
38
39
  getTokens(chain: Chain, addresses: Array<string>): Promise<Array<Token>>;
39
40
  getTokenCandles(chain: Chain, address: string, resolution: TokenResolution, options?: API.GetTokenCandlesOptions): Promise<Array<TokenCandle>>;
40
41
  getTokenSecurity(chain: Chain, address: string): Promise<TokenSecurity>;
41
42
  getTokenStats(chain: Chain, address: string): Promise<TokenStats>;
42
- getTokenHolders(chain: Chain, address: string, options?: API.CursorListOptions): Promise<API.CursorList<TokenHolder>>;
43
+ getTokenHolders(chain: Chain, address: string, options?: API.GetTokenHoldersOptions): Promise<API.CursorList<TokenHolder>>;
43
44
  getTokenMarketData(chain: Chain, address: string): Promise<TokenMarketData>;
44
45
  getNewTokens(chain: Chain, options?: API.GetTokenListOptions): Promise<Array<Token>>;
45
46
  getFinalStretchTokens(chain: Chain, options?: API.GetTokenListOptions): Promise<Array<Token>>;
@@ -56,10 +57,7 @@ declare class Client implements API.IClient, API.ISubscribeClient {
56
57
  limit?: number;
57
58
  }): Promise<WalletPortfolios>;
58
59
  getWalletPnl(chain: Chain, address: string, resolution?: string): Promise<WalletPnl>;
59
- getWalletPortfolioPnls(chain: Chain, address: string, options?: {
60
- cursor?: string;
61
- limit?: number;
62
- }): Promise<WalletPortfolioPnls>;
60
+ getWalletPortfolioPnls(chain: Chain, address: string, options?: API.GetWalletPortfolioPnlsOptions): Promise<WalletPortfolioPnls>;
63
61
  getWalletPortfoliosByTokens(chain: Chain, address: string, tokenAddresses: Array<string>): Promise<Array<Portfolio>>;
64
62
  getWalletPortfolioPnlsByTokens(chain: Chain, address: string, tokenAddresses: Array<string>): Promise<Array<PortfolioPnl>>;
65
63
  getWalletTrades(chain: Chain, address: string, options?: API.GetTradesOptions): Promise<API.CursorList<Trade>>;
@@ -98,6 +96,150 @@ declare class Client implements API.IClient, API.ISubscribeClient {
98
96
  private _subscribeRankingTokens;
99
97
  }
100
98
 
99
+ /**
100
+ * Phase 3 HTTP helpers.
101
+ *
102
+ * The bundled `@chainstream-io/sdk` version pins an older schema that does not
103
+ * recognize the Phase 3 parameters (`sortBy`, `positionState`, `resolution`) or
104
+ * response fields (`gasFee`, `traderTags`, `tags`, `lastActiveAt`, `avgCostUsd`,
105
+ * `isActive`, `walletTokenTags`, `isClosed`, `firstBuyAt`, `lastSellAt`).
106
+ *
107
+ * Rather than wait for the SDK to be regenerated, this module issues direct
108
+ * `fetch` calls against the same REST endpoints the SDK would have hit, and
109
+ * types the raw DTOs as described in the 2026-05-01 Phase 3 spec. Mapping from
110
+ * DTO → domain type stays in `utils.ts`.
111
+ *
112
+ * Once the SDK adopts Phase 3, this module can be deleted and Client can call
113
+ * the SDK methods again without touching any consumer code.
114
+ */
115
+
116
+ interface CursorPageDTO<T> {
117
+ data: Array<T>;
118
+ hasNext: boolean;
119
+ hasPrev: boolean;
120
+ startCursor?: string | null;
121
+ endCursor?: string | null;
122
+ }
123
+ interface Phase3TokenHolderDTO {
124
+ walletAddress: string;
125
+ amount: string;
126
+ amountInUsd: string;
127
+ percentage: string;
128
+ tags?: Array<string>;
129
+ lastActiveAt?: number | null;
130
+ startHoldingAt?: number | null;
131
+ }
132
+ interface Phase3ActivityDTO {
133
+ transactionSignature: string;
134
+ chain: string;
135
+ blockHeight?: number;
136
+ blockTimestamp: number;
137
+ type: string;
138
+ tokenAddress: string;
139
+ tokenName?: string;
140
+ tokenSymbol: string;
141
+ tokenImageUrl?: string | null;
142
+ tokenAmount: string;
143
+ tokenAmountInUsd: string;
144
+ tokenPriceInUsd?: string;
145
+ tokenAmountInNative?: string;
146
+ tokenPriceInNative?: string;
147
+ sideTokenAddress: string;
148
+ sideTokenName?: string;
149
+ sideTokenSymbol: string;
150
+ sideTokenImageUrl?: string | null;
151
+ sideTokenAmount: string;
152
+ sideTokenAmountInUsd: string;
153
+ sideTokenPriceInUsd?: string;
154
+ accountOwnerAddress: string;
155
+ gasFee?: number | null;
156
+ traderTags?: Array<string>;
157
+ poolAddress?: string | null;
158
+ dexProgramAddress?: string | null;
159
+ dexProtocolFamily?: string | null;
160
+ dexImage?: string | null;
161
+ status?: string;
162
+ }
163
+ interface Phase3NetWorthTokenDTO {
164
+ chain: string;
165
+ tokenAddress: string;
166
+ name: string;
167
+ symbol: string;
168
+ decimals: number;
169
+ logoUri?: string | null;
170
+ amount: string;
171
+ priceInUsd: string;
172
+ priceInNative: string;
173
+ valueInUsd: string;
174
+ valueInNative: string;
175
+ isActive?: boolean;
176
+ avgCostUsd?: string | null;
177
+ lastActiveAt?: number | null;
178
+ walletTokenTags?: Array<string>;
179
+ }
180
+ interface Phase3NetWorthByTokensDTO {
181
+ walletAddress: string;
182
+ totalValueInUsd: string;
183
+ totalValueInNative: string;
184
+ currentTimestamp?: number;
185
+ data: Array<Phase3NetWorthTokenDTO>;
186
+ }
187
+ interface Phase3PnlSummaryDTO {
188
+ tokens?: number | string;
189
+ totalTrades?: number | string;
190
+ buys?: number | string;
191
+ sells?: number | string;
192
+ wins?: number | string;
193
+ losses?: number | string;
194
+ winRate?: string | null;
195
+ realizedProfitInUsd?: string | null;
196
+ unrealizedProfitInUsd?: string | null;
197
+ totalProfitInUsd?: string | null;
198
+ totalProfitRatio?: string | null;
199
+ currentValue?: string | null;
200
+ buyAmountInUsd?: string | null;
201
+ sellAmountInUsd?: string | null;
202
+ totalCostInUsd?: string;
203
+ avgProfitPerTradeInUsd?: string | null;
204
+ }
205
+ interface Phase3PnlItemDTO {
206
+ tokenAddress: string;
207
+ symbol?: string;
208
+ name?: string;
209
+ decimals?: number;
210
+ logoUri?: string | null;
211
+ walletAddress?: string;
212
+ chain?: string;
213
+ balance: string;
214
+ priceInUsd: string;
215
+ currentValue: string;
216
+ realizedProfitInUsd?: string;
217
+ realizedProfitRatio?: string;
218
+ unrealizedProfitInUsd?: string;
219
+ unrealizedProfitRatio?: string;
220
+ totalProfitInUsd?: string;
221
+ totalProfitRatio?: string;
222
+ buys?: number | string;
223
+ sells?: number | string;
224
+ totalTrades?: number | string;
225
+ wins?: number | string;
226
+ losses?: number | string;
227
+ buyAmount?: string;
228
+ sellAmount?: string;
229
+ buyAmountInUsd?: string;
230
+ sellAmountInUsd?: string;
231
+ avgBuyPriceInUsd?: string;
232
+ avgSellPriceInUsd?: string;
233
+ avgProfitPerTradeInUsd?: string;
234
+ totalCostInUsd?: string;
235
+ isClosed?: boolean;
236
+ firstBuyAt?: number | null;
237
+ lastSellAt?: number | null;
238
+ }
239
+ interface Phase3PnlDetailsDTO extends CursorPageDTO<Phase3PnlItemDTO> {
240
+ summary: Phase3PnlSummaryDTO;
241
+ }
242
+
101
243
  declare function toChainDTO(chain: Chain): ChainSymbol;
102
244
  declare function toResolutionDTO(resolution: TokenResolution): Resolution;
103
245
  declare function toSortDirectionDTO(direction: "asc" | "desc"): string;
@@ -126,18 +268,18 @@ declare const KYBERSWAP_NATIVE_SENTINEL = "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeee
126
268
  declare function toMintForRoute(dex: "jupiter" | "kyberswap", address: string): string;
127
269
  declare function toSwapRouteInput(params: API.SwapParams): SwapRouteInput;
128
270
  declare function toSendTxInput(params: API.SendTxParams): SendTxInput;
129
- declare function fromTokenHolderPage(input: PageResponseTokenHolder): API.CursorList<TokenHolder>;
271
+ declare function fromTokenHolderPage(input: CursorPageDTO<Phase3TokenHolderDTO>): API.CursorList<TokenHolder>;
130
272
  declare function fromTokenPage(input: TokenPage): API.SearchTokenCursorList;
131
273
  declare function fromSwapRoute(input: SwapRouteResponse): API.SwapRoute;
132
274
  declare function fromLatestBlock(input: BlockchainLatestBlock): API.BlockchainLatestBlock;
133
275
  declare function fromSendTxResult(input: SendTxResponse): API.SendTxResult;
134
276
  declare function fromWalletPortfolios(chain: Chain, input: WalletNetWorthPage): WalletPortfolios;
135
277
  declare function fromWalletPnlSummary(chain: Chain, address: string, input: WalletPnlSummary): WalletPnl;
136
- declare function fromPnlDetailsPage(chain: Chain, address: string, input: PnlDetailsResult): WalletPortfolioPnls;
137
- declare function fromWalletNetWorthByTokens(chain: Chain, input: NetWorthByTokensResult): Portfolio[];
278
+ declare function fromPnlDetailsPage(chain: Chain, address: string, input: Phase3PnlDetailsDTO): WalletPortfolioPnls;
279
+ declare function fromWalletNetWorthByTokens(chain: Chain, input: Phase3NetWorthByTokensDTO): Portfolio[];
138
280
  declare function fromPnlDetailItems(chain: Chain, input: PnlDetailsResult): PortfolioPnl[];
139
281
  declare function fromTradePage(input: PageResponseTradeDetail): API.CursorList<Trade>;
140
- declare function fromActivityPage(input: PageResponseTradeDetail): API.CursorList<Activity>;
282
+ declare function fromActivityPage(input: CursorPageDTO<Phase3ActivityDTO>): API.CursorList<Activity>;
141
283
  declare function fromTokenSubscribed(chain: Chain, input: WsNewToken): API.TokenSubscribed;
142
284
  declare function fromTokenMetadataSubscribed(chain: Chain, input: WsTokenMetadata): API.TokenSubscribed;
143
285
  declare function fromWsCandle(input: WsCandle): TokenCandle;
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { API, Chain, Token, TokenResolution, TokenCandle, TokenSecurity, TokenStats, TokenHolder, TokenMarketData, WalletPortfolios, WalletPnl, WalletPortfolioPnls, Portfolio, PortfolioPnl, Trade, Activity, TokenCreator as TokenCreator$1, TokenLiquidity } from '@liberfi.io/types';
2
- import { ChainSymbol, Resolution, RangeFilterCondition, TokenCreator, Token as Token$1, TokenStats as TokenStats$1, DexPool, TokenMarketData as TokenMarketData$1, TokenCandle as TokenCandle$1, SwapRouteInput, SendTxInput, PageResponseTokenHolder, TokenPage, SwapRouteResponse, BlockchainLatestBlock, SendTxResponse, WalletNetWorthPage, WalletPnlSummary, PnlDetailsResult, NetWorthByTokensResult, PageResponseTradeDetail, WsNewToken, WsTokenMetadata, WsCandle, WsTokenStat, WsTokenSupply, WsTokenHolder, WsTokenLiquidity, WsTokenBondingCurve, WsTokenMaxLiquidity, WsTokenTotalLiquidity, WsTradeActivity } from '@chainstream-io/sdk';
2
+ import { ChainSymbol, Resolution, RangeFilterCondition, TokenCreator, Token as Token$1, TokenStats as TokenStats$1, DexPool, TokenMarketData as TokenMarketData$1, TokenCandle as TokenCandle$1, SwapRouteInput, SendTxInput, TokenPage, SwapRouteResponse, BlockchainLatestBlock, SendTxResponse, WalletNetWorthPage, WalletPnlSummary, PnlDetailsResult, PageResponseTradeDetail, WsNewToken, WsTokenMetadata, WsCandle, WsTokenStat, WsTokenSupply, WsTokenHolder, WsTokenLiquidity, WsTokenBondingCurve, WsTokenMaxLiquidity, WsTokenTotalLiquidity, WsTradeActivity } from '@chainstream-io/sdk';
3
3
 
4
4
  declare global {
5
5
  interface Window {
@@ -8,7 +8,7 @@ declare global {
8
8
  };
9
9
  }
10
10
  }
11
- declare const _default: "0.1.189";
11
+ declare const _default: "0.2.0";
12
12
 
13
13
  /** Async or sync token provider for authentication. */
14
14
  interface ClientTokenProviderFn {
@@ -33,13 +33,14 @@ declare class Client implements API.IClient, API.ISubscribeClient {
33
33
  private readonly accessToken;
34
34
  private readonly options?;
35
35
  private readonly _client;
36
+ private readonly _phase3;
36
37
  constructor(accessToken: ClientTokenProvider, options?: ClientOptions | undefined);
37
38
  getToken(chain: Chain, address: string): Promise<Token>;
38
39
  getTokens(chain: Chain, addresses: Array<string>): Promise<Array<Token>>;
39
40
  getTokenCandles(chain: Chain, address: string, resolution: TokenResolution, options?: API.GetTokenCandlesOptions): Promise<Array<TokenCandle>>;
40
41
  getTokenSecurity(chain: Chain, address: string): Promise<TokenSecurity>;
41
42
  getTokenStats(chain: Chain, address: string): Promise<TokenStats>;
42
- getTokenHolders(chain: Chain, address: string, options?: API.CursorListOptions): Promise<API.CursorList<TokenHolder>>;
43
+ getTokenHolders(chain: Chain, address: string, options?: API.GetTokenHoldersOptions): Promise<API.CursorList<TokenHolder>>;
43
44
  getTokenMarketData(chain: Chain, address: string): Promise<TokenMarketData>;
44
45
  getNewTokens(chain: Chain, options?: API.GetTokenListOptions): Promise<Array<Token>>;
45
46
  getFinalStretchTokens(chain: Chain, options?: API.GetTokenListOptions): Promise<Array<Token>>;
@@ -56,10 +57,7 @@ declare class Client implements API.IClient, API.ISubscribeClient {
56
57
  limit?: number;
57
58
  }): Promise<WalletPortfolios>;
58
59
  getWalletPnl(chain: Chain, address: string, resolution?: string): Promise<WalletPnl>;
59
- getWalletPortfolioPnls(chain: Chain, address: string, options?: {
60
- cursor?: string;
61
- limit?: number;
62
- }): Promise<WalletPortfolioPnls>;
60
+ getWalletPortfolioPnls(chain: Chain, address: string, options?: API.GetWalletPortfolioPnlsOptions): Promise<WalletPortfolioPnls>;
63
61
  getWalletPortfoliosByTokens(chain: Chain, address: string, tokenAddresses: Array<string>): Promise<Array<Portfolio>>;
64
62
  getWalletPortfolioPnlsByTokens(chain: Chain, address: string, tokenAddresses: Array<string>): Promise<Array<PortfolioPnl>>;
65
63
  getWalletTrades(chain: Chain, address: string, options?: API.GetTradesOptions): Promise<API.CursorList<Trade>>;
@@ -98,6 +96,150 @@ declare class Client implements API.IClient, API.ISubscribeClient {
98
96
  private _subscribeRankingTokens;
99
97
  }
100
98
 
99
+ /**
100
+ * Phase 3 HTTP helpers.
101
+ *
102
+ * The bundled `@chainstream-io/sdk` version pins an older schema that does not
103
+ * recognize the Phase 3 parameters (`sortBy`, `positionState`, `resolution`) or
104
+ * response fields (`gasFee`, `traderTags`, `tags`, `lastActiveAt`, `avgCostUsd`,
105
+ * `isActive`, `walletTokenTags`, `isClosed`, `firstBuyAt`, `lastSellAt`).
106
+ *
107
+ * Rather than wait for the SDK to be regenerated, this module issues direct
108
+ * `fetch` calls against the same REST endpoints the SDK would have hit, and
109
+ * types the raw DTOs as described in the 2026-05-01 Phase 3 spec. Mapping from
110
+ * DTO → domain type stays in `utils.ts`.
111
+ *
112
+ * Once the SDK adopts Phase 3, this module can be deleted and Client can call
113
+ * the SDK methods again without touching any consumer code.
114
+ */
115
+
116
+ interface CursorPageDTO<T> {
117
+ data: Array<T>;
118
+ hasNext: boolean;
119
+ hasPrev: boolean;
120
+ startCursor?: string | null;
121
+ endCursor?: string | null;
122
+ }
123
+ interface Phase3TokenHolderDTO {
124
+ walletAddress: string;
125
+ amount: string;
126
+ amountInUsd: string;
127
+ percentage: string;
128
+ tags?: Array<string>;
129
+ lastActiveAt?: number | null;
130
+ startHoldingAt?: number | null;
131
+ }
132
+ interface Phase3ActivityDTO {
133
+ transactionSignature: string;
134
+ chain: string;
135
+ blockHeight?: number;
136
+ blockTimestamp: number;
137
+ type: string;
138
+ tokenAddress: string;
139
+ tokenName?: string;
140
+ tokenSymbol: string;
141
+ tokenImageUrl?: string | null;
142
+ tokenAmount: string;
143
+ tokenAmountInUsd: string;
144
+ tokenPriceInUsd?: string;
145
+ tokenAmountInNative?: string;
146
+ tokenPriceInNative?: string;
147
+ sideTokenAddress: string;
148
+ sideTokenName?: string;
149
+ sideTokenSymbol: string;
150
+ sideTokenImageUrl?: string | null;
151
+ sideTokenAmount: string;
152
+ sideTokenAmountInUsd: string;
153
+ sideTokenPriceInUsd?: string;
154
+ accountOwnerAddress: string;
155
+ gasFee?: number | null;
156
+ traderTags?: Array<string>;
157
+ poolAddress?: string | null;
158
+ dexProgramAddress?: string | null;
159
+ dexProtocolFamily?: string | null;
160
+ dexImage?: string | null;
161
+ status?: string;
162
+ }
163
+ interface Phase3NetWorthTokenDTO {
164
+ chain: string;
165
+ tokenAddress: string;
166
+ name: string;
167
+ symbol: string;
168
+ decimals: number;
169
+ logoUri?: string | null;
170
+ amount: string;
171
+ priceInUsd: string;
172
+ priceInNative: string;
173
+ valueInUsd: string;
174
+ valueInNative: string;
175
+ isActive?: boolean;
176
+ avgCostUsd?: string | null;
177
+ lastActiveAt?: number | null;
178
+ walletTokenTags?: Array<string>;
179
+ }
180
+ interface Phase3NetWorthByTokensDTO {
181
+ walletAddress: string;
182
+ totalValueInUsd: string;
183
+ totalValueInNative: string;
184
+ currentTimestamp?: number;
185
+ data: Array<Phase3NetWorthTokenDTO>;
186
+ }
187
+ interface Phase3PnlSummaryDTO {
188
+ tokens?: number | string;
189
+ totalTrades?: number | string;
190
+ buys?: number | string;
191
+ sells?: number | string;
192
+ wins?: number | string;
193
+ losses?: number | string;
194
+ winRate?: string | null;
195
+ realizedProfitInUsd?: string | null;
196
+ unrealizedProfitInUsd?: string | null;
197
+ totalProfitInUsd?: string | null;
198
+ totalProfitRatio?: string | null;
199
+ currentValue?: string | null;
200
+ buyAmountInUsd?: string | null;
201
+ sellAmountInUsd?: string | null;
202
+ totalCostInUsd?: string;
203
+ avgProfitPerTradeInUsd?: string | null;
204
+ }
205
+ interface Phase3PnlItemDTO {
206
+ tokenAddress: string;
207
+ symbol?: string;
208
+ name?: string;
209
+ decimals?: number;
210
+ logoUri?: string | null;
211
+ walletAddress?: string;
212
+ chain?: string;
213
+ balance: string;
214
+ priceInUsd: string;
215
+ currentValue: string;
216
+ realizedProfitInUsd?: string;
217
+ realizedProfitRatio?: string;
218
+ unrealizedProfitInUsd?: string;
219
+ unrealizedProfitRatio?: string;
220
+ totalProfitInUsd?: string;
221
+ totalProfitRatio?: string;
222
+ buys?: number | string;
223
+ sells?: number | string;
224
+ totalTrades?: number | string;
225
+ wins?: number | string;
226
+ losses?: number | string;
227
+ buyAmount?: string;
228
+ sellAmount?: string;
229
+ buyAmountInUsd?: string;
230
+ sellAmountInUsd?: string;
231
+ avgBuyPriceInUsd?: string;
232
+ avgSellPriceInUsd?: string;
233
+ avgProfitPerTradeInUsd?: string;
234
+ totalCostInUsd?: string;
235
+ isClosed?: boolean;
236
+ firstBuyAt?: number | null;
237
+ lastSellAt?: number | null;
238
+ }
239
+ interface Phase3PnlDetailsDTO extends CursorPageDTO<Phase3PnlItemDTO> {
240
+ summary: Phase3PnlSummaryDTO;
241
+ }
242
+
101
243
  declare function toChainDTO(chain: Chain): ChainSymbol;
102
244
  declare function toResolutionDTO(resolution: TokenResolution): Resolution;
103
245
  declare function toSortDirectionDTO(direction: "asc" | "desc"): string;
@@ -126,18 +268,18 @@ declare const KYBERSWAP_NATIVE_SENTINEL = "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeee
126
268
  declare function toMintForRoute(dex: "jupiter" | "kyberswap", address: string): string;
127
269
  declare function toSwapRouteInput(params: API.SwapParams): SwapRouteInput;
128
270
  declare function toSendTxInput(params: API.SendTxParams): SendTxInput;
129
- declare function fromTokenHolderPage(input: PageResponseTokenHolder): API.CursorList<TokenHolder>;
271
+ declare function fromTokenHolderPage(input: CursorPageDTO<Phase3TokenHolderDTO>): API.CursorList<TokenHolder>;
130
272
  declare function fromTokenPage(input: TokenPage): API.SearchTokenCursorList;
131
273
  declare function fromSwapRoute(input: SwapRouteResponse): API.SwapRoute;
132
274
  declare function fromLatestBlock(input: BlockchainLatestBlock): API.BlockchainLatestBlock;
133
275
  declare function fromSendTxResult(input: SendTxResponse): API.SendTxResult;
134
276
  declare function fromWalletPortfolios(chain: Chain, input: WalletNetWorthPage): WalletPortfolios;
135
277
  declare function fromWalletPnlSummary(chain: Chain, address: string, input: WalletPnlSummary): WalletPnl;
136
- declare function fromPnlDetailsPage(chain: Chain, address: string, input: PnlDetailsResult): WalletPortfolioPnls;
137
- declare function fromWalletNetWorthByTokens(chain: Chain, input: NetWorthByTokensResult): Portfolio[];
278
+ declare function fromPnlDetailsPage(chain: Chain, address: string, input: Phase3PnlDetailsDTO): WalletPortfolioPnls;
279
+ declare function fromWalletNetWorthByTokens(chain: Chain, input: Phase3NetWorthByTokensDTO): Portfolio[];
138
280
  declare function fromPnlDetailItems(chain: Chain, input: PnlDetailsResult): PortfolioPnl[];
139
281
  declare function fromTradePage(input: PageResponseTradeDetail): API.CursorList<Trade>;
140
- declare function fromActivityPage(input: PageResponseTradeDetail): API.CursorList<Activity>;
282
+ declare function fromActivityPage(input: CursorPageDTO<Phase3ActivityDTO>): API.CursorList<Activity>;
141
283
  declare function fromTokenSubscribed(chain: Chain, input: WsNewToken): API.TokenSubscribed;
142
284
  declare function fromTokenMetadataSubscribed(chain: Chain, input: WsTokenMetadata): API.TokenSubscribed;
143
285
  declare function fromWsCandle(input: WsCandle): TokenCandle;
package/dist/index.js CHANGED
@@ -1,2 +1,3 @@
1
- 'use strict';var sdk=require('@chainstream-io/sdk'),types=require('@liberfi.io/types'),utils=require('@liberfi.io/utils');typeof window<"u"&&(window.__LIBERFI_VERSION__=window.__LIBERFI_VERSION__||{},window.__LIBERFI_VERSION__["@liberfi.io/client"]="0.1.189");var Ae="0.1.189";function n(e){return e??void 0}function l(e){switch(e){case types.Chain.ETHEREUM:return sdk.ChainSymbol.eth;case types.Chain.BINANCE:return sdk.ChainSymbol.bsc;case types.Chain.SOLANA:return sdk.ChainSymbol.sol}throw new Error(`Unsupported chain: ${e}`)}function x(e){switch(e){case "1s":return sdk.Resolution["1s"];case "15s":return sdk.Resolution["15s"];case "30s":return sdk.Resolution["30s"];case "1m":return sdk.Resolution["1m"];case "5m":return sdk.Resolution["5m"];case "15m":return sdk.Resolution["15m"];case "30m":case "1h":return sdk.Resolution["1h"];case "4h":return sdk.Resolution["4h"];case "12h":return sdk.Resolution["12h"];case "24h":return sdk.Resolution["1d"]}}function ye(e){return e}function G(e){switch(e){case "marketCap":return sdk.SearchSortBy.marketCapInUsd;case "tvl":return sdk.SearchSortBy.liquidityInUsd;case "price":return sdk.SearchSortBy.priceInUsd;case "holders":return sdk.SearchSortBy.holderCount;case "volumes24h":return sdk.SearchSortBy.h24VolumeInUsd;case "trades24h":return sdk.SearchSortBy.h24Transactions;case "createdAt":return sdk.SearchSortBy.tokenCreatedAt}throw new Error(`Unsupported search field: ${e}`)}function p(e){switch(e){case "price":return sdk.TokenField.marketDatapriceInUsd;case "priceChange1m":return sdk.TokenField.statspriceChangeRatioInUsd1m;case "priceChange5m":return sdk.TokenField.statspriceChangeRatioInUsd5m;case "priceChange1h":return sdk.TokenField.statspriceChangeRatioInUsd1h;case "priceChange4h":return sdk.TokenField.statspriceChangeRatioInUsd4h;case "priceChange24h":return sdk.TokenField.statspriceChangeRatioInUsd24h;case "marketCap":return sdk.TokenField.marketDatamarketCapInUsd;case "tvl":return sdk.TokenField.marketDatamaxPoolTvlInUsd;case "top10Holdings":return sdk.TokenField.marketDatatop10TotalHoldings;case "top10Ratio":return sdk.TokenField.marketDatatop10HoldingsRatio;case "top100Holdings":return sdk.TokenField.marketDatatop100TotalHoldings;case "top100Ratio":return sdk.TokenField.marketDatatop100HoldingsRatio;case "holders":return sdk.TokenField.marketDataholders;case "creatorsHoldings":return sdk.TokenField.marketDatacreatorHoldings;case "creatorsRatio":return sdk.TokenField.marketDatacreatorHoldingsRatio;case "buys1m":return sdk.TokenField.statsbuys1m;case "buys5m":return sdk.TokenField.statsbuys5m;case "buys15m":return sdk.TokenField.statsbuys15m;case "buys30m":return sdk.TokenField.statsbuys30m;case "buys1h":return sdk.TokenField.statsbuys1h;case "buys4h":return sdk.TokenField.statsbuys4h;case "buys24h":return sdk.TokenField.statsbuys24h;case "sells1m":return sdk.TokenField.statssells1m;case "sells5m":return sdk.TokenField.statssells5m;case "sells15m":return sdk.TokenField.statssells15m;case "sells30m":return sdk.TokenField.statssells30m;case "sells1h":return sdk.TokenField.statssells1h;case "sells4h":return sdk.TokenField.statssells4h;case "sells24h":return sdk.TokenField.statssells24h;case "trades1m":return sdk.TokenField.statstrades1m;case "trades5m":return sdk.TokenField.statstrades5m;case "trades1h":return sdk.TokenField.statstrades1h;case "trades4h":return sdk.TokenField.statstrades4h;case "trades24h":return sdk.TokenField.statstrades24h;case "traders1m":return sdk.TokenField.statstraders1m;case "traders5m":return sdk.TokenField.statstraders5m;case "traders1h":return sdk.TokenField.statstraders1h;case "traders4h":return sdk.TokenField.statstraders4h;case "traders24h":return sdk.TokenField.statstraders24h;case "volumes1m":return sdk.TokenField.statsvolumesInUsd1m;case "volumes5m":return sdk.TokenField.statsvolumesInUsd5m;case "volumes1h":return sdk.TokenField.statsvolumesInUsd1h;case "volumes4h":return sdk.TokenField.statsvolumesInUsd4h;case "volumes24h":return sdk.TokenField.statsvolumesInUsd24h;case "createdAt":return sdk.TokenField.tokenCreatedAt}throw new Error(`Unsupported sortBy: ${e}`)}function j(e){return e.filter(s=>["gt","gte","lt","lte","between"].indexOf(s.operator)>=0).map(s=>{let r={field:p(s.field)};return ["gt","gte","between"].indexOf(s.operator)>=0&&(r.min=typeof s.value=="number"?new utils.SafeBigNumber(s.value).toString():s.value),["lt","lte","between"].indexOf(s.operator)>=0&&(r.max=typeof s.value=="number"?new utils.SafeBigNumber(s.value).toString():s.value),r})}function v(e){switch(e){case sdk.ChainSymbol.eth:return types.Chain.ETHEREUM;case sdk.ChainSymbol.bsc:return types.Chain.BINANCE;case sdk.ChainSymbol.sol:case "solana":return types.Chain.SOLANA}throw new Error(`Unsupported chain: ${e}`)}function Pe(e){return {address:e.address??void 0,share:e.share??void 0,isVerified:e.isVerified??void 0}}function T(e){return {chain:v(e.chain),name:e.name,symbol:e.symbol,address:e.address,decimals:e.decimals,image:e.imageUrl??void 0,description:e.description??void 0,creators:e.tokenCreators?.map(Pe),launchedFrom:{programAddress:e.extra?.launchFromProgramAddress??void 0,protocolFamily:e.extra?.launchFromProtocolFamily??void 0},migrateProgress:e.marketData?.completionRatio?new utils.SafeBigNumber(e.marketData.completionRatio).shiftedBy(2).toString():void 0,migratedTo:{programAddress:e.extra?.migratedToProgramAddress??void 0,protocolFamily:e.extra?.migratedToProtocolFamily??void 0,poolAddress:e.extra?.migratedToPoolAddress??void 0,migratedAt:e.extra?.migratedAt?new Date(e.extra.migratedAt):void 0},socialMedias:e.socialMedias?Object.fromEntries(Object.entries(e.socialMedias).filter(([,s])=>s!=null).map(([s,r])=>[s,r])):void 0,stats:e.stats?D(e.stats):void 0,marketData:e.marketData?_(e.marketData):void 0,createdAt:e.tokenCreatedAt?new Date(e.tokenCreatedAt):void 0}}function D(e){return {"1m":h(e,"1m"),"5m":h(e,"5m"),"15m":h(e,"15m"),"30m":h(e,"30m"),"1h":h(e,"1h"),"4h":h(e,"4h"),"24h":h(e,"24h")}}function I(e){return e===void 0?void 0:parseInt(e)}function h(e,s){let r=e.periods?.[s];return r?{buys:I(r.buys),sells:I(r.sells),trades:I(r.trades),buyers:I(r.buyers),sellers:I(r.sellers),traders:I(r.traders),buyVolumes:r.buyVolume,sellVolumes:r.sellVolume,volumes:r.totalVolumeInNative,buyVolumesInUsd:r.buyVolumeInUsd,sellVolumesInUsd:r.sellVolumeInUsd,volumesInUsd:r.totalVolumeInUsd,openPriceInUsd:r.openInUsd,closePriceInUsd:r.closeInUsd,highPriceInUsd:r.highInUsd,lowPriceInUsd:r.lowInUsd,priceInUsd:r.closeInUsd,priceChange:r.priceChangeRatioInUsd}:{}}function Ns(e){return {poolAddress:e.poolAddress,programAddress:e.programAddress??void 0,protocolFamily:e.protocolFamily??void 0,tvl:e.tvlInSol??void 0,tvlInUsd:e.tvlInUsd??void 0}}function _(e){return {totalSupply:e.totalSupply??void 0,marketCap:e.marketCapInSol??void 0,marketCapInUsd:e.marketCapInUsd??void 0,price:e.priceInSol??void 0,priceInUsd:e.priceInUsd??void 0,tvl:e.totalTvlInSol??void 0,tvlInUsd:e.totalTvlInUsd??void 0,holders:e.holders?parseInt(e.holders):void 0,top10Holdings:e.top10TotalHoldings??void 0,top10HoldingsRatio:e.top10HoldingsRatio??void 0,top50Holdings:e.top50TotalHoldings??void 0,top50HoldingsRatio:e.top50HoldingsRatio??void 0,top100Holdings:e.top100TotalHoldings??void 0,top100HoldingsRatio:e.top100HoldingsRatio??void 0,bluechipHolders:e.bluechipTotalHolders?parseInt(e.bluechipTotalHolders):void 0,bluechipHoldings:e.bluechipTotalHoldings??void 0,bluechipHoldingsRatio:e.bluechipHoldingsRatio??void 0,kolHolders:e.kolTotalHolders?parseInt(e.kolTotalHolders):void 0,kolHoldings:e.kolTotalHoldings??void 0,kolHoldingsRatio:e.kolHoldingsRatio??void 0,sniperHolders:e.sniperTotalHolders?parseInt(e.sniperTotalHolders):void 0,sniperHoldings:e.sniperTotalHoldings??void 0,sniperHoldingsRatio:e.sniperHoldingsRatio??void 0,proHolders:e.proTotalHolders?parseInt(e.proTotalHolders):void 0,proHoldings:e.proTotalHoldings??void 0,proHoldingsRatio:e.proHoldingsRatio??void 0,insiderHolders:e.insiderTotalHolders?parseInt(e.insiderTotalHolders):void 0,insiderHoldings:e.insiderTotalHoldings??void 0,insiderHoldingsRatio:e.insiderHoldingsRatio??void 0,sandwichHolders:e.sandwishTotalHolders?parseInt(e.sandwishTotalHolders):void 0,sandwichHoldings:e.sandwishTotalHoldings??void 0,sandwichHoldingsRatio:e.sandwishHoldingsRatio??void 0,freshHolders:e.freshTotalHolders?parseInt(e.freshTotalHolders):void 0,freshHoldings:e.freshTotalHoldings??void 0,freshHoldingsRatio:e.freshHoldingsRatio??void 0,bundleHolders:e.bundleTotalHolders?parseInt(e.bundleTotalHolders):void 0,bundleHoldings:e.bundleTotalHoldings??void 0,bundleHoldingsRatio:e.bundleHoldingsRatio??void 0,devHolders:e.devTotalHolders?parseInt(e.devTotalHolders):void 0,devHoldings:e.devTotalHoldings??void 0,devHoldingsRatio:e.devHoldingsRatio??void 0}}function K(e,s){return {open:e.open,close:e.close,high:e.high,low:e.low,volume:e.volume,resolution:s,timestamp:new Date(e.timestamp)}}function Se(e){return e==="1d"?"24h":e}function J(e){return {hasTransferFee:e.hasTransferFee,isTransferFeeUpgradable:e.isTransferFeeUpgradable,isTransferable:e.isTransferable,isFreezable:e.isFreezable,isClosable:e.isClosable}}var Ue=new Set([types.Chain.SOLANA,types.Chain.SOLANA_TESTNET,types.Chain.SOLANA_DEVNET]),Ce="0x0000000000000000000000000000000000000000",ve="0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE";function Re(e){return e===utils.SOLANA_TOKENS.native.address?utils.SOLANA_TOKENS.wrapped.address:e}function we(e){return e.toLowerCase()===Ce.toLowerCase()?ve:e}function He(e){return e.dex?e.dex:Ue.has(e.chain)?"jupiter":"kyberswap"}function W(e,s){return e==="jupiter"?Re(s):e==="kyberswap"?we(s):s}function Bs(e,s){return W(e,s)}function Y(e){let s=He(e),r=W(s,e.input),o=W(s,e.output);return {dex:s,userAddress:e.userAddress,amount:e.amount,swapMode:e.mode===types.API.SwapMode.EXACT_IN?sdk.SwapRouteInputSwapMode.ExactIn:sdk.SwapRouteInputSwapMode.ExactOut,slippage:e.slippage??1,inputMint:r,outputMint:o,priorityFee:e.priorityFee,...e.tipFee&&{tipFee:e.tipFee},...e.isAntiMev!=null&&{isAntiMev:e.isAntiMev},...e.permit&&{permit:e.permit},...e.deadline!=null&&{deadline:e.deadline}}}function Q(e){return {signedTx:e.serializedTx}}function X(e){return {startCursor:n(e.startCursor),endCursor:n(e.endCursor),hasPrev:e.hasPrev,hasNext:e.hasNext,data:e.data.map(s=>({address:s.walletAddress,amount:s.amount,amountInUsd:s.amountInUsd,ratio:s.percentage}))}}function Z(e){let s=e;return {startCursor:n(e.startCursor),endCursor:n(e.endCursor),hasPrev:e.hasPrev,hasNext:e.hasNext,data:e.data.map(T),extra:n(s.countsByProtocols)}}function ee(e){return {serializedTx:e.serializedTx,recentBlockhash:n(e.recentBlockhash),lastValidBlockHeight:n(e.lastValidBlockHeight),plans:[],extra:e.routeInfo}}function se(e){return {blockhash:e.blockhash,lastValidBlockHeight:e.lastValidBlockHeight}}function re(e){return {txHash:e.signature,extra:{jobId:e.jobId,elapsedTime:e.elapsedTime}}}function oe(e,s){let r=(s.data??[]).map(o=>({chain:v(o.chain),address:o.tokenAddress,name:o.name,symbol:o.symbol,image:n(o.logoUri),priceInUsd:o.priceInUsd,priceInNative:o.priceInNative,amount:o.amount,amountInUsd:o.valueInUsd,amountInNative:o.valueInNative,decimals:o.decimals}));return {chain:r[0]?.chain??e,address:s.walletAddress,balanceInUsd:s.totalValueInUsd,balanceInNative:s.totalValueInNative,startCursor:n(s.startCursor),endCursor:n(s.endCursor),hasPrev:s.hasPrev,hasNext:s.hasNext,portfolios:r}}function te(e,s,r){return {chain:e,address:s,tokens:r.tokens?Number(r.tokens):void 0,buys:r.buys?Number(r.buys):void 0,sells:r.sells?Number(r.sells):void 0,totalTrades:r.totalTrades?Number(r.totalTrades):void 0,wins:r.wins?Number(r.wins):void 0,losses:r.losses?Number(r.losses):void 0,winRate:n(r.winRate),buyAmountInUsd:n(r.buyAmountInUsd),sellAmountInUsd:n(r.sellAmountInUsd),totalCostInUsd:n(r.totalCostInUsd),realizedProfitInUsd:n(r.realizedProfitInUsd),realizedProfitRatio:n(r.realizedProfitRatio),unrealizedProfitInUsd:n(r.unrealizedProfitInUsd),unrealizedProfitRatio:n(r.unrealizedProfitRatio),totalProfitInUsd:n(r.totalProfitInUsd),totalProfitRatio:n(r.totalProfitRatio),avgProfitPerTradeInUsd:n(r.avgProfitPerTradeInUsd)}}function ne(e,s,r){let o=r.data.map(t=>({chain:e,address:t.tokenAddress,name:t.name??"",symbol:t.symbol??"",image:n(t.logoUri),amount:t.balance,amountInUsd:t.currentValue,priceInUsd:t.priceInUsd,decimals:t.decimals??0,totalTrades:Number(t.totalTrades),buys:Number(t.buys),buyVolumes:t.buyAmount,buyVolumesInUsd:t.buyAmountInUsd,buyAvgPriceInUsd:t.avgBuyPriceInUsd,sells:Number(t.sells),sellVolumes:t.sellAmount,sellVolumesInUsd:t.sellAmountInUsd,sellAvgPriceInUsd:t.avgSellPriceInUsd,realizedProfitInUsd:t.realizedProfitInUsd,realizedProfitRatio:t.realizedProfitRatio,unrealizedProfitInUsd:t.unrealizedProfitInUsd,unrealizedProfitRatio:t.unrealizedProfitRatio,totalProfitInUsd:t.totalProfitInUsd,totalProfitRatio:t.totalProfitRatio}));return {chain:e,address:s,tokens:Number(r.summary.tokens),buys:Number(r.summary.buys),sells:Number(r.summary.sells),totalTrades:Number(r.summary.totalTrades),wins:Number(r.summary.wins),losses:Number(r.summary.losses),winRate:n(r.summary.winRate),buyAmountInUsd:n(r.summary.buyAmountInUsd),sellAmountInUsd:n(r.summary.sellAmountInUsd),totalCostInUsd:r.summary.totalCostInUsd,realizedProfitInUsd:n(r.summary.realizedProfitInUsd),realizedProfitRatio:n(r.summary.realizedProfitRatio),unrealizedProfitInUsd:n(r.summary.unrealizedProfitInUsd),totalProfitInUsd:n(r.summary.totalProfitInUsd),startCursor:n(r.startCursor),endCursor:n(r.endCursor),hasPrev:r.hasPrev,hasNext:r.hasNext,portfolios:o}}function ae(e,s){return (s.data??[]).map(r=>({chain:v(r.chain),address:r.tokenAddress,name:r.name,symbol:r.symbol,image:n(r.logoUri),priceInUsd:r.priceInUsd,priceInNative:r.priceInNative,amount:r.amount,amountInUsd:r.valueInUsd,amountInNative:r.valueInNative,decimals:r.decimals}))}function ie(e,s){return s.data.map(r=>({chain:e,address:r.tokenAddress,name:r.name??"",symbol:r.symbol??"",image:n(r.logoUri),amount:r.balance,amountInUsd:r.currentValue,priceInUsd:r.priceInUsd,decimals:r.decimals??0,totalTrades:Number(r.totalTrades),buys:Number(r.buys),buyVolumes:r.buyAmount,buyVolumesInUsd:r.buyAmountInUsd,buyAvgPriceInUsd:r.avgBuyPriceInUsd,sells:Number(r.sells),sellVolumes:r.sellAmount,sellVolumesInUsd:r.sellAmountInUsd,sellAvgPriceInUsd:r.avgSellPriceInUsd,realizedProfitInUsd:r.realizedProfitInUsd,realizedProfitRatio:r.realizedProfitRatio,unrealizedProfitInUsd:r.unrealizedProfitInUsd,unrealizedProfitRatio:r.unrealizedProfitRatio,totalProfitInUsd:r.totalProfitInUsd,totalProfitRatio:r.totalProfitRatio}))}function de(e){return {startCursor:n(e.startCursor),endCursor:n(e.endCursor),hasPrev:e.hasPrev,hasNext:e.hasNext,data:e.data.map(We)}}function We(e){let s=e.type.toLowerCase()==="buy";return {chain:v(e.chain),walletAddress:e.accountOwnerAddress,txHash:e.transactionSignature,type:s?"buy":"sell",from:{address:s?e.sideTokenAddress:e.tokenAddress,symbol:s?e.sideTokenSymbol:e.tokenSymbol,name:s?e.sideTokenName:e.tokenName,image:n(s?e.sideTokenImageUrl:e.tokenImageUrl),amount:s?e.sideTokenAmount:e.tokenAmount,amountInUsd:s?e.sideTokenAmountInUsd:e.tokenAmountInUsd,priceInUsd:s?e.sideTokenPriceInUsd:e.tokenPriceInUsd},to:{address:s?e.tokenAddress:e.sideTokenAddress,symbol:s?e.tokenSymbol:e.sideTokenSymbol,name:s?e.tokenName:e.sideTokenName,image:n(s?e.tokenImageUrl:e.sideTokenImageUrl),amount:s?e.tokenAmount:e.sideTokenAmount,amountInUsd:s?e.tokenAmountInUsd:e.sideTokenAmountInUsd,priceInUsd:s?e.tokenPriceInUsd:e.sideTokenPriceInUsd},dex:{programAddress:n(e.dexProgramAddress),protocolFamily:n(e.dexProtocolFamily),image:n(e.dexImage)},poolAddress:n(e.poolAddress),status:e.status??"success",time:new Date(e.blockTimestamp*1e3)}}function le(e){return {startCursor:n(e.startCursor),endCursor:n(e.endCursor),hasPrev:e.hasPrev,hasNext:e.hasNext,data:e.data.map(xe)}}function xe(e){let s=e.type.toLowerCase().replace(/ /g,"_"),r=s==="buy";return {chain:v(e.chain),walletAddress:e.accountOwnerAddress,txHash:e.transactionSignature,type:s,from:{address:r?e.sideTokenAddress:e.tokenAddress,symbol:r?e.sideTokenSymbol:e.tokenSymbol,name:r?e.sideTokenName:e.tokenName,image:n(r?e.sideTokenImageUrl:e.tokenImageUrl),amount:r?e.sideTokenAmount:e.tokenAmount,amountInUsd:r?e.sideTokenAmountInUsd:e.tokenAmountInUsd,priceInUsd:r?e.sideTokenPriceInUsd:e.tokenPriceInUsd},to:{address:r?e.tokenAddress:e.sideTokenAddress,symbol:r?e.tokenSymbol:e.sideTokenSymbol,name:r?e.tokenName:e.sideTokenName,image:n(r?e.tokenImageUrl:e.sideTokenImageUrl),amount:r?e.tokenAmount:e.sideTokenAmount,amountInUsd:r?e.tokenAmountInUsd:e.sideTokenAmountInUsd,priceInUsd:r?e.tokenPriceInUsd:e.sideTokenPriceInUsd},dex:{programAddress:n(e.dexProgramAddress),protocolFamily:n(e.dexProtocolFamily),image:n(e.dexImage)},poolAddress:n(e.poolAddress),status:e.status??"success",time:new Date(e.blockTimestamp*1e3)}}function ce(e,s){return {chain:e,address:s.tokenAddress,name:s.name,symbol:s.symbol,decimals:s.decimals,createdAt:s.createdAtMs?new Date(s.createdAtMs):void 0,launchedFrom:s.launchFrom?{programAddress:s.launchFrom.programAddress,protocolFamily:s.launchFrom.protocolFamily}:void 0}}function ue(e,s){return {chain:e,address:s.tokenAddress,name:s.name,symbol:s.symbol,decimals:s.decimals,image:s.imageUrl,description:s.description,socialMedias:s.socialMedia?{...s.socialMedia}:void 0,createdAt:s.createdAtMs?new Date(s.createdAtMs):void 0,launchedFrom:s.launchFrom?{programAddress:s.launchFrom.programAddress,protocolFamily:s.launchFrom.protocolFamily}:void 0,migratedTo:s.migratedTo?{programAddress:s.migratedTo.programAddress,protocolFamily:s.migratedTo.protocolFamily}:void 0}}function me(e){return {open:e.open,close:e.close,high:e.high,low:e.low,volume:e.volume,resolution:Se(e.resolution),timestamp:new Date(e.time)}}function pe(e){let s=["1m","5m","15m","30m","1h","4h","24h"],r=e,o={};for(let t of s){let d=r[`buys${t}`],a=r[`sells${t}`],c=r[`buyers${t}`],w=r[`sellers${t}`],k=r[`buyVolumeInUsd${t}`],A=r[`sellVolumeInUsd${t}`],S=r[`trades${t}`],U=r[`price${t}`],f=r[`openInUsd${t}`],C=r[`closeInUsd${t}`];if(!(d!==void 0||a!==void 0||S!==void 0||U!==void 0))continue;let H=S??(d!==void 0&&a!==void 0?d+a:void 0),fe=c!==void 0&&w!==void 0?c+w:void 0,ge=k!==void 0&&A!==void 0?new utils.SafeBigNumber(k).plus(A).toString():void 0,he=f&&C&&new utils.SafeBigNumber(f).gt(0)?new utils.SafeBigNumber(C).minus(f).div(f).toString():void 0;o[t]={buys:d,sells:a,trades:H,buyers:c,sellers:w,traders:fe,buyVolumesInUsd:k,sellVolumesInUsd:A,volumesInUsd:ge,openPriceInUsd:f,closePriceInUsd:C,priceInUsd:U??C,priceChange:he};}return o}function De(e){return {priceInUsd:e.price}}function N(e,s){return {chain:e,address:s.address,stats:pe(s),marketData:De(s)}}function B(e,s,r){return {chain:e,address:s,marketData:{totalSupply:r.supply,marketCapInUsd:r.marketCapInUsd}}}function F(e,s,r){return {chain:e,address:s,marketData:_e(r)}}function O(e,s,r){return r.metricType===sdk.WsMetricType.LIQUIDITY_IN_USD?{chain:e,address:s,marketData:{tvlInUsd:r.value}}:r.metricType===sdk.WsMetricType.MIGRATED_RATIO?{chain:e,address:s,migrateProgress:new utils.SafeBigNumber(r.value).shiftedBy(2).toString()}:{chain:e,address:s}}function L(e,s){return {chain:e,address:s.tokenAddress??"",migrateProgress:s.progressRatio?new utils.SafeBigNumber(s.progressRatio).shiftedBy(2).toString():void 0}}function Te(e,s,r){return {chain:e,address:s,liquidities:[{poolAddress:r.poolAddress,tvlInUsd:r.liquidityInUsd,tvl:r.liquidityInNative}]}}function ke(e,s,r){return {chain:e,address:s,marketData:{tvlInUsd:r.liquidityInUsd,tvl:r.liquidityInNative}}}function _e(e){return {holders:e.holders,top10Holdings:e.top10HoldersAmount,top10HoldingsRatio:e.top10HoldersRatio,top50Holdings:e.top50HoldersAmount,top50HoldingsRatio:e.top50HoldersRatio,top100Holdings:e.top100HoldersAmount,top100HoldingsRatio:e.top100HoldersRatio,devHolders:e.balanceTagDevHolders===void 0?void 0:e.balanceTagDevHolders,devHoldings:e.balanceTagDevAmount,devHoldingsRatio:e.balanceTagDevRatio,sniperHolders:e.balanceTagSniperHolders===void 0?void 0:e.balanceTagSniperHolders,sniperHoldings:e.balanceTagSniperAmount,sniperHoldingsRatio:e.balanceTagSniperRatio,freshHolders:e.balanceTagFreshHolders===void 0?void 0:e.balanceTagFreshHolders,freshHoldings:e.balanceTagFreshAmount,freshHoldingsRatio:e.balanceTagFreshRatio,bundleHolders:e.balanceTagBundleHolders===void 0?void 0:e.balanceTagBundleHolders,bundleHoldings:e.balanceTagBundleAmount,bundleHoldingsRatio:e.balanceTagBundleRatio,sandwichHolders:e.balanceTagSandwichHolders===void 0?void 0:e.balanceTagSandwichHolders,sandwichHoldings:e.balanceTagSandwichAmount,sandwichHoldingsRatio:e.balanceTagSandwichRatio}}function E(e,s){let r=s.kind.toLowerCase()==="buy";return {chain:e,walletAddress:r?s.buyWalletAddress:s.sellWalletAddress,txHash:s.txHash,type:r?"buy":"sell",from:{address:s.sellTokenAddress,symbol:s.sellTokenSymbol,name:s.sellTokenName,amount:s.sellAmount,amountInUsd:s.sellAmountInUsd},to:{address:s.buyTokenAddress,symbol:s.buyTokenSymbol,name:s.buyTokenName,amount:s.buyAmount,amountInUsd:s.buyAmountInUsd},status:"success",time:new Date(s.timestamp)}}function M(e,s){let r=s.kind.toLowerCase().replace(/ /g,"_");return {chain:e,walletAddress:r==="buy"?s.buyWalletAddress:s.sellWalletAddress,txHash:s.txHash,type:r,from:{address:s.sellTokenAddress,symbol:s.sellTokenSymbol,name:s.sellTokenName,amount:s.sellAmount,amountInUsd:s.sellAmountInUsd},to:{address:s.buyTokenAddress,symbol:s.buyTokenSymbol,name:s.buyTokenName,amount:s.buyAmount,amountInUsd:s.buyAmountInUsd},status:"success",time:new Date(s.timestamp)}}var be=class e{constructor(s,r){this.accessToken=s;this.options=r;this._client=new sdk.ChainStreamClient(this.accessToken,this.options);}_client;async getToken(s,r){let o=await this._client.token.getToken(l(s),r);return T(o)}async getTokens(s,r){return (await this._client.token.getTokens(l(s),{tokenAddresses:r.join(",")})).map(T)}async getTokenCandles(s,r,o,t){return (await this._client.token.getCandles(l(s),r,{resolution:x(o),from:t?.after?.getTime(),to:t?.before?.getTime(),limit:t?.limit})).map(a=>K(a,o))}async getTokenSecurity(s,r){let o=await this._client.token.getSecurity(l(s),r);return J(o)}async getTokenStats(s,r){let o=await this._client.token.getStats(l(s),r);return D(o)}async getTokenHolders(s,r,o){let t=await this._client.token.getHolders(l(s),r,{cursor:o?.cursor,limit:o?.limit,direction:o?.direction});return X(t)}async getTokenMarketData(s,r){let o=await this._client.token.getMarketData(l(s),r);return _(o)}async getNewTokens(s,r){return (await this._client.ranking.getNewTokens(l(s),this._buildRankingParams(r))).map(T)}async getFinalStretchTokens(s,r){return (await this._client.ranking.getFinalStretchTokens(l(s),this._buildRankingParams(r))).map(T)}async getMigratedTokens(s,r){return (await this._client.ranking.getMigratedTokens(l(s),this._buildRankingParams(r))).map(T)}async getTrendingTokens(s,r,o){return (await this._client.ranking.getHotTokens(l(s),r,this._buildRankingParams(o))).map(T)}async getStockTokens(s,r){return (await this._client.ranking.getStocksTokens(l(s),this._buildRankingParams(r))).map(T)}async searchTokens(s){let r=await this._client.token.search({chains:s?.chains?.map(l),q:s?.keyword,limit:s?.limit,cursor:s?.cursor,sortBy:s?.sortBy?G(s.sortBy):void 0,sort:s?.sortDirection});return Z(r)}async swapRoute(s){let r=await this._client.dex.route(l(s.chain),Y(s));return ee(r)}async getLatestBlock(s){let r=await this._client.blockchain.getLatestBlock(l(s.chain));return se(r)}async sendTx(s){let r=await this._client.transaction.send(l(s.chain),Q(s));return re(r)}async checkTxSuccess(s,r,o){let{success:t}=await this._client.waitForJob(r,o);return t}async getWalletPortfolios(s,r,o){let t=e._CHAIN_TO_BALANCE_PARAM[s];if(t&&this.options?.nativeBalanceApiUrl)return this._getWalletPortfoliosFromBalanceApi(s,t,r);let d=await this._client.wallet.getNetWorth(l(s),r,{cursor:o?.cursor,limit:o?.limit??100});return oe(s,d)}async getWalletPnl(s,r,o){let t=await this._client.wallet.getPnl(l(s),r,o?{resolution:o}:void 0);return te(s,r,t)}async getWalletPortfolioPnls(s,r,o){let t=await this._client.wallet.getPnlDetails(l(s),r,{cursor:o?.cursor,limit:o?.limit??100});return ne(s,r,t)}async getWalletPortfoliosByTokens(s,r,o){let t=e._CHAIN_TO_BALANCE_PARAM[s];if(t&&this.options?.nativeBalanceApiUrl)return this._getPortfoliosFromBalanceApi(s,t,r,o);let d=await this._client.wallet.getNetWorthByTokens(l(s),r,{tokenAddresses:o.join(",")});return ae(s,d)}async getWalletPortfolioPnlsByTokens(s,r,o){let t=await this._client.wallet.getPnlByToken(l(s),r,{tokenAddresses:o.join(",")});return ie(s,t)}async getWalletTrades(s,r,o){return this._getTrades(s,{walletAddress:r},o)}async getTokenTrades(s,r,o){return this._getTrades(s,{tokenAddress:r},o)}async getWalletActivities(s,r,o){return this._getActivities(s,{walletAddress:r},o)}async getTokenActivities(s,r,o){return this._getActivities(s,{tokenAddress:r},o)}async getPresignedUploadUrl(){return (await this._client.ipfs.presign()).presignUrl}subscribeToken(s,r,o){let t=l(s),d=[this._client.stream.subscribeTokenStats({chain:t,tokenAddress:r,callback:a=>o([N(s,a)])}),this._client.stream.subscribeTokenSupply({chain:t,tokenAddress:r,callback:a=>o([B(s,r,a)])}),this._client.stream.subscribeTokenHolders({chain:t,tokenAddress:r,callback:a=>o([F(s,r,a)])}),this._client.stream.subscribeTokenLiquidity({chain:t,tokenAddress:r,callback:a=>o([O(s,r,a)])}),this._client.stream.subscribeTokenMaxLiquidity({chain:t,tokenAddress:r,callback:a=>o([Te(s,r,a)])}),this._client.stream.subscribeTokenTotalLiquidity({chain:t,tokenAddress:r,callback:a=>o([ke(s,r,a)])})];return {unsubscribe:()=>d.forEach(a=>a.unsubscribe())}}subscribeTokenCandles(s,r,o,t){return this._client.stream.subscribeTokenCandles({chain:l(s),tokenAddress:r,resolution:x(o),callback:d=>t([me(d)])})}subscribeWalletPnl(s,r,o){return this._client.stream.subscribeWalletPnlList({chain:l(s),walletAddress:r,callback:t=>o(t.map(d=>({chain:s,address:d.walletAddress,buys:d.buys,buyAmountInUsd:d.buyAmountInUsd,sells:d.sells,sellAmountInUsd:d.sellAmountInUsd,wins:d.wins,winRate:d.winRatio,totalProfitInUsd:d.pnlInUsd,totalProfitRatio:d.pnlRatio,avgProfitPerTradeInUsd:d.averagePnlInUsd,tokens:d.tokens,resolution:d.resolution})))})}subscribeWalletPortfolios(s,r,o){return this._client.stream.subscribeWalletBalance({chain:l(s),walletAddress:r,callback:t=>o(t.map(d=>({chain:s,walletAddress:d.walletAddress,tokenAddress:d.tokenAddress,priceInUsd:d.tokenPriceInUsd,amount:d.balance})))})}subscribeWalletPortfolioPnls(s,r,o){return this._client.stream.subscribeWalletPnl({chain:l(s),walletAddress:r,callback:t=>o([{chain:s,walletAddress:t.walletAddress,tokenAddress:t.tokenAddress,openTime:t.opentime?new Date(t.opentime):void 0,closeTime:t.closetime?new Date(t.closetime):void 0,buys:t.buyCount,buyVolumes:t.buyAmount,buyVolumesInUsd:t.buyAmountInUsd,buyAvgPriceInUsd:t.averageBuyPriceInUsd,sells:t.sellCount,sellVolumes:t.sellAmount,sellVolumesInUsd:t.sellAmountInUsd,sellAvgPriceInUsd:t.averageSellPriceInUsd,realizedProfitInUsd:t.realizedProfitInUsd,realizedProfitRatio:t.realizedProfitRatio,unrealizedProfitInUsd:t.unrealizedProfitInUsd,unrealizedProfitRatio:t.unrealizedProfitRatio,totalProfitInUsd:t.totalRealizedProfitInUsd,totalProfitRatio:t.totalRealizedProfitRatio}])})}subscribeWalletTrades(s,r,o){return this._client.stream.subscribeWalletTrade({chain:l(s),walletAddress:r,callback:t=>o([E(s,t)])})}subscribeTokenTrades(s,r,o){return this._client.stream.subscribeTokenTrade({chain:l(s),tokenAddress:r,callback:t=>o([E(s,t)])})}subscribeWalletActivities(s,r,o){return this._client.stream.subscribeWalletTrade({chain:l(s),walletAddress:r,callback:t=>o([M(s,t)])})}subscribeTokenActivities(s,r,o){return this._client.stream.subscribeTokenTrade({chain:l(s),tokenAddress:r,callback:t=>o([M(s,t)])})}subscribeNewTokens(s,r){let o=l(s),t=this._subscribeRankingTokens(s,sdk.WsChannelType.New,r),d=[this._client.stream.subscribeNewToken({chain:o,callback:a=>r([ce(s,a)])}),this._client.stream.subscribeNewTokensMetadata({chain:o,callback:a=>r(a.map(c=>ue(s,c)))}),this._client.stream.subscribeRankingTokensBondingCurve({chain:o,callback:a=>r(a.map(c=>L(s,c)))})];return {unsubscribe:()=>{t.unsubscribe(),d.forEach(a=>a.unsubscribe());}}}subscribeTrendingTokens(s,r){return this._subscribeRankingTokens(s,sdk.WsChannelType.HOT,r)}subscribeMigratedTokens(s,r){return this._subscribeRankingTokens(s,sdk.WsChannelType.MIGRATED,r)}subscribeFinalStretchTokens(s,r){let o=l(s),t=this._subscribeRankingTokens(s,sdk.WsChannelType.FINAL_STRETCH,r),d=this._client.stream.subscribeRankingTokensBondingCurve({chain:o,callback:a=>r(a.map(c=>L(s,c)))});return {unsubscribe:()=>{t.unsubscribe(),d.unsubscribe();}}}subscribeStockTokens(s,r){return this._subscribeRankingTokens(s,sdk.WsChannelType.US_STOCKS,r)}static _CHAIN_TO_BALANCE_PARAM={[types.Chain.SOLANA]:"sol",[types.Chain.ETHEREUM]:"eth",[types.Chain.BINANCE]:"bnb"};static _NATIVE_TOKEN_ADDRESS={[types.Chain.SOLANA]:"11111111111111111111111111111111",[types.Chain.ETHEREUM]:"0x0000000000000000000000000000000000000000",[types.Chain.BINANCE]:"0x0000000000000000000000000000000000000000"};async _getPortfoliosFromBalanceApi(s,r,o,t){let d=this.options.nativeBalanceApiUrl,a=new URLSearchParams({chain:r,address:o});t?.length&&a.set("tokens",t.join(","));let c=await fetch(`${d}?${a.toString()}`);if(!c.ok)throw new Error(`Balance API returned ${c.status}`);return (await c.json()).balances.map(k=>{let A=BigInt(k.balance),S=k.decimals,U=BigInt(10)**BigInt(S),f=A/U,V=(A%U).toString().padStart(S,"0"),H=`${f}.${V}`.replace(/\.?0+$/,"")||"0";return {chain:s,address:k.address,name:"",symbol:"",priceInUsd:"0",priceInNative:"0",amount:H,amountInUsd:"0",amountInNative:"0",decimals:k.decimals}})}async _getWalletPortfoliosFromBalanceApi(s,r,o){let t=await this._getPortfoliosFromBalanceApi(s,r,o),d=e._NATIVE_TOKEN_ADDRESS[s],a=d?t.find(c=>c.address===d):void 0;return {chain:s,address:o,balanceInUsd:"0",balanceInNative:a?.amount??"0",portfolios:t,hasPrev:false,hasNext:false}}_buildRankingParams(s){return {sortBy:s?.sortBy?p(s.sortBy):void 0,sortDirection:s?.sortDirection?s.sortDirection:void 0,rangeFilters:s?.filters?j(s.filters):void 0,launchpadPlatform:s?.filters?Be(s.filters):void 0,searchKeywords:s?.keywords,excludeKeywords:s?.excludeKeywords}}async _getTrades(s,r,o){let t=await this._client.trade.getTrades(l(s),{...r,cursor:o?.cursor,limit:o?.limit,direction:o?.direction,beforeTimestamp:o?.before?.getTime(),afterTimestamp:o?.after?.getTime(),beforeBlockHeight:o?.beforeBlockHeight,afterBlockHeight:o?.afterBlockHeight,poolAddress:o?.poolAddress,type:o?.type?o.type.toUpperCase():void 0});return de(t)}async _getActivities(s,r,o){let t=await this._client.trade.getActivities(l(s),{...r,cursor:o?.cursor,limit:o?.limit,direction:o?.direction,beforeTimestamp:o?.before?.getTime(),afterTimestamp:o?.after?.getTime(),beforeBlockHeight:o?.beforeBlockHeight,afterBlockHeight:o?.afterBlockHeight,poolAddress:o?.poolAddress,type:o?.type?o.type.toUpperCase():void 0});return le(t)}_subscribeRankingTokens(s,r,o){let t=l(s),d=[this._client.stream.subscribeRankingTokensStats({chain:t,channelType:r,callback:a=>o(a.map(c=>N(s,c)))}),this._client.stream.subscribeRankingTokensHolders({chain:t,channelType:r,callback:a=>o(a.map(c=>F(s,c.tokenAddress,c)))}),this._client.stream.subscribeRankingTokensSupply({chain:t,channelType:r,callback:a=>o(a.map(c=>B(s,c.tokenAddress,c)))}),this._client.stream.subscribeRankingTokensLiquidity({chain:t,channelType:r,callback:a=>o(a.map(c=>O(s,c.tokenAddress,c)))})];return {unsubscribe:()=>d.forEach(a=>a.unsubscribe())}}};function Be(e){let s=e.find(r=>r.field==="launchedFromProtocolFamily");if(s){if(s.operator==="eq")return [s.value];if(s.operator==="in")return s.value;console.warn("invalid launchedFromProtocolFamily filter",s);}}exports.Client=be;exports.KYBERSWAP_NATIVE_SENTINEL=ve;exports.fromActivityPage=le;exports.fromChainDTO=v;exports.fromLatestBlock=se;exports.fromPnlDetailItems=ie;exports.fromPnlDetailsPage=ne;exports.fromSendTxResult=re;exports.fromSwapRoute=ee;exports.fromTokenCandle=K;exports.fromTokenCreatorDTO=Pe;exports.fromTokenDTO=T;exports.fromTokenHolderPage=X;exports.fromTokenLiquidityDTO=Ns;exports.fromTokenMarketDataDTO=_;exports.fromTokenMetadataSubscribed=ue;exports.fromTokenPage=Z;exports.fromTokenSecurity=J;exports.fromTokenStatsDTO=D;exports.fromTokenSubscribed=ce;exports.fromTradePage=de;exports.fromWalletNetWorthByTokens=ae;exports.fromWalletPnlSummary=te;exports.fromWalletPortfolios=oe;exports.fromWsActivity=M;exports.fromWsCandle=me;exports.fromWsTokenBondingCurveToSubscribed=L;exports.fromWsTokenDataSubscribed=N;exports.fromWsTokenHolderToSubscribed=F;exports.fromWsTokenLiquidityToSubscribed=O;exports.fromWsTokenMarketDataFromHolder=_e;exports.fromWsTokenMarketDataFromStats=De;exports.fromWsTokenMaxLiquidityToSubscribed=Te;exports.fromWsTokenStats=pe;exports.fromWsTokenSupplyToSubscribed=B;exports.fromWsTokenTotalLiquidityToSubscribed=ke;exports.fromWsTradeActivity=E;exports.toChainDTO=l;exports.toFieldDTO=p;exports.toMintForRoute=Bs;exports.toRangeFiltersDTO=j;exports.toResolutionDTO=x;exports.toSearchFieldDTO=G;exports.toSendTxInput=Q;exports.toSortDirectionDTO=ye;exports.toSwapRouteInput=Y;exports.version=Ae;//# sourceMappingURL=index.js.map
1
+ 'use strict';var sdk=require('@chainstream-io/sdk'),types=require('@liberfi.io/types'),utils=require('@liberfi.io/utils');typeof window<"u"&&(window.__LIBERFI_VERSION__=window.__LIBERFI_VERSION__||{},window.__LIBERFI_VERSION__["@liberfi.io/client"]="0.2.0");var we="0.2.0";var Re="https://api.chainstream.io";async function He(e){return typeof e=="string"?e:Promise.resolve(e.getToken())}function pe(e,s,t){if(t!=null){if(t instanceof Date){e.set(s,String(t.getTime()));return}e.set(s,String(t));}}async function p(e,s,t){let r=new URL(s,e.baseUrl),n=new URLSearchParams;for(let[k,u]of Object.entries(t))pe(n,k,u);let i=n.toString();i&&(r.search=i);let a=await He(e.accessToken),c=await fetch(r.toString(),{method:"GET",headers:{Accept:"application/json",Authorization:`Bearer ${a}`}});if(!c.ok){let k=await c.text().catch(()=>"");throw new Error(`[phase3Http] ${c.status} ${c.statusText} ${r.pathname}: ${k}`)}return await c.json()}function G(e,s){return {baseUrl:s??Re,accessToken:e}}function j(e,s,t,r){return p(e,`/v2/token/${encodeURIComponent(s)}/${encodeURIComponent(t)}/holders`,r)}function Q(e,s,t){return p(e,`/v2/trade/${encodeURIComponent(s)}/activities`,t)}function K(e,s,t,r){return p(e,`/v2/wallet/${encodeURIComponent(s)}/${encodeURIComponent(t)}/net-worth/tokens`,r)}function J(e,s,t,r){return p(e,`/v2/wallet/${encodeURIComponent(s)}/${encodeURIComponent(t)}/pnl-details`,r)}function o(e){return e??void 0}function d(e){switch(e){case types.Chain.ETHEREUM:return sdk.ChainSymbol.eth;case types.Chain.BINANCE:return sdk.ChainSymbol.bsc;case types.Chain.SOLANA:return sdk.ChainSymbol.sol}throw new Error(`Unsupported chain: ${e}`)}function D(e){switch(e){case "1s":return sdk.Resolution["1s"];case "15s":return sdk.Resolution["15s"];case "30s":return sdk.Resolution["30s"];case "1m":return sdk.Resolution["1m"];case "5m":return sdk.Resolution["5m"];case "15m":return sdk.Resolution["15m"];case "30m":case "1h":return sdk.Resolution["1h"];case "4h":return sdk.Resolution["4h"];case "12h":return sdk.Resolution["12h"];case "24h":return sdk.Resolution["1d"]}}function We(e){return e}function ee(e){switch(e){case "marketCap":return sdk.SearchSortBy.marketCapInUsd;case "tvl":return sdk.SearchSortBy.liquidityInUsd;case "price":return sdk.SearchSortBy.priceInUsd;case "holders":return sdk.SearchSortBy.holderCount;case "volumes24h":return sdk.SearchSortBy.h24VolumeInUsd;case "trades24h":return sdk.SearchSortBy.h24Transactions;case "createdAt":return sdk.SearchSortBy.tokenCreatedAt}throw new Error(`Unsupported search field: ${e}`)}function N(e){switch(e){case "price":return sdk.TokenField.marketDatapriceInUsd;case "priceChange1m":return sdk.TokenField.statspriceChangeRatioInUsd1m;case "priceChange5m":return sdk.TokenField.statspriceChangeRatioInUsd5m;case "priceChange1h":return sdk.TokenField.statspriceChangeRatioInUsd1h;case "priceChange4h":return sdk.TokenField.statspriceChangeRatioInUsd4h;case "priceChange24h":return sdk.TokenField.statspriceChangeRatioInUsd24h;case "marketCap":return sdk.TokenField.marketDatamarketCapInUsd;case "tvl":return sdk.TokenField.marketDatamaxPoolTvlInUsd;case "top10Holdings":return sdk.TokenField.marketDatatop10TotalHoldings;case "top10Ratio":return sdk.TokenField.marketDatatop10HoldingsRatio;case "top100Holdings":return sdk.TokenField.marketDatatop100TotalHoldings;case "top100Ratio":return sdk.TokenField.marketDatatop100HoldingsRatio;case "holders":return sdk.TokenField.marketDataholders;case "creatorsHoldings":return sdk.TokenField.marketDatacreatorHoldings;case "creatorsRatio":return sdk.TokenField.marketDatacreatorHoldingsRatio;case "buys1m":return sdk.TokenField.statsbuys1m;case "buys5m":return sdk.TokenField.statsbuys5m;case "buys15m":return sdk.TokenField.statsbuys15m;case "buys30m":return sdk.TokenField.statsbuys30m;case "buys1h":return sdk.TokenField.statsbuys1h;case "buys4h":return sdk.TokenField.statsbuys4h;case "buys24h":return sdk.TokenField.statsbuys24h;case "sells1m":return sdk.TokenField.statssells1m;case "sells5m":return sdk.TokenField.statssells5m;case "sells15m":return sdk.TokenField.statssells15m;case "sells30m":return sdk.TokenField.statssells30m;case "sells1h":return sdk.TokenField.statssells1h;case "sells4h":return sdk.TokenField.statssells4h;case "sells24h":return sdk.TokenField.statssells24h;case "trades1m":return sdk.TokenField.statstrades1m;case "trades5m":return sdk.TokenField.statstrades5m;case "trades1h":return sdk.TokenField.statstrades1h;case "trades4h":return sdk.TokenField.statstrades4h;case "trades24h":return sdk.TokenField.statstrades24h;case "traders1m":return sdk.TokenField.statstraders1m;case "traders5m":return sdk.TokenField.statstraders5m;case "traders1h":return sdk.TokenField.statstraders1h;case "traders4h":return sdk.TokenField.statstraders4h;case "traders24h":return sdk.TokenField.statstraders24h;case "volumes1m":return sdk.TokenField.statsvolumesInUsd1m;case "volumes5m":return sdk.TokenField.statsvolumesInUsd5m;case "volumes1h":return sdk.TokenField.statsvolumesInUsd1h;case "volumes4h":return sdk.TokenField.statsvolumesInUsd4h;case "volumes24h":return sdk.TokenField.statsvolumesInUsd24h;case "createdAt":return sdk.TokenField.tokenCreatedAt}throw new Error(`Unsupported sortBy: ${e}`)}function se(e){return e.filter(s=>["gt","gte","lt","lte","between"].indexOf(s.operator)>=0).map(s=>{let t={field:N(s.field)};return ["gt","gte","between"].indexOf(s.operator)>=0&&(t.min=typeof s.value=="number"?new utils.SafeBigNumber(s.value).toString():s.value),["lt","lte","between"].indexOf(s.operator)>=0&&(t.max=typeof s.value=="number"?new utils.SafeBigNumber(s.value).toString():s.value),t})}function R(e){switch(e){case sdk.ChainSymbol.eth:return types.Chain.ETHEREUM;case sdk.ChainSymbol.bsc:return types.Chain.BINANCE;case sdk.ChainSymbol.sol:case "solana":return types.Chain.SOLANA}throw new Error(`Unsupported chain: ${e}`)}function De(e){return {address:e.address??void 0,share:e.share??void 0,isVerified:e.isVerified??void 0}}function g(e){return {chain:R(e.chain),name:e.name,symbol:e.symbol,address:e.address,decimals:e.decimals,image:e.imageUrl??void 0,description:e.description??void 0,creators:e.tokenCreators?.map(De),launchedFrom:{programAddress:e.extra?.launchFromProgramAddress??void 0,protocolFamily:e.extra?.launchFromProtocolFamily??void 0},migrateProgress:e.marketData?.completionRatio?new utils.SafeBigNumber(e.marketData.completionRatio).shiftedBy(2).toString():void 0,migratedTo:{programAddress:e.extra?.migratedToProgramAddress??void 0,protocolFamily:e.extra?.migratedToProtocolFamily??void 0,poolAddress:e.extra?.migratedToPoolAddress??void 0,migratedAt:e.extra?.migratedAt?new Date(e.extra.migratedAt):void 0},socialMedias:e.socialMedias?Object.fromEntries(Object.entries(e.socialMedias).filter(([,s])=>s!=null).map(([s,t])=>[s,t])):void 0,stats:e.stats?B(e.stats):void 0,marketData:e.marketData?_(e.marketData):void 0,createdAt:e.tokenCreatedAt?new Date(e.tokenCreatedAt):void 0}}function B(e){return {"1m":P(e,"1m"),"5m":P(e,"5m"),"15m":P(e,"15m"),"30m":P(e,"30m"),"1h":P(e,"1h"),"4h":P(e,"4h"),"24h":P(e,"24h")}}function y(e){return e===void 0?void 0:parseInt(e)}function P(e,s){let t=e.periods?.[s];return t?{buys:y(t.buys),sells:y(t.sells),trades:y(t.trades),buyers:y(t.buyers),sellers:y(t.sellers),traders:y(t.traders),buyVolumes:t.buyVolume,sellVolumes:t.sellVolume,volumes:t.totalVolumeInNative,buyVolumesInUsd:t.buyVolumeInUsd,sellVolumesInUsd:t.sellVolumeInUsd,volumesInUsd:t.totalVolumeInUsd,openPriceInUsd:t.openInUsd,closePriceInUsd:t.closeInUsd,highPriceInUsd:t.highInUsd,lowPriceInUsd:t.lowInUsd,priceInUsd:t.closeInUsd,priceChange:t.priceChangeRatioInUsd}:{}}function Js(e){return {poolAddress:e.poolAddress,programAddress:e.programAddress??void 0,protocolFamily:e.protocolFamily??void 0,tvl:e.tvlInSol??void 0,tvlInUsd:e.tvlInUsd??void 0}}function _(e){return {totalSupply:e.totalSupply??void 0,marketCap:e.marketCapInSol??void 0,marketCapInUsd:e.marketCapInUsd??void 0,price:e.priceInSol??void 0,priceInUsd:e.priceInUsd??void 0,tvl:e.totalTvlInSol??void 0,tvlInUsd:e.totalTvlInUsd??void 0,holders:e.holders?parseInt(e.holders):void 0,top10Holdings:e.top10TotalHoldings??void 0,top10HoldingsRatio:e.top10HoldingsRatio??void 0,top50Holdings:e.top50TotalHoldings??void 0,top50HoldingsRatio:e.top50HoldingsRatio??void 0,top100Holdings:e.top100TotalHoldings??void 0,top100HoldingsRatio:e.top100HoldingsRatio??void 0,bluechipHolders:e.bluechipTotalHolders?parseInt(e.bluechipTotalHolders):void 0,bluechipHoldings:e.bluechipTotalHoldings??void 0,bluechipHoldingsRatio:e.bluechipHoldingsRatio??void 0,kolHolders:e.kolTotalHolders?parseInt(e.kolTotalHolders):void 0,kolHoldings:e.kolTotalHoldings??void 0,kolHoldingsRatio:e.kolHoldingsRatio??void 0,sniperHolders:e.sniperTotalHolders?parseInt(e.sniperTotalHolders):void 0,sniperHoldings:e.sniperTotalHoldings??void 0,sniperHoldingsRatio:e.sniperHoldingsRatio??void 0,proHolders:e.proTotalHolders?parseInt(e.proTotalHolders):void 0,proHoldings:e.proTotalHoldings??void 0,proHoldingsRatio:e.proHoldingsRatio??void 0,insiderHolders:e.insiderTotalHolders?parseInt(e.insiderTotalHolders):void 0,insiderHoldings:e.insiderTotalHoldings??void 0,insiderHoldingsRatio:e.insiderHoldingsRatio??void 0,sandwichHolders:e.sandwishTotalHolders?parseInt(e.sandwishTotalHolders):void 0,sandwichHoldings:e.sandwishTotalHoldings??void 0,sandwichHoldingsRatio:e.sandwishHoldingsRatio??void 0,freshHolders:e.freshTotalHolders?parseInt(e.freshTotalHolders):void 0,freshHoldings:e.freshTotalHoldings??void 0,freshHoldingsRatio:e.freshHoldingsRatio??void 0,bundleHolders:e.bundleTotalHolders?parseInt(e.bundleTotalHolders):void 0,bundleHoldings:e.bundleTotalHoldings??void 0,bundleHoldingsRatio:e.bundleHoldingsRatio??void 0,devHolders:e.devTotalHolders?parseInt(e.devTotalHolders):void 0,devHoldings:e.devTotalHoldings??void 0,devHoldingsRatio:e.devHoldingsRatio??void 0}}function te(e,s){return {open:e.open,close:e.close,high:e.high,low:e.low,volume:e.volume,resolution:s,timestamp:new Date(e.timestamp)}}function Ne(e){return e==="1d"?"24h":e}function re(e){return {hasTransferFee:e.hasTransferFee,isTransferFeeUpgradable:e.isTransferFeeUpgradable,isTransferable:e.isTransferable,isFreezable:e.isFreezable,isClosable:e.isClosable}}var Be=new Set([types.Chain.SOLANA,types.Chain.SOLANA_TESTNET,types.Chain.SOLANA_DEVNET]),_e="0x0000000000000000000000000000000000000000",Oe="0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE";function Fe(e){return e===utils.SOLANA_TOKENS.native.address?utils.SOLANA_TOKENS.wrapped.address:e}function Le(e){return e.toLowerCase()===_e.toLowerCase()?Oe:e}function Ee(e){return e.dex?e.dex:Be.has(e.chain)?"jupiter":"kyberswap"}function W(e,s){return e==="jupiter"?Fe(s):e==="kyberswap"?Le(s):s}function Ys(e,s){return W(e,s)}function ne(e){let s=Ee(e),t=W(s,e.input),r=W(s,e.output);return {dex:s,userAddress:e.userAddress,amount:e.amount,swapMode:e.mode===types.API.SwapMode.EXACT_IN?sdk.SwapRouteInputSwapMode.ExactIn:sdk.SwapRouteInputSwapMode.ExactOut,slippage:e.slippage??1,inputMint:t,outputMint:r,priorityFee:e.priorityFee,...e.tipFee&&{tipFee:e.tipFee},...e.isAntiMev!=null&&{isAntiMev:e.isAntiMev},...e.permit&&{permit:e.permit},...e.deadline!=null&&{deadline:e.deadline}}}function oe(e){return {signedTx:e.serializedTx}}function w(e){return e==null?void 0:new Date(e)}function O(e){if(!(!e||e.length===0))return e}function ae(e){return {startCursor:o(e.startCursor),endCursor:o(e.endCursor),hasPrev:e.hasPrev,hasNext:e.hasNext,data:e.data.map(s=>({address:s.walletAddress,amount:s.amount,amountInUsd:s.amountInUsd,ratio:s.percentage,tags:O(s.tags),lastActiveAt:w(s.lastActiveAt),startHoldingAt:w(s.startHoldingAt)}))}}function ie(e){let s=e;return {startCursor:o(e.startCursor),endCursor:o(e.endCursor),hasPrev:e.hasPrev,hasNext:e.hasNext,data:e.data.map(g),extra:o(s.countsByProtocols)}}function le(e){return {serializedTx:e.serializedTx,recentBlockhash:o(e.recentBlockhash),lastValidBlockHeight:o(e.lastValidBlockHeight),plans:[],extra:e.routeInfo}}function de(e){return {blockhash:e.blockhash,lastValidBlockHeight:e.lastValidBlockHeight}}function ce(e){return {txHash:e.signature,extra:{jobId:e.jobId,elapsedTime:e.elapsedTime}}}function ue(e,s){let t=(s.data??[]).map(r=>({chain:R(r.chain),address:r.tokenAddress,name:r.name,symbol:r.symbol,image:o(r.logoUri),priceInUsd:r.priceInUsd,priceInNative:r.priceInNative,amount:r.amount,amountInUsd:r.valueInUsd,amountInNative:r.valueInNative,decimals:r.decimals}));return {chain:t[0]?.chain??e,address:s.walletAddress,balanceInUsd:s.totalValueInUsd,balanceInNative:s.totalValueInNative,startCursor:o(s.startCursor),endCursor:o(s.endCursor),hasPrev:s.hasPrev,hasNext:s.hasNext,portfolios:t}}function me(e,s,t){return {chain:e,address:s,tokens:t.tokens?Number(t.tokens):void 0,buys:t.buys?Number(t.buys):void 0,sells:t.sells?Number(t.sells):void 0,totalTrades:t.totalTrades?Number(t.totalTrades):void 0,wins:t.wins?Number(t.wins):void 0,losses:t.losses?Number(t.losses):void 0,winRate:o(t.winRate),buyAmountInUsd:o(t.buyAmountInUsd),sellAmountInUsd:o(t.sellAmountInUsd),totalCostInUsd:o(t.totalCostInUsd),realizedProfitInUsd:o(t.realizedProfitInUsd),realizedProfitRatio:o(t.realizedProfitRatio),unrealizedProfitInUsd:o(t.unrealizedProfitInUsd),unrealizedProfitRatio:o(t.unrealizedProfitRatio),totalProfitInUsd:o(t.totalProfitInUsd),totalProfitRatio:o(t.totalProfitRatio),avgProfitPerTradeInUsd:o(t.avgProfitPerTradeInUsd)}}function Me(e,s){return {chain:e,address:s.tokenAddress,name:s.name??"",symbol:s.symbol??"",image:o(s.logoUri),amount:s.balance,amountInUsd:s.currentValue,priceInUsd:s.priceInUsd,decimals:s.decimals??0,totalTrades:s.totalTrades!=null?Number(s.totalTrades):void 0,buys:s.buys!=null?Number(s.buys):void 0,buyVolumes:s.buyAmount,buyVolumesInUsd:s.buyAmountInUsd,buyAvgPriceInUsd:s.avgBuyPriceInUsd,sells:s.sells!=null?Number(s.sells):void 0,sellVolumes:s.sellAmount,sellVolumesInUsd:s.sellAmountInUsd,sellAvgPriceInUsd:s.avgSellPriceInUsd,realizedProfitInUsd:s.realizedProfitInUsd,realizedProfitRatio:s.realizedProfitRatio,unrealizedProfitInUsd:s.unrealizedProfitInUsd,unrealizedProfitRatio:s.unrealizedProfitRatio,totalProfitInUsd:s.totalProfitInUsd,totalProfitRatio:s.totalProfitRatio,isClosed:s.isClosed,firstBuyAt:w(s.firstBuyAt),lastSellAt:w(s.lastSellAt)}}function Te(e,s,t){return {chain:e,address:s,tokens:t.summary.tokens!=null?Number(t.summary.tokens):void 0,buys:t.summary.buys!=null?Number(t.summary.buys):void 0,sells:t.summary.sells!=null?Number(t.summary.sells):void 0,totalTrades:t.summary.totalTrades!=null?Number(t.summary.totalTrades):void 0,wins:t.summary.wins!=null?Number(t.summary.wins):void 0,losses:t.summary.losses!=null?Number(t.summary.losses):void 0,winRate:o(t.summary.winRate),buyAmountInUsd:o(t.summary.buyAmountInUsd),sellAmountInUsd:o(t.summary.sellAmountInUsd),totalCostInUsd:t.summary.totalCostInUsd,realizedProfitInUsd:o(t.summary.realizedProfitInUsd),unrealizedProfitInUsd:o(t.summary.unrealizedProfitInUsd),totalProfitInUsd:o(t.summary.totalProfitInUsd),totalProfitRatio:o(t.summary.totalProfitRatio),avgProfitPerTradeInUsd:o(t.summary.avgProfitPerTradeInUsd),startCursor:o(t.startCursor),endCursor:o(t.endCursor),hasPrev:t.hasPrev,hasNext:t.hasNext,portfolios:t.data.map(r=>Me(e,r))}}function ge(e,s){return (s.data??[]).map(t=>({chain:R(t.chain),address:t.tokenAddress,name:t.name,symbol:t.symbol,image:o(t.logoUri),priceInUsd:t.priceInUsd,priceInNative:t.priceInNative,amount:t.amount,amountInUsd:t.valueInUsd,amountInNative:t.valueInNative,decimals:t.decimals,isActive:t.isActive,avgCostUsd:o(t.avgCostUsd),lastActiveAt:w(t.lastActiveAt),walletTokenTags:O(t.walletTokenTags)}))}function ke(e,s){return s.data.map(t=>({chain:e,address:t.tokenAddress,name:t.name??"",symbol:t.symbol??"",image:o(t.logoUri),amount:t.balance,amountInUsd:t.currentValue,priceInUsd:t.priceInUsd,decimals:t.decimals??0,totalTrades:Number(t.totalTrades),buys:Number(t.buys),buyVolumes:t.buyAmount,buyVolumesInUsd:t.buyAmountInUsd,buyAvgPriceInUsd:t.avgBuyPriceInUsd,sells:Number(t.sells),sellVolumes:t.sellAmount,sellVolumesInUsd:t.sellAmountInUsd,sellAvgPriceInUsd:t.avgSellPriceInUsd,realizedProfitInUsd:t.realizedProfitInUsd,realizedProfitRatio:t.realizedProfitRatio,unrealizedProfitInUsd:t.unrealizedProfitInUsd,unrealizedProfitRatio:t.unrealizedProfitRatio,totalProfitInUsd:t.totalProfitInUsd,totalProfitRatio:t.totalProfitRatio}))}function fe(e){return {startCursor:o(e.startCursor),endCursor:o(e.endCursor),hasPrev:e.hasPrev,hasNext:e.hasNext,data:e.data.map(Ve)}}function Ve(e){let s=e.type.toLowerCase()==="buy";return {chain:R(e.chain),walletAddress:e.accountOwnerAddress,txHash:e.transactionSignature,type:s?"buy":"sell",from:{address:s?e.sideTokenAddress:e.tokenAddress,symbol:s?e.sideTokenSymbol:e.tokenSymbol,name:s?e.sideTokenName:e.tokenName,image:o(s?e.sideTokenImageUrl:e.tokenImageUrl),amount:s?e.sideTokenAmount:e.tokenAmount,amountInUsd:s?e.sideTokenAmountInUsd:e.tokenAmountInUsd,priceInUsd:s?e.sideTokenPriceInUsd:e.tokenPriceInUsd},to:{address:s?e.tokenAddress:e.sideTokenAddress,symbol:s?e.tokenSymbol:e.sideTokenSymbol,name:s?e.tokenName:e.sideTokenName,image:o(s?e.tokenImageUrl:e.sideTokenImageUrl),amount:s?e.tokenAmount:e.sideTokenAmount,amountInUsd:s?e.tokenAmountInUsd:e.sideTokenAmountInUsd,priceInUsd:s?e.tokenPriceInUsd:e.sideTokenPriceInUsd},dex:{programAddress:o(e.dexProgramAddress),protocolFamily:o(e.dexProtocolFamily),image:o(e.dexImage)},poolAddress:o(e.poolAddress),status:e.status??"success",time:new Date(e.blockTimestamp*1e3)}}function be(e){return {startCursor:o(e.startCursor),endCursor:o(e.endCursor),hasPrev:e.hasPrev,hasNext:e.hasNext,data:e.data.map(ze)}}function ze(e){let s=e.type.toLowerCase().replace(/ /g,"_"),t=s==="buy",r=e.blockTimestamp<1e12?e.blockTimestamp*1e3:e.blockTimestamp;return {chain:R(e.chain),walletAddress:e.accountOwnerAddress,txHash:e.transactionSignature,type:s,from:{address:t?e.sideTokenAddress:e.tokenAddress,symbol:t?e.sideTokenSymbol:e.tokenSymbol,name:t?e.sideTokenName:e.tokenName,image:o(t?e.sideTokenImageUrl:e.tokenImageUrl),amount:t?e.sideTokenAmount:e.tokenAmount,amountInUsd:t?e.sideTokenAmountInUsd:e.tokenAmountInUsd,priceInUsd:t?e.sideTokenPriceInUsd:e.tokenPriceInUsd},to:{address:t?e.tokenAddress:e.sideTokenAddress,symbol:t?e.tokenSymbol:e.sideTokenSymbol,name:t?e.tokenName:e.sideTokenName,image:o(t?e.tokenImageUrl:e.sideTokenImageUrl),amount:t?e.tokenAmount:e.sideTokenAmount,amountInUsd:t?e.tokenAmountInUsd:e.sideTokenAmountInUsd,priceInUsd:t?e.tokenPriceInUsd:e.sideTokenPriceInUsd},dex:{programAddress:o(e.dexProgramAddress),protocolFamily:o(e.dexProtocolFamily),image:o(e.dexImage)},poolAddress:o(e.poolAddress),status:e.status??"success",time:new Date(r),gasFee:e.gasFee!=null?String(e.gasFee):void 0,traderTags:O(e.traderTags)}}function he(e,s){return {chain:e,address:s.tokenAddress,name:s.name,symbol:s.symbol,decimals:s.decimals,createdAt:s.createdAtMs?new Date(s.createdAtMs):void 0,launchedFrom:s.launchFrom?{programAddress:s.launchFrom.programAddress,protocolFamily:s.launchFrom.protocolFamily}:void 0}}function Pe(e,s){return {chain:e,address:s.tokenAddress,name:s.name,symbol:s.symbol,decimals:s.decimals,image:s.imageUrl,description:s.description,socialMedias:s.socialMedia?{...s.socialMedia}:void 0,createdAt:s.createdAtMs?new Date(s.createdAtMs):void 0,launchedFrom:s.launchFrom?{programAddress:s.launchFrom.programAddress,protocolFamily:s.launchFrom.protocolFamily}:void 0,migratedTo:s.migratedTo?{programAddress:s.migratedTo.programAddress,protocolFamily:s.migratedTo.protocolFamily}:void 0}}function Ae(e){return {open:e.open,close:e.close,high:e.high,low:e.low,volume:e.volume,resolution:Ne(e.resolution),timestamp:new Date(e.time)}}function qe(e){let s=["1m","5m","15m","30m","1h","4h","24h"],t=e,r={};for(let n of s){let i=t[`buys${n}`],a=t[`sells${n}`],c=t[`buyers${n}`],k=t[`sellers${n}`],u=t[`buyVolumeInUsd${n}`],A=t[`sellVolumeInUsd${n}`],S=t[`trades${n}`],C=t[`price${n}`],b=t[`openInUsd${n}`],v=t[`closeInUsd${n}`];if(!(i!==void 0||a!==void 0||S!==void 0||C!==void 0))continue;let x=S??(i!==void 0&&a!==void 0?i+a:void 0),Se=c!==void 0&&k!==void 0?c+k:void 0,Ce=u!==void 0&&A!==void 0?new utils.SafeBigNumber(u).plus(A).toString():void 0,ve=b&&v&&new utils.SafeBigNumber(b).gt(0)?new utils.SafeBigNumber(v).minus(b).div(b).toString():void 0;r[n]={buys:i,sells:a,trades:x,buyers:c,sellers:k,traders:Se,buyVolumesInUsd:u,sellVolumesInUsd:A,volumesInUsd:Ce,openPriceInUsd:b,closePriceInUsd:v,priceInUsd:C??v,priceChange:ve};}return r}function $e(e){return {priceInUsd:e.price}}function F(e,s){return {chain:e,address:s.address,stats:qe(s),marketData:$e(s)}}function L(e,s,t){return {chain:e,address:s,marketData:{totalSupply:t.supply,marketCapInUsd:t.marketCapInUsd}}}function E(e,s,t){return {chain:e,address:s,marketData:Ge(t)}}function M(e,s,t){return t.metricType===sdk.WsMetricType.LIQUIDITY_IN_USD?{chain:e,address:s,marketData:{tvlInUsd:t.value}}:t.metricType===sdk.WsMetricType.MIGRATED_RATIO?{chain:e,address:s,migrateProgress:new utils.SafeBigNumber(t.value).shiftedBy(2).toString()}:{chain:e,address:s}}function V(e,s){return {chain:e,address:s.tokenAddress??"",migrateProgress:s.progressRatio?new utils.SafeBigNumber(s.progressRatio).shiftedBy(2).toString():void 0}}function ye(e,s,t){return {chain:e,address:s,liquidities:[{poolAddress:t.poolAddress,tvlInUsd:t.liquidityInUsd,tvl:t.liquidityInNative}]}}function Ie(e,s,t){return {chain:e,address:s,marketData:{tvlInUsd:t.liquidityInUsd,tvl:t.liquidityInNative}}}function Ge(e){return {holders:e.holders,top10Holdings:e.top10HoldersAmount,top10HoldingsRatio:e.top10HoldersRatio,top50Holdings:e.top50HoldersAmount,top50HoldingsRatio:e.top50HoldersRatio,top100Holdings:e.top100HoldersAmount,top100HoldingsRatio:e.top100HoldersRatio,devHolders:e.balanceTagDevHolders===void 0?void 0:e.balanceTagDevHolders,devHoldings:e.balanceTagDevAmount,devHoldingsRatio:e.balanceTagDevRatio,sniperHolders:e.balanceTagSniperHolders===void 0?void 0:e.balanceTagSniperHolders,sniperHoldings:e.balanceTagSniperAmount,sniperHoldingsRatio:e.balanceTagSniperRatio,freshHolders:e.balanceTagFreshHolders===void 0?void 0:e.balanceTagFreshHolders,freshHoldings:e.balanceTagFreshAmount,freshHoldingsRatio:e.balanceTagFreshRatio,bundleHolders:e.balanceTagBundleHolders===void 0?void 0:e.balanceTagBundleHolders,bundleHoldings:e.balanceTagBundleAmount,bundleHoldingsRatio:e.balanceTagBundleRatio,sandwichHolders:e.balanceTagSandwichHolders===void 0?void 0:e.balanceTagSandwichHolders,sandwichHoldings:e.balanceTagSandwichAmount,sandwichHoldingsRatio:e.balanceTagSandwichRatio}}function z(e,s){let t=s.kind.toLowerCase()==="buy";return {chain:e,walletAddress:t?s.buyWalletAddress:s.sellWalletAddress,txHash:s.txHash,type:t?"buy":"sell",from:{address:s.sellTokenAddress,symbol:s.sellTokenSymbol,name:s.sellTokenName,amount:s.sellAmount,amountInUsd:s.sellAmountInUsd},to:{address:s.buyTokenAddress,symbol:s.buyTokenSymbol,name:s.buyTokenName,amount:s.buyAmount,amountInUsd:s.buyAmountInUsd},status:"success",time:new Date(s.timestamp)}}function q(e,s){let t=s.kind.toLowerCase().replace(/ /g,"_");return {chain:e,walletAddress:t==="buy"?s.buyWalletAddress:s.sellWalletAddress,txHash:s.txHash,type:t,from:{address:s.sellTokenAddress,symbol:s.sellTokenSymbol,name:s.sellTokenName,amount:s.sellAmount,amountInUsd:s.sellAmountInUsd},to:{address:s.buyTokenAddress,symbol:s.buyTokenSymbol,name:s.buyTokenName,amount:s.buyAmount,amountInUsd:s.buyAmountInUsd},status:"success",time:new Date(s.timestamp)}}var Ue=class e{constructor(s,t){this.accessToken=s;this.options=t;this._client=new sdk.ChainStreamClient(this.accessToken,this.options),this._phase3=G(this.accessToken,this.options?.serverUrl);}_client;_phase3;async getToken(s,t){let r=await this._client.token.getToken(d(s),t);return g(r)}async getTokens(s,t){return (await this._client.token.getTokens(d(s),{tokenAddresses:t.join(",")})).map(g)}async getTokenCandles(s,t,r,n){return (await this._client.token.getCandles(d(s),t,{resolution:D(r),from:n?.after?.getTime(),to:n?.before?.getTime(),limit:n?.limit})).map(a=>te(a,r))}async getTokenSecurity(s,t){let r=await this._client.token.getSecurity(d(s),t);return re(r)}async getTokenStats(s,t){let r=await this._client.token.getStats(d(s),t);return B(r)}async getTokenHolders(s,t,r){let n=await j(this._phase3,d(s),t,{cursor:r?.cursor,limit:r?.limit,direction:r?.direction,sortBy:r?.sortBy});return ae(n)}async getTokenMarketData(s,t){let r=await this._client.token.getMarketData(d(s),t);return _(r)}async getNewTokens(s,t){return (await this._client.ranking.getNewTokens(d(s),this._buildRankingParams(t))).map(g)}async getFinalStretchTokens(s,t){return (await this._client.ranking.getFinalStretchTokens(d(s),this._buildRankingParams(t))).map(g)}async getMigratedTokens(s,t){return (await this._client.ranking.getMigratedTokens(d(s),this._buildRankingParams(t))).map(g)}async getTrendingTokens(s,t,r){return (await this._client.ranking.getHotTokens(d(s),t,this._buildRankingParams(r))).map(g)}async getStockTokens(s,t){return (await this._client.ranking.getStocksTokens(d(s),this._buildRankingParams(t))).map(g)}async searchTokens(s){let t=await this._client.token.search({chains:s?.chains?.map(d),q:s?.keyword,limit:s?.limit,cursor:s?.cursor,sortBy:s?.sortBy?ee(s.sortBy):void 0,sort:s?.sortDirection});return ie(t)}async swapRoute(s){let t=await this._client.dex.route(d(s.chain),ne(s));return le(t)}async getLatestBlock(s){let t=await this._client.blockchain.getLatestBlock(d(s.chain));return de(t)}async sendTx(s){let t=await this._client.transaction.send(d(s.chain),oe(s));return ce(t)}async checkTxSuccess(s,t,r){let{success:n}=await this._client.waitForJob(t,r);return n}async getWalletPortfolios(s,t,r){let n=e._CHAIN_TO_BALANCE_PARAM[s];if(n&&this.options?.nativeBalanceApiUrl)return this._getWalletPortfoliosFromBalanceApi(s,n,t);let i=await this._client.wallet.getNetWorth(d(s),t,{cursor:r?.cursor,limit:r?.limit??100});return ue(s,i)}async getWalletPnl(s,t,r){let n=await this._client.wallet.getPnl(d(s),t,r?{resolution:r}:void 0);return me(s,t,n)}async getWalletPortfolioPnls(s,t,r){let n=await J(this._phase3,d(s),t,{resolution:r?.resolution??"30d",positionState:r?.positionState,sortBy:r?.sortBy,cursor:r?.cursor,limit:r?.limit??100,direction:r?.direction});return Te(s,t,n)}async getWalletPortfoliosByTokens(s,t,r){let n=e._CHAIN_TO_BALANCE_PARAM[s];if(n&&this.options?.nativeBalanceApiUrl)return this._getPortfoliosFromBalanceApi(s,n,t,r);let i=await K(this._phase3,d(s),t,{tokenAddresses:r.join(",")});return ge(s,i)}async getWalletPortfolioPnlsByTokens(s,t,r){let n=await this._client.wallet.getPnlByToken(d(s),t,{tokenAddresses:r.join(",")});return ke(s,n)}async getWalletTrades(s,t,r){return this._getTrades(s,{walletAddress:t},r)}async getTokenTrades(s,t,r){return this._getTrades(s,{tokenAddress:t},r)}async getWalletActivities(s,t,r){return this._getActivities(s,{walletAddress:t},r)}async getTokenActivities(s,t,r){return this._getActivities(s,{tokenAddress:t},r)}async getPresignedUploadUrl(){return (await this._client.ipfs.presign()).presignUrl}subscribeToken(s,t,r){let n=d(s),i=[this._client.stream.subscribeTokenStats({chain:n,tokenAddress:t,callback:a=>r([F(s,a)])}),this._client.stream.subscribeTokenSupply({chain:n,tokenAddress:t,callback:a=>r([L(s,t,a)])}),this._client.stream.subscribeTokenHolders({chain:n,tokenAddress:t,callback:a=>r([E(s,t,a)])}),this._client.stream.subscribeTokenLiquidity({chain:n,tokenAddress:t,callback:a=>r([M(s,t,a)])}),this._client.stream.subscribeTokenMaxLiquidity({chain:n,tokenAddress:t,callback:a=>r([ye(s,t,a)])}),this._client.stream.subscribeTokenTotalLiquidity({chain:n,tokenAddress:t,callback:a=>r([Ie(s,t,a)])})];return {unsubscribe:()=>i.forEach(a=>a.unsubscribe())}}subscribeTokenCandles(s,t,r,n){return this._client.stream.subscribeTokenCandles({chain:d(s),tokenAddress:t,resolution:D(r),callback:i=>n([Ae(i)])})}subscribeWalletPnl(s,t,r){return this._client.stream.subscribeWalletPnlList({chain:d(s),walletAddress:t,callback:n=>r(n.map(i=>({chain:s,address:i.walletAddress,buys:i.buys,buyAmountInUsd:i.buyAmountInUsd,sells:i.sells,sellAmountInUsd:i.sellAmountInUsd,wins:i.wins,winRate:i.winRatio,totalProfitInUsd:i.pnlInUsd,totalProfitRatio:i.pnlRatio,avgProfitPerTradeInUsd:i.averagePnlInUsd,tokens:i.tokens,resolution:i.resolution})))})}subscribeWalletPortfolios(s,t,r){return this._client.stream.subscribeWalletBalance({chain:d(s),walletAddress:t,callback:n=>r(n.map(i=>({chain:s,walletAddress:i.walletAddress,tokenAddress:i.tokenAddress,priceInUsd:i.tokenPriceInUsd,amount:i.balance})))})}subscribeWalletPortfolioPnls(s,t,r){return this._client.stream.subscribeWalletPnl({chain:d(s),walletAddress:t,callback:n=>r([{chain:s,walletAddress:n.walletAddress,tokenAddress:n.tokenAddress,openTime:n.opentime?new Date(n.opentime):void 0,closeTime:n.closetime?new Date(n.closetime):void 0,buys:n.buyCount,buyVolumes:n.buyAmount,buyVolumesInUsd:n.buyAmountInUsd,buyAvgPriceInUsd:n.averageBuyPriceInUsd,sells:n.sellCount,sellVolumes:n.sellAmount,sellVolumesInUsd:n.sellAmountInUsd,sellAvgPriceInUsd:n.averageSellPriceInUsd,realizedProfitInUsd:n.realizedProfitInUsd,realizedProfitRatio:n.realizedProfitRatio,unrealizedProfitInUsd:n.unrealizedProfitInUsd,unrealizedProfitRatio:n.unrealizedProfitRatio,totalProfitInUsd:n.totalRealizedProfitInUsd,totalProfitRatio:n.totalRealizedProfitRatio}])})}subscribeWalletTrades(s,t,r){return this._client.stream.subscribeWalletTrade({chain:d(s),walletAddress:t,callback:n=>r([z(s,n)])})}subscribeTokenTrades(s,t,r){return this._client.stream.subscribeTokenTrade({chain:d(s),tokenAddress:t,callback:n=>r([z(s,n)])})}subscribeWalletActivities(s,t,r){return this._client.stream.subscribeWalletTrade({chain:d(s),walletAddress:t,callback:n=>r([q(s,n)])})}subscribeTokenActivities(s,t,r){return this._client.stream.subscribeTokenTrade({chain:d(s),tokenAddress:t,callback:n=>r([q(s,n)])})}subscribeNewTokens(s,t){let r=d(s),n=this._subscribeRankingTokens(s,sdk.WsChannelType.New,t),i=[this._client.stream.subscribeNewToken({chain:r,callback:a=>t([he(s,a)])}),this._client.stream.subscribeNewTokensMetadata({chain:r,callback:a=>t(a.map(c=>Pe(s,c)))}),this._client.stream.subscribeRankingTokensBondingCurve({chain:r,callback:a=>t(a.map(c=>V(s,c)))})];return {unsubscribe:()=>{n.unsubscribe(),i.forEach(a=>a.unsubscribe());}}}subscribeTrendingTokens(s,t){return this._subscribeRankingTokens(s,sdk.WsChannelType.HOT,t)}subscribeMigratedTokens(s,t){return this._subscribeRankingTokens(s,sdk.WsChannelType.MIGRATED,t)}subscribeFinalStretchTokens(s,t){let r=d(s),n=this._subscribeRankingTokens(s,sdk.WsChannelType.FINAL_STRETCH,t),i=this._client.stream.subscribeRankingTokensBondingCurve({chain:r,callback:a=>t(a.map(c=>V(s,c)))});return {unsubscribe:()=>{n.unsubscribe(),i.unsubscribe();}}}subscribeStockTokens(s,t){return this._subscribeRankingTokens(s,sdk.WsChannelType.US_STOCKS,t)}static _CHAIN_TO_BALANCE_PARAM={[types.Chain.SOLANA]:"sol",[types.Chain.ETHEREUM]:"eth",[types.Chain.BINANCE]:"bnb"};static _NATIVE_TOKEN_ADDRESS={[types.Chain.SOLANA]:"11111111111111111111111111111111",[types.Chain.ETHEREUM]:"0x0000000000000000000000000000000000000000",[types.Chain.BINANCE]:"0x0000000000000000000000000000000000000000"};async _getPortfoliosFromBalanceApi(s,t,r,n){let i=this.options.nativeBalanceApiUrl,a=new URLSearchParams({chain:t,address:r});n?.length&&a.set("tokens",n.join(","));let c=await fetch(`${i}?${a.toString()}`);if(!c.ok)throw new Error(`Balance API returned ${c.status}`);return (await c.json()).balances.map(u=>{let A=BigInt(u.balance),S=u.decimals,C=BigInt(10)**BigInt(S),b=A/C,$=(A%C).toString().padStart(S,"0"),x=`${b}.${$}`.replace(/\.?0+$/,"")||"0";return {chain:s,address:u.address,name:"",symbol:"",priceInUsd:"0",priceInNative:"0",amount:x,amountInUsd:"0",amountInNative:"0",decimals:u.decimals}})}async _getWalletPortfoliosFromBalanceApi(s,t,r){let n=await this._getPortfoliosFromBalanceApi(s,t,r),i=e._NATIVE_TOKEN_ADDRESS[s],a=i?n.find(c=>c.address===i):void 0;return {chain:s,address:r,balanceInUsd:"0",balanceInNative:a?.amount??"0",portfolios:n,hasPrev:false,hasNext:false}}_buildRankingParams(s){return {sortBy:s?.sortBy?N(s.sortBy):void 0,sortDirection:s?.sortDirection?s.sortDirection:void 0,rangeFilters:s?.filters?se(s.filters):void 0,launchpadPlatform:s?.filters?Qe(s.filters):void 0,searchKeywords:s?.keywords,excludeKeywords:s?.excludeKeywords}}async _getTrades(s,t,r){let n=await this._client.trade.getTrades(d(s),{...t,cursor:r?.cursor,limit:r?.limit,direction:r?.direction,beforeTimestamp:r?.before?.getTime(),afterTimestamp:r?.after?.getTime(),beforeBlockHeight:r?.beforeBlockHeight,afterBlockHeight:r?.afterBlockHeight,poolAddress:r?.poolAddress,type:r?.type?r.type.toUpperCase():void 0});return fe(n)}async _getActivities(s,t,r){let n=await Q(this._phase3,d(s),{...t,cursor:r?.cursor,limit:r?.limit,direction:r?.direction,beforeTimestamp:r?.before?.getTime(),afterTimestamp:r?.after?.getTime(),beforeBlockHeight:r?.beforeBlockHeight,afterBlockHeight:r?.afterBlockHeight,poolAddress:r?.poolAddress,type:r?.type?r.type.toUpperCase():void 0,sortBy:r?.sortBy});return be(n)}_subscribeRankingTokens(s,t,r){let n=d(s),i=[this._client.stream.subscribeRankingTokensStats({chain:n,channelType:t,callback:a=>r(a.map(c=>F(s,c)))}),this._client.stream.subscribeRankingTokensHolders({chain:n,channelType:t,callback:a=>r(a.map(c=>E(s,c.tokenAddress,c)))}),this._client.stream.subscribeRankingTokensSupply({chain:n,channelType:t,callback:a=>r(a.map(c=>L(s,c.tokenAddress,c)))}),this._client.stream.subscribeRankingTokensLiquidity({chain:n,channelType:t,callback:a=>r(a.map(c=>M(s,c.tokenAddress,c)))})];return {unsubscribe:()=>i.forEach(a=>a.unsubscribe())}}};function Qe(e){let s=e.find(t=>t.field==="launchedFromProtocolFamily");if(s){if(s.operator==="eq")return [s.value];if(s.operator==="in")return s.value;console.warn("invalid launchedFromProtocolFamily filter",s);}}
2
+ exports.Client=Ue;exports.KYBERSWAP_NATIVE_SENTINEL=Oe;exports.fromActivityPage=be;exports.fromChainDTO=R;exports.fromLatestBlock=de;exports.fromPnlDetailItems=ke;exports.fromPnlDetailsPage=Te;exports.fromSendTxResult=ce;exports.fromSwapRoute=le;exports.fromTokenCandle=te;exports.fromTokenCreatorDTO=De;exports.fromTokenDTO=g;exports.fromTokenHolderPage=ae;exports.fromTokenLiquidityDTO=Js;exports.fromTokenMarketDataDTO=_;exports.fromTokenMetadataSubscribed=Pe;exports.fromTokenPage=ie;exports.fromTokenSecurity=re;exports.fromTokenStatsDTO=B;exports.fromTokenSubscribed=he;exports.fromTradePage=fe;exports.fromWalletNetWorthByTokens=ge;exports.fromWalletPnlSummary=me;exports.fromWalletPortfolios=ue;exports.fromWsActivity=q;exports.fromWsCandle=Ae;exports.fromWsTokenBondingCurveToSubscribed=V;exports.fromWsTokenDataSubscribed=F;exports.fromWsTokenHolderToSubscribed=E;exports.fromWsTokenLiquidityToSubscribed=M;exports.fromWsTokenMarketDataFromHolder=Ge;exports.fromWsTokenMarketDataFromStats=$e;exports.fromWsTokenMaxLiquidityToSubscribed=ye;exports.fromWsTokenStats=qe;exports.fromWsTokenSupplyToSubscribed=L;exports.fromWsTokenTotalLiquidityToSubscribed=Ie;exports.fromWsTradeActivity=z;exports.toChainDTO=d;exports.toFieldDTO=N;exports.toMintForRoute=Ys;exports.toRangeFiltersDTO=se;exports.toResolutionDTO=D;exports.toSearchFieldDTO=ee;exports.toSendTxInput=oe;exports.toSortDirectionDTO=We;exports.toSwapRouteInput=ne;exports.version=we;//# sourceMappingURL=index.js.map
2
3
  //# sourceMappingURL=index.js.map