diff --git a/src/index.ts b/src/index.ts index 18d02907..1928aaf3 100644 --- a/src/index.ts +++ b/src/index.ts @@ -62,6 +62,7 @@ export type ConnectionOptions = { readonly session?: Session; readonly extraCredential?: ExtraCredential; readonly ssl?: SecureContextOptions; + readonly extraHeaders?: RequestHeaders; }; export type QueryStage = { @@ -192,6 +193,7 @@ class Client { [TRINO_EXTRA_CREDENTIAL_HEADER]: encodeAsString( options.extraCredential ?? {} ), + ...(options.extraHeaders ?? {}), }; if (options.auth && options.auth.type === 'basic') { diff --git a/tests/it/client.spec.ts b/tests/it/client.spec.ts index 827f2a61..1510d032 100644 --- a/tests/it/client.spec.ts +++ b/tests/it/client.spec.ts @@ -71,6 +71,22 @@ describe('trino', () => { expect(info.query).toBe(singleCustomerQuery); }); + test.concurrent('client extra header propagation', async () => { + const source = 'new-client'; + const trino = Trino.create({ + catalog: 'tpcds', + schema: 'sf100000', + auth: new BasicAuth('test'), + extraHeaders: {'X-Trino-Source': source}, + }); + + const query = await trino.query(singleCustomerQuery); + const qr = await query.next(); + + const info: any = await trino.queryInfo(qr.value.id); + expect(info.session.source).toBe(source); + }); + test.concurrent('query request header propagation', async () => { const trino = Trino.create({catalog: 'tpcds', auth: new BasicAuth('test')}); const query = await trino.query(useSchemaQuery);