mirror of
				https://github.com/langgenius/dify.git
				synced 2025-11-04 04:43:09 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			148 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			148 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import { PLUGIN_TYPE_SEARCH_MAP } from './plugin-type-switch'
 | 
						|
import type { Plugin } from '@/app/components/plugins/types'
 | 
						|
import { PluginType } from '@/app/components/plugins/types'
 | 
						|
import type {
 | 
						|
  CollectionsAndPluginsSearchParams,
 | 
						|
  MarketplaceCollection,
 | 
						|
  PluginsSearchParams,
 | 
						|
} from '@/app/components/plugins/marketplace/types'
 | 
						|
import {
 | 
						|
  MARKETPLACE_API_PREFIX,
 | 
						|
  MARKETPLACE_URL_PREFIX,
 | 
						|
} from '@/config'
 | 
						|
 | 
						|
export const getPluginIconInMarketplace = (plugin: Plugin) => {
 | 
						|
  if (plugin.type === 'bundle')
 | 
						|
    return `${MARKETPLACE_API_PREFIX}/bundles/${plugin.org}/${plugin.name}/icon`
 | 
						|
  return `${MARKETPLACE_API_PREFIX}/plugins/${plugin.org}/${plugin.name}/icon`
 | 
						|
}
 | 
						|
 | 
						|
