UNPKG

openblox

Version:

Roblox API Wrapper For Both Classic And OpenCloud APIs.

69 lines (68 loc) 4.7 kB
import type { ObjectPrettify, Prettify, StringIsLiteral } from "typeforge"; import type { RestMethod } from "../../utils/utils.types"; import type { HttpResponse, RobloxCookie } from "../../http/http.utils"; type ApiGroupProps = { name: string; baseUrl: `https://${string}`; defaultGetCursors?: (rawData: any) => ([previous: string | null, next: string | null]); }; export type CreateApiGroupFn = (props: ApiGroupProps) => { createApiMethod: AddApiMethodFn; addExistingApiMethod: <Method extends CallApiMethod<any, any, boolean>>(method: Method) => Method; }; type ApiMethodCursorKeys = "cursor" | "startRowIndex" | "pageNumber"; type ApiMethodResponseFromMethod<MethodData extends ApiMethodData, ArgsContainCursor extends boolean> = ApiMethodResponse<Exclude<MethodData["🔒__PRIVATE_RAW_DATA"], undefined>, Exclude<MethodData["🔒__PRIVATE_FORMATTED_DATA"], undefined>, ArgsContainCursor>; type AddApiMethodFn = <Args extends Record<any, any>, MethodData extends ApiMethodData>(handlerFn: AddApiMethodHandlerFn<Args, MethodData>) => (CallApiMethod<Args, MethodData>); type ObjectIsLiteral<Obj extends Record<any, any>> = ({ [Key in keyof Obj]: false; })["constructor"] extends false ? false : true; type CallApiMethodContext = { cookie?: RobloxCookie; cloudKey?: string; oauthToken?: string; } | void; type GetArgsContainsCursor<Args extends Record<any, any>> = ObjectIsLiteral<Args> extends true ? true extends StringIsLiteral<Extract<keyof Args, ApiMethodCursorKeys>> ? true : false : false; export type CallApiMethod<Args extends Record<any, any>, MethodData extends ApiMethodData, ArgsContainsCursor extends boolean = GetArgsContainsCursor<Args>> = (this: CallApiMethodContext | any, args: keyof Args extends undefined ? void : Args) => Promise<ApiMethodResponseFromMethod<MethodData, ArgsContainsCursor>>; export type ApiMethodDataFormatRawData<RawData = any, FormattedData = any> = { formatRawDataFn: (rawData: RawData, response: HttpResponse<RawData>) => FormattedData; }; export type Cursor = string | null | number | undefined; type ApiMethodData<RawData = any, FormattedData = undefined, _FormattedData = FormattedData extends undefined ? RawData : FormattedData, _PrettifiedRawData = Prettify<RawData>, _PrettifiedFormattedData = FormattedData extends undefined ? _PrettifiedRawData : Prettify<FormattedData>> = { method: RestMethod; path: `/${string}`; name: string; searchParams?: Record<string, any> | string; headers?: Record<string, any>; body?: Record<string, any> | string | number; formData?: FormData; applyFieldMask?: boolean; pathToPoll?: (rawData: RawData) => string; getCursorsFn?: (rawData: _PrettifiedRawData) => ([previous: Cursor, next: Cursor]); "🔒__PRIVATE_RAW_DATA"?: _PrettifiedRawData; "🔒__PRIVATE_FORMATTED_DATA"?: _PrettifiedFormattedData; } & (FormattedData extends undefined ? {} : ApiMethodDataFormatRawData<RawData, _FormattedData>); export type ApiMethod<RawData = any, PrettifiedData = undefined> = Promise<ApiMethodData<RawData, PrettifiedData>>; type AddApiMethodHandlerFn<Args extends Record<any, any>, MethodData extends ApiMethodData> = (args: Args) => Promise<MethodData>; export type ApiMethodResponse<RawData = any, PrettifiedData = any, ArgsContainsCursor extends boolean | null = null, IsRoot extends boolean = true> = ArgsContainsCursor extends false ? ApiMethodResponse_WithoutPagination<RawData, PrettifiedData> & { again: () => Promise<ApiMethodResponse_WithoutPagination<RawData, PrettifiedData>>; } : ApiMethodResponse_WithPagination<RawData, PrettifiedData, ArgsContainsCursor, IsRoot> & { again: () => Promise<ApiMethodResponse_WithoutPagination<RawData, PrettifiedData>>; }; type ApiMethodResponse_WithoutPagination<RawData = any, PrettifiedData = any> = ObjectPrettify<{ data: PrettifiedData; response: ObjectPrettify<HttpResponse<RawData>>; }>; type ApiMethodResponse_WithPagination<RawData = any, PrettifiedData = any, ArgsContainsCursor extends boolean | null = null, IsRoot extends boolean = true> = ObjectPrettify<ApiMethodResponse_WithoutPagination<RawData, PrettifiedData> & ((ArgsContainsCursor extends null ? { cursors?: { previous: Cursor; next: Cursor; }; [Symbol.asyncIterator]?: IsRoot extends false ? null : () => AsyncGenerator<ApiMethodResponse<RawData, PrettifiedData, ArgsContainsCursor, false>>; } : ArgsContainsCursor extends true ? { cursors: { previous: Cursor; next: Cursor; }; [Symbol.asyncIterator]: IsRoot extends false ? null : () => AsyncGenerator<ApiMethodResponse<RawData, PrettifiedData, ArgsContainsCursor, false>>; } : {}))>; export {};