awesome-node-checkout 1.3.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/CHANGELOG.md +64 -0
- package/README.md +335 -17
- package/dist/adapters/express/index.d.ts +103 -2
- package/dist/adapters/express/index.d.ts.map +1 -1
- package/dist/adapters/express/index.js +213 -30
- package/dist/adapters/express/index.js.map +1 -1
- package/dist/checkout-configurator.d.ts +106 -0
- package/dist/checkout-configurator.d.ts.map +1 -1
- package/dist/checkout-configurator.js +515 -0
- package/dist/checkout-configurator.js.map +1 -1
- package/dist/events/checkout-event-bus.d.ts +11 -1
- package/dist/events/checkout-event-bus.d.ts.map +1 -1
- package/dist/events/checkout-event-bus.js.map +1 -1
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -1
- package/dist/index.js.map +1 -1
- package/dist/interfaces/mandate-provider.interface.d.ts +40 -0
- package/dist/interfaces/mandate-provider.interface.d.ts.map +1 -0
- package/dist/interfaces/mandate-provider.interface.js +18 -0
- package/dist/interfaces/mandate-provider.interface.js.map +1 -0
- package/dist/models/checkout-config.model.d.ts +16 -0
- package/dist/models/checkout-config.model.d.ts.map +1 -1
- package/dist/models/errors.d.ts +1 -1
- package/dist/models/errors.d.ts.map +1 -1
- package/dist/models/errors.js.map +1 -1
- package/dist/models/mandate.model.d.ts +166 -0
- package/dist/models/mandate.model.d.ts.map +1 -0
- package/dist/models/mandate.model.js +19 -0
- package/dist/models/mandate.model.js.map +1 -0
- package/dist/providers/nexi/nexi.provider.d.ts +125 -1
- package/dist/providers/nexi/nexi.provider.d.ts.map +1 -1
- package/dist/providers/nexi/nexi.provider.js +677 -13
- package/dist/providers/nexi/nexi.provider.js.map +1 -1
- package/dist/providers/paypal/paypal.provider.d.ts +44 -1
- package/dist/providers/paypal/paypal.provider.d.ts.map +1 -1
- package/dist/providers/paypal/paypal.provider.js +529 -2
- package/dist/providers/paypal/paypal.provider.js.map +1 -1
- package/dist/providers/satispay/satispay.provider.d.ts +86 -1
- package/dist/providers/satispay/satispay.provider.d.ts.map +1 -1
- package/dist/providers/satispay/satispay.provider.js +440 -3
- package/dist/providers/satispay/satispay.provider.js.map +1 -1
- package/dist/utils/ids.d.ts +10 -0
- package/dist/utils/ids.d.ts.map +1 -0
- package/dist/utils/ids.js +16 -0
- package/dist/utils/ids.js.map +1 -0
- package/dist/utils/money.d.ts +20 -0
- package/dist/utils/money.d.ts.map +1 -0
- package/dist/utils/money.js +68 -0
- package/dist/utils/money.js.map +1 -0
- package/dist/utils/redact.d.ts +15 -0
- package/dist/utils/redact.d.ts.map +1 -0
- package/dist/utils/redact.js +60 -0
- package/dist/utils/redact.js.map +1 -0
- package/dist/utils/url.d.ts +12 -0
- package/dist/utils/url.d.ts.map +1 -0
- package/dist/utils/url.js +19 -0
- package/dist/utils/url.js.map +1 -0
- package/package.json +2 -2
|
@@ -2,10 +2,69 @@ import { Router, Request, Response, RequestHandler } from 'express';
|
|
|
2
2
|
import { CheckoutConfigurator } from '../../checkout-configurator';
|
|
3
3
|
import { PaymentRequest } from '../../models/payment-request.model';
|
|
4
4
|
import { PaymentResult } from '../../models/payment-result.model';
|
|
5
|
+
import { MandatePendingState, MandateSetupOutcome, MandateSetupRequest, MandateSetupStart } from '../../models/mandate.model';
|
|
5
6
|
export interface PaymentRequestContext {
|
|
6
7
|
provider: string;
|
|
7
8
|
res: Response;
|
|
8
9
|
}
|
|
10
|
+
/**
|
|
11
|
+
* Recurring payments (mandates). Mounts `POST /:provider/mandate` (`GET` answers 405) and
|
|
12
|
+
* `GET|POST /:provider/mandate/callback`. Charges and revocations are never routes: call
|
|
13
|
+
* `checkout.chargeMandate` / `checkout.revokeMandate` from a server job.
|
|
14
|
+
*
|
|
15
|
+
* All four hooks are required: `createCheckoutRouter` throws
|
|
16
|
+
* `CheckoutError('INSECURE_CONFIGURATION')` at mount when one is missing.
|
|
17
|
+
*
|
|
18
|
+
* **Pending state is single-use.** When `outcome.terminal` is true, `onOutcome` must atomically
|
|
19
|
+
* mark the pending state consumed and persist the mandate (a conditional update such as
|
|
20
|
+
* `pending → done`, acting only if it matched); from then on `loadPending` must return `null`, so
|
|
21
|
+
* a replayed callback answers 404 and never reaches the provider again. A non-terminal outcome
|
|
22
|
+
* must not consume it. The app may expire stale pending states after a TTL of its choice.
|
|
23
|
+
*/
|
|
24
|
+
export interface ExpressMandateOptions {
|
|
25
|
+
/**
|
|
26
|
+
* REQUIRED. Builds the setup request on the server (price from your plan, ids from your DB),
|
|
27
|
+
* ignoring the client body. `mandateRef` and `orderId` must be fresh for every attempt.
|
|
28
|
+
*
|
|
29
|
+
* `returnUrl` and `cancelUrl` (and `notifyUrl`) **must point to the callback route**,
|
|
30
|
+
* `<mount>/<provider>/mandate/callback` (e.g. `https://app.example/checkout/nexi/mandate/callback`),
|
|
31
|
+
* as absolute http(s) URLs (a relative URL answers 400 `INVALID_MANDATE_REQUEST`):
|
|
32
|
+
* the provider appends `mandate_ref`, the route confirms the setup when the customer comes back,
|
|
33
|
+
* and `onOutcome` decides where the browser goes next.
|
|
34
|
+
*
|
|
35
|
+
* Like `buildPaymentRequest`: if the hook sends a response itself, returning `null` or
|
|
36
|
+
* `undefined` stops the adapter; otherwise a missing request answers 400.
|
|
37
|
+
*/
|
|
38
|
+
buildMandateRequest: (req: Request, ctx: PaymentRequestContext) => MandateSetupRequest | null | undefined | Promise<MandateSetupRequest | null | undefined>;
|
|
39
|
+
/**
|
|
40
|
+
* REQUIRED. Returns the persisted pending state for this callback, or null (→ 404).
|
|
41
|
+
* Must return `null` once a terminal outcome consumed it (single-use, see above).
|
|
42
|
+
* `ctx.mandateRef` comes from the unsigned query string: use it only as a lookup key.
|
|
43
|
+
*/
|
|
44
|
+
loadPending: (req: Request, ctx: {
|
|
45
|
+
provider: string;
|
|
46
|
+
mandateRef: string;
|
|
47
|
+
}) => MandatePendingState | null | Promise<MandatePendingState | null>;
|
|
48
|
+
/**
|
|
49
|
+
* REQUIRED. Persist the outcome (idempotently: it may be called twice). When `outcome.terminal`
|
|
50
|
+
* is true, atomically consume the pending state and save `outcome.mandate`; never consume it on
|
|
51
|
+
* a non-terminal outcome. Redirect the customer's browser yourself (`req.method === 'GET'`,
|
|
52
|
+
* typically `res.redirect(302, …)` to your UI); do not respond to a server-to-server POST (Nexi
|
|
53
|
+
* `urlpost`, which must get HTTP 200), and the route answers `200 { success }`. Consuming closes the route, it does not delete
|
|
54
|
+
* the record: when `outcome.firstCharge.status` is `unknown`, keep the pending state and resolve
|
|
55
|
+
* the charge from a job with `checkout.confirmMandate(provider, pending, {})`, never with
|
|
56
|
+
* `chargeMandate` and the setup's `orderId`.
|
|
57
|
+
*/
|
|
58
|
+
onOutcome: (outcome: MandateSetupOutcome, req: Request, res: Response) => void | Promise<void>;
|
|
59
|
+
/**
|
|
60
|
+
* REQUIRED. Called with the start result after createMandate, to persist `start.pending`
|
|
61
|
+
* (when `start.success`). Awaited **before** the response is sent, so the pending state exists
|
|
62
|
+
* before the customer can come back.
|
|
63
|
+
*/
|
|
64
|
+
onStarted: (start: MandateSetupStart, req: Request) => void | Promise<void>;
|
|
65
|
+
/** Applied to POST /:provider/mandate only (the callback is always public). */
|
|
66
|
+
middleware?: RequestHandler[];
|
|
67
|
+
}
|
|
9
68
|
export interface ExpressCheckoutOptions {
|
|
10
69
|
/**
|
|
11
70
|
* Middleware applied to ALL checkout routes (e.g. API key auth).
|
|
@@ -22,8 +81,18 @@ export interface ExpressCheckoutOptions {
|
|
|
22
81
|
* Builds the PaymentRequest on the server (amount from your own order), ignoring the client body.
|
|
23
82
|
* If the hook sends an HTTP response directly (e.g. via `ctx.res.status(403)...`),
|
|
24
83
|
* returning `null` or `undefined` halts further adapter processing without error.
|
|
84
|
+
*
|
|
85
|
+
* Required: `createCheckoutRouter` throws `CheckoutError('INSECURE_CONFIGURATION')` at mount
|
|
86
|
+
* when it is missing, unless `allowClientPaymentRequest: true` is set.
|
|
25
87
|
*/
|
|
26
88
|
buildPaymentRequest?: (req: Request, ctx: PaymentRequestContext) => PaymentRequest | null | undefined | Promise<PaymentRequest | null | undefined>;
|
|
89
|
+
/**
|
|
90
|
+
* **Insecure.** Without `buildPaymentRequest`, sends the client request body to the provider
|
|
91
|
+
* as the PaymentRequest: the browser chooses the amount, the currency and the order id.
|
|
92
|
+
* Never use this for a shop or for anything with a price; it exists for donations-style
|
|
93
|
+
* flows and tests. Ignored when `buildPaymentRequest` is set.
|
|
94
|
+
*/
|
|
95
|
+
allowClientPaymentRequest?: true;
|
|
27
96
|
/**
|
|
28
97
|
* When configured, GET /:provider/redirect responds with a 302 redirect
|
|
29
98
|
* to the URL returned by onSuccess or onFailure instead of JSON.
|
|
@@ -34,9 +103,15 @@ export interface ExpressCheckoutOptions {
|
|
|
34
103
|
};
|
|
35
104
|
/**
|
|
36
105
|
* Configuration for GET /:provider/:id (getPaymentDetails).
|
|
37
|
-
*
|
|
106
|
+
* If omitted, the details route is NOT mounted (returns 404), like `refund`.
|
|
107
|
+
* The route returns status, amount and currency for any payment id it is given:
|
|
108
|
+
* protect it with `middleware` (a console warning is printed at mount when it has none).
|
|
38
109
|
*/
|
|
39
110
|
details?: {
|
|
111
|
+
/**
|
|
112
|
+
* @deprecated Since 2.0.0 the route is mounted only when `details` is set.
|
|
113
|
+
* `enabled: false` behaves as if `details` were omitted; any other value is ignored.
|
|
114
|
+
*/
|
|
40
115
|
enabled?: boolean;
|
|
41
116
|
middleware?: RequestHandler[];
|
|
42
117
|
};
|
|
@@ -54,6 +129,25 @@ export interface ExpressCheckoutOptions {
|
|
|
54
129
|
middleware?: RequestHandler[];
|
|
55
130
|
onBeforeExecute?: (req: Request, paymentId: string) => void | Promise<void>;
|
|
56
131
|
};
|
|
132
|
+
/**
|
|
133
|
+
* When `true`, 500 responses carry the error message (masked to 'Invalid provider response'
|
|
134
|
+
* for provider parse errors). Default `false`: 500 bodies are always
|
|
135
|
+
* `{ success: false, error: 'Internal server error' }`. `CheckoutError` 4xx responses keep
|
|
136
|
+
* their message and code either way.
|
|
137
|
+
*/
|
|
138
|
+
exposeErrorMessages?: boolean;
|
|
139
|
+
/**
|
|
140
|
+
* Called with the original error (and the request) for every error answered with a 500,
|
|
141
|
+
* whatever `exposeErrorMessages` says. Not called for 4xx `CheckoutError` responses, which are
|
|
142
|
+
* client-triggerable (e.g. an unknown provider name). When omitted, the error is logged with
|
|
143
|
+
* `console.error('[awesome-node-checkout]', err)`.
|
|
144
|
+
*/
|
|
145
|
+
onError?: (err: unknown, req: Request) => void;
|
|
146
|
+
/**
|
|
147
|
+
* Recurring payments (mandates). If omitted, the mandate routes are NOT mounted (404).
|
|
148
|
+
* See `ExpressMandateOptions`.
|
|
149
|
+
*/
|
|
150
|
+
mandates?: ExpressMandateOptions;
|
|
57
151
|
}
|
|
58
152
|
/**
|
|
59
153
|
* Matches a request path against public path patterns by segments.
|
|
@@ -72,9 +166,16 @@ export declare function isPathPublic(reqPath: string, publicPaths: (string | str
|
|
|
72
166
|
* GET /:provider/webhook → handleWebhook
|
|
73
167
|
* POST /:provider/webhook → handleWebhook
|
|
74
168
|
* GET /:provider/redirect → handleRedirect (must come before /:provider/:id)
|
|
75
|
-
*
|
|
169
|
+
* POST /:provider/mandate → createMandate (only if options.mandates is configured)
|
|
170
|
+
* GET /:provider/mandate → 405, Allow: POST (only if options.mandates is configured)
|
|
171
|
+
* GET /:provider/mandate/callback → confirmMandate (only if options.mandates is configured)
|
|
172
|
+
* POST /:provider/mandate/callback → confirmMandate (only if options.mandates is configured)
|
|
173
|
+
* GET /:provider/:id → getPaymentDetails (only if options.details is configured)
|
|
76
174
|
* ```
|
|
77
175
|
*
|
|
176
|
+
* Throws `CheckoutError('INSECURE_CONFIGURATION')` when neither `buildPaymentRequest` nor
|
|
177
|
+
* `allowClientPaymentRequest: true` is set, or when `mandates` lacks one of its four hooks.
|
|
178
|
+
*
|
|
78
179
|
* Usage:
|
|
79
180
|
* ```typescript
|
|
80
181
|
* import { createCheckoutRouter } from 'awesome-node-checkout/express';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/express/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAEnE,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAGlE,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,QAAQ,CAAC;CACf;AAED,MAAM,WAAW,sBAAsB;IACrC;;;OAGG;IACH,UAAU,CAAC,EAAE,cAAc,EAAE,CAAC;IAE9B;;;;OAIG;IACH,WAAW,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC,EAAE,CAAC;IAEpC
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/express/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,10 @@ exports.createCheckoutRouter = createCheckoutRouter;
|
|
|
5
5
|
const express_1 = require("express");
|
|
6
6
|
const errors_1 = require("../../models/errors");
|
|
7
7
|
const checkout_event_bus_1 = require("../../events/checkout-event-bus");
|
|
8
|
+
const money_1 = require("../../utils/money");
|
|
9
|
+
const mandate_model_1 = require("../../models/mandate.model");
|
|
10
|
+
const MANDATE_HOOKS = ['buildMandateRequest', 'loadPending', 'onOutcome', 'onStarted'];
|
|
11
|
+
const MANDATE_CALLBACK_PATH = [':provider', 'mandate', 'callback'];
|
|
8
12
|
/**
|
|
9
13
|
* Matches a request path against public path patterns by segments.
|
|
10
14
|
* ':provider' matches any single non-empty segment.
|
|
@@ -38,9 +42,16 @@ function isPathPublic(reqPath, publicPaths) {
|
|
|
38
42
|
* GET /:provider/webhook → handleWebhook
|
|
39
43
|
* POST /:provider/webhook → handleWebhook
|
|
40
44
|
* GET /:provider/redirect → handleRedirect (must come before /:provider/:id)
|
|
41
|
-
*
|
|
45
|
+
* POST /:provider/mandate → createMandate (only if options.mandates is configured)
|
|
46
|
+
* GET /:provider/mandate → 405, Allow: POST (only if options.mandates is configured)
|
|
47
|
+
* GET /:provider/mandate/callback → confirmMandate (only if options.mandates is configured)
|
|
48
|
+
* POST /:provider/mandate/callback → confirmMandate (only if options.mandates is configured)
|
|
49
|
+
* GET /:provider/:id → getPaymentDetails (only if options.details is configured)
|
|
42
50
|
* ```
|
|
43
51
|
*
|
|
52
|
+
* Throws `CheckoutError('INSECURE_CONFIGURATION')` when neither `buildPaymentRequest` nor
|
|
53
|
+
* `allowClientPaymentRequest: true` is set, or when `mandates` lacks one of its four hooks.
|
|
54
|
+
*
|
|
44
55
|
* Usage:
|
|
45
56
|
* ```typescript
|
|
46
57
|
* import { createCheckoutRouter } from 'awesome-node-checkout/express';
|
|
@@ -59,22 +70,43 @@ function isPathPublic(reqPath, publicPaths) {
|
|
|
59
70
|
* ```
|
|
60
71
|
*/
|
|
61
72
|
function createCheckoutRouter(checkout, options = {}) {
|
|
62
|
-
|
|
73
|
+
if (!options.buildPaymentRequest && options.allowClientPaymentRequest !== true) {
|
|
74
|
+
throw new errors_1.CheckoutError('createCheckoutRouter: set buildPaymentRequest (server-side amount) or allowClientPaymentRequest: true', 'INSECURE_CONFIGURATION');
|
|
75
|
+
}
|
|
76
|
+
const mandates = options.mandates;
|
|
77
|
+
if (mandates !== undefined) {
|
|
78
|
+
const missing = MANDATE_HOOKS.filter((hook) => typeof mandates?.[hook] !== 'function');
|
|
79
|
+
if (missing.length > 0) {
|
|
80
|
+
throw new errors_1.CheckoutError(`createCheckoutRouter: mandates requires ${MANDATE_HOOKS.join(', ')} (missing: ${missing.join(', ')})`, 'INSECURE_CONFIGURATION');
|
|
81
|
+
}
|
|
82
|
+
}
|
|
63
83
|
if (!options.buildPaymentRequest) {
|
|
64
|
-
console.warn('[awesome-node-checkout]
|
|
84
|
+
console.warn('[awesome-node-checkout] allowClientPaymentRequest: the client body decides the amount');
|
|
65
85
|
}
|
|
86
|
+
const router = (0, express_1.Router)();
|
|
87
|
+
const sendError = (req, res, err, isProvider = true) => sendErrorResponse(req, res, options, err, isProvider);
|
|
66
88
|
// Apply shared middleware (skipping public paths by segment match)
|
|
67
89
|
if (options.middleware?.length) {
|
|
68
90
|
const publicPaths = options.publicPaths ?? [];
|
|
69
91
|
router.use((req, res, next) => {
|
|
70
92
|
if (isPathPublic(req.path, publicPaths))
|
|
71
93
|
return next();
|
|
94
|
+
// The mandate callback is reached by the provider (Nexi urlpost, Satispay callback) and by
|
|
95
|
+
// the customer's browser, without app credentials: always exempt, whatever publicPaths says
|
|
96
|
+
if (mandates && isPathPublic(req.path, [MANDATE_CALLBACK_PATH]))
|
|
97
|
+
return next();
|
|
72
98
|
// Chain all middleware in sequence
|
|
73
99
|
const handlers = options.middleware;
|
|
74
100
|
const run = (i) => {
|
|
75
101
|
if (i >= handlers.length)
|
|
76
102
|
return next();
|
|
77
|
-
handlers[i](req, res, () =>
|
|
103
|
+
handlers[i](req, res, (err) => {
|
|
104
|
+
// Same semantics as Express: 'route' continues (as for router.use), 'router' leaves the
|
|
105
|
+
// router, any other truthy value is an error and never reaches the route
|
|
106
|
+
if (!err || err === 'route')
|
|
107
|
+
return run(i + 1);
|
|
108
|
+
next(err);
|
|
109
|
+
});
|
|
78
110
|
};
|
|
79
111
|
run(0);
|
|
80
112
|
});
|
|
@@ -93,7 +125,7 @@ function createCheckoutRouter(checkout, options = {}) {
|
|
|
93
125
|
});
|
|
94
126
|
}
|
|
95
127
|
catch (consumerErr) {
|
|
96
|
-
sendError(res, consumerErr, false);
|
|
128
|
+
sendError(req, res, consumerErr, false);
|
|
97
129
|
return;
|
|
98
130
|
}
|
|
99
131
|
if (res.headersSent) {
|
|
@@ -134,12 +166,22 @@ function createCheckoutRouter(checkout, options = {}) {
|
|
|
134
166
|
}
|
|
135
167
|
paymentRequest = body;
|
|
136
168
|
}
|
|
169
|
+
// Exact minor units: an amount with more decimals than the currency allows is rejected,
|
|
170
|
+
// never rounded
|
|
171
|
+
try {
|
|
172
|
+
(0, money_1.toMinorUnits)(paymentRequest.amount, paymentRequest.currency);
|
|
173
|
+
}
|
|
174
|
+
catch (amountErr) {
|
|
175
|
+
if (!(0, money_1.isInvalidAmountError)(amountErr))
|
|
176
|
+
throw amountErr;
|
|
177
|
+
return res.status(400).json({ success: false, code: 'INVALID_AMOUNT', error: amountErr.message });
|
|
178
|
+
}
|
|
137
179
|
const result = await checkout.createPayment(provider, paymentRequest);
|
|
138
180
|
const { raw, ...safeResult } = result;
|
|
139
181
|
res.status(result.success ? 201 : 400).json(safeResult);
|
|
140
182
|
}
|
|
141
183
|
catch (err) {
|
|
142
|
-
sendError(res, err, true);
|
|
184
|
+
sendError(req, res, err, true);
|
|
143
185
|
}
|
|
144
186
|
});
|
|
145
187
|
// ---- POST /:provider/execute — execute payment ---------------------------
|
|
@@ -155,7 +197,7 @@ function createCheckoutRouter(checkout, options = {}) {
|
|
|
155
197
|
await options.execute.onBeforeExecute(req, paymentId);
|
|
156
198
|
}
|
|
157
199
|
catch (consumerErr) {
|
|
158
|
-
sendError(res, consumerErr, false);
|
|
200
|
+
sendError(req, res, consumerErr, false);
|
|
159
201
|
return;
|
|
160
202
|
}
|
|
161
203
|
}
|
|
@@ -164,7 +206,7 @@ function createCheckoutRouter(checkout, options = {}) {
|
|
|
164
206
|
res.status(result.success ? 200 : 400).json(safeResult);
|
|
165
207
|
}
|
|
166
208
|
catch (err) {
|
|
167
|
-
sendError(res, err, true);
|
|
209
|
+
sendError(req, res, err, true);
|
|
168
210
|
}
|
|
169
211
|
});
|
|
170
212
|
// ---- POST /:provider/refund — refund payment (opt-in) --------------------
|
|
@@ -181,7 +223,7 @@ function createCheckoutRouter(checkout, options = {}) {
|
|
|
181
223
|
res.status(result.success ? 200 : 400).json(safeResult);
|
|
182
224
|
}
|
|
183
225
|
catch (err) {
|
|
184
|
-
sendError(res, err, true);
|
|
226
|
+
sendError(req, res, err, true);
|
|
185
227
|
}
|
|
186
228
|
});
|
|
187
229
|
}
|
|
@@ -198,7 +240,7 @@ function createCheckoutRouter(checkout, options = {}) {
|
|
|
198
240
|
res.status(result.success ? 200 : 400).json(safeResult);
|
|
199
241
|
}
|
|
200
242
|
catch (err) {
|
|
201
|
-
sendError(res, err, true);
|
|
243
|
+
sendError(req, res, err, true);
|
|
202
244
|
}
|
|
203
245
|
};
|
|
204
246
|
router.get('/:provider/webhook', webhookHandler);
|
|
@@ -213,7 +255,7 @@ function createCheckoutRouter(checkout, options = {}) {
|
|
|
213
255
|
result = await checkout.handleRedirect(String(req.params.provider), req.query);
|
|
214
256
|
}
|
|
215
257
|
catch (err) {
|
|
216
|
-
sendError(res, err, true);
|
|
258
|
+
sendError(req, res, err, true);
|
|
217
259
|
return;
|
|
218
260
|
}
|
|
219
261
|
if (options.redirect) {
|
|
@@ -224,7 +266,7 @@ function createCheckoutRouter(checkout, options = {}) {
|
|
|
224
266
|
: options.redirect.onFailure(result, req);
|
|
225
267
|
}
|
|
226
268
|
catch (consumerErr) {
|
|
227
|
-
sendError(res, consumerErr, false);
|
|
269
|
+
sendError(req, res, consumerErr, false);
|
|
228
270
|
return;
|
|
229
271
|
}
|
|
230
272
|
return res.redirect(302, targetUrl);
|
|
@@ -232,52 +274,193 @@ function createCheckoutRouter(checkout, options = {}) {
|
|
|
232
274
|
const { raw, ...safeResult } = result;
|
|
233
275
|
res.status(result.success ? 200 : 400).json(safeResult);
|
|
234
276
|
});
|
|
235
|
-
// ----
|
|
236
|
-
|
|
237
|
-
if (
|
|
238
|
-
|
|
277
|
+
// ---- Mandates (opt-in) ----------------------------------------------------
|
|
278
|
+
// NOTE: registered BEFORE /:provider/:id so that "mandate" is never treated as a payment id.
|
|
279
|
+
if (mandates) {
|
|
280
|
+
mountMandateRoutes(router, checkout, mandates, sendError);
|
|
281
|
+
}
|
|
282
|
+
// ---- GET /:provider/:id — get payment details (opt-in) -------------------
|
|
283
|
+
// Registered after /:provider/redirect and /:provider/webhook so that those win.
|
|
284
|
+
if (options.details && options.details.enabled !== false) {
|
|
285
|
+
const detailsHandlers = [];
|
|
286
|
+
if (options.details.middleware?.length) {
|
|
287
|
+
detailsHandlers.push(...options.details.middleware);
|
|
288
|
+
}
|
|
289
|
+
else {
|
|
290
|
+
console.warn('[awesome-node-checkout] details route mounted without middleware: payment status and amount are readable by anyone who knows a payment id');
|
|
291
|
+
}
|
|
292
|
+
router.get('/:provider/:id', ...detailsHandlers, async (req, res) => {
|
|
293
|
+
try {
|
|
294
|
+
const result = await checkout.getPaymentDetails(String(req.params.provider), String(req.params.id));
|
|
295
|
+
const { raw, ...safeResult } = result;
|
|
296
|
+
res.status(result.success ? 200 : 404).json(safeResult);
|
|
297
|
+
}
|
|
298
|
+
catch (err) {
|
|
299
|
+
sendError(req, res, err, true);
|
|
300
|
+
}
|
|
301
|
+
});
|
|
239
302
|
}
|
|
240
|
-
router
|
|
241
|
-
|
|
242
|
-
|
|
303
|
+
return router;
|
|
304
|
+
}
|
|
305
|
+
function mountMandateRoutes(router, checkout, mandates, sendError) {
|
|
306
|
+
// ---- POST /:provider/mandate — start a mandate setup -----------------------
|
|
307
|
+
router.post('/:provider/mandate', ...(mandates.middleware ?? []), async (req, res) => {
|
|
308
|
+
const provider = String(req.params.provider);
|
|
309
|
+
let setupRequest;
|
|
310
|
+
try {
|
|
311
|
+
setupRequest = await mandates.buildMandateRequest(req, { provider, res });
|
|
312
|
+
}
|
|
313
|
+
catch (consumerErr) {
|
|
314
|
+
sendError(req, res, consumerErr, false);
|
|
315
|
+
return;
|
|
316
|
+
}
|
|
317
|
+
if (res.headersSent)
|
|
318
|
+
return;
|
|
319
|
+
if (!setupRequest || typeof setupRequest !== 'object') {
|
|
320
|
+
res.status(400).json({
|
|
321
|
+
success: false,
|
|
322
|
+
code: 'INVALID_MANDATE_REQUEST',
|
|
323
|
+
error: 'Invalid mandate request returned by buildMandateRequest',
|
|
324
|
+
});
|
|
325
|
+
return;
|
|
243
326
|
}
|
|
327
|
+
let start;
|
|
244
328
|
try {
|
|
245
|
-
|
|
246
|
-
const { raw, ...safeResult } = result;
|
|
247
|
-
res.status(result.success ? 200 : 404).json(safeResult);
|
|
329
|
+
start = await checkout.createMandate(provider, setupRequest);
|
|
248
330
|
}
|
|
249
331
|
catch (err) {
|
|
250
|
-
sendError(res, err, true);
|
|
332
|
+
sendError(req, res, err, true);
|
|
333
|
+
return;
|
|
334
|
+
}
|
|
335
|
+
try {
|
|
336
|
+
// Persist the pending state BEFORE answering: the customer must not come back first
|
|
337
|
+
await mandates.onStarted(start, req);
|
|
338
|
+
}
|
|
339
|
+
catch (consumerErr) {
|
|
340
|
+
sendError(req, res, consumerErr, false);
|
|
341
|
+
return;
|
|
342
|
+
}
|
|
343
|
+
if (res.headersSent)
|
|
344
|
+
return;
|
|
345
|
+
// Never `pending` (server-side state) and never `raw`
|
|
346
|
+
if (start.success) {
|
|
347
|
+
res.status(201).json({ success: true, approvalUrl: start.approvalUrl });
|
|
348
|
+
}
|
|
349
|
+
else {
|
|
350
|
+
res.status(400).json({ success: false, error: start.error });
|
|
251
351
|
}
|
|
252
352
|
});
|
|
253
|
-
|
|
353
|
+
// Only POST exists: never let GET /:provider/mandate fall through to the details route
|
|
354
|
+
router.get('/:provider/mandate', (_req, res) => {
|
|
355
|
+
res.status(405).set('Allow', 'POST').json({ success: false, error: 'Method not allowed' });
|
|
356
|
+
});
|
|
357
|
+
// ---- GET|POST /:provider/mandate/callback — confirm a mandate setup --------
|
|
358
|
+
// Exempt from the shared middleware (see createCheckoutRouter). `mandate_ref` is unsigned and is
|
|
359
|
+
// used ONLY as a lookup key for the persisted pending state. Every provider verifies the
|
|
360
|
+
// callback against `pending` (MAC-covered codTrans, PayPal order id, Satispay token re-read),
|
|
361
|
+
// never against the query, so a forged `mandate_ref` leads at most to confirming another
|
|
362
|
+
// customer's genuinely approved setup, idempotently.
|
|
363
|
+
const callbackHandler = async (req, res) => {
|
|
364
|
+
const provider = String(req.params.provider);
|
|
365
|
+
const mandateRef = req.query.mandate_ref;
|
|
366
|
+
if (typeof mandateRef !== 'string' || !mandate_model_1.MANDATE_REF_PATTERN.test(mandateRef)) {
|
|
367
|
+
res.status(400).json({ success: false, code: 'INVALID_MANDATE_REQUEST', error: 'Invalid mandate_ref' });
|
|
368
|
+
return;
|
|
369
|
+
}
|
|
370
|
+
let pending;
|
|
371
|
+
try {
|
|
372
|
+
pending = await mandates.loadPending(req, { provider, mandateRef });
|
|
373
|
+
}
|
|
374
|
+
catch (consumerErr) {
|
|
375
|
+
sendError(req, res, consumerErr, false);
|
|
376
|
+
return;
|
|
377
|
+
}
|
|
378
|
+
if (res.headersSent)
|
|
379
|
+
return;
|
|
380
|
+
if (!pending) {
|
|
381
|
+
res.status(404).json({ success: false, error: 'Mandate setup not found' });
|
|
382
|
+
return;
|
|
383
|
+
}
|
|
384
|
+
if (pending.mandateRef !== mandateRef) {
|
|
385
|
+
sendError(req, res, new Error('loadPending returned the pending state of another mandateRef'), false);
|
|
386
|
+
return;
|
|
387
|
+
}
|
|
388
|
+
let outcome;
|
|
389
|
+
try {
|
|
390
|
+
const body = req.body && typeof req.body === 'object' && !Buffer.isBuffer(req.body) ? req.body : undefined;
|
|
391
|
+
outcome = await checkout.confirmMandate(provider, pending, {
|
|
392
|
+
query: req.query,
|
|
393
|
+
body,
|
|
394
|
+
headers: req.headers,
|
|
395
|
+
context: {
|
|
396
|
+
method: req.method,
|
|
397
|
+
path: req.originalUrl || req.url,
|
|
398
|
+
rawBody: req.rawBody ?? (Buffer.isBuffer(req.body) ? req.body : undefined),
|
|
399
|
+
},
|
|
400
|
+
});
|
|
401
|
+
}
|
|
402
|
+
catch (err) {
|
|
403
|
+
sendError(req, res, err, true);
|
|
404
|
+
return;
|
|
405
|
+
}
|
|
406
|
+
try {
|
|
407
|
+
await mandates.onOutcome(outcome, req, res);
|
|
408
|
+
}
|
|
409
|
+
catch (consumerErr) {
|
|
410
|
+
sendError(req, res, consumerErr, false);
|
|
411
|
+
return;
|
|
412
|
+
}
|
|
413
|
+
if (!res.headersSent) {
|
|
414
|
+
res.status(200).json({ success: outcome.success });
|
|
415
|
+
}
|
|
416
|
+
};
|
|
417
|
+
router.get('/:provider/mandate/callback', callbackHandler);
|
|
418
|
+
router.post('/:provider/mandate/callback', callbackHandler);
|
|
254
419
|
}
|
|
255
420
|
// ---------------------------------------------------------------------------
|
|
256
421
|
// Helpers
|
|
257
422
|
// ---------------------------------------------------------------------------
|
|
258
|
-
function
|
|
259
|
-
|
|
260
|
-
return;
|
|
423
|
+
function sendErrorResponse(req, res, options, originalErr, isProvider = true) {
|
|
424
|
+
let err = originalErr;
|
|
261
425
|
const isListenerError = err instanceof checkout_event_bus_1.CheckoutListenerError;
|
|
262
426
|
if (err instanceof checkout_event_bus_1.CheckoutListenerError && err.cause instanceof errors_1.CheckoutError) {
|
|
263
427
|
// A listener that throws a CheckoutError keeps its status mapping
|
|
264
428
|
err = err.cause;
|
|
265
429
|
}
|
|
266
430
|
if (err instanceof errors_1.CheckoutError) {
|
|
431
|
+
if (res.headersSent)
|
|
432
|
+
return;
|
|
267
433
|
const statusMap = {
|
|
268
434
|
PROVIDER_NOT_FOUND: 404,
|
|
269
435
|
WEBHOOK_NOT_SUPPORTED: 422,
|
|
270
436
|
REDIRECT_NOT_SUPPORTED: 422,
|
|
437
|
+
MANDATES_NOT_SUPPORTED: 422,
|
|
271
438
|
};
|
|
272
439
|
const status = statusMap[err.code] ?? 400;
|
|
273
440
|
res.status(status).json({ success: false, error: err.message, code: err.code });
|
|
441
|
+
return;
|
|
274
442
|
}
|
|
275
|
-
|
|
276
|
-
|
|
443
|
+
// Unexpected error (500): report it to the app, never to the client unless asked to
|
|
444
|
+
try {
|
|
445
|
+
if (options.onError) {
|
|
446
|
+
options.onError(originalErr, req);
|
|
447
|
+
}
|
|
448
|
+
else {
|
|
449
|
+
console.error('[awesome-node-checkout]', originalErr);
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
catch {
|
|
453
|
+
// A throwing onError must not prevent the response
|
|
454
|
+
}
|
|
455
|
+
if (res.headersSent)
|
|
456
|
+
return;
|
|
457
|
+
let message = 'Internal server error';
|
|
458
|
+
if (options.exposeErrorMessages === true) {
|
|
459
|
+
message = err instanceof Error ? err.message : String(err ?? 'Internal server error');
|
|
277
460
|
if (!isListenerError && isProvider && (err instanceof SyntaxError || /JSON|Unexpected token/i.test(message))) {
|
|
278
461
|
message = 'Invalid provider response';
|
|
279
462
|
}
|
|
280
|
-
res.status(500).json({ success: false, error: message });
|
|
281
463
|
}
|
|
464
|
+
res.status(500).json({ success: false, error: message });
|
|
282
465
|
}
|
|
283
466
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/express/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/express/index.ts"],"names":[],"mappings":";;AAgMA,oCAgBC;AAwCD,oDAgQC;AAxfD,qCAAoE;AAEpE,gDAAoD;AAGpD,wEAAwE;AACxE,6CAAuE;AACvE,8DAMoC;AA2KpC,MAAM,aAAa,GAAG,CAAC,qBAAqB,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,CAAU,CAAC;AAChG,MAAM,qBAAqB,GAAG,CAAC,WAAW,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;AAEnE;;;;GAIG;AACH,SAAgB,YAAY,CAAC,OAAe,EAAE,WAAkC;IAC9E,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACvD,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;QAClC,MAAM,eAAe,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;YAC5C,CAAC,CAAC,OAAO;YACT,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACvC,IAAI,WAAW,CAAC,MAAM,KAAK,eAAe,CAAC,MAAM,EAAE,CAAC;YAClD,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACzC,IAAI,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACrD,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;YACnC,CAAC;YACD,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,SAAgB,oBAAoB,CAClC,QAA8B,EAC9B,UAAkC,EAAE;IAEpC,IAAI,CAAC,OAAO,CAAC,mBAAmB,IAAI,OAAO,CAAC,yBAAyB,KAAK,IAAI,EAAE,CAAC;QAC/E,MAAM,IAAI,sBAAa,CACrB,uGAAuG,EACvG,wBAAwB,CACzB,CAAC;IACJ,CAAC;IACD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAClC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAClC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAQ,QAAkD,EAAE,CAAC,IAAI,CAAC,KAAK,UAAU,CAC5F,CAAC;QACF,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,sBAAa,CACrB,2CAA2C,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EACtG,wBAAwB,CACzB,CAAC;QACJ,CAAC;IACH,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC;QACjC,OAAO,CAAC,IAAI,CAAC,uFAAuF,CAAC,CAAC;IACxG,CAAC;IAED,MAAM,MAAM,GAAG,IAAA,gBAAM,GAAE,CAAC;IACxB,MAAM,SAAS,GAAG,CAAC,GAAY,EAAE,GAAa,EAAE,GAAY,EAAE,UAAU,GAAG,IAAI,EAAQ,EAAE,CACvF,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;IAExD,mEAAmE;IACnE,IAAI,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;QAC/B,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC;QAC9C,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;YAC5B,IAAI,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,WAAW,CAAC;gBAAE,OAAO,IAAI,EAAE,CAAC;YACvD,2FAA2F;YAC3F,4FAA4F;YAC5F,IAAI,QAAQ,IAAI,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,qBAAqB,CAAC,CAAC;gBAAE,OAAO,IAAI,EAAE,CAAC;YAC/E,mCAAmC;YACnC,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAW,CAAC;YACrC,MAAM,GAAG,GAAG,CAAC,CAAS,EAAQ,EAAE;gBAC9B,IAAI,CAAC,IAAI,QAAQ,CAAC,MAAM;oBAAE,OAAO,IAAI,EAAE,CAAC;gBACxC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,GAAa,EAAE,EAAE;oBACtC,wFAAwF;oBACxF,yEAAyE;oBACzE,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,OAAO;wBAAE,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBAC/C,IAAI,CAAC,GAAG,CAAC,CAAC;gBACZ,CAAC,CAAC,CAAC;YACL,CAAC,CAAC;YACF,GAAG,CAAC,CAAC,CAAC,CAAC;QACT,CAAC,CAAC,CAAC;IACL,CAAC;IAED,6EAA6E;IAC7E,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;QAC9D,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC7C,IAAI,cAA8B,CAAC;YACnC,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC;gBAChC,IAAI,SAA4C,CAAC;gBACjD,IAAI,CAAC;oBACH,SAAS,GAAG,MAAM,OAAO,CAAC,mBAAmB,CAAC,GAAG,EAAE;wBACjD,QAAQ;wBACR,GAAG;qBACJ,CAAC,CAAC;gBACL,CAAC;gBAAC,OAAO,WAAW,EAAE,CAAC;oBACrB,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;oBACxC,OAAO;gBACT,CAAC;gBAED,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;oBACpB,OAAO;gBACT,CAAC;gBAED,IACE,CAAC,SAAS;oBACV,OAAO,SAAS,KAAK,QAAQ;oBAC7B,OAAO,SAAS,CAAC,MAAM,KAAK,QAAQ;oBACpC,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC;oBAClC,SAAS,CAAC,MAAM,IAAI,CAAC;oBACrB,OAAO,SAAS,CAAC,QAAQ,KAAK,QAAQ;oBACtC,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE;oBAChC,OAAO,SAAS,CAAC,SAAS,KAAK,QAAQ;oBACvC,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE;oBACjC,OAAO,SAAS,CAAC,SAAS,KAAK,QAAQ;oBACvC,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,EACjC,CAAC;oBACD,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;wBAC1B,OAAO,EAAE,KAAK;wBACd,IAAI,EAAE,yBAAyB;wBAC/B,KAAK,EACH,oJAAoJ;qBACvJ,CAAC,CAAC;gBACL,CAAC;gBACD,cAAc,GAAG,SAAS,CAAC;YAC7B,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;gBACtB,MAAM,MAAM,GAAG,IAAI,EAAE,MAAM,CAAC;gBAC5B,MAAM,QAAQ,GAAG,IAAI,EAAE,QAAQ,CAAC;gBAChC,IACE,OAAO,MAAM,KAAK,QAAQ;oBAC1B,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;oBACxB,MAAM,IAAI,CAAC;oBACX,OAAO,QAAQ,KAAK,QAAQ;oBAC5B,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,EACtB,CAAC;oBACD,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;wBAC1B,OAAO,EAAE,KAAK;wBACd,KAAK,EAAE,oFAAoF;qBAC5F,CAAC,CAAC;gBACL,CAAC;gBACD,cAAc,GAAG,IAAI,CAAC;YACxB,CAAC;YACD,wFAAwF;YACxF,gBAAgB;YAChB,IAAI,CAAC;gBACH,IAAA,oBAAY,EAAC,cAAc,CAAC,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;YAC/D,CAAC;YAAC,OAAO,SAAS,EAAE,CAAC;gBACnB,IAAI,CAAC,IAAA,4BAAoB,EAAC,SAAS,CAAC;oBAAE,MAAM,SAAS,CAAC;gBACtD,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC;YACpG,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,aAAa,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;YACtE,MAAM,EAAE,GAAG,EAAE,GAAG,UAAU,EAAE,GAAG,MAAM,CAAC;YACtC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QACjC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,6EAA6E;IAC7E,MAAM,eAAe,GAAqB,EAAE,CAAC;IAC7C,IAAI,OAAO,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;QACxC,eAAe,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACtD,CAAC;IACD,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE,GAAG,eAAe,EAAE,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;QAC1F,IAAI,CAAC;YACH,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,IAAyC,CAAC;YAC1E,IAAI,OAAO,CAAC,OAAO,EAAE,eAAe,EAAE,CAAC;gBACrC,IAAI,CAAC;oBACH,MAAM,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;gBACxD,CAAC;gBAAC,OAAO,WAAW,EAAE,CAAC;oBACrB,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;oBACxC,OAAO;gBACT,CAAC;YACH,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;YAC3F,MAAM,EAAE,GAAG,EAAE,GAAG,UAAU,EAAE,GAAG,MAAM,CAAC;YACtC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QACjC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,6EAA6E;IAC7E,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,MAAM,cAAc,GAAqB,EAAE,CAAC;QAC5C,IAAI,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;YACtC,cAAc,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACpD,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,mBAAmB,EAAE,GAAG,cAAc,EAAE,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;YACxF,IAAI,CAAC;gBACH,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,IAA8C,CAAC;gBACjF,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;gBAC5F,MAAM,EAAE,GAAG,EAAE,GAAG,UAAU,EAAE,GAAG,MAAM,CAAC;gBACtC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC1D,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;YACjC,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,6EAA6E;IAC7E,MAAM,cAAc,GAAG,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;QAC3D,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,aAAa,CACzC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,EAC3B,GAAG,CAAC,IAAI,EACR,GAAG,CAAC,OAAiC,EACrC,GAAG,CAAC,KAA+B,EACnC;gBACE,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,IAAI,EAAE,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,GAAG;gBAChC,OAAO,EAAG,GAAW,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;aACpF,CACF,CAAC;YACF,iEAAiE;YACjE,MAAM,EAAE,GAAG,EAAE,GAAG,UAAU,EAAE,GAAG,MAAM,CAAC;YACtC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QACjC,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,CAAC,GAAG,CAAC,oBAAoB,EAAE,cAAc,CAAC,CAAC;IACjD,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE,cAAc,CAAC,CAAC;IAClD,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE,cAAc,CAAC,CAAC;IAElD,6EAA6E;IAC7E,wEAAwE;IACxE,0BAA0B;IAC1B,MAAM,CAAC,GAAG,CAAC,qBAAqB,EAAE,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;QACtE,IAAI,MAAqB,CAAC;QAC1B,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,QAAQ,CAAC,cAAc,CACpC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,EAC3B,GAAG,CAAC,KAA+B,CACpC,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;YAC/B,OAAO;QACT,CAAC;QACD,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACrB,IAAI,SAAiB,CAAC;YACtB,IAAI,CAAC;gBACH,SAAS,GAAG,MAAM,CAAC,OAAO;oBACxB,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC;oBACzC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YAC9C,CAAC;YAAC,OAAO,WAAW,EAAE,CAAC;gBACrB,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;gBACxC,OAAO;YACT,CAAC;YACD,OAAO,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QACtC,CAAC;QACD,MAAM,EAAE,GAAG,EAAE,GAAG,UAAU,EAAE,GAAG,MAAM,CAAC;QACtC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,8EAA8E;IAC9E,6FAA6F;IAC7F,IAAI,QAAQ,EAAE,CAAC;QACb,kBAAkB,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;IAC5D,CAAC;IAED,6EAA6E;IAC7E,iFAAiF;IACjF,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;QACzD,MAAM,eAAe,GAAqB,EAAE,CAAC;QAC7C,IAAI,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;YACvC,eAAe,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACtD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CACV,2IAA2I,CAC5I,CAAC;QACJ,CAAC;QACD,MAAM,CAAC,GAAG,CAAC,gBAAgB,EAAE,GAAG,eAAe,EAAE,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;YACrF,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,iBAAiB,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;gBACpG,MAAM,EAAE,GAAG,EAAE,GAAG,UAAU,EAAE,GAAG,MAAM,CAAC;gBACtC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC1D,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;YACjC,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAQD,SAAS,kBAAkB,CACzB,MAAc,EACd,QAA8B,EAC9B,QAA+B,EAC/B,SAAoB;IAEpB,+EAA+E;IAC/E,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE,GAAG,CAAC,QAAQ,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;QACtG,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC7C,IAAI,YAAoD,CAAC;QACzD,IAAI,CAAC;YACH,YAAY,GAAG,MAAM,QAAQ,CAAC,mBAAmB,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;QAC5E,CAAC;QAAC,OAAO,WAAW,EAAE,CAAC;YACrB,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;YACxC,OAAO;QACT,CAAC;QACD,IAAI,GAAG,CAAC,WAAW;YAAE,OAAO;QAC5B,IAAI,CAAC,YAAY,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE,CAAC;YACtD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBACnB,OAAO,EAAE,KAAK;gBACd,IAAI,EAAE,yBAAyB;gBAC/B,KAAK,EAAE,yDAAyD;aACjE,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,IAAI,KAAwB,CAAC;QAC7B,IAAI,CAAC;YACH,KAAK,GAAG,MAAM,QAAQ,CAAC,aAAa,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QAC/D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;YAC/B,OAAO;QACT,CAAC;QACD,IAAI,CAAC;YACH,oFAAoF;YACpF,MAAM,QAAQ,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACvC,CAAC;QAAC,OAAO,WAAW,EAAE,CAAC;YACrB,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;YACxC,OAAO;QACT,CAAC;QACD,IAAI,GAAG,CAAC,WAAW;YAAE,OAAO;QAC5B,sDAAsD;QACtD,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAClB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;QAC1E,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,uFAAuF;IACvF,MAAM,CAAC,GAAG,CAAC,oBAAoB,EAAE,CAAC,IAAa,EAAE,GAAa,EAAE,EAAE;QAChE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC,CAAC;IAC7F,CAAC,CAAC,CAAC;IAEH,+EAA+E;IAC/E,iGAAiG;IACjG,yFAAyF;IACzF,8FAA8F;IAC9F,yFAAyF;IACzF,qDAAqD;IACrD,MAAM,eAAe,GAAG,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;QAC5D,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC7C,MAAM,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC;QACzC,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,CAAC,mCAAmB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5E,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,yBAAyB,EAAE,KAAK,EAAE,qBAAqB,EAAE,CAAC,CAAC;YACxG,OAAO;QACT,CAAC;QAED,IAAI,OAAmC,CAAC;QACxC,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,QAAQ,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC;QACtE,CAAC;QAAC,OAAO,WAAW,EAAE,CAAC;YACrB,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;YACxC,OAAO;QACT,CAAC;QACD,IAAI,GAAG,CAAC,WAAW;YAAE,OAAO;QAC5B,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,yBAAyB,EAAE,CAAC,CAAC;YAC3E,OAAO;QACT,CAAC;QACD,IAAI,OAAO,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;YACtC,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,CAAC,8DAA8D,CAAC,EAAE,KAAK,CAAC,CAAC;YACtG,OAAO;QACT,CAAC;QAED,IAAI,OAA4B,CAAC;QACjC,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;YAC3G,OAAO,GAAG,MAAM,QAAQ,CAAC,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE;gBACzD,KAAK,EAAE,GAAG,CAAC,KAA+B;gBAC1C,IAAI;gBACJ,OAAO,EAAE,GAAG,CAAC,OAAiC;gBAC9C,OAAO,EAAE;oBACP,MAAM,EAAE,GAAG,CAAC,MAAM;oBAClB,IAAI,EAAE,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,GAAG;oBAChC,OAAO,EAAG,GAAW,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;iBACpF;aACF,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;YAC/B,OAAO;QACT,CAAC;QACD,IAAI,CAAC;YACH,MAAM,QAAQ,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QAC9C,CAAC;QAAC,OAAO,WAAW,EAAE,CAAC;YACrB,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;YACxC,OAAO;QACT,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;YACrB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QACrD,CAAC;IACH,CAAC,CAAC;IACF,MAAM,CAAC,GAAG,CAAC,6BAA6B,EAAE,eAAe,CAAC,CAAC;IAC3D,MAAM,CAAC,IAAI,CAAC,6BAA6B,EAAE,eAAe,CAAC,CAAC;AAC9D,CAAC;AAED,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,SAAS,iBAAiB,CACxB,GAAY,EACZ,GAAa,EACb,OAA+B,EAC/B,WAAoB,EACpB,UAAU,GAAG,IAAI;IAEjB,IAAI,GAAG,GAAG,WAAW,CAAC;IACtB,MAAM,eAAe,GAAG,GAAG,YAAY,0CAAqB,CAAC;IAC7D,IAAI,GAAG,YAAY,0CAAqB,IAAI,GAAG,CAAC,KAAK,YAAY,sBAAa,EAAE,CAAC;QAC/E,kEAAkE;QAClE,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC;IAClB,CAAC;IACD,IAAI,GAAG,YAAY,sBAAa,EAAE,CAAC;QACjC,IAAI,GAAG,CAAC,WAAW;YAAE,OAAO;QAC5B,MAAM,SAAS,GAA2B;YACxC,kBAAkB,EAAE,GAAG;YACvB,qBAAqB,EAAE,GAAG;YAC1B,sBAAsB,EAAE,GAAG;YAC3B,sBAAsB,EAAE,GAAG;SAC5B,CAAC;QACF,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC;QAC1C,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QAChF,OAAO;IACT,CAAC;IAED,oFAAoF;IACpF,IAAI,CAAC;QACH,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;QACpC,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,WAAW,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,mDAAmD;IACrD,CAAC;IACD,IAAI,GAAG,CAAC,WAAW;QAAE,OAAO;IAC5B,IAAI,OAAO,GAAG,uBAAuB,CAAC;IACtC,IAAI,OAAO,CAAC,mBAAmB,KAAK,IAAI,EAAE,CAAC;QACzC,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,IAAI,uBAAuB,CAAC,CAAC;QACtF,IAAI,CAAC,eAAe,IAAI,UAAU,IAAI,CAAC,GAAG,YAAY,WAAW,IAAI,wBAAwB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;YAC7G,OAAO,GAAG,2BAA2B,CAAC;QACxC,CAAC;IACH,CAAC;IACD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;AAC3D,CAAC"}
|