@gala-chain/launchpad-mcp-server 5.0.5-beta.2 → 5.0.5-beta.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.
Files changed (469) hide show
  1. package/README.md +25 -1
  2. package/dist/generated/version.d.ts +1 -1
  3. package/dist/generated/version.d.ts.map +1 -1
  4. package/dist/generated/version.js +1 -1
  5. package/dist/generated/version.js.map +1 -1
  6. package/dist/index.js +2 -1
  7. package/dist/index.js.map +1 -1
  8. package/dist/prompts/advanced-pools.d.ts +1 -7
  9. package/dist/prompts/advanced-pools.d.ts.map +1 -1
  10. package/dist/prompts/advanced-pools.js +4 -79
  11. package/dist/prompts/advanced-pools.js.map +1 -1
  12. package/dist/prompts/analysis.d.ts +0 -4
  13. package/dist/prompts/analysis.d.ts.map +1 -1
  14. package/dist/prompts/analysis.js +2 -67
  15. package/dist/prompts/analysis.js.map +1 -1
  16. package/dist/prompts/balances.js.map +1 -1
  17. package/dist/prompts/bridge.d.ts +0 -8
  18. package/dist/prompts/bridge.d.ts.map +1 -1
  19. package/dist/prompts/bridge.js +3 -54
  20. package/dist/prompts/bridge.js.map +1 -1
  21. package/dist/prompts/comments.js.map +1 -1
  22. package/dist/prompts/factories/filtered-list-prompt-factory.js.map +1 -1
  23. package/dist/prompts/factories/invite-management-factory.js +2 -2
  24. package/dist/prompts/factories/invite-management-factory.js.map +1 -1
  25. package/dist/prompts/liquidity-positions.d.ts +0 -12
  26. package/dist/prompts/liquidity-positions.d.ts.map +1 -1
  27. package/dist/prompts/liquidity-positions.js +2 -98
  28. package/dist/prompts/liquidity-positions.js.map +1 -1
  29. package/dist/prompts/manifest.d.ts +33 -0
  30. package/dist/prompts/manifest.d.ts.map +1 -0
  31. package/dist/prompts/manifest.js +2062 -0
  32. package/dist/prompts/manifest.js.map +1 -0
  33. package/dist/prompts/overseers.d.ts.map +1 -1
  34. package/dist/prompts/overseers.js +17 -2
  35. package/dist/prompts/overseers.js.map +1 -1
  36. package/dist/prompts/pools.d.ts +0 -20
  37. package/dist/prompts/pools.d.ts.map +1 -1
  38. package/dist/prompts/pools.js +4 -162
  39. package/dist/prompts/pools.js.map +1 -1
  40. package/dist/prompts/referrals.js.map +1 -1
  41. package/dist/prompts/trading.d.ts +0 -8
  42. package/dist/prompts/trading.d.ts.map +1 -1
  43. package/dist/prompts/trading.js +3 -51
  44. package/dist/prompts/trading.js.map +1 -1
  45. package/dist/prompts/utility-tools.js.map +1 -1
  46. package/dist/prompts/utils/pagination-helpers.d.ts +10 -24
  47. package/dist/prompts/utils/pagination-helpers.d.ts.map +1 -1
  48. package/dist/prompts/utils/pagination-helpers.js +11 -32
  49. package/dist/prompts/utils/pagination-helpers.js.map +1 -1
  50. package/dist/prompts/utils/workflowTemplates.d.ts.map +1 -1
  51. package/dist/prompts/utils/workflowTemplates.js +4 -2
  52. package/dist/prompts/utils/workflowTemplates.js.map +1 -1
  53. package/dist/prompts/validate-manifest.d.ts +42 -0
  54. package/dist/prompts/validate-manifest.d.ts.map +1 -0
  55. package/dist/prompts/validate-manifest.js +157 -0
  56. package/dist/prompts/validate-manifest.js.map +1 -0
  57. package/dist/schemas/common-schemas.d.ts +32 -39
  58. package/dist/schemas/common-schemas.d.ts.map +1 -1
  59. package/dist/schemas/common-schemas.js +113 -117
  60. package/dist/schemas/common-schemas.js.map +1 -1
  61. package/dist/scripts/test-all-prompts.d.ts +1 -17
  62. package/dist/scripts/test-all-prompts.d.ts.map +1 -1
  63. package/dist/scripts/test-all-prompts.js +16 -6
  64. package/dist/scripts/test-all-prompts.js.map +1 -1
  65. package/dist/server.js +1 -1
  66. package/dist/server.js.map +1 -1
  67. package/dist/setup.d.ts +7 -0
  68. package/dist/setup.d.ts.map +1 -0
  69. package/dist/setup.js +33 -0
  70. package/dist/setup.js.map +1 -0
  71. package/dist/tools/api-keys/index.js +13 -13
  72. package/dist/tools/api-keys/index.js.map +1 -1
  73. package/dist/tools/auth/index.js +4 -4
  74. package/dist/tools/auth/index.js.map +1 -1
  75. package/dist/tools/balance/helpers/format-balance.js +1 -1
  76. package/dist/tools/balance/helpers/format-balance.js.map +1 -1
  77. package/dist/tools/balance/index.js +9 -9
  78. package/dist/tools/balance/index.js.map +1 -1
  79. package/dist/tools/ban/index.d.ts.map +1 -1
  80. package/dist/tools/ban/index.js +23 -18
  81. package/dist/tools/ban/index.js.map +1 -1
  82. package/dist/tools/ban/onBanEnforcement.d.ts +9 -0
  83. package/dist/tools/ban/onBanEnforcement.d.ts.map +1 -0
  84. package/dist/tools/ban/onBanEnforcement.js +54 -0
  85. package/dist/tools/ban/onBanEnforcement.js.map +1 -0
  86. package/dist/tools/bridge/helpers/external-chain-balance-tools.js +4 -4
  87. package/dist/tools/bridge/helpers/external-chain-balance-tools.js.map +1 -1
  88. package/dist/tools/bridge/index.d.ts +10 -0
  89. package/dist/tools/bridge/index.d.ts.map +1 -1
  90. package/dist/tools/bridge/index.js +47 -39
  91. package/dist/tools/bridge/index.js.map +1 -1
  92. package/dist/tools/chat/index.d.ts +3 -2
  93. package/dist/tools/chat/index.d.ts.map +1 -1
  94. package/dist/tools/chat/index.js +12 -18
  95. package/dist/tools/chat/index.js.map +1 -1
  96. package/dist/tools/chat/pinChatMessage.js +2 -2
  97. package/dist/tools/chat/pinChatMessage.js.map +1 -1
  98. package/dist/tools/chat/unpinChatMessage.js +1 -1
  99. package/dist/tools/chat/unpinChatMessage.js.map +1 -1
  100. package/dist/tools/chat-messages/index.js +11 -11
  101. package/dist/tools/chat-messages/index.js.map +1 -1
  102. package/dist/tools/comments/index.d.ts +1 -1
  103. package/dist/tools/comments/index.d.ts.map +1 -1
  104. package/dist/tools/comments/index.js +13 -11
  105. package/dist/tools/comments/index.js.map +1 -1
  106. package/dist/tools/comments/onCommentCreated.d.ts +9 -0
  107. package/dist/tools/comments/onCommentCreated.d.ts.map +1 -0
  108. package/dist/tools/comments/onCommentCreated.js +50 -0
  109. package/dist/tools/comments/onCommentCreated.js.map +1 -0
  110. package/dist/tools/content-flags/index.js +14 -14
  111. package/dist/tools/content-flags/index.js.map +1 -1
  112. package/dist/tools/content-reactions/index.js +6 -6
  113. package/dist/tools/content-reactions/index.js.map +1 -1
  114. package/dist/tools/creation/index.js +14 -14
  115. package/dist/tools/creation/index.js.map +1 -1
  116. package/dist/tools/dex/helpers.d.ts +2 -2
  117. package/dist/tools/dex/helpers.js +1 -1
  118. package/dist/tools/dex/index.js +9 -9
  119. package/dist/tools/dex/index.js.map +1 -1
  120. package/dist/tools/dex-analytics/index.d.ts.map +1 -1
  121. package/dist/tools/dex-analytics/index.js +6 -6
  122. package/dist/tools/dex-analytics/index.js.map +1 -1
  123. package/dist/tools/dex-liquidity/index.d.ts.map +1 -1
  124. package/dist/tools/dex-liquidity/index.js +30 -30
  125. package/dist/tools/dex-liquidity/index.js.map +1 -1
  126. package/dist/tools/dex-pools/index.d.ts.map +1 -1
  127. package/dist/tools/dex-pools/index.js +17 -18
  128. package/dist/tools/dex-pools/index.js.map +1 -1
  129. package/dist/tools/global-feed/getGlobalFeedStatus.d.ts +16 -0
  130. package/dist/tools/global-feed/getGlobalFeedStatus.d.ts.map +1 -0
  131. package/dist/tools/global-feed/getGlobalFeedStatus.js +100 -0
  132. package/dist/tools/global-feed/getGlobalFeedStatus.js.map +1 -0
  133. package/dist/tools/global-feed/getSiteConfigState.d.ts +16 -0
  134. package/dist/tools/global-feed/getSiteConfigState.d.ts.map +1 -0
  135. package/dist/tools/global-feed/getSiteConfigState.js +131 -0
  136. package/dist/tools/global-feed/getSiteConfigState.js.map +1 -0
  137. package/dist/tools/global-feed/index.d.ts +22 -0
  138. package/dist/tools/global-feed/index.d.ts.map +1 -0
  139. package/dist/tools/global-feed/index.js +40 -0
  140. package/dist/tools/global-feed/index.js.map +1 -0
  141. package/dist/tools/global-feed/monitorGlobalFeedEvents.d.ts +16 -0
  142. package/dist/tools/global-feed/monitorGlobalFeedEvents.d.ts.map +1 -0
  143. package/dist/tools/global-feed/monitorGlobalFeedEvents.js +153 -0
  144. package/dist/tools/global-feed/monitorGlobalFeedEvents.js.map +1 -0
  145. package/dist/tools/global-feed/subscribeToGlobalFeed.d.ts +17 -0
  146. package/dist/tools/global-feed/subscribeToGlobalFeed.d.ts.map +1 -0
  147. package/dist/tools/global-feed/subscribeToGlobalFeed.js +110 -0
  148. package/dist/tools/global-feed/subscribeToGlobalFeed.js.map +1 -0
  149. package/dist/tools/global-feed/unsubscribeFromGlobalFeed.d.ts +16 -0
  150. package/dist/tools/global-feed/unsubscribeFromGlobalFeed.d.ts.map +1 -0
  151. package/dist/tools/global-feed/unsubscribeFromGlobalFeed.js +151 -0
  152. package/dist/tools/global-feed/unsubscribeFromGlobalFeed.js.map +1 -0
  153. package/dist/tools/handler-factories.d.ts +22 -48
  154. package/dist/tools/handler-factories.d.ts.map +1 -1
  155. package/dist/tools/handler-factories.js +15 -35
  156. package/dist/tools/handler-factories.js.map +1 -1
  157. package/dist/tools/holders/index.d.ts +55 -0
  158. package/dist/tools/holders/index.d.ts.map +1 -0
  159. package/dist/tools/holders/index.js +269 -0
  160. package/dist/tools/holders/index.js.map +1 -0
  161. package/dist/tools/index.d.ts.map +1 -1
  162. package/dist/tools/index.js +100 -65
  163. package/dist/tools/index.js.map +1 -1
  164. package/dist/tools/manifest.d.ts +33 -0
  165. package/dist/tools/manifest.d.ts.map +1 -0
  166. package/dist/tools/manifest.js +2945 -0
  167. package/dist/tools/manifest.js.map +1 -0
  168. package/dist/tools/messages/createMessage.d.ts +16 -0
  169. package/dist/tools/messages/createMessage.d.ts.map +1 -0
  170. package/dist/tools/messages/createMessage.js +79 -0
  171. package/dist/tools/messages/createMessage.js.map +1 -0
  172. package/dist/tools/messages/deleteMessage.d.ts +16 -0
  173. package/dist/tools/messages/deleteMessage.d.ts.map +1 -0
  174. package/dist/tools/messages/deleteMessage.js +45 -0
  175. package/dist/tools/messages/deleteMessage.js.map +1 -0
  176. package/dist/tools/messages/fetchMessages.d.ts +17 -0
  177. package/dist/tools/messages/fetchMessages.d.ts.map +1 -0
  178. package/dist/tools/messages/fetchMessages.js +82 -0
  179. package/dist/tools/messages/fetchMessages.js.map +1 -0
  180. package/dist/tools/messages/getPinnedMessage.d.ts +15 -0
  181. package/dist/tools/messages/getPinnedMessage.d.ts.map +1 -0
  182. package/dist/tools/messages/getPinnedMessage.js +42 -0
  183. package/dist/tools/messages/getPinnedMessage.js.map +1 -0
  184. package/dist/tools/messages/index.d.ts +38 -0
  185. package/dist/tools/messages/index.d.ts.map +1 -0
  186. package/dist/tools/messages/index.js +56 -0
  187. package/dist/tools/messages/index.js.map +1 -0
  188. package/dist/tools/messages/pinMessage.d.ts +15 -0
  189. package/dist/tools/messages/pinMessage.d.ts.map +1 -0
  190. package/dist/tools/messages/pinMessage.js +44 -0
  191. package/dist/tools/messages/pinMessage.js.map +1 -0
  192. package/dist/tools/messages/unpinMessage.d.ts +15 -0
  193. package/dist/tools/messages/unpinMessage.d.ts.map +1 -0
  194. package/dist/tools/messages/unpinMessage.js +43 -0
  195. package/dist/tools/messages/unpinMessage.js.map +1 -0
  196. package/dist/tools/messages/updateMessage.d.ts +16 -0
  197. package/dist/tools/messages/updateMessage.d.ts.map +1 -0
  198. package/dist/tools/messages/updateMessage.js +55 -0
  199. package/dist/tools/messages/updateMessage.js.map +1 -0
  200. package/dist/tools/moderators/getActiveModerators.d.ts +10 -0
  201. package/dist/tools/moderators/getActiveModerators.d.ts.map +1 -0
  202. package/dist/tools/moderators/getActiveModerators.js +44 -0
  203. package/dist/tools/moderators/getActiveModerators.js.map +1 -0
  204. package/dist/tools/moderators/index.d.ts.map +1 -1
  205. package/dist/tools/moderators/index.js +25 -17
  206. package/dist/tools/moderators/index.js.map +1 -1
  207. package/dist/tools/moderators/onModeratorChanged.d.ts +9 -0
  208. package/dist/tools/moderators/onModeratorChanged.d.ts.map +1 -0
  209. package/dist/tools/moderators/onModeratorChanged.js +49 -0
  210. package/dist/tools/moderators/onModeratorChanged.js.map +1 -0
  211. package/dist/tools/nft/index.js +21 -21
  212. package/dist/tools/nft/index.js.map +1 -1
  213. package/dist/tools/overseers/cache-management.d.ts +23 -0
  214. package/dist/tools/overseers/cache-management.d.ts.map +1 -0
  215. package/dist/tools/overseers/cache-management.js +151 -0
  216. package/dist/tools/overseers/cache-management.js.map +1 -0
  217. package/dist/tools/overseers/getOverseerUserSummary.js +2 -2
  218. package/dist/tools/overseers/getOverseerUserSummary.js.map +1 -1
  219. package/dist/tools/overseers/index.d.ts +11 -2
  220. package/dist/tools/overseers/index.d.ts.map +1 -1
  221. package/dist/tools/overseers/index.js +69 -27
  222. package/dist/tools/overseers/index.js.map +1 -1
  223. package/dist/tools/overseers/listOverseerUsers.d.ts +1 -0
  224. package/dist/tools/overseers/listOverseerUsers.d.ts.map +1 -1
  225. package/dist/tools/overseers/listOverseerUsers.js +16 -11
  226. package/dist/tools/overseers/listOverseerUsers.js.map +1 -1
  227. package/dist/tools/pagination-handler-factory.d.ts +30 -28
  228. package/dist/tools/pagination-handler-factory.d.ts.map +1 -1
  229. package/dist/tools/pagination-handler-factory.js +42 -36
  230. package/dist/tools/pagination-handler-factory.js.map +1 -1
  231. package/dist/tools/pools/checkPoolExists.js +3 -3
  232. package/dist/tools/pools/checkPoolExists.js.map +1 -1
  233. package/dist/tools/pools/fetchAllPools.js +5 -5
  234. package/dist/tools/pools/fetchAllPools.js.map +1 -1
  235. package/dist/tools/pools/fetchAllPriceHistory.js +3 -3
  236. package/dist/tools/pools/fetchAllPriceHistory.js.map +1 -1
  237. package/dist/tools/pools/fetchPoolDetails.js +1 -1
  238. package/dist/tools/pools/fetchPoolDetails.js.map +1 -1
  239. package/dist/tools/pools/fetchPools.d.ts.map +1 -1
  240. package/dist/tools/pools/fetchPools.js +10 -11
  241. package/dist/tools/pools/fetchPools.js.map +1 -1
  242. package/dist/tools/pools/fetchPriceHistory.js +7 -7
  243. package/dist/tools/pools/fetchPriceHistory.js.map +1 -1
  244. package/dist/tools/pools/fetchTokenDetails.js +1 -1
  245. package/dist/tools/pools/fetchTokenDetails.js.map +1 -1
  246. package/dist/tools/pools/getPoolRealtimeState.d.ts +10 -0
  247. package/dist/tools/pools/getPoolRealtimeState.d.ts.map +1 -0
  248. package/dist/tools/pools/getPoolRealtimeState.js +45 -0
  249. package/dist/tools/pools/getPoolRealtimeState.js.map +1 -0
  250. package/dist/tools/pools/index.d.ts.map +1 -1
  251. package/dist/tools/pools/index.js +51 -29
  252. package/dist/tools/pools/index.js.map +1 -1
  253. package/dist/tools/pools/onDexPoolCreation.js +3 -3
  254. package/dist/tools/pools/onDexPoolCreation.js.map +1 -1
  255. package/dist/tools/pools/onHolderCountChanged.d.ts +9 -0
  256. package/dist/tools/pools/onHolderCountChanged.d.ts.map +1 -0
  257. package/dist/tools/pools/onHolderCountChanged.js +44 -0
  258. package/dist/tools/pools/onHolderCountChanged.js.map +1 -0
  259. package/dist/tools/pools/onLaunchpadTokenCreation.js +2 -2
  260. package/dist/tools/pools/onLaunchpadTokenCreation.js.map +1 -1
  261. package/dist/tools/pools/onPoolUpdated.d.ts +9 -0
  262. package/dist/tools/pools/onPoolUpdated.d.ts.map +1 -0
  263. package/dist/tools/pools/onPoolUpdated.js +44 -0
  264. package/dist/tools/pools/onPoolUpdated.js.map +1 -0
  265. package/dist/tools/pools/updateTokenConfig.d.ts +15 -0
  266. package/dist/tools/pools/updateTokenConfig.d.ts.map +1 -0
  267. package/dist/tools/pools/updateTokenConfig.js +144 -0
  268. package/dist/tools/pools/updateTokenConfig.js.map +1 -0
  269. package/dist/tools/pools/validateToken.d.ts +8 -0
  270. package/dist/tools/pools/validateToken.d.ts.map +1 -0
  271. package/dist/tools/pools/validateToken.js +42 -0
  272. package/dist/tools/pools/validateToken.js.map +1 -0
  273. package/dist/tools/recordings/index.d.ts +28 -0
  274. package/dist/tools/recordings/index.d.ts.map +1 -0
  275. package/dist/tools/recordings/index.js +113 -0
  276. package/dist/tools/recordings/index.js.map +1 -0
  277. package/dist/tools/referrals/index.js +9 -9
  278. package/dist/tools/referrals/index.js.map +1 -1
  279. package/dist/tools/restricted-names/getRestrictedNames.d.ts +16 -0
  280. package/dist/tools/restricted-names/getRestrictedNames.d.ts.map +1 -0
  281. package/dist/tools/restricted-names/getRestrictedNames.js +47 -0
  282. package/dist/tools/restricted-names/getRestrictedNames.js.map +1 -0
  283. package/dist/tools/restricted-names/index.d.ts +22 -0
  284. package/dist/tools/restricted-names/index.d.ts.map +1 -0
  285. package/dist/tools/restricted-names/index.js +28 -0
  286. package/dist/tools/restricted-names/index.js.map +1 -0
  287. package/dist/tools/restricted-names/updateRestrictedNames.d.ts +16 -0
  288. package/dist/tools/restricted-names/updateRestrictedNames.d.ts.map +1 -0
  289. package/dist/tools/restricted-names/updateRestrictedNames.js +56 -0
  290. package/dist/tools/restricted-names/updateRestrictedNames.js.map +1 -0
  291. package/dist/tools/simulcasts/index.d.ts +25 -0
  292. package/dist/tools/simulcasts/index.d.ts.map +1 -0
  293. package/dist/tools/simulcasts/index.js +143 -0
  294. package/dist/tools/simulcasts/index.js.map +1 -0
  295. package/dist/tools/streaming/index.d.ts +4 -37
  296. package/dist/tools/streaming/index.d.ts.map +1 -1
  297. package/dist/tools/streaming/index.js +7 -240
  298. package/dist/tools/streaming/index.js.map +1 -1
  299. package/dist/tools/streaming/setNextLiveStreamCountdown.js +2 -2
  300. package/dist/tools/streaming/setNextLiveStreamCountdown.js.map +1 -1
  301. package/dist/tools/token-ban/index.d.ts.map +1 -1
  302. package/dist/tools/token-ban/index.js +14 -12
  303. package/dist/tools/token-ban/index.js.map +1 -1
  304. package/dist/tools/token-ban/onTokenBanChanged.d.ts +9 -0
  305. package/dist/tools/token-ban/onTokenBanChanged.d.ts.map +1 -0
  306. package/dist/tools/token-ban/onTokenBanChanged.js +43 -0
  307. package/dist/tools/token-ban/onTokenBanChanged.js.map +1 -0
  308. package/dist/tools/tool-factory.d.ts +6 -6
  309. package/dist/tools/tool-factory.js +8 -8
  310. package/dist/tools/tool-factory.js.map +1 -1
  311. package/dist/tools/trades/getRecentTrades.d.ts +10 -0
  312. package/dist/tools/trades/getRecentTrades.d.ts.map +1 -0
  313. package/dist/tools/trades/getRecentTrades.js +57 -0
  314. package/dist/tools/trades/getRecentTrades.js.map +1 -0
  315. package/dist/tools/trades/index.d.ts +1 -1
  316. package/dist/tools/trades/index.d.ts.map +1 -1
  317. package/dist/tools/trades/index.js +18 -14
  318. package/dist/tools/trades/index.js.map +1 -1
  319. package/dist/tools/trades/onTradeExecuted.d.ts +9 -0
  320. package/dist/tools/trades/onTradeExecuted.d.ts.map +1 -0
  321. package/dist/tools/trades/onTradeExecuted.js +52 -0
  322. package/dist/tools/trades/onTradeExecuted.js.map +1 -0
  323. package/dist/tools/trading/helpers/arg-extractors.d.ts +11 -11
  324. package/dist/tools/trading/helpers/arg-extractors.d.ts.map +1 -1
  325. package/dist/tools/trading/helpers/arg-extractors.js +1 -1
  326. package/dist/tools/trading/helpers/arg-extractors.js.map +1 -1
  327. package/dist/tools/trading/helpers/trading-schemas.d.ts +7 -7
  328. package/dist/tools/trading/helpers/trading-schemas.js +13 -13
  329. package/dist/tools/trading/helpers/trading-schemas.js.map +1 -1
  330. package/dist/tools/trading/index.d.ts.map +1 -1
  331. package/dist/tools/trading/index.js +20 -17
  332. package/dist/tools/trading/index.js.map +1 -1
  333. package/dist/tools/transfers/index.js +2 -2
  334. package/dist/tools/transfers/index.js.map +1 -1
  335. package/dist/tools/utils/clearCache.d.ts.map +1 -1
  336. package/dist/tools/utils/clearCache.js +1 -1
  337. package/dist/tools/utils/clearCache.js.map +1 -1
  338. package/dist/tools/utils/explainSdkUsage.d.ts +2 -0
  339. package/dist/tools/utils/explainSdkUsage.d.ts.map +1 -1
  340. package/dist/tools/utils/explainSdkUsage.js +403 -585
  341. package/dist/tools/utils/explainSdkUsage.js.map +1 -1
  342. package/dist/tools/utils/explainWebSocketEvents.d.ts +10 -0
  343. package/dist/tools/utils/explainWebSocketEvents.d.ts.map +1 -0
  344. package/dist/tools/utils/explainWebSocketEvents.js +97 -0
  345. package/dist/tools/utils/explainWebSocketEvents.js.map +1 -0
  346. package/dist/tools/utils/getEthereumAddressFromPrivateKey.js +1 -1
  347. package/dist/tools/utils/getEthereumAddressFromPrivateKey.js.map +1 -1
  348. package/dist/tools/utils/getEventSchema.d.ts +10 -0
  349. package/dist/tools/utils/getEventSchema.d.ts.map +1 -0
  350. package/dist/tools/utils/getEventSchema.js +168 -0
  351. package/dist/tools/utils/getEventSchema.js.map +1 -0
  352. package/dist/tools/utils/getPlatformStatus.d.ts +10 -0
  353. package/dist/tools/utils/getPlatformStatus.d.ts.map +1 -0
  354. package/dist/tools/utils/getPlatformStatus.js +35 -0
  355. package/dist/tools/utils/getPlatformStatus.js.map +1 -0
  356. package/dist/tools/utils/getPublicKeyFromPrivateKey.js +1 -1
  357. package/dist/tools/utils/getPublicKeyFromPrivateKey.js.map +1 -1
  358. package/dist/tools/utils/index.d.ts.map +1 -1
  359. package/dist/tools/utils/index.js +6 -0
  360. package/dist/tools/utils/index.js.map +1 -1
  361. package/dist/tools/utils/setWallet.js +1 -1
  362. package/dist/tools/utils/setWallet.js.map +1 -1
  363. package/dist/tools/utils/switchEnvironment.js +1 -1
  364. package/dist/tools/utils/switchEnvironment.js.map +1 -1
  365. package/dist/tools/validate-manifest.d.ts +35 -0
  366. package/dist/tools/validate-manifest.d.ts.map +1 -0
  367. package/dist/tools/validate-manifest.js +122 -0
  368. package/dist/tools/validate-manifest.js.map +1 -0
  369. package/dist/tools/websocket-admin/emitBalanceUpdated.d.ts +15 -0
  370. package/dist/tools/websocket-admin/emitBalanceUpdated.d.ts.map +1 -0
  371. package/dist/tools/websocket-admin/emitBalanceUpdated.js +64 -0
  372. package/dist/tools/websocket-admin/emitBalanceUpdated.js.map +1 -0
  373. package/dist/tools/websocket-admin/emitChatMessage.d.ts +15 -0
  374. package/dist/tools/websocket-admin/emitChatMessage.d.ts.map +1 -0
  375. package/dist/tools/websocket-admin/emitChatMessage.js +56 -0
  376. package/dist/tools/websocket-admin/emitChatMessage.js.map +1 -0
  377. package/dist/tools/websocket-admin/emitChatStatus.d.ts +15 -0
  378. package/dist/tools/websocket-admin/emitChatStatus.d.ts.map +1 -0
  379. package/dist/tools/websocket-admin/emitChatStatus.js +54 -0
  380. package/dist/tools/websocket-admin/emitChatStatus.js.map +1 -0
  381. package/dist/tools/websocket-admin/emitFeatureStatus.d.ts +15 -0
  382. package/dist/tools/websocket-admin/emitFeatureStatus.d.ts.map +1 -0
  383. package/dist/tools/websocket-admin/emitFeatureStatus.js +61 -0
  384. package/dist/tools/websocket-admin/emitFeatureStatus.js.map +1 -0
  385. package/dist/tools/websocket-admin/emitModeratorAdded.d.ts +15 -0
  386. package/dist/tools/websocket-admin/emitModeratorAdded.d.ts.map +1 -0
  387. package/dist/tools/websocket-admin/emitModeratorAdded.js +64 -0
  388. package/dist/tools/websocket-admin/emitModeratorAdded.js.map +1 -0
  389. package/dist/tools/websocket-admin/emitModeratorRemoved.d.ts +15 -0
  390. package/dist/tools/websocket-admin/emitModeratorRemoved.d.ts.map +1 -0
  391. package/dist/tools/websocket-admin/emitModeratorRemoved.js +54 -0
  392. package/dist/tools/websocket-admin/emitModeratorRemoved.js.map +1 -0
  393. package/dist/tools/websocket-admin/emitSiteConfigChanged.d.ts +15 -0
  394. package/dist/tools/websocket-admin/emitSiteConfigChanged.d.ts.map +1 -0
  395. package/dist/tools/websocket-admin/emitSiteConfigChanged.js +54 -0
  396. package/dist/tools/websocket-admin/emitSiteConfigChanged.js.map +1 -0
  397. package/dist/tools/websocket-admin/emitStreamCountdown.d.ts +15 -0
  398. package/dist/tools/websocket-admin/emitStreamCountdown.d.ts.map +1 -0
  399. package/dist/tools/websocket-admin/emitStreamCountdown.js +55 -0
  400. package/dist/tools/websocket-admin/emitStreamCountdown.js.map +1 -0
  401. package/dist/tools/websocket-admin/emitStreamStatus.d.ts +15 -0
  402. package/dist/tools/websocket-admin/emitStreamStatus.d.ts.map +1 -0
  403. package/dist/tools/websocket-admin/emitStreamStatus.js +59 -0
  404. package/dist/tools/websocket-admin/emitStreamStatus.js.map +1 -0
  405. package/dist/tools/websocket-admin/emitTokenBanned.d.ts +15 -0
  406. package/dist/tools/websocket-admin/emitTokenBanned.d.ts.map +1 -0
  407. package/dist/tools/websocket-admin/emitTokenBanned.js +60 -0
  408. package/dist/tools/websocket-admin/emitTokenBanned.js.map +1 -0
  409. package/dist/tools/websocket-admin/emitTokenUnbanned.d.ts +15 -0
  410. package/dist/tools/websocket-admin/emitTokenUnbanned.d.ts.map +1 -0
  411. package/dist/tools/websocket-admin/emitTokenUnbanned.js +54 -0
  412. package/dist/tools/websocket-admin/emitTokenUnbanned.js.map +1 -0
  413. package/dist/tools/websocket-admin/emitTradeExecuted.d.ts +15 -0
  414. package/dist/tools/websocket-admin/emitTradeExecuted.d.ts.map +1 -0
  415. package/dist/tools/websocket-admin/emitTradeExecuted.js +64 -0
  416. package/dist/tools/websocket-admin/emitTradeExecuted.js.map +1 -0
  417. package/dist/tools/websocket-admin/emitTypingIndicator.d.ts +15 -0
  418. package/dist/tools/websocket-admin/emitTypingIndicator.d.ts.map +1 -0
  419. package/dist/tools/websocket-admin/emitTypingIndicator.js +57 -0
  420. package/dist/tools/websocket-admin/emitTypingIndicator.js.map +1 -0
  421. package/dist/tools/websocket-admin/emitUserProfileUpdated.d.ts +15 -0
  422. package/dist/tools/websocket-admin/emitUserProfileUpdated.d.ts.map +1 -0
  423. package/dist/tools/websocket-admin/emitUserProfileUpdated.js +57 -0
  424. package/dist/tools/websocket-admin/emitUserProfileUpdated.js.map +1 -0
  425. package/dist/tools/websocket-admin/emitViewerCount.d.ts +15 -0
  426. package/dist/tools/websocket-admin/emitViewerCount.d.ts.map +1 -0
  427. package/dist/tools/websocket-admin/emitViewerCount.js +50 -0
  428. package/dist/tools/websocket-admin/emitViewerCount.js.map +1 -0
  429. package/dist/tools/websocket-admin/emitWebSocketEvent.d.ts +15 -0
  430. package/dist/tools/websocket-admin/emitWebSocketEvent.d.ts.map +1 -0
  431. package/dist/tools/websocket-admin/emitWebSocketEvent.js +98 -0
  432. package/dist/tools/websocket-admin/emitWebSocketEvent.js.map +1 -0
  433. package/dist/tools/websocket-admin/getConnectedClients.d.ts +15 -0
  434. package/dist/tools/websocket-admin/getConnectedClients.d.ts.map +1 -0
  435. package/dist/tools/websocket-admin/getConnectedClients.js +115 -0
  436. package/dist/tools/websocket-admin/getConnectedClients.js.map +1 -0
  437. package/dist/tools/websocket-admin/getOnlineOverseers.d.ts +15 -0
  438. package/dist/tools/websocket-admin/getOnlineOverseers.d.ts.map +1 -0
  439. package/dist/tools/websocket-admin/getOnlineOverseers.js +39 -0
  440. package/dist/tools/websocket-admin/getOnlineOverseers.js.map +1 -0
  441. package/dist/tools/websocket-admin/getOnlineUsers.d.ts +15 -0
  442. package/dist/tools/websocket-admin/getOnlineUsers.d.ts.map +1 -0
  443. package/dist/tools/websocket-admin/getOnlineUsers.js +54 -0
  444. package/dist/tools/websocket-admin/getOnlineUsers.js.map +1 -0
  445. package/dist/tools/websocket-admin/getTokenViewers.d.ts +15 -0
  446. package/dist/tools/websocket-admin/getTokenViewers.d.ts.map +1 -0
  447. package/dist/tools/websocket-admin/getTokenViewers.js +60 -0
  448. package/dist/tools/websocket-admin/getTokenViewers.js.map +1 -0
  449. package/dist/tools/websocket-admin/index.d.ts +74 -0
  450. package/dist/tools/websocket-admin/index.d.ts.map +1 -0
  451. package/dist/tools/websocket-admin/index.js +126 -0
  452. package/dist/tools/websocket-admin/index.js.map +1 -0
  453. package/dist/tools/websocket-admin/isUserOnline.d.ts +15 -0
  454. package/dist/tools/websocket-admin/isUserOnline.d.ts.map +1 -0
  455. package/dist/tools/websocket-admin/isUserOnline.js +49 -0
  456. package/dist/tools/websocket-admin/isUserOnline.js.map +1 -0
  457. package/dist/utils/default-values.d.ts +0 -40
  458. package/dist/utils/default-values.d.ts.map +1 -1
  459. package/dist/utils/default-values.js +2 -45
  460. package/dist/utils/default-values.js.map +1 -1
  461. package/dist/utils/handler-args.d.ts +8 -0
  462. package/dist/utils/handler-args.d.ts.map +1 -0
  463. package/dist/utils/handler-args.js +28 -0
  464. package/dist/utils/handler-args.js.map +1 -0
  465. package/package.json +10 -10
  466. package/dist/tools/pools/updateTokenSocials.d.ts +0 -16
  467. package/dist/tools/pools/updateTokenSocials.d.ts.map +0 -1
  468. package/dist/tools/pools/updateTokenSocials.js +0 -84
  469. package/dist/tools/pools/updateTokenSocials.js.map +0 -1
