@trustbaseai/protocol 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +348 -0
- package/dist/bundle-hash.d.ts +54 -0
- package/dist/bundle-hash.d.ts.map +1 -0
- package/dist/bundle-hash.js +105 -0
- package/dist/bundle-hash.js.map +1 -0
- package/dist/canonical.d.ts +65 -0
- package/dist/canonical.d.ts.map +1 -0
- package/dist/canonical.js +215 -0
- package/dist/canonical.js.map +1 -0
- package/dist/constants.d.ts +200 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +216 -0
- package/dist/constants.js.map +1 -0
- package/dist/endpoint-protocol.d.ts +143 -0
- package/dist/endpoint-protocol.d.ts.map +1 -0
- package/dist/endpoint-protocol.js +236 -0
- package/dist/endpoint-protocol.js.map +1 -0
- package/dist/errors.d.ts +13 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +21 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +121 -0
- package/dist/index.js.map +1 -0
- package/dist/registry.d.ts +116 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +637 -0
- package/dist/registry.js.map +1 -0
- package/dist/sp-framework.d.ts +686 -0
- package/dist/sp-framework.d.ts.map +1 -0
- package/dist/sp-framework.js +187 -0
- package/dist/sp-framework.js.map +1 -0
- package/dist/validation.d.ts +37 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/validation.js +85 -0
- package/dist/validation.js.map +1 -0
- package/dist/ws-protocol.d.ts +242 -0
- package/dist/ws-protocol.d.ts.map +1 -0
- package/dist/ws-protocol.js +289 -0
- package/dist/ws-protocol.js.map +1 -0
- package/package.json +34 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sp-framework.d.ts","sourceRoot":"","sources":["../src/sp-framework.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* sp-framework.ts —— TrustBase 服务商抽象层 (Service Provider Framework)
|
|
4
|
+
*
|
|
5
|
+
* ## 这是什么
|
|
6
|
+
*
|
|
7
|
+
* TrustBase 的服务商 (SP) 是商户与主链/支付通道之间的网关角色:帮商户进件
|
|
8
|
+
* (微信支付特约商户)、接收并验证支付回调、把支付事实上链、按登记比例抽佣分账、
|
|
9
|
+
* 支持商户自由迁出迁入。服务商行业形态多样(附近商圈/国内电商/垂直私域/网课/
|
|
10
|
+
* 订阅/技术服务),本文件把它们收敛成**一组必须实现的接口 + 每行业一个扩展点**。
|
|
11
|
+
*
|
|
12
|
+
* **成为 TrustBase 服务商 = 实现本文件里的 `ServiceProviderGateway`。**
|
|
13
|
+
*
|
|
14
|
+
* ## 本文件的纪律(与 @trustbase/protocol 全包一致)
|
|
15
|
+
*
|
|
16
|
+
* - **纯类型 + 接口 + 常量**:零实现、零依赖、零副作用,Node/浏览器通用。
|
|
17
|
+
* - 私钥、签名、网络、存储都不在这里(实现参考 trustbase-seller-backend)。
|
|
18
|
+
*
|
|
19
|
+
* ## 三层映射(每个接口方法都用 JSDoc 标注)
|
|
20
|
+
*
|
|
21
|
+
* | 层 | 含义 | 出处 |
|
|
22
|
+
* |---|---|---|
|
|
23
|
+
* | `@chain` | 链上对应 Msg / Query | trustchain-relmerge `proto/trustchain/serviceprovider/v1/*.proto` |
|
|
24
|
+
* | `@backend` | 后端对应路由/实现文件 | trustbase-seller-backend `routes/sp-*.js`、`payments/wechat/profitsharing.js` |
|
|
25
|
+
* | `@wechat` | 微信对应 APIv3 接口 | pay.weixin.qq.com 服务商/特约商户文档 |
|
|
26
|
+
*
|
|
27
|
+
* ## 设计依据(口径冲突以这些文档为准)
|
|
28
|
+
*
|
|
29
|
+
* - 《商户经济模型最终方案-2026-09-24》§六 迁移协议、§七之二 抽佣(30% 硬顶)
|
|
30
|
+
* - 《支付服务商子链实现规划-2026-09-21》(x/serviceprovider 模块落地口径)
|
|
31
|
+
* - 《行业扩展图景与国内合规红线-2026-09-23》(六行业判定 + 合规红线)
|
|
32
|
+
*
|
|
33
|
+
* ## 红线(实现者不可违反)
|
|
34
|
+
*
|
|
35
|
+
* 1. 商户私钥永不出商户设备;服务商只持有自己的 SP 签名 key。
|
|
36
|
+
* 2. 进件敏感资料本地加密留存,链上零 PII(只上 evidence_hash)。
|
|
37
|
+
* 3. 商户迁移不可阻拦:迁出导出是义务,不是功能选项。
|
|
38
|
+
* 4. 抽佣比例 ≤ 30% 硬顶(`SP_COMMISSION_HARD_CAP_BP`),登记公开、商户可查。
|
|
39
|
+
* 5. devreward 是链上奖励池发给服务商的,不挪用、不从商户扣。
|
|
40
|
+
*/
|
|
41
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
+
exports.SettlementCycleKind = exports.SP_COMMISSION_HARD_CAP_BP = exports.SalesScene = exports.ApplymentState = exports.PaymentFactStatus = exports.SpStatus = exports.SpIndustry = exports.WECHAT_APIS = exports.SP_BACKEND_ROUTES = exports.SP_QUERY_ENDPOINTS = exports.SP_MSG_TYPE_URLS = void 0;
|
|
43
|
+
// ============================================================================
|
|
44
|
+
// 0. 三层映射常量(机器可查的硬引用;行号会漂移,proto 文件名是稳定锚)
|
|
45
|
+
// ============================================================================
|
|
46
|
+
/** 链上 Msg type URL(逐条核对 trustchain/serviceprovider/v1/tx.proto) */
|
|
47
|
+
exports.SP_MSG_TYPE_URLS = {
|
|
48
|
+
/** 服务商注册:质押 + 绑定微信商户号(唯一性约束)。signer = provider 自己 */
|
|
49
|
+
RegisterServiceProvider: '/trustchain.serviceprovider.v1.MsgRegisterServiceProvider',
|
|
50
|
+
/** 提交支付事实:仅 ACTIVE 服务商可提交,psp_txn_id 幂等防重 */
|
|
51
|
+
SubmitPaymentFact: '/trustchain.serviceprovider.v1.MsgSubmitPaymentFact',
|
|
52
|
+
/** 踢出服务商 + 全额罚没。signer = authority(gov/emergency 双轨) */
|
|
53
|
+
KickOutServiceProvider: '/trustchain.serviceprovider.v1.MsgKickOutServiceProvider',
|
|
54
|
+
/** 罚没质押但不踢出(惩罚性)。signer = authority */
|
|
55
|
+
SlashServiceProvider: '/trustchain.serviceprovider.v1.MsgSlashServiceProvider',
|
|
56
|
+
/** 领取累计贡献奖励(credits)。signer = provider 自己 */
|
|
57
|
+
ClaimProviderReward: '/trustchain.serviceprovider.v1.MsgClaimProviderReward',
|
|
58
|
+
/** 保障链 C5 确认支付事实 → 贡献分。signer = authority 或 params 白名单 */
|
|
59
|
+
ConfirmPaymentFact: '/trustchain.serviceprovider.v1.MsgConfirmPaymentFact',
|
|
60
|
+
};
|
|
61
|
+
/** 链上 Query 端点(LCD REST,proto query.proto 的 google.api.http 注解) */
|
|
62
|
+
exports.SP_QUERY_ENDPOINTS = {
|
|
63
|
+
Params: '/oxiaom/trustchain/serviceprovider/v1/params',
|
|
64
|
+
ServiceProviders: '/oxiaom/trustchain/serviceprovider/v1/providers',
|
|
65
|
+
ServiceProvider: '/oxiaom/trustchain/serviceprovider/v1/provider/{address}',
|
|
66
|
+
PaymentFacts: '/oxiaom/trustchain/serviceprovider/v1/facts/{provider}',
|
|
67
|
+
};
|
|
68
|
+
/** 后端路由(trustbase-seller-backend 已实现,参考实现即官方服务商"无锡小播鼠") */
|
|
69
|
+
exports.SP_BACKEND_ROUTES = {
|
|
70
|
+
/** 支付回调统一入口:验签→解密→幂等落账→上链→转发商户→分账。routes/sp-notify.js */
|
|
71
|
+
NotifyWechat: 'POST /api/sp/notify/wechat',
|
|
72
|
+
/** 进件资料上传(证件照 → 微信 media/upload)。routes/sp-applyment.js */
|
|
73
|
+
ApplymentUpload: 'POST /api/sp/applyment/upload',
|
|
74
|
+
/** 进件提交(→ 微信 applyment4sub)。routes/sp-applyment.js */
|
|
75
|
+
ApplymentSubmit: 'POST /api/sp/applyment/submit',
|
|
76
|
+
/** 进件状态查询(含 sign_url / sub_mchid / 驳回明细)。routes/sp-applyment.js */
|
|
77
|
+
ApplymentStatus: 'GET /api/sp/applyment/status/:business_code',
|
|
78
|
+
/** 抽佣比例登记/更新(admin,x-sp-admin-key)。routes/sp-commission.js */
|
|
79
|
+
CommissionRatePut: 'PUT /api/sp/commission-rate',
|
|
80
|
+
/** 抽佣比例商户自查(公开只读)。routes/sp-commission.js */
|
|
81
|
+
CommissionRateGet: 'GET /api/sp/commission-rate/:sub_mchid',
|
|
82
|
+
};
|
|
83
|
+
/** 微信支付 APIv3(服务商模式;网关 = https://api.mch.weixin.qq.com) */
|
|
84
|
+
exports.WECHAT_APIS = {
|
|
85
|
+
/** 图片/证件上传 → media_id */
|
|
86
|
+
MediaUpload: 'POST /v3/merchant/media/upload',
|
|
87
|
+
/** 特约商户进件提交 → applyment_id */
|
|
88
|
+
ApplymentSubmit: 'POST /v3/applyment4sub/applyment/',
|
|
89
|
+
/** 进件状态查询(按 business_code)→ applyment_state / sign_url / sub_mchid */
|
|
90
|
+
ApplymentStatus: 'GET /v3/applyment4sub/applyment/business_code/{business_code}',
|
|
91
|
+
/** 添加分账接收方 */
|
|
92
|
+
ProfitsharingAddReceiver: 'POST /v3/profitsharing/receivers/add',
|
|
93
|
+
/** 请求分账(out_order_no 幂等键) */
|
|
94
|
+
ProfitsharingOrders: 'POST /v3/profitsharing/orders',
|
|
95
|
+
/** 查询分账结果 */
|
|
96
|
+
ProfitsharingQuery: 'GET /v3/profitsharing/orders/{out_order_no}',
|
|
97
|
+
};
|
|
98
|
+
// ============================================================================
|
|
99
|
+
// 1. 行业枚举与基础值类型
|
|
100
|
+
// ============================================================================
|
|
101
|
+
/**
|
|
102
|
+
* 服务商行业类型(决定商品模型 / 履约方式 / 结算周期的扩展点选择)。
|
|
103
|
+
* 依据《行业扩展图景与国内合规红线》六行业判定,映射为本框架六类:
|
|
104
|
+
* 外卖/打车等参数敏感行业归入 LOCAL_LIFE 并建议走服务包子链(x/subchain)。
|
|
105
|
+
*/
|
|
106
|
+
var SpIndustry;
|
|
107
|
+
(function (SpIndustry) {
|
|
108
|
+
/** 附近商圈/本地生活:核销码履约,即时或 T+1 结算,争议窗口短(可走子链独立参数) */
|
|
109
|
+
SpIndustry["LOCAL_LIFE"] = "LOCAL_LIFE";
|
|
110
|
+
/** 国内电商实物:SKU 商品模型,物流履约,T+1 结算(v0 原生主战场) */
|
|
111
|
+
SpIndustry["ECOMMERCE"] = "ECOMMERCE";
|
|
112
|
+
/** 垂直私域:社群/会员制实物或虚拟混合,履约按商户自定义 */
|
|
113
|
+
SpIndustry["PRIVATE_DOMAIN"] = "PRIVATE_DOMAIN";
|
|
114
|
+
/** 网课/知识付费:章节商品模型,自动交付(license/兑换码上链防复制),一次性结算 */
|
|
115
|
+
SpIndustry["COURSE"] = "COURSE";
|
|
116
|
+
/** 订阅制:周期扣款授权 + 按周期结算(国内注意:委托代扣本身要牌照,合规前置) */
|
|
117
|
+
SpIndustry["SUBSCRIPTION"] = "SUBSCRIPTION";
|
|
118
|
+
/** 技术服务/软件:工时或许可证商品模型,API 交付 */
|
|
119
|
+
SpIndustry["TECH_SERVICE"] = "TECH_SERVICE";
|
|
120
|
+
/** 其他:兜底类型,扩展点全自定义 */
|
|
121
|
+
SpIndustry["OTHER"] = "OTHER";
|
|
122
|
+
})(SpIndustry || (exports.SpIndustry = SpIndustry = {}));
|
|
123
|
+
/** 服务商链上状态(proto serviceprovider.proto:24 status 字段口径) */
|
|
124
|
+
var SpStatus;
|
|
125
|
+
(function (SpStatus) {
|
|
126
|
+
SpStatus["ACTIVE"] = "ACTIVE";
|
|
127
|
+
SpStatus["KICKED"] = "KICKED";
|
|
128
|
+
SpStatus["SLASHED"] = "SLASHED";
|
|
129
|
+
})(SpStatus || (exports.SpStatus = SpStatus = {}));
|
|
130
|
+
/** 支付事实链上状态(proto paymentfact.proto:30) */
|
|
131
|
+
var PaymentFactStatus;
|
|
132
|
+
(function (PaymentFactStatus) {
|
|
133
|
+
PaymentFactStatus["PENDING"] = "PENDING";
|
|
134
|
+
PaymentFactStatus["CONFIRMED"] = "CONFIRMED";
|
|
135
|
+
PaymentFactStatus["REJECTED"] = "REJECTED";
|
|
136
|
+
})(PaymentFactStatus || (exports.PaymentFactStatus = PaymentFactStatus = {}));
|
|
137
|
+
// ============================================================================
|
|
138
|
+
// 3. OnboardingChannel —— 特约商户进件(核心接口 ②)
|
|
139
|
+
// ============================================================================
|
|
140
|
+
/** 进件状态(微信 applyment_state 原样透传) */
|
|
141
|
+
var ApplymentState;
|
|
142
|
+
(function (ApplymentState) {
|
|
143
|
+
ApplymentState["EDITTING"] = "APPLYMENT_STATE_EDITTING";
|
|
144
|
+
ApplymentState["AUDITING"] = "APPLYMENT_STATE_AUDITING";
|
|
145
|
+
ApplymentState["REJECTED"] = "APPLYMENT_STATE_REJECTED";
|
|
146
|
+
ApplymentState["TO_BE_CONFIRMED"] = "APPLYMENT_STATE_TO_BE_CONFIRMED";
|
|
147
|
+
ApplymentState["TO_BE_SIGNED"] = "APPLYMENT_STATE_TO_BE_SIGNED";
|
|
148
|
+
ApplymentState["SIGNING"] = "APPLYMENT_STATE_SIGNING";
|
|
149
|
+
ApplymentState["FINISHED"] = "APPLYMENT_STATE_FINISHED";
|
|
150
|
+
ApplymentState["CANCELED"] = "APPLYMENT_STATE_CANCELED";
|
|
151
|
+
})(ApplymentState || (exports.ApplymentState = ApplymentState = {}));
|
|
152
|
+
/** 经营场景(微信 sales_scenes_type 三选一) */
|
|
153
|
+
var SalesScene;
|
|
154
|
+
(function (SalesScene) {
|
|
155
|
+
/** 线下门店(默认,需门头/店内照片) */
|
|
156
|
+
SalesScene["STORE"] = "SALES_SCENES_STORE";
|
|
157
|
+
/** 互联网网站(需已上线 + ICP 备案域名) */
|
|
158
|
+
SalesScene["WEB"] = "SALES_SCENES_WEB";
|
|
159
|
+
/** 公众号/小程序 */
|
|
160
|
+
SalesScene["MP"] = "SALES_SCENES_MP";
|
|
161
|
+
})(SalesScene || (exports.SalesScene = SalesScene = {}));
|
|
162
|
+
// ============================================================================
|
|
163
|
+
// 5. CommissionPolicy —— 抽佣与分账(核心接口 ④)
|
|
164
|
+
// ============================================================================
|
|
165
|
+
/**
|
|
166
|
+
* 抽佣硬顶:万分比 3000 = 30%(微信平台分账上限,《商户经济模型最终方案》§七之二 定稿)。
|
|
167
|
+
* 链上 params 对齐同值;超出必须拒绝(422),mock 模式护栏同样生效。
|
|
168
|
+
*/
|
|
169
|
+
exports.SP_COMMISSION_HARD_CAP_BP = 3000;
|
|
170
|
+
// ============================================================================
|
|
171
|
+
// 7. SettlementPolicy —— 结算周期与规则(核心接口 ⑥)
|
|
172
|
+
// ============================================================================
|
|
173
|
+
/** 结算周期形态(按行业不同) */
|
|
174
|
+
var SettlementCycleKind;
|
|
175
|
+
(function (SettlementCycleKind) {
|
|
176
|
+
/** 实物电商:确认收货后 T+N(默认 T+1) */
|
|
177
|
+
SettlementCycleKind["T_PLUS_N"] = "T_PLUS_N";
|
|
178
|
+
/** 订阅制:按订阅周期结算 */
|
|
179
|
+
SettlementCycleKind["PERIODIC"] = "PERIODIC";
|
|
180
|
+
/** 课程/虚拟商品:交付即结算(一次性) */
|
|
181
|
+
SettlementCycleKind["ONE_SHOT"] = "ONE_SHOT";
|
|
182
|
+
/** 本地生活:核销即结算(即时或当日) */
|
|
183
|
+
SettlementCycleKind["ON_REDEMPTION"] = "ON_REDEMPTION";
|
|
184
|
+
/** 技术服务:里程碑/验收结算 */
|
|
185
|
+
SettlementCycleKind["MILESTONE"] = "MILESTONE";
|
|
186
|
+
})(SettlementCycleKind || (exports.SettlementCycleKind = SettlementCycleKind = {}));
|
|
187
|
+
//# sourceMappingURL=sp-framework.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sp-framework.js","sourceRoot":"","sources":["../src/sp-framework.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 轻量运行时校验原语 —— 不引任何校验库(zod/ajv 都太重,且浏览器侧体积敏感)。
|
|
3
|
+
*
|
|
4
|
+
* 约定:所有 `validateXxx` 返回 `Validation<T>`,**不抛异常**。
|
|
5
|
+
* 校验失败是可预期的协议分支(对方可能发来任何东西),不是程序错误;
|
|
6
|
+
* 需要"错了就炸"的场景(如规范化)才用异常,见 canonical.ts。
|
|
7
|
+
*/
|
|
8
|
+
/** 校验结果。ok=true 时 value 已收窄;ok=false 时 error 是机器可读码,message 是人可读说明。 */
|
|
9
|
+
export type Validation<T> = {
|
|
10
|
+
ok: true;
|
|
11
|
+
value: T;
|
|
12
|
+
} | {
|
|
13
|
+
ok: false;
|
|
14
|
+
error: string;
|
|
15
|
+
message: string;
|
|
16
|
+
};
|
|
17
|
+
export declare function valid<T>(value: T): Validation<T>;
|
|
18
|
+
export declare function invalid<T = never>(error: string, message: string): Validation<T>;
|
|
19
|
+
export declare function isNonEmptyString(value: unknown): value is string;
|
|
20
|
+
export declare function isStringOfMaxLength(value: unknown, maxLength: number): value is string;
|
|
21
|
+
export declare function isFiniteNumber(value: unknown): value is number;
|
|
22
|
+
/** 整数且落在 [min, max] 闭区间(含端点)。非整数 / NaN / Infinity 一律 false。 */
|
|
23
|
+
export declare function isIntegerInRange(value: unknown, min: number, max: number): value is number;
|
|
24
|
+
/**
|
|
25
|
+
* 纯对象判定:原型必须是 `Object.prototype` 或 `null`。
|
|
26
|
+
* 数组、null、Date、Map、Set、类实例一律 false —— 这些值进规范化会抛错,
|
|
27
|
+
* 校验层提前挡住可以给出更好的报错。
|
|
28
|
+
*/
|
|
29
|
+
export declare function isPlainObject(value: unknown): value is Record<string, unknown>;
|
|
30
|
+
/** 严格小写 hex(长度精确匹配)。用于线协议里的 `endpoint_hash` 等字段字符串比对。 */
|
|
31
|
+
export declare function isLowerHexOfLength(value: unknown, length: number): value is string;
|
|
32
|
+
/** 大小写不敏感 hex(长度精确匹配)。用于解析链上 bytes 字段的十六进制表示。 */
|
|
33
|
+
export declare function isHexOfLength(value: unknown, length: number): value is string;
|
|
34
|
+
export declare function isStringArray(value: unknown): value is string[];
|
|
35
|
+
/** 取对象里的可选字段;用于把 `undefined` 与 `null` 都视为"未提供"。 */
|
|
36
|
+
export declare function optional<T>(value: T | undefined | null): T | undefined;
|
|
37
|
+
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,uEAAuE;AACvE,MAAM,MAAM,UAAU,CAAC,CAAC,IACpB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,CAAC,CAAA;CAAE,GACtB;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAElD,wBAAgB,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAEhD;AAED,wBAAgB,OAAO,CAAC,CAAC,GAAG,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,CAEhF;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAEhE;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,KAAK,IAAI,MAAM,CAEtF;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAE9D;AAED,+DAA+D;AAC/D,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,KAAK,IAAI,MAAM,CAE1F;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAI9E;AAED,yDAAyD;AACzD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,KAAK,IAAI,MAAM,CASlF;AAED,iDAAiD;AACjD,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,KAAK,IAAI,MAAM,CAU7E;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,EAAE,CAE/D;AAED,mDAAmD;AACnD,wBAAgB,QAAQ,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,SAAS,GAAG,IAAI,GAAG,CAAC,GAAG,SAAS,CAEtE"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* 轻量运行时校验原语 —— 不引任何校验库(zod/ajv 都太重,且浏览器侧体积敏感)。
|
|
4
|
+
*
|
|
5
|
+
* 约定:所有 `validateXxx` 返回 `Validation<T>`,**不抛异常**。
|
|
6
|
+
* 校验失败是可预期的协议分支(对方可能发来任何东西),不是程序错误;
|
|
7
|
+
* 需要"错了就炸"的场景(如规范化)才用异常,见 canonical.ts。
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.valid = valid;
|
|
11
|
+
exports.invalid = invalid;
|
|
12
|
+
exports.isNonEmptyString = isNonEmptyString;
|
|
13
|
+
exports.isStringOfMaxLength = isStringOfMaxLength;
|
|
14
|
+
exports.isFiniteNumber = isFiniteNumber;
|
|
15
|
+
exports.isIntegerInRange = isIntegerInRange;
|
|
16
|
+
exports.isPlainObject = isPlainObject;
|
|
17
|
+
exports.isLowerHexOfLength = isLowerHexOfLength;
|
|
18
|
+
exports.isHexOfLength = isHexOfLength;
|
|
19
|
+
exports.isStringArray = isStringArray;
|
|
20
|
+
exports.optional = optional;
|
|
21
|
+
function valid(value) {
|
|
22
|
+
return { ok: true, value };
|
|
23
|
+
}
|
|
24
|
+
function invalid(error, message) {
|
|
25
|
+
return { ok: false, error, message };
|
|
26
|
+
}
|
|
27
|
+
function isNonEmptyString(value) {
|
|
28
|
+
return typeof value === 'string' && value.length > 0;
|
|
29
|
+
}
|
|
30
|
+
function isStringOfMaxLength(value, maxLength) {
|
|
31
|
+
return typeof value === 'string' && value.length <= maxLength;
|
|
32
|
+
}
|
|
33
|
+
function isFiniteNumber(value) {
|
|
34
|
+
return typeof value === 'number' && Number.isFinite(value);
|
|
35
|
+
}
|
|
36
|
+
/** 整数且落在 [min, max] 闭区间(含端点)。非整数 / NaN / Infinity 一律 false。 */
|
|
37
|
+
function isIntegerInRange(value, min, max) {
|
|
38
|
+
return typeof value === 'number' && Number.isInteger(value) && value >= min && value <= max;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* 纯对象判定:原型必须是 `Object.prototype` 或 `null`。
|
|
42
|
+
* 数组、null、Date、Map、Set、类实例一律 false —— 这些值进规范化会抛错,
|
|
43
|
+
* 校验层提前挡住可以给出更好的报错。
|
|
44
|
+
*/
|
|
45
|
+
function isPlainObject(value) {
|
|
46
|
+
if (typeof value !== 'object' || value === null || Array.isArray(value))
|
|
47
|
+
return false;
|
|
48
|
+
const proto = Object.getPrototypeOf(value);
|
|
49
|
+
return proto === Object.prototype || proto === null;
|
|
50
|
+
}
|
|
51
|
+
/** 严格小写 hex(长度精确匹配)。用于线协议里的 `endpoint_hash` 等字段字符串比对。 */
|
|
52
|
+
function isLowerHexOfLength(value, length) {
|
|
53
|
+
if (typeof value !== 'string' || value.length !== length)
|
|
54
|
+
return false;
|
|
55
|
+
for (let i = 0; i < value.length; i++) {
|
|
56
|
+
const code = value.charCodeAt(i);
|
|
57
|
+
const isDigit = code >= 0x30 && code <= 0x39;
|
|
58
|
+
const isLower = code >= 0x61 && code <= 0x66;
|
|
59
|
+
if (!isDigit && !isLower)
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
return true;
|
|
63
|
+
}
|
|
64
|
+
/** 大小写不敏感 hex(长度精确匹配)。用于解析链上 bytes 字段的十六进制表示。 */
|
|
65
|
+
function isHexOfLength(value, length) {
|
|
66
|
+
if (typeof value !== 'string' || value.length !== length)
|
|
67
|
+
return false;
|
|
68
|
+
for (let i = 0; i < value.length; i++) {
|
|
69
|
+
const code = value.charCodeAt(i);
|
|
70
|
+
const isDigit = code >= 0x30 && code <= 0x39;
|
|
71
|
+
const isUpper = code >= 0x41 && code <= 0x46;
|
|
72
|
+
const isLower = code >= 0x61 && code <= 0x66;
|
|
73
|
+
if (!isDigit && !isUpper && !isLower)
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
return true;
|
|
77
|
+
}
|
|
78
|
+
function isStringArray(value) {
|
|
79
|
+
return Array.isArray(value) && value.every((item) => typeof item === 'string');
|
|
80
|
+
}
|
|
81
|
+
/** 取对象里的可选字段;用于把 `undefined` 与 `null` 都视为"未提供"。 */
|
|
82
|
+
function optional(value) {
|
|
83
|
+
return value === null || value === undefined ? undefined : value;
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 索引器 WS 查询协议(PWA 的"只读门")—— 类型 + 运行时校验。
|
|
3
|
+
*
|
|
4
|
+
* ## 事实出处(这一份协议是**已有实现**的镜像,不是新设计)
|
|
5
|
+
*
|
|
6
|
+
* - 服务端实现:`trustchain-relmerge/indexer/src/core/websocket.ts`
|
|
7
|
+
* - 收消息分派 `handleMessage()`(`:508` 起;subscribe / unsubscribe / ping / query,
|
|
8
|
+
* 其余回 `unknown_type`)
|
|
9
|
+
* - `subscribe`/`unsubscribe` topic 提取 `extractTopics()`(`:100` 起;老字段 `events`
|
|
10
|
+
* 与新字段 `topics` 都收,**两个都给时 `events` 优先**;非数组当空数组;
|
|
11
|
+
* 单 topic ≤64 字符;最多 64 个)
|
|
12
|
+
* - `query` 校验 `handleQuery()`(`:553` 起)→ 参数校验 `validateQueryArgs()`(`:115` 起)
|
|
13
|
+
* - 查询后端与上限常量 `indexer/src/core/ws-query-provider.ts` 的 `WS_QUERY_LIMITS`(`:17-25`)
|
|
14
|
+
* 与 `WS_QUERY_NAMES`(`:28`)
|
|
15
|
+
* - 设计文档口径:《PWA-内嵌P2P轻索引器设计-2026-09-22》§6.1
|
|
16
|
+
*
|
|
17
|
+
* ⚠️ 索引器行号**会随其自身演进漂移**(编写时索引器正在被其它人改),引用以
|
|
18
|
+
* **函数名 / 常量名**为准;协议内容本身不随行号变化。
|
|
19
|
+
*
|
|
20
|
+
* ## 三条容易踩的语义
|
|
21
|
+
*
|
|
22
|
+
* 1. **`events` 优先于 `topics`**:两个字段都给时按 `events` 算(老客户端兼容策略)。
|
|
23
|
+
* 2. **非法 topic 是"过滤"不是"报错"**:服务端会静默丢掉超长/非字符串的 topic,
|
|
24
|
+
* 照样回 `subscribed`(回包里 `events` 才是权威的最终订阅集合)。客户端应以
|
|
25
|
+
* 响应里的 `events` 为准,不要以为发了就一定订上了。
|
|
26
|
+
* 3. **连接建立即默认全订** `block/transaction/product/order`
|
|
27
|
+
* (`handleConnection()`,`:468`),`subscribe` 是**增量**语义,不是替换。
|
|
28
|
+
*/
|
|
29
|
+
import { type WsQueryName } from './constants';
|
|
30
|
+
import { type Validation } from './validation';
|
|
31
|
+
/** 每条订阅/事件消息里携带的最小链上事件单元(索引器 `core/types.ts:316-322`) */
|
|
32
|
+
export interface ChainEvent {
|
|
33
|
+
type: string;
|
|
34
|
+
height: number;
|
|
35
|
+
txHash: string;
|
|
36
|
+
attributes: Record<string, string>;
|
|
37
|
+
/** 多链扩展:事件来源链 */
|
|
38
|
+
chainId?: string;
|
|
39
|
+
}
|
|
40
|
+
/** `subscribe`:`events` 为老字段、`topics` 为新字段,等价(`events` 优先) */
|
|
41
|
+
export interface WsSubscribeRequest {
|
|
42
|
+
type: 'subscribe';
|
|
43
|
+
topics?: string[];
|
|
44
|
+
events?: string[];
|
|
45
|
+
/** 可选:从指定高度开始收事件(服务端当前忽略;保留字段,真机未见实现) */
|
|
46
|
+
since_height?: number;
|
|
47
|
+
}
|
|
48
|
+
export interface WsUnsubscribeRequest {
|
|
49
|
+
type: 'unsubscribe';
|
|
50
|
+
topics?: string[];
|
|
51
|
+
events?: string[];
|
|
52
|
+
}
|
|
53
|
+
export interface WsPingRequest {
|
|
54
|
+
type: 'ping';
|
|
55
|
+
}
|
|
56
|
+
export interface WsQueryRequest {
|
|
57
|
+
type: 'query';
|
|
58
|
+
/** 请求/响应配对用;非空字符串,≤128 字符 */
|
|
59
|
+
id: string;
|
|
60
|
+
q: WsQueryName;
|
|
61
|
+
/** 必须对象(数组也算非法);缺省 = {} */
|
|
62
|
+
args?: WsQueryArgs;
|
|
63
|
+
}
|
|
64
|
+
export type WsClientMessage = WsSubscribeRequest | WsUnsubscribeRequest | WsPingRequest | WsQueryRequest;
|
|
65
|
+
/** 已校验的 subscribe/unsubscribe(topics 已按服务端规则过滤,`since_height` 已归一) */
|
|
66
|
+
export interface ValidatedSubscriptionRequest {
|
|
67
|
+
topics: string[];
|
|
68
|
+
since_height?: number;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* `catalog` 查询参数(**已校验后的形状**:`q`/`limit`/`offset` 都有值)。
|
|
72
|
+
* 用 type 别名而非 interface:对象类型字面量才具有到 `Record<string, unknown>`
|
|
73
|
+
* 的隐式索引签名,`interface` 没有 —— 这决定了它在 wire 类型里能不能直接赋值。
|
|
74
|
+
*/
|
|
75
|
+
export type CatalogQueryArgs = {
|
|
76
|
+
q: string;
|
|
77
|
+
limit: number;
|
|
78
|
+
offset: number;
|
|
79
|
+
};
|
|
80
|
+
export type ProductQueryArgs = {
|
|
81
|
+
id: string;
|
|
82
|
+
};
|
|
83
|
+
export type EndpointsQueryArgs = {
|
|
84
|
+
seller?: string;
|
|
85
|
+
};
|
|
86
|
+
export type WsQueryArgs = CatalogQueryArgs | ProductQueryArgs | EndpointsQueryArgs | Record<string, never>;
|
|
87
|
+
export interface WsQueryArgsByName {
|
|
88
|
+
health: Record<string, never>;
|
|
89
|
+
catalog: CatalogQueryArgs;
|
|
90
|
+
product: ProductQueryArgs;
|
|
91
|
+
endpoints: EndpointsQueryArgs;
|
|
92
|
+
}
|
|
93
|
+
export interface WsWelcomeMessage {
|
|
94
|
+
type: 'welcome';
|
|
95
|
+
message: string;
|
|
96
|
+
timestamp: number;
|
|
97
|
+
}
|
|
98
|
+
export interface WsPongMessage {
|
|
99
|
+
type: 'pong';
|
|
100
|
+
timestamp: number;
|
|
101
|
+
}
|
|
102
|
+
export interface WsSubscribedMessage {
|
|
103
|
+
type: 'subscribed';
|
|
104
|
+
/** 服务端回的是**当前全部订阅集合**(不是本次新增的),以它为准 */
|
|
105
|
+
events: string[];
|
|
106
|
+
timestamp: number;
|
|
107
|
+
}
|
|
108
|
+
export interface WsUnsubscribedMessage {
|
|
109
|
+
type: 'unsubscribed';
|
|
110
|
+
events: string[];
|
|
111
|
+
timestamp: number;
|
|
112
|
+
}
|
|
113
|
+
export interface WsBlockEventMessage {
|
|
114
|
+
type: 'block';
|
|
115
|
+
height: number;
|
|
116
|
+
events: ChainEvent[];
|
|
117
|
+
count: number;
|
|
118
|
+
timestamp: number;
|
|
119
|
+
}
|
|
120
|
+
export interface WsTransactionEventMessage {
|
|
121
|
+
type: 'transaction';
|
|
122
|
+
txHash: string;
|
|
123
|
+
eventType: string;
|
|
124
|
+
data: unknown;
|
|
125
|
+
timestamp: number;
|
|
126
|
+
}
|
|
127
|
+
export interface WsProductEventMessage {
|
|
128
|
+
type: 'product';
|
|
129
|
+
productId: string;
|
|
130
|
+
eventType: string;
|
|
131
|
+
data: unknown;
|
|
132
|
+
timestamp: number;
|
|
133
|
+
}
|
|
134
|
+
export interface WsOrderEventMessage {
|
|
135
|
+
type: 'order';
|
|
136
|
+
orderId: string;
|
|
137
|
+
eventType: string;
|
|
138
|
+
data: unknown;
|
|
139
|
+
timestamp: number;
|
|
140
|
+
}
|
|
141
|
+
export type WsEventMessage = WsBlockEventMessage | WsTransactionEventMessage | WsProductEventMessage | WsOrderEventMessage;
|
|
142
|
+
export interface WsErrorMessage {
|
|
143
|
+
type: 'error';
|
|
144
|
+
error: string;
|
|
145
|
+
message?: string;
|
|
146
|
+
timestamp: number;
|
|
147
|
+
}
|
|
148
|
+
export interface WsQueryResultMessage<T = unknown> {
|
|
149
|
+
type: 'query_result';
|
|
150
|
+
/** 回显请求 id;服务端连 id 都判不出来时回 `null`(如 `invalid_id`) */
|
|
151
|
+
id: string | null;
|
|
152
|
+
ok: boolean;
|
|
153
|
+
/** ok=true 时的数据;服务端把 undefined 归一成 null */
|
|
154
|
+
data?: T;
|
|
155
|
+
/** ok=false 时的机器可读错误码 */
|
|
156
|
+
error?: string;
|
|
157
|
+
message?: string;
|
|
158
|
+
/** 服务端耗时(毫秒) */
|
|
159
|
+
ms?: number;
|
|
160
|
+
/** 附加说明,如 endpoints 未实现的占位提示 */
|
|
161
|
+
note?: string;
|
|
162
|
+
timestamp: number;
|
|
163
|
+
}
|
|
164
|
+
export type WsServerMessage = WsWelcomeMessage | WsPongMessage | WsSubscribedMessage | WsUnsubscribedMessage | WsEventMessage | WsErrorMessage | WsQueryResultMessage;
|
|
165
|
+
/**
|
|
166
|
+
* `error` 消息与 `query_result.ok=false` 里的错误码。
|
|
167
|
+
*
|
|
168
|
+
* 出处:`indexer/src/core/websocket.ts` 里所有 `sendToClient({type:'error'...})`
|
|
169
|
+
* 与 `sendQueryFailure(...)` 的实参;`not_found` / `db_error` 来自
|
|
170
|
+
* `indexer/src/core/ws-query-provider.ts:264,271,279`。
|
|
171
|
+
*/
|
|
172
|
+
export declare const WS_ERROR_CODES: readonly ["message_too_large", "unknown_type", "invalid_json", "invalid_id", "unknown_query", "invalid_params", "query_unavailable", "too_many_requests", "timeout", "query_failed", "not_found", "db_error"];
|
|
173
|
+
export type WsErrorCode = (typeof WS_ERROR_CODES)[number];
|
|
174
|
+
/** `query_result.data` 里 catalog 列表项的形状(`ws-query-provider.ts:105-120`) */
|
|
175
|
+
export interface CatalogItem {
|
|
176
|
+
id: string;
|
|
177
|
+
seller: string;
|
|
178
|
+
title: string;
|
|
179
|
+
content_hash: string;
|
|
180
|
+
price_cny: number;
|
|
181
|
+
price_tct: string | number;
|
|
182
|
+
category_l1: string;
|
|
183
|
+
category_l2: string;
|
|
184
|
+
city: string;
|
|
185
|
+
stock: number;
|
|
186
|
+
status: string;
|
|
187
|
+
updated_at: number;
|
|
188
|
+
}
|
|
189
|
+
export interface CatalogQueryData {
|
|
190
|
+
items: CatalogItem[];
|
|
191
|
+
total: number;
|
|
192
|
+
limit: number;
|
|
193
|
+
offset: number;
|
|
194
|
+
q: string;
|
|
195
|
+
}
|
|
196
|
+
export interface HealthQueryData {
|
|
197
|
+
status: 'ok' | 'degraded';
|
|
198
|
+
height: number;
|
|
199
|
+
uptime_ms: number;
|
|
200
|
+
db_ok: boolean;
|
|
201
|
+
}
|
|
202
|
+
export interface EndpointCandidate {
|
|
203
|
+
seller: string;
|
|
204
|
+
peer_id: string;
|
|
205
|
+
ip: string;
|
|
206
|
+
http_port: number;
|
|
207
|
+
tcp_port: number;
|
|
208
|
+
quic_port: number;
|
|
209
|
+
last_online: number;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* 提取订阅 topic —— **与 `websocket.ts` 的 `extractTopics()`(`:100` 起)逐行同语义**:
|
|
213
|
+
* `events` 优先于 `topics`;非数组 → [];逐项过滤(字符串、1..64 字符);最多 64 项。
|
|
214
|
+
* 过滤语义是刻意的:服务端不会因为 topic 非法而报错。
|
|
215
|
+
*/
|
|
216
|
+
export declare function extractTopics(request: unknown): string[];
|
|
217
|
+
/** 校验 `subscribe` 请求 */
|
|
218
|
+
export declare function validateSubscribeRequest(input: unknown): Validation<ValidatedSubscriptionRequest>;
|
|
219
|
+
/** 校验 `unsubscribe` 请求 */
|
|
220
|
+
export declare function validateUnsubscribeRequest(input: unknown): Validation<ValidatedSubscriptionRequest>;
|
|
221
|
+
/** 按 query 名校验参数(镜像 `websocket.ts` 的 `validateQueryArgs()`,`:115` 起) */
|
|
222
|
+
export declare function validateQueryArgs<T extends WsQueryName>(name: T, args: unknown): Validation<WsQueryArgsByName[T]>;
|
|
223
|
+
/** 已校验的 query 请求(args 已按 query 名收窄) */
|
|
224
|
+
export interface ValidatedQueryRequest {
|
|
225
|
+
id: string;
|
|
226
|
+
q: WsQueryName;
|
|
227
|
+
args: WsQueryArgs;
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* 校验 `query` 请求(镜像 `websocket.ts` 的 `handleQuery()`,`:553` 起):
|
|
231
|
+
* `id` 非空且 ≤128 → `q` 在白名单 → `args` 是对象 → 按 q 校验参数。
|
|
232
|
+
* 校验失败时的 `error` 码与服务端回的错误码一致,便于客户端同一套分支处理。
|
|
233
|
+
*/
|
|
234
|
+
export declare function validateQueryRequest(input: unknown): Validation<ValidatedQueryRequest>;
|
|
235
|
+
/**
|
|
236
|
+
* 校验客户端消息(顶层分派,镜像 `websocket.ts` 的 `handleMessage()`,`:508` 起)。
|
|
237
|
+
* 未知 `type` 回 `unknown_type`(服务端同款行为:回 error 消息但不关连接)。
|
|
238
|
+
*/
|
|
239
|
+
export declare function validateClientMessage(input: unknown): Validation<WsClientMessage>;
|
|
240
|
+
/** 校验服务端消息。用于客户端侧防御(服务端可能升级、代理可能插话)。 */
|
|
241
|
+
export declare function validateServerMessage(input: unknown): Validation<WsServerMessage>;
|
|
242
|
+
//# sourceMappingURL=ws-protocol.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ws-protocol.d.ts","sourceRoot":"","sources":["../src/ws-protocol.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EAGL,KAAK,WAAW,EACjB,MAAM,aAAa,CAAC;AACrB,OAAO,EAML,KAAK,UAAU,EAChB,MAAM,cAAc,CAAC;AAEtB,yDAAyD;AACzD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,iBAAiB;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAMD,8DAA8D;AAC9D,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,WAAW,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,yCAAyC;IACzC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,OAAO,CAAC;IACd,6BAA6B;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,CAAC,EAAE,WAAW,CAAC;IACf,2BAA2B;IAC3B,IAAI,CAAC,EAAE,WAAW,CAAC;CACpB;AAED,MAAM,MAAM,eAAe,GACvB,kBAAkB,GAClB,oBAAoB,GACpB,aAAa,GACb,cAAc,CAAC;AAEnB,sEAAsE;AACtE,MAAM,WAAW,4BAA4B;IAC3C,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAMD;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,EAAE,EAAE,MAAM,CAAC;CACZ,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,gBAAgB,GAAG,gBAAgB,GAAG,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAE3G,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC9B,OAAO,EAAE,gBAAgB,CAAC;IAC1B,OAAO,EAAE,gBAAgB,CAAC;IAC1B,SAAS,EAAE,kBAAkB,CAAC;CAC/B;AAMD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,YAAY,CAAC;IACnB,uCAAuC;IACvC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,cAAc,CAAC;IACrB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,SAAS,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,cAAc,GACtB,mBAAmB,GACnB,yBAAyB,GACzB,qBAAqB,GACrB,mBAAmB,CAAC;AAExB,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB,CAAC,CAAC,GAAG,OAAO;IAC/C,IAAI,EAAE,cAAc,CAAC;IACrB,qDAAqD;IACrD,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,EAAE,EAAE,OAAO,CAAC;IACZ,2CAA2C;IAC3C,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,yBAAyB;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB;IAChB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,gCAAgC;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,eAAe,GACvB,gBAAgB,GAChB,aAAa,GACb,mBAAmB,GACnB,qBAAqB,GACrB,cAAc,GACd,cAAc,GACd,oBAAoB,CAAC;AAEzB;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,+MAajB,CAAC;AACX,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAE1D,2EAA2E;AAC3E,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,CAAC,EAAE,MAAM,CAAC;CACX;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,IAAI,GAAG,UAAU,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAMD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,EAAE,CAYxD;AAkBD,wBAAwB;AACxB,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,CAAC,4BAA4B,CAAC,CAIjG;AAED,0BAA0B;AAC1B,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,OAAO,GACb,UAAU,CAAC,4BAA4B,CAAC,CAI1C;AAED,wEAAwE;AACxE,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,WAAW,EACrD,IAAI,EAAE,CAAC,EACP,IAAI,EAAE,OAAO,GACZ,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CA4DlC;AAED,uCAAuC;AACvC,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,CAAC,EAAE,WAAW,CAAC;IACf,IAAI,EAAE,WAAW,CAAC;CACnB;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,CAAC,qBAAqB,CAAC,CAsBtF;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,CAAC,eAAe,CAAC,CA0BjF;AAMD,wCAAwC;AACxC,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,CAAC,eAAe,CAAC,CAkEjF"}
|