├── .gitignore ├── LICENSE ├── package.json ├── readme.md ├── safe.js └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /dist 4 | storybook-static 5 | 6 | # local env files 7 | .env.local 8 | .env.*.local 9 | 10 | # Log files 11 | npm-debug.log* 12 | yarn-debug.log* 13 | yarn-error.log* 14 | 15 | # Editor directories and files 16 | .idea 17 | .vscode 18 | *.suo 19 | *.ntvs* 20 | *.njsproj 21 | *.sln 22 | *.sw? 23 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Phoenix 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "safe-regex": "^2.1.1", 4 | "validator": "^13.1.1", 5 | "vuln-regex-detector": "^1.3.0" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | ## Using safe-regex to check your patterns 2 | 3 | 1. `npm i` 4 | 5 | 2. you should add your custom patterns in safe.js file, and in `patterns` object. 6 | 7 | 3. `node safe.js` 8 | 9 | 10 | ## Safe Patterns 11 | 12 | * en_label : 13 | `/^[a-zA-Z0-9-_ ]{0,250}$/` 14 | 15 | * unicode_label : 16 | `/^[\s\w\u0600-\u06FFs]{0,250}$/` 17 | 18 | * label : 19 | `/^[\s\w\u0600-\u06FFs]{0,250}$/` 20 | 21 | * publicKey : 22 | `/^[\s\d\w]{0,3000}$/` 23 | 24 | * description : 25 | `/^[\s\w\u0600-\u06FFs]{0,5000}$/` 26 | 27 | * email : 28 | `/^[\w-.]{1,50}@[\w-.]{1,50}\.[\w-.]{1,50}$/` 29 | 30 | * mobile : 31 | `/^((\+[0-9]{1,2})|0)9[0-9]{9}$/` 32 | 33 | * number : 34 | `/^[0-9]*$/` 35 | 36 | * complexWord : 37 | `/^[\s\d\w\u0600-\u06FFs_+=:!@#$%^&*()+.\/\/-]*$/` 38 | 39 | * password : 40 | `/^[\s\d\w\u0600-\u06FFs_+=:;!@#$%^&*()+<>,.\/-]{8,16}$/` 41 | 42 | * password16 : 43 | `/^[\s\d\w\u0600-\u06FFs_+=:;!@#$%^&*()+<>,.\/\/-]{16,32}$/` 44 | 45 | * passwordN : 46 | `/^[\s\d\w\u0600-\u06FFs_+=:;!@#$%^&*()+<>,.\/\/-]{8,}$/` 47 | 48 | * alphaNumeric : 49 | `/^[\w\d]+$/` 50 | 51 | * license : 52 | `/^[\w\d]{25}$/` 53 | 54 | * vpnHexKey : 55 | `/^[a-fA-F\d]{64}$/` 56 | 57 | * vpnHexIV : 58 | `/^[a-fA-F\d]{32}$/` 59 | 60 | * vpnPassword : 61 | `/^[A-Za-z0-9@#$%^&!+=]{8,16}$/` 62 | 63 | ## Un-Safe Patterns 64 | 65 | **Note:** Use Atomic group to solve this(or use `re2` or `validator.js`) 66 | 67 | * link : 68 | `/^(?:http(s)?:\/\/)?[\w.-]+(?:\.[\w\.-]+)+[\w\-\._~:/?#[\]@!\$&'\(\)\*\+,;=.]+$/` 69 | 70 | ## StackOverflow related Question 71 | 72 | https://stackoverflow.com/questions/63127145/safe-regex-patterns-from-redos-attack 73 | 74 | ## Resources 75 | 76 | https://regex101.com/ 77 | 78 | https://jex.im/regulex 79 | 80 | https://javascript.info/regexp-catastrophic-backtracking#preventing-backtracking 81 | 82 | https://www.smashingmagazine.com/2019/02/regexp-features-regular-expressions/ 83 | 84 | https://medium.com/swlh/exploiting-redos-d610e8ba531 85 | 86 | 87 | -------------------------------------------------------------------------------- /safe.js: -------------------------------------------------------------------------------- 1 | var safe = require('safe-regex'); 2 | // use atomic group to scape backtracking 3 | // var regex = process.argv.slice(2).join(' '); 4 | // console.log(safe(regex)); 5 | const showPatterns = (arr) => { 6 | arr.forEach(pattern => { 7 | // console.log("\r\n*", pattern[0], ":") 8 | // console.log(" `" + prepareRegexObject(pattern[1]) + "`") 9 | 10 | console.log("\r\n", pattern[0], "=>", "safe:", pattern[2]) 11 | console.log(prepareRegexObject(pattern[1]), "\r\n") 12 | }) 13 | } 14 | const prepareRegexObject = (p_text) => typeof p_text === "string" ? new RegExp(p_text) : p_text; 15 | const checkPatterns = (patterns_object) => { 16 | const safePatterns = []; 17 | const unSafePatterns = []; 18 | Object.entries(patterns_object).forEach(pattern => { 19 | if (safe(prepareRegexObject(pattern[1]))) { 20 | safePatterns.push([...pattern, true]) 21 | } else 22 | unSafePatterns.push([...pattern, false]) 23 | }) 24 | console.log("\r\n**********Safe Patterns*******\r\n") 25 | showPatterns(safePatterns); 26 | console.log("\r\n\r\n\r\n⚠⚠⚠⚠⚠ Un-Safe Patterns ⚠⚠⚠⚠⚠") 27 | showPatterns(unSafePatterns); 28 | } 29 | 30 | const patterns = { 31 | en_label: "^[a-zA-Z0-9-_ ]{0,250}$", 32 | unicode_label: "^[\\s\\w\\u0600-\\u06FFs]{0,250}$", 33 | label: "^[\\s\\w\\u0600-\\u06FFs]{0,250}$", 34 | 35 | publicKey: "^[\\s\\d\\w]{0,3000}$", 36 | 37 | description: "^[\\s\\w\\u0600-\\u06FFs]{0,5000}$", 38 | 39 | email: "^[\\w-.]{1,50}@[\\w-.]{1,50}\\.[\\w-.]{1,50}$", 40 | 41 | mobile: "^((\\+[0-9]{1,2})|0)9[0-9]{9}$", 42 | 43 | number: "^[0-9]*$", 44 | //^(?((ht|f)tp(s?):\/\/))?$ 45 | // 46 | link: /^(?:http(s)?:\/\/)?[\w.-]+(?:\.[\w\.-]+)+[\w\-\._~:/?#[\]@!\$&'\(\)\*\+,;=.]+$/, 47 | //^(?:(\d){1,5})?(\/)?([a-zA-Z0-9\-\.\?\,\'\/\\\+&%\$#_]*)?$ 48 | complexWord: "^[\\s\\d\\w\\u0600-\\u06FFs_+=:!@#$%^&*()+.\\/\\/-]*$", 49 | password: "^[\\s\\d\\w\\u0600-\\u06FFs_+=:;!@#$%^&*()+<>,.\\/-]{8,16}$", 50 | password16: 51 | "^[\\s\\d\\w\\u0600-\\u06FFs_+=:;!@#$%^&*()+<>,.\\/\\/-]{16,32}$", 52 | passwordN: "^[\\s\\d\\w\\u0600-\\u06FFs_+=:;!@#$%^&*()+<>,.\\/\\/-]{8,}$", 53 | alphaNumeric: /^[\w\d]+$/, 54 | license: "^[\\w\\d]{25}$", 55 | vpnHexKey: "^[a-fA-F\\d]{64}$", 56 | vpnHexIV: "^[a-fA-F\\d]{32}$", 57 | vpnPassword: "^[A-Za-z0-9@#$%^&!+=]{8,16}$" 58 | }; 59 | checkPatterns(patterns) 60 | // var validator = require('validator'); 61 | 62 | // validator.isEmail('foo@bar.com'); //=> true 63 | 64 | // const result = validator.isURL("https://emm-develop.pho`enix.mahsan.net/") 65 | // console.log(result); 66 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@types/concat-stream@^1.6.0": 6 | version "1.6.0" 7 | resolved "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.0.tgz#394dbe0bb5fee46b38d896735e8b68ef2390d00d" 8 | integrity sha1-OU2+C7X+5Gs42JZzXoto7yOQ0A0= 9 | dependencies: 10 | "@types/node" "*" 11 | 12 | "@types/form-data@0.0.33": 13 | version "0.0.33" 14 | resolved "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz#c9ac85b2a5fd18435b8c85d9ecb50e6d6c893ff8" 15 | integrity sha1-yayFsqX9GENbjIXZ7LUObWyJP/g= 16 | dependencies: 17 | "@types/node" "*" 18 | 19 | "@types/node@*": 20 | version "14.0.27" 21 | resolved "https://registry.npmjs.org/@types/node/-/node-14.0.27.tgz#a151873af5a5e851b51b3b065c9e63390a9e0eb1" 22 | integrity sha512-kVrqXhbclHNHGu9ztnAwSncIgJv/FaxmzXJvGXNdcCpV1b8u1/Mi6z6m0vwy0LzKeXFTPLH0NzwmoJ3fNCIq0g== 23 | 24 | "@types/node@^10.0.3": 25 | version "10.17.28" 26 | resolved "https://registry.npmjs.org/@types/node/-/node-10.17.28.tgz#0e36d718a29355ee51cec83b42d921299200f6d9" 27 | integrity sha512-dzjES1Egb4c1a89C7lKwQh8pwjYmlOAG9dW1pBgxEk57tMrLnssOfEthz8kdkNaBd7lIqQx7APm5+mZ619IiCQ== 28 | 29 | "@types/node@^8.0.0": 30 | version "8.10.62" 31 | resolved "https://registry.npmjs.org/@types/node/-/node-8.10.62.tgz#8d0d0db44a46ae7679d92e2e36d41bf1c3625d6a" 32 | integrity sha512-76fupxOYVxk36kb7O/6KtrAPZ9jnSK3+qisAX4tQMEuGNdlvl7ycwatlHqjoE6jHfVtXFM3pCrCixZOidc5cuw== 33 | 34 | "@types/qs@^6.2.31": 35 | version "6.9.4" 36 | resolved "https://registry.npmjs.org/@types/qs/-/qs-6.9.4.tgz#a59e851c1ba16c0513ea123830dd639a0a15cb6a" 37 | integrity sha512-+wYo+L6ZF6BMoEjtf8zB2esQsqdV6WsjRK/GP9WOgLPrq87PbNWgIxS76dS5uvl/QXtHGakZmwTznIfcPXcKlQ== 38 | 39 | asap@~2.0.6: 40 | version "2.0.6" 41 | resolved "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" 42 | integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= 43 | 44 | asynckit@^0.4.0: 45 | version "0.4.0" 46 | resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 47 | integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= 48 | 49 | buffer-from@^1.0.0: 50 | version "1.1.1" 51 | resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" 52 | integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== 53 | 54 | caseless@^0.12.0, caseless@~0.12.0: 55 | version "0.12.0" 56 | resolved "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" 57 | integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= 58 | 59 | combined-stream@^1.0.6: 60 | version "1.0.8" 61 | resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" 62 | integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== 63 | dependencies: 64 | delayed-stream "~1.0.0" 65 | 66 | concat-stream@^1.6.0, concat-stream@^1.6.2: 67 | version "1.6.2" 68 | resolved "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" 69 | integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== 70 | dependencies: 71 | buffer-from "^1.0.0" 72 | inherits "^2.0.3" 73 | readable-stream "^2.2.2" 74 | typedarray "^0.0.6" 75 | 76 | core-util-is@~1.0.0: 77 | version "1.0.2" 78 | resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 79 | integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= 80 | 81 | delayed-stream@~1.0.0: 82 | version "1.0.0" 83 | resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 84 | integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= 85 | 86 | form-data@^2.2.0: 87 | version "2.5.1" 88 | resolved "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz#f2cbec57b5e59e23716e128fe44d4e5dd23895f4" 89 | integrity sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA== 90 | dependencies: 91 | asynckit "^0.4.0" 92 | combined-stream "^1.0.6" 93 | mime-types "^2.1.12" 94 | 95 | get-port@^3.1.0: 96 | version "3.2.0" 97 | resolved "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz#dd7ce7de187c06c8bf353796ac71e099f0980ebc" 98 | integrity sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw= 99 | 100 | http-basic@^8.1.1: 101 | version "8.1.3" 102 | resolved "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz#a7cabee7526869b9b710136970805b1004261bbf" 103 | integrity sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw== 104 | dependencies: 105 | caseless "^0.12.0" 106 | concat-stream "^1.6.2" 107 | http-response-object "^3.0.1" 108 | parse-cache-control "^1.0.1" 109 | 110 | http-response-object@^3.0.1: 111 | version "3.0.2" 112 | resolved "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz#7f435bb210454e4360d074ef1f989d5ea8aa9810" 113 | integrity sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA== 114 | dependencies: 115 | "@types/node" "^10.0.3" 116 | 117 | inherits@^2.0.3, inherits@~2.0.3: 118 | version "2.0.4" 119 | resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 120 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 121 | 122 | isarray@~1.0.0: 123 | version "1.0.0" 124 | resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 125 | integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= 126 | 127 | mime-db@1.44.0: 128 | version "1.44.0" 129 | resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" 130 | integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== 131 | 132 | mime-types@^2.1.12: 133 | version "2.1.27" 134 | resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" 135 | integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== 136 | dependencies: 137 | mime-db "1.44.0" 138 | 139 | parse-cache-control@^1.0.1: 140 | version "1.0.1" 141 | resolved "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz#8eeab3e54fa56920fe16ba38f77fa21aacc2d74e" 142 | integrity sha1-juqz5U+laSD+Fro493+iGqzC104= 143 | 144 | process-nextick-args@~2.0.0: 145 | version "2.0.1" 146 | resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" 147 | integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== 148 | 149 | promise@^8.0.0: 150 | version "8.1.0" 151 | resolved "https://registry.npmjs.org/promise/-/promise-8.1.0.tgz#697c25c3dfe7435dd79fcd58c38a135888eaf05e" 152 | integrity sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q== 153 | dependencies: 154 | asap "~2.0.6" 155 | 156 | qs@^6.4.0: 157 | version "6.9.4" 158 | resolved "https://registry.npmjs.org/qs/-/qs-6.9.4.tgz#9090b290d1f91728d3c22e54843ca44aea5ab687" 159 | integrity sha512-A1kFqHekCTM7cz0udomYUoYNWjBebHm/5wzU/XqrBRBNWectVH0QIiN+NEcZ0Dte5hvzHwbr8+XQmguPhJ6WdQ== 160 | 161 | readable-stream@^2.2.2: 162 | version "2.3.7" 163 | resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" 164 | integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== 165 | dependencies: 166 | core-util-is "~1.0.0" 167 | inherits "~2.0.3" 168 | isarray "~1.0.0" 169 | process-nextick-args "~2.0.0" 170 | safe-buffer "~5.1.1" 171 | string_decoder "~1.1.1" 172 | util-deprecate "~1.0.1" 173 | 174 | regexp-tree@~0.1.1: 175 | version "0.1.21" 176 | resolved "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.21.tgz#55e2246b7f7d36f1b461490942fa780299c400d7" 177 | integrity sha512-kUUXjX4AnqnR8KRTCrayAo9PzYMRKmVoGgaz2tBuz0MF3g1ZbGebmtW0yFHfFK9CmBjQKeYIgoL22pFLBJY7sw== 178 | 179 | safe-buffer@~5.1.0, safe-buffer@~5.1.1: 180 | version "5.1.2" 181 | resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 182 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== 183 | 184 | safe-regex@^2.1.1: 185 | version "2.1.1" 186 | resolved "https://registry.npmjs.org/safe-regex/-/safe-regex-2.1.1.tgz#f7128f00d056e2fe5c11e81a1324dd974aadced2" 187 | integrity sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A== 188 | dependencies: 189 | regexp-tree "~0.1.1" 190 | 191 | string_decoder@~1.1.1: 192 | version "1.1.1" 193 | resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" 194 | integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== 195 | dependencies: 196 | safe-buffer "~5.1.0" 197 | 198 | sync-request@^6.0.0: 199 | version "6.1.0" 200 | resolved "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz#e96217565b5e50bbffe179868ba75532fb597e68" 201 | integrity sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw== 202 | dependencies: 203 | http-response-object "^3.0.1" 204 | sync-rpc "^1.2.1" 205 | then-request "^6.0.0" 206 | 207 | sync-rpc@^1.2.1: 208 | version "1.3.6" 209 | resolved "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz#b2e8b2550a12ccbc71df8644810529deb68665a7" 210 | integrity sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw== 211 | dependencies: 212 | get-port "^3.1.0" 213 | 214 | then-request@^6.0.0: 215 | version "6.0.2" 216 | resolved "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz#ec18dd8b5ca43aaee5cb92f7e4c1630e950d4f0c" 217 | integrity sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA== 218 | dependencies: 219 | "@types/concat-stream" "^1.6.0" 220 | "@types/form-data" "0.0.33" 221 | "@types/node" "^8.0.0" 222 | "@types/qs" "^6.2.31" 223 | caseless "~0.12.0" 224 | concat-stream "^1.6.0" 225 | form-data "^2.2.0" 226 | http-basic "^8.1.1" 227 | http-response-object "^3.0.1" 228 | promise "^8.0.0" 229 | qs "^6.4.0" 230 | 231 | typedarray@^0.0.6: 232 | version "0.0.6" 233 | resolved "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" 234 | integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= 235 | 236 | util-deprecate@~1.0.1: 237 | version "1.0.2" 238 | resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 239 | integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= 240 | 241 | validator@^13.1.1: 242 | version "13.1.1" 243 | resolved "https://registry.npmjs.org/validator/-/validator-13.1.1.tgz#f8811368473d2173a9d8611572b58c5783f223bf" 244 | integrity sha512-8GfPiwzzRoWTg7OV1zva1KvrSemuMkv07MA9TTl91hfhe+wKrsrgVN4H2QSFd/U/FhiU3iWPYVgvbsOGwhyFWw== 245 | 246 | vuln-regex-detector@^1.3.0: 247 | version "1.3.0" 248 | resolved "https://registry.npmjs.org/vuln-regex-detector/-/vuln-regex-detector-1.3.0.tgz#322abb611b06d2277588852e7ce2e88dccad03ae" 249 | integrity sha512-QWm8buVznZjdcfMuFHYsiNfHd0YQ7dO41G0iEGVPlUng5eZUo8uy+QsVCmbgVZ2b96xprY1Tz9dQD7QtvbFHXw== 250 | dependencies: 251 | sync-request "^6.0.0" 252 | --------------------------------------------------------------------------------