@fireflysemantics/angular-stripe-service
Version:
Stripe service used to integrate Stripe Elements with Angular.
75 lines • 7.73 kB
JavaScript
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