@fantastic.dev/better-stripe 0.4.0 → 0.5.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 (162) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/MIGRATION.md +135 -0
  3. package/README.md +23 -2
  4. package/dist/client/billing/checkout.d.ts.map +1 -1
  5. package/dist/client/billing/checkout.js +22 -8
  6. package/dist/client/billing/checkout.js.map +1 -1
  7. package/dist/client/billing/subscriptionRouting.d.ts +24 -0
  8. package/dist/client/billing/subscriptionRouting.d.ts.map +1 -0
  9. package/dist/client/billing/subscriptionRouting.js +19 -0
  10. package/dist/client/billing/subscriptionRouting.js.map +1 -0
  11. package/dist/client/billing/subscriptions.d.ts +6 -6
  12. package/dist/client/billing/subscriptions.d.ts.map +1 -1
  13. package/dist/client/billing/subscriptions.js +31 -12
  14. package/dist/client/billing/subscriptions.js.map +1 -1
  15. package/dist/client/connect/disputes.js.map +1 -1
  16. package/dist/client/constants.js +1 -1
  17. package/dist/client/core/accountLinks.d.ts +1 -0
  18. package/dist/client/core/accountLinks.d.ts.map +1 -1
  19. package/dist/client/core/accountLinks.js +0 -6
  20. package/dist/client/core/accountLinks.js.map +1 -1
  21. package/dist/client/core/accountStatus.d.ts.map +1 -1
  22. package/dist/client/core/accountStatus.js +23 -8
  23. package/dist/client/core/accountStatus.js.map +1 -1
  24. package/dist/client/index.d.ts +5 -2
  25. package/dist/client/index.d.ts.map +1 -1
  26. package/dist/client/index.js.map +1 -1
  27. package/dist/client/types/documents.d.ts +1 -0
  28. package/dist/client/types/documents.d.ts.map +1 -1
  29. package/dist/client/types/events.d.ts +2 -1
  30. package/dist/client/types/events.d.ts.map +1 -1
  31. package/dist/client/types/options.d.ts +7 -0
  32. package/dist/client/types/options.d.ts.map +1 -1
  33. package/dist/client/utils/stripeDashboardUrl.d.ts.map +1 -1
  34. package/dist/client/utils/webhookEndpoints.d.ts.map +1 -1
  35. package/dist/client/webhooks/handler.d.ts.map +1 -1
  36. package/dist/client/webhooks/handler.js +35 -1
  37. package/dist/client/webhooks/handler.js.map +1 -1
  38. package/dist/client/webhooks/hooks.d.ts +1 -1
  39. package/dist/client/webhooks/hooks.d.ts.map +1 -1
  40. package/dist/client/webhooks/hooks.js +5 -1
  41. package/dist/client/webhooks/hooks.js.map +1 -1
  42. package/dist/client/webhooks/processors.d.ts.map +1 -1
  43. package/dist/client/webhooks/processors.js +12 -2
  44. package/dist/client/webhooks/processors.js.map +1 -1
  45. package/dist/client/webhooks/v2.d.ts.map +1 -1
  46. package/dist/client/webhooks/v2.js +11 -3
  47. package/dist/client/webhooks/v2.js.map +1 -1
  48. package/dist/component/_generated/component.d.ts +8 -0
  49. package/dist/component/_generated/component.d.ts.map +1 -1
  50. package/dist/component/_generated/server.d.ts +7 -1
  51. package/dist/component/_generated/server.d.ts.map +1 -1
  52. package/dist/component/_generated/server.js +2 -1
  53. package/dist/component/_generated/server.js.map +1 -1
  54. package/dist/component/billing/mutations.d.ts +29 -28
  55. package/dist/component/billing/mutations.d.ts.map +1 -1
  56. package/dist/component/billing/mutations.js +1 -0
  57. package/dist/component/billing/mutations.js.map +1 -1
  58. package/dist/component/billing/queries.d.ts +138 -131
  59. package/dist/component/billing/queries.d.ts.map +1 -1
  60. package/dist/component/billing/schema.d.ts +67 -65
  61. package/dist/component/billing/schema.d.ts.map +1 -1
  62. package/dist/component/billing/validators.d.ts +94 -91
  63. package/dist/component/billing/validators.d.ts.map +1 -1
  64. package/dist/component/billing/validators.js +1 -0
  65. package/dist/component/billing/validators.js.map +1 -1
  66. package/dist/component/connect/mutations.d.ts +37 -37
  67. package/dist/component/connect/queries.d.ts +115 -115
  68. package/dist/component/connect/queries.d.ts.map +1 -1
  69. package/dist/component/connect/queries.js +34 -71
  70. package/dist/component/connect/queries.js.map +1 -1
  71. package/dist/component/connect/schema.d.ts +73 -73
  72. package/dist/component/connect/validators.d.ts +119 -119
  73. package/dist/component/connect/validators.d.ts.map +1 -1
  74. package/dist/component/convex.config.d.ts +1 -0
  75. package/dist/component/convex.config.d.ts.map +1 -1
  76. package/dist/component/convex.config.js +2 -1
  77. package/dist/component/convex.config.js.map +1 -1
  78. package/dist/component/core/mutations.d.ts +12 -12
  79. package/dist/component/core/queries.d.ts +34 -34
  80. package/dist/component/core/schema.d.ts +11 -11
  81. package/dist/component/core/validators.d.ts +14 -14
  82. package/dist/component/core/validators.d.ts.map +1 -1
  83. package/dist/component/lib/fees.d.ts +12 -12
  84. package/dist/component/lib/fees.d.ts.map +1 -1
  85. package/dist/component/lib/fees.js +1 -1
  86. package/dist/component/lib/reversals.js.map +1 -1
  87. package/dist/component/products/mutations.d.ts +7 -7
  88. package/dist/component/products/queries.d.ts +33 -33
  89. package/dist/component/products/schema.d.ts +15 -15
  90. package/dist/component/products/validators.d.ts +16 -16
  91. package/dist/component/products/validators.d.ts.map +1 -1
  92. package/dist/component/schema.d.ts +173 -171
  93. package/dist/component/schema.d.ts.map +1 -1
  94. package/dist/component/webhooks/mutations.d.ts +3 -3
  95. package/dist/component/webhooks/queries.d.ts +12 -12
  96. package/dist/component/webhooks/schema.d.ts +7 -7
  97. package/dist/component/webhooks/validators.d.ts +10 -10
  98. package/dist/component/webhooks/validators.d.ts.map +1 -1
  99. package/dist/react/components/AccountCreateCard.js.map +1 -1
  100. package/dist/react/components/BuyerBillingView.js +1 -1
  101. package/dist/react/components/CheckoutSessionProviderWithKey.d.ts +1 -1
  102. package/dist/react/components/DisputeDetail.js +1 -1
  103. package/dist/react/components/DisputesList.js +1 -1
  104. package/dist/react/components/EarningsSummary.js +1 -1
  105. package/dist/react/components/EmbeddedCheckout.d.ts.map +1 -1
  106. package/dist/react/components/EmbeddedCheckout.js +1 -1
  107. package/dist/react/components/EmbeddedCheckout.js.map +1 -1
  108. package/dist/react/components/PayoutSchedule.js +1 -1
  109. package/dist/react/components/SplitBreakdown.js +1 -1
  110. package/dist/react/components/StripeProvider.d.ts +1 -1
  111. package/dist/react/components/StripeProviderWithKey.d.ts +1 -1
  112. package/dist/react/hooks/useAccount.d.ts.map +1 -1
  113. package/dist/react/hooks/useAccountOnboarding.d.ts.map +1 -1
  114. package/dist/react/hooks/useCheckout.d.ts.map +1 -1
  115. package/dist/react/hooks/useDisputeWithCountdown.d.ts.map +1 -1
  116. package/dist/react/hooks/useDisputes.d.ts.map +1 -1
  117. package/dist/react/hooks/useEarnings.d.ts.map +1 -1
  118. package/dist/react/hooks/useInvoices.d.ts.map +1 -1
  119. package/dist/react/hooks/usePaymentMethodActions.js.map +1 -1
  120. package/dist/react/hooks/usePaymentMethods.d.ts.map +1 -1
  121. package/dist/react/hooks/usePrices.d.ts.map +1 -1
  122. package/dist/react/hooks/useProducts.d.ts.map +1 -1
  123. package/dist/react/hooks/useSplitBreakdown.d.ts.map +1 -1
  124. package/dist/react/hooks/useSubscription.d.ts.map +1 -1
  125. package/dist/react/hooks/useSubscriptions.d.ts.map +1 -1
  126. package/dist/react/lib/stripe-element-styles.d.ts.map +1 -1
  127. package/dist/react/lib/stripe-element-styles.js.map +1 -1
  128. package/package.json +25 -23
  129. package/src/client/billing/checkout.test.ts +62 -14
  130. package/src/client/billing/checkout.ts +26 -10
  131. package/src/client/billing/subscriptionRouting.ts +25 -0
  132. package/src/client/billing/subscriptions.test.ts +90 -28
  133. package/src/client/billing/subscriptions.ts +53 -18
  134. package/src/client/constants.ts +1 -1
  135. package/src/client/core/accountLinks.test.ts +20 -13
  136. package/src/client/core/accountLinks.ts +2 -10
  137. package/src/client/core/accountStatus.test.ts +67 -0
  138. package/src/client/core/accountStatus.ts +30 -13
  139. package/src/client/helpers.test.ts +2 -2
  140. package/src/client/index.ts +49 -44
  141. package/src/client/stripe-version.test.ts +47 -0
  142. package/src/client/types/documents.ts +1 -0
  143. package/src/client/types/events.ts +2 -1
  144. package/src/client/types/options.ts +7 -0
  145. package/src/client/webhooks/handler.ts +38 -1
  146. package/src/client/webhooks/hooks.ts +3 -0
  147. package/src/client/webhooks/processors.test.ts +201 -40
  148. package/src/client/webhooks/processors.ts +21 -17
  149. package/src/client/webhooks/retry.integration.test.ts +196 -0
  150. package/src/client/webhooks/v2.test.ts +36 -0
  151. package/src/client/webhooks/v2.ts +14 -4
  152. package/src/component/_generated/component.ts +15 -28
  153. package/src/component/_generated/server.ts +9 -2
  154. package/src/component/billing/mutations.ts +1 -0
  155. package/src/component/billing/validators.ts +1 -0
  156. package/src/component/config-queries.test.ts +8 -4
  157. package/src/component/connect/queries.ts +31 -66
  158. package/src/component/convex.config.ts +2 -1
  159. package/src/component/earnings-totals.test.ts +27 -1
  160. package/src/component/lib/fees.ts +1 -1
  161. package/src/react/components/EmbeddedCheckout.render.test.tsx +57 -0
  162. package/src/react/components/EmbeddedCheckout.tsx +1 -0
