@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
TypeScript
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 {};