@gala-chain/launchpad-mcp-server 5.0.5-beta.24 → 5.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (327) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +48 -29
  3. package/dist/constants/mcpToolNames.d.ts +15 -0
  4. package/dist/constants/mcpToolNames.d.ts.map +1 -1
  5. package/dist/constants/mcpToolNames.js +13 -1
  6. package/dist/constants/mcpToolNames.js.map +1 -1
  7. package/dist/generated/version.d.ts +1 -1
  8. package/dist/generated/version.d.ts.map +1 -1
  9. package/dist/generated/version.js +1 -1
  10. package/dist/generated/version.js.map +1 -1
  11. package/dist/prompts/account.d.ts +0 -6
  12. package/dist/prompts/account.d.ts.map +1 -1
  13. package/dist/prompts/account.js +1 -34
  14. package/dist/prompts/account.js.map +1 -1
  15. package/dist/prompts/ai-moderation.d.ts +36 -0
  16. package/dist/prompts/ai-moderation.d.ts.map +1 -0
  17. package/dist/prompts/ai-moderation.js +198 -0
  18. package/dist/prompts/ai-moderation.js.map +1 -0
  19. package/dist/prompts/chat.d.ts.map +1 -1
  20. package/dist/prompts/chat.js +6 -1
  21. package/dist/prompts/chat.js.map +1 -1
  22. package/dist/prompts/factories/reaction-prompt-factory.d.ts.map +1 -1
  23. package/dist/prompts/factories/reaction-prompt-factory.js +16 -6
  24. package/dist/prompts/factories/reaction-prompt-factory.js.map +1 -1
  25. package/dist/prompts/global-feed.d.ts +24 -0
  26. package/dist/prompts/global-feed.d.ts.map +1 -0
  27. package/dist/prompts/global-feed.js +89 -0
  28. package/dist/prompts/global-feed.js.map +1 -0
  29. package/dist/prompts/holders.d.ts +31 -0
  30. package/dist/prompts/holders.d.ts.map +1 -0
  31. package/dist/prompts/holders.js +117 -0
  32. package/dist/prompts/holders.js.map +1 -0
  33. package/dist/prompts/index.d.ts +11 -2
  34. package/dist/prompts/index.d.ts.map +1 -1
  35. package/dist/prompts/index.js +47 -1
  36. package/dist/prompts/index.js.map +1 -1
  37. package/dist/prompts/manifest.d.ts +2 -2
  38. package/dist/prompts/manifest.d.ts.map +1 -1
  39. package/dist/prompts/manifest.js +406 -21
  40. package/dist/prompts/manifest.js.map +1 -1
  41. package/dist/prompts/messages.d.ts +48 -0
  42. package/dist/prompts/messages.d.ts.map +1 -0
  43. package/dist/prompts/messages.js +333 -0
  44. package/dist/prompts/messages.js.map +1 -0
  45. package/dist/prompts/oembed.d.ts +24 -0
  46. package/dist/prompts/oembed.d.ts.map +1 -0
  47. package/dist/prompts/oembed.js +127 -0
  48. package/dist/prompts/oembed.js.map +1 -0
  49. package/dist/prompts/platform-stats.d.ts +16 -0
  50. package/dist/prompts/platform-stats.d.ts.map +1 -0
  51. package/dist/prompts/platform-stats.js +42 -0
  52. package/dist/prompts/platform-stats.js.map +1 -0
  53. package/dist/prompts/restricted-names.d.ts +22 -0
  54. package/dist/prompts/restricted-names.d.ts.map +1 -0
  55. package/dist/prompts/restricted-names.js +89 -0
  56. package/dist/prompts/restricted-names.js.map +1 -0
  57. package/dist/prompts/websocket-admin.d.ts +100 -0
  58. package/dist/prompts/websocket-admin.d.ts.map +1 -0
  59. package/dist/prompts/websocket-admin.js +758 -0
  60. package/dist/prompts/websocket-admin.js.map +1 -0
  61. package/dist/prompts/weekly-challenge.d.ts +24 -0
  62. package/dist/prompts/weekly-challenge.d.ts.map +1 -0
  63. package/dist/prompts/weekly-challenge.js +100 -0
  64. package/dist/prompts/weekly-challenge.js.map +1 -0
  65. package/dist/schemas/common-schemas.d.ts +5 -4
  66. package/dist/schemas/common-schemas.d.ts.map +1 -1
  67. package/dist/schemas/common-schemas.js +5 -4
  68. package/dist/schemas/common-schemas.js.map +1 -1
  69. package/dist/server.d.ts +1 -6
  70. package/dist/server.d.ts.map +1 -1
  71. package/dist/server.js +42 -22
  72. package/dist/server.js.map +1 -1
  73. package/dist/tools/ai-moderation/index.d.ts +41 -0
  74. package/dist/tools/ai-moderation/index.d.ts.map +1 -0
  75. package/dist/tools/ai-moderation/index.js +196 -0
  76. package/dist/tools/ai-moderation/index.js.map +1 -0
  77. package/dist/tools/auth/index.d.ts.map +1 -1
  78. package/dist/tools/auth/index.js +17 -8
  79. package/dist/tools/auth/index.js.map +1 -1
  80. package/dist/tools/balance/index.d.ts +0 -1
  81. package/dist/tools/balance/index.d.ts.map +1 -1
  82. package/dist/tools/balance/index.js +1 -20
  83. package/dist/tools/balance/index.js.map +1 -1
  84. package/dist/tools/ban/onBanEnforcement.d.ts +1 -1
  85. package/dist/tools/ban/onBanEnforcement.d.ts.map +1 -1
  86. package/dist/tools/bridge/helpers/external-chain-balance-tools.d.ts +6 -6
  87. package/dist/tools/bridge/helpers/external-chain-balance-tools.d.ts.map +1 -1
  88. package/dist/tools/bridge/helpers/external-chain-balance-tools.js +3 -3
  89. package/dist/tools/bridge/helpers/external-chain-balance-tools.js.map +1 -1
  90. package/dist/tools/bridge/index.d.ts.map +1 -1
  91. package/dist/tools/bridge/index.js +2 -0
  92. package/dist/tools/bridge/index.js.map +1 -1
  93. package/dist/tools/chat/index.d.ts +6 -0
  94. package/dist/tools/chat/index.d.ts.map +1 -1
  95. package/dist/tools/chat/index.js +39 -1
  96. package/dist/tools/chat/index.js.map +1 -1
  97. package/dist/tools/comments/onCommentCreated.d.ts +1 -1
  98. package/dist/tools/comments/onCommentCreated.d.ts.map +1 -1
  99. package/dist/tools/content-flags/index.d.ts.map +1 -1
  100. package/dist/tools/content-flags/index.js +10 -2
  101. package/dist/tools/content-flags/index.js.map +1 -1
  102. package/dist/tools/creation/index.d.ts +1 -1
  103. package/dist/tools/creation/index.d.ts.map +1 -1
  104. package/dist/tools/creation/index.js +5 -0
  105. package/dist/tools/creation/index.js.map +1 -1
  106. package/dist/tools/dex/helpers.d.ts +4 -40
  107. package/dist/tools/dex/helpers.d.ts.map +1 -1
  108. package/dist/tools/dex/helpers.js +10 -0
  109. package/dist/tools/dex/helpers.js.map +1 -1
  110. package/dist/tools/dex/index.d.ts +3 -3
  111. package/dist/tools/dex/index.js +7 -7
  112. package/dist/tools/dex/index.js.map +1 -1
  113. package/dist/tools/dex-liquidity/index.js +8 -8
  114. package/dist/tools/dex-liquidity/index.js.map +1 -1
  115. package/dist/tools/dex-pools/index.d.ts.map +1 -1
  116. package/dist/tools/dex-pools/index.js +7 -6
  117. package/dist/tools/dex-pools/index.js.map +1 -1
  118. package/dist/tools/global-feed/monitorGlobalFeedEvents.d.ts.map +1 -1
  119. package/dist/tools/global-feed/monitorGlobalFeedEvents.js +16 -7
  120. package/dist/tools/global-feed/monitorGlobalFeedEvents.js.map +1 -1
  121. package/dist/tools/handler-factories.d.ts +1 -1
  122. package/dist/tools/handler-factories.d.ts.map +1 -1
  123. package/dist/tools/handler-factories.js +11 -7
  124. package/dist/tools/handler-factories.js.map +1 -1
  125. package/dist/tools/holders/index.d.ts.map +1 -1
  126. package/dist/tools/holders/index.js +9 -0
  127. package/dist/tools/holders/index.js.map +1 -1
  128. package/dist/tools/index.d.ts +1 -1
  129. package/dist/tools/index.d.ts.map +1 -1
  130. package/dist/tools/index.js +45 -9
  131. package/dist/tools/index.js.map +1 -1
  132. package/dist/tools/manifest.d.ts +3 -3
  133. package/dist/tools/manifest.d.ts.map +1 -1
  134. package/dist/tools/manifest.js +844 -253
  135. package/dist/tools/manifest.js.map +1 -1
  136. package/dist/tools/messages/fetchMessages.d.ts.map +1 -1
  137. package/dist/tools/messages/fetchMessages.js +4 -0
  138. package/dist/tools/messages/fetchMessages.js.map +1 -1
  139. package/dist/tools/messages/getMessageStats.d.ts +16 -0
  140. package/dist/tools/messages/getMessageStats.d.ts.map +1 -0
  141. package/dist/tools/messages/getMessageStats.js +47 -0
  142. package/dist/tools/messages/getMessageStats.js.map +1 -0
  143. package/dist/tools/messages/index.d.ts +6 -2
  144. package/dist/tools/messages/index.d.ts.map +1 -1
  145. package/dist/tools/messages/index.js +9 -2
  146. package/dist/tools/messages/index.js.map +1 -1
  147. package/dist/tools/moderators/index.d.ts +4 -0
  148. package/dist/tools/moderators/index.d.ts.map +1 -1
  149. package/dist/tools/moderators/index.js +35 -1
  150. package/dist/tools/moderators/index.js.map +1 -1
  151. package/dist/tools/moderators/onModeratorChanged.d.ts +1 -1
  152. package/dist/tools/moderators/onModeratorChanged.d.ts.map +1 -1
  153. package/dist/tools/nft/index.d.ts +2 -2
  154. package/dist/tools/nft/index.d.ts.map +1 -1
  155. package/dist/tools/nft/index.js +1 -1
  156. package/dist/tools/nft/index.js.map +1 -1
  157. package/dist/tools/notifications/index.d.ts +39 -0
  158. package/dist/tools/notifications/index.d.ts.map +1 -0
  159. package/dist/tools/notifications/index.js +196 -0
  160. package/dist/tools/notifications/index.js.map +1 -0
  161. package/dist/tools/oembed/index.d.ts +31 -0
  162. package/dist/tools/oembed/index.d.ts.map +1 -0
  163. package/dist/tools/oembed/index.js +113 -0
  164. package/dist/tools/oembed/index.js.map +1 -0
  165. package/dist/tools/overseers/cache-management.d.ts +4 -0
  166. package/dist/tools/overseers/cache-management.d.ts.map +1 -1
  167. package/dist/tools/overseers/cache-management.js +41 -1
  168. package/dist/tools/overseers/cache-management.js.map +1 -1
  169. package/dist/tools/overseers/index.d.ts +17 -0
  170. package/dist/tools/overseers/index.d.ts.map +1 -1
  171. package/dist/tools/overseers/index.js +101 -1
  172. package/dist/tools/overseers/index.js.map +1 -1
  173. package/dist/tools/overseers/listOverseerUsers.d.ts.map +1 -1
  174. package/dist/tools/overseers/listOverseerUsers.js +1 -0
  175. package/dist/tools/overseers/listOverseerUsers.js.map +1 -1
  176. package/dist/tools/pagination-handler-factory.d.ts.map +1 -1
  177. package/dist/tools/pagination-handler-factory.js +4 -2
  178. package/dist/tools/pagination-handler-factory.js.map +1 -1
  179. package/dist/tools/platform-stats/index.d.ts +21 -0
  180. package/dist/tools/platform-stats/index.d.ts.map +1 -0
  181. package/dist/tools/platform-stats/index.js +51 -0
  182. package/dist/tools/platform-stats/index.js.map +1 -0
  183. package/dist/tools/pools/fetchPoolDetailsForCalculation.d.ts +1 -1
  184. package/dist/tools/pools/fetchPoolDetailsForCalculation.d.ts.map +1 -1
  185. package/dist/tools/pools/index.d.ts +7 -7
  186. package/dist/tools/pools/index.d.ts.map +1 -1
  187. package/dist/tools/pools/index.js +4 -2
  188. package/dist/tools/pools/index.js.map +1 -1
  189. package/dist/tools/pools/onDexPoolCreation.d.ts +1 -1
  190. package/dist/tools/pools/onDexPoolCreation.d.ts.map +1 -1
  191. package/dist/tools/pools/onHolderCountChanged.d.ts +1 -1
  192. package/dist/tools/pools/onHolderCountChanged.d.ts.map +1 -1
  193. package/dist/tools/pools/onLaunchpadTokenCreation.d.ts +1 -1
  194. package/dist/tools/pools/onLaunchpadTokenCreation.d.ts.map +1 -1
  195. package/dist/tools/pools/onPoolUpdated.d.ts +1 -1
  196. package/dist/tools/pools/onPoolUpdated.d.ts.map +1 -1
  197. package/dist/tools/streaming/index.d.ts.map +1 -1
  198. package/dist/tools/streaming/index.js +4 -3
  199. package/dist/tools/streaming/index.js.map +1 -1
  200. package/dist/tools/streaming/setNextLiveStreamCountdown.js +3 -3
  201. package/dist/tools/streaming/setNextLiveStreamCountdown.js.map +1 -1
  202. package/dist/tools/token-ban/onTokenBanChanged.d.ts +1 -1
  203. package/dist/tools/token-ban/onTokenBanChanged.d.ts.map +1 -1
  204. package/dist/tools/tool-factory.d.ts.map +1 -1
  205. package/dist/tools/tool-factory.js +1 -0
  206. package/dist/tools/tool-factory.js.map +1 -1
  207. package/dist/tools/trades/index.d.ts.map +1 -1
  208. package/dist/tools/trades/index.js +8 -1
  209. package/dist/tools/trades/index.js.map +1 -1
  210. package/dist/tools/trades/onTradeExecuted.d.ts +1 -1
  211. package/dist/tools/trades/onTradeExecuted.d.ts.map +1 -1
  212. package/dist/tools/trading/helpers/arg-extractors.d.ts +6 -41
  213. package/dist/tools/trading/helpers/arg-extractors.d.ts.map +1 -1
  214. package/dist/tools/trading/helpers/trading-schemas.d.ts +2 -2
  215. package/dist/tools/trading/helpers/trading-schemas.d.ts.map +1 -1
  216. package/dist/tools/trading/helpers/trading-schemas.js.map +1 -1
  217. package/dist/tools/trading/index.d.ts +4 -0
  218. package/dist/tools/trading/index.d.ts.map +1 -1
  219. package/dist/tools/trading/index.js +112 -1
  220. package/dist/tools/trading/index.js.map +1 -1
  221. package/dist/tools/utils/createSolanaWallet.d.ts +1 -1
  222. package/dist/tools/utils/createSolanaWallet.d.ts.map +1 -1
  223. package/dist/tools/utils/createSolanaWallet.js +2 -1
  224. package/dist/tools/utils/createSolanaWallet.js.map +1 -1
  225. package/dist/tools/utils/createWallet.d.ts +1 -1
  226. package/dist/tools/utils/createWallet.d.ts.map +1 -1
  227. package/dist/tools/utils/createWallet.js +2 -1
  228. package/dist/tools/utils/createWallet.js.map +1 -1
  229. package/dist/tools/utils/explainSdkUsage.d.ts +39 -1
  230. package/dist/tools/utils/explainSdkUsage.d.ts.map +1 -1
  231. package/dist/tools/utils/explainSdkUsage.js +1731 -157
  232. package/dist/tools/utils/explainSdkUsage.js.map +1 -1
  233. package/dist/tools/utils/explainWebSocketEvents.d.ts.map +1 -1
  234. package/dist/tools/utils/explainWebSocketEvents.js +6 -4
  235. package/dist/tools/utils/explainWebSocketEvents.js.map +1 -1
  236. package/dist/tools/utils/getAddress.d.ts +1 -1
  237. package/dist/tools/utils/getAddress.d.ts.map +1 -1
  238. package/dist/tools/utils/getCacheInfo.d.ts +1 -1
  239. package/dist/tools/utils/getCacheInfo.d.ts.map +1 -1
  240. package/dist/tools/utils/getConfig.d.ts +1 -1
  241. package/dist/tools/utils/getConfig.d.ts.map +1 -1
  242. package/dist/tools/utils/getConfig.js +1 -1
  243. package/dist/tools/utils/getConfig.js.map +1 -1
  244. package/dist/tools/utils/getEnvironment.d.ts +1 -1
  245. package/dist/tools/utils/getEnvironment.d.ts.map +1 -1
  246. package/dist/tools/utils/getEnvironment.js +1 -1
  247. package/dist/tools/utils/getEnvironment.js.map +1 -1
  248. package/dist/tools/utils/getEthereumAddress.d.ts +1 -1
  249. package/dist/tools/utils/getEthereumAddress.d.ts.map +1 -1
  250. package/dist/tools/utils/getEthereumAddressFromPrivateKey.d.ts +1 -1
  251. package/dist/tools/utils/getEthereumAddressFromPrivateKey.d.ts.map +1 -1
  252. package/dist/tools/utils/getEthereumAddressFromPrivateKey.js +1 -1
  253. package/dist/tools/utils/getEthereumAddressFromPrivateKey.js.map +1 -1
  254. package/dist/tools/utils/getEventSchema.d.ts.map +1 -1
  255. package/dist/tools/utils/getEventSchema.js +88 -2
  256. package/dist/tools/utils/getEventSchema.js.map +1 -1
  257. package/dist/tools/utils/getPublicKeyFromPrivateKey.d.ts +1 -1
  258. package/dist/tools/utils/getPublicKeyFromPrivateKey.d.ts.map +1 -1
  259. package/dist/tools/utils/getPublicKeyFromPrivateKey.js +1 -1
  260. package/dist/tools/utils/getPublicKeyFromPrivateKey.js.map +1 -1
  261. package/dist/tools/utils/getUrlByTokenName.d.ts +1 -1
  262. package/dist/tools/utils/getUrlByTokenName.d.ts.map +1 -1
  263. package/dist/tools/utils/getUrlByTokenName.js +1 -1
  264. package/dist/tools/utils/getUrlByTokenName.js.map +1 -1
  265. package/dist/tools/utils/getVersion.d.ts +1 -1
  266. package/dist/tools/utils/getVersion.d.ts.map +1 -1
  267. package/dist/tools/utils/getVersion.js +1 -1
  268. package/dist/tools/utils/getVersion.js.map +1 -1
  269. package/dist/tools/utils/getWallet.d.ts +1 -1
  270. package/dist/tools/utils/getWallet.d.ts.map +1 -1
  271. package/dist/tools/utils/hasWallet.d.ts +1 -1
  272. package/dist/tools/utils/hasWallet.d.ts.map +1 -1
  273. package/dist/tools/utils/index.d.ts +1 -1
  274. package/dist/tools/utils/index.d.ts.map +1 -1
  275. package/dist/tools/utils/isTokenGraduated.d.ts +1 -1
  276. package/dist/tools/utils/isTokenGraduated.d.ts.map +1 -1
  277. package/dist/tools/utils/setWallet.d.ts +1 -1
  278. package/dist/tools/utils/setWallet.d.ts.map +1 -1
  279. package/dist/tools/utils/setWallet.js +1 -1
  280. package/dist/tools/utils/setWallet.js.map +1 -1
  281. package/dist/tools/utils/switchEnvironment.d.ts +1 -1
  282. package/dist/tools/utils/switchEnvironment.d.ts.map +1 -1
  283. package/dist/tools/validate-manifest.d.ts.map +1 -1
  284. package/dist/tools/validate-manifest.js +5 -0
  285. package/dist/tools/validate-manifest.js.map +1 -1
  286. package/dist/tools/wallet/index.d.ts +1 -1
  287. package/dist/tools/wallet/index.d.ts.map +1 -1
  288. package/dist/tools/websocket-admin/emitDownloadReady.d.ts +15 -0
  289. package/dist/tools/websocket-admin/emitDownloadReady.d.ts.map +1 -0
  290. package/dist/tools/websocket-admin/emitDownloadReady.js +78 -0
  291. package/dist/tools/websocket-admin/emitDownloadReady.js.map +1 -0
  292. package/dist/tools/websocket-admin/emitRecordingStatus.d.ts +15 -0
  293. package/dist/tools/websocket-admin/emitRecordingStatus.d.ts.map +1 -0
  294. package/dist/tools/websocket-admin/emitRecordingStatus.js +78 -0
  295. package/dist/tools/websocket-admin/emitRecordingStatus.js.map +1 -0
  296. package/dist/tools/websocket-admin/emitRecordingsCountUpdated.d.ts +15 -0
  297. package/dist/tools/websocket-admin/emitRecordingsCountUpdated.d.ts.map +1 -0
  298. package/dist/tools/websocket-admin/emitRecordingsCountUpdated.js +57 -0
  299. package/dist/tools/websocket-admin/emitRecordingsCountUpdated.js.map +1 -0
  300. package/dist/tools/websocket-admin/index.d.ts +8 -2
  301. package/dist/tools/websocket-admin/index.d.ts.map +1 -1
  302. package/dist/tools/websocket-admin/index.js +15 -2
  303. package/dist/tools/websocket-admin/index.js.map +1 -1
  304. package/dist/tools/weekly-challenge/index.d.ts +28 -0
  305. package/dist/tools/weekly-challenge/index.d.ts.map +1 -0
  306. package/dist/tools/weekly-challenge/index.js +95 -0
  307. package/dist/tools/weekly-challenge/index.js.map +1 -0
  308. package/dist/types/mcp.d.ts +43 -5
  309. package/dist/types/mcp.d.ts.map +1 -1
  310. package/dist/utils/default-values.d.ts +5 -5
  311. package/dist/utils/default-values.js +12 -12
  312. package/dist/utils/default-values.js.map +1 -1
  313. package/dist/utils/error-handler.d.ts +1 -1
  314. package/dist/utils/error-handler.d.ts.map +1 -1
  315. package/dist/utils/error-handler.js +10 -1
  316. package/dist/utils/error-handler.js.map +1 -1
  317. package/dist/utils/error-templates.d.ts.map +1 -1
  318. package/dist/utils/error-templates.js +1 -0
  319. package/dist/utils/error-templates.js.map +1 -1
  320. package/dist/utils/response-formatter.js +1 -1
  321. package/dist/utils/response-formatter.js.map +1 -1
  322. package/dist/utils/tool-factory.d.ts +3 -3
  323. package/dist/utils/tool-factory.d.ts.map +1 -1
  324. package/dist/utils/tool-registry.d.ts.map +1 -1
  325. package/dist/utils/tool-registry.js +17 -8
  326. package/dist/utils/tool-registry.js.map +1 -1
  327. package/package.json +33 -34
