UNPKG

@fireflysemantics/angular-stripe-service

Version:

Stripe service used to integrate Stripe Elements with Angular.

75 lines 7.73 kB
import { Injectable } from '@angular/core'; import * as i0 from "@angular/core"; const STRIPE_API_URL = "https://js.stripe.com/v3/"; /** * This service has a `stripe` property to that gets * initialized to `window["Stripe"]`. * * The constructor calls `inject()` which will * inject a script tag with containing the URL that loads * stripe and return a `Promise<StripeFactory>`. * * The script tag will only load stripe if * c is not available. * * If `window["Stripe"]` is available then `inject()` resolves * the promise with that instance immediately, and does not create and * wait for the script tag to load. * * */ export class AngularStripeService { constructor() { // @ts-ignore this._stripe = window['Stripe']; this.stripePromise = this.inject(); } get stripe() { return this._stripe; } set stripe(s) { this._stripe = s; } setPublishableKey(key, options) { return this.stripePromise.then(() => { return this.stripe(key, options); }); } inject() { if (this.stripe) { return Promise.resolve(this.stripe); } return new Promise((res, rej) => { const head = this.getHeadElement(); const script = document.createElement("script"); script.setAttribute("type", "text/javascript"); script.setAttribute("src", STRIPE_API_URL); head.appendChild(script); script.addEventListener("load", () => { // @ts-ignore this.stripe = window["Stripe"]; res(this.stripe); }); }); } /** * Returns the `head` element. * @throws Error('Application does not have a head element'); */ getHeadElement() { let elm = document.getElementsByTagName("head")[0]; if (!elm) { throw new Error('Application does not have a head element'); } return elm; } } AngularStripeService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: AngularStripeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); AngularStripeService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: AngularStripeService, providedIn: 'root' }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: AngularStripeService, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }], ctorParameters: function () { return []; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1zdHJpcGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItc3RyaXBlLXNlcnZpY2Uvc3JjL2xpYi9hbmd1bGFyLXN0cmlwZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRzNDLE1BQU0sY0FBYyxHQUFHLDJCQUEyQixDQUFDO0FBS25EOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBQ0gsTUFBTSxPQUFPLG9CQUFvQjtJQU0vQjtRQUpBLGFBQWE7UUFDTCxZQUFPLEdBQWlCLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUk5QyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQTtJQUNwQyxDQUFDO0lBRUQsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFDRCxJQUFJLE1BQU0sQ0FBQyxDQUFlO1FBQ3hCLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBQ25CLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxHQUFVLEVBQUUsT0FBWTtRQUN4QyxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFFLEdBQUcsRUFBRTtZQUNuQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFBO1FBQ2xDLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELE1BQU07UUFFSixJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDZixPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBRSxDQUFBO1NBQ3RDO1FBRUQsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsRUFBRTtZQUM1QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUE7WUFDbEMsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQTtZQUMvQyxNQUFNLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxpQkFBaUIsQ0FBQyxDQUFBO1lBQzlDLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLGNBQWMsQ0FBQyxDQUFBO1lBQzFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUE7WUFDeEIsTUFBTSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBQyxHQUFFLEVBQUU7Z0JBQ2pDLGFBQWE7Z0JBQ2IsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQy9CLEdBQUcsQ0FBRSxJQUFJLENBQUMsTUFBTSxDQUFFLENBQUE7WUFDcEIsQ0FBQyxDQUFDLENBQUE7UUFDSixDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRDs7O09BR0c7SUFDSCxjQUFjO1FBQ1osSUFBSSxHQUFHLEdBQWUsUUFBUSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBRTlELElBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDUCxNQUFNLElBQUksS0FBSyxDQUFDLDBDQUEwQyxDQUFDLENBQUM7U0FDN0Q7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7O2lIQXREVSxvQkFBb0I7cUhBQXBCLG9CQUFvQixjQW5CbkIsTUFBTTsyRkFtQlAsb0JBQW9CO2tCQXBCaEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdHJpcGUsIFN0cmlwZUZhY3RvcnkgfSBmcm9tICcuL3R5cGVzJztcblxuY29uc3QgU1RSSVBFX0FQSV9VUkwgPSBcImh0dHBzOi8vanMuc3RyaXBlLmNvbS92My9cIjtcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG4vKipcbiAqIFRoaXMgc2VydmljZSBoYXMgYSBgc3RyaXBlYCBwcm9wZXJ0eSB0byB0aGF0IGdldHNcbiAqIGluaXRpYWxpemVkIHRvIGB3aW5kb3dbXCJTdHJpcGVcIl1gLlxuICogXG4gKiBUaGUgY29uc3RydWN0b3IgY2FsbHMgYGluamVjdCgpYCB3aGljaCB3aWxsXG4gKiBpbmplY3QgYSBzY3JpcHQgdGFnIHdpdGggY29udGFpbmluZyB0aGUgVVJMIHRoYXQgbG9hZHNcbiAqIHN0cmlwZSBhbmQgcmV0dXJuIGEgYFByb21pc2U8U3RyaXBlRmFjdG9yeT5gLlxuICogXG4gKiBUaGUgc2NyaXB0IHRhZyB3aWxsIG9ubHkgbG9hZCBzdHJpcGUgaWYgXG4gKiBjIGlzIG5vdCBhdmFpbGFibGUuXG4gKiBcbiAqIElmIGB3aW5kb3dbXCJTdHJpcGVcIl1gIGlzIGF2YWlsYWJsZSB0aGVuIGBpbmplY3QoKWAgcmVzb2x2ZXMgXG4gKiB0aGUgcHJvbWlzZSB3aXRoIHRoYXQgaW5zdGFuY2UgaW1tZWRpYXRlbHksIGFuZCBkb2VzIG5vdCBjcmVhdGUgYW5kIFxuICogd2FpdCBmb3IgdGhlIHNjcmlwdCB0YWcgdG8gbG9hZC5cbiAqIFxuICogIFxuICovXG5leHBvcnQgY2xhc3MgQW5ndWxhclN0cmlwZVNlcnZpY2V7XG5cbiAgLy8gQHRzLWlnbm9yZVxuICBwcml2YXRlIF9zdHJpcGU6U3RyaXBlRmFjdG9yeSA9IHdpbmRvd1snU3RyaXBlJ11cbiAgcHJpdmF0ZSBzdHJpcGVQcm9taXNlOlByb21pc2U8YW55PlxuXG4gIGNvbnN0cnVjdG9yKCkgeyBcbiAgICB0aGlzLnN0cmlwZVByb21pc2UgPSB0aGlzLmluamVjdCgpXG4gIH1cblxuICBnZXQgc3RyaXBlKCkge1xuICAgIHJldHVybiB0aGlzLl9zdHJpcGU7XG4gIH0gXG4gIHNldCBzdHJpcGUoczpTdHJpcGVGYWN0b3J5KSB7XG4gICAgdGhpcy5fc3RyaXBlID0gcztcbiAgfVxuXG4gIHNldFB1Ymxpc2hhYmxlS2V5KGtleTpzdHJpbmcsIG9wdGlvbnM/OmFueSk6UHJvbWlzZTxTdHJpcGU+e1xuICAgIHJldHVybiB0aGlzLnN0cmlwZVByb21pc2UudGhlbiggKCkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuc3RyaXBlKGtleSwgb3B0aW9ucylcbiAgICB9KVxuICB9XG5cbiAgaW5qZWN0KCk6UHJvbWlzZTxTdHJpcGVGYWN0b3J5PntcblxuICAgIGlmKCB0aGlzLnN0cmlwZSApe1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSggdGhpcy5zdHJpcGUgKVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzLHJlaik9PntcbiAgICAgIGNvbnN0IGhlYWQgPSB0aGlzLmdldEhlYWRFbGVtZW50KClcbiAgICAgIGNvbnN0IHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIilcbiAgICAgIHNjcmlwdC5zZXRBdHRyaWJ1dGUoXCJ0eXBlXCIsIFwidGV4dC9qYXZhc2NyaXB0XCIpXG4gICAgICBzY3JpcHQuc2V0QXR0cmlidXRlKFwic3JjXCIsIFNUUklQRV9BUElfVVJMKSAgICAgIFxuICAgICAgaGVhZC5hcHBlbmRDaGlsZChzY3JpcHQpICAgICAgXG4gICAgICBzY3JpcHQuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIiwoKT0+e1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHRoaXMuc3RyaXBlID0gd2luZG93W1wiU3RyaXBlXCJdO1xuICAgICAgICByZXMoIHRoaXMuc3RyaXBlIClcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBgaGVhZGAgZWxlbWVudC5cbiAgICogQHRocm93cyBFcnJvcignQXBwbGljYXRpb24gZG9lcyBub3QgaGF2ZSBhIGhlYWQgZWxlbWVudCcpO1xuICAgKi9cbiAgZ2V0SGVhZEVsZW1lbnQoKXtcbiAgICBsZXQgZWxtOkhUTUxFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdXG5cbiAgICBpZighZWxtKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FwcGxpY2F0aW9uIGRvZXMgbm90IGhhdmUgYSBoZWFkIGVsZW1lbnQnKTtcbiAgICB9ICAgIFxuICAgIHJldHVybiBlbG07XG4gIH0gIFxufVxuIl19