hm-tracking-sdk 0.1.6 → 0.1.9

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.
@@ -32,7 +32,7 @@ export class HmTrackingSDK {
32
32
  this.api = new APIService(this.http);
33
33
  this.hmAdManager = new HmAdManager({ autoInjectScript: true });
34
34
  this.adMonitor = new AdMonitor((params) => this.api.adMonitor(params));
35
- this.tonWallet = new DefaultTonWalletProvider(this.bindWallet.bind(this));
35
+ this.tonWallet = new DefaultTonWalletProvider(opts.tonConnectManifestUrl, this.bindWallet.bind(this));
36
36
  }
37
37
  async init() {
38
38
  const inTelegram = isTelegramEnv();
@@ -1 +1 @@
1
- {"version":3,"file":"HmTrackingSDK.js","sourceRoot":"","sources":["../../src/sdk/HmTrackingSDK.ts"],"names":[],"mappings":"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","sourcesContent":["import { HttpClient, PROD_BASE_URL, TEST_BASE_URL } from \"./http.js\";\r\nimport { NamespacedStorage } from \"./storage.js\";\r\nimport { APIService } from \"./api.js\";\r\nimport { HmAdManager } from \"./monetag.js\";\r\nimport { AdMonitor } from \"./adMonitor.js\";\r\nimport {\r\n SDKInitOptions,\r\n TelegramUserInfo,\r\n AdPositionName,\r\n AdConfigItem,\r\n CreateAdParams,\r\n AdResponseData,\r\n MonitorUrls,\r\n MerchantPayCreateRequest,\r\n MerchantPayCreateResponseData,\r\n MerchantPayFinishRequest,\r\n MerchantPayModeListData,\r\n TonWalletProvider,\r\n MerchantPayFinishResponseData,\r\n MerchantPayQueryResultRequest,\r\n MerchantPayQueryResultResponseData,\r\n AdCallbacks,\r\n} from \"./types.js\";\r\nimport {\r\n getTelegramUserUnsafe,\r\n isTelegramEnv,\r\n getDefaultMockUser,\r\n getAnonymousBrowserUser,\r\n} from \"./telegram.js\";\r\nimport WebApp from \"@twa-dev/sdk\";\r\nimport { DefaultTonWalletProvider } from \"./tonWalletProvider.js\";\r\n\r\n/**\r\n * HmTrackingSDK\r\n * - Telegram 环境自动读取用户信息,否则使用自定义用户\r\n * - /user/auth 鉴权并缓存 token\r\n * - 封装广告位配置获取与广告创建/展示\r\n * - 集成 Monetag (脚本注入 + 展示)\r\n * - 集成 Telegram 钱包支付(基于商户支付接口)\r\n */\r\nexport class HmTrackingSDK {\r\n private storage: NamespacedStorage;\r\n private http: HttpClient;\r\n private api: APIService;\r\n private token: string | null = null;\r\n private user: TelegramUserInfo | null = null;\r\n private hmAdManager: HmAdManager;\r\n private adMonitor: AdMonitor;\r\n private tonWallet?: TonWalletProvider;\r\n\r\n constructor(private options?: SDKInitOptions) {\r\n const opts = this.options || {};\r\n this.storage = new NamespacedStorage(\r\n opts.storageKeyPrefix || \"hm_tracking_sdk\"\r\n );\r\n this.token = this.storage.get<string>(\"token\");\r\n\r\n const baseURL = opts.baseURL || TEST_BASE_URL;\r\n this.http = new HttpClient({\r\n getToken: () => this.token,\r\n onAuthError: () => this.clearAuth(),\r\n baseURL,\r\n getAppId: () =>\r\n (this.options && (this.options as SDKInitOptions).appId) || null,\r\n });\r\n this.api = new APIService(this.http);\r\n this.hmAdManager = new HmAdManager({ autoInjectScript: true });\r\n this.adMonitor = new AdMonitor((params) => this.api.adMonitor(params));\r\n this.tonWallet = new DefaultTonWalletProvider(this.bindWallet.bind(this));\r\n }\r\n\r\n async init(): Promise<void> {\r\n const inTelegram = isTelegramEnv();\r\n\r\n try {\r\n const opts = this.options || {};\r\n const tgUser = inTelegram ? getTelegramUserUnsafe() : null;\r\n // 优先级:Telegram 环境用户 > 自定义用户 > 浏览器匿名用户 > mock 用户\r\n if (tgUser) {\r\n this.user = tgUser;\r\n console.log(\"使用 Telegram 环境用户信息: 成功\");\r\n } else if (opts.customUser) {\r\n this.user = opts.customUser;\r\n console.log(\"使用自定义用户信息\");\r\n } else if (typeof window !== \"undefined\") {\r\n this.user = getAnonymousBrowserUser();\r\n console.log(\"使用浏览器匿名用户信息\");\r\n } else {\r\n this.user = getDefaultMockUser();\r\n console.log(\"使用默认Mock用户信息\");\r\n }\r\n\r\n if (!this.user) {\r\n throw new Error(\r\n \"未获取到用户信息:请在非 Telegram 环境提供 customUser\"\r\n );\r\n }\r\n\r\n // 清理旧 token,开始认证\r\n this.clearAuth();\r\n await this.auth();\r\n\r\n try {\r\n await this.hmAdManager.init();\r\n } catch (error) {\r\n console.error(\"广告管理器初始化失败,但继续执行其他初始化:\", error);\r\n }\r\n } catch (error) {\r\n console.error(\"SDK初始化失败:\", error);\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * 调用 /user/auth 并持久化 token\r\n */\r\n private async auth(): Promise<void> {\r\n try {\r\n const payload: Record<string, unknown> = {\r\n ...(this.user as Record<string, unknown>),\r\n };\r\n const notifyUrl = (this.options as SDKInitOptions | undefined)?.notifyUrl;\r\n if (notifyUrl) payload[\"notifyUrl\"] = notifyUrl;\r\n const res = await this.api.auth(payload);\r\n if (res.code !== 1) throw new Error(res.msg || \"鉴权失败\");\r\n const token = (res.data as any)?.token as string | undefined;\r\n if (!token) throw new Error(\"鉴权未返回 token\");\r\n this.token = token;\r\n this.storage.set(\"token\", token);\r\n } catch (error) {\r\n console.error(\"auth认证失败:\", error);\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * 清空鉴权状态\r\n */\r\n private clearAuth() {\r\n this.token = null;\r\n this.storage.remove(\"token\");\r\n }\r\n\r\n /**\r\n * 支付相关方法调用前校验 Telegram 环境\r\n */\r\n private ensureTelegramEnvOrThrow() {\r\n if (!isTelegramEnv()) {\r\n throw new Error(\"支付相关功能仅支持在 Telegram 环境内使用\");\r\n }\r\n }\r\n\r\n /**\r\n * 获取广告位配置\r\n */\r\n private async getAdPositionConfig(\r\n adPositionName: AdPositionName | string\r\n ): Promise<AdConfigItem[]> {\r\n const res = await this.api.getAdPositionConfig(String(adPositionName));\r\n if (res.code !== 1) throw new Error(res.msg || \"获取广告位配置失败\");\r\n return res.data || [];\r\n }\r\n\r\n /**\r\n * 创建广告\r\n */\r\n private async createAd(params: CreateAdParams): Promise<AdResponseData> {\r\n const res = await this.api.createAd(params);\r\n if (res.code !== 1) throw new Error(res.msg || \"创建广告失败\");\r\n const data = res.data as AdResponseData;\r\n\r\n if (data?.spaceId) {\r\n await this.hmAdManager.setSpace(String(data.spaceId));\r\n }\r\n\r\n return data;\r\n }\r\n\r\n /**\r\n * 展示广告(插屏/激励)传入 adPositionName,SDK 将自动完成:获取配置 -> 创建广告 -> 展示\r\n * - 自动调用监测 URL(第一个链接走 /v2/ad/monitor,其余直接 GET)\r\n */\r\n async showHmAdByPosition(\r\n adPositionName: AdPositionName | string,\r\n callbacks?: AdCallbacks\r\n ): Promise<void> {\r\n const configs = await this.getAdPositionConfig(adPositionName);\r\n if (!configs || configs.length === 0) {\r\n throw new Error(\"未找到广告位配置\");\r\n }\r\n const cfg = configs[0];\r\n const ad = await this.createAd({\r\n adId: cfg.adId,\r\n adPositionId: cfg.adPositionId,\r\n });\r\n const monitor: MonitorUrls = {\r\n start: ad.start,\r\n show: ad.show,\r\n error: ad.error,\r\n close: ad.close,\r\n reward: ad.reward,\r\n };\r\n await this.showHmAdWithMonitor(monitor, ad.adShowId, callbacks);\r\n }\r\n\r\n private async showHmAdWithMonitor(\r\n monitor: MonitorUrls,\r\n adShowId?: string,\r\n callbacks?: AdCallbacks\r\n ): Promise<void> {\r\n const id = adShowId || \"\";\r\n await this.adMonitor.send(monitor.start, id);\r\n await this.adMonitor.send(monitor.show, id);\r\n try {\r\n await this.hmAdManager.show();\r\n await this.adMonitor.send(monitor.close, id);\r\n const rewardResp = await this.adMonitor.send(monitor.reward, id);\r\n if (callbacks?.onSuccess) await callbacks.onSuccess(rewardResp);\r\n } catch (e) {\r\n await this.adMonitor.send(monitor.error, id);\r\n if (callbacks?.onError) await callbacks.onError(e);\r\n throw e;\r\n }\r\n }\r\n\r\n async showHmPopupAd(\r\n monitor: MonitorUrls,\r\n adShowId?: string,\r\n callbacks?: AdCallbacks\r\n ): Promise<void> {\r\n const id = adShowId || \"\";\r\n await this.adMonitor.send(monitor.start, id);\r\n await this.adMonitor.send(monitor.show, id);\r\n try {\r\n await this.hmAdManager.showPopup();\r\n await this.adMonitor.send(monitor.close, id);\r\n const rewardResp = await this.adMonitor.send(monitor.reward, id);\r\n if (callbacks?.onSuccess) await callbacks.onSuccess(rewardResp);\r\n } catch (e) {\r\n await this.adMonitor.send(monitor.error, id);\r\n if (callbacks?.onError) await callbacks.onError(e);\r\n throw e;\r\n }\r\n }\r\n\r\n async showHmInAppAd(\r\n monitor: MonitorUrls,\r\n inAppOptions?: any,\r\n adShowId?: string,\r\n callbacks?: AdCallbacks\r\n ): Promise<void> {\r\n const id = adShowId || \"\";\r\n await this.adMonitor.send(monitor.start, id);\r\n await this.adMonitor.send(monitor.show, id);\r\n try {\r\n await this.hmAdManager.showInApp(inAppOptions);\r\n await this.adMonitor.send(monitor.close, id);\r\n const rewardResp = await this.adMonitor.send(monitor.reward, id);\r\n if (callbacks?.onSuccess) await callbacks.onSuccess(rewardResp);\r\n } catch (e) {\r\n await this.adMonitor.send(monitor.error, id);\r\n if (callbacks?.onError) await callbacks.onError(e);\r\n throw e;\r\n }\r\n }\r\n\r\n /**\r\n * 绑定钱包地址到服务器\r\n */\r\n private async bindWallet(walletAddress: string): Promise<void> {\r\n try {\r\n const res = await this.api.bindWalletReq({\r\n wallet: walletAddress,\r\n forceBind: true,\r\n });\r\n if (res.code !== 1) {\r\n console.warn(\"钱包地址绑定失败:\", res.msg);\r\n return;\r\n }\r\n } catch (error) {\r\n console.error(\"钱包地址绑定请求失败:\", error);\r\n throw error;\r\n }\r\n }\r\n\r\n async disconnectWallet(): Promise<boolean> {\r\n try {\r\n if (!this.tonWallet) return true;\r\n await this.tonWallet.disconnect();\r\n return !this.tonWallet.isConnected();\r\n } catch (e) {\r\n console.error(\"断开 Ton 钱包失败:\", e);\r\n return false;\r\n }\r\n }\r\n\r\n async connectWallet(): Promise<boolean> {\r\n if (!this.tonWallet) return false;\r\n return await this.tonWallet.connect();\r\n }\r\n\r\n isWalletConnected(): boolean {\r\n return !!this.tonWallet?.isConnected();\r\n }\r\n\r\n async ensureWalletConnected(): Promise<boolean> {\r\n this.ensureTelegramEnvOrThrow();\r\n if (!this.tonWallet) return false;\r\n return await this.tonWallet.connect();\r\n }\r\n\r\n async getSupportedPayModes(): Promise<MerchantPayModeListData> {\r\n const res = await this.api.merchantPayModeList();\r\n if (res.code !== 1) throw new Error(res.msg || \"获取支付方式失败\");\r\n const raw: any = res.data as any;\r\n if (Array.isArray(raw)) {\r\n return { payModeList: raw };\r\n }\r\n const list = Array.isArray(raw?.payModeList) ? raw.payModeList : [];\r\n return { payModeList: list };\r\n }\r\n\r\n async merchantPayQueryResult(\r\n data: MerchantPayQueryResultRequest\r\n ): Promise<MerchantPayQueryResultResponseData> {\r\n const res = await this.api.merchantPayQueryResult(data);\r\n if (res.code !== 1) throw new Error(res.msg || \"查询支付结果失败\");\r\n return res.data;\r\n }\r\n\r\n /**\r\n * 通用支付完成回调\r\n * @param orderSn 订单号\r\n * @param status 支付状态 success/failed/cancelled\r\n * @param transferHash 交易哈希(可选)\r\n */\r\n private async finishPayment(\r\n orderSn: string,\r\n status: string,\r\n transferHash: string = \"\"\r\n ): Promise<MerchantPayFinishResponseData> {\r\n const finishPayload: MerchantPayFinishRequest = {\r\n orderSn,\r\n status,\r\n transferHash,\r\n };\r\n const finishRes = await this.api.merchantPayFinish(finishPayload);\r\n if (finishRes.code !== 1) {\r\n throw new Error(finishRes.msg || \"支付完成回调失败\");\r\n }\r\n return finishRes.data;\r\n }\r\n\r\n async payByMerchant(\r\n data: MerchantPayCreateRequest\r\n ): Promise<MerchantPayFinishResponseData> {\r\n this.ensureTelegramEnvOrThrow();\r\n const upperCurrency = data.currencyName?.toUpperCase();\r\n const createRes = await this.api.merchantPayCreate(data);\r\n if (createRes.code !== 1)\r\n throw new Error(createRes.msg || \"创建支付订单失败\");\r\n const order = createRes.data;\r\n\r\n // Stars 支付:无需连接钱包,直接拉起发票(若 payUrl 存在)\r\n if (upperCurrency === \"STARS\" && order.payUrl) {\r\n try {\r\n await new Promise<void>((resolve, reject) => {\r\n WebApp.openInvoice(order.payUrl as any, (status) => {\r\n // status 可能是 \"paid\", \"cancelled\", \"failed\" 等\r\n if (status === \"paid\") {\r\n resolve();\r\n } else {\r\n reject(new Error(`星币支付未完成: ${status || \"未知状态\"}`));\r\n }\r\n });\r\n });\r\n // 星币支付成功后调用支付完成回调并返回结果\r\n const finishRes = await this.finishPayment(order.orderSn, \"success\");\r\n return finishRes;\r\n } catch (error) {\r\n // 支付失败或取消\r\n const finishRes = await this.finishPayment(order.orderSn, \"failed\");\r\n return finishRes;\r\n }\r\n }\r\n\r\n // 其他币种需已连接钱包(仅判断连接状态,不主动连接或上报)\r\n if (!this.tonWallet || !this.tonWallet.isConnected()) {\r\n throw new Error(\"请先连接钱包\");\r\n }\r\n const msg = order.transferData?.messages?.[0];\r\n if (!msg) throw new Error(\"订单未返回链上消息\");\r\n\r\n let result;\r\n try {\r\n if (upperCurrency === \"TON\") {\r\n result = await this.tonWallet.sendTonTransaction(order.transferData);\r\n } else if (upperCurrency === \"USDT\") {\r\n result = await this.tonWallet.sendUsdtTransaction(order.transferData);\r\n } else {\r\n // 其他币种暂不处理\r\n throw new Error(\"暂不支持的币种\");\r\n }\r\n\r\n const transferHash = (result as any)?.transferHash;\r\n const finishRes = await this.finishPayment(\r\n order.orderSn,\r\n \"success\",\r\n transferHash || \"\"\r\n );\r\n return finishRes;\r\n } catch (error) {\r\n // 支付失败或取消\r\n const finishRes = await this.finishPayment(order.orderSn, \"failed\");\r\n return finishRes;\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"HmTrackingSDK.js","sourceRoot":"","sources":["../../src/sdk/HmTrackingSDK.ts"],"names":[],"mappings":"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","sourcesContent":["import { HttpClient, PROD_BASE_URL, TEST_BASE_URL } from \"./http.js\";\r\nimport { NamespacedStorage } from \"./storage.js\";\r\nimport { APIService } from \"./api.js\";\r\nimport { HmAdManager } from \"./monetag.js\";\r\nimport { AdMonitor } from \"./adMonitor.js\";\r\nimport {\r\n SDKInitOptions,\r\n TelegramUserInfo,\r\n AdPositionName,\r\n AdConfigItem,\r\n CreateAdParams,\r\n AdResponseData,\r\n MonitorUrls,\r\n MerchantPayCreateRequest,\r\n MerchantPayCreateResponseData,\r\n MerchantPayFinishRequest,\r\n MerchantPayModeListData,\r\n TonWalletProvider,\r\n MerchantPayFinishResponseData,\r\n MerchantPayQueryResultRequest,\r\n MerchantPayQueryResultResponseData,\r\n AdCallbacks,\r\n} from \"./types.js\";\r\nimport {\r\n getTelegramUserUnsafe,\r\n isTelegramEnv,\r\n getDefaultMockUser,\r\n getAnonymousBrowserUser,\r\n} from \"./telegram.js\";\r\nimport WebApp from \"@twa-dev/sdk\";\r\nimport { DefaultTonWalletProvider } from \"./tonWalletProvider.js\";\r\n\r\n/**\r\n * HmTrackingSDK\r\n * - Telegram 环境自动读取用户信息,否则使用自定义用户\r\n * - /user/auth 鉴权并缓存 token\r\n * - 封装广告位配置获取与广告创建/展示\r\n * - 集成 Monetag (脚本注入 + 展示)\r\n * - 集成 Telegram 钱包支付(基于商户支付接口)\r\n */\r\nexport class HmTrackingSDK {\r\n private storage: NamespacedStorage;\r\n private http: HttpClient;\r\n private api: APIService;\r\n private token: string | null = null;\r\n private user: TelegramUserInfo | null = null;\r\n private hmAdManager: HmAdManager;\r\n private adMonitor: AdMonitor;\r\n private tonWallet?: TonWalletProvider;\r\n\r\n constructor(private options?: SDKInitOptions) {\r\n const opts = this.options || {};\r\n this.storage = new NamespacedStorage(\r\n opts.storageKeyPrefix || \"hm_tracking_sdk\"\r\n );\r\n this.token = this.storage.get<string>(\"token\");\r\n\r\n const baseURL = opts.baseURL || TEST_BASE_URL;\r\n this.http = new HttpClient({\r\n getToken: () => this.token,\r\n onAuthError: () => this.clearAuth(),\r\n baseURL,\r\n getAppId: () =>\r\n (this.options && (this.options as SDKInitOptions).appId) || null,\r\n });\r\n this.api = new APIService(this.http);\r\n this.hmAdManager = new HmAdManager({ autoInjectScript: true });\r\n this.adMonitor = new AdMonitor((params) => this.api.adMonitor(params));\r\n this.tonWallet = new DefaultTonWalletProvider(\r\n opts.tonConnectManifestUrl,\r\n this.bindWallet.bind(this)\r\n );\r\n }\r\n\r\n async init(): Promise<void> {\r\n const inTelegram = isTelegramEnv();\r\n\r\n try {\r\n const opts = this.options || {};\r\n const tgUser = inTelegram ? getTelegramUserUnsafe() : null;\r\n // 优先级:Telegram 环境用户 > 自定义用户 > 浏览器匿名用户 > mock 用户\r\n if (tgUser) {\r\n this.user = tgUser;\r\n console.log(\"使用 Telegram 环境用户信息: 成功\");\r\n } else if (opts.customUser) {\r\n this.user = opts.customUser;\r\n console.log(\"使用自定义用户信息\");\r\n } else if (typeof window !== \"undefined\") {\r\n this.user = getAnonymousBrowserUser();\r\n console.log(\"使用浏览器匿名用户信息\");\r\n } else {\r\n this.user = getDefaultMockUser();\r\n console.log(\"使用默认Mock用户信息\");\r\n }\r\n\r\n if (!this.user) {\r\n throw new Error(\r\n \"未获取到用户信息:请在非 Telegram 环境提供 customUser\"\r\n );\r\n }\r\n\r\n // 清理旧 token,开始认证\r\n this.clearAuth();\r\n await this.auth();\r\n\r\n try {\r\n await this.hmAdManager.init();\r\n } catch (error) {\r\n console.error(\"广告管理器初始化失败,但继续执行其他初始化:\", error);\r\n }\r\n } catch (error) {\r\n console.error(\"SDK初始化失败:\", error);\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * 调用 /user/auth 并持久化 token\r\n */\r\n private async auth(): Promise<void> {\r\n try {\r\n const payload: Record<string, unknown> = {\r\n ...(this.user as Record<string, unknown>),\r\n };\r\n const notifyUrl = (this.options as SDKInitOptions | undefined)?.notifyUrl;\r\n if (notifyUrl) payload[\"notifyUrl\"] = notifyUrl;\r\n const res = await this.api.auth(payload);\r\n if (res.code !== 1) throw new Error(res.msg || \"鉴权失败\");\r\n const token = (res.data as any)?.token as string | undefined;\r\n if (!token) throw new Error(\"鉴权未返回 token\");\r\n this.token = token;\r\n this.storage.set(\"token\", token);\r\n } catch (error) {\r\n console.error(\"auth认证失败:\", error);\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * 清空鉴权状态\r\n */\r\n private clearAuth() {\r\n this.token = null;\r\n this.storage.remove(\"token\");\r\n }\r\n\r\n /**\r\n * 支付相关方法调用前校验 Telegram 环境\r\n */\r\n private ensureTelegramEnvOrThrow() {\r\n if (!isTelegramEnv()) {\r\n throw new Error(\"支付相关功能仅支持在 Telegram 环境内使用\");\r\n }\r\n }\r\n\r\n /**\r\n * 获取广告位配置\r\n */\r\n private async getAdPositionConfig(\r\n adPositionName: AdPositionName | string\r\n ): Promise<AdConfigItem[]> {\r\n const res = await this.api.getAdPositionConfig(String(adPositionName));\r\n if (res.code !== 1) throw new Error(res.msg || \"获取广告位配置失败\");\r\n return res.data || [];\r\n }\r\n\r\n /**\r\n * 创建广告\r\n */\r\n private async createAd(params: CreateAdParams): Promise<AdResponseData> {\r\n const res = await this.api.createAd(params);\r\n if (res.code !== 1) throw new Error(res.msg || \"创建广告失败\");\r\n const data = res.data as AdResponseData;\r\n\r\n if (data?.spaceId) {\r\n await this.hmAdManager.setSpace(String(data.spaceId));\r\n }\r\n\r\n return data;\r\n }\r\n\r\n /**\r\n * 展示广告(插屏/激励)传入 adPositionName,SDK 将自动完成:获取配置 -> 创建广告 -> 展示\r\n * - 自动调用监测 URL(第一个链接走 /v2/ad/monitor,其余直接 GET)\r\n */\r\n async showHmAdByPosition(\r\n adPositionName: AdPositionName | string,\r\n callbacks?: AdCallbacks\r\n ): Promise<void> {\r\n const configs = await this.getAdPositionConfig(adPositionName);\r\n if (!configs || configs.length === 0) {\r\n throw new Error(\"未找到广告位配置\");\r\n }\r\n const cfg = configs[0];\r\n const ad = await this.createAd({\r\n adId: cfg.adId,\r\n adPositionId: cfg.adPositionId,\r\n });\r\n const monitor: MonitorUrls = {\r\n start: ad.start,\r\n show: ad.show,\r\n error: ad.error,\r\n close: ad.close,\r\n reward: ad.reward,\r\n };\r\n await this.showHmAdWithMonitor(monitor, ad.adShowId, callbacks);\r\n }\r\n\r\n private async showHmAdWithMonitor(\r\n monitor: MonitorUrls,\r\n adShowId?: string,\r\n callbacks?: AdCallbacks\r\n ): Promise<void> {\r\n const id = adShowId || \"\";\r\n await this.adMonitor.send(monitor.start, id);\r\n await this.adMonitor.send(monitor.show, id);\r\n try {\r\n await this.hmAdManager.show();\r\n await this.adMonitor.send(monitor.close, id);\r\n const rewardResp = await this.adMonitor.send(monitor.reward, id);\r\n if (callbacks?.onSuccess) await callbacks.onSuccess(rewardResp);\r\n } catch (e) {\r\n await this.adMonitor.send(monitor.error, id);\r\n if (callbacks?.onError) await callbacks.onError(e);\r\n throw e;\r\n }\r\n }\r\n\r\n async showHmPopupAd(\r\n monitor: MonitorUrls,\r\n adShowId?: string,\r\n callbacks?: AdCallbacks\r\n ): Promise<void> {\r\n const id = adShowId || \"\";\r\n await this.adMonitor.send(monitor.start, id);\r\n await this.adMonitor.send(monitor.show, id);\r\n try {\r\n await this.hmAdManager.showPopup();\r\n await this.adMonitor.send(monitor.close, id);\r\n const rewardResp = await this.adMonitor.send(monitor.reward, id);\r\n if (callbacks?.onSuccess) await callbacks.onSuccess(rewardResp);\r\n } catch (e) {\r\n await this.adMonitor.send(monitor.error, id);\r\n if (callbacks?.onError) await callbacks.onError(e);\r\n throw e;\r\n }\r\n }\r\n\r\n async showHmInAppAd(\r\n monitor: MonitorUrls,\r\n inAppOptions?: any,\r\n adShowId?: string,\r\n callbacks?: AdCallbacks\r\n ): Promise<void> {\r\n const id = adShowId || \"\";\r\n await this.adMonitor.send(monitor.start, id);\r\n await this.adMonitor.send(monitor.show, id);\r\n try {\r\n await this.hmAdManager.showInApp(inAppOptions);\r\n await this.adMonitor.send(monitor.close, id);\r\n const rewardResp = await this.adMonitor.send(monitor.reward, id);\r\n if (callbacks?.onSuccess) await callbacks.onSuccess(rewardResp);\r\n } catch (e) {\r\n await this.adMonitor.send(monitor.error, id);\r\n if (callbacks?.onError) await callbacks.onError(e);\r\n throw e;\r\n }\r\n }\r\n\r\n /**\r\n * 绑定钱包地址到服务器\r\n */\r\n private async bindWallet(walletAddress: string): Promise<void> {\r\n try {\r\n const res = await this.api.bindWalletReq({\r\n wallet: walletAddress,\r\n forceBind: true,\r\n });\r\n if (res.code !== 1) {\r\n console.warn(\"钱包地址绑定失败:\", res.msg);\r\n return;\r\n }\r\n } catch (error) {\r\n console.error(\"钱包地址绑定请求失败:\", error);\r\n throw error;\r\n }\r\n }\r\n\r\n async disconnectWallet(): Promise<boolean> {\r\n try {\r\n if (!this.tonWallet) return true;\r\n await this.tonWallet.disconnect();\r\n return !this.tonWallet.isConnected();\r\n } catch (e) {\r\n console.error(\"断开 Ton 钱包失败:\", e);\r\n return false;\r\n }\r\n }\r\n\r\n async connectWallet(): Promise<boolean> {\r\n if (!this.tonWallet) return false;\r\n return await this.tonWallet.connect();\r\n }\r\n\r\n isWalletConnected(): boolean {\r\n return !!this.tonWallet?.isConnected();\r\n }\r\n\r\n async ensureWalletConnected(): Promise<boolean> {\r\n this.ensureTelegramEnvOrThrow();\r\n if (!this.tonWallet) return false;\r\n return await this.tonWallet.connect();\r\n }\r\n\r\n async getSupportedPayModes(): Promise<MerchantPayModeListData> {\r\n const res = await this.api.merchantPayModeList();\r\n if (res.code !== 1) throw new Error(res.msg || \"获取支付方式失败\");\r\n const raw: any = res.data as any;\r\n if (Array.isArray(raw)) {\r\n return { payModeList: raw };\r\n }\r\n const list = Array.isArray(raw?.payModeList) ? raw.payModeList : [];\r\n return { payModeList: list };\r\n }\r\n\r\n async merchantPayQueryResult(\r\n data: MerchantPayQueryResultRequest\r\n ): Promise<MerchantPayQueryResultResponseData> {\r\n const res = await this.api.merchantPayQueryResult(data);\r\n if (res.code !== 1) throw new Error(res.msg || \"查询支付结果失败\");\r\n return res.data;\r\n }\r\n\r\n /**\r\n * 通用支付完成回调\r\n * @param orderSn 订单号\r\n * @param status 支付状态 success/failed/cancelled\r\n * @param transferHash 交易哈希(可选)\r\n */\r\n private async finishPayment(\r\n orderSn: string,\r\n status: string,\r\n transferHash: string = \"\"\r\n ): Promise<MerchantPayFinishResponseData> {\r\n const finishPayload: MerchantPayFinishRequest = {\r\n orderSn,\r\n status,\r\n transferHash,\r\n };\r\n const finishRes = await this.api.merchantPayFinish(finishPayload);\r\n if (finishRes.code !== 1) {\r\n throw new Error(finishRes.msg || \"支付完成回调失败\");\r\n }\r\n return finishRes.data;\r\n }\r\n\r\n async payByMerchant(\r\n data: MerchantPayCreateRequest\r\n ): Promise<MerchantPayFinishResponseData> {\r\n this.ensureTelegramEnvOrThrow();\r\n const upperCurrency = data.currencyName?.toUpperCase();\r\n const createRes = await this.api.merchantPayCreate(data);\r\n if (createRes.code !== 1)\r\n throw new Error(createRes.msg || \"创建支付订单失败\");\r\n const order = createRes.data;\r\n\r\n // Stars 支付:无需连接钱包,直接拉起发票(若 payUrl 存在)\r\n if (upperCurrency === \"STARS\" && order.payUrl) {\r\n try {\r\n await new Promise<void>((resolve, reject) => {\r\n WebApp.openInvoice(order.payUrl as any, (status) => {\r\n // status 可能是 \"paid\", \"cancelled\", \"failed\" 等\r\n if (status === \"paid\") {\r\n resolve();\r\n } else {\r\n reject(new Error(`星币支付未完成: ${status || \"未知状态\"}`));\r\n }\r\n });\r\n });\r\n // 星币支付成功后调用支付完成回调并返回结果\r\n const finishRes = await this.finishPayment(order.orderSn, \"success\");\r\n return finishRes;\r\n } catch (error) {\r\n // 支付失败或取消\r\n const finishRes = await this.finishPayment(order.orderSn, \"failed\");\r\n return finishRes;\r\n }\r\n }\r\n\r\n // 其他币种需已连接钱包(仅判断连接状态,不主动连接或上报)\r\n if (!this.tonWallet || !this.tonWallet.isConnected()) {\r\n throw new Error(\"请先连接钱包\");\r\n }\r\n const msg = order.transferData?.messages?.[0];\r\n if (!msg) throw new Error(\"订单未返回链上消息\");\r\n\r\n let result;\r\n try {\r\n if (upperCurrency === \"TON\") {\r\n result = await this.tonWallet.sendTonTransaction(order.transferData);\r\n } else if (upperCurrency === \"USDT\") {\r\n result = await this.tonWallet.sendUsdtTransaction(order.transferData);\r\n } else {\r\n // 其他币种暂不处理\r\n throw new Error(\"暂不支持的币种\");\r\n }\r\n\r\n const transferHash = (result as any)?.transferHash;\r\n const finishRes = await this.finishPayment(\r\n order.orderSn,\r\n \"success\",\r\n transferHash || \"\"\r\n );\r\n return finishRes;\r\n } catch (error) {\r\n // 支付失败或取消\r\n const finishRes = await this.finishPayment(order.orderSn, \"failed\");\r\n return finishRes;\r\n }\r\n }\r\n}\r\n"]}
@@ -37,22 +37,23 @@ export function getTelegramUserUnsafe() {
37
37
  console.warn("Telegram用户信息结构不完整");
38
38
  return null;
39
39
  }
40
- // 确保包含必要字段
40
+ // 返回与 TelegramUserInfo 一致的嵌套 user 结构(snake_case)
41
41
  const userInfo = {
42
42
  user: {
43
43
  id: initDataUnsafe.user.id,
44
- firstName: initDataUnsafe.user.first_name || "",
45
- lastName: initDataUnsafe.user.last_name || "",
44
+ first_name: initDataUnsafe.user.first_name || "",
45
+ last_name: initDataUnsafe.user.last_name || "",
46
46
  username: initDataUnsafe.user.username,
47
- languageCode: initDataUnsafe.user.language_code,
48
- isPremium: initDataUnsafe.user.is_premium || false,
49
- allowsWriteToPm: initDataUnsafe.user.allows_write_to_pm || false,
47
+ photo_url: initDataUnsafe.user.photo_url,
48
+ language_code: initDataUnsafe.user.language_code,
49
+ allows_write_to_pm: initDataUnsafe.user.allows_write_to_pm || false,
50
+ is_premium: initDataUnsafe.user.is_premium || false,
50
51
  },
51
- authDate: new Date().toISOString(),
52
+ auth_date: initDataUnsafe.auth_date,
52
53
  hash: initDataUnsafe.hash || "",
53
- startParam: initDataUnsafe.start_param,
54
- chatType: initDataUnsafe.chat_type,
55
- chatInstance: initDataUnsafe.chat_instance,
54
+ start_param: initDataUnsafe.start_param,
55
+ chat_type: initDataUnsafe.chat_type,
56
+ chat_instance: initDataUnsafe.chat_instance,
56
57
  };
57
58
  return userInfo;
58
59
  }
