From 3f3ed17d5011643ed5bf7e1fa599d6d8dc9d4efb Mon Sep 17 00:00:00 2001 From: Billy Lo Date: Thu, 26 Aug 2021 00:15:12 -0400 Subject: [PATCH] working version 0.1 --- components/Form.tsx | 6 +- package-lock.json | 668 ++++++++++++++++++++++++++++------- package.json | 1 + pages/index.tsx | 2 +- public/locales/en/common.yml | 4 +- public/locales/en/errors.yml | 2 +- public/locales/en/index.yml | 10 +- src/constants.ts | 6 +- src/pass.ts | 28 +- src/payload.ts | 343 ++++-------------- src/process.ts | 142 ++------ yarn.lock | 256 +++++++++++--- 12 files changed, 872 insertions(+), 596 deletions(-) diff --git a/components/Form.tsx b/components/Form.tsx index f76f501..6bb9ee3 100644 --- a/components/Form.tsx +++ b/components/Form.tsx @@ -9,7 +9,7 @@ import Card from "./Card"; import Alert from "./Alert"; import Check from './Check'; import {PayloadBody} from "../src/payload"; -import {getPayloadBodyFromFile, getPayloadBodyFromQR} from "../src/process"; +import {getPayloadBodyFromFile} from "../src/process"; import {PassData} from "../src/pass"; import {COLORS} from "../src/colors"; import Colors from './Colors'; @@ -221,11 +221,11 @@ function Form(): JSX.Element {

{t('index:dataPrivacyDescription')} - + {/* {t('index:privacyPolicy')} - . + . */}

    diff --git a/package-lock.json b/package-lock.json index 28f90e4..2580d93 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,9 +21,9 @@ "next-i18next": "^8.5.1", "next-seo": "^4.26.0", "node-fetch": "^2.6.1", - "pdf2json": "^1.2.1", "pdfjs-dist": "^2.5.207", "pngjs": "^6.0.0", + "qrcode": "^1.4.4", "react": "^17.0.2", "react-dom": "^17.0.2", "tls": "^0.0.1", @@ -902,6 +902,25 @@ "ieee754": "^1.1.4" } }, + "node_modules/buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "dependencies": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "node_modules/buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==" + }, + "node_modules/buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=" + }, "node_modules/buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", @@ -946,6 +965,14 @@ "node": ">=6" } }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "engines": { + "node": ">=6" + } + }, "node_modules/camelcase-css": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", @@ -1024,6 +1051,35 @@ "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz", "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==" }, + "node_modules/cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dependencies": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/color": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz", @@ -1262,6 +1318,14 @@ "ms": "2.0.0" } }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", @@ -1334,6 +1398,11 @@ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" }, + "node_modules/dijkstrajs": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.2.tgz", + "integrity": "sha512-QV6PMaHTCNmKSeP6QoXhVTw9snc9VD8MulTT0Bd99Pacp4SS1cjcrYPgBPmibqKVtMJJfqC6XvOXgPMEEPH/fg==" + }, "node_modules/dlv": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", @@ -1380,6 +1449,11 @@ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" }, + "node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + }, "node_modules/emojis-list": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", @@ -1695,6 +1769,14 @@ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, "node_modules/get-intrinsic": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", @@ -2101,6 +2183,14 @@ "node": ">=0.10.0" } }, + "node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "engines": { + "node": ">=4" + } + }, "node_modules/is-generator-function": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.9.tgz", @@ -3130,83 +3220,6 @@ "node": ">=0.12" } }, - "node_modules/pdf2json": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/pdf2json/-/pdf2json-1.2.1.tgz", - "integrity": "sha512-Ihda4iOiiINYRwvdpHFHBFrRc/vT+w10Kc3o2meOB0HSPDEVMrb+X+V5oUOawipqNT/aI3dazSicwNyJzDLPaQ==", - "bundleDependencies": [ - "xmldom", - "lodash", - "optimist", - "async", - "minimist", - "wordwrap" - ], - "dependencies": { - "async": "^3.2.0", - "lodash": "^4.17.20", - "optimist": "^0.6.1", - "xmldom": "^0.5.0" - }, - "bin": { - "pdf2json": "bin/pdf2json" - }, - "engines": { - "node": ">=10.15.1" - } - }, - "node_modules/pdf2json/node_modules/async": { - "version": "3.2.0", - "resolved": "https://artifact.devsnc.com/content/groups/npm-all/async/-/async-3.2.0.tgz", - "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==", - "inBundle": true, - "license": "MIT" - }, - "node_modules/pdf2json/node_modules/lodash": { - "version": "4.17.15", - "resolved": "https://artifact.devsnc.com/content/groups/npm-all/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "inBundle": true, - "license": "MIT" - }, - "node_modules/pdf2json/node_modules/minimist": { - "version": "0.0.10", - "resolved": "https://artifact.devsnc.com/content/groups/npm-all/minimist/-/minimist-0.0.10.tgz", - "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", - "inBundle": true, - "license": "MIT" - }, - "node_modules/pdf2json/node_modules/optimist": { - "version": "0.6.1", - "resolved": "https://artifact.devsnc.com/content/groups/npm-all/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", - "inBundle": true, - "license": "MIT/X11", - "dependencies": { - "minimist": "~0.0.1", - "wordwrap": "~0.0.2" - } - }, - "node_modules/pdf2json/node_modules/wordwrap": { - "version": "0.0.3", - "resolved": "https://artifact.devsnc.com/content/groups/npm-all/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/pdf2json/node_modules/xmldom": { - "version": "0.3.0", - "resolved": "https://artifact.devsnc.com/content/groups/npm-all/xmldom/-/xmldom-0.3.0.tgz", - "integrity": "sha512-z9s6k3wxE+aZHgXYxSTpGDo7BYOUfJsIRyoZiX6HTjwpwfS2wpQBQKa2fD+ShLyPkqDYo5ud7KitmLZ2Cd6r0g==", - "inBundle": true, - "license": "(LGPL-2.0 OR MIT)", - "engines": { - "node": ">=10.0.0" - } - }, "node_modules/pdfjs-dist": { "version": "2.9.359", "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-2.9.359.tgz", @@ -3434,6 +3447,39 @@ "purgecss": "bin/purgecss.js" } }, + "node_modules/qrcode": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.4.4.tgz", + "integrity": "sha512-oLzEC5+NKFou9P0bMj5+v6Z40evexeE29Z9cummZXZ9QXyMr3lphkURzxjXgPJC5azpxcshoDWV1xE46z+/c3Q==", + "dependencies": { + "buffer": "^5.4.3", + "buffer-alloc": "^1.2.0", + "buffer-from": "^1.1.1", + "dijkstrajs": "^1.0.1", + "isarray": "^2.0.1", + "pngjs": "^3.3.0", + "yargs": "^13.2.4" + }, + "bin": { + "qrcode": "bin/qrcode" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/qrcode/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + }, + "node_modules/qrcode/node_modules/pngjs": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", + "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==", + "engines": { + "node": ">=4.0.0" + } + }, "node_modules/querystring": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.1.tgz", @@ -3640,6 +3686,19 @@ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, "node_modules/resolve": { "version": "1.20.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", @@ -3785,6 +3844,11 @@ "randombytes": "^2.1.0" } }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, "node_modules/setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", @@ -3928,6 +3992,38 @@ "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz", "integrity": "sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs=" }, + "node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/string.prototype.trimend": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", @@ -4666,6 +4762,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + }, "node_modules/which-typed-array": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.4.tgz", @@ -4740,6 +4841,38 @@ "node": ">=8.9.0" } }, + "node_modules/wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dependencies": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -4754,6 +4887,11 @@ "node": ">=0.4" } }, + "node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" + }, "node_modules/yaml": { "version": "1.10.2", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", @@ -4763,6 +4901,88 @@ "node": ">= 6" } }, + "node_modules/yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dependencies": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "node_modules/yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "node_modules/yargs/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yargs/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "engines": { + "node": ">=4" + } + }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", @@ -5496,6 +5716,25 @@ "ieee754": "^1.1.4" } }, + "buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "requires": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==" + }, + "buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=" + }, "buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", @@ -5531,6 +5770,11 @@ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + }, "camelcase-css": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", @@ -5591,6 +5835,31 @@ "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz", "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==" }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, "color": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz", @@ -5804,6 +6073,11 @@ "ms": "2.0.0" } }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + }, "define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", @@ -5866,6 +6140,11 @@ } } }, + "dijkstrajs": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.2.tgz", + "integrity": "sha512-QV6PMaHTCNmKSeP6QoXhVTw9snc9VD8MulTT0Bd99Pacp4SS1cjcrYPgBPmibqKVtMJJfqC6XvOXgPMEEPH/fg==" + }, "dlv": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", @@ -5908,6 +6187,11 @@ } } }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + }, "emojis-list": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", @@ -6148,6 +6432,11 @@ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + }, "get-intrinsic": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", @@ -6445,6 +6734,11 @@ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, "is-generator-function": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.9.tgz", @@ -7235,57 +7529,6 @@ "sha.js": "^2.4.8" } }, - "pdf2json": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/pdf2json/-/pdf2json-1.2.1.tgz", - "integrity": "sha512-Ihda4iOiiINYRwvdpHFHBFrRc/vT+w10Kc3o2meOB0HSPDEVMrb+X+V5oUOawipqNT/aI3dazSicwNyJzDLPaQ==", - "requires": { - "async": "^3.2.0", - "lodash": "^4.17.20", - "optimist": "^0.6.1", - "xmldom": "^0.5.0" - }, - "dependencies": { - "async": { - "version": "3.2.0", - "resolved": "https://artifact.devsnc.com/content/groups/npm-all/async/-/async-3.2.0.tgz", - "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==", - "bundled": true - }, - "lodash": { - "version": "https://artifact.devsnc.com/content/groups/npm-all/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "bundled": true - }, - "minimist": { - "version": "0.0.10", - "resolved": "https://artifact.devsnc.com/content/groups/npm-all/minimist/-/minimist-0.0.10.tgz", - "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", - "bundled": true - }, - "optimist": { - "version": "0.6.1", - "resolved": "https://artifact.devsnc.com/content/groups/npm-all/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", - "bundled": true, - "requires": { - "minimist": "~0.0.1", - "wordwrap": "~0.0.2" - } - }, - "wordwrap": { - "version": "0.0.3", - "resolved": "https://artifact.devsnc.com/content/groups/npm-all/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", - "bundled": true - }, - "xmldom": { - "version": "https://artifact.devsnc.com/content/groups/npm-all/xmldom/-/xmldom-0.3.0.tgz", - "integrity": "sha512-z9s6k3wxE+aZHgXYxSTpGDo7BYOUfJsIRyoZiX6HTjwpwfS2wpQBQKa2fD+ShLyPkqDYo5ud7KitmLZ2Cd6r0g==", - "bundled": true - } - } - }, "pdfjs-dist": { "version": "2.9.359", "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-2.9.359.tgz", @@ -7449,6 +7692,32 @@ "postcss-selector-parser": "^6.0.2" } }, + "qrcode": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.4.4.tgz", + "integrity": "sha512-oLzEC5+NKFou9P0bMj5+v6Z40evexeE29Z9cummZXZ9QXyMr3lphkURzxjXgPJC5azpxcshoDWV1xE46z+/c3Q==", + "requires": { + "buffer": "^5.4.3", + "buffer-alloc": "^1.2.0", + "buffer-from": "^1.1.1", + "dijkstrajs": "^1.0.1", + "isarray": "^2.0.1", + "pngjs": "^3.3.0", + "yargs": "^13.2.4" + }, + "dependencies": { + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + }, + "pngjs": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", + "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==" + } + } + }, "querystring": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.1.tgz", @@ -7606,6 +7875,16 @@ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, "resolve": { "version": "1.20.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", @@ -7697,6 +7976,11 @@ "randombytes": "^2.1.0" } }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, "setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", @@ -7826,6 +8110,31 @@ "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz", "integrity": "sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs=" }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, "string.prototype.trimend": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", @@ -8381,6 +8690,11 @@ "is-symbol": "^1.0.3" } }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + }, "which-typed-array": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.4.tgz", @@ -8429,6 +8743,31 @@ } } }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -8440,12 +8779,83 @@ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" }, + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" + }, "yaml": { "version": "1.10.2", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", "dev": true }, + "yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + } + } + }, + "yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, "yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/package.json b/package.json index ab9016f..c47b6ce 100644 --- a/package.json +++ b/package.json @@ -30,6 +30,7 @@ "node-fetch": "^2.6.1", "pdfjs-dist": "^2.5.207", "pngjs": "^6.0.0", + "qrcode": "^1.4.4", "react": "^17.0.2", "react-dom": "^17.0.2", "tls": "^0.0.1", diff --git a/pages/index.tsx b/pages/index.tsx index 289773e..591cd6a 100644 --- a/pages/index.tsx +++ b/pages/index.tsx @@ -40,7 +40,7 @@ function Index(): JSX.Element { {t('common:subtitle')} {t('index:iosHint')}

    +

    {t('common:subtitle')}

    }/>
    diff --git a/public/locales/en/common.yml b/public/locales/en/common.yml index aac4b83..e909167 100644 --- a/public/locales/en/common.yml +++ b/public/locales/en/common.yml @@ -1,5 +1,5 @@ -title: Ontario vaccination receipt to mobile wallet -subtitle: This tool validates the digital signature of your receipt and saves the information onto your mobile wallet for easy validation. +title: Vaccination Receipt to Wallet +subtitle: This tool verifies your electronic receipt (PDF) and save the record onto your Apple Wallet securely. privacyPolicy: Privacy Policy donate: Sponsor gitHub: GitHub diff --git a/public/locales/en/errors.yml b/public/locales/en/errors.yml index 0dcc155..3f8cd8d 100644 --- a/public/locales/en/errors.yml +++ b/public/locales/en/errors.yml @@ -1,4 +1,4 @@ -noFileOrQrCode: Please scan a QR Code, or select a file +noFileOrQrCode: Please select your vaccination receipt PDF file signatureFailed: Error while signing pass on server decodingFailed: Failed to decode QR code payload invalidColor: Invalid color diff --git a/public/locales/en/index.yml b/public/locales/en/index.yml index 3967460..d256c36 100644 --- a/public/locales/en/index.yml +++ b/public/locales/en/index.yml @@ -1,8 +1,8 @@ -iosHint: On iOS, please use the Safari Browser. +iosHint: On iOS, please use Safari. errorClose: Close selectCertificate: Select vaccination receipt (PDF) selectCertificateDescription: | - If you have more than one receipts, just select the most recent one downloaded from covid19.ontariohealth.ca + If you have more than one receipts, download the most recent one from covid19.ontariohealth.ca #stopCamera: Stop Camera #startCamera: Start Camera openFile: Select File @@ -19,9 +19,9 @@ colorPurple: purple colorTeal: teal addToWallet: Add to Wallet dataPrivacyDescription: | - Your vaccination receipt is processed on your mobile phone only. No data is sent to the internet. + Your vaccination receipt is processed on your mobile phone only. iAcceptThe: I accept the privacyPolicy: Privacy Policy -createdOnDevice: Created on your device -openSourceTransparent: 100% open source - You can validate all lines of code used. +createdOnDevice: No personal data is sent to the Internet. +openSourceTransparent: 100% open source for full transparency. #hostedInEU: Hosted in the EU \ No newline at end of file diff --git a/src/constants.ts b/src/constants.ts index 1883630..9981d69 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -1,7 +1,7 @@ export class Constants { - public static NAME = 'CovidPass' - public static PASS_IDENTIFIER = 'pass.de.marvinsextro.covidpass' - public static TEAM_IDENTIFIER = 'X8Q7Q2RLTD' + public static NAME = 'Vaccination Receipt' + public static PASS_IDENTIFIER = 'pass.ca.vaccineontario.receipt' + public static TEAM_IDENTIFIER = 'F6X27PB5BH' public static img1xBlack: Buffer = Buffer.from('iVBORw0KGgoAAAANSUhEUgAAACQAAAAkCAYAAADhAJiYAAABU0lEQVR4AWIYaWAUiAExoB06gGggDOMwripJthAgGwBoCGYDBIDIgAFBwDAABoJjhBgEAEChBBBaAA0JyeKAqR0hmnWx3p5o8MHdvfd9Z7SHH8Dr723iCpdoYBOZtoJ9XOALYghxjj0sw1k7OEEAiekVxyjBShto4h6SUg8N5KGqhCHEshdsI3FdiCM3SNwnxA1uKxKXZm3QfJCPQ3RmYVAfW5j2YH+QfkweQ1uDviEmdNHBR8SYddxCDOC2ojeI4RlL+K2Kd8UYcFvRE8TQxyKmVdFLOAbcVnQNMeEUCzCKPQbcVnQEiRilGQNuK9qFRI1SjAG3Fa0iiDh8hgPcQWIKwG1dHsQyD+qKCCGWhCgiVZ7T7yhagw9JyQe37FTGCKI0QhlWq2GiGDNBDU6qYwyJaYw6nFbBABJhgAoyKYc2QoghRBs5ZF4BLTz+aaGAef+nHwt5/579e2c2AAAAAElFTkSuQmCC', 'base64'); public static img2xBlack: Buffer = Buffer.from('iVBORw0KGgoAAAANSUhEUgAAAEgAAABICAYAAABV7bNHAAACZ0lEQVR4Ae3TA8xcURRF4dq2ozqqbRtxUjeq7Zi127C2bXvSsLZtu/PP6ardjs577765K/li7mQnizGbzWaz2Wx50BXjMRYdkR0JXRq0xVq8g/ziDZaiGVIiYSqLybgPCdMtjEZpP1+oP45CYnQYPZDd7xeKnPMX1L+QAoULmnUhX12wVrwupHjBKnC8tFgEMcRcpIFjrYQYZhkcqQXEUM2h3haIoTZDvRsQQ92AeiGIoUJQTwxnB7ID2YHsQHYgO5B7zmMlztiBfhbCCKQAJUuOYbADIYRe+FP7TB1IfxyiUaYOpD8O0TJzB9IfpyqCZg6kP05ZPIBESL0gJAIBVENONMRJF8cJQr1nkDBdRWb8WBYEHB8HeAb1bkPCNB5E/xlJfRzgNtQ7CQnTWNB/R9IfBzgJ9TZCwnQJGcMYSX8cYCPUmw6JwCqkwt9K5cg4wHSo1x0SoZX/GUJ/HKA71KsAURhJdxygAtRLg1cKI2mP8wpp4EibIQoj6YwDbIZj9YIojKQzDtALjlUESZAYrEN2fK2u4jhJKAJH2wmJ0UOsRQBJECU74XjtIYZoD8dLi1sQj7uFtHClIRCPGwLXyox7EI+6h8xwtR4Qj+oB10uFExCPOYFU8ERVEIR4RBBV4KlGQTxiFDxXWgQgLgsgLTxZQdyBuOQOCsLTVcELiMNeoAqMqBHeQhzyFo1gVC3wCqLsFVrAyGrgMUTJY9SA0RXDMYVxjqEYfFEGzITEyUxkgO9qhEuQKF1CI/i69BiCB5AwPcAQpEfClBUDcR7yF+cxEFmR0NXDVFz5YirqwWaz2Ww2W9R9AE/cBAw+cEeMAAAAAElFTkSuQmCC', 'base64') diff --git a/src/pass.ts b/src/pass.ts index 3c56d2f..8778245 100644 --- a/src/pass.ts +++ b/src/pass.ts @@ -9,16 +9,19 @@ const crypto = require('crypto') enum QrFormat { PKBarcodeFormatQR = 'PKBarcodeFormatQR', + PKBarcodeFormatPDF417 = 'PKBarcodeFormatPDF417' } enum Encoding { utf8 = "utf-8", + iso88591 = "iso-8859-1" } interface QrCode { message: string; format: QrFormat; messageEncoding: Encoding; + // altText: string; } interface SignData { @@ -52,8 +55,12 @@ export class PassData { private static async signWithRemote(signData: SignData): Promise { // Load API_BASE_URL form nextjs backend + const configResponse = await fetch('/api/config') const apiBaseUrl = (await configResponse.json()).apiBaseUrl + console.log(`${apiBaseUrl}/sign`); + + console.log(JSON.stringify(signData)); const response = await fetch(`${apiBaseUrl}/sign`, { method: 'POST', @@ -72,17 +79,20 @@ export class PassData { } static async generatePass(payloadBody: PayloadBody): Promise { - // Get the Value Sets from GitHub - const valueSets: ValueSets = await ValueSets.loadValueSets(); // Create Payload - const payload: Payload = new Payload(payloadBody, valueSets); + + const payload: Payload = new Payload(payloadBody); + + payload.serialNumber = uuid4(); // Create QR Code Object const qrCode: QrCode = { - message: payload.rawData, + message: `https://verifier.vaccine-ontario.ca/?serialNumber=${payload.serialNumber}`, format: QrFormat.PKBarcodeFormatQR, - messageEncoding: Encoding.utf8, + messageEncoding: Encoding.iso88591, + // altText : payload.rawData + } // Create pass data @@ -93,6 +103,8 @@ export class PassData { // Adding required fields + console.log(pass); + // Create pass.json const passJson = JSON.stringify(pass); @@ -117,6 +129,8 @@ export class PassData { ), ); + console.log(manifestJson); + // Add Manifest JSON to zip zip.push({path: 'manifest.json', data: Buffer.from(manifestJson)}); @@ -126,7 +140,7 @@ export class PassData { // Sign hash with server const manifestSignature = await PassData.signWithRemote({ PassJsonHash: passHash, - useBlackVersion: !payload.dark, + useBlackVersion: true, }); // Add signature to zip @@ -139,7 +153,7 @@ export class PassData { this.labelColor = payload.labelColor; this.foregroundColor = payload.foregroundColor; this.backgroundColor = payload.backgroundColor; - this.serialNumber = uuid4(); // Generate random UUID v4 + this.serialNumber = payload.serialNumber; // Generate random UUID v4 this.barcodes = [qrCode]; this.barcode = qrCode; this.generic = payload.generic; diff --git a/src/payload.ts b/src/payload.ts index a86f586..27b1044 100644 --- a/src/payload.ts +++ b/src/payload.ts @@ -1,15 +1,13 @@ -import {ValueSets} from "./value_sets"; import {Constants} from "./constants"; import {COLORS} from "./colors"; -enum CertificateType { - Vaccination = 'Vaccination Card', - Test = 'Test Certificate', - Recovery = 'Recovery Certificate', +export class Receipt { + constructor(public name: string, public vaccinationDate: string, public vaccineName: string, public dateOfBirth: string, public numDoses: number, public organization: string) {}; } enum TextAlignment { right = 'PKTextAlignmentRight', + center = 'PKTextAlignmentCenter' } interface Field { @@ -28,317 +26,102 @@ export interface PassDictionary { } export interface PayloadBody { - color: COLORS; + // color: COLORS; rawData: string; - decodedData: Uint8Array; + receipt: Receipt; } export class Payload { - certificateType: CertificateType; + receipt: Receipt; rawData: string; - backgroundColor: string; labelColor: string; foregroundColor: string; img1x: Buffer; img2x: Buffer; - dark: boolean; - + serialNumber: string; generic: PassDictionary; - constructor(body: PayloadBody, valueSets: ValueSets) { - - const dark = body.color != COLORS.WHITE; - - const healthCertificate = body.decodedData['-260']; - const covidCertificate = healthCertificate['1']; // Version number subject to change - - if (covidCertificate == undefined) { - throw new Error('certificateData'); - } + constructor(body: PayloadBody) { // Get name and date of birth information - const nameInformation = covidCertificate['nam']; - const dateOfBirth = covidCertificate['dob']; - - if (nameInformation == undefined) { + const name = body.receipt.name; + const dateOfBirth = body.receipt.dateOfBirth; + const vaccineName = body.receipt.vaccineName; + const vaccineNameProper = vaccineName.charAt(0) + vaccineName.substr(1).toLowerCase(); + const doseVaccine = "Dose " + String(body.receipt.numDoses) + ": " + vaccineNameProper; + if (name == undefined) { throw new Error('nameMissing'); } if (dateOfBirth == undefined) { throw new Error('dobMissing'); } - const firstName = nameInformation['gn']; - const lastName = nameInformation['fn']; - - const transliteratedFirstName = nameInformation['gnt'].replaceAll('<', ' '); - const transliteratedLastName = nameInformation['fnt'].replaceAll('<', ' '); - - // Check if name contains non-latin characters - const nameRegex = new RegExp('^[\\p{Script=Latin}\\p{P}\\p{M}\\p{Z}]+$', 'u'); - - let name: string; - - if (nameRegex.test(firstName) && nameRegex.test(lastName)) { - name = `${firstName} ${lastName}`; - } else { - name = `${transliteratedFirstName} ${transliteratedLastName}`; - } - - let properties: object; - - // Set certificate type and properties - if (covidCertificate['v'] !== undefined) { - this.certificateType = CertificateType.Vaccination; - properties = covidCertificate['v'][0]; - } - if (covidCertificate['t'] !== undefined) { - this.certificateType = CertificateType.Test; - properties = covidCertificate['t'][0]; - } - if (covidCertificate['r'] !== undefined) { - this.certificateType = CertificateType.Recovery; - properties = covidCertificate['r'][0]; - } - if (this.certificateType == undefined) { - throw new Error('certificateType') - } - - // Get country, identifier and issuer - const countryCode = properties['co']; - const uvci = properties['ci']; - const certificateIssuer = properties['is']; - - if (!(countryCode in valueSets.countryCodes)) { - throw new Error('invalidCountryCode'); - } - - const country = valueSets.countryCodes[countryCode].display; - const generic: PassDictionary = { headerFields: [ - { - key: "type", - label: "EU Digital COVID", - value: this.certificateType - } ], primaryFields: [ { - key: "name", - label: "Name", - value: name + key: "vaccine", + label: "Vaccine", + value: doseVaccine, } + ], - secondaryFields: [], - auxiliaryFields: [], - backFields: [ - { - key: "uvci", - label: "Unique Certificate Identifier (UVCI)", - value: uvci - }, - { + secondaryFields: [ + { key: "issuer", - label: "Certificate Issuer", - value: certificateIssuer - } + label: "Authorized Organization", + value: body.receipt.organization + }, + + { + key: "dov", + label: "Date", + value: body.receipt.vaccinationDate, + // textAlignment: TextAlignment.right + } + ], + auxiliaryFields: [ + + + + ], + backFields: [ + { + key: "name", + label: "Name", + value: name + }, + { + key: "dob", + label: "Date of Birth", + value: body.receipt.dateOfBirth, + textAlignment: TextAlignment.right + } + ] } // Set Values + this.receipt = body.receipt; this.rawData = body.rawData; - this.backgroundColor = dark ? body.color : COLORS.WHITE - this.labelColor = dark ? COLORS.WHITE : COLORS.GREY - this.foregroundColor = dark ? COLORS.WHITE : COLORS.BLACK - this.img1x = dark ? Constants.img1xWhite : Constants.img1xBlack - this.img2x = dark ? Constants.img2xWhite : Constants.img2xBlack - this.dark = dark; - - this.generic = Payload.fillPassData(this.certificateType, generic, properties, valueSets, country, dateOfBirth); - } - - static fillPassData(type: CertificateType, data: PassDictionary, properties: Object, valueSets: ValueSets, country: string, dateOfBirth: string): PassDictionary { - switch (type) { - case CertificateType.Vaccination: - const dose = `${properties['dn']}/${properties['sd']}`; - const dateOfVaccination = properties['dt']; - const medialProductKey = properties['mp']; - const manufacturerKey = properties['ma']; - - if (!(medialProductKey in valueSets.medicalProducts)) { - throw new Error('invalidMedicalProduct'); - } - if (!(manufacturerKey in valueSets.manufacturers)) { - throw new Error('invalidManufacturer') - } - - const vaccineName = valueSets.medicalProducts[medialProductKey].display.replace(/\s*\([^)]*\)\s*/g, ""); - const manufacturer = valueSets.manufacturers[manufacturerKey].display; - - data.secondaryFields.push(...[ - { - key: "dose", - label: "Dose", - value: dose - }, - { - key: "dov", - label: "Date of Vaccination", - value: dateOfVaccination, - textAlignment: TextAlignment.right - } - ]); - data.auxiliaryFields.push(...[ - { - key: "vaccine", - label: "Vaccine", - value: vaccineName - }, - { - key: "dob", - label: "Date of Birth", - value: dateOfBirth, - textAlignment: TextAlignment.right - } - ]); - data.backFields.push(...[ - { - key: "cov", - label: "Country of Vaccination", - value: country - }, - { - key: "manufacturer", - label: "Manufacturer", - value: manufacturer - }, - { - key: "disclaimer", - label: "Disclaimer", - value: "This certificate is not a travel document. It is only valid in combination with the ID card of the certificate holder and may expire one year + 14 days after the last dose. The validity of this certificate was not checked by CovidPass." - } - ]); - break; - case CertificateType.Test: - const testTypeKey = properties['tt']; - const testDateTimeString = properties['sc']; - const testResultKey = properties['tr']; - const testingCentre = properties['tc']; - - if (!(testResultKey in valueSets.testResults)) { - throw new Error('invalidTestResult'); - } - if (!(testTypeKey in valueSets.testTypes)) { - throw new Error('invalidTestType') - } - - const testResult = valueSets.testResults[testResultKey].display; - const testType = valueSets.testTypes[testTypeKey].display; - - const testTime = testDateTimeString.replace(/.*T/, '').replace('Z', ' ') + 'UTC'; - const testDate = testDateTimeString.replace(/T.*/, ''); - - data.secondaryFields.push(...[ - { - key: "result", - label: "Test Result", - value: testResult - }, - { - key: "dot", - label: "Date of Test", - value: testDate, - textAlignment: TextAlignment.right - } - ]); - data.auxiliaryFields.push(...[ - { - key: "time", - label: "Time of Test", - value: testTime - }, - { - key: "dob", - label: "Date of Birth", - value: dateOfBirth, - textAlignment: TextAlignment.right - }, - ]); - data.backFields.push({ - key: "cot", - label: "Country of Test", - value: country - }); - if (testingCentre !== undefined) - data.backFields.push({ - key: "centre", - label: "Testing Centre", - value: testingCentre - }); - data.backFields.push(...[ - { - key: "test", - label: "Test Type", - value: testType - }, - { - key: "disclaimer", - label: "Disclaimer", - value: "This certificate is not a travel document. It is only valid in combination with the ID card of the certificate holder and may expire 24h after the test. The validity of this certificate was not checked by CovidPass." - } - ]); - break; - case CertificateType.Recovery: - const firstPositiveTestDate = properties['fr']; - const validFrom = properties['df']; - const validUntil = properties['du']; - - data.secondaryFields.push(...[ - { - key: "until", - label: "Valid Until", - value: validUntil, - }, - { - key: "dot", - label: "Date of positive Test", - value: firstPositiveTestDate, - textAlignment: TextAlignment.right - } - ]); - data.auxiliaryFields.push(...[ - { - key: "from", - label: "Valid From", - value: validFrom, - }, - { - key: "dob", - label: "Date of Birth", - value: dateOfBirth, - textAlignment: TextAlignment.right - } - ]); - data.backFields.push(...[ - { - key: "cot", - label: "Country of Test", - value: country - }, - { - key: "disclaimer", - label: "Disclaimer", - value: "This certificate is not a travel document. It is only valid in combination with the ID card of the certificate holder. The validity of this certificate was not checked by CovidPass." - } - ]); - break; - default: - throw new Error('certificateType'); + if (body.receipt.numDoses > 1) { + this.backgroundColor = COLORS.GREEN; + } else { + this.backgroundColor = COLORS.YELLOW; } - return data; + this.labelColor = COLORS.WHITE + this.foregroundColor = COLORS.BLACK + this.img1x = Constants.img1xBlack + this.img2x = Constants.img2xBlack + this.generic = generic; + } + + + } \ No newline at end of file diff --git a/src/process.ts b/src/process.ts index 8174d4c..a4f81d2 100644 --- a/src/process.ts +++ b/src/process.ts @@ -1,139 +1,36 @@ -import {PayloadBody} from "./payload"; -import {PNG} from 'pngjs' +import {PayloadBody, Receipt} from "./payload"; import * as PdfJS from 'pdfjs-dist' -import jsQR, {QRCode} from "jsqr"; -import {decodeData} from "./decode"; -import {Result} from "@zxing/library"; import {COLORS} from "./colors"; import { getCertificatesInfoFromPDF } from "@ninja-labs/verify-pdf"; // ES6 -import verifyPDF from "@ninja-labs/verify-pdf"; +// import verifyPDF from "@ninja-labs/verify-pdf"; +// import {PNG} from 'pngjs' +// import {decodeData} from "./decode"; +// import {Result} from "@zxing/library"; PdfJS.GlobalWorkerOptions.workerSrc = `https://cdnjs.cloudflare.com/ajax/libs/pdf.js/${PdfJS.version}/pdf.worker.js` -class Receipt { - constructor(public name: string, public vaccinationDate: string, public vaccineName: string, public dateOfBirth: string, public numDoses: number) {}; -} - export async function getPayloadBodyFromFile(file: File, color: COLORS): Promise { // Read file const fileBuffer = await file.arrayBuffer(); - let imageData: ImageData; + let receipt: Receipt; switch (file.type) { case 'application/pdf': - console.log('pdf') - await loadPDF(fileBuffer) + receipt = await loadPDF(fileBuffer) break - // case 'image/png': - // console.log('png') - // imageData = await getImageDataFromPng(fileBuffer) - // break default: throw Error('invalidFileType') } - let code: QRCode; - - try { - code = jsQR(imageData.data, imageData.width, imageData.height, { - inversionAttempts: "dontInvert", - }); - } catch (e) { - throw Error('couldNotDecode'); - } - - if (code == undefined) { - throw Error('couldNotFindQrCode') - } - - // Get raw data - let rawData = code.data; - - // Decode Data - let decodedData; - - try { - decodedData = decodeData(rawData); - } catch (e) { - throw Error('invalidQrCode') - } + const rawData = ''; // unused at the moment, the original use was to store the QR code from issuer return { - rawData: rawData, - decodedData: decodedData, - color: color, + receipt: receipt, + rawData: rawData } } -export async function getPayloadBodyFromQR(qrCodeResult: Result, color: COLORS): Promise { - - // Get raw data - let rawData = qrCodeResult.getText(); - - // Decode Data - let decodedData; - - try { - decodedData = decodeData(rawData); - } catch (e) { - throw Error("invalidQrCode") - } - - return { - rawData: rawData, - decodedData: decodedData, - color: color, - } -} - -async function getImageDataFromPng(fileBuffer: ArrayBuffer): Promise { - return new Promise(async (resolve, reject) => { - let png = new PNG({filterType: 4}) - - png.parse(fileBuffer, (error, data) => { - if (error) { - reject(); - } - - resolve(data); - }) - }) -} - -async function getImageDataFromPdf(fileBuffer: ArrayBuffer): Promise { - const typedArray = new Uint8Array(fileBuffer); - const pdfScale = 2; - - const canvas = document.getElementById('canvas'); - const canvasContext = canvas.getContext('2d'); - - let loadingTask = PdfJS.getDocument(typedArray); - - await loadingTask.promise.then(async function (pdfDocument) { - // Load last PDF page - const pageNumber = pdfDocument.numPages; - - const pdfPage = await pdfDocument.getPage(pageNumber) - const viewport = pdfPage.getViewport({scale: pdfScale}) - - // Set correct canvas width / height - canvas.width = viewport.width - canvas.height = viewport.height - - // render PDF - const renderTask = pdfPage.render({ - canvasContext: canvasContext, - viewport, - }) - - return await renderTask.promise - }); - - // Return PDF Image Data - return canvasContext.getImageData(0, 0, canvas.width, canvas.height) -} - async function loadPDF(signedPdfBuffer): Promise { try { @@ -152,9 +49,10 @@ async function loadPDF(signedPdfBuffer): Promise { const issuedByEntrust = (result.issuedBy.organizationName == 'Entrust, Inc.'); const issuedToOntarioHealth = (result.issuedTo.commonName == 'covid19signer.ontariohealth.ca'); if (isClientCertificate && issuedByEntrust && issuedToOntarioHealth) { - console.log('valid, getting payload'); + console.log('PDF looks good, getting payload'); const receipt = await getPdfDetails(signedPdfBuffer); console.log(JSON.stringify(receipt, null, 2)); + return Promise.resolve(receipt); } else { console.error('invalid certificate'); @@ -182,23 +80,29 @@ async function getPdfDetails(fileBuffer: ArrayBuffer): Promise { const pdfPage = await pdfDocument.getPage(pageNumber); const content = await pdfPage.getTextContent(); const numItems = content.items.length; - let name, vaccinationDate, vaccineName, dateOfBirth, numDoses; + let name, vaccinationDate, vaccineName, dateOfBirth, numDoses, organization; for (let i = 0; i < numItems; i++) { const item = content.items[i]; const value = item.str; if (value.includes('Name / Nom')) name = content.items[i+1].str; - if (value.includes('Date:')) + if (value.includes('Date:')) { vaccinationDate = content.items[i+1].str; - if (value.includes('Product name')) - vaccineName = content.items[i+1].str; + vaccinationDate = vaccinationDate.split(',')[0]; + } + if (value.includes('Product name')) { + vaccineName = content.items[i+1].str; + vaccineName = vaccineName.split(' ')[0]; + } if (value.includes('Date of birth')) dateOfBirth = content.items[i+1].str; + if (value.includes('Authorized organization')) + organization = content.items[i+1].str; if (value.includes('You have received')) numDoses = Number(value.split(' ')[3]); } - const receipt = new Receipt(name, vaccinationDate, vaccineName, dateOfBirth, numDoses); + const receipt = new Receipt(name, vaccinationDate, vaccineName, dateOfBirth, numDoses, organization); return Promise.resolve(receipt); diff --git a/yarn.lock b/yarn.lock index 8814126..ab8c178 100644 --- a/yarn.lock +++ b/yarn.lock @@ -416,12 +416,17 @@ "resolved" "https://registry.npmjs.org/anser/-/anser-1.4.9.tgz" "version" "1.4.9" +"ansi-regex@^4.1.0": + "integrity" "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz" + "version" "4.1.0" + "ansi-regex@^5.0.0": "integrity" "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz" "version" "5.0.0" -"ansi-styles@^3.2.1": +"ansi-styles@^3.2.0", "ansi-styles@^3.2.1": "integrity" "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==" "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" "version" "3.2.1" @@ -481,11 +486,6 @@ "resolved" "https://registry.npmjs.org/ast-types/-/ast-types-0.13.2.tgz" "version" "0.13.2" -"async@^3.2.0": - "integrity" "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==" - "resolved" "https://artifact.devsnc.com/content/groups/npm-all/async/-/async-3.2.0.tgz" - "version" "3.2.0" - "autoprefixer@^10.0.2", "autoprefixer@^10.0.4": "integrity" "sha512-8lChSmdU6dCNMCQopIf4Pe5kipkAGj/fvTMslCsih0uHpOrXOPUEVOmYMMqmw3cekQkSD7EhIeuYl5y0BLdKqg==" "resolved" "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.2.6.tgz" @@ -645,7 +645,25 @@ "escalade" "^3.1.1" "node-releases" "^1.1.71" -"buffer-from@^1.0.0": +"buffer-alloc-unsafe@^1.1.0": + "integrity" "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==" + "resolved" "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz" + "version" "1.1.0" + +"buffer-alloc@^1.2.0": + "integrity" "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==" + "resolved" "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz" + "version" "1.2.0" + dependencies: + "buffer-alloc-unsafe" "^1.1.0" + "buffer-fill" "^1.0.0" + +"buffer-fill@^1.0.0": + "integrity" "sha1-+PeLdniYiO858gXNY39o5wISKyw=" + "resolved" "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz" + "version" "1.0.0" + +"buffer-from@^1.0.0", "buffer-from@^1.1.1": "integrity" "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" "resolved" "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz" "version" "1.1.1" @@ -664,7 +682,7 @@ "ieee754" "^1.1.4" "isarray" "^1.0.0" -"buffer@5.6.0": +"buffer@^5.4.3", "buffer@5.6.0": "integrity" "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==" "resolved" "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz" "version" "5.6.0" @@ -700,6 +718,11 @@ "resolved" "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz" "version" "2.0.1" +"camelcase@^5.0.0": + "integrity" "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + "resolved" "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" + "version" "5.3.1" + "caniuse-lite@^1.0.30001202", "caniuse-lite@^1.0.30001219", "caniuse-lite@^1.0.30001228", "caniuse-lite@^1.0.30001230": "integrity" "sha512-1uoSZ1Pq1VpH0WerIMqwptXHNNGfdl7d1cJUFs80CwQ/lVzdhTvsFZCeNFslze7AjsQnb4C85tzclPa1VShbeQ==" "resolved" "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001241.tgz" @@ -783,6 +806,15 @@ "resolved" "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz" "version" "2.2.6" +"cliui@^5.0.0": + "integrity" "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==" + "resolved" "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "string-width" "^3.1.0" + "strip-ansi" "^5.2.0" + "wrap-ansi" "^5.1.0" + "color-convert@^1.9.0", "color-convert@^1.9.1": "integrity" "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==" "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" @@ -980,6 +1012,11 @@ dependencies: "ms" "2.0.0" +"decamelize@^1.2.0": + "integrity" "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + "resolved" "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz" + "version" "1.2.0" + "define-properties@^1.1.3": "integrity" "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==" "resolved" "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz" @@ -1028,6 +1065,11 @@ "miller-rabin" "^4.0.0" "randombytes" "^2.0.0" +"dijkstrajs@^1.0.1": + "integrity" "sha512-QV6PMaHTCNmKSeP6QoXhVTw9snc9VD8MulTT0Bd99Pacp4SS1cjcrYPgBPmibqKVtMJJfqC6XvOXgPMEEPH/fg==" + "resolved" "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.2.tgz" + "version" "1.0.2" + "dlv@^1.1.3": "integrity" "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" "resolved" "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz" @@ -1066,6 +1108,11 @@ "minimalistic-assert" "^1.0.1" "minimalistic-crypto-utils" "^1.0.1" +"emoji-regex@^7.0.1": + "integrity" "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + "resolved" "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz" + "version" "7.0.3" + "emojis-list@^2.0.0": "integrity" "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=" "resolved" "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz" @@ -1246,6 +1293,13 @@ "make-dir" "^3.0.2" "pkg-dir" "^4.1.0" +"find-up@^3.0.0": + "integrity" "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==" + "resolved" "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "locate-path" "^3.0.0" + "find-up@^4.0.0": "integrity" "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==" "resolved" "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" @@ -1288,6 +1342,11 @@ "resolved" "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" "version" "1.1.1" +"get-caller-file@^2.0.1": + "integrity" "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + "resolved" "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" + "version" "2.0.5" + "get-intrinsic@^1.0.2", "get-intrinsic@^1.1.1": "integrity" "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==" "resolved" "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz" @@ -1588,6 +1647,11 @@ "resolved" "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" "version" "2.1.1" +"is-fullwidth-code-point@^2.0.0": + "integrity" "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz" + "version" "2.0.0" + "is-generator-function@^1.0.7": "integrity" "sha512-ZJ34p1uvIfptHCN7sFTjGibB9/oBg17sHqzDLfuwhvmN/qLVvIQXRQ8licZQ35WJ8KuEQt/etnnzQFI9C9Ue/A==" "resolved" "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.9.tgz" @@ -1659,6 +1723,11 @@ "resolved" "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" "version" "1.0.0" +"isarray@^2.0.1": + "integrity" "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + "resolved" "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz" + "version" "2.0.5" + "jest-worker@^27.0.2": "integrity" "sha512-qupxcj/dRuA3xHPMUd40gr2EaAurFbkwzOh7wfPaeE9id7hyjURRQoqNfHifHK3XjJU6YJJUQKILGUnwGPEOCA==" "resolved" "https://registry.npmjs.org/jest-worker/-/jest-worker-27.0.6.tgz" @@ -1763,6 +1832,14 @@ "emojis-list" "^2.0.0" "json5" "^1.0.1" +"locate-path@^3.0.0": + "integrity" "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==" + "resolved" "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "p-locate" "^3.0.0" + "path-exists" "^3.0.0" + "locate-path@^5.0.0": "integrity" "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==" "resolved" "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz" @@ -1790,11 +1867,6 @@ "resolved" "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" "version" "4.17.21" -"lodash@^4.17.20": - "integrity" "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" - "resolved" "https://artifact.devsnc.com/content/groups/npm-all/lodash/-/lodash-4.17.15.tgz" - "version" "4.17.15" - "loose-envify@^1.1.0", "loose-envify@^1.4.0": "integrity" "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==" "resolved" "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz" @@ -1878,11 +1950,6 @@ "resolved" "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz" "version" "1.2.5" -"minimist@~0.0.1": - "integrity" "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=" - "resolved" "https://artifact.devsnc.com/content/groups/npm-all/minimist/-/minimist-0.0.10.tgz" - "version" "0.0.10" - "modern-normalize@^1.1.0": "integrity" "sha512-2lMlY1Yc1+CUy0gw4H95uNN7vjbpoED7NNRSBHE25nWfLBdmMzFCsPshlzbxHz+gYMcBEUN8V4pU16prcdPSgA==" "resolved" "https://registry.npmjs.org/modern-normalize/-/modern-normalize-1.1.0.tgz" @@ -2098,19 +2165,18 @@ dependencies: "wrappy" "1" -"optimist@^0.6.1": - "integrity" "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=" - "resolved" "https://artifact.devsnc.com/content/groups/npm-all/optimist/-/optimist-0.6.1.tgz" - "version" "0.6.1" - dependencies: - "minimist" "~0.0.1" - "wordwrap" "~0.0.2" - "os-browserify@^0.3.0", "os-browserify@0.3.0": "integrity" "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=" "resolved" "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz" "version" "0.3.0" +"p-limit@^2.0.0": + "integrity" "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==" + "resolved" "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" + "version" "2.3.0" + dependencies: + "p-try" "^2.0.0" + "p-limit@^2.2.0": "integrity" "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==" "resolved" "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" @@ -2125,6 +2191,13 @@ dependencies: "yocto-queue" "^0.1.0" +"p-locate@^3.0.0": + "integrity" "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==" + "resolved" "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "p-limit" "^2.0.0" + "p-locate@^4.1.0": "integrity" "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==" "resolved" "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz" @@ -2180,6 +2253,11 @@ "resolved" "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz" "version" "1.0.1" +"path-exists@^3.0.0": + "integrity" "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + "resolved" "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz" + "version" "3.0.0" + "path-exists@^4.0.0": "integrity" "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" "resolved" "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" @@ -2211,16 +2289,6 @@ "safe-buffer" "^5.0.1" "sha.js" "^2.4.8" -"pdf2json@^1.2.1": - "integrity" "sha512-Ihda4iOiiINYRwvdpHFHBFrRc/vT+w10Kc3o2meOB0HSPDEVMrb+X+V5oUOawipqNT/aI3dazSicwNyJzDLPaQ==" - "resolved" "https://registry.npmjs.org/pdf2json/-/pdf2json-1.2.1.tgz" - "version" "1.2.1" - dependencies: - "async" "^3.2.0" - "lodash" "^4.17.20" - "optimist" "^0.6.1" - "xmldom" "^0.5.0" - "pdfjs-dist@^2.5.207": "integrity" "sha512-P2nYtkacdlZaNNwrBLw1ZyMm0oE2yY/5S/GDCAmMJ7U4+ciL/D0mrlEC/o4HZZc/LNE3w8lEVzBEyVgEQlPVKQ==" "resolved" "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-2.9.359.tgz" @@ -2243,6 +2311,11 @@ "resolved" "https://registry.npmjs.org/platform/-/platform-1.3.6.tgz" "version" "1.3.6" +"pngjs@^3.3.0": + "integrity" "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==" + "resolved" "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz" + "version" "3.4.0" + "pngjs@^6.0.0": "integrity" "sha512-TRzzuFRRmEoSW/p1KVAmiOgPco2Irlah+bGFCeNfJXxxYGwSw7YwAOAcd7X28K/m5bjBWKsC29KyoMfHbypayg==" "resolved" "https://registry.npmjs.org/pngjs/-/pngjs-6.0.0.tgz" @@ -2376,6 +2449,19 @@ "postcss" "^8.2.1" "postcss-selector-parser" "^6.0.2" +"qrcode@^1.4.4": + "integrity" "sha512-oLzEC5+NKFou9P0bMj5+v6Z40evexeE29Z9cummZXZ9QXyMr3lphkURzxjXgPJC5azpxcshoDWV1xE46z+/c3Q==" + "resolved" "https://registry.npmjs.org/qrcode/-/qrcode-1.4.4.tgz" + "version" "1.4.4" + dependencies: + "buffer" "^5.4.3" + "buffer-alloc" "^1.2.0" + "buffer-from" "^1.1.1" + "dijkstrajs" "^1.0.1" + "isarray" "^2.0.1" + "pngjs" "^3.3.0" + "yargs" "^13.2.4" + "querystring-es3@^0.2.0", "querystring-es3@0.2.1": "integrity" "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=" "resolved" "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz" @@ -2527,6 +2613,16 @@ "resolved" "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz" "version" "0.13.7" +"require-directory@^2.1.1": + "integrity" "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + "resolved" "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" + "version" "2.1.1" + +"require-main-filename@^2.0.0": + "integrity" "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + "resolved" "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz" + "version" "2.0.0" + "resolve-from@^4.0.0": "integrity" "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" "resolved" "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" @@ -2616,6 +2712,11 @@ dependencies: "randombytes" "^2.1.0" +"set-blocking@^2.0.0": + "integrity" "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + "resolved" "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" + "version" "2.0.0" + "setimmediate@^1.0.4": "integrity" "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" "resolved" "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz" @@ -2766,6 +2867,15 @@ "resolved" "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz" "version" "1.1.3" +"string-width@^3.0.0", "string-width@^3.1.0": + "integrity" "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==" + "resolved" "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "emoji-regex" "^7.0.1" + "is-fullwidth-code-point" "^2.0.0" + "strip-ansi" "^5.1.0" + "string.prototype.trimend@^1.0.4": "integrity" "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==" "resolved" "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz" @@ -2782,6 +2892,27 @@ "call-bind" "^1.0.2" "define-properties" "^1.1.3" +"strip-ansi@^5.0.0": + "integrity" "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==" + "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz" + "version" "5.2.0" + dependencies: + "ansi-regex" "^4.1.0" + +"strip-ansi@^5.1.0": + "integrity" "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==" + "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz" + "version" "5.2.0" + dependencies: + "ansi-regex" "^4.1.0" + +"strip-ansi@^5.2.0": + "integrity" "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==" + "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz" + "version" "5.2.0" + dependencies: + "ansi-regex" "^4.1.0" + "strip-ansi@6.0.0": "integrity" "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==" "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz" @@ -3141,6 +3272,11 @@ "is-string" "^1.0.5" "is-symbol" "^1.0.3" +"which-module@^2.0.0": + "integrity" "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + "resolved" "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz" + "version" "2.0.0" + "which-typed-array@^1.1.2": "integrity" "sha512-49E0SpUe90cjpoc7BOJwyPHRqSAd12c10Qm2amdEZrJPCY2NDxaW01zHITrem+rnETY3dwrbH3UUrUwagfCYDA==" "resolved" "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.4.tgz" @@ -3154,11 +3290,6 @@ "has-symbols" "^1.0.1" "is-typed-array" "^1.1.3" -"wordwrap@~0.0.2": - "integrity" "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=" - "resolved" "https://artifact.devsnc.com/content/groups/npm-all/wordwrap/-/wordwrap-0.0.3.tgz" - "version" "0.0.3" - "worker-loader@^3.0.7": "integrity" "sha512-XQyQkIFeRVC7f7uRhFdNMe/iJOdO6zxAaR3EWbDp45v3mDhrTi+++oswKNxShUNjPC/1xUp5DB29YKLhFo129g==" "resolved" "https://registry.npmjs.org/worker-loader/-/worker-loader-3.0.8.tgz" @@ -3167,26 +3298,59 @@ "loader-utils" "^2.0.0" "schema-utils" "^3.0.0" +"wrap-ansi@^5.1.0": + "integrity" "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==" + "resolved" "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz" + "version" "5.1.0" + dependencies: + "ansi-styles" "^3.2.0" + "string-width" "^3.0.0" + "strip-ansi" "^5.0.0" + "wrappy@1": "integrity" "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" "resolved" "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" "version" "1.0.2" -"xmldom@^0.5.0": - "integrity" "sha512-z9s6k3wxE+aZHgXYxSTpGDo7BYOUfJsIRyoZiX6HTjwpwfS2wpQBQKa2fD+ShLyPkqDYo5ud7KitmLZ2Cd6r0g==" - "resolved" "https://artifact.devsnc.com/content/groups/npm-all/xmldom/-/xmldom-0.3.0.tgz" - "version" "0.3.0" - "xtend@^4.0.0", "xtend@^4.0.2": "integrity" "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" "resolved" "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" "version" "4.0.2" +"y18n@^4.0.0": + "integrity" "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" + "resolved" "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz" + "version" "4.0.3" + "yaml@^1.10.0", "yaml@^1.10.2": "integrity" "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" "resolved" "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz" "version" "1.10.2" +"yargs-parser@^13.1.2": + "integrity" "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==" + "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz" + "version" "13.1.2" + dependencies: + "camelcase" "^5.0.0" + "decamelize" "^1.2.0" + +"yargs@^13.2.4": + "integrity" "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==" + "resolved" "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz" + "version" "13.3.2" + dependencies: + "cliui" "^5.0.0" + "find-up" "^3.0.0" + "get-caller-file" "^2.0.1" + "require-directory" "^2.1.1" + "require-main-filename" "^2.0.0" + "set-blocking" "^2.0.0" + "string-width" "^3.0.0" + "which-module" "^2.0.0" + "y18n" "^4.0.0" + "yargs-parser" "^13.1.2" + "yocto-queue@^0.1.0": "integrity" "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" "resolved" "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz"