@@ -141,11 +141,18 @@ Object.defineProperty(exports, "__esModule", { value: true })
141141exports . DgraphClient = void 0
142142exports . isJwtExpired = isJwtExpired
143143exports . deleteEdges = deleteEdges
144+ exports . open = open
145+ var grpc = require ( "@grpc/grpc-js" )
144146var messages = require ( "../generated/api_pb" )
147+ var clientStub_1 = require ( "./clientStub" )
145148var errors_1 = require ( "./errors" )
146149var txn_1 = require ( "./txn" )
147150var types = require ( "./types" )
148151var util_1 = require ( "./util" )
152+ var dgraphScheme = "dgraph:"
153+ var sslModeDisable = "disable"
154+ var sslModeRequire = "require"
155+ var sslModeVerifyCA = "verify-ca"
149156var DgraphClient = ( function ( ) {
150157 function DgraphClient ( ) {
151158 var clients = [ ]
@@ -220,6 +227,16 @@ var DgraphClient = (function () {
220227 DgraphClient . prototype . anyClient = function ( ) {
221228 return this . clients [ Math . floor ( Math . random ( ) * this . clients . length ) ]
222229 }
230+ DgraphClient . prototype . close = function ( ) {
231+ this . clients . forEach ( function ( clientStub ) {
232+ try {
233+ clientStub . close ( )
234+ console . log ( "Closed client stub successfully" )
235+ } catch ( error ) {
236+ console . error ( "Failed to close client stub:" , error )
237+ }
238+ } )
239+ }
223240 return DgraphClient
224241} ) ( )
225242exports . DgraphClient = DgraphClient
@@ -245,3 +262,99 @@ function deleteEdges(mu, uid) {
245262 mu . addDel ( nquad )
246263 }
247264}
265+ function addApiKeyToCredentials ( baseCreds , apiKey ) {
266+ var metaCreds = grpc . credentials . createFromMetadataGenerator ( function ( _ , callback ) {
267+ var metadata = new grpc . Metadata ( )
268+ metadata . add ( "authorization" , apiKey )
269+ callback ( null , metadata )
270+ } )
271+ return grpc . credentials . combineChannelCredentials ( baseCreds , metaCreds )
272+ }
273+ function addBearerTokenToCredentials ( baseCreds , bearerToken ) {
274+ var metaCreds = grpc . credentials . createFromMetadataGenerator ( function ( _ , callback ) {
275+ var metadata = new grpc . Metadata ( )
276+ metadata . add ( "Authorization" , "Bearer " . concat ( bearerToken ) )
277+ callback ( null , metadata )
278+ } )
279+ return grpc . credentials . combineChannelCredentials ( baseCreds , metaCreds )
280+ }
281+ function open ( connStr ) {
282+ return __awaiter ( this , void 0 , void 0 , function ( ) {
283+ var parsedUrl , host , port , queryParams , sslMode , credentials , clientStub , err_1
284+ return __generator ( this , function ( _a ) {
285+ switch ( _a . label ) {
286+ case 0 :
287+ parsedUrl = new URL ( connStr )
288+ if ( parsedUrl . protocol !== dgraphScheme ) {
289+ throw new Error ( "Invalid scheme: must start with dgraph://" )
290+ }
291+ host = parsedUrl . hostname
292+ port = parsedUrl . port
293+ if ( ! host ) {
294+ throw new Error ( "Invalid connection string: hostname required" )
295+ }
296+ if ( ! port ) {
297+ throw new Error ( "Invalid connection string: port required" )
298+ }
299+ queryParams = { }
300+ if ( parsedUrl . searchParams ) {
301+ parsedUrl . searchParams . forEach ( function ( value , key ) {
302+ queryParams [ key ] = value
303+ } )
304+ }
305+ if ( queryParams . apikey && queryParams . bearertoken ) {
306+ throw new Error ( "Both apikey and bearertoken cannot be provided" )
307+ }
308+ sslMode = queryParams . sslmode
309+ if ( sslMode === undefined ) {
310+ sslMode = sslModeDisable
311+ }
312+ switch ( sslMode ) {
313+ case sslModeDisable :
314+ credentials = grpc . credentials . createInsecure ( )
315+ break
316+ case sslModeRequire :
317+ credentials = grpc . credentials . createSsl ( null , null , null , {
318+ checkServerIdentity : function ( ) {
319+ return undefined
320+ } ,
321+ } )
322+ break
323+ case sslModeVerifyCA :
324+ credentials = grpc . credentials . createSsl ( )
325+ break
326+ default :
327+ throw new Error (
328+ "Invalid SSL mode: " . concat (
329+ sslMode ,
330+ " (must be one of disable, require, verify-ca)" ,
331+ ) ,
332+ )
333+ }
334+ if ( queryParams . apikey ) {
335+ credentials = addApiKeyToCredentials ( credentials , queryParams . apikey )
336+ } else if ( queryParams . bearertoken ) {
337+ credentials = addBearerTokenToCredentials ( credentials , queryParams . bearertoken )
338+ }
339+ clientStub = new clientStub_1 . DgraphClientStub (
340+ "" . concat ( host , ":" ) . concat ( port ) ,
341+ credentials ,
342+ )
343+ if ( ! ( parsedUrl . username != "" ) ) return [ 3 , 4 ]
344+ if ( ! ( parsedUrl . password === "" ) ) return [ 3 , 1 ]
345+ throw new Error ( "Invalid connection string: password required when username is provided" )
346+ case 1 :
347+ _a . trys . push ( [ 1 , 3 , , 4 ] )
348+ return [ 4 , clientStub . login ( parsedUrl . username , parsedUrl . password ) ]
349+ case 2 :
350+ _a . sent ( )
351+ return [ 3 , 4 ]
352+ case 3 :
353+ err_1 = _a . sent ( )
354+ throw new Error ( "Failed to sign in user: " . concat ( err_1 . message ) )
355+ case 4 :
356+ return [ 2 , new DgraphClient ( clientStub ) ]
357+ }
358+ } )
359+ } )
360+ }
0 commit comments