@@ -101,18 +102,17 @@ export function getAnonymousBrowserUser(cookieName = "tg_tracking_uid") {
101
102
  return {
102
103
  user: {
103
104
  id: uidNum,
104
- firstName: "Guest",
105
- lastName: "",
105
+ first_name: "Guest",
106
+ last_name: "",
106
107
  username: `guest_${uidStr.slice(-6)}`,
107
- languageCode: lang.toLowerCase(),
108
- isPremium: false,
109
- allowsWriteToPm: false,
108
+ language_code: lang.toLowerCase(),
109
+ allows_write_to_pm: false,
110
110
  },
111
- authDate: new Date().toISOString(),
111
+ auth_date: Math.floor(Date.now() / 1000),
112
112
  hash: "anonymous_cookie_user",
113
- startParam: "browser_guest",
114
- chatType: "sender",
115
- chatInstance: "",
113
+ start_param: "browser_guest",
114
+ chat_type: "sender",
115
+ chat_instance: "",
116
116
  };
117
117
  }
118
118
  /**
@@ -122,18 +122,18 @@ export function getDefaultMockUser() {
122
122
  return {
123
123
  user: {
124
124
  id: 2077220643,
125
- firstName: "Mock",
126
- lastName: "User",
125
+ first_name: "Mock",
126
+ last_name: "User",
127
127
  username: "mock_user_demo",
128
- languageCode: "zh-hans",
129
- isPremium: true,
130
- allowsWriteToPm: true,
128
+ language_code: "zh-hans",
129
+ allows_write_to_pm: true,
130
+ is_premium: true,
131
131
  },
132
- authDate: new Date().toISOString(),
132
+ auth_date: Math.floor(Date.now() / 1000),
133
133
  hash: "mock_hash_for_demo_purpose",
134
- startParam: "demo_start_param",
135
- chatType: "sender",
136
- chatInstance: "-245769840322609948",
134
+ start_param: "demo_start_param",
135
+ chat_type: "sender",
136
+ chat_instance: "-245769840322609948",
137
137
  };
138
138
  }
139
139
  //# sourceMappingURL=telegram.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"telegram.js","sourceRoot":"","sources":["../../src/sdk/telegram.ts"],"names":[],"mappings":"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","sourcesContent":["import WebApp from \"@twa-dev/sdk\";\r\nimport type { TelegramUserInfo } from \"./types.js\";\r\n\r\n/**\r\n * 尝试获取启动参数,检查是否在 Telegram 环境中\r\n */\r\nfunction retrieveLaunchParams() {\r\n if (!WebApp.initData || WebApp.initData === \"\") {\r\n throw new Error(\"未能提取启动参数,不在 Telegram 环境中\");\r\n }\r\n return WebApp.initData;\r\n}\r\n\r\nexport function isTelegramEnv(): boolean {\r\n try {\r\n // 检查 WebApp 对象是否存在且 initData 可用\r\n if (\r\n typeof window !== \"undefined\" &&\r\n (window as any).Telegram &&\r\n (window as any).Telegram.WebApp\r\n ) {\r\n // 如果能够提取启动参数,说明已经在 Telegram 环境中\r\n retrieveLaunchParams();\r\n return true;\r\n }\r\n return false;\r\n } catch (error) {\r\n console.warn(\"非Telegram环境\");\r\n return false;\r\n }\r\n}\r\n\r\nexport function getTelegramUserUnsafe(): TelegramUserInfo | null {\r\n try {\r\n // 确保 WebApp 对象存在\r\n if (!WebApp || !WebApp.initDataUnsafe) {\r\n return null;\r\n }\r\n\r\n const initDataUnsafe = WebApp.initDataUnsafe;\r\n\r\n // 验证用户信息的基本结构\r\n if (!initDataUnsafe.user || !initDataUnsafe.user.id) {\r\n console.warn(\"Telegram用户信息结构不完整\");\r\n return null;\r\n }\r\n\r\n // 确保包含必要字段\r\n const userInfo: TelegramUserInfo = {\r\n user: {\r\n id: initDataUnsafe.user.id,\r\n firstName: initDataUnsafe.user.first_name || \"\",\r\n lastName: initDataUnsafe.user.last_name || \"\",\r\n username: initDataUnsafe.user.username,\r\n languageCode: initDataUnsafe.user.language_code,\r\n isPremium: initDataUnsafe.user.is_premium || false,\r\n allowsWriteToPm: initDataUnsafe.user.allows_write_to_pm || false,\r\n },\r\n authDate: new Date().toISOString(),\r\n hash: initDataUnsafe.hash || \"\",\r\n startParam: initDataUnsafe.start_param,\r\n chatType: initDataUnsafe.chat_type,\r\n chatInstance: initDataUnsafe.chat_instance,\r\n };\r\n\r\n return userInfo;\r\n } catch (error) {\r\n console.warn(\"获取Telegram用户信息失败:\", error);\r\n return null;\r\n }\r\n}\r\n\r\n/** Cookie 工具 **/\r\nfunction readCookie(name: string): string | null {\r\n if (typeof document === \"undefined\") return null;\r\n const match = document.cookie.match(\r\n new RegExp(\r\n \"(?:^|; )\" + name.replace(/([.$?*|{}()\\[\\]\\\\/+^])/g, \"\\\\$1\") + \"=([^;]*)\"\r\n )\r\n );\r\n return match ? decodeURIComponent(match[1]) : null;\r\n}\r\n\r\nfunction writeCookie(name: string, value: string, days = 365 * 2) {\r\n if (typeof document === \"undefined\") return;\r\n const date = new Date();\r\n date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);\r\n const expires = \"; expires=\" + date.toUTCString();\r\n document.cookie = `${encodeURIComponent(name)}=${encodeURIComponent(\r\n value\r\n )}${expires}; path=/`;\r\n}\r\n\r\nfunction generateNumericId(): number {\r\n // 生成稳定的数值 ID(53-bit 安全整数范围内)\r\n const rand = Math.floor(Math.random() * 1e9);\r\n const time = Date.now() % 1e9;\r\n const id = Number(\r\n String(time).padStart(9, \"0\") + String(rand).padStart(9, \"0\")\r\n );\r\n return id;\r\n}\r\n\r\n/**\r\n * 基于 Cookie 的匿名浏览器用户(非 Telegram 环境使用)\r\n * - 会在 cookie 中持久化 uid,下次复用\r\n */\r\nexport function getAnonymousBrowserUser(\r\n cookieName = \"tg_tracking_uid\"\r\n): TelegramUserInfo {\r\n let uidStr = readCookie(cookieName);\r\n if (!uidStr) {\r\n const uid = generateNumericId();\r\n uidStr = String(uid);\r\n writeCookie(cookieName, uidStr);\r\n }\r\n const uidNum =\r\n Number(uidStr.replace(/\\D/g, \"\").slice(0, 15)) || generateNumericId();\r\n const lang =\r\n (typeof navigator !== \"undefined\" &&\r\n (navigator.language || (navigator as any).userLanguage)) ||\r\n \"en\";\r\n\r\n return {\r\n user: {\r\n id: uidNum,\r\n firstName: \"Guest\",\r\n lastName: \"\",\r\n username: `guest_${uidStr.slice(-6)}`,\r\n languageCode: lang.toLowerCase(),\r\n isPremium: false,\r\n allowsWriteToPm: false,\r\n },\r\n authDate: new Date().toISOString(),\r\n hash: \"anonymous_cookie_user\",\r\n startParam: \"browser_guest\",\r\n chatType: \"sender\",\r\n chatInstance: \"\",\r\n } as TelegramUserInfo;\r\n}\r\n\r\n/**\r\n * 获取默认的 mock 用户信息(保留旧逻辑)\r\n */\r\nexport function getDefaultMockUser(): TelegramUserInfo {\r\n return {\r\n user: {\r\n id: 2077220643,\r\n firstName: \"Mock\",\r\n lastName: \"User\",\r\n username: \"mock_user_demo\",\r\n languageCode: \"zh-hans\",\r\n isPremium: true,\r\n allowsWriteToPm: true,\r\n },\r\n authDate: new Date().toISOString(),\r\n hash: \"mock_hash_for_demo_purpose\",\r\n startParam: \"demo_start_param\",\r\n chatType: \"sender\",\r\n chatInstance: \"-245769840322609948\",\r\n };\r\n}\r\n"]}
