From 3fe020c443a38af7b39d888e276affc8d455a86b Mon Sep 17 00:00:00 2001 From: Koushik Dutta Date: Wed, 7 Feb 2024 21:47:11 -0800 Subject: [PATCH] cloud: remove axios --- plugins/cloud/package-lock.json | 326 ++++---------------------------- plugins/cloud/package.json | 1 - plugins/cloud/src/main.ts | 45 +++-- 3 files changed, 62 insertions(+), 310 deletions(-) diff --git a/plugins/cloud/package-lock.json b/plugins/cloud/package-lock.json index c113d3391..872ea5ab4 100644 --- a/plugins/cloud/package-lock.json +++ b/plugins/cloud/package-lock.json @@ -11,12 +11,10 @@ "@eneris/push-receiver": "^3.1.4", "@scrypted/common": "file:../../common", "@scrypted/sdk": "file:../../sdk", - "axios": "^1.4.0", "bpmux": "^8.2.1", "cloudflared": "^0.4.0", "exponential-backoff": "^3.1.1", "http-proxy": "^1.18.1", - "ip": "^1.1.8", "nat-upnp": "file:./external/node-nat-upnp" }, "devDependencies": { @@ -33,12 +31,12 @@ "dependencies": { "@scrypted/sdk": "file:../sdk", "@scrypted/server": "file:../server", - "http-auth-utils": "^3.0.2", - "node-fetch-commonjs": "^3.1.1", - "typescript": "^4.4.3" + "http-auth-utils": "^5.0.1", + "typescript": "^5.3.3" }, "devDependencies": { - "@types/node": "^16.9.0" + "@types/node": "^20.11.0", + "ts-node": "^10.9.2" } }, "../../common/node_modules/@scrypted/sdk": { @@ -54,37 +52,6 @@ "dev": true, "license": "MIT" }, - "../../common/node_modules/fetch-blob": { - "version": "3.1.4", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "paypal", - "url": "https://paypal.me/jimmywarting" - } - ], - "license": "MIT", - "dependencies": { - "node-domexception": "^1.0.0", - "web-streams-polyfill": "^3.0.3" - }, - "engines": { - "node": "^12.20 || >= 14.13" - } - }, - "../../common/node_modules/formdata-polyfill": { - "version": "4.0.10", - "license": "MIT", - "dependencies": { - "fetch-blob": "^3.1.2" - }, - "engines": { - "node": ">=12.20.0" - } - }, "../../common/node_modules/http-auth-utils": { "version": "3.0.2", "license": "MIT", @@ -95,38 +62,6 @@ "node": ">=12.19.0" } }, - "../../common/node_modules/node-domexception": { - "version": "1.0.0", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "github", - "url": "https://paypal.me/jimmywarting" - } - ], - "license": "MIT", - "engines": { - "node": ">=10.5.0" - } - }, - "../../common/node_modules/node-fetch-commonjs": { - "version": "3.1.1", - "license": "MIT", - "dependencies": { - "formdata-polyfill": "^4.0.10", - "web-streams-polyfill": "^3.1.1" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/node-fetch" - } - }, "../../common/node_modules/typescript": { "version": "4.4.3", "license": "Apache-2.0", @@ -138,13 +73,6 @@ "node": ">=4.2.0" } }, - "../../common/node_modules/web-streams-polyfill": { - "version": "3.2.0", - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, "../../common/node_modules/yerror": { "version": "6.0.1", "license": "MIT", @@ -154,12 +82,12 @@ }, "../../sdk": { "name": "@scrypted/sdk", - "version": "0.2.103", + "version": "0.3.5", "license": "ISC", "dependencies": { "@babel/preset-typescript": "^7.18.6", "adm-zip": "^0.4.13", - "axios": "^0.21.4", + "axios": "^1.6.5", "babel-loader": "^9.1.0", "babel-plugin-const-enum": "^1.1.0", "esbuild": "^0.15.9", @@ -2391,59 +2319,54 @@ }, "../../server": { "name": "@scrypted/server", - "version": "0.42.0", + "version": "0.94.0", "license": "ISC", "dependencies": { "@mapbox/node-pre-gyp": "^1.0.11", - "@scrypted/types": "^0.2.94", + "@scrypted/types": "^0.3.4", "adm-zip": "^0.5.10", - "axios": "^1.4.0", "body-parser": "^1.20.2", "cookie-parser": "^1.4.6", - "debug": "^4.3.4", - "engine.io": "^6.5.1", + "engine.io": "^6.5.4", "express": "^4.18.2", - "ffmpeg-static": "^5.1.0", + "ffmpeg-static": "^5.2.0", + "follow-redirects": "^1.15.5", "http-auth": "^4.2.0", "ip": "^1.1.8", "level": "^8.0.0", - "linkfs": "^2.1.0", "lodash": "^4.17.21", - "memfs": "^4.2.0", - "mime": "^3.0.0", - "nan": "^2.17.0", + "nan": "^2.18.0", "node-dijkstra": "^2.5.0", "node-forge": "^1.3.1", - "node-gyp": "^9.4.0", + "node-gyp": "^10.0.1", "router": "^1.3.8", "semver": "^7.5.4", + "sharp": "^0.33.2", "source-map-support": "^0.5.21", - "tar": "^6.1.15", - "tslib": "^2.6.1", - "typescript": "^5.1.6", - "whatwg-mimetype": "^3.0.0", - "ws": "^8.13.0" + "tar": "^6.2.0", + "tslib": "^2.6.2", + "typescript": "^5.3.3", + "whatwg-mimetype": "^4.0.0", + "ws": "^8.16.0" }, "bin": { "scrypted-serve": "bin/scrypted-serve" }, "devDependencies": { - "@types/adm-zip": "^0.5.0", - "@types/cookie-parser": "^1.4.3", - "@types/debug": "^4.1.8", - "@types/express": "^4.17.17", - "@types/http-auth": "^4.1.1", - "@types/ip": "^1.1.0", - "@types/lodash": "^4.14.196", - "@types/mime": "^3.0.1", - "@types/node-dijkstra": "^2.5.3", - "@types/node-forge": "^1.3.3", - "@types/pem": "^1.14.0", - "@types/semver": "^7.5.0", - "@types/source-map-support": "^0.5.6", - "@types/tar": "^6.1.5", - "@types/whatwg-mimetype": "^3.0.0", - "@types/ws": "^8.5.5" + "@types/adm-zip": "^0.5.5", + "@types/cookie-parser": "^1.4.6", + "@types/express": "^4.17.21", + "@types/follow-redirects": "^1.14.4", + "@types/http-auth": "^4.1.4", + "@types/ip": "^1.1.3", + "@types/lodash": "^4.14.202", + "@types/node-dijkstra": "^2.5.6", + "@types/node-forge": "^1.3.11", + "@types/semver": "^7.5.6", + "@types/source-map-support": "^0.5.10", + "@types/tar": "^6.1.10", + "@types/whatwg-mimetype": "^3.0.2", + "@types/ws": "^8.5.10" }, "optionalDependencies": { "node-pty-prebuilt-multiarch": "^0.10.1-pre.5" @@ -2610,14 +2533,6 @@ "@types/node": "*" } }, - "../../server/node_modules/@types/debug": { - "version": "4.1.8", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/ms": "*" - } - }, "../../server/node_modules/@types/express": { "version": "4.17.17", "dev": true, @@ -2666,11 +2581,6 @@ "dev": true, "license": "MIT" }, - "../../server/node_modules/@types/ms": { - "version": "0.7.31", - "dev": true, - "license": "MIT" - }, "../../server/node_modules/@types/node": { "version": "20.2.5", "license": "MIT" @@ -2688,14 +2598,6 @@ "@types/node": "*" } }, - "../../server/node_modules/@types/pem": { - "version": "1.14.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, "../../server/node_modules/@types/qs": { "version": "6.9.7", "dev": true, @@ -2884,27 +2786,10 @@ "node": ">=10" } }, - "../../server/node_modules/arg": { - "version": "5.0.2", - "license": "MIT" - }, "../../server/node_modules/array-flatten": { "version": "1.1.1", "license": "MIT" }, - "../../server/node_modules/asynckit": { - "version": "0.4.0", - "license": "MIT" - }, - "../../server/node_modules/axios": { - "version": "1.4.0", - "license": "MIT", - "dependencies": { - "follow-redirects": "^1.15.0", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, "../../server/node_modules/balanced-match": { "version": "1.0.2", "license": "MIT" @@ -3213,16 +3098,6 @@ "color-support": "bin.js" } }, - "../../server/node_modules/combined-stream": { - "version": "1.0.8", - "license": "MIT", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, "../../server/node_modules/concat-map": { "version": "0.0.1", "license": "MIT" @@ -3345,13 +3220,6 @@ "node": ">=4.0.0" } }, - "../../server/node_modules/delayed-stream": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, "../../server/node_modules/delegates": { "version": "1.0.0", "license": "MIT" @@ -3596,11 +3464,6 @@ "node": ">= 0.8" } }, - "../../server/node_modules/fast-diff": { - "version": "1.3.0", - "license": "Apache-2.0", - "peer": true - }, "../../server/node_modules/ffmpeg-static": { "version": "5.1.0", "hasInstallScript": true, @@ -3684,18 +3547,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "../../server/node_modules/form-data": { - "version": "4.0.0", - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, "../../server/node_modules/forwarded": { "version": "0.2.0", "license": "MIT", @@ -3907,13 +3758,6 @@ "ms": "^2.0.0" } }, - "../../server/node_modules/hyperdyperid": { - "version": "1.2.0", - "license": "MIT", - "engines": { - "node": ">=10.18" - } - }, "../../server/node_modules/iconv-lite": { "version": "0.4.24", "license": "MIT", @@ -4041,34 +3885,6 @@ "@pkgjs/parseargs": "^0.11.0" } }, - "../../server/node_modules/json-joy": { - "version": "9.4.0", - "license": "Apache-2.0", - "dependencies": { - "arg": "^5.0.2", - "hyperdyperid": "^1.2.0" - }, - "bin": { - "json-pack": "bin/json-pack.js", - "json-pack-test": "bin/json-pack-test.js", - "json-patch": "bin/json-patch.js", - "json-patch-test": "bin/json-patch-test.js", - "json-pointer": "bin/json-pointer.js", - "json-pointer-test": "bin/json-pointer-test.js", - "json-unpack": "bin/json-unpack.js" - }, - "engines": { - "node": ">=10.0" - }, - "funding": { - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "quill-delta": "^5", - "rxjs": "7", - "tslib": "2" - } - }, "../../server/node_modules/level": { "version": "8.0.0", "license": "MIT", @@ -4102,23 +3918,10 @@ "node": ">=12" } }, - "../../server/node_modules/linkfs": { - "version": "2.1.0" - }, "../../server/node_modules/lodash": { "version": "4.17.21", "license": "MIT" }, - "../../server/node_modules/lodash.clonedeep": { - "version": "4.5.0", - "license": "MIT", - "peer": true - }, - "../../server/node_modules/lodash.isequal": { - "version": "4.5.0", - "license": "MIT", - "peer": true - }, "../../server/node_modules/lru-cache": { "version": "7.18.3", "license": "ISC", @@ -4184,24 +3987,6 @@ "node": ">= 0.6" } }, - "../../server/node_modules/memfs": { - "version": "4.2.0", - "license": "Apache-2.0", - "dependencies": { - "json-joy": "^9.2.0", - "thingies": "^1.11.1" - }, - "engines": { - "node": ">= 4.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" - } - }, "../../server/node_modules/merge-descriptors": { "version": "1.0.1", "license": "MIT" @@ -4213,16 +3998,6 @@ "node": ">= 0.6" } }, - "../../server/node_modules/mime": { - "version": "3.0.0", - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=10.0.0" - } - }, "../../server/node_modules/mime-db": { "version": "1.52.0", "license": "MIT", @@ -4899,10 +4674,6 @@ "node": ">= 0.10" } }, - "../../server/node_modules/proxy-from-env": { - "version": "1.1.0", - "license": "MIT" - }, "../../server/node_modules/pump": { "version": "3.0.0", "license": "MIT", @@ -4943,19 +4714,6 @@ ], "license": "MIT" }, - "../../server/node_modules/quill-delta": { - "version": "5.1.0", - "license": "MIT", - "peer": true, - "dependencies": { - "fast-diff": "^1.3.0", - "lodash.clonedeep": "^4.5.0", - "lodash.isequal": "^4.5.0" - }, - "engines": { - "node": ">= 12.0.0" - } - }, "../../server/node_modules/range-parser": { "version": "1.2.1", "license": "MIT", @@ -5074,14 +4832,6 @@ "queue-microtask": "^1.2.2" } }, - "../../server/node_modules/rxjs": { - "version": "7.8.1", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "tslib": "^2.1.0" - } - }, "../../server/node_modules/safe-buffer": { "version": "5.2.1", "funding": [ @@ -5446,16 +5196,6 @@ "node": ">=8" } }, - "../../server/node_modules/thingies": { - "version": "1.12.0", - "license": "Unlicense", - "engines": { - "node": ">=10.18" - }, - "peerDependencies": { - "tslib": "^2" - } - }, "../../server/node_modules/toidentifier": { "version": "1.0.1", "license": "MIT", diff --git a/plugins/cloud/package.json b/plugins/cloud/package.json index 24f37c8ad..eb3cb8a50 100644 --- a/plugins/cloud/package.json +++ b/plugins/cloud/package.json @@ -41,7 +41,6 @@ "@eneris/push-receiver": "^3.1.4", "@scrypted/common": "file:../../common", "@scrypted/sdk": "file:../../sdk", - "axios": "^1.4.0", "bpmux": "^8.2.1", "cloudflared": "^0.4.0", "exponential-backoff": "^3.1.1", diff --git a/plugins/cloud/src/main.ts b/plugins/cloud/src/main.ts index 385dc948a..11583e9c0 100644 --- a/plugins/cloud/src/main.ts +++ b/plugins/cloud/src/main.ts @@ -1,7 +1,6 @@ import { Deferred } from "@scrypted/common/src/deferred"; import sdk, { BufferConverter, DeviceProvider, HttpRequest, HttpRequestHandler, HttpResponse, OauthClient, PushHandler, ScryptedDeviceBase, ScryptedDeviceType, ScryptedInterface, ScryptedMimeTypes, Setting, Settings } from "@scrypted/sdk"; import { StorageSettings } from "@scrypted/sdk/storage-settings"; -import axios from 'axios'; import bpmux from 'bpmux'; import * as cloudflared from 'cloudflared'; import crypto from 'crypto'; @@ -19,6 +18,7 @@ import { Duplex } from 'stream'; import tls from 'tls'; import { readLine } from '../../../common/src/read-stream'; import { createSelfSignedCertificate } from '../../../server/src/cert'; +import { httpFetch } from '../../../server/src/fetch/http-fetch'; import { PushManager } from './push'; import { qsparse, qsstringify } from "./qs"; @@ -333,7 +333,9 @@ class ScryptedCloud extends ScryptedDeviceBase implements OauthClient, Settings, const url = new URL('https://www.duckdns.org/update'); url.searchParams.set('domains', this.storageSettings.values.duckDnsHostname); url.searchParams.set('token', this.storageSettings.values.duckDnsToken); - await axios(url.toString()); + await httpFetch({ + url: url.toString(), + }); } catch (e) { this.console.error('Duck DNS Erorr', e); @@ -364,7 +366,10 @@ class ScryptedCloud extends ScryptedDeviceBase implements OauthClient, Settings, ip = this.cloudflareTunnelHost; } else { - ip = (await axios(`https://${SCRYPTED_SERVER}/_punch/ip`)).data.ip; + ip = (await httpFetch({ + url: `https://${SCRYPTED_SERVER}/_punch/ip`, + responseType: 'json', + })).body.ip; } if (this.storageSettings.values.forwardingMode === 'Custom Domain' || this.cloudflareTunnelHost) @@ -399,11 +404,14 @@ class ScryptedCloud extends ScryptedDeviceBase implements OauthClient, Settings, if (!hostname) hostname = 'localhost'; url.searchParams.set('url', `https://${hostname}:${upnp_port}${pluginPath}/testPortForward`); - const response = await axios(url.toString()); - this.console.log('test data:', response.data); - if (response.data.error) - throw new Error(response.data.error); - if (response.data.data !== this.randomBytes) + const response = await httpFetch({ + url: url.toString(), + responseType: 'json', + }); + this.console.log('test data:', response.body); + if (response.body.error) + throw new Error(response.body.error); + if (response.body.data !== this.randomBytes) throw new Error('Server received data that did not match this server.'); this.log.a("Port Forward Test Succeeded."); } @@ -493,13 +501,15 @@ class ScryptedCloud extends ScryptedDeviceBase implements OauthClient, Settings, scope: local.pathname, ttl, }) - const scope = await axios(`https://${this.getHostname()}/_punch/scope?${q}`, { + const scope = await httpFetch({ + url: `https://${this.getHostname()}/_punch/scope?${q}`, headers: { Authorization: `Bearer ${token_info}` }, + responseType: 'json', }) - const { userToken, userTokenSignature } = scope.data; + const { userToken, userTokenSignature } = scope.body; const tokens = qsstringify({ user_token: userToken, user_token_signature: userTokenSignature @@ -575,16 +585,18 @@ class ScryptedCloud extends ScryptedDeviceBase implements OauthClient, Settings, const { token_info } = this.storageSettings.values; if (!token_info) throw new Error('Scrypted Cloud is not logged in. Skipping home.scrypted.app registration.'); - const response = await axios(`https://${SCRYPTED_SERVER}/_punch/register?${q}`, { + const response = await httpFetch({ + url: `https://${SCRYPTED_SERVER}/_punch/register?${q}`, headers: { Authorization: `Bearer ${token_info}` }, + responseType: 'json', }); - this.console.log('registered', response.data); + this.console.log('registered', response.body); this.storageSettings.values.lastPersistedRegistrationId = registration_id; this.storageSettings.values.lastPersistedUpnpPort = upnp_port; this.storageSettings.values.registrationSecret = registration_secret; - return response.data; + return response.body; } async setupCloudPush() { @@ -895,10 +907,11 @@ class ScryptedCloud extends ScryptedDeviceBase implements OauthClient, Settings, }); const tmp = `${bin}.tmp`; - const stream = await axios('https://github.com/scryptedapp/cloudflared/releases/download/2023.8.2/cloudflared-darwin-arm64', { - responseType: 'stream', + const stream = await httpFetch({ + url: 'https://github.com/scryptedapp/cloudflared/releases/download/2023.8.2/cloudflared-darwin-arm64', + responseType: 'readable', }); - const write = stream.data.pipe(fs.createWriteStream(tmp)); + const write = stream.body.pipe(fs.createWriteStream(tmp)); await once(write, 'close'); renameSync(tmp, bin); fs.chmodSync(bin, 0o0755)