@@ -141,11 +141,18 @@ Object.defineProperty(exports, "__esModule", { value: true })
141
141
exports . DgraphClient = void 0
142
142
exports . isJwtExpired = isJwtExpired
143
143
exports . deleteEdges = deleteEdges
144
+ exports . open = open
145
+ var grpc = require ( "@grpc/grpc-js" )
144
146
var messages = require ( "../generated/api_pb" )
147
+ var clientStub_1 = require ( "./clientStub" )
145
148
var errors_1 = require ( "./errors" )
146
149
var txn_1 = require ( "./txn" )
147
150
var types = require ( "./types" )
148
151
var util_1 = require ( "./util" )
152
+ var dgraphScheme = "dgraph:"
153
+ var sslModeDisable = "disable"
154
+ var sslModeRequire = "require"
155
+ var sslModeVerifyCA = "verify-ca"
149
156
var DgraphClient = ( function ( ) {
150
157
function DgraphClient ( ) {
151
158
var clients = [ ]
@@ -220,6 +227,16 @@ var DgraphClient = (function () {
220
227
DgraphClient . prototype . anyClient = function ( ) {
221
228
return this . clients [ Math . floor ( Math . random ( ) * this . clients . length ) ]
222
229
}
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
+ }
223
240
return DgraphClient
224
241
} ) ( )
225
242
exports . DgraphClient = DgraphClient
@@ -245,3 +262,99 @@ function deleteEdges(mu, uid) {
245
262
mu . addDel ( nquad )
246
263
}
247
264
}
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