version: 3.0

constants:
  baseUrl: http://localhost:3332
  port: 3332
  # please use your own X25519 key, this is only an example
  # you can generate a new key by running `veramo config gen-key` in a terminal
  dbEncryptionKey: 29739248cad1bd1a0fc4d9b75cd4d2990de535baf5caadfdf8d8f86664aa830c
  databaseFile: ./database.sqlite
  methods:
    - keyManagerGetKeyManagementSystems
    - keyManagerCreate
    - keyManagerGet
    - keyManagerDelete
    - keyManagerImport
    - keyManagerEncryptJWE
    - keyManagerDecryptJWE
    - keyManagerSign
    - keyManagerSharedSecret
    - keyManagerSignJWT
    - keyManagerSignEthTX
    - didManagerGetProviders
    - didManagerFind
    - didManagerGet
    - didManagerGetByAlias
    - didManagerCreate
    - didManagerGetOrCreate
    - didManagerImport
    - didManagerDelete
    - didManagerAddKey
    - didManagerRemoveKey
    - didManagerAddService
    - didManagerRemoveService
    - resolveDid
    - getDIDComponentById
    - discoverDid
    - dataStoreGetMessage
    - dataStoreSaveMessage
    - dataStoreGetVerifiableCredential
    - dataStoreSaveVerifiableCredential
    - dataStoreGetVerifiablePresentation
    - dataStoreSaveVerifiablePresentation
    - dataStoreORMGetIdentifiers
    - dataStoreORMGetIdentifiersCount
    - dataStoreORMGetMessages
    - dataStoreORMGetMessagesCount
    - dataStoreORMGetVerifiableCredentialsByClaims
    - dataStoreORMGetVerifiableCredentialsByClaimsCount
    - dataStoreORMGetVerifiableCredentials
    - dataStoreORMGetVerifiableCredentialsCount
    - dataStoreORMGetVerifiablePresentations
    - dataStoreORMGetVerifiablePresentationsCount
    - handleMessage
    - packDIDCommMessage
    - unpackDIDCommMessage
    - sendDIDCommMessage
    - sendMessageDIDCommAlpha1
    - createVerifiableCredential
    - createVerifiablePresentation
    - verifyCredential
    - verifyPresentation
    - createSelectiveDisclosureRequest
    - getVerifiableCredentialsForSdr
    - validatePresentationAgainstSdr

# Data base
dbConnection:
  $require: typeorm#DataSource
  $args:
    - type: sqlite
      database:
        $ref: /constants/databaseFile
      synchronize: false
      migrationsRun: true
      migrations:
        $require: "@veramo/data-store?t=object#migrations"
      logging: false
      entities:
        $require: "@veramo/data-store?t=object#Entities"

# Server configuration
server:
  baseUrl:
    $ref: /constants/baseUrl
  port:
    $ref: /constants/port
  use:
    # CORS
    - - $require: "cors?t=function#default"

    # Add agent to the request object
    - - $require: "@veramo/remote-server?t=function#RequestWithAgentRouter"
        $args:
          - agent:
              $ref: /agent

    # DID Documents
    - - $require: "@veramo/remote-server?t=function#WebDidDocRouter"

    # API base path
    - - /messaging
      - $require: "@veramo/remote-server?t=function#MessagingRouter"
        $args:
          - metaData:
              type: DIDComm
              value: https

    # API base path
    - - /agent
      - $require: "@veramo/remote-server?t=function#apiKeyAuth"
        $args:
          - apiKey: test123
      - $require: "@veramo/remote-server?t=function#AgentRouter"
        $args:
          - exposedMethods:
              $ref: /constants/methods

    # Open API schema
    - - /open-api.json
      - $require: "@veramo/remote-server?t=function#ApiSchemaRouter"
        $args:
          - basePath: :3332/agent
            securityScheme: bearer
            apiName: Agent
            apiVersion: "1.0.0"
            exposedMethods:
              $ref: /constants/methods

    # Swagger docs
    - - /api-docs
      - $require: swagger-ui-express?t=object#serve
      - $require: swagger-ui-express?t=function#setup
        $args:
          - null
          - swaggerOptions:
              url: "/open-api.json"

  # Execute during server initialization
  init:
    - $require: "@veramo/remote-server?t=function#createDefaultDid"
      $args:
        - agent:
            $ref: /agent
          baseUrl:
            $ref: /constants/baseUrl
          messagingServiceEndpoint: /messaging

# Message handler plugin
messageHandler:
  $require: "@veramo/message-handler#MessageHandler"
  $args:
    - messageHandlers:
        - $require: "@veramo/did-comm#DIDCommMessageHandler"
        - $require: "@veramo/did-comm#TrustPingMessageHandler"
        - $require: "@veramo/did-jwt#JwtMessageHandler"
        - $require: "@veramo/credential-w3c#W3cMessageHandler"
        - $require: "@veramo/selective-disclosure#SdrMessageHandler"

