From b404dade047b60eb950315516adead956261e68d Mon Sep 17 00:00:00 2001 From: Allan Lyons Date: Fri, 22 Oct 2021 22:30:12 -0600 Subject: [PATCH 1/5] Added AB example SHC payload --- examples/shc-ca-ab.decoded.json | 105 ++++++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 examples/shc-ca-ab.decoded.json diff --git a/examples/shc-ca-ab.decoded.json b/examples/shc-ca-ab.decoded.json new file mode 100644 index 0000000..84f97f1 --- /dev/null +++ b/examples/shc-ca-ab.decoded.json @@ -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" + } + } + ] + } + } + } +} From 901c61dc9808fe09e877e5b22cbb13ae77704031 Mon Sep 17 00:00:00 2001 From: Ryan Slobojan Date: Sat, 23 Oct 2021 17:04:26 -0400 Subject: [PATCH 2/5] Added many new issuers: * Newfoundland and Labrador * Prince Edward Island * Connecticut * Nevada * New Mexico * Oklahoma More will be added shortly, and docs will also be updated, but getting this pushed out now so users can create PEI QR codes (this is request-driven) --- src/issuers.js | 127 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 127 insertions(+) diff --git a/src/issuers.js b/src/issuers.js index 9c75a6c..ac0bf3f 100644 --- a/src/issuers.js +++ b/src/issuers.js @@ -194,6 +194,133 @@ export const issuers = [ x: "alTrUEv7wMrOf9Sge9GeSAwz8cGz56JsJaZKzOlRQG4", 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/newmexico/issuer", + keys: [ + { kid: "mdc6xSqYJBj5wAfdO75tFY96MP1sRwv8o1vRKcJvWe4", + alg: "ES256", kty: "EC", crv: "P-256", use: "sig", + x: "_0Ykdew25aOEAoEqgiKOwsuQHaSBo8m4cxp7JrpnFoE", + y: "SWDMBC-y-YMiso_hSQB6bl3MvYOii-rpYtgQJISt84Y" }, + ] + }, + { + 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 } + ] } ]; From 6c13b637981f161dd496291ca09a07278be97a88 Mon Sep 17 00:00:00 2001 From: Ryan Slobojan Date: Sat, 23 Oct 2021 17:30:33 -0400 Subject: [PATCH 3/5] Fix Oklahoma issuer URL, add Kentucky, add PEI example decoded SHC --- examples/shc-ca-pe-decoded.json | 125 ++++++++++++++++++++++++++++++++ src/issuers.js | 17 ++++- 2 files changed, 141 insertions(+), 1 deletion(-) create mode 100644 examples/shc-ca-pe-decoded.json diff --git a/examples/shc-ca-pe-decoded.json b/examples/shc-ca-pe-decoded.json new file mode 100644 index 0000000..7856574 --- /dev/null +++ b/examples/shc-ca-pe-decoded.json @@ -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 +} \ No newline at end of file diff --git a/src/issuers.js b/src/issuers.js index ac0bf3f..00abbbd 100644 --- a/src/issuers.js +++ b/src/issuers.js @@ -242,7 +242,7 @@ export const issuers = [ { id: "us.ok", display: "Oklahoma, USA", - iss: "https://smarthealthcard.iisregistry.net/newmexico/issuer", + iss: "https://smarthealthcard.iisregistry.net/oklahoma/issuer", keys: [ { kid: "mdc6xSqYJBj5wAfdO75tFY96MP1sRwv8o1vRKcJvWe4", alg: "ES256", kty: "EC", crv: "P-256", use: "sig", @@ -250,6 +250,21 @@ export const issuers = [ 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", From 67a4a1500780cf76fa7d37971fbcd5519d3f4b2d Mon Sep 17 00:00:00 2001 From: Ryan Slobojan Date: Sat, 23 Oct 2021 18:51:36 -0400 Subject: [PATCH 4/5] Added new provinces and states to the list of accepted regions * Added links to NL and PEI proof-of-vaccination portals * Fixed Wallet and Pay buttons not looking disabled when inactive * Bumped version to 2.2.1 * Some dead code removal and warning cleanup * We need to find a better way to list regions - it's turning into an eternal run-on sentence, hard to identify supported regions --- components/Form.tsx | 74 +++++++----------------------------- components/Page.tsx | 2 +- package.json | 2 +- pages/index.tsx | 4 +- public/locales/en/common.yml | 2 +- public/locales/en/faq.yml | 2 +- src/sentry.ts | 2 +- 7 files changed, 20 insertions(+), 68 deletions(-) diff --git a/components/Form.tsx b/components/Form.tsx index a0914f3..9cc771f 100644 --- a/components/Form.tsx +++ b/components/Form.tsx @@ -43,8 +43,10 @@ const options = [ { label: 'Alberta', value: 'https://covidrecords.alberta.ca/form'}, { label: 'British Columbia', value: 'https://www.healthgateway.gov.bc.ca/vaccinecard'}, { 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: '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: 'Saskatchewan', value: 'https://services.saskatchewan.ca/#/login'}, { 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(undefined); const [file, setFile] = useState(undefined); const [payloadBody, setPayloadBody] = useState(undefined); - const [photoBlob, setPhotoBlob] = useState(undefined); const [saveLoading, setSaveLoading] = useState(false); const [fileLoading, setFileLoading] = useState(false); @@ -186,7 +187,7 @@ function Form(): JSX.Element { inputFile.current.click(); } - async function goToFAQ(e) { + async function goToFAQ(e : any) { e.preventDefault(); window.location.href = '/faq'; } @@ -313,18 +314,8 @@ function Form(): JSX.Element { try { if (payloadBody) { - let selectedReceipt; - let filenameDetails = ''; - 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 selectedReceipt = payloadBody.shcReceipt; + const filenameDetails = selectedReceipt.cardOrigin.replace(' ', '-'); const passName = selectedReceipt.name.replace(' ', '-'); const covidPassFilename = `grassroots-receipt-${passName}-${filenameDetails}.pkpass`; @@ -358,9 +349,9 @@ function Form(): JSX.Element { } // Add Pass to Google Pay - async function addToGooglePay() { + async function addToGooglePay(e : any) { - event.preventDefault(); + e.preventDefault(); setSaveLoading(true); if (!file && !qrCode) { @@ -371,15 +362,6 @@ function Form(): JSX.Element { try { 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'); await incrementCount(); @@ -435,15 +417,13 @@ function Form(): JSX.Element { document.getElementById('shc-image-header').hidden = false; console.log('made canvas visible'); - const newPhotoBlob = await Photo.generateSHCPass(payloadBody, shouldRegister); + await Photo.generateSHCPass(payloadBody, shouldRegister); console.log('generated blob'); - setPhotoBlob(newPhotoBlob); } console.log('done photo render'); } catch (e) { Sentry.captureException(e); - setPhotoBlob(undefined); setAddErrorMessage(e.message); } } @@ -452,36 +432,7 @@ function Form(): JSX.Element { await renderPhoto(payloadBody, false); } - async function saveAsPhoto() { - - 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) => { + const setDose = (e : any) => { setSelectedDose(e.target.value); } @@ -634,14 +585,15 @@ function Form(): JSX.Element {
- -
diff --git a/package.json b/package.json index c34986e..b22afc9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "grassroots_covidpass", - "version": "2.2.0", + "version": "2.2.1", "author": "Billy Lo ", "license": "MIT", "private": false, diff --git a/pages/index.tsx b/pages/index.tsx index 24af6d3..ffa18eb 100644 --- a/pages/index.tsx +++ b/pages/index.tsx @@ -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 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 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 PE NL YK NT NY NJ CA LA VA HI UT KY OK NV NM DE'; return ( <> diff --git a/public/locales/en/common.yml b/public/locales/en/common.yml index b6fac00..70ac549 100644 --- a/public/locales/en/common.yml +++ b/public/locales/en/common.yml @@ -1,6 +1,6 @@ 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. -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 ❤️ privacyPolicy: Privacy Policy gitHub: GitHub diff --git a/public/locales/en/faq.yml b/public/locales/en/faq.yml index 351161e..a55ab5b 100644 --- a/public/locales/en/faq.yml +++ b/public/locales/en/faq.yml @@ -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? 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? -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? 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? diff --git a/src/sentry.ts b/src/sentry.ts index 7e34a8e..9d5eade 100644 --- a/src/sentry.ts +++ b/src/sentry.ts @@ -3,7 +3,7 @@ import { Integrations } from '@sentry/tracing'; export const initSentry = () => { 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', integrations: [ new Integrations.BrowserTracing(), From 8ba81a84986c99f2ea279d2517bca62ca17ade86 Mon Sep 17 00:00:00 2001 From: Ryan Slobojan Date: Sat, 23 Oct 2021 21:13:08 -0400 Subject: [PATCH 5/5] Fixed issue with some PDFs not detecting SHC QR codes * Doubling the pdfScale from 2 to 4 seems to make them big enough that the library can then find them --- components/Page.tsx | 3 --- src/process.ts | 4 ++-- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/components/Page.tsx b/components/Page.tsx index 5223fd6..436cf23 100644 --- a/components/Page.tsx +++ b/components/Page.tsx @@ -36,9 +36,6 @@ function Page(props: PageProps): JSX.Element { -
-
-
) diff --git a/src/process.ts b/src/process.ts index 5eb8eff..34253c1 100644 --- a/src/process.ts +++ b/src/process.ts @@ -42,7 +42,7 @@ export async function getPayloadBodyFromFile(file: File): Promise { async function getImageDataFromPdfPage(pdfPage: PDFPageProxy): Promise { - const pdfScale = 2; + const pdfScale = 4; const canvas = document.getElementById('canvas'); const canvasContext = canvas.getContext('2d'); @@ -61,7 +61,7 @@ async function getImageDataFromPdfPage(pdfPage: PDFPageProxy): Promise