@downcity/services 0.1.50 → 0.1.55

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 (63) hide show
  1. package/README.md +11 -12
  2. package/bin/index.d.ts +5 -8
  3. package/bin/index.d.ts.map +1 -1
  4. package/bin/index.js +3 -4
  5. package/bin/index.js.map +1 -1
  6. package/bin/payment/index.d.ts +17 -9
  7. package/bin/payment/index.d.ts.map +1 -1
  8. package/bin/payment/index.js +841 -33
  9. package/bin/payment/index.js.map +1 -1
  10. package/bin/payment/redirect.d.ts +39 -0
  11. package/bin/payment/redirect.d.ts.map +1 -0
  12. package/bin/payment/redirect.js +41 -0
  13. package/bin/payment/redirect.js.map +1 -0
  14. package/bin/payment/schema.d.ts +426 -0
  15. package/bin/payment/schema.d.ts.map +1 -0
  16. package/bin/payment/schema.js +41 -0
  17. package/bin/payment/schema.js.map +1 -0
  18. package/bin/payment/types.d.ts +300 -91
  19. package/bin/payment/types.d.ts.map +1 -1
  20. package/bin/payment/types.js +4 -4
  21. package/bin/payment-creem/index.d.ts.map +1 -1
  22. package/bin/payment-creem/index.js +8 -63
  23. package/bin/payment-creem/index.js.map +1 -1
  24. package/bin/payment-creem/types.d.ts +0 -19
  25. package/bin/payment-creem/types.d.ts.map +1 -1
  26. package/bin/payment-dodo/dodo.d.ts +119 -0
  27. package/bin/payment-dodo/dodo.d.ts.map +1 -0
  28. package/bin/payment-dodo/dodo.js +93 -0
  29. package/bin/payment-dodo/dodo.js.map +1 -0
  30. package/bin/payment-dodo/index.d.ts +17 -0
  31. package/bin/payment-dodo/index.d.ts.map +1 -0
  32. package/bin/payment-dodo/index.js +549 -0
  33. package/bin/payment-dodo/index.js.map +1 -0
  34. package/bin/payment-dodo/schema.d.ts +378 -0
  35. package/bin/payment-dodo/schema.d.ts.map +1 -0
  36. package/bin/payment-dodo/schema.js +47 -0
  37. package/bin/payment-dodo/schema.js.map +1 -0
  38. package/bin/payment-dodo/types.d.ts +261 -0
  39. package/bin/payment-dodo/types.d.ts.map +1 -0
  40. package/bin/payment-dodo/types.js +10 -0
  41. package/bin/payment-dodo/types.js.map +1 -0
  42. package/bin/payment-stripe/index.d.ts.map +1 -1
  43. package/bin/payment-stripe/index.js +10 -73
  44. package/bin/payment-stripe/index.js.map +1 -1
  45. package/bin/payment-stripe/types.d.ts +0 -24
  46. package/bin/payment-stripe/types.d.ts.map +1 -1
  47. package/bin/payment-waffo/index.d.ts +17 -0
  48. package/bin/payment-waffo/index.d.ts.map +1 -0
  49. package/bin/payment-waffo/index.js +550 -0
  50. package/bin/payment-waffo/index.js.map +1 -0
  51. package/bin/payment-waffo/schema.d.ts +388 -0
  52. package/bin/payment-waffo/schema.d.ts.map +1 -0
  53. package/bin/payment-waffo/schema.js +39 -0
  54. package/bin/payment-waffo/schema.js.map +1 -0
  55. package/bin/payment-waffo/types.d.ts +289 -0
  56. package/bin/payment-waffo/types.d.ts.map +1 -0
  57. package/bin/payment-waffo/types.js +10 -0
  58. package/bin/payment-waffo/types.js.map +1 -0
  59. package/bin/payment-waffo/waffo.d.ts +111 -0
  60. package/bin/payment-waffo/waffo.d.ts.map +1 -0
  61. package/bin/payment-waffo/waffo.js +84 -0
  62. package/bin/payment-waffo/waffo.js.map +1 -0
  63. package/package.json +8 -4
