@coin-voyage/shared 2.0.0 → 2.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/dist/api/client.d.ts +17 -18
- package/dist/api/client.js +23 -28
- package/dist/api/client.js.map +1 -1
- package/package.json +1 -1
package/dist/api/client.d.ts
CHANGED
|
@@ -55,15 +55,14 @@ export declare class ApiClient {
|
|
|
55
55
|
*
|
|
56
56
|
* Creates a PayOrder with mode `SALE` with the provided params.
|
|
57
57
|
*
|
|
58
|
-
*
|
|
58
|
+
* Requires a valid HMAC-SHA256 signature generated by `generateAuthorizationSignature`.
|
|
59
59
|
*
|
|
60
60
|
* @param {SalePayOrderParams} params - Params required to create a sale PayOrder.
|
|
61
|
-
* @param {string}
|
|
61
|
+
* @param {string} apiSecret - API secret used to generate the authorization signature.
|
|
62
62
|
* @returns {Promise<APIResponse<PayOrder>>} - A PayOrder object wrapped in an API response if the request was successful.
|
|
63
63
|
*
|
|
64
64
|
* @example
|
|
65
65
|
* const apiSecret = 'yourApiSecret';
|
|
66
|
-
* const authSignature = apiClient.generateAuthorizationSignature(apiSecret);
|
|
67
66
|
* const response = await createSalePayOrder({
|
|
68
67
|
* intent: {
|
|
69
68
|
* asset: { chain_id: 1, address: null },
|
|
@@ -85,27 +84,26 @@ export declare class ApiClient {
|
|
|
85
84
|
* }
|
|
86
85
|
* ]
|
|
87
86
|
* }
|
|
88
|
-
* },
|
|
87
|
+
* }, apiSecret);
|
|
89
88
|
* if (response.data) {
|
|
90
89
|
* console.log('Sale PayOrder created:', response.data);
|
|
91
90
|
* }
|
|
92
91
|
*/
|
|
93
|
-
createSalePayOrder(params: PayOrderParams,
|
|
92
|
+
createSalePayOrder(params: PayOrderParams, apiSecret: string): Promise<APIResponse<PayOrder>>;
|
|
94
93
|
/**
|
|
95
94
|
* Creates a `REFUND` PayOrder.
|
|
96
95
|
*
|
|
97
96
|
* Creates a PayOrder with mode `REFUND` with the provided params.
|
|
98
97
|
*
|
|
99
|
-
*
|
|
98
|
+
* Requires a valid HMAC-SHA256 signature generated by `generateAuthorizationSignature`.
|
|
100
99
|
*
|
|
101
100
|
* @param {string} payOrderId - The unique identifier of the PayOrder to be refunded.
|
|
102
101
|
* @param {PayOrderParams} params - Params required to create a refund PayOrder.
|
|
103
|
-
* @param {string}
|
|
102
|
+
* @param {string} apiSecret - API secret used to generate the authorization signature.
|
|
104
103
|
* @returns {Promise<APIResponse<PayOrder>>} - A PayOrder object wrapped in an API response if the request was successful.
|
|
105
104
|
*
|
|
106
105
|
* @example
|
|
107
106
|
* const apiSecret = 'yourApiSecret';
|
|
108
|
-
* const authSignature = apiClient.generateAuthorizationSignature(apiSecret);
|
|
109
107
|
* const response = await createRefundPayOrder(refundOrderId, {
|
|
110
108
|
* intent: {
|
|
111
109
|
* asset: { chain_id: 1, address: null },
|
|
@@ -127,12 +125,12 @@ export declare class ApiClient {
|
|
|
127
125
|
* }
|
|
128
126
|
* ]
|
|
129
127
|
* }
|
|
130
|
-
* },
|
|
128
|
+
* }, apiSecret);
|
|
131
129
|
* if (response.data) {
|
|
132
130
|
* console.log('Refund PayOrder created:', response.data);
|
|
133
131
|
* }
|
|
134
132
|
*/
|
|
135
|
-
createRefundPayOrder(payOrderId: string, params: PayOrderParams,
|
|
133
|
+
createRefundPayOrder(payOrderId: string, params: PayOrderParams, apiSecret: string): Promise<APIResponse<PayOrder>>;
|
|
136
134
|
createPayOrder(params: PayOrderParams, mode: PayOrderMode, signature?: string): Promise<APIResponse<PayOrder>>;
|
|
137
135
|
/**
|
|
138
136
|
* Generates a PayOrder Quote.
|
|
@@ -189,27 +187,28 @@ export declare class ApiClient {
|
|
|
189
187
|
*/
|
|
190
188
|
payOrderPaymentDetails(params: PaymentDetailsParams): Promise<APIResponse<PaymentDetails>>;
|
|
191
189
|
/**
|
|
192
|
-
* Generates an authorization signature for API requests.
|
|
190
|
+
* Generates an authorization signature for API requests using HMAC-SHA256.
|
|
193
191
|
*
|
|
194
192
|
* ⚠️ **Warning:** This function should only be run on the server.
|
|
195
193
|
* It uses the API secret, which must remain confidential. Running this
|
|
196
194
|
* code in a client-side environment risks exposing sensitive information
|
|
197
195
|
* to end users or malicious actors.
|
|
198
196
|
*
|
|
199
|
-
* This function creates a signed authorization string using
|
|
200
|
-
* The
|
|
201
|
-
* and a SHA-512 hash signature of the concatenated API key, secret, and timestamp.
|
|
197
|
+
* This function creates a signed authorization string using HMAC-SHA256.
|
|
198
|
+
* The signature is computed over: method + path + timestamp, using the secret as the HMAC key.
|
|
202
199
|
*
|
|
203
|
-
* @param {string} apiSecret - The API secret used
|
|
200
|
+
* @param {string} apiSecret - The API secret used as the HMAC key.
|
|
201
|
+
* @param {string} method - The HTTP method (e.g., "POST", "GET").
|
|
202
|
+
* @param {string} path - The request path (e.g., "/pay-orders").
|
|
204
203
|
* @returns {string} - A formatted authorization string in the format:
|
|
205
204
|
* `APIKey=<apiKey>,signature=<signature>,timestamp=<timestamp>`.
|
|
206
205
|
*
|
|
207
206
|
* @example
|
|
208
207
|
* const apiSecret = 'yourApiSecret';
|
|
209
|
-
* const authSignature = apiClient.generateAuthorizationSignature(apiSecret);
|
|
208
|
+
* const authSignature = apiClient.generateAuthorizationSignature(apiSecret, 'POST', '/pay-orders');
|
|
210
209
|
* console.log(authSignature);
|
|
211
210
|
* // Example output:
|
|
212
|
-
* // APIKey=yourApiKey,signature=
|
|
211
|
+
* // APIKey=yourApiKey,signature=a1b2c3d4...,timestamp=1737106896
|
|
213
212
|
*/
|
|
214
|
-
generateAuthorizationSignature(apiSecret: string): string;
|
|
213
|
+
generateAuthorizationSignature(apiSecret: string, method: string, path: string): string;
|
|
215
214
|
}
|
package/dist/api/client.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { createHmac } from "crypto";
|
|
2
2
|
import { now, PayOrderMode, zPayOrder, zPayOrderMetadata } from "../common/index";
|
|
3
3
|
import { fetchApi } from "./fetcher";
|
|
4
4
|
export class ApiClient {
|
|
@@ -80,15 +80,14 @@ export class ApiClient {
|
|
|
80
80
|
*
|
|
81
81
|
* Creates a PayOrder with mode `SALE` with the provided params.
|
|
82
82
|
*
|
|
83
|
-
*
|
|
83
|
+
* Requires a valid HMAC-SHA256 signature generated by `generateAuthorizationSignature`.
|
|
84
84
|
*
|
|
85
85
|
* @param {SalePayOrderParams} params - Params required to create a sale PayOrder.
|
|
86
|
-
* @param {string}
|
|
86
|
+
* @param {string} apiSecret - API secret used to generate the authorization signature.
|
|
87
87
|
* @returns {Promise<APIResponse<PayOrder>>} - A PayOrder object wrapped in an API response if the request was successful.
|
|
88
88
|
*
|
|
89
89
|
* @example
|
|
90
90
|
* const apiSecret = 'yourApiSecret';
|
|
91
|
-
* const authSignature = apiClient.generateAuthorizationSignature(apiSecret);
|
|
92
91
|
* const response = await createSalePayOrder({
|
|
93
92
|
* intent: {
|
|
94
93
|
* asset: { chain_id: 1, address: null },
|
|
@@ -110,13 +109,14 @@ export class ApiClient {
|
|
|
110
109
|
* }
|
|
111
110
|
* ]
|
|
112
111
|
* }
|
|
113
|
-
* },
|
|
112
|
+
* }, apiSecret);
|
|
114
113
|
* if (response.data) {
|
|
115
114
|
* console.log('Sale PayOrder created:', response.data);
|
|
116
115
|
* }
|
|
117
116
|
*/
|
|
118
|
-
async createSalePayOrder(params,
|
|
117
|
+
async createSalePayOrder(params, apiSecret) {
|
|
119
118
|
try {
|
|
119
|
+
const signature = this.generateAuthorizationSignature(apiSecret, 'POST', '/pay-orders');
|
|
120
120
|
return this.createPayOrder(params, PayOrderMode.SALE, signature);
|
|
121
121
|
}
|
|
122
122
|
catch (error) {
|
|
@@ -135,16 +135,15 @@ export class ApiClient {
|
|
|
135
135
|
*
|
|
136
136
|
* Creates a PayOrder with mode `REFUND` with the provided params.
|
|
137
137
|
*
|
|
138
|
-
*
|
|
138
|
+
* Requires a valid HMAC-SHA256 signature generated by `generateAuthorizationSignature`.
|
|
139
139
|
*
|
|
140
140
|
* @param {string} payOrderId - The unique identifier of the PayOrder to be refunded.
|
|
141
141
|
* @param {PayOrderParams} params - Params required to create a refund PayOrder.
|
|
142
|
-
* @param {string}
|
|
142
|
+
* @param {string} apiSecret - API secret used to generate the authorization signature.
|
|
143
143
|
* @returns {Promise<APIResponse<PayOrder>>} - A PayOrder object wrapped in an API response if the request was successful.
|
|
144
144
|
*
|
|
145
145
|
* @example
|
|
146
146
|
* const apiSecret = 'yourApiSecret';
|
|
147
|
-
* const authSignature = apiClient.generateAuthorizationSignature(apiSecret);
|
|
148
147
|
* const response = await createRefundPayOrder(refundOrderId, {
|
|
149
148
|
* intent: {
|
|
150
149
|
* asset: { chain_id: 1, address: null },
|
|
@@ -166,13 +165,14 @@ export class ApiClient {
|
|
|
166
165
|
* }
|
|
167
166
|
* ]
|
|
168
167
|
* }
|
|
169
|
-
* },
|
|
168
|
+
* }, apiSecret);
|
|
170
169
|
* if (response.data) {
|
|
171
170
|
* console.log('Refund PayOrder created:', response.data);
|
|
172
171
|
* }
|
|
173
172
|
*/
|
|
174
|
-
async createRefundPayOrder(payOrderId, params,
|
|
173
|
+
async createRefundPayOrder(payOrderId, params, apiSecret) {
|
|
175
174
|
try {
|
|
175
|
+
const signature = this.generateAuthorizationSignature(apiSecret, 'POST', `/pay-orders/${payOrderId}/refund`);
|
|
176
176
|
return this.createPayOrder(params, PayOrderMode.REFUND, signature);
|
|
177
177
|
}
|
|
178
178
|
catch (error) {
|
|
@@ -287,39 +287,34 @@ export class ApiClient {
|
|
|
287
287
|
});
|
|
288
288
|
}
|
|
289
289
|
/**
|
|
290
|
-
* Generates an authorization signature for API requests.
|
|
290
|
+
* Generates an authorization signature for API requests using HMAC-SHA256.
|
|
291
291
|
*
|
|
292
292
|
* ⚠️ **Warning:** This function should only be run on the server.
|
|
293
293
|
* It uses the API secret, which must remain confidential. Running this
|
|
294
294
|
* code in a client-side environment risks exposing sensitive information
|
|
295
295
|
* to end users or malicious actors.
|
|
296
296
|
*
|
|
297
|
-
* This function creates a signed authorization string using
|
|
298
|
-
* The
|
|
299
|
-
* and a SHA-512 hash signature of the concatenated API key, secret, and timestamp.
|
|
297
|
+
* This function creates a signed authorization string using HMAC-SHA256.
|
|
298
|
+
* The signature is computed over: method + path + timestamp, using the secret as the HMAC key.
|
|
300
299
|
*
|
|
301
|
-
* @param {string} apiSecret - The API secret used
|
|
300
|
+
* @param {string} apiSecret - The API secret used as the HMAC key.
|
|
301
|
+
* @param {string} method - The HTTP method (e.g., "POST", "GET").
|
|
302
|
+
* @param {string} path - The request path (e.g., "/pay-orders").
|
|
302
303
|
* @returns {string} - A formatted authorization string in the format:
|
|
303
304
|
* `APIKey=<apiKey>,signature=<signature>,timestamp=<timestamp>`.
|
|
304
305
|
*
|
|
305
306
|
* @example
|
|
306
307
|
* const apiSecret = 'yourApiSecret';
|
|
307
|
-
* const authSignature = apiClient.generateAuthorizationSignature(apiSecret);
|
|
308
|
+
* const authSignature = apiClient.generateAuthorizationSignature(apiSecret, 'POST', '/pay-orders');
|
|
308
309
|
* console.log(authSignature);
|
|
309
310
|
* // Example output:
|
|
310
|
-
* // APIKey=yourApiKey,signature=
|
|
311
|
+
* // APIKey=yourApiKey,signature=a1b2c3d4...,timestamp=1737106896
|
|
311
312
|
*/
|
|
312
|
-
generateAuthorizationSignature(apiSecret) {
|
|
313
|
-
// Get the current timestamp as a string
|
|
313
|
+
generateAuthorizationSignature(apiSecret, method, path) {
|
|
314
314
|
const timestamp = now();
|
|
315
|
-
// Create
|
|
316
|
-
const data =
|
|
317
|
-
|
|
318
|
-
const hash = createHash('sha512');
|
|
319
|
-
hash.update(data);
|
|
320
|
-
// Encode the hash as a hexadecimal string
|
|
321
|
-
const signature = hash.digest('hex');
|
|
322
|
-
// Format the final string
|
|
315
|
+
// Create HMAC-SHA256 signature over: method + path + timestamp
|
|
316
|
+
const data = `${method}${path}${timestamp}`;
|
|
317
|
+
const signature = createHmac('sha256', apiSecret).update(data).digest('hex');
|
|
323
318
|
return `APIKey=${this.apiKey},signature=${signature},timestamp=${timestamp}`;
|
|
324
319
|
}
|
|
325
320
|
}
|
package/dist/api/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAA4B,GAAG,EAAiB,YAAY,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAG3H,OAAO,EAAoB,QAAQ,EAAE,MAAM,WAAW,CAAC;AAEvD,MAAM,OAAO,SAAS;IAMpB,YAAY,EACV,MAAM,EACN,SAAS,EACT,WAAW,GAAG,YAAY,EAC1B,OAAO,EAMR;QACC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAEO,KAAK,CAAC,OAAO,CAAI,IAAuC;QAC9D,OAAO,QAAQ,CAAI;YACjB,GAAG,IAAI;YACP,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,OAAO,EAAE;gBACP,GAAG,IAAI,CAAC,OAAO;gBACf,OAAO,EAAE;oBACP,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO;oBACxB,WAAW,EAAE,IAAI,CAAC,MAAM;oBACxB,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE;oBAC3D,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE;iBAC5D;aACF;SACF,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;;;;MAWE;IACF,KAAK,CAAC,WAAW,CAAC,UAAkB;QAClC,OAAO,IAAI,CAAC,OAAO,CAAW,EAAE,IAAI,EAAE,cAAc,UAAU,EAAE,EAAE,CAAC,CAAC;IACtE,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;MAqBE;IACF,KAAK,CAAC,qBAAqB,CAAC,MAAsB;QAChD,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;QAC3D,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,OAAO;gBACL,KAAK,EAAE;oBACL,IAAI,EAAE,YAAY;oBAClB,UAAU,EAAE,GAAG;oBACf,MAAM,EAAE,aAAa;oBACrB,OAAO,EAAG,KAAe,CAAC,OAAO;iBAClC;aACF,CAAA;QACH,CAAC;IACH,CAAC;IAED
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAA4B,GAAG,EAAiB,YAAY,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAG3H,OAAO,EAAoB,QAAQ,EAAE,MAAM,WAAW,CAAC;AAEvD,MAAM,OAAO,SAAS;IAMpB,YAAY,EACV,MAAM,EACN,SAAS,EACT,WAAW,GAAG,YAAY,EAC1B,OAAO,EAMR;QACC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAEO,KAAK,CAAC,OAAO,CAAI,IAAuC;QAC9D,OAAO,QAAQ,CAAI;YACjB,GAAG,IAAI;YACP,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,OAAO,EAAE;gBACP,GAAG,IAAI,CAAC,OAAO;gBACf,OAAO,EAAE;oBACP,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO;oBACxB,WAAW,EAAE,IAAI,CAAC,MAAM;oBACxB,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE;oBAC3D,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE;iBAC5D;aACF;SACF,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;;;;MAWE;IACF,KAAK,CAAC,WAAW,CAAC,UAAkB;QAClC,OAAO,IAAI,CAAC,OAAO,CAAW,EAAE,IAAI,EAAE,cAAc,UAAU,EAAE,EAAE,CAAC,CAAC;IACtE,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;MAqBE;IACF,KAAK,CAAC,qBAAqB,CAAC,MAAsB;QAChD,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;QAC3D,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,OAAO;gBACL,KAAK,EAAE;oBACL,IAAI,EAAE,YAAY;oBAClB,UAAU,EAAE,GAAG;oBACf,MAAM,EAAE,aAAa;oBACrB,OAAO,EAAG,KAAe,CAAC,OAAO;iBAClC;aACF,CAAA;QACH,CAAC;IACH,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAsCE;IACF,KAAK,CAAC,kBAAkB,CAAC,MAAsB,EAAE,SAAiB;QAChE,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,IAAI,CAAC,8BAA8B,CAAC,SAAS,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;YACxF,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,YAAY,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACnE,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,OAAO;gBACL,KAAK,EAAE;oBACL,IAAI,EAAE,YAAY;oBAClB,UAAU,EAAE,GAAG;oBACf,MAAM,EAAE,aAAa;oBACrB,OAAO,EAAG,KAAe,CAAC,OAAO;iBAClC;aACF,CAAA;QACH,CAAC;IACH,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAuCE;IACF,KAAK,CAAC,oBAAoB,CAAC,UAAkB,EAAE,MAAsB,EAAE,SAAiB;QACtF,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,IAAI,CAAC,8BAA8B,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,UAAU,SAAS,CAAC,CAAC;YAC7G,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QACrE,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,OAAO;gBACL,KAAK,EAAE;oBACL,IAAI,EAAE,cAAc,UAAU,SAAS;oBACvC,UAAU,EAAE,GAAG;oBACf,MAAM,EAAE,aAAa;oBACrB,OAAO,EAAG,KAAe,CAAC,OAAO;iBAClC;aACF,CAAA;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,MAAsB,EAAE,IAAkB,EAAE,SAAkB;QACjF,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC3C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACtE,CAAC;QACD,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACpB,MAAM,MAAM,GAAG,iBAAiB,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC5D,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpB,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACtE,CAAC;QACH,CAAC;QAED,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YAC1E,MAAM,IAAI,KAAK,CAAC,6BAA6B,IAAI,YAAY,CAAC,CAAC;QACjE,CAAC;QAED,OAAO,IAAI,CAAC,OAAO,CAAW;YAC5B,IAAI,EAAE,YAAY;YAClB,OAAO,EAAE;gBACP,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC;gBACzC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE;aACvD;SACF,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;KAsBC;IACD,KAAK,CAAC,aAAa,CAAC,OAAe,EAAE,WAAgC;QACnE,OAAO,IAAI,CAAC,OAAO,CAAwB;YACzC,IAAI,EAAE,cAAc,OAAO,QAAQ;YACnC,OAAO,EAAE;gBACP,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;aAClC;SACF,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA4BA;IACA,KAAK,CAAC,sBAAsB,CAAC,MAA4B;QACvD,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,MAAM,CAAC;QACxE,OAAO,IAAI,CAAC,OAAO,CAAiB;YAClC,IAAI,EAAE,cAAc,WAAW,kBAAkB;YACjD,OAAO,EAAE;gBACP,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,eAAe,EAAE;wBACf,OAAO,EAAE,aAAa;wBACtB,QAAQ;qBACT;oBACD,cAAc,EAAE,cAAc;iBAC/B,CAAC;aACH;SACF,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,8BAA8B,CAAC,SAAiB,EAAE,MAAc,EAAE,IAAY;QAC5E,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC;QAExB,+DAA+D;QAC/D,MAAM,IAAI,GAAG,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,CAAC;QAC5C,MAAM,SAAS,GAAG,UAAU,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAE7E,OAAO,UAAU,IAAI,CAAC,MAAM,cAAc,SAAS,cAAc,SAAS,EAAE,CAAC;IAC/E,CAAC;CACF"}
|