Socket
Socket
Sign inDemoInstall

ibm-cloud-sdk-core

Package Overview
Dependencies
Maintainers
3
Versions
143
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

ibm-cloud-sdk-core - npm Package Compare versions

Comparing version 4.1.0 to 4.1.1

.nvmrc

2

Authentication.md

@@ -150,3 +150,3 @@ # Authentication

## Identity and Access Management Authentication (IAM)
## Identity and Access Management (IAM) Authentication
The `IamAuthenticator` will accept a user-supplied api key and will perform

@@ -153,0 +153,0 @@ the necessary interactions with the IAM token service to obtain a suitable

@@ -21,3 +21,3 @@ <!-- Do not edit this file. It is automatically generated by API Documenter. -->

| deserializerFn | (any: any) =&gt; any | the deserializer function that is applied on the response object |
| isMap | boolean | _(Optional)_ is <code>true</code> when the response object should be handled as a map |
| isMap | boolean | _(Optional)_ is <code>true</code> when the response object should be handled as a map |

@@ -24,0 +24,0 @@ **Returns:**

@@ -0,1 +1,8 @@

## [4.1.1](https://github.com/IBM/node-sdk-core/compare/v4.1.0...v4.1.1) (2023-09-20)
### Bug Fixes
* process cookies in failed responses ([#251](https://github.com/IBM/node-sdk-core/issues/251)) ([52f758b](https://github.com/IBM/node-sdk-core/commit/52f758bc5700b3ccd283e39cca7401ee8dcb60d9))
# [4.1.0](https://github.com/IBM/node-sdk-core/compare/v4.0.9...v4.1.0) (2023-07-06)

@@ -2,0 +9,0 @@

@@ -160,3 +160,2 @@ /**

* @param isMap - is `true` when the response object should be handled as a map
* @protected
* @returns a Promise

@@ -163,0 +162,0 @@ */

@@ -209,3 +209,2 @@ /**

* @param isMap - is `true` when the response object should be handled as a map
* @protected
* @returns a Promise

@@ -212,0 +211,0 @@ */

/**
* (C) Copyright IBM Corp. 2022.
* (C) Copyright IBM Corp. 2022, 2023.
*

@@ -16,9 +16,4 @@ * Licensed under the Apache License, Version 2.0 (the "License");

*/
import { InternalAxiosRequestConfig, AxiosResponse } from 'axios';
import { Axios } from 'axios';
import { CookieJar } from 'tough-cookie';
export declare class CookieInterceptor {
private readonly cookieJar;
constructor(cookieJar: CookieJar | boolean);
requestInterceptor(config: InternalAxiosRequestConfig): Promise<InternalAxiosRequestConfig<any>>;
responseInterceptor(response: AxiosResponse): Promise<AxiosResponse<any, any>>;
}
export declare const createCookieInterceptor: (cookieJar: CookieJar | boolean) => (axios: Axios) => void;
/**
* (C) Copyright IBM Corp. 2022.
* (C) Copyright IBM Corp. 2022, 2023.
*

@@ -25,22 +25,15 @@ * Licensed under the Apache License, Version 2.0 (the "License");

};
import { isAxiosError } from 'axios';
import extend from 'extend';
import { CookieJar } from 'tough-cookie';
import logger from './logger';
export class CookieInterceptor {
constructor(cookieJar) {
if (cookieJar) {
if (cookieJar === true) {
logger.debug('CookieInterceptor: creating new CookieJar');
this.cookieJar = new CookieJar();
}
else {
logger.debug('CookieInterceptor: using supplied CookieJar');
this.cookieJar = cookieJar;
}
}
else {
throw new Error('Must supply a cookie jar or true.');
}
}
requestInterceptor(config) {
const internalCreateCookieInterceptor = (cookieJar) => {
/**
* This is called by Axios when a request is about to be sent in order to
* copy the cookie string from the URL to a request header.
*
* @param config the Axios request config
* @returns the request config
*/
function requestInterceptor(config) {
return __awaiter(this, void 0, void 0, function* () {

@@ -50,3 +43,3 @@ logger.debug('CookieInterceptor: intercepting request');

logger.debug(`CookieInterceptor: getting cookies for: ${config.url}`);
const cookieHeaderValue = yield this.cookieJar.getCookieString(config.url);
const cookieHeaderValue = yield cookieJar.getCookieString(config.url);
if (cookieHeaderValue) {

@@ -67,19 +60,20 @@ logger.debug('CookieInterceptor: setting cookie header');

}
responseInterceptor(response) {
/**
* This is called by Axios when a 2xx response has been received.
* We'll invoke the configured cookie jar's setCookie() method to handle
* the "set-cookie" header.
* @param response the Axios response object
* @returns the response object
*/
function responseInterceptor(response) {
return __awaiter(this, void 0, void 0, function* () {
logger.debug('CookieInterceptor: intercepting response.');
if (response && response.headers) {
logger.debug('CookieInterceptor: checking for set-cookie headers.');
const cookies = response.headers['set-cookie'];
if (cookies) {
logger.debug(`CookieInterceptor: setting cookies in jar for URL ${response.config.url}.`);
// Write cookies sequentially by chaining the promises in a reduce
yield cookies.reduce((cookiePromise, cookie) => cookiePromise.then(() => this.cookieJar.setCookie(cookie, response.config.url)), Promise.resolve(null));
}
else {
logger.debug('CookieInterceptor: no set-cookie headers.');
}
logger.debug('CookieInterceptor: intercepting response to check for set-cookie headers.');
const cookies = response.headers['set-cookie'];
if (cookies) {
logger.debug(`CookieInterceptor: setting cookies in jar for URL ${response.config.url}.`);
// Write cookies sequentially by chaining the promises in a reduce
yield cookies.reduce((cookiePromise, cookie) => cookiePromise.then(() => cookieJar.setCookie(cookie, response.config.url)), Promise.resolve(null));
}
else {
logger.debug('CookieInterceptor: no response headers.');
logger.debug('CookieInterceptor: no set-cookie headers.');
}

@@ -89,2 +83,41 @@ return response;

}
}
/**
* This is called by Axios when a non-2xx response has been received.
* We'll simply invoke the "responseFulfilled" method since we want to
* do the same cookie handler as for a success response.
* @param error the Axios error object that describes the non-2xx response
* @returns the error object
*/
function responseRejected(error) {
return __awaiter(this, void 0, void 0, function* () {
logger.debug('CookieIntercepter: intercepting error response');
if (isAxiosError(error)) {
logger.debug('CookieIntercepter: delegating to responseInterceptor()');
yield responseInterceptor(error.response);
}
else {
logger.debug('CookieInterceptor: no response field in error object, skipping...');
}
return Promise.reject(error);
});
}
return (axios) => {
axios.interceptors.request.use(requestInterceptor);
axios.interceptors.response.use(responseInterceptor, responseRejected);
};
};
export const createCookieInterceptor = (cookieJar) => {
if (cookieJar) {
if (cookieJar === true) {
logger.debug('CookieInterceptor: creating new CookieJar');
return internalCreateCookieInterceptor(new CookieJar());
}
else {
logger.debug('CookieInterceptor: using supplied CookieJar');
return internalCreateCookieInterceptor(cookieJar);
}
}
else {
throw new Error('Must supply a cookie jar or true.');
}
};
/**
* (C) Copyright IBM Corp. 2014, 2022.
* (C) Copyright IBM Corp. 2014, 2023.
*

@@ -4,0 +4,0 @@ * Licensed under the Apache License, Version 2.0 (the "License");

@@ -12,3 +12,3 @@ /* eslint-disable class-methods-use-this */

/**
* (C) Copyright IBM Corp. 2014, 2022.
* (C) Copyright IBM Corp. 2014, 2023.
*

@@ -38,3 +38,3 @@ * Licensed under the Apache License, Version 2.0 (the "License");

import { streamToPromise } from './stream-to-promise';
import { CookieInterceptor } from './cookie-support';
import { createCookieInterceptor } from './cookie-support';
import { chainError } from './chain-error';

@@ -76,9 +76,5 @@ export class RequestWrapper {

});
// if a cookie jar is provided, wrap the axios instance and update defaults
// if a cookie jar is provided, register our cookie interceptors with axios
if (axiosOptions.jar) {
const cookieInterceptor = new CookieInterceptor(axiosOptions.jar);
const requestCookieInterceptor = (config) => cookieInterceptor.requestInterceptor(config);
const responseCookieInterceptor = (response) => cookieInterceptor.responseInterceptor(response);
this.axiosInstance.interceptors.request.use(requestCookieInterceptor);
this.axiosInstance.interceptors.response.use(responseCookieInterceptor);
createCookieInterceptor(axiosOptions.jar)(this.axiosInstance);
}

@@ -85,0 +81,0 @@ // get retry config properties and conditionally enable retries

@@ -8,5 +8,5 @@ // This file is read by tools that parse documentation comments conforming to the TSDoc standard.

"packageName": "@microsoft/api-extractor",
"packageVersion": "7.36.0"
"packageVersion": "7.36.1"
}
]
}

@@ -160,3 +160,2 @@ /**

* @param isMap - is `true` when the response object should be handled as a map
* @protected
* @returns a Promise

@@ -163,0 +162,0 @@ */

@@ -228,3 +228,2 @@ "use strict";

* @param isMap - is `true` when the response object should be handled as a map
* @protected
* @returns a Promise

@@ -231,0 +230,0 @@ */

/**
* (C) Copyright IBM Corp. 2022.
* (C) Copyright IBM Corp. 2022, 2023.
*

@@ -16,9 +16,4 @@ * Licensed under the Apache License, Version 2.0 (the "License");

*/
import { InternalAxiosRequestConfig, AxiosResponse } from 'axios';
import { Axios } from 'axios';
import { CookieJar } from 'tough-cookie';
export declare class CookieInterceptor {
private readonly cookieJar;
constructor(cookieJar: CookieJar | boolean);
requestInterceptor(config: InternalAxiosRequestConfig): Promise<InternalAxiosRequestConfig<any>>;
responseInterceptor(response: AxiosResponse): Promise<AxiosResponse<any, any>>;
}
export declare const createCookieInterceptor: (cookieJar: CookieJar | boolean) => (axios: Axios) => void;
"use strict";
/**
* (C) Copyright IBM Corp. 2022.
* (C) Copyright IBM Corp. 2022, 2023.
*

@@ -57,23 +57,16 @@ * Licensed under the Apache License, Version 2.0 (the "License");

Object.defineProperty(exports, "__esModule", { value: true });
exports.CookieInterceptor = void 0;
exports.createCookieInterceptor = void 0;
var axios_1 = require("axios");
var extend_1 = __importDefault(require("extend"));
var tough_cookie_1 = require("tough-cookie");
var logger_1 = __importDefault(require("./logger"));
var CookieInterceptor = /** @class */ (function () {
function CookieInterceptor(cookieJar) {
if (cookieJar) {
if (cookieJar === true) {
logger_1.default.debug('CookieInterceptor: creating new CookieJar');
this.cookieJar = new tough_cookie_1.CookieJar();
}
else {
logger_1.default.debug('CookieInterceptor: using supplied CookieJar');
this.cookieJar = cookieJar;
}
}
else {
throw new Error('Must supply a cookie jar or true.');
}
}
CookieInterceptor.prototype.requestInterceptor = function (config) {
var internalCreateCookieInterceptor = function (cookieJar) {
/**
* This is called by Axios when a request is about to be sent in order to
* copy the cookie string from the URL to a request header.
*
* @param config the Axios request config
* @returns the request config
*/
function requestInterceptor(config) {
return __awaiter(this, void 0, void 0, function () {

@@ -87,3 +80,3 @@ var cookieHeaderValue, cookieHeader;

logger_1.default.debug("CookieInterceptor: getting cookies for: ".concat(config.url));
return [4 /*yield*/, this.cookieJar.getCookieString(config.url)];
return [4 /*yield*/, cookieJar.getCookieString(config.url)];
case 1:

@@ -107,13 +100,17 @@ cookieHeaderValue = _a.sent();

});
};
CookieInterceptor.prototype.responseInterceptor = function (response) {
}
/**
* This is called by Axios when a 2xx response has been received.
* We'll invoke the configured cookie jar's setCookie() method to handle
* the "set-cookie" header.
* @param response the Axios response object
* @returns the response object
*/
function responseInterceptor(response) {
return __awaiter(this, void 0, void 0, function () {
var cookies;
var _this = this;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
logger_1.default.debug('CookieInterceptor: intercepting response.');
if (!(response && response.headers)) return [3 /*break*/, 4];
logger_1.default.debug('CookieInterceptor: checking for set-cookie headers.');
logger_1.default.debug('CookieInterceptor: intercepting response to check for set-cookie headers.');
cookies = response.headers['set-cookie'];

@@ -124,3 +121,3 @@ if (!cookies) return [3 /*break*/, 2];

return [4 /*yield*/, cookies.reduce(function (cookiePromise, cookie) {
return cookiePromise.then(function () { return _this.cookieJar.setCookie(cookie, response.config.url); });
return cookiePromise.then(function () { return cookieJar.setCookie(cookie, response.config.url); });
}, Promise.resolve(null))];

@@ -134,13 +131,54 @@ case 1:

_a.label = 3;
case 3: return [3 /*break*/, 5];
case 4:
logger_1.default.debug('CookieInterceptor: no response headers.');
_a.label = 5;
case 5: return [2 /*return*/, response];
case 3: return [2 /*return*/, response];
}
});
});
}
/**
* This is called by Axios when a non-2xx response has been received.
* We'll simply invoke the "responseFulfilled" method since we want to
* do the same cookie handler as for a success response.
* @param error the Axios error object that describes the non-2xx response
* @returns the error object
*/
function responseRejected(error) {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
logger_1.default.debug('CookieIntercepter: intercepting error response');
if (!(0, axios_1.isAxiosError)(error)) return [3 /*break*/, 2];
logger_1.default.debug('CookieIntercepter: delegating to responseInterceptor()');
return [4 /*yield*/, responseInterceptor(error.response)];
case 1:
_a.sent();
return [3 /*break*/, 3];
case 2:
logger_1.default.debug('CookieInterceptor: no response field in error object, skipping...');
_a.label = 3;
case 3: return [2 /*return*/, Promise.reject(error)];
}
});
});
}
return function (axios) {
axios.interceptors.request.use(requestInterceptor);
axios.interceptors.response.use(responseInterceptor, responseRejected);
};
return CookieInterceptor;
}());
exports.CookieInterceptor = CookieInterceptor;
};
var createCookieInterceptor = function (cookieJar) {
if (cookieJar) {
if (cookieJar === true) {
logger_1.default.debug('CookieInterceptor: creating new CookieJar');
return internalCreateCookieInterceptor(new tough_cookie_1.CookieJar());
}
else {
logger_1.default.debug('CookieInterceptor: using supplied CookieJar');
return internalCreateCookieInterceptor(cookieJar);
}
}
else {
throw new Error('Must supply a cookie jar or true.');
}
};
exports.createCookieInterceptor = createCookieInterceptor;
/**
* (C) Copyright IBM Corp. 2014, 2022.
* (C) Copyright IBM Corp. 2014, 2023.
*

@@ -4,0 +4,0 @@ * Licensed under the Apache License, Version 2.0 (the "License");

@@ -79,3 +79,3 @@ "use strict";

/**
* (C) Copyright IBM Corp. 2014, 2022.
* (C) Copyright IBM Corp. 2014, 2023.
*

@@ -143,11 +143,5 @@ * Licensed under the Apache License, Version 2.0 (the "License");

});
// if a cookie jar is provided, wrap the axios instance and update defaults
// if a cookie jar is provided, register our cookie interceptors with axios
if (axiosOptions.jar) {
var cookieInterceptor_1 = new cookie_support_1.CookieInterceptor(axiosOptions.jar);
var requestCookieInterceptor = function (config) { return cookieInterceptor_1.requestInterceptor(config); };
var responseCookieInterceptor = function (response) {
return cookieInterceptor_1.responseInterceptor(response);
};
this.axiosInstance.interceptors.request.use(requestCookieInterceptor);
this.axiosInstance.interceptors.response.use(responseCookieInterceptor);
(0, cookie_support_1.createCookieInterceptor)(axiosOptions.jar)(this.axiosInstance);
}

@@ -154,0 +148,0 @@ // get retry config properties and conditionally enable retries

{
"name": "ibm-cloud-sdk-core",
"version": "4.1.0",
"version": "4.1.1",
"description": "Core functionality to support SDKs generated with IBM's OpenAPI SDK Generator.",

@@ -58,4 +58,7 @@ "main": "index.js",

"retry-axios": "^2.6.0",
"tough-cookie": "^4.0.0"
"tough-cookie": "^4.1.3"
},
"overrides": {
"semver": "^7.5.3"
},
"browser": {

@@ -62,0 +65,0 @@ "./auth/utils/read-credentials-file": "./auth/utils/read-credentials-file.browser",

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc