diff --git a/package-lock.json b/package-lock.json index 4c69009..bbac03e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -50,26 +50,63 @@ } }, "@gitzone/tstest": { - "version": "1.0.24", - "resolved": "https://verdaccio.lossless.one/@gitzone%2ftstest/-/tstest-1.0.24.tgz", - "integrity": "sha512-HFHLxhXFhhY7nn7H7dxfjy/6WiUGCw35L5Do/ZajCAn/xAWiqnppW1aIp0LOOaWeZ7J5fH7xP88TjsGpwR+MRA==", + "version": "1.0.28", + "resolved": "https://verdaccio.lossless.one/@gitzone%2ftstest/-/tstest-1.0.28.tgz", + "integrity": "sha512-MNXH4hpn/4BRwoCjIxz+fbrpkFw/u8834BFTX4Ug1bU37qBZvwZdyMfHBNRSjDykya3SLjOSqOf1mcMI3gnEvA==", "dev": true, "requires": { - "@gitzone/tsrun": "^1.2.6", + "@gitzone/tsrun": "^1.2.8", "@pushrocks/consolecolor": "^2.0.1", - "@pushrocks/smartfile": "^7.0.2", + "@pushrocks/smartfile": "^7.0.6", "@pushrocks/smartlog": "^2.0.19", - "@pushrocks/smartpromise": "^3.0.2", - "@pushrocks/smartshell": "^2.0.22", + "@pushrocks/smartpromise": "^3.0.6", + "@pushrocks/smartshell": "^2.0.25", "@types/figures": "^3.0.1", "figures": "^3.0.0" + }, + "dependencies": { + "@pushrocks/smartfile": { + "version": "7.0.6", + "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartfile/-/smartfile-7.0.6.tgz", + "integrity": "sha512-X1kWg1HSQ/MqasRIHPCf6D9CRrcIrpTjW8KLc4GkApJ/W/IVaKsQkJQfdimlg1uc/9v8AYnoRdiGa51yxyghZA==", + "dev": true, + "requires": { + "@pushrocks/smarthash": "^2.0.6", + "@pushrocks/smartpath": "^4.0.1", + "@pushrocks/smartpromise": "^3.0.5", + "@pushrocks/smartrequest": "^1.1.27", + "@types/fs-extra": "^8.0.0", + "fs-extra": "^8.1.0", + "glob": "^7.1.4", + "js-yaml": "^3.13.1" + } + }, + "@types/fs-extra": { + "version": "8.0.1", + "resolved": "https://verdaccio.lossless.one/@types%2ffs-extra/-/fs-extra-8.0.1.tgz", + "integrity": "sha512-J00cVDALmi/hJOYsunyT52Hva5TnJeKP5yd1r+mH/ZU0mbYZflR0Z5kw5kITtKTRYMhm1JMClOFYdHnQszEvqw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "fs-extra": { + "version": "8.1.0", + "resolved": "https://verdaccio.lossless.one/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + } } }, "@pushrocks/consolecolor": { "version": "2.0.1", "resolved": "https://verdaccio.lossless.one/@pushrocks%2fconsolecolor/-/consolecolor-2.0.1.tgz", "integrity": "sha512-iOFCHVeFZ2OywbdwSxVI4/wokkcLrXVdHLgvMmkNhJ220eeLgjNZWx3EJo3vNW3zq5ybCSCUIq0878djBxrWpw==", - "dev": true, "requires": { "ansi-256-colors": "^1.1.0" } @@ -78,7 +115,6 @@ "version": "3.0.3", "resolved": "https://verdaccio.lossless.one/@pushrocks%2fearly/-/early-3.0.3.tgz", "integrity": "sha512-71/nwxTpqdp1glmHz4YaGusNl/XOOcPelAxC9RA6rpS/6280QyY2u4yx+mRdMrCzn7ruLYF5awbkS8llNZ94Pg==", - "dev": true, "requires": { "@pushrocks/consolecolor": "^2.0.1", "@pushrocks/smartpromise": "^2.0.5" @@ -87,8 +123,7 @@ "@pushrocks/smartpromise": { "version": "2.0.5", "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartpromise/-/smartpromise-2.0.5.tgz", - "integrity": "sha512-9j/chLtIiNkR0MDw7Mpxg9slxAVvAQwUZuiaPYX5KpHdKxQaHLI1VZ8IN0vPhwlfgNO4i4vGXV0wB8BvSDj03g==", - "dev": true + "integrity": "sha512-9j/chLtIiNkR0MDw7Mpxg9slxAVvAQwUZuiaPYX5KpHdKxQaHLI1VZ8IN0vPhwlfgNO4i4vGXV0wB8BvSDj03g==" } } }, @@ -190,6 +225,29 @@ "vinyl-file": "^3.0.0" } }, + "@pushrocks/smarthash": { + "version": "2.0.6", + "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmarthash/-/smarthash-2.0.6.tgz", + "integrity": "sha512-jHk9srgRLkszk/oPCUOkxTX2Fqu7qKwx13aEeSIBx8UCtFbXPLecJAqEaGEVk1mw9e4Oq0iC6O0jEnxKo5NQwA==", + "dev": true, + "requires": { + "@pushrocks/smartjson": "^3.0.5", + "@pushrocks/smartpromise": "^3.0.2", + "@types/through2": "^2.0.34", + "through2": "^3.0.1" + } + }, + "@pushrocks/smartjson": { + "version": "3.0.8", + "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartjson/-/smartjson-3.0.8.tgz", + "integrity": "sha512-EjC3611RSZaZmK+nXxXrYDBxdxYWtrxjOrZtQzbYn0yM33KSCH0sLIAG8B2wYZVAOj4A2pC8mVxFSJ1w3iRFHg==", + "dev": true, + "requires": { + "@types/fast-json-stable-stringify": "^2.0.0", + "fast-json-stable-stringify": "^2.0.0", + "lodash.clonedeep": "^4.5.0" + } + }, "@pushrocks/smartlog": { "version": "2.0.19", "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartlog/-/smartlog-2.0.19.tgz", @@ -254,14 +312,14 @@ "dev": true }, "@pushrocks/smartpromise": { - "version": "3.0.5", - "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartpromise/-/smartpromise-3.0.5.tgz", - "integrity": "sha512-9kHBWyDFjQ6cV1rseOfge02EH6huh/mrtqxlFoJoxnMaGWf5F8H3UEsskBBUGI6QKE1Bl8evr74AIKWwJ0r/bA==" + "version": "3.0.6", + "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartpromise/-/smartpromise-3.0.6.tgz", + "integrity": "sha512-vlQlBGNVIjfClgnsfgQBU6GIKcskYSFzEcKLt18ngPzPEcjKklXcxaqzLXpnoxR+KBh30QPE8255ncYHXuPPOg==" }, "@pushrocks/smartrequest": { - "version": "1.1.35", - "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartrequest/-/smartrequest-1.1.35.tgz", - "integrity": "sha512-1DOnt0628rkxDnX0zIoPHFxBwvjp6iIYkyaZshzFeACARmc+1yRYKiEu5pDahwhWhrCkK7xaAL+iLqnxxp+tWg==", + "version": "1.1.42", + "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartrequest/-/smartrequest-1.1.42.tgz", + "integrity": "sha512-sCEousyvnbW9IvBVHt3ZTjV1IP2vxJQ8TqG5GqxRk82wyVB0SCZfuMWW/guQA1+DmxfUfMsqBxzvovtM/bOc1w==", "requires": { "@pushrocks/smartpromise": "^3.0.5", "@types/form-data": "^2.5.0", @@ -288,9 +346,9 @@ } }, "@pushrocks/smartshell": { - "version": "2.0.23", - "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartshell/-/smartshell-2.0.23.tgz", - "integrity": "sha512-+YXacX/sp4f+iBYm4vAoxrq/c8WCHnFhMaW66l3R08stl0eezW3SytoSlnr6R+JT1xqnBzIItDfCyyRC3uEVnw==", + "version": "2.0.25", + "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartshell/-/smartshell-2.0.25.tgz", + "integrity": "sha512-sYVHOhBRdr+CkjS+o1SDtB5058ZYxTPAYuexx2ydl2g+57KNdEcSRWN/2mOv5+NFH+tvvgtnUjC3AclC9CwJ4A==", "dev": true, "requires": { "@pushrocks/smartdelay": "^2.0.3", @@ -311,15 +369,15 @@ } }, "@pushrocks/smartstring": { - "version": "3.0.10", - "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartstring/-/smartstring-3.0.10.tgz", - "integrity": "sha512-E4tU4F8c8zOf7DqADZ3l3V9/OHFyomsasGmFzCmaakETVJS1ESb31duvroYdavYCvrsUEX/f4yGJ9ZCnv1WgPw==", + "version": "3.0.14", + "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartstring/-/smartstring-3.0.14.tgz", + "integrity": "sha512-hN3IwTb5VBUis8Z5U5U6dDCnap6zBmkc9/IVx8lxAbsxl5TYQ4RiYlJ2JM4tih7EdE80ZeSdpprzChYrWmSwDg==", "requires": { - "crypto-random-string": "^1.0.0", - "js-base64": "^2.5.0", + "crypto-random-string": "^3.0.1", + "js-base64": "^2.5.1", "normalize-newline": "^3.0.0", "randomatic": "^3.1.1", - "strip-indent": "^2.0.0" + "strip-indent": "^3.0.0" } }, "@pushrocks/smartsystem": { @@ -366,7 +424,6 @@ "version": "3.0.13", "resolved": "https://verdaccio.lossless.one/@pushrocks%2ftapbundle/-/tapbundle-3.0.13.tgz", "integrity": "sha512-23O4UMBafCuD+RnUlXNvtT9DGbL1HMD+xZE1Zcr7Ll7WvgxUgRQQfk9kq6qbLLbjaRe1J2Ijsgh1HuZbBaucLQ==", - "dev": true, "requires": { "@pushrocks/early": "^3.0.3", "@pushrocks/smartdelay": "^2.0.3", @@ -375,21 +432,22 @@ } }, "@tsclass/tsclass": { - "version": "2.0.6", - "resolved": "https://verdaccio.lossless.one/@tsclass%2ftsclass/-/tsclass-2.0.6.tgz", - "integrity": "sha512-D+qusqR6A8PBwkY68o082H5ba7VdwD/cJJ5e3QB2AF/Jov63t8m/NCEGQpSNRwFtmH189/wT5ih0AifbvgiFig==" + "version": "2.0.13", + "resolved": "https://verdaccio.lossless.one/@tsclass%2ftsclass/-/tsclass-2.0.13.tgz", + "integrity": "sha512-ZhN3vLAahP4DOayACh/bskG4SpeqNpR4oH9776hZvz6GoFj7KQinzf03gzC5o2o6tnmOusQ1FYu1NGYmy6Rvdg==", + "requires": { + "@pushrocks/tapbundle": "^3.0.13" + } }, "@types/chai": { "version": "4.2.0", "resolved": "https://verdaccio.lossless.one/@types%2fchai/-/chai-4.2.0.tgz", - "integrity": "sha512-zw8UvoBEImn392tLjxoavuonblX/4Yb9ha4KBU10FirCfwgzhKO0dvyJSF9ByxV1xK1r2AgnAi/tvQaLgxQqxA==", - "dev": true + "integrity": "sha512-zw8UvoBEImn392tLjxoavuonblX/4Yb9ha4KBU10FirCfwgzhKO0dvyJSF9ByxV1xK1r2AgnAi/tvQaLgxQqxA==" }, "@types/chai-as-promised": { "version": "7.1.2", "resolved": "https://verdaccio.lossless.one/@types%2fchai-as-promised/-/chai-as-promised-7.1.2.tgz", "integrity": "sha512-PO2gcfR3Oxa+u0QvECLe1xKXOqYTzCmWf0FhLhjREoW3fPAVamjihL7v1MOVLJLsnAMdLcjkfrs01yvDMwVK4Q==", - "dev": true, "requires": { "@types/chai": "*" } @@ -398,7 +456,6 @@ "version": "1.4.2", "resolved": "https://verdaccio.lossless.one/@types%2fchai-string/-/chai-string-1.4.2.tgz", "integrity": "sha512-ld/1hV5qcPRGuwlPdvRfvM3Ka/iofOk2pH4VkasK4b1JJP1LjNmWWn0LsISf6RRzyhVOvs93rb9tM09e+UuF8Q==", - "dev": true, "requires": { "@types/chai": "*" } @@ -417,6 +474,12 @@ "resolved": "https://verdaccio.lossless.one/@types%2fdefault-gateway/-/default-gateway-3.0.0.tgz", "integrity": "sha512-Pg0Vygi/mDsW+jAlknUf9ECJAcF6GyluMzXofb7hs4iLlichbdQLveweUN0SLb4TI6drRvaMoINcMzPQb0XB+w==" }, + "@types/fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://verdaccio.lossless.one/@types%2ffast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha512-mky/O83TXmGY39P1H9YbUpjV6l6voRYlufqfFCvel8l1phuy8HRjdWc1rrPuN53ITBJlbyMSV6z3niOySO5pgQ==", + "dev": true + }, "@types/figures": { "version": "3.0.1", "resolved": "https://verdaccio.lossless.one/@types%2ffigures/-/figures-3.0.1.tgz", @@ -454,15 +517,24 @@ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==" }, "@types/node": { - "version": "12.7.8", - "resolved": "https://verdaccio.lossless.one/@types%2fnode/-/node-12.7.8.tgz", - "integrity": "sha512-FMdVn84tJJdV+xe+53sYiZS4R5yn1mAIxfj+DVoNiQjTYz1+OYmjwEZr1ev9nU0axXwda0QDbYl06QHanRVH3A==" + "version": "12.12.5", + "resolved": "https://verdaccio.lossless.one/@types%2fnode/-/node-12.12.5.tgz", + "integrity": "sha512-KEjODidV4XYUlJBF3XdjSH5FWoMCtO0utnhtdLf1AgeuZLOrRbvmU/gaRCVg7ZaQDjVf3l84egiY0mRNe5xE4A==" }, "@types/portscanner": { "version": "2.1.0", "resolved": "https://verdaccio.lossless.one/@types%2fportscanner/-/portscanner-2.1.0.tgz", "integrity": "sha512-II0FA05TSt4r7PBUvYTqub+yrXTRu7L/PQnTtjcJYzAeBts6xHM/OA2MKyeQ80sFxX7p+0BTo68Nh1P3N6Oj/g==" }, + "@types/through2": { + "version": "2.0.34", + "resolved": "https://verdaccio.lossless.one/@types%2fthrough2/-/through2-2.0.34.tgz", + "integrity": "sha512-nhRG8+RuG/L+0fAZBQYaRflXKjTrHOKH8MFTChnf+dNVMxA3wHYYrfj0tztK0W51ABXjGfRCDc0vRkecCOrsow==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, "@types/vinyl": { "version": "2.0.3", "resolved": "https://verdaccio.lossless.one/@types%2fvinyl/-/vinyl-2.0.3.tgz", @@ -473,9 +545,9 @@ } }, "@types/which": { - "version": "1.3.1", - "resolved": "https://verdaccio.lossless.one/@types%2fwhich/-/which-1.3.1.tgz", - "integrity": "sha512-ZrJDWpvg75LTGX4XwuneY9s6bF3OeZcGTpoGh3zDV9ytzcHMFsRrMIaLBRJZQMBoGyKs6unBQfVdrLZiYfb1zQ==", + "version": "1.3.2", + "resolved": "https://verdaccio.lossless.one/@types%2fwhich/-/which-1.3.2.tgz", + "integrity": "sha512-8oDqyLC7eD4HM307boe2QWKyuzdzWBj56xI/imSl2cpL+U3tCMaTAkMJ4ee5JBZ/FsOJlvRGeIShiZDAl1qERA==", "dev": true }, "@types/ws": { @@ -506,9 +578,9 @@ } }, "agentkeepalive": { - "version": "4.0.2", - "resolved": "https://verdaccio.lossless.one/agentkeepalive/-/agentkeepalive-4.0.2.tgz", - "integrity": "sha512-A5gSniD4xMCYtSD4ilUHpQRB9ZbNjtIPittKUv7bA0j0UCwbT3EJBUYLKPJ/dtmaXRYWI2mG4/O90xbi7oahNw==", + "version": "4.1.0", + "resolved": "https://verdaccio.lossless.one/agentkeepalive/-/agentkeepalive-4.1.0.tgz", + "integrity": "sha512-CW/n1wxF8RpEuuiq6Vbn9S8m0VSYDMnZESqaJ6F2cWN9fY8rei2qaxweIaRgq+ek8TqfoFIsUjaGNKGGEHElSg==", "requires": { "debug": "^4.1.0", "depd": "^1.1.2", @@ -533,8 +605,7 @@ "ansi-256-colors": { "version": "1.1.0", "resolved": "https://verdaccio.lossless.one/ansi-256-colors/-/ansi-256-colors-1.1.0.tgz", - "integrity": "sha1-kQ3lDvzHwJ49gvL4er1rcAwYgYo=", - "dev": true + "integrity": "sha1-kQ3lDvzHwJ49gvL4er1rcAwYgYo=" }, "ansi-regex": { "version": "3.0.0", @@ -568,8 +639,7 @@ "assertion-error": { "version": "1.1.0", "resolved": "https://verdaccio.lossless.one/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==" }, "async": { "version": "2.6.3", @@ -630,7 +700,6 @@ "version": "4.2.0", "resolved": "https://verdaccio.lossless.one/chai/-/chai-4.2.0.tgz", "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==", - "dev": true, "requires": { "assertion-error": "^1.1.0", "check-error": "^1.0.2", @@ -644,7 +713,6 @@ "version": "7.1.1", "resolved": "https://verdaccio.lossless.one/chai-as-promised/-/chai-as-promised-7.1.1.tgz", "integrity": "sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==", - "dev": true, "requires": { "check-error": "^1.0.2" } @@ -652,8 +720,7 @@ "chai-string": { "version": "1.5.0", "resolved": "https://verdaccio.lossless.one/chai-string/-/chai-string-1.5.0.tgz", - "integrity": "sha512-sydDC3S3pNAQMYwJrs6dQX0oBQ6KfIPuOZ78n7rocW0eJJlsHPh2t3kwW7xfwYA/1Bf6/arGtSUo16rxR2JFlw==", - "dev": true + "integrity": "sha512-sydDC3S3pNAQMYwJrs6dQX0oBQ6KfIPuOZ78n7rocW0eJJlsHPh2t3kwW7xfwYA/1Bf6/arGtSUo16rxR2JFlw==" }, "chalk": { "version": "2.4.2", @@ -668,8 +735,7 @@ "check-error": { "version": "1.0.2", "resolved": "https://verdaccio.lossless.one/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", - "dev": true + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=" }, "cli-cursor": { "version": "2.1.0", @@ -791,9 +857,12 @@ } }, "crypto-random-string": { - "version": "1.0.0", - "resolved": "https://verdaccio.lossless.one/crypto-random-string/-/crypto-random-string-1.0.0.tgz", - "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=" + "version": "3.0.1", + "resolved": "https://verdaccio.lossless.one/crypto-random-string/-/crypto-random-string-3.0.1.tgz", + "integrity": "sha512-dUL0cJ4PBLanJGJQBHQUkvZ3C4q13MXzl54oRqAIiJGiNkOZ4JDwkg/SBo7daGghzlJv16yW1p/4lIQukmbedA==", + "requires": { + "type-fest": "^0.5.2" + } }, "debug": { "version": "3.1.0", @@ -813,7 +882,6 @@ "version": "3.0.1", "resolved": "https://verdaccio.lossless.one/deep-eql/-/deep-eql-3.0.1.tgz", "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", - "dev": true, "requires": { "type-detect": "^4.0.0" } @@ -1015,10 +1083,16 @@ "strip-eof": "^1.0.0" } }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://verdaccio.lossless.one/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "dev": true + }, "figures": { - "version": "3.0.0", - "resolved": "https://verdaccio.lossless.one/figures/-/figures-3.0.0.tgz", - "integrity": "sha512-HKri+WoWoUgr83pehn/SIgLOMZ9nAWC6dcGj26RY2R4F50u4+RTUz0RCrUlOV3nKRAICW1UGzyb+kcX2qK1S/g==", + "version": "3.1.0", + "resolved": "https://verdaccio.lossless.one/figures/-/figures-3.1.0.tgz", + "integrity": "sha512-ravh8VRXqHuMvZt/d8GblBeqDMkdJMBdv/2KntFH+ra5MXkO7nxNKpzQ3n6QD/2da1kH0aWmNISdvhM7gl2gVg==", "dev": true, "requires": { "escape-string-regexp": "^1.0.5" @@ -1102,8 +1176,7 @@ "get-func-name": { "version": "2.0.0", "resolved": "https://verdaccio.lossless.one/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", - "dev": true + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=" }, "get-stream": { "version": "4.1.0", @@ -1337,6 +1410,12 @@ "resolved": "https://verdaccio.lossless.one/lodash/-/lodash-4.17.15.tgz", "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://verdaccio.lossless.one/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + }, "lodash.isfinite": { "version": "3.3.2", "resolved": "https://verdaccio.lossless.one/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz", @@ -1419,6 +1498,11 @@ "resolved": "https://verdaccio.lossless.one/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" }, + "min-indent": { + "version": "1.0.0", + "resolved": "https://verdaccio.lossless.one/min-indent/-/min-indent-1.0.0.tgz", + "integrity": "sha1-z8RcN+nsDY8KDsPdTvf3w6vjklY=" + }, "minimatch": { "version": "3.0.4", "resolved": "https://verdaccio.lossless.one/minimatch/-/minimatch-3.0.4.tgz", @@ -1643,8 +1727,7 @@ "pathval": { "version": "1.1.0", "resolved": "https://verdaccio.lossless.one/pathval/-/pathval-1.1.0.tgz", - "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", - "dev": true + "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=" }, "pify": { "version": "2.3.0", @@ -1809,7 +1892,6 @@ "version": "2.0.1", "resolved": "https://verdaccio.lossless.one/smartchai/-/smartchai-2.0.1.tgz", "integrity": "sha512-9M+R56OhAHXScxgr2vzQqxGx0XMS0QXriNZuP7hjlbVbo2FUT+l60iEzbwPt9Ga+5u2cEEjSSoZEQVqlROaddA==", - "dev": true, "requires": { "@types/chai": "^4.1.2", "@types/chai-as-promised": "^7.1.0", @@ -1826,9 +1908,9 @@ "dev": true }, "source-map-support": { - "version": "0.5.13", - "resolved": "https://verdaccio.lossless.one/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "version": "0.5.16", + "resolved": "https://verdaccio.lossless.one/source-map-support/-/source-map-support-0.5.16.tgz", + "integrity": "sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==", "dev": true, "requires": { "buffer-from": "^1.0.0", @@ -1952,9 +2034,12 @@ "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" }, "strip-indent": { - "version": "2.0.0", - "resolved": "https://verdaccio.lossless.one/strip-indent/-/strip-indent-2.0.0.tgz", - "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=" + "version": "3.0.0", + "resolved": "https://verdaccio.lossless.one/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "requires": { + "min-indent": "^1.0.0" + } }, "supports-color": { "version": "5.5.0", @@ -2007,6 +2092,15 @@ } } }, + "through2": { + "version": "3.0.1", + "resolved": "https://verdaccio.lossless.one/through2/-/through2-3.0.1.tgz", + "integrity": "sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww==", + "dev": true, + "requires": { + "readable-stream": "2 || 3" + } + }, "tiny-worker": { "version": "2.2.0", "resolved": "https://verdaccio.lossless.one/tiny-worker/-/tiny-worker-2.2.0.tgz", @@ -2017,9 +2111,9 @@ } }, "ts-node": { - "version": "8.3.0", - "resolved": "https://verdaccio.lossless.one/ts-node/-/ts-node-8.3.0.tgz", - "integrity": "sha512-dyNS/RqyVTDcmNM4NIBAeDMpsAdaQ+ojdf0GOLqE6nwJOgzEkdRNzJywhDfwnuvB10oa6NLVG1rUJQCpRN7qoQ==", + "version": "8.4.1", + "resolved": "https://verdaccio.lossless.one/ts-node/-/ts-node-8.4.1.tgz", + "integrity": "sha512-5LpRN+mTiCs7lI5EtbXmF/HfMeCjzt7DH9CZwtkr6SywStrNQC723wG+aOWFiLNn7zT3kD/RnFqi3ZUfr4l5Qw==", "dev": true, "requires": { "arg": "^4.1.0", @@ -2073,8 +2167,12 @@ "type-detect": { "version": "4.0.8", "resolved": "https://verdaccio.lossless.one/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" + }, + "type-fest": { + "version": "0.5.2", + "resolved": "https://verdaccio.lossless.one/type-fest/-/type-fest-0.5.2.tgz", + "integrity": "sha512-DWkS49EQKVX//Tbupb9TFa19c7+MK1XmzkrZUR8TAktmE/DizXoaoJV6TZ/tSIPXipqNiRI6CyAe7x69Jb6RSw==" }, "typescript": { "version": "3.5.3", @@ -2206,9 +2304,9 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "ws": { - "version": "7.1.2", - "resolved": "https://verdaccio.lossless.one/ws/-/ws-7.1.2.tgz", - "integrity": "sha512-gftXq3XI81cJCgkUiAVixA0raD9IVmXqsylCrjRygw4+UOOGzPoxnQ6r/CnVL9i+mDncJo94tSkyrtuuQVBmrg==", + "version": "7.2.0", + "resolved": "https://verdaccio.lossless.one/ws/-/ws-7.2.0.tgz", + "integrity": "sha512-+SqNqFbwTm/0DC18KYzIsMTnEWpLwJsiasW/O17la4iDRRIO9uaHbvKiAS3AHgTiuuWerK/brj4O6MYZkei9xg==", "requires": { "async-limiter": "^1.0.0" } diff --git a/package.json b/package.json index 5fdddc8..d7747d9 100644 --- a/package.json +++ b/package.json @@ -14,22 +14,23 @@ }, "devDependencies": { "@gitzone/tsbuild": "^2.1.17", - "@gitzone/tstest": "^1.0.15", + "@gitzone/tstest": "^1.0.28", "@pushrocks/tapbundle": "^3.0.13", - "@types/node": "^12.7.8", + "@types/node": "^12.12.5", "tslint": "^5.20.0", "tslint-config-prettier": "^1.15.0" }, "dependencies": { "@pushrocks/lik": "^3.0.11", "@pushrocks/smartnetwork": "^1.1.14", - "@pushrocks/smartpromise": "^3.0.5", - "@pushrocks/smartrequest": "^1.1.35", + "@pushrocks/smartpromise": "^3.0.6", + "@pushrocks/smartrequest": "^1.1.42", "@pushrocks/smartspawn": "^2.0.9", + "@pushrocks/smartstring": "^3.0.14", "@pushrocks/smartsystem": "^2.0.9", - "@tsclass/tsclass": "^2.0.6", + "@tsclass/tsclass": "^2.0.13", "@types/ws": "^6.0.3", - "ws": "^7.1.2" + "ws": "^7.2.0" }, "files": [ "ts/*", diff --git a/ts/smartproxy.classes.proxyworker.ts b/ts/smartproxy.classes.proxyworker.ts index 3d6187d..2c1d8a0 100644 --- a/ts/smartproxy.classes.proxyworker.ts +++ b/ts/smartproxy.classes.proxyworker.ts @@ -13,8 +13,9 @@ export class ProxyWorker { * starts the proxyInstance */ public async start() { - this.httpsServer = plugins.https.createServer({ - key: `-----BEGIN PRIVATE KEY----- + this.httpsServer = plugins.https.createServer( + { + key: `-----BEGIN PRIVATE KEY----- MIIJRQIBADANBgkqhkiG9w0BAQEFAASCCS8wggkrAgEAAoICAQDi2F/0kQr96mhe 3yEWvy2mRHOZoSSBtIqg6Bre4ZcMu901/cHNIjFnynNGFl9Se61yZbW2F3PfCt7+ kQlHug1Cx+LFssvz+hLlB5cqJQZfRKx92DhbROygtxG9r7UBmx/fwx+JQ+HOHX9R @@ -67,7 +68,7 @@ h+7fBVO49PLL0NWy+8GT8y7a04calFfLvZEA2UMaunBis3dE1KMFfJL/0JO+sKnF 2TkK01XDDJURK5Lhuvc7WrK2rSJ/fK+0GA== -----END PRIVATE KEY----- `, - cert: `-----BEGIN CERTIFICATE----- + cert: `-----BEGIN CERTIFICATE----- MIIEljCCAn4CCQDY+ZbC9FASVjANBgkqhkiG9w0BAQsFADANMQswCQYDVQQGEwJE RTAeFw0xOTA5MjAxNjAxNDRaFw0yMDA5MTkxNjAxNDRaMA0xCzAJBgNVBAYTAkRF MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA4thf9JEK/epoXt8hFr8t @@ -95,46 +96,89 @@ r8d9QwrK+WaqVi2ofbMfMByVF72jgeJNa4nxwT9bVbu/Q1T2Lt+YPb4pQ7yCoUgS JNj2Dr5H0XoLFFnvuvzcRbhlJ9J67JzR+7g= -----END CERTIFICATE----- ` - }, async (req, res) => { - console.log('got request'); - const destinationConfig = this.router.routeReq(req); - let destinationUrl: string; - if (destinationConfig) { - destinationUrl = `http://${destinationConfig.destinationIp}:${destinationConfig.destinationPort}${req.url}`; - } else { - res.writeHead(404); - res.end('This route is not available on this server\n'); - return; - } - console.log(destinationUrl); - const response = await plugins.smartrequest.request( - destinationUrl, - { - method: req.method, - headers: req.headers - }, - true, // lets make this streaming - (request) => { - req.on('data', data => { - request.write(data); - }); - req.on('end', data => { - request.end(); - }); + }, + async (req, res) => { + console.log('got request'); + const destinationConfig = this.router.routeReq(req); + + // endRequest function + const endRequest = ( + statusArg: number = 404, + messageArg: string = 'This route is not available on this server.', + headers: plugins.http.OutgoingHttpHeaders = {} + ) => { + res.writeHead(statusArg, messageArg); + res.end(messageArg); + }; + + // authentication + if (destinationConfig.authentication) { + const authInfo = destinationConfig.authentication; + switch (authInfo.type) { + case 'Basic': + const authHeader = req.headers.authorization; + if (authHeader) { + if (!authHeader.includes('Basic ')) { + return endRequest(401, 'Authentication required', { + 'WWW-Authenticate': 'Basic realm="Access to the staging site", charset="UTF-8"' + }); + } + const authStringBase64 = req.headers.authorization.replace('Basic ', ''); + const authString: string = plugins.smartstring.base64.decode(authStringBase64); + const userPassArray = authString.split(':'); + const user = userPassArray[0]; + const pass = userPassArray[1]; + if (user === authInfo.user && pass === authInfo.pass) { + console.log('request successfully authenticated'); + } else { + return endRequest(403, 'Forbidden: Wrong credentials'); + } + } + break; + default: + return endRequest( + 403, + 'Forbidden: unsupported authentication method configured. Please report to the admin.' + ); + } } - ); - res.statusCode = response.statusCode; - console.log(response.statusCode); - for (const header of Object.keys(response.headers)) { - res.setHeader(header, response.headers[header]); + + let destinationUrl: string; + if (destinationConfig) { + destinationUrl = `http://${destinationConfig.destinationIp}:${destinationConfig.destinationPort}${req.url}`; + } else { + return endRequest(); + } + console.log(destinationUrl); + const response = await plugins.smartrequest.request( + destinationUrl, + { + method: req.method, + headers: req.headers + }, + true, // lets make this streaming + request => { + req.on('data', data => { + request.write(data); + }); + req.on('end', data => { + request.end(); + }); + } + ); + res.statusCode = response.statusCode; + console.log(response.statusCode); + for (const header of Object.keys(response.headers)) { + res.setHeader(header, response.headers[header]); + } + response.on('data', data => { + res.write(data); + }); + response.on('end', () => { + res.end(); + }); } - response.on('data', data => { - res.write(data); - }); - response.on('end', () => { - res.end(); - }); - }); + ); // Enable websockets const wss = new plugins.ws.Server({ server: this.httpsServer }); @@ -188,7 +232,7 @@ JNj2Dr5H0XoLFFnvuvzcRbhlJ9J67JzR+7g= // console.log(hostCandidate); this.httpsServer.addContext(hostCandidate.hostName, { cert: hostCandidate.publicKey, - key: hostCandidate.privateKey, + key: hostCandidate.privateKey }); } /* this.httpsServer.close(); @@ -200,7 +244,7 @@ JNj2Dr5H0XoLFFnvuvzcRbhlJ9J67JzR+7g= this.httpsServer.close(() => { done.resolve(); }); - await this.socketMap.forEach(async (socket) => { + await this.socketMap.forEach(async socket => { socket.destroy(); }); await done.promise; diff --git a/ts/smartproxy.plugins.ts b/ts/smartproxy.plugins.ts index 285ddc0..0bbc055 100644 --- a/ts/smartproxy.plugins.ts +++ b/ts/smartproxy.plugins.ts @@ -16,9 +16,10 @@ import * as lik from '@pushrocks/lik'; import * as smartpromise from '@pushrocks/smartpromise'; import * as smartrequest from '@pushrocks/smartrequest'; import * as smartspawn from '@pushrocks/smartspawn'; +import * as smartstring from '@pushrocks/smartstring'; import * as smartsystem from '@pushrocks/smartsystem'; -export { lik, smartrequest, smartpromise, smartspawn, smartsystem }; +export { lik, smartrequest, smartpromise, smartspawn, smartstring, smartsystem }; // third party scope import * as ws from 'ws';