@@ -3,9 +3,9 @@
3
3
  */
4
4
  export declare const productsTable: import("convex/server").TableDefinition<import("convex/values").VObject<{
5
5
  accountId?: string | undefined;
6
- metadata?: any;
7
- description?: string | undefined;
8
6
  active: boolean;
7
+ description?: string | undefined;
8
+ metadata?: any;
9
9
  name: string;
10
10
  stripeProductId: string;
11
11
  }, {
@@ -15,26 +15,26 @@ export declare const productsTable: import("convex/server").TableDefinition<impo
15
15
  description: import("convex/values").VString<string | undefined, "optional">;
16
16
  active: import("convex/values").VBoolean<boolean, "required">;
17
17
  metadata: import("convex/values").VAny<any, "optional", string>;
18
- }, "required", "accountId" | "metadata" | "active" | "name" | "stripeProductId" | "description" | `metadata.${string}`>, {
19
- by_stripe_product_id: ["stripeProductId", "_creationTime"];
20
- by_account_id: ["accountId", "_creationTime"];
18
+ }, "required", "accountId" | "active" | "description" | "metadata" | "name" | "stripeProductId" | `metadata.${string}`>, {
21
19
  by_account_active: ["accountId", "active", "_creationTime"];
20
+ by_account_id: ["accountId", "_creationTime"];
22
21
  by_active: ["active", "_creationTime"];
22
+ by_stripe_product_id: ["stripeProductId", "_creationTime"];
23
23
  }, {}, {}>;
