@chainstream-io/sdk 0.1.19 → 0.1.21

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/stream/stream.ts","../../src/stream/stream.fields.ts","../../src/stream/stream.model.ts"],"sourcesContent":["import { Centrifuge, ConnectionTokenContext } from \"@chainstream-io/centrifuge\";\nimport { DexRequestContext } from \"..\";\nimport { Resolution } from \"../openapi\";\nimport {\n DexPoolBalance,\n NewToken,\n TokenMetadata,\n TokenHolder,\n TokenStat,\n TokenLiquidity,\n WalletBalance,\n TokenSupply,\n WalletPnl,\n ChannelType,\n TokenCandle,\n TradeActivity,\n WalletTokenPnl,\n RankingType,\n Dex,\n RankingTokenList,\n TokenBondingCurve,\n} from \"./stream.model\";\nimport { replaceFilterFields } from \"./stream.fields\";\n\nexport interface Unsubscrible {\n unsubscribe(): void;\n}\n\nexport class StreamApi {\n private realtimeClient: Centrifuge;\n private listenersMap: Map<string, Set<(data: any) => void>>;\n\n constructor(context: DexRequestContext) {\n const realtimeEndpoint = context.streamUrl;\n this.realtimeClient = new Centrifuge(realtimeEndpoint, {\n getToken: async (_ctx: ConnectionTokenContext) => {\n return typeof context.accessToken === \"string\"\n ? context.accessToken\n : await context.accessToken.getToken();\n },\n });\n\n this.realtimeClient\n .on(\"connected\", () => {\n console.log(\"[streaming] connected\");\n })\n .on(\"disconnected\", (err) => {\n console.warn(\"[streaming] disconnected\", err);\n })\n .on(\"error\", (err) => {\n console.error(\"[streaming] error: \", err);\n });\n\n this.listenersMap = new Map();\n }\n\n connect() {\n this.realtimeClient.connect();\n }\n\n /**\n * Start batching commands for efficient bulk operations\n * All subscription commands after this call will be batched until stopBatching is called\n */\n startBatching() {\n this.realtimeClient.startBatching();\n }\n\n /**\n * Stop batching and flush all collected commands to the server\n * This will send all batched subscription commands in a single network request\n */\n stopBatching() {\n this.realtimeClient.stopBatching();\n }\n\n /**\n * Batch subscribe method that accepts a function containing subscription calls\n * All subscription methods called within the function will be batched\n * @param batchFunction Function containing subscription method calls\n * @returns Array of unsubscribe functions\n */\n batchSubscribe(batchFunction: () => Unsubscrible[]): Unsubscrible[] {\n // Start batching commands\n this.startBatching();\n\n // Execute the batch function (all subscription calls will be batched)\n const unsubscribles = batchFunction();\n\n // Stop batching and flush all commands\n this.stopBatching();\n\n return unsubscribles;\n }\n\n /**\n * Batch unsubscribe method that accepts an array of unsubscribe functions\n * All unsubscribe calls will be executed at once\n * @param unsubscribles Array of unsubscribe functions to execute\n */\n batchUnsubscribe(unsubscribles: Unsubscrible[]): void {\n if (!unsubscribles || unsubscribles.length === 0) {\n return;\n }\n\n // Execute all unsubscribe calls\n unsubscribles.forEach((unsub) => {\n if (unsub && typeof unsub.unsubscribe === \"function\") {\n unsub.unsubscribe();\n }\n });\n }\n\n subscribe<T = any>(channel: string, fn: (data: T) => void, filter?: string, methodName?: string): Unsubscrible {\n let sub = this.realtimeClient.getSubscription(channel);\n let listeners = this.listenersMap.get(channel);\n\n if (!sub) {\n listeners = new Set();\n this.listenersMap.set(channel, listeners);\n\n console.log(\"[xrealtime] create new sub: \", channel);\n\n // Process filter expression with method-specific field mappings\n const processedFilter = filter && methodName ? replaceFilterFields(filter, methodName) : filter;\n\n sub = this.realtimeClient.newSubscription(channel, {\n delta: \"fossil\",\n ...(processedFilter && { filter: processedFilter }),\n });\n\n sub\n .on(\"subscribed\", () => {\n console.log(\"[xrealtime] subscribed\", channel);\n })\n .on(\"unsubscribed\", () => {\n console.log(\"[xrealtime] unsubscribed\", channel);\n })\n .on(\"publication\", (ctx) => {\n // console.log('[xrealtime] publication, ctx.data: ', ctx.data);\n listeners?.forEach((it) => it(ctx.data));\n })\n .subscribe();\n }\n\n listeners?.add(fn);\n\n return new StreamUnsubscrible<T>(this, channel, fn);\n }\n\n unsubscribe<T = any>(channel: string, fn: (data: T) => void) {\n const listeners = this.listenersMap.get(channel);\n if (!listeners) {\n return;\n }\n\n listeners.delete(fn);\n console.log(\"unsubscribe, remain listeners: \", listeners.size);\n\n if (listeners.size === 0) {\n console.log(\"unsubscribe channel: \", channel);\n\n const sub = this.realtimeClient.getSubscription(channel);\n if (sub) {\n sub.unsubscribe();\n this.realtimeClient.removeSubscription(sub);\n }\n\n this.listenersMap.delete(channel);\n }\n }\n\n private formatScientificNotation(value: any): string {\n if (value === null || value === undefined) {\n return \"0\";\n }\n\n const strValue = value.toString();\n if (strValue.includes(\"e-\") || strValue.includes(\"E-\")) {\n return Number(value)\n .toFixed(20)\n .replace(/\\.?0+$/, \"\");\n }\n\n return strValue;\n }\n\n subscribeTokenCandles({\n chain,\n tokenAddress,\n resolution,\n callback,\n filter,\n }: {\n chain: string;\n tokenAddress: string;\n resolution: Resolution;\n callback: (data: TokenCandle) => void;\n filter?: string;\n }): Unsubscrible {\n const channel = `dex-candle:${chain}_${tokenAddress}_${resolution}`;\n return this.subscribe(channel, (data: any) => {\n callback({\n open: data.o,\n close: data.c,\n high: data.h,\n low: data.l,\n volume: data.v,\n resolution: data.r,\n time: data.t,\n number: data.n,\n });\n }, filter, \"subscribeTokenCandles\");\n }\n\n subscribeTokenStats({\n chain,\n tokenAddress,\n callback,\n filter,\n }: {\n chain: string;\n tokenAddress: string;\n callback: (data: TokenStat) => void;\n filter?: string;\n }): Unsubscrible {\n const channel = `dex-token-stats:${chain}_${tokenAddress}`;\n return this.subscribe(channel, (data: any) =>\n callback({\n address: data.a,\n timestamp: data.t,\n buys1m: data.b1m,\n sells1m: data.s1m,\n buyers1m: data.be1m,\n sellers1m: data.se1m,\n buyVolumeInUsd1m: this.formatScientificNotation(data.bviu1m),\n sellVolumeInUsd1m: this.formatScientificNotation(data.sviu1m),\n price1m: this.formatScientificNotation(data.p1m),\n openInUsd1m: this.formatScientificNotation(data.oiu1m),\n closeInUsd1m: this.formatScientificNotation(data.ciu1m),\n\n buys5m: data.b5m,\n sells5m: data.s5m,\n buyers5m: data.be5m,\n sellers5m: data.se5m,\n buyVolumeInUsd5m: this.formatScientificNotation(data.bviu5m),\n sellVolumeInUsd5m: this.formatScientificNotation(data.sviu5m),\n price5m: this.formatScientificNotation(data.p5m),\n openInUsd5m: this.formatScientificNotation(data.oiu5m),\n closeInUsd5m: this.formatScientificNotation(data.ciu5m),\n\n buys15m: data.b15m,\n sells15m: data.s15m,\n buyers15m: data.be15m,\n sellers15m: data.se15m,\n buyVolumeInUsd15m: this.formatScientificNotation(data.bviu15m),\n sellVolumeInUsd15m: this.formatScientificNotation(data.sviu15m),\n price15m: this.formatScientificNotation(data.p15m),\n openInUsd15m: this.formatScientificNotation(data.oiu15m),\n closeInUsd15m: this.formatScientificNotation(data.ciu15m),\n\n buys30m: data.b30m,\n sells30m: data.s30m,\n buyers30m: data.be30m,\n sellers30m: data.se30m,\n buyVolumeInUsd30m: this.formatScientificNotation(data.bviu30m),\n sellVolumeInUsd30m: this.formatScientificNotation(data.sviu30m),\n price30m: this.formatScientificNotation(data.p30m),\n openInUsd30m: this.formatScientificNotation(data.oiu30m),\n closeInUsd30m: this.formatScientificNotation(data.ciu30m),\n\n buys1h: data.b1h,\n sells1h: data.s1h,\n buyers1h: data.be1h,\n sellers1h: data.se1h,\n buyVolumeInUsd1h: this.formatScientificNotation(data.bviu1h),\n sellVolumeInUsd1h: this.formatScientificNotation(data.sviu1h),\n price1h: this.formatScientificNotation(data.p1h),\n openInUsd1h: this.formatScientificNotation(data.oiu1h),\n closeInUsd1h: this.formatScientificNotation(data.ciu1h),\n\n buys4h: data.b4h,\n sells4h: data.s4h,\n buyers4h: data.be4h,\n sellers4h: data.se4h,\n buyVolumeInUsd4h: this.formatScientificNotation(data.bviu4h),\n sellVolumeInUsd4h: this.formatScientificNotation(data.sviu4h),\n price4h: this.formatScientificNotation(data.p4h),\n openInUsd4h: this.formatScientificNotation(data.oiu4h),\n closeInUsd4h: this.formatScientificNotation(data.ciu4h),\n\n buys24h: data.b24h,\n sells24h: data.s24h,\n buyers24h: data.be24h,\n sellers24h: data.se24h,\n buyVolumeInUsd24h: this.formatScientificNotation(data.bviu24h),\n sellVolumeInUsd24h: this.formatScientificNotation(data.sviu24h),\n price24h: this.formatScientificNotation(data.p24h),\n openInUsd24h: this.formatScientificNotation(data.oiu24h),\n closeInUsd24h: this.formatScientificNotation(data.ciu24h),\n\n price: this.formatScientificNotation(data.p),\n }), filter, \"subscribeTokenStats\");\n }\n\n subscribeTokenHolders({\n chain,\n tokenAddress,\n callback,\n filter,\n }: {\n chain: string;\n tokenAddress: string;\n callback: (data: TokenHolder) => void;\n filter?: string;\n }): Unsubscrible {\n const channel = `dex-token-holding:${chain}_${tokenAddress}`;\n return this.subscribe(channel, (data: any) =>\n callback({\n tokenAddress: data.a,\n holders: data.h,\n top100HoldersAmount: this.formatScientificNotation(data.t100a),\n top50HoldersAmount: this.formatScientificNotation(data.t50a),\n top10HoldersAmount: this.formatScientificNotation(data.t10a),\n top100Holders: data.t100h,\n top50Holders: data.t50h,\n top10Holders: data.t10h,\n top100HoldersRatio: this.formatScientificNotation(data.t100r),\n top50HoldersRatio: this.formatScientificNotation(data.t50r),\n top10HoldersRatio: this.formatScientificNotation(data.t10r),\n creatorsHolders: data.ch,\n creatorsAmount: this.formatScientificNotation(data.ca),\n creatorsRatio: this.formatScientificNotation(data.cr),\n balanceTagFreshHolders: data.btfh,\n balanceTagFreshAmount: this.formatScientificNotation(data.btfa),\n balanceTagFreshRatio: this.formatScientificNotation(data.btfr),\n balanceTagSandwichHolders: data.btsh,\n balanceTagSandwichAmount: this.formatScientificNotation(data.btsa),\n balanceTagSandwichRatio: this.formatScientificNotation(data.btsr),\n balanceTagBundleHolders: data.btbh,\n balanceTagBundleAmount: this.formatScientificNotation(data.btba),\n balanceTagBundleRatio: this.formatScientificNotation(data.btbr),\n balanceTagSniperHolders: data.btsnh,\n balanceTagSniperAmount: this.formatScientificNotation(data.btsna),\n balanceTagSniperRatio: this.formatScientificNotation(data.btsnr),\n balanceTagDevHolders: data.btdh,\n balanceTagDevAmount: this.formatScientificNotation(data.btda),\n balanceTagDevRatio: this.formatScientificNotation(data.btdr),\n balanceTagProHolders: data.btph,\n balanceTagProAmount: this.formatScientificNotation(data.btpa),\n balanceTagProRatio: this.formatScientificNotation(data.btpr),\n balanceTagInsiderHolders: data.btih,\n balanceTagInsiderAmount: this.formatScientificNotation(data.btia),\n balanceTagInsiderRatio: this.formatScientificNotation(data.btir),\n balanceTagSmartHolders: data.btsmh,\n balanceTagSmartAmount: this.formatScientificNotation(data.btsma),\n balanceTagSmartRatio: this.formatScientificNotation(data.btsmr),\n balanceTagKolHolders: data.btkh,\n balanceTagKolAmount: this.formatScientificNotation(data.btka),\n balanceTagKolRatio: this.formatScientificNotation(data.btkr),\n balanceTagPhishingHolders: data.btphh,\n balanceTagPhishingAmount: this.formatScientificNotation(data.btpha),\n balanceTagPhishingRatio: this.formatScientificNotation(data.btphr),\n balanceTagBluechipHolders: data.btblh,\n balanceTagBluechipAmount: this.formatScientificNotation(data.btbla),\n balanceTagBluechipRatio: this.formatScientificNotation(data.btblr),\n balanceTagRatHolders: data.btrh,\n balanceTagRatAmount: this.formatScientificNotation(data.btra),\n balanceTagRatRatio: this.formatScientificNotation(data.btrr),\n timestamp: data.ts,\n }), filter, \"subscribeTokenHolders\");\n }\n\n subscribeNewToken({\n chain,\n callback,\n filter,\n }: {\n chain: string;\n callback: (data: NewToken) => void;\n filter?: string;\n }): Unsubscrible {\n const channel = `dex-new-token:${chain}`;\n return this.subscribe(channel, (data: any) => {\n const result: any = {\n tokenAddress: data.a,\n name: data.n,\n symbol: data.s,\n createdAtMs: data.cts,\n };\n \n if (data.dec) {\n result.decimals = data.dec;\n }\n \n if (data.lf) {\n result.launchFrom = {};\n if (data.lf.pa) { result.launchFrom.programAddress = data.lf.pa }\n if (data.lf.pf) { result.launchFrom.protocolFamily = data.lf.pf }\n if (data.lf.pn) { result.launchFrom.protocolName = data.lf.pn }\n }\n \n callback(result);\n }, filter, \"subscribeNewToken\");\n }\n\n subscribeNewTokensMetadata({\n chain,\n callback,\n }: {\n chain: string;\n callback: (data: TokenMetadata[]) => void;\n }): Unsubscrible {\n const channel = `dex-new-tokens-metadata:${chain}`;\n return this.subscribe(channel, (data: any[]) =>\n callback(\n data.map(\n (it: any) =>\n ({\n tokenAddress: it.a,\n name: it.n,\n symbol: it.s,\n imageUrl: it.iu,\n description: it.de,\n socialMedia: (() => {\n const socialMedia: any = {};\n if (it.sm?.tw) { socialMedia.twitter = it.sm.tw }\n if (it.sm?.tg) { socialMedia.telegram = it.sm.tg }\n if (it.sm?.w) { socialMedia.website = it.sm.w }\n if (it.sm?.tt) { socialMedia.tiktok = it.sm.tt }\n if (it.sm?.dc) { socialMedia.discord = it.sm.dc }\n if (it.sm?.fb) { socialMedia.facebook = it.sm.fb }\n if (it.sm?.gh) { socialMedia.github = it.sm.gh }\n if (it.sm?.ig) { socialMedia.instagram = it.sm.ig }\n if (it.sm?.li) { socialMedia.linkedin = it.sm.li }\n if (it.sm?.md) { socialMedia.medium = it.sm.md }\n if (it.sm?.rd) { socialMedia.reddit = it.sm.rd }\n if (it.sm?.yt) { socialMedia.youtube = it.sm.yt }\n if (it.sm?.bb) { socialMedia.bitbucket = it.sm.bb }\n return socialMedia;\n })(),\n createdAtMs: it.cts,\n })\n )\n )\n );\n }\n\n // subscribeNewTokens({\n // chain,\n // callback,\n // }: {\n // chain: string;\n // callback: (data: NewToken[]) => void;\n // }): Unsubscrible {\n // const channel = `dex-new-tokens:${chain}`;\n // return this.subscribe(channel, (data: any[]) =>\n // callback(\n // data.map(\n // (it: any) =>\n // ({\n // tokenAddress: it.a,\n // name: it.n,\n // symbol: it.s,\n // description: it.de,\n // createdAtMs: it.cts,\n // }) as NewToken\n // )\n // )\n // );\n // }\n\n subscribeTokenSupply({\n chain,\n tokenAddress,\n callback,\n filter,\n }: {\n chain: string;\n tokenAddress: string;\n callback: (data: TokenSupply) => void;\n filter?: string;\n }): Unsubscrible {\n const channel = `dex-token-supply:${chain}_${tokenAddress}`;\n return this.subscribe(channel, (data: any) =>\n callback({\n tokenAddress: data.a,\n supply: data.s,\n marketCapInUsd: data.mc,\n timestamp: data.ts,\n }), filter, \"subscribeTokenSupply\");\n }\n\n subscribeTokenLiquidity({\n chain,\n tokenAddress,\n callback,\n filter,\n }: {\n chain: string;\n tokenAddress: string;\n callback: (data: TokenLiquidity) => void;\n filter?: string;\n }): Unsubscrible {\n const channel = `dex-token-general-stat-num:${chain}_${tokenAddress}`;\n return this.subscribe(channel, (data: any) =>\n callback({\n tokenAddress: data.a,\n metricType: data.t,\n value: data.v,\n timestamp: data.ts,\n }), filter, \"subscribeTokenLiquidity\");\n }\n\n subscribeRankingTokensLiquidity({\n chain,\n channelType,\n callback,\n }: {\n chain: string;\n channelType: ChannelType;\n callback: (data: TokenLiquidity[]) => void;\n }): Unsubscrible {\n const channel = `dex-ranking-token-general_stat_num-list:${chain}_${channelType}`;\n return this.subscribe(channel, (data: any[]) =>\n callback(\n data?.map(\n (it: any) =>\n ({\n tokenAddress: it.a,\n metricType: it.t,\n value: it.v,\n timestamp: it.ts,\n }) as TokenLiquidity\n )\n )\n );\n }\n\n subscribeRankingTokensList({\n chain,\n ranking_type,\n dex,\n callback,\n }: {\n chain: string;\n ranking_type: RankingType;\n dex?: Dex;\n callback: (data: RankingTokenList[]) => void;\n }): Unsubscrible {\n const channel = dex\n ? `dex-ranking-list:${chain}_${ranking_type}_${dex}`\n : `dex-ranking-list:${chain}_${ranking_type}`;\n return this.subscribe(channel, (data: any[]) =>\n callback(\n data?.map((item: any) => {\n const result: RankingTokenList = {} as RankingTokenList;\n\n // TokenMetadata (t)\n if (item.t) {\n result.metadata = {\n tokenAddress: item.t.a,\n };\n if (item.t.n) { result.metadata.name = item.t.n }\n if (item.t.s) { result.metadata.symbol = item.t.s }\n if (item.t.iu) { result.metadata.imageUrl = item.t.iu }\n if (item.t.de) { result.metadata.description = item.t.de }\n if (item.t.d) { result.metadata.decimals = item.t.dec }\n if (item.t.cts) { result.metadata.createdAtMs = item.t.cts }\n if (item.t.lf) {\n result.metadata.launchFrom = {};\n if (item.t.lf.pa) { result.metadata.launchFrom.programAddress = item.t.lf.pa }\n if (item.t.lf.pf) { result.metadata.launchFrom.protocolFamily = item.t.lf.pf }\n if (item.t.lf.pn) { result.metadata.launchFrom.protocolName = item.t.lf.pn }\n }\n if (item.t.mt) {\n result.metadata.migratedTo = {};\n if (item.t.mt.pa) { result.metadata.migratedTo.programAddress = item.t.mt.pa }\n if (item.t.mt.pf) { result.metadata.migratedTo.protocolFamily = item.t.mt.pf }\n if (item.t.mt.pn) { result.metadata.migratedTo.protocolName = item.t.mt.pn }\n }\n if (item.t.sm) {\n result.metadata.socialMedia = {};\n if (item.t.sm.tw) { result.metadata.socialMedia.twitter = item.t.sm.tw }\n if (item.t.sm.tg) { result.metadata.socialMedia.telegram = item.t.sm.tg }\n if (item.t.sm.w) { result.metadata.socialMedia.website = item.t.sm.w }\n if (item.t.sm.tt) { result.metadata.socialMedia.tiktok = item.t.sm.tt }\n if (item.t.sm.dc) { result.metadata.socialMedia.discord = item.t.sm.dc }\n if (item.t.sm.fb) { result.metadata.socialMedia.facebook = item.t.sm.fb }\n if (item.t.sm.gh) { result.metadata.socialMedia.github = item.t.sm.gh }\n if (item.t.sm.ig) { result.metadata.socialMedia.instagram = item.t.sm.ig }\n if (item.t.sm.li) { result.metadata.socialMedia.linkedin = item.t.sm.li }\n if (item.t.sm.md) { result.metadata.socialMedia.medium = item.t.sm.md }\n if (item.t.sm.rd) { result.metadata.socialMedia.reddit = item.t.sm.rd }\n if (item.t.sm.yt) { result.metadata.socialMedia.youtube = item.t.sm.yt }\n if (item.t.sm.bb) { result.metadata.socialMedia.bitbucket = item.t.sm.bb }\n }\n if (item.t.cts) { result.metadata.createdAtMs = item.t.cts }\n }\n\n // TokenBondingCurve (bc)\n if (item.bc) {\n result.bondingCurve = {};\n if (item.bc.pr) { result.bondingCurve.progressRatio = this.formatScientificNotation(item.bc.pr) }\n }\n\n // TokenHolder (h)\n if (item.h) {\n result.holder = {\n tokenAddress: item.h.a,\n timestamp: item.h.ts || 0,\n };\n if (item.h.h) { result.holder.holders = item.h.h }\n if (item.h.t100a) { result.holder.top100HoldersAmount = this.formatScientificNotation(item.h.t100a) }\n if (item.h.t50a) { result.holder.top50HoldersAmount = this.formatScientificNotation(item.h.t50a) }\n if (item.h.t10a) { result.holder.top10HoldersAmount = this.formatScientificNotation(item.h.t10a) }\n if (item.h.t100h) { result.holder.top100Holders = item.h.t100h }\n if (item.h.t50h) { result.holder.top50Holders = item.h.t50h }\n if (item.h.t10h) { result.holder.top10Holders = item.h.t10h }\n if (item.h.t100r) { result.holder.top100HoldersRatio = this.formatScientificNotation(item.h.t100r) }\n if (item.h.t50r) { result.holder.top50HoldersRatio = this.formatScientificNotation(item.h.t50r) }\n if (item.h.t10r) { result.holder.top10HoldersRatio = this.formatScientificNotation(item.h.t10r) }\n if (item.h.ch) { result.holder.creatorsHolders = item.h.ch }\n if (item.h.ca) { result.holder.creatorsAmount = this.formatScientificNotation(item.h.ca) }\n if (item.h.cr) { result.holder.creatorsRatio = this.formatScientificNotation(item.h.cr) }\n if (item.h.btfh) { result.holder.balanceTagFreshHolders = item.h.btfh }\n if (item.h.btfa) { result.holder.balanceTagFreshAmount = this.formatScientificNotation(item.h.btfa) }\n if (item.h.btfr) { result.holder.balanceTagFreshRatio = this.formatScientificNotation(item.h.btfr) }\n if (item.h.btsh) { result.holder.balanceTagSandwichHolders = item.h.btsh }\n if (item.h.btsa) { result.holder.balanceTagSandwichAmount = this.formatScientificNotation(item.h.btsa) }\n if (item.h.btsr) { result.holder.balanceTagSandwichRatio = this.formatScientificNotation(item.h.btsr) }\n if (item.h.btbh) { result.holder.balanceTagBundleHolders = item.h.btbh }\n if (item.h.btba) { result.holder.balanceTagBundleAmount = this.formatScientificNotation(item.h.btba) }\n if (item.h.btbr) { result.holder.balanceTagBundleRatio = this.formatScientificNotation(item.h.btbr) }\n if (item.h.btsnh) { result.holder.balanceTagSniperHolders = item.h.btsnh }\n if (item.h.btsna) { result.holder.balanceTagSniperAmount = this.formatScientificNotation(item.h.btsna) }\n if (item.h.btsnr) { result.holder.balanceTagSniperRatio = this.formatScientificNotation(item.h.btsnr) }\n if (item.h.btdh) { result.holder.balanceTagDevHolders = item.h.btdh }\n if (item.h.btda) { result.holder.balanceTagDevAmount = this.formatScientificNotation(item.h.btda) }\n if (item.h.btdr) { result.holder.balanceTagDevRatio = this.formatScientificNotation(item.h.btdr) }\n if (item.h.btph) { result.holder.balanceTagProHolders = item.h.btph }\n if (item.h.btpa) { result.holder.balanceTagProAmount = this.formatScientificNotation(item.h.btpa) }\n if (item.h.btpr) { result.holder.balanceTagProRatio = this.formatScientificNotation(item.h.btpr) }\n if (item.h.btih) { result.holder.balanceTagInsiderHolders = item.h.btih }\n if (item.h.btia) { result.holder.balanceTagInsiderAmount = this.formatScientificNotation(item.h.btia) }\n if (item.h.btir) { result.holder.balanceTagInsiderRatio = this.formatScientificNotation(item.h.btir) }\n if (item.h.btsmh) { result.holder.balanceTagSmartHolders = item.h.btsmh }\n if (item.h.btsma) { result.holder.balanceTagSmartAmount = this.formatScientificNotation(item.h.btsma) }\n if (item.h.btsmr) { result.holder.balanceTagSmartRatio = this.formatScientificNotation(item.h.btsmr) }\n if (item.h.btkh) { result.holder.balanceTagKolHolders = item.h.btkh }\n if (item.h.btka) { result.holder.balanceTagKolAmount = this.formatScientificNotation(item.h.btka) }\n if (item.h.btkr) { result.holder.balanceTagKolRatio = this.formatScientificNotation(item.h.btkr) }\n if (item.h.btphh) { result.holder.balanceTagPhishingHolders = item.h.btphh }\n if (item.h.btpha) { result.holder.balanceTagPhishingAmount = this.formatScientificNotation(item.h.btpha) }\n if (item.h.btphr) { result.holder.balanceTagPhishingRatio = this.formatScientificNotation(item.h.btphr) }\n if (item.h.btblh) { result.holder.balanceTagBluechipHolders = item.h.btblh }\n if (item.h.btbla) { result.holder.balanceTagBluechipAmount = this.formatScientificNotation(item.h.btbla) }\n if (item.h.btblr) { result.holder.balanceTagBluechipRatio = this.formatScientificNotation(item.h.btblr) }\n if (item.h.btrh) { result.holder.balanceTagRatHolders = item.h.btrh }\n if (item.h.btra) { result.holder.balanceTagRatAmount = this.formatScientificNotation(item.h.btra) }\n if (item.h.btrr) { result.holder.balanceTagRatRatio = this.formatScientificNotation(item.h.btrr) }\n }\n\n // TokenSupply (s)\n if (item.s) {\n result.supply = {\n tokenAddress: item.s.a,\n timestamp: item.s.ts || 0,\n };\n if (item.s.s) { result.supply.supply = item.s.s }\n if (item.s.mc) { result.supply.marketCapInUsd = item.s.mc }\n }\n\n // TokenStat (ts)\n if (item.ts) {\n result.stat = {\n address: item.ts.a,\n timestamp: item.ts.t || 0,\n };\n\n // 1m data\n if (item.ts.b1m) { result.stat.buys1m = item.ts.b1m }\n if (item.ts.s1m) { result.stat.sells1m = item.ts.s1m }\n if (item.ts.be1m) { result.stat.buyers1m = item.ts.be1m }\n if (item.ts.se1m) { result.stat.sellers1m = item.ts.se1m }\n if (item.ts.bviu1m) { result.stat.buyVolumeInUsd1m = this.formatScientificNotation(item.ts.bviu1m) }\n if (item.ts.sviu1m) { result.stat.sellVolumeInUsd1m = this.formatScientificNotation(item.ts.sviu1m) }\n if (item.ts.p1m) { result.stat.price1m = this.formatScientificNotation(item.ts.p1m) }\n if (item.ts.oiu1m) { result.stat.openInUsd1m = this.formatScientificNotation(item.ts.oiu1m) }\n if (item.ts.ciu1m) { result.stat.closeInUsd1m = this.formatScientificNotation(item.ts.ciu1m) }\n\n // 5m data\n if (item.ts.b5m) { result.stat.buys5m = item.ts.b5m }\n if (item.ts.s5m) { result.stat.sells5m = item.ts.s5m }\n if (item.ts.be5m) { result.stat.buyers5m = item.ts.be5m }\n if (item.ts.se5m) { result.stat.sellers5m = item.ts.se5m }\n if (item.ts.bviu5m) { result.stat.buyVolumeInUsd5m = this.formatScientificNotation(item.ts.bviu5m) }\n if (item.ts.sviu5m) { result.stat.sellVolumeInUsd5m = this.formatScientificNotation(item.ts.sviu5m) }\n if (item.ts.p5m) { result.stat.price5m = this.formatScientificNotation(item.ts.p5m) }\n if (item.ts.oiu5m) { result.stat.openInUsd5m = this.formatScientificNotation(item.ts.oiu5m) }\n if (item.ts.ciu5m) { result.stat.closeInUsd5m = this.formatScientificNotation(item.ts.ciu5m) }\n\n // 15m data\n if (item.ts.b15m) { result.stat.buys15m = item.ts.b15m }\n if (item.ts.s15m) { result.stat.sells15m = item.ts.s15m }\n if (item.ts.be15m) { result.stat.buyers15m = item.ts.be15m }\n if (item.ts.se15m) { result.stat.sellers15m = item.ts.se15m }\n if (item.ts.bviu15m) { result.stat.buyVolumeInUsd15m = this.formatScientificNotation(item.ts.bviu15m) }\n if (item.ts.sviu15m) { result.stat.sellVolumeInUsd15m = this.formatScientificNotation(item.ts.sviu15m) }\n if (item.ts.p15m) { result.stat.price15m = this.formatScientificNotation(item.ts.p15m) }\n if (item.ts.oiu15m) { result.stat.openInUsd15m = this.formatScientificNotation(item.ts.oiu15m) }\n if (item.ts.ciu15m) { result.stat.closeInUsd15m = this.formatScientificNotation(item.ts.ciu15m) }\n\n // 30m data\n if (item.ts.b30m) { result.stat.buys30m = item.ts.b30m }\n if (item.ts.s30m) { result.stat.sells30m = item.ts.s30m }\n if (item.ts.be30m) { result.stat.buyers30m = item.ts.be30m }\n if (item.ts.se30m) { result.stat.sellers30m = item.ts.se30m }\n if (item.ts.bviu30m) { result.stat.buyVolumeInUsd30m = this.formatScientificNotation(item.ts.bviu30m) }\n if (item.ts.sviu30m) { result.stat.sellVolumeInUsd30m = this.formatScientificNotation(item.ts.sviu30m) }\n if (item.ts.p30m) { result.stat.price30m = this.formatScientificNotation(item.ts.p30m) }\n if (item.ts.oiu30m) { result.stat.openInUsd30m = this.formatScientificNotation(item.ts.oiu30m) }\n if (item.ts.ciu30m) { result.stat.closeInUsd30m = this.formatScientificNotation(item.ts.ciu30m) }\n\n // 1h data\n if (item.ts.b1h) { result.stat.buys1h = item.ts.b1h }\n if (item.ts.s1h) { result.stat.sells1h = item.ts.s1h }\n if (item.ts.be1h) { result.stat.buyers1h = item.ts.be1h }\n if (item.ts.se1h) { result.stat.sellers1h = item.ts.se1h }\n if (item.ts.bviu1h) { result.stat.buyVolumeInUsd1h = this.formatScientificNotation(item.ts.bviu1h) }\n if (item.ts.sviu1h) { result.stat.sellVolumeInUsd1h = this.formatScientificNotation(item.ts.sviu1h) }\n if (item.ts.p1h) { result.stat.price1h = this.formatScientificNotation(item.ts.p1h) }\n if (item.ts.oiu1h) { result.stat.openInUsd1h = this.formatScientificNotation(item.ts.oiu1h) }\n if (item.ts.ciu1h) { result.stat.closeInUsd1h = this.formatScientificNotation(item.ts.ciu1h) }\n\n // 4h data\n if (item.ts.b4h) { result.stat.buys4h = item.ts.b4h }\n if (item.ts.s4h) { result.stat.sells4h = item.ts.s4h }\n if (item.ts.be4h) { result.stat.buyers4h = item.ts.be4h }\n if (item.ts.se4h) { result.stat.sellers4h = item.ts.se4h }\n if (item.ts.bviu4h) { result.stat.buyVolumeInUsd4h = this.formatScientificNotation(item.ts.bviu4h) }\n if (item.ts.sviu4h) { result.stat.sellVolumeInUsd4h = this.formatScientificNotation(item.ts.sviu4h) }\n if (item.ts.p4h) { result.stat.price4h = this.formatScientificNotation(item.ts.p4h) }\n if (item.ts.oiu4h) { result.stat.openInUsd4h = this.formatScientificNotation(item.ts.oiu4h) }\n if (item.ts.ciu4h) { result.stat.closeInUsd4h = this.formatScientificNotation(item.ts.ciu4h) }\n\n // 24h data\n if (item.ts.b24h) { result.stat.buys24h = item.ts.b24h }\n if (item.ts.s24h) { result.stat.sells24h = item.ts.s24h }\n if (item.ts.be24h) { result.stat.buyers24h = item.ts.be24h }\n if (item.ts.se24h) { result.stat.sellers24h = item.ts.se24h }\n if (item.ts.bviu24h) { result.stat.buyVolumeInUsd24h = this.formatScientificNotation(item.ts.bviu24h) }\n if (item.ts.sviu24h) { result.stat.sellVolumeInUsd24h = this.formatScientificNotation(item.ts.sviu24h) }\n if (item.ts.p24h) { result.stat.price24h = this.formatScientificNotation(item.ts.p24h) }\n if (item.ts.oiu24h) { result.stat.openInUsd24h = this.formatScientificNotation(item.ts.oiu24h) }\n if (item.ts.ciu24h) { result.stat.closeInUsd24h = this.formatScientificNotation(item.ts.ciu24h) }\n\n // Current price\n if (item.ts.p) { result.stat.price = this.formatScientificNotation(item.ts.p) }\n }\n\n return result;\n })\n )\n );\n }\n\n subscribeRankingTokensStats({\n chain,\n channelType,\n callback,\n }: {\n chain: string;\n channelType: ChannelType;\n callback: (data: TokenStat[]) => void;\n }): Unsubscrible {\n const channel = `dex-ranking-token-stats-list:${chain}_${channelType}`;\n return this.subscribe(channel, (data: any[]) =>\n callback(\n data?.map(\n (it: any) =>\n ({\n address: it.a,\n timestamp: it.t,\n buys1m: it.b1m,\n sells1m: it.s1m,\n buyers1m: it.be1m,\n sellers1m: it.se1m,\n buyVolumeInUsd1m: this.formatScientificNotation(it.bviu1m),\n sellVolumeInUsd1m: this.formatScientificNotation(it.sviu1m),\n price1m: this.formatScientificNotation(it.p1m),\n openInUsd1m: this.formatScientificNotation(it.oiu1m),\n closeInUsd1m: this.formatScientificNotation(it.ciu1m),\n buys5m: it.b5m,\n sells5m: it.s5m,\n buyers5m: it.be5m,\n sellers5m: it.se5m,\n buyVolumeInUsd5m: this.formatScientificNotation(it.bviu5m),\n sellVolumeInUsd5m: this.formatScientificNotation(it.sviu5m),\n price5m: this.formatScientificNotation(it.p5m),\n openInUsd5m: this.formatScientificNotation(it.oiu5m),\n closeInUsd5m: this.formatScientificNotation(it.ciu5m),\n buys15m: it.b15m,\n sells15m: it.s15m,\n buyers15m: it.be15m,\n sellers15m: it.se15m,\n buyVolumeInUsd15m: this.formatScientificNotation(it.bviu15m),\n sellVolumeInUsd15m: this.formatScientificNotation(it.sviu15m),\n price15m: this.formatScientificNotation(it.p15m),\n openInUsd15m: this.formatScientificNotation(it.oiu15m),\n closeInUsd15m: this.formatScientificNotation(it.ciu15m),\n buys30m: it.b30m,\n sells30m: it.s30m,\n buyers30m: it.be30m,\n sellers30m: it.se30m,\n buyVolumeInUsd30m: this.formatScientificNotation(it.bviu30m),\n sellVolumeInUsd30m: this.formatScientificNotation(it.sviu30m),\n price30m: this.formatScientificNotation(it.p30m),\n openInUsd30m: this.formatScientificNotation(it.oiu30m),\n closeInUsd30m: this.formatScientificNotation(it.ciu30m),\n buys1h: it.b1h,\n sells1h: it.s1h,\n buyers1h: it.be1h,\n sellers1h: it.se1h,\n buyVolumeInUsd1h: this.formatScientificNotation(it.bviu1h),\n sellVolumeInUsd1h: this.formatScientificNotation(it.sviu1h),\n price1h: this.formatScientificNotation(it.p1h),\n openInUsd1h: this.formatScientificNotation(it.oiu1h),\n closeInUsd1h: this.formatScientificNotation(it.ciu1h),\n buys4h: it.b4h,\n sells4h: it.s4h,\n buyers4h: it.be4h,\n sellers4h: it.se4h,\n buyVolumeInUsd4h: this.formatScientificNotation(it.bviu4h),\n sellVolumeInUsd4h: this.formatScientificNotation(it.sviu4h),\n price4h: this.formatScientificNotation(it.p4h),\n openInUsd4h: this.formatScientificNotation(it.oiu4h),\n closeInUsd4h: this.formatScientificNotation(it.ciu4h),\n buys24h: it.b24h,\n sells24h: it.s24h,\n buyers24h: it.be24h,\n sellers24h: it.se24h,\n buyVolumeInUsd24h: this.formatScientificNotation(it.bviu24h),\n sellVolumeInUsd24h: this.formatScientificNotation(it.sviu24h),\n price24h: this.formatScientificNotation(it.p24h),\n price: this.formatScientificNotation(it.p),\n openInUsd24h: this.formatScientificNotation(it.oiu24h),\n closeInUsd24h: this.formatScientificNotation(it.ciu24h),\n }) as TokenStat\n )\n )\n );\n }\n\n subscribeRankingTokensHolders({\n chain,\n channelType,\n callback,\n }: {\n chain: string;\n channelType: ChannelType;\n callback: (data: TokenHolder[]) => void;\n }): Unsubscrible {\n const channel = `dex-ranking-token-holding-list:${chain}_${channelType}`;\n return this.subscribe(channel, (data: any[]) =>\n callback(\n data?.map(\n (it: any) =>\n ({\n tokenAddress: it.a,\n holders: it.h,\n top100HoldersAmount: this.formatScientificNotation(it.t100a),\n top50HoldersAmount: this.formatScientificNotation(it.t50a),\n top10HoldersAmount: this.formatScientificNotation(it.t10a),\n top100Holders: it.t100h,\n top50Holders: it.t50h,\n top10Holders: it.t10h,\n top100HoldersRatio: this.formatScientificNotation(it.t100r),\n top50HoldersRatio: this.formatScientificNotation(it.t50r),\n top10HoldersRatio: this.formatScientificNotation(it.t10r),\n creatorsHolders: it.ch,\n creatorsAmount: this.formatScientificNotation(it.ca),\n creatorsRatio: this.formatScientificNotation(it.cr),\n balanceTagFreshHolders: it.btfh,\n balanceTagFreshAmount: this.formatScientificNotation(it.btfa),\n balanceTagFreshRatio: this.formatScientificNotation(it.btfr),\n balanceTagSandwichHolders: it.btsh,\n balanceTagSandwichAmount: this.formatScientificNotation(it.btsa),\n balanceTagSandwichRatio: this.formatScientificNotation(it.btsr),\n balanceTagBundleHolders: it.btbh,\n balanceTagBundleAmount: this.formatScientificNotation(it.btba),\n balanceTagBundleRatio: this.formatScientificNotation(it.btbr),\n balanceTagSniperHolders: it.btsnh,\n balanceTagSniperAmount: this.formatScientificNotation(it.btsna),\n balanceTagSniperRatio: this.formatScientificNotation(it.btsnr),\n balanceTagDevHolders: it.btdh,\n balanceTagDevAmount: this.formatScientificNotation(it.btda),\n balanceTagDevRatio: this.formatScientificNotation(it.btdr),\n balanceTagProHolders: it.btph,\n balanceTagProAmount: this.formatScientificNotation(it.btpa),\n balanceTagProRatio: this.formatScientificNotation(it.btpr),\n balanceTagInsiderHolders: it.btih,\n balanceTagInsiderAmount: this.formatScientificNotation(it.btia),\n balanceTagInsiderRatio: this.formatScientificNotation(it.btir),\n balanceTagSmartHolders: it.btsmh,\n balanceTagSmartAmount: this.formatScientificNotation(it.btsma),\n balanceTagSmartRatio: this.formatScientificNotation(it.btsmr),\n balanceTagKolHolders: it.btkh,\n balanceTagKolAmount: this.formatScientificNotation(it.btka),\n balanceTagKolRatio: this.formatScientificNotation(it.btkr),\n balanceTagPhishingHolders: it.btphh,\n balanceTagPhishingAmount: this.formatScientificNotation(it.btpha),\n balanceTagPhishingRatio: this.formatScientificNotation(it.btphr),\n balanceTagBluechipHolders: it.btblh,\n balanceTagBluechipAmount: this.formatScientificNotation(it.btbla),\n balanceTagBluechipRatio: this.formatScientificNotation(it.btblr),\n balanceTagRatHolders: it.btrh,\n balanceTagRatAmount: this.formatScientificNotation(it.btra),\n balanceTagRatRatio: this.formatScientificNotation(it.btrr),\n timestamp: it.ts,\n }) as TokenHolder\n )\n )\n );\n }\n\n subscribeRankingTokensSupply({\n chain,\n channelType,\n callback,\n }: {\n chain: string;\n channelType: ChannelType;\n callback: (data: TokenSupply[]) => void;\n }): Unsubscrible {\n const channel = `dex-ranking-token-supply-list:${chain}_${channelType}`;\n return this.subscribe(channel, (data: any[]) =>\n callback(\n data?.map(\n (it: any) =>\n ({\n tokenAddress: it.a,\n supply: it.s,\n marketCapInUsd: it.mc,\n timestamp: it.ts,\n })\n )\n )\n );\n }\n\n subscribeRankingTokensBondingCurve({\n chain,\n callback,\n }: {\n chain: string;\n callback: (data: TokenBondingCurve[]) => void;\n }): Unsubscrible {\n const channel = `dex-ranking-token-bounding-curve-list:${chain}_new`;\n return this.subscribe(channel, (data: any[]) =>\n callback(\n data?.map(\n (it: any) =>\n ({\n tokenAddress: it.a,\n progressRatio: it.pr,\n })\n )\n )\n );\n }\n\n // subscribeTokenTrades({\n // chain,\n // tokenAddress,\n // callback,\n // }: {\n // chain: string;\n // tokenAddress: string;\n // callback: (data: TradeEvent[]) => void;\n // }): Unsubscrible {\n // const channel = `dex-trades:${chain}_${tokenAddress}`;\n // return this.subscribe(channel, (data: any[]) =>\n // callback(\n // data?.map(\n // (it: any) =>\n // ({\n // maker: it.bwa,\n // baseAmount: it.ba,\n // quoteAmount: it.sa,\n // // quoteSymbol: ,\n // quoteAddress: it.swa,\n // amountInUsd: it.baiu,\n // timestamp: it.t,\n // event: it.k,\n // txHash: it.h,\n // // priceInUsd: ,\n // // id: ,\n // // buyCostUsd: it.,\n // tokenAddress: it.a,\n // }) as TradeEvent\n // )\n // )\n // );\n // }\n\n subscribeWalletBalance({\n chain,\n walletAddress,\n callback,\n filter,\n }: {\n chain: string;\n walletAddress: string;\n callback: (data: WalletBalance[]) => void;\n filter?: string;\n }): Unsubscrible {\n const channel = `dex-wallet-balance:${chain}_${walletAddress}`;\n return this.subscribe(channel, (data: any) =>\n callback([\n {\n walletAddress: data.a,\n tokenAddress: data.ta,\n tokenPriceInUsd: data.tpiu,\n balance: data.b,\n timestamp: data.t,\n },\n ]), filter, \"subscribeWalletBalance\");\n }\n\n subscribeWalletPnl({\n chain,\n walletAddress,\n callback,\n filter,\n }: {\n chain: string;\n walletAddress: string;\n callback: (data: WalletTokenPnl) => void;\n filter?: string;\n }): Unsubscrible {\n const channel = `dex-wallet-token-pnl:${chain}_${walletAddress}`;\n return this.subscribe(channel, (data: any) =>\n callback({\n walletAddress: data.a,\n tokenAddress: data.ta,\n tokenPriceInUsd: data.tpiu,\n timestamp: data.t,\n opentime: data.ot,\n lasttime: data.lt,\n closetime: data.ct,\n buyAmount: data.ba,\n buyAmountInUsd: data.baiu,\n buyCount: data.bs,\n buyCount30d: data.bs30d,\n buyCount7d: data.bs7d,\n sellAmount: data.sa,\n sellAmountInUsd: data.saiu,\n sellCount: data.ss,\n sellCount30d: data.ss30d,\n sellCount7d: data.ss7d,\n heldDurationTimestamp: data.hdts,\n averageBuyPriceInUsd: data.abpiu,\n averageSellPriceInUsd: data.aspiu,\n unrealizedProfitInUsd: data.upiu,\n unrealizedProfitRatio: data.upr,\n realizedProfitInUsd: data.rpiu,\n realizedProfitRatio: data.rpr,\n totalRealizedProfitInUsd: data.trpiu,\n totalRealizedProfitRatio: data.trr,\n }), filter, \"subscribeWalletPnl\");\n }\n\n subscribeWalletPnlList({\n chain,\n walletAddress,\n callback,\n }: {\n chain: string;\n walletAddress: string;\n callback: (data: WalletPnl[]) => void;\n }): Unsubscrible {\n const channel = `dex-wallet-pnl-list:${chain}_${walletAddress}`;\n return this.subscribe(channel, (data: any[]) =>\n callback(\n data?.map(\n (it: any) =>\n ({\n walletAddress: it.a,\n buys: it.bs,\n buyAmount: it.ba,\n buyAmountInUsd: it.baiu,\n averageBuyPriceInUsd: it.abpiu,\n sellAmount: it.sa,\n sellAmountInUsd: it.saiu,\n sells: it.ss,\n wins: it.ws,\n winRatio: it.wr,\n pnlInUsd: it.piu,\n averagePnlInUsd: it.apiu,\n pnlRatio: it.pr,\n profitableDays: it.pd,\n losingDays: it.ld,\n tokens: it.ts,\n resolution: it.r,\n }) as WalletPnl\n )\n )\n );\n }\n\n subscribeTokenTrade({\n chain,\n tokenAddress,\n callback,\n filter,\n }: {\n chain: string;\n tokenAddress: string;\n callback: (data: TradeActivity) => void;\n filter?: string;\n }): Unsubscrible {\n const channel = `dex-trade:${chain}_${tokenAddress}`;\n return this.subscribe(channel, (data: any) =>\n callback({\n tokenAddress: data.a,\n timestamp: data.t,\n kind: data.k,\n buyAmount: data.ba,\n buyAmountInUsd: data.baiu,\n buyTokenAddress: data.btma,\n buyTokenName: data.btn,\n buyTokenSymbol: data.bts,\n buyWalletAddress: data.bwa,\n sellAmount: data.sa,\n sellAmountInUsd: data.saiu,\n sellTokenAddress: data.stma,\n sellTokenName: data.stn,\n sellTokenSymbol: data.sts,\n sellWalletAddress: data.swa,\n txHash: data.h,\n }), filter, \"subscribeTokenTrades\");\n }\n\n subscribeWalletTrade({\n chain,\n walletAddress,\n callback,\n filter,\n }: {\n chain: string;\n walletAddress: string;\n callback: (data: TradeActivity) => void;\n filter?: string;\n }): Unsubscrible {\n const channel = `dex-wallet-trade:${chain}_${walletAddress}`;\n return this.subscribe(channel, (data: any) =>\n callback({\n tokenAddress: data.a,\n timestamp: data.t,\n kind: data.k,\n buyAmount: data.ba,\n buyAmountInUsd: data.baiu,\n buyTokenAddress: data.btma,\n buyTokenName: data.btn,\n buyTokenSymbol: data.bts,\n buyWalletAddress: data.bwa,\n sellAmount: data.sa,\n sellAmountInUsd: data.saiu,\n sellTokenAddress: data.stma,\n sellTokenName: data.stn,\n sellTokenSymbol: data.sts,\n sellWalletAddress: data.swa,\n txHash: data.h,\n }), filter, \"subscribeTokenTrades\");\n }\n\n subscribeDexPoolBalance({\n chain,\n poolAddress,\n callback,\n }: {\n chain: string;\n poolAddress: string;\n callback: (data: DexPoolBalance) => void;\n }): Unsubscrible {\n const channel = `dex-pool-balance:${chain}_${poolAddress}`;\n return this.subscribe(channel, (data: any) =>\n callback({\n poolAddress: data.a,\n tokenAAddress: data.taa,\n tokenALiquidityInUsd: data.taliu,\n tokenBAddress: data.tba,\n tokenBLiquidityInUsd: data.tbliu,\n })\n );\n }\n}\nclass StreamUnsubscrible<T> {\n constructor(\n private readonly streamApi: StreamApi,\n private readonly channel: string,\n private readonly fn: (data: T) => void\n ) { }\n\n unsubscribe() {\n this.streamApi.unsubscribe(this.channel, this.fn);\n }\n}","/**\n * Field mappings for CEL filter expressions\n * Maps human-readable field names to short field names used in the API\n * Organized by subscription method to handle field name conflicts\n */\n\nexport interface FieldMapping {\n readonly [key: string]: string;\n}\n\nexport interface MethodFieldMappings {\n readonly [methodName: string]: FieldMapping;\n}\n\n/**\n * Field mappings organized by subscription method\n * Each method can have its own field mappings to handle conflicts\n */\nexport const CEL_FIELD_MAPPINGS: MethodFieldMappings = {\n // Wallet balance subscription fields\n \"subscribeWalletBalance\": {\n \"walletAddress\": \"a\",\n \"tokenAddress\": \"ta\",\n \"tokenPriceInUsd\": \"tpiu\",\n \"balance\": \"b\",\n \"timestamp\": \"t\",\n },\n\n // Token candles subscription fields\n \"subscribeTokenCandles\": {\n \"open\": \"o\",\n \"close\": \"c\",\n \"high\": \"h\",\n \"low\": \"l\",\n \"volume\": \"v\",\n \"resolution\": \"r\",\n \"time\": \"t\",\n \"number\": \"n\",\n },\n\n // Token stats subscription fields\n \"subscribeTokenStats\": {\n \"address\": \"a\",\n \"timestamp\": \"t\",\n \"buys1m\": \"b1m\",\n \"sells1m\": \"s1m\",\n \"buyers1m\": \"be1m\",\n \"sellers1m\": \"se1m\",\n \"buyVolumeInUsd1m\": \"bviu1m\",\n \"sellVolumeInUsd1m\": \"sviu1m\",\n \"price1m\": \"p1m\",\n \"openInUsd1m\": \"oiu1m\",\n \"closeInUsd1m\": \"ciu1m\",\n \"buys5m\": \"b5m\",\n \"sells5m\": \"s5m\",\n \"buyers5m\": \"be5m\",\n \"sellers5m\": \"se5m\",\n \"buyVolumeInUsd5m\": \"bviu5m\",\n \"sellVolumeInUsd5m\": \"sviu5m\",\n \"price5m\": \"p5m\",\n \"openInUsd5m\": \"oiu5m\",\n \"closeInUsd5m\": \"ciu5m\",\n \"buys15m\": \"b15m\",\n \"sells15m\": \"s15m\",\n \"buyers15m\": \"be15m\",\n \"sellers15m\": \"se15m\",\n \"buyVolumeInUsd15m\": \"bviu15m\",\n \"sellVolumeInUsd15m\": \"sviu15m\",\n \"price15m\": \"p15m\",\n \"openInUsd15m\": \"oiu15m\",\n \"closeInUsd15m\": \"ciu15m\",\n \"buys30m\": \"b30m\",\n \"sells30m\": \"s30m\",\n \"buyers30m\": \"be30m\",\n \"sellers30m\": \"se30m\",\n \"buyVolumeInUsd30m\": \"bviu30m\",\n \"sellVolumeInUsd30m\": \"sviu30m\",\n \"price30m\": \"p30m\",\n \"openInUsd30m\": \"oiu30m\",\n \"closeInUsd30m\": \"ciu30m\",\n \"buys1h\": \"b1h\",\n \"sells1h\": \"s1h\",\n \"buyers1h\": \"be1h\",\n \"sellers1h\": \"se1h\",\n \"buyVolumeInUsd1h\": \"bviu1h\",\n \"sellVolumeInUsd1h\": \"sviu1h\",\n \"price1h\": \"p1h\",\n \"openInUsd1h\": \"oiu1h\",\n \"closeInUsd1h\": \"ciu1h\",\n \"buys4h\": \"b4h\",\n \"sells4h\": \"s4h\",\n \"buyers4h\": \"be4h\",\n \"sellers4h\": \"se4h\",\n \"buyVolumeInUsd4h\": \"bviu4h\",\n \"sellVolumeInUsd4h\": \"sviu4h\",\n \"price4h\": \"p4h\",\n \"openInUsd4h\": \"oiu4h\",\n \"closeInUsd4h\": \"ciu4h\",\n \"buys24h\": \"b24h\",\n \"sells24h\": \"s24h\",\n \"buyers24h\": \"be24h\",\n \"sellers24h\": \"se24h\",\n \"buyVolumeInUsd24h\": \"bviu24h\",\n \"sellVolumeInUsd24h\": \"sviu24h\",\n \"price24h\": \"p24h\",\n \"price\": \"p\",\n \"openInUsd24h\": \"oiu24h\",\n \"closeInUsd24h\": \"ciu24h\",\n },\n\n // Token holder subscription fields\n \"subscribeTokenHolders\": {\n \"tokenAddress\": \"a\",\n \"holders\": \"h\",\n \"top100HoldersAmount\": \"t100a\",\n \"top50HoldersAmount\": \"t50a\",\n \"top10HoldersAmount\": \"t10a\",\n \"top100Holders\": \"t100h\",\n \"top50Holders\": \"t50h\",\n \"top10Holders\": \"t10h\",\n \"top100HoldersRatio\": \"t100r\",\n \"top50HoldersRatio\": \"t50r\",\n \"top10HoldersRatio\": \"t10r\",\n \"creatorsHolders\": \"ch\",\n \"creatorsAmount\": \"ca\",\n \"creatorsRatio\": \"cr\",\n \"balanceTagFreshHolders\": \"btfh\",\n \"balanceTagFreshAmount\": \"btfa\",\n \"balanceTagFreshRatio\": \"btfr\",\n \"balanceTagSandwichHolders\": \"btsh\",\n \"balanceTagSandwichAmount\": \"btsa\",\n \"balanceTagSandwichRatio\": \"btsr\",\n \"balanceTagBundleHolders\": \"btbh\",\n \"balanceTagBundleAmount\": \"btba\",\n \"balanceTagBundleRatio\": \"btbr\",\n \"balanceTagSniperHolders\": \"btsnh\",\n \"balanceTagSniperAmount\": \"btsna\",\n \"balanceTagSniperRatio\": \"btsnr\",\n \"balanceTagDevHolders\": \"btdh\",\n \"balanceTagDevAmount\": \"btda\",\n \"balanceTagDevRatio\": \"btdr\",\n \"balanceTagProHolders\": \"btph\",\n \"balanceTagProAmount\": \"btpa\",\n \"balanceTagProRatio\": \"btpr\",\n \"balanceTagInsiderHolders\": \"btih\",\n \"balanceTagInsiderAmount\": \"btia\",\n \"balanceTagInsiderRatio\": \"btir\",\n \"balanceTagSmartHolders\": \"btsmh\",\n \"balanceTagSmartAmount\": \"btsma\",\n \"balanceTagSmartRatio\": \"btsmr\",\n \"balanceTagKolHolders\": \"btkh\",\n \"balanceTagKolAmount\": \"btka\",\n \"balanceTagKolRatio\": \"btkr\",\n \"balanceTagPhishingHolders\": \"btphh\",\n \"balanceTagPhishingAmount\": \"btpha\",\n \"balanceTagPhishingRatio\": \"btphr\",\n \"balanceTagBluechipHolders\": \"btblh\",\n \"balanceTagBluechipAmount\": \"btbla\",\n \"balanceTagBluechipRatio\": \"btblr\",\n \"balanceTagRatHolders\": \"btrh\",\n \"balanceTagRatAmount\": \"btra\",\n \"balanceTagRatRatio\": \"btrr\",\n \"timestamp\": \"ts\",\n },\n\n // New token subscription fields\n \"subscribeNewToken\": {\n \"tokenAddress\": \"a\",\n \"name\": \"n\",\n \"symbol\": \"s\",\n \"createdAtMs\": \"cts\",\n },\n\n // Token supply subscription fields\n \"subscribeTokenSupply\": {\n \"tokenAddress\": \"a\",\n \"supply\": \"s\",\n \"timestamp\": \"ts\",\n },\n\n // Dex pool balance subscription fields\n \"subscribeDexPoolBalance\": {\n \"poolAddress\": \"a\",\n \"tokenAAddress\": \"taa\",\n \"tokenALiquidityInUsd\": \"taliu\",\n \"tokenBAddress\": \"tba\",\n \"tokenBLiquidityInUsd\": \"tbliu\",\n },\n\n // Token liquidity subscription fields\n \"subscribeTokenLiquidity\": {\n \"tokenAddress\": \"a\",\n \"metricType\": \"t\",\n \"value\": \"v\",\n \"timestamp\": \"ts\",\n },\n\n // New token metadata subscription fields\n \"subscribeNewTokensMetadata\": {\n \"tokenAddress\": \"a\",\n \"name\": \"n\",\n \"symbol\": \"s\",\n \"imageUrl\": \"iu\",\n \"description\": \"de\",\n \"socialMedia\": \"sm\",\n \"createdAtMs\": \"cts\",\n },\n\n // Token trades subscription fields\n \"subscribeTokenTrades\": {\n \"tokenAddress\": \"a\",\n \"timestamp\": \"t\",\n \"kind\": \"k\",\n \"buyAmount\": \"ba\",\n \"buyAmountInUsd\": \"baiu\",\n \"buyTokenAddress\": \"btma\",\n \"buyTokenName\": \"btn\",\n \"buyTokenSymbol\": \"bts\",\n \"buyWalletAddress\": \"bwa\",\n \"sellAmount\": \"sa\",\n \"sellAmountInUsd\": \"saiu\",\n \"sellTokenAddress\": \"stma\",\n \"sellTokenName\": \"stn\",\n \"sellTokenSymbol\": \"sts\",\n \"sellWalletAddress\": \"swa\",\n \"txHash\": \"h\",\n },\n\n // Wallet token PnL subscription fields\n \"subscribeWalletPnl\": {\n \"walletAddress\": \"a\",\n \"tokenAddress\": \"ta\",\n \"tokenPriceInUsd\": \"tpiu\",\n \"timestamp\": \"t\",\n \"opentime\": \"ot\",\n \"lasttime\": \"lt\",\n \"closetime\": \"ct\",\n \"buyAmount\": \"ba\",\n \"buyAmountInUsd\": \"baiu\",\n \"buyCount\": \"bs\",\n \"buyCount30d\": \"bs30d\",\n \"buyCount7d\": \"bs7d\",\n \"sellAmount\": \"sa\",\n \"sellAmountInUsd\": \"saiu\",\n \"sellCount\": \"ss\",\n \"sellCount30d\": \"ss30d\",\n \"sellCount7d\": \"ss7d\",\n \"heldDurationTimestamp\": \"hdts\",\n \"averageBuyPriceInUsd\": \"abpiu\",\n \"averageSellPriceInUsd\": \"aspiu\",\n \"unrealizedProfitInUsd\": \"upiu\",\n \"unrealizedProfitRatio\": \"upr\",\n \"realizedProfitInUsd\": \"rpiu\",\n \"realizedProfitRatio\": \"rpr\",\n \"totalRealizedProfitInUsd\": \"trpiu\",\n \"totalRealizedProfitRatio\": \"trr\",\n },\n} as const;\n\n/**\n * Get field mappings for a specific subscription method\n * @param methodName - The name of the subscription method\n * @returns Field mapping object for the method, or empty object if not found\n */\nexport function getFieldMappings(methodName: string): FieldMapping {\n return CEL_FIELD_MAPPINGS[methodName] || {};\n}\n\n/**\n * Replace long field names with short field names in a filter expression\n * Automatically adds meta. prefix if not present\n * @param filter - Original filter expression\n * @param methodName - The name of the subscription method\n * @returns Filter expression with short field names and meta. prefix\n */\nexport function replaceFilterFields(filter: string, methodName: string): string {\n if (!filter) {return filter}\n \n const fieldMappings = getFieldMappings(methodName);\n let result = filter;\n \n // Replace all long field names with short field names\n for (const [longField, shortField] of Object.entries(fieldMappings)) {\n // Handle both cases: with and without meta. prefix\n const patterns = [\n // Pattern 1: fieldName (without meta. prefix)\n new RegExp(`\\\\b${longField}\\\\b`, \"g\"),\n // Pattern 2: meta.fieldName (with meta. prefix)\n new RegExp(`\\\\bmeta\\\\.${longField}\\\\b`, \"g\"),\n ];\n \n patterns.forEach((pattern) => {\n result = result.replace(pattern, `meta.${shortField}`);\n });\n }\n \n return result;\n}\n\n/**\n * Type-safe field mapping for specific subscription methods\n */\nexport type SubscriptionMethod = keyof typeof CEL_FIELD_MAPPINGS;\n\n/**\n * Get available field names for a specific subscription method\n * @param methodName - The name of the subscription method\n * @returns Array of available field names\n */\nexport function getAvailableFields(methodName: string): string[] {\n const mappings = getFieldMappings(methodName);\n return Object.keys(mappings);\n}\n","import { Resolution } from \"../openapi\";\n\n\n\nexport enum TokenActivityType {\n Sell = \"sell\",\n Buy = \"buy\",\n AddLiquidity = \"add_liquidity\",\n RemoveLiquidity = \"remove_liquidity\",\n}\n\nexport enum ChannelType {\n New = \"new\",\n HOT = \"trending\",\n US_STOCKS = \"us_stocks\",\n COMPLETED = \"completed\",\n GRADUATED = \"graduated\",\n}\n\nexport enum MetricType {\n LIQUIDITY_IN_USD = \"liquidity_in_usd\",\n MIGRATED_RATIO = \"migrated_ratio\",\n}\n\nexport interface TokenActivity {\n address: string;\n priceUsd: string;\n amount: string;\n type: TokenActivityType;\n // maker: string;\n txHash: string;\n timestamp: number;\n}\n\nexport interface TokenStat {\n address: string;\n timestamp: number;\n buys1m?: number;\n sells1m?: number;\n buyers1m?: number;\n sellers1m?: number;\n buyVolumeInUsd1m?: string;\n sellVolumeInUsd1m?: string;\n price1m?: string;\n openInUsd1m?: string;\n closeInUsd1m?: string;\n\n buys5m?: number;\n sells5m?: number;\n buyers5m?: number;\n sellers5m?: number;\n buyVolumeInUsd5m?: string;\n sellVolumeInUsd5m?: string;\n price5m?: string;\n openInUsd5m?: string;\n closeInUsd5m?: string;\n\n buys15m?: number;\n sells15m?: number;\n buyers15m?: number;\n sellers15m?: number;\n buyVolumeInUsd15m?: string;\n sellVolumeInUsd15m?: string;\n price15m?: string;\n openInUsd15m?: string;\n closeInUsd15m?: string;\n\n buys30m?: number;\n sells30m?: number;\n buyers30m?: number;\n sellers30m?: number;\n buyVolumeInUsd30m?: string;\n sellVolumeInUsd30m?: string;\n price30m?: string;\n openInUsd30m?: string;\n closeInUsd30m?: string;\n\n buys1h?: number;\n sells1h?: number;\n buyers1h?: number;\n sellers1h?: number;\n buyVolumeInUsd1h?: string;\n sellVolumeInUsd1h?: string;\n price1h?: string;\n openInUsd1h?: string;\n closeInUsd1h?: string;\n\n buys4h?: number;\n sells4h?: number;\n buyers4h?: number;\n sellers4h?: number;\n buyVolumeInUsd4h?: string;\n sellVolumeInUsd4h?: string;\n price4h?: string;\n openInUsd4h?: string;\n closeInUsd4h?: string;\n\n buys24h?: number;\n sells24h?: number;\n buyers24h?: number;\n sellers24h?: number;\n buyVolumeInUsd24h?: string;\n sellVolumeInUsd24h?: string;\n price24h?: string;\n openInUsd24h?: string;\n closeInUsd24h?: string;\n\n price?: string;\n}\n\nexport interface TokenHolder {\n tokenAddress: string;\n holders?: number;\n top100HoldersAmount?: string;\n top50HoldersAmount?: string;\n top10HoldersAmount?: string;\n top100Holders?: number;\n top50Holders?: number;\n top10Holders?: number;\n top100HoldersRatio?: string;\n top50HoldersRatio?: string;\n top10HoldersRatio?: string;\n creatorsHolders?: number;\n creatorsAmount?: string;\n creatorsRatio?: string;\n balanceTagFreshHolders?: number;\n balanceTagFreshAmount?: string;\n balanceTagFreshRatio?: string;\n balanceTagSandwichHolders?: number;\n balanceTagSandwichAmount?: string;\n balanceTagSandwichRatio?: string;\n balanceTagBundleHolders?: number;\n balanceTagBundleAmount?: string;\n balanceTagBundleRatio?: string;\n balanceTagSniperHolders?: number;\n balanceTagSniperAmount?: string;\n balanceTagSniperRatio?: string;\n balanceTagDevHolders?: number;\n balanceTagDevAmount?: string;\n balanceTagDevRatio?: string;\n balanceTagProHolders?: number;\n balanceTagProAmount?: string;\n balanceTagProRatio?: string;\n balanceTagInsiderHolders?: number;\n balanceTagInsiderAmount?: string;\n balanceTagInsiderRatio?: string;\n balanceTagSmartHolders?: number;\n balanceTagSmartAmount?: string;\n balanceTagSmartRatio?: string;\n balanceTagKolHolders?: number;\n balanceTagKolAmount?: string;\n balanceTagKolRatio?: string;\n balanceTagPhishingHolders?: number;\n balanceTagPhishingAmount?: string;\n balanceTagPhishingRatio?: string;\n balanceTagBluechipHolders?: number;\n balanceTagBluechipAmount?: string;\n balanceTagBluechipRatio?: string;\n balanceTagRatHolders?: number;\n balanceTagRatAmount?: string;\n balanceTagRatRatio?: string;\n timestamp: number;\n}\n\nexport interface WalletBalance {\n walletAddress: string;\n tokenAddress: string;\n tokenPriceInUsd: string;\n balance: string;\n timestamp: number;\n}\n\nexport interface WalletPnl {\n walletAddress: string;\n buys: number;\n buyAmount: string;\n buyAmountInUsd: string;\n averageBuyPriceInUsd: string;\n sellAmount: string;\n sellAmountInUsd: string;\n sells: number;\n wins: number;\n winRatio: string;\n pnlInUsd: string;\n averagePnlInUsd: string;\n pnlRatio: string;\n profitableDays: number;\n losingDays: number;\n tokens: number;\n resolution: string;\n}\n\nexport interface NewToken {\n tokenAddress: string;\n name: string;\n symbol: string;\n decimals?: number;\n launchFrom?: DexProtocol;\n createdAtMs: number;\n}\n\nexport interface TokenSupply {\n tokenAddress: string;\n supply?: string;\n marketCapInUsd?: string;\n timestamp: number;\n}\n\nexport interface DexPoolBalance {\n poolAddress: string;\n tokenAAddress: string;\n tokenALiquidityInUsd: string;\n tokenBAddress: string;\n tokenBLiquidityInUsd: string;\n}\n\nexport interface TokenLiquidity {\n tokenAddress: string;\n metricType: MetricType;\n value: string;\n timestamp: number;\n}\n\nexport interface DexProtocol {\n programAddress?: string;\n protocolFamily?: string;\n protocolName?: string;\n}\n\nexport interface TokenBondingCurve {\n tokenAddress?: string;\n progressRatio?: string;\n}\n\nexport interface TokenMetadata {\n tokenAddress: string;\n name?: string;\n decimals?: number;\n symbol?: string;\n imageUrl?: string;\n description?: string;\n socialMedia?: socialMedia;\n createdAtMs?: number;\n launchFrom?: DexProtocol;\n migratedTo?: DexProtocol;\n}\n\nexport interface socialMedia {\n twitter?: string;\n telegram?: string;\n website?: string;\n tiktok?: string;\n discord?: string;\n facebook?: string;\n github?: string;\n instagram?: string;\n linkedin?: string;\n medium?: string;\n reddit?: string;\n youtube?: string;\n bitbucket?: string;\n}\n\nexport interface TokenCandle {\n open: string;\n close: string;\n high: string;\n low: string;\n volume: string;\n resolution: Resolution;\n time: number;\n number: number;\n}\n\nexport interface TradeActivity {\n tokenAddress: string;\n timestamp: number;\n kind: string;\n buyAmount: string;\n buyAmountInUsd: string;\n buyTokenAddress: string;\n buyTokenName: string;\n buyTokenSymbol: string;\n buyWalletAddress: string;\n sellAmount: string;\n sellAmountInUsd: string;\n sellTokenAddress: string;\n sellTokenName: string;\n sellTokenSymbol: string;\n sellWalletAddress: string;\n txHash: string;\n}\n\nexport interface WalletTokenPnl {\n walletAddress: string;\n tokenAddress: string;\n tokenPriceInUsd: string;\n timestamp: number;\n opentime: number;\n lasttime: number;\n closetime: number;\n buyAmount: string;\n buyAmountInUsd: string;\n buyCount: number;\n buyCount30d: number;\n buyCount7d: number;\n sellAmount: string;\n sellAmountInUsd: string;\n sellCount: number;\n sellCount30d: number;\n sellCount7d: number;\n heldDurationTimestamp: number;\n averageBuyPriceInUsd: string;\n averageSellPriceInUsd: string;\n unrealizedProfitInUsd: string;\n unrealizedProfitRatio: string;\n realizedProfitInUsd: string;\n realizedProfitRatio: string;\n totalRealizedProfitInUsd: string;\n totalRealizedProfitRatio: string;\n}\n\nexport enum RankingType {\n NEW = \"new\",\n HOT = \"trending\",\n STOCKS = \"stocks\",\n FINALSTRETCH = \"completed\",\n MIGRATED = \"graduated\",\n}\n\nexport enum Dex {\n PUMP_FUN = \"pump_fun\",\n RAYDIUM_LAUNCHPAD = \"raydium_launchpad\",\n METEOR_DYNAMIC_BOUNDING_CURVE = \"meteora_dynamic_bounding_curve\",\n BONK_FUN = \"bonk_fun\",\n BOOP_FUN = \"boop_fun\",\n MOONIT_FUN = \"moonit_fun\",\n}\n\nexport interface RankingTokenList {\n metadata?: TokenMetadata;\n holder?: TokenHolder;\n supply?: TokenSupply;\n stat?: TokenStat;\n bondingCurve?: TokenBondingCurve;\n}"],"mappings":"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","names":["TokenActivityType","ChannelType","MetricType","RankingType","Dex"]}
1
+ {"version":3,"sources":["../../src/stream/stream.ts","../../src/stream/stream.fields.ts","../../src/stream/stream.model.ts"],"sourcesContent":["import { Centrifuge, ConnectionTokenContext } from \"@chainstream-io/centrifuge\";\nimport { DexRequestContext } from \"..\";\nimport { Resolution } from \"../openapi\";\nimport {\n DexPoolBalance,\n NewToken,\n TokenMetadata,\n TokenHolder,\n TokenStat,\n TokenLiquidity,\n WalletBalance,\n TokenSupply,\n WalletPnl,\n ChannelType,\n TokenCandle,\n TradeActivity,\n WalletTokenPnl,\n RankingType,\n Dex,\n RankingTokenList,\n TokenBondingCurve,\n} from \"./stream.model\";\nimport { replaceFilterFields } from \"./stream.fields\";\n\nexport interface Unsubscrible {\n unsubscribe(): void;\n}\n\nexport class StreamApi {\n private realtimeClient: Centrifuge;\n private listenersMap: Map<string, Set<(data: any) => void>>;\n\n constructor(context: DexRequestContext) {\n // Build WebSocket URL with token\n const realtimeEndpoint = this.buildWsUrl(context.streamUrl, context.accessToken);\n\n this.realtimeClient = new Centrifuge(realtimeEndpoint, {\n getToken: async (_ctx: ConnectionTokenContext) => {\n return typeof context.accessToken === \"string\"\n ? context.accessToken\n : await context.accessToken.getToken();\n },\n });\n\n this.realtimeClient\n .on(\"connected\", () => {\n console.log(\"[streaming] connected\");\n })\n .on(\"disconnected\", (ctx) => {\n console.warn(\"[streaming] disconnected\", ctx);\n })\n .on(\"error\", (err) => {\n console.error(\"[streaming] error: \", err);\n });\n\n this.listenersMap = new Map();\n }\n\n /**\n * Build WebSocket URL with token as query parameter\n */\n private buildWsUrl(endpoint: string, accessToken: string | object): string {\n const url = new URL(endpoint);\n if (typeof accessToken === \"string\") {\n url.searchParams.set('token', accessToken);\n }\n return url.toString();\n }\n\n connect() {\n this.realtimeClient.connect();\n }\n\n /**\n * Start batching commands for efficient bulk operations\n * All subscription commands after this call will be batched until stopBatching is called\n */\n startBatching() {\n this.realtimeClient.startBatching();\n }\n\n /**\n * Stop batching and flush all collected commands to the server\n * This will send all batched subscription commands in a single network request\n */\n stopBatching() {\n this.realtimeClient.stopBatching();\n }\n\n /**\n * Batch subscribe method that accepts a function containing subscription calls\n * All subscription methods called within the function will be batched\n * @param batchFunction Function containing subscription method calls\n * @returns Array of unsubscribe functions\n */\n batchSubscribe(batchFunction: () => Unsubscrible[]): Unsubscrible[] {\n // Start batching commands\n this.startBatching();\n\n // Execute the batch function (all subscription calls will be batched)\n const unsubscribles = batchFunction();\n\n // Stop batching and flush all commands\n this.stopBatching();\n\n return unsubscribles;\n }\n\n /**\n * Batch unsubscribe method that accepts an array of unsubscribe functions\n * All unsubscribe calls will be executed at once\n * @param unsubscribles Array of unsubscribe functions to execute\n */\n batchUnsubscribe(unsubscribles: Unsubscrible[]): void {\n if (!unsubscribles || unsubscribles.length === 0) {\n return;\n }\n\n // Execute all unsubscribe calls\n unsubscribles.forEach((unsub) => {\n if (unsub && typeof unsub.unsubscribe === \"function\") {\n unsub.unsubscribe();\n }\n });\n }\n\n subscribe<T = any>(channel: string, fn: (data: T) => void, filter?: string, methodName?: string): Unsubscrible {\n let sub = this.realtimeClient.getSubscription(channel);\n let listeners = this.listenersMap.get(channel);\n\n if (!sub) {\n listeners = new Set();\n this.listenersMap.set(channel, listeners);\n\n console.log(\"[xrealtime] create new sub: \", channel);\n\n // Process filter expression with method-specific field mappings\n const processedFilter = filter && methodName ? replaceFilterFields(filter, methodName) : filter;\n\n sub = this.realtimeClient.newSubscription(channel, {\n delta: \"fossil\",\n ...(processedFilter && { filter: processedFilter }),\n });\n\n sub\n .on(\"subscribed\", () => {\n console.log(\"[xrealtime] subscribed\", channel);\n })\n .on(\"unsubscribed\", () => {\n console.log(\"[xrealtime] unsubscribed\", channel);\n })\n .on(\"publication\", (ctx) => {\n listeners?.forEach((it) => it(ctx.data));\n })\n .subscribe();\n }\n\n listeners?.add(fn);\n\n return new StreamUnsubscrible<T>(this, channel, fn);\n }\n\n unsubscribe<T = any>(channel: string, fn: (data: T) => void) {\n const listeners = this.listenersMap.get(channel);\n if (!listeners) {\n return;\n }\n\n listeners.delete(fn);\n console.log(\"unsubscribe, remain listeners: \", listeners.size);\n\n if (listeners.size === 0) {\n console.log(\"unsubscribe channel: \", channel);\n\n const sub = this.realtimeClient.getSubscription(channel);\n if (sub) {\n sub.unsubscribe();\n this.realtimeClient.removeSubscription(sub);\n }\n\n this.listenersMap.delete(channel);\n }\n }\n\n private formatScientificNotation(value: any): string {\n if (value === null || value === undefined) {\n return \"0\";\n }\n\n const strValue = value.toString();\n if (strValue.includes(\"e-\") || strValue.includes(\"E-\")) {\n return Number(value)\n .toFixed(20)\n .replace(/\\.?0+$/, \"\");\n }\n\n return strValue;\n }\n\n subscribeTokenCandles({\n chain,\n tokenAddress,\n resolution,\n callback,\n filter,\n }: {\n chain: string;\n tokenAddress: string;\n resolution: Resolution;\n callback: (data: TokenCandle) => void;\n filter?: string;\n }): Unsubscrible {\n const channel = `dex-candle:${chain}_${tokenAddress}_${resolution}`;\n return this.subscribe(channel, (data: any) => {\n callback({\n open: data.o,\n close: data.c,\n high: data.h,\n low: data.l,\n volume: data.v,\n resolution: data.r,\n time: data.t,\n number: data.n,\n });\n }, filter, \"subscribeTokenCandles\");\n }\n\n subscribeTokenStats({\n chain,\n tokenAddress,\n callback,\n filter,\n }: {\n chain: string;\n tokenAddress: string;\n callback: (data: TokenStat) => void;\n filter?: string;\n }): Unsubscrible {\n const channel = `dex-token-stats:${chain}_${tokenAddress}`;\n return this.subscribe(channel, (data: any) =>\n callback({\n address: data.a,\n timestamp: data.t,\n buys1m: data.b1m,\n sells1m: data.s1m,\n buyers1m: data.be1m,\n sellers1m: data.se1m,\n buyVolumeInUsd1m: this.formatScientificNotation(data.bviu1m),\n sellVolumeInUsd1m: this.formatScientificNotation(data.sviu1m),\n price1m: this.formatScientificNotation(data.p1m),\n openInUsd1m: this.formatScientificNotation(data.oiu1m),\n closeInUsd1m: this.formatScientificNotation(data.ciu1m),\n\n buys5m: data.b5m,\n sells5m: data.s5m,\n buyers5m: data.be5m,\n sellers5m: data.se5m,\n buyVolumeInUsd5m: this.formatScientificNotation(data.bviu5m),\n sellVolumeInUsd5m: this.formatScientificNotation(data.sviu5m),\n price5m: this.formatScientificNotation(data.p5m),\n openInUsd5m: this.formatScientificNotation(data.oiu5m),\n closeInUsd5m: this.formatScientificNotation(data.ciu5m),\n\n buys15m: data.b15m,\n sells15m: data.s15m,\n buyers15m: data.be15m,\n sellers15m: data.se15m,\n buyVolumeInUsd15m: this.formatScientificNotation(data.bviu15m),\n sellVolumeInUsd15m: this.formatScientificNotation(data.sviu15m),\n price15m: this.formatScientificNotation(data.p15m),\n openInUsd15m: this.formatScientificNotation(data.oiu15m),\n closeInUsd15m: this.formatScientificNotation(data.ciu15m),\n\n buys30m: data.b30m,\n sells30m: data.s30m,\n buyers30m: data.be30m,\n sellers30m: data.se30m,\n buyVolumeInUsd30m: this.formatScientificNotation(data.bviu30m),\n sellVolumeInUsd30m: this.formatScientificNotation(data.sviu30m),\n price30m: this.formatScientificNotation(data.p30m),\n openInUsd30m: this.formatScientificNotation(data.oiu30m),\n closeInUsd30m: this.formatScientificNotation(data.ciu30m),\n\n buys1h: data.b1h,\n sells1h: data.s1h,\n buyers1h: data.be1h,\n sellers1h: data.se1h,\n buyVolumeInUsd1h: this.formatScientificNotation(data.bviu1h),\n sellVolumeInUsd1h: this.formatScientificNotation(data.sviu1h),\n price1h: this.formatScientificNotation(data.p1h),\n openInUsd1h: this.formatScientificNotation(data.oiu1h),\n closeInUsd1h: this.formatScientificNotation(data.ciu1h),\n\n buys4h: data.b4h,\n sells4h: data.s4h,\n buyers4h: data.be4h,\n sellers4h: data.se4h,\n buyVolumeInUsd4h: this.formatScientificNotation(data.bviu4h),\n sellVolumeInUsd4h: this.formatScientificNotation(data.sviu4h),\n price4h: this.formatScientificNotation(data.p4h),\n openInUsd4h: this.formatScientificNotation(data.oiu4h),\n closeInUsd4h: this.formatScientificNotation(data.ciu4h),\n\n buys24h: data.b24h,\n sells24h: data.s24h,\n buyers24h: data.be24h,\n sellers24h: data.se24h,\n buyVolumeInUsd24h: this.formatScientificNotation(data.bviu24h),\n sellVolumeInUsd24h: this.formatScientificNotation(data.sviu24h),\n price24h: this.formatScientificNotation(data.p24h),\n openInUsd24h: this.formatScientificNotation(data.oiu24h),\n closeInUsd24h: this.formatScientificNotation(data.ciu24h),\n\n price: this.formatScientificNotation(data.p),\n }), filter, \"subscribeTokenStats\");\n }\n\n subscribeTokenHolders({\n chain,\n tokenAddress,\n callback,\n filter,\n }: {\n chain: string;\n tokenAddress: string;\n callback: (data: TokenHolder) => void;\n filter?: string;\n }): Unsubscrible {\n const channel = `dex-token-holding:${chain}_${tokenAddress}`;\n return this.subscribe(channel, (data: any) =>\n callback({\n tokenAddress: data.a,\n holders: data.h,\n top100HoldersAmount: this.formatScientificNotation(data.t100a),\n top50HoldersAmount: this.formatScientificNotation(data.t50a),\n top10HoldersAmount: this.formatScientificNotation(data.t10a),\n top100Holders: data.t100h,\n top50Holders: data.t50h,\n top10Holders: data.t10h,\n top100HoldersRatio: this.formatScientificNotation(data.t100r),\n top50HoldersRatio: this.formatScientificNotation(data.t50r),\n top10HoldersRatio: this.formatScientificNotation(data.t10r),\n creatorsHolders: data.ch,\n creatorsAmount: this.formatScientificNotation(data.ca),\n creatorsRatio: this.formatScientificNotation(data.cr),\n balanceTagFreshHolders: data.btfh,\n balanceTagFreshAmount: this.formatScientificNotation(data.btfa),\n balanceTagFreshRatio: this.formatScientificNotation(data.btfr),\n balanceTagSandwichHolders: data.btsh,\n balanceTagSandwichAmount: this.formatScientificNotation(data.btsa),\n balanceTagSandwichRatio: this.formatScientificNotation(data.btsr),\n balanceTagBundleHolders: data.btbh,\n balanceTagBundleAmount: this.formatScientificNotation(data.btba),\n balanceTagBundleRatio: this.formatScientificNotation(data.btbr),\n balanceTagSniperHolders: data.btsnh,\n balanceTagSniperAmount: this.formatScientificNotation(data.btsna),\n balanceTagSniperRatio: this.formatScientificNotation(data.btsnr),\n balanceTagDevHolders: data.btdh,\n balanceTagDevAmount: this.formatScientificNotation(data.btda),\n balanceTagDevRatio: this.formatScientificNotation(data.btdr),\n balanceTagProHolders: data.btph,\n balanceTagProAmount: this.formatScientificNotation(data.btpa),\n balanceTagProRatio: this.formatScientificNotation(data.btpr),\n balanceTagInsiderHolders: data.btih,\n balanceTagInsiderAmount: this.formatScientificNotation(data.btia),\n balanceTagInsiderRatio: this.formatScientificNotation(data.btir),\n balanceTagSmartHolders: data.btsmh,\n balanceTagSmartAmount: this.formatScientificNotation(data.btsma),\n balanceTagSmartRatio: this.formatScientificNotation(data.btsmr),\n balanceTagKolHolders: data.btkh,\n balanceTagKolAmount: this.formatScientificNotation(data.btka),\n balanceTagKolRatio: this.formatScientificNotation(data.btkr),\n balanceTagPhishingHolders: data.btphh,\n balanceTagPhishingAmount: this.formatScientificNotation(data.btpha),\n balanceTagPhishingRatio: this.formatScientificNotation(data.btphr),\n balanceTagBluechipHolders: data.btblh,\n balanceTagBluechipAmount: this.formatScientificNotation(data.btbla),\n balanceTagBluechipRatio: this.formatScientificNotation(data.btblr),\n balanceTagRatHolders: data.btrh,\n balanceTagRatAmount: this.formatScientificNotation(data.btra),\n balanceTagRatRatio: this.formatScientificNotation(data.btrr),\n timestamp: data.ts,\n }), filter, \"subscribeTokenHolders\");\n }\n\n subscribeNewToken({\n chain,\n callback,\n filter,\n }: {\n chain: string;\n callback: (data: NewToken) => void;\n filter?: string;\n }): Unsubscrible {\n const channel = `dex-new-token:${chain}`;\n return this.subscribe(channel, (data: any) => {\n const result: any = {\n tokenAddress: data.a,\n name: data.n,\n symbol: data.s,\n createdAtMs: data.cts,\n };\n \n if (data.dec) {\n result.decimals = data.dec;\n }\n \n if (data.lf) {\n result.launchFrom = {};\n if (data.lf.pa) { result.launchFrom.programAddress = data.lf.pa }\n if (data.lf.pf) { result.launchFrom.protocolFamily = data.lf.pf }\n if (data.lf.pn) { result.launchFrom.protocolName = data.lf.pn }\n }\n \n callback(result);\n }, filter, \"subscribeNewToken\");\n }\n\n subscribeNewTokensMetadata({\n chain,\n callback,\n }: {\n chain: string;\n callback: (data: TokenMetadata[]) => void;\n }): Unsubscrible {\n const channel = `dex-new-tokens-metadata:${chain}`;\n return this.subscribe(channel, (data: any[]) =>\n callback(\n data.map(\n (it: any) =>\n ({\n tokenAddress: it.a,\n name: it.n,\n symbol: it.s,\n imageUrl: it.iu,\n description: it.de,\n socialMedia: (() => {\n const socialMedia: any = {};\n if (it.sm?.tw) { socialMedia.twitter = it.sm.tw }\n if (it.sm?.tg) { socialMedia.telegram = it.sm.tg }\n if (it.sm?.w) { socialMedia.website = it.sm.w }\n if (it.sm?.tt) { socialMedia.tiktok = it.sm.tt }\n if (it.sm?.dc) { socialMedia.discord = it.sm.dc }\n if (it.sm?.fb) { socialMedia.facebook = it.sm.fb }\n if (it.sm?.gh) { socialMedia.github = it.sm.gh }\n if (it.sm?.ig) { socialMedia.instagram = it.sm.ig }\n if (it.sm?.li) { socialMedia.linkedin = it.sm.li }\n if (it.sm?.md) { socialMedia.medium = it.sm.md }\n if (it.sm?.rd) { socialMedia.reddit = it.sm.rd }\n if (it.sm?.yt) { socialMedia.youtube = it.sm.yt }\n if (it.sm?.bb) { socialMedia.bitbucket = it.sm.bb }\n return socialMedia;\n })(),\n createdAtMs: it.cts,\n })\n )\n )\n );\n }\n\n // subscribeNewTokens({\n // chain,\n // callback,\n // }: {\n // chain: string;\n // callback: (data: NewToken[]) => void;\n // }): Unsubscrible {\n // const channel = `dex-new-tokens:${chain}`;\n // return this.subscribe(channel, (data: any[]) =>\n // callback(\n // data.map(\n // (it: any) =>\n // ({\n // tokenAddress: it.a,\n // name: it.n,\n // symbol: it.s,\n // description: it.de,\n // createdAtMs: it.cts,\n // }) as NewToken\n // )\n // )\n // );\n // }\n\n subscribeTokenSupply({\n chain,\n tokenAddress,\n callback,\n filter,\n }: {\n chain: string;\n tokenAddress: string;\n callback: (data: TokenSupply) => void;\n filter?: string;\n }): Unsubscrible {\n const channel = `dex-token-supply:${chain}_${tokenAddress}`;\n return this.subscribe(channel, (data: any) =>\n callback({\n tokenAddress: data.a,\n supply: data.s,\n marketCapInUsd: data.mc,\n timestamp: data.ts,\n }), filter, \"subscribeTokenSupply\");\n }\n\n subscribeTokenLiquidity({\n chain,\n tokenAddress,\n callback,\n filter,\n }: {\n chain: string;\n tokenAddress: string;\n callback: (data: TokenLiquidity) => void;\n filter?: string;\n }): Unsubscrible {\n const channel = `dex-token-general-stat-num:${chain}_${tokenAddress}`;\n return this.subscribe(channel, (data: any) =>\n callback({\n tokenAddress: data.a,\n metricType: data.t,\n value: data.v,\n timestamp: data.ts,\n }), filter, \"subscribeTokenLiquidity\");\n }\n\n subscribeRankingTokensLiquidity({\n chain,\n channelType,\n callback,\n }: {\n chain: string;\n channelType: ChannelType;\n callback: (data: TokenLiquidity[]) => void;\n }): Unsubscrible {\n const channel = `dex-ranking-token-general_stat_num-list:${chain}_${channelType}`;\n return this.subscribe(channel, (data: any[]) =>\n callback(\n data?.map(\n (it: any) =>\n ({\n tokenAddress: it.a,\n metricType: it.t,\n value: it.v,\n timestamp: it.ts,\n }) as TokenLiquidity\n )\n )\n );\n }\n\n subscribeRankingTokensList({\n chain,\n ranking_type,\n dex,\n callback,\n }: {\n chain: string;\n ranking_type: RankingType;\n dex?: Dex;\n callback: (data: RankingTokenList[]) => void;\n }): Unsubscrible {\n const channel = dex\n ? `dex-ranking-list:${chain}_${ranking_type}_${dex}`\n : `dex-ranking-list:${chain}_${ranking_type}`;\n return this.subscribe(channel, (data: any[]) =>\n callback(\n data?.map((item: any) => {\n const result: RankingTokenList = {} as RankingTokenList;\n\n // TokenMetadata (t)\n if (item.t) {\n result.metadata = {\n tokenAddress: item.t.a,\n };\n if (item.t.n) { result.metadata.name = item.t.n }\n if (item.t.s) { result.metadata.symbol = item.t.s }\n if (item.t.iu) { result.metadata.imageUrl = item.t.iu }\n if (item.t.de) { result.metadata.description = item.t.de }\n if (item.t.d) { result.metadata.decimals = item.t.dec }\n if (item.t.cts) { result.metadata.createdAtMs = item.t.cts }\n if (item.t.lf) {\n result.metadata.launchFrom = {};\n if (item.t.lf.pa) { result.metadata.launchFrom.programAddress = item.t.lf.pa }\n if (item.t.lf.pf) { result.metadata.launchFrom.protocolFamily = item.t.lf.pf }\n if (item.t.lf.pn) { result.metadata.launchFrom.protocolName = item.t.lf.pn }\n }\n if (item.t.mt) {\n result.metadata.migratedTo = {};\n if (item.t.mt.pa) { result.metadata.migratedTo.programAddress = item.t.mt.pa }\n if (item.t.mt.pf) { result.metadata.migratedTo.protocolFamily = item.t.mt.pf }\n if (item.t.mt.pn) { result.metadata.migratedTo.protocolName = item.t.mt.pn }\n }\n if (item.t.sm) {\n result.metadata.socialMedia = {};\n if (item.t.sm.tw) { result.metadata.socialMedia.twitter = item.t.sm.tw }\n if (item.t.sm.tg) { result.metadata.socialMedia.telegram = item.t.sm.tg }\n if (item.t.sm.w) { result.metadata.socialMedia.website = item.t.sm.w }\n if (item.t.sm.tt) { result.metadata.socialMedia.tiktok = item.t.sm.tt }\n if (item.t.sm.dc) { result.metadata.socialMedia.discord = item.t.sm.dc }\n if (item.t.sm.fb) { result.metadata.socialMedia.facebook = item.t.sm.fb }\n if (item.t.sm.gh) { result.metadata.socialMedia.github = item.t.sm.gh }\n if (item.t.sm.ig) { result.metadata.socialMedia.instagram = item.t.sm.ig }\n if (item.t.sm.li) { result.metadata.socialMedia.linkedin = item.t.sm.li }\n if (item.t.sm.md) { result.metadata.socialMedia.medium = item.t.sm.md }\n if (item.t.sm.rd) { result.metadata.socialMedia.reddit = item.t.sm.rd }\n if (item.t.sm.yt) { result.metadata.socialMedia.youtube = item.t.sm.yt }\n if (item.t.sm.bb) { result.metadata.socialMedia.bitbucket = item.t.sm.bb }\n }\n if (item.t.cts) { result.metadata.createdAtMs = item.t.cts }\n }\n\n // TokenBondingCurve (bc)\n if (item.bc) {\n result.bondingCurve = {};\n if (item.bc.pr) { result.bondingCurve.progressRatio = this.formatScientificNotation(item.bc.pr) }\n }\n\n // TokenHolder (h)\n if (item.h) {\n result.holder = {\n tokenAddress: item.h.a,\n timestamp: item.h.ts || 0,\n };\n if (item.h.h) { result.holder.holders = item.h.h }\n if (item.h.t100a) { result.holder.top100HoldersAmount = this.formatScientificNotation(item.h.t100a) }\n if (item.h.t50a) { result.holder.top50HoldersAmount = this.formatScientificNotation(item.h.t50a) }\n if (item.h.t10a) { result.holder.top10HoldersAmount = this.formatScientificNotation(item.h.t10a) }\n if (item.h.t100h) { result.holder.top100Holders = item.h.t100h }\n if (item.h.t50h) { result.holder.top50Holders = item.h.t50h }\n if (item.h.t10h) { result.holder.top10Holders = item.h.t10h }\n if (item.h.t100r) { result.holder.top100HoldersRatio = this.formatScientificNotation(item.h.t100r) }\n if (item.h.t50r) { result.holder.top50HoldersRatio = this.formatScientificNotation(item.h.t50r) }\n if (item.h.t10r) { result.holder.top10HoldersRatio = this.formatScientificNotation(item.h.t10r) }\n if (item.h.ch) { result.holder.creatorsHolders = item.h.ch }\n if (item.h.ca) { result.holder.creatorsAmount = this.formatScientificNotation(item.h.ca) }\n if (item.h.cr) { result.holder.creatorsRatio = this.formatScientificNotation(item.h.cr) }\n if (item.h.btfh) { result.holder.balanceTagFreshHolders = item.h.btfh }\n if (item.h.btfa) { result.holder.balanceTagFreshAmount = this.formatScientificNotation(item.h.btfa) }\n if (item.h.btfr) { result.holder.balanceTagFreshRatio = this.formatScientificNotation(item.h.btfr) }\n if (item.h.btsh) { result.holder.balanceTagSandwichHolders = item.h.btsh }\n if (item.h.btsa) { result.holder.balanceTagSandwichAmount = this.formatScientificNotation(item.h.btsa) }\n if (item.h.btsr) { result.holder.balanceTagSandwichRatio = this.formatScientificNotation(item.h.btsr) }\n if (item.h.btbh) { result.holder.balanceTagBundleHolders = item.h.btbh }\n if (item.h.btba) { result.holder.balanceTagBundleAmount = this.formatScientificNotation(item.h.btba) }\n if (item.h.btbr) { result.holder.balanceTagBundleRatio = this.formatScientificNotation(item.h.btbr) }\n if (item.h.btsnh) { result.holder.balanceTagSniperHolders = item.h.btsnh }\n if (item.h.btsna) { result.holder.balanceTagSniperAmount = this.formatScientificNotation(item.h.btsna) }\n if (item.h.btsnr) { result.holder.balanceTagSniperRatio = this.formatScientificNotation(item.h.btsnr) }\n if (item.h.btdh) { result.holder.balanceTagDevHolders = item.h.btdh }\n if (item.h.btda) { result.holder.balanceTagDevAmount = this.formatScientificNotation(item.h.btda) }\n if (item.h.btdr) { result.holder.balanceTagDevRatio = this.formatScientificNotation(item.h.btdr) }\n if (item.h.btph) { result.holder.balanceTagProHolders = item.h.btph }\n if (item.h.btpa) { result.holder.balanceTagProAmount = this.formatScientificNotation(item.h.btpa) }\n if (item.h.btpr) { result.holder.balanceTagProRatio = this.formatScientificNotation(item.h.btpr) }\n if (item.h.btih) { result.holder.balanceTagInsiderHolders = item.h.btih }\n if (item.h.btia) { result.holder.balanceTagInsiderAmount = this.formatScientificNotation(item.h.btia) }\n if (item.h.btir) { result.holder.balanceTagInsiderRatio = this.formatScientificNotation(item.h.btir) }\n if (item.h.btsmh) { result.holder.balanceTagSmartHolders = item.h.btsmh }\n if (item.h.btsma) { result.holder.balanceTagSmartAmount = this.formatScientificNotation(item.h.btsma) }\n if (item.h.btsmr) { result.holder.balanceTagSmartRatio = this.formatScientificNotation(item.h.btsmr) }\n if (item.h.btkh) { result.holder.balanceTagKolHolders = item.h.btkh }\n if (item.h.btka) { result.holder.balanceTagKolAmount = this.formatScientificNotation(item.h.btka) }\n if (item.h.btkr) { result.holder.balanceTagKolRatio = this.formatScientificNotation(item.h.btkr) }\n if (item.h.btphh) { result.holder.balanceTagPhishingHolders = item.h.btphh }\n if (item.h.btpha) { result.holder.balanceTagPhishingAmount = this.formatScientificNotation(item.h.btpha) }\n if (item.h.btphr) { result.holder.balanceTagPhishingRatio = this.formatScientificNotation(item.h.btphr) }\n if (item.h.btblh) { result.holder.balanceTagBluechipHolders = item.h.btblh }\n if (item.h.btbla) { result.holder.balanceTagBluechipAmount = this.formatScientificNotation(item.h.btbla) }\n if (item.h.btblr) { result.holder.balanceTagBluechipRatio = this.formatScientificNotation(item.h.btblr) }\n if (item.h.btrh) { result.holder.balanceTagRatHolders = item.h.btrh }\n if (item.h.btra) { result.holder.balanceTagRatAmount = this.formatScientificNotation(item.h.btra) }\n if (item.h.btrr) { result.holder.balanceTagRatRatio = this.formatScientificNotation(item.h.btrr) }\n }\n\n // TokenSupply (s)\n if (item.s) {\n result.supply = {\n tokenAddress: item.s.a,\n timestamp: item.s.ts || 0,\n };\n if (item.s.s) { result.supply.supply = item.s.s }\n if (item.s.mc) { result.supply.marketCapInUsd = item.s.mc }\n }\n\n // TokenStat (ts)\n if (item.ts) {\n result.stat = {\n address: item.ts.a,\n timestamp: item.ts.t || 0,\n };\n\n // 1m data\n if (item.ts.b1m) { result.stat.buys1m = item.ts.b1m }\n if (item.ts.s1m) { result.stat.sells1m = item.ts.s1m }\n if (item.ts.be1m) { result.stat.buyers1m = item.ts.be1m }\n if (item.ts.se1m) { result.stat.sellers1m = item.ts.se1m }\n if (item.ts.bviu1m) { result.stat.buyVolumeInUsd1m = this.formatScientificNotation(item.ts.bviu1m) }\n if (item.ts.sviu1m) { result.stat.sellVolumeInUsd1m = this.formatScientificNotation(item.ts.sviu1m) }\n if (item.ts.p1m) { result.stat.price1m = this.formatScientificNotation(item.ts.p1m) }\n if (item.ts.oiu1m) { result.stat.openInUsd1m = this.formatScientificNotation(item.ts.oiu1m) }\n if (item.ts.ciu1m) { result.stat.closeInUsd1m = this.formatScientificNotation(item.ts.ciu1m) }\n\n // 5m data\n if (item.ts.b5m) { result.stat.buys5m = item.ts.b5m }\n if (item.ts.s5m) { result.stat.sells5m = item.ts.s5m }\n if (item.ts.be5m) { result.stat.buyers5m = item.ts.be5m }\n if (item.ts.se5m) { result.stat.sellers5m = item.ts.se5m }\n if (item.ts.bviu5m) { result.stat.buyVolumeInUsd5m = this.formatScientificNotation(item.ts.bviu5m) }\n if (item.ts.sviu5m) { result.stat.sellVolumeInUsd5m = this.formatScientificNotation(item.ts.sviu5m) }\n if (item.ts.p5m) { result.stat.price5m = this.formatScientificNotation(item.ts.p5m) }\n if (item.ts.oiu5m) { result.stat.openInUsd5m = this.formatScientificNotation(item.ts.oiu5m) }\n if (item.ts.ciu5m) { result.stat.closeInUsd5m = this.formatScientificNotation(item.ts.ciu5m) }\n\n // 15m data\n if (item.ts.b15m) { result.stat.buys15m = item.ts.b15m }\n if (item.ts.s15m) { result.stat.sells15m = item.ts.s15m }\n if (item.ts.be15m) { result.stat.buyers15m = item.ts.be15m }\n if (item.ts.se15m) { result.stat.sellers15m = item.ts.se15m }\n if (item.ts.bviu15m) { result.stat.buyVolumeInUsd15m = this.formatScientificNotation(item.ts.bviu15m) }\n if (item.ts.sviu15m) { result.stat.sellVolumeInUsd15m = this.formatScientificNotation(item.ts.sviu15m) }\n if (item.ts.p15m) { result.stat.price15m = this.formatScientificNotation(item.ts.p15m) }\n if (item.ts.oiu15m) { result.stat.openInUsd15m = this.formatScientificNotation(item.ts.oiu15m) }\n if (item.ts.ciu15m) { result.stat.closeInUsd15m = this.formatScientificNotation(item.ts.ciu15m) }\n\n // 30m data\n if (item.ts.b30m) { result.stat.buys30m = item.ts.b30m }\n if (item.ts.s30m) { result.stat.sells30m = item.ts.s30m }\n if (item.ts.be30m) { result.stat.buyers30m = item.ts.be30m }\n if (item.ts.se30m) { result.stat.sellers30m = item.ts.se30m }\n if (item.ts.bviu30m) { result.stat.buyVolumeInUsd30m = this.formatScientificNotation(item.ts.bviu30m) }\n if (item.ts.sviu30m) { result.stat.sellVolumeInUsd30m = this.formatScientificNotation(item.ts.sviu30m) }\n if (item.ts.p30m) { result.stat.price30m = this.formatScientificNotation(item.ts.p30m) }\n if (item.ts.oiu30m) { result.stat.openInUsd30m = this.formatScientificNotation(item.ts.oiu30m) }\n if (item.ts.ciu30m) { result.stat.closeInUsd30m = this.formatScientificNotation(item.ts.ciu30m) }\n\n // 1h data\n if (item.ts.b1h) { result.stat.buys1h = item.ts.b1h }\n if (item.ts.s1h) { result.stat.sells1h = item.ts.s1h }\n if (item.ts.be1h) { result.stat.buyers1h = item.ts.be1h }\n if (item.ts.se1h) { result.stat.sellers1h = item.ts.se1h }\n if (item.ts.bviu1h) { result.stat.buyVolumeInUsd1h = this.formatScientificNotation(item.ts.bviu1h) }\n if (item.ts.sviu1h) { result.stat.sellVolumeInUsd1h = this.formatScientificNotation(item.ts.sviu1h) }\n if (item.ts.p1h) { result.stat.price1h = this.formatScientificNotation(item.ts.p1h) }\n if (item.ts.oiu1h) { result.stat.openInUsd1h = this.formatScientificNotation(item.ts.oiu1h) }\n if (item.ts.ciu1h) { result.stat.closeInUsd1h = this.formatScientificNotation(item.ts.ciu1h) }\n\n // 4h data\n if (item.ts.b4h) { result.stat.buys4h = item.ts.b4h }\n if (item.ts.s4h) { result.stat.sells4h = item.ts.s4h }\n if (item.ts.be4h) { result.stat.buyers4h = item.ts.be4h }\n if (item.ts.se4h) { result.stat.sellers4h = item.ts.se4h }\n if (item.ts.bviu4h) { result.stat.buyVolumeInUsd4h = this.formatScientificNotation(item.ts.bviu4h) }\n if (item.ts.sviu4h) { result.stat.sellVolumeInUsd4h = this.formatScientificNotation(item.ts.sviu4h) }\n if (item.ts.p4h) { result.stat.price4h = this.formatScientificNotation(item.ts.p4h) }\n if (item.ts.oiu4h) { result.stat.openInUsd4h = this.formatScientificNotation(item.ts.oiu4h) }\n if (item.ts.ciu4h) { result.stat.closeInUsd4h = this.formatScientificNotation(item.ts.ciu4h) }\n\n // 24h data\n if (item.ts.b24h) { result.stat.buys24h = item.ts.b24h }\n if (item.ts.s24h) { result.stat.sells24h = item.ts.s24h }\n if (item.ts.be24h) { result.stat.buyers24h = item.ts.be24h }\n if (item.ts.se24h) { result.stat.sellers24h = item.ts.se24h }\n if (item.ts.bviu24h) { result.stat.buyVolumeInUsd24h = this.formatScientificNotation(item.ts.bviu24h) }\n if (item.ts.sviu24h) { result.stat.sellVolumeInUsd24h = this.formatScientificNotation(item.ts.sviu24h) }\n if (item.ts.p24h) { result.stat.price24h = this.formatScientificNotation(item.ts.p24h) }\n if (item.ts.oiu24h) { result.stat.openInUsd24h = this.formatScientificNotation(item.ts.oiu24h) }\n if (item.ts.ciu24h) { result.stat.closeInUsd24h = this.formatScientificNotation(item.ts.ciu24h) }\n\n // Current price\n if (item.ts.p) { result.stat.price = this.formatScientificNotation(item.ts.p) }\n }\n\n return result;\n })\n )\n );\n }\n\n subscribeRankingTokensStats({\n chain,\n channelType,\n callback,\n }: {\n chain: string;\n channelType: ChannelType;\n callback: (data: TokenStat[]) => void;\n }): Unsubscrible {\n const channel = `dex-ranking-token-stats-list:${chain}_${channelType}`;\n return this.subscribe(channel, (data: any[]) =>\n callback(\n data?.map(\n (it: any) =>\n ({\n address: it.a,\n timestamp: it.t,\n buys1m: it.b1m,\n sells1m: it.s1m,\n buyers1m: it.be1m,\n sellers1m: it.se1m,\n buyVolumeInUsd1m: this.formatScientificNotation(it.bviu1m),\n sellVolumeInUsd1m: this.formatScientificNotation(it.sviu1m),\n price1m: this.formatScientificNotation(it.p1m),\n openInUsd1m: this.formatScientificNotation(it.oiu1m),\n closeInUsd1m: this.formatScientificNotation(it.ciu1m),\n buys5m: it.b5m,\n sells5m: it.s5m,\n buyers5m: it.be5m,\n sellers5m: it.se5m,\n buyVolumeInUsd5m: this.formatScientificNotation(it.bviu5m),\n sellVolumeInUsd5m: this.formatScientificNotation(it.sviu5m),\n price5m: this.formatScientificNotation(it.p5m),\n openInUsd5m: this.formatScientificNotation(it.oiu5m),\n closeInUsd5m: this.formatScientificNotation(it.ciu5m),\n buys15m: it.b15m,\n sells15m: it.s15m,\n buyers15m: it.be15m,\n sellers15m: it.se15m,\n buyVolumeInUsd15m: this.formatScientificNotation(it.bviu15m),\n sellVolumeInUsd15m: this.formatScientificNotation(it.sviu15m),\n price15m: this.formatScientificNotation(it.p15m),\n openInUsd15m: this.formatScientificNotation(it.oiu15m),\n closeInUsd15m: this.formatScientificNotation(it.ciu15m),\n buys30m: it.b30m,\n sells30m: it.s30m,\n buyers30m: it.be30m,\n sellers30m: it.se30m,\n buyVolumeInUsd30m: this.formatScientificNotation(it.bviu30m),\n sellVolumeInUsd30m: this.formatScientificNotation(it.sviu30m),\n price30m: this.formatScientificNotation(it.p30m),\n openInUsd30m: this.formatScientificNotation(it.oiu30m),\n closeInUsd30m: this.formatScientificNotation(it.ciu30m),\n buys1h: it.b1h,\n sells1h: it.s1h,\n buyers1h: it.be1h,\n sellers1h: it.se1h,\n buyVolumeInUsd1h: this.formatScientificNotation(it.bviu1h),\n sellVolumeInUsd1h: this.formatScientificNotation(it.sviu1h),\n price1h: this.formatScientificNotation(it.p1h),\n openInUsd1h: this.formatScientificNotation(it.oiu1h),\n closeInUsd1h: this.formatScientificNotation(it.ciu1h),\n buys4h: it.b4h,\n sells4h: it.s4h,\n buyers4h: it.be4h,\n sellers4h: it.se4h,\n buyVolumeInUsd4h: this.formatScientificNotation(it.bviu4h),\n sellVolumeInUsd4h: this.formatScientificNotation(it.sviu4h),\n price4h: this.formatScientificNotation(it.p4h),\n openInUsd4h: this.formatScientificNotation(it.oiu4h),\n closeInUsd4h: this.formatScientificNotation(it.ciu4h),\n buys24h: it.b24h,\n sells24h: it.s24h,\n buyers24h: it.be24h,\n sellers24h: it.se24h,\n buyVolumeInUsd24h: this.formatScientificNotation(it.bviu24h),\n sellVolumeInUsd24h: this.formatScientificNotation(it.sviu24h),\n price24h: this.formatScientificNotation(it.p24h),\n price: this.formatScientificNotation(it.p),\n openInUsd24h: this.formatScientificNotation(it.oiu24h),\n closeInUsd24h: this.formatScientificNotation(it.ciu24h),\n }) as TokenStat\n )\n )\n );\n }\n\n subscribeRankingTokensHolders({\n chain,\n channelType,\n callback,\n }: {\n chain: string;\n channelType: ChannelType;\n callback: (data: TokenHolder[]) => void;\n }): Unsubscrible {\n const channel = `dex-ranking-token-holding-list:${chain}_${channelType}`;\n return this.subscribe(channel, (data: any[]) =>\n callback(\n data?.map(\n (it: any) =>\n ({\n tokenAddress: it.a,\n holders: it.h,\n top100HoldersAmount: this.formatScientificNotation(it.t100a),\n top50HoldersAmount: this.formatScientificNotation(it.t50a),\n top10HoldersAmount: this.formatScientificNotation(it.t10a),\n top100Holders: it.t100h,\n top50Holders: it.t50h,\n top10Holders: it.t10h,\n top100HoldersRatio: this.formatScientificNotation(it.t100r),\n top50HoldersRatio: this.formatScientificNotation(it.t50r),\n top10HoldersRatio: this.formatScientificNotation(it.t10r),\n creatorsHolders: it.ch,\n creatorsAmount: this.formatScientificNotation(it.ca),\n creatorsRatio: this.formatScientificNotation(it.cr),\n balanceTagFreshHolders: it.btfh,\n balanceTagFreshAmount: this.formatScientificNotation(it.btfa),\n balanceTagFreshRatio: this.formatScientificNotation(it.btfr),\n balanceTagSandwichHolders: it.btsh,\n balanceTagSandwichAmount: this.formatScientificNotation(it.btsa),\n balanceTagSandwichRatio: this.formatScientificNotation(it.btsr),\n balanceTagBundleHolders: it.btbh,\n balanceTagBundleAmount: this.formatScientificNotation(it.btba),\n balanceTagBundleRatio: this.formatScientificNotation(it.btbr),\n balanceTagSniperHolders: it.btsnh,\n balanceTagSniperAmount: this.formatScientificNotation(it.btsna),\n balanceTagSniperRatio: this.formatScientificNotation(it.btsnr),\n balanceTagDevHolders: it.btdh,\n balanceTagDevAmount: this.formatScientificNotation(it.btda),\n balanceTagDevRatio: this.formatScientificNotation(it.btdr),\n balanceTagProHolders: it.btph,\n balanceTagProAmount: this.formatScientificNotation(it.btpa),\n balanceTagProRatio: this.formatScientificNotation(it.btpr),\n balanceTagInsiderHolders: it.btih,\n balanceTagInsiderAmount: this.formatScientificNotation(it.btia),\n balanceTagInsiderRatio: this.formatScientificNotation(it.btir),\n balanceTagSmartHolders: it.btsmh,\n balanceTagSmartAmount: this.formatScientificNotation(it.btsma),\n balanceTagSmartRatio: this.formatScientificNotation(it.btsmr),\n balanceTagKolHolders: it.btkh,\n balanceTagKolAmount: this.formatScientificNotation(it.btka),\n balanceTagKolRatio: this.formatScientificNotation(it.btkr),\n balanceTagPhishingHolders: it.btphh,\n balanceTagPhishingAmount: this.formatScientificNotation(it.btpha),\n balanceTagPhishingRatio: this.formatScientificNotation(it.btphr),\n balanceTagBluechipHolders: it.btblh,\n balanceTagBluechipAmount: this.formatScientificNotation(it.btbla),\n balanceTagBluechipRatio: this.formatScientificNotation(it.btblr),\n balanceTagRatHolders: it.btrh,\n balanceTagRatAmount: this.formatScientificNotation(it.btra),\n balanceTagRatRatio: this.formatScientificNotation(it.btrr),\n timestamp: it.ts,\n }) as TokenHolder\n )\n )\n );\n }\n\n subscribeRankingTokensSupply({\n chain,\n channelType,\n callback,\n }: {\n chain: string;\n channelType: ChannelType;\n callback: (data: TokenSupply[]) => void;\n }): Unsubscrible {\n const channel = `dex-ranking-token-supply-list:${chain}_${channelType}`;\n return this.subscribe(channel, (data: any[]) =>\n callback(\n data?.map(\n (it: any) =>\n ({\n tokenAddress: it.a,\n supply: it.s,\n marketCapInUsd: it.mc,\n timestamp: it.ts,\n })\n )\n )\n );\n }\n\n subscribeRankingTokensBondingCurve({\n chain,\n callback,\n }: {\n chain: string;\n callback: (data: TokenBondingCurve[]) => void;\n }): Unsubscrible {\n const channel = `dex-ranking-token-bounding-curve-list:${chain}_new`;\n return this.subscribe(channel, (data: any[]) =>\n callback(\n data?.map(\n (it: any) =>\n ({\n tokenAddress: it.a,\n progressRatio: it.pr,\n })\n )\n )\n );\n }\n\n // subscribeTokenTrades({\n // chain,\n // tokenAddress,\n // callback,\n // }: {\n // chain: string;\n // tokenAddress: string;\n // callback: (data: TradeEvent[]) => void;\n // }): Unsubscrible {\n // const channel = `dex-trades:${chain}_${tokenAddress}`;\n // return this.subscribe(channel, (data: any[]) =>\n // callback(\n // data?.map(\n // (it: any) =>\n // ({\n // maker: it.bwa,\n // baseAmount: it.ba,\n // quoteAmount: it.sa,\n // // quoteSymbol: ,\n // quoteAddress: it.swa,\n // amountInUsd: it.baiu,\n // timestamp: it.t,\n // event: it.k,\n // txHash: it.h,\n // // priceInUsd: ,\n // // id: ,\n // // buyCostUsd: it.,\n // tokenAddress: it.a,\n // }) as TradeEvent\n // )\n // )\n // );\n // }\n\n subscribeWalletBalance({\n chain,\n walletAddress,\n callback,\n filter,\n }: {\n chain: string;\n walletAddress: string;\n callback: (data: WalletBalance[]) => void;\n filter?: string;\n }): Unsubscrible {\n const channel = `dex-wallet-balance:${chain}_${walletAddress}`;\n return this.subscribe(channel, (data: any) =>\n callback([\n {\n walletAddress: data.a,\n tokenAddress: data.ta,\n tokenPriceInUsd: data.tpiu,\n balance: data.b,\n timestamp: data.t,\n },\n ]), filter, \"subscribeWalletBalance\");\n }\n\n subscribeWalletPnl({\n chain,\n walletAddress,\n callback,\n filter,\n }: {\n chain: string;\n walletAddress: string;\n callback: (data: WalletTokenPnl) => void;\n filter?: string;\n }): Unsubscrible {\n const channel = `dex-wallet-token-pnl:${chain}_${walletAddress}`;\n return this.subscribe(channel, (data: any) =>\n callback({\n walletAddress: data.a,\n tokenAddress: data.ta,\n tokenPriceInUsd: data.tpiu,\n timestamp: data.t,\n opentime: data.ot,\n lasttime: data.lt,\n closetime: data.ct,\n buyAmount: data.ba,\n buyAmountInUsd: data.baiu,\n buyCount: data.bs,\n buyCount30d: data.bs30d,\n buyCount7d: data.bs7d,\n sellAmount: data.sa,\n sellAmountInUsd: data.saiu,\n sellCount: data.ss,\n sellCount30d: data.ss30d,\n sellCount7d: data.ss7d,\n heldDurationTimestamp: data.hdts,\n averageBuyPriceInUsd: data.abpiu,\n averageSellPriceInUsd: data.aspiu,\n unrealizedProfitInUsd: data.upiu,\n unrealizedProfitRatio: data.upr,\n realizedProfitInUsd: data.rpiu,\n realizedProfitRatio: data.rpr,\n totalRealizedProfitInUsd: data.trpiu,\n totalRealizedProfitRatio: data.trr,\n }), filter, \"subscribeWalletPnl\");\n }\n\n subscribeWalletPnlList({\n chain,\n walletAddress,\n callback,\n }: {\n chain: string;\n walletAddress: string;\n callback: (data: WalletPnl[]) => void;\n }): Unsubscrible {\n const channel = `dex-wallet-pnl-list:${chain}_${walletAddress}`;\n return this.subscribe(channel, (data: any[]) =>\n callback(\n data?.map(\n (it: any) =>\n ({\n walletAddress: it.a,\n buys: it.bs,\n buyAmount: it.ba,\n buyAmountInUsd: it.baiu,\n averageBuyPriceInUsd: it.abpiu,\n sellAmount: it.sa,\n sellAmountInUsd: it.saiu,\n sells: it.ss,\n wins: it.ws,\n winRatio: it.wr,\n pnlInUsd: it.piu,\n averagePnlInUsd: it.apiu,\n pnlRatio: it.pr,\n profitableDays: it.pd,\n losingDays: it.ld,\n tokens: it.ts,\n resolution: it.r,\n }) as WalletPnl\n )\n )\n );\n }\n\n subscribeTokenTrade({\n chain,\n tokenAddress,\n callback,\n filter,\n }: {\n chain: string;\n tokenAddress: string;\n callback: (data: TradeActivity) => void;\n filter?: string;\n }): Unsubscrible {\n const channel = `dex-trade:${chain}_${tokenAddress}`;\n return this.subscribe(channel, (data: any) =>\n callback({\n tokenAddress: data.a,\n timestamp: data.t,\n kind: data.k,\n buyAmount: data.ba,\n buyAmountInUsd: data.baiu,\n buyTokenAddress: data.btma,\n buyTokenName: data.btn,\n buyTokenSymbol: data.bts,\n buyWalletAddress: data.bwa,\n sellAmount: data.sa,\n sellAmountInUsd: data.saiu,\n sellTokenAddress: data.stma,\n sellTokenName: data.stn,\n sellTokenSymbol: data.sts,\n sellWalletAddress: data.swa,\n txHash: data.h,\n }), filter, \"subscribeTokenTrades\");\n }\n\n subscribeWalletTrade({\n chain,\n walletAddress,\n callback,\n filter,\n }: {\n chain: string;\n walletAddress: string;\n callback: (data: TradeActivity) => void;\n filter?: string;\n }): Unsubscrible {\n const channel = `dex-wallet-trade:${chain}_${walletAddress}`;\n return this.subscribe(channel, (data: any) =>\n callback({\n tokenAddress: data.a,\n timestamp: data.t,\n kind: data.k,\n buyAmount: data.ba,\n buyAmountInUsd: data.baiu,\n buyTokenAddress: data.btma,\n buyTokenName: data.btn,\n buyTokenSymbol: data.bts,\n buyWalletAddress: data.bwa,\n sellAmount: data.sa,\n sellAmountInUsd: data.saiu,\n sellTokenAddress: data.stma,\n sellTokenName: data.stn,\n sellTokenSymbol: data.sts,\n sellWalletAddress: data.swa,\n txHash: data.h,\n }), filter, \"subscribeTokenTrades\");\n }\n\n subscribeDexPoolBalance({\n chain,\n poolAddress,\n callback,\n }: {\n chain: string;\n poolAddress: string;\n callback: (data: DexPoolBalance) => void;\n }): Unsubscrible {\n const channel = `dex-pool-balance:${chain}_${poolAddress}`;\n return this.subscribe(channel, (data: any) =>\n callback({\n poolAddress: data.a,\n tokenAAddress: data.taa,\n tokenALiquidityInUsd: data.taliu,\n tokenBAddress: data.tba,\n tokenBLiquidityInUsd: data.tbliu,\n })\n );\n }\n}\nclass StreamUnsubscrible<T> {\n constructor(\n private readonly streamApi: StreamApi,\n private readonly channel: string,\n private readonly fn: (data: T) => void\n ) { }\n\n unsubscribe() {\n this.streamApi.unsubscribe(this.channel, this.fn);\n }\n}","/**\n * Field mappings for CEL filter expressions\n * Maps human-readable field names to short field names used in the API\n * Organized by subscription method to handle field name conflicts\n */\n\nexport interface FieldMapping {\n readonly [key: string]: string;\n}\n\nexport interface MethodFieldMappings {\n readonly [methodName: string]: FieldMapping;\n}\n\n/**\n * Field mappings organized by subscription method\n * Each method can have its own field mappings to handle conflicts\n */\nexport const CEL_FIELD_MAPPINGS: MethodFieldMappings = {\n // Wallet balance subscription fields\n \"subscribeWalletBalance\": {\n \"walletAddress\": \"a\",\n \"tokenAddress\": \"ta\",\n \"tokenPriceInUsd\": \"tpiu\",\n \"balance\": \"b\",\n \"timestamp\": \"t\",\n },\n\n // Token candles subscription fields\n \"subscribeTokenCandles\": {\n \"open\": \"o\",\n \"close\": \"c\",\n \"high\": \"h\",\n \"low\": \"l\",\n \"volume\": \"v\",\n \"resolution\": \"r\",\n \"time\": \"t\",\n \"number\": \"n\",\n },\n\n // Token stats subscription fields\n \"subscribeTokenStats\": {\n \"address\": \"a\",\n \"timestamp\": \"t\",\n \"buys1m\": \"b1m\",\n \"sells1m\": \"s1m\",\n \"buyers1m\": \"be1m\",\n \"sellers1m\": \"se1m\",\n \"buyVolumeInUsd1m\": \"bviu1m\",\n \"sellVolumeInUsd1m\": \"sviu1m\",\n \"price1m\": \"p1m\",\n \"openInUsd1m\": \"oiu1m\",\n \"closeInUsd1m\": \"ciu1m\",\n \"buys5m\": \"b5m\",\n \"sells5m\": \"s5m\",\n \"buyers5m\": \"be5m\",\n \"sellers5m\": \"se5m\",\n \"buyVolumeInUsd5m\": \"bviu5m\",\n \"sellVolumeInUsd5m\": \"sviu5m\",\n \"price5m\": \"p5m\",\n \"openInUsd5m\": \"oiu5m\",\n \"closeInUsd5m\": \"ciu5m\",\n \"buys15m\": \"b15m\",\n \"sells15m\": \"s15m\",\n \"buyers15m\": \"be15m\",\n \"sellers15m\": \"se15m\",\n \"buyVolumeInUsd15m\": \"bviu15m\",\n \"sellVolumeInUsd15m\": \"sviu15m\",\n \"price15m\": \"p15m\",\n \"openInUsd15m\": \"oiu15m\",\n \"closeInUsd15m\": \"ciu15m\",\n \"buys30m\": \"b30m\",\n \"sells30m\": \"s30m\",\n \"buyers30m\": \"be30m\",\n \"sellers30m\": \"se30m\",\n \"buyVolumeInUsd30m\": \"bviu30m\",\n \"sellVolumeInUsd30m\": \"sviu30m\",\n \"price30m\": \"p30m\",\n \"openInUsd30m\": \"oiu30m\",\n \"closeInUsd30m\": \"ciu30m\",\n \"buys1h\": \"b1h\",\n \"sells1h\": \"s1h\",\n \"buyers1h\": \"be1h\",\n \"sellers1h\": \"se1h\",\n \"buyVolumeInUsd1h\": \"bviu1h\",\n \"sellVolumeInUsd1h\": \"sviu1h\",\n \"price1h\": \"p1h\",\n \"openInUsd1h\": \"oiu1h\",\n \"closeInUsd1h\": \"ciu1h\",\n \"buys4h\": \"b4h\",\n \"sells4h\": \"s4h\",\n \"buyers4h\": \"be4h\",\n \"sellers4h\": \"se4h\",\n \"buyVolumeInUsd4h\": \"bviu4h\",\n \"sellVolumeInUsd4h\": \"sviu4h\",\n \"price4h\": \"p4h\",\n \"openInUsd4h\": \"oiu4h\",\n \"closeInUsd4h\": \"ciu4h\",\n \"buys24h\": \"b24h\",\n \"sells24h\": \"s24h\",\n \"buyers24h\": \"be24h\",\n \"sellers24h\": \"se24h\",\n \"buyVolumeInUsd24h\": \"bviu24h\",\n \"sellVolumeInUsd24h\": \"sviu24h\",\n \"price24h\": \"p24h\",\n \"price\": \"p\",\n \"openInUsd24h\": \"oiu24h\",\n \"closeInUsd24h\": \"ciu24h\",\n },\n\n // Token holder subscription fields\n \"subscribeTokenHolders\": {\n \"tokenAddress\": \"a\",\n \"holders\": \"h\",\n \"top100HoldersAmount\": \"t100a\",\n \"top50HoldersAmount\": \"t50a\",\n \"top10HoldersAmount\": \"t10a\",\n \"top100Holders\": \"t100h\",\n \"top50Holders\": \"t50h\",\n \"top10Holders\": \"t10h\",\n \"top100HoldersRatio\": \"t100r\",\n \"top50HoldersRatio\": \"t50r\",\n \"top10HoldersRatio\": \"t10r\",\n \"creatorsHolders\": \"ch\",\n \"creatorsAmount\": \"ca\",\n \"creatorsRatio\": \"cr\",\n \"balanceTagFreshHolders\": \"btfh\",\n \"balanceTagFreshAmount\": \"btfa\",\n \"balanceTagFreshRatio\": \"btfr\",\n \"balanceTagSandwichHolders\": \"btsh\",\n \"balanceTagSandwichAmount\": \"btsa\",\n \"balanceTagSandwichRatio\": \"btsr\",\n \"balanceTagBundleHolders\": \"btbh\",\n \"balanceTagBundleAmount\": \"btba\",\n \"balanceTagBundleRatio\": \"btbr\",\n \"balanceTagSniperHolders\": \"btsnh\",\n \"balanceTagSniperAmount\": \"btsna\",\n \"balanceTagSniperRatio\": \"btsnr\",\n \"balanceTagDevHolders\": \"btdh\",\n \"balanceTagDevAmount\": \"btda\",\n \"balanceTagDevRatio\": \"btdr\",\n \"balanceTagProHolders\": \"btph\",\n \"balanceTagProAmount\": \"btpa\",\n \"balanceTagProRatio\": \"btpr\",\n \"balanceTagInsiderHolders\": \"btih\",\n \"balanceTagInsiderAmount\": \"btia\",\n \"balanceTagInsiderRatio\": \"btir\",\n \"balanceTagSmartHolders\": \"btsmh\",\n \"balanceTagSmartAmount\": \"btsma\",\n \"balanceTagSmartRatio\": \"btsmr\",\n \"balanceTagKolHolders\": \"btkh\",\n \"balanceTagKolAmount\": \"btka\",\n \"balanceTagKolRatio\": \"btkr\",\n \"balanceTagPhishingHolders\": \"btphh\",\n \"balanceTagPhishingAmount\": \"btpha\",\n \"balanceTagPhishingRatio\": \"btphr\",\n \"balanceTagBluechipHolders\": \"btblh\",\n \"balanceTagBluechipAmount\": \"btbla\",\n \"balanceTagBluechipRatio\": \"btblr\",\n \"balanceTagRatHolders\": \"btrh\",\n \"balanceTagRatAmount\": \"btra\",\n \"balanceTagRatRatio\": \"btrr\",\n \"timestamp\": \"ts\",\n },\n\n // New token subscription fields\n \"subscribeNewToken\": {\n \"tokenAddress\": \"a\",\n \"name\": \"n\",\n \"symbol\": \"s\",\n \"createdAtMs\": \"cts\",\n },\n\n // Token supply subscription fields\n \"subscribeTokenSupply\": {\n \"tokenAddress\": \"a\",\n \"supply\": \"s\",\n \"timestamp\": \"ts\",\n },\n\n // Dex pool balance subscription fields\n \"subscribeDexPoolBalance\": {\n \"poolAddress\": \"a\",\n \"tokenAAddress\": \"taa\",\n \"tokenALiquidityInUsd\": \"taliu\",\n \"tokenBAddress\": \"tba\",\n \"tokenBLiquidityInUsd\": \"tbliu\",\n },\n\n // Token liquidity subscription fields\n \"subscribeTokenLiquidity\": {\n \"tokenAddress\": \"a\",\n \"metricType\": \"t\",\n \"value\": \"v\",\n \"timestamp\": \"ts\",\n },\n\n // New token metadata subscription fields\n \"subscribeNewTokensMetadata\": {\n \"tokenAddress\": \"a\",\n \"name\": \"n\",\n \"symbol\": \"s\",\n \"imageUrl\": \"iu\",\n \"description\": \"de\",\n \"socialMedia\": \"sm\",\n \"createdAtMs\": \"cts\",\n },\n\n // Token trades subscription fields\n \"subscribeTokenTrades\": {\n \"tokenAddress\": \"a\",\n \"timestamp\": \"t\",\n \"kind\": \"k\",\n \"buyAmount\": \"ba\",\n \"buyAmountInUsd\": \"baiu\",\n \"buyTokenAddress\": \"btma\",\n \"buyTokenName\": \"btn\",\n \"buyTokenSymbol\": \"bts\",\n \"buyWalletAddress\": \"bwa\",\n \"sellAmount\": \"sa\",\n \"sellAmountInUsd\": \"saiu\",\n \"sellTokenAddress\": \"stma\",\n \"sellTokenName\": \"stn\",\n \"sellTokenSymbol\": \"sts\",\n \"sellWalletAddress\": \"swa\",\n \"txHash\": \"h\",\n },\n\n // Wallet token PnL subscription fields\n \"subscribeWalletPnl\": {\n \"walletAddress\": \"a\",\n \"tokenAddress\": \"ta\",\n \"tokenPriceInUsd\": \"tpiu\",\n \"timestamp\": \"t\",\n \"opentime\": \"ot\",\n \"lasttime\": \"lt\",\n \"closetime\": \"ct\",\n \"buyAmount\": \"ba\",\n \"buyAmountInUsd\": \"baiu\",\n \"buyCount\": \"bs\",\n \"buyCount30d\": \"bs30d\",\n \"buyCount7d\": \"bs7d\",\n \"sellAmount\": \"sa\",\n \"sellAmountInUsd\": \"saiu\",\n \"sellCount\": \"ss\",\n \"sellCount30d\": \"ss30d\",\n \"sellCount7d\": \"ss7d\",\n \"heldDurationTimestamp\": \"hdts\",\n \"averageBuyPriceInUsd\": \"abpiu\",\n \"averageSellPriceInUsd\": \"aspiu\",\n \"unrealizedProfitInUsd\": \"upiu\",\n \"unrealizedProfitRatio\": \"upr\",\n \"realizedProfitInUsd\": \"rpiu\",\n \"realizedProfitRatio\": \"rpr\",\n \"totalRealizedProfitInUsd\": \"trpiu\",\n \"totalRealizedProfitRatio\": \"trr\",\n },\n} as const;\n\n/**\n * Get field mappings for a specific subscription method\n * @param methodName - The name of the subscription method\n * @returns Field mapping object for the method, or empty object if not found\n */\nexport function getFieldMappings(methodName: string): FieldMapping {\n return CEL_FIELD_MAPPINGS[methodName] || {};\n}\n\n/**\n * Replace long field names with short field names in a filter expression\n * Automatically adds meta. prefix if not present\n * @param filter - Original filter expression\n * @param methodName - The name of the subscription method\n * @returns Filter expression with short field names and meta. prefix\n */\nexport function replaceFilterFields(filter: string, methodName: string): string {\n if (!filter) {return filter}\n \n const fieldMappings = getFieldMappings(methodName);\n let result = filter;\n \n // Replace all long field names with short field names\n for (const [longField, shortField] of Object.entries(fieldMappings)) {\n // Handle both cases: with and without meta. prefix\n const patterns = [\n // Pattern 1: fieldName (without meta. prefix)\n new RegExp(`\\\\b${longField}\\\\b`, \"g\"),\n // Pattern 2: meta.fieldName (with meta. prefix)\n new RegExp(`\\\\bmeta\\\\.${longField}\\\\b`, \"g\"),\n ];\n \n patterns.forEach((pattern) => {\n result = result.replace(pattern, `meta.${shortField}`);\n });\n }\n \n return result;\n}\n\n/**\n * Type-safe field mapping for specific subscription methods\n */\nexport type SubscriptionMethod = keyof typeof CEL_FIELD_MAPPINGS;\n\n/**\n * Get available field names for a specific subscription method\n * @param methodName - The name of the subscription method\n * @returns Array of available field names\n */\nexport function getAvailableFields(methodName: string): string[] {\n const mappings = getFieldMappings(methodName);\n return Object.keys(mappings);\n}\n","import { Resolution } from \"../openapi\";\n\n\n\nexport enum TokenActivityType {\n Sell = \"sell\",\n Buy = \"buy\",\n AddLiquidity = \"add_liquidity\",\n RemoveLiquidity = \"remove_liquidity\",\n}\n\nexport enum ChannelType {\n New = \"new\",\n HOT = \"trending\",\n US_STOCKS = \"us_stocks\",\n COMPLETED = \"completed\",\n GRADUATED = \"graduated\",\n}\n\nexport enum MetricType {\n LIQUIDITY_IN_USD = \"liquidity_in_usd\",\n MIGRATED_RATIO = \"migrated_ratio\",\n}\n\nexport interface TokenActivity {\n address: string;\n priceUsd: string;\n amount: string;\n type: TokenActivityType;\n // maker: string;\n txHash: string;\n timestamp: number;\n}\n\nexport interface TokenStat {\n address: string;\n timestamp: number;\n buys1m?: number;\n sells1m?: number;\n buyers1m?: number;\n sellers1m?: number;\n buyVolumeInUsd1m?: string;\n sellVolumeInUsd1m?: string;\n price1m?: string;\n openInUsd1m?: string;\n closeInUsd1m?: string;\n\n buys5m?: number;\n sells5m?: number;\n buyers5m?: number;\n sellers5m?: number;\n buyVolumeInUsd5m?: string;\n sellVolumeInUsd5m?: string;\n price5m?: string;\n openInUsd5m?: string;\n closeInUsd5m?: string;\n\n buys15m?: number;\n sells15m?: number;\n buyers15m?: number;\n sellers15m?: number;\n buyVolumeInUsd15m?: string;\n sellVolumeInUsd15m?: string;\n price15m?: string;\n openInUsd15m?: string;\n closeInUsd15m?: string;\n\n buys30m?: number;\n sells30m?: number;\n buyers30m?: number;\n sellers30m?: number;\n buyVolumeInUsd30m?: string;\n sellVolumeInUsd30m?: string;\n price30m?: string;\n openInUsd30m?: string;\n closeInUsd30m?: string;\n\n buys1h?: number;\n sells1h?: number;\n buyers1h?: number;\n sellers1h?: number;\n buyVolumeInUsd1h?: string;\n sellVolumeInUsd1h?: string;\n price1h?: string;\n openInUsd1h?: string;\n closeInUsd1h?: string;\n\n buys4h?: number;\n sells4h?: number;\n buyers4h?: number;\n sellers4h?: number;\n buyVolumeInUsd4h?: string;\n sellVolumeInUsd4h?: string;\n price4h?: string;\n openInUsd4h?: string;\n closeInUsd4h?: string;\n\n buys24h?: number;\n sells24h?: number;\n buyers24h?: number;\n sellers24h?: number;\n buyVolumeInUsd24h?: string;\n sellVolumeInUsd24h?: string;\n price24h?: string;\n openInUsd24h?: string;\n closeInUsd24h?: string;\n\n price?: string;\n}\n\nexport interface TokenHolder {\n tokenAddress: string;\n holders?: number;\n top100HoldersAmount?: string;\n top50HoldersAmount?: string;\n top10HoldersAmount?: string;\n top100Holders?: number;\n top50Holders?: number;\n top10Holders?: number;\n top100HoldersRatio?: string;\n top50HoldersRatio?: string;\n top10HoldersRatio?: string;\n creatorsHolders?: number;\n creatorsAmount?: string;\n creatorsRatio?: string;\n balanceTagFreshHolders?: number;\n balanceTagFreshAmount?: string;\n balanceTagFreshRatio?: string;\n balanceTagSandwichHolders?: number;\n balanceTagSandwichAmount?: string;\n balanceTagSandwichRatio?: string;\n balanceTagBundleHolders?: number;\n balanceTagBundleAmount?: string;\n balanceTagBundleRatio?: string;\n balanceTagSniperHolders?: number;\n balanceTagSniperAmount?: string;\n balanceTagSniperRatio?: string;\n balanceTagDevHolders?: number;\n balanceTagDevAmount?: string;\n balanceTagDevRatio?: string;\n balanceTagProHolders?: number;\n balanceTagProAmount?: string;\n balanceTagProRatio?: string;\n balanceTagInsiderHolders?: number;\n balanceTagInsiderAmount?: string;\n balanceTagInsiderRatio?: string;\n balanceTagSmartHolders?: number;\n balanceTagSmartAmount?: string;\n balanceTagSmartRatio?: string;\n balanceTagKolHolders?: number;\n balanceTagKolAmount?: string;\n balanceTagKolRatio?: string;\n balanceTagPhishingHolders?: number;\n balanceTagPhishingAmount?: string;\n balanceTagPhishingRatio?: string;\n balanceTagBluechipHolders?: number;\n balanceTagBluechipAmount?: string;\n balanceTagBluechipRatio?: string;\n balanceTagRatHolders?: number;\n balanceTagRatAmount?: string;\n balanceTagRatRatio?: string;\n timestamp: number;\n}\n\nexport interface WalletBalance {\n walletAddress: string;\n tokenAddress: string;\n tokenPriceInUsd: string;\n balance: string;\n timestamp: number;\n}\n\nexport interface WalletPnl {\n walletAddress: string;\n buys: number;\n buyAmount: string;\n buyAmountInUsd: string;\n averageBuyPriceInUsd: string;\n sellAmount: string;\n sellAmountInUsd: string;\n sells: number;\n wins: number;\n winRatio: string;\n pnlInUsd: string;\n averagePnlInUsd: string;\n pnlRatio: string;\n profitableDays: number;\n losingDays: number;\n tokens: number;\n resolution: string;\n}\n\nexport interface NewToken {\n tokenAddress: string;\n name: string;\n symbol: string;\n decimals?: number;\n launchFrom?: DexProtocol;\n createdAtMs: number;\n}\n\nexport interface TokenSupply {\n tokenAddress: string;\n supply?: string;\n marketCapInUsd?: string;\n timestamp: number;\n}\n\nexport interface DexPoolBalance {\n poolAddress: string;\n tokenAAddress: string;\n tokenALiquidityInUsd: string;\n tokenBAddress: string;\n tokenBLiquidityInUsd: string;\n}\n\nexport interface TokenLiquidity {\n tokenAddress: string;\n metricType: MetricType;\n value: string;\n timestamp: number;\n}\n\nexport interface DexProtocol {\n programAddress?: string;\n protocolFamily?: string;\n protocolName?: string;\n}\n\nexport interface TokenBondingCurve {\n tokenAddress?: string;\n progressRatio?: string;\n}\n\nexport interface TokenMetadata {\n tokenAddress: string;\n name?: string;\n decimals?: number;\n symbol?: string;\n imageUrl?: string;\n description?: string;\n socialMedia?: socialMedia;\n createdAtMs?: number;\n launchFrom?: DexProtocol;\n migratedTo?: DexProtocol;\n}\n\nexport interface socialMedia {\n twitter?: string;\n telegram?: string;\n website?: string;\n tiktok?: string;\n discord?: string;\n facebook?: string;\n github?: string;\n instagram?: string;\n linkedin?: string;\n medium?: string;\n reddit?: string;\n youtube?: string;\n bitbucket?: string;\n}\n\nexport interface TokenCandle {\n open: string;\n close: string;\n high: string;\n low: string;\n volume: string;\n resolution: Resolution;\n time: number;\n number: number;\n}\n\nexport interface TradeActivity {\n tokenAddress: string;\n timestamp: number;\n kind: string;\n buyAmount: string;\n buyAmountInUsd: string;\n buyTokenAddress: string;\n buyTokenName: string;\n buyTokenSymbol: string;\n buyWalletAddress: string;\n sellAmount: string;\n sellAmountInUsd: string;\n sellTokenAddress: string;\n sellTokenName: string;\n sellTokenSymbol: string;\n sellWalletAddress: string;\n txHash: string;\n}\n\nexport interface WalletTokenPnl {\n walletAddress: string;\n tokenAddress: string;\n tokenPriceInUsd: string;\n timestamp: number;\n opentime: number;\n lasttime: number;\n closetime: number;\n buyAmount: string;\n buyAmountInUsd: string;\n buyCount: number;\n buyCount30d: number;\n buyCount7d: number;\n sellAmount: string;\n sellAmountInUsd: string;\n sellCount: number;\n sellCount30d: number;\n sellCount7d: number;\n heldDurationTimestamp: number;\n averageBuyPriceInUsd: string;\n averageSellPriceInUsd: string;\n unrealizedProfitInUsd: string;\n unrealizedProfitRatio: string;\n realizedProfitInUsd: string;\n realizedProfitRatio: string;\n totalRealizedProfitInUsd: string;\n totalRealizedProfitRatio: string;\n}\n\nexport enum RankingType {\n NEW = \"new\",\n HOT = \"trending\",\n STOCKS = \"stocks\",\n FINALSTRETCH = \"completed\",\n MIGRATED = \"graduated\",\n}\n\nexport enum Dex {\n PUMP_FUN = \"pump_fun\",\n RAYDIUM_LAUNCHPAD = \"raydium_launchpad\",\n METEOR_DYNAMIC_BOUNDING_CURVE = \"meteora_dynamic_bounding_curve\",\n BONK_FUN = \"bonk_fun\",\n BOOP_FUN = \"boop_fun\",\n MOONIT_FUN = \"moonit_fun\",\n}\n\nexport interface RankingTokenList {\n metadata?: TokenMetadata;\n holder?: TokenHolder;\n supply?: TokenSupply;\n stat?: TokenStat;\n bondingCurve?: TokenBondingCurve;\n}"],"mappings":"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","names":["TokenActivityType","ChannelType","MetricType","RankingType","Dex"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@chainstream-io/sdk",
3
- "version": "0.1.19",
3
+ "version": "0.1.21",
4
4
  "description": "API and Stream client for ChainStream",
5
5
  "author": "ChainStream",
6
6
  "repository": {
@@ -45,11 +45,13 @@
45
45
  "prepare": "yarn build"
46
46
  },
47
47
  "dependencies": {
48
- "@chainstream-io/centrifuge": "^1.0.0",
49
- "event-source-polyfill": "^1.0.31"
48
+ "@chainstream-io/centrifuge": "^1.0.8",
49
+ "event-source-polyfill": "^1.0.31",
50
+ "ws": "^8.18.0"
50
51
  },
51
52
  "devDependencies": {
52
53
  "@types/event-source-polyfill": "^1.0.5",
54
+ "@types/ws": "^8.5.13",
53
55
  "tsup": "^8.5.0",
54
56
  "typescript": "^5.0.0"
55
57
  },