1+ import { createAgent } from '@veramo/core'
2+ import { DIDManager } from '@veramo/did-manager'
3+ import { KeyManager } from '@veramo/key-manager'
4+ import { KeyManagementSystem , SecretBox } from '@veramo/kms-local'
5+ import { CredentialPlugin } from '@veramo/credential-w3c'
6+ import { EthrDIDProvider } from '@veramo/did-provider-ethr'
7+ import { KeyDIDProvider } from '@veramo/did-provider-key'
8+ import { DIDResolverPlugin } from '@veramo/did-resolver'
9+ import { Resolver } from 'did-resolver'
10+ import { getResolver as ethrDidResolver } from 'ethr-did-resolver'
11+ import { getResolver as webDidResolver } from 'web-did-resolver'
12+ import { DataStoreJson , KeyStoreJson , DIDStoreJson , PrivateKeyStoreJson } from '@veramo/data-store-json'
13+ import fs from 'fs'
14+ import { JsonFileStore } from './store'
15+ import {
16+ IDIDManager ,
17+ IKeyManager ,
18+ IResolver ,
19+ IDataStore ,
20+ ICredentialIssuer ,
21+ TAgent
22+ } from '@veramo/core-types'
23+ type ConfiguredAgent = TAgent < IDIDManager & IKeyManager & IResolver & IDataStore & ICredentialIssuer >
24+
25+ const INFURA_PROJECT_ID = process . env . INFURIA_API_KEY
26+ // const INFURA_PROJECT_ID = '62cfe5babc774c1aaffa9eac6dbbf47f'
27+ let KMS_SECRET_KEY = null
28+ const kmsfile = '/data/kms' ;
29+ const storefile = '/data/store.json' ;
30+
31+ if ( fs . existsSync ( kmsfile ) ) {
32+ KMS_SECRET_KEY = fs . readFileSync ( kmsfile , 'utf8' )
33+ } else {
34+ KMS_SECRET_KEY = await SecretBox . createSecretKey ( )
35+ fs . writeFileSync ( kmsfile , KMS_SECRET_KEY )
36+ }
37+
38+ const jsonFileStore = await JsonFileStore . fromFile ( storefile )
39+
40+ export const agent : ConfiguredAgent = createAgent ( {
41+ plugins : [
42+ new KeyManager ( {
43+ store : new KeyStoreJson ( jsonFileStore ) ,
44+ kms : {
45+ local : new KeyManagementSystem ( new PrivateKeyStoreJson ( jsonFileStore , new SecretBox ( KMS_SECRET_KEY ) ) ) ,
46+ }
47+ } ) ,
48+ new DIDManager ( {
49+ store : new DIDStoreJson ( jsonFileStore ) ,
50+ defaultProvider : 'did:key' ,
51+ providers : {
52+ 'did:ethr:sepolia' : new EthrDIDProvider ( {
53+ defaultKms : 'local' ,
54+ network : 'sepolia' ,
55+ rpcUrl : 'https://sepolia.infura.io/v3/' + INFURA_PROJECT_ID ,
56+ } ) ,
57+ 'did:key' : new KeyDIDProvider ( {
58+ defaultKms : 'local'
59+ } )
60+ } ,
61+ } ) ,
62+ new DIDResolverPlugin ( {
63+ resolver : new Resolver ( {
64+ ...ethrDidResolver ( { infuraProjectId : INFURA_PROJECT_ID } ) ,
65+ ...webDidResolver ( ) ,
66+ } )
67+ } ) ,
68+ new DataStoreJson ( jsonFileStore ) ,
69+ new CredentialPlugin ( )
70+ ] ,
71+ } )
72+
0 commit comments