@microbitsclub/microbits-client
Version:
Microbits API client
29 lines (28 loc) • 1.49 kB
TypeScript
import { APIResult } from './api-result';
import { MicrobitsClient } from './microbits-client';
import { UrlQuery } from './url';
export declare type MaybePromise<T> = T | Promise<T>;
export interface PaywallRequestHandler<Ctx> {
microbits: MicrobitsClient;
getUserSessionIdCookie: (ctx: Ctx, name: string) => MaybePromise<string | undefined>;
setUserSessionIdCookie: (ctx: Ctx, name: string, userSessionId: string) => MaybePromise<void>;
}
export declare type PaywallRequestHandlerSuccess = {
type: 'serve-content';
contentUrl: string;
userSessionId: string;
} | {
type: 'content-redirect';
statusCode: number;
contentUrl: string;
query?: UrlQuery;
};
export interface RequestError<T extends string> {
cause: T;
statusCode: number;
message: string;
}
export declare type PaywallRequestHandlerError = RequestError<'getPaywallByContentUrl'> | RequestError<'getUserSessionIdCookie'> | RequestError<'isUserSessionAuthorizedForPaywall'> | RequestError<'activateUserSession'> | RequestError<'createPaywallPurchase'>;
export declare type PaywallRequestHandlerResult = APIResult<PaywallRequestHandlerSuccess, PaywallRequestHandlerError>;
export declare const getPaywallRequestHandler: <Ctx>(config: PaywallRequestHandler<Ctx>) => (ctx: Ctx, requestUrl: string) => Promise<PaywallRequestHandlerResult>;
export declare const getClientRequestHandler: <Ctx>(config: PaywallRequestHandler<Ctx>) => (ctx: Ctx, requestUrl: string) => Promise<any>;