diff --git a/packages/rpc/package-lock.json b/packages/rpc/package-lock.json deleted file mode 100644 index acff63a51..000000000 --- a/packages/rpc/package-lock.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "name": "@scrypted/rpc", - "version": "1.0.3", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "@scrypted/rpc", - "version": "1.0.3", - "license": "ISC", - "devDependencies": { - "@types/node": "^17.0.17" - } - }, - "node_modules/@types/node": { - "version": "17.0.17", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.17.tgz", - "integrity": "sha512-e8PUNQy1HgJGV3iU/Bp2+D/DXh3PYeyli8LgIwsQcs1Ar1LoaWHSIT6Rw+H2rNJmiq6SNWiDytfx8+gYj7wDHw==", - "dev": true - } - }, - "dependencies": { - "@types/node": { - "version": "17.0.17", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.17.tgz", - "integrity": "sha512-e8PUNQy1HgJGV3iU/Bp2+D/DXh3PYeyli8LgIwsQcs1Ar1LoaWHSIT6Rw+H2rNJmiq6SNWiDytfx8+gYj7wDHw==", - "dev": true - } - } -} diff --git a/packages/rpc/package.json b/packages/rpc/package.json deleted file mode 100644 index 06e8dc61b..000000000 --- a/packages/rpc/package.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "@scrypted/rpc", - "version": "1.0.3", - "description": "", - "main": "dist/index.js", - "scripts": { - "build": "tsc --outDir dist", - "test": "echo \"Error: no test specified\" && exit 1" - }, - "author": "", - "license": "ISC", - "devDependencies": { - "@types/node": "^17.0.17" - } -} diff --git a/packages/rpc/.gitignore b/packages/web-sdk/.gitignore similarity index 100% rename from packages/rpc/.gitignore rename to packages/web-sdk/.gitignore diff --git a/packages/rpc/.npmignore b/packages/web-sdk/.npmignore similarity index 100% rename from packages/rpc/.npmignore rename to packages/web-sdk/.npmignore diff --git a/packages/web-sdk/package-lock.json b/packages/web-sdk/package-lock.json new file mode 100644 index 000000000..6e237d9fc --- /dev/null +++ b/packages/web-sdk/package-lock.json @@ -0,0 +1,567 @@ +{ + "name": "@scrypted/web-sdk", + "version": "1.0.3", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "@scrypted/web-sdk", + "version": "1.0.3", + "license": "ISC", + "dependencies": { + "@scrypted/rpc": "^1.0.4", + "@scrypted/types": "^0.0.6", + "adm-zip": "^0.5.9", + "axios": "^0.25.0", + "engine.io-client": "^5.2.0", + "linkfs": "^2.1.0", + "memfs": "^3.4.1", + "rimraf": "^3.0.2" + }, + "devDependencies": { + "@types/adm-zip": "^0.4.34", + "@types/engine.io-client": "^3.1.5", + "@types/node": "^17.0.17" + } + }, + "node_modules/@scrypted/rpc": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@scrypted/rpc/-/rpc-1.0.4.tgz", + "integrity": "sha512-P4Oog+lNIaGhaZw/vnkRUfasS1UhG+IpGhP948mHHXd9IODdFIfrBWxVZAn/R1neH4xrcfLslHxUOGHHuGmyzw==" + }, + "node_modules/@scrypted/types": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@scrypted/types/-/types-0.0.6.tgz", + "integrity": "sha512-r/attybPcJvBNll3g+k8i2jQwQiu0izoBazZ+Kvsdeayr3Mbzm1NaBkwbUPICroWJKY+jlfoaZSQt4eGTX+vog==" + }, + "node_modules/@types/adm-zip": { + "version": "0.4.34", + "resolved": "https://registry.npmjs.org/@types/adm-zip/-/adm-zip-0.4.34.tgz", + "integrity": "sha512-8ToYLLAYhkRfcmmljrKi22gT2pqu7hGMDtORP1emwIEGmgUTZOsaDjzWFzW5N2frcFRz/50CWt4zA1CxJ73pmQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/engine.io-client": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/@types/engine.io-client/-/engine.io-client-3.1.5.tgz", + "integrity": "sha512-h2BKMLNVMQGQ0Q7WaQCJ/63LooRQhItnoFNXhbNVnjhNheWEO+sdpTFjZpzWP7TDl4M5lI3fsEAk3PFZfV67Yg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/node": { + "version": "17.0.17", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.17.tgz", + "integrity": "sha512-e8PUNQy1HgJGV3iU/Bp2+D/DXh3PYeyli8LgIwsQcs1Ar1LoaWHSIT6Rw+H2rNJmiq6SNWiDytfx8+gYj7wDHw==", + "dev": true + }, + "node_modules/adm-zip": { + "version": "0.5.9", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.9.tgz", + "integrity": "sha512-s+3fXLkeeLjZ2kLjCBwQufpI5fuN+kIGBxu6530nVQZGVol0d7Y/M88/xw9HGGUcJjKf8LutN3VPRUBq6N7Ajg==", + "engines": { + "node": ">=6.0" + } + }, + "node_modules/axios": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.25.0.tgz", + "integrity": "sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==", + "dependencies": { + "follow-redirects": "^1.14.7" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/base64-arraybuffer": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz", + "integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI=", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "node_modules/debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/engine.io-client": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-5.2.0.tgz", + "integrity": "sha512-BcIBXGBkT7wKecwnfrSV79G2X5lSUSgeAGgoo60plXf8UsQEvCQww/KMwXSMhVjb98fFYNq20CC5eo8IOAPqsg==", + "dependencies": { + "base64-arraybuffer": "0.1.4", + "component-emitter": "~1.3.0", + "debug": "~4.3.1", + "engine.io-parser": "~4.0.1", + "has-cors": "1.1.0", + "parseqs": "0.0.6", + "parseuri": "0.0.6", + "ws": "~7.4.2", + "xmlhttprequest-ssl": "~2.0.0", + "yeast": "0.1.2" + } + }, + "node_modules/engine.io-parser": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-4.0.3.tgz", + "integrity": "sha512-xEAAY0msNnESNPc00e19y5heTPX4y/TJ36gr8t1voOaNmTojP9b3oK3BbJLFufW2XFPQaaijpFewm2g2Um3uqA==", + "dependencies": { + "base64-arraybuffer": "0.1.4" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/follow-redirects": { + "version": "1.14.8", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.8.tgz", + "integrity": "sha512-1x0S9UVJHsQprFcEC/qnNzBLcIxsjAV905f/UkQxbclCsoTWlacCNOpQa/anodLl2uaEKFhfWOvM2Qg77+15zA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/fs-monkey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", + "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==" + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/linkfs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/linkfs/-/linkfs-2.1.0.tgz", + "integrity": "sha512-kmsGcmpvjStZ0ATjuHycBujtNnXiZR28BTivEu0gAMDTT7GEyodcK6zSRtu6xsrdorrPZEIN380x7BD7xEYkew==" + }, + "node_modules/memfs": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.1.tgz", + "integrity": "sha512-1c9VPVvW5P7I85c35zAdEr1TD5+F11IToIHIlrVIcflfnzPkJa0ZoYEoEdYDP8KgPFoSZ/opDrUsAoZWym3mtw==", + "dependencies": { + "fs-monkey": "1.0.3" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/parseqs": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz", + "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==" + }, + "node_modules/parseuri": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz", + "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==" + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "node_modules/ws": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xmlhttprequest-ssl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz", + "integrity": "sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/yeast": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" + } + }, + "dependencies": { + "@scrypted/rpc": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@scrypted/rpc/-/rpc-1.0.4.tgz", + "integrity": "sha512-P4Oog+lNIaGhaZw/vnkRUfasS1UhG+IpGhP948mHHXd9IODdFIfrBWxVZAn/R1neH4xrcfLslHxUOGHHuGmyzw==" + }, + "@scrypted/types": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@scrypted/types/-/types-0.0.6.tgz", + "integrity": "sha512-r/attybPcJvBNll3g+k8i2jQwQiu0izoBazZ+Kvsdeayr3Mbzm1NaBkwbUPICroWJKY+jlfoaZSQt4eGTX+vog==" + }, + "@types/adm-zip": { + "version": "0.4.34", + "resolved": "https://registry.npmjs.org/@types/adm-zip/-/adm-zip-0.4.34.tgz", + "integrity": "sha512-8ToYLLAYhkRfcmmljrKi22gT2pqu7hGMDtORP1emwIEGmgUTZOsaDjzWFzW5N2frcFRz/50CWt4zA1CxJ73pmQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/engine.io-client": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/@types/engine.io-client/-/engine.io-client-3.1.5.tgz", + "integrity": "sha512-h2BKMLNVMQGQ0Q7WaQCJ/63LooRQhItnoFNXhbNVnjhNheWEO+sdpTFjZpzWP7TDl4M5lI3fsEAk3PFZfV67Yg==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/node": { + "version": "17.0.17", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.17.tgz", + "integrity": "sha512-e8PUNQy1HgJGV3iU/Bp2+D/DXh3PYeyli8LgIwsQcs1Ar1LoaWHSIT6Rw+H2rNJmiq6SNWiDytfx8+gYj7wDHw==", + "dev": true + }, + "adm-zip": { + "version": "0.5.9", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.9.tgz", + "integrity": "sha512-s+3fXLkeeLjZ2kLjCBwQufpI5fuN+kIGBxu6530nVQZGVol0d7Y/M88/xw9HGGUcJjKf8LutN3VPRUBq6N7Ajg==" + }, + "axios": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.25.0.tgz", + "integrity": "sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==", + "requires": { + "follow-redirects": "^1.14.7" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "base64-arraybuffer": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz", + "integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI=" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "requires": { + "ms": "2.1.2" + } + }, + "engine.io-client": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-5.2.0.tgz", + "integrity": "sha512-BcIBXGBkT7wKecwnfrSV79G2X5lSUSgeAGgoo60plXf8UsQEvCQww/KMwXSMhVjb98fFYNq20CC5eo8IOAPqsg==", + "requires": { + "base64-arraybuffer": "0.1.4", + "component-emitter": "~1.3.0", + "debug": "~4.3.1", + "engine.io-parser": "~4.0.1", + "has-cors": "1.1.0", + "parseqs": "0.0.6", + "parseuri": "0.0.6", + "ws": "~7.4.2", + "xmlhttprequest-ssl": "~2.0.0", + "yeast": "0.1.2" + } + }, + "engine.io-parser": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-4.0.3.tgz", + "integrity": "sha512-xEAAY0msNnESNPc00e19y5heTPX4y/TJ36gr8t1voOaNmTojP9b3oK3BbJLFufW2XFPQaaijpFewm2g2Um3uqA==", + "requires": { + "base64-arraybuffer": "0.1.4" + } + }, + "follow-redirects": { + "version": "1.14.8", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.8.tgz", + "integrity": "sha512-1x0S9UVJHsQprFcEC/qnNzBLcIxsjAV905f/UkQxbclCsoTWlacCNOpQa/anodLl2uaEKFhfWOvM2Qg77+15zA==" + }, + "fs-monkey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", + "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==" + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "linkfs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/linkfs/-/linkfs-2.1.0.tgz", + "integrity": "sha512-kmsGcmpvjStZ0ATjuHycBujtNnXiZR28BTivEu0gAMDTT7GEyodcK6zSRtu6xsrdorrPZEIN380x7BD7xEYkew==" + }, + "memfs": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.1.tgz", + "integrity": "sha512-1c9VPVvW5P7I85c35zAdEr1TD5+F11IToIHIlrVIcflfnzPkJa0ZoYEoEdYDP8KgPFoSZ/opDrUsAoZWym3mtw==", + "requires": { + "fs-monkey": "1.0.3" + } + }, + "minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "parseqs": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz", + "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==" + }, + "parseuri": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz", + "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "requires": { + "glob": "^7.1.3" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "ws": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "requires": {} + }, + "xmlhttprequest-ssl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz", + "integrity": "sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==" + }, + "yeast": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" + } + } +} diff --git a/packages/web-sdk/package.json b/packages/web-sdk/package.json new file mode 100644 index 000000000..6181b6c71 --- /dev/null +++ b/packages/web-sdk/package.json @@ -0,0 +1,29 @@ +{ + "name": "@scrypted/web-sdk", + "version": "1.0.3", + "description": "", + "main": "dist/packages/web-sdk/src/index.js", + "scripts": { + "prebuild": "rimraf dist", + "build": "tsc --outDir dist", + "prepublishOnly": "npm run build", + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC", + "devDependencies": { + "@types/adm-zip": "^0.4.34", + "@types/engine.io-client": "^3.1.5", + "@types/node": "^17.0.17" + }, + "dependencies": { + "@scrypted/rpc": "^1.0.4", + "@scrypted/types": "^0.0.6", + "adm-zip": "^0.5.9", + "axios": "^0.25.0", + "engine.io-client": "^5.2.0", + "linkfs": "^2.1.0", + "memfs": "^3.4.1", + "rimraf": "^3.0.2" + } +} diff --git a/packages/web-sdk/src/index.ts b/packages/web-sdk/src/index.ts new file mode 100644 index 000000000..2f87b66a4 --- /dev/null +++ b/packages/web-sdk/src/index.ts @@ -0,0 +1,111 @@ +import { ScryptedStatic } from "@scrypted/types"; +export * from "@scrypted/types"; +import { SocketOptions } from 'engine.io-client'; +import eio from 'engine.io-client'; +import { attachPluginRemote } from '../../../server/src/plugin/plugin-remote'; +import { RpcPeer } from '../../../server/src/rpc'; +import axios, { AxiosRequestConfig } from 'axios'; +import https from 'https'; + +export interface ScryptedClientStatic extends ScryptedStatic { + disconnect(): void; + onClose?: Function; + userStorage: Storage, + version: string; +} + +export interface ScryptedClientOptions { + baseUrl?: string; + pluginId: string; + clientName?: string; + username?: string; + password?: string; +} + +const axiosConfig: AxiosRequestConfig = { + httpsAgent: new https.Agent({ + rejectUnauthorized: false + }) +} + +/** + * + * @param baseUrl The base url of the webserver, or undefined to use current url (browser only). + * @param pluginId The plugin id to connect to. + * @param clientName Any string representing your web client, used for error logging. + * @returns + */ +export async function connectScryptedClient(options: ScryptedClientOptions): Promise { + let { baseUrl, pluginId, clientName, username, password } = options; + const rootLocation = baseUrl || `${window.location.protocol}//${window.location.host}`; + const endpointPath = `/endpoint/${pluginId}`; + + const extraHeaders: { [header: string]: string } = {}; + + if (username && password) { + const url = `${baseUrl}/login`; + const response = await axios.post(url, { + username, + password, + }, axiosConfig); + + extraHeaders['Cookie'] = response.headers["set-cookie"][0]; + console.log(extraHeaders); + } + + return new Promise((resolve, reject) => { + const options: SocketOptions = { + path: `${endpointPath}/engine.io/api/`, + extraHeaders, + rejectUnauthorized: false, + }; + const socket = eio(rootLocation, options); + + socket.on('error', reject); + + socket.on('open', async function () { + try { + const rpcPeer = new RpcPeer(clientName || 'web-sdk', "core", message => socket.send(JSON.stringify(message))); + socket.on('message', data => rpcPeer.handleMessage(JSON.parse(data as string))); + + const scrypted = await attachPluginRemote(rpcPeer, undefined); + const { + systemManager, + deviceManager, + endpointManager, + mediaManager, + } = scrypted; + + const userStorage = await rpcPeer.getParam('userStorage'); + + const info = await systemManager.getComponent('info'); + let version = 'unknown'; + try { + version = await info.getVersion(); + } + catch (e) { + } + + const ret: ScryptedClientStatic = { + version, + systemManager, + deviceManager, + endpointManager, + mediaManager, + userStorage, + disconnect() { + socket.close(); + } + } + + socket.on('close', () => ret.onClose?.()); + + resolve(ret); + } + catch (e) { + socket.close(); + reject(e); + } + }); + }); +} diff --git a/packages/rpc/tsconfig.json b/packages/web-sdk/tsconfig.json similarity index 83% rename from packages/rpc/tsconfig.json rename to packages/web-sdk/tsconfig.json index 5c32e8048..3ce39d86b 100644 --- a/packages/rpc/tsconfig.json +++ b/packages/web-sdk/tsconfig.json @@ -6,8 +6,7 @@ "outDir": "./dist", "esModuleInterop": true, "sourceMap": true, - "declaration": true, - "strict": true + "declaration": true }, "include": [ "src/**/*" diff --git a/plugins/core/client/.gitignore b/plugins/core/client/.gitignore deleted file mode 100644 index b94707787..000000000 --- a/plugins/core/client/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -node_modules/ -dist/ diff --git a/plugins/core/client/index.ts b/plugins/core/client/index.ts deleted file mode 100644 index a1dfe864f..000000000 --- a/plugins/core/client/index.ts +++ /dev/null @@ -1,72 +0,0 @@ -import { ScryptedStatic } from "@scrypted/sdk/types"; -import { SocketOptions } from 'engine.io-client'; -import eio from 'engine.io-client'; -import { attachPluginRemote } from '../../../server/src/plugin/plugin-remote'; -import { RpcPeer } from '../../../server/src/rpc'; - -export interface ScryptedClientStatic extends ScryptedStatic { - disconnect(): void; - onClose?: Function; - userStorage: Storage, - version: string; -} - -export default { - connect(baseUrl: string, pluginId: string): Promise { - const rootLocation = baseUrl || `${window.location.protocol}//${window.location.host}`; - const endpointPath = `/endpoint/${pluginId}`; - - return new Promise((resolve, reject) => { - - const options: SocketOptions = { - path: `${endpointPath}/engine.io/api/`, - }; - const socket = eio(rootLocation, options); - - socket.on('open', async function () { - try { - const rpcPeer = new RpcPeer("web", "core", message => socket.send(JSON.stringify(message))); - socket.on('message', data => rpcPeer.handleMessage(JSON.parse(data as string))); - - const scrypted = await attachPluginRemote(rpcPeer, undefined); - const { - systemManager, - deviceManager, - endpointManager, - mediaManager, - } = scrypted; - - const userStorage = await rpcPeer.getParam('userStorage'); - - const info = await systemManager.getComponent('info'); - let version = 'unknown'; - try { - version = await info.getVersion(); - } - catch (e) { - } - - const ret: ScryptedClientStatic = { - version, - systemManager, - deviceManager, - endpointManager, - mediaManager, - userStorage, - disconnect() { - socket.close(); - } - } - - socket.on('close', () => ret.onClose?.()); - - resolve(ret); - } - catch (e) { - socket.close(); - reject(e); - } - }); - }); - } -} diff --git a/plugins/core/client/package-lock.json b/plugins/core/client/package-lock.json deleted file mode 100644 index f787b50a2..000000000 --- a/plugins/core/client/package-lock.json +++ /dev/null @@ -1,342 +0,0 @@ -{ - "name": "@scrypted/client", - "version": "0.0.7", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "@scrypted/client", - "version": "0.0.7", - "license": "ISC", - "dependencies": { - "@scrypted/sdk": "file:../../../sdk", - "@types/lodash.clonedeep": "^4.5.6", - "engine.io-client": "^5.2.0", - "lodash.clonedeep": "^4.5.0" - }, - "devDependencies": { - "@types/engine.io-client": "^3.1.5" - } - }, - "../../../sdk": { - "name": "@scrypted/sdk", - "version": "0.0.92", - "license": "ISC", - "dependencies": { - "@babel/plugin-proposal-class-properties": "^7.14.5", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.5", - "@babel/plugin-proposal-numeric-separator": "^7.14.5", - "@babel/plugin-proposal-optional-chaining": "^7.14.5", - "@babel/plugin-transform-modules-commonjs": "^7.15.4", - "@babel/plugin-transform-typescript": "^7.15.8", - "@babel/preset-typescript": "^7.15.0", - "@types/node": "^16.11.1", - "adm-zip": "^0.4.13", - "axios": "^0.21.4", - "babel-loader": "^8.2.3", - "babel-plugin-const-enum": "^1.1.0", - "esbuild": "^0.13.8", - "raw-loader": "^4.0.2", - "rimraf": "^3.0.2", - "ts-loader": "^9.2.6", - "typescript-json-schema": "^0.50.1", - "webpack": "^5.59.0" - }, - "bin": { - "scrypted-debug": "bin/scrypted-debug.js", - "scrypted-deploy": "bin/scrypted-deploy.js", - "scrypted-deploy-debug": "bin/scrypted-deploy-debug.js", - "scrypted-package-json": "bin/scrypted-package-json.js", - "scrypted-readme": "bin/scrypted-readme.js", - "scrypted-webpack": "bin/scrypted-webpack.js" - } - }, - "../../sdk": { - "extraneous": true - }, - "node_modules/@scrypted/sdk": { - "resolved": "../../../sdk", - "link": true - }, - "node_modules/@types/engine.io-client": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/@types/engine.io-client/-/engine.io-client-3.1.5.tgz", - "integrity": "sha512-h2BKMLNVMQGQ0Q7WaQCJ/63LooRQhItnoFNXhbNVnjhNheWEO+sdpTFjZpzWP7TDl4M5lI3fsEAk3PFZfV67Yg==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/lodash": { - "version": "4.14.134", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.134.tgz", - "integrity": "sha512-2/O0khFUCFeDlbi7sZ7ZFRCcT812fAeOLm7Ev4KbwASkZ575TDrDcY7YyaoHdTOzKcNbfiwLYZqPmoC4wadrsw==" - }, - "node_modules/@types/lodash.clonedeep": { - "version": "4.5.6", - "resolved": "https://registry.npmjs.org/@types/lodash.clonedeep/-/lodash.clonedeep-4.5.6.tgz", - "integrity": "sha512-cE1jYr2dEg1wBImvXlNtp0xDoS79rfEdGozQVgliDZj1uERH4k+rmEMTudP9b4VQ8O6nRb5gPqft0QzEQGMQgA==", - "dependencies": { - "@types/lodash": "*" - } - }, - "node_modules/@types/node": { - "version": "12.0.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.0.10.tgz", - "integrity": "sha512-LcsGbPomWsad6wmMNv7nBLw7YYYyfdYcz6xryKYQhx89c3XXan+8Q6AJ43G5XDIaklaVkK3mE4fCb0SBvMiPSQ==", - "dev": true - }, - "node_modules/base64-arraybuffer": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz", - "integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI=", - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" - }, - "node_modules/debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/engine.io-client": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-5.2.0.tgz", - "integrity": "sha512-BcIBXGBkT7wKecwnfrSV79G2X5lSUSgeAGgoo60plXf8UsQEvCQww/KMwXSMhVjb98fFYNq20CC5eo8IOAPqsg==", - "dependencies": { - "base64-arraybuffer": "0.1.4", - "component-emitter": "~1.3.0", - "debug": "~4.3.1", - "engine.io-parser": "~4.0.1", - "has-cors": "1.1.0", - "parseqs": "0.0.6", - "parseuri": "0.0.6", - "ws": "~7.4.2", - "xmlhttprequest-ssl": "~2.0.0", - "yeast": "0.1.2" - } - }, - "node_modules/engine.io-parser": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-4.0.3.tgz", - "integrity": "sha512-xEAAY0msNnESNPc00e19y5heTPX4y/TJ36gr8t1voOaNmTojP9b3oK3BbJLFufW2XFPQaaijpFewm2g2Um3uqA==", - "dependencies": { - "base64-arraybuffer": "0.1.4" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/has-cors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", - "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" - }, - "node_modules/lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/parseqs": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz", - "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==" - }, - "node_modules/parseuri": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz", - "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==" - }, - "node_modules/ws": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xmlhttprequest-ssl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz", - "integrity": "sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/yeast": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", - "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" - } - }, - "dependencies": { - "@scrypted/sdk": { - "version": "file:../../../sdk", - "requires": { - "@babel/plugin-proposal-class-properties": "^7.14.5", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.5", - "@babel/plugin-proposal-numeric-separator": "^7.14.5", - "@babel/plugin-proposal-optional-chaining": "^7.14.5", - "@babel/plugin-transform-modules-commonjs": "^7.15.4", - "@babel/plugin-transform-typescript": "^7.15.8", - "@babel/preset-typescript": "^7.15.0", - "@types/node": "^16.11.1", - "adm-zip": "^0.4.13", - "axios": "^0.21.4", - "babel-loader": "^8.2.3", - "babel-plugin-const-enum": "^1.1.0", - "esbuild": "^0.13.8", - "raw-loader": "^4.0.2", - "rimraf": "^3.0.2", - "ts-loader": "^9.2.6", - "typescript-json-schema": "^0.50.1", - "webpack": "^5.59.0" - } - }, - "@types/engine.io-client": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/@types/engine.io-client/-/engine.io-client-3.1.5.tgz", - "integrity": "sha512-h2BKMLNVMQGQ0Q7WaQCJ/63LooRQhItnoFNXhbNVnjhNheWEO+sdpTFjZpzWP7TDl4M5lI3fsEAk3PFZfV67Yg==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/lodash": { - "version": "4.14.134", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.134.tgz", - "integrity": "sha512-2/O0khFUCFeDlbi7sZ7ZFRCcT812fAeOLm7Ev4KbwASkZ575TDrDcY7YyaoHdTOzKcNbfiwLYZqPmoC4wadrsw==" - }, - "@types/lodash.clonedeep": { - "version": "4.5.6", - "resolved": "https://registry.npmjs.org/@types/lodash.clonedeep/-/lodash.clonedeep-4.5.6.tgz", - "integrity": "sha512-cE1jYr2dEg1wBImvXlNtp0xDoS79rfEdGozQVgliDZj1uERH4k+rmEMTudP9b4VQ8O6nRb5gPqft0QzEQGMQgA==", - "requires": { - "@types/lodash": "*" - } - }, - "@types/node": { - "version": "12.0.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.0.10.tgz", - "integrity": "sha512-LcsGbPomWsad6wmMNv7nBLw7YYYyfdYcz6xryKYQhx89c3XXan+8Q6AJ43G5XDIaklaVkK3mE4fCb0SBvMiPSQ==", - "dev": true - }, - "base64-arraybuffer": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz", - "integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI=" - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" - }, - "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "requires": { - "ms": "2.1.2" - } - }, - "engine.io-client": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-5.2.0.tgz", - "integrity": "sha512-BcIBXGBkT7wKecwnfrSV79G2X5lSUSgeAGgoo60plXf8UsQEvCQww/KMwXSMhVjb98fFYNq20CC5eo8IOAPqsg==", - "requires": { - "base64-arraybuffer": "0.1.4", - "component-emitter": "~1.3.0", - "debug": "~4.3.1", - "engine.io-parser": "~4.0.1", - "has-cors": "1.1.0", - "parseqs": "0.0.6", - "parseuri": "0.0.6", - "ws": "~7.4.2", - "xmlhttprequest-ssl": "~2.0.0", - "yeast": "0.1.2" - } - }, - "engine.io-parser": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-4.0.3.tgz", - "integrity": "sha512-xEAAY0msNnESNPc00e19y5heTPX4y/TJ36gr8t1voOaNmTojP9b3oK3BbJLFufW2XFPQaaijpFewm2g2Um3uqA==", - "requires": { - "base64-arraybuffer": "0.1.4" - } - }, - "has-cors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", - "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" - }, - "lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "parseqs": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz", - "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==" - }, - "parseuri": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz", - "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==" - }, - "ws": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", - "requires": {} - }, - "xmlhttprequest-ssl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz", - "integrity": "sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==" - }, - "yeast": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", - "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" - } - } -} diff --git a/plugins/core/client/package.json b/plugins/core/client/package.json deleted file mode 100644 index 90ce1562e..000000000 --- a/plugins/core/client/package.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "name": "@scrypted/client", - "version": "0.0.7", - "description": "", - "main": "dist/index.js", - "types": "dist/index.d.ts", - "scripts": { - "prepublishOnly": "npm run build", - "build": "tsc", - "test": "echo \"Error: no test specified\" && exit 1" - }, - "eslintConfig": { - "root": true, - "env": { - "node": true - }, - "extends": [ - "eslint:recommended" - ], - "rules": {}, - "parserOptions": { - "parser": "babel-eslint" - } - }, - "author": "", - "license": "ISC", - "dependencies": { - "@scrypted/sdk": "file:../../../sdk", - "@types/lodash.clonedeep": "^4.5.6", - "engine.io-client": "^5.2.0", - "lodash.clonedeep": "^4.5.0" - }, - "devDependencies": { - "@types/engine.io-client": "^3.1.5" - } -} diff --git a/plugins/core/client/tsconfig.json b/plugins/core/client/tsconfig.json deleted file mode 100644 index 3e5b8a30e..000000000 --- a/plugins/core/client/tsconfig.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "compilerOptions": { - "esModuleInterop": true, - "sourceMap": true, - "target": "esnext", - "module": "commonjs", - "declaration": true, - "outDir": "./dist", - "strict": true - } -} diff --git a/plugins/core/package-lock.json b/plugins/core/package-lock.json index 80947d2d0..49c84c01f 100644 --- a/plugins/core/package-lock.json +++ b/plugins/core/package-lock.json @@ -10,6 +10,7 @@ "license": "Apache-2.0", "dependencies": { "@koush/wrtc": "^0.5.2", + "@scrypted/rpc": "^1.0.3", "@scrypted/sdk": "file:../../sdk", "mime": "^3.0.0", "router": "^1.3.6", @@ -163,6 +164,11 @@ "node": ">=10" } }, + "node_modules/@scrypted/rpc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@scrypted/rpc/-/rpc-1.0.3.tgz", + "integrity": "sha512-luEigc8gIMoKv26t2123KKUno3W7o4ze6SMv7ZPnRnlpYrgo9CmjDhezptTfQuHm6c/0eiIRPh6qGSBWOjelGw==" + }, "node_modules/@scrypted/sdk": { "resolved": "../../sdk", "link": true @@ -1382,6 +1388,11 @@ } } }, + "@scrypted/rpc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@scrypted/rpc/-/rpc-1.0.3.tgz", + "integrity": "sha512-luEigc8gIMoKv26t2123KKUno3W7o4ze6SMv7ZPnRnlpYrgo9CmjDhezptTfQuHm6c/0eiIRPh6qGSBWOjelGw==" + }, "@scrypted/sdk": { "version": "file:../../sdk", "requires": { diff --git a/plugins/core/package.json b/plugins/core/package.json index 93d11757a..64cdf767a 100644 --- a/plugins/core/package.json +++ b/plugins/core/package.json @@ -31,6 +31,7 @@ }, "dependencies": { "@koush/wrtc": "^0.5.2", + "@scrypted/rpc": "^1.0.3", "@scrypted/sdk": "file:../../sdk", "mime": "^3.0.0", "router": "^1.3.6", diff --git a/plugins/core/src/main.ts b/plugins/core/src/main.ts index 9dc6f83b4..884352b24 100644 --- a/plugins/core/src/main.ts +++ b/plugins/core/src/main.ts @@ -3,7 +3,7 @@ import sdk from '@scrypted/sdk'; const { systemManager, deviceManager, mediaManager, endpointManager } = sdk; import Router from 'router'; import { UserStorage } from './userStorage'; -import { RpcPeer } from '../../../server/src/rpc'; +import { RpcPeer } from '@scrypted/rpc'; import { setupPluginRemote } from '../../../server/src/plugin/plugin-remote'; import { PluginAPIProxy } from '../../../server/src/plugin/plugin-api'; import fs from 'fs'; @@ -57,8 +57,8 @@ async function reportAggregate(nativeId: string, interfaces: string[]) { } class ScryptedCore extends ScryptedDeviceBase implements HttpRequestHandler, EngineIOHandler, DeviceProvider { - router = Router(); - publicRouter = Router(); + router: any = Router(); + publicRouter: any = Router(); mediaCore: MediaCore; automations = new Map(); aggregate = new Map(); diff --git a/plugins/core/ui/package-lock.json b/plugins/core/ui/package-lock.json index ca9829608..67d02b6c4 100644 --- a/plugins/core/ui/package-lock.json +++ b/plugins/core/ui/package-lock.json @@ -27,6 +27,7 @@ "monaco-editor": "^0.27.0", "query-string": "^6.14.1", "register-service-worker": "^1.7.2", + "router": "^1.3.6", "semver": "^6.3.0", "vue": "^2.6.12", "vue-apexcharts": "^1.6.2", @@ -95,7 +96,7 @@ }, "../../../sdk": { "name": "@scrypted/sdk", - "version": "0.0.133", + "version": "0.0.167", "license": "ISC", "dependencies": { "@babel/plugin-proposal-class-properties": "^7.14.5", @@ -105,7 +106,6 @@ "@babel/plugin-transform-modules-commonjs": "^7.15.4", "@babel/plugin-transform-typescript": "^7.15.8", "@babel/preset-typescript": "^7.15.0", - "@types/node": "^16.11.1", "adm-zip": "^0.4.13", "axios": "^0.21.4", "babel-loader": "^8.2.3", @@ -114,11 +114,8 @@ "ncp": "^2.0.0", "raw-loader": "^4.0.2", "rimraf": "^3.0.2", - "stringify-object": "^3.3.0", "tmp": "^0.2.1", "ts-loader": "^9.2.6", - "typedoc": "^0.22.8", - "typescript-json-schema": "^0.50.1", "webpack": "^5.59.0" }, "bin": { @@ -130,8 +127,13 @@ "scrypted-webpack": "bin/scrypted-webpack.js" }, "devDependencies": { + "@types/node": "^16.11.1", "@types/stringify-object": "^4.0.0", - "ts-node": "^10.4.0" + "stringify-object": "^3.3.0", + "ts-node": "^10.4.0", + "typedoc": "^0.22.8", + "typescript-json-schema": "^0.50.1", + "webpack-bundle-analyzer": "^4.5.0" } }, "../../sdk": { @@ -11729,7 +11731,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", - "dev": true, "engines": { "node": ">= 0.6" } @@ -12836,7 +12837,6 @@ "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true, "engines": { "node": ">= 0.8" } @@ -12904,8 +12904,7 @@ "node_modules/path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", - "dev": true + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" }, "node_modules/path-type": { "version": "4.0.0", @@ -14536,6 +14535,46 @@ "inherits": "^2.0.1" } }, + "node_modules/router": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/router/-/router-1.3.6.tgz", + "integrity": "sha512-gsjhou+LFApzkIP8VDrouG6Z4pqkeF11n3o5orlwPPvPTl0x7c+dbF71itKOhDoFHygmc3N3uqm55Uq/gIDUwg==", + "dependencies": { + "array-flatten": "3.0.0", + "debug": "2.6.9", + "methods": "~1.1.2", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "setprototypeof": "1.2.0", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/router/node_modules/array-flatten": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-3.0.0.tgz", + "integrity": "sha512-zPMVc3ZYlGLNk4mpK1NzP2wg0ml9t7fUgDsayR5Y5rSzxQilzR9FGu/EH2jQOcKSAeAfWeylyW8juy3OkWRvNA==" + }, + "node_modules/router/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/router/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/router/node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -17172,7 +17211,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "dev": true, "engines": { "node": ">= 0.4.0" } @@ -21062,7 +21100,8 @@ "ts-node": "^10.4.0", "typedoc": "^0.22.8", "typescript-json-schema": "^0.50.1", - "webpack": "^5.59.0" + "webpack": "^5.59.0", + "webpack-bundle-analyzer": "^4.5.0" } }, "@soda/friendly-errors-webpack-plugin": { @@ -28746,8 +28785,7 @@ "methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", - "dev": true + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" }, "microevent.ts": { "version": "0.1.1", @@ -29654,8 +29692,7 @@ "parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" }, "pascalcase": { "version": "0.1.1", @@ -29708,8 +29745,7 @@ "path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", - "dev": true + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" }, "path-type": { "version": "4.0.0", @@ -31051,6 +31087,45 @@ "inherits": "^2.0.1" } }, + "router": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/router/-/router-1.3.6.tgz", + "integrity": "sha512-gsjhou+LFApzkIP8VDrouG6Z4pqkeF11n3o5orlwPPvPTl0x7c+dbF71itKOhDoFHygmc3N3uqm55Uq/gIDUwg==", + "requires": { + "array-flatten": "3.0.0", + "debug": "2.6.9", + "methods": "~1.1.2", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "setprototypeof": "1.2.0", + "utils-merge": "1.0.1" + }, + "dependencies": { + "array-flatten": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-3.0.0.tgz", + "integrity": "sha512-zPMVc3ZYlGLNk4mpK1NzP2wg0ml9t7fUgDsayR5Y5rSzxQilzR9FGu/EH2jQOcKSAeAfWeylyW8juy3OkWRvNA==" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + } + } + }, "run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -33187,8 +33262,7 @@ "utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "dev": true + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" }, "uuid": { "version": "3.4.0", diff --git a/plugins/core/ui/package.json b/plugins/core/ui/package.json index 66d22d525..4a0151151 100644 --- a/plugins/core/ui/package.json +++ b/plugins/core/ui/package.json @@ -30,6 +30,7 @@ "monaco-editor": "^0.27.0", "query-string": "^6.14.1", "register-service-worker": "^1.7.2", + "router": "^1.3.6", "semver": "^6.3.0", "vue": "^2.6.12", "vue-apexcharts": "^1.6.2", diff --git a/plugins/core/ui/src/client.ts b/plugins/core/ui/src/client.ts index 6b725415a..f75cfd82e 100644 --- a/plugins/core/ui/src/client.ts +++ b/plugins/core/ui/src/client.ts @@ -1,5 +1,5 @@ import Vue from "vue"; -import client from '../../client/index'; +import {connectScryptedClient} from '../../../../packages/web-sdk/src/index'; import axios from 'axios'; import store from './store'; @@ -23,7 +23,9 @@ function isValidDevice(id) { Vue.use(Vue => { Vue.prototype.$connectScrypted = () => { - const clientPromise = client.connect(null, '@scrypted/core'); + const clientPromise = connectScryptedClient({ + pluginId: '@scrypted/core', + }); store.commit("setHasLogin", undefined); store.commit("setIsLoggedIn", undefined); diff --git a/sdk/device.js b/sdk/device.js new file mode 100644 index 000000000..7e2580450 --- /dev/null +++ b/sdk/device.js @@ -0,0 +1,7 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.DeviceBase = void 0; +class DeviceBase { +} +exports.DeviceBase = DeviceBase; +//# sourceMappingURL=device.js.map \ No newline at end of file diff --git a/sdk/index.js b/sdk/index.js index 784764561..0bbbd8134 100644 --- a/sdk/index.js +++ b/sdk/index.js @@ -135,7 +135,7 @@ try { }); } catch (e) { - console.error('sdk initialization error, import @scrypted/sdk/types instead', e); + console.error('sdk initialization error, import @scrypted/types or use @scrypted/web-sdk instead', e); } exports.default = sdk; //# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/sdk/index.ts b/sdk/index.ts index 0aa1a7b08..fcbd21fd1 100644 --- a/sdk/index.ts +++ b/sdk/index.ts @@ -155,7 +155,7 @@ try { }); } catch (e) { - console.error('sdk initialization error, import @scrypted/sdk/types instead', e); + console.error('sdk initialization error, import @scrypted/types or use @scrypted/web-sdk instead', e); } export default sdk; diff --git a/server/package-lock.json b/server/package-lock.json index ef3fa1cb1..49420a66a 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -11,7 +11,6 @@ "dependencies": { "@mapbox/node-pre-gyp": "^1.0.8", "@scrypted/ffmpeg": "^1.0.10", - "@scrypted/rpc": "^1.0.3", "@scrypted/types": "^0.0.6", "adm-zip": "^0.5.3", "axios": "^0.21.1", @@ -25,6 +24,7 @@ "linkfs": "^2.1.0", "lodash": "^4.17.21", "memfs": "^3.2.2", + "mime-db": "^1.51.0", "mkdirp": "^1.0.4", "nan": "^2.15.0", "node-dijkstra": "^2.5.0", @@ -155,11 +155,6 @@ "follow-redirects": "^1.14.4" } }, - "node_modules/@scrypted/rpc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@scrypted/rpc/-/rpc-1.0.3.tgz", - "integrity": "sha512-luEigc8gIMoKv26t2123KKUno3W7o4ze6SMv7ZPnRnlpYrgo9CmjDhezptTfQuHm6c/0eiIRPh6qGSBWOjelGw==" - }, "node_modules/@scrypted/types": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/@scrypted/types/-/types-0.0.6.tgz", @@ -3332,11 +3327,6 @@ } } }, - "@scrypted/rpc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@scrypted/rpc/-/rpc-1.0.3.tgz", - "integrity": "sha512-luEigc8gIMoKv26t2123KKUno3W7o4ze6SMv7ZPnRnlpYrgo9CmjDhezptTfQuHm6c/0eiIRPh6qGSBWOjelGw==" - }, "@scrypted/types": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/@scrypted/types/-/types-0.0.6.tgz", diff --git a/server/package.json b/server/package.json index c2a1f7a69..6c22391c8 100644 --- a/server/package.json +++ b/server/package.json @@ -5,7 +5,6 @@ "dependencies": { "@mapbox/node-pre-gyp": "^1.0.8", "@scrypted/ffmpeg": "^1.0.10", - "@scrypted/rpc": "^1.0.3", "@scrypted/types": "^0.0.6", "adm-zip": "^0.5.3", "axios": "^0.21.1", @@ -19,6 +18,7 @@ "linkfs": "^2.1.0", "lodash": "^4.17.21", "memfs": "^3.2.2", + "mime-db": "^1.51.0", "mkdirp": "^1.0.4", "nan": "^2.15.0", "node-dijkstra": "^2.5.0", diff --git a/server/src/http-interfaces.ts b/server/src/http-interfaces.ts index 555e60be0..48496eb47 100644 --- a/server/src/http-interfaces.ts +++ b/server/src/http-interfaces.ts @@ -1,7 +1,7 @@ import { HttpResponse, HttpResponseOptions } from "@scrypted/types"; import { Response } from "express"; import mime from "mime"; -import { PROPERTY_PROXY_ONEWAY_METHODS } from "@scrypted/rpc"; +import { PROPERTY_PROXY_ONEWAY_METHODS } from "./rpc"; import { join as pathJoin } from 'path'; import fs from 'fs'; diff --git a/server/src/plugin/buffer-serializer.ts b/server/src/plugin/buffer-serializer.ts index 71982fd89..59213d93f 100644 --- a/server/src/plugin/buffer-serializer.ts +++ b/server/src/plugin/buffer-serializer.ts @@ -1,4 +1,4 @@ -import { RpcSerializer } from "@scrypted/rpc"; +import { RpcSerializer } from "../rpc"; export class BufferSerializer implements RpcSerializer { serialize(value: Buffer) { diff --git a/server/src/plugin/plugin-device.ts b/server/src/plugin/plugin-device.ts index e8fda3174..84aa4ad59 100644 --- a/server/src/plugin/plugin-device.ts +++ b/server/src/plugin/plugin-device.ts @@ -2,7 +2,7 @@ import { DeviceProvider, EventDetails, EventListenerOptions, EventListenerRegist import { ScryptedRuntime } from "../runtime"; import { PluginDevice } from "../db-types"; import { MixinProvider } from "@scrypted/types"; -import { handleFunctionInvocations, PrimitiveProxyHandler } from "@scrypted/rpc"; +import { handleFunctionInvocations, PrimitiveProxyHandler } from "../rpc"; import { getState } from "../state"; import { getDisplayType } from "../infer-defaults"; import { allInterfaceProperties, isValidInterfaceMethod, methodInterfaces } from "./descriptor"; diff --git a/server/src/plugin/plugin-host-api.ts b/server/src/plugin/plugin-host-api.ts index 456b70595..8b9140031 100644 --- a/server/src/plugin/plugin-host-api.ts +++ b/server/src/plugin/plugin-host-api.ts @@ -6,7 +6,7 @@ import { Logger } from '../logger'; import { getState } from '../state'; import { PluginHost } from './plugin-host'; import debounce from 'lodash/debounce'; -import { PROPERTY_PROXY_ONEWAY_METHODS } from '@scrypted/rpc'; +import { PROPERTY_PROXY_ONEWAY_METHODS } from '../rpc'; export class PluginHostAPI extends PluginAPIManagedListeners implements PluginAPI { pluginId: string; diff --git a/server/src/plugin/plugin-host.ts b/server/src/plugin/plugin-host.ts index 4898a5b09..af97366d2 100644 --- a/server/src/plugin/plugin-host.ts +++ b/server/src/plugin/plugin-host.ts @@ -1,4 +1,4 @@ -import { RpcPeer } from '@scrypted/rpc'; +import { RpcPeer } from '../rpc'; import AdmZip from 'adm-zip'; import { Device, EngineIOHandler } from '@scrypted/types' import { ScryptedRuntime } from '../runtime'; diff --git a/server/src/plugin/plugin-remote-websocket.ts b/server/src/plugin/plugin-remote-websocket.ts index e5af3940b..4de362b0a 100644 --- a/server/src/plugin/plugin-remote-websocket.ts +++ b/server/src/plugin/plugin-remote-websocket.ts @@ -69,7 +69,7 @@ export interface WebSocketMethods { close(message: string): void; } -export function createWebSocketClass(__websocketConnect: WebSocketConnect) { +export function createWebSocketClass(__websocketConnect: WebSocketConnect): any { // @ts-ignore class WebSocket extends WebSocketEventTarget { diff --git a/server/src/plugin/plugin-remote-worker.ts b/server/src/plugin/plugin-remote-worker.ts index 621c675d9..e190d91da 100644 --- a/server/src/plugin/plugin-remote-worker.ts +++ b/server/src/plugin/plugin-remote-worker.ts @@ -1,4 +1,4 @@ -import { RpcMessage, RpcPeer } from '@scrypted/rpc'; +import { RpcMessage, RpcPeer } from '../rpc'; import { SystemManager, DeviceManager, ScryptedNativeId } from '@scrypted/types' import { attachPluginRemote, PluginReader } from './plugin-remote'; import { PluginAPI } from './plugin-api'; diff --git a/server/src/plugin/plugin-remote.ts b/server/src/plugin/plugin-remote.ts index 0a8d1da38..a0d9c6872 100644 --- a/server/src/plugin/plugin-remote.ts +++ b/server/src/plugin/plugin-remote.ts @@ -4,7 +4,7 @@ import path from 'path'; import { ScryptedNativeId, DeviceManager, Logger, Device, DeviceManifest, DeviceState, EndpointManager, SystemDeviceState, ScryptedStatic, SystemManager, MediaManager, ScryptedMimeTypes, ScryptedInterface, ScryptedInterfaceProperty, HttpRequest } from '@scrypted/types' import { PluginAPI, PluginLogger, PluginRemote, PluginRemoteLoadZipOptions } from './plugin-api'; import { SystemManagerImpl } from './system'; -import { RpcPeer, RPCResultError, PROPERTY_PROXY_ONEWAY_METHODS, PROPERTY_JSON_DISABLE_SERIALIZATION } from '@scrypted/rpc'; +import { RpcPeer, RPCResultError, PROPERTY_PROXY_ONEWAY_METHODS, PROPERTY_JSON_DISABLE_SERIALIZATION } from '../rpc'; import { BufferSerializer } from './buffer-serializer'; import { createWebSocketClass, WebSocketConnectCallbacks, WebSocketMethods } from './plugin-remote-websocket'; import fs from 'fs'; diff --git a/server/src/plugin/runtime/child-process-worker.ts b/server/src/plugin/runtime/child-process-worker.ts index fb3ca09dc..7f3e173ab 100644 --- a/server/src/plugin/runtime/child-process-worker.ts +++ b/server/src/plugin/runtime/child-process-worker.ts @@ -1,7 +1,7 @@ import { EventEmitter } from "ws"; import { RuntimeWorker, RuntimeWorkerOptions } from "./runtime-worker"; import child_process from 'child_process'; -import { RpcMessage, RpcPeer } from "@scrypted/rpc"; +import { RpcMessage, RpcPeer } from "../../rpc"; export abstract class ChildProcessWorker extends EventEmitter implements RuntimeWorker { worker: child_process.ChildProcess; diff --git a/server/src/plugin/runtime/node-fork-worker.ts b/server/src/plugin/runtime/node-fork-worker.ts index 2e00d2466..3203eb841 100644 --- a/server/src/plugin/runtime/node-fork-worker.ts +++ b/server/src/plugin/runtime/node-fork-worker.ts @@ -1,7 +1,7 @@ import { RuntimeWorkerOptions as RuntimeWorkerOptions } from "./runtime-worker"; import child_process from 'child_process'; import path from 'path'; -import { RpcMessage, RpcPeer } from "@scrypted/rpc"; +import { RpcMessage, RpcPeer } from "../../rpc"; import { ChildProcessWorker } from "./child-process-worker"; import { getPluginNodePath } from "../plugin-npm-dependencies"; diff --git a/server/src/plugin/runtime/node-thread-worker.ts b/server/src/plugin/runtime/node-thread-worker.ts index 315701cfd..72b629ef6 100644 --- a/server/src/plugin/runtime/node-thread-worker.ts +++ b/server/src/plugin/runtime/node-thread-worker.ts @@ -1,6 +1,6 @@ import { Readable } from "stream"; import { EventEmitter } from "ws"; -import { RpcMessage, RpcPeer } from "@scrypted/rpc"; +import { RpcMessage, RpcPeer } from "../../rpc"; import { RuntimeWorker, RuntimeWorkerOptions } from "./runtime-worker"; import worker_threads from "worker_threads"; import path from 'path'; diff --git a/server/src/plugin/runtime/python-worker.ts b/server/src/plugin/runtime/python-worker.ts index a3d9896b9..fc95b7848 100644 --- a/server/src/plugin/runtime/python-worker.ts +++ b/server/src/plugin/runtime/python-worker.ts @@ -3,7 +3,7 @@ import child_process from 'child_process'; import path from 'path'; import { EventEmitter } from "ws"; import { Writable, Readable } from 'stream'; -import { RpcMessage, RpcPeer } from "@scrypted/rpc"; +import { RpcMessage, RpcPeer } from "../../rpc"; import readline from 'readline'; import { ChildProcessWorker } from "./child-process-worker"; diff --git a/server/src/plugin/runtime/runtime-worker.ts b/server/src/plugin/runtime/runtime-worker.ts index 355152611..fdbc5c389 100644 --- a/server/src/plugin/runtime/runtime-worker.ts +++ b/server/src/plugin/runtime/runtime-worker.ts @@ -1,4 +1,4 @@ -import { RpcMessage, RpcPeer } from "@scrypted/rpc"; +import { RpcMessage, RpcPeer } from "../../rpc"; import { PluginDebug } from "../plugin-debug"; import {Readable} from "stream"; @@ -26,3 +26,4 @@ export interface RuntimeWorker { setupRpcPeer(peer: RpcPeer): void; } + diff --git a/server/src/plugin/system.ts b/server/src/plugin/system.ts index 37bda446d..28bb1b759 100644 --- a/server/src/plugin/system.ts +++ b/server/src/plugin/system.ts @@ -1,6 +1,6 @@ import { EventListenerOptions, EventDetails, EventListenerRegister, ScryptedDevice, ScryptedInterface, ScryptedInterfaceDescriptors, SystemDeviceState, SystemManager, ScryptedInterfaceProperty, ScryptedDeviceType, Logger } from "@scrypted/types"; import { PluginAPI } from "./plugin-api"; -import { handleFunctionInvocations, PrimitiveProxyHandler, PROPERTY_PROXY_ONEWAY_METHODS } from '@scrypted/rpc'; +import { handleFunctionInvocations, PrimitiveProxyHandler, PROPERTY_PROXY_ONEWAY_METHODS } from '../rpc'; import { EventRegistry } from "../event-registry"; import { allInterfaceProperties, isValidInterfaceMethod } from "./descriptor"; diff --git a/packages/rpc/src/index.ts b/server/src/rpc.ts similarity index 97% rename from packages/rpc/src/index.ts rename to server/src/rpc.ts index 3a7bca373..8c380d4d0 100644 --- a/packages/rpc/src/index.ts +++ b/server/src/rpc.ts @@ -17,9 +17,17 @@ export function startPeriodicGarbageCollection() { console.warn('rpc peer garbage collection not available: global.gc is not exposed.'); return; } - return setInterval(() => { - global?.gc?.(); - }, 10000); + try { + const g = global; + if (g.gc) { + return setInterval(() => { + g.gc!(); + }, 10000); + } + } + catch (e) { + + } } export interface RpcMessage { @@ -32,7 +40,7 @@ interface RpcParam extends RpcMessage { } interface RpcApply extends RpcMessage { - id: string|undefined; + id: string | undefined; proxyId: string; args: any[]; method: string; @@ -51,8 +59,8 @@ interface RpcOob extends RpcMessage { } interface RpcRemoteProxyValue { - __remote_proxy_id: string|undefined; - __remote_proxy_finalizer_id: string|undefined; + __remote_proxy_id: string | undefined; + __remote_proxy_finalizer_id: string | undefined; __remote_constructor_name: string; __remote_proxy_props: any; __remote_proxy_oneway_methods: string[]; @@ -65,7 +73,7 @@ interface RpcLocalProxyValue { interface RpcFinalize extends RpcMessage { __local_proxy_id: string; - __local_proxy_finalizer_id: string|undefined; + __local_proxy_finalizer_id: string | undefined; } interface Deferred { @@ -180,7 +188,7 @@ class RpcProxy implements PrimitiveProxyHandler { // todo: error constructor adds a "cause" variable in Chrome 93, Node v?? export class RPCResultError extends Error { - constructor(peer: RpcPeer, message: string, public cause?: Error, options?: { name: string, stack: string|undefined}) { + constructor(peer: RpcPeer, message: string, public cause?: Error, options?: { name: string, stack: string | undefined }) { super(`${peer.selfName}:${peer.peerName}: ${message}`); if (options?.name) { @@ -225,7 +233,7 @@ export interface RpcSerializer { interface LocalProxiedEntry { id: string; - finalizerId: string|undefined; + finalizerId: string | undefined; } export class RpcPeer { diff --git a/server/src/scrypted-main.ts b/server/src/scrypted-main.ts index 9154c7465..4501b137a 100644 --- a/server/src/scrypted-main.ts +++ b/server/src/scrypted-main.ts @@ -1,6 +1,6 @@ import process from 'process'; import semver from 'semver'; -import { RPCResultError, startPeriodicGarbageCollection } from '@scrypted/rpc'; +import { RPCResultError, startPeriodicGarbageCollection } from './rpc'; import { PluginError } from './plugin/plugin-error'; if (!semver.gte(process.version, '16.0.0')) { diff --git a/server/src/scrypted-plugin-main.ts b/server/src/scrypted-plugin-main.ts index 5a7be55be..556ceb9a0 100644 --- a/server/src/scrypted-plugin-main.ts +++ b/server/src/scrypted-plugin-main.ts @@ -1,5 +1,5 @@ import { startPluginRemote } from "./plugin/plugin-remote-worker"; -import { RpcMessage } from "@scrypted/rpc"; +import { RpcMessage } from "./rpc"; import worker_threads from "worker_threads"; import v8 from 'v8'; diff --git a/server/src/scrypted-server-main.ts b/server/src/scrypted-server-main.ts index ceaf79e71..0d7eceaa4 100644 --- a/server/src/scrypted-server-main.ts +++ b/server/src/scrypted-server-main.ts @@ -13,7 +13,7 @@ import crypto from 'crypto'; import cookieParser from 'cookie-parser'; import axios from 'axios'; import qs from 'query-string'; -import { RPCResultError } from '@scrypted/rpc'; +import { RPCResultError } from './rpc'; import fs from 'fs'; import mkdirp from 'mkdirp'; import { install as installSourceMapSupport } from 'source-map-support';