diff --git a/server/src/runtime.ts b/server/src/runtime.ts index a84b7f089..4e8cff30e 100644 --- a/server/src/runtime.ts +++ b/server/src/runtime.ts @@ -381,12 +381,14 @@ export class ScryptedRuntime { return proxyPair; } - async installNpm(pkg: string): Promise { + async installNpm(pkg: string, version?: string): Promise { const registry = (await axios(`https://registry.npmjs.org/${pkg}`)).data; - const latest = registry['dist-tags'].latest; - console.log('latest package', pkg, latest); + if (!version) { + version = registry['dist-tags'].latest; + } + console.log('installing package', pkg, version); - const tarball = (await axios(`${registry.versions[latest].dist.tarball}`, { + const tarball = (await axios(`${registry.versions[version].dist.tarball}`, { responseType: 'arraybuffer' })).data; console.log('downloaded tarball', tarball?.length); diff --git a/server/src/scrypted-main.ts b/server/src/scrypted-main.ts index e0952d03f..bb3c36b54 100644 --- a/server/src/scrypted-main.ts +++ b/server/src/scrypted-main.ts @@ -158,12 +158,12 @@ else { } }); - app.post(['/web/component/script/install/:pkg', '/web/component/script/install/@:owner/:pkg'], async (req, res) => { - const { owner, pkg } = req.params; + app.post(['/web/component/script/install/:pkg', '/web/component/script/install/@:owner/:pkg', '/web/component/script/install/@:owner/:pkg/:tag'], async (req, res) => { + const { owner, pkg, tag } = req.params; let endpoint = pkg; if (owner) endpoint = `@${owner}/${endpoint}`; - const plugin = await scrypted.installNpm(endpoint); + const plugin = await scrypted.installNpm(endpoint, tag); res.send({ id: scrypted.findPluginDevice(plugin.pluginId)._id, });