Implementation:Langgenius Dify Contract Router
| Knowledge Sources | |
|---|---|
| Domains | Frontend, API, oRPC |
| Last Updated | 2026-02-12 07:00 GMT |
Overview
Central oRPC API contract aggregator that composes individual endpoint contracts into two main router objects for the marketplace and console APIs.
Description
web/contract/router.ts serves as the top-level router definition for the Dify frontend's oRPC (type-safe RPC) layer. It imports individual API contracts from subdirectories and assembles them into two exported router contract objects:
marketplaceRouterContract aggregates marketplace-related endpoints:
collections- Browse plugin collectionscollectionPlugins- List plugins within a collectionsearchAdvanced- Advanced marketplace search
consoleRouterContract aggregates console (admin) endpoints organized into nested groups:
systemFeatures- System feature flags and configurationtrialApps- Trial app info, datasets, parameters, and workflowsbilling- Invoices and PartnerStack bindingtriggers- Comprehensive trigger management including subscriptions (create, update, verify, build, delete), OAuth configuration (config, configure, delete, initiate), provider info, and subscription builder logs
The file also exports two derived types via InferContractRouterInputs:
MarketPlaceInputs- Inferred input types for all marketplace endpointsConsoleInputs- Inferred input types for all console endpoints
Usage
Import these router contracts to set up oRPC clients, or use the inferred input types for type-safe API calls across the frontend.
Code Reference
Source Location
- Repository: Langgenius_Dify
- File: web/contract/router.ts
- Lines: 1-63
Signature
import type { InferContractRouterInputs } from '@orpc/contract'
export const marketplaceRouterContract = {
collections: collectionsContract,
collectionPlugins: collectionPluginsContract,
searchAdvanced: searchAdvancedContract,
}
export type MarketPlaceInputs = InferContractRouterInputs<typeof marketplaceRouterContract>
export const consoleRouterContract = {
systemFeatures: systemFeaturesContract,
trialApps: {
info: trialAppInfoContract,
datasets: trialAppDatasetsContract,
parameters: trialAppParametersContract,
workflows: trialAppWorkflowsContract,
},
billing: {
invoices: invoicesContract,
bindPartnerStack: bindPartnerStackContract,
},
triggers: {
list: triggersContract,
providerInfo: triggerProviderInfoContract,
subscriptions: triggerSubscriptionsContract,
// ...14 more trigger-related contracts
},
}
export type ConsoleInputs = InferContractRouterInputs<typeof consoleRouterContract>
Import
import {
marketplaceRouterContract,
consoleRouterContract,
} from '@/contract/router'
import type { MarketPlaceInputs, ConsoleInputs } from '@/contract/router'
I/O Contract
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
| N/A | N/A | N/A | This module composes contracts; actual inputs are defined in individual contract files. |
Outputs
| Name | Type | Description |
|---|---|---|
| marketplaceRouterContract | object | oRPC router contract for marketplace endpoints |
| consoleRouterContract | object | oRPC router contract for console/admin endpoints |
| MarketPlaceInputs | type | Inferred input types for marketplace API calls |
| ConsoleInputs | type | Inferred input types for console API calls |
Usage Examples
Creating a Type-safe API Client
import { consoleRouterContract } from '@/contract/router'
import type { ConsoleInputs } from '@/contract/router'
// Use inferred types for type-safe API calls
type SystemFeaturesInput = ConsoleInputs['systemFeatures']
type TriggerListInput = ConsoleInputs['triggers']['list']