{"version":3,"file":"digitpay-angular.mjs","sources":["../../../projects/digitpay-angular/src/lib/digitpay-angular.service.ts","../../../projects/digitpay-angular/src/lib/paiement-method.ts","../../../projects/digitpay-angular/src/lib/digitpay-angular.component.ts","../../../projects/digitpay-angular/src/lib/digitpay-angular.component.html","../../../projects/digitpay-angular/src/public-api.ts","../../../projects/digitpay-angular/src/digitpay-angular.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { HttpBackend, HttpClient, HttpContext, HttpHeaders } from '@angular/common/http';\nimport { ExchangeRequestBody } from './exchange-request-body';\n\n\ninterface PaymentData {\n  amount : number\n  currency : string\n}\n\nexport interface ExchangeResponseBody {\n  success: boolean\n  message: string\n  code: number\n  data: {\n      from: string\n      amount: number\n      amountConverted: number\n      rate: number\n      countryCode: string\n      to: string\n  }\n  responseType: any\n}\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class DigitpayAngularService {\n\n  private _fedapayKey !: string;\n\n  private _paypalClienId !: string;\n\n  private _stripePublicKey !: string;\n\n  private _stripeSecretKey !: string\n\n  private exchangeCredetiential = {\n    username : 'us_dig!texch@nge',\n    password : '8vvudW1C33'\n  }\n\n  private httpOptions = {\n    headers: new HttpHeaders({\n      'Content-Type':  'application/json',\n      'Authorization': 'Basic ' + btoa(`${this.exchangeCredetiential.username}:${this.exchangeCredetiential.password}`)\n    })\n  };\n\n  constructor(\n    private handler : HttpBackend\n  ) { }\n\n  get fedapayKey() : string {\n    return this._fedapayKey;\n  }\n\n  set fedapayKey(value : string) {\n    this._fedapayKey = value;\n  }\n\n  get paypalClienId() : string {\n    return this._paypalClienId;\n  }\n\n  set paypalClienId(value : string) {\n    this._paypalClienId = value;\n  }\n\n  get stripePublicKey() : string{\n    return this._stripePublicKey;\n  }\n\n  set stripePublicKey(value: string) {\n    this._stripePublicKey = value;\n  }\n\n  get stripeSecretKey() :string {\n    return this._stripeSecretKey;\n  }\n\n  set stripeSecretKey(value: string) {\n    this._stripeSecretKey = value\n  }\n\n  createStripePaymentIntent(params : PaymentData) : Observable<any> {\n    const httpClient = new HttpClient(this.handler)\n    let query = \"\"\n    for (let index in params) {\n      query += `${index}=${params[index as keyof typeof params]}&`\n    }\n    const url =  `https://api.stripe.com/v1/payment_intents`\n    const api_key = this.stripeSecretKey\n    return httpClient.post(\n      url+`?${query}`,\n      {},\n      {\n        headers : {'Authorization' : `Bearer ${api_key}`},\n        // context : new HttpContext().set(BYPASS_LOG,true)\n      }\n    )\n  }\n\n  getExchangeRateByCountryCode(payload : ExchangeRequestBody) :Observable<ExchangeResponseBody> {\n    const httpClient = new HttpClient(this.handler) //Use for passing interceptor\n    const url = \"https://api.exchangeratesapi.org/exchange-rate-app/api/convert/by-country-exchanges\"\n    return httpClient.post<ExchangeResponseBody>(url,payload,this.httpOptions)\n  }\n}\n","export enum PaiementMethod {\n    fedapay = \"fedapay\",\n    stripe= \"stripe\",\n    paypal = \"paypal\",\n}\n","import {\n  Component,\n  EventEmitter,\n  Input,\n  OnInit,\n  Output,\n  Signal,\n  WritableSignal,\n  inject,\n  input,\n  signal,\n} from '@angular/core'\nimport { Stripe, StripeElements, loadStripe } from '@stripe/stripe-js'\nimport { loadScript } from '@paypal/paypal-js'\n\nimport { PaiementMethod } from './paiement-method'\nimport { CommonModule } from '@angular/common'\nimport { DigitpayAngularService } from './digitpay-angular.service'\nimport { Customer } from './customer'\nimport { Transaction } from './transaction'\nimport { ExchangeRequestBody } from './exchange-request-body'\nimport { lastValueFrom, tap } from 'rxjs'\ndeclare var FedaPay: any\n\ntype paiementMethodUnion = keyof typeof PaiementMethod\n\n@Component({\n  selector: 'digitpay-angular',\n  standalone: true,\n  imports: [CommonModule],\n  templateUrl: './digitpay-angular.component.html',\n  styleUrls: ['./digitpay-angular.component.scss'],\n})\nexport class DigitpayAngularComponent implements OnInit {\n  private digitPayService = inject(DigitpayAngularService)\n\n  paiementMethod = PaiementMethod\n  paiementMethodChoosed!: PaiementMethod\n  paypalButton!: any\n  stripeElement!: StripeElements | undefined\n  stripeInstance!: Stripe | null\n  stripeButton!: boolean\n  stripePaymentButtonLoading!: boolean\n\n  loading: WritableSignal<boolean> = signal(false)\n  showStripButton: WritableSignal<boolean> = signal(false)\n  errorMessage: WritableSignal<string> = signal('')\n\n  @Input() paiementMethodsAlowed?: paiementMethodUnion[]\n\n  @Input() customer_data!: Customer\n\n  @Input() feda_custom_meta_data!: any\n\n  /***\n   * required\n   *{ amount : number ;\n   * currency : 'XOF' | 'EUR' | 'USD'}\n   */\n  @Input({ required: true }) transaction_data!: Transaction\n\n  @Output() transactionStatus = new EventEmitter<any>()\n\n  async ngOnInit() {\n    //  console.log(await this.xofToUsd(100))\n  }\n\n  methodIsAllowed(method: paiementMethodUnion): boolean {\n    if (this.paiementMethodsAlowed && this.paiementMethodsAlowed.length !== 0) {\n      const methodListSet = new Set<paiementMethodUnion>(\n        this.paiementMethodsAlowed,\n      )\n      return methodListSet.has(method)\n    }\n    return true\n  }\n\n  choosePaimentMethod(paimentMethod: PaiementMethod) {\n    // this.nzRef.destroy({paimentMethod})\n    this.showStripButton.set(false)\n    this.errorMessage.set('')\n    if (this.paypalButton) {\n      this.paypalButton.close()\n    }\n    this.paiementMethodChoosed = paimentMethod\n    switch (paimentMethod) {\n      case PaiementMethod.fedapay:\n        this.payWithFedaPay()\n        break\n      case PaiementMethod.paypal:\n        this.payWithPaypal()\n        break\n      default:\n        this.payWithStripe()\n        break\n    }\n  }\n\n  async getTransactionForNonXof() {\n    const amount = +(this.transaction_data.currency === 'XOF'\n      ? await this.xofToUsd(this.transaction_data.amount)\n      : this.transaction_data.amount)\n    const currency =\n      this.transaction_data.currency === 'XOF'\n        ? 'USD'\n        : this.transaction_data.currency\n    return { amount, currency }\n  }\n\n  private async xofToUsd(price: number) {\n    const payload: ExchangeRequestBody = {\n      from: 'XOF',\n      countryCode: 'US',\n    }\n    const exchange$ = this.digitPayService.getExchangeRateByCountryCode(payload)\n    const response = await lastValueFrom(exchange$)\n    return (response.data.rate * price).toFixed(2)\n  }\n\n  private async usdToXof(price: number) {\n    const payload: ExchangeRequestBody = {\n      from: 'USD',\n      countryCode: 'BJ',\n    }\n    const exchange$ = this.digitPayService.getExchangeRateByCountryCode(payload)\n    try {\n      const response = await lastValueFrom(exchange$)\n      return (response.data.rate * price).toFixed(2)\n    } catch (err) {\n      console.error(err)\n    }\n    return price\n  }\n\n  private async payWithFedaPay() {\n    console.log('Fedapay paiement')\n    const componentInstance = this\n    // console.log(this.digitPayService.fedapayKey)\n    const fedapayKey = this.digitPayService.fedapayKey\n    const amount =\n      this.transaction_data.currency === 'USD'\n        ? await this.usdToXof(this.transaction_data.amount)\n        : this.transaction_data.amount\n    if (fedapayKey) {\n      const widget = FedaPay.init({\n        public_key: fedapayKey,\n        customer: { ...componentInstance.customer_data },\n        transaction: {\n          amount: Math.ceil(+amount),\n          description: 'Pay with feda',\n          custom_metadata: { ...componentInstance.feda_custom_meta_data },\n        },\n        onComplete(response: any) {\n          console.log(response)\n          // componentInstance.transactionStatus.emit(response.transaction)\n          if (response.reason === 'CHECKOUT COMPLETE') {\n            componentInstance.transactionStatus.emit(response.transaction)\n          }\n\n          if (response.reason === 'DIALOG DISMISSED') {\n          }\n        },\n      })\n\n      widget.open()\n    } else {\n      console.error('Public key is missing')\n      this.errorMessage.set('La clé publique est manquante ou est erronée')\n    }\n  }\n\n  private async payWithPaypal() {\n    this.loading.set(true)\n    console.log('Paypal paiement')\n    const clientId = this.digitPayService.paypalClienId\n    const componentInstance = this\n    if (clientId) {\n      const { amount, currency } = await this.getTransactionForNonXof()\n\n      loadScript({\n        clientId: clientId,\n        currency: currency,\n      }).then((paypal) => {\n        if (paypal?.Buttons) {\n          componentInstance.paypalButton = paypal?.Buttons({\n            fundingSource: 'paypal',\n            style: {\n              layout: 'vertical',\n              color: 'black',\n              shape: 'pill',\n              label: 'paypal',\n            },\n            createOrder(data, actions) {\n              return actions.order.create({\n                intent: 'CAPTURE',\n                purchase_units: [\n                  {\n                    amount: {\n                      currency_code: 'USD',\n                      value: `${amount}`,\n                    },\n                  },\n                ],\n              })\n            },\n            onError(err) {\n              console.error(err)\n              componentInstance.errorMessage.set(\n                \"Une erreur s'est produite. Vérifier la valeur du montant ou vos clés d'identification \",\n              )\n            },\n            onApprove(data: any, actions: any) {\n              return actions.order?.capture().then((detail: any) => {\n                componentInstance.transactionStatus.emit({\n                  method: 'paypal',\n                  ...detail,\n                })\n              })\n            },\n          })\n          this.paypalButton.render('#paypal_button')\n        }\n        this.loading.set(false)\n      })\n    } else {\n      console.error('Public key is missing')\n      this.errorMessage.set('La clé  est manquante ou est erronée')\n    }\n  }\n\n  private async payWithStripe() {\n    console.log('Stripe paiement')\n    this.loading.set(true)\n    const componentInstance = this\n    const stripePublicKey = this.digitPayService.stripePublicKey\n    if (stripePublicKey) {\n      try {\n        const { amount, currency } = await this.getTransactionForNonXof()\n        console.log(amount)\n\n        const stripe = await loadStripe(stripePublicKey).then((stripe) => {\n          this.stripeInstance = stripe\n\n          let param = {\n            amount: Math.ceil(amount) * 100,\n            currency: currency,\n          }\n\n          this.digitPayService\n            .createStripePaymentIntent(param)\n            .pipe(\n              tap({\n                next: (response) => {\n                  console.log(response)\n                  this.loading.set(false)\n                  this.showStripButton.set(true)\n                  const appearance: any = {\n                    // theme: 'flat',\n                  }\n                  const options: any = {\n                    layout: {\n                      type: 'accordion',\n                      defaultCollapsed: false,\n                      radios: false,\n                      spacedAccordionItems: true,\n                    },\n                  }\n                  const elements = stripe?.elements({\n                    clientSecret: response.client_secret,\n                    appearance,\n                  })\n\n                  const paymentElement = elements?.create('payment', options)\n                  this.stripeElement = elements\n                  const stripeContainer = document.getElementById('stripe_form')\n                  if (stripeContainer) {\n                    paymentElement?.mount(stripeContainer)\n                  }\n                  componentInstance.stripeButton = true\n                  elements?.submit().then((value) => {\n                    console.log(value)\n                    if (!value.error) {\n                    }\n                  })\n                },\n                error: (err) => {\n                  this.loading.set(false)\n                  console.error(err)\n                  switch (err.status) {\n                    case 400:\n                      err.error.error.code === 'amount_too_small' ||\n                      err.error.error.code === 'parameter_invalid_integer'\n                        ? this.errorMessage.set(\n                            \"le Montant à payer est très petit. Il doit être d'au moins 0.5Euro\",\n                          )\n                        : this.errorMessage.set(\n                            'Une erreur inconnu est survenue',\n                          )\n                      break\n                    default:\n                      this.errorMessage.set('Une erreur inconnu est survenue')\n                      break\n                  }\n                },\n              }),\n            )\n            .subscribe()\n        })\n      } catch (err) {\n        console.error('Stripe payment error', err)\n      } finally {\n      }\n    } else {\n      console.error('Public key is missing')\n      this.errorMessage.set('La clé secrete est manquante ou est erronée')\n    }\n  }\n\n  onStripePayment() {\n    const elements = this.stripeElement\n    const componentInstance = this\n    console.log(this.stripeInstance)\n    console.log('On stripe  pay')\n    elements\n      ?.submit()\n      .then((value) => {\n        console.log(value)\n        if (!value.error) {\n          this.stripeInstance\n            ?.confirmPayment({\n              elements,\n              redirect: 'if_required',\n              confirmParams: {\n                // receipt_email : `${componentInstance.user.email}`\n              },\n            })\n            ?.then((response) => {\n              if (!response.error) {\n                console.log(response)\n                this.transactionStatus.emit({\n                  method: 'stripe',\n                  ...response.paymentIntent,\n                })\n              } else {\n                console.error(response.error)\n                this.transactionStatus.emit(response.error)\n              }\n            })\n        } else {\n          console.error(value)\n        }\n      })\n      .catch((error) => {\n        console.error(error)\n      })\n  }\n}\n","<div class=\"component-container\">\n  <div class=\"text-container\">Selectionner un moyen de payement</div>\n  <div class=\"logo-container\">\n    <div\n      class=\"feda-logo\"\n      [ngClass]=\"{\n        'active-logo': paiementMethodChoosed === paiementMethod.fedapay\n      }\"\n      (click)=\"choosePaimentMethod(paiementMethod.fedapay)\"\n      *ngIf=\"methodIsAllowed(paiementMethod.fedapay)\"\n    >\n      <img src=\"assets/feda-logo.svg\" />\n    </div>\n    <div\n      class=\"stripe-logo\"\n      [ngClass]=\"{\n        'active-logo': paiementMethodChoosed === paiementMethod.stripe\n      }\"\n      (click)=\"choosePaimentMethod(paiementMethod.stripe)\"\n      *ngIf=\"methodIsAllowed(paiementMethod.stripe)\"\n    >\n      <img src=\"assets/logo_stripe.png\" />\n    </div>\n    <div\n      class=\"paypal-logo\"\n      [ngClass]=\"{\n        'active-logo': paiementMethodChoosed === paiementMethod.paypal\n      }\"\n      (click)=\"choosePaimentMethod(paiementMethod.paypal)\"\n      *ngIf=\"methodIsAllowed(paiementMethod.paypal)\"\n    >\n      <img src=\"assets/logo_paypal.png\" />\n    </div>\n  </div>\n\n  <div class=\"loader\" *ngIf=\"loading()\"></div>\n\n  <div id=\"paypal_button\" class=\"paypal-button\"></div>\n\n  <div\n    id=\"stripe_form\"\n    style=\"width: 70%; margin: auto\"\n    *ngIf=\"paiementMethodChoosed === paiementMethod.stripe\"\n  ></div>\n\n  <div\n    style=\"display: flex; justify-content: center; margin-top: 10px\"\n    *ngIf=\"paiementMethodChoosed === paiementMethod.stripe && showStripButton()\"\n  >\n    <button\n      *ngIf=\"stripeButton\"\n      style=\"\n        background-color: black;\n        color: #fff;\n        font-weight: 700;\n        font-size: 20px;\n        border-radius: 8px;\n        height: 40px;\n        width: 100px;\n        border: none;\n      \"\n      (click)=\"onStripePayment()\"\n    >\n      Payer\n    </button>\n  </div>\n\n  <div class=\"error-message\">{{ errorMessage() }}</div>\n</div>\n","/*\n * Public API Surface of digitpay-angular\n */\n\nexport * from './lib/digitpay-angular.service';\nexport * from './lib/digitpay-angular.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1"],"mappings":"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"}