From 551ab1e42e9b06866c524772e3f78d2e75654471 Mon Sep 17 00:00:00 2001 From: nickreynolds Date: Wed, 8 Feb 2023 20:10:03 -0500 Subject: [PATCH 1/2] use esm veramo in commonjs context --- package.json | 20 +++++----- src/create-credential.ts | 6 ++- src/create-identifier.ts | 6 ++- src/list-identifiers.ts | 8 ++-- src/veramo/setup.ts | 84 ++++++++++++++++++++++------------------ src/verify-credential.ts | 6 ++- tsconfig.json | 4 +- 7 files changed, 77 insertions(+), 57 deletions(-) diff --git a/package.json b/package.json index 699fded..9ecb39c 100644 --- a/package.json +++ b/package.json @@ -7,16 +7,18 @@ "ts-node": "^10.9.1", "typescript": "^4.8.4" }, + "type": "commonjs", "dependencies": { - "@veramo/core": "^4.0.0", - "@veramo/credential-w3c": "^4.0.2", - "@veramo/data-store": "^4.0.2", - "@veramo/did-manager": "^4.0.0", - "@veramo/did-provider-ethr": "^4.0.0", - "@veramo/did-provider-web": "^4.0.0", - "@veramo/did-resolver": "^4.0.2", - "@veramo/key-manager": "^4.0.2", - "@veramo/kms-local": "^4.0.2", + "@veramo/core": "4.3.1-next.13", + "@veramo/core-types": "4.3.1-next.13", + "@veramo/credential-w3c": "4.3.1-next.13", + "@veramo/data-store": "4.3.1-next.13", + "@veramo/did-manager": "4.3.1-next.13", + "@veramo/did-provider-ethr": "4.3.1-next.13", + "@veramo/did-provider-web": "4.3.1-next.13", + "@veramo/did-resolver": "4.3.1-next.13", + "@veramo/key-manager": "4.3.1-next.13", + "@veramo/kms-local": "4.3.1-next.13", "ethr-did-resolver": "^7.0.2", "sqlite3": "^5.1.2", "web-did-resolver": "^2.0.21" diff --git a/src/create-credential.ts b/src/create-credential.ts index a1c631b..6c8e2f7 100644 --- a/src/create-credential.ts +++ b/src/create-credential.ts @@ -1,6 +1,7 @@ -import { agent } from './veramo/setup' +const { getAgent } = require('./veramo/setup') async function main() { + const agent = await getAgent() const identifier = await agent.didManagerGetByAlias({ alias: 'default' }) const verifiableCredential = await agent.createVerifiableCredential({ @@ -17,4 +18,5 @@ async function main() { console.log(JSON.stringify(verifiableCredential, null, 2)) } -main().catch(console.log) \ No newline at end of file +main().catch(console.log) +export {} \ No newline at end of file diff --git a/src/create-identifier.ts b/src/create-identifier.ts index d85f0ed..2251f40 100644 --- a/src/create-identifier.ts +++ b/src/create-identifier.ts @@ -1,9 +1,11 @@ -import { agent } from './veramo/setup' +const { getAgent } = require('./veramo/setup') async function main() { + const agent = await getAgent() const identifier = await agent.didManagerCreate({ alias: 'default' }) console.log(`New identifier created`) console.log(JSON.stringify(identifier, null, 2)) } -main().catch(console.log) \ No newline at end of file +main().catch(console.log) +export {} \ No newline at end of file diff --git a/src/list-identifiers.ts b/src/list-identifiers.ts index d87f471..6e04688 100644 --- a/src/list-identifiers.ts +++ b/src/list-identifiers.ts @@ -1,16 +1,18 @@ -import { agent } from './veramo/setup' +const { getAgent } = require('./veramo/setup') async function main() { + const agent = await getAgent() const identifiers = await agent.didManagerFind() console.log(`There are ${identifiers.length} identifiers`) if (identifiers.length > 0) { - identifiers.map((id) => { + identifiers.map((id: any) => { console.log(id) console.log('..................') }) } } -main().catch(console.log) \ No newline at end of file +main().catch(console.log) +export {} \ No newline at end of file diff --git a/src/veramo/setup.ts b/src/veramo/setup.ts index f7fd227..ebf8778 100644 --- a/src/veramo/setup.ts +++ b/src/veramo/setup.ts @@ -1,47 +1,51 @@ -// Core interfaces -import { createAgent, IDIDManager, IResolver, IDataStore, IKeyManager, ICredentialPlugin } from '@veramo/core' +// This will be the name for the local sqlite database for demo purposes +const DATABASE_FILE = 'database.sqlite' -// Core identity manager plugin -import { DIDManager } from '@veramo/did-manager' +// You will need to get a project ID from infura https://www.infura.io +const INFURA_PROJECT_ID = '33aab9e0334c44b0a2e0c57c15302608' -// Ethr did identity provider -import { EthrDIDProvider } from '@veramo/did-provider-ethr' +// This will be the secret key for the KMS +const KMS_SECRET_KEY = + 'c0710059b687bf53009f7b935903ba48334e569780851008392f3e7f595c347a' +const { Resolver } = require('did-resolver') +const { getResolver: ethrDidResolver } = require('ethr-did-resolver') +const { getResolver: webDidResolver } = require('web-did-resolver') +import { TAgent, IDIDManager, IResolver, IDataStore, IKeyManager, ICredentialPlugin } from '@veramo/core-types' -// Web did identity provider -import { WebDIDProvider } from '@veramo/did-provider-web' +async function getAgent(): Promise> { + // Core interfaces + const { createAgent } = await import('@veramo/core') -// Core key manager plugin -import { KeyManager } from '@veramo/key-manager' + // Core identity manager plugin + const { DIDManager } = await import('@veramo/did-manager') -// Custom key management system for RN -import { KeyManagementSystem, SecretBox } from '@veramo/kms-local' + // Ethr did identity provider + const { EthrDIDProvider } = await import('@veramo/did-provider-ethr') -// W3C Verifiable Credential plugin -import { CredentialPlugin } from '@veramo/credential-w3c' + // Web did identity provider + const { WebDIDProvider } = await import('@veramo/did-provider-web') -// Custom resolvers -import { DIDResolverPlugin } from '@veramo/did-resolver' -import { Resolver } from 'did-resolver' -import { getResolver as ethrDidResolver } from 'ethr-did-resolver' -import { getResolver as webDidResolver } from 'web-did-resolver' + // Core key manager plugin + const { KeyManager } = await import('@veramo/key-manager') -// Storage plugin using TypeOrm -import { Entities, KeyStore, DIDStore, IDataStoreORM, PrivateKeyStore, migrations } from '@veramo/data-store' + // Custom key management system for RN + const { KeyManagementSystem, SecretBox } = await import('@veramo/kms-local') -// TypeORM is installed with `@veramo/data-store` -import { DataSource } from 'typeorm' + // W3C Verifiable Credential plugin + const { CredentialPlugin } = await import('@veramo/credential-w3c') -// This will be the name for the local sqlite database for demo purposes -const DATABASE_FILE = 'database.sqlite' + // Custom resolvers + const { DIDResolverPlugin } = await import('@veramo/did-resolver') -// You will need to get a project ID from infura https://www.infura.io -const INFURA_PROJECT_ID = '3586660d179141e3801c3895de1c2eba' -// This will be the secret key for the KMS -const KMS_SECRET_KEY = - '11b574d316903ced6cc3f4787bbcc3047d9c72d1da4d83e36fe714ef785d10c1' + // Storage plugin using TypeOrm + const { Entities, KeyStore, DIDStore, PrivateKeyStore, migrations } = await import('@veramo/data-store') + + // TypeORM is installed with `@veramo/data-store` + const { createConnection } = await import('typeorm') - const dbConnection = new DataSource({ + + const dbConnection = createConnection({ type: 'sqlite', database: DATABASE_FILE, synchronize: false, @@ -49,11 +53,12 @@ const KMS_SECRET_KEY = migrationsRun: true, logging: ['error', 'info', 'warn'], entities: Entities, - }).initialize() + }) - export const agent = createAgent({ + const agent = createAgent({ plugins: [ new KeyManager({ + // @ts-ignore store: new KeyStore(dbConnection), kms: { local: new KeyManagementSystem(new PrivateKeyStore(dbConnection, new SecretBox(KMS_SECRET_KEY))), @@ -61,12 +66,12 @@ const KMS_SECRET_KEY = }), new DIDManager({ store: new DIDStore(dbConnection), - defaultProvider: 'did:ethr:goerli', + defaultProvider: 'did:ethr:rinkeby', providers: { - 'did:ethr:goerli': new EthrDIDProvider({ + 'did:ethr:rinkeby': new EthrDIDProvider({ defaultKms: 'local', - network: 'goerli', - rpcUrl: 'https://goerli.infura.io/v3/' + INFURA_PROJECT_ID, + network: 'rinkeby', + rpcUrl: 'https://rinkeby.infura.io/v3/' + INFURA_PROJECT_ID, }), 'did:web': new WebDIDProvider({ defaultKms: 'local', @@ -81,4 +86,7 @@ const KMS_SECRET_KEY = }), new CredentialPlugin(), ], - }) \ No newline at end of file + }) + return agent +} +module.exports.getAgent = getAgent \ No newline at end of file diff --git a/src/verify-credential.ts b/src/verify-credential.ts index 88471a3..a462032 100644 --- a/src/verify-credential.ts +++ b/src/verify-credential.ts @@ -1,6 +1,7 @@ -import { agent } from './veramo/setup' +const { getAgent } = require('./veramo/setup') async function main() { + const agent = await getAgent() const result = await agent.verifyCredential({ credential: { "credentialSubject": { @@ -26,4 +27,5 @@ async function main() { console.log(`Credential verified`, result.verified) } -main().catch(console.log) \ No newline at end of file +main().catch(console.log) +export {} \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index 790adff..d6789e9 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -3,8 +3,10 @@ "preserveConstEnums": true, "strict": true, "target": "es6", + "module": "commonjs", + "lib": ["es6"], "rootDir": "./", - "moduleResolution": "node", + "moduleResolution": "nodenext", "esModuleInterop": true, "downlevelIteration": true } From ec46bb69f250c9f3a509315593e49b829d0ba217 Mon Sep 17 00:00:00 2001 From: nickreynolds Date: Wed, 8 Feb 2023 20:11:06 -0500 Subject: [PATCH 2/2] chore: cleanup --- src/veramo/setup.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/veramo/setup.ts b/src/veramo/setup.ts index ebf8778..6ee44b4 100644 --- a/src/veramo/setup.ts +++ b/src/veramo/setup.ts @@ -66,12 +66,12 @@ async function getAgent(): Promise