FrontierJS

Conduit

API · Integrations@frontierjs/conduit

Every third party an app talks to, declared in one place.

$ npm i @frontierjs/conduit

Targets

A counterparty is named once — credential, policy and all

Because targets are declared, an application’s entire outbound surface is a list rather than an audit. Useful in review, and to anyone self-hosting who wants to know what the process can reach.

Replaces

scattered fetch callsa per-vendor HTTP client each

Receivers

The route a Provider calls you on, declared beside its Target

A connector exports how the vendor signs, the app says which key verifies and what to do, conduit runs the order and keeps the receipt — so a redelivery is a duplicate only once the first was applied, and a throw hands the sender a clean retry.

Replaces

a raw webhook route per vendoran inbound-events table per app

Policy

Seven numbers per target, falling back field by field

One conduit carries a card processor, a mail sink and a health probe. One set of timeouts and retries fits none of them, so each target states its own and inherits the rest.

Replaces

one global axios instance

Encoding

json or form, decided in the transport

The raw body is the same string the auth headers are built over, so an encoder living in a caller or a connector signs bytes that were never sent.

Replaces

hand-built form bodies beside a signer

Signing

Method, path, timestamp, nonce and a hash of the body

A captured signature cannot be replayed, moved to another endpoint, or kept while the body is swapped underneath it. The same module verifies on the far side.

Replaces

a bespoke HMAC helper per integration

Strictness

An unknown field on a descriptor is refused by name

Dropped silently is how a mistyped timeout becomes a production default that nobody can find.

Replaces

config objects with loose shapes

Observers

Callbacks that receive and cannot act

A throw in one is swallowed, so the word on the option says the tier: these observe. The management pipeline keeps the word hook, because that one can refuse the call.

Replaces

event emitters whose failures vanish

Not a wall

Conduit is where an outbound call belongs — not a boundary around the process

Nothing here blocks a raw fetch, and two batteries dial out directly on purpose. A contract with a working default is what keeps this package optional.

Replaces

Nothing — there is no common equivalent to swap out.