Releases: fells-code/seamless-cli
Release list
v0.8.0
Minor Changes
- 8468863: Target
bootstrap-adminat the active profile's instance URL instead of requiring a localseamless.config.json. The command now resolves the instance from the active profile (respecting--profileandSEAMLESS_PROFILE), withSEAMLESS_API_URLas an override andhttp://localhost:3000as the fallback when no profile is configured. The bootstrap-secret auth flow is unchanged.
Patch Changes
- 5126998: Document
bootstrap-adminin the README: add a "Creating the first admin"
section covering the command, its profile-based instance targeting (with the
SEAMLESS_API_URLoverride andhttp://localhost:3000fallback), and the
bootstrap-secret authentication it uses because it runs before any admin exists.
v0.7.0
Minor Changes
-
6af3216: feat(init): connect scaffolds to a managed instance when a profile is logged in
seamless initnow defaults to the managed control plane whenever a profile has an active session. It reads the logged-in session, lists your applications, issues the application's service token from the control plane (rather than generating a local secret), and points the scaffolded web and api at the managed auth instance. Runninginitinside an existing project wires the managed credentials intoapi/.envin place, or prints them when there is no api directory. The self-hosted flow stays available withseamless init --local, and is still used automatically when no session is present. SetSEAMLESS_PORTAL_API_URLto override the control-plane host.
Patch Changes
-
f8c4478: chore(templates): scaffold from seamless-templates v0.2.4
Bump
SEAMLESS_TEMPLATES_REFtov0.2.4. The Express template now has a working productionnpm run start(fixed extensionless ESM imports and the migration runner path) and ships thedocker-compose.ymlits scripts and README referenced. The web templates (react-vite and react-oauth) drop the unusedVITE_AUTH_SERVER_URL, and all templates document both the local and managed init paths.
v0.6.0
Minor Changes
- d09317c: Add admin verbs for users and organizations (requires an admin role).
seamless userscoverslist(with client-side--limit/--offsetpaging and
--json),delete <id>(with confirmation),credentials <id>(from the admin
user detail endpoint), andprepare-device-replacement <id>for admin-assisted
recovery.seamless orgcoverslist,create,get, andupdate, and
seamless org memberscoverslist,add(by--userid or--email, with
--roles/--scopes),update, andremove(with confirmation). Every command
surfaces a 403 as a clear permission error, and device replacement explains the
step-up requirement when the CLI session is not elevated. Accepts--profile
and honorsSEAMLESS_PROFILE. - 29cef7d: Add a multi-profile config store and
seamless profilecommands so the CLI can
target multiple Seamless Auth instances (self-hosted, managed tenant, local dev)
under named profiles. Profiles live in~/.config/seamless/config.json
(respectingXDG_CONFIG_HOME) and hold no secrets. New subcommands:profile list,profile add,profile use, andprofile remove. The active profile can
be selected per command with--profile <name>or theSEAMLESS_PROFILE
environment variable, defaulting to thedefaultprofile. - 4d9cc23: Add an authenticated HTTP client that targets the active profile's instance,
attaches the Bearer access token, and transparently refreshes on expiry. On a
401 it callsPOST /refreshwith the opaque refresh token, persists the rotated
pair, and retries the original request once. A rotated or reused refresh token
clears the local session and raises a clear re-login prompt instead of a stack
trace. Non-JSON and empty response bodies are parsed defensively, and rate-limit
(429) responses are surfaced without triggering a refresh. - f24a71d: Add
seamless config, config-as-code for an instance's system configuration
(requires an admin role).config get [key] [--json]reads the config fromGET /system-config/admin,config set <key> <value>writes one key viaPATCH /system-config/admin(the value is parsed as JSON, falling back to a string, so
TTLs, arrays, booleans, and numbers all work), andconfig roleslists the
instance's roles.config diff <file>shows how a local JSON config file
differs from the instance, andconfig apply <file>applies the delta after a
confirmation prompt, with--dry-runto preview. Read-only or unknown keys in a
file are ignored on apply, and a non-admin user gets a clear permission error.
Accepts--profileand honorsSEAMLESS_PROFILE. - 69fb8c8: Store session tokens in the OS keychain (macOS Keychain, Windows Credential
Manager, Linux Secret Service) via@napi-rs/keyringinstead of on disk. Tokens
are scoped per profile (keyed by profile name and instance URL) so multiple
instances never collide, and the refresh token, the durable secret, never
touches config or logs.seamless profile removenow clears the profile's
keychain entry. When no keychain is available (for example headless CI), the CLI
reads a refresh token fromSEAMLESS_REFRESH_TOKENif set and otherwise fails
with a clear, documented error rather than writing secrets to disk. - 4301da5: Add
seamless login, an interactive email OTP login for the active profile's
Seamless Auth instance. It callsPOST /login(honoring the instance's returned
loginMethods), triggers the code withGET /otp/generate-login-email-otp,
prompts for the code you paste from your inbox, and verifies it withPOST /otp/verify-login-email-otp. On success it stores the session in the OS keychain
and records the identity (sub, email, identifier type) on the profile. The
command caps local code retries so it does not trip the per-IP OTP limiter,
surfaces a 429 clearly, refreshes the code automatically if the 5 minute
ephemeral window lapses, and reports unreachable instances without a stack trace.
Accepts the identifier positionally or with--identifier, and targets a
specific profile with--profile. - 79d076e: Add
seamless sessionsto list and revoke the logged-in user's active sessions.
seamless sessions(orsessions list) callsGET /sessionsand renders each
session's id, device or user agent, IP, and last-used time, marking the current
session.seamless sessions revoke <id>callsDELETE /sessions/:id, and
seamless sessions revoke --allcallsDELETE /sessions. Revoking the current
session, or all sessions, prompts for confirmation first and then clears the
local keychain tokens, since that request signs you out. Accepts--profileand
honorsSEAMLESS_PROFILE. - a9c1ef3: Add
seamless whoamiandseamless logout.whoamicallsGET /users/me
through the authenticated client and prints the identity (sub, email, roles)
alongside the active profile and instance URL, failing cleanly with a "not
logged in" message when there is no session.logoutends the current session
withDELETE /logoutand then clears the profile's keychain tokens;logout --allrevokes every session for the user withDELETE /logout/allfirst. Both
commands accept--profile(and honorSEAMLESS_PROFILE) and always clear the
local tokens even if the server session was already gone.
Patch Changes
- f8e8cdb: Document the CLI authentication commands in the README (profiles, login, whoami,
sessions, logout, config, and the users and organizations admin verbs), including
per-platform keychain behavior and the headlessSEAMLESS_REFRESH_TOKEN
fallback. Add a gated end-to-end test that drives the real login flow, an
authenticated call, transparent refresh, and refresh-reuse rejection against a
running instance (enabled withSEAMLESS_E2E_URL), plus an opt-in rate-limit
check. - f978890:
seamless verifynow prints a consolidated summary report at the end of the run:
the seamless package versions under test (source versions for--local, the
declared pins for released runs), one line per conformance layer (API / adapter and
each web template) with its pass/fail status and duration, and an overall verdict.
It is printed after teardown so it stays on screen without scrolling back through
the phase output.
v0.5.2
Patch Changes
- 9992373: Bump the pinned
seamless-templatesref tov0.2.3, soseamless initscaffolds the templates that ship@seamless-auth/react^0.4.0(TOTP support) and@seamless-auth/express^0.7.0.
v0.5.1
Patch Changes
- 9a9953a: Fix local auth mode regenerating the auth server's
.enva second time with fresh secrets, which left the scaffolded API'sAPI_SERVICE_TOKENmismatched with the auth server's when services run outside Docker. The compose builder now reads the already-written auth env instead of rewriting it.
v0.5.0
Minor Changes
- 9bfaa5f: When the OAuth template is selected,
seamless initnow prompts for OIDC providers (Google, GitHub, Microsoft, GitLab) and their client id/secret, then wires them into the scaffolded auth server: OAUTH_PROVIDERS config, a per-provider*_CLIENT_SECRETenv var, theoauthlogin method, and thehttp://localhost:5173/oauth/callbackredirect URI. Providers left without credentials are scaffolded disabled with a printed next-steps note. Apple is documented as manual (its client secret is a signed JWT and it has no userinfo endpoint). The scaffold now also generatesREFRESH_TOKEN_LOOKUP_SECRET,TOTP_SECRET_ENCRYPTION_KEY, andOAUTH_STATE_SECRET(previously left empty, falling back to the service token), and adds a healthcheck to the generated web container.
v0.2.0
Create Seamless v0.1.2
Full Changelog: v0.1.1...v0.1.2
Create Seamless v0.1.1
Full Changelog: v0.1.0...v0.1.1