# DID resolvers
didResolver:
  $require: "@veramo/did-resolver#DIDResolverPlugin"
  $args:
    - ethr:
        $ref: /ethr-did-resolver
      web:
        $ref: /web-did-resolver
      key:
        $ref: /did-key-resolver
      peer:
        $require: "@veramo/did-provider-peer?t=function&p=/peer#getResolver"
      jwk:
        $require: "@veramo/did-provider-jwk?t=function&p=/jwk#getDidJwkResolver"
      pkh:
        $require: "@veramo/did-provider-pkh?t=function&p=/pkh#getDidPkhResolver"
      elem:
        $ref: /universal-resolver
      io:
        $ref: /universal-resolver
      ion:
        $ref: /universal-resolver
      sov:
        $ref: /universal-resolver

ethr-did-resolver:
  $require: ethr-did-resolver?t=function&p=/ethr#getResolver
  $args:
    - infuraProjectId: 3586660d179141e3801c3895de1c2eba

web-did-resolver:
  $require: web-did-resolver?t=function&p=/web#getResolver

universal-resolver:
  $require: "@veramo/did-resolver#UniversalResolver"
  $args:
    - url: https://dev.uniresolver.io/1.0/identifiers/

did-key-resolver:
  $require: "@veramo/did-provider-key?t=function&p=/key#getDidKeyResolver"

# Key Manager
keyManager:
  $require: "@veramo/key-manager#KeyManager"
  $args:
    - store:
        $require: "@veramo/data-store#KeyStore"
        $args:
          - $ref: /dbConnection
      kms:
        local:
          $require: "@veramo/kms-local#KeyManagementSystem"
          $args:
            - $require: "@veramo/data-store#PrivateKeyStore"
              $args:
                - $ref: /dbConnection
                - $require: "@veramo/kms-local#SecretBox"
                  $args:
                    - $ref: /constants/dbEncryptionKey

# DID Manager
didManager:
  $require: "@veramo/did-manager#DIDManager"
  $args:
    - store:
        $require: "@veramo/data-store#DIDStore"
        $args:
          - $ref: /dbConnection
      defaultProvider: did:ethr:sepolia
      providers:
        did:ethr:
          $require: "@veramo/did-provider-ethr#EthrDIDProvider"
          $args:
            - defaultKms: local
              network: mainnet
              rpcUrl: https://mainnet.infura.io/v3/3586660d179141e3801c3895de1c2eba
              gas: 1000001
              ttl: 31104001
        did:ethr:sepolia:
          $require: "@veramo/did-provider-ethr#EthrDIDProvider"
          $args:
            - defaultKms: local
              network: sepolia
              rpcUrl: https://sepolia.infura.io/v3/3586660d179141e3801c3895de1c2eba
              gas: 1000001
              ttl: 31104001
        did:web:
          $require: "@veramo/did-provider-web#WebDIDProvider"
          $args:
            - defaultKms: local
        did:key:
          $require: "@veramo/did-provider-key#KeyDIDProvider"
          $args:
            - defaultKms: local
        did:jwk:
          $require: "@veramo/did-provider-jwk#JwkDIDProvider"
          $args:
            - defaultKms: local
        did:peer:
          $require: "@veramo/did-provider-peer#PeerDIDProvider"
          $args:
            - defaultKms: local
        did:pkh:
          $require: "@veramo/did-provider-pkh#PkhDIDProvider"
          $args:
            - defaultKms: local
              chainId: 1

didDiscovery:
  $require: "@veramo/did-discovery#DIDDiscovery"
  $args:
    - providers:
        - $require: "@veramo/did-manager#AliasDiscoveryProvider"
        - $require: "@veramo/data-store#DataStoreDiscoveryProvider"

# W3C credentialPlugin
CredentialProviderLD:
  $require: "@veramo/credential-ld#CredentialProviderLD"
  $args:
    - suites:
        - $require: "@veramo/credential-ld#VeramoEd25519Signature2018"
        - $require: "@veramo/credential-ld#VeramoEd25519Signature2020"
        - $require: "@veramo/credential-ld#VeramoJsonWebSignature2020"
        - $require: "@veramo/credential-ld#VeramoEcdsaSecp256k1RecoverySignature2020"
      contextMaps:
        # The LdDefaultContext is a "catch-all" for now.
        - $require: "@veramo/credential-ld?t=object#LdDefaultContexts"
        - $require: "@transmute/credentials-context?t=object#contexts"
        #  others should be included here

CredentialProviderJWT:
  $require: "@veramo/credential-jwt#CredentialProviderJWT"

credentialPlugin:
  $require: "@veramo/credential-w3c#CredentialPlugin"
  $args:
    - - $ref: /CredentialProviderLD
      - $ref: /CredentialProviderJWT

# Agent
agent:
  $require: "@veramo/core#Agent"
  $args:
    - schemaValidation: false
      plugins:
        - $ref: /keyManager
        - $ref: /didManager
        - $ref: /didResolver
        - $ref: /didDiscovery
        - $ref: /messageHandler
        - $require: "@veramo/did-comm#DIDComm"
        - $ref: /credentialPlugin
        - $require: "@veramo/selective-disclosure#SelectiveDisclosure"
        - $require: "@veramo/data-store#DataStore"
          $args:
            - $ref: /dbConnection
        - $require: "@veramo/data-store#DataStoreORM"
          $args:
            - $ref: /dbConnection
