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"