import z$1, { z } from 'zod';
import { ChannelOptions } from 'nice-grpc';
type Context | undefined> = {
metadata: Meta extends z.ZodObject ? z.infer : undefined;
client: {
id: string;
};
};
type AnyContext = Context;
declare const ScopeTag: unique symbol;
declare const FunctionTag: unique symbol;
declare const ContextTag: unique symbol;
type BaseSignature any, C extends AnyContext | undefined> = {
[ScopeTag]: type;
[FunctionTag]: fn;
[ContextTag]: type extends "server" ? (C extends undefined ? Context : C) : C;
};
type AnyBaseSignature = BaseSignature;
type ExtractFn = (...args: Parameters) => Promise>;
type ValidReturnType any> = ReturnType extends Function | Promise ? never : ReturnType;
type ExtractImplFn = S[typeof ScopeTag] extends "server" ? ExtractFn | ((...args: Parameters) => (context: S[typeof ContextTag]) => Promise>) : S[typeof ScopeTag] extends "client" ? ExtractFn : S[typeof ScopeTag] extends "bidi" ? undefined : never;
type RpcMethodDescriptor = {
serviceType: "server" | "client" | "bidi";
methodType: "unary" | "bidi";
config?: {
metadata: boolean;
ack: boolean;
};
};
type BidiSignature any, C extends AnyContext | undefined> = BaseSignature<"bidi", fn, C> & (C extends undefined ? >(context: {
metadata?: Meta;
ack?: boolean;
}) => BidiSignature> : {});
declare function bidi ValidReturnType>(): BidiSignature;
type ClientSignature any, C extends AnyContext | undefined> = BaseSignature<"client", fn, C>;
declare function client ValidReturnType>(): ClientSignature;
type ClientImpls = {
[K in keyof T as T[K] extends BaseSignature<"client", any, any> ? K : never]: T[K] extends AnyBaseSignature ? ExtractImplFn : never;
};
type ClientCallable = {
[K in keyof T as T[K] extends BaseSignature<"client", any, any> | BaseSignature<"bidi", any, any> ? K : never]: T[K] extends BaseSignature<"client", any, any> ? ExtractFn : T[K] extends BaseSignature<"bidi", any, infer C> ? WithListen extends true ? BidiCallable$1 : BidiCallableWithoutListen : never;
};
type BidiContext = C extends undefined ? Context : C;
type BidiCallableBase, C extends AnyContext | undefined> = ExtractFn & {
context: BidiContext;
} & AsyncGenerator>, void, unknown>;
type BidiCallable$1, C extends AnyContext | undefined> = BidiCallableBase & {
listen(handler: (connection: {
context: BidiContext;
messages: AsyncGenerator>, void, unknown>;
send: ExtractFn;
}) => void): void;
};
type BidiCallableWithoutListen, C extends AnyContext | undefined> = BidiCallableBase;
type ServerSignature any, C extends AnyContext | undefined> = BaseSignature<"server", fn, C> & (C extends undefined ? >(context: {
metadata: Meta;
}) => ServerSignature> : {});
declare function server ValidReturnType>(): ServerSignature;
type ServerImpls = {
[K in keyof T as T[K] extends BaseSignature<"server", any, any> ? K : never]: T[K] extends AnyBaseSignature ? ExtractImplFn : never;
};
type ServerCallable = {
[K in keyof T as T[K] extends BaseSignature<"server", any, any> | BaseSignature<"bidi", any, any> ? K : never]: T[K] extends BaseSignature<"server", any, infer C> ? (...args: Parameters>) => CallableChain, C> : T[K] extends BaseSignature<"bidi", any, infer C> ? BidiCallable : never;
};
type CallableChain any, C extends AnyContext | undefined> = C extends Context ? Meta extends z$1.ZodObject ? {
withMeta(meta: z$1.infer): ReturnType;
} : ReturnType : ReturnType;
type BidiCallable, C extends AnyContext | undefined> = (C extends Context ? Meta extends z$1.ZodObject ? {
context(context: {
metadata: z$1.infer;
}): Promise;
} & ExtractFn : ExtractFn : ExtractFn) & AsyncGenerator>, void, unknown>;
declare const ServiceNameTag: unique symbol;
interface ServiceInstance {
readonly [ServiceNameTag]: N;
}
type AbstractServiceClass = abstract new (...args: never) => ServiceInstance;
declare class ServiceImpl {
readonly implementation: any;
readonly type: Type;
readonly serviceClass: T;
readonly serviceClassInstance: InstanceType;
constructor(implementation: any, type: Type, serviceClass: T);
methods(): Record;
}
declare function Service(name: N): (abstract new () => {
readonly [ServiceNameTag]: N;
}) & {
serviceName: N;
Server>>(this: T, implementation: Impl): ServiceImpl;
Client>>(this: T, implementation: Impl): ServiceImpl;
};
type ServiceNameOf> = T extends ServiceImpl ? InstanceType[typeof ServiceNameTag] : never;
type ServiceCallable = T extends ServiceImpl ? Mode extends "server" ? ClientCallable, WithListen> : ServerCallable> : never;
declare const DEFAULT_OPTIONS: ChannelOptions;
declare function createGrpcClient[]>(address: string, credentials: "ssl" | "insecure", ...serviceImpls: T): Promise<{
[I in T[number] as ServiceNameOf]: ServiceCallable;
} & {
clientID: string;
}>;
declare function createGrpcClient[]>(address: string, credentials: "ssl" | "insecure", grpcOptions: ChannelOptions, ...serviceImpls: T): Promise<{
[I in T[number] as ServiceNameOf]: ServiceCallable;
} & {
clientID: string;
}>;
declare function createGrpcClient[]>(address: string, ...serviceImpls: T): Promise<{
[I in T[number] as ServiceNameOf]: ServiceCallable;
} & {
clientID: string;
}>;
declare function createGrpcClient[]>(address: string, grpcOptions: ChannelOptions, ...serviceImpls: T): Promise<{
[I in T[number] as ServiceNameOf]: ServiceCallable;
} & {
clientID: string;
}>;
declare function createGrpcServer[]>(port: number, ...serviceImpls: T): Promise<{
[I in T[number] as ServiceNameOf]: ServiceCallable & ((clientId: string) => ServiceCallable);
}>;
export { DEFAULT_OPTIONS, Service, bidi, client, createGrpcClient, createGrpcServer, server };