Skip to content

Commit

Permalink
refactor: Generic examples
Browse files Browse the repository at this point in the history
  • Loading branch information
simonas-notcat authored and mirceanis committed Sep 7, 2020
1 parent 48427a8 commit 4ef02e2
Show file tree
Hide file tree
Showing 8 changed files with 67 additions and 71 deletions.
1 change: 0 additions & 1 deletion examples/generic/handle-msg.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import { AbstractIdentity } from 'daf-core'
import { agent } from './setup'

async function main() {
Expand Down
3 changes: 2 additions & 1 deletion examples/generic/package.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"name": "send-vc",
"name": "daf-generic-examples",
"private": true,
"version": "2.0.0",
"main": "index.ts",
Expand All @@ -15,6 +15,7 @@
"daf-ethr-did": "../../packages/daf-ethr-did",
"daf-libsodium": "../../packages/daf-libsodium",
"daf-resolver": "../../packages/daf-resolver",
"daf-typeorm": "../../packages/daf-typeorm",
"daf-w3c": "../../packages/daf-w3c",
"pg": "^7.18.2",
"reflect-metadata": "^0.1.13",
Expand Down
12 changes: 7 additions & 5 deletions examples/generic/send-vc.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
import { AbstractIdentity } from 'daf-core'
import { IIdentity } from 'daf-core'
import { agent } from './setup'

async function main() {
// Getting existing identity or creating a new one
let identity: AbstractIdentity
const identities = await agent.getIdentities()
let identity: IIdentity
const identities = await agent.identityManagerGetIdentities()
if (identities.length > 0) {
identity = identities[0]
} else {
identity = await agent.createIdentity()
identity = await agent.identityManagerCreateIdentity({kms: 'local'})
}

// Sign verifiable credential
Expand All @@ -24,13 +24,15 @@ async function main() {
},
})

console.log(credential)

// Send verifiable credential using DIDComm
const message = await agent.sendMessageDIDCommAlpha1({
data: {
from: identity.did,
to: 'did:ethr:rinkeby:0x79292ba5a516f04c3de11e8f06642c7bec16c490',
type: 'jwt',
body: credential.raw,
body: credential.p,
},
})
console.log({ message })
Expand Down
95 changes: 43 additions & 52 deletions examples/generic/setup.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,23 @@
import { Entities } from 'daf-core'
import {
Agent,
KeyManager,
MessageHandler,
IdentityManager,
IAgentBase,
IAgentIdentityManager,
IAgentResolve,
IAgentKeyManager,
IAgentHandleMessage,
} from 'daf-core'
import { DafResolver} from 'daf-resolver'
import { JwtMessageHandler } from 'daf-did-jwt'
import { W3c, IAgentW3c, W3cMessageHandler } from 'daf-w3c'
import { DIDComm, DIDCommMessageHandler, IAgentSendMessageDIDCommAlpha1 } from 'daf-did-comm'
import { EthrIdentityProvider } from 'daf-ethr-did'
import { KeyManagementSystem, SecretBox } from 'daf-libsodium'
import { Entities, KeyStore, IdentityStore } from 'daf-typeorm'
import { createConnection } from 'typeorm'

