feat(tailscale-exit-nodes): add exit-node control plane image#78
Merged
Conversation
A headless TypeScript service that provisions ephemeral Tailscale exit nodes on AWS Lightsail or Vultr with a TTL, and reaps them when it expires. It ships no UI of its own; pair the JSON API with any front-end. - JSON API: deploy, list, delete, prune, regions, healthz, readyz - Async provisioning saga: mint an ephemeral Tailscale key, create the instance and firewall, poll for readiness, then record state - Reaper sweeps both providers on an interval, reconciling against a Postgres ledger; TTL is enforced via a self-describing instance tag - Region catalog generated at runtime from the providers' public APIs, cached - Postgres-backed, with migrate-on-boot and a startup reconcile - 69 unit tests (vitest + pg-mem) gate the image build (lint, typecheck, test) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
A headless TypeScript service that provisions ephemeral Tailscale exit nodes on
AWS Lightsail or Vultr with a TTL, and reaps them when it expires. It ships no UI
of its own; pair the JSON API with any front-end.
What it does
and firewall, poll for readiness, then record state
Postgres ledger; TTL is enforced via a self-describing instance tag, so even an
orphaned instance with no ledger row is reaped
memory with a baked fallback snapshot
Build and tests
mocked fetch) before compiling, so a failing test fails the image build
🤖 Generated with Claude Code