import type { Fetcher } from 'swr' import { get, getMarketplace, post, upload } from './base' import type { InstallPackageResponse, Permissions, PluginDeclaration, PluginManifestInMarket, PluginTasksResponse, TaskStatusResponse, UninstallPluginResponse, updatePackageResponse, uploadGitHubResponse, } from '@/app/components/plugins/types' import type { MarketplaceCollectionPluginsResponse, MarketplaceCollectionsResponse, } from '@/app/components/plugins/marketplace/types' export const uploadPackageFile = async (file: File) => { const formData = new FormData() formData.append('pkg', file) return upload({ xhr: new XMLHttpRequest(), data: formData, }, false, '/workspaces/current/plugin/upload/pkg') } export const updateFromMarketPlace = async (body: Record) => { return post('/workspaces/current/plugin/upgrade/marketplace', { body, }) } export const updateFromGitHub = async (repoUrl: string, selectedVersion: string, selectedPackage: string, originalPlugin: string, newPlugin: string) => { return post('/workspaces/current/plugin/upgrade/github', { body: { repo: repoUrl, version: selectedVersion, package: selectedPackage, original_plugin_unique_identifier: originalPlugin, new_plugin_unique_identifier: newPlugin, }, }) } export const uploadGitHub = async (repoUrl: string, selectedVersion: string, selectedPackage: string) => { return post('/workspaces/current/plugin/upload/github', { body: { repo: repoUrl, version: selectedVersion, package: selectedPackage, }, }) } export const installPackageFromGitHub = async (repoUrl: string, selectedVersion: string, selectedPackage: string, uniqueIdentifier: string) => { return post('/workspaces/current/plugin/install/github', { body: { repo: repoUrl, version: selectedVersion, package: selectedPackage, plugin_unique_identifier: uniqueIdentifier, }, }) } export const fetchIcon = (tenantId: string, fileName: string) => { return get(`workspaces/current/plugin/icon?tenant_id=${tenantId}&filename=${fileName}`) } export const fetchManifest = async (uniqueIdentifier: string) => { return get(`/workspaces/current/plugin/fetch-manifest?plugin_unique_identifier=${uniqueIdentifier}`) } export const fetchManifestFromMarketPlace = async (uniqueIdentifier: string) => { return getMarketplace<{ data: { plugin: PluginManifestInMarket } }>(`/plugins/identifier?unique_identifier=${uniqueIdentifier}`) } export const fetchMarketplaceCollections: Fetcher = ({ url }) => { return get(url) } export const fetchMarketplaceCollectionPlugins: Fetcher = ({ url }) => { return get(url) } export const fetchPluginTasks = async () => { return get('/workspaces/current/plugin/tasks?page=1&page_size=255') } export const checkTaskStatus = async (taskId: string) => { return get(`/workspaces/current/plugin/tasks/${taskId}`) } export const updatePermission = async (permissions: Permissions) => { return post('/workspaces/current/plugin/permission/change', { body: permissions }) } export const uninstallPlugin = async (pluginId: string) => { return post('/workspaces/current/plugin/uninstall', { body: { plugin_installation_id: pluginId } }) }