azure-kusto-data 5.2.1 → 5.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { isNode } from \"@azure/core-util\";\nimport axios, { AxiosInstance, AxiosRequestConfig, AxiosRequestHeaders } from \"axios\";\nimport http from \"http\";\nimport https from \"https\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport { KustoHeaders } from \"./clientDetails\";\nimport ClientRequestProperties from \"./clientRequestProperties\";\nimport CloudSettings from \"./cloudSettings\";\nimport ConnectionStringBuilder from \"./connectionBuilder\";\nimport { ThrottlingError } from \"./errors\";\nimport { kustoTrustedEndpoints } from \"./kustoTrustedEndpoints\";\nimport { KustoResponseDataSet, KustoResponseDataSetV1, KustoResponseDataSetV2, V1, V2Frames } from \"./response\";\nimport AadHelper from \"./security\";\nimport { toMilliseconds } from \"./timeUtils\";\n\nconst COMMAND_TIMEOUT_IN_MILLISECS = toMilliseconds(0, 10, 30);\nconst QUERY_TIMEOUT_IN_MILLISECS = toMilliseconds(0, 4, 30);\nconst CLIENT_SERVER_DELTA_IN_MILLISECS = toMilliseconds(0, 0, 30);\nconst MGMT_PREFIX = \".\";\n\nenum ExecutionType {\n Mgmt = \"mgmt\",\n Query = \"query\",\n Ingest = \"ingest\",\n QueryV1 = \"queryv1\",\n}\n\nexport type RequestEntity = { query: string } | { stream: any } | { blob: string };\n\nexport class KustoClient {\n connectionString: ConnectionStringBuilder;\n cluster: string;\n defaultDatabase?: string;\n endpoints: { [key in ExecutionType]: string };\n aadHelper: AadHelper;\n axiosInstance: AxiosInstance;\n cancelToken = axios.CancelToken.source();\n private _isClosed: boolean = false;\n\n constructor(kcsb: string | ConnectionStringBuilder) {\n this.connectionString = typeof kcsb === \"string\" ? new ConnectionStringBuilder(kcsb) : kcsb;\n if (!this.connectionString.dataSource) {\n throw new Error(\"Cluster url is required\");\n }\n const url = new URL(this.connectionString.dataSource);\n this.cluster = url.toString();\n if (this.cluster.endsWith(\"/\")) {\n this.cluster = this.cluster.slice(0, -1);\n }\n this.defaultDatabase = this.connectionString.initialCatalog;\n this.endpoints = {\n [ExecutionType.Mgmt]: `${this.cluster}/v1/rest/mgmt`,\n [ExecutionType.Query]: `${this.cluster}/v2/rest/query`,\n [ExecutionType.Ingest]: `${this.cluster}/v1/rest/ingest`,\n [ExecutionType.QueryV1]: `${this.cluster}/v1/rest/query`,\n };\n this.aadHelper = new AadHelper(this.connectionString);\n\n let headers: AxiosRequestHeaders = {\n Accept: \"application/json\",\n };\n\n if (isNode) {\n headers = {\n ...headers,\n \"Accept-Encoding\": \"gzip,deflate\",\n Connection: \"Keep-Alive\",\n };\n }\n const axiosProps: AxiosRequestConfig = {\n headers,\n validateStatus: (status: number) => status === 200,\n maxBodyLength: Infinity,\n maxContentLength: Infinity,\n maxRedirects: 0,\n };\n // http and https are Node modules and are not found in browsers\n if (isNode) {\n // keepAlive pools and reuses TCP connections, so it's faster\n axiosProps.httpAgent = new http.Agent({ keepAlive: true });\n axiosProps.httpsAgent = new https.Agent({ keepAlive: true });\n }\n axiosProps.cancelToken = this.cancelToken.token;\n\n this.axiosInstance = axios.create(axiosProps);\n }\n\n async execute(db: string | null, query: string, properties?: ClientRequestProperties) {\n query = query.trim();\n if (query.startsWith(MGMT_PREFIX)) {\n return this.executeMgmt(db, query, properties);\n }\n\n return this.executeQuery(db, query, properties);\n }\n\n async executeQuery(db: string | null, query: string, properties?: ClientRequestProperties) {\n return this._execute(this.endpoints[ExecutionType.Query], ExecutionType.Query, db, { query }, properties);\n }\n\n async executeQueryV1(db: string | null, query: string, properties?: ClientRequestProperties) {\n return this._execute(this.endpoints[ExecutionType.QueryV1], ExecutionType.QueryV1, db, { query }, properties);\n }\n\n async executeMgmt(db: string | null, query: string, properties?: ClientRequestProperties) {\n return this._execute(this.endpoints[ExecutionType.Mgmt], ExecutionType.Mgmt, db, { query }, properties);\n }\n\n async executeStreamingIngest(\n db: string | null,\n table: string,\n stream: any,\n streamFormat: any,\n mappingName: string | null,\n blob?: string,\n clientRequestId?: string\n ): Promise<KustoResponseDataSet> {\n let endpoint = `${this.endpoints[ExecutionType.Ingest]}/${this.getDb(db)}/${table}?streamFormat=${streamFormat}`;\n if (mappingName != null) {\n endpoint += `&mappingName=${mappingName}`;\n }\n\n if (blob) {\n endpoint += `&sourceKind=uri`;\n }\n\n let properties: ClientRequestProperties | null = null;\n if (clientRequestId) {\n properties = new ClientRequestProperties();\n properties.clientRequestId = clientRequestId;\n }\n\n return this._execute(endpoint, ExecutionType.Ingest, db, blob ? { blob } : { stream }, properties);\n }\n\n async _execute(\n endpoint: string,\n executionType: ExecutionType,\n db: string | null,\n entity: RequestEntity,\n properties?: ClientRequestProperties | null\n ): Promise<KustoResponseDataSet> {\n this.ensureOpen();\n kustoTrustedEndpoints.validateTrustedEndpoint(endpoint, (await CloudSettings.getCloudInfoForCluster(this.cluster)).LoginEndpoint);\n db = this.getDb(db);\n const headers: { [header: string]: string } = {};\n\n let payload: { db: string; csl: string; properties?: any };\n let clientRequestPrefix = \"\";\n\n const timeout = this._getClientTimeout(executionType, properties);\n let payloadContent: any = \"\";\n if (\"query\" in entity) {\n payload = {\n db,\n csl: entity.query,\n };\n\n if (properties != null) {\n payload.properties = properties.toJSON();\n }\n\n payloadContent = JSON.stringify(payload);\n\n headers[\"Content-Type\"] = \"application/json; charset=utf-8\";\n clientRequestPrefix = \"KNC.execute;\";\n } else if (\"stream\" in entity) {\n payloadContent = entity.stream;\n clientRequestPrefix = \"KNC.executeStreamingIngest;\";\n if (isNode) {\n headers[\"Content-Encoding\"] = \"gzip\";\n headers[\"Content-Type\"] = \"application/octet-stream\";\n } else {\n headers[\"Content-Type\"] = \"application/json\";\n }\n } else if (\"blob\" in entity) {\n payloadContent = {\n sourceUri: entity.blob,\n };\n clientRequestPrefix = \"KNC.executeStreamingIngestFromBlob;\";\n headers[\"Content-Type\"] = \"application/json\";\n } else {\n throw new Error(\"Invalid parameters - expected query or streaming ingest\");\n }\n\n let kustoHeaders = this.connectionString.clientDetails().getHeaders();\n kustoHeaders[\"x-ms-client-request-id\"] = `${clientRequestPrefix}${uuidv4()}`;\n\n if (properties != null) {\n kustoHeaders = {\n ...kustoHeaders,\n ...properties.getHeaders(),\n };\n }\n\n for (const key of Object.keys(kustoHeaders) as Iterable<keyof KustoHeaders>) {\n if (kustoHeaders[key]) {\n headers[key] = kustoHeaders[key] as string;\n }\n }\n\n const authHeader = await this.aadHelper.getAuthHeader();\n if (authHeader != null) {\n headers.Authorization = authHeader;\n }\n\n return this._doRequest(endpoint, executionType, headers, payloadContent, timeout, properties);\n }\n\n private getDb(db: string | null) {\n if (db == null) {\n if (this.defaultDatabase == null) {\n throw new Error(\"No database provided, and no default database specified in connection string\");\n }\n db = this.defaultDatabase;\n }\n return db;\n }\n\n async _doRequest(\n endpoint: string,\n executionType: ExecutionType,\n headers: { [header: string]: string },\n payload: any,\n timeout: number,\n properties?: ClientRequestProperties | null\n ): Promise<KustoResponseDataSet> {\n // replace non-ascii characters with ? in headers\n for (const key of Object.keys(headers)) {\n headers[key] = headers[key].replace(/[^\\x00-\\x7F]+/g, \"?\");\n }\n\n const axiosConfig: AxiosRequestConfig = {\n headers,\n timeout,\n };\n\n let axiosResponse;\n try {\n axiosResponse = await this.axiosInstance.post(endpoint, payload, axiosConfig);\n } catch (error: unknown) {\n if (axios.isAxiosError(error)) {\n // Since it's impossible to modify the error request object, the only way to censor the Authorization header is to remove it.\n error.request = undefined;\n if (error?.config?.headers) {\n error.config.headers.Authorization = \"<REDACTED>\";\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (error?.response?.request?._header) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n error.response.request._header = \"<REDACTED>\";\n }\n if (error.response && error.response.status === 429) {\n throw new ThrottlingError(\"POST request failed with status 429 (Too Many Requests)\", error);\n }\n }\n throw error;\n }\n\n return this._parseResponse(axiosResponse.data, executionType, properties, axiosResponse.status);\n }\n\n _parseResponse(response: any, executionType: ExecutionType, properties?: ClientRequestProperties | null, status?: number): KustoResponseDataSet {\n const { raw } = properties || {};\n if (raw === true || executionType === ExecutionType.Ingest) {\n return response;\n }\n\n let kustoResponse = null;\n try {\n if (executionType === ExecutionType.Query) {\n kustoResponse = new KustoResponseDataSetV2(response as V2Frames);\n } else {\n kustoResponse = new KustoResponseDataSetV1(response as V1);\n }\n } catch (ex) {\n throw new Error(`Failed to parse response ({${status}}) with the following error [${ex}].`);\n }\n if (kustoResponse.getErrorsCount().errors > 0) {\n throw new Error(`Kusto request had errors. ${kustoResponse.getExceptions()}`);\n }\n return kustoResponse;\n }\n\n _getClientTimeout(executionType: ExecutionType, properties?: ClientRequestProperties | null): number {\n if (properties != null) {\n const clientTimeout = properties.getClientTimeout();\n if (clientTimeout) {\n return clientTimeout;\n }\n\n const serverTimeout = properties.getTimeout();\n if (serverTimeout) {\n return serverTimeout + CLIENT_SERVER_DELTA_IN_MILLISECS;\n }\n }\n\n return executionType === ExecutionType.Query || executionType === ExecutionType.QueryV1 ? QUERY_TIMEOUT_IN_MILLISECS : COMMAND_TIMEOUT_IN_MILLISECS;\n }\n\n public close() {\n if (!this._isClosed) {\n this.cancelToken.cancel(\"Client Closed\");\n }\n this._isClosed = true;\n }\n\n ensureOpen() {\n if (this._isClosed) {\n throw new Error(\"Client is closed\");\n }\n }\n}\n\nexport default KustoClient;\n"]}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { isNode } from \"@azure/core-util\";\nimport axios, { AxiosInstance, AxiosRequestConfig, RawAxiosRequestHeaders } from \"axios\";\nimport http from \"http\";\nimport https from \"https\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport { KustoHeaders } from \"./clientDetails\";\nimport ClientRequestProperties from \"./clientRequestProperties\";\nimport CloudSettings from \"./cloudSettings\";\nimport ConnectionStringBuilder from \"./connectionBuilder\";\nimport { ThrottlingError } from \"./errors\";\nimport { kustoTrustedEndpoints } from \"./kustoTrustedEndpoints\";\nimport { KustoResponseDataSet, KustoResponseDataSetV1, KustoResponseDataSetV2, V1, V2Frames } from \"./response\";\nimport AadHelper from \"./security\";\nimport { toMilliseconds } from \"./timeUtils\";\n\nconst COMMAND_TIMEOUT_IN_MILLISECS = toMilliseconds(0, 10, 30);\nconst QUERY_TIMEOUT_IN_MILLISECS = toMilliseconds(0, 4, 30);\nconst CLIENT_SERVER_DELTA_IN_MILLISECS = toMilliseconds(0, 0, 30);\nconst MGMT_PREFIX = \".\";\n\nenum ExecutionType {\n Mgmt = \"mgmt\",\n Query = \"query\",\n Ingest = \"ingest\",\n QueryV1 = \"queryv1\",\n}\n\nexport type RequestEntity = { query: string } | { stream: any } | { blob: string };\n\nexport class KustoClient {\n connectionString: ConnectionStringBuilder;\n cluster: string;\n defaultDatabase?: string;\n endpoints: { [key in ExecutionType]: string };\n aadHelper: AadHelper;\n axiosInstance: AxiosInstance;\n cancelToken = axios.CancelToken.source();\n private _isClosed: boolean = false;\n\n constructor(kcsb: string | ConnectionStringBuilder) {\n this.connectionString = typeof kcsb === \"string\" ? new ConnectionStringBuilder(kcsb) : kcsb;\n if (!this.connectionString.dataSource) {\n throw new Error(\"Cluster url is required\");\n }\n const url = new URL(this.connectionString.dataSource);\n this.cluster = url.toString();\n if (this.cluster.endsWith(\"/\")) {\n this.cluster = this.cluster.slice(0, -1);\n }\n this.defaultDatabase = this.connectionString.initialCatalog;\n this.endpoints = {\n [ExecutionType.Mgmt]: `${this.cluster}/v1/rest/mgmt`,\n [ExecutionType.Query]: `${this.cluster}/v2/rest/query`,\n [ExecutionType.Ingest]: `${this.cluster}/v1/rest/ingest`,\n [ExecutionType.QueryV1]: `${this.cluster}/v1/rest/query`,\n };\n this.aadHelper = new AadHelper(this.connectionString);\n\n let headers: RawAxiosRequestHeaders = {\n Accept: \"application/json\",\n };\n\n if (isNode) {\n headers = {\n ...headers,\n \"Accept-Encoding\": \"gzip,deflate\",\n Connection: \"Keep-Alive\",\n };\n }\n const axiosProps: AxiosRequestConfig = {\n headers,\n validateStatus: (status: number) => status === 200,\n maxBodyLength: Infinity,\n maxContentLength: Infinity,\n maxRedirects: 0,\n };\n // http and https are Node modules and are not found in browsers\n if (isNode) {\n // keepAlive pools and reuses TCP connections, so it's faster\n axiosProps.httpAgent = new http.Agent({ keepAlive: true });\n axiosProps.httpsAgent = new https.Agent({ keepAlive: true });\n }\n axiosProps.cancelToken = this.cancelToken.token;\n\n this.axiosInstance = axios.create(axiosProps);\n }\n\n async execute(db: string | null, query: string, properties?: ClientRequestProperties): Promise<KustoResponseDataSet> {\n query = query.trim();\n if (query.startsWith(MGMT_PREFIX)) {\n return this.executeMgmt(db, query, properties);\n }\n\n return this.executeQuery(db, query, properties);\n }\n\n async executeQuery(db: string | null, query: string, properties?: ClientRequestProperties): Promise<KustoResponseDataSet> {\n return this._execute(this.endpoints[ExecutionType.Query], ExecutionType.Query, db, { query }, properties);\n }\n\n async executeQueryV1(db: string | null, query: string, properties?: ClientRequestProperties): Promise<KustoResponseDataSet> {\n return this._execute(this.endpoints[ExecutionType.QueryV1], ExecutionType.QueryV1, db, { query }, properties);\n }\n\n async executeMgmt(db: string | null, query: string, properties?: ClientRequestProperties): Promise<KustoResponseDataSet> {\n return this._execute(this.endpoints[ExecutionType.Mgmt], ExecutionType.Mgmt, db, { query }, properties);\n }\n\n async executeStreamingIngest(\n db: string | null,\n table: string,\n stream: any,\n streamFormat: any,\n mappingName: string | null,\n blob?: string,\n clientRequestId?: string\n ): Promise<KustoResponseDataSet> {\n let endpoint = `${this.endpoints[ExecutionType.Ingest]}/${this.getDb(db)}/${table}?streamFormat=${streamFormat}`;\n if (mappingName != null) {\n endpoint += `&mappingName=${mappingName}`;\n }\n\n if (blob) {\n endpoint += `&sourceKind=uri`;\n }\n\n let properties: ClientRequestProperties | null = null;\n if (clientRequestId) {\n properties = new ClientRequestProperties();\n properties.clientRequestId = clientRequestId;\n }\n\n return this._execute(endpoint, ExecutionType.Ingest, db, blob ? { blob } : { stream }, properties);\n }\n\n async _execute(\n endpoint: string,\n executionType: ExecutionType,\n db: string | null,\n entity: RequestEntity,\n properties?: ClientRequestProperties | null\n ): Promise<KustoResponseDataSet> {\n this.ensureOpen();\n kustoTrustedEndpoints.validateTrustedEndpoint(endpoint, (await CloudSettings.getCloudInfoForCluster(this.cluster)).LoginEndpoint);\n db = this.getDb(db);\n const headers: { [header: string]: string } = {};\n\n let payload: { db: string; csl: string; properties?: any };\n let clientRequestPrefix = \"\";\n\n const timeout = this._getClientTimeout(executionType, properties);\n let payloadContent: any = \"\";\n if (\"query\" in entity) {\n payload = {\n db,\n csl: entity.query,\n };\n\n if (properties != null) {\n payload.properties = properties.toJSON();\n }\n\n payloadContent = JSON.stringify(payload);\n\n headers[\"Content-Type\"] = \"application/json; charset=utf-8\";\n clientRequestPrefix = \"KNC.execute;\";\n } else if (\"stream\" in entity) {\n payloadContent = entity.stream;\n clientRequestPrefix = \"KNC.executeStreamingIngest;\";\n if (isNode) {\n headers[\"Content-Encoding\"] = \"gzip\";\n headers[\"Content-Type\"] = \"application/octet-stream\";\n } else {\n headers[\"Content-Type\"] = \"application/json\";\n }\n } else if (\"blob\" in entity) {\n payloadContent = {\n sourceUri: entity.blob,\n };\n clientRequestPrefix = \"KNC.executeStreamingIngestFromBlob;\";\n headers[\"Content-Type\"] = \"application/json\";\n } else {\n throw new Error(\"Invalid parameters - expected query or streaming ingest\");\n }\n\n let kustoHeaders = this.connectionString.clientDetails().getHeaders();\n kustoHeaders[\"x-ms-client-request-id\"] = `${clientRequestPrefix}${uuidv4()}`;\n\n if (properties != null) {\n kustoHeaders = {\n ...kustoHeaders,\n ...properties.getHeaders(),\n };\n }\n\n for (const key of Object.keys(kustoHeaders) as Iterable<keyof KustoHeaders>) {\n if (kustoHeaders[key]) {\n headers[key] = kustoHeaders[key] as string;\n }\n }\n\n const authHeader = await this.aadHelper.getAuthHeader();\n if (authHeader != null) {\n headers.Authorization = authHeader;\n }\n\n return this._doRequest(endpoint, executionType, headers, payloadContent, timeout, properties);\n }\n\n private getDb(db: string | null) {\n if (db == null) {\n if (this.defaultDatabase == null) {\n throw new Error(\"No database provided, and no default database specified in connection string\");\n }\n db = this.defaultDatabase;\n }\n return db;\n }\n\n async _doRequest(\n endpoint: string,\n executionType: ExecutionType,\n headers: { [header: string]: string },\n payload: any,\n timeout: number,\n properties?: ClientRequestProperties | null\n ): Promise<KustoResponseDataSet> {\n // replace non-ascii characters with ? in headers\n for (const key of Object.keys(headers)) {\n headers[key] = headers[key].replace(/[^\\x00-\\x7F]+/g, \"?\");\n }\n\n const axiosConfig: AxiosRequestConfig = {\n headers,\n timeout,\n };\n\n let axiosResponse;\n try {\n axiosResponse = await this.axiosInstance.post(endpoint, payload, axiosConfig);\n } catch (error: unknown) {\n if (axios.isAxiosError(error)) {\n // Since it's impossible to modify the error request object, the only way to censor the Authorization header is to remove it.\n error.request = undefined;\n if (error?.config?.headers) {\n error.config.headers.Authorization = \"<REDACTED>\";\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (error?.response?.request?._header) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n error.response.request._header = \"<REDACTED>\";\n }\n if (error.response && error.response.status === 429) {\n throw new ThrottlingError(\"POST request failed with status 429 (Too Many Requests)\", error);\n }\n }\n throw error;\n }\n\n return this._parseResponse(axiosResponse.data, executionType, properties, axiosResponse.status);\n }\n\n _parseResponse(response: any, executionType: ExecutionType, properties?: ClientRequestProperties | null, status?: number): KustoResponseDataSet {\n const { raw } = properties || {};\n if (raw === true || executionType === ExecutionType.Ingest) {\n return response;\n }\n\n let kustoResponse = null;\n try {\n if (executionType === ExecutionType.Query) {\n kustoResponse = new KustoResponseDataSetV2(response as V2Frames);\n } else {\n kustoResponse = new KustoResponseDataSetV1(response as V1);\n }\n } catch (ex) {\n throw new Error(`Failed to parse response ({${status}}) with the following error [${ex}].`);\n }\n if (kustoResponse.getErrorsCount().errors > 0) {\n throw new Error(`Kusto request had errors. ${kustoResponse.getExceptions()}`);\n }\n return kustoResponse;\n }\n\n _getClientTimeout(executionType: ExecutionType, properties?: ClientRequestProperties | null): number {\n if (properties != null) {\n const clientTimeout = properties.getClientTimeout();\n if (clientTimeout) {\n return clientTimeout;\n }\n\n const serverTimeout = properties.getTimeout();\n if (serverTimeout) {\n return serverTimeout + CLIENT_SERVER_DELTA_IN_MILLISECS;\n }\n }\n\n return executionType === ExecutionType.Query || executionType === ExecutionType.QueryV1 ? QUERY_TIMEOUT_IN_MILLISECS : COMMAND_TIMEOUT_IN_MILLISECS;\n }\n\n public close(): void {\n if (!this._isClosed) {\n this.cancelToken.cancel(\"Client Closed\");\n }\n this._isClosed = true;\n }\n\n ensureOpen() {\n if (this._isClosed) {\n throw new Error(\"Client is closed\");\n }\n }\n}\n\nexport default KustoClient;\n"]}
@@ -7,6 +7,7 @@ exports.CloudSettings = void 0;
7
7
  // Copyright (c) Microsoft Corporation.
