import type { IDialect } from '@mostajs/data-plug'; import type { CheckoutResult, WebhookEvent } from './provider.interface.js'; import type { PaymentDTO, PaymentMethodType, PaymentStatus } from '../types/index.js'; import type { ProviderName } from '../lib/webhook-helpers.js'; export interface CreateCheckoutInput { /** * Dialecte d'**ORM** (via `@mostajs/data-plug`) où écrire la ligne Payment. * * ⚠️ Ce n'est PAS la banque — la banque, c'est `providerName`. Le module emploie « dialecte » * pour les deux, et c'est la confusion la plus coûteuse de sa surface. */ dialect: IDialect; /** Identifiant d'ordre — clé de matching avec le webhook. */ orderId: string; /** Montant en unités de base de la devise (PAS en centimes). */ amount: number; /** Code ISO 4217 (ex: 'DZD', 'EUR'). */ currency: string; description?: string; successUrl: string; cancelUrl: string; /** * OÙ la banque notifie. Peut porter le jeton **`{provider}`**, remplacé par le nom de la banque * réellement retenue — indispensable au routage par segment quand la banque est choisie par la * devise et non par l'appelant. Ex. : `https://site.fr/paiement/webhook/{provider}`. */ webhookUrl?: string; /** Méthode persistée sur la ligne Payment (défaut 'card'). */ method?: PaymentMethodType; /** Contexte métier propagé au provider et restitué au webhook. */ metadata?: Record; /** Force un dialecte ; sinon résolu par devise (registre → mapping devise). */ providerName?: ProviderName | string; } export interface CreateCheckoutOutput { payment: PaymentDTO; checkout: CheckoutResult; /** Nom du dialecte effectivement utilisé. */ provider: string; } /** * Crée un checkout chez le bon dialecte ET persiste la Payment (pending). * * @example * const { payment, checkout } = await createPaymentCheckout({ * dialect, orderId, amount: 50000, currency: 'DZD', * successUrl, cancelUrl, webhookUrl, * metadata: { campaignId, planSlug }, * }) * redirect(checkout.url) // si non null */ export declare function createPaymentCheckout(input: CreateCheckoutInput): Promise; export interface SettleWebhookInput { /** Dialecte d'**ORM** où retrouver/mettre à jour la Payment. PAS la banque. */ dialect: IDialect; /** Nom du dialecte émetteur du webhook. */ providerName: ProviderName; /** Corps brut de la requête (req.text() — signature calculée dessus). */ body: string; /** Headers HTTP de la requête. */ headers: Headers | Record; } export interface SettleWebhookOutput { /** false si signature invalide / payload malformé / provider inconnu. */ ok: boolean; reason?: string; event?: WebhookEvent; orderId?: string | null; /** Statut déduit de l'event (undefined si event neutre). */ status?: PaymentStatus; /** Payment mise à jour (null si introuvable ou statut non terminal). */ payment?: PaymentDTO | null; } /** * Vérifie le webhook, en déduit un statut, et règle la Payment correspondante. * Le consommateur lit le retour pour exécuter sa logique métier * (ex: activer la campagne sponsor) si `status === 'paid'`. */ export declare function settlePaymentFromWebhook(input: SettleWebhookInput): Promise; //# sourceMappingURL=checkout-service.d.ts.map