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 };