@mostajs/payment 0.5.3 → 0.6.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 (44) hide show
  1. package/README.md +45 -0
  2. package/dist/core/abstract-provider.d.ts +22 -0
  3. package/dist/core/abstract-provider.d.ts.map +1 -0
  4. package/dist/core/abstract-provider.js +54 -0
  5. package/dist/core/abstract-provider.js.map +1 -0
  6. package/dist/core/auto-register.d.ts +28 -0
  7. package/dist/core/auto-register.d.ts.map +1 -0
  8. package/dist/core/auto-register.js +90 -0
  9. package/dist/core/auto-register.js.map +1 -0
  10. package/dist/core/checkout-service.d.ts +70 -0
  11. package/dist/core/checkout-service.d.ts.map +1 -0
  12. package/dist/core/checkout-service.js +107 -0
  13. package/dist/core/checkout-service.js.map +1 -0
  14. package/dist/providers/chargily.provider.d.ts +5 -4
  15. package/dist/providers/chargily.provider.d.ts.map +1 -1
  16. package/dist/providers/chargily.provider.js +5 -3
  17. package/dist/providers/chargily.provider.js.map +1 -1
  18. package/dist/providers/manual.provider.d.ts +5 -4
  19. package/dist/providers/manual.provider.d.ts.map +1 -1
  20. package/dist/providers/manual.provider.js +14 -4
  21. package/dist/providers/manual.provider.js.map +1 -1
  22. package/dist/providers/paypal.provider.d.ts +5 -4
  23. package/dist/providers/paypal.provider.d.ts.map +1 -1
  24. package/dist/providers/paypal.provider.js +5 -3
  25. package/dist/providers/paypal.provider.js.map +1 -1
  26. package/dist/providers/satim.provider.d.ts +5 -4
  27. package/dist/providers/satim.provider.d.ts.map +1 -1
  28. package/dist/providers/satim.provider.js +5 -3
  29. package/dist/providers/satim.provider.js.map +1 -1
  30. package/dist/providers/stripe.provider.d.ts +5 -4
  31. package/dist/providers/stripe.provider.d.ts.map +1 -1
  32. package/dist/providers/stripe.provider.js +5 -3
  33. package/dist/providers/stripe.provider.js.map +1 -1
  34. package/dist/schemas/payment.schema.d.ts.map +1 -1
  35. package/dist/schemas/payment.schema.js +5 -0
  36. package/dist/schemas/payment.schema.js.map +1 -1
  37. package/dist/server.d.ts +5 -0
  38. package/dist/server.d.ts.map +1 -1
  39. package/dist/server.js +6 -0
  40. package/dist/server.js.map +1 -1
  41. package/dist/types/index.d.ts +4 -0
  42. package/dist/types/index.d.ts.map +1 -1
  43. package/llms.txt +117 -0
  44. package/package.json +3 -2
package/README.md CHANGED
@@ -67,6 +67,48 @@ import { PaymentPage } from '@mostajs/payment'
67
67
  />
