@fantastic.dev/better-stripe 0.23.0 → 0.23.2

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 (87) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +1 -1
  3. package/dist/client/connect/payoutAdoption.d.ts.map +1 -1
  4. package/dist/client/connect/payoutAdoption.js +4 -3
  5. package/dist/client/connect/payoutAdoption.js.map +1 -1
  6. package/dist/client/connect/payoutAdoptionTestHelpers.d.ts +2659 -0
  7. package/dist/client/connect/payoutAdoptionTestHelpers.d.ts.map +1 -0
  8. package/dist/client/connect/payoutAdoptionTestHelpers.js +231 -0
  9. package/dist/client/connect/payoutAdoptionTestHelpers.js.map +1 -0
  10. package/dist/client/connect/payoutSync.d.ts +32 -0
  11. package/dist/client/connect/payoutSync.d.ts.map +1 -0
  12. package/dist/client/connect/payoutSync.js +48 -0
  13. package/dist/client/connect/payoutSync.js.map +1 -0
  14. package/dist/client/connect/payoutSyncTestHelpers.d.ts +1263 -0
  15. package/dist/client/connect/payoutSyncTestHelpers.d.ts.map +1 -0
  16. package/dist/client/connect/payoutSyncTestHelpers.js +62 -0
  17. package/dist/client/connect/payoutSyncTestHelpers.js.map +1 -0
  18. package/dist/client/connect/payoutSyncValidation.d.ts +16 -0
  19. package/dist/client/connect/payoutSyncValidation.d.ts.map +1 -0
  20. package/dist/client/connect/payoutSyncValidation.js +54 -0
  21. package/dist/client/connect/payoutSyncValidation.js.map +1 -0
  22. package/dist/client/index.d.ts +26 -9
  23. package/dist/client/index.d.ts.map +1 -1
  24. package/dist/client/index.js +3 -5
  25. package/dist/client/index.js.map +1 -1
  26. package/dist/client/readContracts.d.ts +8 -0
  27. package/dist/client/readContracts.d.ts.map +1 -1
  28. package/dist/client/readContracts.js +7 -0
  29. package/dist/client/readContracts.js.map +1 -1
  30. package/dist/component/_generated/component.d.ts +69 -0
  31. package/dist/component/_generated/component.d.ts.map +1 -1
  32. package/dist/component/connect/mutations.d.ts.map +1 -1
  33. package/dist/component/connect/mutations.js +4 -27
  34. package/dist/component/connect/mutations.js.map +1 -1
  35. package/dist/component/connect/payoutWrites.d.ts +21 -0
  36. package/dist/component/connect/payoutWrites.d.ts.map +1 -0
  37. package/dist/component/connect/payoutWrites.js +19 -0
  38. package/dist/component/connect/payoutWrites.js.map +1 -0
  39. package/dist/component/earnings/triggers.d.ts +44 -0
  40. package/dist/component/earnings/triggers.d.ts.map +1 -1
  41. package/dist/component/payoutSync/helpers.d.ts +44 -0
  42. package/dist/component/payoutSync/helpers.d.ts.map +1 -0
  43. package/dist/component/payoutSync/helpers.js +60 -0
  44. package/dist/component/payoutSync/helpers.js.map +1 -0
  45. package/dist/component/payoutSync/mutations.d.ts +51 -0
  46. package/dist/component/payoutSync/mutations.d.ts.map +1 -0
  47. package/dist/component/payoutSync/mutations.js +88 -0
  48. package/dist/component/payoutSync/mutations.js.map +1 -0
  49. package/dist/component/payoutSync/queries.d.ts +16 -0
  50. package/dist/component/payoutSync/queries.d.ts.map +1 -0
  51. package/dist/component/payoutSync/queries.js +11 -0
  52. package/dist/component/payoutSync/queries.js.map +1 -0
  53. package/dist/component/payoutSync/schema.d.ts +46 -0
  54. package/dist/component/payoutSync/schema.d.ts.map +1 -0
  55. package/dist/component/payoutSync/schema.js +22 -0
  56. package/dist/component/payoutSync/schema.js.map +1 -0
  57. package/dist/component/payoutSync/validators.d.ts +137 -0
  58. package/dist/component/payoutSync/validators.d.ts.map +1 -0
  59. package/dist/component/payoutSync/validators.js +19 -0
  60. package/dist/component/payoutSync/validators.js.map +1 -0
  61. package/dist/component/schema.d.ts +21 -0
  62. package/dist/component/schema.js +2 -0
  63. package/dist/component/schema.js.map +1 -1
  64. package/docs/read-contracts.md +40 -5
  65. package/docs/settlement.md +6 -0
  66. package/package.json +1 -1
  67. package/src/client/connect/payoutAdoption.test.ts +6 -241
  68. package/src/client/connect/payoutAdoption.ts +4 -3
  69. package/src/client/connect/payoutAdoptionTestHelpers.ts +253 -0
  70. package/src/client/connect/payoutReturnedAdoption.test.ts +157 -0
  71. package/src/client/connect/payoutSync.test.ts +313 -0
  72. package/src/client/connect/payoutSync.ts +93 -0
  73. package/src/client/connect/payoutSyncTestHelpers.ts +82 -0
  74. package/src/client/connect/payoutSyncValidation.ts +74 -0
  75. package/src/client/index.ts +14 -11
  76. package/src/client/readContracts.ts +12 -0
  77. package/src/component/_generated/api.ts +10 -0
  78. package/src/component/_generated/component.ts +82 -0
  79. package/src/component/connect/mutations.ts +4 -30
  80. package/src/component/connect/payoutWrites.ts +25 -0
  81. package/src/component/payout-sync.test.ts +117 -0
  82. package/src/component/payoutSync/helpers.ts +86 -0
  83. package/src/component/payoutSync/mutations.ts +102 -0
  84. package/src/component/payoutSync/queries.ts +10 -0
  85. package/src/component/payoutSync/schema.ts +25 -0
  86. package/src/component/payoutSync/validators.ts +21 -0
  87. package/src/component/schema.ts +2 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payoutAdoptionTestHelpers.d.ts","sourceRoot":"","sources":["../../../src/client/connect/payoutAdoptionTestHelpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,231 @@
