UNPKG

ngx-pesapal

Version:

Angular schematics lib for abstracting Pesapal APIs

1 lines 28.3 kB
{"version":3,"file":"ngx-pesapal.mjs","sources":["../../../projects/pesapal/src/lib/types.ts","../../../projects/pesapal/src/lib/configs.ts","../../../projects/pesapal/src/lib/services/store.service.ts","../../../projects/pesapal/src/lib/services/token.service.ts","../../../projects/pesapal/src/lib/services/api.service.ts","../../../projects/pesapal/src/lib/directives/pesapal-pay.directive.ts","../../../projects/pesapal/src/lib/pesapal.module.ts","../../../projects/pesapal/src/public-api.ts","../../../projects/pesapal/src/ngx-pesapal.ts"],"sourcesContent":["export const baseURL: URL = new URL('https://pay.pesapal.com/v3')\r\n\r\nexport interface IKeys {\r\n consumer_key: string\r\n consumer_secret: string\r\n ipn_id: string\r\n}\r\n\r\nexport interface ITokenResponse {\r\n token: string\r\n expiryDate: string\r\n error: any\r\n status: string\r\n message: string\r\n}\r\n\r\nexport interface ISubmitOrderRequest {\r\n id: string\r\n currency: string\r\n amount: number\r\n description: string\r\n callback_url: string\r\n redirect_mode: string\r\n notification_id: string\r\n branch: string\r\n billing_address: Partial<IBillingAddress> | IBillingAddress\r\n}\r\n\r\ninterface IBillingAddress {\r\n email_address: string;\r\n phone_number: string;\r\n country_code: string;\r\n first_name: string;\r\n middle_name: string;\r\n last_name: string;\r\n line_1: string;\r\n line_2: string;\r\n city: string;\r\n state: string;\r\n postal_code: string;\r\n zip_code: string;\r\n}\r\n\r\nexport interface IIPNRequest {\r\n url: string\r\n ipn_notification_type: string\r\n}\r\n\r\nexport interface IIPNResponse {\r\n url: string\r\n created_date: string\r\n ipn_id: string\r\n error: null | any\r\n status: string\r\n}\r\n\r\nexport interface ISubmitOrderResponse {\r\n order_tracking_id: string\r\n merchant_reference: string\r\n redirect_url: string\r\n error: null | any\r\n status: string\r\n}\r\n\r\n\r\nexport interface ITransactionStatusResponse {\r\n payment_method: string\r\n amount: number\r\n created_date: string\r\n confirmation_code: string\r\n payment_status_description: string\r\n description: string\r\n message: string\r\n payment_account: string\r\n call_back_url: string\r\n status_code: number\r\n merchant_reference: string\r\n payment_status_code: string\r\n currency: string\r\n error: {\r\n error_type: string | null\r\n code: string | null\r\n message: string | null\r\n call_back_url: string | null\r\n }\r\n status: string\r\n}\r\n\r\n\r\nexport interface IRecurringPaymentsRequest extends Partial<ISubmitOrderRequest> {\r\n account_number: string\r\n subscription_details: Partial<{\r\n start_date: string\r\n end_date: string\r\n frequency: EFrequency\r\n }>\r\n}\r\n\r\nenum EFrequency {\r\n DAILY = 'DAILY',\r\n WEEKLY = 'WEEKLY',\r\n MONTHLY = 'MONTHLY',\r\n YEARLY = 'YEARLY'\r\n}\r\n\r\nexport interface IRecurringPaymentsResponse {\r\n payment_method: string\r\n amount: number\r\n created_date: string\r\n confirmation_code: string\r\n payment_status_description: string\r\n description: string\r\n message: string\r\n payment_account: string\r\n call_back_url: string\r\n status_code: number\r\n merchant_reference: string\r\n payment_status_code: string\r\n currency: string\r\n subscription_transaction_info: {\r\n account_reference: string\r\n amount: number\r\n first_name: string\r\n last_name: string\r\n correlation_id: number\r\n }\r\n error: {\r\n error_type: string | null\r\n code: string | null\r\n message: string | null\r\n call_back_url: string | null\r\n }\r\n status: string\r\n}\r\n\r\nexport interface IRefundRequest {\r\n confirmation_code: string;\r\n amount: string;\r\n username: string;\r\n remarks: string;\r\n}\r\n\r\nexport interface IRefundResponse {\r\n message: string\r\n status: string\r\n}\r\n\r\n","import { InjectionToken } from '@angular/core';\r\n\r\nexport const PESAPAL_CONFIGS = new InjectionToken<any>('pesapal.keys')","import { Injectable } from '@angular/core';\nimport { IRecurringPaymentsResponse, ISubmitOrderResponse, ITokenResponse, ITransactionStatusResponse } from '../types';\nimport { BehaviorSubject } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class StoreService {\n\n /**\n * BehaviorSubject holding the authentication token response.\n * It stores the received authentication token response or null if no response is available.\n *\n * This BehaviorSubject is used to track and provide the latest authentication token response.\n *\n * @publicApi\n */\n public authenticationResponseBs: BehaviorSubject<ITokenResponse | null> \n = new BehaviorSubject<ITokenResponse | null>(null)\n\n /**\n * BehaviorSubject for storing the response after submitting an order request.\n * It holds the received order submission response or null if no response is available.\n *\n * This BehaviorSubject is employed to maintain and distribute the most recent order submission response.\n *\n * @publicApi\n */\n public submitOrderResponseBs: BehaviorSubject<ISubmitOrderResponse | null>\n = new BehaviorSubject<ISubmitOrderResponse | null>(null)\n\n /**\n * BehaviorSubject for storing the response related to the transaction status.\n * It holds the received transaction status response or null if no response is available.\n *\n * This BehaviorSubject is utilized to keep track of and distribute the most recent transaction status response.\n * It allows components or services to subscribe to changes in transaction status information.\n *\n * @publicApi\n */\n public transactionStatusResponseBs: BehaviorSubject<ITransactionStatusResponse | null>\n = new BehaviorSubject<ITransactionStatusResponse | null>(null)\n\n /**\n * BehaviorSubject for storing the response related to the recurring request.\n * It holds the received response or null if no response is available.\n *\n * @publicApi\n */\n public refundsResponseBs: BehaviorSubject<IRecurringPaymentsResponse | null>\n = new BehaviorSubject<IRecurringPaymentsResponse | null>(null)\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Inject, Injectable, inject } from '@angular/core';\n\nimport { Observable, catchError, map } from 'rxjs';\nimport { IKeys, ITokenResponse, baseURL } from '../types';\nimport { StoreService } from './store.service';\nimport { PESAPAL_CONFIGS } from '../configs';\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TokenService {\n\n private store: StoreService = inject(StoreService)\n private http: HttpClient = inject(HttpClient)\n\n constructor(\n @Inject(PESAPAL_CONFIGS) private credentials: IKeys\n ){}\n\n /**\n * Initiates the process to authenticate keys by requesting an authentication token.\n * It sends a POST request to the server to obtain an authentication token based on provided consumer key and secret.\n * Upon successful authentication, the received token is stored in session storage and in the authenticationResponseBs BehaviorSubject for further usage.\n *\n * @returns An Observable containing the received authentication token as ITokenResponse\n * @private\n */\n public AuthenticateKeys(): Observable<ITokenResponse> {\n const { consumer_key, consumer_secret } = this.credentials\n return this.http.post<ITokenResponse>(`\n ${baseURL}/api/Auth/RequestToken`,\n { consumer_key, consumer_secret } as Partial<IKeys>\n ).pipe(\n catchError((e: any) => {\n throw new Error(JSON.stringify(e))\n }),\n map((res: ITokenResponse) => {\n sessionStorage.setItem('12111997', res.token)\n this.store.authenticationResponseBs.next(res)\n return res\n })\n )\n }\n}\n","import { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { DestroyRef, Inject, Injectable, inject } from '@angular/core';\nimport { Observable, catchError, map, switchMap } from 'rxjs';\nimport {\n baseURL,\n ISubmitOrderResponse,\n ISubmitOrderRequest,\n IKeys,\n ITransactionStatusResponse,\n IRecurringPaymentsRequest,\n IRecurringPaymentsResponse,\n IRefundRequest,\n IRefundResponse,\n ITokenResponse\n} from '../types';\nimport { PESAPAL_CONFIGS } from '../configs';\nimport { StoreService } from './store.service';\nimport { TokenService } from './token.service';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ApiService {\n\n private http: HttpClient = inject(HttpClient)\n private destroy: DestroyRef = inject(DestroyRef)\n private token: TokenService = inject(TokenService)\n private store: StoreService = inject(StoreService)\n\n constructor(\n @Inject(PESAPAL_CONFIGS) private credentials: IKeys\n ){}\n\n public submitOrderRequest(data: Partial<ISubmitOrderRequest> | ISubmitOrderRequest): Observable<ISubmitOrderResponse> {\n return this.token.AuthenticateKeys().pipe(\n takeUntilDestroyed(this.destroy),\n switchMap((tokenResponse: ITokenResponse) => {\n const requestBody: Partial<ISubmitOrderRequest> = {\n ...data,\n notification_id: this.credentials.ipn_id // Set the notification_id here\n };\n const token: HttpHeaders = new HttpHeaders({\n 'Authorization': `Bearer ${tokenResponse.token}`\n });\n return this.http.post<ISubmitOrderResponse>(\n `${baseURL}/api/Transactions/SubmitOrderRequest`,\n requestBody as ISubmitOrderRequest,\n { headers: token }\n );\n }),\n catchError((error: any) => {\n throw new Error(JSON.stringify(error))\n }),\n map((response: ISubmitOrderResponse) => {\n this.store.submitOrderResponseBs.next(response)\n return response\n })\n )\n }\n\n /**\n * Retrieves transaction status from the Pesapal API based on the provided tracking ID.\n * This method sends a GET request to the Pesapal API endpoint responsible for retrieving transaction status.\n *\n * @param trackingId - The unique identifier for tracking the transaction.\n * @returns An Observable that resolves to the transaction status response (ITransactionStatusResponse).\n * @publicApi\n */\n public getTransactionStatus(trackingId: string): Observable<ITransactionStatusResponse> {\n return this.token.AuthenticateKeys().pipe(\n takeUntilDestroyed(this.destroy),\n switchMap((tokenResponse: ITokenResponse) => {\n const token: HttpHeaders = new HttpHeaders({\n 'Authorization': `Bearer ${tokenResponse.token}`\n })\n \n return this.http.get<ITransactionStatusResponse>(\n `${baseURL}/api/Transactions/GetTransactionStatus?orderTrackingId=${trackingId}`,\n { headers: token }\n )\n }),\n catchError((error: any) => {\n throw new Error(JSON.stringify(error))\n }),\n map((response: ITransactionStatusResponse) => {\n this.store.transactionStatusResponseBs.next(response)\n return response\n })\n )\n }\n \n /**\n * Submits an recurring order request to Pesapal for processing and handling payment transactions. \n * The method sends a POST request to the Pesapal API endpoint responsible for recurring order submissions.\n * Upon successful submission, the response data is stored in an Observable for further processing.\n *\n * @param data - A partial or complete object conforming to the IRecurringPaymentsRequest interface\n * @returns An Observable that resolves to the response of the order submission as IRecurringPaymentsResponse\n * @publicApi\n */\n public submitRecurringPayment(data: Partial<IRecurringPaymentsRequest> | IRecurringPaymentsRequest): Observable<IRecurringPaymentsResponse> {\n return this.token.AuthenticateKeys().pipe(\n takeUntilDestroyed(this.destroy),\n switchMap((tokenResponse: ITokenResponse) => {\n const requestBody = {\n ...data,\n notification_id: this.credentials.ipn_id // Set the notification_id here\n }\n const token: HttpHeaders = new HttpHeaders({\n 'Authorization': `Bearer ${tokenResponse.token}`\n })\n return this.http.post<IRecurringPaymentsResponse>(\n `${baseURL}/api/Transactions/SubmitRecurringPayment`, \n requestBody as Partial<IRecurringPaymentsRequest> | IRecurringPaymentsRequest,\n { headers: token }\n )\n }),\n catchError((error: any) => {\n throw new Error(JSON.stringify(error))\n }),\n map((response: IRecurringPaymentsResponse) => {\n this.store.refundsResponseBs.next(response)\n return response\n })\n )\n }\n\n /**\n * Submits a payment refund. \n * Upon successful submission, the response data is stored in an Observable for further processing.\n *\n * @param data - A partial or complete object conforming to the IRefundRequest interface\n * @returns An Observable that resolves to the response of the order submission as IRefundResponse\n * @publicApi\n */\n public requestRefund(data: IRefundRequest): Observable<IRefundResponse> {\n return this.token.AuthenticateKeys().pipe(\n takeUntilDestroyed(this.destroy),\n switchMap((tokenResponse: ITokenResponse) => {\n const token: HttpHeaders = new HttpHeaders({\n 'Authorization': `Bearer ${tokenResponse.token}`\n })\n return this.http.post<IRefundResponse>(\n `${baseURL}/api/Transactions/RequestRefund`, \n data as IRefundRequest,\n { headers: token }\n )\n }),\n catchError((error: any) => {\n throw new Error(JSON.stringify(error))\n }),\n map((response: IRefundResponse) => {\n return response\n })\n )\n }\n}\n","import { Directive, HostListener, Input, DestroyRef, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop'\nimport { ApiService } from '../services/api.service';\n\n@Directive({\n selector: '[ngx-pesapal]'\n})\nexport class NgxPesapalDirective {\n\n id: string = Date.now().toString(36) + Math.random().toString(36).substring(2)\n @Input({ required: true }) currency:string = 'KES'\n @Input({ required: true }) amount!: number\n @Input({ required: true }) description!: string\n @Input({ required: true }) callback_url!: string\n\n @Input({ required: true }) phone_number!: string\n @Input() email_address!: string\n @Input() country_code?: string \n @Input() first_name?: string \n @Input() middle_name?: string \n @Input() last_name?: string \n @Input() line_1?: string \n @Input() line_2?: string \n @Input() city?: string \n @Input() state?: string \n @Input() postal_code?: string \n @Input() zip_code?: string \n @Input() cancellation_url?: string \n @Input() errorMessages: boolean = false\n\n\n api: ApiService = inject(ApiService)\n destroy = inject(DestroyRef)\n\n @HostListener('click', ['$event']) onClick() {\n this.api.submitOrderRequest(\n {\n id: this.id,\n amount: this.amount,\n currency: this.currency,\n description: this.description,\n callback_url: this.callback_url,\n billing_address: {\n phone_number: this.phone_number,\n email_address: this.email_address,\n country_code: this.country_code,\n first_name: this.first_name,\n middle_name: this.middle_name,\n last_name: this.last_name,\n line_1: this.line_1,\n line_2: this.line_2,\n city: this.city,\n state: this.state,\n postal_code: this.postal_code,\n zip_code: this.zip_code,\n }\n }\n ).pipe(\n takeUntilDestroyed(this.destroy)\n ).subscribe({\n error: (e: any) => {\n throw new Error(e)\n }\n })\n }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { HttpClientModule } from '@angular/common/http'\nimport { PESAPAL_CONFIGS } from './configs';\nimport { ApiService } from './services/api.service';\nimport { StoreService } from './services/store.service';\nimport { TokenService } from './services/token.service';\nimport { NgxPesapalDirective } from './directives/pesapal-pay.directive';\n\n@NgModule({\n imports: [\n HttpClientModule,\n ],\n providers: [\n StoreService,\n TokenService,\n ApiService\n ],\n declarations: [\n NgxPesapalDirective\n ],\n exports: [\n NgxPesapalDirective\n ]\n})\nexport class NgxPesapal {\n\n // save domain names of sites using lib\n constructor()\n { \n // if (!isDevMode()) {\n // inject(HttpClient).post('', document.location.origin ).subscribe((r: any) => { console.log(r)})\n // }\n }\n\n /**\n * Static method to initialize and configure the PesapalModule with essential configuration values.\n * It is used to set up necessary configurations for the Pesapal module, including consumer key, consumer secret, and IPN (Instant Payment Notification) ID.\n *\n * @param consumer_key - The consumer key used for Pesapal API authentication.\n * @param consumer_secret - The consumer secret associated with the consumer key for authentication.\n * @param ipn_id - The Instant Payment Notification (IPN) ID used for Pesapal configuration.\n * @returns A ModuleWithProviders object for initializing the PesapalModule with the provided configurations.\n * @publicApi\n */\n static forRoot(consumer_key: string, consumer_secret: string, ipn_id: string): ModuleWithProviders<NgxPesapal> {\n return {\n ngModule: NgxPesapal,\n providers: [\n { provide: PESAPAL_CONFIGS, useValue: { consumer_key, consumer_secret, ipn_id } }\n ]\n }\n }\n }\n","/*\n * Public API Surface of pesapal\n */\nexport * from './lib/directives/pesapal-pay.directive'\nexport * from './lib/services/store.service'\nexport * from './lib/services/api.service'\nexport * from './lib/pesapal.module'\nexport * from './lib/configs'\nexport * from './lib/types'\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}