{"version":3,"file":"stripe.mjs","sources":["../../../projects/stripe/src/lib/rxjs-utils.ts","../../../projects/stripe/src/lib/stripe.service.ts","../../../projects/stripe/src/lib/stripe.component.ts","../../../projects/stripe/src/lib/stripe.module.ts","../../../projects/stripe/src/public-api.ts","../../../projects/stripe/src/stripe.ts"],"sourcesContent":["import { mergeMap } from 'rxjs/operators';\nimport { Observable, timer, throwError } from 'rxjs';\n\nexport const genericRetryStrategy = (\n  {\n    maxRetryAttempts = 3,\n    scalingDuration = 600,\n    excludedStatusCodes = []\n  }: {\n    maxRetryAttempts?: number;\n    scalingDuration?: number;\n    excludedStatusCodes?: number[];\n  } = {}\n) => (attempts: Observable<any>) => {\n  return attempts.pipe(\n    mergeMap((error, i) => {\n      const retryAttempt = i + 1;\n      // if maximum number of retries have been met\n      // or response is a status code we don't wish to retry, throw error\n      if (retryAttempt > maxRetryAttempts || excludedStatusCodes.find(e => e === error.status)) {\n        return throwError(error);\n      }\n      console.log(`Attempt ${retryAttempt}: retrying in ${retryAttempt * scalingDuration}ms`);\n      // retry after 1s, 2s, etc...\n      return timer(retryAttempt * scalingDuration);\n    })\n  );\n};","import { Injectable } from \"@angular/core\";\nimport { HttpClient, HttpHeaders } from \"@angular/common/http\";\nimport { Observable, of } from \"rxjs\";\nimport { retry, catchError, retryWhen } from \"rxjs/operators\";\nimport { Stripe, StripeFactory } from \"./types\";\nimport { genericRetryStrategy } from \"./rxjs-utils\";\nimport { PayIntentModel } from \"./payIntend.model\";\n\n@Injectable({\n  providedIn: \"root\",\n})\nexport class StripeService {\n  apiUrl = \"\";\n  storeId = \"\";\n  tenantId = \"\";\n  accountRef = \"\";\n  locale = \"auto\";\n  currency = \"\";\n  httpOptions = {};\n\n  publishableKey = \"\";\n\n  STRIPE_API_URL = \"https://js.stripe.com/v3/\";\n\n  private stripeFactory: StripeFactory = window[\"Stripe\"];\n  private stripePromise: Promise<any>;\n  private ready = false;\n\n  constructor(private http: HttpClient) {}\n\n  /**\n   * Will initialize needed attribute for the service\n   * @param url api url\n   * @param storeId the storeId\n   * @param tenantId the tenant id\n   * @param idExtAccount the id of the external account\n   * @param key api key\n   * @param currency\n   * @param locale langage for stripe. Default is auto (detect navigator langage)\n   */\n  public init(\n    url: string,\n    storeId: string,\n    tenantId: string,\n    idExtAccount: string,\n    key: string,\n    currency: string,\n    locale?: string\n  ): any {\n    this.apiUrl = url;\n    this.storeId = storeId;\n    this.accountRef = idExtAccount;\n    this.currency = currency;\n    this.tenantId = tenantId;\n    if (locale !== undefined && locale !== null) {\n      this.locale = locale;\n    }\n    this.httpOptions = {\n      headers: new HttpHeaders({\n        \"Content-Type\": \"application/json\",\n        \"x-api-key\": key,\n      }),\n    };\n    this.publishableKey = \"\";\n\n    this.stripePromise = this.inject()\n      .then((d) => {\n        // console.log('stripeService inject ok');\n        this.setup().subscribe({\n          error: (err) => {\n            // console.log(\"stripeService setup catch\", err);\n            this.ready = false;\n            throw new Error(err);\n          },\n          complete: () => {\n            this.ready = true;\n            // console.log(\"stripeService ready\");\n          },\n        });\n      })\n      .catch((err) => {\n        // console.log('stripeService inject catch', err);\n        return Promise.reject(err);\n      });\n  }\n\n  /**\n   * Returns the `head` element.\n   * @throws Error('Application does not have a head element');\n   */\n  private getHeadElement(): HTMLElement {\n    let elm: HTMLElement = document.getElementsByTagName(\"head\")[0];\n\n    if (!elm) {\n      throw new Error(\"Application does not have a head element\");\n    }\n    return elm;\n  }\n\n  public getStripe(): any {\n    return this.stripe(this.publishableKey);\n  }\n\n  get stripe() {\n    return this.stripeFactory;\n  }\n\n  set stripe(s: StripeFactory) {\n    this.stripeFactory = s;\n  }\n\n  private async setPublishableKey(key: string, options?: any): Promise<Stripe> {\n    return this.stripePromise\n      .then(() => {\n        return this.stripe(key);\n      })\n      .catch((err) => {\n        return Promise.reject(err);\n      });\n  }\n\n  public get useStripe(): Stripe {\n    return this.stripe(this.publishableKey);\n  }\n\n  private inject(): Promise<StripeFactory> {\n    if (this.stripe) {\n      // console.log('stripeService inject existing');\n      return Promise.resolve(this.stripe);\n    }\n\n    // console.log('stripeService inject new');\n    return new Promise((res, rej) => {\n      const head = this.getHeadElement();\n      const script = document.createElement(\"script\");\n      script.setAttribute(\"type\", \"text/javascript\");\n      script.setAttribute(\"src\", this.STRIPE_API_URL);\n      head.appendChild(script);\n      script.addEventListener(\"load\", () => {\n        this.stripe = window[\"Stripe\"];\n        res(this.stripe);\n      });\n    });\n  }\n\n  /**\n   * Will setup stripe\n   */\n  public setup(): Observable<any> {\n    return new Observable((observer) => {\n      this.publishableKey = \"\";\n      this.getPublishableKey().subscribe({\n        next: (data) => {\n          const res = (data as any).body;\n          this.publishableKey = res.publishableKey;\n          observer.next(data);\n        },\n        error: (error) => {\n          observer.error(error);\n        },\n        complete: () => {\n          observer.complete();\n        },\n      });\n    });\n  }\n\n  /**\n   * Will create the subscription checkout session\n   * @param priceId the priceId of the product to subscribe\n   * @param offerTitle offer.title to display in the subscription email\n   * @param subscriptionId the subscriptionId\n   * @param tenantId the tenantId\n   * @param user user.firstname, user.lastname, user.email\n   * @param successUrl the success url for the redirection. Https mandatory (e.g https://misite.com)\n   * @param cancelUrl the cancel Url\n   * @param networkId the nerwork id\n   */\n  public createSessionForSubscription(\n    priceId: string,\n    offerTitle: string,\n    subscriptionId: string,\n    tenantId: string,\n    user: any,\n    successUrl: string,\n    cancelUrl: string,\n    networkId?: string\n  ): Observable<any> {\n    return new Observable((observer) => {\n      this.createCheckoutSessionForSubscription(\n        priceId,\n        offerTitle,\n        subscriptionId,\n        tenantId,\n        networkId,\n        user,\n        successUrl,\n        cancelUrl\n      ).subscribe({\n        next: (data) => {\n          const r = data as any;\n          if (r.statusCode >= 400) {\n            observer.error();\n          } else {\n            const res = r.body;\n            if (res !== undefined && res.sessionId !== undefined) {\n              observer.next(res.sessionId);\n            } else {\n              observer.error();\n            }\n          }\n        },\n        error: (error) => {\n          observer.error(error);\n        },\n        complete: () => {\n          observer.complete();\n        },\n      });\n    });\n  }\n\n  /**\n   * Will create the one time payment checkout session\n   * @param orderId the orderId\n   * @param storeId the storeId of the store where the checkout is taking place\n   * @param userId the userId of the user making the checkout\n   * @param successUrl the success url for the redirection. Https mandatory (e.g https://misite.com)\n   * @param cancelUrl the cancel Url\n   */\n  public createSessionForOneTimePayment(\n    orderId: string,\n    storeId: string,\n    userId: string,\n    successUrl: string,\n    cancelUrl: string,\n    networkId?: string\n  ): Observable<any> {\n    return new Observable((observer) => {\n      this.createCheckoutSessionForOneTimePayment(\n        orderId,\n        storeId,\n        userId,\n        successUrl,\n        cancelUrl\n      ).subscribe({\n        next: (data) => {\n          const r = data as any;\n          if (r.statusCode >= 400) {\n            observer.error();\n          } else {\n            if (r !== undefined && r.sessionUrl !== undefined) {\n              observer.next(r.sessionUrl);\n            } else {\n              observer.error();\n            }\n          }\n        },\n        error: (error) => {\n          observer.error(error);\n        },\n        complete: () => {\n          observer.complete();\n        },\n      });\n    });\n  }\n\n  /**\n   * Will create the user Stripe connect account link\n   * @param storeId the storeId linked to the extAccount\n   * @param refreshUrl the refresh url\n   * @param returnUrl the return url for the redirection.\n   */\n  public createUserAccountLink(\n    storeId: string,\n    refreshUrl: string,\n    returnUrl: string\n  ): Observable<any> {\n    return new Observable((observer) => {\n      this.createConnectAccountLink(storeId, refreshUrl, returnUrl).subscribe({\n        next: (data) => {\n          const r = data as any;\n          if (r.statusCode >= 400) {\n            observer.error();\n          } else {\n            if (r !== undefined && r.url !== undefined) {\n              observer.next(r.url);\n            } else {\n              observer.error();\n            }\n          }\n        },\n        error: (error) => {\n          observer.error(error);\n        },\n        complete: () => {\n          observer.complete();\n        },\n      });\n    });\n  }\n\n  /**\n   * Will create the user Stripe billing portal  link\n   * @param storeId the storeId of the subscription\n   * @param subscriptionId the subscription id \n   * @param returnUrl the return url for the redirection\n   */\n  public createUserBillingPortalLink(\n    storeId: string,\n    subscriptionId: string,\n    returnUrl: string\n  ): Observable<any> {\n    return new Observable((observer) => {\n      this.createBillingPortalLink(storeId, subscriptionId, returnUrl).subscribe({\n        next: (data) => {\n          const r = data as any;\n          if (r.statusCode >= 400) {\n            observer.error();\n          } else {\n            if (r !== undefined && r.url !== undefined) {\n              observer.next(r.url);\n            } else {\n              observer.error();\n            }\n          }\n        },\n        error: (error) => {\n          observer.error(error);\n        },\n        complete: () => {\n          observer.complete();\n        },\n      });\n    });\n  }\n\n  /**\n   * Create the payment intent for the given data\n   * @param payIntendModel the payIntend Model data\n   * @returns Observable\n   */\n  public createPayIntent(payIntendModel: PayIntentModel): Observable<any> {\n    var body = {\n      tenantId: this.tenantId,\n      accountRef: this.accountRef,\n      currency: this.currency,\n      items: payIntendModel.items,\n    };\n    return new Observable((observer) => {\n      this.payIntent(body).subscribe(\n        (data) => {\n          const res = data as any;\n          observer.next(res);\n        },\n        (error) => {\n          observer.error(error);\n        }\n      );\n    });\n  }\n\n  /**\n   * Create the checkout session for subcription\n   * @param priceId\n   * @param offerTitle\n   * @param subscriptionId\n   * @param tenantId\n   * @param networkId\n   * @param user\n   * @param successUrl\n   * @param cancelUrl\n   * @returns\n   */\n  private createCheckoutSessionForSubscription(\n    priceId: string,\n    offerTitle: string,\n    subscriptionId: string,\n    tenantId: string,\n    networkId: string,\n    user: any,\n    successUrl: string,\n    cancelUrl: string\n  ): Observable<any> {\n    const apiURL = this.apiUrl + \"/stripe/checkoutSubscriptionSession\";\n    let params = {\n      priceId: priceId,\n      tenantId: tenantId,\n      subscriptionId: subscriptionId,\n      offerTitle: offerTitle,\n      networkId: networkId === undefined || networkId === null ? \"\" : networkId,\n      user: {\n        email: user.email,\n        firstname: user.firstname,\n        lastname: user.lastname,\n      },\n      successUrl: successUrl,\n      cancelUrl: cancelUrl,\n      locale:\n        this.locale === undefined || this.locale === null ? \"\" : this.locale,\n    };\n    return this.http\n      .post(apiURL, JSON.stringify(params), this.httpOptions)\n      .pipe(\n        retryWhen(\n          genericRetryStrategy({\n            maxRetryAttempts: 3,\n            scalingDuration: 600,\n            excludedStatusCodes: [400, 401, 403, 404],\n          })\n        ),\n        catchError(this.handleError)\n      );\n  }\n\n  /**\n   * Create the checkout session for one time Payment\n   * @param orderId\n   * @param storeId\n   * @param userId\n   * @param successUrl\n   * @param cancelUrl\n   * @returns\n   */\n  private createCheckoutSessionForOneTimePayment(\n    orderId: string,\n    storeId: string,\n    userId: string,\n    successUrl: string,\n    cancelUrl: string\n  ): Observable<any> {\n    const apiURL = this.apiUrl + \"/stripe/checkoutPaymentSession\";\n    let params = {\n      orderId: orderId,\n      storeId: storeId,\n      userId: userId,\n      locale:\n        this.locale === undefined || this.locale === null ? \"\" : this.locale,\n      successUrl: successUrl,\n      cancelUrl: cancelUrl,\n    };\n    return this.http\n      .post(apiURL, JSON.stringify(params), this.httpOptions)\n      .pipe(\n        retryWhen(\n          genericRetryStrategy({\n            maxRetryAttempts: 3,\n            scalingDuration: 600,\n            excludedStatusCodes: [400, 401, 403, 404],\n          })\n        ),\n        catchError(this.handleError)\n      );\n  }\n\n  /**\n   * Will create the Stripe connect account link for the user token\n   * @param storeId the storeId linked to the extAccount\n   * @param refreshUrl\n   * @param returnUrl\n   * @returns\n   */\n  private createConnectAccountLink(\n    storeId: string,\n    refreshUrl: string,\n    returnUrl: string\n  ): Observable<any> {\n    const apiURL = this.apiUrl + \"/stripe/accountLink\";\n    let params = {\n      store: { id: storeId },\n      refreshUrl: refreshUrl,\n      returnUrl: returnUrl,\n    };\n    return this.http\n      .post(apiURL, JSON.stringify(params), this.httpOptions)\n      .pipe(\n        retryWhen(\n          genericRetryStrategy({\n            maxRetryAttempts: 3,\n            scalingDuration: 600,\n            excludedStatusCodes: [400, 401, 403, 404],\n          })\n        ),\n        catchError(this.handleError)\n      );\n  }\n  /**\n   * Will create the Stripe billing portal link for the user token\n   * @param storeId the storeId linked to the extAccount\n   * @param subscriptionId\n   * @param returnUrl\n   * @returns\n   */\n  private createBillingPortalLink(\n    storeId: string,\n    subscriptionId: string,\n    returnUrl: string\n  ): Observable<any> {\n    const apiURL = `${this.apiUrl}/stripe/by-store/${storeId}/billingPortalLink`;\n    let params = {\n      subscription: { id: subscriptionId },\n      locale:\n        this.locale === undefined || this.locale === null ? \"\" : this.locale,\n      returnUrl: returnUrl,\n    };\n    return this.http\n      .post(apiURL, JSON.stringify(params), this.httpOptions)\n      .pipe(\n        retryWhen(\n          genericRetryStrategy({\n            maxRetryAttempts: 3,\n            scalingDuration: 600,\n            excludedStatusCodes: [400, 401, 403, 404],\n          })\n        ),\n        catchError(this.handleError)\n      );\n  }\n\n  /**\n   * Will onboard the tenant to Stripe\n   */\n  private onboardUser(tenantId: string): any {}\n\n  private payIntent(body: any): Observable<any> {\n    const apiURL = this.apiUrl + \"/stripe/payIntents\";\n    return this.http.post(apiURL, JSON.stringify(body), this.httpOptions).pipe(\n      retryWhen(\n        genericRetryStrategy({\n          maxRetryAttempts: 3,\n          scalingDuration: 600,\n          excludedStatusCodes: [400, 401, 403, 404],\n        })\n      ),\n      catchError(this.handleError)\n    );\n  }\n\n  public handleResult(result: any): string {\n    if (result.error) {\n      return result.error.message;\n    }\n  }\n\n  /**\n   * Get the publishableKey\n   * @param storeId\n   */\n  private getPublishableKey(): Observable<any> {\n    const apiURL = this.apiUrl + \"/stripe/setup\";\n    return this.http.post(apiURL, {}, this.httpOptions).pipe(\n      retryWhen(\n        genericRetryStrategy({\n          maxRetryAttempts: 3,\n          scalingDuration: 600,\n          excludedStatusCodes: [400, 401, 403, 404],\n        })\n      ),\n      catchError(this.handleError)\n    );\n  }\n\n  private handleError<T>(operation = \"operation\", result?: T): any {\n    return (error: any): Observable<T> => {\n      // TODO: send the error to remote logging infrastructure\n      console.error(error); // log to console instead\n\n      // TODO: better job of transforming error for user consumption\n      this.log(`${operation} failed: ${error.message}`);\n\n      // Let the app keep running by returning an empty result.\n      return of(result as T);\n    };\n  }\n\n  /** Log a HeroService message with the MessageService */\n  private log(message: string): void {\n    console.log(`HeroService: ${message}`);\n  }\n}\n","import { Component, OnInit } from '@angular/core';\n\n@Component({\n  selector: 'lib-stripe',\n  template: `\n    <p>\n      stripe works!\n    </p>\n  `,\n  styles: [\n  ]\n})\nexport class StripeComponent implements OnInit {\n\n  constructor() { }\n\n  ngOnInit(): void {\n  }\n\n}\n","import { NgModule } from '@angular/core';\nimport { StripeComponent } from './stripe.component';\n\n\n\n@NgModule({\n  declarations: [StripeComponent],\n  imports: [\n  ],\n  exports: [StripeComponent]\n})\nexport class StripeModule { }\n","/*\n * Public API Surface of stripe\n */\n\nexport * from './lib/stripe.service';\nexport * from './lib/stripe.component';\nexport * from './lib/stripe.module';\nexport * from './lib/payIntend.model';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}