@liberquack/utils
Version:
Quack utilities
52 lines (51 loc) • 2.38 kB
TypeScript
import type { PaymentCalculatedCheckout, PaymentCheckoutExecution, PaymentPartialCheckout, PaymentProviderData, PaymentUserData } from "./types.js";
import type { AbstractPaymentClientProvider, ProviderClientProviderData } from "./client-providers/abstract-payment-client-provider.js";
import type { Narrow } from "../utils.js";
declare type NarrowedCalculetedCheckout<P extends AbstractPaymentClientProvider = any, PN extends P["provider"] = any> = Narrow<PaymentCalculatedCheckout, {
provider: PN;
externalData: Narrow<PaymentProviderData, {
provider: PN;
data: ProviderClientProviderData<Extract<P, {
provider: PN;
}>>;
}>;
}>;
/**
* PaymentClient is the class for executing the checkout on front-end
*/
export declare abstract class AbstractPaymentClient<P extends AbstractPaymentClientProvider = any> {
private inited;
providers: P[];
providersInitializers: (() => P)[];
constructor(providers: (() => P)[]);
init(): void;
buildUi<PN extends P["provider"]>(calculatedCheckout: NarrowedCalculetedCheckout<P, PN>, opts: Parameters<Extract<P, {
provider: PN;
}>["buildUi"]>[1] & {
onSuccess: (checkout: PaymentCheckoutExecution) => void;
onError: (err: Error, checkout?: PaymentCheckoutExecution) => void;
}): Promise<HTMLElement>;
calculateCheckout<PN extends P["provider"]>(checkout: Narrow<PaymentPartialCheckout, {
provider: PN;
}>): Promise<NarrowedCalculetedCheckout<P, PN>>;
checkout(checkout: PaymentCalculatedCheckout): Promise<PaymentCheckoutExecution>;
private getProvider;
private checkInited;
cancelCheckout(checkout: PaymentCheckoutExecution, reason: string): Promise<PaymentUserData>;
/**
* Here you should send the checkout to the server
*
* @param checkout
*/
protected abstract sendCheckout(checkout: PaymentCalculatedCheckout): Promise<PaymentCheckoutExecution>;
/**
* Implement this method and send your partial checkout to the server,
* then you will have ensured prices from your api
*
* @param checkout
* @protected
*/
protected abstract sendCalculateCheckout(checkout: PaymentPartialCheckout): Promise<PaymentCalculatedCheckout>;
protected abstract sendCancelCheckout(checkout: PaymentCheckoutExecution): Promise<PaymentUserData>;
}
export {};