@microbitsclub/microbits-client
Version:
Microbits API client
33 lines (32 loc) • 1.75 kB
TypeScript
import { APIResponse, APIResult } from './api-result';
import { MicrobitsClient } from './microbits-client';
import { UrlQuery } from './url';
export declare type MaybePromise<T> = T | Promise<T>;
export interface RequestHandlerConfig<Ctx> {
microbits: MicrobitsClient;
getUserSessionIdCookie: (ctx: Ctx, name: string) => MaybePromise<string | undefined>;
setUserSessionIdCookie: (ctx: Ctx, name: string, userSessionId: string) => MaybePromise<void>;
}
export interface RequestError<T extends string> {
cause: T;
statusCode: number;
message: string;
}
export declare type ContentRequestHandlerSuccess = {
type: 'serve-content';
contentUrl: string;
userSessionId: string;
} | {
type: 'content-redirect';
statusCode: number;
contentUrl: string;
query?: UrlQuery;
} | {
type: 'access-denied';
hardPaywallUrl: string;
};
export declare type ContentRequestHandlerError = RequestError<'getPaywallByContentUrl'> | RequestError<'getUserSessionIdCookie'> | RequestError<'isUserSessionAuthorizedForPaywall'> | RequestError<'activateUserSession'> | RequestError<'createPaywallPurchase'>;
export declare type ContentRequestHandlerResult = APIResult<ContentRequestHandlerSuccess, ContentRequestHandlerError>;
export declare const getContentRequestHandler: <Ctx>(config: RequestHandlerConfig<Ctx>) => (ctx: Ctx, requestUrl: string) => Promise<ContentRequestHandlerResult>;
export declare type ClientRequestHandlerResult = APIResponse.GetPaywallByContentUrl | APIResponse.GetUserSessionById | APIResponse.IsUserSessionAuthorizedForPaywall;
export declare const getClientRequestHandler: <Ctx>(config: RequestHandlerConfig<Ctx>) => (ctx: Ctx, requestUrl: string) => Promise<ClientRequestHandlerResult>;