@deenruv/payments-plugin 1.0.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.
Files changed (102) hide show
  1. package/LICENSE +23 -0
  2. package/README.md +157 -0
  3. package/package/braintree/braintree-common.d.ts +11 -0
  4. package/package/braintree/braintree-common.js +79 -0
  5. package/package/braintree/braintree-common.js.map +1 -0
  6. package/package/braintree/braintree.handler.d.ts +28 -0
  7. package/package/braintree/braintree.handler.js +147 -0
  8. package/package/braintree/braintree.handler.js.map +1 -0
  9. package/package/braintree/braintree.plugin.d.ts +238 -0
  10. package/package/braintree/braintree.plugin.js +294 -0
  11. package/package/braintree/braintree.plugin.js.map +1 -0
  12. package/package/braintree/braintree.resolver.d.ts +14 -0
  13. package/package/braintree/braintree.resolver.js +109 -0
  14. package/package/braintree/braintree.resolver.js.map +1 -0
  15. package/package/braintree/constants.d.ts +2 -0
  16. package/package/braintree/constants.js +6 -0
  17. package/package/braintree/constants.js.map +1 -0
  18. package/package/braintree/index.d.ts +5 -0
  19. package/package/braintree/index.js +22 -0
  20. package/package/braintree/index.js.map +1 -0
  21. package/package/braintree/types.d.ts +94 -0
  22. package/package/braintree/types.js +4 -0
  23. package/package/braintree/types.js.map +1 -0
  24. package/package/index.d.ts +4 -0
  25. package/package/index.js +8 -0
  26. package/package/index.js.map +1 -0
  27. package/package/mollie/api-extensions.d.ts +2 -0
  28. package/package/mollie/api-extensions.js +88 -0
  29. package/package/mollie/api-extensions.js.map +1 -0
  30. package/package/mollie/constants.d.ts +2 -0
  31. package/package/mollie/constants.js +6 -0
  32. package/package/mollie/constants.js.map +1 -0
  33. package/package/mollie/custom-fields.d.ts +7 -0
  34. package/package/mollie/custom-fields.js +12 -0
  35. package/package/mollie/custom-fields.js.map +1 -0
  36. package/package/mollie/extended-mollie-client.d.ts +51 -0
  37. package/package/mollie/extended-mollie-client.js +39 -0
  38. package/package/mollie/extended-mollie-client.js.map +1 -0
  39. package/package/mollie/graphql/generated-shop-types.d.ts +3212 -0
  40. package/package/mollie/graphql/generated-shop-types.js +977 -0
  41. package/package/mollie/graphql/generated-shop-types.js.map +1 -0
  42. package/package/mollie/index.d.ts +3 -0
  43. package/package/mollie/index.js +23 -0
  44. package/package/mollie/index.js.map +1 -0
  45. package/package/mollie/mollie.common-resolver.d.ts +9 -0
  46. package/package/mollie/mollie.common-resolver.js +55 -0
  47. package/package/mollie/mollie.common-resolver.js.map +1 -0
  48. package/package/mollie/mollie.controller.d.ts +10 -0
  49. package/package/mollie/mollie.controller.js +71 -0
  50. package/package/mollie/mollie.controller.js.map +1 -0
  51. package/package/mollie/mollie.handler.d.ts +36 -0
  52. package/package/mollie/mollie.handler.js +141 -0
  53. package/package/mollie/mollie.handler.js.map +1 -0
  54. package/package/mollie/mollie.helpers.d.ts +33 -0
  55. package/package/mollie/mollie.helpers.js +147 -0
  56. package/package/mollie/mollie.helpers.js.map +1 -0
  57. package/package/mollie/mollie.plugin.d.ts +176 -0
  58. package/package/mollie/mollie.plugin.js +167 -0
  59. package/package/mollie/mollie.plugin.js.map +1 -0
  60. package/package/mollie/mollie.service.d.ts +64 -0
  61. package/package/mollie/mollie.service.js +438 -0
  62. package/package/mollie/mollie.service.js.map +1 -0
  63. package/package/mollie/mollie.shop-resolver.d.ts +8 -0
  64. package/package/mollie/mollie.shop-resolver.js +40 -0
  65. package/package/mollie/mollie.shop-resolver.js.map +1 -0
  66. package/package/stripe/constants.d.ts +2 -0
  67. package/package/stripe/constants.js +6 -0
  68. package/package/stripe/constants.js.map +1 -0
  69. package/package/stripe/index.d.ts +1 -0
  70. package/package/stripe/index.js +6 -0
  71. package/package/stripe/index.js.map +1 -0
  72. package/package/stripe/metadata-sanitize.d.ts +13 -0
  73. package/package/stripe/metadata-sanitize.js +33 -0
  74. package/package/stripe/metadata-sanitize.js.map +1 -0
  75. package/package/stripe/raw-body.middleware.d.ts +6 -0
  76. package/package/stripe/raw-body.middleware.js +18 -0
  77. package/package/stripe/raw-body.middleware.js.map +1 -0
  78. package/package/stripe/stripe-client.d.ts +9 -0
  79. package/package/stripe/stripe-client.js +21 -0
  80. package/package/stripe/stripe-client.js.map +1 -0
  81. package/package/stripe/stripe-utils.d.ts +19 -0
  82. package/package/stripe/stripe-utils.js +40 -0
  83. package/package/stripe/stripe-utils.js.map +1 -0
  84. package/package/stripe/stripe.controller.d.ts +15 -0
  85. package/package/stripe/stripe.controller.js +135 -0
  86. package/package/stripe/stripe.controller.js.map +1 -0
  87. package/package/stripe/stripe.handler.d.ts +30 -0
  88. package/package/stripe/stripe.handler.js +103 -0
  89. package/package/stripe/stripe.handler.js.map +1 -0
  90. package/package/stripe/stripe.plugin.d.ts +158 -0
  91. package/package/stripe/stripe.plugin.js +218 -0
  92. package/package/stripe/stripe.plugin.js.map +1 -0
  93. package/package/stripe/stripe.resolver.d.ts +8 -0
  94. package/package/stripe/stripe.resolver.js +48 -0
  95. package/package/stripe/stripe.resolver.js.map +1 -0
  96. package/package/stripe/stripe.service.d.ts +28 -0
  97. package/package/stripe/stripe.service.js +149 -0
  98. package/package/stripe/stripe.service.js.map +1 -0
  99. package/package/stripe/types.d.ts +137 -0
  100. package/package/stripe/types.js +4 -0
  101. package/package/stripe/types.js.map +1 -0
  102. package/package.json +73 -0
