version: 3.0
# GAIA-X configuration options. These are the options you can change
gx:
  complianceServiceUrl: https://compliance.future-mobility-alliance.org
  complianceServiceVersion: v1.2.8
  dbFile: ./db/gx.db.sqlite
  ecosystems:
    - name: FMA
      url: https://compliance.future-mobility-alliance.org
      description: Future Mobility Alliance

  # The Key Management System name. Normally shouldn't be changed. Currently only 1 KMS is supported
  kmsName: local

#######################################################################
# Do not change the values below, unless you know what you are doing! #
#######################################################################
constants:
  baseUrl: http://localhost:3332
  port: 3332
  # Do no change the encryption key if the database already contains data!
  dbEncryptionKey: 12739248cad1bd1a0fc4d9b75cd4d2990de535baf5caadfdf8d8f86664aa830a
  methods:
    - execute
    - 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: /gx/dbFile
      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'

    # 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-jwt#JwtMessageHandler'
        - $require: '@veramo/credential-w3c#W3cMessageHandler'
        - $require: '@veramo/selective-disclosure#SdrMessageHandler'

# DID resolvers
didResolver:
  $require: '@veramo/did-resolver#DIDResolverPlugin'
  $args:
    - resolver:
        $require: did-resolver#Resolver
        $args:
          web:
            $ref: /web-did-resolver
#            key:
#              $ref: /did-key-resolver
#            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:web
      providers:
        did:web:
          $require: '@veramo/did-provider-web#WebDIDProvider'
          $args:
            - defaultKms: local
#        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:goerli:
#          $require: '@veramo/did-provider-ethr#EthrDIDProvider'
#          $args:
#            - defaultKms: local
#              network: goerli
#              rpcUrl: https://goerli.infura.io/v3/3586660d179141e3801c3895de1c2eba
#              gas: 1000001
#              ttl: 31104001
#        did:key:
#          $require: '@veramo/did-provider-key#KeyDIDProvider'
#          $args:
#            - defaultKms: local

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

# W3C credentialPlugin
credentialIssuerLD:
  $require: '@veramo/credential-ld#CredentialIssuerLD'
  $args:
    - suites:
        - $require: '@veramo/credential-ld#VeramoEd25519Signature2018'
        - $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

credentialHandlerLD:
  $require: '@sphereon/ssi-sdk.vc-handler-ld-local#CredentialHandlerLDLocal'
  $args:
    - suites:
        - $require: '@sphereon/ssi-sdk.vc-handler-ld-local#SphereonJsonWebSignature2020'
        - $require: '@veramo/credential-ld#VeramoEcdsaSecp256k1RecoverySignature2020'
      contextMaps:
        # The LdDefaultContext is a "catch-all" for now.
        - $require: '@sphereon/ssi-sdk.vc-handler-ld-local?t=object#LdDefaultContexts'
        - $require: '@transmute/credentials-context?t=object#contexts'
        #  others should be included here

# Agent
agent:
  $require: '@veramo/core#Agent'
  $args:
    - schemaValidation: false
      plugins:
        - $require: '@sphereon/gx-agent/dist#GXComplianceClient'
          $args:
            - $ref: /gx
        #        - $require: '@sphereon/ssi-sdk.vc-handler-ld-local/dist#CredentialHandlerLDLocal'
        - $ref: /keyManager
        - $ref: /didManager
        - $ref: /didResolver
        - $ref: /didDiscovery
        - $ref: /messageHandler
        - $require: '@veramo/did-comm#DIDComm'
        - $require: '@veramo/credential-w3c#CredentialPlugin'
        - $ref: /credentialHandlerLD
        - $require: '@veramo/credential-eip712#CredentialIssuerEIP712'
        - $require: '@veramo/selective-disclosure#SelectiveDisclosure'
        - $require: '@veramo/data-store#DataStore'
          $args:
            - $ref: /dbConnection
        - $require: '@veramo/data-store#DataStoreORM'
          $args:
            - $ref: /dbConnection
