Flow Studio
External Template Service
NodeTemplateApiClient fetches node type definitions from external sources — the InstallHub marketplace and registered plugin registries. External templates are merged with tenant-local types to form the complete palette.
NodeTemplateApiClient
// packages/NodeTemplates/ApiClient/NodeTemplateApiClient.ts
export class NodeTemplateApiClient {
// Fetch all node types for the current tenant (local + external merged)
async getAllNodeTypes(): Promise<NodeType[]>
// Fetch types from a specific external registry URL
async fetchFromRegistry(registryUrl: string): Promise<NodeType[]>
// Install a node type package from InstallHub
async installNodeTypePackage(packageId: string): Promise<void>
// Uninstall and mark types from a package as deprecated
async uninstallNodeTypePackage(packageId: string): Promise<void>
}
Source Priority
When building the complete node type list, sources are merged in this priority order:
- Tenant-local overrides — types registered directly in this tenant's
Process_ProcessElementTypestable. If a typeCode appears here, it overrides any external definition. - Installed packages — node types imported from InstallHub packages installed for this tenant.
- Platform defaults — the built-in node types shipped with the Flow Studio platform.
Registry Format
An external registry is a JSON endpoint that returns an array of NodeType objects. The registry URL is configured per tenant in the platform settings:
// Registry endpoint response
[
{
"typeCode": "acme-erp-connector",
"displayName": "ACME ERP Connector",
"category": "integration",
...
}
]
typeCode Conflict Resolution
If an external registry defines a typeCode that already exists as a tenant-local type, the tenant-local type wins. If two external sources define the same typeCode, the installed package with the higher version number wins.