@@ -0,0 +1,378 @@
1
+ /**
2
+ * Dodo Payments 一次性充值服务数据库 schema。
3
+ *
4
+ * 关键说明(中文)
5
+ * - 本服务只记录 Dodo 支付侧事实
6
+ * - 真正的钱包账户、充值单与流水仍由 balance 服务负责
7
+ * - webhook 事件表用于幂等处理和同步状态审计
8
+ */
9
+ /**
10
+ * Dodo 支付记录表。
11
+ *
12
+ * 关键说明(中文)
13
+ * - 一条记录对应一次 topup 的 Dodo Checkout Session
14
+ * - `topup_id` 连接 balance 服务里的充值单
15
+ * - `checkout_url` 允许前端重试取回已创建的 Checkout 链接
16
+ */
17
+ export declare const dodoPayments: import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
18
+ name: "service_dodo_payments";
19
+ schema: undefined;
20
+ columns: {
21
+ payment_id: import("drizzle-orm/sqlite-core").SQLiteColumn<{
22
+ name: "payment_id";
23
+ tableName: "service_dodo_payments";
24
+ dataType: "string";
25
+ columnType: "SQLiteText";
26
+ data: string;
27
+ driverParam: string;
28
+ notNull: true;
29
+ hasDefault: false;
30
+ isPrimaryKey: true;
31
+ isAutoincrement: false;
32
+ hasRuntimeDefault: false;
33
+ enumValues: [string, ...string[]];
34
+ baseColumn: never;
35
+ identity: undefined;
36
+ generated: undefined;
37
+ }, {}, {
38
+ length: number | undefined;
39
+ }>;
40
+ topup_id: import("drizzle-orm/sqlite-core").SQLiteColumn<{
41
+ name: "topup_id";
42
+ tableName: "service_dodo_payments";
43
+ dataType: "string";
44
+ columnType: "SQLiteText";
45
+ data: string;
46
+ driverParam: string;
47
+ notNull: true;
48
+ hasDefault: false;
49
+ isPrimaryKey: false;
50
+ isAutoincrement: false;
51
+ hasRuntimeDefault: false;
52
+ enumValues: [string, ...string[]];
53
+ baseColumn: never;
54
+ identity: undefined;
55
+ generated: undefined;
56
+ }, {}, {
57
+ length: number | undefined;
58
+ }>;
59
+ user_id: import("drizzle-orm/sqlite-core").SQLiteColumn<{
60
+ name: "user_id";
61
+ tableName: "service_dodo_payments";
62
+ dataType: "string";
63
+ columnType: "SQLiteText";
64
+ data: string;
65
+ driverParam: string;
66
+ notNull: true;
67
+ hasDefault: false;
68
+ isPrimaryKey: false;
69
+ isAutoincrement: false;
70
+ hasRuntimeDefault: false;
71
+ enumValues: [string, ...string[]];
72
+ baseColumn: never;
73
+ identity: undefined;
74
+ generated: undefined;
75
+ }, {}, {
76
+ length: number | undefined;
77
+ }>;
78
+ dodo_checkout_session_id: import("drizzle-orm/sqlite-core").SQLiteColumn<{
79
+ name: "dodo_checkout_session_id";
80
+ tableName: "service_dodo_payments";
81
+ dataType: "string";
82
+ columnType: "SQLiteText";
83
+ data: string;
84
+ driverParam: string;
85
+ notNull: true;
86
+ hasDefault: false;
87
+ isPrimaryKey: false;
88
+ isAutoincrement: false;
89
+ hasRuntimeDefault: false;
90
+ enumValues: [string, ...string[]];
91
+ baseColumn: never;
92
+ identity: undefined;
93
+ generated: undefined;
94
+ }, {}, {
95
+ length: number | undefined;
96
+ }>;
97
+ dodo_payment_id: import("drizzle-orm/sqlite-core").SQLiteColumn<{
98
+ name: "dodo_payment_id";
99
+ tableName: "service_dodo_payments";
100
+ dataType: "string";
101
+ columnType: "SQLiteText";
102
+ data: string;
103
+ driverParam: string;
104
+ notNull: true;
105
+ hasDefault: false;
106
+ isPrimaryKey: false;
107
+ isAutoincrement: false;
108
+ hasRuntimeDefault: false;
109
+ enumValues: [string, ...string[]];
110
+ baseColumn: never;
111
+ identity: undefined;
112
+ generated: undefined;
113
+ }, {}, {
114
+ length: number | undefined;
115
+ }>;
116
+ amount: import("drizzle-orm/sqlite-core").SQLiteColumn<{
117
+ name: "amount";
118
+ tableName: "service_dodo_payments";
119
+ dataType: "number";
120
+ columnType: "SQLiteInteger";
121
+ data: number;
122
+ driverParam: number;
123
+ notNull: true;
124
+ hasDefault: false;
125
+ isPrimaryKey: false;
126
+ isAutoincrement: false;
127
+ hasRuntimeDefault: false;
128
+ enumValues: undefined;
129
+ baseColumn: never;
130
+ identity: undefined;
131
+ generated: undefined;
132
+ }, {}, {}>;
133
+ currency: import("drizzle-orm/sqlite-core").SQLiteColumn<{
134
+ name: "currency";
135
+ tableName: "service_dodo_payments";
136
+ dataType: "string";
137
+ columnType: "SQLiteText";
138
+ data: string;
139
+ driverParam: string;
140
+ notNull: true;
141
+ hasDefault: false;
142
+ isPrimaryKey: false;
143
+ isAutoincrement: false;
144
+ hasRuntimeDefault: false;
145
+ enumValues: [string, ...string[]];
146
+ baseColumn: never;
147
+ identity: undefined;
148
+ generated: undefined;
149
+ }, {}, {
150
+ length: number | undefined;
151
+ }>;
152
+ status: import("drizzle-orm/sqlite-core").SQLiteColumn<{
153
+ name: "status";
154
+ tableName: "service_dodo_payments";
155
+ dataType: "string";
156
+ columnType: "SQLiteText";
157
+ data: string;
158
+ driverParam: string;
159
+ notNull: true;
160
+ hasDefault: false;
161
+ isPrimaryKey: false;
162
+ isAutoincrement: false;
163
+ hasRuntimeDefault: false;
164
+ enumValues: [string, ...string[]];
165
+ baseColumn: never;
166
+ identity: undefined;
167
+ generated: undefined;
168
+ }, {}, {
169
+ length: number | undefined;
170
+ }>;
171
+ checkout_url: import("drizzle-orm/sqlite-core").SQLiteColumn<{
172
+ name: "checkout_url";
173
+ tableName: "service_dodo_payments";
174
+ dataType: "string";
175
+ columnType: "SQLiteText";
176
+ data: string;
177
+ driverParam: string;
178
+ notNull: true;
179
+ hasDefault: false;
180
+ isPrimaryKey: false;
181
+ isAutoincrement: false;
182
+ hasRuntimeDefault: false;
183
+ enumValues: [string, ...string[]];
184
+ baseColumn: never;
185
+ identity: undefined;
186
+ generated: undefined;
187
+ }, {}, {
188
+ length: number | undefined;
189
+ }>;
190
+ metadata_json: import("drizzle-orm/sqlite-core").SQLiteColumn<{
191
+ name: "metadata_json";
192
+ tableName: "service_dodo_payments";
193
+ dataType: "string";
194
+ columnType: "SQLiteText";
195
+ data: string;
196
+ driverParam: string;
197
+ notNull: true;
198
+ hasDefault: false;
199
+ isPrimaryKey: false;
200
+ isAutoincrement: false;
201
+ hasRuntimeDefault: false;
202
+ enumValues: [string, ...string[]];
203
+ baseColumn: never;
204
+ identity: undefined;
205
+ generated: undefined;
206
+ }, {}, {
207
+ length: number | undefined;
208
+ }>;
209
+ created_at: import("drizzle-orm/sqlite-core").SQLiteColumn<{
210
+ name: "created_at";
211
+ tableName: "service_dodo_payments";
212
+ dataType: "string";
213
+ columnType: "SQLiteText";
214
+ data: string;
215
+ driverParam: string;
216
+ notNull: true;
217
+ hasDefault: false;
218
+ isPrimaryKey: false;
219
+ isAutoincrement: false;
220
+ hasRuntimeDefault: false;
221
+ enumValues: [string, ...string[]];
222
+ baseColumn: never;
223
+ identity: undefined;
224
+ generated: undefined;
225
+ }, {}, {
226
+ length: number | undefined;
227
+ }>;
228
+ updated_at: import("drizzle-orm/sqlite-core").SQLiteColumn<{
229
+ name: "updated_at";
230
+ tableName: "service_dodo_payments";
231
+ dataType: "string";
232
+ columnType: "SQLiteText";
233
+ data: string;
234
+ driverParam: string;
235
+ notNull: true;
236
+ hasDefault: false;
237
+ isPrimaryKey: false;
238
+ isAutoincrement: false;
239
+ hasRuntimeDefault: false;
240
+ enumValues: [string, ...string[]];
241
+ baseColumn: never;
242
+ identity: undefined;
243
+ generated: undefined;
244
+ }, {}, {
245
+ length: number | undefined;
246
+ }>;
247
+ };
248
+ dialect: "sqlite";
249
+ }>;
250
+ /**
251
+ * Dodo webhook 事件表。
252
+ *
253
+ * 关键说明(中文)
254
+ * - `event_id` 作为 webhook 幂等键
255
+ * - `sync_status` 用于区分已应用、忽略和失败的事件
256
+ */
257
+ export declare const dodoEvents: import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
258
+ name: "service_dodo_events";
259
+ schema: undefined;
260
+ columns: {
261
+ event_id: import("drizzle-orm/sqlite-core").SQLiteColumn<{
262
+ name: "event_id";
263
+ tableName: "service_dodo_events";
264
+ dataType: "string";
265
+ columnType: "SQLiteText";
266
+ data: string;
267
+ driverParam: string;
268
+ notNull: true;
269
+ hasDefault: false;
270
+ isPrimaryKey: true;
271
+ isAutoincrement: false;
272
+ hasRuntimeDefault: false;
273
+ enumValues: [string, ...string[]];
274
+ baseColumn: never;
275
+ identity: undefined;
276
+ generated: undefined;
277
+ }, {}, {
278
+ length: number | undefined;
279
+ }>;
280
+ type: import("drizzle-orm/sqlite-core").SQLiteColumn<{
281
+ name: "type";
282
+ tableName: "service_dodo_events";
283
+ dataType: "string";
284
+ columnType: "SQLiteText";
285
+ data: string;
286
+ driverParam: string;
287
+ notNull: true;
288
+ hasDefault: false;
289
+ isPrimaryKey: false;
290
+ isAutoincrement: false;
291
+ hasRuntimeDefault: false;
292
+ enumValues: [string, ...string[]];
293
+ baseColumn: never;
294
+ identity: undefined;
295
+ generated: undefined;
296
+ }, {}, {
297
+ length: number | undefined;
298
+ }>;
299
+ payload_json: import("drizzle-orm/sqlite-core").SQLiteColumn<{
300
+ name: "payload_json";
301
+ tableName: "service_dodo_events";
302
+ dataType: "string";
303
+ columnType: "SQLiteText";
304
+ data: string;
305
+ driverParam: string;
306
+ notNull: true;
307
+ hasDefault: false;
308
+ isPrimaryKey: false;
309
+ isAutoincrement: false;
310
+ hasRuntimeDefault: false;
311
+ enumValues: [string, ...string[]];
312
+ baseColumn: never;
313
+ identity: undefined;
314
+ generated: undefined;
315
+ }, {}, {
316
+ length: number | undefined;
317
+ }>;
318
+ sync_status: import("drizzle-orm/sqlite-core").SQLiteColumn<{
319
+ name: "sync_status";
320
+ tableName: "service_dodo_events";
321
+ dataType: "string";
322
+ columnType: "SQLiteText";
323
+ data: string;
324
+ driverParam: string;
325
+ notNull: true;
326
+ hasDefault: false;
327
+ isPrimaryKey: false;
328
+ isAutoincrement: false;
329
+ hasRuntimeDefault: false;
330
+ enumValues: [string, ...string[]];
331
+ baseColumn: never;
332
+ identity: undefined;
333
+ generated: undefined;
334
+ }, {}, {
335
+ length: number | undefined;
336
+ }>;
337
+ sync_error: import("drizzle-orm/sqlite-core").SQLiteColumn<{
338
+ name: "sync_error";
339
+ tableName: "service_dodo_events";
340
+ dataType: "string";
341
+ columnType: "SQLiteText";
342
+ data: string;
343
+ driverParam: string;
344
+ notNull: true;
345
+ hasDefault: false;
346
+ isPrimaryKey: false;
347
+ isAutoincrement: false;
348
+ hasRuntimeDefault: false;
349
+ enumValues: [string, ...string[]];
350
+ baseColumn: never;
351
+ identity: undefined;
352
+ generated: undefined;
353
+ }, {}, {
354
+ length: number | undefined;
355
+ }>;
356
+ created_at: import("drizzle-orm/sqlite-core").SQLiteColumn<{
357
+ name: "created_at";
358
+ tableName: "service_dodo_events";
359
+ dataType: "string";
360
+ columnType: "SQLiteText";
361
+ data: string;
362
+ driverParam: string;
363
+ notNull: true;
364
+ hasDefault: false;
365
+ isPrimaryKey: false;
366
+ isAutoincrement: false;
367
+ hasRuntimeDefault: false;
368
+ enumValues: [string, ...string[]];
369
+ baseColumn: never;
370
+ identity: undefined;
371
+ generated: undefined;
372
+ }, {}, {
373
+ length: number | undefined;
374
+ }>;
375
+ };
376
+ dialect: "sqlite";
377
+ }>;
378
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/payment-dodo/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAavB,CAAC;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAOrB,CAAC"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Dodo Payments 一次性充值服务数据库 schema。
3
+ *
4
+ * 关键说明(中文)
5
+ * - 本服务只记录 Dodo 支付侧事实
6
+ * - 真正的钱包账户、充值单与流水仍由 balance 服务负责
7
+ * - webhook 事件表用于幂等处理和同步状态审计
8
+ */
9
+ import { integer, sqliteTable, text } from "drizzle-orm/sqlite-core";
10
+ /**
11
+ * Dodo 支付记录表。
12
+ *
13
+ * 关键说明(中文)
14
+ * - 一条记录对应一次 topup 的 Dodo Checkout Session
15
+ * - `topup_id` 连接 balance 服务里的充值单
16
+ * - `checkout_url` 允许前端重试取回已创建的 Checkout 链接
17
+ */
18
+ export const dodoPayments = sqliteTable("service_dodo_payments", {
19
+ payment_id: text("payment_id").primaryKey(),
20
+ topup_id: text("topup_id").notNull(),
21
+ user_id: text("user_id").notNull(),
22
+ dodo_checkout_session_id: text("dodo_checkout_session_id").notNull(),
23
+ dodo_payment_id: text("dodo_payment_id").notNull(),
24
+ amount: integer("amount").notNull(),
25
+ currency: text("currency").notNull(),
26
+ status: text("status").notNull(),
27
+ checkout_url: text("checkout_url").notNull(),
28
+ metadata_json: text("metadata_json").notNull(),
29
+ created_at: text("created_at").notNull(),
30
+ updated_at: text("updated_at").notNull(),
31
+ });
32
+ /**
33
+ * Dodo webhook 事件表。
34
+ *
35
+ * 关键说明(中文)
36
+ * - `event_id` 作为 webhook 幂等键
37
+ * - `sync_status` 用于区分已应用、忽略和失败的事件
38
+ */
39
+ export const dodoEvents = sqliteTable("service_dodo_events", {
40
+ event_id: text("event_id").primaryKey(),
41
+ type: text("type").notNull(),
42
+ payload_json: text("payload_json").notNull(),
43
+ sync_status: text("sync_status").notNull(),
44
+ sync_error: text("sync_error").notNull(),
45
+ created_at: text("created_at").notNull(),
46
+ });
47
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/payment-dodo/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAErE;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,WAAW,CAAC,uBAAuB,EAAE;IAC/D,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,UAAU,EAAE;IAC3C,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE;IACpC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE;IAClC,wBAAwB,EAAE,IAAI,CAAC,0BAA0B,CAAC,CAAC,OAAO,EAAE;IACpE,eAAe,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC,OAAO,EAAE;IAClD,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE;IACnC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE;IACpC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE;IAChC,YAAY,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,OAAO,EAAE;IAC5C,aAAa,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,OAAO,EAAE;IAC9C,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE;IACxC,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE;CACzC,CAAC,CAAC;AAEH;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,WAAW,CAAC,qBAAqB,EAAE;IAC3D,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,UAAU,EAAE;IACvC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE;IAC5B,YAAY,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,OAAO,EAAE;IAC5C,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,OAAO,EAAE;IAC1C,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE;IACxC,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE;CACzC,CAAC,CAAC"}
@@ -0,0 +1,261 @@
1
+ /**
2
+ * Dodo Payments 一次性充值服务对外类型定义。
3
+ *
4
+ * 关键说明(中文)
5
+ * - 当前能力只覆盖 Dodo Checkout 一次性充值
6
+ * - 不覆盖 subscription / entitlement
7
+ * - 支付成功后统一通过 balance.finishTopup() 完成到账
8
+ */
9
+ /**
10
+ * Dodo SDK 运行环境。
11
+ */
12
+ export type DodoPaymentEnvironment = "test_mode" | "live_mode";
13
+ /**
14
+ * 充值单最小只读视图。
15
+ */
16
+ export interface DodoPaymentTopupRecord extends Record<string, unknown> {
17
+ /**
18
+ * 充值单 ID。
19
+ */
20
+ topup_id: string;
21
+ /**
22
+ * 充值目标用户 ID。
23
+ */
24
+ user_id: string;
25
+ /**
26
+ * 充值金额。
27
+ */
28
+ amount: number;
29
+ /**
30
+ * 余额单位。
31
+ */
32
+ unit: string;
33
+ /**
34
+ * 充值单状态。
35
+ */
36
+ status: string;
37
+ /**
38
+ * 充值说明。
39
+ */
40
+ note: string;
41
+ }
42
+ /**
43
+ * Dodo 服务所需的 balance 最小桥接接口。
44
+ */
45
+ export interface DodoPaymentServiceBalanceBridge {
46
+ /**
47
+ * 读取充值单。
48
+ */
49
+ readTopup(topup_id: string): Promise<DodoPaymentTopupRecord>;
50
+ /**
51
+ * 完成充值单并真正入账。
52
+ */
53
+ finishTopup(topup_id: string, extra?: {
54
+ /**
55
+ * 说明文本。
56
+ */
57
+ note?: string;
58
+ /**
59
+ * 外部引用 ID。
60
+ */
61
+ ref?: string;
62
+ /**
63
+ * 结构化扩展字段。
64
+ */
65
+ meta?: Record<string, unknown>;
66
+ }): Promise<DodoPaymentTopupRecord>;
67
+ }
68
+ /**
69
+ * Dodo 支付服务配置。
70
+ */
71
+ export interface DodoPaymentServiceOptions {
72
+ /**
73
+ * 已挂载到 City 的 balance 服务实例。
74
+ *
75
+ * Dodo 服务会通过它读取 topup,并在 webhook 支付成功后调用
76
+ * `finishTopup()` 真正完成到账。
77
+ */
78
+ balance: DodoPaymentServiceBalanceBridge;
79
+ /**
80
+ * Dodo Payments API key。
81
+ *
82
+ * 未传入时会读取 City env 中的 `DODO_PAYMENTS_API_KEY`。
83
+ */
84
+ api_key?: string;
85
+ /**
86
+ * Dodo Checkout 使用的 product_id。
87
+ *
88
+ * 未传入时会读取 City env 中的 `DODO_PRODUCT_ID`。
89
+ */
90
+ product_id?: string;
91
+ /**
92
+ * Dodo webhook signing key。
93
+ *
94
+ * 未传入时会读取 City env 中的 `DODO_WEBHOOK_KEY`。
95
+ */
96
+ webhook_key?: string;
97
+ /**
98
+ * Dodo SDK 运行环境。
99
+ *
100
+ * 未传入时会读取 `DODO_ENVIRONMENT`,最终默认 `test_mode`。
101
+ */
102
+ environment?: DodoPaymentEnvironment;
103
+ /**
104
+ * 默认结算币种。
105
+ */
106
+ currency?: string;
107
+ /**
108
+ * Dodo API 基础地址。
109
+ *
110
+ * 测试时可以覆写到伪造服务。
111
+ */
112
+ api_base_url?: string;
113
+ }
114
+ /**
115
+ * Dodo Checkout 创建请求。
116
+ */
117
+ export interface DodoCreateCheckoutInput extends Record<string, unknown> {
118
+ /**
119
+ * 对应的 balance topup ID。
120
+ */
121
+ topup_id: string;
122
+ }
123
+ /**
124
+ * Dodo Checkout 创建结果。
125
+ */
126
+ export interface DodoCheckoutCreateResult {
127
+ /**
128
+ * 服务内部支付记录 ID。
129
+ */
130
+ payment_id: string;
131
+ /**
132
+ * 对应的 balance topup ID。
133
+ */
134
+ topup_id: string;
135
+ /**
136
+ * Dodo Checkout Session ID。
137
+ */
138
+ dodo_checkout_session_id: string;
139
+ /**
140
+ * Dodo Payment ID。
141
+ */
142
+ dodo_payment_id: string;
143
+ /**
144
+ * Dodo Checkout 托管页面 URL。
145
+ */
146
+ checkout_url: string;
147
+ /**
148
+ * 当前支付状态。
149
+ */
150
+ status: DodoPaymentStatus;
151
+ }
152
+ /**
153
+ * Dodo 支付记录状态。
154
+ */
155
+ export type DodoPaymentStatus = "pending" | "paid" | "expired" | "failed" | "canceled";
156
+ /**
157
+ * Dodo webhook 同步状态。
158
+ */
159
+ export type DodoEventSyncStatus = "pending" | "applied" | "ignored" | "failed";
160
+ /**
161
+ * Dodo 支付记录。
162
+ */
163
+ export interface DodoPaymentRecord extends Record<string, unknown> {
164
+ /**
165
+ * 服务内部支付记录 ID。
166
+ */
167
+ payment_id: string;
168
+ /**
169
+ * 对应的 balance topup ID。
170
+ */
171
+ topup_id: string;
172
+ /**
173
+ * 充值目标用户 ID。
174
+ */
175
+ user_id: string;
176
+ /**
177
+ * Dodo Checkout Session ID。
178
+ */
179
+ dodo_checkout_session_id: string;
180
+ /**
181
+ * Dodo Payment ID。
182
+ *
183
+ * 创建 Checkout 时可能为空字符串,待 webhook 补全。
184
+ */
185
+ dodo_payment_id: string;
186
+ /**
187
+ * 本次充值金额。
188
+ */
189
+ amount: number;
190
+ /**
191
+ * 结算币种。
192
+ */
193
+ currency: string;
194
+ /**
195
+ * 当前支付状态。
196
+ */
197
+ status: DodoPaymentStatus;
198
+ /**
199
+ * Dodo Checkout 托管页面 URL。
200
+ */
201
+ checkout_url: string;
202
+ /**
203
+ * 扩展字段 JSON 文本。
204
+ */
205
+ metadata_json: string;
206
+ /**
207
+ * 创建时间。
208
+ */
209
+ created_at: string;
210
+ /**
211
+ * 更新时间。
212
+ */
213
+ updated_at: string;
214
+ }
215
+ /**
216
+ * Dodo webhook 事件记录。
217
+ */
218
+ export interface DodoEventRecord extends Record<string, unknown> {
219
+ /**
220
+ * Dodo webhook 事件 ID。
221
+ */
222
+ event_id: string;
223
+ /**
224
+ * Dodo webhook 事件类型。
225
+ */
226
+ type: string;
227
+ /**
228
+ * 原始 webhook payload JSON 文本。
229
+ */
230
+ payload_json: string;
231
+ /**
232
+ * 同步状态。
233
+ */
234
+ sync_status: DodoEventSyncStatus;
235
+ /**
236
+ * 同步失败信息。
237
+ */
238
+ sync_error: string;
239
+ /**
240
+ * 创建时间。
241
+ */
242
+ created_at: string;
243
+ }
244
+ /**
245
+ * Dodo webhook 事件。
246
+ */
247
+ export interface DodoWebhookEvent extends Record<string, unknown> {
248
+ /**
249
+ * Dodo webhook 事件 ID。
250
+ */
251
+ id?: unknown;
252
+ /**
253
+ * Dodo webhook 事件类型。
254
+ */
255
+ type?: unknown;
256
+ /**
257
+ * Dodo webhook 事件主体。
258
+ */
259
+ data?: unknown;
260
+ }
261
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/payment-dodo/types.ts"],"names":[],"mappings":"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"}