24
24
  /**
25
25
  * Prices linked to products.
26
26
  */
27
27
  export declare const pricesTable: import("convex/server").TableDefinition<import("convex/values").VObject<{
28
- metadata?: any;
29
- interval?: "day" | "week" | "month" | "year" | undefined;
28
+ active: boolean;
29
+ currency: string;
30
+ interval?: "day" | "month" | "week" | "year" | undefined;
30
31
  intervalCount?: number | undefined;
32
+ metadata?: any;
31
33
  nickname?: string | undefined;
32
- type: "one_time" | "recurring";
33
- currency: string;
34
- active: boolean;
35
34
  productId: string;
36
35
  stripePriceId: string;
37
36
  stripeProductId: string;
37
+ type: "one_time" | "recurring";
38
38
  unitAmount: number;
39
39
  }, {
40
40
  stripePriceId: import("convex/values").VString<string, "required">;
@@ -45,14 +45,14 @@ export declare const pricesTable: import("convex/server").TableDefinition<import
45
45
  currency: import("convex/values").VString<string, "required">;
46
46
  active: import("convex/values").VBoolean<boolean, "required">;
47
47
  type: import("convex/values").VUnion<"one_time" | "recurring", [import("convex/values").VLiteral<"one_time", "required">, import("convex/values").VLiteral<"recurring", "required">], "required", never>;
48
- interval: import("convex/values").VUnion<"day" | "week" | "month" | "year" | undefined, [import("convex/values").VLiteral<"day", "required">, import("convex/values").VLiteral<"week", "required">, import("convex/values").VLiteral<"month", "required">, import("convex/values").VLiteral<"year", "required">], "optional", never>;
48
+ interval: import("convex/values").VUnion<"day" | "month" | "week" | "year" | undefined, [import("convex/values").VLiteral<"day", "required">, import("convex/values").VLiteral<"week", "required">, import("convex/values").VLiteral<"month", "required">, import("convex/values").VLiteral<"year", "required">], "optional", never>;
49
49
  intervalCount: import("convex/values").VFloat64<number | undefined, "optional">;
50
50
  metadata: import("convex/values").VAny<any, "optional", string>;
51
- }, "required", "type" | "currency" | "metadata" | "active" | "interval" | "intervalCount" | "nickname" | "productId" | "stripePriceId" | "stripeProductId" | "unitAmount" | `metadata.${string}`>, {
52
- by_stripe_price_id: ["stripePriceId", "_creationTime"];
51
+ }, "required", "active" | "currency" | "interval" | "intervalCount" | "metadata" | "nickname" | "productId" | "stripePriceId" | "stripeProductId" | "type" | "unitAmount" | `metadata.${string}`>, {
52
+ by_active: ["active", "_creationTime"];
53
+ by_product_active: ["productId", "active", "_creationTime"];
53
54
  by_product_id: ["productId", "_creationTime"];
55
+ by_stripe_price_id: ["stripePriceId", "_creationTime"];
54
56
  by_stripe_product_id: ["stripeProductId", "_creationTime"];
55
- by_product_active: ["productId", "active", "_creationTime"];
56
- by_active: ["active", "_creationTime"];
57
57
  }, {}, {}>;
