@tokenbuddy/contracts 1.0.0 → 1.0.36

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.
@@ -9,37 +9,83 @@ export declare function encryptSm4EcbPkcs7Base64(plaintext: string, sm4KeyBase64
9
9
  */
10
10
  export declare function decryptSm4EcbPkcs7Base64(encryptedBase64: string, sm4KeyBase64: string): string;
11
11
  /**
12
- * Compute md5 hex digest of a string (indicator).
12
+ * 计算资源 slug MD5 摘要(hex 编码)。
13
+ * 用作 Clawtip 支付的 indicator 字段,seller 端用于校验资源一致性。
14
+ *
15
+ * @param slug 资源 slug
16
+ * @returns 小写十六进制的 MD5 摘要
13
17
  */
14
18
  export declare function computeIndicator(slug: string): string;
15
19
  /**
16
- * Generate a 32-character lowercase hex string as orderNo (UUID v4 without dashes).
20
+ * 生成 32 字符小写十六进制字符串作为订单号。
21
+ * 实现细节:UUID v4 去除中横线,保证全局唯一且 URL/日志友好。
22
+ *
23
+ * @returns 32 字符小写 hex 字符串
17
24
  */
18
25
  export declare function generateOrderNo(): string;
19
26
  /**
20
- * Encrypt Clawtip order data: {"orderNo":..., "amount":..., "payTo":...}
21
- * Returns the base64 encrypted data.
27
+ * 加密 Clawtip 订单数据。
28
+ * 明文格式:`{"orderNo":..., "amount":..., "payTo":...}`,使用 SM4-ECB-PKCS7 加密后 base64 编码。
29
+ *
30
+ * @param orderNo 订单号
31
+ * @param amount 订单金额(分)
32
+ * @param payTo 收款方标识
33
+ * @param sm4KeyBase64 SM4 密钥的 base64 编码(必须解码为 16 字节)
34
+ * @returns base64 编码的密文
22
35
  */
23
36
  export declare function encryptClawtipOrderData(orderNo: string, amount: number, payTo: string, sm4KeyBase64: string): string;
37
+ /**
38
+ * Clawtip 支付下单所需的完整参数。
39
+ * 由 `buildClawtipPaymentParams` 在 buyer 端组装后下发到 seller。
40
+ */
24
41
  export interface ClawtipPaymentParams {
42
+ /** 32 字符小写十六进制的订单号(UUID v4 去横线),全局唯一标识一次下单 */
25
43
  orderNo: string;
44
+ /** 订单金额,单位为分(人民币 1 元 = 100 分) */
26
45
  amountFen: number;
46
+ /** 收款方标识,seller 校验该字段决定打款目标 */
27
47
  payTo: string;
48
+ /** SM4-ECB-PKCS7 加密的 `{orderNo, amount, payTo}` JSON,base64 编码 */
28
49
  encryptedData: string;
50
+ /** 资源 slug 的 MD5 摘要,用于 seller 校验资源一致性 */
29
51
  indicator: string;
52
+ /** 资源 slug(人类可读 ID),与 indicator 配对使用 */
30
53
  slug: string;
54
+ /** Clawtip 平台的技能 ID */
31
55
  skillId: string;
56
+ /** 支付场景的人类可读描述,展示给支付方 */
32
57
  description: string;
58
+ /** 资源下载/访问 URL,可用于支付完成后的资源定位 */
33
59
  resourceUrl: string;
34
60
  }
61
+ /**
62
+ * 构造 `ClawtipPaymentParams` 所需的原始输入。
63
+ * 调用方只需要提供业务字段;`orderNo` 和 `encryptedData` 由 builder 自动生成。
64
+ */
35
65
  export interface ClawtipPaymentParamsInput {
66
+ /** 收款方标识 */
36
67
  payTo: string;
68
+ /** SM4 密钥的 base64 编码(解密后必须为 16 字节) */
37
69
  sm4KeyBase64: string;
70
+ /** 资源 slug,会同时参与 indicator 计算 */
38
71
  skillSlug: string;
72
+ /** Clawtip 平台的技能 ID */
39
73
  skillId: string;
74
+ /** 支付场景描述 */
40
75
  description: string;
76
+ /** 资源 URL */
41
77
  resourceUrl: string;
78
+ /** 订单金额(分),必须为正整数 */
42
79
  amountFen: number;
43
80
  }
81
+ /**
82
+ * 构造 `ClawtipPaymentParams` 完整参数。
83
+ * 负责:生成 `orderNo`、对 `(orderNo, amount, payTo)` 做 SM4 加密、计算 `indicator`。
84
+ * `amountFen` 必须为正整数,否则抛错。
85
+ *
86
+ * @param input 业务字段输入
87
+ * @returns 包含加密数据的完整支付参数
88
+ * @throws Error 当 `amountFen` 不是正整数时
89
+ */
44
90
  export declare function buildClawtipPaymentParams(input: ClawtipPaymentParamsInput): ClawtipPaymentParams;
45
91
  //# sourceMappingURL=crypto.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../src/crypto.ts"],"names":[],"mappings":"AAeA;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAWxF;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,eAAe,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAU9F;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAErD;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,GACnB,MAAM,CAOR;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,yBAAyB,GAAG,oBAAoB,CAiBhG"}
1
+ {"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../src/crypto.ts"],"names":[],"mappings":"AAeA;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAWxF;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,eAAe,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAU9F;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAErD;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,GACnB,MAAM,CAOR;AAED;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,8CAA8C;IAC9C,OAAO,EAAE,MAAM,CAAC;IAChB,iCAAiC;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,+BAA+B;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,kEAAkE;IAClE,aAAa,EAAE,MAAM,CAAC;IACtB,yCAAyC;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,wCAAwC;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,uBAAuB;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,yBAAyB;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,gCAAgC;IAChC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,MAAM,WAAW,yBAAyB;IACxC,YAAY;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,sCAAsC;IACtC,YAAY,EAAE,MAAM,CAAC;IACrB,iCAAiC;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,uBAAuB;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,qBAAqB;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,yBAAyB,GAAG,oBAAoB,CAiBhG"}
@@ -86,20 +86,33 @@ function decryptSm4EcbPkcs7Base64(encryptedBase64, sm4KeyBase64) {
86
86
  }
