{"version":3,"file":"angular-klasha.mjs","sources":["../../../project/angular-klasha/src/lib/klasha-keys.ts","../../../project/angular-klasha/src/lib/angular-klasha.service.ts","../../../project/angular-klasha/src/lib/angular-klasha.base.ts","../../../project/angular-klasha/src/lib/angular-klasha.component.ts","../../../project/angular-klasha/src/lib/angular-klasha.directive.ts","../../../project/angular-klasha/src/lib/klasha.providers.ts","../../../project/angular-klasha/src/lib/angular-klasha.module.ts","../../../project/angular-klasha/src/public_api.ts","../../../project/angular-klasha/src/angular-klasha.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\n/**\n * The URL of the Klasha inline checkout script.\n *\n * The buckets used by `angular-klasha@0.0.x`\n * (`https://klastatic.fra1.digitaloceanspaces.com/{test,prod}/js/klasha-integration.js`)\n * have been deleted and return `NoSuchBucket`. There is now a single script for\n * both environments; the environment is selected by the `isTestMode`\n * constructor argument instead of by the script URL.\n */\nexport const KLASHA_SCRIPT_URL = 'https://js.klasha.com/pay.js';\n\n/**\n * Merchant API key used when a component/directive does not supply its own.\n */\nexport const MERCHANT_KEY = new InjectionToken<string>('klasha.merchantKey', {\n  providedIn: 'root',\n  factory: () => '',\n});\n\n/**\n * Merchant business id used when a component/directive does not supply its own.\n */\nexport const BUSINESS_ID = new InjectionToken<string>('klasha.businessId', {\n  providedIn: 'root',\n  factory: () => '',\n});\n\n/**\n * Whether to use the Klasha sandbox. Defaults to `false` (live gateway).\n */\nexport const IS_TEST_MODE = new InjectionToken<boolean>('klasha.isTestMode', {\n  providedIn: 'root',\n  factory: () => false,\n});\n","import { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport { inject, Injectable, PLATFORM_ID } from '@angular/core';\n\nimport {\n  KlashaKitOptions,\n  KlashaOptions,\n  ResolvedKlashaOptions,\n} from '../model/klasha-options';\nimport {\n  BUSINESS_ID,\n  IS_TEST_MODE,\n  KLASHA_SCRIPT_URL,\n  MERCHANT_KEY,\n} from './klasha-keys';\n\n/**\n * Shape of the global installed by `https://js.klasha.com/pay.js`.\n *\n * ```js\n * function KlashaClient(merchantKey, businessId, amount, containerId,\n *                       callbackUrl, countryCode, sourceCurrency, kit, isTestMode)\n * ```\n */\nexport type KlashaClientConstructor = new (\n  merchantKey: string,\n  businessId: string | number,\n  amount: number,\n  containerId: string,\n  callbackUrl: string,\n  countryCode: string,\n  sourceCurrency: string,\n  kit: KlashaKitOptions,\n  isTestMode: boolean,\n) => { init: () => void };\n\n/** Marks script tags and container divs created by this library. */\nconst SCRIPT_MARKER = 'data-angular-klasha';\nconst CONTAINER_MARKER = 'data-angular-klasha-container';\n\nlet containerSequence = 0;\n\n/**\n * Returns a process-unique DOM id for a checkout container. Each component or\n * directive instance owns exactly one, so two payment buttons on the same page\n * can never collide (0.0.x hardcoded `ktest` for every instance).\n */\nexport function nextKlashaContainerId(): string {\n  containerSequence += 1;\n  return `klasha-container-${containerSequence}`;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class AngularKlashaService {\n  private readonly merchantKey = inject(MERCHANT_KEY, { optional: true });\n  private readonly businessId = inject(BUSINESS_ID, { optional: true });\n  private readonly isTestMode = inject(IS_TEST_MODE, { optional: true });\n  private readonly document = inject(DOCUMENT);\n  private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n  private scriptPromise: Promise<void> | null = null;\n\n  /**\n   * The window the checkout script is loaded into. `null` on the server.\n   */\n  private get window(): (Window & { KlashaClient?: KlashaClientConstructor }) | null {\n    return this.isBrowser\n      ? (this.document.defaultView as Window & { KlashaClient?: KlashaClientConstructor } | null)\n      : null;\n  }\n\n  /**\n   * Loads `https://js.klasha.com/pay.js` exactly once and resolves when\n   * `window.KlashaClient` is available.\n   *\n   * jQuery is deliberately not loaded: `pay.js` does not use it.\n   */\n  loadScript(): Promise<void> {\n    if (!this.isBrowser) {\n      return Promise.reject(\n        new Error('angular-klasha: Klasha checkout can only be loaded in a browser'),\n      );\n    }\n    if (typeof this.window?.KlashaClient === 'function') {\n      return Promise.resolve();\n    }\n    if (this.scriptPromise) {\n      return this.scriptPromise;\n    }\n\n    this.scriptPromise = new Promise<void>((resolve, reject) => {\n      const doc = this.document;\n      const existing = doc.querySelector<HTMLScriptElement>(`script[${SCRIPT_MARKER}]`);\n      const script = existing ?? doc.createElement('script');\n\n      const onLoad = (): void => {\n        cleanup();\n        resolve();\n      };\n      const onError = (): void => {\n        cleanup();\n        this.scriptPromise = null;\n        script.remove();\n        reject(new Error(`angular-klasha: failed to load ${KLASHA_SCRIPT_URL}`));\n      };\n      const cleanup = (): void => {\n        script.removeEventListener('load', onLoad);\n        script.removeEventListener('error', onError);\n      };\n\n      script.addEventListener('load', onLoad);\n      script.addEventListener('error', onError);\n\n      if (!existing) {\n        script.setAttribute(SCRIPT_MARKER, '');\n        script.async = true;\n        script.src = KLASHA_SCRIPT_URL;\n        doc.head.appendChild(script);\n      }\n    });\n\n    return this.scriptPromise;\n  }\n\n  /**\n   * Returns the checkout container for `containerId`, creating it only when it\n   * does not already exist. Repeated calls never append a second element with\n   * the same id.\n   */\n  ensureContainer(containerId: string): HTMLElement | null {\n    if (!this.isBrowser) {\n      return null;\n    }\n    const existing = this.document.getElementById(containerId);\n    if (existing) {\n      return existing;\n    }\n    const container = this.document.createElement('div');\n    container.id = containerId;\n    container.setAttribute(CONTAINER_MARKER, '');\n    this.document.body.appendChild(container);\n    return container;\n  }\n\n  /**\n   * Removes a container previously created by {@link ensureContainer}. Called\n   * from `ngOnDestroy` so remounting does not leak DOM nodes.\n   */\n  removeContainer(containerId: string): void {\n    if (!this.isBrowser) {\n      return;\n    }\n    const container = this.document.getElementById(containerId);\n    if (container?.hasAttribute(CONTAINER_MARKER)) {\n      container.remove();\n    }\n  }\n\n  /**\n   * Instantiates `KlashaClient` and opens the checkout.\n   *\n   * The 9th argument (`isTestMode`) is the fix for the headline bug in\n   * `angular-klasha@0.0.x`: it was never passed, so `isTestMode` was\n   * `undefined` inside `pay.js` and every sandbox payment hit the LIVE gateway.\n   * It is coerced with `Boolean()` because `pay.js` only branches on\n   * truthiness — the string `'false'` would otherwise select production.\n   */\n  launch(options: ResolvedKlashaOptions, containerId: string): { init: () => void } {\n    const KlashaClient = this.window?.KlashaClient;\n    if (typeof KlashaClient !== 'function') {\n      throw new Error(\n        'angular-klasha: window.KlashaClient is not available — call loadScript() first',\n      );\n    }\n\n    this.ensureContainer(containerId);\n\n    const client = new KlashaClient(\n      options.merchantKey,\n      options.businessId || 1,\n      options.amount,\n      containerId,\n      options.callbackUrl ?? '',\n      options.destinationCurrency,\n      options.sourceCurrency,\n      options.kit,\n      Boolean(options.isTestMode),\n    );\n    client.init();\n    return client;\n  }\n\n  /**\n   * Validates the merchant supplied options. Returns an empty string when the\n   * options are usable, otherwise a human readable error message.\n   */\n  checkInput(obj: Partial<KlashaOptions>): string {\n    if (!obj.merchantKey && !this.merchantKey) {\n      return 'angular-klasha: Klasha merchantKey cannot be empty';\n    }\n    if (!obj.businessId && !this.businessId) {\n      return 'angular-klasha: Klasha businessId cannot be empty';\n    }\n    if (!obj.email) {\n      return 'angular-klasha: Klasha email cannot be empty';\n    }\n    if (!obj.fullname) {\n      return 'angular-klasha: Klasha name cannot be empty';\n    }\n    if (!obj.phone && !obj.phone_number) {\n      return 'angular-klasha: Klasha phone cannot be empty';\n    }\n    if (!obj.amount) {\n      return 'angular-klasha: Klasha amount cannot be empty';\n    }\n    return '';\n  }\n\n  /**\n   * Resolves merchant supplied options against the globally configured\n   * merchant key / business id / test mode, and builds a **fresh** `kit`\n   * object (`pay.js` mutates the kit it is given).\n   */\n  getKlashaOptions(obj: Partial<KlashaOptions>): ResolvedKlashaOptions {\n    const kit: KlashaKitOptions = obj.kit ?? {};\n    const sourceCurrency = obj.sourceCurrency || 'NGN';\n    const destinationCurrency = obj.destinationCurrency || 'NGN';\n    const phone = obj.phone || obj.phone_number || kit.phone || kit.phone_number || '';\n    const email = obj.email || kit.email || '';\n    const fullname = obj.fullname || kit.fullname || '';\n    const txRef = obj.tx_ref || kit.tx_ref || this.makeId(8);\n    const productType = kit.productType || kit.paymentType || '';\n\n    const resolved: ResolvedKlashaOptions = {\n      isTestMode: Boolean(obj.isTestMode ?? this.isTestMode ?? false),\n      merchantKey: obj.merchantKey || this.merchantKey || '',\n      businessId: obj.businessId || this.businessId || '',\n      amount: obj.amount as number,\n      tx_ref: txRef,\n      sourceCurrency,\n      destinationCurrency,\n      fullname,\n      email,\n      phone,\n      // Retained for backwards compatibility with 0.0.x integrations.\n      phone_number: phone,\n      paymentDescription: obj.paymentDescription || '',\n      callbackUrl: obj.callbackUrl || '',\n      metadata: obj.metadata ?? {},\n      kit: this.clean({\n        currency: kit.currency || sourceCurrency,\n        // `pay.js` reads `phone`; `phone_number` is never read by it.\n        phone,\n        phone_number: phone,\n        email,\n        fullname,\n        tx_ref: txRef,\n        productType,\n        // Retained for backwards compatibility with 0.0.x integrations.\n        paymentType: productType,\n        amount: kit.amount ?? obj.amount,\n        sourceAmount: kit.sourceAmount,\n      }),\n    };\n\n    return this.clean(resolved);\n  }\n\n  /**\n   * Removes `null`/`undefined` entries so they are not serialised into the\n   * request `pay.js` makes.\n   */\n  clean<T extends object>(obj: T): T {\n    const record = obj as Record<string, unknown>;\n    for (const propName of Object.keys(record)) {\n      if (record[propName] === null || record[propName] === undefined) {\n        delete record[propName];\n      }\n    }\n    return obj;\n  }\n\n  /** Generates a random alphanumeric transaction reference. */\n  makeId(length = 8): string {\n    const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n    let result = '';\n    for (let i = 0; i < length; i++) {\n      result += characters.charAt(Math.floor(Math.random() * characters.length));\n    }\n    return result;\n  }\n}\n","import { Directive, EventEmitter, inject, Input, OnDestroy, Output } from '@angular/core';\n\nimport { KlashaOptions, ResolvedKlashaOptions } from '../model/klasha-options';\nimport { AngularKlashaService, nextKlashaContainerId } from './angular-klasha.service';\n\n/**\n * Shared implementation behind {@link AngularKlashaComponent} and\n * {@link AngularKlashaDirective}. Not usable on its own — it has no selector.\n */\n@Directive()\nexport abstract class AngularKlashaBase implements OnDestroy {\n  /** Merchant API key. Overrides the value given to `provideKlasha()`/`forRoot()`. */\n  @Input() merchantKey?: string;\n  /** `true` uses the Klasha sandbox, `false` the live gateway. */\n  @Input() isTestMode?: boolean;\n  /** Merchant business id. Overrides the globally configured one. */\n  @Input() businessId?: string;\n  /** Amount to charge. */\n  @Input() amount?: number;\n  /** Free-form extra data. */\n  @Input() metadata?: unknown;\n  /** Unique transaction reference. Generated when omitted. */\n  @Input() tx_ref?: string;\n  /** @deprecated Use `sourceCurrency`/`destinationCurrency`. */\n  @Input() currency?: string;\n  /** Customer full name. */\n  @Input() fullname?: string;\n  /** Customer email address. */\n  @Input() email?: string;\n  /** Customer phone number. */\n  @Input() phone?: string;\n  /** @deprecated Use `phone`. */\n  @Input() phone_number?: string;\n  /** Currency the merchant prices in. Defaults to `NGN`. */\n  @Input() sourceCurrency?: string;\n  /** Currency the customer is charged in. Defaults to `NGN`. */\n  @Input() destinationCurrency?: string;\n  /** Human readable description of the payment. */\n  @Input() paymentDescription?: string;\n  /** URL the customer returns to after paying. */\n  @Input() callbackUrl?: string;\n  /** @deprecated Use `callbackUrl`. */\n  @Input() redirectUrl?: string;\n  /** Supply every option in one object instead of as individual inputs. */\n  @Input() klashaOptions?: KlashaOptions;\n  /** CSS classes applied to the rendered button (component only). */\n  @Input() class?: string;\n  /** Inline styles applied to the rendered button (component only). */\n  @Input() style?: Record<string, unknown> | null;\n\n  /** Emitted right before the Klasha checkout is opened. */\n  @Output() paymentInit = new EventEmitter<unknown>();\n  /** Emitted with the Klasha response once the payment flow finishes. */\n  @Output() callBack = new EventEmitter<unknown>();\n\n  /**\n   * DOM id of the checkout container owned by this instance. Unique per\n   * instance, so several payment buttons can coexist on one page.\n   */\n  readonly containerId = nextKlashaContainerId();\n\n  protected readonly klashaService = inject(AngularKlashaService);\n\n  /** The options last handed to `KlashaClient`. Exposed for debugging/tests. */\n  _KlashaOptions?: ResolvedKlashaOptions;\n\n  /**\n   * Validates, loads `pay.js`, then opens the Klasha checkout.\n   *\n   * @returns `undefined` on success, or the validation error message.\n   */\n  async pay(): Promise<string | undefined> {\n    const source: Partial<KlashaOptions> =\n      this.klashaOptions && Object.keys(this.klashaOptions).length >= 2\n        ? this.klashaOptions\n        : (this as Partial<KlashaOptions>);\n\n    this._KlashaOptions = this.buildOptions(source);\n\n    const errorText = this.validateInput(source);\n    if (errorText) {\n      console.error(errorText);\n      return errorText;\n    }\n\n    await this.klashaService.loadScript();\n\n    if (this.paymentInit.observed) {\n      this.paymentInit.emit();\n    }\n\n    this.klashaService.launch(this._KlashaOptions, this.containerId);\n    return undefined;\n  }\n\n  /** @internal */\n  validateInput(obj: Partial<KlashaOptions>): string {\n    if (!this.callBack.observed) {\n      return 'angular-klasha: Insert a callBack output like so (callBack)=\\'PaymentComplete($event)\\' to check payment status';\n    }\n    return this.klashaService.checkInput(obj);\n  }\n\n  /** @internal */\n  protected buildOptions(obj: Partial<KlashaOptions>): ResolvedKlashaOptions {\n    const resolved = this.klashaService.getKlashaOptions({\n      ...obj,\n      isTestMode: obj.isTestMode ?? this.isTestMode,\n      callbackUrl: obj.callbackUrl ?? this.callbackUrl ?? this.redirectUrl,\n      sourceCurrency: obj.sourceCurrency ?? this.sourceCurrency ?? this.currency,\n    });\n    const emit = (response?: unknown): void => this.callBack.emit(response);\n    resolved.kit.callBack = emit;\n    resolved.callBack = emit;\n    return resolved;\n  }\n\n  ngOnDestroy(): void {\n    this.klashaService.removeContainer(this.containerId);\n  }\n}\n","import { NgClass, NgStyle } from '@angular/common';\nimport { ChangeDetectionStrategy, Component } from '@angular/core';\n\nimport { AngularKlashaBase } from './angular-klasha.base';\n\n/**\n * Renders a button that opens the Klasha inline checkout when clicked.\n *\n * Standalone — import it directly:\n *\n * ```ts\n * @Component({ imports: [AngularKlashaComponent], ... })\n * ```\n */\n@Component({\n  selector: 'angular-klasha',\n  standalone: true,\n  imports: [NgClass, NgStyle],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `<button type=\"button\" [ngClass]=\"class || ''\" [ngStyle]=\"style || null\" (click)=\"pay()\">\n    <ng-content></ng-content>\n  </button>`,\n})\nexport class AngularKlashaComponent extends AngularKlashaBase {}\n","import { Directive, HostListener } from '@angular/core';\n\nimport { AngularKlashaBase } from './angular-klasha.base';\n\n/**\n * Opens the Klasha inline checkout when the host element is clicked. Use it on\n * your own button so you keep full control of the markup.\n *\n * Standalone — import it directly:\n *\n * ```ts\n * @Component({ imports: [AngularKlashaDirective], ... })\n * ```\n */\n@Directive({\n  selector: '[angular-klasha]',\n  standalone: true,\n})\nexport class AngularKlashaDirective extends AngularKlashaBase {\n  @HostListener('click')\n  onHostClick(): void {\n    void this.pay();\n  }\n}\n","import { EnvironmentProviders, makeEnvironmentProviders, Provider } from '@angular/core';\n\nimport { KlashaConfig } from '../model/klasha-options';\nimport { BUSINESS_ID, IS_TEST_MODE, MERCHANT_KEY } from './klasha-keys';\n\n/** @internal Shared by `provideKlasha()` and `AngularKlashaModule.forRoot()`. */\nexport function klashaProviders(config: KlashaConfig): Provider[] {\n  return [\n    { provide: MERCHANT_KEY, useValue: config.merchantKey },\n    { provide: BUSINESS_ID, useValue: config.businessId },\n    { provide: IS_TEST_MODE, useValue: Boolean(config.isTestMode) },\n  ];\n}\n\n/**\n * Configures Klasha for a standalone application.\n *\n * ```ts\n * bootstrapApplication(AppComponent, {\n *   providers: [\n *     provideKlasha({ merchantKey: 'xxx', businessId: '1', isTestMode: true }),\n *   ],\n * });\n * ```\n *\n * `isTestMode` is forwarded to `KlashaClient` as its 9th constructor argument\n * and is the only thing that selects the sandbox over the live gateway.\n */\nexport function provideKlasha(config: KlashaConfig): EnvironmentProviders {\n  return makeEnvironmentProviders(klashaProviders(config));\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\n\nimport { KlashaConfig } from '../model/klasha-options';\nimport { AngularKlashaComponent } from './angular-klasha.component';\nimport { AngularKlashaDirective } from './angular-klasha.directive';\nimport { klashaProviders } from './klasha.providers';\n\n/**\n * NgModule wrapper around the standalone {@link AngularKlashaComponent} and\n * {@link AngularKlashaDirective}.\n *\n * New applications can skip this entirely and use `provideKlasha()` plus the\n * standalone component/directive imports.\n */\n@NgModule({\n  imports: [AngularKlashaComponent, AngularKlashaDirective],\n  exports: [AngularKlashaComponent, AngularKlashaDirective],\n})\nexport class AngularKlashaModule {\n  /**\n   * Registers the merchant credentials for the whole application.\n   *\n   * ```ts\n   * AngularKlashaModule.forRoot('merchantKey', 'businessId', true)\n   * // or\n   * AngularKlashaModule.forRoot({ merchantKey: 'x', businessId: '1', isTestMode: true })\n   * ```\n   *\n   * @param merchantKeyOrConfig Merchant API key, or a {@link KlashaConfig}.\n   * @param businessId Merchant business id (when passing positional arguments).\n   * @param isTestMode `true` for the Klasha sandbox. Defaults to `false`.\n   */\n  static forRoot(\n    merchantKeyOrConfig: string | KlashaConfig,\n    businessId = '',\n    isTestMode = false,\n  ): ModuleWithProviders<AngularKlashaModule> {\n    const config: KlashaConfig =\n      typeof merchantKeyOrConfig === 'string'\n        ? { merchantKey: merchantKeyOrConfig, businessId, isTestMode }\n        : merchantKeyOrConfig;\n\n    return {\n      ngModule: AngularKlashaModule,\n      providers: klashaProviders(config),\n    };\n  }\n}\n","/*\n * Public API Surface of angular-klasha\n */\n\nexport * from './lib/angular-klasha.base';\nexport * from './lib/angular-klasha.component';\nexport * from './lib/angular-klasha.directive';\nexport * from './lib/angular-klasha.module';\nexport * from './lib/angular-klasha.service';\nexport * from './lib/klasha-keys';\nexport * from './lib/klasha.providers';\nexport * from './model/klasha-options';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}