Skip to content

SMOODEV-1523: ESO bearer-token refresher#101

Merged
brentrager merged 1 commit into
mainfrom
SMOODEV-1523-eso-refresher
Jun 2, 2026
Merged

SMOODEV-1523: ESO bearer-token refresher#101
brentrager merged 1 commit into
mainfrom
SMOODEV-1523-eso-refresher

Conversation

@brentrager

Copy link
Copy Markdown
Contributor

Problem

ESO's webhook provider reads a static bearer from `external-secrets/smooai-config-bootstrap`, but `api.smoo.ai` issues short-lived `client_credentials` JWTs (~1h). A static token goes stale → ESO sync silently 401s → that's why workload secrets are Pulumi-baked at SST deploy time (SMOODEV-1347), coupling every secret-value change to a ~1h platform deploy.

Solution

New `@smooai/config/eso-refresher` (bin `smooai-config-eso-refresher`): a sidecar that re-mints the token on a short interval via the same `TokenProvider` the SDK uses (invalidate + getAccessToken so the Secret always holds a near-full-TTL token) and patches it into the bootstrap Secret. ESO then always reads a fresh bearer; a `th config set` goes live on ESO refresh + rollout restart — no platform deploy.

  • Fail-loud initial sync (crash-loop on misconfig); loop failures logged + retried.
  • K8s write behind a `SecretWriter` seam → 6 unit tests, no live cluster.
  • `Dockerfile.eso-refresher` + `docs/ESO-Bearer-Refresher.md`.

Epic SMOODEV-1522 · part of the ESO restore (1524 generator, 1525 smooai wiring + MiMo validation).

🤖 Generated with Claude Code

…m SST deploy)

ESO's webhook provider reads a static bearer from external-secrets/
smooai-config-bootstrap, but api.smoo.ai issues short-lived client_credentials
JWTs (~1h) — so a static token goes stale and ESO sync silently 401s. That's
why workload secrets are Pulumi-baked at SST deploy time (SMOODEV-1347),
coupling every secret-value change to a ~1h platform deploy.

Add @smooai/config/eso-refresher (bin smooai-config-eso-refresher): a sidecar
that re-mints the token on a short interval via the same TokenProvider the SDK
uses (invalidate + getAccessToken so the Secret always holds a near-full-TTL
token) and patches it into the bootstrap Secret. ESO then always reads a fresh
bearer; a 'th config set' goes live on ESO refresh + rollout restart, no deploy.

Fail-loud initial sync (crash-loop on misconfig); loop failures logged+retried.
K8s write behind a SecretWriter seam for unit testing (6 tests, no live cluster).
Includes Dockerfile.eso-refresher + docs/ESO-Bearer-Refresher.md. Epic SMOODEV-1522.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@changeset-bot

changeset-bot Bot commented Jun 2, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 2b96be3

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
Name Type
@smooai/config Minor

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@brentrager brentrager merged commit 8fe21bd into main Jun 2, 2026
1 check passed
@brentrager brentrager deleted the SMOODEV-1523-eso-refresher branch June 2, 2026 18:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant