Skip to content

Commit f919b0c

Browse files
authored
Revert and improve connection handle in NpmRegistry (#381)
* Revert "Add callback for node20 timeouts in npm registry (#377)" * Adding better connection handling * Update package-lock.json * Updating test cases
1 parent cbfa135 commit f919b0c

File tree

4 files changed

+21
-57
lines changed

4 files changed

+21
-57
lines changed

common-npm-packages/packaging-common/Tests/npm/npmL0.ts

Lines changed: 8 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import * as assert from "assert";
22
import * as mocker from "azure-pipelines-task-lib/lib-mocker";
33

44
import Lazy_NpmRegistry = require('../../npm/npmregistry');
5-
const EventEmitter = require('events');
65

76
const BASIC_AUTH_PAT_PASSWD_REGEX = /\/\/.*\/:_password=.*/g;
87
const BEARER_AUTH_REGEX = /\/\/.*\/:_authToken=AUTHTOKEN.*/g;
@@ -161,20 +160,15 @@ export function npmcommon() {
161160
HttpClient: function() {
162161
return {
163162
get: function(url, headers) {
164-
const emitter = new EventEmitter();
165-
process.nextTick(() => {
166-
emitter.emit('data', 'somedata');
167-
emitter.emit('end');
168-
});
169163
return {
170164
then: function(handler) {
171165
handler({
172166
message: {
173167
statusCode: 401,
174-
rawHeaders: ['x-tfs-foo: abc', 'x-content-type-options: nosniff', 'X-Powered-By: ASP.NET'],
175-
on: emitter.on.bind(emitter),
176-
once: emitter.once.bind(emitter),
177-
removeListener: emitter.removeListener.bind(emitter)
168+
rawHeaders: ['x-tfs-foo: abc', 'x-content-type-options: nosniff', 'X-Powered-By: ASP.NET']
169+
},
170+
readBody: function() {
171+
return Promise.resolve('mocked body content');
178172
}
179173
});
180174
}
@@ -224,20 +218,15 @@ export function npmcommon() {
224218
HttpClient: function() {
225219
return {
226220
get: function(url, headers) {
227-
const emitter = new EventEmitter();
228-
process.nextTick(() => {
229-
emitter.emit('data', 'somedata');
230-
emitter.emit('end');
231-
});
232221
return {
233222
then: function(handler) {
234223
handler({
235224
message: {
236225
statusCode: 401,
237-
rawHeaders: ['x-content-type-options: nosniff', 'X-Powered-By: ASP.NET'],
238-
on: emitter.on.bind(emitter),
239-
once: emitter.once.bind(emitter),
240-
removeListener: emitter.removeListener.bind(emitter)
226+
rawHeaders: ['x-content-type-options: nosniff', 'X-Powered-By: ASP.NET']
227+
},
228+
readBody: function() {
229+
return Promise.resolve('mocked body content');
241230
}
242231
});
243232
}

common-npm-packages/packaging-common/npm/npmregistry.ts

Lines changed: 10 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -107,41 +107,16 @@ export class NpmRegistry implements INpmRegistry {
107107
headers['X-TFS-FedAuthRedirect'] = 'Suppress';
108108

109109
const endpointClient = new HttpClient(tl.getVariable('AZURE_HTTP_USER_AGENT'), null, requestOptions);
110-
111-
return new Promise<boolean>((resolve, reject) => {
112-
try {
113-
endpointClient.get(endpointUri, headers).then((res) => {
114-
if (res.message.statusCode) {
115-
// Define event listener functions
116-
const onData = () => {};
117-
const onEnd = () => {
118-
cleanup();
119-
resolve (res.message.rawHeaders !== null && res.message.rawHeaders.some(t => t.toLowerCase().indexOf('x-tfs') >= 0 || t.toLowerCase().indexOf('x-vss') >= 0));
120-
};
121-
const onError = (err) => {
122-
cleanup();
123-
throw(err);
124-
};
125-
126-
const cleanup = () => {
127-
res.message.removeListener('data', onData);
128-
res.message.removeListener('end', onEnd);
129-
res.message.removeListener('error', onError);
130-
};
131-
132-
// Attach event listeners
133-
res.message.on('data', onData);
134-
res.message.once('end', onEnd);
135-
res.message.once('error', onError);
136-
} else {
137-
throw new Error('No status code received from the response');
138-
}
139-
});
140-
} catch (error) {
141-
tl.debug(error);
142-
reject(false);
143-
}
144-
});
110+
try {
111+
const resp = await endpointClient.get(endpointUri, headers);
112+
113+
// Read the body to prevent leaking connections
114+
resp.readBody();
115+
return resp.message.rawHeaders !== null && resp.message.rawHeaders.some( t => t.toLowerCase().indexOf('x-tfs') >= 0 || t.toLowerCase().indexOf('x-vss') >= 0 );
116+
} catch (error) {
117+
tl.debug(error);
118+
return false;
119+
}
145120
}
146121

147122
public static async FromFeedId(packagingUri: string, feedId: string, project: string, authOnly?: boolean, useSession?: boolean): Promise<NpmRegistry> {

common-npm-packages/packaging-common/package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

common-npm-packages/packaging-common/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "azure-pipelines-tasks-packaging-common",
3-
"version": "3.245.1",
3+
"version": "3.245.2",
44
"description": "Azure Pipelines Packaging Tasks Common",
55
"scripts": {
66
"test": "mocha _build/Tests/L0.js",

0 commit comments

Comments
 (0)