Merge branch 'main' into fastlink-to-original-pdf

This commit is contained in:
Billy Lo 2021-10-24 13:27:48 -04:00
commit deb2222322
11 changed files with 394 additions and 73 deletions

View File

@ -43,8 +43,10 @@ const options = [
{ label: 'Alberta', value: 'https://covidrecords.alberta.ca/form'}, { label: 'Alberta', value: 'https://covidrecords.alberta.ca/form'},
{ label: 'British Columbia', value: 'https://www.healthgateway.gov.bc.ca/vaccinecard'}, { label: 'British Columbia', value: 'https://www.healthgateway.gov.bc.ca/vaccinecard'},
{ label: 'Ontario', value: 'https://covid19.ontariohealth.ca'}, { label: 'Ontario', value: 'https://covid19.ontariohealth.ca'},
{ label: 'Newfoundland and Labrador', value: 'https://vaccineportal.nlchi.nl.ca/'},
{ label: 'Northwest Territories', value: 'https://www.gov.nt.ca/covid-19/en/request/proof-vaccination'}, { label: 'Northwest Territories', value: 'https://www.gov.nt.ca/covid-19/en/request/proof-vaccination'},
{ label: 'Nova Scotia', value: 'https://novascotia.flow.canimmunize.ca/en/portal'}, { label: 'Nova Scotia', value: 'https://novascotia.flow.canimmunize.ca/en/portal'},
{ label: 'Prince Edward Island', value: 'https://pei.flow.canimmunize.ca/en/portal'},
{ label: 'Québec', value: 'https://covid19.quebec.ca/PreuveVaccinale'}, { label: 'Québec', value: 'https://covid19.quebec.ca/PreuveVaccinale'},
{ label: 'Saskatchewan', value: 'https://services.saskatchewan.ca/#/login'}, { label: 'Saskatchewan', value: 'https://services.saskatchewan.ca/#/login'},
{ label: 'Yukon', value: 'https://service.yukon.ca/forms/en/get-covid19-proof-of-vaccination'}, { label: 'Yukon', value: 'https://service.yukon.ca/forms/en/get-covid19-proof-of-vaccination'},
@ -66,7 +68,6 @@ function Form(): JSX.Element {
const [qrCode, setQrCode] = useState<Result>(undefined); const [qrCode, setQrCode] = useState<Result>(undefined);
const [file, setFile] = useState<File>(undefined); const [file, setFile] = useState<File>(undefined);
const [payloadBody, setPayloadBody] = useState<PayloadBody>(undefined); const [payloadBody, setPayloadBody] = useState<PayloadBody>(undefined);
const [photoBlob, setPhotoBlob] = useState<Blob>(undefined);
const [saveLoading, setSaveLoading] = useState<boolean>(false); const [saveLoading, setSaveLoading] = useState<boolean>(false);
const [fileLoading, setFileLoading] = useState<boolean>(false); const [fileLoading, setFileLoading] = useState<boolean>(false);
@ -246,7 +247,7 @@ function Form(): JSX.Element {
inputFile.current.click(); inputFile.current.click();
} }
async function goToFAQ(e) { async function goToFAQ(e : any) {
e.preventDefault(); e.preventDefault();
window.location.href = '/faq'; window.location.href = '/faq';
} }
@ -373,18 +374,8 @@ function Form(): JSX.Element {
try { try {
if (payloadBody) { if (payloadBody) {
let selectedReceipt; const selectedReceipt = payloadBody.shcReceipt;
let filenameDetails = ''; const filenameDetails = selectedReceipt.cardOrigin.replace(' ', '-');
if (payloadBody.rawData.length > 0) {
// This is an SHC receipt, so do our SHC thing
selectedReceipt = payloadBody.shcReceipt;
filenameDetails = selectedReceipt.cardOrigin.replace(' ', '-');
} else {
selectedReceipt = payloadBody.receipts[selectedDose];
const vaxName = selectedReceipt.vaccineName.replace(' ', '-');
const passDose = selectedReceipt.numDoses;
filenameDetails = `${vaxName}-${passDose}`;
}
const passName = selectedReceipt.name.replace(' ', '-'); const passName = selectedReceipt.name.replace(' ', '-');
const covidPassFilename = `grassroots-receipt-${passName}-${filenameDetails}.pkpass`; const covidPassFilename = `grassroots-receipt-${passName}-${filenameDetails}.pkpass`;
@ -418,9 +409,9 @@ function Form(): JSX.Element {
} }
// Add Pass to Google Pay // Add Pass to Google Pay
async function addToGooglePay() { async function addToGooglePay(e : any) {
event.preventDefault(); e.preventDefault();
setSaveLoading(true); setSaveLoading(true);
if (!file && !qrCode) { if (!file && !qrCode) {
@ -431,15 +422,6 @@ function Form(): JSX.Element {
try { try {
if (payloadBody) { if (payloadBody) {
let selectedReceipt;
if (payloadBody.rawData.length > 0) { // shc stuff
const sortedKeys = Object.keys(payloadBody.shcReceipt.vaccinations).sort(); // pickup the last key in the receipt table
const lastKey = sortedKeys[sortedKeys.length - 1];
selectedReceipt = payloadBody.shcReceipt.vaccinations[lastKey];
} else {
selectedReceipt = payloadBody.receipts[selectedDose];
}
console.log('> increment count'); console.log('> increment count');
await incrementCount(); await incrementCount();
@ -494,15 +476,13 @@ function Form(): JSX.Element {
document.getElementById('shc-image-header').hidden = false; document.getElementById('shc-image-header').hidden = false;
console.log('made canvas visible'); console.log('made canvas visible');
const newPhotoBlob = await Photo.generateSHCPass(payloadBody, shouldRegister); await Photo.generateSHCPass(payloadBody, shouldRegister);
console.log('generated blob'); console.log('generated blob');
setPhotoBlob(newPhotoBlob);
} }
console.log('done photo render'); console.log('done photo render');
} catch (e) { } catch (e) {
Sentry.captureException(e); Sentry.captureException(e);
setPhotoBlob(undefined);
setAddErrorMessage(e.message); setAddErrorMessage(e.message);
} }
} }
@ -511,36 +491,7 @@ function Form(): JSX.Element {
await renderPhoto(payloadBody, false); await renderPhoto(payloadBody, false);
} }
async function saveAsPhoto() { const setDose = (e : any) => {
setSaveLoading(true);
if (!file && !qrCode) {
setAddErrorMessage('noFileOrQrCode');
setSaveLoading(false);
return;
}
try {
// This is an SHC receipt, so do our SHC thing
const selectedReceipt = payloadBody.shcReceipt;
const filenameDetails = selectedReceipt.cardOrigin.replace(' ', '-');
const passName = selectedReceipt.name.replace(' ', '-');
const covidPassFilename = `grassroots-receipt-${passName}-${filenameDetails}.png`;
await incrementCount();
saveAs(photoBlob, covidPassFilename);
setSaveLoading(false);
} catch (e) {
Sentry.captureException(e);
setAddErrorMessage(e.message);
setSaveLoading(false);
}
}
const setDose = (e) => {
setSelectedDose(e.target.value); setSelectedDose(e.target.value);
} }
@ -693,14 +644,15 @@ function Form(): JSX.Element {
</div> </div>
<div className="grid grid-cols-1 md:grid-cols-2 gap-5 items-center justify-items-stretch"> <div className="grid grid-cols-1 md:grid-cols-2 gap-5 items-center justify-items-stretch">
<button disabled={saveLoading} className=" bg-black outline-apple rounded-md" id="download" type="submit" value='applewallet' name='action'> <button disabled={saveLoading || isDisabledAppleWallet} id="download" type="submit" value='applewallet' name='action'
className={'outline-apple rounded-md ' + ((!payloadBody || saveLoading || isDisabledAppleWallet)? 'bg-gray-300 cursor-not-allowed':'bg-black cursor-pointer')}>
<div className="flex justify-center"> <div className="flex justify-center">
<img style={{height: 40}} src="apple_wallet.svg" alt={t('index:addToWallet')}/> <img style={{height: 40}} src="apple_wallet.svg" alt={t('index:addToWallet')}/>
</div> </div>
</button> </button>
<button id="addToGooglePay" type="button" disabled={saveLoading} value='gpay' name='action' onClick={addToGooglePay} <button id="addToGooglePay" type="button" disabled={saveLoading || isDisabledGooglePay} value='gpay' name='action' onClick={addToGooglePay}
className=" bg-black rounded-md"> className={'rounded-md ' + ((!payloadBody || saveLoading || isDisabledGooglePay)? 'bg-gray-300 cursor-not-allowed':'bg-black cursor-pointer')}>
<div className="flex justify-center"> <div className="flex justify-center">
<img style={{height: 40}} src="gpay_light.svg" alt={t('index:addToGooglePay')}/> <img style={{height: 40}} src="gpay_light.svg" alt={t('index:addToGooglePay')}/>
</div> </div>

View File

@ -32,13 +32,10 @@ function Page(props: PageProps): JSX.Element {
<a href="https://github.com/billylo1/covidpass" className="underline">{t('common:gitHub')}</a> <a href="https://github.com/billylo1/covidpass" className="underline">{t('common:gitHub')}</a>
<a href="https://vaccine-ontario.ca" className="underline">{t('common:returnToMainSite')}</a> <a href="https://vaccine-ontario.ca" className="underline">{t('common:returnToMainSite')}</a>
</nav> </nav>
<div className="flex pt-4 flex-row space-x-4 justify-center text-md flex-wrap">Last updated: 2021-10-19 (v2.2.0)</div> <div className="flex pt-4 flex-row space-x-4 justify-center text-md flex-wrap">Last updated: 2021-10-23 (v2.2.1)</div>
</footer> </footer>
</main> </main>
</div> </div>
<br/>
<br/>
<br/>
<canvas id="canvas" style={{display: 'none'}}/> <canvas id="canvas" style={{display: 'none'}}/>
</div> </div>
) )

View File

@ -0,0 +1,105 @@
{
"iss": "https://covidrecords.alberta.ca/smarthealth/issuer",
"nbf": 1633132472,
"vc": {
"type": [
"https://smarthealth.cards#health-card",
"https://smarthealth.cards#covid19",
"https://smarthealth.cards#immunization"
],
"credentialSubject": {
"fhirVersion": "4.0.1",
"fhirBundle": {
"resourceType": "Bundle",
"type": "collection",
"entry": [
{
"fullUrl": "resource:0",
"resource": {
"resourceType": "Patient",
"name": [
{
"family": "LASTNAME",
"given": [
"FIRSTNAME"
]
}
],
"birthDate": "YYYY-MM-DD"
}
},
{
"fullUrl": "resource:1",
"resource": {
"resourceType": "Immunization",
"meta": {
"security": [
{
"system": "https://smarthealth.cards/ial",
"code": "IAL1.2"
}
]
},
"status": "completed",
"vaccineCode": {
"coding": [
{
"system": "http://hl7.org/fhir/sid/cvx",
"code": "208"
}
]
},
"patient": {
"reference": "Patient/resource:0"
},
"occurrenceDateTime": "YYYY-MM-DD",
"performer": [
{
"actor": {
"display": "Government of Alberta - Provincial Immunization Repository"
}
}
],
"lotNumber": "SOME_STRING"
}
},
{
"fullUrl": "resource:2",
"resource": {
"resourceType": "Immunization",
"meta": {
"security": [
{
"system": "https://smarthealth.cards/ial",
"code": "IAL1.2"
}
]
},
"status": "completed",
"vaccineCode": {
"coding": [
{
"system": "http://hl7.org/fhir/sid/cvx",
"code": "207"
}
]
},
"patient": {
"reference": "Patient/resource:0"
},
"occurrenceDateTime": "YYYY-MM-DD",
"performer": [
{
"actor": {
"display": "Government of Alberta - Provincial Immunization Repository"
}
}
],
"lotNumber": "SOME_STRING"
}
}
]
}
}
}
}

View File

@ -0,0 +1,125 @@
{
"iss": "https://pvcprod.gov.pe.ca",
"vc": {
"credentialSubject": {
"fhirBundle": {
"resourceType": "Bundle",
"entry": [
{
"resource": {
"resourceType": "Patient",
"name": [
{
"given": [
"FIRSTNAME"
],
"family": "LASTNAME"
}
],
"birthDate": "YYYY-MM-DD"
},
"fullUrl": "resource:0"
},
{
"resource": {
"status": "completed",
"performer": [
{
"actor": {
"display": "PE, Canada"
}
}
],
"patient": {
"reference": "resource:0"
},
"resourceType": "Immunization",
"lotNumber": "SOME_STRING",
"vaccineCode": {
"coding": [
{
"code": "208",
"system": "http://hl7.org/fhir/sid/cvx"
},
{
"code": "28581000087106",
"system": "http://snomed.info/sct"
}
]
},
"meta": {
"security": [
{
"code": "IAL1.4",
"system": "https://smarthealth.cards/ial"
}
]
},
"occurrenceDateTime": "YYYY-MM-DD",
"manufacturer": {
"identifier": {
"system": "http://hl7.org/fhir/sid/mvx",
"value": "PFR"
}
}
},
"fullUrl": "resource:1"
},
{
"resource": {
"status": "completed",
"performer": [
{
"actor": {
"display": "PE, Canada"
}
}
],
"patient": {
"reference": "resource:0"
},
"resourceType": "Immunization",
"lotNumber": "SOME_STRING",
"vaccineCode": {
"coding": [
{
"code": "207",
"system": "http://hl7.org/fhir/sid/cvx"
},
{
"code": "28571000087109",
"system": "http://snomed.info/sct"
}
]
},
"meta": {
"security": [
{
"code": "IAL1.4",
"system": "https://smarthealth.cards/ial"
}
]
},
"occurrenceDateTime": "YYYY-MM-DD",
"manufacturer": {
"identifier": {
"system": "http://hl7.org/fhir/sid/mvx",
"value": "MOD"
}
}
},
"fullUrl": "resource:2"
}
],
"type": "collection"
},
"fhirVersion": "4.0.1"
},
"type": [
"https://smarthealth.cards#health-card",
"https://smarthealth.cards#immunization",
"https://smarthealth.cards#covid19"
]
},
"nbf": 1634941882.075
}

View File

@ -1,6 +1,6 @@
{ {
"name": "grassroots_covidpass", "name": "grassroots_covidpass",
"version": "2.2.0", "version": "2.2.1",
"author": "Billy Lo <billy@vaccine-ontario.ca>", "author": "Billy Lo <billy@vaccine-ontario.ca>",
"license": "MIT", "license": "MIT",
"private": false, "private": false,

View File

@ -42,8 +42,8 @@ function Index(): JSX.Element {
}, []); }, []);
const title = 'Grassroots - vaccination QR Code import for Apple and Android devices. Supports BC AB SK MB ON QC NS YK NT NY NJ CA LA VA HI UT DE'; const title = 'Grassroots - vaccination QR Code import for Apple and Android devices. Supports BC AB SK MB ON QC NS PE NL YK NT NY NJ CA LA VA HI UT KY OK NV NM DE';
const description = 'Grassroots imports vaccination QR codes and stores them on Apple and Android devices in a convenient, secure, and privacy-respecting way. Supports SHC QR codes from BC AB SK MB ON QC NS YK NT NY NJ CA LA VA HI UT DE'; const description = 'Grassroots imports vaccination QR codes and stores them on Apple and Android devices in a convenient, secure, and privacy-respecting way. Supports SHC QR codes from BC AB SK MB ON QC NS PE NL YK NT NY NJ CA LA VA HI UT KY OK NV NM DE';
return ( return (
<> <>

View File

@ -1,6 +1,6 @@
title: Vaccination Receipt to Mobile Wallets title: Vaccination Receipt to Mobile Wallets
subtitle: This utility (created by volunteers) copies your proof-of-vaccination QR code into either Apple Wallet (for iOS 15+), Google Pay Wallet (for Android 8.1+), or a Photo pass (for all others) for easy access. subtitle: This utility (created by volunteers) copies your proof-of-vaccination QR code into either Apple Wallet (for iOS 15+), Google Pay Wallet (for Android 8.1+), or a Photo pass (for all others) for easy access.
subtitle2: We now support importing QR codes from Ontario, British Columbia, Québec, Alberta, Nova Scotia, Saskatchewan, Yukon, Northwest Territories, California, New York, Louisiana, New Jersey, Hawaii, Virginia, Utah, and Delaware! subtitle2: We now support importing QR codes from Ontario, British Columbia, Québec, Alberta, Nova Scotia, Saskatchewan, Yukon, Northwest Territories, Newfoundland and Labrador, Prince Edward Island, California, New York, Louisiana, New Jersey, Hawaii, Virginia, Utah, Kentucky, Oklahoma, New Mexico, Nevada, Connecticut, and Delaware!
continueSpirit: Continuing the spirit of ❤️ @VaxHuntersCanada ❤️ continueSpirit: Continuing the spirit of ❤️ @VaxHuntersCanada ❤️
privacyPolicy: Privacy Policy privacyPolicy: Privacy Policy
gitHub: GitHub gitHub: GitHub

View File

@ -28,7 +28,7 @@ familyA: Yes. You can save multiple Apple Wallet, Google Pay, or Photo cards on
freeQ: Is this free and non-commercial? freeQ: Is this free and non-commercial?
freeA: Similar to %s, there are no commercial interests. Just volunteers trying to do our part to help the community. freeA: Similar to %s, there are no commercial interests. Just volunteers trying to do our part to help the community.
otherProvincesQ: How about support for other provinces or US states? otherProvincesQ: How about support for other provinces or US states?
otherProvincesA: We now have support for Ontario, British Columbia, Québec, Alberta, Saskatchewan, Nova Scotia, Yukon, Northwest Territories, California, New York, New Jersey, Louisiana, Hawaii, Virginia, Utah, and Delaware QR codes. If you have a QR code that is not currently supported by our app, please contact us at %s otherProvincesA: We now have support for Ontario, British Columbia, Québec, Alberta, Saskatchewan, Nova Scotia, Yukon, Northwest Territories, Newfoundland and Labrador, Prince Edward Island, California, New York, New Jersey, Louisiana, Hawaii, Virginia, Utah, Kentucky, Oklahoma, New Mexico, Nevada, Connecticut, and Delaware QR codes. If you have a QR code that is not currently supported by our app, please contact us at %s
appleWatchQ: How about Apple Watch? appleWatchQ: How about Apple Watch?
appleWatchA: If you have iCloud sync enabled, you will see the pass on the watch too. Please be aware though that the new QR codes may be too large to display accurately on older Apple Watches due to their screen size. appleWatchA: If you have iCloud sync enabled, you will see the pass on the watch too. Please be aware though that the new QR codes may be too large to display accurately on older Apple Watches due to their screen size.
whyQ: Why have we taken time to build this? whyQ: Why have we taken time to build this?

View File

@ -194,6 +194,148 @@ export const issuers = [
x: "alTrUEv7wMrOf9Sge9GeSAwz8cGz56JsJaZKzOlRQG4", x: "alTrUEv7wMrOf9Sge9GeSAwz8cGz56JsJaZKzOlRQG4",
y: "N1eSU9XhVdtb7l3rYj6_mXxHDVHj5ZDN_oB-sq6vVH8" }, y: "N1eSU9XhVdtb7l3rYj6_mXxHDVHj5ZDN_oB-sq6vVH8" },
] ]
},
{
id: "ca.nl",
display: "Newfoundland and Labrador",
iss: "https://www.gov.nl.ca/covid-19/life-during-covid-19/vaccination-record/prod",
keys: [
{ kid: "UboztS3pE1mr0dnG7Rv24kRNqlYbHrbxd-qBFerpZvI",
alg: "ES256", kty: "EC", crv: "P-256", use: "sig",
x: "mB0PKTVRnr3JCtyucEjCHXkXW3COg5KP0y4gKCNJxWc",
y: "PTpxiYECNiuyRwpwqjme8OIFdG7N-HwN2XH02phdZCs" },
]
},
{
id: "us.ct",
display: "Connecticut, USA",
iss: "https://smarthealthcard.iisregistry.net/connecticut/issuer",
keys: [
{ kid: "SzxkIArQIMhaFvD7yASR75tYfcIvc3SxbcY82WqpJYc",
alg: "ES256", kty: "EC", crv: "P-256", use: "sig",
x: "WOfXcDqfbL5pHYJ7TZ1G5nUs5RlpFEULjKK58-GIZHU",
y: "cfP-u94WNE_gBD3dvp2XqKHF7k4JWC-JJsOhf8bxk4M" },
]
},
{
id: "us.nv",
display: "Nevada, USA",
iss: "https://smarthealthcard.iisregistry.net/nevada/issuer",
keys: [
{ kid: "MLHtoHWeAr5PeKA8C-S16QduFcPVHYMnuRAMLag1Fus",
alg: "ES256", kty: "EC", crv: "P-256", use: "sig",
x: "XCA3RZFKOnDep4BA8MhxrUguZZeTofsm16WuQ-a3sKU",
y: "9W0_JW9U7s98tOuZrkYiQyDEOoxgpMAEnIItC0_vLME" },
]
},
{
id: "us.nm",
display: "New Mexico, USA",
iss: "https://smarthealthcard.iisregistry.net/newmexico/issuer",
keys: [
{ kid: "TyJXvion-N1hiPReLqGqP3GEHIHUKqDbpNF6_Yx2x1g",
alg: "ES256", kty: "EC", crv: "P-256", use: "sig",
x: "h6eiqSzzTu5x5lL3WcrQcN8Dw-InqaZO24ejEqtaBUo",
y: "lwnDiJgFRShPY0PMmfGdGWF84XlpJxIFU1C4cYnQhGM" },
]
},
{
id: "us.ok",
display: "Oklahoma, USA",
iss: "https://smarthealthcard.iisregistry.net/oklahoma/issuer",
keys: [
{ kid: "mdc6xSqYJBj5wAfdO75tFY96MP1sRwv8o1vRKcJvWe4",
alg: "ES256", kty: "EC", crv: "P-256", use: "sig",
x: "_0Ykdew25aOEAoEqgiKOwsuQHaSBo8m4cxp7JrpnFoE",
y: "SWDMBC-y-YMiso_hSQB6bl3MvYOii-rpYtgQJISt84Y" },
]
},
{
id: "us.ky",
display: "Kentucky, USA",
iss: "https://smarthealthcard.iisregistry.net/kentucky/issuer",
keys: [
{ kid: "xjDAI01aAqqKVfTby1HgI5mGmaNov_iNAe7YU42-GYI",
alg: "ES256", kty: "EC", crv: "P-256", use: "sig",
x: "XGD2eTGy-Ty264jBz6__6yVih4HIShgGzWdJBAeLJOU",
y: "KvM4EauttKWSVjF5unr7MUWz1QSwsEW46A4aGWsFY4I" },
{ kid: "COtZJhsWjnta-bYXwlRkWlldA95Ai7S6YGZE4MPB-tk",
alg: "ES256", kty: "EC", crv: "P-256", use: "sig",
x: "X2Erdh2dszBgm0y5RF0C6tcA2fwGdDU_ZsOeJLjjcQk",
y: "haxiYhRJifQY_qU3Dv_qqk1aBzY4IrcegLqu6rvikMQ" },
]
},
{
id: "ca.pe",
display: "Prince Edward Island",
iss: "https://pvcprod.gov.pe.ca",
keys: [
{ kid: "Z8YjtXO3hGPpbDR9wMcrifbcL-PswLyMFhEJGSn1yC0",
alg: "ES256", kty: "EC", crv: "P-256", use: "sig",
x: "oxD89LV7Y_GBRei7wNmKLYdo-25ujdI74OdC9NkQlyQ",
y: "NNY2ntabDPKk_5fnjpRyxkre34Ru7NzrFgcWgRKb2I8",
date: 1630513678410 },
{ kid: "uXqBkl4jkadfFUtcrkeVtXRaCCy-nNHA1aD6nKb0OJ4",
alg: "ES256", kty: "EC", crv: "P-256", use: "sig",
x: "YwKKFnC2hgQHZVsqKUz9oDwjF0FvCrYIKicT9HpwuLQ",
y: "9WuBIW9S5eXKRhkFW2LvcVsgFGgOURlMIU1i_syhbyg",
date: 1630517153168 },
{ kid: "rDW5Ssu6mvGAnouM1oaeiDh06OdTePgH9ZwC1MbwAoY",
alg: "ES256", kty: "EC", crv: "P-256", use: "sig",
x: "M6tuTL6MBUHZNfzGUTivBcpGXord54xHiKVL3XIOLM0",
y: "fgSw0roeZpXgYLHhfSz-W_XWMZu-RqbR7my-_d9Vvl8",
date: 1630517520701 },
{ kid: "AWbze1dsT_69BBvlCv8g8rzUAyIBM3q6OT7zMQxBWVU",
alg: "ES256", kty: "EC", crv: "P-256", use: "sig",
x: "nbI9SWaXfrEnbxG36Q8EWkl-sKNirCAlGqpseG1BERA",
y: "ogVD4hZwgT30g-h6UKZBTMIbYeg6u4W7TI7mzvp1Fy8",
date: 1630600429633 },
{ kid: "icKN8sxNH2ijHGcmqCOWHKziRPd25BoENF5Z0dVrkaI",
alg: "ES256", kty: "EC", crv: "P-256", use: "sig",
x: "AjAdLBY7cpq5m3Eq5MTtENvs5TuBPbyqRcNa5hTxgq8",
y: "MKxRT1jZpZpLjx9cefytBiE5s18M-jSAmMNYmldGjbE",
date: 1630613433678 },
{ kid: "SkSCQeF4JDcLSShAM5wejAAdB8rIT3X9-EH8rLNk0fY",
alg: "ES256", kty: "EC", crv: "P-256", use: "sig",
x: "5pwa78_VUGsxRK0lP_PODB2wBofjlxcaFl6r0N1-ODE",
y: "oV2yJ0qVZG5INljTl5AUbU1uMxlVFS-BhNC12LzdHN0",
date: 1630613435615 },
{ kid: "L0ACjkybPcCgJOrMywfz3gJGDeEvxkUSa2j9Pbhjwz8",
alg: "ES256", kty: "EC", crv: "P-256", use: "sig",
x: "CTa6_OO8QKrrlNXjXAbDc0rnvPRGo5UpfmGnuCrWiPw",
y: "UXbNAiw7sSImEvOwWH1NytR8MXSaXCb6sWR9z4fTA_M",
date: 1630613436458 },
{ kid: "pCmOvJBUfo30WuG9UVlDCOvyBhPScLU2_CrAGy9A4Q8",
alg: "ES256", kty: "EC", crv: "P-256", use: "sig",
x: "kvwC_MYV8lBVfeamcGj5XXV944VwhSJZ_rBKD0Hcn_s",
y: "UR8MzZCVIArauwJ-OODIbim0HLRbCFkDPXNjPsoRmfM",
date: 1630613437404 },
{ kid: "gzeRVlR44Ia5cL67gN-6HhWsBikN_ZodlGAeGLv_HsI",
alg: "ES256", kty: "EC", crv: "P-256", use: "sig",
x: "QmZMR0zgMTKLgqSKUeOfV10moL5nLcjfeUIO3Ns1u0M",
y: "FP8vGUU-wAkqUd07o5q2tdakV5rJ6hg2cT0bgunW9kU",
date: 1630613438138 },
{ kid: "D86U5NZ_OusITiBEqmgW2gRUAw1vhcbRtHujJ4wPx7w",
alg: "ES256", kty: "EC", crv: "P-256", use: "sig",
x: "J24rRVpojPItd1Wda4ZkIc6gooPEDzlstiSQMqHaURA",
y: "X5jqWz8RY6Zkc6Ib6WNnnkAJHwt1C-PmtELC2c13hyQ",
date: 1630613469805 },
{ kid: "JMCyyrr9wjXT5FY8rx6Jiel4DCfXS0ZDQPUuGdv4P1k",
alg: "ES256", kty: "EC", crv: "P-256", use: "sig",
x: "fY8esOCER1T-68OIvXtizxtXVC7KT9qsztZQhll3UJk",
y: "6J1DpZVjPGEQG9EApygaM0ZkfQOLRAWuN_YB3BT93DU",
date: 1631122847087 },
{ kid: "B5zoHRXFX54o1XgT9IbQLEqTc1GK4SEJg9vjd-K4n3o",
alg: "ES256", kty: "EC", crv: "P-256", use: "sig",
x: "Ze3--8ERukpW9nMd317lQJ_97qg5q7BEqFMoJmGj59s",
y: "H36ot9jzPKpPVa4aHka7SXnPOTjEBdtZRZ4wN-OUHQw",
date: 1631207785437 },
{ kid: "cZxJnAOT6390E103SoaVyX2RNJenO46qyBcceU4A8go",
alg: "ES256", kty: "EC", crv: "P-256", use: "sig",
x: "KhqF3iMvKDeiarW85OFrKstJWK5maNEi1H6JttLfky8",
y: "RWUlC2s1aEdminnoqyMxtyU4fVlsDLJt36feT0qsJmU",
date: 1634299350636 }
]
} }
]; ];

View File

@ -42,7 +42,7 @@ export async function getPayloadBodyFromFile(file: File): Promise<PayloadBody> {
async function getImageDataFromPdfPage(pdfPage: PDFPageProxy): Promise<ImageData> { async function getImageDataFromPdfPage(pdfPage: PDFPageProxy): Promise<ImageData> {
const pdfScale = 2; const pdfScale = 4;
const canvas = <HTMLCanvasElement>document.getElementById('canvas'); const canvas = <HTMLCanvasElement>document.getElementById('canvas');
const canvasContext = canvas.getContext('2d'); const canvasContext = canvas.getContext('2d');
@ -61,7 +61,7 @@ async function getImageDataFromPdfPage(pdfPage: PDFPageProxy): Promise<ImageData
await renderTask.promise; await renderTask.promise;
// Return PDF Image Data // Return PDF Image Data
return canvasContext.getImageData(0, 0, canvas.width, canvas.height); return Promise.resolve(canvasContext.getImageData(0, 0, canvas.width, canvas.height));
} }

View File

@ -3,7 +3,7 @@ import { Integrations } from '@sentry/tracing';
export const initSentry = () => { export const initSentry = () => {
SentryModule.init({ SentryModule.init({
release: 'grassroots_covidpass@2.2.0', // App version. Needs to be manually updated as we go unless we make the build smarter release: 'grassroots_covidpass@2.2.1', // App version. Needs to be manually updated as we go unless we make the build smarter
dsn: 'https://7120dcf8548c4c5cb148cdde2ed6a778@o1015766.ingest.sentry.io/5981424', dsn: 'https://7120dcf8548c4c5cb148cdde2ed6a778@o1015766.ingest.sentry.io/5981424',
integrations: [ integrations: [
new Integrations.BrowserTracing(), new Integrations.BrowserTracing(),