Skip to content

Commit

Permalink
Download extensions through request service
Browse files Browse the repository at this point in the history
  • Loading branch information
msujew committed May 26, 2022
1 parent 2573204 commit dc7b7df
Show file tree
Hide file tree
Showing 6 changed files with 92 additions and 37 deletions.
2 changes: 1 addition & 1 deletion dev-packages/cli/src/download-plugins.ts
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,7 @@ export default async function downloadPlugins(options: DownloadPluginsOptions =
await downloader(pluginsToDownload);

const handleDependencyList = async (dependencies: Array<string | string[]>) => {
const client = new OVSXClient({ apiVersion, apiUrl });
const client = new OVSXClient({ apiVersion, apiUrl }, requestService);
// De-duplicate extension ids to only download each once:
const ids = new Set<string>(dependencies.flat());
await parallelOrSequence(...Array.from(ids, id => async () => {
Expand Down
4 changes: 2 additions & 2 deletions dev-packages/request/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,15 @@

<img src='https://raw.githubusercontent.com/eclipse-theia/theia/master/logo/theia.svg?sanitize=true' alt='theia-ext-logo' width='100px' />

<h2>ECLIPSE THEIA - REQUEST SERVICE</h2>
<h2>ECLIPSE THEIA - REQUEST</h2>

<hr />

</div>

## Description

The `@theia/request-service` package is used to send proxy-aware http requests to other services.
The `@theia/request` package is used to send proxy-aware http requests to other services.

## Additional Information

Expand Down
2 changes: 1 addition & 1 deletion dev-packages/request/src/package.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
This file can be removed once we have real unit
tests in place. */

describe('request-service package', () => {
describe('request package', () => {

it('should support code coverage statistics', () => true);
});
4 changes: 1 addition & 3 deletions packages/vsx-registry/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
"@theia/workspace": "1.25.0",
"@types/showdown": "^1.7.1",
"p-debounce": "^2.1.0",
"requestretry": "^7.0.0",
"semver": "^5.4.1",
"showdown": "^1.9.1",
"uuid": "^8.0.0"
Expand Down Expand Up @@ -51,8 +50,7 @@
"watch": "theiaext watch"
},
"devDependencies": {
"@theia/ext-scripts": "1.25.0",
"@types/requestretry": "^1.12.8"
"@theia/ext-scripts": "1.25.0"
},
"nyc": {
"extends": "../../configs/nyc.json"
Expand Down
32 changes: 13 additions & 19 deletions packages/vsx-registry/src/node/vsx-extension-resolver.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,13 @@ import * as path from 'path';
import * as semver from 'semver';
import * as fs from '@theia/core/shared/fs-extra';
import { v4 as uuidv4 } from 'uuid';
import * as requestretry from 'requestretry';
import { injectable, inject } from '@theia/core/shared/inversify';
import URI from '@theia/core/lib/common/uri';
import { PluginDeployerHandler, PluginDeployerResolver, PluginDeployerResolverContext } from '@theia/plugin-ext/lib/common/plugin-protocol';
import { VSXExtensionUri } from '../common/vsx-extension-uri';
import { OVSXClientProvider } from '../common/ovsx-client-provider';
import { VSXExtensionRaw } from '@theia/ovsx-client';
import { RequestService } from '@theia/core/shared/@theia/request';

@injectable()
export class VSXExtensionResolver implements PluginDeployerResolver {
Expand All @@ -36,6 +36,9 @@ export class VSXExtensionResolver implements PluginDeployerResolver {
@inject(PluginDeployerHandler)
protected pluginDeployerHandler: PluginDeployerHandler;

@inject(RequestService)
protected requestService: RequestService;

protected readonly downloadPath: string;

constructor() {
Expand Down Expand Up @@ -95,23 +98,14 @@ export class VSXExtensionResolver implements PluginDeployerResolver {
}

protected async download(downloadUrl: string, downloadPath: string): Promise<boolean> {
return new Promise<boolean>((resolve, reject) => {
requestretry(downloadUrl, {
method: 'GET',
maxAttempts: 5,
retryDelay: 2000,
retryStrategy: requestretry.RetryStrategies.HTTPOrNetworkError
}, (err, response) => {
if (err) {
reject(err);
} else if (response && response.statusCode === 404) {
resolve(false);
} else if (response && response.statusCode !== 200) {
reject(new Error(response.statusMessage));
}
}).pipe(fs.createWriteStream(downloadPath))
.on('error', reject)
.on('close', () => resolve(true));
});
const context = await this.requestService.request({ url: downloadUrl });
if (context.res.statusCode === 404) {
return false;
} else if (context.res.statusCode !== 200) {
throw new Error('Request returned status code: ' + context.res.statusCode);
} else {
await fs.writeFile(downloadPath, context.buffer);
return true;
}
}
}
85 changes: 74 additions & 11 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -2142,11 +2142,16 @@
resolved "https://registry.yarnpkg.com/@theia/monaco-editor-core/-/monaco-editor-core-1.65.2.tgz#91bc9ce2afe1b6011789ce83a5bee898f0153430"
integrity sha512-2UmGjcEW/YpZ2DsFuVevKR3CBMe44Rd6DgwP/5s4pyOe6K/s6TKY7Sh24lO0BXetQKofAEx3zh+ldEvjwhNwDw==

"@tootallnate/once@1":
"@tootallnate/once@1", "@tootallnate/once@^1.1.2":
version "1.1.2"
resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82"
integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==

"@tootallnate/once@2":
version "2.0.0"
resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf"
integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==

"@types/bent@^7.0.1":
version "7.3.2"
resolved "https://registry.yarnpkg.com/@types/bent/-/bent-7.3.2.tgz#07b4f7bcec577be27cdb9e9034eb0de0242481a7"
Expand Down Expand Up @@ -2563,7 +2568,7 @@
"@types/scheduler" "*"
csstype "^3.0.2"

"@types/request@*", "@types/request@^2.0.3":
"@types/request@^2.0.3":
version "2.48.8"
resolved "https://registry.yarnpkg.com/@types/request/-/request-2.48.8.tgz#0b90fde3b655ab50976cb8c5ac00faca22f5a82c"
integrity sha512-whjk1EDJPcAR2kYHRbFl/lKeeKYTi05A15K9bnLInCVroNDCtXce57xKdI0/rQaA3K+6q0eFyUBPmqfSndUZdQ==
Expand All @@ -2573,14 +2578,6 @@
"@types/tough-cookie" "*"
form-data "^2.5.0"

"@types/requestretry@^1.12.8":
version "1.12.8"
resolved "https://registry.yarnpkg.com/@types/requestretry/-/requestretry-1.12.8.tgz#d3f02ee0b4d18e1cee15324506704052a25e1ebd"
integrity sha512-NKdv2WmEe6/V1PmJrflfvGVN9bvuOsnHmNRC4m8TFXPMQnRFKvnnkFN4I6AxAtw4hUi2h3A+z/aH+ir2HYTNOg==
dependencies:
"@types/node" "*"
"@types/request" "*"

"@types/responselike@*", "@types/responselike@^1.0.0":
version "1.0.0"
resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.0.tgz#251f4fe7d154d2bad125abe1b429b23afd262e29"
Expand Down Expand Up @@ -4538,6 +4535,11 @@ dashdash@^1.12.0:
dependencies:
assert-plus "^1.0.0"

data-uri-to-buffer@3:
version "3.0.1"
resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz#594b8973938c5bc2c33046535785341abc4f3636"
integrity sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==

data-urls@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe"
Expand Down Expand Up @@ -5704,6 +5706,11 @@ file-uri-to-path@1.0.0:
resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd"
integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==

file-uri-to-path@2:
version "2.0.0"
resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-2.0.0.tgz#7b415aeba227d575851e0a5b0c640d7656403fba"
integrity sha512-hjPFI8oE/2iQPVe4gbrJ73Pp+Xfub2+WI2LlXDbsaJBwT5wuMh35WNWVYYTpnz895shtwfyutMFLFywpQAFdLg==

filename-reserved-regex@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz#abf73dfab735d045440abfea2d91f389ebbfa229"
Expand Down Expand Up @@ -5963,6 +5970,14 @@ fstream@^1.0.12:
mkdirp ">=0.5 0"
rimraf "2"

ftp@^0.3.10:
version "0.3.10"
resolved "https://registry.yarnpkg.com/ftp/-/ftp-0.3.10.tgz#9197d861ad8142f3e63d5a83bfe4c59f7330885d"
integrity sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0=
dependencies:
readable-stream "1.1.x"
xregexp "2.0.0"

function-bind@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
Expand Down Expand Up @@ -6090,6 +6105,18 @@ get-symbol-description@^1.0.0:
call-bind "^1.0.2"
get-intrinsic "^1.1.1"

get-uri@^3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/get-uri/-/get-uri-3.0.2.tgz#f0ef1356faabc70e1f9404fa3b66b2ba9bfc725c"
integrity sha512-+5s0SJbGoyiJTZZ2JTpFPLMPSch72KEqGOTvQsBqg0RBWvwhWUSYZFAtz3TPW0GXJuLBJPts1E241iHg+VRfhg==
dependencies:
"@tootallnate/once" "1"
data-uri-to-buffer "3"
debug "4"
file-uri-to-path "2"
fs-extra "^8.1.0"
ftp "^0.3.10"

getpass@^0.1.1:
version "0.1.7"
resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
Expand Down Expand Up @@ -6465,6 +6492,15 @@ http-proxy-agent@^4.0.1:
agent-base "6"
debug "4"

http-proxy-agent@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43"
integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==
dependencies:
"@tootallnate/once" "2"
agent-base "6"
debug "4"

http-signature@~1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
Expand Down Expand Up @@ -8214,7 +8250,7 @@ node-addon-api@*:
resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-4.3.0.tgz#52a1a0b475193e0928e98e0426a0d1254782b77f"
integrity sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==

node-addon-api@^3.0.0, node-addon-api@^3.1.0:
node-addon-api@^3.0.0, node-addon-api@^3.0.2, node-addon-api@^3.1.0:
version "3.2.1"
resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.2.1.tgz#81325e0a2117789c0128dab65e7e38f07ceba161"
integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==
Expand Down Expand Up @@ -11627,6 +11663,21 @@ vscode-oniguruma@^1.6.1:
resolved "https://registry.yarnpkg.com/vscode-oniguruma/-/vscode-oniguruma-1.6.2.tgz#aeb9771a2f1dbfc9083c8a7fdd9cccaa3f386607"
integrity sha512-KH8+KKov5eS/9WhofZR8M8dMHWN2gTxjMsG4jd04YhpbPR91fUj7rYQ2/XjeHCJWbg7X++ApRIU9NUwM2vTvLA==

vscode-proxy-agent@^0.11.0:
version "0.11.0"
resolved "https://registry.yarnpkg.com/vscode-proxy-agent/-/vscode-proxy-agent-0.11.0.tgz#9dc8d2bb9d448f1e33bb1caef97a741289660f2f"
integrity sha512-Y5mHjDGq/OKOvKG0IwCYfj25cvQ2cLEil8ce8n55IZHRAP9RF3e1sKU4ZUNDB8X2NIpKwyltrWpK9tFFE/kc3g==
dependencies:
"@tootallnate/once" "^1.1.2"
agent-base "^6.0.2"
debug "^4.3.1"
get-uri "^3.0.2"
http-proxy-agent "^4.0.1"
https-proxy-agent "^5.0.0"
socks-proxy-agent "^5.0.0"
optionalDependencies:
vscode-windows-ca-certs "^0.3.0"

vscode-ripgrep@^1.2.4:
version "1.13.2"
resolved "https://registry.yarnpkg.com/vscode-ripgrep/-/vscode-ripgrep-1.13.2.tgz#8ccebc33f14d54442c4b11962aead163c55b506e"
Expand All @@ -11652,6 +11703,13 @@ vscode-uri@^2.1.1:
resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-2.1.2.tgz#c8d40de93eb57af31f3c715dd650e2ca2c096f1c"
integrity sha512-8TEXQxlldWAuIODdukIb+TR5s+9Ds40eSJrw+1iDDA9IFORPjMELarNQE3myz5XIkWWpdprmJjm1/SxMlWOC8A==

vscode-windows-ca-certs@^0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/vscode-windows-ca-certs/-/vscode-windows-ca-certs-0.3.0.tgz#324e1f8ba842bbf048a39e7c0ee8fe655e9adfcc"
integrity sha512-CYrpCEKmAFQJoZNReOrelNL+VKyebOVRCqL9evrBlVcpWQDliliJgU5RggGS8FPGtQ3jAKLQt9frF0qlxYYPKA==
dependencies:
node-addon-api "^3.0.2"

vscode-ws-jsonrpc@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/vscode-ws-jsonrpc/-/vscode-ws-jsonrpc-0.2.0.tgz#5e9c26e10da54a1a235da7d59e74508bbcb8edd9"
Expand Down Expand Up @@ -12030,6 +12088,11 @@ xmlhttprequest-ssl@~2.0.0:
resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz#91360c86b914e67f44dce769180027c0da618c67"
integrity sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==

xregexp@2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-2.0.0.tgz#52a63e56ca0b84a7f3a5f3d61872f126ad7a5943"
integrity sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM=

xtend@^4.0.0, xtend@~4.0.1:
version "4.0.2"
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
Expand Down

0 comments on commit dc7b7df

Please sign in to comment.