src/services/stripe.service.ts
Properties |
|
Methods |
|
constructor(key: string, options: Options, loader: LazyStripeAPILoader, window: WindowRef)
|
||||||||||||||||||||
Defined in src/services/stripe.service.ts:40
|
||||||||||||||||||||
Parameters :
|
Public changeKey |
changeKey(key: string, options?: Options)
|
Defined in src/services/stripe.service.ts:51
|
Returns :
Observable<StripeJS>
|
Public createSource | ||||||||||||
createSource(a: Element | SourceData, b?: SourceData | undefined)
|
||||||||||||
Defined in src/services/stripe.service.ts:89
|
||||||||||||
Parameters :
Returns :
Observable<SourceResult>
|
Public createToken | ||||||||||||
createToken(a: Element | BankAccount | Pii, b: CardDataOptions | BankAccountData | PiiData | undefined)
|
||||||||||||
Defined in src/services/stripe.service.ts:74
|
||||||||||||
Parameters :
Returns :
Observable<TokenResult>
|
Public elements | ||||||||
elements(options?: ElementsOptions)
|
||||||||
Defined in src/services/stripe.service.ts:69
|
||||||||
Parameters :
Returns :
Observable<Elements>
|
Public retrieveSource | ||||||||
retrieveSource(source: SourceParams)
|
||||||||
Defined in src/services/stripe.service.ts:99
|
||||||||
Parameters :
Returns :
Observable<SourceResult>
|
Private stripe |
stripe:
|
Type : StripeJS
|
Defined in src/services/stripe.service.ts:40
|
Public stripeChanged$ |
stripeChanged$:
|
Type : ReplaySubject<StripeJS>
|
Default value : new ReplaySubject()
|
Defined in src/services/stripe.service.ts:39
|
import { Injectable, Inject } from '@angular/core';
import { Observable } from 'rxjs/Observable';
import { WindowRef } from './window-ref';
import { LazyStripeAPILoader, Status } from './api-loader.service';
import {
STRIPE_PUBLISHABLE_KEY,
StripeJS,
STRIPE_OPTIONS,
Options
} from '../interfaces/stripe';
import { Element } from '../interfaces/element';
import { Elements, ElementsOptions } from '../interfaces/elements';
import {
SourceData,
SourceResult,
isSourceData,
SourceParams
} from '../interfaces/sources';
import {
CardDataOptions,
TokenResult,
BankAccount,
BankAccountData,
PiiData,
Pii,
isBankAccount,
isBankAccountData,
isPii,
isPiiData
} from '../interfaces/token';
import { ReplaySubject } from 'rxjs/ReplaySubject';
@Injectable()
export class StripeService {
public stripeChanged$: ReplaySubject<StripeJS> = new ReplaySubject();
private stripe: StripeJS;
constructor(
@Inject(STRIPE_PUBLISHABLE_KEY) private key: string,
@Inject(STRIPE_OPTIONS) private options: Options,
private loader: LazyStripeAPILoader,
private window: WindowRef
) {
this.changeKey(this.key, this.options).take(1).subscribe(() => {});
}
public changeKey(key: string, options?: Options): Observable<StripeJS> {
const obs = this.loader
.asStream()
.filter((status: Status) => status.loaded === true)
.map(() => {
const Stripe = (this.window.getNativeWindow() as any).Stripe;
this.stripe = options
? (Stripe(key, options) as StripeJS)
: (Stripe(key) as StripeJS);
this.stripeChanged$.next(this.stripe);
return this.stripe;
})
.publishLast()
.refCount();
obs.subscribe();
return obs;
}
public elements(options?: ElementsOptions): Observable<Elements> {
return this.stripeChanged$
.map(() => this.stripe.elements(options));
}
public createToken(
a: Element | BankAccount | Pii,
b: CardDataOptions | BankAccountData | PiiData | undefined
): Observable<TokenResult> {
if (isBankAccount(a) && isBankAccountData(b)) {
return Observable.fromPromise(this.stripe.createToken(a, b));
} else if (isPii(a) && isPiiData(b)) {
return Observable.fromPromise(this.stripe.createToken(a, b));
} else {
return Observable.fromPromise(
this.stripe.createToken(a as Element, b as CardDataOptions | undefined)
);
}
}
public createSource(
a: Element | SourceData,
b?: SourceData | undefined
): Observable<SourceResult> {
if (isSourceData(a)) {
return Observable.fromPromise(this.stripe.createSource(a as SourceData));
}
return Observable.fromPromise(this.stripe.createSource(a as Element, b));
}
public retrieveSource(source: SourceParams): Observable<SourceResult> {
return Observable.fromPromise(this.stripe.retrieveSource(source));
}
}