@pulgueta/epayco-convex 0.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.
Files changed (169) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +945 -0
  3. package/dist/client/_generated/_ignore.d.ts +1 -0
  4. package/dist/client/_generated/_ignore.d.ts.map +1 -0
  5. package/dist/client/_generated/_ignore.js +3 -0
  6. package/dist/client/_generated/_ignore.js.map +1 -0
  7. package/dist/client/index.d.ts +222 -0
  8. package/dist/client/index.d.ts.map +1 -0
  9. package/dist/client/index.js +355 -0
  10. package/dist/client/index.js.map +1 -0
  11. package/dist/component/_generated/api.d.ts +78 -0
  12. package/dist/component/_generated/api.d.ts.map +1 -0
  13. package/dist/component/_generated/api.js +31 -0
  14. package/dist/component/_generated/api.js.map +1 -0
  15. package/dist/component/_generated/component.d.ts +580 -0
  16. package/dist/component/_generated/component.d.ts.map +1 -0
  17. package/dist/component/_generated/component.js +11 -0
  18. package/dist/component/_generated/component.js.map +1 -0
  19. package/dist/component/_generated/dataModel.d.ts +46 -0
  20. package/dist/component/_generated/dataModel.d.ts.map +1 -0
  21. package/dist/component/_generated/dataModel.js +11 -0
  22. package/dist/component/_generated/dataModel.js.map +1 -0
  23. package/dist/component/_generated/server.d.ts +121 -0
  24. package/dist/component/_generated/server.d.ts.map +1 -0
  25. package/dist/component/_generated/server.js +78 -0
  26. package/dist/component/_generated/server.js.map +1 -0
  27. package/dist/component/banks.d.ts +14 -0
  28. package/dist/component/banks.d.ts.map +1 -0
  29. package/dist/component/banks.js +37 -0
  30. package/dist/component/banks.js.map +1 -0
  31. package/dist/component/cashApi.d.ts +59 -0
  32. package/dist/component/cashApi.d.ts.map +1 -0
  33. package/dist/component/cashApi.js +88 -0
  34. package/dist/component/cashApi.js.map +1 -0
  35. package/dist/component/chargesApi.d.ts +64 -0
  36. package/dist/component/chargesApi.d.ts.map +1 -0
  37. package/dist/component/chargesApi.js +106 -0
  38. package/dist/component/chargesApi.js.map +1 -0
  39. package/dist/component/convex.config.d.ts +3 -0
  40. package/dist/component/convex.config.d.ts.map +1 -0
  41. package/dist/component/convex.config.js +6 -0
  42. package/dist/component/convex.config.js.map +1 -0
  43. package/dist/component/customers.d.ts +67 -0
  44. package/dist/component/customers.d.ts.map +1 -0
  45. package/dist/component/customers.js +103 -0
  46. package/dist/component/customers.js.map +1 -0
  47. package/dist/component/customersApi.d.ts +99 -0
  48. package/dist/component/customersApi.d.ts.map +1 -0
  49. package/dist/component/customersApi.js +176 -0
  50. package/dist/component/customersApi.js.map +1 -0
  51. package/dist/component/daviplataApi.d.ts +43 -0
  52. package/dist/component/daviplataApi.d.ts.map +1 -0
  53. package/dist/component/daviplataApi.js +103 -0
  54. package/dist/component/daviplataApi.js.map +1 -0
  55. package/dist/component/epaycoClient.d.ts +84 -0
  56. package/dist/component/epaycoClient.d.ts.map +1 -0
  57. package/dist/component/epaycoClient.js +422 -0
  58. package/dist/component/epaycoClient.js.map +1 -0
  59. package/dist/component/payloads.d.ts +34 -0
  60. package/dist/component/payloads.d.ts.map +1 -0
  61. package/dist/component/payloads.js +45 -0
  62. package/dist/component/payloads.js.map +1 -0
  63. package/dist/component/plans.d.ts +47 -0
  64. package/dist/component/plans.d.ts.map +1 -0
  65. package/dist/component/plans.js +83 -0
  66. package/dist/component/plans.js.map +1 -0
  67. package/dist/component/plansApi.d.ts +64 -0
  68. package/dist/component/plansApi.d.ts.map +1 -0
  69. package/dist/component/plansApi.js +121 -0
  70. package/dist/component/plansApi.js.map +1 -0
  71. package/dist/component/pseApi.d.ts +68 -0
  72. package/dist/component/pseApi.d.ts.map +1 -0
  73. package/dist/component/pseApi.js +113 -0
  74. package/dist/component/pseApi.js.map +1 -0
  75. package/dist/component/rateLimits.d.ts +69 -0
  76. package/dist/component/rateLimits.d.ts.map +1 -0
  77. package/dist/component/rateLimits.js +67 -0
  78. package/dist/component/rateLimits.js.map +1 -0
  79. package/dist/component/safetypayApi.d.ts +35 -0
  80. package/dist/component/safetypayApi.d.ts.map +1 -0
  81. package/dist/component/safetypayApi.js +68 -0
  82. package/dist/component/safetypayApi.js.map +1 -0
  83. package/dist/component/schema.d.ts +200 -0
  84. package/dist/component/schema.d.ts.map +1 -0
  85. package/dist/component/schema.js +104 -0
  86. package/dist/component/schema.js.map +1 -0
  87. package/dist/component/signature.d.ts +11 -0
  88. package/dist/component/signature.d.ts.map +1 -0
  89. package/dist/component/signature.js +28 -0
  90. package/dist/component/signature.js.map +1 -0
  91. package/dist/component/status.d.ts +12 -0
  92. package/dist/component/status.d.ts.map +1 -0
  93. package/dist/component/status.js +55 -0
  94. package/dist/component/status.js.map +1 -0
  95. package/dist/component/subscriptions.d.ts +69 -0
  96. package/dist/component/subscriptions.d.ts.map +1 -0
  97. package/dist/component/subscriptions.js +114 -0
  98. package/dist/component/subscriptions.js.map +1 -0
  99. package/dist/component/subscriptionsApi.d.ts +62 -0
  100. package/dist/component/subscriptionsApi.d.ts.map +1 -0
  101. package/dist/component/subscriptionsApi.js +147 -0
  102. package/dist/component/subscriptionsApi.js.map +1 -0
  103. package/dist/component/tokens.d.ts +31 -0
  104. package/dist/component/tokens.d.ts.map +1 -0
  105. package/dist/component/tokens.js +79 -0
  106. package/dist/component/tokens.js.map +1 -0
  107. package/dist/component/tokensApi.d.ts +18 -0
  108. package/dist/component/tokensApi.d.ts.map +1 -0
  109. package/dist/component/tokensApi.js +53 -0
  110. package/dist/component/tokensApi.js.map +1 -0
  111. package/dist/component/transactions.d.ts +103 -0
  112. package/dist/component/transactions.d.ts.map +1 -0
  113. package/dist/component/transactions.js +177 -0
  114. package/dist/component/transactions.js.map +1 -0
  115. package/dist/component/validators.d.ts +571 -0
  116. package/dist/component/validators.d.ts.map +1 -0
  117. package/dist/component/validators.js +203 -0
  118. package/dist/component/validators.js.map +1 -0
  119. package/dist/component/webhooks.d.ts +55 -0
  120. package/dist/component/webhooks.d.ts.map +1 -0
  121. package/dist/component/webhooks.js +172 -0
  122. package/dist/component/webhooks.js.map +1 -0
  123. package/dist/react/index.d.ts +16 -0
  124. package/dist/react/index.d.ts.map +1 -0
  125. package/dist/react/index.js +43 -0
  126. package/dist/react/index.js.map +1 -0
  127. package/package.json +106 -0
  128. package/src/client/_generated/_ignore.ts +1 -0
  129. package/src/client/index.test.ts +66 -0
  130. package/src/client/index.ts +633 -0
  131. package/src/client/setup.test.ts +26 -0
  132. package/src/component/_generated/api.ts +94 -0
  133. package/src/component/_generated/component.ts +809 -0
  134. package/src/component/_generated/dataModel.ts +60 -0
  135. package/src/component/_generated/server.ts +156 -0
  136. package/src/component/banks.ts +41 -0
  137. package/src/component/cashApi.ts +100 -0
  138. package/src/component/chargesApi.ts +119 -0
  139. package/src/component/convex.config.ts +7 -0
  140. package/src/component/customers.test.ts +122 -0
  141. package/src/component/customers.ts +116 -0
  142. package/src/component/customersApi.ts +206 -0
  143. package/src/component/daviplataApi.ts +119 -0
  144. package/src/component/epaycoApi.test.ts +110 -0
  145. package/src/component/epaycoClient.ts +578 -0
  146. package/src/component/payloads.ts +67 -0
  147. package/src/component/plans.test.ts +129 -0
  148. package/src/component/plans.ts +86 -0
  149. package/src/component/plansApi.ts +135 -0
  150. package/src/component/pseApi.ts +125 -0
  151. package/src/component/rateLimits.ts +67 -0
  152. package/src/component/safetypayApi.ts +78 -0
  153. package/src/component/schema.ts +124 -0
  154. package/src/component/setup.test.helper.ts +10 -0
  155. package/src/component/setup.test.ts +22 -0
  156. package/src/component/signature.ts +38 -0
  157. package/src/component/status.ts +71 -0
  158. package/src/component/subscriptions.test.ts +117 -0
  159. package/src/component/subscriptions.ts +128 -0
  160. package/src/component/subscriptionsApi.ts +172 -0
  161. package/src/component/tokens.ts +89 -0
  162. package/src/component/tokensApi.ts +63 -0
  163. package/src/component/transactions.test.ts +227 -0
  164. package/src/component/transactions.ts +200 -0
  165. package/src/component/validators.ts +245 -0
  166. package/src/component/webhooks.test.ts +137 -0
  167. package/src/component/webhooks.ts +229 -0
  168. package/src/react/index.ts +71 -0
  169. package/src/test.ts +13 -0
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Pure helpers for shaping ePayco request payloads. V8-safe (no SDK / Node
3
+ * imports) so they can be unit-tested and shared across action files.
4
+ */
5
+ export type SplitInput = {
6
+ splitType?: string;
7
+ splitAppId?: string;
8
+ splitMerchantId?: string;
9
+ splitPrimaryReceiver?: string;
10
+ splitPrimaryReceiverFee?: string;
11
+ splitRule?: string;
12
+ splitReceivers?: Array<{
13
+ id: string;
14
+ total: string;
15
+ iva: string;
16
+ base_iva: string;
17
+ fee?: string;
18
+ }>;
19
+ };
20
+ /**
21
+ * Build the `split_*` wire fields for a dispersion. `stringifyReceivers`
22
+ * controls whether `split_receivers` is sent as a JSON string (PSE / cash) or
23
+ * a raw array (credit-card charge), matching the official SDK examples.
24
+ */
25
+ export declare function buildSplitPayload(split: SplitInput | undefined, stringifyReceivers: boolean): Record<string, unknown>;
26
+ /** Convert split receivers (string fields) into the numeric form we persist. */
27
+ export declare function storedReceivers(split: SplitInput | undefined): Array<{
28
+ id: string;
29
+ total: number;
30
+ iva: number;
31
+ base_iva: number;
32
+ fee?: number;
33
+ }> | undefined;
34
+ //# sourceMappingURL=payloads.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payloads.d.ts","sourceRoot":"","sources":["../../src/component/payloads.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,UAAU,GAAG;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,KAAK,CAAC;QACrB,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,GAAG,EAAE,MAAM,CAAC;QACZ,QAAQ,EAAE,MAAM,CAAC;QACjB,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,CAAC,CAAC;CACJ,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,UAAU,GAAG,SAAS,EAC7B,kBAAkB,EAAE,OAAO,GAC1B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAiBzB;AAED,gFAAgF;AAChF,wBAAgB,eAAe,CAC7B,KAAK,EAAE,UAAU,GAAG,SAAS,GAC5B,KAAK,CAAC;IACP,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,CAAC,GAAG,SAAS,CASb"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Pure helpers for shaping ePayco request payloads. V8-safe (no SDK / Node
3
+ * imports) so they can be unit-tested and shared across action files.
4
+ */
5
+ /**
6
+ * Build the `split_*` wire fields for a dispersion. `stringifyReceivers`
7
+ * controls whether `split_receivers` is sent as a JSON string (PSE / cash) or
8
+ * a raw array (credit-card charge), matching the official SDK examples.
9
+ */
10
+ export function buildSplitPayload(split, stringifyReceivers) {
11
+ if (!split)
12
+ return {};
13
+ const out = { splitpayment: "true" };
14
+ if (split.splitType)
15
+ out.split_type = split.splitType;
16
+ if (split.splitAppId)
17
+ out.split_app_id = split.splitAppId;
18
+ if (split.splitMerchantId)
19
+ out.split_merchant_id = split.splitMerchantId;
20
+ if (split.splitPrimaryReceiver)
21
+ out.split_primary_receiver = split.splitPrimaryReceiver;
22
+ if (split.splitPrimaryReceiverFee)
23
+ out.split_primary_receiver_fee = split.splitPrimaryReceiverFee;
24
+ if (split.splitRule)
25
+ out.split_rule = split.splitRule;
26
+ if (split.splitReceivers && split.splitReceivers.length > 0) {
27
+ out.split_receivers = stringifyReceivers
28
+ ? JSON.stringify(split.splitReceivers)
29
+ : split.splitReceivers;
30
+ }
31
+ return out;
32
+ }
33
+ /** Convert split receivers (string fields) into the numeric form we persist. */
34
+ export function storedReceivers(split) {
35
+ if (!split?.splitReceivers)
36
+ return undefined;
37
+ return split.splitReceivers.map((r) => ({
38
+ id: r.id,
39
+ total: Number(r.total),
40
+ iva: Number(r.iva),
41
+ base_iva: Number(r.base_iva),
42
+ ...(r.fee !== undefined ? { fee: Number(r.fee) } : {}),
43
+ }));
44
+ }
45
+ //# sourceMappingURL=payloads.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payloads.js","sourceRoot":"","sources":["../../src/component/payloads.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAkBH;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAC/B,KAA6B,EAC7B,kBAA2B;IAE3B,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACtB,MAAM,GAAG,GAA4B,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC;IAC9D,IAAI,KAAK,CAAC,SAAS;QAAE,GAAG,CAAC,UAAU,GAAG,KAAK,CAAC,SAAS,CAAC;IACtD,IAAI,KAAK,CAAC,UAAU;QAAE,GAAG,CAAC,YAAY,GAAG,KAAK,CAAC,UAAU,CAAC;IAC1D,IAAI,KAAK,CAAC,eAAe;QAAE,GAAG,CAAC,iBAAiB,GAAG,KAAK,CAAC,eAAe,CAAC;IACzE,IAAI,KAAK,CAAC,oBAAoB;QAC5B,GAAG,CAAC,sBAAsB,GAAG,KAAK,CAAC,oBAAoB,CAAC;IAC1D,IAAI,KAAK,CAAC,uBAAuB;QAC/B,GAAG,CAAC,0BAA0B,GAAG,KAAK,CAAC,uBAAuB,CAAC;IACjE,IAAI,KAAK,CAAC,SAAS;QAAE,GAAG,CAAC,UAAU,GAAG,KAAK,CAAC,SAAS,CAAC;IACtD,IAAI,KAAK,CAAC,cAAc,IAAI,KAAK,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5D,GAAG,CAAC,eAAe,GAAG,kBAAkB;YACtC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,cAAc,CAAC;YACtC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC;IAC3B,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,eAAe,CAC7B,KAA6B;IAQ7B,IAAI,CAAC,KAAK,EAAE,cAAc;QAAE,OAAO,SAAS,CAAC;IAC7C,OAAO,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACtC,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;QACtB,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC5B,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACvD,CAAC,CAAC,CAAC;AACN,CAAC"}
@@ -0,0 +1,47 @@
1
+ /** Local persistence for recurring plans. */
2
+ export declare const getLocalPlan: import("convex/server").RegisteredQuery<"public", {
3
+ epaycoPlanId: string;
4
+ }, Promise<{
5
+ _id: import("convex/values").GenericId<"plans">;
6
+ _creationTime: number;
7
+ name: string;
8
+ epaycoPlanId: string;
9
+ status: string;
10
+ amount: number;
11
+ currency: string;
12
+ description: string;
13
+ interval: string;
14
+ intervalCount: number;
15
+ trialDays: number;
16
+ lastSyncedAt: number;
17
+ } | null>>;
18
+ export declare const listLocalPlans: import("convex/server").RegisteredQuery<"public", {
19
+ limit?: number | undefined;
20
+ status?: string | undefined;
21
+ }, Promise<{
22
+ _id: import("convex/values").GenericId<"plans">;
23
+ _creationTime: number;
24
+ name: string;
25
+ epaycoPlanId: string;
26
+ status: string;
27
+ amount: number;
28
+ currency: string;
29
+ description: string;
30
+ interval: string;
31
+ intervalCount: number;
32
+ trialDays: number;
33
+ lastSyncedAt: number;
34
+ }[]>>;
35
+ export declare const upsertPlan: import("convex/server").RegisteredMutation<"internal", {
36
+ name?: string | undefined;
37
+ status?: string | undefined;
38
+ amount?: number | undefined;
39
+ currency?: string | undefined;
40
+ description?: string | undefined;
41
+ interval?: string | undefined;
42
+ intervalCount?: number | undefined;
43
+ trialDays?: number | undefined;
44
+ epaycoPlanId: string;
45
+ lastSyncedAt: number;
46
+ }, Promise<import("convex/values").GenericId<"plans">>>;
47
+ //# sourceMappingURL=plans.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plans.d.ts","sourceRoot":"","sources":["../../src/component/plans.ts"],"names":[],"mappings":"AAGA,6CAA6C;AAE7C,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;UAWvB,CAAC;AAEH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;KAYzB,CAAC;AAEH,eAAO,MAAM,UAAU;;;;;;;;;;;uDAqDrB,CAAC"}
@@ -0,0 +1,83 @@
1
+ import { v } from "convex/values";
2
+ import { internalMutation, query } from "./_generated/server.js";
3
+ /** Local persistence for recurring plans. */
4
+ export const getLocalPlan = query({
5
+ args: { epaycoPlanId: v.string() },
6
+ returns: v.any(),
7
+ handler: async (ctx, args) => {
8
+ return await ctx.db
9
+ .query("plans")
10
+ .withIndex("by_epaycoPlanId", (q) => q.eq("epaycoPlanId", args.epaycoPlanId))
11
+ .first();
12
+ },
13
+ });
14
+ export const listLocalPlans = query({
15
+ args: { status: v.optional(v.string()), limit: v.optional(v.number()) },
16
+ returns: v.any(),
17
+ handler: async (ctx, args) => {
18
+ if (args.status) {
19
+ return await ctx.db
20
+ .query("plans")
21
+ .withIndex("by_status", (q) => q.eq("status", args.status))
22
+ .take(args.limit ?? 100);
23
+ }
24
+ return await ctx.db.query("plans").take(args.limit ?? 100);
25
+ },
26
+ });
27
+ export const upsertPlan = internalMutation({
28
+ args: {
29
+ epaycoPlanId: v.string(),
30
+ name: v.optional(v.string()),
31
+ description: v.optional(v.string()),
32
+ amount: v.optional(v.number()),
33
+ currency: v.optional(v.string()),
34
+ interval: v.optional(v.string()),
35
+ intervalCount: v.optional(v.number()),
36
+ trialDays: v.optional(v.number()),
37
+ status: v.optional(v.string()),
38
+ lastSyncedAt: v.number(),
39
+ },
40
+ returns: v.id("plans"),
41
+ handler: async (ctx, args) => {
42
+ const existing = await ctx.db
43
+ .query("plans")
44
+ .withIndex("by_epaycoPlanId", (q) => q.eq("epaycoPlanId", args.epaycoPlanId))
45
+ .first();
46
+ if (existing) {
47
+ if (existing.lastSyncedAt >= args.lastSyncedAt)
48
+ return existing._id;
49
+ const patch = { lastSyncedAt: args.lastSyncedAt };
50
+ if (args.name !== undefined)
51
+ patch.name = args.name;
52
+ if (args.description !== undefined)
53
+ patch.description = args.description;
54
+ if (args.amount !== undefined)
55
+ patch.amount = args.amount;
56
+ if (args.currency !== undefined)
57
+ patch.currency = args.currency;
58
+ if (args.interval !== undefined)
59
+ patch.interval = args.interval;
60
+ if (args.intervalCount !== undefined)
61
+ patch.intervalCount = args.intervalCount;
62
+ if (args.trialDays !== undefined)
63
+ patch.trialDays = args.trialDays;
64
+ if (args.status !== undefined)
65
+ patch.status = args.status;
66
+ await ctx.db.patch(existing._id, patch);
67
+ return existing._id;
68
+ }
69
+ return await ctx.db.insert("plans", {
70
+ epaycoPlanId: args.epaycoPlanId,
71
+ name: args.name ?? "",
72
+ description: args.description ?? "",
73
+ amount: args.amount ?? 0,
74
+ currency: args.currency ?? "COP",
75
+ interval: args.interval ?? "month",
76
+ intervalCount: args.intervalCount ?? 1,
77
+ trialDays: args.trialDays ?? 0,
78
+ status: args.status ?? "active",
79
+ lastSyncedAt: args.lastSyncedAt,
80
+ });
81
+ },
82
+ });
83
+ //# sourceMappingURL=plans.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plans.js","sourceRoot":"","sources":["../../src/component/plans.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ /** Create a recurring plan. */
2
+ export declare const createPlan: import("convex/server").RegisteredAction<"public", {
3
+ credentials: {
4
+ testMode?: boolean | undefined;
5
+ lang?: string | undefined;
6
+ apiKey: string;
7
+ privateKey: string;
8
+ };
9
+ planInfo: {
10
+ iva?: number | undefined;
11
+ ico?: number | undefined;
12
+ name: string;
13
+ amount: number;
14
+ currency: string;
15
+ description: string;
16
+ interval: string;
17
+ intervalCount: number;
18
+ trialDays: number;
19
+ idPlan: string;
20
+ };
21
+ }, Promise<import("./epaycoClient.js").EpaycoResponse>>;
22
+ export declare const getPlan: import("convex/server").RegisteredAction<"public", {
23
+ credentials: {
24
+ testMode?: boolean | undefined;
25
+ lang?: string | undefined;
26
+ apiKey: string;
27
+ privateKey: string;
28
+ };
29
+ epaycoPlanId: string;
30
+ }, Promise<import("./epaycoClient.js").EpaycoResponse>>;
31
+ export declare const listPlans: import("convex/server").RegisteredAction<"public", {
32
+ credentials: {
33
+ testMode?: boolean | undefined;
34
+ lang?: string | undefined;
35
+ apiKey: string;
36
+ privateKey: string;
37
+ };
38
+ }, Promise<import("./epaycoClient.js").EpaycoResponse>>;
39
+ export declare const updatePlan: import("convex/server").RegisteredAction<"public", {
40
+ name?: string | undefined;
41
+ amount?: number | undefined;
42
+ currency?: string | undefined;
43
+ description?: string | undefined;
44
+ interval?: string | undefined;
45
+ intervalCount?: number | undefined;
46
+ trialDays?: number | undefined;
47
+ credentials: {
48
+ testMode?: boolean | undefined;
49
+ lang?: string | undefined;
50
+ apiKey: string;
51
+ privateKey: string;
52
+ };
53
+ epaycoPlanId: string;
54
+ }, Promise<import("./epaycoClient.js").EpaycoResponse>>;
55
+ export declare const deletePlan: import("convex/server").RegisteredAction<"public", {
56
+ credentials: {
57
+ testMode?: boolean | undefined;
58
+ lang?: string | undefined;
59
+ apiKey: string;
60
+ privateKey: string;
61
+ };
62
+ epaycoPlanId: string;
63
+ }, Promise<import("./epaycoClient.js").EpaycoResponse>>;
64
+ //# sourceMappingURL=plansApi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plansApi.d.ts","sourceRoot":"","sources":["../../src/component/plansApi.ts"],"names":[],"mappings":"AAMA,+BAA+B;AAC/B,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;uDAuCrB,CAAC;AAEH,eAAO,MAAM,OAAO;;;;;;;;uDAUlB,CAAC;AAEH,eAAO,MAAM,SAAS;;;;;;;uDAOpB,CAAC;AAEH,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;uDA6CrB,CAAC;AAEH,eAAO,MAAM,UAAU;;;;;;;;uDAkBrB,CAAC"}
@@ -0,0 +1,121 @@
1
+ import { v } from "convex/values";
2
+ import { action } from "./_generated/server.js";
3
+ import { internal } from "./_generated/api.js";
4
+ import { epaycoCredentialsValidator, planInfoValidator } from "./validators.js";
5
+ import { getEpaycoClient, unwrap } from "./epaycoClient.js";
6
+ /** Create a recurring plan. */
7
+ export const createPlan = action({
8
+ args: {
9
+ credentials: epaycoCredentialsValidator,
10
+ planInfo: planInfoValidator,
11
+ },
12
+ returns: v.any(),
13
+ handler: async (ctx, args) => {
14
+ const p = args.planInfo;
15
+ const epayco = getEpaycoClient(args.credentials);
16
+ const result = unwrap(await epayco.plans.create({
17
+ id_plan: p.idPlan,
18
+ name: p.name,
19
+ description: p.description,
20
+ amount: p.amount,
21
+ currency: p.currency,
22
+ interval: p.interval,
23
+ interval_count: p.intervalCount,
24
+ trial_days: p.trialDays,
25
+ ...(p.iva !== undefined ? { iva: p.iva } : {}),
26
+ ...(p.ico !== undefined ? { ico: p.ico } : {}),
27
+ }));
28
+ await ctx.runMutation(internal.plans.upsertPlan, {
29
+ epaycoPlanId: p.idPlan,
30
+ name: p.name,
31
+ description: p.description,
32
+ amount: p.amount,
33
+ currency: p.currency,
34
+ interval: p.interval,
35
+ intervalCount: p.intervalCount,
36
+ trialDays: p.trialDays,
37
+ status: "active",
38
+ lastSyncedAt: Date.now(),
39
+ });
40
+ return result;
41
+ },
42
+ });
43
+ export const getPlan = action({
44
+ args: {
45
+ credentials: epaycoCredentialsValidator,
46
+ epaycoPlanId: v.string(),
47
+ },
48
+ returns: v.any(),
49
+ handler: async (_ctx, args) => {
50
+ const epayco = getEpaycoClient(args.credentials);
51
+ return unwrap(await epayco.plans.get(args.epaycoPlanId));
52
+ },
53
+ });
54
+ export const listPlans = action({
55
+ args: { credentials: epaycoCredentialsValidator },
56
+ returns: v.any(),
57
+ handler: async (_ctx, args) => {
58
+ const epayco = getEpaycoClient(args.credentials);
59
+ return unwrap(await epayco.plans.list());
60
+ },
61
+ });
62
+ export const updatePlan = action({
63
+ args: {
64
+ credentials: epaycoCredentialsValidator,
65
+ epaycoPlanId: v.string(),
66
+ name: v.optional(v.string()),
67
+ description: v.optional(v.string()),
68
+ amount: v.optional(v.number()),
69
+ currency: v.optional(v.string()),
70
+ interval: v.optional(v.string()),
71
+ intervalCount: v.optional(v.number()),
72
+ trialDays: v.optional(v.number()),
73
+ },
74
+ returns: v.any(),
75
+ handler: async (ctx, args) => {
76
+ const epayco = getEpaycoClient(args.credentials);
77
+ const result = unwrap(await epayco.plans.update(args.epaycoPlanId, {
78
+ ...(args.name ? { name: args.name } : {}),
79
+ ...(args.description ? { description: args.description } : {}),
80
+ ...(args.amount !== undefined ? { amount: args.amount } : {}),
81
+ ...(args.currency ? { currency: args.currency } : {}),
82
+ ...(args.interval ? { interval: args.interval } : {}),
83
+ ...(args.intervalCount !== undefined
84
+ ? { interval_count: args.intervalCount }
85
+ : {}),
86
+ ...(args.trialDays !== undefined ? { trial_days: args.trialDays } : {}),
87
+ }));
88
+ await ctx.runMutation(internal.plans.upsertPlan, {
89
+ epaycoPlanId: args.epaycoPlanId,
90
+ ...(args.name !== undefined ? { name: args.name } : {}),
91
+ ...(args.description !== undefined ? { description: args.description } : {}),
92
+ ...(args.amount !== undefined ? { amount: args.amount } : {}),
93
+ ...(args.currency !== undefined ? { currency: args.currency } : {}),
94
+ ...(args.interval !== undefined ? { interval: args.interval } : {}),
95
+ ...(args.intervalCount !== undefined
96
+ ? { intervalCount: args.intervalCount }
97
+ : {}),
98
+ ...(args.trialDays !== undefined ? { trialDays: args.trialDays } : {}),
99
+ lastSyncedAt: Date.now(),
100
+ });
101
+ return result;
102
+ },
103
+ });
104
+ export const deletePlan = action({
105
+ args: {
106
+ credentials: epaycoCredentialsValidator,
107
+ epaycoPlanId: v.string(),
108
+ },
109
+ returns: v.any(),
110
+ handler: async (ctx, args) => {
111
+ const epayco = getEpaycoClient(args.credentials);
112
+ const result = unwrap(await epayco.plans.delete(args.epaycoPlanId));
113
+ await ctx.runMutation(internal.plans.upsertPlan, {
114
+ epaycoPlanId: args.epaycoPlanId,
115
+ status: "deleted",
116
+ lastSyncedAt: Date.now(),
117
+ });
118
+ return result;
119
+ },
120
+ });
121
+ //# sourceMappingURL=plansApi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plansApi.js","sourceRoot":"","sources":["../../src/component/plansApi.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ /** Create a PSE (bank debit) transaction. Returns a `urlbanco` to redirect to. */
2
+ export declare const createPseTransaction: import("convex/server").RegisteredAction<"public", {
3
+ credentials: {
4
+ testMode?: boolean | undefined;
5
+ lang?: string | undefined;
6
+ apiKey: string;
7
+ privateKey: string;
8
+ };
9
+ userId: string;
10
+ pseInfo: {
11
+ currency?: string | undefined;
12
+ ip?: string | undefined;
13
+ urlResponse?: string | undefined;
14
+ urlConfirmation?: string | undefined;
15
+ extra1?: string | undefined;
16
+ extra2?: string | undefined;
17
+ extra3?: string | undefined;
18
+ split?: {
19
+ splitType?: string | undefined;
20
+ splitAppId?: string | undefined;
21
+ splitMerchantId?: string | undefined;
22
+ splitPrimaryReceiver?: string | undefined;
23
+ splitPrimaryReceiverFee?: string | undefined;
24
+ splitRule?: string | undefined;
25
+ splitReceivers?: {
26
+ fee?: string | undefined;
27
+ id: string;
28
+ total: string;
29
+ iva: string;
30
+ base_iva: string;
31
+ }[] | undefined;
32
+ } | undefined;
33
+ country?: string | undefined;
34
+ cellPhone: string;
35
+ email: string;
36
+ lastName: string;
37
+ name: string;
38
+ description: string;
39
+ docNumber: string;
40
+ docType: string;
41
+ bill: string;
42
+ value: number;
43
+ tax: number;
44
+ taxBase: number;
45
+ bank: string;
46
+ typePerson: "0" | "1";
47
+ };
48
+ }, Promise<import("./epaycoClient.js").EpaycoResponse>>;
49
+ /** Look up a PSE transaction's current state by its ticket id. */
50
+ export declare const getPseTransaction: import("convex/server").RegisteredAction<"public", {
51
+ credentials: {
52
+ testMode?: boolean | undefined;
53
+ lang?: string | undefined;
54
+ apiKey: string;
55
+ privateKey: string;
56
+ };
57
+ ticketId: string;
58
+ }, Promise<import("./epaycoClient.js").EpaycoResponse>>;
59
+ /** Fetch the PSE bank list and cache it locally. */
60
+ export declare const getBanks: import("convex/server").RegisteredAction<"public", {
61
+ credentials: {
62
+ testMode?: boolean | undefined;
63
+ lang?: string | undefined;
64
+ apiKey: string;
65
+ privateKey: string;
66
+ };
67
+ }, Promise<import("./epaycoClient.js").EpaycoResponse>>;
68
+ //# sourceMappingURL=pseApi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pseApi.d.ts","sourceRoot":"","sources":["../../src/component/pseApi.ts"],"names":[],"mappings":"AAQA,kFAAkF;AAClF,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uDA0E/B,CAAC;AAEH,kEAAkE;AAClE,eAAO,MAAM,iBAAiB;;;;;;;;uDAU5B,CAAC;AAEH,oDAAoD;AACpD,eAAO,MAAM,QAAQ;;;;;;;uDAyBnB,CAAC"}
@@ -0,0 +1,113 @@
1
+ import { v } from "convex/values";
2
+ import { action } from "./_generated/server.js";
3
+ import { internal } from "./_generated/api.js";
4
+ import { epaycoCredentialsValidator, pseInfoValidator } from "./validators.js";
5
+ import { getEpaycoClient, unwrap, dataOf, pick } from "./epaycoClient.js";
6
+ import { buildSplitPayload, storedReceivers } from "./payloads.js";
7
+ import { rateLimiter } from "./rateLimits.js";
8
+ /** Create a PSE (bank debit) transaction. Returns a `urlbanco` to redirect to. */
9
+ export const createPseTransaction = action({
10
+ args: {
11
+ credentials: epaycoCredentialsValidator,
12
+ userId: v.string(),
13
+ pseInfo: pseInfoValidator,
14
+ },
15
+ returns: v.any(),
16
+ handler: async (ctx, args) => {
17
+ await rateLimiter.limit(ctx, "createPseTransaction", {
18
+ key: args.userId,
19
+ throws: true,
20
+ });
21
+ const info = args.pseInfo;
22
+ const epayco = getEpaycoClient(args.credentials);
23
+ const result = unwrap(await epayco.bank.create({
24
+ bank: info.bank,
25
+ invoice: info.bill,
26
+ description: info.description,
27
+ value: String(info.value),
28
+ tax: String(info.tax),
29
+ tax_base: String(info.taxBase),
30
+ currency: info.currency ?? "COP",
31
+ type_person: info.typePerson,
32
+ doc_type: info.docType,
33
+ doc_number: info.docNumber,
34
+ name: info.name,
35
+ last_name: info.lastName,
36
+ email: info.email,
37
+ country: info.country ?? "CO",
38
+ cell_phone: info.cellPhone,
39
+ ...(info.ip ? { ip: info.ip } : {}),
40
+ ...(info.urlResponse ? { url_response: info.urlResponse } : {}),
41
+ ...(info.urlConfirmation
42
+ ? { url_confirmation: info.urlConfirmation }
43
+ : {}),
44
+ metodoconfirmacion: "GET",
45
+ extra1: info.extra1 ?? "",
46
+ extra2: info.extra2 ?? "",
47
+ extra3: info.extra3 ?? "",
48
+ ...buildSplitPayload(info.split, true),
49
+ }));
50
+ const data = dataOf(result);
51
+ const refPayco = pick(data, ["ref_payco", "refPayco"]);
52
+ if (refPayco) {
53
+ await ctx.runMutation(internal.transactions.upsertTransaction, {
54
+ userId: args.userId,
55
+ epaycoRef: refPayco,
56
+ epaycoTransactionId: pick(data, [
57
+ "transactionID",
58
+ "transactionId",
59
+ "transaction_id",
60
+ ]),
61
+ paymentMethod: "pse",
62
+ status: "pending",
63
+ amount: info.value,
64
+ currency: info.currency ?? "COP",
65
+ description: info.description,
66
+ customerEmail: info.email,
67
+ bankName: pick(data, ["bank", "banco"]) ?? info.bank,
68
+ splitPayment: info.split !== undefined ? true : undefined,
69
+ splitReceivers: storedReceivers(info.split),
70
+ rawResponse: data,
71
+ lastSyncedAt: Date.now(),
72
+ });
73
+ }
74
+ return result;
75
+ },
76
+ });
77
+ /** Look up a PSE transaction's current state by its ticket id. */
78
+ export const getPseTransaction = action({
79
+ args: {
80
+ credentials: epaycoCredentialsValidator,
81
+ ticketId: v.string(),
82
+ },
83
+ returns: v.any(),
84
+ handler: async (_ctx, args) => {
85
+ const epayco = getEpaycoClient(args.credentials);
86
+ return unwrap(await epayco.bank.get(args.ticketId));
87
+ },
88
+ });
89
+ /** Fetch the PSE bank list and cache it locally. */
90
+ export const getBanks = action({
91
+ args: { credentials: epaycoCredentialsValidator },
92
+ returns: v.any(),
93
+ handler: async (ctx, args) => {
94
+ const epayco = getEpaycoClient(args.credentials);
95
+ const result = unwrap(await epayco.bank.getBanks());
96
+ const list = Array.isArray(result.data)
97
+ ? result.data
98
+ : [];
99
+ for (const bank of list) {
100
+ const bankCode = pick(bank, ["bankCode", "code", "value", "pseCode"]);
101
+ const bankName = pick(bank, ["bankName", "name", "description", "label"]);
102
+ if (bankCode && bankName) {
103
+ await ctx.runMutation(internal.banks.upsertBank, {
104
+ bankCode,
105
+ bankName,
106
+ lastSyncedAt: Date.now(),
107
+ });
108
+ }
109
+ }
110
+ return result;
111
+ },
112
+ });
113
+ //# sourceMappingURL=pseApi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pseApi.js","sourceRoot":"","sources":["../../src/component/pseApi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,0BAA0B,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,kFAAkF;AAClF,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC;IACzC,IAAI,EAAE;QACJ,WAAW,EAAE,0BAA0B;QACvC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;QAClB,OAAO,EAAE,gBAAgB;KAC1B;IACD,OAAO,EAAE,CAAC,CAAC,GAAG,EAAE;IAChB,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC3B,MAAM,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,sBAAsB,EAAE;YACnD,GAAG,EAAE,IAAI,CAAC,MAAM;YAChB,MAAM,EAAE,IAAI;SACb,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC;QAC1B,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAEjD,MAAM,MAAM,GAAG,MAAM,CACnB,MAAM,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;YACvB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,IAAI;YAClB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;YACzB,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;YACrB,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;YAC9B,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,KAAK;YAChC,WAAW,EAAE,IAAI,CAAC,UAAU;YAC5B,QAAQ,EAAE,IAAI,CAAC,OAAO;YACtB,UAAU,EAAE,IAAI,CAAC,SAAS;YAC1B,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,SAAS,EAAE,IAAI,CAAC,QAAQ;YACxB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,IAAI;YAC7B,UAAU,EAAE,IAAI,CAAC,SAAS;YAC1B,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/D,GAAG,CAAC,IAAI,CAAC,eAAe;gBACtB,CAAC,CAAC,EAAE,gBAAgB,EAAE,IAAI,CAAC,eAAe,EAAE;gBAC5C,CAAC,CAAC,EAAE,CAAC;YACP,kBAAkB,EAAE,KAAK;YACzB,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE;YACzB,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE;YACzB,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE;YACzB,GAAG,iBAAiB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC;SACvC,CAAC,CACH,CAAC;QAEF,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC;QAEvD,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,YAAY,CAAC,iBAAiB,EAAE;gBAC7D,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,SAAS,EAAE,QAAQ;gBACnB,mBAAmB,EAAE,IAAI,CAAC,IAAI,EAAE;oBAC9B,eAAe;oBACf,eAAe;oBACf,gBAAgB;iBACjB,CAAC;gBACF,aAAa,EAAE,KAAK;gBACpB,MAAM,EAAE,SAAS;gBACjB,MAAM,EAAE,IAAI,CAAC,KAAK;gBAClB,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,KAAK;gBAChC,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,aAAa,EAAE,IAAI,CAAC,KAAK;gBACzB,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI;gBACpD,YAAY,EAAE,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;gBACzD,cAAc,EAAE,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;gBAC3C,WAAW,EAAE,IAAI;gBACjB,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE;aACzB,CAAC,CAAC;QACL,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;CACF,CAAC,CAAC;AAEH,kEAAkE;AAClE,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC;IACtC,IAAI,EAAE;QACJ,WAAW,EAAE,0BAA0B;QACvC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;KACrB;IACD,OAAO,EAAE,CAAC,CAAC,GAAG,EAAE;IAChB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;QAC5B,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACjD,OAAO,MAAM,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IACtD,CAAC;CACF,CAAC,CAAC;AAEH,oDAAoD;AACpD,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAC;IAC7B,IAAI,EAAE,EAAE,WAAW,EAAE,0BAA0B,EAAE;IACjD,OAAO,EAAE,CAAC,CAAC,GAAG,EAAE;IAChB,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC3B,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAEpD,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;YACrC,CAAC,CAAE,MAAM,CAAC,IAAuC;YACjD,CAAC,CAAC,EAAE,CAAC;QAEP,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;YACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;YACtE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC;YAC1E,IAAI,QAAQ,IAAI,QAAQ,EAAE,CAAC;gBACzB,MAAM,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,EAAE;oBAC/C,QAAQ;oBACR,QAAQ;oBACR,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE;iBACzB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;CACF,CAAC,CAAC"}