From 1c506489b561353c915829b292231ffe6bd05b0f Mon Sep 17 00:00:00 2001 From: Tolga Ozen Date: Fri, 14 Nov 2025 13:17:28 +0300 Subject: [PATCH] feat(grpc): add explicit PermifyClient type for gRPC client factory --- package.json | 2 +- src/grpc/clients.ts | 21 +++++++++++++++++++-- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 6333817..bd4909f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@permify/permify-node", - "version": "1.1.2", + "version": "1.1.3", "description": "Permify Node Client", "main": "dist/src/index.js", "types": "dist/src/index.d.ts", diff --git a/src/grpc/clients.ts b/src/grpc/clients.ts index 0350bb7..9539838 100644 --- a/src/grpc/clients.ts +++ b/src/grpc/clients.ts @@ -1,4 +1,5 @@ -import { ClientMiddleware, createChannel, createClientFactory, ChannelCredentials } from 'nice-grpc'; +import { ClientMiddleware, createChannel, createClientFactory, ChannelCredentials, RawClient } from 'nice-grpc'; +import type { FromTsProtoServiceDefinition, TsProtoServiceDefinition } from 'nice-grpc/lib/service-definitions/ts-proto'; import { PermissionDefinition, SchemaDefinition, @@ -9,6 +10,22 @@ import { } from './generated/base/v1/service'; import { Config } from './config'; +// Helper type to extract the client type from a service definition +type ClientFromDefinition = RawClient>; + +/** + * Return type for the Permify gRPC client. + * This explicit type ensures proper type preservation through export layers. + */ +export type PermifyClient = { + permission: ClientFromDefinition; + schema: ClientFromDefinition; + data: ClientFromDefinition; + bundle: ClientFromDefinition; + tenancy: ClientFromDefinition; + watch: ClientFromDefinition; +}; + /** * Create a new gRPC service client for Permify. * The client can be configured with multiple client interceptors. For authentication interceptors, @@ -19,7 +36,7 @@ import { Config } from './config'; * * @returns A new gRPC service client for the Permission API of Permify. */ -export function newClient(conf: Config, ...interceptors: ClientMiddleware[]) { +export function newClient(conf: Config, ...interceptors: ClientMiddleware[]): PermifyClient { const channel = conf.insecure ? createChannel(conf.endpoint, ChannelCredentials.createInsecure()) : createChannel(conf.endpoint, ChannelCredentials.createSsl(conf.cert, conf.pk, conf.certChain));