68
68
  ```
69
69
 
70
+ ### Dialectes & orchestration (v0.6, server-side)
71
+
72
+ Chaque fournisseur est un **dialecte de paiement** (modèle calqué sur les
73
+ dialectes de `@mostajs/orm`). La couche d'orchestration crée le checkout chez le
74
+ bon dialecte **et persiste** la `Payment`, puis la règle au webhook — sans recopier
75
+ ce collage dans l'app.
76
+
77
+ ```typescript
78
+ import {
79
+ ensureProvidersFromEnv, createPaymentCheckout, settlePaymentFromWebhook,
80
+ } from '@mostajs/payment/server'
81
+
82
+ ensureProvidersFromEnv() // enregistre les dialectes configurés dans .env (cascade MOSTA_ENV)
83
+
84
+ // 1) Créer un paiement (sélection du dialecte par devise : DZD → Chargily)
85
+ const { checkout, payment } = await createPaymentCheckout({
86
+ dialect, // IDialect @mostajs/data-plug
87
+ orderId: campaignId,
88
+ amount: 50000, currency: 'DZD', // unités de base (PAS centimes)
89
+ successUrl, cancelUrl, webhookUrl,
90
+ metadata: { campaignId, planSlug: 'gold' },
91
+ })
92
+ // → redirige l'utilisateur vers checkout.url ; payment.status === 'pending'
93
+
94
+ // 2) Webhook : régler la Payment + déclencher le métier
95
+ export async function POST(req: Request) {
96
+ const s = await settlePaymentFromWebhook({
97
+ dialect, providerName: 'chargily',
98
+ body: await req.text(), headers: req.headers,
99
+ })
100
+ if (!s.ok) return Response.json({ error: s.reason }, { status: 400 })
101
+ if (s.status === 'paid') {
102
+ // activer la campagne sponsor (logique métier du consommateur)
103
+ }
104
+ return Response.json({ received: true })
105
+ }
106
+ ```
107
+
108
+ Clés (y compris **clés de test** `sk_test_`/`test_sk_`) lues depuis le `.env` via
109
+ `@mostajs/config` — jamais en dur dans le code. Le `ManualProvider` permet de
110
+ confirmer un virement/cash hors-ligne (`POST { orderId, status:'paid' }`).
111
+
70
112
  ## API
71
113
 
72
114
  | Export | Entry | Description |
@@ -80,6 +122,9 @@ import { PaymentPage } from '@mostajs/payment'
80
122
  | `createCheckoutHandler(config)` | `./server` | Next.js checkout route |
81
123
  | `createPaymentHandlers(dialect)` | `./server` | CRUD route handlers |
82
124
  | `getPaymentRepo(dialect)` | `./server` | Payment repository |
125
+ | `AbstractPaymentProvider` | `./server` | Base de dialecte (v0.6) — étendue par les 5 providers |
126
+ | `createPaymentCheckout(input)` | `./server` | Checkout + persistance `Payment` (v0.6) |
127
+ | `settlePaymentFromWebhook(input)` | `./server` | Vérifie le webhook + règle la `Payment` (v0.6) |
83
128
 
84
129
  ## Environment
85
130
 
@@ -0,0 +1,22 @@
1
+ import type { PaymentProvider, CheckoutParams, CheckoutResult, WebhookEvent } from './provider.interface.js';
2
+ /**
3
+ * Base abstraite des dialectes de paiement. Chaque fournisseur
4
+ * (Stripe, Chargily, Satim, PayPal, Manual) l'étend et n'implémente
5
+ * que ses primitives.
6
+ */
7
+ export declare abstract class AbstractPaymentProvider implements PaymentProvider {
8
+ abstract readonly name: string;
9
+ abstract readonly supportedCurrencies: string[];
10
+ abstract readonly supportedMethods: string[];
11
+ createCheckout(params: CheckoutParams): Promise<CheckoutResult>;
12
+ verifyWebhook(body: string, signature: string): Promise<WebhookEvent>;
13
+ /** Crée la session de paiement chez le fournisseur (appel API / redirection). */
14
+ protected abstract doCheckout(params: CheckoutParams): Promise<CheckoutResult>;
15
+ /** Vérifie la signature et normalise l'event reçu du fournisseur. */
16
+ protected abstract doVerifyWebhook(body: string, signature: string): Promise<WebhookEvent>;
17
+ /** Vrai si ce dialecte gère la devise (joker '*' inclus). */
18
+ supportsCurrency(currency: string | null | undefined): boolean;
19
+ /** Garde commune : orderId présent, montant > 0, devise supportée. */
20
+ protected assertValidCheckout(params: CheckoutParams): void;
21
+ }
22
+ //# sourceMappingURL=abstract-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abstract-provider.d.ts","sourceRoot":"","sources":["../../src/core/abstract-provider.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EACV,eAAe,EAAE,cAAc,EAAE,cAAc,EAAE,YAAY,EAC9D,MAAM,yBAAyB,CAAA;AAEhC;;;;GAIG;AACH,8BAAsB,uBAAwB,YAAW,eAAe;IAEtE,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,EAAE,CAAA;IAC/C,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,EAAE,CAAA;IAKtC,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;IAU/D,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAK3E,iFAAiF;IACjF,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;IAC9E,qEAAqE;IACrE,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAG1F,6DAA6D;IAC7D,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO;IAK9D,sEAAsE;IACtE,SAAS,CAAC,mBAAmB,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;CAU5D"}
@@ -0,0 +1,54 @@
1
+ // @mostajs/payment — AbstractPaymentProvider (base de dialecte de paiement)
2
+ // Author: Dr Hamid MADANI <drmdh@msn.com>
3
+ //
4
+ // Calqué sur le modèle des dialectes de @mostajs/orm (`AbstractSqlDialect`) :
5
+ // IDialect → PaymentProvider (le contrat)
6
+ // AbstractSqlDialect → AbstractPaymentProvider (base : orchestration + primitives abstraites)
7
+ // SqliteDialect… → StripeProvider / ChargilyProvider / … (un fournisseur = un dialecte)
8
+ // getDialect/registry → payment-engine (register/get/forCurrency)
9
+ //
10
+ // La base factorise la logique partagée (validation, garantie metadata.orderId,
11
+ // garde de devise) en *méthodes template* publiques `createCheckout`/`verifyWebhook`,
12
+ // et délègue les spécificités fournisseur aux *primitives* `protected abstract`
13
+ // `doCheckout`/`doVerifyWebhook` — exactement comme `AbstractSqlDialect` expose
14
+ // `create`/`update` et délègue à `doExecuteRun`/`doExecuteQuery`.
15
+ /**
16
+ * Base abstraite des dialectes de paiement. Chaque fournisseur
17
+ * (Stripe, Chargily, Satim, PayPal, Manual) l'étend et n'implémente
18
+ * que ses primitives.
19
+ */
20
+ export class AbstractPaymentProvider {
21
+ // ── Méthode template : créer un checkout ──
22
+ // Valide, normalise (garantit metadata.orderId pour le matching webhook),
23
+ // puis délègue au dialecte concret.
24
+ async createCheckout(params) {
25
+ this.assertValidCheckout(params);
26
+ const normalized = {
27
+ ...params,
28
+ metadata: { orderId: params.orderId, ...(params.metadata ?? {}) },
29
+ };
30
+ return this.doCheckout(normalized);
31
+ }
32
+ // ── Méthode template : vérifier/parser un webhook ──
33
+ async verifyWebhook(body, signature) {
34
+ return this.doVerifyWebhook(body, signature);
35
+ }
36
+ // ── Helpers partagés ──
37
+ /** Vrai si ce dialecte gère la devise (joker '*' inclus). */
38
+ supportsCurrency(currency) {
39
+ const c = String(currency ?? '').toUpperCase();
40
+ return this.supportedCurrencies.includes('*') || this.supportedCurrencies.includes(c);
41
+ }
42
+ /** Garde commune : orderId présent, montant > 0, devise supportée. */
43
+ assertValidCheckout(params) {
44
+ if (!params.orderId)
45
+ throw new Error(`[${this.name}] orderId is required`);
46
+ if (!(params.amount > 0))
47
+ throw new Error(`[${this.name}] amount must be > 0`);
48
+ if (params.currency && !this.supportsCurrency(params.currency)) {
49
+ throw new Error(`[${this.name}] currency '${params.currency}' not supported ` +
50
+ `(supported: ${this.supportedCurrencies.join(', ')})`);
51
+ }
52
+ }
53
+ }
54
+ //# sourceMappingURL=abstract-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abstract-provider.js","sourceRoot":"","sources":["../../src/core/abstract-provider.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,0CAA0C;AAC1C,EAAE;AACF,8EAA8E;AAC9E,gEAAgE;AAChE,kGAAkG;AAClG,gGAAgG;AAChG,oEAAoE;AACpE,EAAE;AACF,gFAAgF;AAChF,sFAAsF;AACtF,gFAAgF;AAChF,gFAAgF;AAChF,kEAAkE;AAMlE;;;;GAIG;AACH,MAAM,OAAgB,uBAAuB;IAM3C,6CAA6C;IAC7C,0EAA0E;IAC1E,oCAAoC;IACpC,KAAK,CAAC,cAAc,CAAC,MAAsB;QACzC,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAA;QAChC,MAAM,UAAU,GAAmB;YACjC,GAAG,MAAM;YACT,QAAQ,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE;SAClE,CAAA;QACD,OAAO,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAA;IACpC,CAAC;IAED,sDAAsD;IACtD,KAAK,CAAC,aAAa,CAAC,IAAY,EAAE,SAAiB;QACjD,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;IAC9C,CAAC;IAQD,yBAAyB;IACzB,6DAA6D;IAC7D,gBAAgB,CAAC,QAAmC;QAClD,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAA;QAC9C,OAAO,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;IACvF,CAAC;IAED,sEAAsE;IAC5D,mBAAmB,CAAC,MAAsB;QAClD,IAAI,CAAC,MAAM,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,uBAAuB,CAAC,CAAA;QAC1E,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,sBAAsB,CAAC,CAAA;QAC9E,IAAI,MAAM,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC/D,MAAM,IAAI,KAAK,CACb,IAAI,IAAI,CAAC,IAAI,eAAe,MAAM,CAAC,QAAQ,kBAAkB;gBAC7D,eAAe,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CACtD,CAAA;QACH,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,28 @@
1
+ import type { ProviderName } from '../lib/webhook-helpers.js';
2
+ export interface AutoRegisterOptions {
3
+ /**
4
+ * Sous-ensemble (et ORDRE) de providers à considérer.
5
+ * Défaut : ['chargily', 'satim', 'paypal', 'stripe'] — `manual` exclu
6
+ * sauf s'il est listé ici explicitement.
7
+ */
8
+ providers?: ProviderName[];
9
+ /** Provider par défaut après enregistrement. Défaut : 'stripe' si présent, sinon le 1er. */
10
+ setDefault?: ProviderName;
11
+ /** Réenregistre même si déjà présent. Défaut : false (idempotent). */
12
+ force?: boolean;
13
+ }
14
+ /**
15
+ * Enregistre dans le registre les providers configurés via l'environnement
16
+ * (cascade `MOSTA_ENV` de `@mostajs/config`). Retourne la liste des noms
17
+ * effectivement enregistrés par cet appel.
18
+ *
19
+ * @example
20
+ * import { registerProvidersFromEnv, getProviderForCurrency } from '@mostajs/payment/server'
21
+ * registerProvidersFromEnv() // Stripe + Chargily si env présents
22
+ * const p = getProviderForCurrency('DZD') // → Chargily
23
+ */
24
+ export declare function registerProvidersFromEnv(opts?: AutoRegisterOptions): string[];
25
+ export declare function ensureProvidersFromEnv(opts?: AutoRegisterOptions): string[];
26
+ /** Réinitialise le verrou de `ensureProvidersFromEnv` (tests). */
27
+ export declare function resetEnsuredProviders(): void;
28
+ //# sourceMappingURL=auto-register.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-register.d.ts","sourceRoot":"","sources":["../../src/core/auto-register.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAE7D,MAAM,WAAW,mBAAmB;IAClC;;;;OAIG;IACH,SAAS,CAAC,EAAE,YAAY,EAAE,CAAA;IAC1B,4FAA4F;IAC5F,UAAU,CAAC,EAAE,YAAY,CAAA;IACzB,sEAAsE;IACtE,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AA2BD;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,GAAE,mBAAwB,GAAG,MAAM,EAAE,CAoBjF;AAQD,wBAAgB,sBAAsB,CAAC,IAAI,GAAE,mBAAwB,GAAG,MAAM,EAAE,CAM/E;AAED,kEAAkE;AAClE,wBAAgB,qBAAqB,IAAI,IAAI,CAAqB"}
@@ -0,0 +1,90 @@
1
+ // @mostajs/payment — Auto-enregistrement des providers depuis l'environnement
2
+ // Author: Dr Hamid MADANI <drmdh@msn.com>
3
+ //
4
+ // Factorise le boilerplate « enregistrer Stripe/Chargily/Satim/PayPal/Manual
5
+ // selon les variables d'env présentes » que chaque application réécrivait.
6
+ // Idempotent : un provider déjà enregistré n'est pas réenregistré (sauf force).
7
+ //
8
+ // Ordre d'enregistrement = ordre de résolution par devise (cf.
9
+ // getProviderForCurrency, scan linéaire) : les providers à devise SPÉCIFIQUE
10
+ // (Chargily/Satim → DZD) sont enregistrés AVANT Stripe (joker '*') pour que
11
+ // DZD route vers Chargily et non Stripe. `manual` (joker '*') n'est enregistré
12
+ // que s'il est explicitement demandé, pour éviter qu'il ne capte toutes les
13
+ // devises.
14
+ import { getEnv } from '@mostajs/config';
15
+ import { registerProvider, setDefaultProvider, listProviders, } from './payment-engine.js';
16
+ import { createStripeProvider } from '../providers/stripe.provider.js';
17
+ import { createChargilyProvider } from '../providers/chargily.provider.js';
18
+ import { createSatimProvider } from '../providers/satim.provider.js';
19
+ import { createPayPalProvider } from '../providers/paypal.provider.js';
20
+ import { createManualProvider } from '../providers/manual.provider.js';
21
+ /** Indique si l'environnement contient de quoi instancier ce provider. */
22
+ function isConfigured(name) {
23
+ switch (name) {
24
+ case 'stripe': return !!getEnv('STRIPE_SECRET_KEY');
25
+ case 'chargily': return !!(getEnv('CHARGILY_SECRET_KEY') ?? getEnv('CHARGILY_API_KEY'));
26
+ case 'satim': return !!getEnv('SATIM_MERCHANT_ID');
27
+ case 'paypal': return !!getEnv('PAYPAL_CLIENT_ID');
28
+ case 'manual': return true; // aucun secret requis
29
+ default: return false;
30
+ }
31
+ }
32
+ function instantiate(name) {
33
+ switch (name) {
34
+ case 'stripe': return createStripeProvider();
35
+ case 'chargily': return createChargilyProvider();
36
+ case 'satim': return createSatimProvider();
37
+ case 'paypal': return createPayPalProvider();
38
+ case 'manual': return createManualProvider();
39
+ default: return null;
40
+ }
41
+ }
42
+ const DEFAULT_ORDER = ['chargily', 'satim', 'paypal', 'stripe'];
43
+ /**
44
+ * Enregistre dans le registre les providers configurés via l'environnement
45
+ * (cascade `MOSTA_ENV` de `@mostajs/config`). Retourne la liste des noms
46
+ * effectivement enregistrés par cet appel.
47
+ *
48
+ * @example
49
+ * import { registerProvidersFromEnv, getProviderForCurrency } from '@mostajs/payment/server'
50
+ * registerProvidersFromEnv() // Stripe + Chargily si env présents
51
+ * const p = getProviderForCurrency('DZD') // → Chargily
52
+ */
53
+ export function registerProvidersFromEnv(opts = {}) {
54
+ const order = opts.providers ?? DEFAULT_ORDER;
55
+ const already = new Set(listProviders());
56
+ const registered = [];
57
+ for (const name of order) {
58
+ if (!opts.force && already.has(name))
59
+ continue;
60
+ if (!isConfigured(name))
61
+ continue;
62
+ const provider = instantiate(name);
63
+ if (!provider)
64
+ continue;
65
+ registerProvider(provider);
66
+ registered.push(name);
67
+ }
68
+ // Provider par défaut.
69
+ const names = listProviders();
70
+ const wanted = opts.setDefault ?? (names.includes('stripe') ? 'stripe' : names[0]);
71
+ if (wanted && names.includes(wanted))
72
+ setDefaultProvider(wanted);
73
+ return registered;
74
+ }
75
+ /**
76
+ * Variante idempotente « best-effort » : enregistre les providers depuis
77
+ * l'env une seule fois, et renvoie le registre courant. Pratique en tête
78
+ * de route handler (App Router) sans se soucier des appels répétés.
79
+ */
80
+ let _ensured = false;
81
+ export function ensureProvidersFromEnv(opts = {}) {
82
+ if (!_ensured) {
83
+ registerProvidersFromEnv(opts);
84
+ _ensured = true;
85
+ }
86
+ return listProviders();
87
+ }
88
+ /** Réinitialise le verrou de `ensureProvidersFromEnv` (tests). */
89
+ export function resetEnsuredProviders() { _ensured = false; }
90
+ //# sourceMappingURL=auto-register.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-register.js","sourceRoot":"","sources":["../../src/core/auto-register.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,70 @@
1
+ import type { IDialect } from '@mostajs/data-plug';
2
+ import type { CheckoutResult, WebhookEvent } from './provider.interface.js';
3
+ import type { PaymentDTO, PaymentMethodType, PaymentStatus } from '../types/index.js';
4
+ import type { ProviderName } from '../lib/webhook-helpers.js';
5
+ export interface CreateCheckoutInput {
6
+ /** Dialecte de persistance (data-plug/orm) où écrire la ligne Payment. */
7
+ dialect: IDialect;
8
+ /** Identifiant d'ordre — clé de matching avec le webhook. */
9
+ orderId: string;
10
+ /** Montant en unités de base de la devise (PAS en centimes). */
11
+ amount: number;
12
+ /** Code ISO 4217 (ex: 'DZD', 'EUR'). */
13
+ currency: string;
14
+ description?: string;
15
+ successUrl: string;
16
+ cancelUrl: string;
17
+ webhookUrl?: string;
18
+ /** Méthode persistée sur la ligne Payment (défaut 'card'). */
19
+ method?: PaymentMethodType;
20
+ /** Contexte métier propagé au provider et restitué au webhook. */
21
+ metadata?: Record<string, string>;
22
+ /** Force un dialecte ; sinon résolu par devise (registre → mapping devise). */
23
+ providerName?: ProviderName | string;
24
+ }
25
+ export interface CreateCheckoutOutput {
26
+ payment: PaymentDTO;
27
+ checkout: CheckoutResult;
28
+ /** Nom du dialecte effectivement utilisé. */
29
+ provider: string;
30
+ }
31
+ /**
32
+ * Crée un checkout chez le bon dialecte ET persiste la Payment (pending).
33
+ *
34
+ * @example
35
+ * const { payment, checkout } = await createPaymentCheckout({
36
+ * dialect, orderId, amount: 50000, currency: 'DZD',
37
+ * successUrl, cancelUrl, webhookUrl,
38
+ * metadata: { campaignId, planSlug },
39
+ * })
40
+ * redirect(checkout.url) // si non null
41
+ */
42
+ export declare function createPaymentCheckout(input: CreateCheckoutInput): Promise<CreateCheckoutOutput>;
43
+ export interface SettleWebhookInput {
44
+ /** Dialecte de persistance où retrouver/mettre à jour la Payment. */
45
+ dialect: IDialect;
46
+ /** Nom du dialecte émetteur du webhook. */
47
+ providerName: ProviderName;
48
+ /** Corps brut de la requête (req.text() — signature calculée dessus). */
49
+ body: string;
50
+ /** Headers HTTP de la requête. */
51
+ headers: Headers | Record<string, string>;
52
+ }
53
+ export interface SettleWebhookOutput {
54
+ /** false si signature invalide / payload malformé / provider inconnu. */
55
+ ok: boolean;
56
+ reason?: string;
57
+ event?: WebhookEvent;
58
+ orderId?: string | null;
59
+ /** Statut déduit de l'event (undefined si event neutre). */
60
+ status?: PaymentStatus;
61
+ /** Payment mise à jour (null si introuvable ou statut non terminal). */
62
+ payment?: PaymentDTO | null;
63
+ }
64
+ /**
65
+ * Vérifie le webhook, en déduit un statut, et règle la Payment correspondante.
66
+ * Le consommateur lit le retour pour exécuter sa logique métier
67
+ * (ex: activer la campagne sponsor) si `status === 'paid'`.
68
+ */
69
+ export declare function settlePaymentFromWebhook(input: SettleWebhookInput): Promise<SettleWebhookOutput>;
70
+ //# sourceMappingURL=checkout-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkout-service.d.ts","sourceRoot":"","sources":["../../src/core/checkout-service.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,KAAK,EAAmB,cAAc,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAC5F,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAOrF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAI7D,MAAM,WAAW,mBAAmB;IAClC,0EAA0E;IAC1E,OAAO,EAAE,QAAQ,CAAA;IACjB,6DAA6D;IAC7D,OAAO,EAAE,MAAM,CAAA;IACf,gEAAgE;IAChE,MAAM,EAAE,MAAM,CAAA;IACd,wCAAwC;IACxC,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,8DAA8D;IAC9D,MAAM,CAAC,EAAE,iBAAiB,CAAA;IAC1B,kEAAkE;IAClE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACjC,+EAA+E;IAC/E,YAAY,CAAC,EAAE,YAAY,GAAG,MAAM,CAAA;CACrC;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,UAAU,CAAA;IACnB,QAAQ,EAAE,cAAc,CAAA;IACxB,6CAA6C;IAC7C,QAAQ,EAAE,MAAM,CAAA;CACjB;AAgBD;;;;;;;;;;GAUG;AACH,wBAAsB,qBAAqB,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CA4BrG;AAID,MAAM,WAAW,kBAAkB;IACjC,qEAAqE;IACrE,OAAO,EAAE,QAAQ,CAAA;IACjB,2CAA2C;IAC3C,YAAY,EAAE,YAAY,CAAA;IAC1B,yEAAyE;IACzE,IAAI,EAAE,MAAM,CAAA;IACZ,kCAAkC;IAClC,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAC1C;AAED,MAAM,WAAW,mBAAmB;IAClC,yEAAyE;IACzE,EAAE,EAAE,OAAO,CAAA;IACX,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,YAAY,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,4DAA4D;IAC5D,MAAM,CAAC,EAAE,aAAa,CAAA;IACtB,wEAAwE;IACxE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI,CAAA;CAC5B;AAED;;;;GAIG;AACH,wBAAsB,wBAAwB,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CA2BtG"}
@@ -0,0 +1,107 @@
1
+ // @mostajs/payment — Orchestration checkout ↔ persistance ↔ règlement webhook
2
+ // Author: Dr Hamid MADANI <drmdh@msn.com>
3
+ //
4
+ // Couche d'orchestration au-dessus des dialectes de paiement — l'équivalent
5
+ // de `BaseRepository` / `createConnection` de @mostajs/orm, qui *utilise* un
6
+ // dialecte sans le réimplémenter :
7
+ //
8
+ // createPaymentCheckout() → sélectionne le dialecte (registre/devise),
9
+ // crée le checkout chez le fournisseur, ET
10
+ // persiste une ligne Payment (status 'pending').
11
+ // settlePaymentFromWebhook() → vérifie le webhook, mappe l'event vers un
12
+ // statut, retrouve la Payment par orderId et
13
+ // la met à jour (paid/failed/refunded).
14
+ //
15
+ // La logique métier post-paiement (activer une campagne, marquer une
16
+ // inscription, …) reste au consommateur, qui lit le résultat retourné.
17
+ import { getProvider, getProviderForCurrency } from './payment-engine.js';
18
+ import { getPaymentRepo } from '../lib/payment-factory.js';
19
+ import { handleProviderWebhook, isPaidEvent, isFailedEvent, isRefundedEvent, extractOrderId, pickProviderByCurrency, getProviderByName, isKnownProvider, } from '../lib/webhook-helpers.js';
20
+ /** Résout le dialecte : explicite > registre-par-devise > mapping devise (instancié env). */
21
+ function resolveProvider(input) {
22
+ if (input.providerName) {
23
+ try {
24
+ return getProvider(input.providerName);
25
+ }
26
+ catch {
27
+ if (isKnownProvider(input.providerName))
28
+ return getProviderByName(input.providerName);
29
+ throw new Error(`[payment] Provider '${input.providerName}' not registered and not a known provider`);
30
+ }
31
+ }
32
+ const byReg = getProviderForCurrency(input.currency);
33
+ if (byReg)
34
+ return byReg;
35
+ return pickProviderByCurrency(input.currency).provider;
36
+ }
37
+ /**
38
+ * Crée un checkout chez le bon dialecte ET persiste la Payment (pending).
39
+ *
40
+ * @example
41
+ * const { payment, checkout } = await createPaymentCheckout({
42
+ * dialect, orderId, amount: 50000, currency: 'DZD',
43
+ * successUrl, cancelUrl, webhookUrl,
44
+ * metadata: { campaignId, planSlug },
45
+ * })
46
+ * redirect(checkout.url) // si non null
47
+ */
48
+ export async function createPaymentCheckout(input) {
49
+ const provider = resolveProvider(input);
50
+ const metadata = { ...(input.metadata ?? {}), orderId: input.orderId };
51
+ const checkout = await provider.createCheckout({
52
+ orderId: input.orderId,
53
+ amount: input.amount,
54
+ currency: input.currency,
55
+ description: input.description,
56
+ successUrl: input.successUrl,
57
+ cancelUrl: input.cancelUrl,
58
+ webhookUrl: input.webhookUrl,
59
+ metadata,
60
+ });
61
+ const repo = getPaymentRepo(input.dialect);
62
+ const payment = await repo.create({
63
+ orderId: input.orderId,
64
+ amount: input.amount,
65
+ currency: input.currency,
66
+ method: input.method ?? 'card',
67
+ status: 'pending',
68
+ provider: provider.name,
69
+ transactionRef: checkout.sessionId,
70
+ metadata,
71
+ });
72
+ return { payment, checkout, provider: provider.name };
73
+ }
74
+ /**
75
+ * Vérifie le webhook, en déduit un statut, et règle la Payment correspondante.
76
+ * Le consommateur lit le retour pour exécuter sa logique métier
77
+ * (ex: activer la campagne sponsor) si `status === 'paid'`.
78
+ */
79
+ export async function settlePaymentFromWebhook(input) {
80
+ const res = await handleProviderWebhook({
81
+ body: input.body, headers: input.headers, providerName: input.providerName,
82
+ });
83
+ if (!res.ok)
84
+ return { ok: false, reason: `${res.reason}: ${res.error}` };
85
+ const event = res.event;
86
+ const orderId = extractOrderId(event);
87
+ let status;
88
+ if (isPaidEvent(event))
89
+ status = 'paid';
90
+ else if (isRefundedEvent(event))
91
+ status = 'refunded';
92
+ else if (isFailedEvent(event))
93
+ status = 'failed';
94
+ let payment = null;
95
+ if (orderId && status) {
96
+ const repo = getPaymentRepo(input.dialect);
97
+ const existing = await repo.findOne({ orderId });
98
+ if (existing) {
99
+ payment = await repo.update(existing.id, {
100
+ status,
101
+ ...(status === 'paid' ? { paidAt: new Date() } : {}),
102
+ });
103
+ }
104
+ }
105
+ return { ok: true, event, orderId, status, payment };
106
+ }
107
+ //# sourceMappingURL=checkout-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkout-service.js","sourceRoot":"","sources":["../../src/core/checkout-service.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
- import type { PaymentProvider, CheckoutParams, CheckoutResult, CustomerParams, WebhookEvent } from '../core/provider.interface.js';
1
+ import type { CheckoutParams, CheckoutResult, CustomerParams, WebhookEvent } from '../core/provider.interface.js';
2
+ import { AbstractPaymentProvider } from '../core/abstract-provider.js';
2
3
  export interface ChargilyConfig {
3
4
  apiKey: string;
4
5
  testMode?: boolean;
@@ -6,7 +7,7 @@ export interface ChargilyConfig {
6
7
  failureUrl: string;
7
8
  webhookUrl?: string;
8
9
  }
9
- export declare class ChargilyProvider implements PaymentProvider {
10
+ export declare class ChargilyProvider extends AbstractPaymentProvider {
10
11
  private config;
11
12
  readonly name = "chargily";
12
13
  readonly supportedCurrencies: string[];
@@ -14,14 +15,14 @@ export declare class ChargilyProvider implements PaymentProvider {
14
15
  private baseUrl;
15
16
  constructor(config: ChargilyConfig);
16
17
  private headers;
17
- createCheckout(params: CheckoutParams): Promise<CheckoutResult>;
18
+ protected doCheckout(params: CheckoutParams): Promise<CheckoutResult>;
18
19
  createCustomer(params: CustomerParams): Promise<string>;
19
20
  getCustomer(customerId: string): Promise<Record<string, unknown>>;
20
21
  /**
21
22
  * Get payment details by checkout ID.
22
23
  */
23
24
  getPayment(checkoutId: string): Promise<Record<string, unknown>>;
24
- verifyWebhook(body: string, signature: string): Promise<WebhookEvent>;
25
+ protected doVerifyWebhook(body: string, signature: string): Promise<WebhookEvent>;
25
26
  }
26
27
  /**
27
28
  * Create a Chargily provider from environment variables.
@@ -1 +1 @@
1
- {"version":3,"file":"chargily.provider.d.ts","sourceRoot":"","sources":["../../src/providers/chargily.provider.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AAIlI,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,qBAAa,gBAAiB,YAAW,eAAe;IAO1C,OAAO,CAAC,MAAM;IAN1B,QAAQ,CAAC,IAAI,cAAa;IAC1B,QAAQ,CAAC,mBAAmB,WAAU;IACtC,QAAQ,CAAC,gBAAgB,WAAsB;IAE/C,OAAO,CAAC,OAAO,CAAQ;gBAEH,MAAM,EAAE,cAAc;IAM1C,OAAO,CAAC,OAAO;IAOT,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;IAwB/D,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;IAgBvD,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAMvE;;OAEG;IACG,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAMhE,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;CA4C5E;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,gBAAgB,CAQzF"}
1
+ {"version":3,"file":"chargily.provider.d.ts","sourceRoot":"","sources":["../../src/providers/chargily.provider.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AACjH,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAA;AAItE,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,qBAAa,gBAAiB,SAAQ,uBAAuB;IAO/C,OAAO,CAAC,MAAM;IAN1B,QAAQ,CAAC,IAAI,cAAa;IAC1B,QAAQ,CAAC,mBAAmB,WAAU;IACtC,QAAQ,CAAC,gBAAgB,WAAsB;IAE/C,OAAO,CAAC,OAAO,CAAQ;gBAEH,MAAM,EAAE,cAAc;IAO1C,OAAO,CAAC,OAAO;cAOC,UAAU,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;IAwBrE,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;IAgBvD,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAMvE;;OAEG;IACG,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;cAMtD,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;CA4CxF;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,gBAAgB,CAQzF"}
@@ -2,15 +2,17 @@
2
2
  // Author: Dr Hamid MADANI drmdh@msn.com
3
3
  // Ref: https://dev.chargily.com/pay-v2/api-reference/
4
4
  // GitHub: https://github.com/chargily
5
+ import { AbstractPaymentProvider } from '../core/abstract-provider.js';
5
6
  import { getEnv } from '@mostajs/config';
6
7
  import { createHmac } from 'node:crypto';
7
- export class ChargilyProvider {
8
+ export class ChargilyProvider extends AbstractPaymentProvider {
8
9
  config;
9
10
  name = 'chargily';
10
11
  supportedCurrencies = ['DZD'];
11
12
  supportedMethods = ['cib', 'edahabia'];
12
13
  baseUrl;
13
14
  constructor(config) {
15
+ super();
14
16
  this.config = config;
15
17
  this.baseUrl = config.testMode
16
18
  ? 'https://pay.chargily.net/test/api/v2'
@@ -22,7 +24,7 @@ export class ChargilyProvider {
22
24
  'Content-Type': 'application/json',
23
25
  };
24
26
  }
25
- async createCheckout(params) {
27
+ async doCheckout(params) {
26
28
  const res = await fetch(`${this.baseUrl}/checkouts`, {
27
29
  method: 'POST',
28
30
  headers: this.headers(),
@@ -73,7 +75,7 @@ export class ChargilyProvider {
73
75
  throw new Error(`[chargily] Get payment failed: ${res.statusText}`);
74
76
  return res.json();
75
77
  }
76
- async verifyWebhook(body, signature) {
78
+ async doVerifyWebhook(body, signature) {
77
79
  // Chargily signs with HMAC-SHA256 using the API key as secret
78
80
  const computed = createHmac('sha256', this.config.apiKey).update(body).digest('hex');
79
81
  if (computed !== signature) {
@@ -1 +1 @@
1
- {"version":3,"file":"chargily.provider.js","sourceRoot":"","sources":["../../src/providers/chargily.provider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chargily.provider.js","sourceRoot":"","sources":["../../src/providers/chargily.provider.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
- import type { PaymentProvider, CheckoutParams, CheckoutResult, WebhookEvent } from '../core/provider.interface.js';
1
+ import type { CheckoutParams, CheckoutResult, WebhookEvent } from '../core/provider.interface.js';
2
+ import { AbstractPaymentProvider } from '../core/abstract-provider.js';
2
3
  export interface ManualConfig {
3
4
  bankInfo?: {
4
5
  rib: string;
@@ -7,14 +8,14 @@ export interface ManualConfig {
7
8
  };
8
9
  confirmationUrl?: string;
9
10
  }
10
- export declare class ManualProvider implements PaymentProvider {
11
+ export declare class ManualProvider extends AbstractPaymentProvider {
11
12
  private config;
12
13
  readonly name = "manual";
13
14
  readonly supportedCurrencies: string[];
14
15
  readonly supportedMethods: string[];
15
16
  constructor(config?: ManualConfig);
16
- createCheckout(params: CheckoutParams): Promise<CheckoutResult>;
17
- verifyWebhook(body: string, _signature: string): Promise<WebhookEvent>;
17
+ protected doCheckout(params: CheckoutParams): Promise<CheckoutResult>;
18
+ protected doVerifyWebhook(body: string, _signature: string): Promise<WebhookEvent>;
18
19
  }
19
20
  export declare function createManualProvider(config?: ManualConfig): ManualProvider;
20
21
  //# sourceMappingURL=manual.provider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"manual.provider.d.ts","sourceRoot":"","sources":["../../src/providers/manual.provider.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AAElH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;IAC5D,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB;AAED,qBAAa,cAAe,YAAW,eAAe;IAKxC,OAAO,CAAC,MAAM;IAJ1B,QAAQ,CAAC,IAAI,YAAW;IACxB,QAAQ,CAAC,mBAAmB,WAAQ;IACpC,QAAQ,CAAC,gBAAgB,WAA8B;gBAEnC,MAAM,GAAE,YAAiB;IAEvC,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;IAQ/D,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;CAI7E;AAED,wBAAgB,oBAAoB,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,cAAc,CAE1E"}
1
+ {"version":3,"file":"manual.provider.d.ts","sourceRoot":"","sources":["../../src/providers/manual.provider.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AACjG,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAA;AAEtE,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;IAC5D,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB;AAED,qBAAa,cAAe,SAAQ,uBAAuB;IAK7C,OAAO,CAAC,MAAM;IAJ1B,QAAQ,CAAC,IAAI,YAAW;IACxB,QAAQ,CAAC,mBAAmB,WAAQ;IACpC,QAAQ,CAAC,gBAAgB,WAA8B;gBAEnC,MAAM,GAAE,YAAiB;cAE7B,UAAU,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;cAQ3D,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;CAYzF;AAED,wBAAgB,oBAAoB,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,cAAc,CAE1E"}