From 682c7760c26e49fe3bad33aa521640d196d45fcb Mon Sep 17 00:00:00 2001 From: Eli Zibin <1131641+zibs@users.noreply.github.com> Date: Mon, 26 May 2025 13:02:44 -0700 Subject: [PATCH 1/5] upgrade demo app - replaces existing demo app with newly bootstrapped app to avoid painstaking upgrade. - replaces old UI with simpler more basic UI. - uses Swift on iOS now - adds bridging header for obj-c interop --- examples/demo/{_bundle => .bundle}/config | 0 examples/demo/.gitignore | 13 +- examples/demo/App.js | 176 - examples/demo/App.tsx | 283 + examples/demo/CHANGELOG.md | 10 - examples/demo/Gemfile | 12 +- examples/demo/Gemfile.lock | 124 + examples/demo/__tests__/App.test.tsx | 14 +- examples/demo/android/app/build.gradle | 36 +- .../android/app/src/debug/AndroidManifest.xml | 6 +- .../java/com/example/ReactNativeFlipper.java | 75 - .../android/app/src/main/AndroidManifest.xml | 5 +- .../main/java/com/example/MainActivity.java | 32 - .../src/main/java/com/example/MainActivity.kt | 22 + .../java/com/example/MainApplication.java | 61 - .../main/java/com/example/MainApplication.kt | 44 + .../res/drawable/rn_edit_text_material.xml | 3 +- .../app/src/main/res/values/styles.xml | 2 +- .../java/com/example/ReactNativeFlipper.java | 20 - examples/demo/android/build.gradle | 18 +- examples/demo/android/gradle.properties | 7 +- .../android/gradle/wrapper/gradle-wrapper.jar | Bin 61574 -> 43705 bytes .../gradle/wrapper/gradle-wrapper.properties | 3 +- examples/demo/android/gradlew | 33 +- examples/demo/android/gradlew.bat | 22 +- examples/demo/android/settings.gradle | 4 +- examples/demo/assets/background.jpg | Bin 80275 -> 0 bytes examples/demo/babel.config.js | 2 +- examples/demo/components/Button.js | 27 - examples/demo/components/ButtonContainer.js | 18 - examples/demo/components/Form.js | 12 - examples/demo/components/FormLabel.js | 15 - examples/demo/components/FormValue.js | 21 - examples/demo/components/Heading.js | 21 - examples/demo/components/Page.js | 27 - examples/demo/components/index.js | 7 - examples/demo/demo.gif | Bin 896130 -> 16719166 bytes examples/demo/ios/.xcode.env | 10 + .../ios/Example.xcodeproj/project.pbxproj | 305 +- examples/demo/ios/Example/AppDelegate.h | 10 - examples/demo/ios/Example/AppDelegate.mm | 51 - examples/demo/ios/Example/AppDelegate.swift | 73 + examples/demo/ios/Example/Info.plist | 14 +- .../demo/ios/Example/PrivacyInfo.xcprivacy | 37 + examples/demo/ios/Example/main.m | 10 - examples/demo/ios/ExampleTests/ExampleTests.m | 66 - examples/demo/ios/ExampleTests/Info.plist | 24 - examples/demo/ios/Podfile | 31 +- examples/demo/ios/Podfile.lock | 2027 ++- examples/demo/ios/RNAppAuthBridge.h | 8 + examples/demo/ios/_xcode.env | 11 - examples/demo/package-lock.json | 12351 ++++++++++++++++ examples/demo/package.json | 37 +- examples/demo/tsconfig.json | 2 +- packages/react-native-app-auth/package.json | 2 +- yarn.lock | 5194 +++---- 56 files changed, 16670 insertions(+), 4768 deletions(-) rename examples/demo/{_bundle => .bundle}/config (100%) delete mode 100644 examples/demo/App.js create mode 100644 examples/demo/App.tsx delete mode 100644 examples/demo/CHANGELOG.md create mode 100644 examples/demo/Gemfile.lock delete mode 100644 examples/demo/android/app/src/debug/java/com/example/ReactNativeFlipper.java delete mode 100644 examples/demo/android/app/src/main/java/com/example/MainActivity.java create mode 100644 examples/demo/android/app/src/main/java/com/example/MainActivity.kt delete mode 100644 examples/demo/android/app/src/main/java/com/example/MainApplication.java create mode 100644 examples/demo/android/app/src/main/java/com/example/MainApplication.kt delete mode 100644 examples/demo/android/app/src/release/java/com/example/ReactNativeFlipper.java delete mode 100644 examples/demo/assets/background.jpg delete mode 100644 examples/demo/components/Button.js delete mode 100644 examples/demo/components/ButtonContainer.js delete mode 100644 examples/demo/components/Form.js delete mode 100644 examples/demo/components/FormLabel.js delete mode 100644 examples/demo/components/FormValue.js delete mode 100644 examples/demo/components/Heading.js delete mode 100644 examples/demo/components/Page.js delete mode 100644 examples/demo/components/index.js delete mode 100644 examples/demo/ios/Example/AppDelegate.h delete mode 100644 examples/demo/ios/Example/AppDelegate.mm create mode 100644 examples/demo/ios/Example/AppDelegate.swift create mode 100644 examples/demo/ios/Example/PrivacyInfo.xcprivacy delete mode 100644 examples/demo/ios/Example/main.m delete mode 100644 examples/demo/ios/ExampleTests/ExampleTests.m delete mode 100644 examples/demo/ios/ExampleTests/Info.plist create mode 100644 examples/demo/ios/RNAppAuthBridge.h delete mode 100644 examples/demo/ios/_xcode.env create mode 100644 examples/demo/package-lock.json diff --git a/examples/demo/_bundle/config b/examples/demo/.bundle/config similarity index 100% rename from examples/demo/_bundle/config rename to examples/demo/.bundle/config diff --git a/examples/demo/.gitignore b/examples/demo/.gitignore index 0cab2ac6..de999559 100644 --- a/examples/demo/.gitignore +++ b/examples/demo/.gitignore @@ -20,7 +20,7 @@ DerivedData *.hmap *.ipa *.xcuserstate -ios/.xcode.env.local +**/.xcode.env.local # Android/IntelliJ # @@ -33,6 +33,7 @@ local.properties .cxx/ *.keystore !debug.keystore +.kotlin/ # node.js # @@ -56,7 +57,7 @@ yarn-error.log *.jsbundle # Ruby / CocoaPods -/ios/Pods/ +**/Pods/ /vendor/bundle/ # Temporary files created by Metro to check the health of the file watcher @@ -64,3 +65,11 @@ yarn-error.log # testing /coverage + +# Yarn +.yarn/* +!.yarn/patches +!.yarn/plugins +!.yarn/releases +!.yarn/sdks +!.yarn/versions diff --git a/examples/demo/App.js b/examples/demo/App.js deleted file mode 100644 index 3ba5f365..00000000 --- a/examples/demo/App.js +++ /dev/null @@ -1,176 +0,0 @@ -import React, {useState, useCallback, useMemo} from 'react'; -import {Alert} from 'react-native'; -import { - authorize, - refresh, - revoke, - prefetchConfiguration, -} from 'react-native-app-auth'; -import { - Page, - Button, - ButtonContainer, - Form, - FormLabel, - FormValue, - Heading, -} from './components'; - -const configs = { - identityserver: { - issuer: 'https://demo.duendesoftware.com', - clientId: 'interactive.public', - redirectUrl: 'io.identityserver.demo:/oauthredirect', - additionalParameters: {}, - scopes: ['openid', 'profile', 'email', 'offline_access'], - - // serviceConfiguration: { - // authorizationEndpoint: 'https://demo.duendesoftware.com/connect/authorize', - // tokenEndpoint: 'https://demo.duendesoftware.com/connect/token', - // revocationEndpoint: 'https://demo.duendesoftware.com/connect/revoke' - // } - }, - auth0: { - issuer: 'https://rnaa-demo.eu.auth0.com', - clientId: 'VtXdAoGFcYzZ3IJaNy4UIS5RNHhdbKbU', - redirectUrl: 'rnaa-demo://oauthredirect', - additionalParameters: {}, - scopes: ['openid', 'profile', 'email', 'offline_access'], - - // serviceConfiguration: { - // authorizationEndpoint: 'https://samples.auth0.com/authorize', - // tokenEndpoint: 'https://samples.auth0.com/oauth/token', - // revocationEndpoint: 'https://samples.auth0.com/oauth/revoke' - // } - }, -}; - -const defaultAuthState = { - hasLoggedInOnce: false, - provider: '', - accessToken: '', - accessTokenExpirationDate: '', - refreshToken: '', -}; - -const App = () => { - const [authState, setAuthState] = useState(defaultAuthState); - React.useEffect(() => { - prefetchConfiguration({ - warmAndPrefetchChrome: true, - connectionTimeoutSeconds: 5, - ...configs.auth0, - }); - }, []); - - const handleAuthorize = useCallback(async provider => { - try { - const config = configs[provider]; - const newAuthState = await authorize({ - ...config, - connectionTimeoutSeconds: 5, - iosPrefersEphemeralSession: true, - }); - - setAuthState({ - hasLoggedInOnce: true, - provider: provider, - ...newAuthState, - }); - } catch (error) { - Alert.alert('Failed to log in', error.message); - } - }, []); - - const handleRefresh = useCallback(async () => { - try { - const config = configs[authState.provider]; - const newAuthState = await refresh(config, { - refreshToken: authState.refreshToken, - }); - - setAuthState(current => ({ - ...current, - ...newAuthState, - refreshToken: newAuthState.refreshToken || current.refreshToken, - })); - } catch (error) { - Alert.alert('Failed to refresh token', error.message); - } - }, [authState]); - - const handleRevoke = useCallback(async () => { - try { - const config = configs[authState.provider]; - await revoke(config, { - tokenToRevoke: authState.accessToken, - sendClientId: true, - }); - - setAuthState({ - provider: '', - accessToken: '', - accessTokenExpirationDate: '', - refreshToken: '', - }); - } catch (error) { - Alert.alert('Failed to revoke token', error.message); - } - }, [authState]); - - const showRevoke = useMemo(() => { - if (authState.accessToken) { - const config = configs[authState.provider]; - if (config.issuer || config.serviceConfiguration.revocationEndpoint) { - return true; - } - } - return false; - }, [authState]); - - return ( - - {authState.accessToken ? ( -
- accessToken - {authState.accessToken} - accessTokenExpirationDate - {authState.accessTokenExpirationDate} - refreshToken - {authState.refreshToken} - scopes - {authState.scopes.join(', ')} -
- ) : ( - - {authState.hasLoggedInOnce ? 'Goodbye.' : 'Hello, stranger.'} - - )} - - - {!authState.accessToken ? ( - <> -