Skip to content

feat(auth): Sign in with CoinPay (0.6.0) - #79

Merged
sh1pt-actions-fleet[bot] merged 1 commit into
masterfrom
feat/coinpay-signin
Oct 29, 2026
Merged

sh1pt-actions-fleet[bot] merged 1 commit into
masterfrom
feat/coinpay-signin

Conversation

@sh1pt-actions-fleet

Copy link
Copy Markdown
Contributor

Sign in with CoinPay, the house master account.

  • Confidential OIDC client cp_b675ff11465274611eb40748, auth code + PKCE S256 + state + nonce (via @profullstack/coinpay-onboard/oauth 0.3.1), redirect https://p0dcasters.com/api/v1/coinpay/oauth/callback, scopes openid profile email.
  • Binding is by CoinPay sub (coinpay_identities), never by email. A new CoinPay login creates a new account with an @coinpay.p0dcasters.invalid placeholder (digest off); the CoinPay email is unverified contact info only.
  • "Sign in with CoinPay" first on /login and /signup; Connect / Disconnect on /account (connect needs a session; disconnect refused when CoinPay is the only way in).
  • Table created lazily and added to db/schema.pg.sql.
  • Tests: test/coinpay-signin.test.mjs (email collision, connect without session, forged/expired pending cookie, bad state/nonce/aud).

Env: COINPAY_OAUTH_CLIENT_ID / COINPAY_OAUTH_CLIENT_SECRET (vault p0dcasters--prod + dev2 app.env, already set).

🤖 Generated with Claude Code

CoinPay is the house master account. Confidential OIDC client with PKCE S256,
state and nonce via @profullstack/coinpay-onboard/oauth; redirect
/api/v1/coinpay/oauth/callback.

- Binds to the CoinPay sub in coinpay_identities, never by email. A first
  CoinPay login makes a new account with an undeliverable placeholder
  address (digest off); the CoinPay email is kept as unverified contact info.
- Connect / Disconnect on /account; connect needs a session, disconnect is
  refused when CoinPay is the only way in (placeholder email, no passkey).
- Pending state/verifier/nonce in an HMAC-sealed, 10-minute, path-scoped cookie.
- Tests: email collision gets a new account, connect needs a session,
  forged/expired pending, wrong state/nonce/audience rejected.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@socket-security

Copy link
Copy Markdown

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Added@​profullstack/​coinpay-onboard@​0.3.17610010093100

View full report

@sh1pt-actions-fleet
sh1pt-actions-fleet Bot merged commit c7135c6 into master Oct 29, 2026
3 checks passed
@sh1pt-actions-fleet
sh1pt-actions-fleet Bot deleted the feat/coinpay-signin branch October 29, 2026 05:49
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