ibm-cloud-sdk-core 4.1.1 → 4.1.2

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.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ ## [4.1.2](https://github.com/IBM/node-sdk-core/compare/v4.1.1...v4.1.2) (2023-09-27)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * harden checks for cookies in error responses ([#252](https://github.com/IBM/node-sdk-core/issues/252)) ([36f7bfe](https://github.com/IBM/node-sdk-core/commit/36f7bfeb80cde1ea8b159659a8a0a8c5b4cf6ea1))
7
+
1
8
  ## [4.1.1](https://github.com/IBM/node-sdk-core/compare/v4.1.0...v4.1.1) (2023-09-20)
2
9
 
3
10
 
@@ -29,7 +29,7 @@ import logger from './logger';
29
29
  const internalCreateCookieInterceptor = (cookieJar) => {
30
30
  /**
31
31
  * This is called by Axios when a request is about to be sent in order to
32
- * copy the cookie string from the URL to a request header.
32
+ * set the "cookie" header in the request.
33
33
  *
34
34
  * @param config the Axios request config
35
35
  * @returns the request config
@@ -65,29 +65,34 @@ const internalCreateCookieInterceptor = (cookieJar) => {
65
65
  function responseInterceptor(response) {
66
66
  return __awaiter(this, void 0, void 0, function* () {
67
67
  logger.debug('CookieInterceptor: intercepting response to check for set-cookie headers.');
68
- const cookies = response.headers['set-cookie'];
69
- if (cookies) {
70
- logger.debug(`CookieInterceptor: setting cookies in jar for URL ${response.config.url}.`);
71
- // Write cookies sequentially by chaining the promises in a reduce
72
- yield cookies.reduce((cookiePromise, cookie) => cookiePromise.then(() => cookieJar.setCookie(cookie, response.config.url)), Promise.resolve(null));
68
+ if (response && response.headers) {
69
+ const cookies = response.headers['set-cookie'];
70
+ if (cookies) {
71
+ logger.debug(`CookieInterceptor: setting cookies in jar for URL ${response.config.url}.`);
72
+ // Write cookies sequentially by chaining the promises in a reduce
73
+ yield cookies.reduce((cookiePromise, cookie) => cookiePromise.then(() => cookieJar.setCookie(cookie, response.config.url)), Promise.resolve(null));
74
+ }
75
+ else {
76
+ logger.debug('CookieInterceptor: no set-cookie headers.');
77
+ }
73
78
  }
74
79
  else {
75
- logger.debug('CookieInterceptor: no set-cookie headers.');
80
+ logger.debug('CookieInterceptor: no response headers.');
76
81
  }
77
82
  return response;
78
83
  });
79
84
  }
80
85
  /**
81
86
  * This is called by Axios when a non-2xx response has been received.
82
- * We'll simply invoke the "responseFulfilled" method since we want to
83
- * do the same cookie handler as for a success response.
87
+ * We'll simply delegate to the "responseInterceptor" method since we want to
88
+ * do the same cookie handling as for a success response.
84
89
  * @param error the Axios error object that describes the non-2xx response
85
90
  * @returns the error object
86
91
  */
87
92
  function responseRejected(error) {
88
93
  return __awaiter(this, void 0, void 0, function* () {
89
94
  logger.debug('CookieIntercepter: intercepting error response');
90
- if (isAxiosError(error)) {
95
+ if (isAxiosError(error) && error.response) {
91
96
  logger.debug('CookieIntercepter: delegating to responseInterceptor()');
92
97
  yield responseInterceptor(error.response);
93
98
  }
@@ -62,7 +62,7 @@ var logger_1 = __importDefault(require("./logger"));
62
62
  var internalCreateCookieInterceptor = function (cookieJar) {
63
63
  /**
64
64
  * This is called by Axios when a request is about to be sent in order to
65
- * copy the cookie string from the URL to a request header.
65
+ * set the "cookie" header in the request.
66
66
  *
67
67
  * @param config the Axios request config
68
68
  * @returns the request config
@@ -110,6 +110,7 @@ var internalCreateCookieInterceptor = function (cookieJar) {
110
110
  switch (_a.label) {
111
111
  case 0:
112
112
  logger_1.default.debug('CookieInterceptor: intercepting response to check for set-cookie headers.');
113
+ if (!(response && response.headers)) return [3 /*break*/, 4];
113
114
  cookies = response.headers['set-cookie'];
114
115
  if (!cookies) return [3 /*break*/, 2];
115
116
  logger_1.default.debug("CookieInterceptor: setting cookies in jar for URL ".concat(response.config.url, "."));
@@ -124,15 +125,19 @@ var internalCreateCookieInterceptor = function (cookieJar) {
124
125
  case 2:
125
126
  logger_1.default.debug('CookieInterceptor: no set-cookie headers.');
126
127
  _a.label = 3;
127
- case 3: return [2 /*return*/, response];
128
+ case 3: return [3 /*break*/, 5];
129
+ case 4:
130
+ logger_1.default.debug('CookieInterceptor: no response headers.');
131
+ _a.label = 5;
132
+ case 5: return [2 /*return*/, response];
128
133
  }
129
134
  });
130
135
  });
131
136
  }
132
137
  /**
133
138
  * This is called by Axios when a non-2xx response has been received.
134
- * We'll simply invoke the "responseFulfilled" method since we want to
135
- * do the same cookie handler as for a success response.
139
+ * We'll simply delegate to the "responseInterceptor" method since we want to
140
+ * do the same cookie handling as for a success response.
136
141
  * @param error the Axios error object that describes the non-2xx response
137
142
  * @returns the error object
138
143
  */
@@ -142,7 +147,7 @@ var internalCreateCookieInterceptor = function (cookieJar) {
142
147
  switch (_a.label) {
143
148
  case 0:
144
149
  logger_1.default.debug('CookieIntercepter: intercepting error response');
145
- if (!(0, axios_1.isAxiosError)(error)) return [3 /*break*/, 2];
150
+ if (!((0, axios_1.isAxiosError)(error) && error.response)) return [3 /*break*/, 2];
146
151
  logger_1.default.debug('CookieIntercepter: delegating to responseInterceptor()');
147
152
  return [4 /*yield*/, responseInterceptor(error.response)];
148
153
  case 1:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ibm-cloud-sdk-core",
3
- "version": "4.1.1",
3
+ "version": "4.1.2",
4
4
  "description": "Core functionality to support SDKs generated with IBM's OpenAPI SDK Generator.",
5
5
  "main": "index.js",
6
6
  "typings": "./es/index.d.ts",