@@ -6,7 +6,8 @@
6
6
  * Acts as a development reference showing how MCP tools map to SDK methods.
7
7
  */
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.explainSdkUsageTool = exports.SDK_EXAMPLES = exports.COMPOSITE_TOPICS = exports.TOPIC_METHOD_MAPPING = void 0;
9
+ exports.explainSdkUsageTool = exports.SDK_EXAMPLE_TOPICS = exports.SDK_EXAMPLES = exports.COMPOSITE_TOPICS = exports.TOPIC_METHOD_MAPPING = void 0;
10
+ exports.isValidSdkTopic = isValidSdkTopic;
10
11
  const error_handler_js_1 = require("../../utils/error-handler.js");
11
12
  const response_formatter_js_1 = require("../../utils/response-formatter.js");
12
13
  // BigNumber utilities for precise currency handling (imported from SDK)
@@ -33,12 +34,18 @@ exports.TOPIC_METHOD_MAPPING = {
33
34
  'token-details': ['fetchTokenDetails'],
34
35
  'token-distribution': ['fetchTokenDistribution', 'fetchUserHolderContext'],
35
36
  'token-status': ['isTokenGraduated', 'onDexPoolCreation', 'onLaunchpadTokenCreation'],
36
- // Portfolio Management
37
- 'multi-wallet': ['getAddress'], // Composite workflow topic
37
+ // Wallet Connection
38
+ 'wallet-connect': ['getAddress', 'createWallet', 'getEthereumAddress'],
39
+ 'multi-wallet': ['getAddress', 'createWallet', 'createSolanaWallet', 'getEthereumAddress', 'getPublicKeyFromPrivateKey', 'getEthereumAddressFromPrivateKey'],
38
40
  'transfers': ['transferGala', 'transferToken'],
39
41
  'locks': ['lockTokens', 'unlockTokens', 'burnTokens', 'fetchLockedBalance'],
40
42
  // DEX Trading
41
43
  'dex-trading': ['getSwapQuoteExactInput', 'getSwapQuoteExactOutput', 'executeSwap', 'getSwapUserAssets', 'getAllSwapUserAssets', 'getSwapPoolInfo'],
44
+ 'gdex-stream': [
45
+ 'connect', 'disconnect', 'isConnected', 'request', 'serverInfo', 'ping',
46
+ 'getPool', 'getBalance', 'getPositions', 'getBlockHeight', 'quote', 'getToken',
47
+ 'subscribeSwaps', 'subscribePool', 'subscribeBalances', 'subscribePoolCreated', 'subscribeBlocks'
48
+ ],
42
49
  'error-handling': ['getBundlerTransactionResult'], // Cross-cutting concern
43
50
  // Developer Tools
44
51
  'installation': ['getVersion'], // Setup topic
@@ -63,7 +70,7 @@ exports.TOPIC_METHOD_MAPPING = {
63
70
  'fetch-dex-aggregated-volume-summary': ['fetchDexAggregatedVolumeSummary'],
64
71
  'fetch-dex-pools': ['fetchDexPools', 'fetchAllDexPools'],
65
72
  // Event Subscriptions
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'],
73
+ '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', 'onEngagementStatsUpdated'],
67
74
  // MCP Integration
68
75
  'mcp-to-sdk-mapping': ['explainSdkUsage'], // Composite workflow topic
69
76
  // Bridge Operations
@@ -94,10 +101,6 @@ exports.TOPIC_METHOD_MAPPING = {
94
101
  'referral-system': [
95
102
  'fetchReferralUrl', 'fetchReferrals', 'fetchAllReferrals', 'fetchReferralsSummary'
96
103
  ],
97
- // Account Management
98
- 'account-management': [
99
- 'registerAccount'
100
- ],
101
104
  // Session Authentication (JWT)
102
105
  'session-auth': [
103
106
  'login', 'logout', 'refreshToken', 'getSession', 'isAuthenticated',
@@ -137,7 +140,8 @@ exports.TOPIC_METHOD_MAPPING = {
137
140
  'overseer-invites': [
138
141
  'createOverseerInvite', 'claimOverseerInvite', 'listOverseerInvites',
139
142
  'getOverseerInviteByCode', 'revokeOverseerInvite', 'listOverseers',
140
- 'revokeOverseer', 'getMyOverseerStatus', 'getOverseerSummary'
143
+ 'revokeOverseer', 'getMyOverseerStatus', 'getOverseerSummary',
144
+ 'getBanStats', 'getTokenBanStats', 'getInviteStats', 'getFlagStats', 'getUserStats'
141
145
  ],
142
146
  // Content Moderation (Flags & Comments)
143
147
  'content-flag-management': [
@@ -152,7 +156,7 @@ exports.TOPIC_METHOD_MAPPING = {
152
156
  ],
153
157
  // Trade History Queries
154
158
  'trade-history': [
155
- 'getTrades'
159
+ 'getTrades', 'getRecentTrades'
156
160
  ],
157
161
  // Token Ban Management (Platform-wide, Overseer Only)
158
162
  'token-ban-management': [
@@ -174,6 +178,63 @@ exports.TOPIC_METHOD_MAPPING = {
174
178
  'graduation-detection': [
175
179
  'isTokenGraduated', 'fetchPools', 'onDexPoolCreation', 'onLaunchpadTokenCreation'
176
180
  ],
181
+ // AI Moderation (Overseer Only)
182
+ 'ai-moderation': [
183
+ 'getAIModerationSettings', 'updateAIModerationSettings', 'getAIModeration',
184
+ 'triggerAIModeration', 'getAIModerationStatus'
185
+ ],
186
+ // Weekly Challenge Leaderboard
187
+ 'weekly-challenge': [
188
+ 'getWeeklyChallengeLeaderboard', 'getTokenWeeklyHistory'
189
+ ],
190
+ // Platform Statistics
191
+ 'platform-stats': [
192
+ 'getPlatformStats'
193
+ ],
194
+ // Restricted Names (Overseer Only)
195
+ 'restricted-names': [
196
+ 'getRestrictedNames', 'updateRestrictedNames'
197
+ ],
198
+ // WebSocket Admin (Overseer/Admin Only)
199
+ 'websocket-admin': [
200
+ 'emitTradeExecuted', 'emitBalanceUpdated', 'emitStreamStatus', 'emitViewerCount',
201
+ 'emitStreamCountdown', 'emitChatMessage', 'emitChatStatus', 'emitTypingIndicator',
202
+ 'emitTokenBanned', 'emitTokenUnbanned', 'emitModeratorAdded', 'emitModeratorRemoved',
203
+ 'emitUserProfileUpdated', 'emitSiteConfigChanged', 'emitFeatureStatus',
204
+ 'getConnectedClients', 'isUserOnline', 'getOnlineUsers', 'getTokenViewers', 'getOnlineOverseers'
205
+ ],
206
+ // OEmbed Metadata (Social Media Previews)
207
+ 'oembed': [
208
+ 'getHomeOEmbed', 'getPoolOEmbed', 'getProfileOEmbed'
209
+ ],
210
+ // Unified Messages API (CHAT + COMMENT types)
211
+ 'messages': [
212
+ 'fetchMessages', 'createMessage', 'updateMessage', 'deleteMessage',
213
+ 'getPinnedMessage', 'pinMessage', 'unpinMessage', 'getMessageStats'
214
+ ],
215
+ // Holder Data Queries (Derived from Distribution + Trade Data)
216
+ 'holders': [
217
+ 'fetchTokenDistribution', 'getTrades',
218
+ 'getTopHolders', 'getHolderCount', 'getHolderRank', 'getHoldersByBalance', 'getHolderHistory'
219
+ ],
220
+ // Trading Quotes (Backend Proxy, v9.1.0+)
221
+ 'trading-quotes': [
222
+ 'fetchLaunchpadFee', 'fetchSaleDetails', 'getTradeQuote', 'getPremintQuote'
223
+ ],
224
+ // Global Feed Reference (MCP documentation tools)
225
+ 'global-feed-subscription': [
226
+ 'subscribeToStream'
227
+ ],
228
+ // Events Tracking (Client-side batching + backend persistence)
229
+ 'events-tracking': [],
230
+ // Global Ban Management (Platform-wide, Overseer Only)
231
+ 'global-bans': [
232
+ 'createGlobalBan', 'removeGlobalBan', 'listGlobalBans', 'getGlobalBan'
233
+ ],
234
+ // Recent Trades (Convenience wrapper)
235
+ 'recent-trades': [
236
+ 'getRecentTrades', 'getTrades'
237
+ ],
177
238
  };
178
239
  /**
179
240
  * Composite topics that don't map 1:1 to SDK methods
@@ -181,7 +242,7 @@ exports.TOPIC_METHOD_MAPPING = {
181
242
  */
182
243
  exports.COMPOSITE_TOPICS = new Set([
183
244
  'buy-tokens', 'sell-tokens', 'pool-graduation', 'fetch-pools', 'balances',
184
- 'token-creation', 'token-status', 'multi-wallet', 'transfers', 'locks', 'dex-trading', 'error-handling',
245
+ 'token-creation', 'token-status', 'wallet-connect', 'multi-wallet', 'transfers', 'locks', 'dex-trading', 'gdex-stream', 'error-handling',
185
246
  'installation', 'local-calculations', 'price-history', 'token-details',
186
247
  'spot-prices-smart-routing', 'profile-management', 'token-distribution',
187
248
  'liquidity-positions', 'advanced-dex-analysis',
@@ -194,6 +255,11 @@ exports.COMPOSITE_TOPICS = new Set([
194
255
  'nft-collection-management',
195
256
  // Token Concepts (v5.14.0+)
196
257
  'token-identification', 'graduation-detection',
258
+ // New Categories (v7.0.0+)
259
+ 'ai-moderation', 'weekly-challenge', 'platform-stats', 'restricted-names',
260
+ 'websocket-admin', 'oembed', 'messages', 'holders',
261
+ // Trading & Events (v9.1.0+)
262
+ 'trading-quotes', 'global-feed-subscription', 'events-tracking', 'global-bans', 'recent-trades',
197
263
  ]);
198
264
  /**
199
265
  * SDK code examples organized by topic
@@ -630,63 +696,491 @@ async function launchToken() {
630
696
  - \`gala_launchpad_get_url_by_token_name\`
631
697
  `,
632
698
  // ============================================================================
633
- // PORTFOLIO MANAGEMENT: Multi-Wallet & Transfers
699
+ // WALLET CONNECTION & MANAGEMENT
634
700
  // ============================================================================
635
- // - multi-wallet: Manage multiple wallets and sessions
701
+ // - wallet-connect: Quick start guide for connecting wallets (beginner)
702
+ // - multi-wallet: Full wallet provider system reference (advanced)
636
703
  // - transfers: Send GALA and tokens to other addresses
637
704
  // ============================================================================
705
+ 'wallet-connect': `
706
+ ## How to Connect Your Wallet
707
+
708
+ The fastest way to add wallet connection to your dapp. Supports 13 browser wallets, React hooks, and Node.js.
709
+
710
+ ---
711
+
712
+ ### React (3 Steps)
713
+
714
+ **Step 1: Wrap your app**
715
+
716
+ \`\`\`tsx
717
+ import { WalletProvider } from '@gala-chain/launchpad-sdk/react';
718
+
719
+ function App() {
720
+ return (
721
+ <WalletProvider autoDetect>
722
+ <YourApp />
723
+ </WalletProvider>
724
+ );
725
+ }
726
+ \`\`\`
727
+
728
+ **Step 2: Detect and connect**
729
+
730
+ \`\`\`tsx
731
+ import { useWalletDetection, useWalletConnection } from '@gala-chain/launchpad-sdk/react';
732
+
733
+ function WalletPicker() {
734
+ const { wallets, isDetecting } = useWalletDetection();
735
+ const { connectDetected, isConnecting } = useWalletConnection();
736
+
737
+ if (isDetecting) return <p>Scanning for wallets...</p>;
738
+
739
+ return (
740
+ <div>
741
+ {wallets.map(wallet => (
742
+ <button key={wallet.id} onClick={() => connectDetected(wallet)} disabled={isConnecting}>
743
+ <img src={wallet.icon} alt="" width={24} /> {wallet.name}
744
+ </button>
745
+ ))}
746
+ </div>
747
+ );
748
+ }
749
+ \`\`\`
750
+
751
+ **Step 3: Use wallet state**
752
+
753
+ \`\`\`tsx
754
+ import { useWallet, useGalaAddress, useWalletProvider } from '@gala-chain/launchpad-sdk/react';
755
+
756
+ function Dashboard() {
757
+ const { isConnected, address } = useWallet();
758
+ const galaAddress = useGalaAddress(); // eth|0x... format
759
+ const provider = useWalletProvider();
760
+
761
+ if (!isConnected) return <WalletPicker />;
762
+
763
+ // Sign a message
764
+ const sig = await provider.signMessage('Hello from my dapp');
765
+
766
+ // Sign EIP-712 typed data (required for GalaChain transactions)
767
+ const typedSig = await provider.signTypedData(domain, types, value);
768
+ }
769
+ \`\`\`
770
+
771
+ ---
772
+
773
+ ### Node.js / CLI
774
+
775
+ \`\`\`typescript
776
+ import { PrivateKeyProvider } from '@gala-chain/launchpad-sdk/wallet';
777
+ import { createLaunchpadSDK } from '@gala-chain/launchpad-sdk';
778
+
779
+ const provider = new PrivateKeyProvider('0xYOUR_PRIVATE_KEY');
780
+ const sdk = createLaunchpadSDK({ walletProvider: provider, environment: 'production' });
781
+
782
+ const address = await provider.getAddress(); // 0x checksummed
783
+ const galaAddr = await provider.getGalaAddress(); // eth|{40-hex}
784
+ \`\`\`
785
+
786
+ ---
787
+
788
+ ### Vanilla Browser (no React)
789
+
790
+ \`\`\`typescript
791
+ import { detectWallets, ExternalWalletProvider } from '@gala-chain/launchpad-sdk/wallet';
792
+
793
+ const { wallets, primary, hasWallets } = await detectWallets();
794
+ if (hasWallets) {
795
+ const provider = new ExternalWalletProvider(primary.provider);
796
+ const address = await provider.connect(); // triggers wallet popup
797
+ const sig = await provider.signMessage('Hello');
798
+ await provider.disconnect();
799
+ }
800
+ \`\`\`
801
+
802
+ ---
803
+
804
+ ### Supported Wallets (EIP-6963)
805
+
806
+ MetaMask, Coinbase Wallet, Trust Wallet, Phantom, Rainbow, OKX, Rabby, Brave, Frame, Ledger, Zerion, Gala Wallet, MetaMask Flask.
807
+
808
+ Falls back to \`window.ethereum\` if no EIP-6963 announcements received.
809
+
810
+ ### React Hooks
811
+
812
+ | Hook | Returns |
813
+ |------|---------|
814
+ | \`useWallet()\` | isConnected, address, galaAddress, provider, error |
815
+ | \`useWalletAddress()\` | string (0x...) or null |
816
+ | \`useGalaAddress()\` | string (eth|...) or null |
817
+ | \`useWalletProvider()\` | WalletProvider instance or null |
818
+ | \`useWalletConnection()\` | connectDetected(), disconnect(), isConnecting |
819
+ | \`useWalletDetection()\` | wallets[], isDetecting, refreshWallets() |
820
+
821
+ ### Import Paths
822
+
823
+ \`\`\`typescript
824
+ // React hooks
825
+ import { WalletProvider, useWallet, useWalletDetection } from '@gala-chain/launchpad-sdk/react';
826
+
827
+ // Low-level providers (non-React)
828
+ import { PrivateKeyProvider, ExternalWalletProvider, detectWallets } from '@gala-chain/launchpad-sdk/wallet';
829
+ \`\`\`
830
+
831
+ ### Next Steps
832
+
833
+ - **Advanced wallet management**: See the \`multi-wallet\` topic for provider types, EIP-712 signing, error handling, and multi-wallet patterns
834
+ - **Authentication**: See the \`session-auth\` topic for JWT login flows after wallet connection
835
+ - **Trading**: See \`buy-tokens\` to make your first trade after connecting
836
+ `,
638
837
  'multi-wallet': `
639
- ## Multi-Wallet Support with SDK
838
+ ## Wallet Provider System (v9.0.0+)
640
839
 
641
- **Covers Methods:**
642
- - \`createWallet()\` (utility function)
643
- - \`buy()\`, \`sell()\`, \`launchToken()\` with privateKey override
840
+ The SDK provides a unified \`WalletProvider\` interface that abstracts wallet operations across 4 provider types, with EIP-6963 browser wallet detection and full signing support.
841
+
842
+ **Covers:**
843
+ - 4 wallet provider types (PrivateKey, External, Gala, GalaChainConnect)
844
+ - EIP-6963 wallet detection (13 known wallets)
845
+ - Connection lifecycle (connect, sign, disconnect)
846
+ - Multi-wallet patterns and per-operation overrides
847
+ - MCP wallet tools: \`createWallet\`, \`createSolanaWallet\`, \`getAddress\`, \`getEthereumAddress\`, \`getPublicKeyFromPrivateKey\`, \`getEthereumAddressFromPrivateKey\`
848
+
849
+ ---
850
+
851
+ ### Wallet Provider Types
852
+
853
+ | Provider | Use Case | Key Access | Browser Required |
854
+ |----------|----------|------------|-----------------|
855
+ | \`PrivateKeyProvider\` | CLI, Node.js, scripts | Yes (full) | No |
856
+ | \`ExternalWalletProvider\` | MetaMask, Coinbase, etc. | No | Yes |
857
+ | \`GalaWalletProvider\` | Gala Wallet extension | No | Yes |
858
+ | \`GalaChainConnectProvider\` | @gala-chain/connect clients | No | Yes |
859
+
860
+ ---
861
+
862
+ ### 1. PrivateKeyProvider (CLI / Node.js)
863
+
864
+ Best for scripts, bots, and server-side code where you have the private key.
865
+
866
+ \`\`\`typescript
867
+ import { PrivateKeyProvider, createLaunchpadSDK } from '@gala-chain/launchpad-sdk';
868
+
869
+ // Create provider from private key
870
+ const provider = new PrivateKeyProvider('0xYOUR_PRIVATE_KEY');
871
+
872
+ // Use with SDK
873
+ const sdk = createLaunchpadSDK({
874
+ walletProvider: provider,
875
+ environment: 'production',
876
+ });
877
+
878
+ // Provider is always "connected" - no user interaction needed
879
+ const address = await provider.getAddress(); // 0x checksummed
880
+ const galaAddr = await provider.getGalaAddress(); // eth|{40-hex}
881
+ const key = await provider.getPrivateKey(); // 0x prefixed
882
+ const signature = await provider.signMessage('Hello');
883
+ \`\`\`
884
+
885
+ ---
886
+
887
+ ### 2. ExternalWalletProvider (Browser Extensions)
888
+
889
+ Wraps any EIP-1193 compatible browser wallet (MetaMask, Coinbase, Phantom, etc.).
890
+
891
+ \`\`\`typescript
892
+ import { ExternalWalletProvider } from '@gala-chain/launchpad-sdk/wallet';
893
+
894
+ // Wrap browser extension provider
895
+ const provider = new ExternalWalletProvider(window.ethereum);
896
+
897
+ // Connect (triggers wallet popup for user approval)
898
+ const address = await provider.connect();
899
+ console.log('Connected:', address);
900
+
901
+ // Sign messages
902
+ const sig = await provider.signMessage('Sign in to Launchpad');
903
+
904
+ // Sign EIP-712 typed data (required for GalaChain transfers)
905
+ const typedSig = await provider.signTypedData(
906
+ { name: 'GalaChain', version: '1' },
907
+ { Transfer: [{ name: 'to', type: 'address' }, { name: 'amount', type: 'uint256' }] },
908
+ { to: '0x...', amount: '1000' }
909
+ );
910
+
911
+ // Disconnect when done
912
+ await provider.disconnect();
913
+ \`\`\`
914
+
915
+ ---
916
+
917
+ ### 3. Browser Wallet Detection (EIP-6963)
918
+
919
+ The SDK uses the modern EIP-6963 standard to detect installed wallets without conflicts.
920
+
921
+ \`\`\`typescript
922
+ import {
923
+ detectWallets,
924
+ getWalletByRdns,
925
+ isWalletAvailable,
926
+ hasAnyWallet,
927
+ subscribeToWalletChanges,
928
+ KNOWN_WALLET_RDNS,
929
+ ExternalWalletProvider,
930
+ } from '@gala-chain/launchpad-sdk/wallet';
931
+
932
+ // Quick synchronous check (no waiting)
933
+ if (hasAnyWallet()) {
934
+ console.log('At least one wallet detected');
935
+ }
936
+
937
+ // Full async detection (waits for EIP-6963 announcements, 500ms default)
938
+ const { wallets, primary, hasWallets, byId } = await detectWallets();
939
+
940
+ if (hasWallets) {
941
+ console.log('Available wallets:', wallets.map(w => \`\${w.name} (\${w.rdns})\`));
942
+
943
+ // Connect to the primary wallet
944
+ const provider = new ExternalWalletProvider(primary.provider);
945
+ await provider.connect();
946
+ }
947
+
948
+ // Check for a specific wallet
949
+ if (await isWalletAvailable(KNOWN_WALLET_RDNS.METAMASK)) {
950
+ const metamask = await getWalletByRdns(KNOWN_WALLET_RDNS.METAMASK);
951
+ const provider = new ExternalWalletProvider(metamask.provider);
952
+ await provider.connect();
953
+ }
954
+
955
+ // Subscribe to wallet changes (reactive)
956
+ const unsubscribe = subscribeToWalletChanges((result) => {
957
+ console.log('Wallets changed:', result.wallets.length);
958
+ });
959
+ // Later: unsubscribe();
960
+ \`\`\`
961
+
962
+ **13 Known Wallet RDNS Identifiers:**
963
+ \`\`\`typescript
964
+ KNOWN_WALLET_RDNS = {
965
+ METAMASK: 'io.metamask',
966
+ METAMASK_FLASK: 'io.metamask.flask',
967
+ COINBASE: 'com.coinbase.wallet',
968
+ TRUST_WALLET: 'com.trustwallet.app',
969
+ PHANTOM: 'app.phantom',
970
+ RAINBOW: 'me.rainbow',
971
+ OKX: 'com.okex.wallet',
972
+ RABBY: 'io.rabby',
973
+ BRAVE: 'com.brave.wallet',
974
+ FRAME: 'sh.frame',
975
+ LEDGER: 'com.ledger',
976
+ ZERION: 'io.zerion.wallet',
977
+ GALA: 'com.gala.wallet',
978
+ };
979
+ \`\`\`
980
+
981
+ ---
982
+
983
+ ### 4. GalaWalletProvider
984
+
985
+ Specialized provider for the Gala Wallet browser extension.
986
+
987
+ \`\`\`typescript
988
+ import { GalaWalletProvider } from '@gala-chain/launchpad-sdk/wallet';
989
+
990
+ // window.gala is the Gala Wallet provider
991
+ const provider = new GalaWalletProvider(window.gala);
992
+ const address = await provider.connect();
993
+ \`\`\`
994
+
995
+ ---
996
+
997
+ ### 5. Factory Function
998
+
999
+ Use \`createWalletProvider()\` when the wallet source is determined at runtime.
1000
+
1001
+ \`\`\`typescript
1002
+ import { createWalletProvider } from '@gala-chain/launchpad-sdk/wallet';
1003
+
1004
+ // From private key
1005
+ const cliProvider = createWalletProvider({ privateKey: '0x...' });
1006
+
1007
+ // From browser extension
1008
+ const browserProvider = createWalletProvider({
1009
+ eip1193Provider: window.ethereum,
1010
+ autoConnect: true,
1011
+ });
1012
+ \`\`\`
1013
+
1014
+ ---
1015
+
1016
+ ### 6. Provider Utilities
1017
+
1018
+ \`\`\`typescript
1019
+ import {
1020
+ isPrivateKeyProvider,
1021
+ isExternalProvider,
1022
+ getPrivateKeyIfAvailable,
1023
+ ensureConnected,
1024
+ walletToProvider,
1025
+ providerToWallet,
1026
+ } from '@gala-chain/launchpad-sdk/wallet';
1027
+
1028
+ // Type guards
1029
+ if (isPrivateKeyProvider(provider)) {
1030
+ const key = await provider.getPrivateKey();
1031
+ }
1032
+
1033
+ if (isExternalProvider(provider)) {
1034
+ // Cannot access private key - signing goes through browser wallet
1035
+ }
1036
+
1037
+ // Safe private key access (returns null for external providers)
1038
+ const key = await getPrivateKeyIfAvailable(provider);
1039
+
1040
+ // Ensure connected before operations
1041
+ await ensureConnected(provider);
1042
+
1043
+ // Convert between ethers Wallet and WalletProvider
1044
+ import { Wallet } from 'ethers';
1045
+ const ethersWallet = new Wallet('0x...');
1046
+ const provider = walletToProvider(ethersWallet);
1047
+ const wallet = await providerToWallet(provider); // only works for PrivateKeyProvider
1048
+ \`\`\`
1049
+
1050
+ ---
1051
+
1052
+ ### 7. Multi-Wallet Patterns
1053
+
1054
+ **Per-operation privateKey override** (use a different wallet for one operation):
644
1055
 
645
1056
  \`\`\`typescript
646
1057
  import { createLaunchpadSDK, createWallet } from '@gala-chain/launchpad-sdk';
647
1058
 
648
- async function multiWalletExample() {
649
- // Main SDK with your wallet
650
- const sdk = createLaunchpadSDK({
651
- wallet: 'your-main-private-key'
652
- });
1059
+ const sdk = createLaunchpadSDK({ wallet: 'main-private-key' });
1060
+ const testWallet = createWallet();
653
1061
 
654
- // Create a test wallet
655
- const testWallet = createWallet();
1062
+ // Fund test wallet from main
1063
+ await sdk.transferGala({
1064
+ recipientAddress: testWallet.address,
1065
+ amount: '1000',
1066
+ });
656
1067
 
657
- // 1. Fund test wallet from main wallet
658
- await sdk.transferGala({
659
- recipientAddress: testWallet.address,
660
- amount: '1000'
661
- });
1068
+ // Buy with test wallet (privateKey override)
1069
+ await sdk.buy({
1070
+ tokenName: 'anime',
1071
+ amount: '100',
1072
+ type: 'native',
1073
+ expectedAmount: '500',
1074
+ slippageToleranceFactor: 0.01,
1075
+ privateKey: testWallet.privateKey, // Uses test wallet for this operation only
1076
+ });
662
1077
 
663
- // 2. Have test wallet buy tokens (using privateKey override)
664
- const buyCalc = await sdk.calculateBuyAmount({
665
- tokenName: 'dragnrkti',
666
- amount: '100',
667
- type: 'native'
668
- });
1078
+ // Main wallet is still the default for other operations
1079
+ const mainBalance = await sdk.fetchGalaBalance();
1080
+ \`\`\`
669
1081
 
670
- const buyResult = await sdk.buy({
671
- tokenName: 'dragnrkti',
672
- amount: '100',
673
- type: 'native',
674
- expectedAmount: buyCalc.amount,
675
- slippageToleranceFactor: 0.01,
676
- privateKey: testWallet.privateKey // Override to use test wallet
677
- });
1082
+ **Switching wallets at runtime:**
1083
+
1084
+ \`\`\`typescript
1085
+ // Create SDK with WalletProvider (can be swapped)
1086
+ let provider = new PrivateKeyProvider('0xKEY_A');
1087
+ const sdk = createLaunchpadSDK({ walletProvider: provider });
1088
+
1089
+ // Later: switch to a different wallet
1090
+ provider = new PrivateKeyProvider('0xKEY_B');
1091
+ const sdk2 = createLaunchpadSDK({ walletProvider: provider });
1092
+ \`\`\`
1093
+
1094
+ ---
1095
+
1096
+ ### 8. Wallet Creation Utilities
1097
+
1098
+ \`\`\`typescript
1099
+ import { createWallet, WalletUtils } from '@gala-chain/launchpad-sdk';
1100
+
1101
+ // Quick wallet creation (auto-detects input)
1102
+ const random = createWallet(); // Random wallet
1103
+ const fromKey = createWallet('0x...'); // From private key
1104
+ const fromMnemonic = createWallet('word1 word2...'); // From mnemonic
1105
+
1106
+ // WalletUtils class methods
1107
+ const wallet = WalletUtils.generateWallet();
1108
+ const fromPK = WalletUtils.fromPrivateKey('0x...');
1109
+ const fromMN = WalletUtils.fromMnemonic('word1 word2...', 0); // BIP44 index
1110
+
1111
+ // Address conversion
1112
+ const galaAddr = WalletUtils.toGalaAddress('0x1234...'); // eth|1234...
1113
+ const ethAddr = WalletUtils.toEthereumAddress('eth|1234'); // 0x1234...
1114
+
1115
+ // Validation
1116
+ WalletUtils.isValidEthereumAddress('0x...'); // true/false
1117
+ WalletUtils.isValidGalaAddress('eth|...'); // true/false
1118
+ \`\`\`
1119
+
1120
+ ---
1121
+
1122
+ ### 9. Error Handling
678
1123
 
679
- // 3. Check balances for both wallets
680
- const mainBalance = await sdk.fetchGalaBalance(); // Main wallet
681
- const testBalance = await sdk.fetchGalaBalance(testWallet.address); // Test wallet
1124
+ \`\`\`typescript
1125
+ import { WalletProviderError, WalletProviderErrorCode } from '@gala-chain/launchpad-sdk/wallet';
682
1126
 
1127
+ try {
1128
+ await provider.connect();
1129
+ } catch (error) {
1130
+ if (error instanceof WalletProviderError) {
1131
+ switch (error.code) {
1132
+ case WalletProviderErrorCode.USER_REJECTED:
1133
+ console.log('User rejected the connection');
1134
+ break;
1135
+ case WalletProviderErrorCode.PROVIDER_NOT_AVAILABLE:
1136
+ console.log('Wallet not installed');
1137
+ break;
1138
+ case WalletProviderErrorCode.CONNECTION_FAILED:
1139
+ console.log('Connection failed:', error.message);
1140
+ break;
1141
+ }
1142
+ }
683
1143
  }
684
1144
  \`\`\`
685
1145
 
686
- **Key Points:**
687
- - All signing operations support \`privateKey\` parameter
688
- - Creates temporary SDK instance internally
689
- - Supports: buy, sell, launchToken, transfers, profile updates
1146
+ **Error codes:** USER_REJECTED, NOT_CONNECTED, CONNECTION_FAILED, SIGNING_FAILED, PROVIDER_NOT_AVAILABLE, PRIVATE_KEY_NOT_ACCESSIBLE, INVALID_CONFIG, CHAIN_MISMATCH, UNKNOWN.
1147
+
1148
+ ---
1149
+
1150
+ ### MCP Tool Equivalents
1151
+
1152
+ | Operation | MCP Tool |
1153
+ |-----------|----------|
1154
+ | Create wallet | \`gala_launchpad_create_wallet\` |
1155
+ | Create Solana wallet | \`gala_launchpad_create_solana_wallet\` |
1156
+ | Get address | \`gala_launchpad_get_address\` |
1157
+ | Get Ethereum address | \`gala_launchpad_get_ethereum_address\` |
1158
+ | Derive public key | \`gala_launchpad_get_public_key_from_private_key\` |
1159
+ | Derive ETH address from key | \`gala_launchpad_get_ethereum_address_from_private_key\` |
1160
+
1161
+ Note: Browser wallet detection and connection are SDK-side operations and don't have MCP tool equivalents (they require a browser environment).
1162
+
1163
+ ---
1164
+
1165
+ ### Import Paths
1166
+
1167
+ \`\`\`typescript
1168
+ // Main SDK entry (includes wallet creation utilities)
1169
+ import { createWallet, WalletUtils, createLaunchpadSDK } from '@gala-chain/launchpad-sdk';
1170
+
1171
+ // Wallet submodule (providers, detection, types)
1172
+ import {
1173
+ PrivateKeyProvider,
1174
+ ExternalWalletProvider,
1175
+ GalaWalletProvider,
1176
+ GalaChainConnectProvider,
1177
+ detectWallets,
1178
+ KNOWN_WALLET_RDNS,
1179
+ createWalletProvider,
1180
+ WalletProviderError,
1181
+ WalletProviderErrorCode,
1182
+ } from '@gala-chain/launchpad-sdk/wallet';
1183
+ \`\`\`
690
1184
  `,
691
1185
  'transfers': `
692
1186
  ## Token Transfers with SDK
@@ -974,7 +1468,7 @@ async function tokenLockingAndBurning() {
974
1468
  - \`getAllSwapUserAssets()\`
975
1469
  - \`getSwapPoolInfo()\`
976
1470
 
977
- Trade graduated tokens on the GalaSwap DEX with real-time WebSocket monitoring:
1471
+ Use REST-backed DEX reads for quotes and pool information, then execute signed swaps with real-time WebSocket transaction monitoring:
978
1472
 
979
1473
  \`\`\`typescript
980
1474
  import { createLaunchpadSDK } from '@gala-chain/launchpad-sdk';
@@ -990,6 +1484,10 @@ async function dexTradingExample() {
990
1484
  // QUOTES: Get pricing information (read-only operations)
991
1485
  // ============================================================================
992
1486
 
1487
+ // Quotes come from the DEX backend (~1s freshness) and need no signer.
1488
+ // Restricted tokens: TokenRestrictedError (403); missing pool: not-found;
1489
+ // heavy usage: 429 rate limit.
1490
+
993
1491
  // Quote 1: Exact input (spend known GALA amount)
994
1492
  const quoteIn = await sdk.getSwapQuoteExactInput('GALA', 'GUSDC', '100');
995
1493
 
@@ -1039,6 +1537,7 @@ async function dexTradingExample() {
1039
1537
  \`\`\`
1040
1538
 
1041
1539
  **Key Architecture:**
1540
+ - **Public REST Reads**: Quotes and pool information use the DEX backend (~1s freshness) without a signer
1042
1541
  - **Unified WebSocket**: Uses LaunchpadSDK's unified WebSocket for transaction monitoring
1043
1542
  - **Environment Alignment**: STAGE/PROD URLs must match between LaunchpadSDK and GSwapService
1044
1543
  - **Token Formats**:
@@ -1055,6 +1554,117 @@ async function dexTradingExample() {
1055
1554
  - \`gala_launchpad_get_swap_user_assets\`
1056
1555
  - \`gala_launchpad_get_all_swap_user_assets\`
1057
1556
  - \`gala_launchpad_get_swap_pool_info\`
1557
+ `,
1558
+ 'gdex-stream': `
1559
+ ## Real-Time gSwap Market Data with GDEX Stream
1560
+
1561
+ \`GdexStreamService\` is a public, read-only JSON-RPC 2.0 client for gSwap queries and real-time
1562
+ events over one raw WebSocket connection. It does not use Socket.IO and needs no wallet or signer.
1563
+
1564
+ **Covers Methods:**
1565
+ - \`connect()\`, \`disconnect()\`, \`isConnected()\`, \`request()\`
1566
+ - \`serverInfo()\`, \`ping()\`, \`getPool()\`, \`getBalance()\`, \`getPositions()\`
1567
+ - \`getBlockHeight()\`, \`quote()\`, \`getToken()\`
1568
+ - \`subscribeSwaps()\`, \`subscribePool()\`, \`subscribeBalances()\`
1569
+ - \`subscribePoolCreated()\`, \`subscribeBlocks()\`
1570
+
1571
+ ## Get the Service
1572
+
1573
+ Use the SDK facade when the stream should follow the SDK environment, or construct the service
1574
+ directly for a standalone market-data client:
1575
+
1576
+ \`\`\`typescript
1577
+ import { GdexStreamService, LaunchpadSDK } from '@gala-chain/launchpad-sdk';
1578
+
1579
+ // Lazily created by the SDK; no wallet is required.
1580
+ const sdk = new LaunchpadSDK({ env: 'STAGE' });
1581
+ const gdex = sdk.getGdexStreamService();
1582
+
1583
+ // Or use the service without a LaunchpadSDK instance.
1584
+ const standalone = new GdexStreamService({
1585
+ url: 'wss://swap-backend.stage.defi.ovh.gala.com/ws',
1586
+ });
1587
+
1588
+ await gdex.connect();
1589
+ console.log(await gdex.serverInfo());
1590
+ \`\`\`
1591
+
1592
+ ## Stream Swaps and Dedupe Replays
1593
+
1594
+ Delivery is effectively at least once after a reconnect or server restart, so dedupe swap events by
1595
+ \`transactionId\` before updating application state:
1596
+
1597
+ \`\`\`typescript
1598
+ const seenTransactions = new Set<string>();
1599
+
1600
+ const swaps = await gdex.subscribeSwaps(swap => {
1601
+ const transactionId = swap.transactionId as string;
1602
+ if (seenTransactions.has(transactionId)) return;
1603
+ seenTransactions.add(transactionId);
1604
+
1605
+ console.log(transactionId, swap.amount0, swap.amount1, swap.timestamp);
1606
+ }, {
1607
+ poolHash: '760ae55afa52316deb0eeb5d38178d80d90f3a85fcfb93b1c18e2c86c28e886c',
1608
+ });
1609
+
1610
+ // Later: await swaps.unsubscribe();
1611
+ \`\`\`
1612
+
1613
+ ## Watch a Pool from Snapshot to Live Updates
1614
+
1615
+ Set \`snapshot: true\` to receive current pool state followed by live deltas on the same callback:
1616
+
1617
+ \`\`\`typescript
1618
+ const pool = await gdex.subscribePool(
1619
+ { poolHash: '760ae55afa52316deb0eeb5d38178d80d90f3a85fcfb93b1c18e2c86c28e886c' },
1620
+ update => {
1621
+ if (update.snapshot === true) console.log('Current pool state:', update);
1622
+ else console.log('Pool update:', update);
1623
+ },
1624
+ { snapshot: true }
1625
+ );
1626
+
1627
+ // The same handle remains valid after automatic reconnect.
1628
+ // Later: await pool.unsubscribe();
1629
+ \`\`\`
1630
+
1631
+ ## Get a Quote over the WebSocket
1632
+
1633
+ \`quote()\` accepts exactly one of \`amountIn\` or \`amountOut\`. Omit \`fee\` to compare all
1634
+ existing fee tiers.
1635
+
1636
+ \`\`\`typescript
1637
+ const quote = await gdex.quote({
1638
+ tokenIn: 'GALA|Unit|none|none',
1639
+ tokenOut: 'GUSDC|Unit|none|none',
1640
+ fee: 10000,
1641
+ amountIn: '100',
1642
+ });
1643
+
1644
+ console.log(quote);
1645
+ \`\`\`
1646
+
1647
+ ## Key Facts
1648
+
1649
+ - **Exact values:** On-chain numerics and epoch-millisecond timestamps are decimal strings. Do not
1650
+ round-trip them through JavaScript floating-point numbers.
1651
+ - **Reconnect behavior:** Unexpected closes use automatic exponential-backoff reconnect. Every
1652
+ active subscription is resubscribed sequentially with forced \`snapshot: true\`; treat that
1653
+ snapshot as truth and compare \`blockNumber\` for state channels.
1654
+ - **Errors:** REST DEX reads may use \`TokenRestrictedError\`-family exceptions. GDEX JSON-RPC
1655
+ protocol and application errors, including \`-32xxx\` codes, reject as \`GdexStreamError\` with
1656
+ \`code\` and optional \`data\`.
1657
+ - **Endpoint availability:** STAGE is live. PROD may reject connections until its server feature flag
1658
+ is enabled; QA1 currently uses STAGE.
1659
+ - **Node.js compatibility:** Browsers and Node.js 22+ use \`globalThis.WebSocket\`. Node.js versions
1660
+ before 22 must pass a standards-compatible constructor through \`webSocketImpl\` (for example,
1661
+ from the \`ws\` package).
1662
+ - **Shutdown:** Call \`disconnect()\` when the application exits; intentional disconnect disables
1663
+ automatic reconnect.
1664
+
1665
+ There is no MCP tool equivalent. See the WebSocket documentation page at
1666
+ \`packages/sdk/docs/websocket/README.md\` and the complete
1667
+ \`packages/sdk/docs/websocket/GDEX-STREAM.md\` guide.
1058
1668
  `,
1059
1669
  'error-handling': `
1060
1670
  ## Error Handling with SDK
@@ -1452,13 +2062,13 @@ async function analyzeTokenDetails() {
1452
2062
 
1453
2063
  The SDK intelligently routes pricing requests between DEX and Launchpad backends based on token graduation status - no need to know which backend a token uses!
1454
2064
 
2065
+ DEX \`tokenId\` price reads use the public \`/v1/trade/price\` REST endpoint (~1s freshness) without a signer. Restricted or ungraduated tokens can return \`TokenRestrictedError\` (403), a missing pool returns a not-found error, and heavy usage can return 429 rate limit.
2066
+
1455
2067
  \`\`\`typescript
1456
2068
  import { createLaunchpadSDK } from '@gala-chain/launchpad-sdk';
1457
2069
 
1458
2070
  async function tokenPricing() {
1459
- const sdk = createLaunchpadSDK({
1460
- wallet: 'your-private-key'
1461
- });
2071
+ const sdk = createLaunchpadSDK({ environment: 'production' });
1462
2072
 
1463
2073
  // OPTION 1: SMART ROUTING (Recommended) - Automatic backend selection
1464
2074
  // Use tokenId for ANY token (graduated or ungraduated)
@@ -1833,6 +2443,8 @@ async function getUserCard() {
1833
2443
 
1834
2444
  Provide liquidity on GalaSwap DEX and earn passive trading fees from swaps.
1835
2445
 
2446
+ Position reads and removal estimates use the DEX backend's public REST endpoints (~1s freshness) and do not require a signer. Restricted tokens can return \`TokenRestrictedError\` (403), missing pools or positions return a not-found error, and heavy usage can return 429 rate limit.
2447
+
1836
2448
  **Overview:** Concentrated liquidity allows capital deployment within specific price ranges. Liquidity providers earn fees when trades occur within their price range, making it an attractive passive income strategy.
1837
2449
 
1838
2450
  **9 Core SDK Methods:**
@@ -1909,6 +2521,8 @@ allPositions.forEach(position => {
1909
2521
 
1910
2522
  This workflow demonstrates analyzing graduated tokens using composite data and price calculations.
1911
2523
 
2524
+ \`fetchCompositePoolData()\` and external quotes are REST-backed DEX reads with ~1s freshness and require no signer. Local quote math performs no network request once composite pool data is supplied. REST reads can return \`TokenRestrictedError\` (403) for restricted tokens, a not-found error for missing pools, or 429 under heavy usage.
2525
+
1912
2526
  **Use Cases:**
1913
2527
  - Arbitrage opportunity detection
1914
2528
  - Price impact analysis before large trades
@@ -2273,11 +2887,13 @@ async function analyzeVolumeTrends() {
2273
2887
 
2274
2888
  Discover and query liquidity pools on GalaSwap with advanced filtering and pagination.
2275
2889
 
2890
+ These public reads use the DEX backend's REST API (~1s freshness), require no signer, and may return 429 under heavy usage.
2891
+
2276
2892
  \`\`\`typescript
2277
2893
  import { createLaunchpadSDK } from '@gala-chain/launchpad-sdk';
2278
2894
 
2279
2895
  async function queryDexPools() {
2280
- const sdk = createLaunchpadSDK({ wallet: 'your-private-key' });
2896
+ const sdk = createLaunchpadSDK({ environment: 'production' });
2281
2897
 
2282
2898
  // Option 1: Fetch pools with pagination
2283
2899
  const pools = await sdk.fetchDexPools({
@@ -2862,6 +3478,26 @@ await sdk.sendTypingStop({
2862
3478
  });
2863
3479
  \`\`\`
2864
3480
 
3481
+ ### Engagement Stats Updates (v8.5.0+)
3482
+
3483
+ \`\`\`typescript
3484
+ // Subscribe to engagement stats updates for a token stream
3485
+ // Fires every ~15 seconds when chat activity occurs
3486
+ await sdk.connectStreamWebSocket();
3487
+ await sdk.authenticateStreamWebSocket('jwt-token');
3488
+ await sdk.subscribeToStream('anime');
3489
+
3490
+ // Register global engagement stats callback
3491
+ const unsubscribe = sdk.onEngagementStatsUpdated((event) => {
3492
+ console.log(\`\${event.tokenName}: \${event.chat.messageCount} chat messages\`);
3493
+ console.log(\`Unique chatters: \${event.chat.uniqueChatters}\`);
3494
+ console.log(\`Comments: \${event.comments.count} from \${event.comments.uniqueCommenters} users\`);
3495
+ });
3496
+
3497
+ // Clean up when done
3498
+ unsubscribe();
3499
+ \`\`\`
3500
+
2865
3501
  **MCP Tool Equivalents:**
2866
3502
  - \`gala_launchpad_subscribe_to_dex_liquidity_added\`
2867
3503
  - \`gala_launchpad_subscribe_to_dex_liquidity_changed\`
@@ -2869,6 +3505,7 @@ await sdk.sendTypingStop({
2869
3505
  - \`gala_launchpad_subscribe_to_dex_pool_added\`
2870
3506
  - \`gala_launchpad_subscribe_to_dex_swap_executed\`
2871
3507
  - \`gala_launchpad_subscribe_to_token_creations\`
3508
+ - \`gala_launchpad_on_engagement_stats_updated\`
2872
3509
  `,
2873
3510
  // ============================================================================
2874
3511
  // MCP TO SDK MAPPING: Cross-Reference Guide
@@ -3187,6 +3824,69 @@ async function participateInSeason() {
3187
3824
  - \`fetchCurrentDexLeaderboard()\` - Get current season leaderboard (convenience)
3188
3825
 
3189
3826
  **MCP Tool Equivalent:** \`gala_launchpad_fetch_current_dex_season\`
3827
+ `,
3828
+ 'fetch-current-dex-leaderboard': `
3829
+ ## Fetch Current DEX Leaderboard
3830
+
3831
+ **Covers Methods:**
3832
+ - \`fetchCurrentDexLeaderboard()\`
3833
+
3834
+ Convenience method to fetch the leaderboard for the current active DEX season.
3835
+ This is a shortcut that combines \`fetchCurrentDexSeason()\` and \`fetchDexLeaderboardBySeasonId()\`.
3836
+
3837
+ \`\`\`typescript
3838
+ import { createLaunchpadSDK } from '@gala-chain/launchpad-sdk';
3839
+
3840
+ async function viewCurrentLeaderboard() {
3841
+ const sdk = createLaunchpadSDK({ wallet: 'your-private-key' });
3842
+
3843
+ // Fetch current season leaderboard directly
3844
+ const leaderboard = await sdk.fetchCurrentDexLeaderboard();
3845
+
3846
+ if (leaderboard) {
3847
+ console.log('Current Season:', leaderboard.season.name);
3848
+ console.log('Total Participants:', leaderboard.entries.length);
3849
+
3850
+ // Display top 10 traders
3851
+ console.log('\\nTop 10 Traders:');
3852
+ leaderboard.entries.slice(0, 10).forEach((entry, rank) => {
3853
+ console.log(\`#\${rank + 1}: \${entry.wallet}\`);
3854
+ console.log(\` XP: \${entry.xp}, Volume: $\${entry.totalVolume}\`);
3855
+
3856
+ // Display mastery titles
3857
+ if (entry.masteryTitles.length > 0) {
3858
+ console.log(\` Titles: \${entry.masteryTitles.join(', ')}\`);
3859
+ }
3860
+ });
3861
+
3862
+ // Find your own position
3863
+ const myAddress = sdk.getAddress();
3864
+ const myPosition = leaderboard.entries.findIndex(e => e.wallet === myAddress);
3865
+
3866
+ if (myPosition !== -1) {
3867
+ const myEntry = leaderboard.entries[myPosition];
3868
+ console.log(\`\\nYour position: #\${myPosition + 1}\`);
3869
+ console.log(\`XP: \${myEntry.xp}, Volume: $\${myEntry.totalVolume}\`);
3870
+ } else {
3871
+ console.log('\\nYou have not participated in this season yet.');
3872
+ }
3873
+ } else {
3874
+ console.log('No active season currently running.');
3875
+ }
3876
+ }
3877
+ \`\`\`
3878
+
3879
+ **Use Cases:**
3880
+ - Quick access to current season standings
3881
+ - Display leaderboard in UI without multiple API calls
3882
+ - Check your competitive position
3883
+ - Show top traders on dashboard
3884
+
3885
+ **Related Methods:**
3886
+ - \`fetchCurrentDexSeason()\` - Get season metadata only
3887
+ - \`fetchDexLeaderboardBySeasonId()\` - Get leaderboard for any season
3888
+
3889
+ **MCP Tool Equivalent:** \`gala_launchpad_fetch_current_dex_leaderboard\`
3190
3890
  `,
3191
3891
  // ============================================================================
3192
3892
  // BRIDGE OPERATIONS: Cross-Chain Token Bridging
@@ -3503,44 +4203,6 @@ async function getReferralSummary() {
3503
4203
  - \`gala_launchpad_fetch_referrals\`
3504
4204
  - \`gala_launchpad_fetch_all_referrals\`
3505
4205
  - \`gala_launchpad_fetch_referrals_summary\`
3506
- `,
3507
- 'account-management': `
3508
- # Account Management
3509
-
3510
- The SDK provides methods for account registration and management.
3511
-
3512
- ## Register Account
3513
-
3514
- Register an account for trading on Gala. This should be called before the first purchase
3515
- to ensure the wallet is ready for trading operations.
3516
-
3517
- \`\`\`typescript
3518
- import { createLaunchpadSDK } from '@gala-chain/launchpad-sdk';
3519
-
3520
- async function registerAccount() {
3521
- const sdk = createLaunchpadSDK({ wallet: 'your-private-key' });
3522
-
3523
- // Register the SDK wallet
3524
- const result = await sdk.registerAccount();
3525
-
3526
- // Register a specific address
3527
- const otherResult = await sdk.registerAccount({
3528
- address: '0x1234...' // Supports eth|, 0x, or client| formats
3529
- });
3530
-
3531
- }
3532
- \`\`\`
3533
-
3534
- **Response Structure:**
3535
- \`\`\`typescript
3536
- interface RegisterAccountResult {
3537
- exists: boolean; // Whether account is registered
3538
- walletAlias: string; // Normalized wallet alias (client|...)
3539
- }
3540
- \`\`\`
3541
-
3542
- **MCP Tool Equivalents:**
3543
- - \`gala_launchpad_register_account\`
3544
4206
  `,
3545
4207
  // ============================================================================
3546
4208
  // LIVE STREAMING: Stream Management & Recordings
@@ -3566,7 +4228,10 @@ async function manageStream() {
3566
4228
  // Start a stream for your token
3567
4229
  const stream = await sdk.startStream('mytoken');
3568
4230
 
3569
- // Use stream.streamKey in OBS or other RTMP software
4231
+ // stream.rtmpsUrl — full RTMPS ingest URL for OBS or compatible software
4232
+ // stream.srtUrl — full SRT ingest URL for low-latency encoders
4233
+ // stream.streamKey — raw key for manual RTMPS configuration
4234
+ // stream.srtPassphrase — raw passphrase for manual SRT configuration
3570
4235
 
3571
4236
  // Get stream info (public endpoint)
3572
4237
  const info = await sdk.getStreamInfo('mytoken');
@@ -3668,10 +4333,10 @@ async function adminOperations() {
3668
4333
  **Available SDK Methods:**
3669
4334
  | Method | Description | Auth |
3670
4335
  |--------|-------------|------|
3671
- | \`startStream(tokenName)\` | Start a stream | Wallet |
4336
+ | \`startStream(tokenName)\` | Start a stream (returns rtmpsUrl, srtUrl, streamKey, srtPassphrase) | Wallet |
3672
4337
  | \`stopStream(tokenName)\` | Stop a stream | Wallet |
3673
4338
  | \`getStreamInfo(tokenName)\` | Get stream status | Public |
3674
- | \`resetStreamKey(tokenName)\` | Generate new stream key | Wallet |
4339
+ | \`resetStreamKey(tokenName)\` | Generate new stream key (returns rtmpsUrl, srtUrl, streamKey, srtPassphrase) | Wallet |
3675
4340
  | \`disableStream(tokenName)\` | Disable token streaming | Admin |
3676
4341
  | \`enableStream(tokenName)\` | Enable token streaming | Admin |
3677
4342
  | \`getStreamRecordings(options)\` | List recordings | Public |
@@ -3933,7 +4598,7 @@ These operations require JWT authentication (call \\\`login()\\\` first):
3933
4598
 
3934
4599
  **Streaming:**
3935
4600
  - \\\`startStream()\\\` - Start live stream
3936
- - \\\`resetStreamKey()\\\` - Reset RTMP key
4601
+ - \\\`resetStreamKey()\\\` - Reset stream key
3937
4602
  - \\\`getRecordingDownload()\\\` - Download recordings
3938
4603
  - \\\`deleteRecording()\\\` - Delete recordings
3939
4604
  - \\\`addSimulcastTarget()\\\` - Add simulcast
@@ -4200,7 +4865,7 @@ sdk.connectStreamWebSocket({
4200
4865
  - \`gala_launchpad_get_active_users\`
4201
4866
  `,
4202
4867
  'api-key-management': `
4203
- # API Key Management - SDK v5.6.0+
4868
+ # API Key Management - SDK v5.0.4-beta.56+
4204
4869
 
4205
4870
  User-managed API keys with role-based permissions for delegating token management
4206
4871
  authority to third-party services or automated systems.
@@ -4799,6 +5464,106 @@ await sdk.deleteComment({ commentId: comment.id });
4799
5464
  - \`gala_launchpad_delete_comment\`
4800
5465
  - \`gala_launchpad_add_reaction\`
4801
5466
  - \`gala_launchpad_remove_reaction\`
5467
+ `,
5468
+ 'content-reactions': `
5469
+ ## Content Reactions - SDK v5.13.0+
5470
+
5471
+ Add and remove reactions on chat messages and pool comments. Reactions provide
5472
+ social engagement features for community interaction.
5473
+
5474
+ **Covers Methods:**
5475
+ - \`addContentReaction()\` - Add reaction to any content
5476
+ - \`removeContentReaction()\` - Remove reaction from any content
5477
+ - \`addReactionToChatMessage()\` - Add reaction specifically to chat message
5478
+ - \`removeReactionFromChatMessage()\` - Remove reaction from chat message
5479
+ - \`addReactionToComment()\` - Add reaction specifically to pool comment
5480
+ - \`removeReactionFromComment()\` - Remove reaction from pool comment
5481
+
5482
+ ## Adding Reactions
5483
+
5484
+ \`\`\`typescript
5485
+ import { createLaunchpadSDK } from '@gala-chain/launchpad-sdk';
5486
+
5487
+ const sdk = createLaunchpadSDK({
5488
+ privateKey: process.env.PRIVATE_KEY,
5489
+ });
5490
+
5491
+ await sdk.login();
5492
+
5493
+ // Generic method - works for any content type
5494
+ await sdk.addContentReaction({
5495
+ messageId: 'msg-123',
5496
+ reactionType: '👍',
5497
+ tokenName: 'mytoken', // optional - backend can resolve from messageId
5498
+ });
5499
+
5500
+ // Specific method for chat messages
5501
+ await sdk.addReactionToChatMessage({
5502
+ tokenName: 'mytoken',
5503
+ messageId: 'chat-msg-456',
5504
+ reactionType: '🔥',
5505
+ });
5506
+
5507
+ // Specific method for pool comments
5508
+ await sdk.addReactionToComment({
5509
+ tokenName: 'mytoken',
5510
+ messageId: 'comment-789',
5511
+ reactionType: '❤️',
5512
+ });
5513
+ \`\`\`
5514
+
5515
+ ## Removing Reactions
5516
+
5517
+ \`\`\`typescript
5518
+ // Generic method
5519
+ await sdk.removeContentReaction({
5520
+ messageId: 'msg-123',
5521
+ reactionType: '👍',
5522
+ });
5523
+
5524
+ // Specific method for chat messages
5525
+ await sdk.removeReactionFromChatMessage({
5526
+ tokenName: 'mytoken',
5527
+ messageId: 'chat-msg-456',
5528
+ reactionType: '🔥',
5529
+ });
5530
+
5531
+ // Specific method for pool comments
5532
+ await sdk.removeReactionFromComment({
5533
+ tokenName: 'mytoken',
5534
+ messageId: 'comment-789',
5535
+ reactionType: '❤️',
5536
+ });
5537
+ \`\`\`
5538
+
5539
+ ## Common Reaction Types
5540
+
5541
+ | Emoji | Meaning |
5542
+ |-------|---------|
5543
+ | 👍 | Thumbs up / Like |
5544
+ | ❤️ | Love |
5545
+ | 🔥 | Fire / Hot |
5546
+ | 🚀 | Rocket / Moon |
5547
+ | 😂 | Laughing |
5548
+
5549
+ ## SDK Methods Reference
5550
+
5551
+ | Method | Description | Auth |
5552
+ |--------|-------------|------|
5553
+ | \`addContentReaction(options)\` | Add reaction to any content | JWT |
5554
+ | \`removeContentReaction(options)\` | Remove reaction from content | JWT |
5555
+ | \`addReactionToChatMessage(options)\` | Add reaction to chat message | JWT |
5556
+ | \`removeReactionFromChatMessage(options)\` | Remove reaction from chat message | JWT |
5557
+ | \`addReactionToComment(options)\` | Add reaction to pool comment | JWT |
5558
+ | \`removeReactionFromComment(options)\` | Remove reaction from pool comment | JWT |
5559
+
5560
+ **MCP Tool Equivalents:**
5561
+ - \`gala_launchpad_add_content_reaction\`
5562
+ - \`gala_launchpad_remove_content_reaction\`
5563
+ - \`gala_launchpad_add_reaction_to_chat_message\`
5564
+ - \`gala_launchpad_remove_reaction_from_chat_message\`
5565
+ - \`gala_launchpad_add_reaction_to_comment\`
5566
+ - \`gala_launchpad_remove_reaction_from_comment\`
4802
5567
  `,
4803
5568
  'trade-history': `
4804
5569
  ## Trade History
@@ -4974,7 +5739,6 @@ for (const ban of page1.items) {
4974
5739
  // Search for specific tokens (partial match, case-insensitive)
4975
5740
  const searchResults = await sdk.listTokenBans({
4976
5741
  search: 'scam',
4977
- page: 1,
4978
5742
  limit: 10,
4979
5743
  });
4980
5744
 
@@ -5406,86 +6170,896 @@ sdk.onLaunchpadTokenCreation((event) => {
5406
6170
  - **User experience**: Show appropriate UI based on trading venue
5407
6171
 
5408
6172
  **Related Topics:** \`token-identification\`, \`dex-trading\`, \`buy-tokens\`, \`pool-graduation\`
6173
+ `,
6174
+ // ============================================================================
6175
+ // AI MODERATION: AI-Powered Content Moderation
6176
+ // ============================================================================
6177
+ 'ai-moderation': `
6178
+ ## AI Moderation with SDK
6179
+
6180
+ **Covers Methods:**
6181
+ - \`getAIModerationSettings()\` - Get current AI moderation configuration
6182
+ - \`updateAIModerationSettings()\` - Update AI moderation settings
6183
+ - \`getAIModeration()\` - Get AI analysis result for a message/content
6184
+ - \`triggerAIModeration()\` - Manually trigger AI analysis on content
6185
+ - \`getAIModerationStatus()\` - Check AI moderation service status
6186
+
6187
+ **Auth Required:** Admin API key or Overseer JWT token
6188
+
6189
+ ### Get AI Moderation Settings
6190
+
6191
+ \`\`\`typescript
6192
+ import { createLaunchpadSDK } from '@gala-chain/launchpad-sdk';
6193
+
6194
+ const sdk = createLaunchpadSDK({ apiKey: 'your-admin-api-key' });
6195
+
6196
+ // Get current AI moderation configuration
6197
+ const settings = await sdk.getAIModerationSettings();
6198
+ console.log('AI Moderation Settings:', settings);
6199
+ // Returns: { enabled, sensitivityLevel, autoAction, actionThreshold, ... }
6200
+ \`\`\`
6201
+
6202
+ ### Update AI Moderation Settings
6203
+
6204
+ \`\`\`typescript
6205
+ const result = await sdk.updateAIModerationSettings({
6206
+ enabled: true,
6207
+ sensitivityLevel: 'medium', // 'low' | 'medium' | 'high'
6208
+ autoAction: 'flag', // 'none' | 'flag' | 'hide' | 'delete'
6209
+ actionThreshold: 0.8, // 0.0 - 1.0 confidence threshold
6210
+ });
6211
+ console.log('Settings updated:', result);
6212
+ \`\`\`
6213
+
6214
+ ### Get AI Moderation Result for Content
6215
+
6216
+ \`\`\`typescript
6217
+ // Get AI analysis for a specific message
6218
+ const result = await sdk.getAIModeration({
6219
+ contentId: 'message-uuid-here',
6220
+ contentType: 'CHAT', // 'CHAT' | 'COMMENT'
6221
+ });
6222
+ console.log('AI Score:', result.score);
6223
+ console.log('AI Action:', result.suggestedAction);
6224
+ console.log('Categories:', result.categories); // spam, toxicity, explicit, etc.
6225
+ \`\`\`
6226
+
6227
+ ### Trigger Manual AI Analysis
6228
+
6229
+ \`\`\`typescript
6230
+ // Manually trigger AI analysis on content that hasn't been analyzed yet
6231
+ const result = await sdk.triggerAIModeration({
6232
+ contentId: 'message-uuid-here',
6233
+ contentType: 'COMMENT',
6234
+ });
6235
+ console.log('Moderation triggered:', result.jobId);
6236
+ \`\`\`
6237
+
6238
+ ### Check AI Service Status
6239
+
6240
+ \`\`\`typescript
6241
+ // Check if the AI moderation service is operational
6242
+ const status = await sdk.getAIModerationStatus();
6243
+ console.log('AI Service:', status.status); // 'operational' | 'degraded' | 'offline'
6244
+ console.log('Queue Size:', status.queueSize);
6245
+ console.log('Processing Rate:', status.processingRate);
6246
+ \`\`\`
6247
+
6248
+ **Related Topics:** \`content-flag-management\`, \`ban-management\`, \`overseer-invites\`
6249
+ `,
6250
+ // ============================================================================
6251
+ // WEEKLY CHALLENGE: Weekly Token Competition Leaderboard
6252
+ // ============================================================================
6253
+ 'weekly-challenge': `
6254
+ ## Weekly Challenge with SDK
6255
+
6256
+ **Covers Methods:**
6257
+ - \`getWeeklyChallengeLeaderboard()\` - Get tokens ranked by market cap increase
6258
+ - \`getTokenWeeklyHistory()\` - Get historical weekly challenge results for a token
6259
+
6260
+ **Challenge Rules:**
6261
+ - Week runs Saturday to Friday (UTC)
6262
+ - Baseline market cap taken Saturday at 00:00 UTC
6263
+ - Tokens ranked by percentage market cap increase from baseline
6264
+ - Results available after each week closes
6265
+
6266
+ ### Get Weekly Challenge Leaderboard
6267
+
6268
+ \`\`\`typescript
6269
+ import { createLaunchpadSDK } from '@gala-chain/launchpad-sdk';
6270
+
6271
+ const sdk = createLaunchpadSDK();
6272
+
6273
+ // Get current week's leaderboard
6274
+ const leaderboard = await sdk.getWeeklyChallengeLeaderboard();
6275
+ console.log('Top tokens this week:', leaderboard.tokens.slice(0, 10));
6276
+
6277
+ // Get leaderboard with pagination
6278
+ const page2 = await sdk.getWeeklyChallengeLeaderboard({
6279
+ limit: 20,
6280
+ page: 2,
6281
+ });
6282
+ console.log('Week Period:', page2.weekStart, '-', page2.weekEnd);
6283
+
6284
+ // Get a specific past week by timestamp
6285
+ const pastWeek = await sdk.getWeeklyChallengeLeaderboard({
6286
+ weekTimestamp: '2026-01-01T00:00:00Z',
6287
+ });
6288
+ \`\`\`
6289
+
6290
+ ### Get Token's Weekly History
6291
+
6292
+ \`\`\`typescript
6293
+ // Get how a specific token has performed in past weekly challenges
6294
+ const history = await sdk.getTokenWeeklyHistory({
6295
+ tokenName: 'anime',
6296
+ limit: 10, // Last 10 weeks
6297
+ });
6298
+
6299
+ history.weeks.forEach((week) => {
6300
+ console.log(\`Week \${week.weekStart}: Rank #\${week.rank}, +\${week.percentageIncrease}%\`);
6301
+ });
6302
+ \`\`\`
6303
+
6304
+ **Related Topics:** \`trading-analytics\`, \`token-details\`, \`fetch-pools\`
6305
+ `,
6306
+ // ============================================================================
6307
+ // PLATFORM STATS: Platform-Wide Trading Statistics
6308
+ // ============================================================================
6309
+ 'platform-stats': `
6310
+ ## Platform Statistics with SDK
6311
+
6312
+ **Covers Methods:**
6313
+ - \`getPlatformStats()\` - Get platform-wide trading statistics
6314
+
6315
+ **Auth Required:** None (public endpoint)
6316
+
6317
+ ### Get Platform Statistics
6318
+
6319
+ \`\`\`typescript
6320
+ import { createLaunchpadSDK } from '@gala-chain/launchpad-sdk';
6321
+
6322
+ const sdk = createLaunchpadSDK();
6323
+
6324
+ // Get platform-wide statistics
6325
+ const stats = await sdk.getPlatformStats();
6326
+
6327
+ console.log('GALA Volume (1h):', stats.galaVolume1h);
6328
+ console.log('GALA Volume (24h):', stats.galaVolume24h);
6329
+ console.log('GALA Volume (7d):', stats.galaVolume7d);
6330
+ console.log('Total Tokens:', stats.totalTokens);
6331
+ \`\`\`
6332
+
6333
+ ### Display Trading Dashboard
6334
+
6335
+ \`\`\`typescript
6336
+ async function displayPlatformDashboard() {
6337
+ const stats = await sdk.getPlatformStats();
6338
+
6339
+ return {
6340
+ tradingVolume: {
6341
+ lastHour: \`\${stats.galaVolume1h} GALA\`,
6342
+ last24Hours: \`\${stats.galaVolume24h} GALA\`,
6343
+ last7Days: \`\${stats.galaVolume7d} GALA\`,
6344
+ },
6345
+ tokens: {
6346
+ total: stats.totalTokens,
6347
+ },
6348
+ };
6349
+ }
6350
+ \`\`\`
6351
+
6352
+ **Related Topics:** \`weekly-challenge\`, \`trading-analytics\`, \`fetch-pools\`
6353
+ `,
6354
+ // ============================================================================
6355
+ // RESTRICTED NAMES: Restricted Token Names Management (Overseer Only)
6356
+ // ============================================================================
6357
+ 'restricted-names': `
6358
+ ## Restricted Names with SDK
6359
+
6360
+ **Covers Methods:**
6361
+ - \`getRestrictedNames()\` - Get the list of restricted token names
6362
+ - \`updateRestrictedNames()\` - Update the restricted names list
6363
+
6364
+ **Auth Required:** Overseer JWT token only
6365
+
6366
+ ### Get Restricted Names
6367
+
6368
+ \`\`\`typescript
6369
+ import { createLaunchpadSDK } from '@gala-chain/launchpad-sdk';
6370
+
6371
+ const sdk = createLaunchpadSDK({ jwtToken: 'your-overseer-jwt' });
6372
+
6373
+ // Get current restricted names list
6374
+ const result = await sdk.getRestrictedNames();
6375
+
6376
+ // Names are stored as a newline-separated text blob
6377
+ const namesList = result.names.split('\\n').filter(Boolean);
6378
+ console.log('Restricted names:', namesList);
6379
+ console.log('Total count:', namesList.length);
6380
+ \`\`\`
6381
+
6382
+ ### Update Restricted Names
6383
+
6384
+ \`\`\`typescript
6385
+ // Add new restricted names to the list
6386
+ const currentResult = await sdk.getRestrictedNames();
6387
+ const currentNames = currentResult.names.split('\\n').filter(Boolean);
6388
+
6389
+ // Add new names
6390
+ const updatedNames = [...currentNames, 'badword1', 'badword2'];
6391
+ const newNamesBlob = updatedNames.join('\\n');
6392
+
6393
+ const result = await sdk.updateRestrictedNames({
6394
+ names: newNamesBlob,
6395
+ });
6396
+ console.log('Updated successfully:', result);
6397
+ \`\`\`
6398
+
6399
+ ### Check If a Name Would Be Restricted
6400
+
6401
+ \`\`\`typescript
6402
+ // Check if a token name would be blocked before creating
6403
+ async function isNameRestricted(tokenName: string): Promise<boolean> {
6404
+ const result = await sdk.getRestrictedNames();
6405
+ const restrictedList = result.names.split('\\n').filter(Boolean);
6406
+ return restrictedList.some(
6407
+ (name) => name.toLowerCase() === tokenName.toLowerCase()
6408
+ );
6409
+ }
6410
+
6411
+ const blocked = await isNameRestricted('badword1');
6412
+ console.log('Name is restricted:', blocked);
6413
+ \`\`\`
6414
+
6415
+ **Related Topics:** \`token-creation\`, \`overseer-invites\`, \`token-ban-management\`
6416
+ `,
6417
+ // ============================================================================
6418
+ // WEBSOCKET ADMIN: Real-Time Event Broadcasting (Admin/Overseer Only)
6419
+ // ============================================================================
6420
+ 'websocket-admin': `
6421
+ ## WebSocket Admin with SDK
6422
+
6423
+ **Covers Methods:**
6424
+ - **Connection Monitoring:** \`getConnectedClients()\`, \`isUserOnline()\`, \`getOnlineUsers()\`, \`getTokenViewers()\`, \`getOnlineOverseers()\`
6425
+ - **Event Emission:** \`emitTradeExecuted()\`, \`emitBalanceUpdated()\`, \`emitStreamStatus()\`, \`emitViewerCount()\`, \`emitStreamCountdown()\`, \`emitChatMessage()\`, \`emitChatStatus()\`, \`emitTypingIndicator()\`, \`emitTokenBanned()\`, \`emitTokenUnbanned()\`, \`emitModeratorAdded()\`, \`emitModeratorRemoved()\`, \`emitUserProfileUpdated()\`, \`emitSiteConfigChanged()\`, \`emitFeatureStatus()\`
6426
+
6427
+ **Auth Required:** Admin API key or Overseer JWT token
6428
+
6429
+ ### Monitor Connected Clients
6430
+
6431
+ \`\`\`typescript
6432
+ import { createLaunchpadSDK } from '@gala-chain/launchpad-sdk';
6433
+
6434
+ const sdk = createLaunchpadSDK({ apiKey: 'your-admin-api-key' });
6435
+
6436
+ // Get all connected WebSocket clients
6437
+ const clients = await sdk.getConnectedClients();
6438
+ console.log('Total connected:', clients.total);
6439
+ console.log('By token:', clients.byToken);
6440
+
6441
+ // Check if a specific user is online
6442
+ const onlineStatus = await sdk.isUserOnline('eth|0x1234...');
6443
+ console.log('User online:', onlineStatus.isOnline);
6444
+ console.log('Connected since:', onlineStatus.connectedSince);
6445
+
6446
+ // Check multiple users at once
6447
+ const statuses = await sdk.getOnlineUsers(['eth|0x1111...', 'eth|0x2222...']);
6448
+ statuses.forEach((s) => console.log(\`\${s.address}: \${s.isOnline}\`));
6449
+
6450
+ // Get viewers of a specific token stream
6451
+ const viewers = await sdk.getTokenViewers({
6452
+ tokenName: 'anime',
6453
+ limit: 50,
6454
+ });
6455
+ console.log('Current viewers:', viewers.count);
6456
+
6457
+ // Get all online overseers
6458
+ const overseers = await sdk.getOnlineOverseers();
6459
+ console.log('Online overseers:', overseers.addresses);
6460
+ \`\`\`
6461
+
6462
+ ### Emit WebSocket Events
6463
+
6464
+ \`\`\`typescript
6465
+ // Emit a trade executed event (triggers real-time UI updates)
6466
+ await sdk.emitTradeExecuted('anime', {
6467
+ tradeType: 'BUY',
6468
+ amount: '100',
6469
+ price: '0.05',
6470
+ userAddress: 'eth|0x1234...',
6471
+ });
6472
+
6473
+ // Emit stream status change
6474
+ await sdk.emitStreamStatus('anime', {
6475
+ isLive: true,
6476
+ viewerCount: 150,
6477
+ });
6478
+
6479
+ // Emit a chat message to all viewers
6480
+ await sdk.emitChatMessage('anime', {
6481
+ messageId: 'uuid-here',
6482
+ content: 'Hello from admin!',
6483
+ authorAddress: 'eth|0x1234...',
6484
+ timestamp: Date.now(),
6485
+ });
6486
+
6487
+ // Broadcast site-wide config change
6488
+ await sdk.emitSiteConfigChanged({
6489
+ key: 'maintenance_mode',
6490
+ value: false,
6491
+ });
6492
+
6493
+ // Emit feature flag change
6494
+ await sdk.emitFeatureStatus({
6495
+ feature: 'trading',
6496
+ enabled: true,
6497
+ });
6498
+ \`\`\`
6499
+
6500
+ **Related Topics:** \`streaming\`, \`stream-chat\`, \`ban-management\`, \`overseer-invites\`
6501
+ `,
6502
+ // ============================================================================
6503
+ // OEMBED: Social Media Link Preview Metadata
6504
+ // ============================================================================
6505
+ 'oembed': `
6506
+ ## OEmbed Metadata with SDK
6507
+
6508
+ **Covers Methods:**
6509
+ - \`getHomeOEmbed()\` - Get oEmbed metadata for the Launchpad home page
6510
+ - \`getPoolOEmbed()\` - Get oEmbed metadata for a token pool page
6511
+ - \`getProfileOEmbed()\` - Get oEmbed metadata for a user profile page
6512
+
6513
+ **Auth Required:** None (public endpoint)
6514
+
6515
+ OEmbed is a format that allows embedding rich content when sharing links on social media platforms (Twitter/X, Discord, Slack, etc.). These methods return JSON metadata used to generate link previews.
6516
+
6517
+ ### Get Home Page OEmbed
6518
+
6519
+ \`\`\`typescript
6520
+ import { createLaunchpadSDK } from '@gala-chain/launchpad-sdk';
6521
+
6522
+ const sdk = createLaunchpadSDK();
6523
+
6524
+ // Get metadata for the Launchpad home page
6525
+ const homeEmbed = await sdk.getHomeOEmbed();
6526
+ console.log('Title:', homeEmbed.title);
6527
+ console.log('Description:', homeEmbed.description);
6528
+ console.log('Thumbnail:', homeEmbed.thumbnail_url);
6529
+ console.log('Provider:', homeEmbed.provider_name);
6530
+ \`\`\`
6531
+
6532
+ ### Get Token Pool OEmbed
6533
+
6534
+ \`\`\`typescript
6535
+ // Get metadata for a specific token's pool page
6536
+ const poolEmbed = await sdk.getPoolOEmbed({
6537
+ tokenName: 'anime',
6538
+ });
6539
+ console.log('Token Title:', poolEmbed.title); // e.g., "Anime Token - Gala Launchpad"
6540
+ console.log('Token Image:', poolEmbed.thumbnail_url);
6541
+ console.log('Description:', poolEmbed.description); // Price, volume, etc.
6542
+
6543
+ // For social sharing: generate the shareable URL
6544
+ const shareUrl = \`https://launchpad.gala.com/pools/\${tokenName}\`;
6545
+ \`\`\`
6546
+
6547
+ ### Get User Profile OEmbed
6548
+
6549
+ \`\`\`typescript
6550
+ // Get metadata for a user's profile page
6551
+ const profileEmbed = await sdk.getProfileOEmbed({
6552
+ userAddress: 'eth|0x1234...',
6553
+ });
6554
+ console.log('User Name:', profileEmbed.title);
6555
+ console.log('Avatar:', profileEmbed.thumbnail_url);
6556
+ \`\`\`
6557
+
6558
+ ### Integration with Social Sharing
6559
+
6560
+ \`\`\`typescript
6561
+ // Generate open graph meta tags from oEmbed data
6562
+ async function generateMetaTags(tokenName: string) {
6563
+ const embed = await sdk.getPoolOEmbed({ tokenName });
6564
+ return {
6565
+ 'og:title': embed.title,
6566
+ 'og:description': embed.description,
6567
+ 'og:image': embed.thumbnail_url,
6568
+ 'og:type': 'website',
6569
+ };
6570
+ }
6571
+ \`\`\`
6572
+
6573
+ **Related Topics:** \`token-details\`, \`profile-management\`, \`fetch-pools\`
6574
+ `,
6575
+ // ============================================================================
6576
+ // MESSAGES: Unified Messages API (CHAT + COMMENT types)
6577
+ // ============================================================================
6578
+ 'messages': `
6579
+ ## Unified Messages API with SDK
6580
+
6581
+ **Covers Methods:**
6582
+ - \`fetchMessages()\` - Query messages with type/token/user filters
6583
+ - \`createMessage()\` - Create a CHAT or COMMENT message
6584
+ - \`updateMessage()\` - Update message content (author only)
6585
+ - \`deleteMessage()\` - Delete a message (author/owner/moderator)
6586
+ - \`getPinnedMessage()\` - Get the pinned message for a token
6587
+ - \`pinMessage()\` - Pin a message (owner/moderator)
6588
+ - \`unpinMessage()\` - Unpin the current pinned message
6589
+ - \`getMessageStats()\` - Get platform-wide message statistics
6590
+
6591
+ The unified messages API handles both \`CHAT\` (live stream chat) and \`COMMENT\` (token page comments) message types through a single /v1/messages endpoint.
6592
+
6593
+ ### Fetch Messages
6594
+
6595
+ \`\`\`typescript
6596
+ import { createLaunchpadSDK } from '@gala-chain/launchpad-sdk';
6597
+
6598
+ const sdk = createLaunchpadSDK({ jwtToken: 'your-jwt-token' });
6599
+
6600
+ // Fetch chat messages for a token
6601
+ const chatMessages = await sdk.fetchMessages({
6602
+ tokenName: 'anime',
6603
+ type: 'CHAT',
6604
+ limit: 50,
6605
+ page: 1,
6606
+ });
6607
+
6608
+ // Fetch comment-type messages for a token
6609
+ const comments = await sdk.fetchMessages({
6610
+ tokenName: 'anime',
6611
+ type: 'COMMENT',
6612
+ limit: 20,
6613
+ });
6614
+
6615
+ // Fetch messages by a specific user
6616
+ const userMessages = await sdk.fetchMessages({
6617
+ userAddress: 'eth|0x1234...',
6618
+ type: 'CHAT',
6619
+ });
6620
+ \`\`\`
6621
+
6622
+ ### Create Messages
6623
+
6624
+ \`\`\`typescript
6625
+ // Create a chat message (live stream chat)
6626
+ const chatMsg = await sdk.createMessage({
6627
+ tokenName: 'anime',
6628
+ content: 'This token is amazing!',
6629
+ type: 'CHAT',
6630
+ });
6631
+ console.log('Created chat message:', chatMsg.id);
6632
+
6633
+ // Create a comment (token page)
6634
+ const comment = await sdk.createMessage({
6635
+ tokenName: 'anime',
6636
+ content: 'Great project, bullish on this!',
6637
+ type: 'COMMENT',
6638
+ });
6639
+ console.log('Created comment:', comment.id);
6640
+ \`\`\`
6641
+
6642
+ ### Update and Delete Messages
6643
+
6644
+ \`\`\`typescript
6645
+ // Update your own message
6646
+ const updated = await sdk.updateMessage('message-uuid', {
6647
+ content: 'Updated message content',
6648
+ });
6649
+
6650
+ // Delete a message (must be author, or have moderator/owner role)
6651
+ await sdk.deleteMessage('message-uuid');
6652
+ \`\`\`
6653
+
6654
+ ### Pin/Unpin Messages
6655
+
6656
+ \`\`\`typescript
6657
+ // Get the currently pinned message for a token
6658
+ const pinned = await sdk.getPinnedMessage('anime');
6659
+ if (pinned) {
6660
+ console.log('Pinned message:', pinned.content);
6661
+ console.log('Pinned by:', pinned.pinnedBy);
6662
+ }
6663
+
6664
+ // Pin a message (requires owner or moderator role)
6665
+ await sdk.pinMessage('message-uuid');
6666
+
6667
+ // Unpin the current pinned message
6668
+ await sdk.unpinMessage('message-uuid');
6669
+ \`\`\`
6670
+
6671
+ ### Get Message Statistics
6672
+
6673
+ \`\`\`typescript
6674
+ // Get platform-wide message statistics (admin/overseer only)
6675
+ const stats = await sdk.getMessageStats();
6676
+ console.log('Total CHAT messages:', stats.chatCount);
6677
+ console.log('Total COMMENT messages:', stats.commentCount);
6678
+ console.log('Messages today:', stats.todayCount);
6679
+ \`\`\`
6680
+
6681
+ **Related Topics:** \`stream-chat\`, \`content-reactions\`, \`content-flag-management\`, \`moderator-invites\`
6682
+ `,
6683
+ // ============================================================================
6684
+ // HOLDERS: Token Holder Data and Distribution Analysis
6685
+ // ============================================================================
6686
+ 'holders': `
6687
+ ## Token Holder Data with SDK
6688
+
6689
+ **Covers Methods:**
6690
+ - \`getTopHolders(tokenName, limit?)\` - Get top N token holders by balance (v9.2.0+)
6691
+ - \`getHolderCount(tokenName)\` - Get total holder count and combined balance (v9.2.0+)
6692
+ - \`getHolderRank(tokenName, userAddress)\` - Get a user's rank and balance (v9.2.0+)
6693
+ - \`getHoldersByBalance(tokenName, options?)\` - Filter holders by balance range (v9.2.0+)
6694
+ - \`getHolderHistory(tokenName, userAddress, limit?)\` - Get a holder's trade history (v9.2.0+)
6695
+ - \`fetchTokenDistribution(tokenName)\` - Raw distribution data (used internally by the above)
6696
+
6697
+ ### Check Holder Rank
6698
+
6699
+ \`\`\`typescript
6700
+ import { createLaunchpadSDK } from '@gala-chain/launchpad-sdk';
6701
+
6702
+ const sdk = createLaunchpadSDK();
6703
+
6704
+ // Direct SDK convenience method (v9.2.0+)
6705
+ const rank = await sdk.getHolderRank('anime', 'eth|0x1234...');
6706
+ if (rank) {
6707
+ console.log(\`Rank #\${rank.rank} of \${rank.holderCount} holders\`);
6708
+ console.log(\`Balance: \${rank.balance}\`);
6709
+ } else {
6710
+ console.log('User holds no tokens');
6711
+ }
6712
+ \`\`\`
6713
+
6714
+ ### Get Top Holders
6715
+
6716
+ \`\`\`typescript
6717
+ // Get top 10 holders with rank enrichment
6718
+ const top10 = await sdk.getTopHolders('anime', 10);
6719
+ top10.forEach((holder) => {
6720
+ console.log(\`#\${holder.rank}: \${holder.address} - \${holder.balance} tokens (\${holder.percentage}%)\`);
6721
+ });
6722
+ \`\`\`
6723
+
6724
+ ### Holder Statistics
6725
+
6726
+ \`\`\`typescript
6727
+ const { count, totalBalance } = await sdk.getHolderCount('anime');
6728
+ console.log(\`\${count} holders, total supply: \${totalBalance}\`);
6729
+ \`\`\`
6730
+
6731
+ ### Filter Holders by Balance (Whale Detection)
6732
+
6733
+ \`\`\`typescript
6734
+ // Find all holders with ≥10,000 tokens
6735
+ const whales = await sdk.getHoldersByBalance('anime', { minBalance: 10000 });
6736
+ console.log(\`\${whales.length} whales hold ≥10,000 tokens\`);
6737
+ console.log('Top whale:', whales[0]?.address);
6738
+ \`\`\`
6739
+
6740
+ ### Get a Holder's Trade History
6741
+
6742
+ \`\`\`typescript
6743
+ // Get last 20 trades for a specific holder
6744
+ const history = await sdk.getHolderHistory('anime', 'eth|0x1234...', 20);
6745
+ history.trades.forEach((t) => {
6746
+ console.log(\`\${t.txnType}: \${t.inputAmount} → \${t.outputAmount} at \${t.createdAt}\`);
6747
+ });
6748
+ \`\`\`
6749
+
6750
+ **Related Topics:** \`token-distribution\`, \`token-details\`, \`trading-analytics\`, \`recent-trades\`
6751
+ `,
6752
+ 'trading-quotes': `
6753
+ ## Trading Quotes via Backend Proxy (v9.1.0+)
6754
+
6755
+ **Covers Methods:**
6756
+ - \`fetchLaunchpadFee()\` — Backend-cached launchpad fee (1h TTL, @Public)
6757
+ - \`fetchSaleDetails(tokenName)\` — Backend-cached token sale details (10s TTL, @Public)
6758
+ - \`getTradeQuote(params)\` — Instant quote via local bonding curve math (no chain call, @Public)
6759
+ - \`getPremintQuote(amount)\` — Pre-mint quote assuming zero supply (token creation flow, @Public)
6760
+
6761
+ All endpoints are @Public() — no authentication required. These replace the deprecated
6762
+ \`calculateBuyAmountExternal()\` / \`calculateSellAmountExternal()\` chain-direct methods.
6763
+
6764
+ \`\`\`typescript
6765
+ import { createLaunchpadSDK } from '@gala-chain/launchpad-sdk';
6766
+
6767
+ const sdk = createLaunchpadSDK();
6768
+
6769
+ // 1. Fetch current launchpad fee (cached 1h on backend)
6770
+ const fee = await sdk.fetchLaunchpadFee();
6771
+ console.log(\`Launchpad fee: \${fee} GALA\`);
6772
+
6773
+ // 2. Fetch token sale details (cached 10s on backend)
6774
+ const details = await sdk.fetchSaleDetails('anime');
6775
+ console.log(\`Supply: \${details.sellingTokenQuantity} / \${details.maxSupply}\`);
6776
+ console.log(\`Status: \${details.saleStatus}\`);
6777
+
6778
+ // 3. Get a buy quote: how many tokens for 100 GALA?
6779
+ const buyQuote = await sdk.getTradeQuote({
6780
+ tokenName: 'anime',
6781
+ amount: '100',
6782
+ type: 'NATIVE', // GALA input
6783
+ method: 'IN', // spending this amount
6784
+ });
6785
+ console.log(\`You will receive: \${buyQuote.amount} tokens\`);
6786
+ console.log(\`Fee: \${buyQuote.reverseBondingCurveFee} GALA\`);
6787
+
6788
+ // 4. Get a sell quote: how much GALA for 500 tokens?
6789
+ const sellQuote = await sdk.getTradeQuote({
6790
+ tokenName: 'anime',
6791
+ amount: '500',
6792
+ type: 'MEME', // token input
6793
+ method: 'IN', // selling this amount
6794
+ });
6795
+ console.log(\`You will receive: \${sellQuote.amount} GALA\`);
6796
+
6797
+ // 5. Pre-mint quote for token creation flow (supply = 0)
6798
+ const premintQuote = await sdk.getPremintQuote('500');
6799
+ console.log(\`Initial purchase will yield: \${premintQuote.amount} tokens\`);
6800
+ \`\`\`
6801
+
6802
+ **MCP Tool Equivalents:**
6803
+ - \`gala_launchpad_fetch_launch_token_fee\`
6804
+ - \`gala_launchpad_calculate_buy_amount_local\`
6805
+
6806
+ **Related Topics:** \`buy-tokens\`, \`sell-tokens\`, \`local-calculations\`
6807
+ `,
6808
+ 'global-feed-subscription': `
6809
+ ## Global Feed Reference Tools (MCP Documentation)
6810
+
6811
+ The global feed reference tools are **documentation/reference tools** in the MCP server, not
6812
+ direct SDK API methods. They explain how to monitor platform-wide events (trades, token launches,
6813
+ pool creations) via WebSocket subscriptions.
6814
+
6815
+ **MCP Reference Tools:**
6816
+ - \`gala_launchpad_global_feed_reference\` — Overview of all global feed event types
6817
+ - \`gala_launchpad_global_feed_status_reference\` — Connection and authentication status patterns
6818
+ - \`gala_launchpad_monitor_global_feed_events_reference\` — Code examples for monitoring events
6819
+ - \`gala_launchpad_site_config_state_reference\` — Site configuration state management
6820
+ - \`gala_launchpad_unsubscribe_from_global_feed_reference\` — Cleanup patterns
6821
+
6822
+ **SDK Equivalent (Direct Usage):**
6823
+
6824
+ \`\`\`typescript
6825
+ import { createLaunchpadSDK } from '@gala-chain/launchpad-sdk';
6826
+
6827
+ const sdk = createLaunchpadSDK({ wallet: 'your-private-key' });
6828
+
6829
+ // Subscribe to token creation events globally
6830
+ const unsubscribeLaunch = sdk.onLaunchpadTokenCreation((token) => {
6831
+ console.log('New token launched:', token.tokenName);
6832
+ });
6833
+
6834
+ // Subscribe to DEX pool creation events
6835
+ const unsubscribePool = sdk.onDexPoolCreation((pool) => {
6836
+ console.log('New DEX pool:', pool.token0, '/', pool.token1);
6837
+ });
6838
+
6839
+ // Subscribe to stream WebSocket for token-level events
6840
+ await sdk.connectStreamWebSocket();
6841
+ await sdk.authenticateStreamWebSocket('jwt-token');
6842
+ await sdk.subscribeToStream('anime', {
6843
+ onTradeExecuted: (trade) => console.log('Trade:', trade),
6844
+ onStreamStatusChanged: (status) => console.log('Status:', status),
6845
+ });
6846
+
6847
+ // Clean up
6848
+ unsubscribeLaunch();
6849
+ unsubscribePool();
6850
+ \`\`\`
6851
+
6852
+ **Related Topics:** \`event-subscriptions\`, \`streaming\`, \`stream-chat\`
6853
+ `,
6854
+ 'events-tracking': `
6855
+ ## Client-Side Events Tracking (v8.2.0+)
6856
+
6857
+ **Covers Methods:**
6858
+ - \`sdk.events.track(eventType, payload, options?)\` — Track an event (client-side batching)
6859
+ - \`sdk.events.flush()\` — Manually flush buffered events to backend
6860
+ - \`sdk.events.getStats()\` — Get buffering statistics
6861
+ - \`sdk.events.shutdown(timeoutMs?)\` — Graceful shutdown with final flush
6862
+
6863
+ Events are batched client-side and flushed automatically on time (3s) or size (20 events) thresholds.
6864
+ The backend accepts batches via POST /v1/events, persists via RabbitMQ → MySQL, and broadcasts
6865
+ to the WebSocket firehose for real-time overseer monitoring.
6866
+
6867
+ \`\`\`typescript
6868
+ import { createLaunchpadSDK, EVENT_TYPES } from '@gala-chain/launchpad-sdk';
6869
+
6870
+ const sdk = createLaunchpadSDK({
6871
+ wallet: 'your-private-key',
6872
+ events: {
6873
+ batchSize: 20, // Flush after 20 events (default)
6874
+ flushIntervalMs: 3000, // Or after 3 seconds (default)
6875
+ maxQueueSize: 1000 // Drop oldest if queue exceeds (default)
6876
+ }
6877
+ });
6878
+
6879
+ // Track trading events
6880
+ sdk.events.track(EVENT_TYPES.TOKEN_BUY, {
6881
+ tokenName: 'anime',
6882
+ amount: '100',
6883
+ price: '0.05'
6884
+ });
6885
+
6886
+ sdk.events.track(EVENT_TYPES.TOKEN_SELL, {
6887
+ tokenName: 'anime',
6888
+ amount: '50'
6889
+ });
6890
+
6891
+ // Track page navigation
6892
+ sdk.events.track(EVENT_TYPES.PAGE_VIEW, {
6893
+ path: '/tokens/anime',
6894
+ referrer: 'homepage'
6895
+ });
6896
+
6897
+ // Force immediate send for critical events
6898
+ await sdk.events.track(EVENT_TYPES.LOGIN, { userAddress: 'eth|0x...' }, { immediate: true });
6899
+
6900
+ // Get buffering statistics
6901
+ const stats = sdk.events.getStats();
6902
+ console.log(\`Buffered: \${stats.buffered}, Sent: \${stats.flushed}\`);
6903
+
6904
+ // Manually flush before page unload
6905
+ await sdk.events.flush();
6906
+
6907
+ // Graceful shutdown (waits up to 5 seconds)
6908
+ await sdk.events.shutdown(5000);
6909
+
6910
+ // Get statistics about buffered/sent events
6911
+ const stats = sdk.events.getStats();
6912
+ console.log(\`Buffered: \${stats.buffered}, Sent: \${stats.flushed}, Failed: \${stats.failed}\`);
6913
+ \`\`\`
6914
+
6915
+ **Available EVENT_TYPES Constants:**
6916
+ - \`LOGIN\`, \`LOGOUT\`
6917
+ - \`TOKEN_BUY\`, \`TOKEN_SELL\`, \`TOKEN_SWAP\`
6918
+ - \`STREAM_START\`, \`STREAM_END\`
6919
+ - \`CHAT_MESSAGE_SENT\`, \`COMMENT_CREATED\`
6920
+ - \`PAGE_VIEW\`, \`PAGE_LEAVE\`
6921
+
6922
+ **Related Topics:** \`stream-chat\`, \`streaming\`, \`overseer-invites\`
6923
+ `,
6924
+ 'global-bans': `
6925
+ ## Global Ban Management (Platform-wide, Overseer Only)
6926
+
6927
+ **Covers Methods:**
6928
+ - \`createGlobalBan(options)\` — Create a platform-wide ban for a user address
6929
+ - \`removeGlobalBan(options)\` — Remove a global ban
6930
+ - \`listGlobalBans(options?)\` — List all platform-wide bans with pagination
6931
+ - \`getGlobalBan(options)\` — Check if a specific user is globally banned
6932
+
6933
+ **Authentication:** All methods require overseer JWT session or admin API key.
6934
+
6935
+ **Distinction from Per-Token Bans:**
6936
+ - **Global bans** (\`createGlobalBan\`) — Platform-wide, applied to ALL tokens
6937
+ - **Per-token bans** (\`createBan\`) — Scoped to a specific token's chat/moderation
6938
+
6939
+ \`\`\`typescript
6940
+ import { createLaunchpadSDK } from '@gala-chain/launchpad-sdk';
6941
+
6942
+ const sdk = createLaunchpadSDK({ wallet: 'overseer-private-key' });
6943
+
6944
+ // Create a global ban (platform-wide)
6945
+ const ban = await sdk.createGlobalBan({
6946
+ userAddress: 'eth|0x1234...',
6947
+ reason: 'Repeated platform policy violations',
6948
+ expiresAt: new Date(Date.now() + 30 * 24 * 60 * 60 * 1000) // 30 days
6949
+ });
6950
+ console.log('Global ban created:', ban.id);
6951
+
6952
+ // Check if a user is globally banned
6953
+ const banStatus = await sdk.getGlobalBan({ userAddress: 'eth|0x1234...' });
6954
+ if (banStatus) {
6955
+ console.log(\`Banned until: \${banStatus.expiresAt ?? 'permanent'}\`);
6956
+ console.log(\`Reason: \${banStatus.reason}\`);
6957
+ }
6958
+
6959
+ // List all global bans (paginated)
6960
+ const bans = await sdk.listGlobalBans({ page: 1, limit: 20 });
6961
+ console.log(\`\${bans.meta.totalItems} total global bans\`);
6962
+ bans.items.forEach((b) => {
6963
+ console.log(\`\${b.userAddress}: \${b.reason}\`);
6964
+ });
6965
+
6966
+ // Remove a global ban
6967
+ await sdk.removeGlobalBan({ userAddress: 'eth|0x1234...' });
6968
+ console.log('Global ban removed');
6969
+ \`\`\`
6970
+
6971
+ **MCP Tool Equivalents:**
6972
+ - \`gala_launchpad_create_ban\` (global scope)
6973
+ - \`gala_launchpad_remove_ban\` (global scope)
6974
+ - \`gala_launchpad_list_global_flags\`
6975
+
6976
+ **Related Topics:** \`ban-management\`, \`overseer-invites\`, \`content-flag-management\`
6977
+ `,
6978
+ 'recent-trades': `
6979
+ ## Recent Trades Query (v9.2.0+)
6980
+
6981
+ **Covers Methods:**
6982
+ - \`getRecentTrades(tokenName?, limit?)\` — Get most recent trades (convenience wrapper)
6983
+ - \`getTrades(options)\` — Full paginated trades query with all filter options
6984
+
6985
+ \`getRecentTrades\` is a convenience wrapper around \`getTrades\` for quick access to recent
6986
+ market activity. Use \`getTrades\` directly for advanced filtering (date ranges, addresses, etc.).
6987
+
6988
+ \`\`\`typescript
6989
+ import { createLaunchpadSDK } from '@gala-chain/launchpad-sdk';
6990
+
6991
+ const sdk = createLaunchpadSDK();
6992
+
6993
+ // Get 50 most recent trades across all tokens
6994
+ const { trades } = await sdk.getRecentTrades();
6995
+ trades.forEach((t) => {
6996
+ console.log(\`\${t.tokenName} \${t.txnType}: \${t.inputAmount} → \${t.outputAmount}\`);
6997
+ });
6998
+
6999
+ // Get last 10 trades for a specific token
7000
+ const { trades: animeTrades } = await sdk.getRecentTrades('anime', 10);
7001
+ console.log(\`Last 10 anime trades:\`, animeTrades.length);
7002
+
7003
+ // Advanced filtering with getTrades()
7004
+ const { trades: filteredTrades, pageInfo } = await sdk.getTrades({
7005
+ tokenName: 'anime',
7006
+ txnType: 'BUY',
7007
+ startDate: '2025-01-01',
7008
+ endDate: '2025-01-31',
7009
+ pageSize: 20,
7010
+ });
7011
+ console.log(\`Page \${pageInfo.currentPage} of \${pageInfo.totalPages}\`);
7012
+ \`\`\`
7013
+
7014
+ **MCP Tool Equivalents:**
7015
+ - \`gala_launchpad_get_recent_trades\` — Recent trades with optional filtering
7016
+ - \`gala_launchpad_get_trades\` — Full trades query
7017
+
7018
+ **Related Topics:** \`trading-analytics\`, \`trade-history\`, \`holders\`
5409
7019
  `,
5410
7020
  };
7021
+ /**
7022
+ * All valid SDK example topics as a readonly array
7023
+ */
7024
+ exports.SDK_EXAMPLE_TOPICS = Object.keys(exports.SDK_EXAMPLES);
7025
+ /**
7026
+ * Type guard to check if a string is a valid SDK example topic
7027
+ */
7028
+ function isValidSdkTopic(topic) {
7029
+ return typeof topic === 'string' && topic in exports.SDK_EXAMPLES;
7030
+ }
5411
7031
  /**
5412
7032
  * SDK Usage Explanation Tool
7033
+ *
7034
+ * Provides detailed SDK code examples organized by topic.
7035
+ * The topic enum is derived from SDK_EXAMPLES keys to ensure type safety.
5413
7036
  */
5414
7037
  exports.explainSdkUsageTool = {
5415
7038
  name: 'gala_launchpad_explain_sdk_usage',
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).',
7039
+ description: 'Get detailed SDK code examples for all 310 MCP tools (mapping to 273 SDK methods) organized into 65 composite workflow topics covering: buy-tokens, sell-tokens, pool-graduation, fetch-pools, balances, token-creation, token-status, dex-trading, gdex-stream, 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, graduation-detection, ai-moderation (AI content analysis - overseer only), weekly-challenge (weekly token competition leaderboard), platform-stats (platform-wide trading metrics), restricted-names (blocked token names list - overseer only), websocket-admin (real-time event broadcasting - admin/overseer), oembed (social media link preview metadata), messages (unified CHAT+COMMENT messages API), and holders (token holder distribution and whale analysis).',
5417
7040
  inputSchema: {
5418
7041
  type: 'object',
5419
7042
  properties: {
5420
7043
  topic: {
5421
7044
  type: 'string',
5422
- enum: [
5423
- 'buy-tokens',
5424
- 'sell-tokens',
5425
- 'pool-graduation',
5426
- 'fetch-pools',
5427
- 'balances',
5428
- 'dex-trading',
5429
- 'liquidity-positions',
5430
- 'advanced-dex-analysis',
5431
- 'price-history',
5432
- 'token-details',
5433
- 'token-distribution',
5434
- 'token-status',
5435
- 'token-creation',
5436
- 'profile-management',
5437
- 'multi-wallet',
5438
- 'transfers',
5439
- 'locks',
5440
- 'trading-analytics',
5441
- 'utilities-and-helpers',
5442
- 'utilities-system',
5443
- 'error-handling',
5444
- 'installation',
5445
- 'local-calculations',
5446
- 'spot-prices-smart-routing',
5447
- 'event-subscriptions',
5448
- 'mcp-to-sdk-mapping',
5449
- 'fetch-all-dex-seasons',
5450
- 'fetch-current-dex-season',
5451
- 'fetch-dex-leaderboard-by-season-id',
5452
- 'fetch-current-dex-leaderboard',
5453
- 'fetch-dex-aggregated-volume-summary',
5454
- 'fetch-dex-pools',
5455
- 'bridge-operations',
5456
- 'dex-token-discovery',
5457
- 'wrap-unwrap-operations',
5458
- 'referral-system',
5459
- 'account-management',
5460
- 'streaming',
5461
- 'stream-chat',
5462
- 'session-auth',
5463
- 'ban-management',
5464
- 'api-key-management',
5465
- 'moderator-invites',
5466
- 'overseer-invites',
5467
- 'content-flag-management',
5468
- 'content-reactions',
5469
- 'trade-history',
5470
- 'token-ban-management',
5471
- 'nft-collection-management',
5472
- 'token-identification',
5473
- 'graduation-detection',
5474
- ],
7045
+ // Derive enum from SDK_EXAMPLES keys to ensure they're always in sync
7046
+ enum: exports.SDK_EXAMPLE_TOPICS,
5475
7047
  description: 'The SDK usage topic to explain.',
5476
7048
  },
5477
7049
  },
5478
7050
  required: ['topic'],
5479
7051
  },
5480
7052
  handler: (0, error_handler_js_1.withErrorHandling)(async (_sdk, args) => {
5481
- const example = exports.SDK_EXAMPLES[args.topic];
7053
+ const { topic } = args;
7054
+ // Type-safe lookup - topic is already typed as SdkExampleTopic
7055
+ const example = exports.SDK_EXAMPLES[topic];
5482
7056
  if (example === undefined || example === '') {
5483
- throw new Error('Unknown topic: ' + args.topic);
7057
+ throw new Error(`Unknown topic: ${topic}`);
5484
7058
  }
5485
7059
  return (0, response_formatter_js_1.formatSuccess)({
5486
- topic: args.topic,
7060
+ topic,
5487
7061
  explanation: example,
5488
- sdkVersion: '5.6.0',
7062
+ sdkVersion: '5.0.4-beta.56',
5489
7063
  packageName: '@gala-chain/launchpad-sdk',
5490
7064
  documentation: 'https://www.npmjs.com/package/@gala-chain/launchpad-sdk',
5491
7065
  });