{"version":3,"file":"ngx-paypal-fix.mjs","sources":["../../src/lib/services/script.service.ts","../../src/lib/services/paypal-script.service.ts","../../src/lib/components/paypal.component.ts","../../src/lib/ngx-paypal.module.ts","../../src/public_api.ts","../../src/ngx-paypal-fix.ts"],"sourcesContent":["import { Injectable, NgZone } from '@angular/core';\r\n\r\n@Injectable()\r\nexport class ScriptService {\r\n\r\n    constructor(\r\n        protected zone: NgZone,\r\n    ) {\r\n    }\r\n\r\n    registerScript(url: string, globalVar: string, onReady: (globalVar: any) => void): void {\r\n        const existingGlobalVar = (window as any)[globalVar];\r\n        if (existingGlobalVar) {\r\n            // global variable is present = script was already loaded\r\n            this.zone.run(() => {\r\n                onReady(existingGlobalVar);\r\n            });\r\n            return;\r\n        }\r\n\r\n\r\n        // prepare script elem\r\n        const scriptElem = document.createElement('script');\r\n        scriptElem.id = this.getElemId(globalVar);\r\n        scriptElem.innerHTML = '';\r\n        scriptElem.onload = () => {\r\n            this.zone.run(() => {\r\n                onReady((window as any)[globalVar]);\r\n            });\r\n        };\r\n        scriptElem.src = url;\r\n        scriptElem.async = true;\r\n        scriptElem.defer = true;\r\n\r\n        // add script to header\r\n        document.getElementsByTagName('head')[0].appendChild(scriptElem);\r\n    }\r\n\r\n    cleanup(globalVar: string): void {\r\n        // remove script from DOM\r\n        const scriptElem = document.getElementById(this.getElemId(globalVar));\r\n\r\n        if (scriptElem) {\r\n            scriptElem.remove();\r\n        }\r\n    }\r\n\r\n    private getElemId(globalVar: string): string {\r\n        return `ngx-paypal-script-elem-${globalVar}`;\r\n    }\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { IPayPalUrlConfig, IQueryParam } from '../models/paypal-models';\r\nimport { ScriptService } from './script.service';\r\n\r\n@Injectable()\r\nexport class PayPalScriptService {\r\n\r\n    private readonly paypalWindowName = 'paypal';\r\n\r\n\r\n    constructor(\r\n        protected scriptService: ScriptService,\r\n    ) {\r\n    }\r\n\r\n    registerPayPalScript(config: IPayPalUrlConfig, onReady: (payPalApi: any) => void): void {\r\n        this.scriptService.registerScript(this.getUrlForConfig(config), this.paypalWindowName, onReady);\r\n    }\r\n\r\n    destroyPayPalScript(): void {\r\n        this.scriptService.cleanup(this.paypalWindowName);\r\n    }\r\n\r\n    private getUrlForConfig(config: IPayPalUrlConfig): string {\r\n        const params: IQueryParam[] = [\r\n            {\r\n                name: 'client-id',\r\n                value: config.clientId\r\n            }\r\n        ];\r\n\r\n        if (config.currency) {\r\n            params.push({\r\n                name: 'currency',\r\n                value: config.currency\r\n            });\r\n        }\r\n\r\n        if (config.commit) {\r\n            params.push({\r\n                name: 'commit',\r\n                value: config.commit\r\n            });\r\n        }\r\n\r\n        if (config.vault) {\r\n            params.push({\r\n                name: 'vault',\r\n                value: config.vault\r\n            });\r\n        }\r\n\r\n        if (config.intent) {\r\n            params.push({\r\n                name: 'intent',\r\n                value: config.intent\r\n            });\r\n        }        \r\n\r\n        if (config.extraParams) {\r\n            params.push(...config.extraParams);\r\n        }\r\n\r\n        return `https://www.paypal.com/sdk/js${this.getQueryString(params)}`;\r\n    }\r\n\r\n    private getQueryString(queryParams: IQueryParam[]): string {\r\n        let queryString = '';\r\n\r\n        for (let i = 0; i < queryParams.length; i++) {\r\n            const queryParam = queryParams[i];\r\n            if (i === 0) {\r\n                queryString += '?';\r\n            } else {\r\n                queryString += '&';\r\n            }\r\n\r\n            queryString += `${queryParam.name}=${queryParam.value}`;\r\n        }\r\n\r\n        return queryString;\r\n    }\r\n}\r\n","import {\r\n  AfterViewInit,\r\n  ChangeDetectionStrategy,\r\n  ChangeDetectorRef,\r\n  Component,\r\n  ElementRef,\r\n  EventEmitter,\r\n  Input,\r\n  NgZone,\r\n  OnChanges,\r\n  OnDestroy,\r\n  Output,\r\n  SimpleChanges,\r\n  ViewChild,\r\n} from '@angular/core';\r\nimport {Subject} from 'rxjs';\r\n\r\nimport {\r\n  ICancelCallbackData,\r\n  IClientAuthorizeCallbackData,\r\n  ICreateOrderCallbackActions,\r\n  ICreateSubscriptionCallbackActions,\r\n  ICreateSubscriptionCallbackData,\r\n  IInitCallbackData,\r\n  IOnApproveCallbackActions,\r\n  IOnApproveCallbackData,\r\n  IOnClickCallbackActions,\r\n  IOnInitCallbackActions,\r\n  IOnShippingChangeActions,\r\n  IOnShippingChangeData,\r\n  IPayPalConfig,\r\n} from '../models/paypal-models';\r\nimport {PayPalScriptService} from '../services/paypal-script.service';\r\n\r\n@Component({\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  selector: 'ngx-paypal',\r\n  template: `\r\n    <div #payPalButtonContainer [id]=\"payPalButtonContainerId\"></div>\r\n  `\r\n})\r\nexport class NgxPaypalComponent implements OnChanges, OnDestroy, AfterViewInit {\r\n\r\n  /**\r\n   * Configuration for PayPal.\r\n   */\r\n  @Input() config?: IPayPalConfig;\r\n\r\n  /**\r\n   * If enabled, PayPal SDK script will be loaded. Useful if you want to have multiple PayPal components on the same page\r\n   * sharing base configuration. In such a case only a single component may register script.\r\n   */\r\n  @Input() registerScript: boolean = true;\r\n\r\n  /**\r\n   * Emitted when PayPal script is loaded\r\n   */\r\n  @Output() scriptLoaded = new EventEmitter<any>();\r\n\r\n  /**\r\n   * Id of the element where PayPal button will be rendered\r\n   */\r\n  public payPalButtonContainerId?: string;\r\n\r\n  private readonly ngUnsubscribe: Subject<void> = new Subject<void>();\r\n\r\n  private payPalButtonContainerElem?: ElementRef;\r\n\r\n  @ViewChild('payPalButtonContainer', {static: false}) set payPalButtonContainer(content: ElementRef) {\r\n    this.payPalButtonContainerElem = content;\r\n  }\r\n\r\n  /**\r\n   * Flag that indicates if PayPal should be initialized (required for handling script load events and availability of DOM element)\r\n   */\r\n  private initializePayPal: boolean = true;\r\n\r\n  /**\r\n   * Reference to PayPal global API\r\n   */\r\n  private payPal: any;\r\n\r\n  constructor(\r\n    private paypalScriptService: PayPalScriptService,\r\n    private cdr: ChangeDetectorRef,\r\n    private ngZone: NgZone\r\n  ) {\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    if (!this.payPalButtonContainerId) {\r\n      this.payPalButtonContainerId = this.generateElementId();\r\n    }\r\n\r\n    // first time config setup\r\n    const config = this.config;\r\n\r\n    if (changes.config.isFirstChange()) {\r\n      if (config && this.registerScript) {\r\n        this.initPayPalScript(config, (payPal) => {\r\n          // store reference to paypal global script\r\n          this.payPal = payPal;\r\n          this.doPayPalCheck();\r\n        });\r\n      }\r\n    }\r\n\r\n    // changes to config\r\n    if (!changes.config.isFirstChange()) {\r\n      this.reinitialize(config);\r\n    }\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this.paypalScriptService.destroyPayPalScript();\r\n    this.ngUnsubscribe.next();\r\n    this.ngUnsubscribe.complete();\r\n  }\r\n\r\n  ngAfterViewInit(): void {\r\n    this.doPayPalCheck();\r\n  }\r\n\r\n  customInit(payPal: any): void {\r\n    this.payPal = payPal;\r\n    this.doPayPalCheck();\r\n  }\r\n\r\n  reinitialize(config: IPayPalConfig | undefined): void {\r\n    this.config = config;\r\n    this.payPal = undefined;\r\n    this.paypalScriptService.destroyPayPalScript();\r\n    this.payPalButtonContainerId = this.generateElementId();\r\n    this.initializePayPal = true;\r\n\r\n    if (this.payPalButtonContainerElem) {\r\n      try {\r\n        while (this.payPalButtonContainerElem.nativeElement.firstChild) {\r\n          this.payPalButtonContainerElem.nativeElement.removeChild(this.payPalButtonContainerElem.nativeElement.firstChild);\r\n        }\r\n      } catch (error) {\r\n        console.error(error);\r\n      }\r\n    }\r\n\r\n    this.cdr.detectChanges();\r\n\r\n    if (this.config) {\r\n      if (!this.payPal) {\r\n        this.initPayPalScript(this.config, (payPal) => {\r\n\r\n          // store reference to paypal global script\r\n          this.payPal = payPal;\r\n          this.doPayPalCheck();\r\n        });\r\n      } else {\r\n        this.doPayPalCheck();\r\n      }\r\n    }\r\n  }\r\n\r\n\r\n  private doPayPalCheck(): void {\r\n    if (this.initializePayPal && this.config && this.payPal && this.payPalButtonContainerElem) {\r\n      // make sure that id is also set\r\n      if (this.payPalButtonContainerElem.nativeElement.id) {\r\n        this.initializePayPal = false;\r\n        this.initPayPal(this.config, this.payPal);\r\n      }\r\n    }\r\n  }\r\n\r\n  private initPayPalScript(config: IPayPalConfig, initPayPal: (paypal: any) => void): void {\r\n    this.paypalScriptService.registerPayPalScript({\r\n      clientId: config.clientId,\r\n      commit: config.advanced && config.advanced.commit ? config.advanced.commit : undefined,\r\n      currency: config.currency,\r\n      vault: config.vault,\r\n      intent: config.intent,\r\n      extraParams: config.advanced && config.advanced.extraQueryParams ? config.advanced.extraQueryParams : []\r\n    }, (paypal) => {\r\n      this.scriptLoaded.next(paypal);\r\n      initPayPal(paypal);\r\n    });\r\n  }\r\n\r\n  private generateElementId(): string {\r\n    return `ngx-captcha-id-${this.uuidv4()}`;\r\n  }\r\n\r\n  uuidv4() {\r\n    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\r\n      // tslint:disable-next-line:triple-equals no-bitwise\r\n      const r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);\r\n      return v.toString(16);\r\n    });\r\n  }\r\n\r\n  private initPayPal(config: IPayPalConfig, paypal: any): void {\r\n    // Running outside angular zone prevents infinite ngDoCheck lifecycle calls\r\n    this.ngZone.runOutsideAngular(() => {\r\n\r\n      // https://developer.paypal.com/docs/checkout/integrate/#2-add-the-paypal-script-to-your-web-page\r\n      const createOrder = (data: any, actions: ICreateOrderCallbackActions) => {\r\n        return this.ngZone.run(() => {\r\n          if (config.createOrderOnClient && config.createOrderOnServer) {\r\n            throw Error(`Both 'createOrderOnClient' and 'createOrderOnServer' are defined.\r\n                    Please choose one or the other.`);\r\n          }\r\n\r\n          if (!config.createOrderOnClient && !config.createOrderOnServer) {\r\n            throw Error(`Neither 'createOrderOnClient' or 'createOrderOnServer' are defined.\r\n                    Please define one of these to create order.`);\r\n          }\r\n\r\n          if (config.createOrderOnClient) {\r\n            return actions.order.create(config.createOrderOnClient(data));\r\n          }\r\n\r\n          if (config.createOrderOnServer) {\r\n            return config.createOrderOnServer(data);\r\n          }\r\n\r\n          throw Error(`Invalid state for 'createOrder'.`);\r\n        });\r\n      };\r\n      const createSubscription = (data: ICreateSubscriptionCallbackData, actions: ICreateSubscriptionCallbackActions) => {\r\n        return this.ngZone.run(() => {\r\n          if (config.createSubscriptionOnClient) {\r\n            return actions.subscription.create(config.createSubscriptionOnClient(data));\r\n          }\r\n        });\r\n      };\r\n      const onShippingChange = (data: IOnShippingChangeData, actions: IOnShippingChangeActions) => {\r\n        return this.ngZone.run(() => {\r\n          if (config.onShippingChange) {\r\n            return config.onShippingChange(data, actions);\r\n          }\r\n        });\r\n      };\r\n      const buttonsConfig = {\r\n        style: config.style,\r\n        onApprove: (data: IOnApproveCallbackData, actions: IOnApproveCallbackActions) => {\r\n          return this.ngZone.run(() => {\r\n            if (config.onApprove) {\r\n              config.onApprove(data, actions);\r\n            }\r\n\r\n            // capture on server\r\n            if (config.authorizeOnServer) {\r\n              return config.authorizeOnServer(data, actions);\r\n            }\r\n\r\n            // capture on client\r\n            const onClientAuthorization = config.onClientAuthorization;\r\n            if (onClientAuthorization) {\r\n              actions.order.capture().then((details: IClientAuthorizeCallbackData) => {\r\n                this.ngZone.run(() => {\r\n                  onClientAuthorization(details);\r\n                });\r\n              });\r\n              return;\r\n            }\r\n          });\r\n        },\r\n        onError: (error: any) => {\r\n          this.ngZone.run(() => {\r\n            if (config.onError) {\r\n              config.onError(error);\r\n            }\r\n          });\r\n        },\r\n        onCancel: (data: ICancelCallbackData, actions: any) => {\r\n          this.ngZone.run(() => {\r\n            if (config.onCancel) {\r\n              config.onCancel(data, actions);\r\n            }\r\n          });\r\n        },\r\n        onClick: (data: any, actions: IOnClickCallbackActions) => {\r\n          this.ngZone.run(() => {\r\n            if (config.onClick) {\r\n              config.onClick(data, actions);\r\n            }\r\n          });\r\n        },\r\n        onInit: (data: IInitCallbackData, actions: IOnInitCallbackActions) => {\r\n          this.ngZone.run(() => {\r\n            if (config.onInit) {\r\n              config.onInit(data, actions);\r\n            }\r\n          });\r\n        },\r\n        // Add the functions if they've been created in the config object\r\n        // The API only allows one of the two to be set\r\n        ...((config.createOrderOnClient || config.createOrderOnServer) && {createOrder}),\r\n        ...((config.createSubscriptionOnClient) && {createSubscription}),\r\n        // The onShippingChange callback cannot be used with subscriptions\r\n        // so we only add it if it is set\r\n        ...(config.onShippingChange && {onShippingChange})\r\n      };\r\n      paypal.Buttons(buttonsConfig).render(`#${this.payPalButtonContainerId}`);\r\n    });\r\n  }\r\n}\r\n\r\n","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\n\r\nimport { NgxPaypalComponent } from './components/paypal.component';\r\nimport { ScriptService } from './services/script.service';\r\nimport { PayPalScriptService } from './services/paypal-script.service';\r\n\r\n@NgModule({\r\n  imports: [\r\n    CommonModule\r\n  ],\r\n  declarations: [\r\n    NgxPaypalComponent,\r\n  ],\r\n  exports: [\r\n    NgxPaypalComponent,\r\n  ],\r\n  providers: [\r\n    ScriptService,\r\n    PayPalScriptService\r\n  ]\r\n})\r\nexport class NgxPayPalModule {\r\n}\r\n\r\n\r\n","/** Public API */\r\nexport * from './lib/ngx-paypal.module';\r\nexport * from './lib/models/paypal-models';\r\nexport * from './lib/components/paypal.component';\r\nexport * from './lib/services/paypal-script.service';\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}