export const getFormattedPlugin = (bundle: any) => {
 | 
						|
  if (bundle.type === 'bundle') {
 | 
						|
    return {
 | 
						|
      ...bundle,
 | 
						|
      icon: getPluginIconInMarketplace(bundle),
 | 
						|
      brief: bundle.description,
 | 
						|
      label: bundle.labels,
 | 
						|
    }
 | 
						|
  }
 | 
						|
  return {
 | 
						|
    ...bundle,
 | 
						|
    icon: getPluginIconInMarketplace(bundle),
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
export const getPluginLinkInMarketplace = (plugin: Plugin) => {
 | 
						|
  if (plugin.type === 'bundle')
 | 
						|
    return `${MARKETPLACE_URL_PREFIX}/bundles/${plugin.org}/${plugin.name}`
 | 
						|
  return `${MARKETPLACE_URL_PREFIX}/plugins/${plugin.org}/${plugin.name}`
 | 
						|
}
 | 
						|
 | 
						|
export const getMarketplacePluginsByCollectionId = async (collectionId: string, query?: CollectionsAndPluginsSearchParams) => {
 | 
						|
  let plugins = [] as Plugin[]
 | 
						|
 | 
						|
  try {
 | 
						|
    const url = `${MARKETPLACE_API_PREFIX}/collections/${collectionId}/plugins`
 | 
						|
    const marketplaceCollectionPluginsData = await globalThis.fetch(
 | 
						|
      url,
 | 
						|
      {
 | 
						|
        cache: 'no-store',
 | 
						|
        method: 'POST',
 | 
						|
        body: JSON.stringify({
 | 
						|
          category: query?.category,
 | 
						|
          exclude: query?.exclude,
 | 
						|
          type: query?.type,
 | 
						|
        }),
 | 
						|
      },
 | 
						|
    )
 | 
						|
    const marketplaceCollectionPluginsDataJson = await marketplaceCollectionPluginsData.json()
 | 
						|
    plugins = marketplaceCollectionPluginsDataJson.data.plugins.map((plugin: Plugin) => {
 | 
						|
      return getFormattedPlugin(plugin)
 | 
						|
    })
 | 
						|
  }
 | 
						|
  // eslint-disable-next-line unused-imports/no-unused-vars
 | 
						|
  catch (e) {
 | 
						|
    plugins = []
 | 
						|
  }
 | 
						|
 | 
						|
  return plugins
 | 
						|
}
 | 
						|
 | 
						|
export const getMarketplaceCollectionsAndPlugins = async (query?: CollectionsAndPluginsSearchParams) => {
 | 
						|
  let marketplaceCollections = [] as MarketplaceCollection[]
 | 
						|
  let marketplaceCollectionPluginsMap = {} as Record<string, Plugin[]>
 | 
						|
  try {
 | 
						|
    let marketplaceUrl = `${MARKETPLACE_API_PREFIX}/collections?page=1&page_size=100`
 | 
						|
    if (query?.condition)
 | 
						|
      marketplaceUrl += `&condition=${query.condition}`
 | 
						|
    if (query?.type)
 | 
						|
      marketplaceUrl += `&type=${query.type}`
 | 
						|
    const marketplaceCollectionsData = await globalThis.fetch(marketplaceUrl, { cache: 'no-store' })
 | 
						|
    const marketplaceCollectionsDataJson = await marketplaceCollectionsData.json()
 | 
						|
    marketplaceCollections = marketplaceCollectionsDataJson.data.collections
 | 
						|
    await Promise.all(marketplaceCollections.map(async (collection: MarketplaceCollection) => {
 | 
						|
      const plugins = await getMarketplacePluginsByCollectionId(collection.name, query)
 | 
						|
 | 
						|
      marketplaceCollectionPluginsMap[collection.name] = plugins
 | 
						|
    }))
 | 
						|
  }
 | 
						|
  // eslint-disable-next-line unused-imports/no-unused-vars
 | 
						|
  catch (e) {
 | 
						|
    marketplaceCollections = []
 | 
						|
    marketplaceCollectionPluginsMap = {}
 | 
						|
  }
 | 
						|
 | 
						|
  return {
 | 
						|
    marketplaceCollections,
 | 
						|
    marketplaceCollectionPluginsMap,
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
export const getMarketplaceListCondition = (pluginType: string) => {
 | 
						|
  if (pluginType === PluginType.tool)
 | 
						|
    return 'category=tool'
 | 
						|
 | 
						|
  if (pluginType === PluginType.agent)
 | 
						|
    return 'category=agent-strategy'
 | 
						|
 | 
						|
  if (pluginType === PluginType.model)
 | 
						|
    return 'category=model'
 | 
						|
 | 
						|
  if (pluginType === PluginType.extension)
 | 
						|
    return 'category=endpoint'
 | 
						|
 | 
						|
  if (pluginType === 'bundle')
 | 
						|
    return 'type=bundle'
 | 
						|
 | 
						|
  return ''
 | 
						|
}
 | 
						|
 | 
						|
export const getMarketplaceListFilterType = (category: string) => {
 | 
						|
  if (category === PLUGIN_TYPE_SEARCH_MAP.all)
 | 
						|
    return undefined
 | 
						|
 | 
						|
  if (category === PLUGIN_TYPE_SEARCH_MAP.bundle)
 | 
						|
    return 'bundle'
 | 
						|
 | 
						|
  return 'plugin'
 | 
						|
}
 | 
						|
 | 
						|
export const updateSearchParams = (pluginsSearchParams: PluginsSearchParams) => {
 | 
						|
  const { query, category, tags } = pluginsSearchParams
 | 
						|
  const url = new URL(window.location.href)
 | 
						|
  const categoryChanged = url.searchParams.get('category') !== category
 | 
						|
  if (query)
 | 
						|
    url.searchParams.set('q', query)
 | 
						|
  else
 | 
						|
    url.searchParams.delete('q')
 | 
						|
  if (category)
 | 
						|
    url.searchParams.set('category', category)
 | 
						|
  else
 | 
						|
    url.searchParams.delete('category')
 | 
						|
  if (tags && tags.length)
 | 
						|
    url.searchParams.set('tags', tags.join(','))
 | 
						|
  else
 | 
						|
    url.searchParams.delete('tags')
 | 
						|
  history[`${categoryChanged ? 'pushState' : 'replaceState'}`]({}, '', url)
 | 
						|
}
 |