87
87
  }
88
88
  /**
89
- * Compute md5 hex digest of a string (indicator).
89
+ * 计算资源 slug MD5 摘要(hex 编码)。
90
+ * 用作 Clawtip 支付的 indicator 字段,seller 端用于校验资源一致性。
91
+ *
92
+ * @param slug 资源 slug
93
+ * @returns 小写十六进制的 MD5 摘要
90
94
  */
91
95
  function computeIndicator(slug) {
92
96
  return crypto.createHash("md5").update(slug, "utf8").digest("hex");
93
97
  }
94
98
  /**
95
- * Generate a 32-character lowercase hex string as orderNo (UUID v4 without dashes).
99
+ * 生成 32 字符小写十六进制字符串作为订单号。
100
+ * 实现细节:UUID v4 去除中横线,保证全局唯一且 URL/日志友好。
101
+ *
102
+ * @returns 32 字符小写 hex 字符串
96
103
  */
97
104
  function generateOrderNo() {
98
105
  return (0, uuid_1.v4)().replace(/-/g, "");
99
106
  }
100
107
  /**
101
- * Encrypt Clawtip order data: {"orderNo":..., "amount":..., "payTo":...}
102
- * Returns the base64 encrypted data.
108
+ * 加密 Clawtip 订单数据。
109
+ * 明文格式:`{"orderNo":..., "amount":..., "payTo":...}`,使用 SM4-ECB-PKCS7 加密后 base64 编码。
110
+ *
111
+ * @param orderNo 订单号
112
+ * @param amount 订单金额(分)
113
+ * @param payTo 收款方标识
114
+ * @param sm4KeyBase64 SM4 密钥的 base64 编码(必须解码为 16 字节)
115
+ * @returns base64 编码的密文
103
116
  */
