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

export const useSynapseTargetsStore = defineStore('synapseTargets', () => {
  const targets = ref([])
  const loading = ref(false)
  const creating = ref(false)

  async function fetchTargets() {
    loading.value = true
    try {
      const data = await api.getSynapseTargets()
      targets.value = data.items || []
    } finally {
      loading.value = false
    }
  }

  async function createTarget(tokenRef, secret) {
    creating.value = true
    try {
      const target = await api.createSynapseTarget(tokenRef, secret)
      targets.value.unshift({
        id: target.id,
        token_ref: target.token_ref,
        created_at: target.created_at,
      })
      return target
    } finally {
      creating.value = false
    }
  }

  async function revokeTarget(id) {
    await api.revokeSynapseTarget(id)
    targets.value = targets.value.filter(t => t.id !== id)
  }

  return {
    targets,
    loading,
    creating,
    fetchTargets,
    createTarget,
    revokeTarget,
  }
})