Skip to content

v0.2.0

Release Date: 2026-10-13

Highlights

  • Reconnect. service.Reconnect replaces a connection's credential without creating a new connection, so the features bound to it keep working.
  • Bindings through the service. Bindings lists what depends on a connection, and Bind and Unbind record it, so a disconnect can show what it would stop.
  • No breaking changes.

Reconnect

A token expires, is revoked or is rotated. Reconnect takes the new credential, validates it with the provider before storing anything, and writes it as the next version:

conn, err := svc.Reconnect(ctx, service.ReconnectInput{
    Owner: owner, Actor: actor, ID: id,
    Fields: map[string]connectforge.Secret{"token": connectforge.SecretString(newToken)},
})
  • A credential the provider rejects changes nothing.
  • A credential for a different account is refused with ErrAccountMismatch. Connecting another account is a new connection, so a feature never silently reads someone else's data.
  • On success the connection is connected with fresh health, and bindings are untouched.
  • It recovers a connection whose sealed credential can no longer be read, such as after a lost key ring, because the new credential is sealed without opening the old one.
  • A disconnected connection can be reconnected; a revoked one cannot.
  • It requires manage, and records a credential.replaced event.

Bindings

Operation Requires Behaviour
Bindings view Lists what depends on the connection
Bind use Records that a consumer depends on it for a purpose; idempotent
Unbind use Removes a binding; not an error when none exists

Each change records a binding.changed event. Grants stay with the host's authorization.

Installation

go get github.com/plexusone/connectforge@v0.2.0

Known limitations

  • A disconnect does not require acknowledging bindings. The list is available; requiring it is planned (RMI-CONNECTFORGE-018).
  • Everything in the v0.1.0 limitations still applies: static API tokens only, no scheduled validation, no HTTP API of its own.