UNPKG

@microbitsclub/microbits-client

Version:
33 lines (32 loc) 1.75 kB
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>;