58
58
  //# sourceMappingURL=schema.d.ts.map
@@ -1,7 +1,7 @@
1
1
  import { type Infer } from "convex/values";
2
2
  export declare const priceTypeValidator: import("convex/values").VUnion<"one_time" | "recurring", [import("convex/values").VLiteral<"one_time", "required">, import("convex/values").VLiteral<"recurring", "required">], "required", never>;
3
3
  export type PriceType = Infer<typeof priceTypeValidator>;
4
- export declare const priceIntervalValidator: import("convex/values").VUnion<"day" | "week" | "month" | "year" | undefined, [import("convex/values").VLiteral<"day", "required">, import("convex/values").VLiteral<"week", "required">, import("convex/values").VLiteral<"month", "required">, import("convex/values").VLiteral<"year", "required">], "optional", never>;
4
+ export declare const priceIntervalValidator: import("convex/values").VUnion<"day" | "month" | "week" | "year" | undefined, [import("convex/values").VLiteral<"day", "required">, import("convex/values").VLiteral<"week", "required">, import("convex/values").VLiteral<"month", "required">, import("convex/values").VLiteral<"year", "required">], "optional", never>;
5
5
  /**
6
6
  * Field validators for the `products` table.
7
7
  * Shared between the schema definition and the doc validator so the
@@ -17,14 +17,14 @@ export declare const productFields: {
17
17
  };
18
18
  /** Full `products` document, including system fields. */