8
8
  // Licensed under the MIT License.
9
9
  const axios_1 = __importDefault(require("axios"));
10
+ const core_util_1 = require("@azure/core-util");
10
11
  /**
11
12
  * This class holds data for all cloud instances, and returns the specific data instance by parsing the dns suffix from a URL
12
13
  */
@@ -57,12 +58,15 @@ class CloudSettings {
57
58
  }
58
59
  }
59
60
  catch (ex) {
60
- if (axios_1.default.isAxiosError(ex) && ((_a = ex.response) === null || _a === void 0 ? void 0 : _a.status) === 404) {
61
- // For now as long not all proxies implement the metadata endpoint, if no endpoint exists return public cloud data
62
- this.cloudCache[kustoUri] = this.defaultCloudInfo;
63
- }
64
- else {
65
- throw new Error(`Failed to get cloud info for cluster ${kustoUri} - ${ex}`);
61
+ if (axios_1.default.isAxiosError(ex)) {
62
+ // Axios library has a bug in browser, not propagating the status code, see: https://github.com/axios/axios/issues/5330
63
+ if ((((_a = ex.response) === null || _a === void 0 ? void 0 : _a.status) === 404 && core_util_1.isNode) || (ex.code === axios_1.default.AxiosError.ERR_NETWORK && !core_util_1.isNode)) {
64
+ // For now as long not all proxies implement the metadata endpoint, if no endpoint exists return public cloud data
65
+ this.cloudCache[kustoUri] = this.defaultCloudInfo;
66
+ }
67
+ else {
68
+ throw new Error(`Failed to get cloud info for cluster ${kustoUri} - ${ex}`);
69
+ }
66
70
  }
67
71
  }
68
72
  return this.cloudCache[kustoUri];
@@ -1 +1 @@
1
- {"version":3,"file":"cloudSettings.js","sourceRoot":"","sources":["../../src/cloudSettings.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport axios from \"axios\";\n\nexport type CloudInfo = {\n LoginEndpoint: string;\n LoginMfaRequired: boolean;\n KustoClientAppId: string;\n KustoClientRedirectUri: string;\n KustoServiceResourceId: string;\n FirstPartyAuthorityUrl: string;\n};\n\n/**\n * This class holds data for all cloud instances, and returns the specific data instance by parsing the dns suffix from a URL\n */\nclass CloudSettings {\n METADATA_ENDPOINT = \"/v1/rest/auth/metadata\";\n defaultCloudInfo: CloudInfo = {\n LoginEndpoint: process.env.AadAuthorityUri || \"https://login.microsoftonline.com\",\n LoginMfaRequired: false,\n KustoClientAppId: \"db662dc1-0cfe-4e1c-a843-19a68e65be58\",\n KustoClientRedirectUri: \"https://microsoft/kustoclient\",\n KustoServiceResourceId: \"https://kusto.kusto.windows.net\",\n FirstPartyAuthorityUrl: \"https://login.microsoftonline.com/f8cdef31-a31e-4b4a-93e4-5f571e91255a\",\n };\n cloudCache: { [kustoUri: string]: CloudInfo } = {};\n\n writeToCache(url: string, info?: CloudInfo) {\n this.cloudCache[this.normalizeUrl(url)] = info ?? this.defaultCloudInfo;\n }\n\n getFromCache = (kustoUri: string) => this.cloudCache[this.normalizeUrl(kustoUri)];\n\n deleteFromCache = (kustoUri: string) => delete this.cloudCache[this.normalizeUrl(kustoUri)];\n\n async getCloudInfoForCluster(kustoUri: string): Promise<CloudInfo> {\n kustoUri = this.normalizeUrl(kustoUri);\n if (kustoUri in this.cloudCache) {\n return this.cloudCache[kustoUri];\n }\n\n try {\n const response = await axios.get<{ AzureAD: CloudInfo | undefined }>(kustoUri + this.METADATA_ENDPOINT, {\n headers: {\n \"Cache-Control\": \"no-cache\",\n // Disable caching - it's being cached in memory (Service returns max-age).\n // The original motivation for this is due to a CORS issue in Ibiza due to a dynamic subdomain.\n // The first dynamic subdomain is attached to the cache and for some reason isn't invalidated\n // when there is a new subdomain. It causes the request failure due to CORS.\n // Example:\n // Access to XMLHttpRequest at 'https://safrankecc.canadacentral.kusto.windows.net/v1/rest/auth/metadata' from origin\n // 'https://sandbox-46-11.reactblade.portal.azure.net' has been blocked by CORS policy: The 'Access-Control-Allow-Origin' header has a value\n // 'https://sandbox-46-10.reactblade.portal.azure.net' that is not equal to the supplied origin.\n },\n maxRedirects: 0,\n });\n if (response.status === 200) {\n this.cloudCache[kustoUri] = response.data.AzureAD || this.defaultCloudInfo;\n } else {\n throw new Error(`Kusto returned an invalid cloud metadata response - ${response}`);\n }\n } catch (ex) {\n if (axios.isAxiosError(ex) && ex.response?.status === 404) {\n // For now as long not all proxies implement the metadata endpoint, if no endpoint exists return public cloud data\n this.cloudCache[kustoUri] = this.defaultCloudInfo;\n } else {\n throw new Error(`Failed to get cloud info for cluster ${kustoUri} - ${ex}`);\n }\n }\n return this.cloudCache[kustoUri];\n }\n\n private normalizeUrl(kustoUri: string) {\n const url = new URL(kustoUri);\n const urlString = url.toString();\n if (urlString.endsWith(\"/\")) {\n return urlString.slice(0, urlString.length - 1);\n }\n return urlString;\n }\n\n static getAuthorityUri(cloudInfo: CloudInfo, authorityId?: string): string {\n return cloudInfo.LoginEndpoint + \"/\" + (authorityId || \"organizations\");\n }\n}\n\nconst cloudSettings = new CloudSettings();\nexport { cloudSettings as CloudSettings };\nexport default cloudSettings;\n"]}
1
+ {"version":3,"file":"cloudSettings.js","sourceRoot":"","sources":["../../src/cloudSettings.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport axios from \"axios\";\nimport { isNode } from \"@azure/core-util\";\n\nexport type CloudInfo = {\n LoginEndpoint: string;\n LoginMfaRequired: boolean;\n KustoClientAppId: string;\n KustoClientRedirectUri: string;\n KustoServiceResourceId: string;\n FirstPartyAuthorityUrl: string;\n};\n\n/**\n * This class holds data for all cloud instances, and returns the specific data instance by parsing the dns suffix from a URL\n */\nclass CloudSettings {\n METADATA_ENDPOINT = \"/v1/rest/auth/metadata\";\n defaultCloudInfo: CloudInfo = {\n LoginEndpoint: process.env.AadAuthorityUri || \"https://login.microsoftonline.com\",\n LoginMfaRequired: false,\n KustoClientAppId: \"db662dc1-0cfe-4e1c-a843-19a68e65be58\",\n KustoClientRedirectUri: \"https://microsoft/kustoclient\",\n KustoServiceResourceId: \"https://kusto.kusto.windows.net\",\n FirstPartyAuthorityUrl: \"https://login.microsoftonline.com/f8cdef31-a31e-4b4a-93e4-5f571e91255a\",\n };\n cloudCache: { [kustoUri: string]: CloudInfo } = {};\n\n writeToCache(url: string, info?: CloudInfo) {\n this.cloudCache[this.normalizeUrl(url)] = info ?? this.defaultCloudInfo;\n }\n\n getFromCache = (kustoUri: string) => this.cloudCache[this.normalizeUrl(kustoUri)];\n\n deleteFromCache = (kustoUri: string) => delete this.cloudCache[this.normalizeUrl(kustoUri)];\n\n async getCloudInfoForCluster(kustoUri: string): Promise<CloudInfo> {\n kustoUri = this.normalizeUrl(kustoUri);\n if (kustoUri in this.cloudCache) {\n return this.cloudCache[kustoUri];\n }\n\n try {\n const response = await axios.get<{ AzureAD: CloudInfo | undefined }>(kustoUri + this.METADATA_ENDPOINT, {\n headers: {\n \"Cache-Control\": \"no-cache\",\n // Disable caching - it's being cached in memory (Service returns max-age).\n // The original motivation for this is due to a CORS issue in Ibiza due to a dynamic subdomain.\n // The first dynamic subdomain is attached to the cache and for some reason isn't invalidated\n // when there is a new subdomain. It causes the request failure due to CORS.\n // Example:\n // Access to XMLHttpRequest at 'https://safrankecc.canadacentral.kusto.windows.net/v1/rest/auth/metadata' from origin\n // 'https://sandbox-46-11.reactblade.portal.azure.net' has been blocked by CORS policy: The 'Access-Control-Allow-Origin' header has a value\n // 'https://sandbox-46-10.reactblade.portal.azure.net' that is not equal to the supplied origin.\n },\n maxRedirects: 0,\n });\n if (response.status === 200) {\n this.cloudCache[kustoUri] = response.data.AzureAD || this.defaultCloudInfo;\n } else {\n throw new Error(`Kusto returned an invalid cloud metadata response - ${response}`);\n }\n } catch (ex) {\n if (axios.isAxiosError(ex)) {\n // Axios library has a bug in browser, not propagating the status code, see: https://github.com/axios/axios/issues/5330\n if ((ex.response?.status === 404 && isNode) || (ex.code === axios.AxiosError.ERR_NETWORK && !isNode)) {\n // For now as long not all proxies implement the metadata endpoint, if no endpoint exists return public cloud data\n this.cloudCache[kustoUri] = this.defaultCloudInfo;\n } else {\n throw new Error(`Failed to get cloud info for cluster ${kustoUri} - ${ex}`);\n }\n }\n }\n return this.cloudCache[kustoUri];\n }\n\n private normalizeUrl(kustoUri: string) {\n const url = new URL(kustoUri);\n const urlString = url.toString();\n if (urlString.endsWith(\"/\")) {\n return urlString.slice(0, urlString.length - 1);\n }\n return urlString;\n }\n\n static getAuthorityUri(cloudInfo: CloudInfo, authorityId?: string): string {\n return cloudInfo.LoginEndpoint + \"/\" + (authorityId || \"organizations\");\n }\n}\n\nconst cloudSettings = new CloudSettings();\nexport { cloudSettings as CloudSettings };\nexport default cloudSettings;\n"]}
@@ -17,6 +17,7 @@
17
17
  ".kustodev.windows.net",
18
18
  ".kustomfa.windows.net",
19
19
  ".playfabapi.com",
20
+ ".azureplayfab.com",
20
21
  ".playfab.com",
21
22
  ".kusto.data.microsoft.com",
22
23
  ".kusto.fabric.microsoft.com"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "azure-kusto-data",
3
- "version": "5.2.1",
3
+ "version": "5.2.3",
4
4
  "description": "Azure Data Explorer Query SDK",
5
5
  "module": "dist-esm/src/index.js",
6
6
  "types": "./types/src/index.d.ts",
@@ -56,17 +56,14 @@
56
56
  "rimraf": "^3.0.2"
57
57
  },
58
58
  "dependencies": {
59
- "@azure/identity": "^2.1.0",
59
+ "@azure/identity": "^3.3.2",
60
60
  "@azure/msal-common": "^7.3.0",
61
61
  "@types/uuid": "^8.3.4",
62
- "axios": "^0.27.2",
62
+ "axios": "^1.6.0",
63
63
  "follow-redirects": "^1.15.1",
64
64
  "https-browserify": "^1.0.0",
65
65
  "stream-http": "^3.2.0",
66
66
  "uuid": "^8.3.2"
67
67
  },
68
- "overrides": {
69
- "jsonwebtoken": "^9.0.0"
70
- },
71
- "gitHead": "47d85c627404235bd3f0ce7d69be56d07084c41e"
68
+ "gitHead": "c88af683a6d2d1cef28c5f866c4c1119744f0601"
72
69
  }