{"version":3,"file":"angular-monnify.mjs","sources":["../../../projects/angular-monnify/src/lib/monnify-keys.ts","../../../projects/angular-monnify/src/lib/angular-monnify.service.ts","../../../projects/angular-monnify/src/lib/angular-monnify.component.ts","../../../projects/angular-monnify/src/lib/angular-monnify.directive.ts","../../../projects/angular-monnify/src/lib/angular-monnify.module.ts","../../../projects/angular-monnify/src/lib/angular-monnify.providers.ts","../../../projects/angular-monnify/src/public_api.ts","../../../projects/angular-monnify/src/angular-monnify.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\n/**\n * Merchant's API Key (found on the Monnify dashboard).\n *\n * Has a root-level default of `''` so `AngularMonnifyService` can be injected\n * without `AngularMonnifyModule.forRoot()` / `provideAngularMonnify()`. In that\n * case the key must be supplied per payment on the component/directive.\n */\nexport const API_KEY = new InjectionToken<string>('monnify.apiKey', {\n  providedIn: 'root',\n  factory: () => '',\n});\n\n/**\n * Merchant's contract code (found on the Monnify dashboard).\n */\nexport const CONTRACT_CODE = new InjectionToken<string>('monnify.contractCode', {\n  providedIn: 'root',\n  factory: () => '',\n});\n\n/**\n * When `true` the sandbox SDK is loaded, otherwise the live production SDK is\n * used. Defaults to `false` so an unconfigured app never silently transacts\n * against the sandbox.\n */\nexport const IS_TEST_MODE = new InjectionToken<boolean>('monnify.isTestMode', {\n  providedIn: 'root',\n  factory: () => false,\n});\n\n/** URL of the live (production) Monnify web SDK. */\nexport const MONNIFY_LIVE_SDK_URL = 'https://sdk.monnify.com/plugin/monnify.js';\n\n/** URL of the sandbox (test) Monnify web SDK. */\nexport const MONNIFY_SANDBOX_SDK_URL = 'https://sandbox.sdk.monnify.com/plugin/monnify.js';\n","import { Injectable, inject } from '@angular/core';\nimport {\n  API_KEY,\n  CONTRACT_CODE,\n  IS_TEST_MODE,\n  MONNIFY_LIVE_SDK_URL,\n  MONNIFY_SANDBOX_SDK_URL,\n} from './monnify-keys';\nimport { MonnifyOptions } from '../model/monnify-options';\n\ninterface MonnifyWindow extends Window {\n  MonnifySDK?: {\n    initialize(options: Partial<MonnifyOptions>): void;\n  };\n}\n\ndeclare const window: MonnifyWindow;\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class AngularMonnifyService {\n  private readonly apiKey = inject(API_KEY);\n  private readonly contractCode = inject(CONTRACT_CODE);\n  private readonly isTestMode = inject(IS_TEST_MODE);\n\n  /**\n   * Resolve the Monnify web SDK URL for the given mode.\n   *\n   * `true` -> sandbox SDK, `false` -> live production SDK.\n   */\n  getScriptUrl(test: boolean = this.isTestMode): string {\n    return test ? MONNIFY_SANDBOX_SDK_URL : MONNIFY_LIVE_SDK_URL;\n  }\n\n  /**\n   * Append the Monnify web SDK `<script>` to the document, resolving once it\n   * has loaded. A no-op when the SDK is already on the page.\n   */\n  loadScript(test: boolean = this.isTestMode): Promise<void> {\n    return new Promise<void>((resolve, reject) => {\n      if (window.MonnifySDK && typeof window.MonnifySDK.initialize === 'function') {\n        resolve();\n        return;\n      }\n      const src = this.getScriptUrl(test);\n      const script = window.document.createElement('script');\n      script.setAttribute('src', src);\n      const onLoad = () => {\n        script.removeEventListener('load', onLoad);\n        resolve();\n      };\n      const onError = () => {\n        script.removeEventListener('error', onError);\n        reject(new Error(`ANGULAR-Monnify: failed to load the Monnify SDK from ${src}`));\n      };\n      script.addEventListener('load', onLoad);\n      script.addEventListener('error', onError);\n      window.document.head.appendChild(script);\n    });\n  }\n\n  checkInput(obj: Partial<MonnifyOptions>): string {\n    if (!obj.apiKey && !this.apiKey) {\n      return 'ANGULAR-Monnify: Monnify apiKey cannot be empty';\n    }\n    if (!obj.contractCode && !this.contractCode) {\n      return 'ANGULAR-Monnify: Monnify contractCode cannot be empty';\n    }\n    if (!obj.customerEmail) {\n      return 'ANGULAR-Monnify: Monnify email cannot be empty';\n    }\n    if (!obj.customerFullName) {\n      return 'ANGULAR-Monnify: Monnify name cannot be empty';\n    }\n    if (!obj.customerMobileNumber) {\n      return 'ANGULAR-Monnify: Monnify phone cannot be empty';\n    }\n    if (!obj.amount) {\n      return 'ANGULAR-Monnify: Monnify amount cannot be empty';\n    }\n    if (!obj.reference) {\n      return 'ANGULAR-Monnify: Monnify reference cannot be empty';\n    }\n    return '';\n  }\n\n  getMonnifyOptions(obj: Partial<MonnifyOptions>): Partial<MonnifyOptions> {\n    const monnifyOptions: Partial<MonnifyOptions> = {\n      isTestMode: obj.isTestMode ?? this.isTestMode,\n      apiKey: obj.apiKey || this.apiKey,\n      contractCode: obj.contractCode || this.contractCode,\n      amount: obj.amount,\n      reference: obj.reference,\n      currency: obj.currency || 'NGN',\n      customerFullName: obj.customerFullName || '',\n      customerEmail: obj.customerEmail || '',\n      customerMobileNumber: obj.customerMobileNumber || '',\n      paymentDescription: obj.paymentDescription || '',\n      redirectUrl: obj.redirectUrl || '',\n      metadata: obj.metadata || {},\n      incomeSplitConfig: obj.incomeSplitConfig,\n    };\n    return this.clean(monnifyOptions);\n  }\n\n  clean<T extends object>(obj: T): T {\n    for (const propName of Object.keys(obj)) {\n      const value = (obj as Record<string, unknown>)[propName];\n      if (value === null || value === undefined) {\n        delete (obj as Record<string, unknown>)[propName];\n      }\n    }\n    return obj;\n  }\n}\n","import { NgClass, NgStyle } from '@angular/common';\nimport { Component, EventEmitter, Input, Output, inject } from '@angular/core';\nimport { MonnifyOptions, MonnifySplitOptions, PrivateMonnifyOptions } from '../model/monnify-options';\nimport { AngularMonnifyService } from './angular-monnify.service';\n\ninterface MonnifyWindow extends Window {\n  MonnifySDK?: {\n    initialize(options: Partial<MonnifyOptions>): void;\n  };\n}\n\ndeclare const window: MonnifyWindow;\n\n/**\n * Renders a button that opens the Monnify checkout when clicked.\n *\n * Standalone as of v2 — import it directly into a standalone component, or keep\n * using `AngularMonnifyModule`.\n */\n@Component({\n  // eslint-disable-next-line @angular-eslint/component-selector\n  selector: 'angular-Monnify',\n  standalone: true,\n  imports: [NgClass, NgStyle],\n  template: `<button [ngClass]=\"class\" [ngStyle]=\"style\" (click)=\"pay()\"><ng-content></ng-content></button>`,\n})\nexport class AngularMonnifyComponent {\n  @Input() apiKey?: string;\n  @Input() isTestMode?: boolean;\n  @Input() contractCode?: string;\n  @Input() amount?: number;\n  @Input() metadata?: object;\n  @Input() reference?: string;\n  @Input() currency?: string;\n  @Input() customerFullName?: string;\n  @Input() customerEmail?: string;\n  @Input() customerMobileNumber?: string;\n  @Input() paymentDescription?: string;\n  @Input() incomeSplitConfig?: MonnifySplitOptions[];\n  @Input() redirectUrl?: string;\n  @Input() monnifyOptions?: Partial<MonnifyOptions>;\n  @Input() class?: string;\n  @Input() style?: object;\n\n  @Output() paymentInit = new EventEmitter<void>();\n  // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n  @Output() onClose = new EventEmitter<unknown>();\n  // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n  @Output() onComplete = new EventEmitter<unknown>();\n\n  /** The options last handed to the Monnify SDK. Exposed for debugging/tests. */\n  public _MonnifyOptions: Partial<PrivateMonnifyOptions> = {};\n\n  private readonly monnifyService = inject(AngularMonnifyService);\n  private isPaying = false;\n\n  /**\n   * Validate the inputs and open the Monnify checkout.\n   *\n   * @returns the validation error message, or `undefined` once checkout opened.\n   */\n  async pay(): Promise<string | undefined> {\n    if (this.isPaying) {\n      return undefined;\n    }\n\n    const source: Partial<MonnifyOptions> =\n      this.monnifyOptions && Object.keys(this.monnifyOptions).length >= 2 ? this.monnifyOptions : this;\n\n    const errorText = this.validateInput(source);\n    this.generateOptions(source);\n\n    if (errorText) {\n      console.error(errorText);\n      return errorText;\n    }\n\n    await this.monnifyService.loadScript(this._MonnifyOptions.isTestMode);\n\n    if (!window.MonnifySDK || typeof window.MonnifySDK.initialize !== 'function') {\n      const message = 'ANGULAR-Monnify: the Monnify SDK loaded but did not expose MonnifySDK.initialize';\n      console.error(message);\n      return message;\n    }\n\n    this.isPaying = true;\n    if (this.paymentInit.observed) {\n      this.paymentInit.emit();\n    }\n    window.MonnifySDK.initialize(this._MonnifyOptions);\n    return undefined;\n  }\n\n  validateInput(obj: Partial<MonnifyOptions>): string {\n    if (!this.onComplete.observed) {\n      return 'ANGULAR-Monnify: Insert a onComplete output like so (onComplete)=\\'PaymentComplete($event)\\' to check payment status';\n    }\n    return this.monnifyService.checkInput(obj);\n  }\n\n  generateOptions(obj: Partial<MonnifyOptions>): void {\n    this._MonnifyOptions = this.monnifyService.getMonnifyOptions(obj);\n    this._MonnifyOptions.onClose = (response?: unknown) => {\n      this.isPaying = false;\n      if (this.onClose.observed) {\n        this.onClose.emit(response);\n      }\n    };\n    this._MonnifyOptions.onComplete = (response?: unknown) => {\n      this.isPaying = false;\n      this.onComplete.emit(response);\n    };\n  }\n}\n","import { Directive, EventEmitter, HostListener, Input, Output, inject } from '@angular/core';\nimport { MonnifyOptions, MonnifySplitOptions, PrivateMonnifyOptions } from '../model/monnify-options';\nimport { AngularMonnifyService } from './angular-monnify.service';\n\ninterface MonnifyWindow extends Window {\n  MonnifySDK?: {\n    initialize(options: Partial<MonnifyOptions>): void;\n  };\n}\n\ndeclare const window: MonnifyWindow;\n\n/**\n * Opens the Monnify checkout when the host element is clicked.\n *\n * Standalone as of v2 — import it directly into a standalone component, or keep\n * using `AngularMonnifyModule`.\n */\n@Directive({\n  // eslint-disable-next-line @angular-eslint/directive-selector\n  selector: '[angular-Monnify]',\n  standalone: true,\n})\nexport class AngularMonnifyDirective {\n  @Input() apiKey?: string;\n  @Input() isTestMode?: boolean;\n  @Input() contractCode?: string;\n  @Input() amount?: number;\n  @Input() metadata?: object;\n  @Input() reference?: string;\n  @Input() currency?: string;\n  @Input() customerFullName?: string;\n  @Input() customerEmail?: string;\n  @Input() customerMobileNumber?: string;\n  @Input() paymentDescription?: string;\n  @Input() incomeSplitConfig?: MonnifySplitOptions[];\n  @Input() redirectUrl?: string;\n  @Input() monnifyOptions?: Partial<MonnifyOptions>;\n\n  @Output() paymentInit = new EventEmitter<void>();\n  // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n  @Output() onClose = new EventEmitter<unknown>();\n  // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n  @Output() onComplete = new EventEmitter<unknown>();\n\n  /** The options last handed to the Monnify SDK. Exposed for debugging/tests. */\n  public _MonnifyOptions: Partial<PrivateMonnifyOptions> = {};\n\n  private readonly monnifyService = inject(AngularMonnifyService);\n  private isPaying = false;\n\n  /**\n   * Validate the inputs and open the Monnify checkout.\n   *\n   * @returns the validation error message, or `undefined` once checkout opened.\n   */\n  async pay(): Promise<string | undefined> {\n    if (this.isPaying) {\n      return undefined;\n    }\n\n    const source: Partial<MonnifyOptions> =\n      this.monnifyOptions && Object.keys(this.monnifyOptions).length >= 2 ? this.monnifyOptions : this;\n\n    const errorText = this.validateInput(source);\n    this.generateOptions(source);\n\n    if (errorText) {\n      console.error(errorText);\n      return errorText;\n    }\n\n    await this.monnifyService.loadScript(this._MonnifyOptions.isTestMode);\n\n    if (!window.MonnifySDK || typeof window.MonnifySDK.initialize !== 'function') {\n      const message = 'ANGULAR-Monnify: the Monnify SDK loaded but did not expose MonnifySDK.initialize';\n      console.error(message);\n      return message;\n    }\n\n    this.isPaying = true;\n    if (this.paymentInit.observed) {\n      this.paymentInit.emit();\n    }\n    window.MonnifySDK.initialize(this._MonnifyOptions);\n    return undefined;\n  }\n\n  validateInput(obj: Partial<MonnifyOptions>): string {\n    if (!this.onComplete.observed) {\n      return 'ANGULAR-Monnify: Insert a onComplete output like so (onComplete)=\\'PaymentComplete($event)\\' to check payment status';\n    }\n    return this.monnifyService.checkInput(obj);\n  }\n\n  generateOptions(obj: Partial<MonnifyOptions>): void {\n    this._MonnifyOptions = this.monnifyService.getMonnifyOptions(obj);\n    this._MonnifyOptions.onClose = (response?: unknown) => {\n      this.isPaying = false;\n      if (this.onClose.observed) {\n        this.onClose.emit(response);\n      }\n    };\n    this._MonnifyOptions.onComplete = (response?: unknown) => {\n      this.isPaying = false;\n      this.onComplete.emit(response);\n    };\n  }\n\n  @HostListener('click')\n  buttonClick(): void {\n    void this.pay();\n  }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\n\nimport { AngularMonnifyComponent } from './angular-monnify.component';\nimport { AngularMonnifyDirective } from './angular-monnify.directive';\nimport { AngularMonnifyService } from './angular-monnify.service';\nimport { API_KEY, CONTRACT_CODE, IS_TEST_MODE } from './monnify-keys';\n\n/**\n * NgModule wrapper around the standalone `AngularMonnifyComponent` and\n * `AngularMonnifyDirective`.\n *\n * Existing (v1) apps keep working unchanged:\n *\n * ```ts\n * imports: [AngularMonnifyModule.forRoot('apiKey', 'contractCode', false)]\n * ```\n *\n * Standalone apps should prefer `provideAngularMonnify()` and import the\n * component/directive directly.\n */\n@NgModule({\n  imports: [AngularMonnifyComponent, AngularMonnifyDirective],\n  exports: [AngularMonnifyComponent, AngularMonnifyDirective],\n})\nexport class AngularMonnifyModule {\n  /**\n   * Register the merchant credentials application-wide.\n   *\n   * @param apiKey Merchant's API key from the Monnify dashboard.\n   * @param contractCode Merchant's contract code from the Monnify dashboard.\n   * @param isTestMode `true` loads the sandbox SDK, `false` (default) loads the\n   *   live production SDK.\n   */\n  static forRoot(\n    apiKey: string,\n    contractCode: string,\n    isTestMode: boolean = false,\n  ): ModuleWithProviders<AngularMonnifyModule> {\n    return {\n      ngModule: AngularMonnifyModule,\n      providers: [\n        AngularMonnifyService,\n        { provide: API_KEY, useValue: apiKey },\n        { provide: IS_TEST_MODE, useValue: isTestMode },\n        { provide: CONTRACT_CODE, useValue: contractCode },\n      ],\n    };\n  }\n}\n","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\n\nimport { AngularMonnifyService } from './angular-monnify.service';\nimport { API_KEY, CONTRACT_CODE, IS_TEST_MODE } from './monnify-keys';\n\n/**\n * Standalone equivalent of `AngularMonnifyModule.forRoot()`.\n *\n * ```ts\n * bootstrapApplication(AppComponent, {\n *   providers: [provideAngularMonnify('apiKey', 'contractCode', false)],\n * });\n * ```\n *\n * @param apiKey Merchant's API key from the Monnify dashboard.\n * @param contractCode Merchant's contract code from the Monnify dashboard.\n * @param isTestMode `true` loads the sandbox SDK, `false` (default) loads the\n *   live production SDK.\n */\nexport function provideAngularMonnify(\n  apiKey: string,\n  contractCode: string,\n  isTestMode: boolean = false,\n): EnvironmentProviders {\n  return makeEnvironmentProviders([\n    AngularMonnifyService,\n    { provide: API_KEY, useValue: apiKey },\n    { provide: CONTRACT_CODE, useValue: contractCode },\n    { provide: IS_TEST_MODE, useValue: isTestMode },\n  ]);\n}\n","/*\n * Public API Surface of angular-monnify\n */\n\nexport * from './lib/angular-monnify.component';\nexport * from './lib/angular-monnify.directive';\nexport * from './lib/angular-monnify.module';\nexport * from './lib/angular-monnify.providers';\nexport * from './lib/angular-monnify.service';\nexport {\n  API_KEY,\n  CONTRACT_CODE,\n  IS_TEST_MODE,\n  MONNIFY_LIVE_SDK_URL,\n  MONNIFY_SANDBOX_SDK_URL,\n} from './lib/monnify-keys';\nexport type {\n  MonnifyOptions,\n  MonnifySplitOptions,\n  PrivateMonnifyOptions,\n} from './model/monnify-options';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}