@xian-tech/wallet-core 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 ADDED
@@ -0,0 +1,17 @@
1
+ # @xian-tech/wallet-core
2
+
3
+ Reusable wallet-domain logic for Xian browser wallets.
4
+
5
+ This package lives in `xian-wallet-browser` and depends on the official
6
+ `@xian-tech/client` and `@xian-tech/provider` packages from the sibling `xian-js` repo.
7
+
8
+ It is intentionally UI-agnostic. It owns:
9
+
10
+ - wallet state models
11
+ - key encryption and recovery helpers, including BIP39-based recovery phrases
12
+ - approval rendering helpers
13
+ - the wallet controller that enforces provider permissions, approvals, durable
14
+ request lifecycle, network-preset management, and tx flow
15
+
16
+ It does not own browser-extension transport, popup rendering, or injected-page
17
+ bridges. Those stay in app-level code such as `apps/wallet-extension/`.
@@ -0,0 +1,7 @@
1
+ import type { ApprovalKind, ApprovalView, PendingApprovalRecord } from "./types";
2
+ export declare function approvalKindFromMethod(method: string): ApprovalKind;
3
+ export declare function buildApprovalView(approval: PendingApprovalRecord, options?: {
4
+ account?: string;
5
+ chainId?: string;
6
+ }): ApprovalView;
7
+ //# sourceMappingURL=approvals.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"approvals.d.ts","sourceRoot":"","sources":["../src/approvals.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,YAAY,EACZ,YAAY,EACZ,qBAAqB,EACtB,MAAM,SAAS,CAAC;AAuGjB,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,CAiBnE;AAED,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,qBAAqB,EAC/B,OAAO,CAAC,EAAE;IACR,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GACA,YAAY,CAmNd"}
@@ -0,0 +1,287 @@
1
+ function prettyJson(value) {
2
+ return JSON.stringify(value, null, 2);
3
+ }
4
+ function payloadForRequest(request) {
5
+ if (Array.isArray(request.params)) {
6
+ return request.params[0] ?? null;
7
+ }
8
+ return request.params ?? null;
9
+ }
10
+ function stringifyValue(value) {
11
+ if (value == null) {
12
+ return "Not provided";
13
+ }
14
+ if (typeof value === "string") {
15
+ return value;
16
+ }
17
+ if (typeof value === "number" ||
18
+ typeof value === "bigint" ||
19
+ typeof value === "boolean") {
20
+ return String(value);
21
+ }
22
+ return prettyJson(value);
23
+ }
24
+ function compactDetail(label, value, options) {
25
+ if (value == null ||
26
+ value === "" ||
27
+ (typeof value === "number" && Number.isNaN(value))) {
28
+ return null;
29
+ }
30
+ return {
31
+ label,
32
+ value: stringifyValue(value),
33
+ monospace: options?.monospace,
34
+ tone: options?.tone
35
+ };
36
+ }
37
+ function compactDetails(details) {
38
+ return details.filter((detail) => detail != null);
39
+ }
40
+ function txPayloadFromRequestPayload(payload) {
41
+ if (typeof payload !== "object" || payload == null) {
42
+ return {};
43
+ }
44
+ const root = payload;
45
+ const tx = typeof root.tx === "object" && root.tx != null
46
+ ? root.tx
47
+ : root;
48
+ const txPayload = typeof tx.payload === "object" && tx.payload != null
49
+ ? tx.payload
50
+ : tx;
51
+ return txPayload;
52
+ }
53
+ function intentFromRequestPayload(payload) {
54
+ if (typeof payload !== "object" || payload == null) {
55
+ return {};
56
+ }
57
+ const root = payload;
58
+ return typeof root.intent === "object" && root.intent != null
59
+ ? root.intent
60
+ : root;
61
+ }
62
+ function assetFromRequestPayload(payload) {
63
+ if (typeof payload !== "object" || payload == null) {
64
+ return {};
65
+ }
66
+ const root = payload;
67
+ return typeof root.options === "object" && root.options != null
68
+ ? root.options
69
+ : root;
70
+ }
71
+ function messagePreview(message) {
72
+ if (message.length <= 160) {
73
+ return message;
74
+ }
75
+ return `${message.slice(0, 157)}...`;
76
+ }
77
+ export function approvalKindFromMethod(method) {
78
+ switch (method) {
79
+ case "xian_requestAccounts":
80
+ return "connect";
81
+ case "xian_signMessage":
82
+ return "signMessage";
83
+ case "xian_signTransaction":
84
+ return "signTransaction";
85
+ case "xian_sendTransaction":
86
+ return "sendTransaction";
87
+ case "xian_sendCall":
88
+ return "sendCall";
89
+ case "xian_watchAsset":
90
+ return "watchAsset";
91
+ default:
92
+ throw new Error(`unsupported approval method: ${method}`);
93
+ }
94
+ }
95
+ export function buildApprovalView(approval, options) {
96
+ const payload = payloadForRequest(approval.request);
97
+ switch (approval.kind) {
98
+ case "connect":
99
+ return {
100
+ id: approval.id,
101
+ origin: approval.origin,
102
+ kind: approval.kind,
103
+ title: "Connect wallet",
104
+ description: "Allow this site to view your active address and request wallet actions.",
105
+ approveLabel: "Connect",
106
+ details: compactDetails([
107
+ compactDetail("Site", approval.origin, { monospace: true }),
108
+ compactDetail("Account", options?.account, { monospace: true }),
109
+ compactDetail("Network", options?.chainId),
110
+ compactDetail("Access", "View your address and request approvals")
111
+ ]),
112
+ highlights: [
113
+ "Connection does not send a transaction or move funds.",
114
+ "Future signing and transaction requests will still need explicit approval."
115
+ ],
116
+ warnings: [
117
+ "Only connect sites you trust. You can revoke site access from the wallet at any time."
118
+ ],
119
+ payload: prettyJson({
120
+ origin: approval.origin,
121
+ account: options?.account ?? null,
122
+ chainId: options?.chainId ?? null
123
+ }),
124
+ payloadLabel: "Connection request",
125
+ account: options?.account,
126
+ chainId: options?.chainId,
127
+ createdAt: approval.createdAt
128
+ };
129
+ case "signMessage":
130
+ {
131
+ const message = typeof payload === "object" && payload != null
132
+ ? String(payload.message ?? "")
133
+ : String(payload ?? "");
134
+ return {
135
+ id: approval.id,
136
+ origin: approval.origin,
137
+ kind: approval.kind,
138
+ title: "Sign message",
139
+ description: "Review the exact message carefully. Message signing should never be used as a substitute for transaction approval.",
140
+ approveLabel: "Sign message",
141
+ details: compactDetails([
142
+ compactDetail("Account", options?.account, { monospace: true }),
143
+ compactDetail("Network", options?.chainId),
144
+ compactDetail("Length", `${message.length} characters`),
145
+ compactDetail("Preview", messagePreview(message))
146
+ ]),
147
+ highlights: message.length > 0 ? [messagePreview(message)] : [],
148
+ warnings: [
149
+ "Do not sign messages you do not understand.",
150
+ "Never sign a message that looks like a transaction payload or seed phrase request."
151
+ ],
152
+ payload: message,
153
+ payloadLabel: "Full message",
154
+ account: options?.account,
155
+ chainId: options?.chainId,
156
+ createdAt: approval.createdAt
157
+ };
158
+ }
159
+ case "signTransaction":
160
+ {
161
+ const txPayload = txPayloadFromRequestPayload(payload);
162
+ return {
163
+ id: approval.id,
164
+ origin: approval.origin,
165
+ kind: approval.kind,
166
+ title: "Sign prepared transaction",
167
+ description: "The site already prepared a full transaction payload. Verify the sender, target contract, function, and stamp budget before signing.",
168
+ approveLabel: "Sign transaction",
169
+ details: compactDetails([
170
+ compactDetail("Sender", txPayload.sender, { monospace: true }),
171
+ compactDetail("Contract", txPayload.contract, { monospace: true }),
172
+ compactDetail("Function", txPayload.function),
173
+ compactDetail("Network", txPayload.chain_id ?? options?.chainId),
174
+ compactDetail("Nonce", txPayload.nonce),
175
+ compactDetail("Stamps", txPayload.stamps_supplied)
176
+ ]),
177
+ highlights: [
178
+ `${stringifyValue(txPayload.contract ?? "unknown")}.${stringifyValue(txPayload.function ?? "unknown")}`
179
+ ],
180
+ warnings: [
181
+ "Prepared transactions may perform arbitrary contract actions. Inspect the raw payload if anything looks unfamiliar."
182
+ ],
183
+ payload: prettyJson(payload),
184
+ payloadLabel: "Raw transaction",
185
+ account: options?.account,
186
+ chainId: options?.chainId,
187
+ createdAt: approval.createdAt
188
+ };
189
+ }
190
+ case "sendTransaction":
191
+ {
192
+ const txPayload = txPayloadFromRequestPayload(payload);
193
+ return {
194
+ id: approval.id,
195
+ origin: approval.origin,
196
+ kind: approval.kind,
197
+ title: "Send prepared transaction",
198
+ description: "The site supplied a full unsigned transaction. Approving will sign and broadcast it from your wallet.",
199
+ approveLabel: "Send transaction",
200
+ details: compactDetails([
201
+ compactDetail("Sender", txPayload.sender, { monospace: true }),
202
+ compactDetail("Contract", txPayload.contract, { monospace: true }),
203
+ compactDetail("Function", txPayload.function),
204
+ compactDetail("Network", txPayload.chain_id ?? options?.chainId),
205
+ compactDetail("Nonce", txPayload.nonce),
206
+ compactDetail("Stamps", txPayload.stamps_supplied, {
207
+ tone: "warning"
208
+ })
209
+ ]),
210
+ highlights: [
211
+ "This request can broadcast immediately after approval."
212
+ ],
213
+ warnings: [
214
+ "Broadcasting a transaction may move funds or execute irreversible contract logic."
215
+ ],
216
+ payload: prettyJson(payload),
217
+ payloadLabel: "Raw transaction",
218
+ account: options?.account,
219
+ chainId: options?.chainId,
220
+ createdAt: approval.createdAt
221
+ };
222
+ }
223
+ case "sendCall":
224
+ {
225
+ const intent = intentFromRequestPayload(payload);
226
+ const kwargs = typeof intent.kwargs === "object" && intent.kwargs != null
227
+ ? intent.kwargs
228
+ : undefined;
229
+ return {
230
+ id: approval.id,
231
+ origin: approval.origin,
232
+ kind: approval.kind,
233
+ title: "Send contract call",
234
+ description: "The wallet will prepare, sign, and broadcast this intent on your behalf using the active account and latest nonce.",
235
+ approveLabel: "Approve call",
236
+ details: compactDetails([
237
+ compactDetail("Contract", intent.contract, { monospace: true }),
238
+ compactDetail("Function", intent.function),
239
+ compactDetail("Network", intent.chainId ?? options?.chainId),
240
+ compactDetail("Stamps", intent.stampsSupplied ?? intent.stamps, { tone: "warning" }),
241
+ compactDetail("Arguments", kwargs ? `${Object.keys(kwargs).length} field(s)` : undefined)
242
+ ]),
243
+ highlights: [
244
+ `${stringifyValue(intent.contract ?? "unknown")}.${stringifyValue(intent.function ?? "unknown")}`
245
+ ],
246
+ warnings: [
247
+ "The wallet will fill the sender and nonce at approval time. Confirm the contract and arguments match your intent."
248
+ ],
249
+ payload: prettyJson(payload),
250
+ payloadLabel: "Raw call intent",
251
+ account: options?.account,
252
+ chainId: options?.chainId,
253
+ createdAt: approval.createdAt
254
+ };
255
+ }
256
+ case "watchAsset":
257
+ {
258
+ const asset = assetFromRequestPayload(payload);
259
+ return {
260
+ id: approval.id,
261
+ origin: approval.origin,
262
+ kind: approval.kind,
263
+ title: "Add asset to wallet",
264
+ description: "Allow this site to add an asset to your wallet list. This does not verify the asset’s legitimacy.",
265
+ approveLabel: "Add asset",
266
+ details: compactDetails([
267
+ compactDetail("Name", asset.name),
268
+ compactDetail("Symbol", asset.symbol),
269
+ compactDetail("Contract", asset.contract, { monospace: true }),
270
+ compactDetail("Decimals", asset.decimals)
271
+ ]),
272
+ highlights: [
273
+ "Always verify the asset contract from an independent trusted source."
274
+ ],
275
+ warnings: [
276
+ "Token metadata can be spoofed. Matching names and symbols do not prove authenticity."
277
+ ],
278
+ payload: prettyJson(payload),
279
+ payloadLabel: "Asset metadata",
280
+ account: options?.account,
281
+ chainId: options?.chainId,
282
+ createdAt: approval.createdAt
283
+ };
284
+ }
285
+ }
286
+ }
287
+ //# sourceMappingURL=approvals.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"approvals.js","sourceRoot":"","sources":["../src/approvals.ts"],"names":[],"mappings":"AASA,SAAS,UAAU,CAAC,KAAc;IAChC,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACxC,CAAC;AAED,SAAS,iBAAiB,CAAC,OAA4B;IACrD,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAClC,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IACnC,CAAC;IACD,OAAO,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC;AAChC,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;QAClB,OAAO,cAAc,CAAC;IACxB,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IACE,OAAO,KAAK,KAAK,QAAQ;QACzB,OAAO,KAAK,KAAK,QAAQ;QACzB,OAAO,KAAK,KAAK,SAAS,EAC1B,CAAC;QACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;AAC3B,CAAC;AAED,SAAS,aAAa,CACpB,KAAa,EACb,KAAc,EACd,OAGC;IAED,IACE,KAAK,IAAI,IAAI;QACb,KAAK,KAAK,EAAE;QACZ,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAClD,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,KAAK;QACL,KAAK,EAAE,cAAc,CAAC,KAAK,CAAC;QAC5B,SAAS,EAAE,OAAO,EAAE,SAAS;QAC7B,IAAI,EAAE,OAAO,EAAE,IAAI;KACpB,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CACrB,OAAqC;IAErC,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAA4B,EAAE,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,2BAA2B,CAAC,OAAgB;IACnD,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;QACnD,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,IAAI,GAAG,OAAkC,CAAC;IAChD,MAAM,EAAE,GACN,OAAO,IAAI,CAAC,EAAE,KAAK,QAAQ,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI;QAC5C,CAAC,CAAE,IAAI,CAAC,EAA8B;QACtC,CAAC,CAAC,IAAI,CAAC;IACX,MAAM,SAAS,GACb,OAAO,EAAE,CAAC,OAAO,KAAK,QAAQ,IAAI,EAAE,CAAC,OAAO,IAAI,IAAI;QAClD,CAAC,CAAE,EAAE,CAAC,OAAmC;QACzC,CAAC,CAAC,EAAE,CAAC;IACT,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,wBAAwB,CAAC,OAAgB;IAChD,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;QACnD,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,IAAI,GAAG,OAAkC,CAAC;IAChD,OAAO,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI;QAC3D,CAAC,CAAE,IAAI,CAAC,MAAkC;QAC1C,CAAC,CAAC,IAAI,CAAC;AACX,CAAC;AAED,SAAS,uBAAuB,CAAC,OAAgB;IAC/C,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;QACnD,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,IAAI,GAAG,OAAkC,CAAC;IAChD,OAAO,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI;QAC7D,CAAC,CAAE,IAAI,CAAC,OAAmC;QAC3C,CAAC,CAAC,IAAI,CAAC;AACX,CAAC;AAED,SAAS,cAAc,CAAC,OAAe;IACrC,IAAI,OAAO,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC;QAC1B,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,MAAc;IACnD,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,sBAAsB;YACzB,OAAO,SAAS,CAAC;QACnB,KAAK,kBAAkB;YACrB,OAAO,aAAa,CAAC;QACvB,KAAK,sBAAsB;YACzB,OAAO,iBAAiB,CAAC;QAC3B,KAAK,sBAAsB;YACzB,OAAO,iBAAiB,CAAC;QAC3B,KAAK,eAAe;YAClB,OAAO,UAAU,CAAC;QACpB,KAAK,iBAAiB;YACpB,OAAO,YAAY,CAAC;QACtB;YACE,MAAM,IAAI,KAAK,CAAC,gCAAgC,MAAM,EAAE,CAAC,CAAC;IAC9D,CAAC;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,QAA+B,EAC/B,OAGC;IAED,MAAM,OAAO,GAAG,iBAAiB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAEpD,QAAQ,QAAQ,CAAC,IAAI,EAAE,CAAC;QACtB,KAAK,SAAS;YACZ,OAAO;gBACL,EAAE,EAAE,QAAQ,CAAC,EAAE;gBACf,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,KAAK,EAAE,gBAAgB;gBACvB,WAAW,EACT,yEAAyE;gBAC3E,YAAY,EAAE,SAAS;gBACvB,OAAO,EAAE,cAAc,CAAC;oBACtB,aAAa,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;oBAC3D,aAAa,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;oBAC/D,aAAa,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC;oBAC1C,aAAa,CAAC,QAAQ,EAAE,yCAAyC,CAAC;iBACnE,CAAC;gBACF,UAAU,EAAE;oBACV,uDAAuD;oBACvD,4EAA4E;iBAC7E;gBACD,QAAQ,EAAE;oBACR,uFAAuF;iBACxF;gBACD,OAAO,EAAE,UAAU,CAAC;oBAClB,MAAM,EAAE,QAAQ,CAAC,MAAM;oBACvB,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,IAAI;oBACjC,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,IAAI;iBAClC,CAAC;gBACF,YAAY,EAAE,oBAAoB;gBAClC,OAAO,EAAE,OAAO,EAAE,OAAO;gBACzB,OAAO,EAAE,OAAO,EAAE,OAAO;gBACzB,SAAS,EAAE,QAAQ,CAAC,SAAS;aAC9B,CAAC;QACJ,KAAK,aAAa;YAChB,CAAC;gBACC,MAAM,OAAO,GACX,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,IAAI,IAAI;oBAC5C,CAAC,CAAC,MAAM,CAAE,OAAiC,CAAC,OAAO,IAAI,EAAE,CAAC;oBAC1D,CAAC,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;gBAC5B,OAAO;oBACL,EAAE,EAAE,QAAQ,CAAC,EAAE;oBACf,MAAM,EAAE,QAAQ,CAAC,MAAM;oBACvB,IAAI,EAAE,QAAQ,CAAC,IAAI;oBACnB,KAAK,EAAE,cAAc;oBACrB,WAAW,EACT,oHAAoH;oBACtH,YAAY,EAAE,cAAc;oBAC5B,OAAO,EAAE,cAAc,CAAC;wBACtB,aAAa,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;wBAC/D,aAAa,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC;wBAC1C,aAAa,CAAC,QAAQ,EAAE,GAAG,OAAO,CAAC,MAAM,aAAa,CAAC;wBACvD,aAAa,CAAC,SAAS,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC;qBAClD,CAAC;oBACF,UAAU,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;oBAC/D,QAAQ,EAAE;wBACR,6CAA6C;wBAC7C,oFAAoF;qBACrF;oBACD,OAAO,EAAE,OAAO;oBAChB,YAAY,EAAE,cAAc;oBAC5B,OAAO,EAAE,OAAO,EAAE,OAAO;oBACzB,OAAO,EAAE,OAAO,EAAE,OAAO;oBACzB,SAAS,EAAE,QAAQ,CAAC,SAAS;iBAC9B,CAAC;YACJ,CAAC;QACH,KAAK,iBAAiB;YACpB,CAAC;gBACC,MAAM,SAAS,GAAG,2BAA2B,CAAC,OAAO,CAAC,CAAC;gBACvD,OAAO;oBACL,EAAE,EAAE,QAAQ,CAAC,EAAE;oBACf,MAAM,EAAE,QAAQ,CAAC,MAAM;oBACvB,IAAI,EAAE,QAAQ,CAAC,IAAI;oBACnB,KAAK,EAAE,2BAA2B;oBAClC,WAAW,EACT,sIAAsI;oBACxI,YAAY,EAAE,kBAAkB;oBAChC,OAAO,EAAE,cAAc,CAAC;wBACtB,aAAa,CAAC,QAAQ,EAAE,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;wBAC9D,aAAa,CAAC,UAAU,EAAE,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;wBAClE,aAAa,CAAC,UAAU,EAAE,SAAS,CAAC,QAAQ,CAAC;wBAC7C,aAAa,CAAC,SAAS,EAAE,SAAS,CAAC,QAAQ,IAAI,OAAO,EAAE,OAAO,CAAC;wBAChE,aAAa,CAAC,OAAO,EAAE,SAAS,CAAC,KAAK,CAAC;wBACvC,aAAa,CAAC,QAAQ,EAAE,SAAS,CAAC,eAAe,CAAC;qBACnD,CAAC;oBACF,UAAU,EAAE;wBACV,GAAG,cAAc,CAAC,SAAS,CAAC,QAAQ,IAAI,SAAS,CAAC,IAAI,cAAc,CAClE,SAAS,CAAC,QAAQ,IAAI,SAAS,CAChC,EAAE;qBACJ;oBACD,QAAQ,EAAE;wBACR,qHAAqH;qBACtH;oBACD,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC;oBAC5B,YAAY,EAAE,iBAAiB;oBAC/B,OAAO,EAAE,OAAO,EAAE,OAAO;oBACzB,OAAO,EAAE,OAAO,EAAE,OAAO;oBACzB,SAAS,EAAE,QAAQ,CAAC,SAAS;iBAC9B,CAAC;YACJ,CAAC;QACH,KAAK,iBAAiB;YACpB,CAAC;gBACC,MAAM,SAAS,GAAG,2BAA2B,CAAC,OAAO,CAAC,CAAC;gBACvD,OAAO;oBACL,EAAE,EAAE,QAAQ,CAAC,EAAE;oBACf,MAAM,EAAE,QAAQ,CAAC,MAAM;oBACvB,IAAI,EAAE,QAAQ,CAAC,IAAI;oBACnB,KAAK,EAAE,2BAA2B;oBAClC,WAAW,EACT,uGAAuG;oBACzG,YAAY,EAAE,kBAAkB;oBAChC,OAAO,EAAE,cAAc,CAAC;wBACtB,aAAa,CAAC,QAAQ,EAAE,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;wBAC9D,aAAa,CAAC,UAAU,EAAE,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;wBAClE,aAAa,CAAC,UAAU,EAAE,SAAS,CAAC,QAAQ,CAAC;wBAC7C,aAAa,CAAC,SAAS,EAAE,SAAS,CAAC,QAAQ,IAAI,OAAO,EAAE,OAAO,CAAC;wBAChE,aAAa,CAAC,OAAO,EAAE,SAAS,CAAC,KAAK,CAAC;wBACvC,aAAa,CAAC,QAAQ,EAAE,SAAS,CAAC,eAAe,EAAE;4BACjD,IAAI,EAAE,SAAS;yBAChB,CAAC;qBACH,CAAC;oBACF,UAAU,EAAE;wBACV,wDAAwD;qBACzD;oBACD,QAAQ,EAAE;wBACR,mFAAmF;qBACpF;oBACD,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC;oBAC5B,YAAY,EAAE,iBAAiB;oBAC/B,OAAO,EAAE,OAAO,EAAE,OAAO;oBACzB,OAAO,EAAE,OAAO,EAAE,OAAO;oBACzB,SAAS,EAAE,QAAQ,CAAC,SAAS;iBAC9B,CAAC;YACJ,CAAC;QACH,KAAK,UAAU;YACb,CAAC;gBACC,MAAM,MAAM,GAAG,wBAAwB,CAAC,OAAO,CAAC,CAAC;gBACjD,MAAM,MAAM,GACV,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,IAAI,IAAI;oBACxD,CAAC,CAAE,MAAM,CAAC,MAAkC;oBAC5C,CAAC,CAAC,SAAS,CAAC;gBAChB,OAAO;oBACL,EAAE,EAAE,QAAQ,CAAC,EAAE;oBACf,MAAM,EAAE,QAAQ,CAAC,MAAM;oBACvB,IAAI,EAAE,QAAQ,CAAC,IAAI;oBACnB,KAAK,EAAE,oBAAoB;oBAC3B,WAAW,EACT,oHAAoH;oBACtH,YAAY,EAAE,cAAc;oBAC5B,OAAO,EAAE,cAAc,CAAC;wBACtB,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;wBAC/D,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC;wBAC1C,aAAa,CAAC,SAAS,EAAE,MAAM,CAAC,OAAO,IAAI,OAAO,EAAE,OAAO,CAAC;wBAC5D,aAAa,CACX,QAAQ,EACR,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,MAAM,EACtC,EAAE,IAAI,EAAE,SAAS,EAAE,CACpB;wBACD,aAAa,CACX,WAAW,EACX,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,WAAW,CAAC,CAAC,CAAC,SAAS,CAC9D;qBACF,CAAC;oBACF,UAAU,EAAE;wBACV,GAAG,cAAc,CAAC,MAAM,CAAC,QAAQ,IAAI,SAAS,CAAC,IAAI,cAAc,CAC/D,MAAM,CAAC,QAAQ,IAAI,SAAS,CAC7B,EAAE;qBACJ;oBACD,QAAQ,EAAE;wBACR,mHAAmH;qBACpH;oBACD,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC;oBAC5B,YAAY,EAAE,iBAAiB;oBAC/B,OAAO,EAAE,OAAO,EAAE,OAAO;oBACzB,OAAO,EAAE,OAAO,EAAE,OAAO;oBACzB,SAAS,EAAE,QAAQ,CAAC,SAAS;iBAC9B,CAAC;YACJ,CAAC;QACH,KAAK,YAAY;YACf,CAAC;gBACC,MAAM,KAAK,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAC;gBAC/C,OAAO;oBACL,EAAE,EAAE,QAAQ,CAAC,EAAE;oBACf,MAAM,EAAE,QAAQ,CAAC,MAAM;oBACvB,IAAI,EAAE,QAAQ,CAAC,IAAI;oBACnB,KAAK,EAAE,qBAAqB;oBAC5B,WAAW,EACT,mGAAmG;oBACrG,YAAY,EAAE,WAAW;oBACzB,OAAO,EAAE,cAAc,CAAC;wBACtB,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC;wBACjC,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC;wBACrC,aAAa,CAAC,UAAU,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;wBAC9D,aAAa,CAAC,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC;qBAC1C,CAAC;oBACF,UAAU,EAAE;wBACV,sEAAsE;qBACvE;oBACD,QAAQ,EAAE;wBACR,sFAAsF;qBACvF;oBACD,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC;oBAC5B,YAAY,EAAE,gBAAgB;oBAC9B,OAAO,EAAE,OAAO,EAAE,OAAO;oBACzB,OAAO,EAAE,OAAO,EAAE,OAAO;oBACzB,SAAS,EAAE,QAAQ,CAAC,SAAS;iBAC9B,CAAC;YACJ,CAAC;IACL,CAAC;AACH,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { XianWalletCapabilities } from "@xian-tech/provider";
2
+ import type { WalletNetworkPreset } from "./types";
3
+ export declare const DEFAULT_RPC_URL = "http://127.0.0.1:26657";
4
+ export declare const DEFAULT_DASHBOARD_URL = "http://127.0.0.1:8080";
5
+ export declare const LOCAL_NETWORK_PRESET_ID = "local-node";
6
+ export declare const LOCAL_NETWORK_PRESET_NAME = "Local node";
7
+ export declare const DEFAULT_NETWORK_PRESETS: WalletNetworkPreset[];
8
+ export declare const DEFAULT_WALLET_CAPABILITIES: XianWalletCapabilities;
9
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAElE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAEnD,eAAO,MAAM,eAAe,2BAA2B,CAAC;AACxD,eAAO,MAAM,qBAAqB,0BAA0B,CAAC;AAC7D,eAAO,MAAM,uBAAuB,eAAe,CAAC;AACpD,eAAO,MAAM,yBAAyB,eAAe,CAAC;AAEtD,eAAO,MAAM,uBAAuB,EAAE,mBAAmB,EAQxD,CAAC;AAEF,eAAO,MAAM,2BAA2B,EAAE,sBASzC,CAAC"}
@@ -0,0 +1,24 @@
1
+ export const DEFAULT_RPC_URL = "http://127.0.0.1:26657";
2
+ export const DEFAULT_DASHBOARD_URL = "http://127.0.0.1:8080";
3
+ export const LOCAL_NETWORK_PRESET_ID = "local-node";
4
+ export const LOCAL_NETWORK_PRESET_NAME = "Local node";
5
+ export const DEFAULT_NETWORK_PRESETS = [
6
+ {
7
+ id: LOCAL_NETWORK_PRESET_ID,
8
+ name: LOCAL_NETWORK_PRESET_NAME,
9
+ rpcUrl: DEFAULT_RPC_URL,
10
+ dashboardUrl: DEFAULT_DASHBOARD_URL,
11
+ builtin: true
12
+ }
13
+ ];
14
+ export const DEFAULT_WALLET_CAPABILITIES = {
15
+ getWalletInfo: true,
16
+ prepareTransaction: true,
17
+ signMessage: true,
18
+ signTransaction: true,
19
+ sendTransaction: true,
20
+ sendCall: true,
21
+ switchChain: true,
22
+ watchAsset: true
23
+ };
24
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,MAAM,eAAe,GAAG,wBAAwB,CAAC;AACxD,MAAM,CAAC,MAAM,qBAAqB,GAAG,uBAAuB,CAAC;AAC7D,MAAM,CAAC,MAAM,uBAAuB,GAAG,YAAY,CAAC;AACpD,MAAM,CAAC,MAAM,yBAAyB,GAAG,YAAY,CAAC;AAEtD,MAAM,CAAC,MAAM,uBAAuB,GAA0B;IAC5D;QACE,EAAE,EAAE,uBAAuB;QAC3B,IAAI,EAAE,yBAAyB;QAC/B,MAAM,EAAE,eAAe;QACvB,YAAY,EAAE,qBAAqB;QACnC,OAAO,EAAE,IAAI;KACd;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,2BAA2B,GAA2B;IACjE,aAAa,EAAE,IAAI;IACnB,kBAAkB,EAAE,IAAI;IACxB,WAAW,EAAE,IAAI;IACjB,eAAe,EAAE,IAAI;IACrB,eAAe,EAAE,IAAI;IACrB,QAAQ,EAAE,IAAI;IACd,WAAW,EAAE,IAAI;IACjB,UAAU,EAAE,IAAI;CACjB,CAAC"}
@@ -0,0 +1,96 @@
1
+ import { Ed25519Signer } from "@xian-tech/client";
2
+ import { type BroadcastMode, type TransactionSubmission, type XianProviderRequest, type XianSignedTransaction, type XianUnsignedTransaction, type XianWalletDescriptor } from "@xian-tech/provider";
3
+ import type { ApprovalView, PersistedApproval, PopupState, ProviderRequestStartResult, ProviderRequestStatusResult, StoredWalletState, WalletControllerStore, WalletCreateResult, WalletNetworkPresetInput, WalletSerializedError, WalletSettingsInput, WalletSetupInput } from "./types";
4
+ export interface WalletNetworkClient {
5
+ getChainId(): Promise<string>;
6
+ buildTx(intent: {
7
+ sender: string;
8
+ contract: string;
9
+ function: string;
10
+ kwargs: Record<string, unknown>;
11
+ chainId?: string;
12
+ stamps?: number | bigint;
13
+ stampsSupplied?: number | bigint;
14
+ }): Promise<XianUnsignedTransaction>;
15
+ signTx(tx: XianUnsignedTransaction, signer: Ed25519Signer): Promise<XianSignedTransaction>;
16
+ broadcastTx(tx: XianSignedTransaction, options?: {
17
+ mode?: BroadcastMode;
18
+ waitForTx?: boolean;
19
+ timeoutMs?: number;
20
+ pollIntervalMs?: number;
21
+ }): Promise<TransactionSubmission>;
22
+ }
23
+ export interface WalletControllerOptions {
24
+ wallet: XianWalletDescriptor;
25
+ version: string;
26
+ store: WalletControllerStore;
27
+ createClient?(state: StoredWalletState): WalletNetworkClient;
28
+ onProviderEvent?(event: string, args: unknown[], targetOrigin?: string): Promise<void> | void;
29
+ onApprovalRequested?(approvalId: string, view: ApprovalView): Promise<void> | void;
30
+ createId?(): string;
31
+ now?(): number;
32
+ }
33
+ export declare class WalletController {
34
+ private readonly options;
35
+ private readonly requestWaiters;
36
+ private unlockedPrivateKey;
37
+ private unlockedSigner;
38
+ constructor(options: WalletControllerOptions);
39
+ private get store();
40
+ private providerCapabilities;
41
+ private createId;
42
+ private now;
43
+ private serializeError;
44
+ private getUnlockedSigner;
45
+ private currentClient;
46
+ private requireStoredWallet;
47
+ private activeNetworkPreset;
48
+ private loadWalletState;
49
+ private displayChainId;
50
+ private networkStatus;
51
+ private emitChainChangedForConnectedOrigins;
52
+ private applyActivePreset;
53
+ private requireConnectedOrigin;
54
+ private safeGetChainId;
55
+ private buildWalletInfo;
56
+ private persistWalletState;
57
+ private updateConnectedOrigin;
58
+ private updateWatchedAssets;
59
+ private sanitizeNetworkPresetInput;
60
+ private upsertNetworkPresetInState;
61
+ private broadcastProviderEvent;
62
+ private emitConnectionLifecycle;
63
+ private emitDisconnectLifecycle;
64
+ private prepareTransaction;
65
+ private signPreparedTransaction;
66
+ private sendPreparedTransaction;
67
+ private executeApprovedRequest;
68
+ private fulfillRequest;
69
+ private rejectRequest;
70
+ private createApprovalRequest;
71
+ private executeImmediateRequest;
72
+ getPopupState(): Promise<PopupState>;
73
+ createOrImportWallet(input: WalletSetupInput): Promise<WalletCreateResult>;
74
+ unlockWallet(password: string): Promise<PopupState>;
75
+ revealMnemonic(password: string): Promise<string>;
76
+ lockWallet(): Promise<PopupState>;
77
+ updateSettings(input: WalletSettingsInput): Promise<PopupState>;
78
+ disconnectOrigin(origin: string): Promise<PopupState>;
79
+ disconnectAllOrigins(): Promise<PopupState>;
80
+ removeWatchedAsset(contract: string): Promise<PopupState>;
81
+ saveNetworkPreset(input: WalletNetworkPresetInput): Promise<PopupState>;
82
+ switchNetwork(presetId: string): Promise<PopupState>;
83
+ removeNetworkPreset(presetId: string): Promise<PopupState>;
84
+ startProviderRequest(requestId: string, origin: string, request: XianProviderRequest): Promise<ProviderRequestStartResult>;
85
+ getProviderRequestStatus(requestId: string, options?: {
86
+ consume?: boolean;
87
+ }): Promise<ProviderRequestStatusResult>;
88
+ getApprovalView(approvalId: string): Promise<ApprovalView>;
89
+ listApprovalStates(): Promise<PersistedApproval[]>;
90
+ attachApprovalWindow(approvalId: string, windowId: number): Promise<void>;
91
+ resolveApproval(approvalId: string, approved: boolean): Promise<null>;
92
+ dismissApproval(approvalId: string, reason?: unknown): Promise<boolean>;
93
+ handleProviderRequest(origin: string, request: XianProviderRequest): Promise<unknown>;
94
+ }
95
+ export declare function errorFromSerializedWalletError(error: WalletSerializedError): Error;
96
+ //# sourceMappingURL=controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../src/controller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAc,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAIL,KAAK,aAAa,EAClB,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAE1B,KAAK,uBAAuB,EAE5B,KAAK,oBAAoB,EAG1B,MAAM,qBAAqB,CAAC;AAmB7B,OAAO,KAAK,EACV,YAAY,EAEZ,iBAAiB,EACjB,UAAU,EACV,0BAA0B,EAC1B,2BAA2B,EAE3B,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,EAElB,wBAAwB,EAExB,qBAAqB,EACrB,mBAAmB,EACnB,gBAAgB,EAEjB,MAAM,SAAS,CAAC;AAOjB,MAAM,WAAW,mBAAmB;IAClC,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9B,OAAO,CAAC,MAAM,EAAE;QACd,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAChC,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;QACzB,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;KAClC,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAC;IACrC,MAAM,CACJ,EAAE,EAAE,uBAAuB,EAC3B,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAClC,WAAW,CACT,EAAE,EAAE,qBAAqB,EACzB,OAAO,CAAC,EAAE;QACR,IAAI,CAAC,EAAE,aAAa,CAAC;QACrB,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,GACA,OAAO,CAAC,qBAAqB,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,oBAAoB,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,qBAAqB,CAAC;IAC7B,YAAY,CAAC,CAAC,KAAK,EAAE,iBAAiB,GAAG,mBAAmB,CAAC;IAC7D,eAAe,CAAC,CACd,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,OAAO,EAAE,EACf,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACxB,mBAAmB,CAAC,CAClB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACxB,QAAQ,CAAC,IAAI,MAAM,CAAC;IACpB,GAAG,CAAC,IAAI,MAAM,CAAC;CAChB;AA0KD,qBAAa,gBAAgB;IAKf,OAAO,CAAC,QAAQ,CAAC,OAAO;IAJpC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAoC;IACnE,OAAO,CAAC,kBAAkB,CAAuB;IACjD,OAAO,CAAC,cAAc,CAA8B;gBAEvB,OAAO,EAAE,uBAAuB;IAE7D,OAAO,KAAK,KAAK,GAEhB;IAED,OAAO,CAAC,oBAAoB;IAI5B,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,GAAG;IAIX,OAAO,CAAC,cAAc;IAwBtB,OAAO,CAAC,iBAAiB;IAUzB,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,mBAAmB;IAS3B,OAAO,CAAC,mBAAmB;YAWb,eAAe;IAc7B,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,aAAa;YAaP,mCAAmC;IAyBjD,OAAO,CAAC,iBAAiB;IAkBzB,OAAO,CAAC,sBAAsB;YAMhB,cAAc;YAad,eAAe;YA8Bf,kBAAkB;YAOlB,qBAAqB;YAmBrB,mBAAmB;IAUjC,OAAO,CAAC,0BAA0B;IAsBlC,OAAO,CAAC,0BAA0B;YAmDpB,sBAAsB;YAQtB,uBAAuB;YAUvB,uBAAuB;YASvB,kBAAkB;YAyBlB,uBAAuB;YAmBvB,uBAAuB;YAcvB,sBAAsB;YA+FtB,cAAc;YAuBd,aAAa;YAwBb,qBAAqB;YAkDrB,uBAAuB;IA8K/B,aAAa,IAAI,OAAO,CAAC,UAAU,CAAC;IAoCpC,oBAAoB,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAsF1E,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAwBnD,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAQjD,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC;IAcjC,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,UAAU,CAAC;IAuB/D,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAUrD,oBAAoB,IAAI,OAAO,CAAC,UAAU,CAAC;IAiB3C,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAuBzD,iBAAiB,CAAC,KAAK,EAAE,wBAAwB,GAAG,OAAO,CAAC,UAAU,CAAC;IAYvE,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAiBpD,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAsC1D,oBAAoB,CACxB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,0BAA0B,CAAC;IA+DhC,wBAAwB,CAC5B,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,GAC9B,OAAO,CAAC,2BAA2B,CAAC;IAmCjC,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAQ1D,kBAAkB,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAIlD,oBAAoB,CACxB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC;IAWV,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAkCrE,eAAe,CACnB,UAAU,EAAE,MAAM,EAClB,MAAM,GAAE,OAA6D,GACpE,OAAO,CAAC,OAAO,CAAC;IAab,qBAAqB,CACzB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,OAAO,CAAC;CAcpB;AAED,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,qBAAqB,GAC3B,KAAK,CAEP"}