UNPKG

@np-dev/youtubei-js

Version:

A wrapper around YouTube's private API. Supports YouTube, YouTube Music, YouTube Kids and YouTube Studio (WIP).

49 lines (48 loc) 2.88 kB
export type Method<TMetadata = any, THeader = any, TTrailer = any, TServiceName extends string = string, TMethodName extends string = string, TRequestStream extends boolean = boolean, TResponseStream extends boolean = boolean, TReq = any, TRes = any> = [ MethodDescriptor<TReq, TRes, TMethodName, TServiceName, TRequestStream, TResponseStream>, MethodImpl<TReq, TRes, TMetadata, THeader, TTrailer> ]; export type RpcClientImpl<TMetadata = any, THeader = any, TTrailer = any> = <TReq, TRes>(methodDescriptor: MethodDescriptor<TReq, TRes>) => MethodImpl<TReq, TRes, TMetadata, THeader, TTrailer>; export interface MethodDescriptor<TReq, TRes, TMethodName extends string = string, TServiceName extends string = string, TRequestStream extends boolean = boolean, TResponseStream extends boolean = boolean> { methodName: TMethodName; service: { serviceName: TServiceName; }; requestStream: TRequestStream; responseStream: TResponseStream; requestType: { serializeBinary: (value: TReq) => Uint8Array; deserializeBinary: (value: Uint8Array) => TReq; serializeJson: (value: TReq) => string; }; responseType: { serializeBinary: (value: TRes) => Uint8Array; deserializeBinary: (value: Uint8Array) => TRes; serializeJson: (value: TRes) => string; }; } type ThenArg<T> = T extends Promise<infer U> ? U : T; export type RpcReturnType<TRes, TResArgs extends any[]> = (Promise<TResArgs extends [] ? ThenArg<TRes> : [ThenArg<TRes>, ...TResArgs]>); export interface MethodImpl<TReq, TRes, TMetadata = any, THeader = any, TTrailer = any> { (req: AsyncGenerator<TReq>, metadata?: TMetadata): [AsyncGenerator<TRes>, Promise<THeader>, Promise<TTrailer>]; } export interface MethodImplHandlerReq<TReq, TMetadata> { metadata?: TMetadata; messages: AsyncGenerator<TReq>; drainEnd: Promise<void>; } export interface MethodImplHandlerRes<TRes, THeader, TTrailer> { header(value: THeader): void; send(value: TRes): void; end(value: TTrailer): void; } export interface MethodImplHandler<TReq, TRes, TMetadata, THeader, TTrailer> { (req: MethodImplHandlerReq<TReq, TMetadata>, res: MethodImplHandlerRes<TRes, THeader, TTrailer>): void; } export declare function getMethodImpl<TReq, TRes, TMetadata, THeader, TTrailer>(handler: MethodImplHandler<TReq, TRes, TMetadata, THeader, TTrailer>): MethodImpl<TReq, TRes, TMetadata, THeader, TTrailer>; export declare function createServerImplBuilder<TMetadata, THeader, TTrailer>(): { register<TReq, TRes>(methodDescriptor: MethodDescriptor<TReq, TRes, string, string, boolean, boolean>, handler: MethodImplHandler<TReq, TRes, TMetadata, THeader, TTrailer>): void; finish: () => void; drain: () => AsyncGenerator<Method<TMetadata, THeader, TTrailer, string, string, boolean, boolean, any, any>, any, unknown>; }; export {};