1
+ // @vitest-environment edge-runtime
2
+ import { convexTest } from "convex-test";
3
+ import { makeFunctionReference } from "convex/server";
4
+ import { vi } from "vitest";
5
+ import schema from "../../component/schema.js";
6
+ import { releaseRecipientPayout } from "./payoutExecution.js";
7
+ import { adoptRecipientPayouts } from "./payoutAdoption.js";
8
+ const modules = import.meta.glob("../../component/**/*.*s");
9
+ const symbol = Symbol.for("toReferencePath");
10
+ export const component = {
11
+ payoutPolicy: {
12
+ queries: { get: { [symbol]: "betterStripe/payoutPolicy/queries/get" } },
13
+ },
14
+ };
15
+ export const scope = {
16
+ accountId: "acct_recipient",
17
+ ownerKey: "owner",
18
+ operationKey: "release-1",
19
+ currency: "usd",
20
+ independentLiabilities: 0,
21
+ };
22
+ export async function setup(amounts = [600, 400], currency = "usd") {
23
+ const t = convexTest(schema, modules);
24
+ await t.run(async (ctx) => {
25
+ await ctx.db.insert("payoutPolicies", {
26
+ accountId: scope.accountId,
27
+ ownerKey: scope.ownerKey,
28
+ mode: "stripe_managed",
29
+ status: "ready",
30
+ revision: 0,
31
+ operationKey: "enable",
32
+ country: "US",
33
+ thresholds: [],
34
+ holdDeadline: Date.now() + 86400000,
35
+ });
36
+ for (let i = 0; i < amounts.length; i++)
37
+ await ctx.db.insert("transfers", {
38
+ stripeTransferId: `tr_${i}`,
39
+ destinationAccountId: scope.accountId,
40
+ sourceChargeId: `ch_${i}`,
41
+ amount: amounts[i],
42
+ currency,
43
+ status: "paid",
44
+ role: i % 2 ? "affiliate" : "store",
45
+ });
46
+ });
47
+ const path = (ref) => ref[symbol].replace("betterStripe/", "").replace(/\/(\w+)$/, ":$1");
48
+ const ctx = {
49
+ runQuery: (ref, args) => t.query(makeFunctionReference(path(ref)), args),
50
+ runMutation: (ref, args) => t.mutation(makeFunctionReference(path(ref)), args),
51
+ };
52
+ let transactions = amounts.map((amount, i) => ({
53
+ id: `txn_${i}`,
54
+ source: `py_${i}`,
55
+ amount,
56
+ fee: 0,
57
+ net: amount,
58
+ currency,
59
+ created: 100,
60
+ available_on: 200,
61
+ status: "available",
62
+ type: "payment",
63
+ exchange_rate: null,
64
+ }));
65
+ let payout;
66
+ const history = [];
67
+ const provider = {
68
+ accounts: {
69
+ listExternalAccounts: vi.fn(async () => ({
70
+ data: [
71
+ {
72
+ id: "ba_one",
73
+ object: "bank_account",
74
+ currency,
75
+ default_for_currency: true,
76
+ },
77
+ ],
78
+ has_more: false,
79
+ })),
80
+ },
81
+ transfers: {
82
+ retrieve: vi.fn(async (id) => {
83
+ const i = Number(id.slice(3));
84
+ return {
85
+ id,
86
+ destination: scope.accountId,
87
+ destination_payment: `py_${i}`,
88
+ source_transaction: `ch_${i}`,
89
+ amount: amounts[i],
90
+ currency,
91
+ amount_reversed: 0,
92
+ };
93
+ }),
94
+ listReversals: vi.fn(async () => ({ data: [], has_more: false })),
95
+ },
96
+ charges: {
97
+ retrieve: vi.fn(async (id) => {
98
+ const i = Number(id.slice(3));
99
+ return {
100
+ id,
101
+ source_transfer: `tr_${i}`,
102
+ amount: amounts[i],
103
+ currency,
104
+ paid: true,
105
+ status: "succeeded",
106
+ balance_transaction: `txn_${i}`,
107
+ };
108
+ }),
109
+ },
110
+ balanceTransactions: {
111
+ list: vi.fn(async (params) => ({
112
+ data: params.source
113
+ ? transactions.filter((t) => t.source === params.source)
114
+ : transactions.slice(0, params.limit),
115
+ has_more: false,
116
+ })),
117
+ retrieve: vi.fn(async (id) => transactions.find((t) => t.id === id)),
118
+ },
119
+ balance: {
120
+ retrieve: vi.fn(async () => ({
121
+ available: [
122
+ {
123
+ currency,
124
+ amount: transactions
125
+ .filter((t) => t.status === "available")
126
+ .reduce((a, t) => a + t.net, 0),
127
+ source_types: {
128
+ card: transactions
129
+ .filter((t) => t.status === "available")
130
+ .reduce((a, t) => a + t.net, 0),
131
+ },
132
+ },
133
+ ],
134
+ pending: [],
135
+ })),
136
+ },
137
+ payouts: {
138
+ list: vi.fn(async () => ({
139
+ data: [...history].reverse(),
140
+ has_more: false,
141
+ })),
142
+ retrieve: vi.fn(async (id) => id ? history.find((p) => p.id === id) : payout),
143
+ create: vi.fn(async (params) => {
144
+ const id = history.length ? `po_${history.length + 1}` : "po_one";
145
+ const debitId = history.length
146
+ ? `txn_debit_${history.length + 1}`
147
+ : "txn_debit";
148
+ payout = {
149
+ id,
150
+ ...params,
151
+ status: "paid",
152
+ automatic: false,
153
+ method: "standard",
154
+ type: "bank_account",
155
+ source_type: "card",
156
+ destination: "ba_one",
157
+ created: Math.floor(Date.now() / 1000),
158
+ arrival_date: Math.floor(Date.now() / 1000),
159
+ balance_transaction: debitId,
160
+ failure_balance_transaction: null,
161
+ reversed_by: null,
162
+ };
163
+ transactions = [
164
+ {
165
+ id: debitId,
166
+ source: id,
167
+ amount: -params.amount,
168
+ fee: 0,
169
+ net: -params.amount,
170
+ currency,
171
+ created: Math.floor(Date.now() / 1000),
172
+ available_on: Math.floor(Date.now() / 1000),
173
+ status: "available",
174
+ type: "payout",
175
+ exchange_rate: null,
176
+ },
177
+ ...transactions,
178
+ ];
179
+ history.push(payout);
180
+ return payout;
181
+ }),
182
+ },
183
+ };
184
+ const verify = vi.fn(async () => ({
185
+ status: "verified",
186
+ policy: (await t.run((ctx) => ctx.db.query("payoutPolicies").first())),
187
+ }));
188
+ const run = (extra = {}) => releaseRecipientPayout(provider, component, ctx, { ...scope, currency, ...extra }, verify);
189
+ return {
190
+ t,
191
+ ctx,
192
+ provider,
193
+ verify,
194
+ run,
195
+ setTransactions: (rows) => {
196
+ transactions = rows;
197
+ },
198
+ transactions: () => transactions,
199
+ };
200
+ }
201
+ export async function historical(currency = "usd") {
202
+ const amounts = [600, 400];
203
+ const s = await setup(amounts, currency);
204
+ await s.provider.payouts.create({
205
+ amount: 1000,
206
+ currency,
207
+ metadata: {},
208
+ });
209
+ s.provider.payouts.create.mockClear();
210
+ const opts = {
211
+ accountId: scope.accountId,
212
+ ownerKey: scope.ownerKey,
213
+ currency,
214
+ expectedRevision: 0,
215
+ payouts: [
216
+ {
217
+ stripePayoutId: "po_one",
218
+ allocations: [
219
+ { stripeTransferId: "tr_0", amount: 600 },
220
+ { stripeTransferId: "tr_1", amount: 400 },
221
+ ],
222
+ },
223
+ ],
224
+ };
225
+ const adopt = (extra = {}) => adoptRecipientPayouts(s.provider, component, s.ctx, {
226
+ ...opts,
227
+ ...extra,
228
+ });
229
+ return { ...s, adopt, opts, amounts };
230
+ }
231
+ //# sourceMappingURL=payoutAdoptionTestHelpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payoutAdoptionTestHelpers.js","sourceRoot":"","sources":["../../../src/client/connect/payoutAdoptionTestHelpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import type Stripe from "stripe";
2
+ import type { Infer } from "convex/values";
3
+ import type { Component, RunCtx } from "../helpers.js";
4
+ import type { result } from "../../component/payoutSync/validators.js";
5
+ import { type PayoutSyncScope } from "./payoutSyncValidation.js";
6
+ export type PayoutSyncOptions = {
7
+ stripePayoutId: string;
8
+ scope: PayoutSyncScope;
9
+ };
10
+ export type PayoutSyncResult = Infer<typeof result>;
11
+ export type PreparedPayoutSync = Awaited<ReturnType<typeof preparePayoutSync>>;
12
+ /** Package-internal preparation for transactional host webhook dispatch. No financial record write. */
13
+ export declare function preparePayoutSync(stripe: Stripe, component: Component, ctx: RunCtx, opts: PayoutSyncOptions): Promise<{
14
+ stripePayoutId: string;
15
+ accountId: string;
16
+ generation: number;
17
+ payout: {
18
+ accountId: string;
19
+ amount: number;
20
+ arrivalDate?: string | undefined;
21
+ currency: string;
22
+ failureCode?: string | undefined;
23
+ failureMessage?: string | undefined;
24
+ metadata?: Record<string, string> | undefined;
25
+ method?: string | undefined;
26
+ status: "canceled" | "failed" | "in_transit" | "paid" | "pending";
27
+ stripePayoutId: string;
28
+ };
29
+ }>;
30
+ /** Host must authorize scope. This only reads Stripe and synchronizes the existing financial record. */
31
+ export declare function syncPayoutFromStripe(stripe: Stripe, component: Component, ctx: RunCtx, opts: PayoutSyncOptions): Promise<PayoutSyncResult>;
32
+ //# sourceMappingURL=payoutSync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payoutSync.d.ts","sourceRoot":"","sources":["../../../src/client/connect/payoutSync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AACjC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAIvD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0CAA0C,CAAC;AACvE,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,2BAA2B,CAAC;AACnC,MAAM,MAAM,iBAAiB,GAAG;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,eAAe,CAAC;CACxB,CAAC;AACF,MAAM,MAAM,gBAAgB,GAAG,KAAK,CAAC,OAAO,MAAM,CAAC,CAAC;AACpD,MAAM,MAAM,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC,CAAC;AAgB/E,uGAAuG;AACvG,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,SAAS,EACpB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,iBAAiB;;;;;;;;;;;;;;;;GA+BxB;AACD,wGAAwG;AACxG,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,SAAS,EACpB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,iBAAiB,GACtB,OAAO,CAAC,gBAAgB,CAAC,CAgB3B"}
@@ -0,0 +1,48 @@
1
+ import { runMutationOrThrow } from "../helpers.js";
2
+ import { componentRef } from "../webhooks/helpers.js";
3
+ import { validateIdentity } from "../../component/payoutSync/helpers.js";
4
+ import { payoutAccount, payoutSnapshot, } from "./payoutSyncValidation.js";
5
+ async function markUnknown(component, ctx, observation) {
6
+ await runMutationOrThrow(ctx, componentRef(component, "payoutSync/mutations/markUnknown"), observation);
7
+ }
8
+ /** Package-internal preparation for transactional host webhook dispatch. No financial record write. */
9
+ export async function preparePayoutSync(stripe, component, ctx, opts) {
10
+ const identity = {
11
+ stripePayoutId: opts.stripePayoutId,
12
+ accountId: payoutAccount(opts.scope),
13
+ };
14
+ validateIdentity(identity);
15
+ if (!ctx.runMutation)
16
+ throw new Error("Payout synchronization requires runMutation.");
17
+ const generation = (await runMutationOrThrow(ctx, componentRef(component, "payoutSync/mutations/begin"), identity));
18
+ try {
19
+ const payout = await stripe.payouts.retrieve(identity.stripePayoutId, {}, identity.accountId === "platform"
20
+ ? {}
21
+ : { stripeAccount: identity.accountId });
22
+ return {
23
+ ...identity,
24
+ generation,
25
+ payout: payoutSnapshot(payout, identity),
26
+ };
27
+ }
28
+ catch (error) {
29
+ await markUnknown(component, ctx, { ...identity, generation });
30
+ throw error;
31
+ }
32
+ }
33
+ /** Host must authorize scope. This only reads Stripe and synchronizes the existing financial record. */
34
+ export async function syncPayoutFromStripe(stripe, component, ctx, opts) {
35
+ const observation = await preparePayoutSync(stripe, component, ctx, opts);
36
+ try {
37
+ return (await runMutationOrThrow(ctx, componentRef(component, "payoutSync/mutations/finish"), observation));
38
+ }
39
+ catch (error) {
40
+ await markUnknown(component, ctx, {
41
+ stripePayoutId: observation.stripePayoutId,
42
+ accountId: observation.accountId,
43
+ generation: observation.generation,
44
+ });
45
+ throw error;
46
+ }
47
+ }
48
+ //# sourceMappingURL=payoutSync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payoutSync.js","sourceRoot":"","sources":["../../../src/client/connect/payoutSync.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AAEzE,OAAO,EACL,aAAa,EACb,cAAc,GAEf,MAAM,2BAA2B,CAAC;AAOnC,KAAK,UAAU,WAAW,CACxB,SAAoB,EACpB,GAAW,EACX,WAIC;IAED,MAAM,kBAAkB,CACtB,GAAG,EACH,YAAY,CAAC,SAAS,EAAE,kCAAkC,CAAC,EAC3D,WAAW,CACZ,CAAC;AACJ,CAAC;AACD,uGAAuG;AACvG,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,MAAc,EACd,SAAoB,EACpB,GAAW,EACX,IAAuB;IAEvB,MAAM,QAAQ,GAAG;QACf,cAAc,EAAE,IAAI,CAAC,cAAc;QACnC,SAAS,EAAE,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;KACrC,CAAC;IACF,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC3B,IAAI,CAAC,GAAG,CAAC,WAAW;QAClB,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAClE,MAAM,UAAU,GAAG,CAAC,MAAM,kBAAkB,CAC1C,GAAG,EACH,YAAY,CAAC,SAAS,EAAE,4BAA4B,CAAC,EACrD,QAAQ,CACT,CAAW,CAAC;IACb,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,QAAQ,CAC1C,QAAQ,CAAC,cAAc,EACvB,EAAE,EACF,QAAQ,CAAC,SAAS,KAAK,UAAU;YAC/B,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,EAAE,aAAa,EAAE,QAAQ,CAAC,SAAS,EAAE,CAC1C,CAAC;QACF,OAAO;YACL,GAAG,QAAQ;YACX,UAAU;YACV,MAAM,EAAE,cAAc,CAAC,MAAM,EAAE,QAAQ,CAAC;SACzC,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,WAAW,CAAC,SAAS,EAAE,GAAG,EAAE,EAAE,GAAG,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC;QAC/D,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AACD,wGAAwG;AACxG,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,MAAc,EACd,SAAoB,EACpB,GAAW,EACX,IAAuB;IAEvB,MAAM,WAAW,GAAG,MAAM,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IAC1E,IAAI,CAAC;QACH,OAAO,CAAC,MAAM,kBAAkB,CAC9B,GAAG,EACH,YAAY,CAAC,SAAS,EAAE,6BAA6B,CAAC,EACtD,WAAW,CACZ,CAAqB,CAAC;IACzB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,WAAW,CAAC,SAAS,EAAE,GAAG,EAAE;YAChC,cAAc,EAAE,WAAW,CAAC,cAAc;YAC1C,SAAS,EAAE,WAAW,CAAC,SAAS;YAChC,UAAU,EAAE,WAAW,CAAC,UAAU;SACnC,CAAC,CAAC;QACH,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}