From aaea3f7f955cd96cd14da85acca412f89d7478aa Mon Sep 17 00:00:00 2001 From: Jason Ramsay Date: Wed, 24 Jan 2024 17:43:31 -0800 Subject: [PATCH] - updating to the latest version of axios - update error message and always return error.code = 'ECONNABORTED' for both cases to allow for codespaces to retry in this scenario --- ts/package-lock.json | 16 ++++++++-------- ts/package.json | 2 +- ts/src/connections/package.json | 4 ++-- ts/src/management/package.json | 4 ++-- ts/src/management/tunnelManagementHttpClient.ts | 11 +++++------ ts/test/tunnels-test/tunnelManagementTests.ts | 14 ++++++++------ 6 files changed, 26 insertions(+), 25 deletions(-) diff --git a/ts/package-lock.json b/ts/package-lock.json index 436bcd83..b8603fc0 100644 --- a/ts/package-lock.json +++ b/ts/package-lock.json @@ -11,7 +11,7 @@ "@microsoft/dev-tunnels-ssh": "^3.11.36", "@microsoft/dev-tunnels-ssh-tcp": "^3.11.36", "await-semaphore": "^0.1.3", - "axios": "^1.6.2", + "axios": "^1.6.6", "buffer": "^5.2.1", "debug": "^4.1.1", "uuid": "^3.3.3", @@ -687,11 +687,11 @@ "integrity": "sha512-d1W2aNSYcz/sxYO4pMGX9vq65qOTu0P800epMud+6cYYX0QcT7zyqcxec3VWzpgvdXo57UWmVbZpLMjX2m1I7Q==" }, "node_modules/axios": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.2.tgz", - "integrity": "sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==", + "version": "1.6.6", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.6.tgz", + "integrity": "sha512-XZLZDFfXKM9U/Y/B4nNynfCRUqNyVZ4sBC/n9GDRCkq9vd2mIvKjKKsbIh1WPmHmNbg6ND7cTBY3Y2+u1G3/2Q==", "dependencies": { - "follow-redirects": "^1.15.0", + "follow-redirects": "^1.15.4", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } @@ -2249,9 +2249,9 @@ "dev": true }, "node_modules/follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", + "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==", "funding": [ { "type": "individual", diff --git a/ts/package.json b/ts/package.json index 5943bf75..68830fef 100644 --- a/ts/package.json +++ b/ts/package.json @@ -24,7 +24,7 @@ "@microsoft/dev-tunnels-ssh": "^3.11.36", "@microsoft/dev-tunnels-ssh-tcp": "^3.11.36", "await-semaphore": "^0.1.3", - "axios": "^1.6.2", + "axios": "^1.6.6", "buffer": "^5.2.1", "debug": "^4.1.1", "uuid": "^3.3.3", diff --git a/ts/src/connections/package.json b/ts/src/connections/package.json index 9bceac12..d03585bd 100644 --- a/ts/src/connections/package.json +++ b/ts/src/connections/package.json @@ -18,8 +18,8 @@ "buffer": "^5.2.1", "debug": "^4.1.1", "vscode-jsonrpc": "^4.0.0", - "@microsoft/dev-tunnels-contracts": ">1.1.8", - "@microsoft/dev-tunnels-management": ">1.1.8", + "@microsoft/dev-tunnels-contracts": ">1.1.9", + "@microsoft/dev-tunnels-management": ">1.1.9", "@microsoft/dev-tunnels-ssh": "^3.11.36", "@microsoft/dev-tunnels-ssh-tcp": "^3.11.36", "uuid": "^3.3.3", diff --git a/ts/src/management/package.json b/ts/src/management/package.json index be19fdce..79ca0a37 100644 --- a/ts/src/management/package.json +++ b/ts/src/management/package.json @@ -18,7 +18,7 @@ "buffer": "^5.2.1", "debug": "^4.1.1", "vscode-jsonrpc": "^4.0.0", - "@microsoft/dev-tunnels-contracts": ">1.1.8", - "axios": "^1.6.2" + "@microsoft/dev-tunnels-contracts": ">1.1.9", + "axios": "^1.6.6" } } diff --git a/ts/src/management/tunnelManagementHttpClient.ts b/ts/src/management/tunnelManagementHttpClient.ts index c2672d15..0190f1c1 100644 --- a/ts/src/management/tunnelManagementHttpClient.ts +++ b/ts/src/management/tunnelManagementHttpClient.ts @@ -778,14 +778,13 @@ export class TunnelManagementHttpClient implements TunnelManagementClient { private getResponseErrorMessage(error: AxiosError, signal: AbortSignal) { let errorMessage = ''; - if (error.code === 'ECONNABORTED') { - // server timeout - errorMessage = `Timeout reached: ${error.message}`; - } - if (signal.aborted) { // connection timeout - errorMessage = `Signal aborted: ${error.message}` + error.code = 'ECONNABORTED'; + errorMessage = `ECONNABORTED: (signal aborted) ${error.message}` + } else if (error.code === 'ECONNABORTED') { + // server timeout + errorMessage = `ECONNABORTED: (timeout) ${error.message}`; } if (error.response?.data) { diff --git a/ts/test/tunnels-test/tunnelManagementTests.ts b/ts/test/tunnels-test/tunnelManagementTests.ts index 986bc61f..d86f941b 100644 --- a/ts/test/tunnels-test/tunnelManagementTests.ts +++ b/ts/test/tunnels-test/tunnelManagementTests.ts @@ -126,7 +126,7 @@ export class TunnelManagementTests { public async timeoutServerResponse() { this.nextResponse = []; - let error: Error | undefined = undefined; + let error: any | undefined = undefined; try { const cts = new CancellationTokenSource(); // Add additional properties on token. @@ -135,17 +135,18 @@ export class TunnelManagementTests { token.forceTimeout = true; await this.managementClient.listUserLimits(cts.token); } catch (e) { - error = e; + error = e; } - assert(error?.message?.includes('Timeout reached: ')); + assert(error?.message?.includes('ECONNABORTED: (timeout)')); + assert(error?.code === 'ECONNABORTED'); } @test public async timeoutServerConnection() { this.nextResponse = []; - let error: Error | undefined = undefined; + let error: any | undefined = undefined; try { const cts = new CancellationTokenSource(); @@ -156,10 +157,11 @@ export class TunnelManagementTests { token.tokenSource = cts; await this.managementClient.listUserLimits(cts.token); } catch (e) { - error = e; + error = e; } - assert(error?.message?.includes('Signal aborted: ')); + assert(error?.message?.includes('ECONNABORTED: (signal aborted)')); + assert(error?.code === 'ECONNABORTED'); } @test