All files / packages/auth/src index.ts

100% Statements 4/4
100% Branches 0/0
100% Functions 2/2
100% Lines 4/4

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26              2155x         1373x         1373x   1373x            
import { type CallOptions, type ClientMiddlewareCall, Metadata } from 'nice-grpc'
 
export abstract class CredentialsProvider {
	constructor() {
		// @ts-expect-error Inside middleware perform `this.getToken` call
		// to get the token. This is a workaround for the fact that
		// `this` is not bound to the class instance inside the middleware.
		this.middleware = this.middleware.bind(this)
	}
 
	abstract getToken(force?: boolean, signal?: AbortSignal): Promise<string>
 
	readonly middleware = async function* <Request = unknown, Response = unknown>(
		this: CredentialsProvider,
		call: ClientMiddlewareCall<Request, Response>,
		options: CallOptions
	) {
		let token = await this.getToken(false, options.signal)
 
		return yield* call.next(call.request, {
			...options,
			metadata: Metadata(options.metadata).set('x-ydb-auth-ticket', token),
		})
	}
}