the-tip-top-frontend/lib/facebook-sdk.ts
soufiane a3e0227e41 fix: improve Facebook login error handling and add setup documentation
Enhanced error handling for Facebook Login to provide clearer messages when
the service is unavailable. Added comprehensive setup documentation for
configuring Facebook OAuth properly.

Changes:
- Improved error messages in Facebook SDK for unavailable service
- Updated login page to display specific error messages to users
- Added FACEBOOK_LOGIN_SETUP.md with step-by-step configuration guide
- Documented alternatives (email/Google login) while Facebook is being configured

This addresses the "Fonctionnalité indisponible" error users are seeing
when attempting to use Facebook Login.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-19 15:44:21 +01:00

75 lines
1.9 KiB
TypeScript

/**
* Initialisation du SDK Facebook
*/
declare global {
interface Window {
FB: any;
fbAsyncInit: () => void;
}
}
export const initFacebookSDK = (): Promise<void> => {
return new Promise((resolve) => {
// Si le SDK est déjà chargé
if (window.FB) {
resolve();
return;
}
// Définir la fonction de callback
window.fbAsyncInit = function() {
window.FB.init({
appId: process.env.NEXT_PUBLIC_FACEBOOK_APP_ID,
cookie: true,
xfbml: true,
version: 'v18.0'
});
resolve();
};
// Charger le SDK
(function(d, s, id) {
const fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
const js = d.createElement(s) as HTMLScriptElement;
js.id = id;
js.src = "https://connect.facebook.net/fr_FR/sdk.js";
fjs?.parentNode?.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
});
};
export const loginWithFacebook = (): Promise<string> => {
return new Promise((resolve, reject) => {
if (!window.FB) {
reject(new Error('Facebook SDK not loaded'));
return;
}
window.FB.login((response: any) => {
if (response.authResponse) {
resolve(response.authResponse.accessToken);
} else if (response.status === 'unknown') {
// Facebook app is being updated or unavailable
reject(new Error('Facebook Login est actuellement indisponible. Veuillez utiliser la connexion par email ou Google.'));
} else {
reject(new Error('Facebook login cancelled'));
}
}, { scope: 'email,public_profile' });
});
};
export const getFacebookLoginStatus = (): Promise<any> => {
return new Promise((resolve, reject) => {
if (!window.FB) {
reject(new Error('Facebook SDK not loaded'));
return;
}
window.FB.getLoginStatus((response: any) => {
resolve(response);
});
});
};