@@ -0,0 +1,5 @@
1
+ export * from "./braintree.plugin";
2
+ export * from "./braintree.handler";
3
+ export * from "./braintree.resolver";
4
+ export * from "./braintree-common";
5
+ export * from "./types";
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./braintree.plugin"), exports);
18
+ __exportStar(require("./braintree.handler"), exports);
19
+ __exportStar(require("./braintree.resolver"), exports);
20
+ __exportStar(require("./braintree-common"), exports);
21
+ __exportStar(require("./types"), exports);
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/braintree/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,qDAAmC;AACnC,sDAAoC;AACpC,uDAAqC;AACrC,qDAAmC;AACnC,0CAAwB"}
@@ -0,0 +1,94 @@
1
+ import { PaymentMetadata } from "@deenruv/core";
2
+ import { ConfigArgValues } from "@deenruv/core/dist/common/configurable-operation";
3
+ import "@deenruv/core/dist/entity/custom-entity-fields";
4
+ import { Environment, Transaction } from "braintree";
5
+ import { braintreePaymentMethodHandler } from "./braintree.handler";
6
+ export type PaymentMethodArgsHash = ConfigArgValues<(typeof braintreePaymentMethodHandler)["args"]>;
7
+ declare module "@deenruv/core/dist/entity/custom-entity-fields" {
8
+ interface CustomCustomerFields {
9
+ braintreeCustomerId?: string;
10
+ }
11
+ }
12
+ /**
13
+ * @description
14
+ * Options for the Braintree plugin.
15
+ *
16
+ * @docsCategory core plugins/PaymentsPlugin
17
+ * @docsPage BraintreePlugin
18
+ */
19
+ export interface BraintreePluginOptions {
20
+ /**
21
+ * @description
22
+ * The Braintree environment being targeted, e.g. sandbox or production.
23
+ *
24
+ * @default Environment.Sandbox
25
+ */
26
+ environment?: Environment;
27
+ /**
28
+ * @description
29
+ * If set to `true`, a [Customer](https://developer.paypal.com/braintree/docs/guides/customers) object
30
+ * will be created in Braintree, which allows the secure storage ("vaulting") of previously-used payment methods.
31
+ * This is done by adding a custom field to the Customer entity to store the Braintree customer ID,
32
+ * so switching this on will require a database migration / synchronization.
33
+ *
34
+ * Since v1.8, it is possible to override vaulting on a per-payment basis by passing `includeCustomerId: false` to the
35
+ * `generateBraintreeClientToken` mutation.
36
+ *
37
+ * @default false
38
+ */
39
+ storeCustomersInBraintree?: boolean;
40
+ /**
41
+ * @description
42
+ * Allows you to configure exactly what information from the Braintree
43
+ * [Transaction object](https://developer.paypal.com/braintree/docs/reference/response/transaction#result-object) (which is returned by the
44
+ * `transaction.sale()` method of the SDK) should be persisted to the resulting Payment entity metadata.
45
+ *
46
+ * By default, the built-in extraction function will return a metadata object that looks like this:
47
+ *
48
+ * @example
49
+ * ```ts
50
+ * const metadata = {
51
+ * "status": "settling",
52
+ * "currencyIsoCode": "GBP",
53
+ * "merchantAccountId": "my_account_id",
54
+ * "cvvCheck": "Not Applicable",
55
+ * "avsPostCodeCheck": "Not Applicable",
56
+ * "avsStreetAddressCheck": "Not Applicable",
57
+ * "processorAuthorizationCode": null,
58
+ * "processorResponseText": "Approved",
59
+ * // for Paypal payments
60
+ * "paymentMethod": "paypal_account",
61
+ * "paypalData": {
62
+ * "payerEmail": "michael-buyer@paypalsandbox.com",
63
+ * "paymentId": "PAYID-MLCXYNI74301746XK8807043",
64
+ * "authorizationId": "3BU93594D85624939",
65
+ * "payerStatus": "VERIFIED",
66
+ * "sellerProtectionStatus": "ELIGIBLE",
67
+ * "transactionFeeAmount": "0.54"
68
+ * },
69
+ * // for credit card payments
70
+ * "paymentMethod": "credit_card",
71
+ * "cardData": {
72
+ * "cardType": "MasterCard",
73
+ * "last4": "5454",
74
+ * "expirationDate": "02/2023"
75
+ * }
76
+ * // publicly-available metadata that will be
77
+ * // readable from the Shop API
78
+ * "public": {
79
+ * "cardData": {
80
+ * "cardType": "MasterCard",
81
+ * "last4": "5454",
82
+ * "expirationDate": "02/2023"
83
+ * },
84
+ * "paypalData": {
85
+ * "authorizationId": "3BU93594D85624939",
86
+ * }
87
+ * }
88
+ * }
89
+ * ```
90
+ *
91
+ * @since 1.7.0
92
+ */
93
+ extractMetadata?: (transaction: Transaction) => PaymentMetadata;
94
+ }
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ require("@deenruv/core/dist/entity/custom-entity-fields");
4
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/braintree/types.ts"],"names":[],"mappings":";;AAEA,0DAAwD"}
@@ -0,0 +1,4 @@
1
+ /**
2
+ * This is a placeholder. Please import from one of the sub-packages, e.g `@deenruv/payments-plugin/package/braintree`
3
+ */
4
+ export declare const placeholder = "Deenruv Payments Plugin";
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.placeholder = void 0;
4
+ /**
5
+ * This is a placeholder. Please import from one of the sub-packages, e.g `@deenruv/payments-plugin/package/braintree`
6
+ */
7
+ exports.placeholder = "Deenruv Payments Plugin";
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACU,QAAA,WAAW,GAAG,yBAAyB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const shopApiExtensions: import("graphql").DocumentNode;
2
+ export declare const adminApiExtensions: import("graphql").DocumentNode;
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.adminApiExtensions = exports.shopApiExtensions = void 0;
4
+ const graphql_tag_1 = require("graphql-tag");
5
+ const commonSchemaExtensions = (0, graphql_tag_1.gql) `
6
+ input MolliePaymentIntentInput {
7
+ """
8
+ The code of the Deenruv payment method to use for the payment.
9
+ Must have Mollie as payment method handler.
10
+ Without this, the first method with Mollie as handler will be used.
11
+ """
12
+ paymentMethodCode: String
13
+ """
14
+ The redirect url to which the customer will be redirected after the payment is completed.
15
+ The configured fallback redirect will be used if this is not provided.
16
+ """
17
+ redirectUrl: String
18
+ """
19
+ Optional preselected Mollie payment method. When this is passed
20
+ the payment selection step will be skipped.
21
+ """
22
+ molliePaymentMethodCode: String
23
+ """
24
+ Use this to create a payment intent for a specific order. This allows you to create intents for
25
+ orders that are not active orders.
26
+ """
27
+ orderId: String
28
+ }
29
+
30
+ type MolliePaymentIntent {
31
+ url: String!
32
+ }
33
+
34
+ type MolliePaymentIntentError implements ErrorResult {
35
+ errorCode: ErrorCode!
36
+ message: String!
37
+ }
38
+
39
+ union MolliePaymentIntentResult =
40
+ | MolliePaymentIntent
41
+ | MolliePaymentIntentError
42
+
43
+ extend type Mutation {
44
+ createMolliePaymentIntent(
45
+ input: MolliePaymentIntentInput!
46
+ ): MolliePaymentIntentResult!
47
+ }
48
+ `;
49
+ exports.shopApiExtensions = (0, graphql_tag_1.gql) `
50
+ ${commonSchemaExtensions}
51
+
52
+ type MollieAmount {
53
+ value: String
54
+ currency: String
55
+ }
56
+ type MolliePaymentMethodImages {
57
+ size1x: String
58
+ size2x: String
59
+ svg: String
60
+ }
61
+ type MolliePaymentMethod {
62
+ id: ID!
63
+ code: String!
64
+ description: String
65
+ minimumAmount: MollieAmount
66
+ maximumAmount: MollieAmount
67
+ image: MolliePaymentMethodImages
68
+ status: String
69
+ }
70
+
71
+ input MolliePaymentMethodsInput {
72
+ paymentMethodCode: String!
73
+ }
74
+
75
+ extend type Query {
76
+ molliePaymentMethods(
77
+ input: MolliePaymentMethodsInput!
78
+ ): [MolliePaymentMethod!]!
79
+ }
80
+ `;
81
+ exports.adminApiExtensions = (0, graphql_tag_1.gql) `
82
+ ${commonSchemaExtensions}
83
+
84
+ extend enum ErrorCode {
85
+ ORDER_PAYMENT_STATE_ERROR
86
+ }
87
+ `;
88
+ //# sourceMappingURL=api-extensions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-extensions.js","sourceRoot":"","sources":["../../src/mollie/api-extensions.ts"],"names":[],"mappings":";;;AAAA,6CAAkC;AAElC,MAAM,sBAAsB,GAAG,IAAA,iBAAG,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2CjC,CAAC;AAEW,QAAA,iBAAiB,GAAG,IAAA,iBAAG,EAAA;IAChC,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8BzB,CAAC;AAEW,QAAA,kBAAkB,GAAG,IAAA,iBAAG,EAAA;IACjC,sBAAsB;;;;;CAKzB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const loggerCtx = "MolliePlugin";
2
+ export declare const PLUGIN_INIT_OPTIONS: unique symbol;
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PLUGIN_INIT_OPTIONS = exports.loggerCtx = void 0;
4
+ exports.loggerCtx = "MolliePlugin";
5
+ exports.PLUGIN_INIT_OPTIONS = Symbol("PLUGIN_INIT_OPTIONS");
6
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/mollie/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,SAAS,GAAG,cAAc,CAAC;AAC3B,QAAA,mBAAmB,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { CustomFieldConfig, Order, CustomOrderFields } from "@deenruv/core";
2
+ export interface OrderWithMollieReference extends Order {
3
+ customFields: CustomOrderFields & {
4
+ mollieOrderId?: string;
5
+ };
6
+ }
7
+ export declare const orderCustomFields: CustomFieldConfig[];
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.orderCustomFields = void 0;
4
+ exports.orderCustomFields = [
5
+ {
6
+ name: "mollieOrderId",
7
+ type: "string",
8
+ internal: true,
9
+ nullable: true,
10
+ },
11
+ ];
12
+ //# sourceMappingURL=custom-fields.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-fields.js","sourceRoot":"","sources":["../../src/mollie/custom-fields.ts"],"names":[],"mappings":";;;AAQa,QAAA,iBAAiB,GAAwB;IACpD;QACE,IAAI,EAAE,eAAe;QACrB,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,IAAI;KACf;CACF,CAAC"}
@@ -0,0 +1,51 @@
1
+ import { MollieClient, Order as MollieOrder } from "@mollie/api-client";
2
+ import { Amount } from "@mollie/api-client/dist/types/src/data/global";
3
+ /**
4
+ * Create an extended Mollie client that also supports the manage order lines endpoint, because
5
+ * the NodeJS client doesn't support it yet.
6
+ *
7
+ * See https://docs.mollie.com/reference/v2/orders-api/manage-order-lines
8
+ * FIXME: Remove this when the NodeJS client supports it.
9
+ */
10
+ export declare function createExtendedMollieClient(options: {
11
+ apiKey: string;
12
+ }): ExtendedMollieClient;
13
+ export interface ExtendedMollieClient extends MollieClient {
14
+ /**
15
+ * Update all order lines in 1 request.
16
+ */
17
+ manageOrderLines(orderId: string, input: ManageOrderLineInput): Promise<MollieOrder>;
18
+ }
19
+ interface CancelOperation {
20
+ operation: "cancel";
21
+ data: {
22
+ id: string;
23
+ };
24
+ }
25
+ interface UpdateOperation {
26
+ operation: "update";
27
+ data: {
28
+ id: string;
29
+ name?: string;
30
+ quantity?: number;
31
+ unitPrice?: Amount;
32
+ totalAmount?: Amount;
33
+ vatRate?: string;
34
+ vatAmount?: Amount;
35
+ };
36
+ }
37
+ interface AddOperation {
38
+ operation: "add";
39
+ data: {
40
+ name: string;
41
+ quantity: number;
42
+ unitPrice: Amount;
43
+ totalAmount: Amount;
44
+ vatRate: string;
45
+ vatAmount: Amount;
46
+ };
47
+ }
48
+ export interface ManageOrderLineInput {
49
+ operations: Array<CancelOperation | AddOperation | UpdateOperation>;
50
+ }
51
+ export {};
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.createExtendedMollieClient = void 0;
7
+ const api_client_1 = __importDefault(require("@mollie/api-client"));
8
+ // We depend on the axios dependency from '@mollie/api-client'
9
+ const axios_1 = __importDefault(require("axios"));
10
+ /**
11
+ * Create an extended Mollie client that also supports the manage order lines endpoint, because
12
+ * the NodeJS client doesn't support it yet.
13
+ *
14
+ * See https://docs.mollie.com/reference/v2/orders-api/manage-order-lines
15
+ * FIXME: Remove this when the NodeJS client supports it.
16
+ */
17
+ function createExtendedMollieClient(options) {
18
+ const client = (0, api_client_1.default)(options);
19
+ // Add our custom method
20
+ client.manageOrderLines = async (orderId, input) => {
21
+ const instance = axios_1.default.create({
22
+ baseURL: `https://api.mollie.com`,
23
+ timeout: 5000,
24
+ headers: {
25
+ "Content-Type": "application/json",
26
+ Authorization: `Bearer ${options.apiKey}`,
27
+ },
28
+ validateStatus: () => true, // We handle errors ourselves, for better error messages
29
+ });
30
+ const { status, data } = await instance.patch(`/v2/orders/${orderId}/lines`, input);
31
+ if (status < 200 || status > 300) {
32
+ throw Error(JSON.stringify(data, null, 2));
33
+ }
34
+ return data;
35
+ };
36
+ return client;
37
+ }
38
+ exports.createExtendedMollieClient = createExtendedMollieClient;
39
+ //# sourceMappingURL=extended-mollie-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extended-mollie-client.js","sourceRoot":"","sources":["../../src/mollie/extended-mollie-client.ts"],"names":[],"mappings":";;;;;;AAAA,oEAG4B;AAE5B,8DAA8D;AAC9D,kDAA6C;AAG7C;;;;;;GAMG;AACH,SAAgB,0BAA0B,CAAC,OAE1C;IACC,MAAM,MAAM,GAAG,IAAA,oBAAkB,EAAC,OAAO,CAAyB,CAAC;IACnE,wBAAwB;IACxB,MAAM,CAAC,gBAAgB,GAAG,KAAK,EAC7B,OAAe,EACf,KAA2B,EACL,EAAE;QACxB,MAAM,QAAQ,GAAG,eAAK,CAAC,MAAM,CAAC;YAC5B,OAAO,EAAE,wBAAwB;YACjC,OAAO,EAAE,IAAI;YACb,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,UAAU,OAAO,CAAC,MAAM,EAAE;aAC1C;YACD,cAAc,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,wDAAwD;SACrF,CAAC,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,QAAQ,CAAC,KAAK,CAC3C,cAAc,OAAO,QAAQ,EAC7B,KAAK,CACN,CAAC;QACF,IAAI,MAAM,GAAG,GAAG,IAAI,MAAM,GAAG,GAAG,EAAE;YAChC,MAAM,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;SAC5C;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IACF,OAAO,MAAM,CAAC;AAChB,CAAC;AA5BD,gEA4BC"}