diff --git a/web/app/components/plugins/marketplace/utils.ts b/web/app/components/plugins/marketplace/utils.ts index 80a239ca25..b3423ce2f2 100644 --- a/web/app/components/plugins/marketplace/utils.ts +++ b/web/app/components/plugins/marketplace/utils.ts @@ -7,6 +7,7 @@ import type { PluginsSearchParams, } from '@/app/components/plugins/marketplace/types' import { + APP_VERSION, MARKETPLACE_API_PREFIX, } from '@/config' import { getMarketplaceUrl } from '@/utils/var' @@ -49,11 +50,15 @@ export const getMarketplacePluginsByCollectionId = async (collectionId: string, try { const url = `${MARKETPLACE_API_PREFIX}/collections/${collectionId}/plugins` + const headers = new Headers({ + 'X-Dify-Version': APP_VERSION, + }) const marketplaceCollectionPluginsData = await globalThis.fetch( url, { cache: 'no-store', method: 'POST', + headers, body: JSON.stringify({ category: query?.category, exclude: query?.exclude, @@ -83,7 +88,10 @@ export const getMarketplaceCollectionsAndPlugins = async (query?: CollectionsAnd marketplaceUrl += `&condition=${query.condition}` if (query?.type) marketplaceUrl += `&type=${query.type}` - const marketplaceCollectionsData = await globalThis.fetch(marketplaceUrl, { cache: 'no-store' }) + const headers = new Headers({ + 'X-Dify-Version': APP_VERSION, + }) + const marketplaceCollectionsData = await globalThis.fetch(marketplaceUrl, { headers, cache: 'no-store' }) const marketplaceCollectionsDataJson = await marketplaceCollectionsData.json() marketplaceCollections = marketplaceCollectionsDataJson.data.collections await Promise.all(marketplaceCollections.map(async (collection: MarketplaceCollection) => { diff --git a/web/config/index.ts b/web/config/index.ts index 4a8b07d6e4..4d4eb5f356 100644 --- a/web/config/index.ts +++ b/web/config/index.ts @@ -2,6 +2,7 @@ import { InputVarType } from '@/app/components/workflow/types' import { AgentStrategy } from '@/types/app' import { PromptRole } from '@/models/debug' import { DatasetAttr } from '@/types/feature' +import pkg from '../package.json' const getBooleanConfig = (envVar: string | undefined, dataAttrKey: DatasetAttr, defaultValue: boolean = true) => { if (envVar !== undefined && envVar !== '') @@ -285,3 +286,5 @@ export const ENABLE_WEBSITE_WATERCRAWL = getBooleanConfig(process.env.NEXT_PUBLI export const VALUE_SELECTOR_DELIMITER = '@@@' export const validPassword = /^(?=.*[a-zA-Z])(?=.*\d)\S{8,}$/ + +export const APP_VERSION = pkg.version diff --git a/web/service/fetch.ts b/web/service/fetch.ts index a05c4cdfce..48adedd453 100644 --- a/web/service/fetch.ts +++ b/web/service/fetch.ts @@ -2,7 +2,7 @@ import type { AfterResponseHook, BeforeErrorHook, BeforeRequestHook, Hooks } fro import ky from 'ky' import type { IOtherOptions } from './base' import Toast from '@/app/components/base/toast' -import { API_PREFIX, MARKETPLACE_API_PREFIX, PUBLIC_API_PREFIX } from '@/config' +import { API_PREFIX, APP_VERSION, MARKETPLACE_API_PREFIX, PUBLIC_API_PREFIX } from '@/config' import { getInitialTokenV2, isTokenV1 } from '@/app/components/share/utils' import { getProcessedSystemVariablesFromUrlParams } from '@/app/components/base/chat/utils' @@ -151,6 +151,10 @@ async function base(url: string, options: FetchOptionType = {}, otherOptions: if (deleteContentType) (headers as any).delete('Content-Type') + // ! For Marketplace API, help to filter tags added in new version + if (isMarketplaceAPI) + (headers as any).set('X-Dify-Version', APP_VERSION) + const client = baseClient.extend({ hooks: { ...baseHooks,