react-native-social-x-auth
Version:
A lightweight React Native library for authenticating with X (formerly Twitter) using OAuth 2.0 with PKCE. Provides a secure and seamless login experience through Android Custom Tabs and iOS Safari ViewController. Built specifically for integrating X auth
30 lines (25 loc) • 976 B
text/typescript
import { sha256 } from '@noble/hashes/sha2';
import base64 from 'react-native-base64'
function generateCodeVerifier(length = 43): string {
const possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~';
let verifier = '';
for (let i = 0; i < length; i++) {
verifier += possible.charAt(Math.floor(Math.random() * possible.length));
}
return verifier;
}
function base64UrlEncode(bytes: Uint8Array): string {
const base64Str = base64.encodeFromByteArray(bytes);
return base64Str.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
}
function generateCodeChallenge(verifier: string): string {
try {
const data = new TextEncoder().encode(verifier);
const hash = sha256(data);
return base64UrlEncode(hash).replace(/=/g, '');
} catch (error) {
console.error('Error in generateCodeChallenge:', error);
throw error;
}
}
export { generateCodeVerifier, generateCodeChallenge };