Portal Community

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:

  1. Tenant-local overrides — types registered directly in this tenant's Process_ProcessElementTypes table. If a typeCode appears here, it overrides any external definition.
  2. Installed packages — node types imported from InstallHub packages installed for this tenant.
  3. 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.