Skip to content

feat(#779): Add JWT session issuance after SEP-10 authentication - #1139

Open
alexatsejames-alt wants to merge 3 commits into
ritik4ever:mainfrom
alexatsejames-alt:feat/779-jwt-session-issuance
Open

feat(#779): Add JWT session issuance after SEP-10 authentication#1139
alexatsejames-alt wants to merge 3 commits into
ritik4ever:mainfrom
alexatsejames-alt:feat/779-jwt-session-issuance

Conversation

@alexatsejames-alt

@alexatsejames-alt alexatsejames-alt commented Aug 29, 2026

Copy link
Copy Markdown
Contributor

Summary

Issue short-lived signed JWT bound to verified Stellar address with automatic token refresh capability.

Changes

  • JWT utility module for signing and verifying tokens
  • JWT auth middleware for validating Bearer tokens on authenticated requests
  • POST /api/auth/login endpoint for JWT issuance
  • POST /api/auth/refresh endpoint for token refresh without re-verification
  • Comprehensive test suite covering all scenarios
  • Full TypeScript type safety

Acceptance Criteria

✅ Verified SEP-10 login returns JWT usable for subsequent authenticated requests
✅ Expired or tampered JWT is rejected by auth middleware
✅ Refresh flow issues new valid token without requiring fresh wallet signature
fixes #779

…ation

- Issue short-lived signed JWT bound to verified Stellar address
- Add JWT validation middleware for subsequent authenticated requests
- Include expiry and issuer claims, reject tampered/expired tokens
- Add POST /api/auth/refresh flow for token refresh without re-verification
- Comprehensive test coverage for JWT issuance and validation
@vercel

vercel Bot commented Aug 29, 2026

Copy link
Copy Markdown

@alexatsejames-alt is attempting to deploy a commit to the ritik4ever's projects Team on Vercel.

A member of the Team first needs to authorize it.


beforeEach(() => {
storeFile = path.join(os.tmpdir(), `bounty-jwt-${randomUUID()}.json`);
fs.writeFileSync(storeFile, '[]', 'utf8');

const normalizedEvent = eventType.toLowerCase().replace(/^bounty_/, "");

let headerText = "Bounty Update";
const normalizedEvent = eventType.toLowerCase().replace(/^bounty_/, "");

let headerText = "Bounty Update";
let color = "#4A154B";
const response = await fetch(webhookUrl, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(slackPayload),
const keypair = Keypair.fromPublicKey(publicKey);

// Decode the transaction
const tx = TransactionBuilder.fromXDR(transactionXdr, Networks.TESTNET_NETWORK_PASSPHRASE);
@drips-wave

drips-wave Bot commented Aug 29, 2026

Copy link
Copy Markdown

@alexatsejames-alt Great news! 🎉 Based on an automated assessment of this PR, the linked Wave issue(s) no longer count against your application limits.

You can now already apply to more issues while waiting for a review of this PR. Keep up the great work! 🚀

Learn more about application limits

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[FEATURE] Add JWT session issuance after successful SEP-10 authentication

2 participants