@@ -34,14 +34,14 @@ exports.TOPIC_METHOD_MAPPING = {
34
34
  'token-distribution': ['fetchTokenDistribution', 'fetchUserHolderContext'],
35
35
  'token-status': ['isTokenGraduated', 'onDexPoolCreation', 'onLaunchpadTokenCreation'],
36
36
  // Portfolio Management
37
- 'multi-wallet': [], // Composite workflow topic
37
+ 'multi-wallet': ['getAddress'], // Composite workflow topic
38
38
  'transfers': ['transferGala', 'transferToken'],
39
39
  'locks': ['lockTokens', 'unlockTokens', 'burnTokens', 'fetchLockedBalance'],
40
40
  // DEX Trading
41
41
  'dex-trading': ['getSwapQuoteExactInput', 'getSwapQuoteExactOutput', 'executeSwap', 'getSwapUserAssets', 'getAllSwapUserAssets', 'getSwapPoolInfo'],
42
- 'error-handling': [], // Cross-cutting concern
42
+ 'error-handling': ['getBundlerTransactionResult'], // Cross-cutting concern
43
43
  // Developer Tools
44
- 'installation': [], // Setup topic
44
+ 'installation': ['getVersion'], // Setup topic
45
45
  'local-calculations': ['calculateBuyAmountLocal', 'calculateSellAmountLocal', 'calculateBuyAmountExternal', 'calculateSellAmountExternal', 'calculateInitialBuyAmount'],
46
46
  // Market Data
47
47
  'price-history': ['fetchPriceHistory', 'fetchAllPriceHistory'],
@@ -65,7 +65,7 @@ exports.TOPIC_METHOD_MAPPING = {
65
65
  // Event Subscriptions
66
66
  'event-subscriptions': ['subscribeToStream', 'unsubscribeFromStream', 'onStreamStatusChanged', 'onUserBanned', 'onUserUnbanned', 'onBanEnforcement', 'onContentFlagged', 'onFlagResolved', 'onStreamChatMessage', 'onStreamChatUpdated', 'onStreamChatDeleted', 'onStreamChatPinned', 'onStreamChatUnpinned', 'onChatStatusChanged', 'onViewerCountChanged', 'onRecordingStatusChanged', 'onSimulcastStatusChanged', 'onDownloadReady', 'onUserTyping', 'onStreamReaction', 'onContentReactionAdded', 'onContentReactionRemoved', 'onStreamCountdownUpdated', 'onStreamLanguageUpdated', 'onStreamControlStatusChanged', 'onConnection', 'onAuthenticated', 'onTokenSubscribed', 'onTokenUnsubscribed', 'onRoomSubscribed', 'onRoomLeft', 'onDexPoolCreation', 'onLaunchpadTokenCreation'],
67
67
  // MCP Integration
68
- 'mcp-to-sdk-mapping': [], // Composite workflow topic
68
+ 'mcp-to-sdk-mapping': ['explainSdkUsage'], // Composite workflow topic
69
69
  // Bridge Operations
70
70
  'bridge-operations': [
71
71
  'estimateBridgeFee', 'bridgeOut', 'bridgeIn', 'getBridgeStatus',
@@ -113,7 +113,7 @@ exports.TOPIC_METHOD_MAPPING = {
113
113
  ],
114
114
  // Stream Chat
115
115
  'stream-chat': [
116
- 'getChatMessages', 'sendChatMessage', 'updateChatMessage', 'deleteChatMessage', 'getChatStatus', 'disableChat', 'enableChat',
116
+ 'getChatStatus', 'disableChat', 'enableChat',
117
117
  'getGlobalChatStatus', 'setGlobalChatEnabled',
118
118
  'connectStreamWebSocket', 'authenticateStreamWebSocket', 'subscribeToStream',
119
119
  'unsubscribeFromStream', 'sendStreamChatViaWebSocket', 'sendStreamReaction', 'disconnectStreamWebSocket',
@@ -166,6 +166,14 @@ exports.TOPIC_METHOD_MAPPING = {
166
166
  'createNftTokenClass', 'fetchNftTokenClasses',
167
167
  'mintNft', 'fetchNftBalances'
168
168
  ],
169
+ // Token Identification & Format Concepts (v5.14.0+)
170
+ // These are conceptual topics that help AI understand token formats
171
+ 'token-identification': [
172
+ 'fetchPools', 'isTokenGraduated', 'resolveTokenClassKey', 'fetchTokenPrice'
173
+ ],
174
+ 'graduation-detection': [
175
+ 'isTokenGraduated', 'fetchPools', 'onDexPoolCreation', 'onLaunchpadTokenCreation'
176
+ ],
169
177
  };
170
178
  /**
171
179
  * Composite topics that don't map 1:1 to SDK methods
@@ -184,6 +192,8 @@ exports.COMPOSITE_TOPICS = new Set([
184
192
  'session-auth', 'streaming', 'stream-chat', 'ban-management', 'api-key-management',
185
193
  'moderator-invites', 'overseer-invites', 'content-flag-management', 'content-reactions', 'trade-history', 'token-ban-management',
186
194
  'nft-collection-management',
195
+ // Token Concepts (v5.14.0+)
196
+ 'token-identification', 'graduation-detection',
187
197
  ]);
188
198
  /**
189
199
  * SDK code examples organized by topic
@@ -220,10 +230,6 @@ async function buyTokens() {
220
230
  type: 'native' // 'native' = GALA amount, 'exact' = token amount
221
231
  });
222
232
 
223
- console.log('Expected tokens:', calculation.amount);
224
- console.log('RBC Fee:', calculation.reverseBondingCurveFee);
225
- console.log('Transaction fee:', calculation.transactionFee);
226
-
227
233
  // 3. Execute buy with slippage protection
228
234
  const result = await sdk.buy({
229
235
  tokenName: 'dragnrkti',
@@ -234,10 +240,6 @@ async function buyTokens() {
234
240
  slippageToleranceFactor: 0.01 // 1% slippage tolerance (REQUIRED)
235
241
  });
236
242
 
237
- console.log('Transaction ID:', result.transactionId);
238
- console.log('GALA spent:', result.inputAmount);
239
- console.log('Tokens received:', result.outputAmount);
240
- console.log('Total fees:', result.totalFees);
241
243
  }
242
244
  \`\`\`
243
245
 
@@ -266,9 +268,6 @@ async function sellTokens() {
266
268
  type: 'exact' // 'exact' = exact tokens, 'native' = target GALA amount
267
269
  });
268
270
 
269
- console.log('Expected GALA:', calculation.amount);
270
- console.log('RBC Fee:', calculation.reverseBondingCurveFee);
271
-
272
271
  // 3. Execute sell with slippage protection
273
272
  const result = await sdk.sell({
274
273
  tokenName: 'dragnrkti',
@@ -279,8 +278,6 @@ async function sellTokens() {
279
278
  slippageToleranceFactor: 0.01 // 1% slippage
280
279
  });
281
280
 
282
- console.log('Tokens sold:', result.inputAmount);
283
- console.log('GALA received:', result.outputAmount);
284
281
  }
285
282
  \`\`\`
286
283
 
@@ -304,10 +301,6 @@ async function graduatePool() {
304
301
  // Option 1: Calculate graduation cost first (recommended)
305
302
  const calculation = await sdk.calculateBuyAmountForGraduation('dragnrkti');
306
303
 
307
- console.log('GALA cost to graduate:', calculation.amount);
308
- console.log('RBC Fee:', calculation.reverseBondingCurveFee);
309
- console.log('Transaction fee:', calculation.transactionFee);
310
-
311
304
  // Check if you have enough balance
312
305
  const balance = await sdk.fetchGalaBalance();
313
306
  // Use compareAmounts() instead of parseFloat for precision with currency amounts
@@ -321,10 +314,6 @@ async function graduatePool() {
321
314
  slippageToleranceFactor: 0.01 // Optional: defaults to SDK config
322
315
  });
323
316
 
324
- console.log('Pool graduated!');
325
- console.log('Transaction ID:', result.transactionId);
326
- console.log('Total GALA spent:', result.inputAmount);
327
- console.log('Tokens received:', result.outputAmount);
328
317
  }
329
318
  \`\`\`
330
319
 
@@ -367,9 +356,8 @@ async function basicPoolFetching() {
367
356
  page: 1
368
357
  });
369
358
 
370
- console.log(\`Found \${pools.total} pools, page \${pools.page} of \${pools.totalPages}\`);
371
359
  pools.pools.forEach(pool => {
372
- console.log(\`\${pool.tokenName}: \${pool.tokenSymbol}\`);
360
+
373
361
  });
374
362
  }
375
363
 
@@ -382,7 +370,6 @@ async function fetchAllPools() {
382
370
  type: 'recent'
383
371
  });
384
372
 
385
- console.log(\`Total pools: \${allPools.pools.length}\`);
386
373
  }
387
374
 
388
375
  // 3. POOL DETAILS - Complete information
@@ -391,10 +378,6 @@ async function getPoolDetails(tokenName) {
391
378
 
392
379
  const details = await sdk.fetchPoolDetails(tokenName);
393
380
 
394
- console.log('Sale status:', details.saleStatus); // 'Ongoing' or 'Completed'
395
- console.log('Base price:', details.basePrice);
396
- console.log('Max supply:', details.maxSupply);
397
- console.log('Remaining tokens:', details.sellingTokenQuantity);
398
381
  }
399
382
 
400
383
  // 4. POOL DETAILS FOR CALCULATIONS - Optimized for math
@@ -404,10 +387,6 @@ async function getOptimizedPoolDetails(tokenName) {
404
387
  // Returns only fields needed for bonding curve calculations
405
388
  const poolData = await sdk.fetchPoolDetailsForCalculation(tokenName);
406
389
 
407
- console.log('Current supply:', poolData.currentSupply);
408
- console.log('Remaining tokens:', poolData.remainingTokens);
409
- console.log('Max supply:', poolData.maxSupply);
410
- console.log('Reverse bonding curve max fee:', poolData.reverseBondingCurveMaxFeeFactor);
411
390
  }
412
391
 
413
392
  // 5. VOLUME & OHLCV DATA - Historical candlestick data
@@ -423,7 +402,7 @@ async function getVolumeData(tokenName) {
423
402
  });
424
403
 
425
404
  volumeData.forEach(candle => {
426
- console.log(\`\${candle.time}: O:\${candle.open} H:\${candle.high} L:\${candle.low} C:\${candle.close} V:\${candle.volume}\`);
405
+
427
406
  });
428
407
  }
429
408
 
@@ -434,9 +413,6 @@ async function getDexTokenPrices() {
434
413
  // Fetch prices for multiple DEX tokens
435
414
  const prices = await sdk.fetchTokenPrice(['GALA', 'SILK', 'MUSIC']);
436
415
 
437
- console.log(\`GALA: $\${prices.GALA}\`);
438
- console.log(\`SILK: $\${prices.SILK}\`);
439
- console.log(\`MUSIC: $\${prices.MUSIC}\`);
440
416
  }
441
417
 
442
418
  // 7. LAUNCHPAD TOKEN SPOT PRICES (via smart router)
@@ -446,7 +422,6 @@ async function getLaunchpadTokenPrice(tokenName) {
446
422
  // Get USD spot price for a launchpad token (anime, woohoo, etc.)
447
423
  const price = await sdk.fetchTokenPrice({ tokenName });
448
424
 
449
- console.log(\`\${tokenName} price: $\${price.price}\`);
450
425
  }
451
426
 
452
427
  // 8. RESOLVE UTILITY ADDRESSES
@@ -455,11 +430,10 @@ async function resolveAddresses(tokenName) {
455
430
 
456
431
  // Get GalaChain vault address for token
457
432
  const vaultAddress = await sdk.resolveVaultAddress(tokenName);
458
- console.log(\`Vault address: \${vaultAddress}\`);
459
433
 
460
434
  // Get TokenClassKey for token
461
435
  const tokenClassKey = await sdk.resolveTokenClassKey(tokenName);
462
- console.log(\`TokenClassKey: \${tokenClassKey}\`);
436
+
463
437
  }
464
438
 
465
439
  // 9. COMPLETE INVESTMENT ANALYSIS WORKFLOW
@@ -475,14 +449,11 @@ async function analyzeToken(tokenName) {
475
449
  ]);
476
450
 
477
451
  // Analyze status
478
- console.log(\`Pool Status: \${details.saleStatus}\`);
479
- console.log(\`Supply: \${details.currentSupply} / \${details.maxSupply}\`);
480
452
 
481
453
  // Analyze volume trend
482
454
  // Note: For analytics/aggregation, we use safeParseFloat for performance. For trades, use BigNumber via SDK
483
455
  const volumes = volumeData.map(v => safeParseFloat(v.volume, 0));
484
456
  const avgVolume = volumes.reduce((a, b) => a + b, 0) / volumes.length;
485
- console.log(\`Avg daily volume: $\${toBigNumberFixed(avgVolume, 2)}\`);
486
457
 
487
458
  // Analyze distribution
488
459
  // Use compareAmounts for precise balance comparisons
@@ -490,10 +461,9 @@ async function analyzeToken(tokenName) {
490
461
  .sort((a, b) => compareAmounts(b.balance, a.balance) > 0 ? 1 : -1)
491
462
  .slice(0, 5)
492
463
  .reduce((sum, h) => sum + h.percentage, 0);
493
- console.log(\`Top 5 holders: \${toBigNumberFixed(top5Ownership, 2)}%\`);
494
464
 
495
465
  // Check badges
496
- console.log(\`Badges: \${badges.join(', ')}\`);
466
+
497
467
  }
498
468
  \`\`\`
499
469
 
@@ -530,9 +500,6 @@ async function checkBalances() {
530
500
 
531
501
  // Check GALA balance
532
502
  const galaBalance = await sdk.fetchGalaBalance();
533
- console.log(\`GALA: \${galaBalance.balance}\`);
534
- console.log(\`Decimals: \${galaBalance.decimals}\`);
535
- console.log(\`Last updated: \${galaBalance.lastUpdated.toISOString()}\`);
536
503
 
537
504
  // Check specific token balance
538
505
  const tokenBalance = await sdk.fetchTokenBalance({
@@ -540,19 +507,14 @@ async function checkBalances() {
540
507
  address: sdk.getAddress()
541
508
  });
542
509
 
543
- console.log(\`Token: \${tokenBalance.quantity}\`);
544
- console.log(\`USD value: $\${tokenBalance.holdingPriceUsd}\`);
545
- console.log(\`GALA value: \${tokenBalance.holdingPriceGala}\`);
546
-
547
510
  // Check all tokens held
548
511
  const portfolio = await sdk.fetchTokensHeld({
549
512
  address: sdk.getAddress(),
550
513
  limit: 20
551
514
  });
552
515
 
553
- console.log(\`Holding \${portfolio.total} different tokens\`);
554
516
  portfolio.tokens.forEach(token => {
555
- console.log(\`\${token.name}: \${token.quantity}\`);
517
+
556
518
  });
557
519
 
558
520
  // Check tokens created by this wallet
@@ -561,18 +523,16 @@ async function checkBalances() {
561
523
  limit: 10
562
524
  });
563
525
 
564
- console.log(\`Created \${createdTokens.total} tokens\`);
565
526
  createdTokens.tokens.forEach(token => {
566
- console.log(\` \${token.symbol}: \${token.name}\`);
527
+
567
528
  });
568
529
 
569
530
  // Get user profile
570
531
  const profile = await sdk.fetchProfile();
571
- console.log(\`Profile: \${profile.fullName}\`);
572
532
 
573
533
  // Check profile of another user
574
534
  const otherProfile = await sdk.fetchProfile('eth|0x...');
575
- console.log(\`Other user: \${otherProfile.fullName}\`);
535
+
576
536
  }
577
537
  \`\`\`
578
538
 
@@ -600,8 +560,6 @@ const locked = await sdk.fetchLockedTokens({
600
560
  address: walletAddress
601
561
  });
602
562
 
603
- console.log('Available:', available.quantity);
604
- console.log('Locked:', locked.lockedQuantity);
605
563
  \`\`\`
606
564
  `,
607
565
  // ============================================================================
@@ -639,7 +597,6 @@ async function launchToken() {
639
597
 
640
598
  // 2. Check launch fee
641
599
  const launchFee = await sdk.fetchLaunchTokenFee();
642
- console.log(\`Launch fee: \${launchFee} GALA\`);
643
600
 
644
601
  // 3. Upload token image (Node.js only)
645
602
  const imageUpload = await sdk.uploadTokenImage({
@@ -658,12 +615,9 @@ async function launchToken() {
658
615
  preBuyQuantity: '100' // Optional: pre-buy with GALA
659
616
  });
660
617
 
661
- console.log('Token launched!');
662
- console.log('Transaction ID:', result.transactionId);
663
-
664
618
  // Get frontend URL
665
619
  const url = sdk.getUrlByTokenName('mytoken');
666
- console.log(\`View at: \${url}\`);
620
+
667
621
  }
668
622
  \`\`\`
669
623
 
@@ -699,7 +653,6 @@ async function multiWalletExample() {
699
653
 
700
654
  // Create a test wallet
701
655
  const testWallet = createWallet();
702
- console.log('Test wallet:', testWallet.address);
703
656
 
704
657
  // 1. Fund test wallet from main wallet
705
658
  await sdk.transferGala({
@@ -723,14 +676,10 @@ async function multiWalletExample() {
723
676
  privateKey: testWallet.privateKey // Override to use test wallet
724
677
  });
725
678
 
726
- console.log('Test wallet bought tokens');
727
-
728
679
  // 3. Check balances for both wallets
729
680
  const mainBalance = await sdk.fetchGalaBalance(); // Main wallet
730
681
  const testBalance = await sdk.fetchGalaBalance(testWallet.address); // Test wallet
731
682
 
732
- console.log(\`Main wallet: \${mainBalance.balance} GALA\`);
733
- console.log(\`Test wallet: \${testBalance.balance} GALA\`);
734
683
  }
735
684
  \`\`\`
736
685
 
@@ -761,9 +710,6 @@ async function transferTokens() {
761
710
  uniqueKey: 'galaconnect-operation-my-transfer-123' // Optional idempotency
762
711
  });
763
712
 
764
- console.log('GALA transfer ID:', galaTransfer.transactionId);
765
- console.log('Status:', galaTransfer.status);
766
-
767
713
  // Transfer launchpad tokens
768
714
  const tokenTransfer = await sdk.transferToken({
769
715
  to: 'eth|5678...',
@@ -772,7 +718,6 @@ async function transferTokens() {
772
718
  uniqueKey: 'galaconnect-operation-token-456'
773
719
  });
774
720
 
775
- console.log('Token transfer ID:', tokenTransfer.transactionId);
776
721
  }
777
722
  \`\`\`
778
723
 
@@ -817,9 +762,6 @@ async function tokenLockingAndBurning() {
817
762
  }]
818
763
  });
819
764
 
820
- console.log('Lock transaction ID:', lockResult.transactionId);
821
- console.log('Locked entries:', lockResult.locked);
822
-
823
765
  // ============================================================================
824
766
  // LOCK TOKENS - Multiple tokens in one transaction (batch)
825
767
  // ============================================================================
@@ -833,8 +775,6 @@ async function tokenLockingAndBurning() {
833
775
  ]
834
776
  });
835
777
 
836
- console.log('Batch lock completed:', batchLock.locked.length, 'tokens locked');
837
-
838
778
  // ============================================================================
839
779
  // LOCK TOKENS - Advanced options
840
780
  // ============================================================================
@@ -850,8 +790,6 @@ async function tokenLockingAndBurning() {
850
790
  }]
851
791
  });
852
792
 
853
- console.log('Escrow lock created');
854
-
855
793
  // Lock for time-based vesting
856
794
  const vestingLock = await sdk.lockTokens({
857
795
  tokens: [{
@@ -862,8 +800,6 @@ async function tokenLockingAndBurning() {
862
800
  }]
863
801
  });
864
802
 
865
- console.log('Vesting lock created with expiry');
866
-
867
803
  // ============================================================================
868
804
  // UNLOCK TOKENS - Release locked tokens
869
805
  // ============================================================================
@@ -876,9 +812,6 @@ async function tokenLockingAndBurning() {
876
812
  }]
877
813
  });
878
814
 
879
- console.log('Unlock transaction ID:', unlockResult.transactionId);
880
- console.log('Unlocked entries:', unlockResult.unlocked);
881
-
882
815
  // Unlock multiple tokens in one transaction
883
816
  const batchUnlock = await sdk.unlockTokens({
884
817
  tokens: [
@@ -887,8 +820,6 @@ async function tokenLockingAndBurning() {
887
820
  ]
888
821
  });
889
822
 
890
- console.log('Batch unlock completed');
891
-
892
823
  // ============================================================================
893
824
  // BURN TOKENS - Permanently destroy (IRREVERSIBLE!)
894
825
  // ============================================================================
@@ -901,9 +832,6 @@ async function tokenLockingAndBurning() {
901
832
  }]
902
833
  });
903
834
 
904
- console.log('Burn transaction ID:', burnResult.transactionId);
905
- console.log('Burned:', burnResult.burned);
906
-
907
835
  // Batch burn multiple token types
908
836
  const batchBurn = await sdk.burnTokens({
909
837
  tokens: [
@@ -912,8 +840,6 @@ async function tokenLockingAndBurning() {
912
840
  ]
913
841
  });
914
842
 
915
- console.log('Batch burn completed:', batchBurn.burned.length, 'token types burned');
916
-
917
843
  // ============================================================================
918
844
  // QUERY LOCKED TOKENS - Check lock status
919
845
  // ============================================================================
@@ -923,15 +849,11 @@ async function tokenLockingAndBurning() {
923
849
  address: sdk.getAddress()
924
850
  });
925
851
 
926
- console.log('Locked quantity:', lockedTokens.lockedQuantity);
927
- console.log('Active holds:', lockedTokens.holds);
928
-
929
852
  // Each hold contains: lockAuthority, expires, name, quantity
930
853
  for (const hold of lockedTokens.holds) {
931
- console.log(\` - \${hold.quantity} locked by \${hold.lockAuthority}\`);
932
- if (hold.expires) console.log(\` Expires: \${new Date(hold.expires)}\`);
933
- if (hold.name) console.log(\` Name: \${hold.name}\`);
934
- }
854
+
855
+ if (hold.expires) }\`);
856
+ if (hold.name) }
935
857
 
936
858
  // ============================================================================
937
859
  // STAKING WORKFLOW EXAMPLE
@@ -948,8 +870,6 @@ async function tokenLockingAndBurning() {
948
870
  }]
949
871
  });
950
872
 
951
- console.log('Staked 5000 tokens for 90 days');
952
-
953
873
  // Step 2: After staking period expires, unlock
954
874
  const unstake = await sdk.unlockTokens({
955
875
  tokens: [{
@@ -959,7 +879,6 @@ async function tokenLockingAndBurning() {
959
879
  }]
960
880
  });
961
881
 
962
- console.log('Unstaked tokens after staking period');
963
882
  return { stake, unstake };
964
883
  }
965
884
 
@@ -978,8 +897,6 @@ async function tokenLockingAndBurning() {
978
897
  }]
979
898
  });
980
899
 
981
- console.log('Escrow created: seller can release payment upon delivery');
982
-
983
900
  // Step 2: Seller releases escrow after delivery (seller calls unlock)
984
901
  // This would be executed by the seller's SDK instance
985
902
  // const release = await sellerSdk.unlockTokens({
@@ -1075,13 +992,9 @@ async function dexTradingExample() {
1075
992
 
1076
993
  // Quote 1: Exact input (spend known GALA amount)
1077
994
  const quoteIn = await sdk.getSwapQuoteExactInput('GALA', 'GUSDC', '100');
1078
- console.log('Spend 100 GALA → get ~' + quoteIn.estimatedOutput + ' GUSDC');
1079
- console.log('Price impact: ' + quoteIn.priceImpact + '%');
1080
- console.log('Fee tier: ' + quoteIn.feeTier + ' bps');
1081
995
 
1082
996
  // Quote 2: Exact output (get known token amount)
1083
997
  const quoteOut = await sdk.getSwapQuoteExactOutput('GALA', 'GUSDC', '100');
1084
- console.log('Get exactly 100 GUSDC → need ~' + quoteOut.inputAmount + ' GALA');
1085
998
 
1086
999
  // ============================================================================
1087
1000
  // EXECUTE: Perform the swap with slippage protection
@@ -1096,18 +1009,14 @@ async function dexTradingExample() {
1096
1009
  0.01 // 1% slippage tolerance
1097
1010
  );
1098
1011
 
1099
- console.log('Transaction ID: ' + result.transactionId);
1100
- console.log('Status: ' + result.status);
1101
- console.log('Received: ' + result.outputAmount + ' ' + result.toToken);
1102
-
1103
1012
  // ============================================================================
1104
1013
  // PORTFOLIO: Check balances and assets
1105
1014
  // ============================================================================
1106
1015
 
1107
1016
  const assets = await sdk.getSwapUserAssets(sdk.getEthereumAddress());
1108
- console.log('Assets in wallet:');
1017
+
1109
1018
  assets.forEach(asset => {
1110
- console.log(' ' + asset.symbol + ': ' + asset.balance);
1019
+
1111
1020
  });
1112
1021
 
1113
1022
  // ============================================================================
@@ -1115,10 +1024,9 @@ async function dexTradingExample() {
1115
1024
  // ============================================================================
1116
1025
 
1117
1026
  const allAssets = await sdk.getAllSwapUserAssets(sdk.getEthereumAddress());
1118
- console.log('Complete asset portfolio:');
1119
- console.log('Total assets: ' + allAssets.length);
1027
+
1120
1028
  allAssets.forEach(asset => {
1121
- console.log(' ' + asset.symbol + ': ' + asset.balance);
1029
+
1122
1030
  });
1123
1031
 
1124
1032
  // ============================================================================
@@ -1126,10 +1034,7 @@ async function dexTradingExample() {
1126
1034
  // ============================================================================
1127
1035
 
1128
1036
  const pool = await sdk.getSwapPoolInfo('GALA', 'GUSDC');
1129
- console.log('GALA↔GUSDC Pool Info:');
1130
- console.log(' Liquidity: ' + pool.liquidity);
1131
- console.log(' Available fee tiers: ' + pool.feeTiers.join(', ') + ' bps');
1132
- console.log(' 24h swaps: ' + pool.swapCount);
1037
+
1133
1038
  }
1134
1039
  \`\`\`
1135
1040
 
@@ -1181,8 +1086,6 @@ async function errorHandlingExample() {
1181
1086
  slippageToleranceFactor: 0.01
1182
1087
  });
1183
1088
 
1184
- console.log('Success:', result.transactionId);
1185
-
1186
1089
  } catch (error) {
1187
1090
  if (error instanceof ValidationError) {
1188
1091
  console.error('Invalid input:', error.message);
@@ -1322,12 +1225,6 @@ async function localCalculationsExample() {
1322
1225
  type: 'native' // 'native' = GALA amount, 'exact' = token amount
1323
1226
  });
1324
1227
 
1325
- console.log('LOCAL Buy Quote (instant):');
1326
- console.log(' Tokens received:', localBuy.amount);
1327
- console.log(' Transaction fee:', localBuy.transactionFee);
1328
- console.log(' RBC Fee:', localBuy.reverseBondingCurveFee); // Always "0" for buys
1329
- console.log(' Gas fee:', localBuy.gasFee);
1330
-
1331
1228
  // 2. Sell calculation (local, requires pool details)
1332
1229
  const poolDetails = await sdk.fetchPoolDetails('dragnrkti');
1333
1230
 
@@ -1341,11 +1238,6 @@ async function localCalculationsExample() {
1341
1238
  maxFeePortion: poolDetails.reverseBondingCurveMaxFeeFactor || 0
1342
1239
  });
1343
1240
 
1344
- console.log('LOCAL Sell Quote (instant):');
1345
- console.log(' GALA received:', localSell.amount);
1346
- console.log(' RBC Fee:', localSell.reverseBondingCurveFee);
1347
- console.log(' Transaction fee:', localSell.transactionFee);
1348
-
1349
1241
  // ============================================================================
1350
1242
  // EXTERNAL CALCULATIONS - Real-time network queries (explicit)
1351
1243
  // ============================================================================
@@ -1357,9 +1249,6 @@ async function localCalculationsExample() {
1357
1249
  type: 'native'
1358
1250
  });
1359
1251
 
1360
- console.log('EXTERNAL Buy Quote (network):');
1361
- console.log(' Tokens received:', externalBuy.amount);
1362
-
1363
1252
  // 4. External sell (explicit network call)
1364
1253
  const externalSell = await sdk.calculateSellAmountExternal({
1365
1254
  tokenName: 'dragnrkti',
@@ -1367,9 +1256,6 @@ async function localCalculationsExample() {
1367
1256
  type: 'exact'
1368
1257
  });
1369
1258
 
1370
- console.log('EXTERNAL Sell Quote (network):');
1371
- console.log(' GALA received:', externalSell.amount);
1372
-
1373
1259
  // ============================================================================
1374
1260
  // A/B COMPARISON - Verify local accuracy
1375
1261
  // ============================================================================
@@ -1379,9 +1265,6 @@ async function localCalculationsExample() {
1379
1265
  const buyDiff = Math.abs(safeParseNumber(localBuy.amount, 0) - safeParseNumber(externalBuy.amount, 0));
1380
1266
  const buyPct = (buyDiff / safeParseNumber(externalBuy.amount, 1)) * 100;
1381
1267
 
1382
- console.log('Local vs External Accuracy:');
1383
- console.log(\` Buy difference: \${toBigNumberFixed(buyPct, 4)}% (should be <0.01%)\`);
1384
-
1385
1268
  // ============================================================================
1386
1269
  // PERFORMANCE BENEFIT - Local is instant
1387
1270
  // ============================================================================
@@ -1444,9 +1327,6 @@ async function analyzePriceHistory() {
1444
1327
  limit: 50
1445
1328
  });
1446
1329
 
1447
- console.log(\`Found \${history.snapshots.length} snapshots\`);
1448
- console.log(\`Total available: \${history.total} (page \${history.page} of \${history.totalPages})\`);
1449
-
1450
1330
  // Auto-paginated complete history
1451
1331
  const allHistory = await sdk.fetchAllPriceHistory({
1452
1332
  tokenId: 'GWETH|Unit|none|none',
@@ -1461,14 +1341,11 @@ async function analyzePriceHistory() {
1461
1341
  const variance = prices.reduce((sum, p) => sum + Math.pow(p - avg, 2), 0) / prices.length;
1462
1342
  const volatility = Math.sqrt(variance);
1463
1343
 
1464
- console.log(\`Average: $\${toBigNumberFixed(avg, 4)}, Volatility: $\${toBigNumberFixed(volatility, 4)}\`);
1465
-
1466
1344
  // Data export (CSV)
1467
1345
  const csv = ['timestamp,price'].concat(
1468
1346
  allHistory.snapshots.map(s => \`\${s.timestamp.toISOString()},\${s.price}\`)
1469
1347
  ).join('\\n');
1470
1348
 
1471
- console.log('CSV export:', csv.split('\\n').slice(0, 3).join('\\n'));
1472
1349
  }
1473
1350
  \`\`\`
1474
1351
 
@@ -1513,15 +1390,6 @@ async function analyzeTokenDetails() {
1513
1390
  // Fetch token metadata
1514
1391
  const details = await sdk.fetchTokenDetails('GUSDC|Unit|none|eth:0x...');
1515
1392
 
1516
- console.log('Token Information:');
1517
- console.log(\` Name: \${details.name}\`);
1518
- console.log(\` Symbol: \${details.symbol}\`);
1519
- console.log(\` Decimals: \${details.decimals}\`);
1520
- console.log(\` Verified: \${details.verified}\`);
1521
- console.log(\` Trading: \${details.tradingEnabled}\`);
1522
- console.log(\` Network: \${details.network}\`);
1523
- console.log(\` Image: \${details.image}\`);
1524
-
1525
1393
  // Pre-trading validation
1526
1394
  async function validateBeforeTrade(tokenId: string) {
1527
1395
  const token = await sdk.fetchTokenDetails(tokenId);
@@ -1548,7 +1416,7 @@ async function analyzeTokenDetails() {
1548
1416
  );
1549
1417
 
1550
1418
  const verified = details_list.filter(t => t?.verified).length;
1551
- console.log(\`Verified tokens: \${verified}/\${tokens.length}\`);
1419
+
1552
1420
  }
1553
1421
  \`\`\`
1554
1422
 
@@ -1595,40 +1463,37 @@ async function tokenPricing() {
1595
1463
  // OPTION 1: SMART ROUTING (Recommended) - Automatic backend selection
1596
1464
  // Use tokenId for ANY token (graduated or ungraduated)
1597
1465
  // SDK automatically detects and routes to correct backend
1598
- console.log('=== Smart Routing (Recommended) ===');
1466
+
1599
1467
  const smartPrice = await sdk.fetchTokenPrice({
1600
1468
  tokenId: 'Token|Unit|ANIME|eth:0x...' // Works for ANY token!
1601
1469
  });
1602
- console.log(\`Token price: $\${smartPrice}\`);
1470
+
1603
1471
  // ✅ Handles graduated tokens (DEX) automatically
1604
1472
  // ✅ Handles ungraduated tokens (Launchpad) automatically
1605
1473
  // ✅ No need to know token status beforehand
1606
1474
 
1607
1475
  // OPTION 2: EXPLICIT DEX PRICING - Graduated tokens only
1608
1476
  // Use tokenId directly for DEX tokens
1609
- console.log('\\n=== Explicit DEX Pricing ===');
1477
+
1610
1478
  const dexPrices = await sdk.fetchTokenPrice({
1611
1479
  tokenId: 'GALA|Unit|none|none' // Or other DEX token
1612
1480
  });
1613
- console.log(\`DEX Token GALA: $\${dexPrices}\`);
1614
1481
 
1615
1482
  // OPTION 3: TOKEN NAME PRICING - For launchpad tokens by name
1616
1483
  // Use tokenName for simple lookup of launchpad tokens
1617
- console.log('\\n=== Token Name Pricing ===');
1484
+
1618
1485
  const launchpadPrice = await sdk.fetchTokenPrice({ tokenName: 'anime' });
1619
- console.log(\`Launchpad token anime: $\${launchpadPrice.price}\`);
1620
1486
 
1621
1487
  // ADVANCED: The smart router handles fallback automatically!
1622
1488
  // No need for manual fallback - fetchTokenPrice with tokenId detects
1623
1489
  // ungraduated tokens and automatically falls back to launchpad pricing
1624
- console.log('\\n=== Automatic Fallback (Built-in) ===');
1490
+
1625
1491
  const autoPrice = await sdk.fetchTokenPrice({
1626
1492
  tokenId: 'Token|Unit|ANIME|eth:0x...' // Auto-fallback if ungraduated
1627
1493
  });
1628
- console.log(\`Auto-routed price: $\${autoPrice.price}\`);
1629
1494
 
1630
1495
  // USECASE: Price comparison and discovery
1631
- console.log('\\n=== Price Discovery ===');
1496
+
1632
1497
  async function comparePrices(tokenName: string) {
1633
1498
  const launchpadPrice = await sdk.fetchTokenPrice({ tokenName });
1634
1499
 
@@ -1639,10 +1504,10 @@ async function tokenPricing() {
1639
1504
  const dexPrice = await sdk.fetchTokenPrice({
1640
1505
  tokenId: \`Token|Unit|\${tokenName.toUpperCase()}|eth:0x...\`
1641
1506
  });
1642
- console.log(\`Launchpad: $\${launchpadPrice.price}, DEX: $\${dexPrice.price}\`);
1507
+
1643
1508
  return { launchpadPrice, dexPrice, graduated: true };
1644
1509
  } else {
1645
- console.log(\`Launchpad: $\${launchpadPrice.price} (not on DEX yet)\`);
1510
+
1646
1511
  return { launchpadPrice, graduated: false };
1647
1512
  }
1648
1513
  }
@@ -1692,7 +1557,7 @@ async function safePriceQuery(tokenId: string) {
1692
1557
  return await sdk.fetchTokenPrice({ tokenId });
1693
1558
  } catch (error) {
1694
1559
  if (error.message.includes('not found')) {
1695
- console.log('Token not available on DEX');
1560
+
1696
1561
  // Could try fallback to launchpad pricing here
1697
1562
  }
1698
1563
  throw error;
@@ -1728,12 +1593,9 @@ async function manageUserProfiles() {
1728
1593
 
1729
1594
  // Fetch current user profile
1730
1595
  const myProfile = await sdk.fetchProfile();
1731
- console.log(\`Name: \${myProfile.fullName}\`);
1732
- console.log(\`Avatar: \${myProfile.profileImage}\`);
1733
1596
 
1734
1597
  // Fetch another user's profile
1735
1598
  const other = await sdk.fetchProfile('eth|0x...');
1736
- console.log(\`Other user: \${other.fullName}\`);
1737
1599
 
1738
1600
  // Update profile
1739
1601
  const updated = await sdk.updateProfile({
@@ -1742,8 +1604,6 @@ async function manageUserProfiles() {
1742
1604
  address: sdk.getAddress()
1743
1605
  });
1744
1606
 
1745
- console.log(\`Updated: \${updated.fullName}\`);
1746
-
1747
1607
  // Upload profile image (Node.js only)
1748
1608
  const imgResult = await sdk.uploadProfileImage({
1749
1609
  imagePath: '/path/to/avatar.png'
@@ -1790,7 +1650,6 @@ async function manageUserProfiles() {
1790
1650
  addresses.map(addr => sdk.fetchProfile(addr).catch(() => null))
1791
1651
  );
1792
1652
 
1793
- console.log('Profiles:', profiles.filter(p => p).map(p => p.fullName));
1794
1653
  }
1795
1654
  \`\`\`
1796
1655
 
@@ -1838,19 +1697,13 @@ async function analyzeTokenDistribution() {
1838
1697
  // Fetch complete token distribution (all holders, non-paginated)
1839
1698
  const distribution = await sdk.fetchTokenDistribution('anime');
1840
1699
 
1841
- console.log(\`Total holders: \${distribution.totalHolders}\`);
1842
- console.log(\`Total supply: \${distribution.totalSupply}\`);
1843
- console.log(\`Last updated: \${distribution.lastUpdated.toISOString()}\`);
1844
-
1845
1700
  // Analyze top holders
1846
1701
  // Use compareAmounts for precise balance sorting with large numbers
1847
1702
  distribution.holders
1848
1703
  .sort((a, b) => compareAmounts(b.balance, a.balance) > 0 ? 1 : -1)
1849
1704
  .slice(0, 5)
1850
1705
  .forEach((holder, index) => {
1851
- console.log(\`#\${index + 1}: \${holder.address}\`);
1852
- console.log(\` Balance: \${holder.balance}\`);
1853
- console.log(\` Ownership: \${toBigNumberFixed(holder.percentage, 2)}%\`);
1706
+
1854
1707
  });
1855
1708
 
1856
1709
  // Check concentration risk (e.g., top 5 holders own >80%)
@@ -1859,24 +1712,20 @@ async function analyzeTokenDistribution() {
1859
1712
  .slice(0, 5)
1860
1713
  .reduce((sum, holder) => sum + holder.percentage, 0);
1861
1714
 
1862
- console.log(\`Top 5 holders control: \${toBigNumberFixed(top5Ownership, 2)}%\`);
1863
-
1864
1715
  // Find specific holder
1865
1716
  const myAddress = sdk.getAddress();
1866
1717
  const myHolding = distribution.holders.find(h => h.address === myAddress);
1867
1718
 
1868
1719
  if (myHolding) {
1869
- console.log(\`Your ownership: \${toBigNumberFixed(myHolding.percentage, 4)}%\`);
1870
- console.log(\`Your balance: \${myHolding.balance}\`);
1720
+
1871
1721
  }
1872
1722
 
1873
1723
  // Calculate concentration metrics
1874
1724
  const giniCoefficient = calculateGini(distribution.holders);
1875
- console.log(\`Gini coefficient: \${toBigNumberFixed(giniCoefficient, 4)}\`);
1876
1725
 
1877
1726
  // Count whales (holders with >5%)
1878
1727
  const whales = distribution.holders.filter(h => h.percentage > 5);
1879
- console.log(\`Whales (>5%): \${whales.length}\`);
1728
+
1880
1729
  }
1881
1730
 
1882
1731
  // Helper: Calculate Gini coefficient for wealth distribution
@@ -1941,15 +1790,13 @@ async function getUserCard() {
1941
1790
  // }
1942
1791
 
1943
1792
  if (holderContext.quantity !== null) {
1944
- console.log(\`Rank: #\${holderContext.rank}\`);
1945
- console.log(\`Holder Tier: \${holderContext.holderTier?.tierName}\`);
1946
- console.log(\`Owns: \${holderContext.percentage ? toBigNumberFixed(holderContext.percentage, 4) : 'N/A'}%\`);
1793
+
1947
1794
  } else {
1948
- console.log('User is not a holder of this token');
1795
+
1949
1796
  }
1950
1797
 
1951
1798
  if (holderContext.isCreator) {
1952
- console.log('This user created the token!');
1799
+
1953
1800
  }
1954
1801
  }
1955
1802
  \`\`\`
@@ -2037,11 +1884,9 @@ Use \`getAllSwapUserLiquidityPositions()\` to fetch all positions without manual
2037
1884
  // Fetch ALL positions automatically (handles pagination internally)
2038
1885
  const allPositions = await sdk.getAllSwapUserLiquidityPositions(ownerAddress);
2039
1886
 
2040
- console.log(\`Total positions: \${allPositions.length}\`);
2041
1887
  allPositions.forEach(position => {
2042
1888
  const fees = position.fees0 + position.fees1; // Total accumulated fees
2043
- console.log(\`Position: \${position.token0}-\${position.token1}\`);
2044
- console.log(\`Accumulated fees: \${fees}\`);
1889
+
2045
1890
  });
2046
1891
  \`\`\`
2047
1892
 
@@ -2080,9 +1925,7 @@ async function advancedDexAnalysis() {
2080
1925
  const composite = await sdk.fetchCompositePoolData('anime');
2081
1926
 
2082
1927
  if (composite.isGraduated) {
2083
- console.log('Token graduated to DEX!');
2084
- console.log('DEX Pool TVL:', composite.dexPool.tvl);
2085
- console.log('DEX 24h Volume:', composite.dexPool.volume1d);
1928
+
2086
1929
  }
2087
1930
 
2088
1931
  // Step 2: Compare local vs external price calculations
@@ -2098,9 +1941,6 @@ async function advancedDexAnalysis() {
2098
1941
  '100'
2099
1942
  );
2100
1943
 
2101
- console.log('Local calculation:', localQuote.outputAmount);
2102
- console.log('External API:', externalQuote.outputAmount);
2103
- console.log('Price difference:',
2104
1944
  Math.abs(safeParseFloat(localQuote.outputAmount, 0) - safeParseFloat(externalQuote.outputAmount, 0))
2105
1945
  );
2106
1946
 
@@ -2111,8 +1951,6 @@ async function advancedDexAnalysis() {
2111
1951
  '100'
2112
1952
  );
2113
1953
 
2114
- console.log('Best route:', bestQuote.route); // 'local' or 'external'
2115
- console.log('Best price:', bestQuote.outputAmount);
2116
1954
  }
2117
1955
  \`\`\`
2118
1956
 
@@ -2150,20 +1988,14 @@ async function tradingAnalytics() {
2150
1988
  page: 1
2151
1989
  });
2152
1990
 
2153
- console.log(\`Analyzing \${trades.total} trades\`);
2154
-
2155
1991
  // Calculate analytics
2156
1992
  const totalVolume = trades.trades.reduce((sum, t) => sum + safeParseFloat(t.galaAmount, 0), 0);
2157
1993
  const averageTradeSize = totalVolume / trades.trades.length;
2158
1994
  const whaleTrades = trades.trades.filter(t => safeParseFloat(t.galaAmount, 0) > 1000);
2159
1995
 
2160
- console.log(\`Total volume: \${totalVolume} GALA\`);
2161
- console.log(\`Average trade size: \${averageTradeSize} GALA\`);
2162
- console.log(\`Whale trades (>1000 GALA): \${whaleTrades.length}\`);
2163
-
2164
1996
  // Most recent trades
2165
1997
  trades.trades.slice(0, 10).forEach(trade => {
2166
- console.log(\`\${trade.type}: \${trade.galaAmount} GALA at \${trade.timestamp}\`);
1998
+
2167
1999
  });
2168
2000
  }
2169
2001
 
@@ -2173,13 +2005,11 @@ async function queryTradesV1() {
2173
2005
 
2174
2006
  // Query all trades for a specific token
2175
2007
  const { trades, meta } = await sdk.getV1Trades({ tokenName: 'anime' });
2176
- console.log(\`Found \${meta.totalItems} trades for anime\`);
2177
2008
 
2178
2009
  // Query all trades by a specific user
2179
2010
  const userTrades = await sdk.getV1Trades({
2180
2011
  userAddress: 'eth|1234567890abcdef...'
2181
2012
  });
2182
- console.log(\`User has \${userTrades.meta.totalItems} trades across all tokens\`);
2183
2013
 
2184
2014
  // Query a user's trades on a specific token with pagination
2185
2015
  const filteredTrades = await sdk.getV1Trades({
@@ -2188,11 +2018,10 @@ async function queryTradesV1() {
2188
2018
  page: 2,
2189
2019
  limit: 20
2190
2020
  });
2191
- console.log(\`Page \${filteredTrades.meta.currentPage} of \${filteredTrades.meta.totalPages}\`);
2192
2021
 
2193
2022
  // Analyze trade types
2194
2023
  filteredTrades.trades.forEach(trade => {
2195
- console.log(\`\${trade.txnType}: \${trade.inputAmount} -> \${trade.outputAmount}\`);
2024
+
2196
2025
  });
2197
2026
  }
2198
2027
  \`\`\`
@@ -2225,12 +2054,11 @@ Essential helper methods for development, debugging, and special use cases.
2225
2054
  \`\`\`typescript
2226
2055
  // Get current GALA price in USD
2227
2056
  const galaPrice = await sdk.fetchGalaPrice();
2228
- console.log(\`GALA: $\${galaPrice}\`);
2229
2057
 
2230
2058
  // Get token supply metrics from GalaChain
2231
2059
  const supplies = await sdk.fetchTokenClassesWithSupply();
2232
2060
  supplies.forEach(token => {
2233
- console.log(\`\${token.tokenClass}: \${token.totalSupply}\`);
2061
+
2234
2062
  });
2235
2063
  \`\`\`
2236
2064
 
@@ -2239,7 +2067,7 @@ supplies.forEach(token => {
2239
2067
  \`\`\`typescript
2240
2068
  // Check transaction status
2241
2069
  const status = await sdk.getBundlerTransactionResult('tx-id-123');
2242
- console.log('Status:', status.status); // 'pending' | 'success' | 'failed'
2070
+
2243
2071
  \`\`\`
2244
2072
 
2245
2073
  ### Advanced Swap Queries
@@ -2247,11 +2075,9 @@ console.log('Status:', status.status); // 'pending' | 'success' | 'failed'
2247
2075
  \`\`\`typescript
2248
2076
  // Get pool price without full quote
2249
2077
  const price = await sdk.getSwapPoolPrice('GALA|Unit|none|none', 'GUSDC|Unit|none|none');
2250
- console.log(\`Pool price: \${price}\`);
2251
2078
 
2252
2079
  // Auto-paginated asset fetch
2253
2080
  const allAssets = await sdk.getAllSwapUserAssets('eth|0x...', { limit: 100 });
2254
- console.log(\`Total assets: \${allAssets.length}\`);
2255
2081
 
2256
2082
  // Direct position lookup (if you have compound key)
2257
2083
  const position = await sdk.fetchSwapPositionDirect({
@@ -2267,7 +2093,7 @@ const position = await sdk.fetchSwapPositionDirect({
2267
2093
  \`\`\`typescript
2268
2094
  // Calculate initial buy amount for token launch
2269
2095
  const buyAmount = await sdk.calculateInitialBuyAmount('100');
2270
- console.log(\`Initial buy: \${buyAmount} tokens\`);
2096
+
2271
2097
  \`\`\`
2272
2098
 
2273
2099
  ### SDK Cleanup
@@ -2285,7 +2111,6 @@ const tradeResult = await sdk.buy({ tokenName, amount, type: 'native', expectedA
2285
2111
 
2286
2112
  // Poll for completion
2287
2113
  const status = await sdk.getBundlerTransactionResult(tradeResult.transactionId);
2288
- console.log('Status:', status.status); // PENDING, PROCESSING, COMPLETED, FAILED
2289
2114
 
2290
2115
  // Wait with polling
2291
2116
  let attempts = 0;
@@ -2334,22 +2159,21 @@ async function manageDexSeasons() {
2334
2159
 
2335
2160
  // Display season information
2336
2161
  seasons.forEach(season => {
2337
- console.log(\`Season: \${season.name} (ID: \${season.id})\`);
2338
- console.log(\`Duration: \${season.start} to \${season.end}\`);
2162
+
2339
2163
  });
2340
2164
 
2341
2165
  // Get current season
2342
2166
  const activeSeason = await sdk.fetchCurrentDexSeason();
2343
2167
  if (activeSeason) {
2344
- console.log(\`Active: \${activeSeason.name}\`);
2168
+
2345
2169
  } else {
2346
- console.log('No active season (between seasons)');
2170
+
2347
2171
  }
2348
2172
 
2349
2173
  // Verify season is active
2350
2174
  const now = new Date();
2351
2175
  const isActive = activeSeason && now >= activeSeason.start && now <= activeSeason.end;
2352
- console.log(\`Season active: \${isActive}\`);
2176
+
2353
2177
  }
2354
2178
  \`\`\`
2355
2179
 
@@ -2376,29 +2200,26 @@ async function viewLeaderboards() {
2376
2200
  const leaderboard = await sdk.fetchDexLeaderboardBySeasonId(4);
2377
2201
 
2378
2202
  // Display top 10 ranked players
2379
- console.log(\`Season \${leaderboard.seasonId} - Top 10 Players:\`);
2203
+
2380
2204
  leaderboard.entries.slice(0, 10).forEach(entry => {
2381
- console.log(\` \${entry.rank}. \${entry.wallet}\`);
2382
- console.log(\` XP: \${entry.totalXp} (Liquidity: \${entry.liquidityXp}, Trading: \${entry.tradingXp})\`);
2205
+
2383
2206
  });
2384
2207
 
2385
2208
  // Analyze mastery titles
2386
2209
  const topPlayer = leaderboard.entries[0];
2387
2210
  topPlayer.masteryTitles.forEach(title => {
2388
- console.log(\` 🏆 \${title.name} (Type: \${title.type}, Tier: \${title.order})\`);
2211
+
2389
2212
  });
2390
2213
 
2391
2214
  // Option 2: Get current leaderboard (convenience method)
2392
2215
  const currentBoard = await sdk.fetchCurrentDexLeaderboard();
2393
2216
 
2394
2217
  if (currentBoard) {
2395
- console.log(\`Season \${currentBoard.seasonId} is active\`);
2396
- console.log(\`Total participants: \${currentBoard.entries.length}\`);
2397
2218
 
2398
2219
  // Top 3 performers
2399
2220
  const topThree = currentBoard.entries.slice(0, 3);
2400
2221
  topThree.forEach(entry => {
2401
- console.log(\` #\${entry.rank}: \${entry.totalXp} XP\`);
2222
+
2402
2223
  });
2403
2224
  }
2404
2225
  }
@@ -2426,24 +2247,17 @@ async function analyzeVolumeTrends() {
2426
2247
  const summary = await sdk.fetchDexAggregatedVolumeSummary();
2427
2248
 
2428
2249
  // Display volumes
2429
- console.log(\`1-Day Volume: $\${summary.volume1d.toLocaleString()}\`);
2430
- console.log(\`7-Day Volume: $\${summary.volume7d.toLocaleString()}\`);
2431
- console.log(\`30-Day Volume: $\${summary.volume30d.toLocaleString()}\`);
2432
2250
 
2433
2251
  // Analyze trends
2434
2252
  const trend1d = summary.volume1dDelta > 0 ? '📈 UP' : '📉 DOWN';
2435
2253
  const trend7d = summary.volume7dDelta > 0 ? '📈 UP' : '📉 DOWN';
2436
2254
  const trend30d = summary.volume30dDelta > 0 ? '📈 UP' : '📉 DOWN';
2437
2255
 
2438
- console.log(\`1-Day Trend: \${trend1d} (\${toBigNumberFixed(summary.volume1dDelta * 100, 2)}%)\`);
2439
- console.log(\`7-Day Trend: \${trend7d} (\${toBigNumberFixed(summary.volume7dDelta * 100, 2)}%)\`);
2440
- console.log(\`30-Day Trend: \${trend30d} (\${toBigNumberFixed(summary.volume30dDelta * 100, 2)}%)\`);
2441
-
2442
2256
  // Growth analysis
2443
2257
  if (summary.volume30dDelta > 0.1) {
2444
- console.log('Strong growth - Platform adoption increasing');
2258
+
2445
2259
  } else if (summary.volume30dDelta < -0.1) {
2446
- console.log('Declining volume - Platform may be slowing');
2260
+
2447
2261
  }
2448
2262
  }
2449
2263
  \`\`\`
@@ -2468,26 +2282,23 @@ async function queryDexPools() {
2468
2282
  // Option 1: Fetch pools with pagination
2469
2283
  const pools = await sdk.fetchDexPools({
2470
2284
  search: 'GALA',
2471
- sortBy: 'tvl', // Sort by: tvl, volume30d, volume1d
2285
+ sortBy: 'TVL', // Sort by: TVL, volume30d, volume1d
2472
2286
  limit: 20,
2473
2287
  page: 1
2474
2288
  });
2475
2289
 
2476
- console.log(\`Found \${pools.total} pools, page \${pools.page} of \${pools.totalPages}\`);
2477
2290
  pools.pools.forEach(pool => {
2478
- console.log(\`\${pool.tokenName}: TVL \${pool.tvl}, 24h Volume: \${pool.volume1d}\`);
2291
+
2479
2292
  });
2480
2293
 
2481
2294
  // Option 2: Fetch ALL pools automatically (handles pagination)
2482
2295
  const allPools = await sdk.fetchAllDexPools({
2483
- sortBy: 'tvl'
2296
+ sortBy: 'TVL'
2484
2297
  });
2485
2298
 
2486
- console.log(\`Total pools: \${allPools.pools.length}\`);
2487
-
2488
2299
  // Analyze pool metrics
2489
- const avgTvl = allPools.pools.reduce((sum, p) => sum + safeParseFloat(p.tvl, 0), 0) / allPools.pools.length;
2490
- console.log(\`Average TVL: $\${toBigNumberFixed(avgTvl, 2)}\`);
2300
+ const avgTvl = allPools.pools.reduce((sum, p) => sum + safeParseFloat(p.TVL, 0), 0) / allPools.pools.length;
2301
+
2491
2302
  }
2492
2303
  \`\`\`
2493
2304
 
@@ -2530,10 +2341,10 @@ async function monitorTokenStatus() {
2530
2341
  const isGraduated = await sdk.isTokenGraduated('anime');
2531
2342
 
2532
2343
  if (isGraduated) {
2533
- console.log('Token has graduated to DEX - trade via GalaSwap');
2344
+
2534
2345
  // Use DEX trading methods: executeSwap(), getSwapQuoteExactInput(), etc.
2535
2346
  } else {
2536
- console.log('Token on bonding curve - trade via launchpad');
2347
+
2537
2348
  // Use bonding curve methods: buy(), sell(), calculateBuyAmount(), etc.
2538
2349
  }
2539
2350
 
@@ -2543,12 +2354,6 @@ async function monitorTokenStatus() {
2543
2354
 
2544
2355
  // Set up listener for new DEX pools
2545
2356
  const cleanupDexPool = sdk.onDexPoolCreation((poolData) => {
2546
- console.log('New DEX pool created!');
2547
- console.log(\` Token: \${poolData.tokenName}\`);
2548
- console.log(\` Token0: \${poolData.token0}\`);
2549
- console.log(\` Token1: \${poolData.token1}\`);
2550
- console.log(\` Fee Tier: \${poolData.feeTier}\`);
2551
- console.log(\` Initial TVL: \${poolData.tvl}\`);
2552
2357
 
2553
2358
  // Take action on new pool
2554
2359
  // Example: Automatically provide liquidity or execute arbitrage
@@ -2560,12 +2365,6 @@ async function monitorTokenStatus() {
2560
2365
 
2561
2366
  // Set up listener for new token launches
2562
2367
  const cleanupTokenCreation = sdk.onLaunchpadTokenCreation((tokenData) => {
2563
- console.log('New token launched!');
2564
- console.log(\` Name: \${tokenData.tokenName}\`);
2565
- console.log(\` Symbol: \${tokenData.tokenSymbol}\`);
2566
- console.log(\` Creator: \${tokenData.creator}\`);
2567
- console.log(\` Max Supply: \${tokenData.maxSupply}\`);
2568
- console.log(\` Base Price: \${tokenData.basePrice}\`);
2569
2368
 
2570
2369
  // Take action on new token
2571
2370
  // Example: Automatically buy early or analyze opportunity
@@ -2578,7 +2377,6 @@ async function monitorTokenStatus() {
2578
2377
  async function autoTrade() {
2579
2378
  // Monitor new tokens
2580
2379
  sdk.onLaunchpadTokenCreation(async (token) => {
2581
- console.log(\`New token: \${token.tokenName}\`);
2582
2380
 
2583
2381
  // Wait for graduation
2584
2382
  const checkGraduation = setInterval(async () => {
@@ -2586,27 +2384,25 @@ async function monitorTokenStatus() {
2586
2384
 
2587
2385
  if (graduated) {
2588
2386
  clearInterval(checkGraduation);
2589
- console.log(\`\${token.tokenName} graduated! Switching to DEX trading.\`);
2590
2387
 
2591
2388
  // Now use DEX methods instead of bonding curve
2592
2389
  const quote = await sdk.getSwapQuoteExactInput('GALA', token.tokenName, '100');
2593
- console.log(\`DEX quote: \${quote.estimatedOutput}\`);
2390
+
2594
2391
  }
2595
2392
  }, 60000); // Check every minute
2596
2393
  });
2597
2394
 
2598
2395
  // Monitor new DEX pools
2599
2396
  sdk.onDexPoolCreation(async (pool) => {
2600
- console.log(\`New pool: \${pool.tokenName}\`);
2601
2397
 
2602
2398
  // Analyze liquidity opportunity
2603
2399
  const poolInfo = await sdk.getSwapPoolInfo(pool.token0, pool.token1);
2604
- console.log(\`Pool liquidity: \${poolInfo.liquidity}\`);
2400
+
2605
2401
  });
2606
2402
  }
2607
2403
 
2608
2404
  // Keep process running
2609
- console.log('Monitoring events... Press Ctrl+C to stop');
2405
+
2610
2406
  await new Promise(() => {}); // Run forever
2611
2407
 
2612
2408
  // Cleanup when done
@@ -2623,7 +2419,7 @@ async function monitorTokenStatus() {
2623
2419
  - **Price Discovery**: Track token lifecycle from launch to DEX
2624
2420
 
2625
2421
  **Event Data:**
2626
- - **DEX Pool Creation**: tokenName, token0, token1, feeTier, tvl, timestamp
2422
+ - **DEX Pool Creation**: tokenName, token0, token1, feeTier, TVL, timestamp
2627
2423
  - **Token Launch**: tokenName, tokenSymbol, creator, maxSupply, basePrice, timestamp
2628
2424
 
2629
2425
  **MCP Tool Equivalents:**
@@ -2663,11 +2459,9 @@ async function sdkUtilities() {
2663
2459
 
2664
2460
  // Get GalaChain address (eth|0x... format)
2665
2461
  const galaAddress = sdk.getAddress();
2666
- console.log(\`GalaChain address: \${galaAddress}\`); // "eth|0x1234..."
2667
2462
 
2668
2463
  // Get Ethereum address (0x... format)
2669
2464
  const ethAddress = sdk.getEthereumAddress();
2670
- console.log(\`Ethereum address: \${ethAddress}\`); // "0x1234..."
2671
2465
 
2672
2466
  // ============================================================================
2673
2467
  // WALLET MANAGEMENT - Check and update wallet
@@ -2675,18 +2469,16 @@ async function sdkUtilities() {
2675
2469
 
2676
2470
  // Check if SDK has wallet configured
2677
2471
  if (sdk.hasWallet()) {
2678
- console.log('Wallet configured - can execute trades');
2679
2472
 
2680
2473
  // Get wallet instance (for advanced use)
2681
2474
  const wallet = sdk.getWallet();
2682
- console.log(\`Wallet address: \${wallet.address}\`);
2475
+
2683
2476
  } else {
2684
- console.log('Read-only mode - cannot execute trades');
2477
+
2685
2478
  }
2686
2479
 
2687
2480
  // Update wallet at runtime
2688
2481
  sdk.setWallet('new-private-key');
2689
- console.log(\`New address: \${sdk.getAddress()}\`);
2690
2482
 
2691
2483
  // ============================================================================
2692
2484
  // CONFIGURATION ACCESS - Get SDK config
@@ -2694,10 +2486,6 @@ async function sdkUtilities() {
2694
2486
 
2695
2487
  // Get SDK configuration
2696
2488
  const config = sdk.getConfig();
2697
- console.log(\`Base URL: \${config.baseUrl}\`);
2698
- console.log(\`Environment: \${config.env}\`);
2699
- console.log(\`Debug: \${config.debug}\`);
2700
- console.log(\`Timeout: \${config.timeout}ms\`);
2701
2489
 
2702
2490
  // ============================================================================
2703
2491
  // VERSION INFORMATION - Get SDK version
@@ -2705,7 +2493,6 @@ async function sdkUtilities() {
2705
2493
 
2706
2494
  // Get SDK version
2707
2495
  const version = sdk.getVersion();
2708
- console.log(\`SDK Version: \${version}\`); // "4.0.4-beta.0"
2709
2496
 
2710
2497
  // ============================================================================
2711
2498
  // URL GENERATION - Get frontend URLs for tokens
@@ -2713,7 +2500,7 @@ async function sdkUtilities() {
2713
2500
 
2714
2501
  // Generate frontend URL for token
2715
2502
  const url = sdk.getUrlByTokenName('anime');
2716
- console.log(\`Token URL: \${url}\`);
2503
+
2717
2504
  // "https://launchpad.gala.com/token/anime" (production)
2718
2505
  // "https://lpad-dev1.defi.gala.com/token/anime" (development)
2719
2506
 
@@ -2725,7 +2512,6 @@ async function sdkUtilities() {
2725
2512
  });
2726
2513
 
2727
2514
  const tokenUrl = sdk.getUrlByTokenName('mytoken');
2728
- console.log(\`Share your token: \${tokenUrl}\`);
2729
2515
 
2730
2516
  // ============================================================================
2731
2517
  // MULTI-WALLET SCENARIO - Check multiple addresses
@@ -2735,15 +2521,10 @@ async function sdkUtilities() {
2735
2521
  const wallet1 = createLaunchpadSDK({ wallet: 'private-key-1' });
2736
2522
  const wallet2 = createLaunchpadSDK({ wallet: 'private-key-2' });
2737
2523
 
2738
- console.log(\`Wallet 1: \${wallet1.getAddress()}\`);
2739
- console.log(\`Wallet 2: \${wallet2.getAddress()}\`);
2740
-
2741
2524
  // Compare balances
2742
2525
  const balance1 = await wallet1.fetchGalaBalance();
2743
2526
  const balance2 = await wallet2.fetchGalaBalance();
2744
2527
 
2745
- console.log(\`Wallet 1 balance: \${balance1.balance}\`);
2746
- console.log(\`Wallet 2 balance: \${balance2.balance}\`);
2747
2528
  }
2748
2529
 
2749
2530
  // ============================================================================
@@ -2754,11 +2535,8 @@ async function sdkUtilities() {
2754
2535
  // Create SDK without wallet (read-only mode)
2755
2536
  const readOnlySdk = createLaunchpadSDK();
2756
2537
 
2757
- console.log(\`Has wallet: \${readOnlySdk.hasWallet()}\`); // false
2758
-
2759
2538
  // Can fetch public data
2760
2539
  const pools = await readOnlySdk.fetchPools({ type: 'recent', limit: 10 });
2761
- console.log(\`Found \${pools.total} pools\`);
2762
2540
 
2763
2541
  // Cannot execute trades (will throw error)
2764
2542
  try {
@@ -2779,17 +2557,12 @@ async function sdkUtilities() {
2779
2557
  config: { env: 'production' }
2780
2558
  });
2781
2559
 
2782
- console.log(\`Prod config: \${prodSdk.getConfig().baseUrl}\`);
2783
- console.log(\`Prod URL: \${prodSdk.getUrlByTokenName('anime')}\`);
2784
-
2785
2560
  // Development SDK
2786
2561
  const devSdk = createLaunchpadSDK({
2787
2562
  wallet: 'your-private-key',
2788
2563
  config: { env: 'development' }
2789
2564
  });
2790
2565
 
2791
- console.log(\`Dev config: \${devSdk.getConfig().baseUrl}\`);
2792
- console.log(\`Dev URL: \${devSdk.getUrlByTokenName('anime')}\`);
2793
2566
  }
2794
2567
  }
2795
2568
  \`\`\`
@@ -2844,30 +2617,17 @@ async function subscribeToEvents() {
2844
2617
 
2845
2618
  // Subscribe to liquidity additions
2846
2619
  const cleanupAdded = sdk.subscribeToDexLiquidityAdded((event) => {
2847
- console.log('Liquidity added!');
2848
- console.log(\` Pool: \${event.token0}-\${event.token1}\`);
2849
- console.log(\` Amount0: \${event.amount0}\`);
2850
- console.log(\` Amount1: \${event.amount1}\`);
2851
- console.log(\` Owner: \${event.owner}\`);
2852
- console.log(\` Position ID: \${event.positionId}\`);
2620
+
2853
2621
  });
2854
2622
 
2855
2623
  // Subscribe to liquidity changes (compound events)
2856
2624
  const cleanupChanged = sdk.subscribeToDexLiquidityChanged((event) => {
2857
- console.log('Liquidity changed!');
2858
- console.log(\` Type: \${event.type}\`); // 'added', 'removed', 'modified'
2859
- console.log(\` Pool: \${event.token0}-\${event.token1}\`);
2860
- console.log(\` Delta: \${event.liquidityDelta}\`);
2625
+
2861
2626
  });
2862
2627
 
2863
2628
  // Subscribe to liquidity removals
2864
2629
  const cleanupRemoved = sdk.subscribeToDexLiquidityRemoved((event) => {
2865
- console.log('Liquidity removed!');
2866
- console.log(\` Pool: \${event.token0}-\${event.token1}\`);
2867
- console.log(\` Amount0: \${event.amount0}\`);
2868
- console.log(\` Amount1: \${event.amount1}\`);
2869
- console.log(\` Owner: \${event.owner}\`);
2870
- console.log(\` Fees collected: \${event.fees0}, \${event.fees1}\`);
2630
+
2871
2631
  });
2872
2632
 
2873
2633
  // ============================================================================
@@ -2876,12 +2636,6 @@ async function subscribeToEvents() {
2876
2636
 
2877
2637
  // Subscribe to new DEX pool creation
2878
2638
  const cleanupPool = sdk.subscribeToDexPoolAdded((pool) => {
2879
- console.log('New DEX pool created!');
2880
- console.log(\` Token: \${pool.tokenName}\`);
2881
- console.log(\` Token0: \${pool.token0}\`);
2882
- console.log(\` Token1: \${pool.token1}\`);
2883
- console.log(\` Fee Tier: \${pool.feeTier}\`);
2884
- console.log(\` Initial TVL: \${pool.tvl}\`);
2885
2639
 
2886
2640
  // Auto-provide liquidity to new pools
2887
2641
  sdk.addSwapLiquidityByPrice({
@@ -2892,7 +2646,7 @@ async function subscribeToEvents() {
2892
2646
  maxPrice: '1.05',
2893
2647
  amount0Desired: '1000',
2894
2648
  amount1Desired: '1000'
2895
- }).then(() => console.log('Liquidity provided to new pool'));
2649
+ }).then(() => );
2896
2650
  });
2897
2651
 
2898
2652
  // ============================================================================
@@ -2901,16 +2655,10 @@ async function subscribeToEvents() {
2901
2655
 
2902
2656
  // Subscribe to DEX swap executions
2903
2657
  const cleanupSwap = sdk.subscribeToDexSwapExecuted((swap) => {
2904
- console.log('DEX swap executed!');
2905
- console.log(\` Pair: \${swap.tokenIn} → \${swap.tokenOut}\`);
2906
- console.log(\` Amount In: \${swap.amountIn}\`);
2907
- console.log(\` Amount Out: \${swap.amountOut}\`);
2908
- console.log(\` Trader: \${swap.trader}\`);
2909
- console.log(\` Fee Tier: \${swap.feeTier}\`);
2910
2658
 
2911
2659
  // Track volume and price impact
2912
2660
  const priceImpact = calculatePriceImpact(swap.amountIn, swap.amountOut);
2913
- console.log(\` Price impact: \${priceImpact}%\`);
2661
+
2914
2662
  });
2915
2663
 
2916
2664
  // ============================================================================
@@ -2919,12 +2667,6 @@ async function subscribeToEvents() {
2919
2667
 
2920
2668
  // Subscribe to new token launches
2921
2669
  const cleanupToken = sdk.subscribeToTokenCreations((token) => {
2922
- console.log('New token launched!');
2923
- console.log(\` Name: \${token.tokenName}\`);
2924
- console.log(\` Symbol: \${token.tokenSymbol}\`);
2925
- console.log(\` Creator: \${token.creator}\`);
2926
- console.log(\` Max Supply: \${token.maxSupply}\`);
2927
- console.log(\` Base Price: \${token.basePrice}\`);
2928
2670
 
2929
2671
  // Auto-buy new tokens
2930
2672
  sdk.buy({
@@ -2932,7 +2674,7 @@ async function subscribeToEvents() {
2932
2674
  amount: '100',
2933
2675
  type: 'native',
2934
2676
  slippageToleranceFactor: 0.01
2935
- }).then(() => console.log('Auto-bought new token'));
2677
+ }).then(() => );
2936
2678
  });
2937
2679
 
2938
2680
  // ============================================================================
@@ -2952,7 +2694,6 @@ async function subscribeToEvents() {
2952
2694
 
2953
2695
  if (divergence > 0.01) {
2954
2696
  // 1% arbitrage opportunity
2955
- console.log(\`Arbitrage opportunity: \${divergence * 100}%\`);
2956
2697
 
2957
2698
  // Execute arbitrage trade
2958
2699
  await sdk.executeSwap(
@@ -2968,13 +2709,12 @@ async function subscribeToEvents() {
2968
2709
 
2969
2710
  // Monitor liquidity additions for new opportunities
2970
2711
  sdk.subscribeToDexLiquidityAdded(async (event) => {
2971
- console.log(\`New liquidity in \${event.token0}-\${event.token1}\`);
2972
2712
 
2973
2713
  // Check if pool has sufficient depth for arbitrage
2974
2714
  const poolInfo = await sdk.getSwapPoolInfo(event.token0, event.token1);
2975
2715
  // Use compareAmounts for precise liquidity threshold comparison
2976
2716
  if (compareAmounts(poolInfo.liquidity, '100000') > 0) {
2977
- console.log('Pool has sufficient liquidity for arbitrage');
2717
+
2978
2718
  }
2979
2719
  });
2980
2720
  }
@@ -2988,7 +2728,6 @@ async function subscribeToEvents() {
2988
2728
 
2989
2729
  // Auto-add liquidity to new pools
2990
2730
  sdk.subscribeToDexPoolAdded(async (pool) => {
2991
- console.log(\`New pool: \${pool.tokenName}\`);
2992
2731
 
2993
2732
  // Wait for some initial swaps to establish price
2994
2733
  setTimeout(async () => {
@@ -3007,24 +2746,22 @@ async function subscribeToEvents() {
3007
2746
  amount1Desired: '10000'
3008
2747
  });
3009
2748
 
3010
- console.log('Liquidity added to new pool');
3011
2749
  }
3012
2750
  }, 60000); // Wait 1 minute
3013
2751
  });
3014
2752
 
3015
2753
  // Monitor liquidity removals (potential exit signal)
3016
2754
  sdk.subscribeToDexLiquidityRemoved((event) => {
3017
- console.log(\`Large liquidity removal: \${event.amount0}, \${event.amount1}\`);
3018
2755
 
3019
2756
  // Check if we should also exit
3020
2757
  if (isLargeRemoval(event)) {
3021
- console.log('Large removal detected - consider exiting position');
2758
+
3022
2759
  }
3023
2760
  });
3024
2761
  }
3025
2762
 
3026
2763
  // Keep subscriptions running
3027
- console.log('Subscriptions active... Press Ctrl+C to stop');
2764
+
3028
2765
  await new Promise(() => {}); // Run forever
3029
2766
 
3030
2767
  // Cleanup when done
@@ -3054,7 +2791,7 @@ async function subscribeToEvents() {
3054
2791
 
3055
2792
  **DexPoolAdded:**
3056
2793
  - tokenName, token0, token1
3057
- - feeTier, tvl
2794
+ - feeTier, TVL
3058
2795
  - timestamp
3059
2796
 
3060
2797
  **SwapExecuted:**
@@ -3083,10 +2820,10 @@ async function subscribeToEvents() {
3083
2820
  // Handle connection lifecycle events
3084
2821
  await sdk.connectStreamWebSocket({
3085
2822
  onConnect: () => {
3086
- console.log('WebSocket connected');
2823
+
3087
2824
  },
3088
2825
  onDisconnect: (reason) => {
3089
- console.log('WebSocket disconnected:', reason);
2826
+
3090
2827
  // Implement reconnection logic if needed
3091
2828
  },
3092
2829
  onError: (error) => {
@@ -3096,7 +2833,7 @@ await sdk.connectStreamWebSocket({
3096
2833
 
3097
2834
  // Check connection state
3098
2835
  if (sdk.isStreamWebSocketConnected()) {
3099
- console.log('Ready to send/receive messages');
2836
+
3100
2837
  }
3101
2838
  \`\`\`
3102
2839
 
@@ -3107,9 +2844,9 @@ if (sdk.isStreamWebSocketConnected()) {
3107
2844
  await sdk.connectStreamWebSocket({
3108
2845
  onTypingIndicator: (event) => {
3109
2846
  if (event.isTyping) {
3110
- console.log(\`\${event.userAddress} is typing...\`);
2847
+
3111
2848
  } else {
3112
- console.log(\`\${event.userAddress} stopped typing\`);
2849
+
3113
2850
  }
3114
2851
  }
3115
2852
  });
@@ -3375,41 +3112,30 @@ async function getCurrentSeason() {
3375
3112
  const currentSeason = await sdk.fetchCurrentDexSeason();
3376
3113
 
3377
3114
  if (currentSeason) {
3378
- console.log('Current DEX Season:');
3379
- console.log(\` Season ID: \${currentSeason.id}\`);
3380
- console.log(\` Name: \${currentSeason.name}\`);
3381
- console.log(\` Start: \${currentSeason.start.toISOString()}\`);
3382
- console.log(\` End: \${currentSeason.end.toISOString()}\`);
3383
3115
 
3384
3116
  // Check if season is currently active
3385
3117
  const now = new Date();
3386
3118
  const isActive = now >= currentSeason.start && now <= currentSeason.end;
3387
3119
 
3388
- console.log(\` Active: \${isActive}\`);
3389
-
3390
3120
  // Calculate time remaining
3391
3121
  const timeRemaining = currentSeason.end.getTime() - now.getTime();
3392
3122
  const daysRemaining = Math.floor(timeRemaining / (1000 * 60 * 60 * 24));
3393
3123
 
3394
- console.log(\` Days remaining: \${daysRemaining}\`);
3395
-
3396
3124
  // Fetch leaderboard for current season
3397
3125
  const leaderboard = await sdk.fetchDexLeaderboardBySeasonId(currentSeason.id);
3398
- console.log(\` Total participants: \${leaderboard.entries.length}\`);
3399
3126
 
3400
3127
  // Show top 3 players
3401
3128
  leaderboard.entries.slice(0, 3).forEach((entry, index) => {
3402
- console.log(\` #\${index + 1}: \${entry.wallet} - \${entry.totalXp} XP\`);
3129
+
3403
3130
  });
3404
3131
  } else {
3405
- console.log('No active season (between seasons)');
3406
3132
 
3407
3133
  // Fetch all seasons to see when next one starts
3408
3134
  const allSeasons = await sdk.fetchAllDexSeasons();
3409
3135
  const futureSeason = allSeasons.find(s => s.start > new Date());
3410
3136
 
3411
3137
  if (futureSeason) {
3412
- console.log(\`Next season starts: \${futureSeason.start.toISOString()}\`);
3138
+
3413
3139
  }
3414
3140
  }
3415
3141
  }
@@ -3421,7 +3147,6 @@ async function participateInSeason() {
3421
3147
  const season = await sdk.fetchCurrentDexSeason();
3422
3148
 
3423
3149
  if (season) {
3424
- console.log(\`Active season: \${season.name}\`);
3425
3150
 
3426
3151
  // Execute trades to earn XP
3427
3152
  const quote = await sdk.getSwapQuoteExactInput('GALA', 'GUSDC', '100');
@@ -3434,8 +3159,6 @@ async function participateInSeason() {
3434
3159
  0.01
3435
3160
  );
3436
3161
 
3437
- console.log('Trade executed - XP earned!');
3438
-
3439
3162
  // Check updated leaderboard position
3440
3163
  const leaderboard = await sdk.fetchCurrentDexLeaderboard();
3441
3164
  const myPosition = leaderboard?.entries.find(
@@ -3443,11 +3166,10 @@ async function participateInSeason() {
3443
3166
  );
3444
3167
 
3445
3168
  if (myPosition) {
3446
- console.log(\`Current rank: #\${myPosition.rank}\`);
3447
- console.log(\`Total XP: \${myPosition.totalXp}\`);
3169
+
3448
3170
  }
3449
3171
  } else {
3450
- console.log('No active season - trades won't earn XP');
3172
+
3451
3173
  }
3452
3174
  }
3453
3175
  \`\`\`
@@ -3502,11 +3224,9 @@ async function bridgeOperations() {
3502
3224
 
3503
3225
  // 2. Get supported bridge tokens
3504
3226
  const supportedTokens = await sdk.getSupportedBridgeTokens('Ethereum');
3505
- console.log('Bridgeable to Ethereum:', supportedTokens.map(t => t.symbol));
3506
3227
 
3507
3228
  // 3. Check if specific token is bridgeable
3508
3229
  const canBridge = await sdk.isTokenBridgeableToEthereum('GALA');
3509
- console.log('GALA bridgeable to Ethereum:', canBridge.bridgeable);
3510
3230
 
3511
3231
  // 4. Estimate bridge fee (calculated externally by GalaConnect API)
3512
3232
  const fee = await sdk.estimateBridgeFee({
@@ -3514,7 +3234,6 @@ async function bridgeOperations() {
3514
3234
  destinationChain: 'Ethereum',
3515
3235
  amount: '100',
3516
3236
  });
3517
- console.log('Bridge fee:', fee.totalFee, 'GALA');
3518
3237
 
3519
3238
  // 5. Bridge Out: GalaChain → Ethereum
3520
3239
  const bridgeOutTx = await sdk.bridgeOut({
@@ -3523,15 +3242,12 @@ async function bridgeOperations() {
3523
3242
  destinationChain: 'Ethereum',
3524
3243
  recipientAddress: '0x5678...',
3525
3244
  });
3526
- console.log('Bridge out TX:', bridgeOutTx.transactionHash);
3527
3245
 
3528
3246
  // 6. Get bridge status
3529
3247
  const status = await sdk.getBridgeStatus(bridgeOutTx.transactionHash);
3530
- console.log('Bridge status:', status.status);
3531
3248
 
3532
3249
  // 7. Get Ethereum transaction status
3533
3250
  const ethTxStatus = await sdk.getEthereumTransactionStatus(bridgeOutTx.transactionHash);
3534
- console.log('ETH TX confirmed:', ethTxStatus.confirmed);
3535
3251
 
3536
3252
  // 8. Query external chain balances
3537
3253
  const ethBalance = await sdk.fetchEthereumWalletNativeBalance();
@@ -3540,7 +3256,7 @@ async function bridgeOperations() {
3540
3256
 
3541
3257
  // 9. Discover all bridgeable tokens
3542
3258
  const allBridgeable = await sdk.fetchAllBridgeableTokensByNetwork('ETHEREUM');
3543
- console.log('All tokens bridgeable to Ethereum:', allBridgeable.length);
3259
+
3544
3260
  }
3545
3261
  \`\`\`
3546
3262
 
@@ -3589,18 +3305,16 @@ async function discoverDexTokens() {
3589
3305
  limit: 20
3590
3306
  });
3591
3307
 
3592
- console.log(\`Found \${tokens.total} tokens, page \${tokens.page} of \${tokens.totalPages}\`);
3593
3308
  tokens.items.forEach(token => {
3594
- console.log(\`\${token.symbol}: \${token.name} (decimals: \${token.decimals})\`);
3309
+
3595
3310
  });
3596
3311
 
3597
3312
  // Option 2: Fetch ALL tokens (auto-pagination)
3598
3313
  const allTokens = await sdk.fetchAllAvailableDexTokens();
3599
- console.log(\`Total DEX tokens: \${allTokens.length}\`);
3600
3314
 
3601
3315
  // Option 3: Search for specific tokens
3602
3316
  const searchResults = await sdk.fetchAllAvailableDexTokens({ search: 'USD' });
3603
- console.log('USD-related tokens:', searchResults.map(t => t.symbol));
3317
+
3604
3318
  }
3605
3319
  \`\`\`
3606
3320
 
@@ -3641,7 +3355,6 @@ async function wrapToken() {
3641
3355
  memo: 'Wrapping for DEX trading' // Optional
3642
3356
  });
3643
3357
 
3644
- console.log('Wrap transaction:', result.transactionId);
3645
3358
  }
3646
3359
  \`\`\`
3647
3360
 
@@ -3659,7 +3372,6 @@ async function unwrapToken() {
3659
3372
  memo: 'Unwrapping after trading' // Optional
3660
3373
  });
3661
3374
 
3662
- console.log('Unwrap transaction:', result.transactionId);
3663
3375
  }
3664
3376
  \`\`\`
3665
3377
 
@@ -3671,11 +3383,10 @@ async function estimateFees() {
3671
3383
 
3672
3384
  // Estimate wrap fee (uses cross_channel_authorization)
3673
3385
  const wrapFee = await sdk.estimateWrapFee('MUSIC', '100');
3674
- console.log('Wrap fee:', wrapFee);
3675
3386
 
3676
3387
  // Estimate unwrap fee (uses automatic authorization)
3677
3388
  const unwrapFee = await sdk.estimateUnwrapFee('GMUSIC', '100');
3678
- console.log('Unwrap fee:', unwrapFee);
3389
+
3679
3390
  }
3680
3391
  \`\`\`
3681
3392
 
@@ -3686,7 +3397,7 @@ async function checkStatus() {
3686
3397
  const sdk = createLaunchpadSDK({ wallet: 'your-private-key' });
3687
3398
 
3688
3399
  const status = await sdk.getWrapStatus('transaction-id-here');
3689
- console.log('Status:', status.status); // pending, processing, completed, failed
3400
+
3690
3401
  }
3691
3402
  \`\`\`
3692
3403
 
@@ -3710,7 +3421,7 @@ async function discoverWrappableTokens() {
3710
3421
 
3711
3422
  // Check if token is wrappable
3712
3423
  const isWrappable = await sdk.isTokenWrappable('$MUSIC|Unit|none|none');
3713
- console.log('Is wrappable:', isWrappable.isWrappable);
3424
+
3714
3425
  }
3715
3426
  \`\`\`
3716
3427
 
@@ -3741,7 +3452,7 @@ async function getReferralUrl() {
3741
3452
 
3742
3453
  // Get your unique referral URL
3743
3454
  const result = await sdk.fetchReferralUrl();
3744
- console.log('Share this URL:', result.referralUrl);
3455
+
3745
3456
  }
3746
3457
  \`\`\`
3747
3458
 
@@ -3758,9 +3469,8 @@ async function fetchReferrals() {
3758
3469
  limit: 20
3759
3470
  });
3760
3471
 
3761
- console.log('Total referrals:', referrals.total);
3762
3472
  referrals.items.forEach(ref => {
3763
- console.log(\`Referred: \${ref.referredAddress} on \${ref.createdAt}\`);
3473
+
3764
3474
  });
3765
3475
  }
3766
3476
  \`\`\`
@@ -3773,7 +3483,7 @@ async function fetchAllReferrals() {
3773
3483
 
3774
3484
  // Get ALL referrals with auto-pagination
3775
3485
  const allReferrals = await sdk.fetchAllReferrals({ address: '0x...' });
3776
- console.log('Total referrals:', allReferrals.length);
3486
+
3777
3487
  }
3778
3488
  \`\`\`
3779
3489
 
@@ -3784,8 +3494,7 @@ async function getReferralSummary() {
3784
3494
  const sdk = createLaunchpadSDK({ wallet: 'your-private-key' });
3785
3495
 
3786
3496
  const summary = await sdk.fetchReferralsSummary({ address: '0x...' });
3787
- console.log('Total referred users:', summary.totalReferrals);
3788
- console.log('Total rewards earned:', summary.totalRewards);
3497
+
3789
3498
  }
3790
3499
  \`\`\`
3791
3500
 
@@ -3813,14 +3522,12 @@ async function registerAccount() {
3813
3522
 
3814
3523
  // Register the SDK wallet
3815
3524
  const result = await sdk.registerAccount();
3816
- console.log('Account exists:', result.exists);
3817
- console.log('Wallet alias:', result.walletAlias);
3818
3525
 
3819
3526
  // Register a specific address
3820
3527
  const otherResult = await sdk.registerAccount({
3821
3528
  address: '0x1234...' // Supports eth|, 0x, or client| formats
3822
3529
  });
3823
- console.log('Other account exists:', otherResult.exists);
3530
+
3824
3531
  }
3825
3532
  \`\`\`
3826
3533
 
@@ -3858,24 +3565,18 @@ async function manageStream() {
3858
3565
 
3859
3566
  // Start a stream for your token
3860
3567
  const stream = await sdk.startStream('mytoken');
3861
- console.log('Stream Key:', stream.streamKey);
3862
- console.log('RTMP URL:', stream.rtmpUrl);
3863
- console.log('Playback URL:', stream.playbackUrl);
3568
+
3864
3569
  // Use stream.streamKey in OBS or other RTMP software
3865
3570
 
3866
3571
  // Get stream info (public endpoint)
3867
3572
  const info = await sdk.getStreamInfo('mytoken');
3868
- console.log('Status:', info.status); // IDLE, ACTIVE, DISABLED
3869
- console.log('Is Live:', info.isLive);
3870
- console.log('Viewers:', info.viewerCount);
3871
3573
 
3872
3574
  // Stop the stream when done
3873
3575
  await sdk.stopStream('mytoken');
3874
- console.log('Stream stopped');
3875
3576
 
3876
3577
  // Reset stream key if compromised
3877
3578
  const newKey = await sdk.resetStreamKey('mytoken');
3878
- console.log('New Stream Key:', newKey.streamKey);
3579
+
3879
3580
  }
3880
3581
  \`\`\`
3881
3582
 
@@ -3891,18 +3592,13 @@ async function manageRecordings() {
3891
3592
  page: 1,
3892
3593
  limit: 20,
3893
3594
  });
3894
- console.log('Total recordings:', recordings.total);
3895
3595
 
3896
3596
  for (const rec of recordings.recordings) {
3897
- console.log('Asset ID:', rec.assetId);
3898
- console.log('Duration:', rec.duration, 'seconds');
3899
- console.log('Status:', rec.status); // READY, PROCESSING, ERRORED
3597
+
3900
3598
  }
3901
3599
 
3902
3600
  // Get download URL for a recording
3903
3601
  const download = await sdk.getRecordingDownload('mytoken', 'asset-123');
3904
- console.log('Download URL:', download.downloadUrl);
3905
- console.log('Expires:', download.expiresAt);
3906
3602
 
3907
3603
  // Delete a recording
3908
3604
  await sdk.deleteRecording('mytoken', 'asset-123');
@@ -3919,8 +3615,6 @@ async function manageSimulcast() {
3919
3615
 
3920
3616
  // Get existing simulcast targets
3921
3617
  const targets = await sdk.getSimulcastTargets('mytoken');
3922
- console.log('Max targets:', targets.maxTargets);
3923
- console.log('Current targets:', targets.targets.length);
3924
3618
 
3925
3619
  // Add YouTube simulcast
3926
3620
  const youtube = await sdk.addSimulcastTarget({
@@ -3930,7 +3624,6 @@ async function manageSimulcast() {
3930
3624
  streamKey: 'your-youtube-stream-key',
3931
3625
  name: 'My YouTube Channel',
3932
3626
  });
3933
- console.log('Added target:', youtube.target.targetId);
3934
3627
 
3935
3628
  // Add Twitch simulcast
3936
3629
  await sdk.addSimulcastTarget({
@@ -3965,7 +3658,6 @@ async function adminOperations() {
3965
3658
 
3966
3659
  // Get global streaming status
3967
3660
  const globalStatus = await sdk.getGlobalStreamingStatus();
3968
- console.log('Global streaming enabled:', globalStatus.enabled);
3969
3661
 
3970
3662
  // Enable/disable streaming globally (maintenance mode)
3971
3663
  await sdk.setGlobalStreamingEnabled(false); // Disable all streams
@@ -4038,7 +3730,7 @@ async function restChat() {
4038
3730
  });
4039
3731
 
4040
3732
  for (const msg of messages.messages) {
4041
- console.log(\`[\${msg.createdAt}] \${msg.user?.fullName}: \${msg.content}\`);
3733
+
4042
3734
  }
4043
3735
 
4044
3736
  // Send a chat message via REST
@@ -4046,20 +3738,18 @@ async function restChat() {
4046
3738
  tokenName: 'mytoken',
4047
3739
  content: 'Hello everyone!',
4048
3740
  });
4049
- console.log('Message ID:', sent.message.messageId);
4050
3741
 
4051
3742
  // Delete a chat message (user can delete own, admin can delete any)
4052
3743
  const deleted = await sdk.deleteChatMessage({
4053
3744
  tokenName: 'mytoken',
4054
3745
  messageId: sent.message.messageId,
4055
3746
  });
4056
- console.log('Message deleted:', deleted.deleted);
4057
3747
 
4058
3748
  // Check chat status
4059
3749
  const status = await sdk.getChatStatus('mytoken');
4060
- console.log('Chat enabled:', status.enabled);
3750
+
4061
3751
  if (!status.enabled) {
4062
- console.log('Reason:', status.reason); // 'global' or 'token'
3752
+
4063
3753
  }
4064
3754
  }
4065
3755
  \`\`\`
@@ -4077,17 +3767,17 @@ async function webSocketChat() {
4077
3767
 
4078
3768
  // Connect with event callbacks
4079
3769
  await sdk.connectStreamWebSocket({
4080
- onConnect: () => console.log('Connected!'),
4081
- onDisconnect: (reason) => console.log('Disconnected:', reason),
3770
+ onConnect: () => ,
3771
+ onDisconnect: (reason) => ,
4082
3772
  onError: (error) => console.error('Error:', error),
4083
3773
  onChatMessage: (msg) => {
4084
- console.log(\`[\${msg.tokenName}] \${msg.userAddress}: \${msg.content}\`);
3774
+
4085
3775
  },
4086
3776
  onViewerCount: (data) => {
4087
- console.log(\`Viewers on \${data.tokenName}: \${data.count}\`);
3777
+
4088
3778
  },
4089
3779
  onStreamStatus: (status) => {
4090
- console.log(\`Stream \${status.tokenName}: \${status.status}\`);
3780
+
4091
3781
  },
4092
3782
  });
4093
3783
 
@@ -4096,7 +3786,6 @@ async function webSocketChat() {
4096
3786
 
4097
3787
  // Subscribe to a stream's events
4098
3788
  const subscribed = await sdk.subscribeToStream('mytoken');
4099
- console.log('Subscribed, stream status:', subscribed.status);
4100
3789
 
4101
3790
  // Send message via WebSocket (lower latency)
4102
3791
  await sdk.sendStreamChatViaWebSocket('mytoken', 'Hello via WebSocket!');
@@ -4129,7 +3818,6 @@ async function adminChat() {
4129
3818
 
4130
3819
  // Get global chat status
4131
3820
  const globalStatus = await sdk.getGlobalChatStatus();
4132
- console.log('Global chat enabled:', globalStatus.enabled);
4133
3821
 
4134
3822
  // Disable/enable chat globally
4135
3823
  await sdk.setGlobalChatEnabled(false); // Disable all chat
@@ -4199,36 +3887,30 @@ const sdk = createLaunchpadSDK({
4199
3887
 
4200
3888
  // 1. Login to get JWT token
4201
3889
  const session = await sdk.login();
4202
- console.log('Authenticated:', session.address);
4203
- console.log('Token expires in:', session.expiresIn, 'seconds');
4204
3890
 
4205
3891
  // 2. Check authentication status
4206
3892
  if (sdk.isAuthenticated()) {
4207
- console.log('Session is valid');
3893
+
4208
3894
  }
4209
3895
 
4210
3896
  // 3. Get current session info
4211
3897
  const info = await sdk.getSession();
4212
- console.log('Session issued at:', info.issuedAt);
4213
- console.log('Session expires at:', info.expiresAt);
4214
3898
 
4215
3899
  // 4. Access token directly (for custom requests)
4216
3900
  const token = sdk.getAccessToken();
4217
- console.log('JWT token:', token);
4218
3901
 
4219
3902
  // 5. Refresh token before expiry
4220
3903
  if (sdk.shouldRefreshToken()) {
4221
3904
  const refreshed = await sdk.refreshToken();
4222
- console.log('Token refreshed, new expiry:', refreshed.expiresIn);
3905
+
4223
3906
  }
4224
3907
 
4225
3908
  // 6. Ensure valid token (auto-refreshes if needed)
4226
3909
  const validToken = await sdk.ensureValidToken();
4227
- console.log('Valid token obtained');
4228
3910
 
4229
3911
  // 7. Logout when done
4230
3912
  sdk.logout();
4231
- console.log('Logged out');
3913
+
4232
3914
  \`\`\`
4233
3915
 
4234
3916
  ## Auto-Refresh Behavior
@@ -4351,7 +4033,6 @@ const permanentBan = await sdk.createBan({
4351
4033
  userAddress: 'eth|0x1234567890abcdef1234567890abcdef12345678',
4352
4034
  reason: 'Spamming chat',
4353
4035
  });
4354
- console.log('Permanent ban created:', permanentBan.ban.id);
4355
4036
 
4356
4037
  // Create a temporary ban (1 hour)
4357
4038
  const tempBan = await sdk.createBan({
@@ -4360,14 +4041,13 @@ const tempBan = await sdk.createBan({
4360
4041
  reason: 'Inappropriate behavior',
4361
4042
  durationSeconds: BAN_DURATIONS.ONE_HOUR, // 3600 seconds
4362
4043
  });
4363
- console.log('Temp ban expires:', tempBan.ban.expiresAt);
4364
4044
 
4365
4045
  // Remove a ban (unban user)
4366
4046
  const unbanned = await sdk.removeBan({
4367
4047
  tokenName: 'mytoken',
4368
4048
  userAddress: 'eth|0x1234567890abcdef1234567890abcdef12345678',
4369
4049
  });
4370
- console.log('User unbanned:', unbanned.removed);
4050
+
4371
4051
  \`\`\`
4372
4052
 
4373
4053
  ## Duration Presets
@@ -4398,12 +4078,9 @@ const allBans = await sdk.listBans({
4398
4078
  page: 1,
4399
4079
  limit: 20,
4400
4080
  });
4401
- console.log('Total bans:', allBans.meta.total);
4402
4081
 
4403
4082
  for (const ban of allBans.bans) {
4404
- console.log(\`- \${ban.userAddress}: \${ban.reason || 'No reason'}\`);
4405
- console.log(\` Permanent: \${ban.isPermanent}\`);
4406
- console.log(\` Expires: \${ban.expiresAt || 'Never'}\`);
4083
+
4407
4084
  }
4408
4085
 
4409
4086
  // Search bans by user
@@ -4430,12 +4107,9 @@ const status = await sdk.getBanStatus({
4430
4107
  });
4431
4108
 
4432
4109
  if (status.banned) {
4433
- console.log('User is banned!');
4434
- console.log('Reason:', status.ban?.reason);
4435
- console.log('Permanent:', status.ban?.isPermanent);
4436
- console.log('Expires:', status.ban?.expiresAt);
4110
+
4437
4111
  } else {
4438
- console.log('User is not banned');
4112
+
4439
4113
  }
4440
4114
  \`\`\`
4441
4115
 
@@ -4449,14 +4123,12 @@ const viewers = await sdk.getActiveUsers({
4449
4123
  tokenName: 'mytoken',
4450
4124
  type: ACTIVE_USER_TYPE.VIEWERS, // or 'viewers'
4451
4125
  });
4452
- console.log('Active viewers:', viewers.total);
4453
4126
 
4454
4127
  // Get only chat participants
4455
4128
  const chatters = await sdk.getActiveUsers({
4456
4129
  tokenName: 'mytoken',
4457
4130
  type: ACTIVE_USER_TYPE.CHAT_PARTICIPANTS, // or 'chat_participants'
4458
4131
  });
4459
- console.log('Chat participants:', chatters.total);
4460
4132
 
4461
4133
  // Search active users
4462
4134
  const searchActive = await sdk.getActiveUsers({
@@ -4465,8 +4137,7 @@ const searchActive = await sdk.getActiveUsers({
4465
4137
  });
4466
4138
 
4467
4139
  for (const user of searchActive.users) {
4468
- console.log(\`- \${user.fullName || user.userAddress}\`);
4469
- console.log(\` In chat: \${user.isChatParticipant}\`);
4140
+
4470
4141
  }
4471
4142
  \`\`\`
4472
4143
 
@@ -4499,17 +4170,14 @@ Ban events are broadcast to affected users via WebSocket:
4499
4170
  // Listen for ban events
4500
4171
  sdk.connectStreamWebSocket({
4501
4172
  onUserBanned: (event) => {
4502
- console.log('User banned:', event.userAddress);
4503
- console.log('Reason:', event.reason);
4504
- console.log('Expires:', event.expiresAt);
4173
+
4505
4174
  },
4506
4175
  onUserUnbanned: (event) => {
4507
- console.log('User unbanned:', event.userAddress);
4176
+
4508
4177
  },
4509
4178
  onBanEnforcement: (event) => {
4510
4179
  // Received when banned user tries to chat/react
4511
- console.log('Ban enforced for action:', event.action);
4512
- console.log('Reason:', event.reason);
4180
+
4513
4181
  },
4514
4182
  });
4515
4183
  \`\`\`
@@ -4555,17 +4223,16 @@ await sdk.login();
4555
4223
  // Create a moderator key for specific tokens
4556
4224
  const result = await sdk.createApiKey({
4557
4225
  role: API_KEY_ROLE.MODERATOR,
4558
- description: 'Chat moderation bot',
4226
+ description: 'Chat moderation bot.',
4559
4227
  delegateAllTokens: false,
4560
4228
  tokenNames: ['mytoken', 'othertoken'],
4561
4229
  expiresAt: '2025-12-31T23:59:59Z', // Optional expiration
4562
4230
  });
4563
4231
 
4564
4232
  // CRITICAL: Save this immediately - shown only once!
4565
- console.log('Raw Key:', result.rawKey);
4233
+
4566
4234
  // Format: glp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
4567
- console.log('Key ID:', result.id);
4568
- console.log('Prefix:', result.keyPrefix);
4235
+
4569
4236
  \`\`\`
4570
4237
 
4571
4238
  ## Role Hierarchy
@@ -4598,14 +4265,14 @@ const canOwn = roleHasSufficientPermission('MODERATOR', 'OWNER'); // false
4598
4265
  // Delegate all tokens (current and future)
4599
4266
  const allTokensKey = await sdk.createApiKey({
4600
4267
  role: API_KEY_ROLE.MODERATOR,
4601
- description: 'All tokens moderator',
4268
+ description: 'All tokens moderator.',
4602
4269
  delegateAllTokens: true,
4603
4270
  });
4604
4271
 
4605
4272
  // Delegate specific tokens only
4606
4273
  const specificKey = await sdk.createApiKey({
4607
4274
  role: API_KEY_ROLE.MANAGER,
4608
- description: 'Project manager for specific tokens',
4275
+ description: 'Project manager for specific tokens.',
4609
4276
  delegateAllTokens: false,
4610
4277
  tokenNames: ['token1', 'token2', 'token3'], // Case-insensitive
4611
4278
  });
@@ -4619,18 +4286,14 @@ const list = await sdk.listApiKeys({
4619
4286
  page: 1,
4620
4287
  limit: 20,
4621
4288
  });
4622
- console.log('Total keys:', list.meta.total);
4623
4289
 
4624
4290
  for (const key of list.apiKeys) {
4625
- console.log(\`- \${key.keyPrefix}: \${key.role}\`);
4626
- console.log(\` Description: \${key.description || 'None'}\`);
4627
- console.log(\` Last used: \${key.lastUsedAt || 'Never'}\`);
4628
- console.log(\` Expires: \${key.expiresAt || 'Never'}\`);
4291
+
4629
4292
  }
4630
4293
 
4631
4294
  // Get single API key by ID
4632
4295
  const key = await sdk.getApiKey(123);
4633
- console.log('Key details:', key);
4296
+
4634
4297
  \`\`\`
4635
4298
 
4636
4299
  ## Updating API Keys
@@ -4638,7 +4301,7 @@ console.log('Key details:', key);
4638
4301
  \`\`\`typescript
4639
4302
  // Update description
4640
4303
  const updated = await sdk.updateApiKey(123, {
4641
- description: 'Updated description',
4304
+ description: 'Updated description.',
4642
4305
  });
4643
4306
 
4644
4307
  // Upgrade role
@@ -4673,7 +4336,6 @@ await sdk.updateApiKey(123, {
4673
4336
  \`\`\`typescript
4674
4337
  // Revoke (soft delete) an API key
4675
4338
  await sdk.revokeApiKey(123);
4676
- console.log('API key revoked');
4677
4339
 
4678
4340
  // Key is now unusable - attempts to use it will fail with 401
4679
4341
  \`\`\`
@@ -4683,7 +4345,7 @@ console.log('API key revoked');
4683
4345
  \`\`\`typescript
4684
4346
  // Get list of valid roles
4685
4347
  const roles = sdk.getApiKeyRoles();
4686
- console.log('Available roles:', roles);
4348
+
4687
4349
  // ['MODERATOR', 'TECHNICAL_PRODUCER', 'MANAGER', 'OWNER']
4688
4350
  \`\`\`
4689
4351
 
@@ -4698,13 +4360,13 @@ import {
4698
4360
 
4699
4361
  // Validate role string
4700
4362
  if (isValidApiKeyRole('MODERATOR')) {
4701
- console.log('Valid role');
4363
+
4702
4364
  }
4703
4365
 
4704
4366
  // Validate creation options
4705
4367
  const createErrors = validateCreateApiKeyOptions({
4706
4368
  role: 'MODERATOR',
4707
- description: 'Test key',
4369
+ description: 'Test key.',
4708
4370
  });
4709
4371
  if (createErrors.length > 0) {
4710
4372
  console.error('Validation errors:', createErrors);
@@ -4767,14 +4429,12 @@ await sdk.login();
4767
4429
  const result = await sdk.createModeratorInvite({
4768
4430
  tokenName: 'mytoken',
4769
4431
  role: MODERATOR_ROLE.MODERATOR,
4770
- description: 'John - Friday stream moderator',
4432
+ description: 'John - Friday stream moderator.',
4771
4433
  expiresAt: '2025-12-31T23:59:59Z', // Optional expiration
4772
4434
  });
4773
4435
 
4774
4436
  // Share this URL with the intended moderator
4775
- console.log('Invite URL:', result.invite.inviteUrl);
4776
- console.log('Invite Code:', result.invite.inviteCode);
4777
- console.log('Status:', result.invite.status); // PENDING
4437
+
4778
4438
  \`\`\`
4779
4439
 
4780
4440
  ## Moderator Roles
@@ -4799,14 +4459,8 @@ const list = await sdk.listModeratorInvites({
4799
4459
  limit: 20,
4800
4460
  });
4801
4461
 
4802
- console.log('Total invites:', list.meta.totalItems);
4803
-
4804
4462
  for (const invite of list.invites) {
4805
- console.log(\`- ID \${invite.id}: \${invite.role}\`);
4806
- console.log(\` Status: \${invite.status}\`);
4807
- console.log(\` Description: \${invite.description || 'None'}\`);
4808
- console.log(\` Created: \${invite.createdAt}\`);
4809
- console.log(\` Expires: \${invite.expiresAt || 'Never'}\`);
4463
+
4810
4464
  }
4811
4465
  \`\`\`
4812
4466
 
@@ -4823,9 +4477,6 @@ const result = await sdk.claimModeratorInvite({
4823
4477
  inviteCode: inviteCode,
4824
4478
  });
4825
4479
 
4826
- console.log('Claimed token:', result.token.tokenName);
4827
- console.log('Your role:', result.token.role);
4828
- console.log('Claimed at:', result.token.claimedAt);
4829
4480
  // Token now appears in /studio dashboard
4830
4481
  \`\`\`
4831
4482
 
@@ -4835,11 +4486,6 @@ console.log('Claimed at:', result.token.claimedAt);
4835
4486
  // Preview invite details before logging in (public endpoint)
4836
4487
  const preview = await sdk.getModeratorInviteByCode('abc123...');
4837
4488
 
4838
- console.log('Token:', preview.tokenName);
4839
- console.log('Symbol:', preview.tokenSymbol);
4840
- console.log('Role offered:', preview.role);
4841
- console.log('Status:', preview.status);
4842
- console.log('Invited by:', preview.invitedBy.fullName);
4843
4489
  \`\`\`
4844
4490
 
4845
4491
  ## Getting Moderated Tokens (Studio Dashboard)
@@ -4854,9 +4500,7 @@ const tokens = await sdk.getModeratedTokens({
4854
4500
  });
4855
4501
 
4856
4502
  for (const token of tokens.tokens) {
4857
- console.log(\`- \${token.tokenName} (\${token.tokenSymbol})\`);
4858
- console.log(\` Role: \${token.role}\`);
4859
- console.log(\` Stream status: \${token.muxStreamStatus}\`);
4503
+
4860
4504
  }
4861
4505
  \`\`\`
4862
4506
 
@@ -4865,7 +4509,6 @@ for (const token of tokens.tokens) {
4865
4509
  \`\`\`typescript
4866
4510
  // Revoke by invite ID (owner only)
4867
4511
  await sdk.revokeModeratorInvite(123);
4868
- console.log('Invite revoked');
4869
4512
 
4870
4513
  // If already claimed, moderator loses access immediately
4871
4514
  // If pending, invite can no longer be claimed
@@ -4917,18 +4560,16 @@ const sdk = createLaunchpadSDK({
4917
4560
 
4918
4561
  // Option 1: Using Admin API key
4919
4562
  const result = await sdk.createOverseerInvite({
4920
- description: 'John - Platform Support Team',
4563
+ description: 'John - Platform Support Team.',
4921
4564
  expiresAt: '2025-12-31T23:59:59Z', // Optional
4922
4565
  });
4923
4566
 
4924
4567
  // Option 2: Using JWT (as existing Overseer)
4925
4568
  await sdk.login();
4926
4569
  const result = await sdk.createOverseerInvite({
4927
- description: 'Platform team member',
4570
+ description: 'Platform team member.',
4928
4571
  });
4929
4572
 
4930
- console.log('Share this link:', result.invite.inviteUrl);
4931
- console.log('Invite Code:', result.invite.inviteCode);
4932
4573
  \`\`\`
4933
4574
 
4934
4575
  ## Claiming Overseer Invites
@@ -4939,13 +4580,10 @@ await sdk.login();
4939
4580
 
4940
4581
  // Claim the invite
4941
4582
  const claimed = await sdk.claimOverseerInvite('abc123...');
4942
- console.log('Now an overseer!');
4943
- console.log('Status:', claimed.invite.status); // CLAIMED
4944
4583
 
4945
4584
  // Check own status
4946
4585
  const status = await sdk.getMyOverseerStatus();
4947
- console.log('Is Overseer:', status.isOverseer); // true
4948
- console.log('Granted at:', status.overseer?.createdAt);
4586
+
4949
4587
  \`\`\`
4950
4588
 
4951
4589
  ## Listing Overseers and Invites
@@ -4959,9 +4597,7 @@ const invites = await sdk.listOverseerInvites({
4959
4597
  });
4960
4598
 
4961
4599
  for (const invite of invites.invites) {
4962
- console.log(\`#\${invite.id}: \${invite.description || 'No description'}\`);
4963
- console.log(\` Status: \${invite.status}\`);
4964
- console.log(\` Created by: \${invite.invitedBy.fullName || invite.invitedBy.address}\`);
4600
+
4965
4601
  }
4966
4602
 
4967
4603
  // List all active overseers
@@ -4972,8 +4608,7 @@ const overseers = await sdk.listOverseers({
4972
4608
  });
4973
4609
 
4974
4610
  for (const overseer of overseers.overseers) {
4975
- console.log(\`Overseer: \${overseer.userAddress}\`);
4976
- console.log(\` Since: \${overseer.createdAt}\`);
4611
+
4977
4612
  }
4978
4613
  \`\`\`
4979
4614
 
@@ -4983,10 +4618,6 @@ for (const overseer of overseers.overseers) {
4983
4618
  // Get public info about an invite (no auth required)
4984
4619
  const preview = await sdk.getOverseerInviteByCode('abc123...');
4985
4620
 
4986
- console.log('Status:', preview.status);
4987
- console.log('Description:', preview.description);
4988
- console.log('Invited by:', preview.invitedBy.fullName);
4989
- console.log('Expires:', preview.expiresAt);
4990
4621
  \`\`\`
4991
4622
 
4992
4623
  ## Revoking Access
@@ -4994,11 +4625,10 @@ console.log('Expires:', preview.expiresAt);
4994
4625
  \`\`\`typescript
4995
4626
  // Revoke an invite by ID
4996
4627
  await sdk.revokeOverseerInvite(123);
4997
- console.log('Invite revoked');
4998
4628
 
4999
4629
  // Revoke an overseer by wallet address
5000
4630
  await sdk.revokeOverseer('eth|1234567890abcdef...');
5001
- console.log('Overseer access revoked');
4631
+
5002
4632
  \`\`\`
5003
4633
 
5004
4634
  ## SDK Methods Reference
@@ -5057,8 +4687,6 @@ const flag = await sdk.createFlag({
5057
4687
  reason: 'Spam/harassment',
5058
4688
  });
5059
4689
 
5060
- console.log('Flag ID:', flag.id);
5061
- console.log('Status:', flag.status); // PENDING
5062
4690
  \`\`\`
5063
4691
 
5064
4692
  ## Listing Flags
@@ -5073,9 +4701,7 @@ const flags = await sdk.listFlags({
5073
4701
  });
5074
4702
 
5075
4703
  for (const flag of flags.flags) {
5076
- console.log(\`Flag #\${flag.id}: \${flag.contentType}\`);
5077
- console.log(\` Reason: \${flag.reason}\`);
5078
- console.log(\` Reporter: \${flag.reporterAddress}\`);
4704
+
5079
4705
  }
5080
4706
  \`\`\`
5081
4707
 
@@ -5116,14 +4742,12 @@ const comments = await sdk.getComments({
5116
4742
  });
5117
4743
 
5118
4744
  for (const comment of comments.comments) {
5119
- console.log(\`ID: \${comment.id}, MessageId: \${comment.messageId}\`);
5120
- console.log(\`\${comment.userAddress}: \${comment.content}\`);
5121
4745
 
5122
4746
  // Check reactions on this comment
5123
4747
  if (comment.reactions) {
5124
- console.log(\`Total reactions: \${comment.reactions.totalCount}\`);
4748
+
5125
4749
  for (const reaction of comment.reactions.reactions) {
5126
- console.log(\` \${reaction.reactionType}: \${reaction.count} (you reacted: \${reaction.userReacted})\`);
4750
+
5127
4751
  }
5128
4752
  }
5129
4753
  }
@@ -5134,7 +4758,6 @@ const newComment = await sdk.createComment({
5134
4758
  tokenName: 'mytoken',
5135
4759
  content: 'Great project! Looking forward to the launch.',
5136
4760
  });
5137
- console.log('Comment messageId:', newComment.comment.messageId);
5138
4761
 
5139
4762
  // Add a reaction to a comment using its messageId
5140
4763
  await sdk.addReaction({
@@ -5196,9 +4819,8 @@ const result = await sdk.getTrades({
5196
4819
  page: 1
5197
4820
  });
5198
4821
 
5199
- console.log(\`Found \${result.trades.length} trades\`);
5200
4822
  for (const trade of result.trades) {
5201
- console.log(\`\${trade.txnType}: \${trade.inputAmount} → \${trade.outputAmount}\`);
4823
+
5202
4824
  }
5203
4825
  \`\`\`
5204
4826
 
@@ -5248,16 +4870,15 @@ const userTrades = await sdk.getTrades({
5248
4870
  ### Pagination
5249
4871
 
5250
4872
  \`\`\`typescript
5251
- // Paginate through all trades
5252
- let page = 1;
4873
+ // Paginate through all trades using offset-based pagination
4874
+ let offset = 0;
5253
4875
  let hasMore = true;
5254
4876
 
5255
4877
  while (hasMore) {
5256
- const result = await sdk.getTrades({ tokenName: 'anime', page, limit: 50 });
5257
- console.log(\`Page \${page}: \${result.trades.length} trades\`);
4878
+ const result = await sdk.getTrades({ tokenName: 'anime', offset, limit: 50 });
5258
4879
 
5259
4880
  hasMore = result.trades.length === 50;
5260
- page++;
4881
+ offset += 50;
5261
4882
  }
5262
4883
  \`\`\`
5263
4884
 
@@ -5306,9 +4927,6 @@ const result = await sdk.banToken({
5306
4927
  tokenName: 'scamtoken',
5307
4928
  reason: 'Fraudulent project - reported by multiple users',
5308
4929
  });
5309
- console.log('Token banned:', result.tokenName);
5310
- console.log('Ban ID:', result.ban.id);
5311
- console.log('Banned by:', result.ban.bannedBy);
5312
4930
 
5313
4931
  // Ban without reason (optional)
5314
4932
  await sdk.banToken({ tokenName: 'problematictoken' });
@@ -5319,8 +4937,6 @@ await sdk.banToken({ tokenName: 'problematictoken' });
5319
4937
  \`\`\`typescript
5320
4938
  // Remove a token ban
5321
4939
  const result = await sdk.unbanToken({ tokenName: 'scamtoken' });
5322
- console.log('Ban removed:', result.removed); // true
5323
- console.log('Token:', result.tokenName);
5324
4940
 
5325
4941
  // Token is now:
5326
4942
  // - Visible in pool listings again
@@ -5336,12 +4952,9 @@ console.log('Token:', result.tokenName);
5336
4952
  const status = await sdk.isTokenBanned({ tokenName: 'sometoken' });
5337
4953
 
5338
4954
  if (status.banned) {
5339
- console.log('Token is banned!');
5340
- console.log('Reason:', status.ban?.reason);
5341
- console.log('Banned by:', status.ban?.bannedBy);
5342
- console.log('Banned at:', status.ban?.createdAt);
4955
+
5343
4956
  } else {
5344
- console.log('Token is not banned');
4957
+
5345
4958
  }
5346
4959
 
5347
4960
  // getTokenBan is an alias - use whichever is more readable
@@ -5353,12 +4966,9 @@ const details = await sdk.getTokenBan({ tokenName: 'sometoken' });
5353
4966
  \`\`\`typescript
5354
4967
  // Get first page with default limit (20)
5355
4968
  const page1 = await sdk.listTokenBans({});
5356
- console.log('Total banned tokens:', page1.meta.total);
5357
4969
 
5358
4970
  for (const ban of page1.items) {
5359
- console.log(\`- \${ban.tokenName}: \${ban.reason || 'No reason'}\`);
5360
- console.log(\` Banned by: \${ban.bannedBy}\`);
5361
- console.log(\` Date: \${ban.createdAt}\`);
4971
+
5362
4972
  }
5363
4973
 
5364
4974
  // Search for specific tokens (partial match, case-insensitive)
@@ -5369,16 +4979,16 @@ const searchResults = await sdk.listTokenBans({
5369
4979
  });
5370
4980
 
5371
4981
  // Paginate through all banned tokens
5372
- let page = 1;
4982
+ let cursor: string | undefined;
5373
4983
  let hasMore = true;
5374
4984
  while (hasMore) {
5375
- const results = await sdk.listTokenBans({ page, limit: 20 });
5376
- console.log(\`Page \${page}: \${results.items.length} bans\`);
4985
+ const results = await sdk.listTokenBans({ cursor, limit: 20 });
4986
+
5377
4987
  for (const ban of results.items) {
5378
- console.log(\` - \${ban.tokenName}\`);
4988
+
5379
4989
  }
5380
- hasMore = page < results.meta.totalPages;
5381
- page++;
4990
+ hasMore = results.pageInfo.hasNextPage;
4991
+ cursor = results.pageInfo.nextCursor;
5382
4992
  }
5383
4993
  \`\`\`
5384
4994
 
@@ -5422,11 +5032,10 @@ const sdk = createLaunchpadSDK({ privateKey: 'your-private-key' });
5422
5032
 
5423
5033
  // Check if a collection name is available
5424
5034
  const available = await sdk.isNftCollectionAvailable('MyEpicNFTs');
5425
- console.log('Collection available:', available);
5426
5035
 
5427
5036
  // Get fee for claiming a collection
5428
5037
  const claimFee = await sdk.getNftCollectionClaimFee();
5429
- console.log('Claim fee:', claimFee); // Usually "10000" GALA
5038
+
5430
5039
  \`\`\`
5431
5040
 
5432
5041
  ## Claim a Collection
@@ -5435,16 +5044,13 @@ console.log('Claim fee:', claimFee); // Usually "10000" GALA
5435
5044
  // Claim an available collection name
5436
5045
  const result = await sdk.claimNftCollection({
5437
5046
  collectionName: 'MyEpicNFTs',
5438
- description: 'Epic NFT collection for gaming',
5047
+ description: 'Epic NFT collection for gaming.',
5439
5048
  });
5440
- console.log('Collection claimed:', result.collectionName);
5441
- console.log('Transaction ID:', result.transactionId);
5442
5049
 
5443
5050
  // Fetch your owned collections
5444
5051
  const collections = await sdk.fetchNftCollections(walletAddress);
5445
5052
  for (const collection of collections) {
5446
- console.log(\`Collection: \${collection.collectionName}\`);
5447
- console.log(\` Status: \${collection.status}\`);
5053
+
5448
5054
  }
5449
5055
  \`\`\`
5450
5056
 
@@ -5453,13 +5059,12 @@ for (const collection of collections) {
5453
5059
  \`\`\`typescript
5454
5060
  // Get fee for creating a token class
5455
5061
  const classCreateFee = await sdk.getNftTokenClassCreateFee();
5456
- console.log('Create fee:', classCreateFee); // Usually "1000" GALA
5457
5062
 
5458
5063
  // Create a token class (rarity tier)
5459
5064
  const classResult = await sdk.createNftTokenClass({
5460
5065
  collectionName: 'MyEpicNFTs',
5461
5066
  tokenClassName: 'LegendaryWizard',
5462
- description: 'Ultra-rare legendary wizard NFTs',
5067
+ description: 'Ultra-rare legendary wizard NFTs.',
5463
5068
  maximumSupply: '100', // Max NFTs of this type
5464
5069
  data: {
5465
5070
  rarity: 'legendary',
@@ -5467,15 +5072,13 @@ const classResult = await sdk.createNftTokenClass({
5467
5072
  power: '9000',
5468
5073
  },
5469
5074
  });
5470
- console.log('Token class created:', classResult.tokenClassName);
5471
5075
 
5472
5076
  // Fetch token classes for your collection
5473
5077
  const classes = await sdk.fetchNftTokenClasses({
5474
5078
  collectionName: 'MyEpicNFTs',
5475
5079
  });
5476
5080
  for (const tokenClass of classes) {
5477
- console.log(\`Class: \${tokenClass.tokenClassName}\`);
5478
- console.log(\` Current Supply: \${tokenClass.currentSupply}/\${tokenClass.maxSupply}\`);
5081
+
5479
5082
  }
5480
5083
  \`\`\`
5481
5084
 
@@ -5488,7 +5091,6 @@ const mintFeeEstimate = await sdk.estimateNftMintFee({
5488
5091
  tokenClassName: 'LegendaryWizard',
5489
5092
  quantity: 5,
5490
5093
  });
5491
- console.log('Estimated mint fee:', mintFeeEstimate); // Dynamic fee in GALA
5492
5094
 
5493
5095
  // Estimate multiple operations at once
5494
5096
  const bundleFee = await sdk.estimateNftOperationFees({
@@ -5498,9 +5100,9 @@ const bundleFee = await sdk.estimateNftOperationFees({
5498
5100
  { type: 'mint', quantity: 10 },
5499
5101
  ],
5500
5102
  });
5501
- console.log('Total bundle fee:', bundleFee.totalFee);
5103
+
5502
5104
  for (const op of bundleFee.breakdown) {
5503
- console.log(\` \${op.operationType}: \${op.fee}\`);
5105
+
5504
5106
  }
5505
5107
  \`\`\`
5506
5108
 
@@ -5520,13 +5122,11 @@ const mintResult = await sdk.mintNft({
5520
5122
  ],
5521
5123
  },
5522
5124
  });
5523
- console.log('Minted:', mintResult.quantityMinted);
5524
- console.log('Transaction ID:', mintResult.transactionId);
5525
5125
 
5526
5126
  // Check NFT balances
5527
5127
  const balances = await sdk.fetchNftBalances(walletAddress);
5528
5128
  for (const balance of balances) {
5529
- console.log(\`\${balance.collectionName}/\${balance.tokenClassName}: \${balance.quantity}\`);
5129
+
5530
5130
  }
5531
5131
 
5532
5132
  // Filter by collection
@@ -5543,18 +5143,16 @@ if (!available) throw new Error('Collection name taken');
5543
5143
  // 2. Claim collection (10,000 GALA)
5544
5144
  const claimResult = await sdk.claimNftCollection({
5545
5145
  collectionName: 'MyEpicNFTs',
5546
- description: 'My epic NFT collection',
5146
+ description: 'My epic NFT collection.',
5547
5147
  });
5548
- console.log('✓ Collection claimed');
5549
5148
 
5550
5149
  // 3. Create token class (1,000 GALA)
5551
5150
  const classResult = await sdk.createNftTokenClass({
5552
5151
  collectionName: 'MyEpicNFTs',
5553
5152
  tokenClassName: 'Legendary',
5554
- description: 'Legendary tier NFTs',
5153
+ description: 'Legendary tier NFTs.',
5555
5154
  maximumSupply: '1000',
5556
5155
  });
5557
- console.log('✓ Token class created');
5558
5156
 
5559
5157
  // 4. Estimate mint fee
5560
5158
  const fee = await sdk.estimateNftMintFee({
@@ -5562,7 +5160,6 @@ const fee = await sdk.estimateNftMintFee({
5562
5160
  tokenClassName: 'Legendary',
5563
5161
  quantity: 100,
5564
5162
  });
5565
- console.log(\`✓ Mint fee: \${fee} GALA\`);
5566
5163
 
5567
5164
  // 5. Mint NFTs
5568
5165
  const mintResult = await sdk.mintNft({
@@ -5571,11 +5168,10 @@ const mintResult = await sdk.mintNft({
5571
5168
  quantity: 100,
5572
5169
  to: userWallet,
5573
5170
  });
5574
- console.log('✓ Minted:', mintResult.quantityMinted);
5575
5171
 
5576
5172
  // 6. Verify ownership
5577
5173
  const balances = await sdk.fetchNftBalances(userWallet, 'MyEpicNFTs');
5578
- console.log('Total NFTs:', balances.reduce((sum, b) => sum + parseInt(b.quantity), 0));
5174
+
5579
5175
  \`\`\`
5580
5176
 
5581
5177
  **MCP Tool Equivalents:**
@@ -5590,6 +5186,226 @@ console.log('Total NFTs:', balances.reduce((sum, b) => sum + parseInt(b.quantity
5590
5186
  - \`gala_launchpad_fetch_nft_token_classes\`
5591
5187
  - \`gala_launchpad_mint_nft\`
5592
5188
  - \`gala_launchpad_fetch_nft_balances\`
5189
+ `,
5190
+ // ============================================================================
5191
+ // TOKEN IDENTIFICATION: Understanding Token Formats (v5.14.0+)
5192
+ // ============================================================================
5193
+ // These conceptual topics help AI assistants understand when to use which
5194
+ // token identifier format (tokenName vs tokenClassKey).
5195
+ // ============================================================================
5196
+ 'token-identification': `
5197
+ # Token Identification in Launchpad SDK
5198
+
5199
+ The SDK uses **TWO distinct token identifier formats**. Using the wrong format causes errors.
5200
+
5201
+ ## Format 1: Token Name (Launchpad/Bonding Curve Tokens)
5202
+
5203
+ - **Format**: Simple lowercase string, 3-20 alphanumeric characters
5204
+ - **Examples**: \`"anime"\`, \`"demonkpop"\`, \`"shoewars"\`
5205
+ - **Parameter**: Usually \`tokenName\`
5206
+ - **Used for**: Bonding curve operations (before graduation)
5207
+
5208
+ \`\`\`typescript
5209
+ // ✅ CORRECT - Bonding curve buy
5210
+ await sdk.buy({ tokenName: 'anime', amount: '100', type: 'native' });
5211
+
5212
+ // ✅ CORRECT - Bonding curve sell
5213
+ await sdk.sell({ tokenName: 'anime', amount: '50', type: 'tokens' });
5214
+
5215
+ // ✅ CORRECT - Check pool status
5216
+ const pool = await sdk.fetchPools({ tokenName: 'anime' });
5217
+ \`\`\`
5218
+
5219
+ ## Format 2: TokenClassKey (GalaChain/DEX Tokens)
5220
+
5221
+ - **Format**: Pipe-delimited string: \`collection|category|type|additionalKey\`
5222
+ - **Examples**: \`"GALA|Unit|none|none"\`, \`"GUSDC|Unit|none|eth:0xa0b..."\`
5223
+ - **Parameter**: Usually \`tokenId\`, \`fromToken\`, \`toToken\`
5224
+ - **Used for**: DEX swaps, LP operations, standard GalaChain tokens
5225
+
5226
+ \`\`\`typescript
5227
+ // ✅ CORRECT - DEX swap (requires full tokenClassKey)
5228
+ const quote = await sdk.getSwapQuoteExactInput('GALA|Unit|none|none', 'GUSDC|Unit|none|eth:0xa0b...', '100');
5229
+ await sdk.executeSwap('GALA|Unit|none|none', 'GUSDC|Unit|none|eth:0xa0b...', '100', quote.estimatedOutput, quote.feeTier);
5230
+
5231
+ // ✅ CORRECT - Add DEX liquidity
5232
+ await sdk.addSwapLiquidityByPrice({
5233
+ token0: 'GALA|Unit|none|none',
5234
+ token1: 'GUSDC|Unit|none|eth:0xa0b...',
5235
+ fee: 3000,
5236
+ minPrice: '0.01',
5237
+ maxPrice: '0.05',
5238
+ amount0Desired: '1000',
5239
+ amount1Desired: '50'
5240
+ });
5241
+ \`\`\`
5242
+
5243
+ ## Common Mistakes
5244
+
5245
+ \`\`\`typescript
5246
+ // ❌ WRONG - Bare symbol for DEX (throws ValidationError)
5247
+ await sdk.executeSwap('GALA', 'GUSDC', '100', output, fee);
5248
+
5249
+ // ❌ WRONG - TokenClassKey for bonding curve
5250
+ await sdk.buy({ tokenName: 'Token|Unit|ANIME|client:gala-launchpad', amount: '100' });
5251
+
5252
+ // ❌ WRONG - Simple name for DEX quote
5253
+ await sdk.getSwapQuoteExactInput('anime', 'GALA|Unit|none|none', '100');
5254
+ \`\`\`
5255
+
5256
+ ## Method-to-Format Quick Reference
5257
+
5258
+ | Method | tokenName | tokenClassKey | Notes |
5259
+ |--------|:---------:|:-------------:|-------|
5260
+ | \`buy()\` | ✅ | ❌ | Bonding curve only |
5261
+ | \`sell()\` | ✅ | ❌ | Bonding curve only |
5262
+ | \`graduateToken()\` | ✅ | ❌ | Triggers DEX migration |
5263
+ | \`executeSwap()\` | ❌ | ✅ | DEX only |
5264
+ | \`getSwapQuote*()\` | ❌ | ✅ | DEX quotes |
5265
+ | \`addSwapLiquidity*()\` | ❌ | ✅ | LP operations |
5266
+ | \`transferToken()\` | ✅ | ✅ | Both work |
5267
+ | \`fetchTokenPrice()\` | ✅ | ✅ | Smart router |
5268
+
5269
+ ## Getting TokenClassKey for a Graduated Token
5270
+
5271
+ **⚠️ IMPORTANT: Never construct a tokenClassKey manually!**
5272
+
5273
+ The tokenClassKey contains the token's **symbol** (set at creation), which may differ
5274
+ from the tokenName. Always query for it:
5275
+
5276
+ \`\`\`typescript
5277
+ // From pool data after graduation (RECOMMENDED)
5278
+ const pool = await sdk.fetchPools({ tokenName: 'anime' });
5279
+ const tokenClassKey = pool.items[0]?.tokenClassKey;
5280
+ // → Returns the actual tokenClassKey (symbol may differ from tokenName!)
5281
+
5282
+ // Or use the resolver
5283
+ const resolved = await sdk.resolveTokenClassKey('anime');
5284
+ // → Queries backend for the correct tokenClassKey
5285
+ \`\`\`
5286
+
5287
+ ## Well-Known Token Constants
5288
+
5289
+ \`\`\`typescript
5290
+ const GALA = 'GALA|Unit|none|none';
5291
+ const GUSDC = 'GUSDC|Unit|none|eth:0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48';
5292
+ const WETH = 'GETH|Unit|none|eth:0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2';
5293
+ \`\`\`
5294
+
5295
+ **See Also:** \`src/types/token.types.ts\` for full type definitions and utilities.
5296
+ `,
5297
+ 'graduation-detection': `
5298
+ # Detecting Token Graduation Status
5299
+
5300
+ Launchpad tokens transition from bonding curve to DEX when they "graduate."
5301
+ This affects which SDK methods work and which token format to use.
5302
+
5303
+ ## Checking Graduation Status
5304
+
5305
+ \`\`\`typescript
5306
+ import { createLaunchpadSDK } from '@gala-chain/launchpad-sdk';
5307
+
5308
+ async function checkGraduationStatus(tokenName: string) {
5309
+ const sdk = createLaunchpadSDK();
5310
+
5311
+ // Method 1: Check via pool data (recommended)
5312
+ const pool = await sdk.fetchPools({ tokenName });
5313
+ const isGraduated = pool.items[0]?.isGraduated ?? false;
5314
+
5315
+ // Method 2: Use the helper method
5316
+ const graduated = await sdk.isTokenGraduated(tokenName);
5317
+
5318
+ return graduated;
5319
+ }
5320
+ \`\`\`
5321
+
5322
+ ## Handling Graduated vs Non-Graduated Tokens
5323
+
5324
+ \`\`\`typescript
5325
+ async function tradeToken(tokenName: string, galaAmount: string) {
5326
+ const sdk = createLaunchpadSDK({ wallet: 'your-private-key' });
5327
+
5328
+ // Check graduation status first
5329
+ const pool = await sdk.fetchPools({ tokenName });
5330
+ const isGraduated = pool.items[0]?.isGraduated ?? false;
5331
+
5332
+ if (isGraduated) {
5333
+ // Token is on DEX - use tokenClassKey format
5334
+ const tokenClassKey = pool.items[0]?.tokenClassKey;
5335
+ if (!tokenClassKey) throw new Error('Token graduated but no tokenClassKey found');
5336
+
5337
+ const quote = await sdk.getSwapQuoteExactInput(
5338
+ 'GALA|Unit|none|none',
5339
+ tokenClassKey,
5340
+ galaAmount
5341
+ );
5342
+
5343
+ const result = await sdk.executeSwap(
5344
+ 'GALA|Unit|none|none',
5345
+ tokenClassKey,
5346
+ galaAmount,
5347
+ quote.estimatedOutput,
5348
+ quote.feeTier
5349
+ );
5350
+
5351
+ return { method: 'DEX', result };
5352
+ } else {
5353
+ // Token is on bonding curve - use simple tokenName
5354
+ const calc = await sdk.calculateBuyAmount({
5355
+ tokenName,
5356
+ amount: galaAmount,
5357
+ type: 'native'
5358
+ });
5359
+
5360
+ const result = await sdk.buy({
5361
+ tokenName,
5362
+ amount: galaAmount,
5363
+ type: 'native',
5364
+ expectedAmount: calc.amount,
5365
+ slippageToleranceFactor: 0.01
5366
+ });
5367
+
5368
+ return { method: 'BondingCurve', result };
5369
+ }
5370
+ }
5371
+ \`\`\`
5372
+
5373
+ ## Subscribing to Graduation Events
5374
+
5375
+ \`\`\`typescript
5376
+ // Listen for new DEX pool creation (graduation event)
5377
+ sdk.onDexPoolCreation((event) => {
5378
+ console.log(\`Token graduated: \${event.tokenName}\`);
5379
+ console.log(\`New tokenClassKey: \${event.tokenClassKey}\`);
5380
+ // Update your local state to use DEX trading
5381
+ });
5382
+
5383
+ // Listen for new launchpad token creation
5384
+ sdk.onLaunchpadTokenCreation((event) => {
5385
+ console.log(\`New token launched: \${event.tokenName}\`);
5386
+ // This token is on bonding curve, use tokenName
5387
+ });
5388
+ \`\`\`
5389
+
5390
+ ## Key Differences: Pre vs Post Graduation
5391
+
5392
+ | Aspect | Pre-Graduation | Post-Graduation |
5393
+ |--------|----------------|-----------------|
5394
+ | Trading venue | Bonding curve | GalaSwap DEX |
5395
+ | Token format | \`tokenName\` ("anime") | \`tokenClassKey\` ("Token\\|Unit\\|ANIME\\|...") |
5396
+ | Buy method | \`sdk.buy()\` | \`sdk.executeSwap()\` |
5397
+ | Sell method | \`sdk.sell()\` | \`sdk.executeSwap()\` |
5398
+ | Liquidity | None | LP positions available |
5399
+ | Price source | Bonding curve formula | DEX pool |
5400
+
5401
+ ## Why This Matters
5402
+
5403
+ - **Wrong format = Error**: Using tokenName for DEX throws \`ValidationError\`
5404
+ - **Wrong method = Error**: Using \`buy()\` for graduated token may fail
5405
+ - **Performance**: Checking graduation once avoids repeated API calls
5406
+ - **User experience**: Show appropriate UI based on trading venue
5407
+
5408
+ **Related Topics:** \`token-identification\`, \`dex-trading\`, \`buy-tokens\`, \`pool-graduation\`
5593
5409
  `,
5594
5410
  };
5595
5411
  /**
@@ -5597,7 +5413,7 @@ console.log('Total NFTs:', balances.reduce((sum, b) => sum + parseInt(b.quantity
5597
5413
  */
5598
5414
  exports.explainSdkUsageTool = {
5599
5415
  name: 'gala_launchpad_explain_sdk_usage',
5600
- description: 'Get detailed SDK code examples for all 224 MCP tools (mapping to ~208 SDK methods) organized into 49 composite workflow topics covering: buy-tokens, sell-tokens, pool-graduation, fetch-pools, balances, token-creation, token-status, dex-trading, liquidity-positions, advanced-dex-analysis, price-history, token-details, token-distribution, profile-management, multi-wallet, transfers, locks, trading-analytics, utilities-and-helpers, utilities-system, error-handling, installation, local-calculations, spot-prices-smart-routing, event-subscriptions, mcp-to-sdk-mapping, DEX leaderboards, bridge-operations, dex-token-discovery, wrap-unwrap-operations, referral-system, account-management, session-auth, streaming, stream-chat, ban-management, api-key-management, moderator-invites, overseer-invites, content-flag-management, content-reactions, trade-history, token-ban-management, and nft-collection-management',
5416
+ description: 'Get detailed SDK code examples for all 224 MCP tools (mapping to ~208 SDK methods) organized into 51 composite workflow topics covering: buy-tokens, sell-tokens, pool-graduation, fetch-pools, balances, token-creation, token-status, dex-trading, liquidity-positions, advanced-dex-analysis, price-history, token-details, token-distribution, profile-management, multi-wallet, transfers, locks, trading-analytics, utilities-and-helpers, utilities-system, error-handling, installation, local-calculations, spot-prices-smart-routing, event-subscriptions, mcp-to-sdk-mapping, DEX leaderboards, bridge-operations, dex-token-discovery, wrap-unwrap-operations, referral-system, account-management, session-auth, streaming, stream-chat, ban-management, api-key-management, moderator-invites, overseer-invites, content-flag-management, content-reactions, trade-history, token-ban-management, nft-collection-management, token-identification (explains tokenName vs tokenClassKey formats), and graduation-detection (how to check if a token has graduated from bonding curve to DEX).',
5601
5417
  inputSchema: {
5602
5418
  type: 'object',
5603
5419
  properties: {
@@ -5653,8 +5469,10 @@ exports.explainSdkUsageTool = {
5653
5469
  'trade-history',
5654
5470
  'token-ban-management',
5655
5471
  'nft-collection-management',
5472
+ 'token-identification',
5473
+ 'graduation-detection',
5656
5474
  ],
5657
- description: 'The SDK usage topic to explain',
5475
+ description: 'The SDK usage topic to explain.',
5658
5476
  },
5659
5477
  },
5660
5478
  required: ['topic'],