104
117
  function encryptClawtipOrderData(orderNo, amount, payTo, sm4KeyBase64) {
105
118
  const plaintext = JSON.stringify({
@@ -109,6 +122,15 @@ function encryptClawtipOrderData(orderNo, amount, payTo, sm4KeyBase64) {
109
122
  });
110
123
  return encryptSm4EcbPkcs7Base64(plaintext, sm4KeyBase64);
111
124
  }
125
+ /**
126
+ * 构造 `ClawtipPaymentParams` 完整参数。
127
+ * 负责:生成 `orderNo`、对 `(orderNo, amount, payTo)` 做 SM4 加密、计算 `indicator`。
128
+ * `amountFen` 必须为正整数,否则抛错。
129
+ *
130
+ * @param input 业务字段输入
131
+ * @returns 包含加密数据的完整支付参数
132
+ * @throws Error 当 `amountFen` 不是正整数时
133
+ */
112
134
  function buildClawtipPaymentParams(input) {
113
135
  if (!Number.isInteger(input.amountFen) || input.amountFen < 1) {
114
136
  throw new Error("amount_fen must be greater than zero");
@@ -1 +1 @@
1
- {"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../src/crypto.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmBA,4DAWC;AAMD,4DAUC;AAKD,4CAEC;AAKD,0CAEC;AAMD,0DAYC;AAwBD,8DAiBC;AAvHD,+CAAiC;AACjC,+BAAoC;AAEpC;;;GAGG;AACH,SAAS,YAAY,CAAC,YAAoB;IACxC,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;IAChD,IAAI,GAAG,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,wCAAwC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;GAGG;AACH,SAAgB,wBAAwB,CAAC,SAAiB,EAAE,YAAoB;IAC9E,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC;QACvC,wEAAwE;QACxE,MAAM,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QAC3D,IAAI,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC3D,SAAS,IAAI,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACpC,OAAO,SAAS,CAAC;IACnB,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,0BAA0B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAC7D,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAgB,wBAAwB,CAAC,eAAuB,EAAE,YAAoB;IACpF,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC;QACvC,MAAM,QAAQ,GAAG,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QAC/D,IAAI,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,eAAe,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QACnE,SAAS,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACpC,OAAO,SAAS,CAAC;IACnB,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,0BAA0B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAC7D,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,gBAAgB,CAAC,IAAY;IAC3C,OAAO,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACrE,CAAC;AAED;;GAEG;AACH,SAAgB,eAAe;IAC7B,OAAO,IAAA,SAAM,GAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AACpC,CAAC;AAED;;;GAGG;AACH,SAAgB,uBAAuB,CACrC,OAAe,EACf,MAAc,EACd,KAAa,EACb,YAAoB;IAEpB,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QAC/B,OAAO;QACP,MAAM;QACN,KAAK;KACN,CAAC,CAAC;IACH,OAAO,wBAAwB,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;AAC3D,CAAC;AAwBD,SAAgB,yBAAyB,CAAC,KAAgC;IACxE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC;QAC9D,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAC1D,CAAC;IAED,MAAM,OAAO,GAAG,eAAe,EAAE,CAAC;IAClC,OAAO;QACL,OAAO;QACP,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,aAAa,EAAE,uBAAuB,CAAC,OAAO,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,YAAY,CAAC;QACjG,SAAS,EAAE,gBAAgB,CAAC,KAAK,CAAC,SAAS,CAAC;QAC5C,IAAI,EAAE,KAAK,CAAC,SAAS;QACrB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,WAAW,EAAE,KAAK,CAAC,WAAW;KAC/B,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../src/crypto.ts"],"names":[],"mappings":"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"}
@@ -30,18 +30,60 @@ export declare enum ErrorCode {
30
30
  UpstreamTimeout = "upstream_timeout",
31
31
  ContractVersionDrift = "contract_version_drift"
32
32
  }
33
+ /**
34
+ * 错误码到重试策略分类的映射。
35
+ * buyer / seller 路由层根据该结果决定是否自动重试、是否触发 fail-closed。
36
+ *
37
+ * @param code 业务错误码
38
+ * @returns 重试分类:`RetryableWithBackoff`(建议退避重试)、`FailClosed`(关闭交易、人工介入)、`NotRetryable`(直接报错给用户)
39
+ */
33
40
  export declare function getRetryClass(code: ErrorCode): RetryClass;
41
+ /**
42
+ * 错误码到 HTTP 状态码的映射。
43
+ * 当协议层把业务错误透传为 HTTP 响应(如 buyer → wallet-bootstrap 健康检查)时使用。
44
+ *
45
+ * @param code 业务错误码
46
+ * @returns 对应的 HTTP 状态码(4xx/5xx)
47
+ */
34
48
  export declare function getHttpStatus(code: ErrorCode): number;
49
+ /**
50
+ * 错误码到默认人类可读消息的映射。
51
+ * 用于 `createErrorEnvelope` 未传 `message` 参数时的兜底文案。
52
+ *
53
+ * @param code 业务错误码
54
+ * @returns 默认错误消息
55
+ */
35
56
  export declare function getDefaultMessage(code: ErrorCode): string;
57
+ /**
58
+ * 标准错误体的字段定义。HTTP 响应或 JSON-RPC error 对象均使用该结构。
59
+ */
36
60
  export interface ErrorBody {
61
+ /** 机器可读的错误码,用于客户端做错误分支处理 */
37
62
  code: ErrorCode;
63
+ /** 错误重试分类(fail_closed / retryable_with_backoff / not_retryable) */
38
64
  retryClass: RetryClass;
65
+ /** 人类可读的错误描述 */
39
66
  message: string;
67
+ /** 推荐的 HTTP 状态码,HTTP 透传场景下使用 */
40
68
  httpStatus: number;
69
+ /** 退避建议秒数(仅 429/重试类错误附带) */
41
70
  retryAfterSeconds?: number;
42
71
  }
72
+ /**
73
+ * 错误响应的标准外壳。所有非 2xx 响应都以 `{ error: {...} }` 形式返回。
74
+ */
43
75
  export interface ErrorEnvelope {
76
+ /** 嵌套的错误体 */
44
77
  error: ErrorBody;
45
78
  }
79
+ /**
80
+ * 构造标准错误响应外壳。
81
+ * 自动填充 `retryClass`、`httpStatus`、默认 `message`,调用方只需提供 `code` 和可选的覆盖字段。
82
+ *
83
+ * @param code 业务错误码,决定 retryClass / httpStatus / 默认 message
84
+ * @param message 自定义消息;省略时使用 `getDefaultMessage(code)` 兜底文案
85
+ * @param retryAfterSeconds 退避秒数,仅在需要时填入(如 429)
86
+ * @returns 完整的 `ErrorEnvelope` 对象
87
+ */
46
88
  export declare function createErrorEnvelope(code: ErrorCode, message?: string, retryAfterSeconds?: number): ErrorEnvelope;
47
89
  //# sourceMappingURL=errors.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"AAAA,oBAAY,UAAU;IACpB,UAAU,gBAAgB;IAC1B,oBAAoB,2BAA2B;IAC/C,YAAY,kBAAkB;CAC/B;AAED,oBAAY,SAAS;IACnB,YAAY,kBAAkB;IAC9B,eAAe,qBAAqB;IACpC,0BAA0B,iCAAiC;IAC3D,qBAAqB,6BAA6B;IAClD,4BAA4B,mCAAmC;IAC/D,gBAAgB,sBAAsB;IACtC,cAAc,oBAAoB;IAClC,qBAAqB,4BAA4B;IACjD,sBAAsB,6BAA6B;IACnD,wBAAwB,+BAA+B;IACvD,oBAAoB,2BAA2B;IAC/C,iBAAiB,uBAAuB;IACxC,qBAAqB,6BAA6B;IAClD,iBAAiB,wBAAwB;IACzC,iBAAiB,wBAAwB;IACzC,qBAAqB,4BAA4B;IACjD,mBAAmB,yBAAyB;IAC5C,gBAAgB,uBAAuB;IACvC,eAAe,sBAAsB;IACrC,iBAAiB,wBAAwB;IACzC,qBAAqB,4BAA4B;IACjD,oBAAoB,2BAA2B;IAC/C,gBAAgB,uBAAuB;IACvC,eAAe,qBAAqB;IACpC,oBAAoB,2BAA2B;CAChD;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,SAAS,GAAG,UAAU,CAYzD;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAuCrD;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAuDzD;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,SAAS,CAAC;IAChB,UAAU,EAAE,UAAU,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,SAAS,CAAC;CAClB;AAED,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,SAAS,EACf,OAAO,CAAC,EAAE,MAAM,EAChB,iBAAiB,CAAC,EAAE,MAAM,GACzB,aAAa,CAUf"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"AAAA,oBAAY,UAAU;IACpB,UAAU,gBAAgB;IAC1B,oBAAoB,2BAA2B;IAC/C,YAAY,kBAAkB;CAC/B;AAED,oBAAY,SAAS;IACnB,YAAY,kBAAkB;IAC9B,eAAe,qBAAqB;IACpC,0BAA0B,iCAAiC;IAC3D,qBAAqB,6BAA6B;IAClD,4BAA4B,mCAAmC;IAC/D,gBAAgB,sBAAsB;IACtC,cAAc,oBAAoB;IAClC,qBAAqB,4BAA4B;IACjD,sBAAsB,6BAA6B;IACnD,wBAAwB,+BAA+B;IACvD,oBAAoB,2BAA2B;IAC/C,iBAAiB,uBAAuB;IACxC,qBAAqB,6BAA6B;IAClD,iBAAiB,wBAAwB;IACzC,iBAAiB,wBAAwB;IACzC,qBAAqB,4BAA4B;IACjD,mBAAmB,yBAAyB;IAC5C,gBAAgB,uBAAuB;IACvC,eAAe,sBAAsB;IACrC,iBAAiB,wBAAwB;IACzC,qBAAqB,4BAA4B;IACjD,oBAAoB,2BAA2B;IAC/C,gBAAgB,uBAAuB;IACvC,eAAe,qBAAqB;IACpC,oBAAoB,2BAA2B;CAChD;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,SAAS,GAAG,UAAU,CAYzD;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAuCrD;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAuDzD;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,4BAA4B;IAC5B,IAAI,EAAE,SAAS,CAAC;IAChB,mEAAmE;IACnE,UAAU,EAAE,UAAU,CAAC;IACvB,gBAAgB;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,gCAAgC;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,4BAA4B;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,aAAa;IACb,KAAK,EAAE,SAAS,CAAC;CAClB;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,SAAS,EACf,OAAO,CAAC,EAAE,MAAM,EAChB,iBAAiB,CAAC,EAAE,MAAM,GACzB,aAAa,CAUf"}
@@ -39,6 +39,13 @@ var ErrorCode;
39
39
  ErrorCode["UpstreamTimeout"] = "upstream_timeout";
40
40
  ErrorCode["ContractVersionDrift"] = "contract_version_drift";
41
41
  })(ErrorCode || (exports.ErrorCode = ErrorCode = {}));
