Newer
Older
navi-1 / webclient / src / stores / mcpKeys.js
import { defineStore } from 'pinia'
import { ref } from 'vue'
import * as api from '@/api/index.js'

export const useMcpKeysStore = defineStore('mcpKeys', () => {
  const servers = ref([])
  const loading = ref(false)
  const savingServer = ref(null)

  async function fetchServers() {
    loading.value = true
    try {
      const data = await api.getMcpKeys()
      servers.value = data.items || []
    } finally {
      loading.value = false
    }
  }

  async function saveKey(serverName, key) {
    savingServer.value = serverName
    try {
      const data = await api.saveMcpKey(serverName, key)
      const item = servers.value.find(s => s.server_name === serverName)
      if (item) {
        item.has_key = true
        item.updated_at = data.updated_at
      }
    } finally {
      savingServer.value = null
    }
  }

  async function resetKey(serverName) {
    savingServer.value = serverName
    try {
      await api.resetMcpKey(serverName)
      const item = servers.value.find(s => s.server_name === serverName)
      if (item) {
        item.has_key = false
        item.updated_at = null
      }
    } finally {
      savingServer.value = null
    }
  }

  return {
    servers,
    loading,
    savingServer,
    fetchServers,
    saveKey,
    resetKey,
  }
})