// Create database connection
const dbConnection = createConnection({
type: 'sqlite',
database: 'database.sqlite',
Expand All @@ -10,68 +26,43 @@ const dbConnection = createConnection({
entities: Entities,
})

// We will be using 'did:ethr' identities
import { IdentityProvider } from 'daf-ethr-did'

// SecretBox will encrypt/decrypt private keys in key store
import { SecretBox } from 'daf-libsodium'

// Generate this by running `npx daf-cli crypto -s`
const secretKey = '29739248cad1bd1a0fc4d9b75cd4d2990de535baf5caadfdf8d8f86664aa830c'
const secretBox = new SecretBox(secretKey)

// Storing serialized key pairs in the file system
import { KeyStore } from 'daf-core'
const keyStore = new KeyStore(dbConnection, secretBox)

// KeyManagementSystem is responsible for managing encryption and signing keys
import { KeyManagementSystem } from 'daf-libsodium'
const kms = new KeyManagementSystem(keyStore)

// Storing serialized identities in the file system
import { IdentityStore } from 'daf-core'
const identityStore = new IdentityStore('rinkeby-ethr', dbConnection)

// Infura is being used to access Ethereum blockchain. https://infura.io
const infuraProjectId = '5ffc47f65c4042ce847ef66a3fa70d4c'

// Injecting required dependencies, and specifying which blockchain to use and how to access it
const rinkebyIdentityProvider = new IdentityProvider({
kms,
identityStore,
network: 'rinkeby',
rpcUrl: 'https://rinkeby.infura.io/v3/' + infuraProjectId,
})

// Using local DID Document resolver. It is being used internally to
/// validate messages and to get information about service endpoints
import { DafResolver, IAgentResolve } from 'daf-resolver'

// Setting up Message Validator Chain
import { IAgentHandleMessage, HandleMessage } from 'daf-core'
import { JwtMessageHandler } from 'daf-did-jwt'
import { W3cMessageHandler } from 'daf-w3c'

// Setting up Action Handler Chain
import { DIDComm, IAgentSendMessageDIDCommAlpha1 } from 'daf-did-comm'
import { W3c, IAgentW3c } from 'daf-w3c'

// Initializing the Core by injecting dependencies
import { Agent, IAgent, IAgentIdentityManager, IdentityManager } from 'daf-core'
type ConfiguredAgent = IAgent &
type ConfiguredAgent = IAgentBase &
IAgentIdentityManager &
IAgentKeyManager &
IAgentResolve &
IAgentHandleMessage &
IAgentSendMessageDIDCommAlpha1 &
IAgentW3c

export const agent: ConfiguredAgent = new Agent({
plugins: [
new IdentityManager({ identityProviders: [rinkebyIdentityProvider] }),
new KeyManager({
store: new KeyStore(dbConnection, new SecretBox(secretKey)),
kms: {
local: new KeyManagementSystem()
}
}),
new IdentityManager({
store: new IdentityStore(dbConnection),
defaultProvider: 'did:ethr:rinkeby',
providers: {
'did:ethr:rinkeby': new EthrIdentityProvider({
defaultKms: 'local',
network: 'rinkeby',
rpcUrl: 'https://rinkeby.infura.io/v3/' + infuraProjectId,
})
}
}),
new DafResolver({ infuraProjectId }),
new HandleMessage({
dbConnection,
messageHandlers: [new JwtMessageHandler(), new W3cMessageHandler()],
new MessageHandler({
messageHandlers: [
new DIDCommMessageHandler(),
new JwtMessageHandler(),
new W3cMessageHandler()
],
}),
new DIDComm(),
new W3c(),
Expand Down
16 changes: 8 additions & 8 deletions examples/generic/yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -312,11 +312,8 @@ cross-fetch@^3.0.4:
daf-core@../../packages/daf-core, daf-core@^6.0.0:
version "6.0.0"
dependencies:
blakejs "^1.1.0"
debug "^4.1.1"
events "^3.0.0"
typeorm "^0.2.24"
uuid "^7.0.2"

daf-did-comm@../../packages/daf-did-comm:
version "6.0.0"
Expand Down Expand Up @@ -359,6 +356,7 @@ daf-libsodium@../../packages/daf-libsodium:
daf-resolver@../../packages/daf-resolver:
version "6.0.0"
dependencies:
daf-core "^6.0.0"
debug "^4.1.1"
did-resolver "^1.1.0"
ethr-did-resolver "2.2.0"
Expand All @@ -376,6 +374,13 @@ daf-resolver@^6.0.0:
nacl-did "^1.0.0"
web-did-resolver "^1.2.0"

daf-typeorm@../../packages/daf-typeorm:
version "6.0.0"
dependencies:
daf-core "^6.0.0"
debug "^4.1.1"
typeorm "^0.2.24"

daf-w3c@../../packages/daf-w3c:
version "6.0.0"
dependencies:
Expand Down Expand Up @@ -1710,11 +1715,6 @@ uuid@^3.3.3:
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==

uuid@^7.0.2:
version "7.0.3"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-7.0.3.tgz#c5c9f2c8cf25dc0a372c4df1441c41f5bd0c680b"
integrity sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==

web-did-resolver@^1.2.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/web-did-resolver/-/web-did-resolver-1.3.0.tgz#2d2ac2d1cab6f02633a095747eb1ee6eb80a3de0"
Expand Down
4 changes: 3 additions & 1 deletion packages/daf-ethr-did/src/identity-provider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ export function toEthereumAddress(hexPublicKey: string): string {
}

export class EthrIdentityProvider extends AbstractIdentityProvider {
private defaultKms: string
private network: string
private web3Provider?: any
private rpcUrl?: string
Expand All @@ -25,6 +26,7 @@ export class EthrIdentityProvider extends AbstractIdentityProvider {
private registry?: string

constructor(options: {
defaultKms: string
network: string
rpcUrl?: string
web3Provider?: object
Expand All @@ -46,7 +48,7 @@ export class EthrIdentityProvider extends AbstractIdentityProvider {
context: IContext,
): Promise<Omit<IIdentity, 'provider'>> {

const key = await context.agent.keyManagerCreateKey({ kms, type: 'Secp256k1' })
const key = await context.agent.keyManagerCreateKey({ kms: kms || this.defaultKms, type: 'Secp256k1' })
const address = toEthereumAddress(key.publicKeyHex)
const identity: Omit<IIdentity, 'provider'> = {
did: 'did:ethr:' + (this.network !== 'mainnet' ? this.network + ':' : '') + address,
Expand Down
2 changes: 1 addition & 1 deletion packages/daf-typeorm/src/entities/key.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ export class Key extends BaseEntity {
@Column()
privateKeyHex?: string

@Column({type: 'simple-json'})
@Column({type: 'simple-json', nullable: true})
meta?: Record<string, any>

@ManyToOne(
Expand Down
5 changes: 3 additions & 2 deletions packages/daf-typeorm/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@ import { Identity } from './entities/identity'
import { Claim } from './entities/claim'
import { Credential } from './entities/credential'
import { Presentation } from './entities/presentation'
import { Service } from './entities/service'
import { Message, MetaData } from './entities/message'
export const Entities = [Key, Identity, Message, Claim, Credential, Presentation]
export { KeyType, Key, Identity, Message, Claim, Credential, Presentation, MetaData }
export const Entities = [Key, Identity, Message, Claim, Credential, Presentation, Service]
export { KeyType, Key, Identity, Message, Claim, Credential, Presentation, MetaData, Service }
export { migrations } from './migrations'

0 comments on commit 4ef02e2

Please sign in to comment.