42
+ /**
43
+ * 错误码到重试策略分类的映射。
44
+ * buyer / seller 路由层根据该结果决定是否自动重试、是否触发 fail-closed。
45
+ *
46
+ * @param code 业务错误码
47
+ * @returns 重试分类:`RetryableWithBackoff`(建议退避重试)、`FailClosed`(关闭交易、人工介入)、`NotRetryable`(直接报错给用户)
48
+ */
42
49
  function getRetryClass(code) {
43
50
  switch (code) {
44
51
  case ErrorCode.BusyCapacity:
@@ -52,6 +59,13 @@ function getRetryClass(code) {
52
59
  return RetryClass.NotRetryable;
53
60
  }
54
61
  }
62
+ /**
63
+ * 错误码到 HTTP 状态码的映射。
64
+ * 当协议层把业务错误透传为 HTTP 响应(如 buyer → wallet-bootstrap 健康检查)时使用。
65
+ *
66
+ * @param code 业务错误码
67
+ * @returns 对应的 HTTP 状态码(4xx/5xx)
68
+ */
55
69
  function getHttpStatus(code) {
56
70
  switch (code) {
57
71
  case ErrorCode.BusyCapacity:
@@ -92,6 +106,13 @@ function getHttpStatus(code) {
92
106
  return 500;
93
107
  }
94
108
  }
109
+ /**
110
+ * 错误码到默认人类可读消息的映射。
111
+ * 用于 `createErrorEnvelope` 未传 `message` 参数时的兜底文案。
112
+ *
113
+ * @param code 业务错误码
114
+ * @returns 默认错误消息
115
+ */
95
116
  function getDefaultMessage(code) {
96
117
  switch (code) {
97
118
  case ErrorCode.BusyCapacity:
@@ -148,6 +169,15 @@ function getDefaultMessage(code) {
148
169
  return "An unknown error occurred.";
149
170
  }
150
171
  }
172
+ /**
173
+ * 构造标准错误响应外壳。
174
+ * 自动填充 `retryClass`、`httpStatus`、默认 `message`,调用方只需提供 `code` 和可选的覆盖字段。
175
+ *
176
+ * @param code 业务错误码,决定 retryClass / httpStatus / 默认 message
177
+ * @param message 自定义消息;省略时使用 `getDefaultMessage(code)` 兜底文案
178
+ * @param retryAfterSeconds 退避秒数,仅在需要时填入(如 429)
179
+ * @returns 完整的 `ErrorEnvelope` 对象
180
+ */
151
181
  function createErrorEnvelope(code, message, retryAfterSeconds) {
152
182
  return {
153
183
  error: {
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
1
  export * from "./errors.js";
2
2
  export * from "./crypto.js";
3
+ export * from "./upstream-balance-probe.js";
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,6BAA6B,CAAC"}
package/dist/src/index.js CHANGED
@@ -16,4 +16,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./errors.js"), exports);
18
18
  __exportStar(require("./crypto.js"), exports);
19
+ __exportStar(require("./upstream-balance-probe.js"), exports);
19
20
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA4B;AAC5B,8CAA4B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA4B;AAC5B,8CAA4B;AAC5B,8DAA4C"}
@@ -0,0 +1,41 @@
1
+ export type BalanceCurrency = "USD" | "CNY" | null;
2
+ export type BalanceSource = "deepseek" | "stepfun" | "siliconflow" | "openrouter" | "novita" | "newapi_generic" | "usage_generic" | "unknown";
3
+ export type BalanceProbeTemplate = "auto" | "deepseek" | "stepfun" | "siliconflow" | "openrouter" | "novita" | "newapi_generic" | "usage_generic" | "none";
4
+ export interface BalanceSnapshot {
5
+ rawAmount: number | null;
6
+ amountUsdMicros: number | null;
7
+ currency: BalanceCurrency;
8
+ source: BalanceSource;
9
+ fetchedAt: number;
10
+ error?: {
11
+ httpStatus: number;
12
+ message: string;
13
+ };
14
+ }
15
+ export interface BalanceProbeConfig {
16
+ upstreamUrl?: string;
17
+ upstreamBalanceUrl?: string;
18
+ upstreamApiKey?: string;
19
+ upstreamUserId?: string;
20
+ upstreamBalanceProbe?: {
21
+ template?: BalanceProbeTemplate;
22
+ url?: string;
23
+ userId?: string;
24
+ rechargeUrl?: string;
25
+ };
26
+ }
27
+ export interface BalanceProbeOptions {
28
+ fetch?: typeof fetch;
29
+ now?: () => number;
30
+ timeoutMs?: number;
31
+ cnyUsdRate?: number;
32
+ cache?: BalanceProbeCache;
33
+ }
34
+ export declare class BalanceProbeCache {
35
+ private readonly entries;
36
+ get(key: string, now: number): BalanceSnapshot | undefined;
37
+ setFailure(key: string, snapshot: BalanceSnapshot, now: number): void;
38
+ }
39
+ export declare const defaultBalanceProbeCache: BalanceProbeCache;
40
+ export declare function probeUpstreamBalance(config: BalanceProbeConfig, options?: BalanceProbeOptions): Promise<BalanceSnapshot>;
41
+ //# sourceMappingURL=upstream-balance-probe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upstream-balance-probe.d.ts","sourceRoot":"","sources":["../../src/upstream-balance-probe.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GAAG,KAAK,GAAG,KAAK,GAAG,IAAI,CAAC;AACnD,MAAM,MAAM,aAAa,GACrB,UAAU,GACV,SAAS,GACT,aAAa,GACb,YAAY,GACZ,QAAQ,GACR,gBAAgB,GAChB,eAAe,GACf,SAAS,CAAC;AAEd,MAAM,MAAM,oBAAoB,GAC5B,MAAM,GACN,UAAU,GACV,SAAS,GACT,aAAa,GACb,YAAY,GACZ,QAAQ,GACR,gBAAgB,GAChB,eAAe,GACf,MAAM,CAAC;AAEX,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,EAAE,eAAe,CAAC;IAC1B,MAAM,EAAE,aAAa,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE;QACN,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oBAAoB,CAAC,EAAE;QACrB,QAAQ,CAAC,EAAE,oBAAoB,CAAC;QAChC,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,iBAAiB,CAAC;CAC3B;AAaD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuE;IAExF,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAW1D,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;CAM7E;AAED,eAAO,MAAM,wBAAwB,mBAA0B,CAAC;AAEhE,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,kBAAkB,EAC1B,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,eAAe,CAAC,CAsD1B"}