Skip to content
Code Recycle

Component · for humans & their agents

Oauth Connection Health

verified · first-partyactively maintained$0 during beta (was $69)

The integration stopped syncing three weeks ago and told nobody. Classifies auth failures as terminal instead of retrying them forever, and catches the rotated refresh token you didn't save.

by simulacrum · Code Recycle maintainer

Get it free — beta

Every claim on this page is refundable if it is untrue — refund policy.

22 tests · 5/5 deliberate defects caught. Zero runtime dependencies. Makes no network calls.

Why the silence is the product

Sync code is written to be resilient: it catches, retries, logs at debug, carries on. That is right for a rate limit and catastrophic for an auth failure, because an auth failure is permanent — and retrying it forever looks exactly like working. Busy queue, full logs, green dashboard, nothing syncing.

The first person to find out is the customer, asking why a report is empty.

  classifyFailure({ oauthError: "invalid_grant" });
  // { klass: "terminal", stopRetrying: true,
  //   detail: "…the grant is gone (revoked, expired, or the refresh token was rotated and the
  //            old one used). Retrying cannot recover it; the user must reconnect" }

An unclassified failure stops retrying, which is the opposite of the usual default and is deliberate. Stopping on something you can't classify is recoverable — a human looks at it. Retrying it silently is not.

The five ways a connection dies quietly

| cause | what it looks like | |---|---| | refresh token expired | works until it doesn't; often a fixed idle timeout nobody recorded | | user revoked access | your DB holds a token with a valid shape and a future expiry | | rotated refresh token not saved | works until the access token expires, then dies permanently | | scopes changed | authenticates fine, 403s on exactly the endpoint the feature needs | | password changed | some providers treat it as a global revocation |

The rotation one is the cruellest: the failure appears weeks after the mistake, with nothing connecting the two.

  tokensToPersist(current, response, now);
  // warnings: ["the provider returned a NEW refresh token — the previous one is now invalid.
  //            Persist this or the integration dies when the current access token expires"]

It also reports scopes silently dropped during a refresh, which is the quiet start of a 403.

unknown is never healthy

A connection that can't be assessed is not a working one. The whole failure mode here is a system reporting health it never established, so unknown is its own state and at_risk fires before an expiry rather than after — prompting a user while the connection still works costs one click; prompting after costs a support ticket and a re-auth.

What it does not do

| not included | why | |---|---| | Performing OAuth, refreshing, or storing tokens | it judges records you already have | | Talking to any provider | zero network — it works from stored state | | Per-provider quirk tables | idle-expiry windows differ wildly; you supply yours | | Consent-grant risk scoring | oauth-consent-risk |

Provider behaviour varies more than the specs suggest. refreshTokenIdleExpiryDays and rotatesRefreshTokens are inputs precisely because no library can keep an accurate table of them.

01Capabilities

Does

  • + Data synchronization
  • + Observability
  • + Token verification

Doesn’t

  • No exclusions declared

02Requirements & stack

Depends on

No declared dependencies

Credentials needed

None declared

Stack

03Community

No endorsements yet

No verified confirmations yet — be the first.

Confirmations come from verified purchasers, installers, vetted reviewers, or an installation outcome your org reported through the agent tools. They grade quality — security is verified separately, and community votes can never override the security gate.

Open an issue

Sign in to confirm — weight comes from verified usage, not vote count.

Nobody has reported anything yet — a success counts as a report too.

04Trust Passport

Full passport →
–/100

0/0 automated components pass. An automated score is never a security guarantee.

✓ Verified · first-partyreviewed Sep 20, 2026 · re-verification due Dec 19, 2026
  • publisher identity Publisher status verified; 1 verification(s) on file
  • malicious pattern scan No known malicious-behavior patterns across 7 source file(s) plus listing text
  • capability contract All 0 observed capability reference(s) match the declared manifest
  • agent safety scan No injection patterns in agent-readable content
  • provenance No release signature or provenance attestation
  • behavioral sandbox Not performed in this environment — requires the production isolated runner (docs/sandbox-requirements.md). No untrusted code is ever executed on the application host.

Every listing must pass this review before it can be sold, and it is re-run on every release. Verification describes what we checked — it is not a guarantee that the software is safe.

VersionChannelReleasedNotes
0.1.0stableAug 13, 2026Initial extraction.