Skip to content

Commit

Permalink
feat: plugins provide msg handlers + agent plugins (#218)
Browse files Browse the repository at this point in the history
  • Loading branch information
simonas-notcat authored Nov 9, 2023
1 parent f6a4452 commit 0f1af59
Show file tree
Hide file tree
Showing 15 changed files with 407 additions and 911 deletions.
50 changes: 25 additions & 25 deletions packages/agent-explore/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -109,31 +109,31 @@
"@typescript-eslint/eslint-plugin": "^6.4.0",
"@typescript-eslint/parser": "^6.4.0",
"@veramo-community/agent-explorer-plugin": "workspace:*",
"@veramo-community/veramo-react": "1.6.1",
"@veramo/core": "5.5.4-next.22",
"@veramo/core-types": "5.5.4-next.22",
"@veramo/credential-eip712": "5.5.4-next.22",
"@veramo/credential-ld": "5.5.4-next.22",
"@veramo/credential-w3c": "5.5.4-next.22",
"@veramo/data-store": "5.5.4-next.22",
"@veramo/data-store-json": "5.5.4-next.22",
"@veramo/did-comm": "5.5.4-next.22",
"@veramo/did-discovery": "5.5.4-next.22",
"@veramo/did-jwt": "5.5.4-next.22",
"@veramo/did-manager": "5.5.4-next.22",
"@veramo/did-provider-ethr": "5.5.4-next.22",
"@veramo/did-provider-jwk": "5.5.4-next.22",
"@veramo/did-provider-key": "5.5.4-next.22",
"@veramo/did-provider-peer": "5.5.4-next.22",
"@veramo/did-provider-pkh": "5.5.4-next.22",
"@veramo/did-resolver": "5.5.4-next.22",
"@veramo/key-manager": "5.5.4-next.22",
"@veramo/kms-local": "5.5.4-next.22",
"@veramo/kms-web3": "5.5.4-next.22",
"@veramo/message-handler": "5.5.4-next.22",
"@veramo/remote-client": "5.5.4-next.22",
"@veramo/selective-disclosure": "5.5.4-next.22",
"@veramo/utils": "5.5.4-next.22",
"@veramo-community/veramo-react": "1.6.2",
"@veramo/core": "5.5.4-next.23",
"@veramo/core-types": "5.5.4-next.23",
"@veramo/credential-eip712": "5.5.4-next.23",
"@veramo/credential-ld": "5.5.4-next.23",
"@veramo/credential-w3c": "5.5.4-next.23",
"@veramo/data-store": "5.5.4-next.23",
"@veramo/data-store-json": "5.5.4-next.23",
"@veramo/did-comm": "5.5.4-next.23",
"@veramo/did-discovery": "5.5.4-next.23",
"@veramo/did-jwt": "5.5.4-next.23",
"@veramo/did-manager": "5.5.4-next.23",
"@veramo/did-provider-ethr": "5.5.4-next.23",
"@veramo/did-provider-jwk": "5.5.4-next.23",
"@veramo/did-provider-key": "5.5.4-next.23",
"@veramo/did-provider-peer": "5.5.4-next.23",
"@veramo/did-provider-pkh": "5.5.4-next.23",
"@veramo/did-resolver": "5.5.4-next.23",
"@veramo/key-manager": "5.5.4-next.23",
"@veramo/kms-local": "5.5.4-next.23",
"@veramo/kms-web3": "5.5.4-next.23",
"@veramo/message-handler": "5.5.4-next.23",
"@veramo/remote-client": "5.5.4-next.23",
"@veramo/selective-disclosure": "5.5.4-next.23",
"@veramo/utils": "5.5.4-next.23",
"@web3modal/wagmi": "^3.0.2",
"@yudiel/react-qr-scanner": "^1.1.8",
"antd": "~5.8.4",
Expand Down
20 changes: 7 additions & 13 deletions packages/agent-explore/src/layout/App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,8 @@ import Layout from './Layout'
import { ThemeProvider } from '../context/ThemeProvider'
import { QueryClientProvider, QueryClient } from 'react-query'
import { ChatProvider } from '../context/ChatProvider'
import { VeramoWeb3Provider } from '../context/web3/VeramoWeb3Provider'
import { PluginProvider } from '@veramo-community/agent-explorer-plugin'
import { getcorePlugins } from '../plugins'
import { WagmiProvider } from '../context/web3/wagmi'

declare global {
interface Window {
Expand All @@ -23,17 +21,13 @@ const App = () => {
return (
<QueryClientProvider client={queryClient}>
<ThemeProvider>
<WagmiProvider>
<VeramoWeb3Provider>
<PluginProvider corePlugins={corePlugins}>
<ChatProvider>
<BrowserRouter>
<Layout />
</BrowserRouter>
</ChatProvider>
</PluginProvider>
</VeramoWeb3Provider>
</WagmiProvider>
<PluginProvider corePlugins={corePlugins}>
<ChatProvider>
<BrowserRouter>
<Layout />
</BrowserRouter>
</ChatProvider>
</PluginProvider>
</ThemeProvider>
</QueryClientProvider>
)
Expand Down
2 changes: 2 additions & 0 deletions packages/agent-explore/src/plugins/chats/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import { MessageOutlined } from '@ant-design/icons'
import { IPlugin } from '@veramo-community/agent-explorer-plugin';

import Chats from './Chats';
import { SaveMessageHandler } from './saveMessageHandler';

const Plugin: IPlugin = {
init: () => {
Expand All @@ -14,6 +15,7 @@ const Plugin: IPlugin = {
name: 'Chats',
description: 'DIDComm Chats',
icon: <MessageOutlined />,
messageHandlers: [ new SaveMessageHandler()],
requiredMethods: ['packDIDCommMessage', 'sendDIDCommMessage'],
routes: [
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,16 @@ type IContext = IAgentContext<IDataStore>
* @beta This API may change without a BREAKING CHANGE notice.
*/
export class SaveMessageHandler extends AbstractMessageHandler {
constructor() {
super()
}
/**
* Handles a new packed DIDCommV2 Message (also Alpha support but soon deprecated).
* - Tests whether raw message is a DIDCommV2 message
* - Unpacks raw message (JWM/JWE/JWS, or plain JSON).
* -
*/
async handle(message: Message, context: IContext): Promise<Message> {
// console.log('message received: ', message)
if (message.type === 'veramo.io-chat-v1') {
await context.agent.dataStoreSaveMessage({ message })
}
Expand Down
43 changes: 35 additions & 8 deletions packages/plugin/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@
"build": "tsc",
"build:js": "tsc",
"watch": "tsc -w",
"upgrade-veramo:next": "pnpm add @veramo/core@next @veramo/core-types@next @veramo/data-store@next @veramo/utils@next @veramo/did-discovery@next @veramo-community/veramo-react@latest"
"upgrade-veramo": "pnpm add @veramo/core @veramo/core-types @veramo/did-discovery @veramo/credential-w3c @veramo/credential-ld @veramo/credential-eip712 @veramo/data-store @veramo/did-comm @veramo/did-jwt @veramo/did-resolver @veramo/message-handler @veramo/remote-client @veramo/selective-disclosure @veramo/credential-eip712 @veramo/data-store-json @veramo/did-manager @veramo/kms-web3 @veramo/key-manager @veramo/did-provider-ethr @veramo/utils @veramo/did-provider-peer @veramo/did-provider-key @veramo/did-provider-jwk @veramo/did-provider-pkh @veramo/kms-local @veramo-community/veramo-react@latest",
"upgrade-veramo:next": "pnpm add @veramo/core@next @veramo/core-types@next @veramo/did-discovery@next @veramo/credential-w3c@next @veramo/credential-ld@next @veramo/credential-eip712@next @veramo/data-store@next @veramo/did-comm@next @veramo/did-jwt@next @veramo/did-resolver@next @veramo/message-handler@next @veramo/remote-client@next @veramo/selective-disclosure@next @veramo/credential-eip712@next @veramo/data-store-json@next @veramo/did-manager@next @veramo/kms-web3@next @veramo/key-manager@next @veramo/did-provider-ethr@next @veramo/utils@next @veramo/did-provider-peer@next @veramo/did-provider-key@next @veramo/did-provider-jwk@next @veramo/did-provider-pkh@next @veramo/kms-local@next @veramo-community/veramo-react@latest"
},
"files": [
"build",
Expand All @@ -30,15 +31,39 @@
"dependencies": {
"@ant-design/icons": "^5.1.4",
"@ant-design/pro-components": "^2.6.13",
"@veramo-community/veramo-react": "1.6.1",
"@veramo/core": "5.5.4-next.22",
"@veramo/core-types": "5.5.4-next.22",
"@veramo/data-store": "5.5.4-next.22",
"@veramo/did-discovery": "5.5.4-next.22",
"@veramo/utils": "5.5.4-next.22",
"@transmute/credentials-context": "0.7.0-unstable.81",
"@veramo-community/veramo-react": "^1.6.2",
"@veramo/core": "5.5.4-next.23",
"@veramo/core-types": "5.5.4-next.23",
"@veramo/credential-eip712": "5.5.4-next.23",
"@veramo/credential-ld": "5.5.4-next.23",
"@veramo/credential-w3c": "5.5.4-next.23",
"@veramo/data-store": "5.5.4-next.23",
"@veramo/data-store-json": "5.5.4-next.23",
"@veramo/did-comm": "5.5.4-next.23",
"@veramo/did-discovery": "5.5.4-next.23",
"@veramo/did-jwt": "5.5.4-next.23",
"@veramo/did-manager": "5.5.4-next.23",
"@veramo/did-provider-ethr": "5.5.4-next.23",
"@veramo/did-provider-jwk": "5.5.4-next.23",
"@veramo/did-provider-key": "5.5.4-next.23",
"@veramo/did-provider-peer": "5.5.4-next.23",
"@veramo/did-provider-pkh": "5.5.4-next.23",
"@veramo/did-resolver": "5.5.4-next.23",
"@veramo/key-manager": "5.5.4-next.23",
"@veramo/kms-local": "5.5.4-next.23",
"@veramo/kms-web3": "5.5.4-next.23",
"@veramo/message-handler": "5.5.4-next.23",
"@veramo/remote-client": "5.5.4-next.23",
"@veramo/selective-disclosure": "5.5.4-next.23",
"@veramo/utils": "5.5.4-next.23",
"@web3modal/wagmi": "^3.0.2",
"antd": "~5.8.4",
"date-fns": "^2.30.0",
"did-jwt-vc": "^3.2.10",
"did-resolver": "^4.1.0",
"ethers": "^6.7.1",
"ethr-did-resolver": "^8.0.0",
"md5": "^2.3.0",
"react": "18.2.0",
"react-dom": "18.2.0",
Expand All @@ -50,7 +75,9 @@
"typescript": "5.2.2",
"unified": "^11.0.3",
"url-parse": "^1.5.10",
"uuid": "^9.0.1"
"uuid": "^9.0.1",
"wagmi": "^1.4.2",
"web-did-resolver": "^2.0.24"
},
"devDependencies": {
"@types/markdown-it": "^13.0.2",
Expand Down
58 changes: 45 additions & 13 deletions packages/plugin/src/PluginProvider.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
import React, { createContext, useState, useEffect, useContext } from 'react'
import { IAgentExplorerPlugin, IAgentExplorerPluginConfig, IPlugin } from './types.js'
import { IAgentExplorerPlugin, IAgentExplorerPluginConfig } from './types.js'
import { App } from 'antd'
import { VeramoWeb3Provider } from './web3/VeramoWeb3Provider.js'
import { WagmiProvider } from './web3/wagmi.js'
import { IAgentPlugin } from '@veramo/core-types'
import { AbstractMessageHandler } from '@veramo/message-handler'


type PluginContextType = {
plugins: IAgentExplorerPlugin[]
Expand Down Expand Up @@ -141,19 +146,46 @@ const PluginProvider = (props: PluginProviderProps) => {
setPluginConfigs(configs)
}

const agentPlugins: IAgentPlugin[] = React.useMemo(() => {
const agentPlugins: IAgentPlugin[] = []
plugins.forEach((p) => {
if (p.agentPlugins) {
agentPlugins.push(...p.agentPlugins)
}
})
return agentPlugins
}, [plugins])

const messageHandlers: AbstractMessageHandler[] = React.useMemo(() => {
const messageHandlers: AbstractMessageHandler[] = []
plugins.forEach((p) => {
if (p.messageHandlers) {
messageHandlers.push(...p.messageHandlers)
}
})
return messageHandlers
}, [plugins])

return (
<PluginContext.Provider
value={{
plugins,
pluginConfigs,
updatePluginConfigs,
addPluginConfig,
removePluginConfig,
switchPlugin,
}}
>
{props.children}
</PluginContext.Provider>
<WagmiProvider>
<VeramoWeb3Provider
plugins={agentPlugins}
messageHandlers={messageHandlers}
>
<PluginContext.Provider
value={{
plugins,
pluginConfigs,
updatePluginConfigs,
addPluginConfig,
removePluginConfig,
switchPlugin,
}}
>
{props.children}
</PluginContext.Provider>
</VeramoWeb3Provider>
</WagmiProvider>
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ export interface IIdentifierProfile {

type IContext = IAgentContext<IDataStoreORM & IDIDManager>

interface IGetIdentifierProfileArgs {
export interface IGetIdentifierProfileArgs {
/**
* Decentralized identifier
*/
Expand Down
6 changes: 5 additions & 1 deletion packages/plugin/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,8 @@ export { VerifiableCredentialComponent } from './components/VerifiableCredential
export { IdentifierTabs } from './components/IdentifierTabs.js'
export * from './agent-plugins/IdentifierProfilePlugin.js'
export * from './components/MarkDown.js'
export * from './components/DIDDiscoveryBar.js'
export * from './components/DIDDiscoveryBar.js'
export * from './agent-plugins/did-discovery-provider.js'
export * from './agent-plugins/AliasDiscoveryProvider.js'
export * from './agent-plugins/IdentifierProfilePlugin.js'
export * from './web3/VeramoWeb3Provider.js'
3 changes: 3 additions & 0 deletions packages/plugin/src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ import { UniqueVerifiableCredential } from '@veramo/core-types'
import { IAgentPlugin } from '@veramo/core'
import { Components } from 'react-markdown'
import { PluggableList } from 'unified'
import { AbstractMessageHandler } from '@veramo/message-handler'

export type IAgentExplorerPluginConfig = {
url: string;
commitId?: string;
Expand Down Expand Up @@ -49,6 +51,7 @@ export type IAgentExplorerPlugin = {
hasCss?: boolean;
identifierContextMenuItems?: MenuProps['items'];
agentPlugins?: IAgentPlugin[];
messageHandlers?: AbstractMessageHandler[];
getCredentialContextMenuItems?: (credential: UniqueVerifiableCredential) => MenuProps['items'];
getCredentialComponent?: (credential: UniqueVerifiableCredential) => React.FC<IVerifiableComponentProps> | undefined;
getIdentifierHoverComponent?: () => React.FC<IIdentifierHoverComponentProps>;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,18 +1,23 @@
import { useEffect, useState } from 'react'
import { VeramoProvider } from '@veramo-community/veramo-react'
import { createAgent, IAgentPlugin, IResolver, TAgent } from '@veramo/core'
import { ConnectorInfo, createWeb3Agent } from './web3Agent'
import { ConnectorInfo, createWeb3Agent } from './web3Agent.js'
import { AgentRestClient } from '@veramo/remote-client'
import { IdentifierProfilePlugin } from '@veramo-community/agent-explorer-plugin'
import { IdentifierProfilePlugin } from '../agent-plugins/IdentifierProfilePlugin.js'

import { useAccount, useNetwork } from 'wagmi'
import { useEthersProvider } from './wagmi'
import { useEthersProvider } from './wagmi.js'
import { useQueryClient } from 'react-query'
import { AbstractMessageHandler } from '@veramo/message-handler'

export const VeramoWeb3Provider = ({
children,
plugins = [],
messageHandlers = [],
}: {
children: JSX.Element | JSX.Element[]
plugins?: IAgentPlugin[]
messageHandlers?: AbstractMessageHandler[]
}) => {
//@ts-ignore
const config = window.PRE_CONFIGURED_AGENTS
Expand Down Expand Up @@ -44,7 +49,7 @@ export const VeramoWeb3Provider = ({
name: 'walletconnect',
})
}
void createWeb3Agent({ connectors }).then(setWeb3Agent).then(() => {
void createWeb3Agent({ connectors, messageHandlers }).then(setWeb3Agent).then(() => {
queryClient.invalidateQueries({
queryKey: [
'identifiers',
Expand All @@ -55,7 +60,7 @@ export const VeramoWeb3Provider = ({
return () => {
setWeb3Agent(undefined)
}
}, [address, isConnected, provider, chain])
}, [messageHandlers, address, isConnected, provider, chain])

useEffect(() => {
if (config && Array.isArray(config)) {
Expand Down Expand Up @@ -104,7 +109,7 @@ export const VeramoWeb3Provider = ({
}
}, [config])

const plugins: IAgentPlugin[] = [new IdentifierProfilePlugin()]
plugins.push(new IdentifierProfilePlugin())
let allAgents = []
if (web3agent) {
allAgents.push(web3agent)
Expand Down
File renamed without changes.
Loading

0 comments on commit 0f1af59

Please sign in to comment.