├── README.md └── website ├── app.js ├── package-lock.json ├── package.json └── views ├── result.pug └── verify.pug /README.md: -------------------------------------------------------------------------------- 1 | # TypingDNA-Verify-API-Tutorial 2 | The code base for the tutorial on how to use the TypingDNA Verify API 3 | 4 | ## Resources 5 | 6 | - [TypingDNA Website](https://www.typingdna.com/) 7 | 8 | - [TypingDNA Verify Docs](https://verify.typingdna.com/docs/) 9 | 10 | ## Installing Dependencies 11 | 12 | - Install [Node.js](https://nodejs.org/en/) 13 | 14 | - Install [ngrok](https://ngrok.com/) 15 | 16 | ## Running The App 17 | 18 | - `git clone ` 19 | 20 | - `cd ` 21 | 22 | - `cd website` 23 | 24 | - `npm install` 25 | 26 | - `node app.js` 27 | 28 | - `ngrok http 3000` 29 | 30 | ## VerifyAPI Settings 31 | 32 | - Create an account on [TypingDNA](https://www.typingdna.com/) 33 | 34 | - Go to the dashboard 35 | 36 | - Select Verify API 37 | 38 | - Find `clientId` and `clientSecret` and make a note of them 39 | 40 | - Connect SendGrid 41 | 42 | - Create a new integration and take note of the `applicationId` 43 | 44 | - Modify the credentials in `app.js` to match what you just found/created 45 | 46 | - Change the email in `app.js` to your email 47 | 48 | - Navigate to the https url generated by ngrok 49 | -------------------------------------------------------------------------------- /website/app.js: -------------------------------------------------------------------------------- 1 | var express = require("express"); 2 | var path = require("path"); 3 | var app = express(); 4 | var router = express.Router(); 5 | var typingDnaVerifyClient = require("typingdna-verify-client"); 6 | 7 | var typingDnaClient = new typingDnaVerifyClient({ 8 | clientId: "", // fill in 9 | secret: "", // fill in 10 | applicationId: "", // fill in 11 | }); 12 | 13 | // view engine setup 14 | app.set("views", path.join(__dirname, "views")); 15 | app.set("view engine", "pug"); 16 | 17 | router.get("/verify", (req, res) => { 18 | const typingDnaDataAttributes = typingDnaClient.getDataAttributes({ 19 | email: "", // fill in 20 | phone: "", 21 | language: "EN", 22 | mode: "standard", 23 | }); 24 | res.render("verify", typingDnaDataAttributes); 25 | }); 26 | 27 | router.get("/result", (req, res) => { 28 | const otp = req.query.otp; 29 | const success = req.query.success; 30 | 31 | typingDnaClient 32 | .validateOTP({ email: "", phoneNumber: "" }, otp) // fill in 33 | .then((data) => { 34 | res.render("result", { 35 | otp: otp, 36 | success: success, 37 | message: data.message, 38 | }); 39 | }) 40 | .catch((e) => 41 | res.render("result", { 42 | otp: otp, 43 | success: success, 44 | message: e, 45 | }) 46 | ); 47 | }); 48 | 49 | app.use("/", router); 50 | app.listen(3000); 51 | 52 | console.log("Listening on port 3000"); 53 | -------------------------------------------------------------------------------- /website/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "website", 3 | "version": "0.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@babel/helper-validator-identifier": { 8 | "version": "7.14.5", 9 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", 10 | "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==" 11 | }, 12 | "@babel/parser": { 13 | "version": "7.14.7", 14 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", 15 | "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==" 16 | }, 17 | "@babel/types": { 18 | "version": "7.14.5", 19 | "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", 20 | "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", 21 | "requires": { 22 | "@babel/helper-validator-identifier": "^7.14.5", 23 | "to-fast-properties": "^2.0.0" 24 | } 25 | }, 26 | "accepts": { 27 | "version": "1.3.7", 28 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", 29 | "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", 30 | "requires": { 31 | "mime-types": "~2.1.24", 32 | "negotiator": "0.6.2" 33 | } 34 | }, 35 | "acorn": { 36 | "version": "2.7.0", 37 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-2.7.0.tgz", 38 | "integrity": "sha1-q259nYhqrKiwhbwzEreaGYQz8Oc=" 39 | }, 40 | "acorn-globals": { 41 | "version": "1.0.9", 42 | "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-1.0.9.tgz", 43 | "integrity": "sha1-VbtemGkVB7dFedBRNBMhfDgMVM8=", 44 | "requires": { 45 | "acorn": "^2.1.0" 46 | } 47 | }, 48 | "align-text": { 49 | "version": "0.1.4", 50 | "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", 51 | "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", 52 | "requires": { 53 | "kind-of": "^3.0.2", 54 | "longest": "^1.0.1", 55 | "repeat-string": "^1.5.2" 56 | } 57 | }, 58 | "amdefine": { 59 | "version": "1.0.1", 60 | "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", 61 | "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=" 62 | }, 63 | "array-flatten": { 64 | "version": "1.1.1", 65 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 66 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" 67 | }, 68 | "asap": { 69 | "version": "1.0.0", 70 | "resolved": "https://registry.npmjs.org/asap/-/asap-1.0.0.tgz", 71 | "integrity": "sha1-sqRdpf36ILBJb8N2jMJ8EvqRan0=" 72 | }, 73 | "assert-never": { 74 | "version": "1.2.1", 75 | "resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.2.1.tgz", 76 | "integrity": "sha512-TaTivMB6pYI1kXwrFlEhLeGfOqoDNdTxjCdwRfFFkEA30Eu+k48W34nlok2EYWJfFFzqaEmichdNM7th6M5HNw==" 77 | }, 78 | "babel-walk": { 79 | "version": "3.0.0-canary-5", 80 | "resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz", 81 | "integrity": "sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==", 82 | "requires": { 83 | "@babel/types": "^7.9.6" 84 | } 85 | }, 86 | "body-parser": { 87 | "version": "1.18.3", 88 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", 89 | "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", 90 | "requires": { 91 | "bytes": "3.0.0", 92 | "content-type": "~1.0.4", 93 | "debug": "2.6.9", 94 | "depd": "~1.1.2", 95 | "http-errors": "~1.6.3", 96 | "iconv-lite": "0.4.23", 97 | "on-finished": "~2.3.0", 98 | "qs": "6.5.2", 99 | "raw-body": "2.3.3", 100 | "type-is": "~1.6.16" 101 | } 102 | }, 103 | "bytes": { 104 | "version": "3.0.0", 105 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", 106 | "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" 107 | }, 108 | "call-bind": { 109 | "version": "1.0.2", 110 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", 111 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", 112 | "requires": { 113 | "function-bind": "^1.1.1", 114 | "get-intrinsic": "^1.0.2" 115 | } 116 | }, 117 | "camelcase": { 118 | "version": "1.2.1", 119 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", 120 | "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=" 121 | }, 122 | "center-align": { 123 | "version": "0.1.3", 124 | "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", 125 | "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", 126 | "requires": { 127 | "align-text": "^0.1.3", 128 | "lazy-cache": "^1.0.3" 129 | } 130 | }, 131 | "character-parser": { 132 | "version": "1.2.1", 133 | "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-1.2.1.tgz", 134 | "integrity": "sha1-wN3kqxgnE7kZuXCVmhI+zBow/NY=" 135 | }, 136 | "clean-css": { 137 | "version": "3.4.28", 138 | "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-3.4.28.tgz", 139 | "integrity": "sha1-vxlF6C/ICPVWlebd6uwBQA79A/8=", 140 | "requires": { 141 | "commander": "2.8.x", 142 | "source-map": "0.4.x" 143 | }, 144 | "dependencies": { 145 | "commander": { 146 | "version": "2.8.1", 147 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", 148 | "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", 149 | "requires": { 150 | "graceful-readlink": ">= 1.0.0" 151 | } 152 | } 153 | } 154 | }, 155 | "cliui": { 156 | "version": "2.1.0", 157 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", 158 | "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", 159 | "requires": { 160 | "center-align": "^0.1.1", 161 | "right-align": "^0.1.1", 162 | "wordwrap": "0.0.2" 163 | }, 164 | "dependencies": { 165 | "wordwrap": { 166 | "version": "0.0.2", 167 | "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", 168 | "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=" 169 | } 170 | } 171 | }, 172 | "commander": { 173 | "version": "2.6.0", 174 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.6.0.tgz", 175 | "integrity": "sha1-nfflL7Kgyw+4kFjugMMQQiXzfh0=" 176 | }, 177 | "constantinople": { 178 | "version": "3.0.2", 179 | "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-3.0.2.tgz", 180 | "integrity": "sha1-S5RdmTeQe82Y7ldRIsOBdRZUQUE=", 181 | "requires": { 182 | "acorn": "^2.1.0" 183 | } 184 | }, 185 | "content-disposition": { 186 | "version": "0.5.2", 187 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", 188 | "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" 189 | }, 190 | "content-type": { 191 | "version": "1.0.4", 192 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", 193 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" 194 | }, 195 | "cookie": { 196 | "version": "0.3.1", 197 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", 198 | "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" 199 | }, 200 | "cookie-signature": { 201 | "version": "1.0.6", 202 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 203 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" 204 | }, 205 | "css": { 206 | "version": "1.0.8", 207 | "resolved": "https://registry.npmjs.org/css/-/css-1.0.8.tgz", 208 | "integrity": "sha1-k4aBHKgrzMnuf7WnMrHioxfIo+c=", 209 | "requires": { 210 | "css-parse": "1.0.4", 211 | "css-stringify": "1.0.5" 212 | } 213 | }, 214 | "css-parse": { 215 | "version": "1.0.4", 216 | "resolved": "https://registry.npmjs.org/css-parse/-/css-parse-1.0.4.tgz", 217 | "integrity": "sha1-OLBQP7+dqfVOnB29pg4UXHcRe90=" 218 | }, 219 | "css-stringify": { 220 | "version": "1.0.5", 221 | "resolved": "https://registry.npmjs.org/css-stringify/-/css-stringify-1.0.5.tgz", 222 | "integrity": "sha1-sNBClG2ylTu50pKQCmy19tASIDE=" 223 | }, 224 | "debug": { 225 | "version": "2.6.9", 226 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 227 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 228 | "requires": { 229 | "ms": "2.0.0" 230 | } 231 | }, 232 | "decamelize": { 233 | "version": "1.2.0", 234 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", 235 | "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" 236 | }, 237 | "depd": { 238 | "version": "1.1.2", 239 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", 240 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" 241 | }, 242 | "destroy": { 243 | "version": "1.0.4", 244 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", 245 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" 246 | }, 247 | "doctypes": { 248 | "version": "1.1.0", 249 | "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", 250 | "integrity": "sha1-6oCxBqh1OHdOijpKWv4pPeSJ4Kk=" 251 | }, 252 | "ee-first": { 253 | "version": "1.1.1", 254 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 255 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" 256 | }, 257 | "encodeurl": { 258 | "version": "1.0.2", 259 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 260 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" 261 | }, 262 | "escape-html": { 263 | "version": "1.0.3", 264 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 265 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" 266 | }, 267 | "etag": { 268 | "version": "1.8.1", 269 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 270 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" 271 | }, 272 | "express": { 273 | "version": "4.16.4", 274 | "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", 275 | "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", 276 | "requires": { 277 | "accepts": "~1.3.5", 278 | "array-flatten": "1.1.1", 279 | "body-parser": "1.18.3", 280 | "content-disposition": "0.5.2", 281 | "content-type": "~1.0.4", 282 | "cookie": "0.3.1", 283 | "cookie-signature": "1.0.6", 284 | "debug": "2.6.9", 285 | "depd": "~1.1.2", 286 | "encodeurl": "~1.0.2", 287 | "escape-html": "~1.0.3", 288 | "etag": "~1.8.1", 289 | "finalhandler": "1.1.1", 290 | "fresh": "0.5.2", 291 | "merge-descriptors": "1.0.1", 292 | "methods": "~1.1.2", 293 | "on-finished": "~2.3.0", 294 | "parseurl": "~1.3.2", 295 | "path-to-regexp": "0.1.7", 296 | "proxy-addr": "~2.0.4", 297 | "qs": "6.5.2", 298 | "range-parser": "~1.2.0", 299 | "safe-buffer": "5.1.2", 300 | "send": "0.16.2", 301 | "serve-static": "1.13.2", 302 | "setprototypeof": "1.1.0", 303 | "statuses": "~1.4.0", 304 | "type-is": "~1.6.16", 305 | "utils-merge": "1.0.1", 306 | "vary": "~1.1.2" 307 | } 308 | }, 309 | "finalhandler": { 310 | "version": "1.1.1", 311 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", 312 | "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", 313 | "requires": { 314 | "debug": "2.6.9", 315 | "encodeurl": "~1.0.2", 316 | "escape-html": "~1.0.3", 317 | "on-finished": "~2.3.0", 318 | "parseurl": "~1.3.2", 319 | "statuses": "~1.4.0", 320 | "unpipe": "~1.0.0" 321 | } 322 | }, 323 | "forwarded": { 324 | "version": "0.2.0", 325 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", 326 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" 327 | }, 328 | "fresh": { 329 | "version": "0.5.2", 330 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 331 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" 332 | }, 333 | "function-bind": { 334 | "version": "1.1.1", 335 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 336 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 337 | }, 338 | "get-intrinsic": { 339 | "version": "1.1.1", 340 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", 341 | "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", 342 | "requires": { 343 | "function-bind": "^1.1.1", 344 | "has": "^1.0.3", 345 | "has-symbols": "^1.0.1" 346 | } 347 | }, 348 | "graceful-readlink": { 349 | "version": "1.0.1", 350 | "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", 351 | "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=" 352 | }, 353 | "has": { 354 | "version": "1.0.3", 355 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 356 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 357 | "requires": { 358 | "function-bind": "^1.1.1" 359 | } 360 | }, 361 | "has-symbols": { 362 | "version": "1.0.2", 363 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", 364 | "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" 365 | }, 366 | "http-errors": { 367 | "version": "1.6.3", 368 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", 369 | "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", 370 | "requires": { 371 | "depd": "~1.1.2", 372 | "inherits": "2.0.3", 373 | "setprototypeof": "1.1.0", 374 | "statuses": ">= 1.4.0 < 2" 375 | } 376 | }, 377 | "iconv-lite": { 378 | "version": "0.4.23", 379 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", 380 | "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", 381 | "requires": { 382 | "safer-buffer": ">= 2.1.2 < 3" 383 | } 384 | }, 385 | "inherits": { 386 | "version": "2.0.3", 387 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 388 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" 389 | }, 390 | "ipaddr.js": { 391 | "version": "1.9.1", 392 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", 393 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" 394 | }, 395 | "is-buffer": { 396 | "version": "1.1.6", 397 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", 398 | "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" 399 | }, 400 | "is-core-module": { 401 | "version": "2.4.0", 402 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", 403 | "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", 404 | "requires": { 405 | "has": "^1.0.3" 406 | } 407 | }, 408 | "is-expression": { 409 | "version": "4.0.0", 410 | "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz", 411 | "integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==", 412 | "requires": { 413 | "acorn": "^7.1.1", 414 | "object-assign": "^4.1.1" 415 | }, 416 | "dependencies": { 417 | "acorn": { 418 | "version": "7.4.1", 419 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", 420 | "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" 421 | } 422 | } 423 | }, 424 | "is-promise": { 425 | "version": "2.2.2", 426 | "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", 427 | "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==" 428 | }, 429 | "is-regex": { 430 | "version": "1.1.3", 431 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", 432 | "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", 433 | "requires": { 434 | "call-bind": "^1.0.2", 435 | "has-symbols": "^1.0.2" 436 | } 437 | }, 438 | "jade": { 439 | "version": "1.11.0", 440 | "resolved": "https://registry.npmjs.org/jade/-/jade-1.11.0.tgz", 441 | "integrity": "sha1-nIDlOMEtP7lcjZu5VZ+gzAQEBf0=", 442 | "requires": { 443 | "character-parser": "1.2.1", 444 | "clean-css": "^3.1.9", 445 | "commander": "~2.6.0", 446 | "constantinople": "~3.0.1", 447 | "jstransformer": "0.0.2", 448 | "mkdirp": "~0.5.0", 449 | "transformers": "2.1.0", 450 | "uglify-js": "^2.4.19", 451 | "void-elements": "~2.0.1", 452 | "with": "~4.0.0" 453 | } 454 | }, 455 | "js-stringify": { 456 | "version": "1.0.2", 457 | "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", 458 | "integrity": "sha1-Fzb939lyTyijaCrcYjCufk6Weds=" 459 | }, 460 | "jstransformer": { 461 | "version": "0.0.2", 462 | "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-0.0.2.tgz", 463 | "integrity": "sha1-eq4pqQPRls+glz2IXT5HlH7Ndqs=", 464 | "requires": { 465 | "is-promise": "^2.0.0", 466 | "promise": "^6.0.1" 467 | } 468 | }, 469 | "kind-of": { 470 | "version": "3.2.2", 471 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 472 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 473 | "requires": { 474 | "is-buffer": "^1.1.5" 475 | } 476 | }, 477 | "lazy-cache": { 478 | "version": "1.0.4", 479 | "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", 480 | "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=" 481 | }, 482 | "longest": { 483 | "version": "1.0.1", 484 | "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", 485 | "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=" 486 | }, 487 | "media-typer": { 488 | "version": "0.3.0", 489 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 490 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" 491 | }, 492 | "merge-descriptors": { 493 | "version": "1.0.1", 494 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 495 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" 496 | }, 497 | "methods": { 498 | "version": "1.1.2", 499 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 500 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" 501 | }, 502 | "mime": { 503 | "version": "1.4.1", 504 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", 505 | "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" 506 | }, 507 | "mime-db": { 508 | "version": "1.48.0", 509 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz", 510 | "integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==" 511 | }, 512 | "mime-types": { 513 | "version": "2.1.31", 514 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz", 515 | "integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==", 516 | "requires": { 517 | "mime-db": "1.48.0" 518 | } 519 | }, 520 | "minimist": { 521 | "version": "1.2.5", 522 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", 523 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" 524 | }, 525 | "mkdirp": { 526 | "version": "0.5.5", 527 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", 528 | "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", 529 | "requires": { 530 | "minimist": "^1.2.5" 531 | } 532 | }, 533 | "ms": { 534 | "version": "2.0.0", 535 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 536 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 537 | }, 538 | "negotiator": { 539 | "version": "0.6.2", 540 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", 541 | "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" 542 | }, 543 | "object-assign": { 544 | "version": "4.1.1", 545 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 546 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" 547 | }, 548 | "on-finished": { 549 | "version": "2.3.0", 550 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", 551 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", 552 | "requires": { 553 | "ee-first": "1.1.1" 554 | } 555 | }, 556 | "optimist": { 557 | "version": "0.3.7", 558 | "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz", 559 | "integrity": "sha1-yQlBrVnkJzMokjB00s8ufLxuwNk=", 560 | "requires": { 561 | "wordwrap": "~0.0.2" 562 | } 563 | }, 564 | "parseurl": { 565 | "version": "1.3.3", 566 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 567 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" 568 | }, 569 | "path-parse": { 570 | "version": "1.0.7", 571 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 572 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" 573 | }, 574 | "path-to-regexp": { 575 | "version": "0.1.7", 576 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 577 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" 578 | }, 579 | "promise": { 580 | "version": "6.1.0", 581 | "resolved": "https://registry.npmjs.org/promise/-/promise-6.1.0.tgz", 582 | "integrity": "sha1-LOcp9rlLRcJoka0GAsXJDgTG7vY=", 583 | "requires": { 584 | "asap": "~1.0.0" 585 | } 586 | }, 587 | "proxy-addr": { 588 | "version": "2.0.7", 589 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", 590 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", 591 | "requires": { 592 | "forwarded": "0.2.0", 593 | "ipaddr.js": "1.9.1" 594 | } 595 | }, 596 | "pug": { 597 | "version": "3.0.2", 598 | "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.2.tgz", 599 | "integrity": "sha512-bp0I/hiK1D1vChHh6EfDxtndHji55XP/ZJKwsRqrz6lRia6ZC2OZbdAymlxdVFwd1L70ebrVJw4/eZ79skrIaw==", 600 | "requires": { 601 | "pug-code-gen": "^3.0.2", 602 | "pug-filters": "^4.0.0", 603 | "pug-lexer": "^5.0.1", 604 | "pug-linker": "^4.0.0", 605 | "pug-load": "^3.0.0", 606 | "pug-parser": "^6.0.0", 607 | "pug-runtime": "^3.0.1", 608 | "pug-strip-comments": "^2.0.0" 609 | } 610 | }, 611 | "pug-attrs": { 612 | "version": "3.0.0", 613 | "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz", 614 | "integrity": "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==", 615 | "requires": { 616 | "constantinople": "^4.0.1", 617 | "js-stringify": "^1.0.2", 618 | "pug-runtime": "^3.0.0" 619 | }, 620 | "dependencies": { 621 | "constantinople": { 622 | "version": "4.0.1", 623 | "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz", 624 | "integrity": "sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==", 625 | "requires": { 626 | "@babel/parser": "^7.6.0", 627 | "@babel/types": "^7.6.1" 628 | } 629 | } 630 | } 631 | }, 632 | "pug-code-gen": { 633 | "version": "3.0.2", 634 | "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.2.tgz", 635 | "integrity": "sha512-nJMhW16MbiGRiyR4miDTQMRWDgKplnHyeLvioEJYbk1RsPI3FuA3saEP8uwnTb2nTJEKBU90NFVWJBk4OU5qyg==", 636 | "requires": { 637 | "constantinople": "^4.0.1", 638 | "doctypes": "^1.1.0", 639 | "js-stringify": "^1.0.2", 640 | "pug-attrs": "^3.0.0", 641 | "pug-error": "^2.0.0", 642 | "pug-runtime": "^3.0.0", 643 | "void-elements": "^3.1.0", 644 | "with": "^7.0.0" 645 | }, 646 | "dependencies": { 647 | "constantinople": { 648 | "version": "4.0.1", 649 | "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz", 650 | "integrity": "sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==", 651 | "requires": { 652 | "@babel/parser": "^7.6.0", 653 | "@babel/types": "^7.6.1" 654 | } 655 | }, 656 | "void-elements": { 657 | "version": "3.1.0", 658 | "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", 659 | "integrity": "sha1-YU9/v42AHwu18GYfWy9XhXUOTwk=" 660 | }, 661 | "with": { 662 | "version": "7.0.2", 663 | "resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz", 664 | "integrity": "sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==", 665 | "requires": { 666 | "@babel/parser": "^7.9.6", 667 | "@babel/types": "^7.9.6", 668 | "assert-never": "^1.2.1", 669 | "babel-walk": "3.0.0-canary-5" 670 | } 671 | } 672 | } 673 | }, 674 | "pug-error": { 675 | "version": "2.0.0", 676 | "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.0.0.tgz", 677 | "integrity": "sha512-sjiUsi9M4RAGHktC1drQfCr5C5eriu24Lfbt4s+7SykztEOwVZtbFk1RRq0tzLxcMxMYTBR+zMQaG07J/btayQ==" 678 | }, 679 | "pug-filters": { 680 | "version": "4.0.0", 681 | "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz", 682 | "integrity": "sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==", 683 | "requires": { 684 | "constantinople": "^4.0.1", 685 | "jstransformer": "1.0.0", 686 | "pug-error": "^2.0.0", 687 | "pug-walk": "^2.0.0", 688 | "resolve": "^1.15.1" 689 | }, 690 | "dependencies": { 691 | "asap": { 692 | "version": "2.0.6", 693 | "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", 694 | "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" 695 | }, 696 | "constantinople": { 697 | "version": "4.0.1", 698 | "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz", 699 | "integrity": "sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==", 700 | "requires": { 701 | "@babel/parser": "^7.6.0", 702 | "@babel/types": "^7.6.1" 703 | } 704 | }, 705 | "jstransformer": { 706 | "version": "1.0.0", 707 | "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", 708 | "integrity": "sha1-7Yvwkh4vPx7U1cGkT2hwntJHIsM=", 709 | "requires": { 710 | "is-promise": "^2.0.0", 711 | "promise": "^7.0.1" 712 | } 713 | }, 714 | "promise": { 715 | "version": "7.3.1", 716 | "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", 717 | "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", 718 | "requires": { 719 | "asap": "~2.0.3" 720 | } 721 | } 722 | } 723 | }, 724 | "pug-lexer": { 725 | "version": "5.0.1", 726 | "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz", 727 | "integrity": "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==", 728 | "requires": { 729 | "character-parser": "^2.2.0", 730 | "is-expression": "^4.0.0", 731 | "pug-error": "^2.0.0" 732 | }, 733 | "dependencies": { 734 | "character-parser": { 735 | "version": "2.2.0", 736 | "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", 737 | "integrity": "sha1-x84o821LzZdE5f/CxfzeHHMmH8A=", 738 | "requires": { 739 | "is-regex": "^1.0.3" 740 | } 741 | } 742 | } 743 | }, 744 | "pug-linker": { 745 | "version": "4.0.0", 746 | "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz", 747 | "integrity": "sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==", 748 | "requires": { 749 | "pug-error": "^2.0.0", 750 | "pug-walk": "^2.0.0" 751 | } 752 | }, 753 | "pug-load": { 754 | "version": "3.0.0", 755 | "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz", 756 | "integrity": "sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==", 757 | "requires": { 758 | "object-assign": "^4.1.1", 759 | "pug-walk": "^2.0.0" 760 | } 761 | }, 762 | "pug-parser": { 763 | "version": "6.0.0", 764 | "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz", 765 | "integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==", 766 | "requires": { 767 | "pug-error": "^2.0.0", 768 | "token-stream": "1.0.0" 769 | } 770 | }, 771 | "pug-runtime": { 772 | "version": "3.0.1", 773 | "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz", 774 | "integrity": "sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==" 775 | }, 776 | "pug-strip-comments": { 777 | "version": "2.0.0", 778 | "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz", 779 | "integrity": "sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==", 780 | "requires": { 781 | "pug-error": "^2.0.0" 782 | } 783 | }, 784 | "pug-walk": { 785 | "version": "2.0.0", 786 | "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz", 787 | "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==" 788 | }, 789 | "qs": { 790 | "version": "6.5.2", 791 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", 792 | "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" 793 | }, 794 | "range-parser": { 795 | "version": "1.2.1", 796 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 797 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" 798 | }, 799 | "raw-body": { 800 | "version": "2.3.3", 801 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", 802 | "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", 803 | "requires": { 804 | "bytes": "3.0.0", 805 | "http-errors": "1.6.3", 806 | "iconv-lite": "0.4.23", 807 | "unpipe": "1.0.0" 808 | } 809 | }, 810 | "repeat-string": { 811 | "version": "1.6.1", 812 | "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", 813 | "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" 814 | }, 815 | "resolve": { 816 | "version": "1.20.0", 817 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", 818 | "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", 819 | "requires": { 820 | "is-core-module": "^2.2.0", 821 | "path-parse": "^1.0.6" 822 | } 823 | }, 824 | "right-align": { 825 | "version": "0.1.3", 826 | "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", 827 | "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", 828 | "requires": { 829 | "align-text": "^0.1.1" 830 | } 831 | }, 832 | "safe-buffer": { 833 | "version": "5.1.2", 834 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 835 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 836 | }, 837 | "safer-buffer": { 838 | "version": "2.1.2", 839 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 840 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 841 | }, 842 | "send": { 843 | "version": "0.16.2", 844 | "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", 845 | "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", 846 | "requires": { 847 | "debug": "2.6.9", 848 | "depd": "~1.1.2", 849 | "destroy": "~1.0.4", 850 | "encodeurl": "~1.0.2", 851 | "escape-html": "~1.0.3", 852 | "etag": "~1.8.1", 853 | "fresh": "0.5.2", 854 | "http-errors": "~1.6.2", 855 | "mime": "1.4.1", 856 | "ms": "2.0.0", 857 | "on-finished": "~2.3.0", 858 | "range-parser": "~1.2.0", 859 | "statuses": "~1.4.0" 860 | } 861 | }, 862 | "serve-static": { 863 | "version": "1.13.2", 864 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", 865 | "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", 866 | "requires": { 867 | "encodeurl": "~1.0.2", 868 | "escape-html": "~1.0.3", 869 | "parseurl": "~1.3.2", 870 | "send": "0.16.2" 871 | } 872 | }, 873 | "setprototypeof": { 874 | "version": "1.1.0", 875 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", 876 | "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" 877 | }, 878 | "source-map": { 879 | "version": "0.4.4", 880 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", 881 | "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", 882 | "requires": { 883 | "amdefine": ">=0.0.4" 884 | } 885 | }, 886 | "statuses": { 887 | "version": "1.4.0", 888 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", 889 | "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" 890 | }, 891 | "to-fast-properties": { 892 | "version": "2.0.0", 893 | "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", 894 | "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" 895 | }, 896 | "token-stream": { 897 | "version": "1.0.0", 898 | "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz", 899 | "integrity": "sha1-zCAOqyYT9BZtJ/+a/HylbUnfbrQ=" 900 | }, 901 | "transformers": { 902 | "version": "2.1.0", 903 | "resolved": "https://registry.npmjs.org/transformers/-/transformers-2.1.0.tgz", 904 | "integrity": "sha1-XSPLNVYd2F3Gf7hIIwm0fVPM6ac=", 905 | "requires": { 906 | "css": "~1.0.8", 907 | "promise": "~2.0", 908 | "uglify-js": "~2.2.5" 909 | }, 910 | "dependencies": { 911 | "is-promise": { 912 | "version": "1.0.1", 913 | "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-1.0.1.tgz", 914 | "integrity": "sha1-MVc3YcBX4zwukaq56W2gjO++duU=" 915 | }, 916 | "promise": { 917 | "version": "2.0.0", 918 | "resolved": "https://registry.npmjs.org/promise/-/promise-2.0.0.tgz", 919 | "integrity": "sha1-RmSKqdYFr10ucMMCS/WUNtoCuA4=", 920 | "requires": { 921 | "is-promise": "~1" 922 | } 923 | }, 924 | "source-map": { 925 | "version": "0.1.43", 926 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", 927 | "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", 928 | "requires": { 929 | "amdefine": ">=0.0.4" 930 | } 931 | }, 932 | "uglify-js": { 933 | "version": "2.2.5", 934 | "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.2.5.tgz", 935 | "integrity": "sha1-puAqcNg5eSuXgEiLe4sYTAlcmcc=", 936 | "requires": { 937 | "optimist": "~0.3.5", 938 | "source-map": "~0.1.7" 939 | } 940 | } 941 | } 942 | }, 943 | "type-is": { 944 | "version": "1.6.18", 945 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 946 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 947 | "requires": { 948 | "media-typer": "0.3.0", 949 | "mime-types": "~2.1.24" 950 | } 951 | }, 952 | "typingdna-verify-client": { 953 | "version": "1.0.1", 954 | "resolved": "https://registry.npmjs.org/typingdna-verify-client/-/typingdna-verify-client-1.0.1.tgz", 955 | "integrity": "sha512-IadALgYIov81b4ViYPTmioivRAJsroqR8spMHJV9riERG+5dcmVL1lcZs+rVcELqZ5mp3B21V3tUHKa7oZsVJw==" 956 | }, 957 | "uglify-js": { 958 | "version": "2.8.29", 959 | "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", 960 | "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", 961 | "requires": { 962 | "source-map": "~0.5.1", 963 | "uglify-to-browserify": "~1.0.0", 964 | "yargs": "~3.10.0" 965 | }, 966 | "dependencies": { 967 | "source-map": { 968 | "version": "0.5.7", 969 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", 970 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" 971 | } 972 | } 973 | }, 974 | "uglify-to-browserify": { 975 | "version": "1.0.2", 976 | "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", 977 | "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", 978 | "optional": true 979 | }, 980 | "unpipe": { 981 | "version": "1.0.0", 982 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 983 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" 984 | }, 985 | "utils-merge": { 986 | "version": "1.0.1", 987 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 988 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" 989 | }, 990 | "vary": { 991 | "version": "1.1.2", 992 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 993 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" 994 | }, 995 | "void-elements": { 996 | "version": "2.0.1", 997 | "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", 998 | "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=" 999 | }, 1000 | "window-size": { 1001 | "version": "0.1.0", 1002 | "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", 1003 | "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=" 1004 | }, 1005 | "with": { 1006 | "version": "4.0.3", 1007 | "resolved": "https://registry.npmjs.org/with/-/with-4.0.3.tgz", 1008 | "integrity": "sha1-7v0VTp550sjTQXtkeo8U2f7M4U4=", 1009 | "requires": { 1010 | "acorn": "^1.0.1", 1011 | "acorn-globals": "^1.0.3" 1012 | }, 1013 | "dependencies": { 1014 | "acorn": { 1015 | "version": "1.2.2", 1016 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-1.2.2.tgz", 1017 | "integrity": "sha1-yM4n3grMdtiW0rH6099YjZ6C8BQ=" 1018 | } 1019 | } 1020 | }, 1021 | "wordwrap": { 1022 | "version": "0.0.3", 1023 | "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", 1024 | "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=" 1025 | }, 1026 | "yargs": { 1027 | "version": "3.10.0", 1028 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", 1029 | "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", 1030 | "requires": { 1031 | "camelcase": "^1.0.2", 1032 | "cliui": "^2.1.0", 1033 | "decamelize": "^1.0.0", 1034 | "window-size": "0.1.0" 1035 | } 1036 | } 1037 | } 1038 | } 1039 | -------------------------------------------------------------------------------- /website/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "website", 3 | "version": "0.0.0", 4 | "private": true, 5 | "scripts": { 6 | "start": "node ./bin/www" 7 | }, 8 | "dependencies": { 9 | "debug": "~2.6.9", 10 | "express": "~4.16.1", 11 | "jade": "~1.11.0", 12 | "pug": "^3.0.2", 13 | "typingdna-verify-client": "^1.0.1" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /website/views/result.pug: -------------------------------------------------------------------------------- 1 | html 2 | body 3 | h1 Results 4 | h2= otp 5 | h2= success 6 | h2= message -------------------------------------------------------------------------------- /website/views/verify.pug: -------------------------------------------------------------------------------- 1 | html 2 | head 3 | | 4 | | 5 | body 6 | h1 Welcome to TypingDNA Demo 7 | button( 8 | class="typingdna-verify", 9 | data-typingdna-client-id=`${clientId}`, 10 | data-typingdna-application-id=`${applicationId}`, 11 | data-typingdna-payload=`${payload}`, 12 | data-typingdna-callback-fn="callbackFn" 13 | ) Verify with TypingDNA --------------------------------------------------------------------------------