19
19
  export declare const productDocValidator: import("convex/values").VObject<{
20
+ _creationTime: number;
21
+ _id: import("convex/values").GenericId<"products">;
20
22
  accountId?: string | undefined;
21
- metadata?: any;
22
- description?: string | undefined;
23
23
  active: boolean;
24
+ description?: string | undefined;
25
+ metadata?: any;
24
26
  name: string;
25
27
  stripeProductId: string;
26
- _id: import("convex/values").GenericId<"products">;
27
- _creationTime: number;
28
28
  }, {
29
29
  stripeProductId: import("convex/values").VString<string, "required">;
30
30
  accountId: import("convex/values").VString<string | undefined, "optional">;
@@ -34,7 +34,7 @@ export declare const productDocValidator: import("convex/values").VObject<{
34
34
  metadata: import("convex/values").VAny<any, "optional", string>;
35
35
  _id: import("convex/values").VId<import("convex/values").GenericId<"products">, "required">;
36
36
  _creationTime: import("convex/values").VFloat64<number, "required">;
37
- }, "required", "accountId" | "metadata" | "active" | "name" | "stripeProductId" | "description" | "_id" | "_creationTime" | `metadata.${string}`>;
37
+ }, "required", "_creationTime" | "_id" | "accountId" | "active" | "description" | "metadata" | "name" | "stripeProductId" | `metadata.${string}`>;
38
38
  /**
39
39
  * Field validators for the `prices` table.
40
40
  * Shared between the schema definition and the doc validator so the
@@ -49,25 +49,25 @@ export declare const priceFields: {
49
49
  currency: import("convex/values").VString<string, "required">;
50
50
  active: import("convex/values").VBoolean<boolean, "required">;
51
51
  type: import("convex/values").VUnion<"one_time" | "recurring", [import("convex/values").VLiteral<"one_time", "required">, import("convex/values").VLiteral<"recurring", "required">], "required", never>;
52
- interval: import("convex/values").VUnion<"day" | "week" | "month" | "year" | undefined, [import("convex/values").VLiteral<"day", "required">, import("convex/values").VLiteral<"week", "required">, import("convex/values").VLiteral<"month", "required">, import("convex/values").VLiteral<"year", "required">], "optional", never>;
52
+ interval: import("convex/values").VUnion<"day" | "month" | "week" | "year" | undefined, [import("convex/values").VLiteral<"day", "required">, import("convex/values").VLiteral<"week", "required">, import("convex/values").VLiteral<"month", "required">, import("convex/values").VLiteral<"year", "required">], "optional", never>;
53
53
  intervalCount: import("convex/values").VFloat64<number | undefined, "optional">;
54
54
  metadata: import("convex/values").VAny<any, "optional", string>;
55
55
  };
56
56
  /** Full `prices` document, including system fields. */
