Portal Community

Per-Operation Config, Not appsettings.json

Unlike networks-based nodes, the IPFS node takes its daemon endpoints as per-operation config fields rather than an application-wide settings section. Every operation carries its own connection details, so different workflow steps can target different Kubo daemons or Cluster daemons.

Kubo Connection Fields

Every operation (all 61) carries these three fields, inherited from a common base:

FieldTypeRequiredDefaultDescription
baseUrltext✓ YesKubo RPC API endpoint, e.g. http://127.0.0.1:5001. Missing/blank → CFG_MISSING_BASE_URL.
authModeselectNononenone | bearer | basic. Kubo has no native auth — this covers a reverse-proxy-protected daemon.
credentialIDvault referenceNoResolved via the platform's auto-wired flat credentialID key (the "primary" alias) when authMode is bearer or basic.

Cluster Connection Fields

Operations under cluster, plus the storage composites, additionally carry a second connection to a separate IPFS Cluster daemon:

FieldTypeRequiredDefaultDescription
clusterBaseUrltext✓ Yes (Cluster ops)IPFS Cluster REST endpoint, e.g. http://127.0.0.1:9094. Missing/blank → CFG_MISSING_CLUSTER_BASE_URL.
clusterAuthModeselectNononenone | basic.
destinationCredentialIDvault referenceConditionalResolved via the platform's "destination" alias (dual-endpoint pattern). Required when clusterAuthMode is basic — otherwise CFG_MISSING_CREDENTIAL.
Credentials never cross the project boundary as vault types. Secrets are resolved once per execution and handed to the Services layer as plain strings via connection contexts — no vault or config type ever reaches BizFirst.Integration.IPFS.Services.

Registration

IPFSDependency.RegisterDefaults(services) registers everything the node needs:

Host apps must also add an explicit registration call. A ProjectReference alone is not sufficient — the assembly-scanning loader may not see an assembly that is never force-loaded. Add new BizFirst.Ai.ExecutionNodes.Blockchain.IPFS.IPFSDependency().RegisterDefaults(services); to Plugins_RegisterAllNodes(...) in ServiceCollectionExtensionsForAI.cs (same requirement as the Ethereum and Hedera nodes). Without this line the node type won't appear in the workflow designer even though the package is referenced.

Project Layout

The node ships as three .NET 9 projects:

ProjectResponsibility
BizFirst.Integration.IPFS.DomainResult records for all 61 operations. No references, no packages.
BizFirst.Integration.IPFS.ServicesHTTP/protocol layer: 12 typed HttpClient resource services, connection contexts, SSRF policy, resilience (retry/backoff) handler, NDJSON stream reader.
BizFirst.Ai.ExecutionNodes.Blockchain.IPFSThe executor: operation routing, settings, operation-info factory, per-operation feature partials.
Dynamic dispatch pattern: A single IPFSOperationInfoFactory.Create(resource, operation, reader) resolves the active per-operation config DTO from the (resource, operation) pair. The executor's settings root exposes only Resource/Operation/ActiveInfo — every operation-specific field lives on its own sealed DTO class.

Known Deferrals

GetNodeEntitiesAsync() (ProcessStudio form-entity declarations) is not implemented, matching the reference Ethereum node. Unit tests, DB Forms/FormControls, and live-daemon verification are tracked as follow-up work — see Roadmap.