import { defineStore } from "pinia" import { useContentStore } from "~/composables/stores/useContentStore.js" export const providersEndpoint = "/open/providers" export const useOAuthProvidersStore = defineStore("oauth_providers", () => { const contentStore = useContentStore() const alert = useAlert() const googleDrivePermission = 'https://www.googleapis.com/auth/drive.file' const services = computed(() => { return [ { name: 'google', title: 'Google', icon: 'mdi:google', enabled: true } ] }) const getService = (service) => { return services.value.find((item) => item.name === service) } const fetchOAuthProviders = () => { contentStore.resetState() contentStore.startLoading() return opnFetch(providersEndpoint).then( (data) => { contentStore.save(data) contentStore.stopLoading() }, ) } const connect = (service, redirect = false) => { contentStore.resetState() contentStore.startLoading() const intention = new URL(window.location.href).pathname opnFetch(`/settings/providers/connect/${service}`, { method: 'POST', body: { ...redirect ? { intention } : {}, } }) .then((data) => { window.location.href = data.url }) .catch((error) => { try { alert.error(error.data.message) } catch (e) { alert.error("An error occurred while connecting an account") } }) .finally(() => { contentStore.stopLoading() }) } const guestConnect = (service, redirect = false) => { contentStore.resetState() contentStore.startLoading() const intention = new URL(window.location.href).pathname opnFetch(`/oauth/connect/${service}`, { method: 'POST', body: { ...redirect ? { intention } : {}, } }) .then((data) => { window.location.href = data.url }) .catch((error) => { try { alert.error(error.data.message) } catch (e) { alert.error("An error occurred while connecting an account") } }) .finally(() => { contentStore.stopLoading() }) } const providers = computed(() => contentStore.getAll.value) return { ...contentStore, googleDrivePermission, services, getService, fetchOAuthProviders, providers, connect, guestConnect } })