{
plyrId: string; // Player ID (lowercase)
gameId: string; // Game identifier
otp: string; // 2FA token
tokens: string[]; // Token names to approve
amounts: number[]; // Amounts to approve
expiresIn?: number; // Session expiration in seconds (optional, defaults to 86400s/24hrs)
}
{
sessionJwt: string;
plyrId: string;
nonce: string;
gameId: string;
primaryAddress: string;
mirrorAddress: string;
}
const timestamp = Date.now().toString();
const body = {
plyrId: 'player123',
gameId: 'game123',
otp: '123456', // 2FA token from authenticator app
tokens: ['TOKEN1', 'TOKEN2'], // Token names to approve for spending
amounts: [1000, 2000], // Amounts to approve
expiresIn: 3600 // Session will expire in 1 hour
};
const hmac = generateHmacSignature(timestamp, body, secretKey);
const response = await axios.post(apiEndpoint + '/user/loginAndApprove', body, {
headers: {
apikey: apiKey,
signature: hmac,
timestamp: timestamp
}
});
// Store session information securely
const {
sessionJwt, // JWT token for future API calls
plyrId, // Player's ID
nonce, // Unique nonce for this session
gameId, // Game identifier
primaryAddress, // User's primary wallet address
mirrorAddress // User's mirror wallet address
} = response.data;
// Use sessionJwt for subsequent authenticated API calls
// Token approval is already processed