1
+ {"version":3,"file":"telegram.js","sourceRoot":"","sources":["../../src/sdk/telegram.ts"],"names":[],"mappings":"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","sourcesContent":["import WebApp from \"@twa-dev/sdk\";\r\nimport type { TelegramUserInfo } from \"./types.js\";\r\n\r\n/**\r\n * 尝试获取启动参数,检查是否在 Telegram 环境中\r\n */\r\nfunction retrieveLaunchParams() {\r\n if (!WebApp.initData || WebApp.initData === \"\") {\r\n throw new Error(\"未能提取启动参数,不在 Telegram 环境中\");\r\n }\r\n return WebApp.initData;\r\n}\r\n\r\nexport function isTelegramEnv(): boolean {\r\n try {\r\n // 检查 WebApp 对象是否存在且 initData 可用\r\n if (\r\n typeof window !== \"undefined\" &&\r\n (window as any).Telegram &&\r\n (window as any).Telegram.WebApp\r\n ) {\r\n // 如果能够提取启动参数,说明已经在 Telegram 环境中\r\n retrieveLaunchParams();\r\n return true;\r\n }\r\n return false;\r\n } catch (error) {\r\n console.warn(\"非Telegram环境\");\r\n return false;\r\n }\r\n}\r\n\r\nexport function getTelegramUserUnsafe(): TelegramUserInfo | null {\r\n try {\r\n // 确保 WebApp 对象存在\r\n if (!WebApp || !WebApp.initDataUnsafe) {\r\n return null;\r\n }\r\n\r\n const initDataUnsafe = WebApp.initDataUnsafe;\r\n\r\n // 验证用户信息的基本结构\r\n if (!initDataUnsafe.user || !initDataUnsafe.user.id) {\r\n console.warn(\"Telegram用户信息结构不完整\");\r\n return null;\r\n }\r\n\r\n // 返回与 TelegramUserInfo 一致的嵌套 user 结构(snake_case)\r\n const userInfo: TelegramUserInfo = {\r\n user: {\r\n id: initDataUnsafe.user.id,\r\n first_name: initDataUnsafe.user.first_name || \"\",\r\n last_name: initDataUnsafe.user.last_name || \"\",\r\n username: initDataUnsafe.user.username,\r\n photo_url: initDataUnsafe.user.photo_url,\r\n language_code: initDataUnsafe.user.language_code,\r\n allows_write_to_pm: initDataUnsafe.user.allows_write_to_pm || false,\r\n is_premium: initDataUnsafe.user.is_premium || false,\r\n },\r\n auth_date: initDataUnsafe.auth_date,\r\n hash: initDataUnsafe.hash || \"\",\r\n start_param: initDataUnsafe.start_param,\r\n chat_type: initDataUnsafe.chat_type,\r\n chat_instance: initDataUnsafe.chat_instance,\r\n };\r\n\r\n return userInfo;\r\n } catch (error) {\r\n console.warn(\"获取Telegram用户信息失败:\", error);\r\n return null;\r\n }\r\n}\r\n\r\n/** Cookie 工具 **/\r\nfunction readCookie(name: string): string | null {\r\n if (typeof document === \"undefined\") return null;\r\n const match = document.cookie.match(\r\n new RegExp(\r\n \"(?:^|; )\" + name.replace(/([.$?*|{}()\\[\\]\\\\/+^])/g, \"\\\\$1\") + \"=([^;]*)\"\r\n )\r\n );\r\n return match ? decodeURIComponent(match[1]) : null;\r\n}\r\n\r\nfunction writeCookie(name: string, value: string, days = 365 * 2) {\r\n if (typeof document === \"undefined\") return;\r\n const date = new Date();\r\n date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);\r\n const expires = \"; expires=\" + date.toUTCString();\r\n document.cookie = `${encodeURIComponent(name)}=${encodeURIComponent(\r\n value\r\n )}${expires}; path=/`;\r\n}\r\n\r\nfunction generateNumericId(): number {\r\n // 生成稳定的数值 ID(53-bit 安全整数范围内)\r\n const rand = Math.floor(Math.random() * 1e9);\r\n const time = Date.now() % 1e9;\r\n const id = Number(\r\n String(time).padStart(9, \"0\") + String(rand).padStart(9, \"0\")\r\n );\r\n return id;\r\n}\r\n\r\n/**\r\n * 基于 Cookie 的匿名浏览器用户(非 Telegram 环境使用)\r\n * - 会在 cookie 中持久化 uid,下次复用\r\n */\r\nexport function getAnonymousBrowserUser(\r\n cookieName = \"tg_tracking_uid\"\r\n): TelegramUserInfo {\r\n let uidStr = readCookie(cookieName);\r\n if (!uidStr) {\r\n const uid = generateNumericId();\r\n uidStr = String(uid);\r\n writeCookie(cookieName, uidStr);\r\n }\r\n const uidNum =\r\n Number(uidStr.replace(/\\D/g, \"\").slice(0, 15)) || generateNumericId();\r\n const lang =\r\n (typeof navigator !== \"undefined\" &&\r\n (navigator.language || (navigator as any).userLanguage)) ||\r\n \"en\";\r\n\r\n return {\r\n user: {\r\n id: uidNum,\r\n first_name: \"Guest\",\r\n last_name: \"\",\r\n username: `guest_${uidStr.slice(-6)}`,\r\n language_code: lang.toLowerCase(),\r\n allows_write_to_pm: false,\r\n },\r\n auth_date: Math.floor(Date.now() / 1000),\r\n hash: \"anonymous_cookie_user\",\r\n start_param: \"browser_guest\",\r\n chat_type: \"sender\",\r\n chat_instance: \"\",\r\n } as TelegramUserInfo;\r\n}\r\n\r\n/**\r\n * 获取默认的 mock 用户信息(保留旧逻辑)\r\n */\r\nexport function getDefaultMockUser(): TelegramUserInfo {\r\n return {\r\n user: {\r\n id: 2077220643,\r\n first_name: \"Mock\",\r\n last_name: \"User\",\r\n username: \"mock_user_demo\",\r\n language_code: \"zh-hans\",\r\n allows_write_to_pm: true,\r\n is_premium: true,\r\n },\r\n auth_date: Math.floor(Date.now() / 1000),\r\n hash: \"mock_hash_for_demo_purpose\",\r\n start_param: \"demo_start_param\",\r\n chat_type: \"sender\",\r\n chat_instance: \"-245769840322609948\",\r\n } as TelegramUserInfo;\r\n}\r\n"]}
@@ -2,7 +2,7 @@ import { TonWalletProvider, TonTransactionResult, MerchantPayTransferData } from
2
2
  export declare class DefaultTonWalletProvider implements TonWalletProvider {
3
3
  private ui;
4
4
  private bindWalletCallback?;
5
- constructor(bindWalletCallback?: (walletAddress: string) => Promise<void>);
5
+ constructor(manifestUrl?: string, bindWalletCallback?: (walletAddress: string) => Promise<void>);
6
6
  isConnected(): boolean;
7
7
  private reportWalletAddress;
8
8
  connect(): Promise<boolean>;
@@ -3,16 +3,19 @@ import { toUserFriendlyAddress } from "@tonconnect/sdk";
3
3
  const DEFAULT_MANIFEST_URL = "https://miniapp.spinfi.me/tonconnect-manifest.json";
4
4
  // 添加单例模式,确保TonConnectUI只被初始化一次
5
5
  let tonConnectUIInstance = null;
6
+ let currentManifestUrl = null;
6
7
  export class DefaultTonWalletProvider {
7
- constructor(bindWalletCallback) {
8
+ constructor(manifestUrl, bindWalletCallback) {
8
9
  this.bindWalletCallback = bindWalletCallback;
9
- // 使用单例模式,如果实例已经存在则重用
10
- if (!tonConnectUIInstance) {
10
+ const resolvedManifestUrl = manifestUrl || DEFAULT_MANIFEST_URL;
11
+ // 使用单例模式,如果实例不存在或 manifest 变更则创建新实例
12
+ if (!tonConnectUIInstance || currentManifestUrl !== resolvedManifestUrl) {
11
13
  try {
12
14
  // console.log("创建新的TonConnectUI实例");
13
15
  tonConnectUIInstance = new TonConnectUI({
14
- manifestUrl: DEFAULT_MANIFEST_URL,
16
+ manifestUrl: resolvedManifestUrl,
15
17
  });
18
+ currentManifestUrl = resolvedManifestUrl;
16
19
  }
17
20
  catch (error) {
18
21
  console.error("创建TonConnectUI实例失败:", error);
@@ -1 +1 @@
1
- {"version":3,"file":"tonWalletProvider.js","sourceRoot":"","sources":["../../src/sdk/tonWalletProvider.ts"],"names":[],"mappings":"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","sourcesContent":["import {\r\n TonWalletProvider,\r\n TonTransactionResult,\r\n MerchantPayTransferData,\r\n} from \"./types.js\";\r\nimport { TonConnectUI } from \"@tonconnect/ui\";\r\nimport { toUserFriendlyAddress } from \"@tonconnect/sdk\";\r\n\r\nconst DEFAULT_MANIFEST_URL =\r\n \"https://miniapp.spinfi.me/tonconnect-manifest.json\";\r\n\r\n// 添加单例模式,确保TonConnectUI只被初始化一次\r\nlet tonConnectUIInstance: TonConnectUI | null = null;\r\n\r\nexport class DefaultTonWalletProvider implements TonWalletProvider {\r\n private ui: TonConnectUI;\r\n private bindWalletCallback?: (walletAddress: string) => Promise<void>;\r\n\r\n constructor(bindWalletCallback?: (walletAddress: string) => Promise<void>) {\r\n this.bindWalletCallback = bindWalletCallback;\r\n // 使用单例模式,如果实例已经存在则重用\r\n if (!tonConnectUIInstance) {\r\n try {\r\n // console.log(\"创建新的TonConnectUI实例\");\r\n tonConnectUIInstance = new TonConnectUI({\r\n manifestUrl: DEFAULT_MANIFEST_URL,\r\n });\r\n } catch (error) {\r\n console.error(\"创建TonConnectUI实例失败:\", error);\r\n throw new Error(\"创建TonConnectUI实例失败\");\r\n }\r\n } else {\r\n // console.log(\"复用已存在的TonConnectUI实例\");\r\n }\r\n this.ui = tonConnectUIInstance;\r\n }\r\n\r\n isConnected(): boolean {\r\n try {\r\n return !!(this.ui as any)?.connected;\r\n } catch {\r\n return false;\r\n }\r\n }\r\n\r\n private async reportWalletAddress(): Promise<void> {\r\n const walletAddress = this.getUserFriendlyAddress();\r\n if (walletAddress && this.bindWalletCallback) {\r\n try {\r\n await this.bindWalletCallback(walletAddress);\r\n } catch (error) {\r\n console.error(\"钱包地址上报失败:\", error);\r\n }\r\n }\r\n }\r\n\r\n async connect(): Promise<boolean> {\r\n if (this.isConnected()) {\r\n await this.reportWalletAddress();\r\n return true;\r\n }\r\n try {\r\n await new Promise<void>((resolve, reject) => {\r\n this.ui.openModal();\r\n const unsub = this.ui.onStatusChange(() => {\r\n if (this.isConnected()) {\r\n unsub();\r\n resolve();\r\n }\r\n });\r\n // 设置超时,防止用户长时间不操作\r\n setTimeout(() => {\r\n if (!this.isConnected()) {\r\n unsub();\r\n reject(new Error(\"连接钱包超时\"));\r\n }\r\n }, 300000); // 5分钟超时\r\n });\r\n\r\n // 连接成功后,上报钱包地址\r\n await this.reportWalletAddress();\r\n\r\n return this.isConnected();\r\n } catch (e) {\r\n console.error(\"连接钱包失败:\", e);\r\n return false;\r\n }\r\n }\r\n\r\n private getUserFriendlyAddress(): string | null {\r\n const anyUi = this.ui as any;\r\n const rawAddress =\r\n anyUi?.wallet?.account?.address || anyUi?.account?.address || null;\r\n if (!rawAddress) return null;\r\n return toUserFriendlyAddress(rawAddress);\r\n }\r\n\r\n async sendTonTransaction(\r\n transferData: MerchantPayTransferData\r\n ): Promise<TonTransactionResult> {\r\n if (!this.isConnected()) {\r\n const ok = await this.connect();\r\n if (!ok) throw new Error(\"钱包未连接\");\r\n }\r\n const res = await (this.ui as any).sendTransaction(transferData);\r\n const boc: string | undefined = res?.boc;\r\n let transferHash: string | undefined;\r\n if (boc) {\r\n try {\r\n // const cell = Cell.fromBase64(boc);\r\n // transferHash = cell.hash().toString(\"base64\");\r\n transferHash = boc.substring(0, 16);\r\n // console.log(\"transferHash:\", transferHash);\r\n } catch {}\r\n }\r\n return { transferHash, boc, raw: res };\r\n }\r\n\r\n async sendUsdtTransaction(\r\n transferData: MerchantPayTransferData\r\n ): Promise<TonTransactionResult> {\r\n if (!this.isConnected()) {\r\n const ok = await this.connect();\r\n if (!ok) throw new Error(\"钱包未连接\");\r\n }\r\n const res = await (this.ui as any).sendTransaction(transferData);\r\n const boc: string | undefined = res?.boc;\r\n let transferHash: string | undefined;\r\n if (boc) {\r\n try {\r\n // const cell = Cell.fromBase64(boc);\r\n // transferHash = cell.hash().toString(\"base64\");\r\n // 简化处理,直接使用 boc 作为 hash\r\n transferHash = boc.substring(0, 16);\r\n // console.log(\"transferHash:\", transferHash);\r\n } catch {}\r\n }\r\n return { transferHash, boc, raw: res };\r\n }\r\n\r\n async disconnect(): Promise<boolean> {\r\n try {\r\n const anyUi = this.ui as any;\r\n if (anyUi?.disconnect) {\r\n await anyUi.disconnect();\r\n } else if (anyUi?.onStatusChange) {\r\n const unsub = anyUi.onStatusChange(() => {});\r\n unsub && unsub();\r\n }\r\n return !this.isConnected();\r\n } catch (e) {\r\n console.error(\"断开钱包连接失败:\", e);\r\n return false;\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"tonWalletProvider.js","sourceRoot":"","sources":["../../src/sdk/tonWalletProvider.ts"],"names":[],"mappings":"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","sourcesContent":["import {\r\n TonWalletProvider,\r\n TonTransactionResult,\r\n MerchantPayTransferData,\r\n} from \"./types.js\";\r\nimport { TonConnectUI } from \"@tonconnect/ui\";\r\nimport { toUserFriendlyAddress } from \"@tonconnect/sdk\";\r\n\r\nconst DEFAULT_MANIFEST_URL =\r\n \"https://miniapp.spinfi.me/tonconnect-manifest.json\";\r\n\r\n// 添加单例模式,确保TonConnectUI只被初始化一次\r\nlet tonConnectUIInstance: TonConnectUI | null = null;\r\nlet currentManifestUrl: string | null = null;\r\n\r\nexport class DefaultTonWalletProvider implements TonWalletProvider {\r\n private ui: TonConnectUI;\r\n private bindWalletCallback?: (walletAddress: string) => Promise<void>;\r\n\r\n constructor(\r\n manifestUrl?: string,\r\n bindWalletCallback?: (walletAddress: string) => Promise<void>\r\n ) {\r\n this.bindWalletCallback = bindWalletCallback;\r\n const resolvedManifestUrl = manifestUrl || DEFAULT_MANIFEST_URL;\r\n // 使用单例模式,如果实例不存在或 manifest 变更则创建新实例\r\n if (!tonConnectUIInstance || currentManifestUrl !== resolvedManifestUrl) {\r\n try {\r\n // console.log(\"创建新的TonConnectUI实例\");\r\n tonConnectUIInstance = new TonConnectUI({\r\n manifestUrl: resolvedManifestUrl,\r\n });\r\n currentManifestUrl = resolvedManifestUrl;\r\n } catch (error) {\r\n console.error(\"创建TonConnectUI实例失败:\", error);\r\n throw new Error(\"创建TonConnectUI实例失败\");\r\n }\r\n } else {\r\n // console.log(\"复用已存在的TonConnectUI实例\");\r\n }\r\n this.ui = tonConnectUIInstance as TonConnectUI;\r\n }\r\n\r\n isConnected(): boolean {\r\n try {\r\n return !!(this.ui as any)?.connected;\r\n } catch {\r\n return false;\r\n }\r\n }\r\n\r\n private async reportWalletAddress(): Promise<void> {\r\n const walletAddress = this.getUserFriendlyAddress();\r\n if (walletAddress && this.bindWalletCallback) {\r\n try {\r\n await this.bindWalletCallback(walletAddress);\r\n } catch (error) {\r\n console.error(\"钱包地址上报失败:\", error);\r\n }\r\n }\r\n }\r\n\r\n async connect(): Promise<boolean> {\r\n if (this.isConnected()) {\r\n await this.reportWalletAddress();\r\n return true;\r\n }\r\n try {\r\n await new Promise<void>((resolve, reject) => {\r\n this.ui.openModal();\r\n const unsub = this.ui.onStatusChange(() => {\r\n if (this.isConnected()) {\r\n unsub();\r\n resolve();\r\n }\r\n });\r\n // 设置超时,防止用户长时间不操作\r\n setTimeout(() => {\r\n if (!this.isConnected()) {\r\n unsub();\r\n reject(new Error(\"连接钱包超时\"));\r\n }\r\n }, 300000); // 5分钟超时\r\n });\r\n\r\n // 连接成功后,上报钱包地址\r\n await this.reportWalletAddress();\r\n\r\n return this.isConnected();\r\n } catch (e) {\r\n console.error(\"连接钱包失败:\", e);\r\n return false;\r\n }\r\n }\r\n\r\n private getUserFriendlyAddress(): string | null {\r\n const anyUi = this.ui as any;\r\n const rawAddress =\r\n anyUi?.wallet?.account?.address || anyUi?.account?.address || null;\r\n if (!rawAddress) return null;\r\n return toUserFriendlyAddress(rawAddress);\r\n }\r\n\r\n async sendTonTransaction(\r\n transferData: MerchantPayTransferData\r\n ): Promise<TonTransactionResult> {\r\n if (!this.isConnected()) {\r\n const ok = await this.connect();\r\n if (!ok) throw new Error(\"钱包未连接\");\r\n }\r\n const res = await (this.ui as any).sendTransaction(transferData);\r\n const boc: string | undefined = res?.boc;\r\n let transferHash: string | undefined;\r\n if (boc) {\r\n try {\r\n // const cell = Cell.fromBase64(boc);\r\n // transferHash = cell.hash().toString(\"base64\");\r\n transferHash = boc.substring(0, 16);\r\n // console.log(\"transferHash:\", transferHash);\r\n } catch {}\r\n }\r\n return { transferHash, boc, raw: res };\r\n }\r\n\r\n async sendUsdtTransaction(\r\n transferData: MerchantPayTransferData\r\n ): Promise<TonTransactionResult> {\r\n if (!this.isConnected()) {\r\n const ok = await this.connect();\r\n if (!ok) throw new Error(\"钱包未连接\");\r\n }\r\n const res = await (this.ui as any).sendTransaction(transferData);\r\n const boc: string | undefined = res?.boc;\r\n let transferHash: string | undefined;\r\n if (boc) {\r\n try {\r\n // const cell = Cell.fromBase64(boc);\r\n // transferHash = cell.hash().toString(\"base64\");\r\n // 简化处理,直接使用 boc 作为 hash\r\n transferHash = boc.substring(0, 16);\r\n // console.log(\"transferHash:\", transferHash);\r\n } catch {}\r\n }\r\n return { transferHash, boc, raw: res };\r\n }\r\n\r\n async disconnect(): Promise<boolean> {\r\n try {\r\n const anyUi = this.ui as any;\r\n if (anyUi?.disconnect) {\r\n await anyUi.disconnect();\r\n } else if (anyUi?.onStatusChange) {\r\n const unsub = anyUi.onStatusChange(() => {});\r\n unsub && unsub();\r\n }\r\n return !this.isConnected();\r\n } catch (e) {\r\n console.error(\"断开钱包连接失败:\", e);\r\n return false;\r\n }\r\n }\r\n}\r\n"]}
@@ -7,14 +7,21 @@ export interface TelegramUserUnsafeInitData {
7
7
  [key: string]: unknown;
8
8
  }
9
9
  export interface TelegramUserInfo {
10
- id?: number;
11
- first_name?: string;
12
- last_name?: string;
13
- username?: string;
14
- language_code?: string;
15
- allows_write_to_pm?: boolean;
10
+ user: {
11
+ id: number;
12
+ first_name?: string;
13
+ last_name?: string;
14
+ username?: string;
15
+ photo_url?: string;
16
+ language_code?: string;
17
+ allows_write_to_pm?: boolean;
18
+ is_premium?: boolean;
19
+ };
16
20
  auth_date?: number;
17
21
  hash?: string;
22
+ start_param?: string;
23
+ chat_type?: string;
24
+ chat_instance?: string;
18
25
  [key: string]: unknown;
19
26
  }
20
27
  export interface SDKInitOptions {
@@ -28,6 +35,8 @@ export interface SDKInitOptions {
28
35
  appId?: string;
29
36
  /** 可选:SDK 初始化鉴权成功后的服务端回调地址 */
30
37
  notifyUrl?: string;
38
+ /** 可选:TON Connect manifest 文件地址;未传则使用默认测试清单 */
39
+ tonConnectManifestUrl?: string;
31
40
  }
32
41
  export interface AuthResponseData {
33
42
  token: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/sdk/types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,cAIX;AAJD,WAAY,cAAc;IACxB,sEAAoD,CAAA;IACpD,sEAAoD,CAAA;IACpD,8DAA4C,CAAA;AAC9C,CAAC,EAJW,cAAc,KAAd,cAAc,QAIzB","sourcesContent":["export enum AdPositionName {\n GameRewardedAdPosition = \"game_rewarded_ad_position\",\n TaskRewardedAdPosition = \"task_rewarded_ad_position\",\n TaskListAdPosition = \"task_list_ad_position\",\n}\n\nexport interface TelegramUserUnsafeInitData {\n [key: string]: unknown;\n}\n\nexport interface TelegramUserInfo {\n id?: number;\n first_name?: string;\n last_name?: string;\n username?: string;\n language_code?: string;\n allows_write_to_pm?: boolean;\n auth_date?: number;\n hash?: string;\n [key: string]: unknown;\n}\n\nexport interface SDKInitOptions {\n /** 自定义用户信息(可选) */\n customUser?: TelegramUserInfo;\n /** 本地存储 Key 前缀,避免冲突 */\n storageKeyPrefix?: string;\n /** 自定义接口地址(可选)。不传则使用默认正式环境 */\n baseURL?: string;\n /** 可选:回调校验用 */\n appId?: string;\n /** 可选:SDK 初始化鉴权成功后的服务端回调地址 */\n notifyUrl?: string;\n}\n\nexport interface AuthResponseData {\n token: string;\n [key: string]: unknown;\n}\n\nexport interface APIResponse<T> {\n code: number;\n msg: string;\n timestamp?: number;\n datetime?: string;\n data: T;\n}\n\nexport interface AdConfigItem {\n id: number;\n adTypeId: number;\n adPlatformId: number;\n title: string;\n name: string;\n spaceId: string;\n rewardRate: number;\n payout: number;\n description?: string | null;\n status: number;\n enable: number;\n createDatetime: string;\n updateDatetime: string;\n adId: number;\n adPositionId: number;\n adPositionName: string;\n adPositionTitle: string;\n rank: number;\n adPlatformName: string; // e.g., monetag\n adPlatformTitle: string; // e.g., Monetag\n appId?: string | null;\n appSecret?: string | null;\n appUrl?: string | null;\n adPlatformConfig?: unknown | null;\n adTypeName: string; // e.g., interstitial_ad | popup_ad | inapp\n adTypeTitle: string;\n adRewardAmount?: number;\n}\n\nexport interface CreateAdParams {\n adId: number;\n adPositionId: number;\n tournamentId?: number;\n groupId?: number;\n}\n\nexport interface BindWalletResponseData {\n id: number;\n authId: number;\n authHash: string;\n authDatetime: string;\n chatInstance: string;\n firstName: string;\n lastName: string;\n username: string;\n nickname: string | null;\n allowsWritePm: number;\n languageCode: string;\n isPremiumUser: number;\n avatarUrl: string | null;\n email: string | null;\n phone: string | null;\n referrerId: number | null;\n referrerAuthId: number | null;\n walletAddress: string;\n usdtWalletAddress: string;\n points: number;\n buyContribution: number;\n revenuesContribution: number;\n taskContribution: number;\n status: number;\n enable: number;\n}\n\nexport interface AdResponseData {\n id: number;\n adTypeId: number;\n adPlatformId: number;\n title: string;\n name: string;\n spaceId: string;\n rewardRate: number;\n payout: number;\n description?: string | null;\n status: number;\n enable: number;\n createDatetime: string;\n updateDatetime: string;\n adShowId: string;\n start?: string[];\n show?: string[];\n error?: string[];\n close?: string[];\n reward?: string[];\n}\n\nexport interface MonitorUrls {\n start?: string[];\n show?: string[];\n error?: string[];\n close?: string[];\n reward?: string[];\n}\n\n// 新增:广告展示回调接口,供 SDK 用户可选传入\nexport interface AdCallbacks {\n onSuccess?: (result?: unknown) => void | Promise<void>;\n onError?: (error: unknown) => void | Promise<void>;\n}\n\nexport interface BindWalletReq {\n wallet: string;\n forceBind: boolean;\n}\n\nexport interface TonTransactionResult {\n transferHash?: string;\n boc?: string;\n raw?: unknown;\n}\n\nexport interface MerchantPayModeItem {\n id: number;\n title: string;\n name: string; // USDT | TON | STARS\n rate: number;\n nameDesc: string;\n}\n\nexport interface MerchantPayModeListData {\n payModeList: MerchantPayModeItem[];\n}\n\nexport interface MerchantPayCreateRequest {\n currencyName: string; // USDT | TON | STARS\n amount: number; // 单价/金额\n outTradeNo: string; // 商户订单号\n notifyUrl: string; // 回调地址\n attach: string; // 附加信息\n}\n\nexport interface MerchantPayTransferMessage {\n address: string;\n amount: string;\n payload?: string;\n}\n\nexport interface MerchantPayTransferData {\n validUntil: number;\n messages: MerchantPayTransferMessage[];\n}\n\nexport interface MerchantPayOrderBase {\n orderSn: string;\n transactionSn: string;\n outTradeNo: string;\n price: number | string;\n count: number;\n totalPrice: number | string;\n currencyId: number;\n currencyName: string;\n currencyRate: number;\n currencyAmount: number | string;\n payUrl: string | null;\n payExpireDatetime: string;\n payDatetime: string | null;\n finishDatetime: string | null;\n description: string;\n status: number;\n statusDesc: string;\n closeCode: string | null;\n closeCodeDesc: string | null;\n createDatetime: string;\n updateDatetime: string;\n transferHash: string | null;\n transactionHash: string | null;\n transactionLt: string | null;\n}\n\nexport interface MerchantPayCreateResponseData extends MerchantPayOrderBase {\n transferData: MerchantPayTransferData;\n}\n\nexport interface MerchantPayFinishRequest {\n orderSn: string;\n status: string; // success / failed / cancelled\n transferHash?: string;\n orderId?: string;\n}\n\nexport type MerchantPayFinishResponseData = MerchantPayOrderBase;\n\nexport interface MerchantPayQueryResultRequest {\n orderSn?: string;\n outTradeNo?: string;\n}\n\nexport type MerchantPayQueryResultResponseData = MerchantPayOrderBase;\n\nexport type MerchantPayNotifyRequest = MerchantPayOrderBase;\n\nexport interface TonWalletProvider {\n isConnected: () => boolean;\n connect: () => Promise<boolean>;\n disconnect: () => Promise<boolean>;\n sendTonTransaction: (\n transferData: MerchantPayTransferData\n ) => Promise<TonTransactionResult>;\n sendUsdtTransaction: (\n transferData: MerchantPayTransferData\n ) => Promise<TonTransactionResult>;\n}\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/sdk/types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,cAIX;AAJD,WAAY,cAAc;IACxB,sEAAoD,CAAA;IACpD,sEAAoD,CAAA;IACpD,8DAA4C,CAAA;AAC9C,CAAC,EAJW,cAAc,KAAd,cAAc,QAIzB","sourcesContent":["export enum AdPositionName {\n GameRewardedAdPosition = \"game_rewarded_ad_position\",\n TaskRewardedAdPosition = \"task_rewarded_ad_position\",\n TaskListAdPosition = \"task_list_ad_position\",\n}\n\nexport interface TelegramUserUnsafeInitData {\n [key: string]: unknown;\n}\n\nexport interface TelegramUserInfo {\n user: {\n id: number;\n first_name?: string;\n last_name?: string;\n username?: string;\n photo_url?: string;\n language_code?: string;\n allows_write_to_pm?: boolean;\n is_premium?: boolean;\n };\n auth_date?: number;\n hash?: string;\n start_param?: string;\n chat_type?: string;\n chat_instance?: string;\n [key: string]: unknown;\n}\n\nexport interface SDKInitOptions {\n /** 自定义用户信息(可选) */\n customUser?: TelegramUserInfo;\n /** 本地存储 Key 前缀,避免冲突 */\n storageKeyPrefix?: string;\n /** 自定义接口地址(可选)。不传则使用默认正式环境 */\n baseURL?: string;\n /** 可选:回调校验用 */\n appId?: string;\n /** 可选:SDK 初始化鉴权成功后的服务端回调地址 */\n notifyUrl?: string;\n /** 可选:TON Connect manifest 文件地址;未传则使用默认测试清单 */\n tonConnectManifestUrl?: string;\n}\n\nexport interface AuthResponseData {\n token: string;\n [key: string]: unknown;\n}\n\nexport interface APIResponse<T> {\n code: number;\n msg: string;\n timestamp?: number;\n datetime?: string;\n data: T;\n}\n\nexport interface AdConfigItem {\n id: number;\n adTypeId: number;\n adPlatformId: number;\n title: string;\n name: string;\n spaceId: string;\n rewardRate: number;\n payout: number;\n description?: string | null;\n status: number;\n enable: number;\n createDatetime: string;\n updateDatetime: string;\n adId: number;\n adPositionId: number;\n adPositionName: string;\n adPositionTitle: string;\n rank: number;\n adPlatformName: string; // e.g., monetag\n adPlatformTitle: string; // e.g., Monetag\n appId?: string | null;\n appSecret?: string | null;\n appUrl?: string | null;\n adPlatformConfig?: unknown | null;\n adTypeName: string; // e.g., interstitial_ad | popup_ad | inapp\n adTypeTitle: string;\n adRewardAmount?: number;\n}\n\nexport interface CreateAdParams {\n adId: number;\n adPositionId: number;\n tournamentId?: number;\n groupId?: number;\n}\n\nexport interface BindWalletResponseData {\n id: number;\n authId: number;\n authHash: string;\n authDatetime: string;\n chatInstance: string;\n firstName: string;\n lastName: string;\n username: string;\n nickname: string | null;\n allowsWritePm: number;\n languageCode: string;\n isPremiumUser: number;\n avatarUrl: string | null;\n email: string | null;\n phone: string | null;\n referrerId: number | null;\n referrerAuthId: number | null;\n walletAddress: string;\n usdtWalletAddress: string;\n points: number;\n buyContribution: number;\n revenuesContribution: number;\n taskContribution: number;\n status: number;\n enable: number;\n}\n\nexport interface AdResponseData {\n id: number;\n adTypeId: number;\n adPlatformId: number;\n title: string;\n name: string;\n spaceId: string;\n rewardRate: number;\n payout: number;\n description?: string | null;\n status: number;\n enable: number;\n createDatetime: string;\n updateDatetime: string;\n adShowId: string;\n start?: string[];\n show?: string[];\n error?: string[];\n close?: string[];\n reward?: string[];\n}\n\nexport interface MonitorUrls {\n start?: string[];\n show?: string[];\n error?: string[];\n close?: string[];\n reward?: string[];\n}\n\n// 新增:广告展示回调接口,供 SDK 用户可选传入\nexport interface AdCallbacks {\n onSuccess?: (result?: unknown) => void | Promise<void>;\n onError?: (error: unknown) => void | Promise<void>;\n}\n\nexport interface BindWalletReq {\n wallet: string;\n forceBind: boolean;\n}\n\nexport interface TonTransactionResult {\n transferHash?: string;\n boc?: string;\n raw?: unknown;\n}\n\nexport interface MerchantPayModeItem {\n id: number;\n title: string;\n name: string; // USDT | TON | STARS\n rate: number;\n nameDesc: string;\n}\n\nexport interface MerchantPayModeListData {\n payModeList: MerchantPayModeItem[];\n}\n\nexport interface MerchantPayCreateRequest {\n currencyName: string; // USDT | TON | STARS\n amount: number; // 单价/金额\n outTradeNo: string; // 商户订单号\n notifyUrl: string; // 回调地址\n attach: string; // 附加信息\n}\n\nexport interface MerchantPayTransferMessage {\n address: string;\n amount: string;\n payload?: string;\n}\n\nexport interface MerchantPayTransferData {\n validUntil: number;\n messages: MerchantPayTransferMessage[];\n}\n\nexport interface MerchantPayOrderBase {\n orderSn: string;\n transactionSn: string;\n outTradeNo: string;\n price: number | string;\n count: number;\n totalPrice: number | string;\n currencyId: number;\n currencyName: string;\n currencyRate: number;\n currencyAmount: number | string;\n payUrl: string | null;\n payExpireDatetime: string;\n payDatetime: string | null;\n finishDatetime: string | null;\n description: string;\n status: number;\n statusDesc: string;\n closeCode: string | null;\n closeCodeDesc: string | null;\n createDatetime: string;\n updateDatetime: string;\n transferHash: string | null;\n transactionHash: string | null;\n transactionLt: string | null;\n}\n\nexport interface MerchantPayCreateResponseData extends MerchantPayOrderBase {\n transferData: MerchantPayTransferData;\n}\n\nexport interface MerchantPayFinishRequest {\n orderSn: string;\n status: string; // success / failed / cancelled\n transferHash?: string;\n orderId?: string;\n}\n\nexport type MerchantPayFinishResponseData = MerchantPayOrderBase;\n\nexport interface MerchantPayQueryResultRequest {\n orderSn?: string;\n outTradeNo?: string;\n}\n\nexport type MerchantPayQueryResultResponseData = MerchantPayOrderBase;\n\nexport type MerchantPayNotifyRequest = MerchantPayOrderBase;\n\nexport interface TonWalletProvider {\n isConnected: () => boolean;\n connect: () => Promise<boolean>;\n disconnect: () => Promise<boolean>;\n sendTonTransaction: (\n transferData: MerchantPayTransferData\n ) => Promise<TonTransactionResult>;\n sendUsdtTransaction: (\n transferData: MerchantPayTransferData\n ) => Promise<TonTransactionResult>;\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hm-tracking-sdk",
3
- "version": "0.1.6",
3
+ "version": "0.1.9",
4
4
  "private": false,
5
5
  "description": "Telegram tracking SDK for Web/Miniapp with TON/Stars payment integration.",
6
6
  "license": "MIT",