common/src/lib/grpc/factory/grpc-client.factory.ts

40 lines
769 B
TypeScript

import { Injectable } from '@nestjs/common'
import {
ClientGrpc,
ClientProxyFactory,
Transport
} from '@nestjs/microservices'
@Injectable()
export class GrpcClientFactory {
private clients = new Map<string, ClientGrpc>()
public createClient(options: {
package: string
protoPath: string
url: string
}) {
return ClientProxyFactory.create({
transport: Transport.GRPC,
options
}) as ClientGrpc
}
public register(token: string, client: ClientGrpc) {
this.clients.set(token, client)
}
public getClient<T extends ClientGrpc = ClientGrpc>(token: string) {
const client = this.clients.get(token) as T;
if (!client) {
throw new Error(`Grpc client ${token} not found`)
}
return client;
}
}