dify/web/app/components/plugins/marketplace/utils.ts

86 lines
2.9 KiB
TypeScript
Raw Normal View History

2024-10-29 14:44:30 +08:00
import type { Plugin } from '@/app/components/plugins/types'
import type {
2024-10-30 15:15:53 +08:00
CollectionsAndPluginsSearchParams,
2024-10-29 14:44:30 +08:00
MarketplaceCollection,
PluginsSearchParams,
} from '@/app/components/plugins/marketplace/types'
2024-10-29 15:23:01 +08:00
import { MARKETPLACE_API_PREFIX } from '@/config'
2024-10-29 14:44:30 +08:00
2024-10-30 15:15:53 +08:00
export const getPluginIconInMarketplace = (plugin: Plugin) => {
return `${MARKETPLACE_API_PREFIX}/plugins/${plugin.org}/${plugin.name}/icon`
}
export const getMarketplaceCollectionsAndPlugins = async (query?: CollectionsAndPluginsSearchParams) => {
2024-10-29 14:44:30 +08:00
let marketplaceCollections = [] as MarketplaceCollection[]
let marketplaceCollectionPluginsMap = {} as Record<string, Plugin[]>
try {
2024-10-30 17:24:46 +08:00
const marketplaceCollectionsData = await globalThis.fetch(`${MARKETPLACE_API_PREFIX}/collections`, { cache: 'no-store' })
2024-10-29 14:44:30 +08:00
const marketplaceCollectionsDataJson = await marketplaceCollectionsData.json()
marketplaceCollections = marketplaceCollectionsDataJson.data.collections
await Promise.all(marketplaceCollections.map(async (collection: MarketplaceCollection) => {
2024-10-30 16:36:08 +08:00
let url = `${MARKETPLACE_API_PREFIX}/collections/${collection.name}/plugins`
if (query?.category)
url += `?category=${query.category}`
2024-10-30 17:24:46 +08:00
const marketplaceCollectionPluginsData = await globalThis.fetch(url, { cache: 'no-store' })
2024-10-29 14:44:30 +08:00
const marketplaceCollectionPluginsDataJson = await marketplaceCollectionPluginsData.json()
2024-10-30 11:06:54 +08:00
const plugins = marketplaceCollectionPluginsDataJson.data.plugins.map((plugin: Plugin) => {
return {
...plugin,
2024-10-30 15:15:53 +08:00
icon: getPluginIconInMarketplace(plugin),
2024-10-30 11:06:54 +08:00
}
})
2024-10-29 14:44:30 +08:00
marketplaceCollectionPluginsMap[collection.name] = plugins
}))
}
// eslint-disable-next-line unused-imports/no-unused-vars
catch (e) {
marketplaceCollections = []
marketplaceCollectionPluginsMap = {}
}
return {
marketplaceCollections,
marketplaceCollectionPluginsMap,
}
}
export const getMarketplacePlugins = async (query: PluginsSearchParams) => {
let marketplacePlugins = [] as Plugin[]
try {
const marketplacePluginsData = await globalThis.fetch(
2024-10-29 18:13:47 +08:00
`${MARKETPLACE_API_PREFIX}/plugins/search/basic`,
2024-10-29 14:44:30 +08:00
{
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
page: 1,
page_size: 10,
query: query.query,
sort_by: query.sortBy,
sort_order: query.sortOrder,
category: query.category,
2024-10-30 15:15:53 +08:00
tags: query.tags,
2024-10-29 14:44:30 +08:00
}),
},
)
const marketplacePluginsDataJson = await marketplacePluginsData.json()
2024-10-30 11:06:54 +08:00
marketplacePlugins = marketplacePluginsDataJson.data.plugins.map((plugin: Plugin) => {
return {
...plugin,
2024-10-30 15:15:53 +08:00
icon: getPluginIconInMarketplace(plugin),
2024-10-30 11:06:54 +08:00
}
})
2024-10-29 14:44:30 +08:00
}
// eslint-disable-next-line unused-imports/no-unused-vars
catch (e) {
marketplacePlugins = []
}
return {
marketplacePlugins,
}
}