Auth Examples
Examples
This guide provides practical examples of using the Authentication service.
Using cURL
Generating a User Token
curl -X POST https://auth.genstack.app/token \ -H "Content-Type: application/json" \ -d '{ "userId": "YOUR_USER_ID", "clerkToken": "YOUR_CLERK_TOKEN", "lifetimeSeconds": 3600 }'
Validating a Token
curl -X POST https://auth.genstack.app/validate \ -H "Content-Type: application/json" \ -d '{ "genstackToken": "YOUR_GENSTACK_TOKEN" }'
Logging Out
curl -X POST https://auth.genstack.app/logout \ -H "Content-Type: application/json" \ -d '{ "genstackToken": "YOUR_GENSTACK_TOKEN", "clerkToken": "YOUR_CLERK_TOKEN" }'
Using TypeScript/JavaScript
Complete Authentication Flow
interface AuthResponse { genstackToken: string;}
interface ValidationResponse { valid: boolean; userId: string; isMarketing: boolean; expiresAt: string;}
class AuthClient { private baseUrl: string;
constructor(baseUrl: string) { this.baseUrl = baseUrl; }
async getToken(userId: string, clerkToken: string, lifetimeSeconds: number): Promise<string> { const response = await fetch(`${this.baseUrl}/token`, { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ userId, clerkToken, lifetimeSeconds, }), });
if (!response.ok) { const error = await response.json(); throw new Error(error.error.message); }
const data: AuthResponse = await response.json(); return data.genstackToken; }
async validateToken(token: string): Promise<ValidationResponse> { const response = await fetch(`${this.baseUrl}/validate`, { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ genstackToken: token, }), });
if (!response.ok) { const error = await response.json(); throw new Error(error.error.message); }
return response.json(); }
async logout(genstackToken: string, clerkToken?: string): Promise<void> { const response = await fetch(`${this.baseUrl}/logout`, { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ genstackToken, clerkToken, }), });
if (!response.ok) { const error = await response.json(); throw new Error(error.error.message); } }}
// Usage Exampleasync function authenticationFlow() { const authClient = new AuthClient("https://auth.genstack.app");
try { // Get token const token = await authClient.getToken("YOUR_USER_ID", "YOUR_CLERK_TOKEN", 3600); console.log("Token received:", token);
// Validate token const validation = await authClient.validateToken(token); console.log("Token validation:", validation);
// Use token in application...
// Logout when done await authClient.logout(token, "YOUR_CLERK_TOKEN"); console.log("Logged out successfully"); } catch (error) { console.error("Authentication error:", error); }}
Error Handling Examples
Token Validation Errors
async function handleTokenValidation(token: string) { try { const response = await fetch("https://auth.genstack.app/validate", { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ genstackToken: token, }), });
if (!response.ok) { const error = await response.json(); switch (error.error.type) { case "InvalidCredentials": console.error("Token is invalid"); // Redirect to login break; case "SessionExpired": console.error("Token has expired"); // Refresh token or redirect to login break; default: console.error("Unexpected error:", error.error.message); } return; }
const validation = await response.json(); // Process validated token... } catch (error) { console.error("Validation request failed:", error); }}