57
57
  export declare const priceDocValidator: import("convex/values").VObject<{
58
- metadata?: any;
59
- interval?: "day" | "week" | "month" | "year" | undefined;
58
+ _creationTime: number;
59
+ _id: import("convex/values").GenericId<"prices">;
60
+ active: boolean;
61
+ currency: string;
62
+ interval?: "day" | "month" | "week" | "year" | undefined;
60
63
  intervalCount?: number | undefined;
64
+ metadata?: any;
61
65
  nickname?: string | undefined;
62
- type: "one_time" | "recurring";
63
- currency: string;
64
- active: boolean;
65
66
  productId: string;
66
67
  stripePriceId: string;
67
68
  stripeProductId: string;
69
+ type: "one_time" | "recurring";
68
70
  unitAmount: number;
69
- _id: import("convex/values").GenericId<"prices">;
70
- _creationTime: number;
71
71
  }, {
72
72
  stripePriceId: import("convex/values").VString<string, "required">;
73
73
  productId: import("convex/values").VString<string, "required">;
@@ -77,10 +77,10 @@ export declare const priceDocValidator: import("convex/values").VObject<{
77
77
  currency: import("convex/values").VString<string, "required">;
78
78
  active: import("convex/values").VBoolean<boolean, "required">;
79
79
  type: import("convex/values").VUnion<"one_time" | "recurring", [import("convex/values").VLiteral<"one_time", "required">, import("convex/values").VLiteral<"recurring", "required">], "required", never>;
80
- interval: import("convex/values").VUnion<"day" | "week" | "month" | "year" | undefined, [import("convex/values").VLiteral<"day", "required">, import("convex/values").VLiteral<"week", "required">, import("convex/values").VLiteral<"month", "required">, import("convex/values").VLiteral<"year", "required">], "optional", never>;
80
+ interval: import("convex/values").VUnion<"day" | "month" | "week" | "year" | undefined, [import("convex/values").VLiteral<"day", "required">, import("convex/values").VLiteral<"week", "required">, import("convex/values").VLiteral<"month", "required">, import("convex/values").VLiteral<"year", "required">], "optional", never>;
81
81
  intervalCount: import("convex/values").VFloat64<number | undefined, "optional">;
82
82
  metadata: import("convex/values").VAny<any, "optional", string>;
83
83
  _id: import("convex/values").VId<import("convex/values").GenericId<"prices">, "required">;
84
84
  _creationTime: import("convex/values").VFloat64<number, "required">;
85
- }, "required", "type" | "currency" | "metadata" | "active" | "interval" | "intervalCount" | "nickname" | "productId" | "stripePriceId" | "stripeProductId" | "unitAmount" | "_id" | "_creationTime" | `metadata.${string}`>;
85
+ }, "required", "_creationTime" | "_id" | "active" | "currency" | "interval" | "intervalCount" | "metadata" | "nickname" | "productId" | "stripePriceId" | "stripeProductId" | "type" | "unitAmount" | `metadata.${string}`>;
86
86
  //# sourceMappingURL=validators.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../../../src/component/products/validators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,KAAK,EAAK,MAAM,eAAe,CAAC;AAE9C,eAAO,MAAM,kBAAkB,oMAG9B,CAAC;AACF,MAAM,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAEzD,eAAO,MAAM,sBAAsB,4TAOlC,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,aAAa;;;;;;;CAOzB,CAAC;AAEF,yDAAyD;AACzD,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;iJAI9B,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,WAAW;;;;;;;;;;;;CAYvB,CAAC;AAEF,uDAAuD;AACvD,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;2NAI5B,CAAC"}
1
+ {"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../../../src/component/products/validators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,KAAK,EAAK,MAAM,eAAe,CAAC;AAE9C,eAAO,MAAM,kBAAkB,oMAG9B,CAAC;AACF,MAAM,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAEzD,eAAO,MAAM,sBAAsB,4TAOlC,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,aAAa;IACxB,eAAe;IACf,SAAS;IACT,IAAI;IACJ,WAAW;IACX,MAAM;IACN,QAAQ;CACT,CAAC;AAEF,yDAAyD;AACzD,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;iJAI9B,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,WAAW;IACtB,aAAa;IACb,SAAS;IACT,eAAe;IACf,QAAQ;IACR,UAAU;IACV,QAAQ;IACR,MAAM;IACN,IAAI;IACJ,QAAQ;IACR,aAAa;IACb,QAAQ;CACT,CAAC;AAEF,uDAAuD;AACvD,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;2NAI5B,CAAC"}