hm-tracking-sdk 0.1.4 → 0.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,317 +1,354 @@
1
- # HM Tracking SDK 使用文档
2
-
3
- 本文档详细介绍如何使用 HM Tracking SDK,包括初始化、广告业务和支付业务的完整流程。
4
-
5
- ## 1. 安装
6
-
7
- ### 建议通过 npm/yarn 安装正式发布的包:
8
-
9
- ```bash
10
- # 使用 yarn
11
- yarn add hm-tracking-sdk axios crypto-js
12
-
13
- # 或使用 npm
14
- npm i hm-tracking-sdk axios crypto-js
15
- ```
16
-
17
- ---
18
-
19
- ## 2. SDK 初始化
20
-
21
- - 接口: init()
22
-
23
- ```ts
24
- import { HmTrackingSDK, type SDKInitOptions } from "hm-tracking-sdk";
25
-
26
- const options: SDKInitOptions = {
27
- // 可选:不传则使用内置默认地址
28
- baseURL: "https://your-api.example.com",
29
-
30
- // 可选:本地存储 Key 前缀,避免项目间冲突
31
- storageKeyPrefix: "your_app_prefix",
32
-
33
- // 可选:浏览器环境下使用,可显式传入自定义用户
34
- customUser: {
35
- user: {
36
- id: 123456789,
37
- firstName: "Test",
38
- lastName: "User",
39
- username: "test_user",
40
- languageCode: "zh-hans",
41
- },
42
- authDate: new Date().toISOString(),
43
- hash: "your_hash_value",
44
- },
45
- };
46
-
47
- const sdk = new HmTrackingSDK(options);
48
- await sdk.init();
49
- ```
50
-
51
- - 函数说明:初始化 SDK,先创建 HmTrackingSDK 对象,然后调用 init 方法完成初始化。
52
- - 参数说明: `SDKInitOptions` 初始化SDK时的可选参数,数据结构及内部结构说明为:
53
-
54
- ```ts
55
- export interface SDKInitOptions {
56
- /** 自定义接口地址(可选)。不传则使用默认正式环境 */
57
- baseURL?: string;
58
- /** 本地存储 Key 前缀,避免冲突 */
59
- storageKeyPrefix?: string;
60
- /** 自定义用户信息(可选) */
61
- customUser?: TelegramUserInfo;
62
- }
63
- ```
64
-
65
- - baseURL(可选)
66
- - 说明:后端服务地址;不传则使用 SDK 内置默认地址。
67
- - 类型:`string`
68
- - storageKeyPrefix(可选)
69
- - 说明:本地缓存命名空间前缀;用于隔离不同项目的存储键。
70
- - 类型:`string`
71
- - customUser(可选)
72
- - 说明:自定义用户数据,仅在非 Telegram 环境可用;若不传,SDK 会自动使用“匿名浏览器用户”(基于 Cookie 生成并持久化随机 userId),从而可以直接完成鉴权与后续请求。
73
- - 类型:`TelegramUserInfo`
74
- - 返回值:`Promise<void>`。
75
-
76
- ### 2.1 环境
77
-
78
- - Telegram 环境
79
- - SDK 自动读取当前Telegram用户的信息。
80
- - 无需传入 `customUser`;若 Telegram 用户读取失败,SDK 会抛错提示。
81
- - 浏览器环境(非 Telegram)
82
- - 默认行为:若未传 `customUser`,SDK 会使用“匿名浏览器用户”:
83
- - 首次访问生成随机 `userId`,存入 Cookie(如 `tg_tracking_uid`),后续复用。
84
- - 便于无登录状态下完成鉴权,拿到 token 后再进行广告或调试。
85
- - 自定义用户:也可传入 `customUser` 替代匿名用户。
86
-
87
- ### 2.2 环境判断
88
-
89
- - 接口: isTelegramEnv()
90
-
91
- ```ts
92
- import { isTelegramEnv } from "hm-tracking-sdk";
93
-
94
- if (isTelegramEnv()) {
95
- // Telegram WebApp 环境
96
- } else {
97
- // 浏览器/其他环境
98
- }
99
- ```
100
-
101
- - 函数说明:判断是否是Telegram环境。
102
- - 返回值:`boolean`。
103
-
104
- ---
105
-
106
- ## 3. 获取Telegram用户信息
107
-
108
- - 接口: getTelegramUserUnsafe()
109
-
110
- ```ts
111
- import { getTelegramUserUnsafe, type TelegramUserInfo } from "hm-tracking-sdk";
112
-
113
- const user: TelegramUserInfo | null = getTelegramUserUnsafe();
114
- ```
115
-
116
- - 函数说明:在 Telegram 环境下返回 `TelegramUserInfo`;获取失败返回 `null`。
117
- - 返回值:`TelegramUserInfo | null`,数据结构为:
118
-
119
- ```ts
120
- export interface TelegramUserInfo {
121
- id?: number;
122
- first_name?: string;
123
- last_name?: string;
124
- username?: string;
125
- language_code?: string;
126
- allows_write_to_pm?: boolean;
127
- auth_date?: number;
128
- hash?: string;
129
- [key: string]: unknown;
130
- }
131
- ```
132
-
133
- - 环境要求:仅 Telegram WebApp 可用;在浏览器环境(非 Telegram)将返回 `null`。
134
-
135
- ---
136
-
137
- ## 4. 广告业务
138
-
139
- ### 4.1 展示广告
140
-
141
- - 接口: showHmAdByPosition()
142
-
143
- ```ts
144
- await sdk.showHmAdByPosition(adPositionName);
145
- ```
146
-
147
- - 函数说明:根据广告位名称展示广告。
148
- - 参数说明
149
- - adPositionName(必填)
150
- - 说明:广告位名称,需要根据业务进行申请,具体请联系SDK开发者,使用示例值进行测试。
151
- - 类型:`string`
152
- - 示例值:
153
- - `game_rewarded_ad_position`
154
- - 返回值:`Promise<void>`。
155
-
156
- 说明:SDK 会根据根据广告位名称获取相关广告配置并完成展示。
157
-
158
- ---
159
-
160
- ## 5. 支付业务
161
-
162
- 支付仅支持在 Telegram WebApp 内使用。
163
-
164
- ### 5.1 TON钱包相关API
165
-
166
- #### 5.1.1 钱包是否链接
167
-
168
- - 接口: isWalletConnected()
169
-
170
- ```ts
171
- sdk.isWalletConnected(): boolean
172
- ```
173
-
174
- - 函数说明:同步检查是否已连接 TON 钱包;
175
- - 返回值:`boolean`。
176
-
177
- #### 5.1.2 链接钱包
178
-
179
- - 接口: connectWallet()
180
-
181
- ```ts
182
- sdk.connectWallet(): Promise<boolean>
183
- ```
184
-
185
- - 函数说明:发起连接 TON 钱包;
186
- - 返回值:`Promise<boolean>` 表示是否连接成功。
187
-
188
- #### 5.1.3 断开钱包链接
189
-
190
- - 接口: disconnectWallet()
191
-
192
- ```ts
193
- sdk.disconnectWallet(): Promise<void>
194
- ```
195
-
196
- - 函数说明:断开已连接的钱包;
197
- - 返回值:`Promise<void>`。
198
-
199
- ### 5.2 支付
200
-
201
- #### 5.2.1 获取支持的支付方式
202
-
203
- - 接口: getSupportedPayModes()
204
-
205
- ```ts
206
- sdk.getSupportedPayModes(): Promise<MerchantPayModeListData>
207
- ```
208
-
209
- - 函数说明:获取当前支持的币种及汇率配置;
210
- - 返回值说明:`Promise<MerchantPayModeListData>`,见下方类型定义。
211
-
212
- ```ts
213
- interface MerchantPayModeListData {
214
- payModeList: MerchantPayModeItem[];
215
- }
216
-
217
- interface MerchantPayModeItem {
218
- id: number;
219
- title: string;
220
- name: string; // 币种: 'USDT' | 'TON' | 'STARS'
221
- rate: number; // 汇率
222
- nameDesc: string;
223
- }
224
- ```
225
-
226
- #### 5.2.2 创建并支付订单
227
-
228
- - 接口: payByMerchant()
229
-
230
- ```ts
231
- // TON/USDT 需要先连接钱包(STARS 无需)
232
- await sdk.ensureWalletConnected();
233
-
234
- // 创建并支付订单
235
- const params: MerchantPayCreateRequest = {
236
- currencyName: "TON", // "TON" | "USDT" | "STARS"
237
- amount: 10.5, // 支付金额
238
- outTradeNo: `order_${Date.now()}`, // 自定义订单号
239
- notifyUrl: "https://your-server.com/payment-callback",
240
- attach: JSON.stringify({ userId: "123", itemId: "456" })
241
- };
242
- const result: MerchantPayFinishResponseData = await sdk.payByMerchant(params);
243
- ```
244
-
245
- - 函数说明:创建支付订单并根据币种发起支付流程(STARS、TON/USDT 链上交易);
246
-
247
- - 参数说明:
248
-
249
- ```ts
250
- interface MerchantPayCreateRequest {
251
- currencyName: string; // "USDT" | "TON" | "STARS"
252
- amount: number; // 支付金额
253
- outTradeNo: string; // 商户订单号
254
- notifyUrl: string; // 服务端支付回调地址
255
- attach: string; // 附加信息,通常使用 JSON.stringify
256
- }
257
- ```
258
-
259
- - 返回值数据结构:
260
-
261
- ```ts
262
- export interface MerchantPayOrderBase {
263
- orderSn: string;
264
- transactionSn: string;
265
- outTradeNo: string;
266
- price: number | string;
267
- count: number;
268
- totalPrice: number | string;
269
- currencyId: number;
270
- currencyName: string;
271
- currencyRate: number;
272
- currencyAmount: number | string;
273
- payUrl: string | null;
274
- payExpireDatetime: string;
275
- payDatetime: string | null;
276
- finishDatetime: string | null;
277
- description: string;
278
- status: number;
279
- statusDesc: string;
280
- closeCode: string | null;
281
- closeCodeDesc: string | null;
282
- createDatetime: string;
283
- updateDatetime: string;
284
- transferHash: string | null;
285
- transactionHash: string | null;
286
- transactionLt: string | null;
287
- }
288
- ```
289
-
290
- ```ts
291
- // 支付完成回调返回的订单结果
292
- type MerchantPayFinishResponseData = MerchantPayOrderBase;
293
- ```
294
-
295
- #### 5.2.3 查询支付结果
296
-
297
- - 接口: merchantPayQueryResult()
298
-
299
- ```ts
300
- sdk.merchantPayQueryResult(data: MerchantPayQueryResultRequest): Promise<MerchantPayQueryResultResponseData>
301
- ```
302
-
303
- - 函数说明:通过系统订单号 `orderSn` 或商户订单号 `outTradeNo` 查询订单最新结果;
304
- - 参数说明:`MerchantPayQueryResultRequest`,见下方类型:
305
-
306
- ```ts
307
- interface MerchantPayQueryResultRequest {
308
- orderSn?: string;
309
- outTradeNo?: string;
310
- }
311
- ```
312
-
313
- - 返回值说明:`Promise<MerchantPayQueryResultResponseData>`,同 `MerchantPayOrderBase`。
314
-
315
- ```ts
316
- type MerchantPayQueryResultResponseData = MerchantPayOrderBase;
317
- ```
1
+ # HM Tracking SDK 使用文档
2
+
3
+ 本文档详细介绍如何使用 HM Tracking SDK,包括初始化、广告业务和支付业务的完整流程。
4
+
5
+ ## 1. 安装
6
+
7
+ ### 建议通过 npm/yarn 安装正式发布的包:
8
+
9
+ ```bash
10
+ # 使用 yarn
11
+ yarn add hm-tracking-sdk axios crypto-js
12
+
13
+ # 或使用 npm
14
+ npm i hm-tracking-sdk axios crypto-js
15
+ ```
16
+
17
+ ---
18
+
19
+ ## 2. SDK 初始化
20
+
21
+ - 接口: init()
22
+
23
+ ```ts
24
+ import { HmTrackingSDK, type SDKInitOptions } from "hm-tracking-sdk";
25
+
26
+ const options: SDKInitOptions = {
27
+ // 可选:不传则使用内置默认地址
28
+ baseURL: "https://your-api.example.com",
29
+
30
+ // 可选:本地存储 Key 前缀,避免项目间冲突
31
+ storageKeyPrefix: "your_app_prefix",
32
+
33
+ // 可选:浏览器环境下使用,可显式传入自定义用户
34
+ customUser: {
35
+ user: {
36
+ id: 123456789,
37
+ firstName: "Test",
38
+ lastName: "User",
39
+ username: "test_user",
40
+ languageCode: "zh-hans",
41
+ },
42
+ authDate: new Date().toISOString(),
43
+ hash: "your_hash_value",
44
+ },
45
+ };
46
+
47
+ const sdk = new HmTrackingSDK(options);
48
+ await sdk.init();
49
+ ```
50
+
51
+ - 函数说明:初始化 SDK,先创建 HmTrackingSDK 对象,然后调用 init 方法完成初始化。
52
+ - 参数说明: `SDKInitOptions` 初始化SDK时的可选参数,数据结构及内部结构说明为:
53
+
54
+ ```ts
55
+ export interface SDKInitOptions {
56
+ /** 自定义接口地址(可选)。不传则使用默认正式环境 */
57
+ baseURL?: string;
58
+ /** 本地存储 Key 前缀,避免冲突 */
59
+ storageKeyPrefix?: string;
60
+ /** 自定义用户信息(可选) */
61
+ customUser?: TelegramUserInfo;
62
+ }
63
+ ```
64
+
65
+ - baseURL(可选)
66
+ - 说明:后端服务地址;不传则使用 SDK 内置默认地址。
67
+ - 类型:`string`
68
+ - storageKeyPrefix(可选)
69
+ - 说明:本地缓存命名空间前缀;用于隔离不同项目的存储键。
70
+ - 类型:`string`
71
+ - customUser(可选)
72
+ - 说明:自定义用户数据,仅在非 Telegram 环境可用;若不传,SDK 会自动使用“匿名浏览器用户”(基于 Cookie 生成并持久化随机 userId),从而可以直接完成鉴权与后续请求。
73
+ - 类型:`TelegramUserInfo`
74
+ - 返回值:`Promise<void>`。
75
+
76
+ ### 2.1 环境
77
+
78
+ - Telegram 环境
79
+ - SDK 自动读取当前Telegram用户的信息。
80
+ - 无需传入 `customUser`;若 Telegram 用户读取失败,SDK 会抛错提示。
81
+ - 浏览器环境(非 Telegram)
82
+ - 默认行为:若未传 `customUser`,SDK 会使用“匿名浏览器用户”:
83
+ - 首次访问生成随机 `userId`,存入 Cookie(如 `tg_tracking_uid`),后续复用。
84
+ - 便于无登录状态下完成鉴权,拿到 token 后再进行广告或调试。
85
+ - 自定义用户:也可传入 `customUser` 替代匿名用户。
86
+
87
+ ### 2.2 环境判断
88
+
89
+ - 接口: isTelegramEnv()
90
+
91
+ ```ts
92
+ import { isTelegramEnv } from "hm-tracking-sdk";
93
+
94
+ if (isTelegramEnv()) {
95
+ // Telegram WebApp 环境
96
+ } else {
97
+ // 浏览器/其他环境
98
+ }
99
+ ```
100
+
101
+ - 函数说明:判断是否是Telegram环境。
102
+ - 返回值:`boolean`。
103
+
104
+ ---
105
+
106
+ ## 3. 获取Telegram用户信息
107
+
108
+ - 接口: getTelegramUserUnsafe()
109
+
110
+ ```ts
111
+ import { getTelegramUserUnsafe, type TelegramUserInfo } from "hm-tracking-sdk";
112
+
113
+ const user: TelegramUserInfo | null = getTelegramUserUnsafe();
114
+ ```
115
+
116
+ - 函数说明:在 Telegram 环境下返回 `TelegramUserInfo`;获取失败返回 `null`。
117
+ - 返回值:`TelegramUserInfo | null`,数据结构为:
118
+
119
+ ```ts
120
+ export interface TelegramUserInfo {
121
+ id?: number;
122
+ first_name?: string;
123
+ last_name?: string;
124
+ username?: string;
125
+ language_code?: string;
126
+ allows_write_to_pm?: boolean;
127
+ auth_date?: number;
128
+ hash?: string;
129
+ [key: string]: unknown;
130
+ }
131
+ ```
132
+
133
+ - 环境要求:仅 Telegram WebApp 可用;在浏览器环境(非 Telegram)将返回 `null`。
134
+
135
+ ---
136
+
137
+ ## 4. 广告业务
138
+
139
+ ### 4.1 展示广告
140
+
141
+ - 接口: showHmAdByPosition()
142
+
143
+ ```ts
144
+ await sdk.showHmAdByPosition(adPositionName, {
145
+ onSuccess: (result) => {
146
+ console.log("广告观看完成", result);
147
+ },
148
+ onError: (error) => {
149
+ console.error("广告展示失败:", error);
150
+ },
151
+ });
152
+ ```
153
+
154
+ - 函数说明:根据广告位名称展示广告。
155
+ - 参数说明
156
+ - adPositionName(必填)
157
+ - 说明:广告位名称,需要根据业务进行申请,具体请联系SDK开发者,使用示例值进行测试。
158
+ - 类型:`string`
159
+ - 示例值:
160
+ - `game_rewarded_ad_position`
161
+ - callbacks
162
+ - 说明:广告展示成功/失败的回调。
163
+ - 类型:
164
+
165
+ ```ts
166
+ interface AdCallbacks {
167
+ onSuccess?: (result?: unknown) => void | Promise<void>;
168
+ onError?: (error: unknown) => void | Promise<void>;
169
+ }
170
+ ```
171
+
172
+ - 返回值:`Promise<void>`。失败时抛出异常;如提供 `callbacks`,会触发 `onError`。
173
+
174
+ 说明:SDK 会根据根据广告位名称获取相关广告配置并完成展示。
175
+
176
+ ---
177
+
178
+ ## 5. 支付业务
179
+
180
+ 支付仅支持在 Telegram WebApp 内使用。
181
+
182
+ ### 5.1 TON钱包相关API
183
+
184
+ #### 5.1.1 钱包是否链接
185
+
186
+ - 接口: isWalletConnected()
187
+
188
+ ```ts
189
+ sdk.isWalletConnected(): boolean
190
+ ```
191
+
192
+ - 函数说明:同步检查是否已连接 TON 钱包;
193
+ - 返回值:`boolean`。
194
+
195
+ #### 5.1.2 链接钱包
196
+
197
+ - 接口: connectWallet()
198
+
199
+ ```ts
200
+ sdk.connectWallet(): Promise<boolean>
201
+ ```
202
+
203
+ - 函数说明:发起连接 TON 钱包;
204
+ - 返回值:`Promise<boolean>` 表示是否连接成功。
205
+
206
+ #### 5.1.3 断开钱包链接
207
+
208
+ - 接口: disconnectWallet()
209
+
210
+ ```ts
211
+ sdk.disconnectWallet(): Promise<boolean>
212
+ ```
213
+
214
+ - 函数说明:断开已连接的钱包;
215
+ - 返回值:`Promise<boolean>`,true 表示已断开或原本未连接;false 表示断开失败。
216
+
217
+ ### 5.2 支付
218
+
219
+ #### 5.2.1 获取支持的支付方式
220
+
221
+ - 接口: getSupportedPayModes()
222
+
223
+ ```ts
224
+ sdk.getSupportedPayModes(): Promise<MerchantPayModeListData>
225
+ ```
226
+
227
+ - 函数说明:获取当前支持的币种及汇率配置;
228
+ - 返回值说明:`Promise<MerchantPayModeListData>`,见下方类型定义。
229
+
230
+ ```ts
231
+ interface MerchantPayModeListData {
232
+ payModeList: MerchantPayModeItem[];
233
+ }
234
+
235
+ interface MerchantPayModeItem {
236
+ id: number;
237
+ title: string;
238
+ name: string; // 币种: 'USDT' | 'TON' | 'STARS'
239
+ rate: number; // 汇率
240
+ nameDesc: string;
241
+ }
242
+ ```
243
+
244
+ #### 5.2.2 创建并支付订单
245
+
246
+ - 接口: payByMerchant()
247
+
248
+ ```ts
249
+
250
+ // 创建并支付订单
251
+ const params: MerchantPayCreateRequest = {
252
+ currencyName: "TON", // "TON" | "USDT" | "STARS"
253
+ amount: 10.5, // 支付金额
254
+ outTradeNo: `order_${Date.now()}`, // 自定义订单号
255
+ notifyUrl: "https://your-server.com/payment-callback",
256
+ attach: JSON.stringify({ userId: "123", itemId: "456" })
257
+ };
258
+ const result: MerchantPayFinishResponseData = await sdk.payByMerchant(params);
259
+ ```
260
+
261
+ - 函数说明:创建支付订单并根据币种发起支付流程(STARS、TON/USDT 链上交易);
262
+
263
+ - 参数说明:
264
+
265
+ ```ts
266
+ interface MerchantPayCreateRequest {
267
+ currencyName: string; // "USDT" | "TON" | "STARS"
268
+ amount: number; // 支付金额
269
+ outTradeNo: string; // 商户订单号
270
+ notifyUrl: string; // 服务端支付回调地址
271
+ attach: string; // 附加信息,通常使用 JSON.stringify
272
+ }
273
+ ```
274
+
275
+ - 返回值数据结构:
276
+
277
+ ```ts
278
+ export interface MerchantPayOrderBase {
279
+ orderSn: string;
280
+ transactionSn: string;
281
+ outTradeNo: string;
282
+ price: number | string;
283
+ count: number;
284
+ totalPrice: number | string;
285
+ currencyId: number;
286
+ currencyName: string;
287
+ currencyRate: number;
288
+ currencyAmount: number | string;
289
+ payUrl: string | null;
290
+ payExpireDatetime: string;
291
+ payDatetime: string | null;
292
+ finishDatetime: string | null;
293
+ description: string;
294
+ status: number;
295
+ statusDesc: string;
296
+ closeCode: string | null;
297
+ closeCodeDesc: string | null;
298
+ createDatetime: string;
299
+ updateDatetime: string;
300
+ transferHash: string | null;
301
+ transactionHash: string | null;
302
+ transactionLt: string | null;
303
+ }
304
+ ```
305
+
306
+ ```ts
307
+ // 支付完成回调返回的订单结果
308
+ type MerchantPayFinishResponseData = MerchantPayOrderBase;
309
+ ```
310
+
311
+ #### 5.2.3 查询支付结果
312
+
313
+ - 接口: merchantPayQueryResult()
314
+
315
+ ```ts
316
+ sdk.merchantPayQueryResult(data: MerchantPayQueryResultRequest): Promise<MerchantPayQueryResultResponseData>
317
+ ```
318
+
319
+ - 函数说明:通过系统订单号 `orderSn` 或商户订单号 `outTradeNo` 查询订单最新结果;
320
+ - 参数说明:`MerchantPayQueryResultRequest`,见下方类型:
321
+
322
+ ```ts
323
+ interface MerchantPayQueryResultRequest {
324
+ orderSn?: string;
325
+ outTradeNo?: string;
326
+ }
327
+ ```
328
+
329
+ - 返回值说明:`Promise<MerchantPayQueryResultResponseData>`,同 `MerchantPayOrderBase`。
330
+
331
+ ```ts
332
+ type MerchantPayQueryResultResponseData = MerchantPayOrderBase;
333
+ ```
334
+
335
+ #### 5.2.4 支付结果通知(服务端回调)
336
+
337
+ - 说明:当你的服务接收 `notifyUrl` 的支付结果通知时,应返回统一响应结构,以便平台确认处理状态。
338
+ - 返回值示例:
339
+
340
+ ```json
341
+ {
342
+ "code": 1,
343
+ "msg": "通知支付结果成功",
344
+ "timestamp": 1756442387,
345
+ "datetime": "2025-08-29T04:39:47.518Z",
346
+ "data": {}
347
+ }
348
+ ```
349
+
350
+ - 约定说明:
351
+ - **code**: 1 表示成功;非 1 表示失败
352
+ - **msg**: 描述信息
353
+ - **timestamp/datetime**: 服务端时间
354
+ - **data**: 业务扩展字段(本例为空对象)