Skip to content

Commit

Permalink
Merge pull request #5 from elmariachi111/schemaorg_credentials
Browse files Browse the repository at this point in the history
credential normalization for generic checks
  • Loading branch information
elmariachi111 committed Feb 17, 2021
2 parents cb176f7 + 493aba9 commit 31d9f5d
Show file tree
Hide file tree
Showing 25 changed files with 610 additions and 330 deletions.
4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -300,6 +300,8 @@ impl and extended by Consensas: https://github.com/Consensas/information-passpor
A ruby impl of health cards (DVCI)
https://github.com/dvci/health_cards

Helpers for FHIR / JSON-LD schematics
https://github.com/fhircat


### Vaccination credential initiatives
Expand Down Expand Up @@ -333,7 +335,7 @@ opinion: https://www.yogitatrainingcenter.com/w3c-verifiable-credentials-the-fai
collection / survey of all initiatives:
https://docs.google.com/document/d/1MQfZzlkYkXCXvnUXd7Cd6Y5g0RRXrKxGGqVcbBnSk1k/edit


https://techcrunch.com/2021/01/19/europe-is-working-on-a-common-framework-for-vaccine-passports/

### OT: Linting TS

Expand Down
2 changes: 2 additions & 0 deletions packages/immu-core/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
"@babel/preset-typescript": "^7.12.7",
"@truffle/contract": "^4.3.5",
"@types/dotenv-flow": "^3.1.0",
"@types/handlebars": "^4.1.0",
"@types/jest": "^26.0.20",
"@types/jsonld": "^1.5.2",
"@types/node": "^12.0.0",
Expand Down Expand Up @@ -58,6 +59,7 @@
"ethereumjs-util": "^7.0.7",
"ethr-did-registry": "^0.0.3",
"ethr-did-resolver": "git@github.com:cod1ng-earth/ethr-did-resolver.git",
"handlebars": "^4.7.7",
"jsonld": "^4.0.1",
"key-did-resolver": "^0.2.4",
"secp256k1": "^4.0.2",
Expand Down
8 changes: 0 additions & 8 deletions packages/immu-core/src/@types/Fhir.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,3 @@ export interface FHIRBundle {
export interface FHIRResource {
resource: Record<string, any>;
}

export interface ImmunizationInputParams {
lotNumber: string;
vaccineCode: string;
occurrenceDateTime: Date;
doseNumber: number;
doseQuantity: number;
}
5 changes: 5 additions & 0 deletions packages/immu-core/src/@types/index.d.ts
Original file line number Diff line number Diff line change
@@ -1,2 +1,7 @@
declare module 'did-method-key';
declare module '@relocke/base58';

declare module '*.mustache' {
const content: string;
export default content;
}
2 changes: 1 addition & 1 deletion packages/immu-core/src/EthRegistry.ts
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ export class EthRegistry {
}

//todo: check if the endpoint responds so we can't add bullshit ;)
const { contract } = this.didRegistries[network];
const { contract } = this.getDidRegistry(network);
const duration = 60 * 60 * 24 * 365 * 2;

const endpointBuffer = Buffer.from(endpoint, 'utf-8');
Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,23 @@
import { Issuer, Resolver, VaccinationCredentialVerifier, Verifier } from '..';
import { Account } from 'web3-core';
import {
Issuer,
Resolver,
VaccinationCredentialVerifier,
VerifiableCredential,
CreateFhirHL7Immunization,
SMARTHEALTH_CARD_CRED_TYPE
} from '..';
import { DID } from '../@types';
import { Create as CreateClaim, TYPE as SMARTHEALTH_CARD_CRED_TYPE } from '../semantic/FhirHL7VaccinationCredential';
import newRegistry from './common/newRegistry';
import web3 from './common/web3Provider';

describe('Vaccination Credentials', () => {
describe('Fhir HL7 / M$ Smart Health Card Vaccination Credentials', () => {
let resolver: Resolver;
let issuerAccount, subjectAccount, verifierAccount;
let issuerAccount: Account;
let subjectAccount: Account;
let didIssuer: DID;
let didSubject: DID;
let didVerifier: DID;
let issuer: Issuer;
let verifier: Verifier;

beforeAll(async () => {
const registry = await newRegistry(web3);
Expand All @@ -25,32 +31,29 @@ describe('Vaccination Credentials', () => {

issuerAccount = web3.eth.accounts.create();
subjectAccount = web3.eth.accounts.create();
verifierAccount = web3.eth.accounts.create();

didIssuer = `did:ethr:development:${issuerAccount.address}`;
didSubject = `did:ethr:development:${subjectAccount.address}`;
didVerifier = `did:ethr:development:${verifierAccount.address}`;
issuer = new Issuer(resolver, didIssuer);
verifier = new Verifier(resolver);
});

let credentials = [];
let credentials: VerifiableCredential[] = [];

it('can verify valid vaccination credentials (happy path)', async () => {
const immunization1 = CreateClaim({
doseNumber: 1,
const immunization1 = CreateFhirHL7Immunization({
doseSequence: 1,
doseQuantity: 50,
lotNumber: 'ABCDE',
occurrenceDateTime: new Date('2021-01-01T11:45:33+11:00'),
vaccineCode: '208'
cvxCode: '208'
});

const immunization2 = CreateClaim({
doseNumber: 2,
const immunization2 = CreateFhirHL7Immunization({
doseSequence: 2,
doseQuantity: 80,
lotNumber: 'EDCBA',
occurrenceDateTime: new Date('2021-01-30T12:45:33+11:00'),
vaccineCode: '208'
cvxCode: '208'
});

const credential1 = await issuer.issueCredential(didSubject, immunization1, [SMARTHEALTH_CARD_CRED_TYPE]);
Expand Down
40 changes: 26 additions & 14 deletions packages/immu-core/src/__tests__/SchemaOrgCredentials.test.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,22 @@
import { Create, TYPE as SCHEMAORG_CRED_TYPE } from '../semantic/SchemaOrgCredential';
import { Issuer, Resolver, VaccinationCredentialVerifier, Verifier } from '..';
import {
Issuer,
Resolver,
VaccinationCredentialVerifier,
Verifier,
VerifiableCredential,
CreateSchemaOrgImmunization,
SCHEMAORG_CRED_TYPE
} from '..';
import { DID } from '../@types';

import newRegistry from './common/newRegistry';
import web3 from './common/web3Provider';
import { Account } from 'web3-core';

describe('Vaccination Credentials', () => {
describe('Schema.org Vaccination Credentials', () => {
let resolver: Resolver;
let issuerAccount, subjectAccount;
let issuerAccount: Account;
let subjectAccount: Account;
let didIssuer: DID;
let didSubject: DID;
let issuer: Issuer;
Expand All @@ -33,27 +42,30 @@ describe('Vaccination Credentials', () => {
verifier = new Verifier(resolver);
});

let credentials = [];
let credentials: VerifiableCredential[] = [];
let immunization1: any;

it('can create a schema.org credential', async () => {
const vaccination1 = Create({
doseNumber: 1,
it('can create a schema.org immunization claim', async () => {
immunization1 = CreateSchemaOrgImmunization({
doseSequence: 1,
doseQuantity: 50,
lotNumber: 'ABCDE',
occurrenceDateTime: new Date('2021-01-01T11:45:33+11:00'),
vaccineCode: '210'
cvxCode: '208'
});
});

const vaccination2 = Create({
doseNumber: 2,
it('can create a verifiable set of schema.org credential', async () => {
const immunization2 = CreateSchemaOrgImmunization({
doseSequence: 2,
doseQuantity: 50,
lotNumber: 'EDCBA',
occurrenceDateTime: new Date('2021-01-30T11:45:33+11:00'),
vaccineCode: '210'
cvxCode: '208'
});

const credentialPayload1 = await issuer.issueCredential(didSubject, vaccination1, [SCHEMAORG_CRED_TYPE]);
const credentialPayload2 = await issuer.issueCredential(didSubject, vaccination2, [SCHEMAORG_CRED_TYPE]);
const credentialPayload1 = await issuer.issueCredential(didSubject, immunization1, [SCHEMAORG_CRED_TYPE]);
const credentialPayload2 = await issuer.issueCredential(didSubject, immunization2, [SCHEMAORG_CRED_TYPE]);

const signingKey = await resolver.resolve(didIssuer);

Expand Down
27 changes: 14 additions & 13 deletions packages/immu-core/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,20 +9,7 @@ export * from './displayCredential';

export { VerifiedCredential, VerifiableCredential, Verifiable, W3CCredential } from 'did-jwt-vc';
export { JWTVerified } from 'did-jwt';
export { default as VaccinationCredentialVerifier } from './semantic/VaccinationCredentialVerifier';
export {
Create as CreateFhirHL7VaccinationCredential,
TYPE as SMARTHEALTH_CARD_CRED_TYPE
} from './semantic/FhirHL7VaccinationCredential';

export {
Create as CreateSchemaOrgVaccinationCredential,
TYPE as SCHEMAORG_CARD_CRED_TYPE
} from './semantic/SchemaOrgCredential';

export { PublicKey, Authentication, DIDDocument } from 'did-resolver';
export { ImmunizationInputParams } from './@types/Fhir';

export {
CredentialPayload,
JwtCredentialSubject,
Expand All @@ -31,3 +18,17 @@ export {

export { DID, BufferLike, JSONProof } from './@types';
export * from './@types/Jolocom';

export { FHIRResource, FHIRBundle } from './@types/Fhir';
export { default as VaccinationCredentialVerifier } from './semantic/VaccinationCredentialVerifier';
export {
Create as CreateFhirHL7Immunization,
TYPE as SMARTHEALTH_CARD_CRED_TYPE
} from './semantic/FhirHL7VaccinationCredential';

export {
Create as CreateSchemaOrgImmunization,
TYPE as SCHEMAORG_CRED_TYPE
} from './semantic/SchemaOrgVaccinationCredential';

export * as Covid19 from './semantic/Covid19';
Loading

0 comments on commit 31d9f5d

Please sign in to comment.