/** * Plugin local: injeta o intent filter do Google OAuth no AndroidManifest.xml * durante o `expo prebuild`. * * Sem esse intent filter, o Android não sabe que o MeowSpool deve interceptar * o redirect do Google OAuth (scheme com.googleusercontent.apps.*), fazendo o * Chrome tratar a URL como pesquisa. * * O scheme é o reverse do Android OAuth 2.0 client ID registrado no Google Cloud Console. */ const { withAndroidManifest } = require('@expo/config-plugins'); const GOOGLE_REVERSE_CLIENT_ID = 'com.googleusercontent.apps.724520558909-bg5a7e4u24jmis8lgg41ucs0kv0nfp1v'; module.exports = function withGoogleOAuth(config) { return withAndroidManifest(config, (config) => { const manifest = config.modResults; const activities = manifest.manifest.application?.[0]?.activity ?? []; const mainActivity = activities.find( (a) => a.$?.['android:name'] === '.MainActivity', ); if (!mainActivity) return config; // Evita duplicar o intent filter em rebuilds consecutivos const alreadyAdded = (mainActivity['intent-filter'] ?? []).some((filter) => (filter.data ?? []).some( (d) => d.$?.['android:scheme'] === GOOGLE_REVERSE_CLIENT_ID, ), ); if (alreadyAdded) return config; mainActivity['intent-filter'] = [ ...(mainActivity['intent-filter'] ?? []), { action: [{ $: { 'android:name': 'android.intent.action.VIEW' } }], category: [ { $: { 'android:name': 'android.intent.category.DEFAULT' } }, { $: { 'android:name': 'android.intent.category.BROWSABLE' } }, ], data: [{ $: { 'android:scheme': GOOGLE_REVERSE_CLIENT_ID } }], }, ]; return config; }); };