diff --git a/package.json b/package.json index cbf48694..35b41a3e 100644 --- a/package.json +++ b/package.json @@ -167,7 +167,8 @@ "generate_services": "ts-node scripts/generate_services", "clear_generated_services": "ts-node scripts/clear_generated_services", "build:services": "ts-node scripts/build_services", - "build:mono-service": "cross-env NODE_OPTIONS=\"--max-old-space-size=4096\" tsc -p .", + "generate_default_headers": "ts-node scripts/generate_default_headers", + "build:mono-service": "npm run generate_default_headers && cross-env NODE_OPTIONS=\"--max-old-space-size=4096\" tsc -p .", "build": "npm run build:mono-service && npm run build:services", "typecheck:clients": "tsc -p ./clients --noEmit" }, diff --git a/scripts/generate_default_headers.ts b/scripts/generate_default_headers.ts new file mode 100644 index 00000000..7aa5a224 --- /dev/null +++ b/scripts/generate_default_headers.ts @@ -0,0 +1,16 @@ +import { readFileSync, writeFileSync } from 'fs'; +import { resolve } from 'path'; + +const packageJSONPath = resolve('package.json'); +const data = readFileSync(packageJSONPath, 'utf8'); +const jsonData = JSON.parse(data); + +const defaultHeadersPath = resolve('./src/default-headers.ts'); +writeFileSync( + defaultHeadersPath, + `export const DEFAULT_HEADERS = { + ['x-proxy-agent']: '${jsonData.name}', + ['x-proxy-agent-version']: '${jsonData.version}', +};\n`, + 'utf8', +); diff --git a/src/default-headers.ts b/src/default-headers.ts new file mode 100644 index 00000000..6cef4629 --- /dev/null +++ b/src/default-headers.ts @@ -0,0 +1,4 @@ +export const DEFAULT_HEADERS = { + ['x-proxy-agent']: '@yandex-cloud/nodejs-sdk', + ['x-proxy-agent-version']: 'undefined', +}; diff --git a/src/session.ts b/src/session.ts index fce60e21..4d7c6619 100644 --- a/src/session.ts +++ b/src/session.ts @@ -20,6 +20,9 @@ import { IamTokenServiceClient, } from './generated/yandex/cloud/iam/v1/iam_token_service'; +import { DEFAULT_HEADERS } from './default-headers'; +import { merge } from 'lodash'; + const isOAuth = (config: SessionConfig): config is OAuthCredentialsConfig => 'oauthToken' in config; const isIamToken = (config: SessionConfig): config is IamTokenCredentialsConfig => @@ -100,13 +103,12 @@ export class Session { private static readonly DEFAULT_CONFIG = { pollInterval: 1000, + headers: DEFAULT_HEADERS, }; constructor(config?: SessionConfig) { - this.config = { - ...Session.DEFAULT_CONFIG, - ...config, - }; + this.config = merge(Session.DEFAULT_CONFIG, config); + this.tokenCreator = newTokenCreator(this.config); this.channelCredentials = newChannelCredentials( this.tokenCreator,