From ca86625a61f8bf4d5b295974ac563884584fb845 Mon Sep 17 00:00:00 2001 From: thaddmt <68032955+thaddmt@users.noreply.github.com> Date: Thu, 16 Nov 2023 13:05:40 -0800 Subject: [PATCH] chore: remove guides test and auth protected guides from docs (#4722) * chore: remove guides test and auth protected guides from docs * update link checker --- .github/workflows/publish-next.yml | 95 ---- .../__snapshots__/sitemap.test.ts.snap | 1 - docs/src/data/links.tsx | 5 - .../advanced/useAuthenticator.react.mdx | 3 +- .../auth-protected/auth-protected.react.mdx | 461 ------------------ .../guides/auth-protected/index.page.mdx | 24 - guides/react/protected-routes/.gitignore | 26 - guides/react/protected-routes/README.md | 3 - .../protected-routes/config-overrides.js | 3 - guides/react/protected-routes/package.json | 47 -- .../react/protected-routes/public/favicon.ico | Bin 3870 -> 0 bytes .../react/protected-routes/public/index.html | 43 -- .../react/protected-routes/public/logo192.png | Bin 5347 -> 0 bytes .../react/protected-routes/public/logo512.png | Bin 9664 -> 0 bytes .../protected-routes/public/manifest.json | 25 - .../react/protected-routes/public/robots.txt | 3 - guides/react/protected-routes/src/App.css | 17 - guides/react/protected-routes/src/App.js | 51 -- guides/react/protected-routes/src/App.test.js | 8 - .../react/protected-routes/src/RequireAuth.js | 11 - .../protected-routes/src/components/Home.js | 8 - .../protected-routes/src/components/Layout.js | 40 -- .../protected-routes/src/components/Login.js | 21 - .../src/components/ProtectSecond.js | 8 - .../src/components/Protected.js | 8 - guides/react/protected-routes/src/index.css | 13 - guides/react/protected-routes/src/index.js | 19 - guides/react/protected-routes/src/logo.svg | 1 - .../protected-routes/src/reportWebVitals.js | 13 - .../react/protected-routes/src/setupTests.js | 5 - .../react/protected-routes/waitOnConfig.json | 5 - packages/e2e/package.json | 1 - 32 files changed, 1 insertion(+), 967 deletions(-) delete mode 100644 docs/src/pages/[platform]/guides/auth-protected/auth-protected.react.mdx delete mode 100644 docs/src/pages/[platform]/guides/auth-protected/index.page.mdx delete mode 100644 guides/react/protected-routes/.gitignore delete mode 100644 guides/react/protected-routes/README.md delete mode 100644 guides/react/protected-routes/config-overrides.js delete mode 100644 guides/react/protected-routes/package.json delete mode 100644 guides/react/protected-routes/public/favicon.ico delete mode 100644 guides/react/protected-routes/public/index.html delete mode 100644 guides/react/protected-routes/public/logo192.png delete mode 100644 guides/react/protected-routes/public/logo512.png delete mode 100644 guides/react/protected-routes/public/manifest.json delete mode 100644 guides/react/protected-routes/public/robots.txt delete mode 100644 guides/react/protected-routes/src/App.css delete mode 100644 guides/react/protected-routes/src/App.js delete mode 100644 guides/react/protected-routes/src/App.test.js delete mode 100644 guides/react/protected-routes/src/RequireAuth.js delete mode 100644 guides/react/protected-routes/src/components/Home.js delete mode 100644 guides/react/protected-routes/src/components/Layout.js delete mode 100644 guides/react/protected-routes/src/components/Login.js delete mode 100644 guides/react/protected-routes/src/components/ProtectSecond.js delete mode 100644 guides/react/protected-routes/src/components/Protected.js delete mode 100644 guides/react/protected-routes/src/index.css delete mode 100644 guides/react/protected-routes/src/index.js delete mode 100644 guides/react/protected-routes/src/logo.svg delete mode 100644 guides/react/protected-routes/src/reportWebVitals.js delete mode 100644 guides/react/protected-routes/src/setupTests.js delete mode 100644 guides/react/protected-routes/waitOnConfig.json diff --git a/.github/workflows/publish-next.yml b/.github/workflows/publish-next.yml index b24ce8c1f06..967c293d476 100644 --- a/.github/workflows/publish-next.yml +++ b/.github/workflows/publish-next.yml @@ -55,101 +55,6 @@ jobs: DOCSEARCH_DOCS_API_KEY: ${{ secrets.DOCSEARCH_DOCS_API_KEY }} DOCSEARCH_DOCS_INDEX_NAME: ${{ secrets.DOCSEARCH_DOCS_INDEX_NAME }} - guides: - if: false # temporarily disable job - runs-on: ubuntu-latest - environment: ci - env: - NODE_ENV: test - strategy: - fail-fast: false - matrix: - include: - - path: ./guides/react/protected-routes - tags: '@guides and not @todo-guides' - - steps: - - name: Checkout Amplify UI - uses: actions/checkout@24cb9080177205b6e8c946b17badbe402adc938f # v3.4.0 https://github.com/actions/checkout/commit/24cb9080177205b6e8c946b17badbe402adc938f - with: - persist-credentials: false - - - name: Setup Node.js 20 - uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3.6.0 https://github.com/actions/setup-node/commit/64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c - with: - node-version: 20 - cache: 'yarn' - env: - SEGMENT_DOWNLOAD_TIMEOUT_MINS: 2 - - - name: Restore cypress runner Cache - uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 # v3.3.1 https://github.com/actions/cache/commit/88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 - id: restore-cypress-cache - with: - path: ~/.cache/Cypress - key: ${{ runner.os }}-cypress-${{ hashFiles('yarn.lock') }} - env: - SEGMENT_DOWNLOAD_TIMEOUT_MINS: 1 - - - name: Install packages - run: yarn install - - name: Add Amplify CLI - run: yarn global add @aws-amplify/cli - - - name: Configure AWS credentials - uses: aws-actions/configure-aws-credentials@e1e17a757e536f70e52b5a12b2e8d1d1c60e04ef # v2.0.0 https://github.com/aws-actions/configure-aws-credentials/commit/e1e17a757e536f70e52b5a12b2e8d1d1c60e04ef - with: - aws-region: us-east-2 - role-to-assume: ${{ secrets.AUTH_E2E_ROLE_ARN }} - # Amplify CLI does not support headless pull with temporary credentials - # when useProfile is false. - # See: https://github.com/aws-amplify/amplify-cli/issues/11009. - - name: Create temp AWS profile - run: | - aws configure set aws_access_key_id $AWS_ACCESS_KEY_ID && \ - aws configure set aws_secret_access_key $AWS_SECRET_ACCESS_KEY && \ - aws configure set aws_session_token $AWS_SESSION_TOKEN && \ - aws configure set default.region $AWS_REGION - - name: Pull down AWS environments - run: yarn environments auth pull:email - - name: Delete AWS Profile - run: rm -rf ~/.aws - - - name: Install guides - run: yarn install - working-directory: ${{ matrix.path }} - - - name: Build guides - run: yarn build - working-directory: ${{ matrix.path }} - - - name: Start guides site - run: yarn start & npx wait-on -c waitOnConfig.json -t 20000 http-get://localhost:3000 - working-directory: ${{ matrix.path }} - - - name: Run E2E tests against guides - run: yarn e2e test:guides - id: e2e - env: - # Override on the default value in `cypress.json` with framework-specific tag - TAGS: '${{ matrix.tags }}' - - # Env values for testing flows - DOMAIN: ${{ secrets.DOMAIN }} - PHONE_NUMBER: ${{ secrets.PHONE_NUMBER }} - USERNAME: ${{ secrets.USERNAME }} - NEW_PASSWORD: ${{ secrets.NEW_PASSWORD }} - VALID_PASSWORD: ${{ secrets.VALID_PASSWORD }} - - name: Upload videos and screenshots - uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce # v3.1.2 https://github.com/actions/upload-artifact/commit/0b7f8abb1508181956e8e162db84b466c27e18ce - if: ${{ failure() && steps.e2e.outcome != 'success' }} - with: - name: guides-cypress-error - path: | - packages/e2e/cypress/videos/** - packages/e2e/cypress/screenshots/** - retention-days: 5 - publish: uses: aws-amplify/amplify-ui/.github/workflows/reusable-tagged-publish.yml@main with: diff --git a/docs/__tests__/__snapshots__/sitemap.test.ts.snap b/docs/__tests__/__snapshots__/sitemap.test.ts.snap index 6d95b9797f0..11cba4c3a4e 100644 --- a/docs/__tests__/__snapshots__/sitemap.test.ts.snap +++ b/docs/__tests__/__snapshots__/sitemap.test.ts.snap @@ -123,7 +123,6 @@ exports[`Sitemap Snapshot 1`] = ` /react/getting-started/usage/nextjs, /react/getting-started/usage/vite, /react/guides, -/react/guides/auth-protected, /react/guides/css-in-js, /react/theming, /react/theming/css-variables, diff --git a/docs/src/data/links.tsx b/docs/src/data/links.tsx index 3ef9334f42c..7c9d296e4b3 100644 --- a/docs/src/data/links.tsx +++ b/docs/src/data/links.tsx @@ -556,11 +556,6 @@ export const guides: ComponentNavItem[] = [ label: 'CSS in JS', platforms: ['react', 'vue', 'angular'], }, - { - href: '/guides/auth-protected', - label: 'Protected Routes', - platforms: ['react'], - }, ]; export const gettingStarted: ComponentNavItem[] = [ diff --git a/docs/src/pages/[platform]/connected-components/authenticator/advanced/useAuthenticator.react.mdx b/docs/src/pages/[platform]/connected-components/authenticator/advanced/useAuthenticator.react.mdx index 3d21c488712..53479faf9f2 100644 --- a/docs/src/pages/[platform]/connected-components/authenticator/advanced/useAuthenticator.react.mdx +++ b/docs/src/pages/[platform]/connected-components/authenticator/advanced/useAuthenticator.react.mdx @@ -8,7 +8,6 @@ import { Alert, Tabs } from '@aws-amplify/ui-react'; > You must render the `Authenticator` UI component before using the `useAuthenticator` hook. This hook was designed to retrieve `Authenticator` UI specific state such as `route` and `user` and should not be used without the UI component.
- For a full example of `useAuthenticator`, see the [protected routes guide](../../guides/auth-protected) @@ -39,7 +38,7 @@ const App = () => { ## Authenticator Provider -In advanced use cases where usage of the [`useAuthenticator` hook](advanced#useauthenticator-hook) outside the scope of the [`Authenticator`](../authenticator) is needed, wrap your application inside an `Authenticator.Provider`. The `Authenticator.Provider` guarantees that the [useAuthenticator hook](advanced#useauthenticator-hook) is available throughout your application. You can see an example of this pattern in the [Protected Routes Guide.](../../guides/auth-protected) +In advanced use cases where usage of the [`useAuthenticator` hook](advanced#useauthenticator-hook) outside the scope of the [`Authenticator`](../authenticator) is needed, wrap your application inside an `Authenticator.Provider`. The `Authenticator.Provider` guarantees that the [useAuthenticator hook](advanced#useauthenticator-hook) is available throughout your application. diff --git a/docs/src/pages/[platform]/guides/auth-protected/auth-protected.react.mdx b/docs/src/pages/[platform]/guides/auth-protected/auth-protected.react.mdx deleted file mode 100644 index 64650e22cf1..00000000000 --- a/docs/src/pages/[platform]/guides/auth-protected/auth-protected.react.mdx +++ /dev/null @@ -1,461 +0,0 @@ -import { Image, Tabs } from '@aws-amplify/ui-react'; -import { ExampleCode } from '@/components/Example'; -import { TerminalCommand } from '@/components/InstallScripts'; - -The [Amplify UI Authenticator](../connected-components/authenticator) component allows you to quickly scaffold out an end-to-end authentication flow, in just a few lines of code. - -Typically, this can be accomplished by wrapping the entire application in the [withAuthenticator](../connected-components/authenticator#quick-start) higher-order component. This forces the entire application behind a login page. - -Let's imagine you needed a web application where the login page was in its own route, and that you needed a handful of selected routes to only be accessed by logged in users. - -This guide demonstrates that scenario while using the [Amplify UI Authenticator](../connected-components/authenticator) and the [Amplify CLI](https://docs.amplify.aws/cli/). - -> If you'd like to follow along, please use this example [Github repo](https://github.com/aws-amplify/amplify-ui/tree/main/guides/react/protected-routes). Additionally, you can watch this [video](https://www.youtube.com/watch?v=6f635LVtwgk&feature=youtu.be) that walks through this process, and includes a bonus section on how to create a lambda function with a custom authorizer. - -_Example Screenshot of App_ - -Example screenshot of the route guard application. - -## Setup - -To get started we'll need to create a new React application, by following these steps: - - -```bash -npx create-react-app new-auth-app -cd new-auth-app -``` - - -Next, install the Amplify libraries and React Router. - - - - npm - yarn - - - - - - - - - -To add authentication to your application we'll need to install the Amplify CLI. This tool gives us a command line utility to add AWS services. - - - - - - - - - - -After this, run the `amplify init` command. This will setup your application so it can communicate with your AWS account. - - -```bash -amplify init -``` - - -Next, add authentication, and follow the prompts: - - -```bash -amplify add auth -``` - - -Finally, run the `push` command to deploy your new AWS backend. - - -```bash -amplify push -``` - - -Last thing you should do is copy and paste the following CSS into your `App.css` file: - - -```css -/* App.css */ -#root { - text-align: center; - margin: 1.2rem; -} - -nav { - display: flex; - justify-content: center; - gap: 2rem; - margin-bottom: 2rem; -} - -.auth-wrapper { - display: flex; - justify-content: center; - margin-top: 2rem; -} -``` - - -Feel free to modify it, this will help with the look and feel of your example application. - -You should now be ready to dive into the React code. - -## Setting up the Authenticator - -One of the most important parts of your application is adding and configuring the Authenticator. - -Let's begin by opening up the `index.js` file and adding the following configuration: - - -```js -// index.js -... -import { Amplify } from 'aws-amplify'; -import awsExports from "./aws-exports"; -import "./index.css"; - -Amplify.configure(awsExports); -... -``` - - -This imports the newly created `aws-exports` file into your app and configures it with Amplify. - -Next, create a new `components` folder in the root of your application. In here create a new `Login` component. - -This component will display the `Authenticator` and allow you to create new users and log in. If you like to add additional configuration you can look at the [configuration documentation](../connected-components/authenticator). - -In addition, after a user logs in, it will redirected them to the last place they navigated to. This is a very helpful pattern when working with protected routes. If you'd like more information on this pattern please see the [React Router Auth documentation](https://v5.reactrouter.com/web/example/auth-workflow). - - - -```jsx -// components/Login.js -import { useEffect } from "react"; - -import { Authenticator, useAuthenticator, View } from '@aws-amplify/ui-react'; -import '@aws-amplify/ui-react/styles.css'; - -import { useNavigate, useLocation } from 'react-router'; - -export function Login() { - const { route } = useAuthenticator((context) => [context.route]); - const location = useLocation(); - const navigate = useNavigate(); - let from = location.state?.from?.pathname || '/'; - useEffect(() => { - if (route === 'authenticated') { - navigate(from, { replace: true }); - } - }, [route, navigate, from]); - return ( - - - - ); -} -``` - - -Let's take a look at this line in more detail: - - -```js -const { route } = useAuthenticator((context) => [context.route]); -``` - - -The [useAuthenticator](../connected-components/authenticator/advanced#useauthenticator-hook) hook is used to access, modify, and update the Authenticator's auth state. In this example we destructure `useAuthenticator` and receive the `route`. The `route` can be used to tell if a route is `authenticated` or not. The `route` can also be set to `signIn`,`signOut`, and even `idle` or `setup` depending on where the user is during the authentication flow. - -> You may have noticed that we passed into the `useAuthenticator` a context callback function: `(context) => [context.route]` This is very important as it will help prevent unneccessary re-renders of the application. Excluding it may also cause errors! - -Let's take a look at the `useEffect` below: - - -```js -useEffect(() => { - if (route === 'authenticated') { - navigate(from, { replace: true }); - } -}, [route, navigate, from]); -``` - - -When the `route` changes to `authenticated` the `useEffect` will trigger and the user will be navigated to the previous location. - -Alternatively, instead of using `route` this can also be accomplished using `Auth.currentAuthenticatedUser()`. This promise from the `aws-amplify` [library](https://docs.amplify.aws/lib/auth/manageusers/q/platform/js/) will return the `user` information back. If the user isn't logged in the promise will reject. - -## Adding in a RequireAuth component - -Let's take a look at `RequireAuth` next. This component will be used to gate whether a route can be accessed or not. Routes that are **NOT** authenticated will be redirected back to `/login`. State will also be preserved. - -If the customer is logged in, the `route` will be set to `authenticated`, and the user can continue on. - -Create a new file called `RequireAuth.js` and add the code below: - - -```jsx -// RequireAuth.js -import { useLocation, Navigate } from 'react-router-dom'; -import { useAuthenticator } from '@aws-amplify/ui-react'; - -export function RequireAuth({ children }) { - const location = useLocation(); - const { route } = useAuthenticator((context) => [context.route]); - if (route !== 'authenticated') { - return ; - } - return children; -} -``` - - -> If you're logged in and refresh the browser, the `route` may temporarily be set to `idle` or `setup` while it loads. That will cause a redirection back to the `/login` page, which in turn will redirect back to the protected route. The user will not notice anything, and the protected route will be displayed. However, if you like to have more control of this process you can use `Auth.currentAuthenticatedUser()` instead. - -We'll need to use this component later. - -### Add the other components - -Before we can setup the router, let's setup the rest of the components. - -First, let's create the `Protected`, `ProtectSecond`, and `Home` components in the `components` folder. - -The `Home` component will display a simple message for users on the root index route. - - - -```jsx -// components/Home.js -import { Heading } from '@aws-amplify/ui-react'; -export function Home() { - return ( - - Please use the buttons at the top to test out protected routes! - - ); -} -``` - - - -Next up are the two protected routes. They will show a message on the page if the user is `authenticated`. If not it will -show `Loading`. - - - -```jsx -// components/Protected.js -import { useAuthenticator, Heading } from '@aws-amplify/ui-react'; -export function Protected() { - const { route } = useAuthenticator((context) => [context.route]); - - const message = - route === 'authenticated' ? 'FIRST PROTECTED ROUTE!' : 'Loading...'; - return {message}; -} -``` - - - -Same with the second protected component. - - - -```jsx -// components/ProtectSecond.js -import { useAuthenticator, Heading } from '@aws-amplify/ui-react'; -export function ProtectedSecond() { - const { route } = useAuthenticator((context) => [context.route]); - - const message = - route === 'authenticated' ? 'SECOND PROTECTED ROUTE!' : 'Loading...'; - return {message}; -} -``` - - - -Lastly, we'll create a `Layout` that will surround the whole application and give us a nice menu bar at the top. - - - -```jsx -// components/Layout.js -import React from 'react'; -import { Outlet, useNavigate } from 'react-router-dom'; -import { useAuthenticator, Button, Heading, View } from '@aws-amplify/ui-react'; - -export function Layout() { - const { route, signOut } = useAuthenticator((context) => [ - context.route, - context.signOut, - ]); - const navigate = useNavigate(); - - function logOut() { - signOut(); - navigate('/login'); - } - return ( - <> - - Example Auth Routes App - - {route === 'authenticated' ? 'You are logged in!' : 'Please Login!'} - - - - - ); -} -``` - - - -You'll notice that we are using the `route` to check if the user is `authenticated` again. This is helpful because we can use it to show a different message for users who are logged in versus those who are not. - -When a user logs out, we'll navigate them back to the `/login` page. - -## Adding the router and protecting routes - -At this point we are ready to add in the router and start protecting routes. - -Inside the `App.js` file delete all the code. Update the file as seen below: - - - -```jsx -//App.js -import { Authenticator } from '@aws-amplify/ui-react'; - -import { Protected } from './components/Protected'; -import { RequireAuth } from './RequireAuth'; -import { Login } from './components/Login'; -import { ProtectedSecond } from './components/ProtectSecond'; -import { Home } from './components/Home'; -import { Layout } from './components/Layout'; - -import { BrowserRouter, Routes, Route } from 'react-router-dom'; - -import './App.css'; - -function MyRoutes() { - return ( - - - }> - } /> - - - - } - /> - - - - } - /> - } /> - - - - ); -} - -function App() { - return ( - - - - ); -} - -export default App; -``` - - - -Let's break this down, since we have a multiple route application, we must surround our main app with the `Authentication.Provider`. - - -```jsx -function App() { - return ( - - - - ); -} -```` - - - -This will assure us that we can use the `useAuthenticator` hook anywhere in your application without issues. - -Another important factor is protecting routes. Since we have created the `RequireAuth` component we can now use it to surround any route component that we want protected, as seen below: - - - ```jsx - - - - } - /> - ``` - - -That's all we have to do. Now this route will be protected, and if anyone tries to navigate to it, without being logged in, they'll be redirected to the `/login` page. - -## Try it out! - -Feel free to run the application and try it out! - - -```bash -npm start -``` - - - -Try clicking on a protected route and getting redirected to the `/login` page. After you log in, you'll be redirected to the previous protected route! - -## Conclusion - -Congratulations! You've now setup your very own protected route React application using the AWS Amplify UI libraries! - -If you find any problems with this tutorial, please open an issue on [Github](https://github.com/aws-amplify/amplify-ui/issues/new/choose). diff --git a/docs/src/pages/[platform]/guides/auth-protected/index.page.mdx b/docs/src/pages/[platform]/guides/auth-protected/index.page.mdx deleted file mode 100644 index 3ffa133f01d..00000000000 --- a/docs/src/pages/[platform]/guides/auth-protected/index.page.mdx +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: How to create an application with protected routes using the Authenticator component -description: How to protect routes with Amplify Authenticator. -supportedFrameworks: react ---- - -import { Fragment } from '@/components/Fragment'; - -import { getCustomStaticPath } from '@/utils/getCustomStaticPath'; - - -export async function getStaticPaths() { - return getCustomStaticPath(frontmatter.supportedFrameworks); -} - -{/* `getStaticProps` is required to prevent "Error: getStaticPaths was added without a getStaticProps. Without getStaticProps, getStaticPaths does nothing" */} - -export async function getStaticProps() { - return { props: {} } -} - - - {({ platform }) => import(`./auth-protected.${platform}.mdx`)} - diff --git a/guides/react/protected-routes/.gitignore b/guides/react/protected-routes/.gitignore deleted file mode 100644 index 4f12cfd56c8..00000000000 --- a/guides/react/protected-routes/.gitignore +++ /dev/null @@ -1,26 +0,0 @@ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. - -# dependencies -/node_modules -/.pnp -.pnp.js -aws-exports.js -yarn.lock -package-lock.json - -# testing -/coverage - -# production -/build - -# misc -.DS_Store -.env.local -.env.development.local -.env.test.local -.env.production.local - -npm-debug.log* -yarn-debug.log* -yarn-error.log* diff --git a/guides/react/protected-routes/README.md b/guides/react/protected-routes/README.md deleted file mode 100644 index d2e10bd1fd9..00000000000 --- a/guides/react/protected-routes/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Protected Routes Sample App - -This sample app is featured in the [Protected Routes Guide](https://ui.docs.amplify.aws/react/guides/auth-protected). Feel free to follow along there. diff --git a/guides/react/protected-routes/config-overrides.js b/guides/react/protected-routes/config-overrides.js deleted file mode 100644 index ab4b704de2f..00000000000 --- a/guides/react/protected-routes/config-overrides.js +++ /dev/null @@ -1,3 +0,0 @@ -const { removeModuleScopePlugin } = require('customize-cra'); - -module.exports = removeModuleScopePlugin(); diff --git a/guides/react/protected-routes/package.json b/guides/react/protected-routes/package.json deleted file mode 100644 index ccc707176fc..00000000000 --- a/guides/react/protected-routes/package.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "name": "@aws-amplify/ui-route-demo", - "version": "0.1.0", - "private": true, - "dependencies": { - "@aws-amplify/ui-react": "latest", - "@testing-library/jest-dom": "^5.16.4", - "@testing-library/react": "^13.0.1", - "@testing-library/user-event": "^13.5.0", - "aws-amplify": "^6.0.2", - "react": "latest", - "react-dom": "latest", - "react-router-dom": "^6.3.0", - "react-scripts": "5.0.0", - "web-vitals": "^2.1.4" - }, - "scripts": { - "dev": "react-app-rewired start", - "start": "serve build -s -p 3000", - "build": "react-app-rewired build", - "test": "react-app-rewired test", - "eject": "react-app-rewired eject" - }, - "eslintConfig": { - "extends": [ - "react-app", - "react-app/jest" - ] - }, - "browserslist": { - "production": [ - ">0.2%", - "not dead", - "not op_mini all" - ], - "development": [ - "last 1 chrome version", - "last 1 firefox version", - "last 1 safari version" - ] - }, - "devDependencies": { - "customize-cra": "^1.0.0", - "react-app-rewired": "^2.2.1", - "serve": "^13.0.2" - } -} diff --git a/guides/react/protected-routes/public/favicon.ico b/guides/react/protected-routes/public/favicon.ico deleted file mode 100644 index a11777cc471a4344702741ab1c8a588998b1311a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3870 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 baj7?x%VD!5Cxk2YbYLNVeiXvvpMCWYo=by@ diff --git a/guides/react/protected-routes/public/index.html b/guides/react/protected-routes/public/index.html deleted file mode 100644 index aa069f27cbd..00000000000 --- a/guides/react/protected-routes/public/index.html +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - - - - - - - React App - - - -
- - - diff --git a/guides/react/protected-routes/public/logo192.png b/guides/react/protected-routes/public/logo192.png deleted file mode 100644 index fc44b0a3796c0e0a64c3d858ca038bd4570465d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5347 zcmZWtbyO6NvR-oO24RV%BvuJ&=?+<7=`LvyB&A_#M7mSDYw1v6DJkiYl9XjT!%$dLEBTQ8R9|wd3008in6lFF3GV-6mLi?MoP_y~}QUnaDCHI#t z7w^m$@6DI)|C8_jrT?q=f8D?0AM?L)Z}xAo^e^W>t$*Y0KlT5=@bBjT9kxb%-KNdk zeOS1tKO#ChhG7%{ApNBzE2ZVNcxbrin#E1TiAw#BlUhXllzhN$qWez5l;h+t^q#Eav8PhR2|T}y5kkflaK`ba-eoE+Z2q@o6P$)=&` z+(8}+-McnNO>e#$Rr{32ngsZIAX>GH??tqgwUuUz6kjns|LjsB37zUEWd|(&O!)DY zQLrq%Y>)Y8G`yYbYCx&aVHi@-vZ3|ebG!f$sTQqMgi0hWRJ^Wc+Ibv!udh_r%2|U) zPi|E^PK?UE!>_4`f`1k4hqqj_$+d!EB_#IYt;f9)fBOumGNyglU(ofY`yHq4Y?B%- zp&G!MRY<~ajTgIHErMe(Z8JG*;D-PJhd@RX@QatggM7+G(Lz8eZ;73)72Hfx5KDOE zkT(m}i2;@X2AT5fW?qVp?@WgN$aT+f_6eo?IsLh;jscNRp|8H}Z9p_UBO^SJXpZew zEK8fz|0Th%(Wr|KZBGTM4yxkA5CFdAj8=QSrT$fKW#tweUFqr0TZ9D~a5lF{)%-tTGMK^2tz(y2v$i%V8XAxIywrZCp=)83p(zIk6@S5AWl|Oa2hF`~~^W zI;KeOSkw1O#TiQ8;U7OPXjZM|KrnN}9arP)m0v$c|L)lF`j_rpG(zW1Qjv$=^|p*f z>)Na{D&>n`jOWMwB^TM}slgTEcjxTlUby89j1)|6ydRfWERn3|7Zd2&e7?!K&5G$x z`5U3uFtn4~SZq|LjFVrz$3iln-+ucY4q$BC{CSm7Xe5c1J<=%Oagztj{ifpaZk_bQ z9Sb-LaQMKp-qJA*bP6DzgE3`}*i1o3GKmo2pn@dj0;He}F=BgINo};6gQF8!n0ULZ zL>kC0nPSFzlcB7p41doao2F7%6IUTi_+!L`MM4o*#Y#0v~WiO8uSeAUNp=vA2KaR&=jNR2iVwG>7t%sG2x_~yXzY)7K& zk3p+O0AFZ1eu^T3s};B%6TpJ6h-Y%B^*zT&SN7C=N;g|#dGIVMSOru3iv^SvO>h4M=t-N1GSLLDqVTcgurco6)3&XpU!FP6Hlrmj}f$ zp95;b)>M~`kxuZF3r~a!rMf4|&1=uMG$;h^g=Kl;H&Np-(pFT9FF@++MMEx3RBsK?AU0fPk-#mdR)Wdkj)`>ZMl#^<80kM87VvsI3r_c@_vX=fdQ`_9-d(xiI z4K;1y1TiPj_RPh*SpDI7U~^QQ?%0&!$Sh#?x_@;ag)P}ZkAik{_WPB4rHyW#%>|Gs zdbhyt=qQPA7`?h2_8T;-E6HI#im9K>au*(j4;kzwMSLgo6u*}-K`$_Gzgu&XE)udQ zmQ72^eZd|vzI)~!20JV-v-T|<4@7ruqrj|o4=JJPlybwMg;M$Ud7>h6g()CT@wXm` zbq=A(t;RJ^{Xxi*Ff~!|3!-l_PS{AyNAU~t{h;(N(PXMEf^R(B+ZVX3 z8y0;0A8hJYp@g+c*`>eTA|3Tgv9U8#BDTO9@a@gVMDxr(fVaEqL1tl?md{v^j8aUv zm&%PX4^|rX|?E4^CkplWWNv*OKM>DxPa z!RJ)U^0-WJMi)Ksc!^ixOtw^egoAZZ2Cg;X7(5xZG7yL_;UJ#yp*ZD-;I^Z9qkP`} zwCTs0*%rIVF1sgLervtnUo&brwz?6?PXRuOCS*JI-WL6GKy7-~yi0giTEMmDs_-UX zo=+nFrW_EfTg>oY72_4Z0*uG>MnXP=c0VpT&*|rvv1iStW;*^={rP1y?Hv+6R6bxFMkxpWkJ>m7Ba{>zc_q zEefC3jsXdyS5??Mz7IET$Kft|EMNJIv7Ny8ZOcKnzf`K5Cd)&`-fTY#W&jnV0l2vt z?Gqhic}l}mCv1yUEy$%DP}4AN;36$=7aNI^*AzV(eYGeJ(Px-j<^gSDp5dBAv2#?; zcMXv#aj>%;MiG^q^$0MSg-(uTl!xm49dH!{X0){Ew7ThWV~Gtj7h%ZD zVN-R-^7Cf0VH!8O)uUHPL2mO2tmE*cecwQv_5CzWeh)ykX8r5Hi`ehYo)d{Jnh&3p z9ndXT$OW51#H5cFKa76c<%nNkP~FU93b5h-|Cb}ScHs@4Q#|}byWg;KDMJ#|l zE=MKD*F@HDBcX@~QJH%56eh~jfPO-uKm}~t7VkHxHT;)4sd+?Wc4* z>CyR*{w@4(gnYRdFq=^(#-ytb^5ESD?x<0Skhb%Pt?npNW1m+Nv`tr9+qN<3H1f<% zZvNEqyK5FgPsQ`QIu9P0x_}wJR~^CotL|n zk?dn;tLRw9jJTur4uWoX6iMm914f0AJfB@C74a;_qRrAP4E7l890P&{v<}>_&GLrW z)klculcg`?zJO~4;BBAa=POU%aN|pmZJn2{hA!d!*lwO%YSIzv8bTJ}=nhC^n}g(ld^rn#kq9Z3)z`k9lvV>y#!F4e{5c$tnr9M{V)0m(Z< z#88vX6-AW7T2UUwW`g<;8I$Jb!R%z@rCcGT)-2k7&x9kZZT66}Ztid~6t0jKb&9mm zpa}LCb`bz`{MzpZR#E*QuBiZXI#<`5qxx=&LMr-UUf~@dRk}YI2hbMsAMWOmDzYtm zjof16D=mc`^B$+_bCG$$@R0t;e?~UkF?7<(vkb70*EQB1rfUWXh$j)R2)+dNAH5%R zEBs^?N;UMdy}V};59Gu#0$q53$}|+q7CIGg_w_WlvE}AdqoS<7DY1LWS9?TrfmcvT zaypmplwn=P4;a8-%l^e?f`OpGb}%(_mFsL&GywhyN(-VROj`4~V~9bGv%UhcA|YW% zs{;nh@aDX11y^HOFXB$a7#Sr3cEtNd4eLm@Y#fc&j)TGvbbMwze zXtekX_wJqxe4NhuW$r}cNy|L{V=t#$%SuWEW)YZTH|!iT79k#?632OFse{+BT_gau zJwQcbH{b}dzKO?^dV&3nTILYlGw{27UJ72ZN){BILd_HV_s$WfI2DC<9LIHFmtyw? zQ;?MuK7g%Ym+4e^W#5}WDLpko%jPOC=aN)3!=8)s#Rnercak&b3ESRX3z{xfKBF8L z5%CGkFmGO@x?_mPGlpEej!3!AMddChabyf~nJNZxx!D&{@xEb!TDyvqSj%Y5@A{}9 zRzoBn0?x}=krh{ok3Nn%e)#~uh;6jpezhA)ySb^b#E>73e*frBFu6IZ^D7Ii&rsiU z%jzygxT-n*joJpY4o&8UXr2s%j^Q{?e-voloX`4DQyEK+DmrZh8A$)iWL#NO9+Y@!sO2f@rI!@jN@>HOA< z?q2l{^%mY*PNx2FoX+A7X3N}(RV$B`g&N=e0uvAvEN1W^{*W?zT1i#fxuw10%~))J zjx#gxoVlXREWZf4hRkgdHx5V_S*;p-y%JtGgQ4}lnA~MBz-AFdxUxU1RIT$`sal|X zPB6sEVRjGbXIP0U+?rT|y5+ev&OMX*5C$n2SBPZr`jqzrmpVrNciR0e*Wm?fK6DY& zl(XQZ60yWXV-|Ps!A{EF;=_z(YAF=T(-MkJXUoX zI{UMQDAV2}Ya?EisdEW;@pE6dt;j0fg5oT2dxCi{wqWJ<)|SR6fxX~5CzblPGr8cb zUBVJ2CQd~3L?7yfTpLNbt)He1D>*KXI^GK%<`bq^cUq$Q@uJifG>p3LU(!H=C)aEL zenk7pVg}0{dKU}&l)Y2Y2eFMdS(JS0}oZUuVaf2+K*YFNGHB`^YGcIpnBlMhO7d4@vV zv(@N}(k#REdul8~fP+^F@ky*wt@~&|(&&meNO>rKDEnB{ykAZ}k>e@lad7to>Ao$B zz<1(L=#J*u4_LB=8w+*{KFK^u00NAmeNN7pr+Pf+N*Zl^dO{LM-hMHyP6N!~`24jd zXYP|Ze;dRXKdF2iJG$U{k=S86l@pytLx}$JFFs8e)*Vi?aVBtGJ3JZUj!~c{(rw5>vuRF$`^p!P8w1B=O!skwkO5yd4_XuG^QVF z`-r5K7(IPSiKQ2|U9+`@Js!g6sfJwAHVd|s?|mnC*q zp|B|z)(8+mxXyxQ{8Pg3F4|tdpgZZSoU4P&9I8)nHo1@)9_9u&NcT^FI)6|hsAZFk zZ+arl&@*>RXBf-OZxhZerOr&dN5LW9@gV=oGFbK*J+m#R-|e6(Loz(;g@T^*oO)0R zN`N=X46b{7yk5FZGr#5&n1!-@j@g02g|X>MOpF3#IjZ_4wg{dX+G9eqS+Es9@6nC7 zD9$NuVJI}6ZlwtUm5cCAiYv0(Yi{%eH+}t)!E^>^KxB5^L~a`4%1~5q6h>d;paC9c zTj0wTCKrhWf+F#5>EgX`sl%POl?oyCq0(w0xoL?L%)|Q7d|Hl92rUYAU#lc**I&^6p=4lNQPa0 znQ|A~i0ip@`B=FW-Q;zh?-wF;Wl5!+q3GXDu-x&}$gUO)NoO7^$BeEIrd~1Dh{Tr` z8s<(Bn@gZ(mkIGnmYh_ehXnq78QL$pNDi)|QcT*|GtS%nz1uKE+E{7jdEBp%h0}%r zD2|KmYGiPa4;md-t_m5YDz#c*oV_FqXd85d@eub?9N61QuYcb3CnVWpM(D-^|CmkL z(F}L&N7qhL2PCq)fRh}XO@U`Yn<?TNGR4L(mF7#4u29{i~@k;pLsgl({YW5`Mo+p=zZn3L*4{JU;++dG9 X@eDJUQo;Ye2mwlRs?y0|+_a0zY+Zo%Dkae}+MySoIppb75o?vUW_?)>@g{U2`ERQIXV zeY$JrWnMZ$QC<=ii4X|@0H8`si75jB(ElJb00HAB%>SlLR{!zO|C9P3zxw_U8?1d8uRZ=({Ga4shyN}3 zAK}WA(ds|``G4jA)9}Bt2Hy0+f3rV1E6b|@?hpGA=PI&r8)ah|)I2s(P5Ic*Ndhn^ z*T&j@gbCTv7+8rpYbR^Ty}1AY)YH;p!m948r#%7x^Z@_-w{pDl|1S4`EM3n_PaXvK z1JF)E3qy$qTj5Xs{jU9k=y%SQ0>8E$;x?p9ayU0bZZeo{5Z@&FKX>}s!0+^>C^D#z z>xsCPvxD3Z=dP}TTOSJhNTPyVt14VCQ9MQFN`rn!c&_p?&4<5_PGm4a;WS&1(!qKE z_H$;dDdiPQ!F_gsN`2>`X}$I=B;={R8%L~`>RyKcS$72ai$!2>d(YkciA^J0@X%G4 z4cu!%Ps~2JuJ8ex`&;Fa0NQOq_nDZ&X;^A=oc1&f#3P1(!5il>6?uK4QpEG8z0Rhu zvBJ+A9RV?z%v?!$=(vcH?*;vRs*+PPbOQ3cdPr5=tOcLqmfx@#hOqX0iN)wTTO21jH<>jpmwRIAGw7`a|sl?9y9zRBh>(_%| zF?h|P7}~RKj?HR+q|4U`CjRmV-$mLW>MScKnNXiv{vD3&2@*u)-6P@h0A`eeZ7}71 zK(w%@R<4lLt`O7fs1E)$5iGb~fPfJ?WxhY7c3Q>T-w#wT&zW522pH-B%r5v#5y^CF zcC30Se|`D2mY$hAlIULL%-PNXgbbpRHgn<&X3N9W!@BUk@9g*P5mz-YnZBb*-$zMM z7Qq}ic0mR8n{^L|=+diODdV}Q!gwr?y+2m=3HWwMq4z)DqYVg0J~^}-%7rMR@S1;9 z7GFj6K}i32X;3*$SmzB&HW{PJ55kT+EI#SsZf}bD7nW^Haf}_gXciYKX{QBxIPSx2Ma? zHQqgzZq!_{&zg{yxqv3xq8YV+`S}F6A>Gtl39_m;K4dA{pP$BW0oIXJ>jEQ!2V3A2 zdpoTxG&V=(?^q?ZTj2ZUpDUdMb)T?E$}CI>r@}PFPWD9@*%V6;4Ag>D#h>!s)=$0R zRXvdkZ%|c}ubej`jl?cS$onl9Tw52rBKT)kgyw~Xy%z62Lr%V6Y=f?2)J|bZJ5(Wx zmji`O;_B+*X@qe-#~`HFP<{8$w@z4@&`q^Q-Zk8JG3>WalhnW1cvnoVw>*R@c&|o8 zZ%w!{Z+MHeZ*OE4v*otkZqz11*s!#s^Gq>+o`8Z5 z^i-qzJLJh9!W-;SmFkR8HEZJWiXk$40i6)7 zZpr=k2lp}SasbM*Nbn3j$sn0;rUI;%EDbi7T1ZI4qL6PNNM2Y%6{LMIKW+FY_yF3) zSKQ2QSujzNMSL2r&bYs`|i2Dnn z=>}c0>a}>|uT!IiMOA~pVT~R@bGlm}Edf}Kq0?*Af6#mW9f9!}RjW7om0c9Qlp;yK z)=XQs(|6GCadQbWIhYF=rf{Y)sj%^Id-ARO0=O^Ad;Ph+ z0?$eE1xhH?{T$QI>0JP75`r)U_$#%K1^BQ8z#uciKf(C701&RyLQWBUp*Q7eyn76} z6JHpC9}R$J#(R0cDCkXoFSp;j6{x{b&0yE@P7{;pCEpKjS(+1RQy38`=&Yxo%F=3y zCPeefABp34U-s?WmU#JJw23dcC{sPPFc2#J$ZgEN%zod}J~8dLm*fx9f6SpO zn^Ww3bt9-r0XaT2a@Wpw;C23XM}7_14#%QpubrIw5aZtP+CqIFmsG4`Cm6rfxl9n5 z7=r2C-+lM2AB9X0T_`?EW&Byv&K?HS4QLoylJ|OAF z`8atBNTzJ&AQ!>sOo$?^0xj~D(;kS$`9zbEGd>f6r`NC3X`tX)sWgWUUOQ7w=$TO&*j;=u%25ay-%>3@81tGe^_z*C7pb9y*Ed^H3t$BIKH2o+olp#$q;)_ zfpjCb_^VFg5fU~K)nf*d*r@BCC>UZ!0&b?AGk_jTPXaSnCuW110wjHPPe^9R^;jo3 zwvzTl)C`Zl5}O2}3lec=hZ*$JnkW#7enKKc)(pM${_$9Hc=Sr_A9Biwe*Y=T?~1CK z6eZ9uPICjy-sMGbZl$yQmpB&`ouS8v{58__t0$JP%i3R&%QR3ianbZqDs<2#5FdN@n5bCn^ZtH992~5k(eA|8|@G9u`wdn7bnpg|@{m z^d6Y`*$Zf2Xr&|g%sai#5}Syvv(>Jnx&EM7-|Jr7!M~zdAyjt*xl;OLhvW-a%H1m0 z*x5*nb=R5u><7lyVpNAR?q@1U59 zO+)QWwL8t zyip?u_nI+K$uh{y)~}qj?(w0&=SE^8`_WMM zTybjG=999h38Yes7}-4*LJ7H)UE8{mE(6;8voE+TYY%33A>S6`G_95^5QHNTo_;Ao ztIQIZ_}49%{8|=O;isBZ?=7kfdF8_@azfoTd+hEJKWE!)$)N%HIe2cplaK`ry#=pV z0q{9w-`i0h@!R8K3GC{ivt{70IWG`EP|(1g7i_Q<>aEAT{5(yD z=!O?kq61VegV+st@XCw475j6vS)_z@efuqQgHQR1T4;|-#OLZNQJPV4k$AX1Uk8Lm z{N*b*ia=I+MB}kWpupJ~>!C@xEN#Wa7V+7{m4j8c?)ChV=D?o~sjT?0C_AQ7B-vxqX30s0I_`2$in86#`mAsT-w?j{&AL@B3$;P z31G4(lV|b}uSDCIrjk+M1R!X7s4Aabn<)zpgT}#gE|mIvV38^ODy@<&yflpCwS#fRf9ZX3lPV_?8@C5)A;T zqmouFLFk;qIs4rA=hh=GL~sCFsXHsqO6_y~*AFt939UYVBSx1s(=Kb&5;j7cSowdE;7()CC2|-i9Zz+_BIw8#ll~-tyH?F3{%`QCsYa*b#s*9iCc`1P1oC26?`g<9))EJ3%xz+O!B3 zZ7$j~To)C@PquR>a1+Dh>-a%IvH_Y7^ys|4o?E%3`I&ADXfC8++hAdZfzIT#%C+Jz z1lU~K_vAm0m8Qk}K$F>|>RPK%<1SI0(G+8q~H zAsjezyP+u!Se4q3GW)`h`NPSRlMoBjCzNPesWJwVTY!o@G8=(6I%4XHGaSiS3MEBK zhgGFv6Jc>L$4jVE!I?TQuwvz_%CyO!bLh94nqK11C2W$*aa2ueGopG8DnBICVUORP zgytv#)49fVXDaR$SukloYC3u7#5H)}1K21=?DKj^U)8G;MS)&Op)g^zR2($<>C*zW z;X7`hLxiIO#J`ANdyAOJle4V%ppa*(+0i3w;8i*BA_;u8gOO6)MY`ueq7stBMJTB; z-a0R>hT*}>z|Gg}@^zDL1MrH+2hsR8 zHc}*9IvuQC^Ju)^#Y{fOr(96rQNPNhxc;mH@W*m206>Lo<*SaaH?~8zg&f&%YiOEG zGiz?*CP>Bci}!WiS=zj#K5I}>DtpregpP_tfZtPa(N<%vo^#WCQ5BTv0vr%Z{)0q+ z)RbfHktUm|lg&U3YM%lMUM(fu}i#kjX9h>GYctkx9Mt_8{@s%!K_EI zScgwy6%_fR?CGJQtmgNAj^h9B#zmaMDWgH55pGuY1Gv7D z;8Psm(vEPiwn#MgJYu4Ty9D|h!?Rj0ddE|&L3S{IP%H4^N!m`60ZwZw^;eg4sk6K{ ziA^`Sbl_4~f&Oo%n;8Ye(tiAdlZKI!Z=|j$5hS|D$bDJ}p{gh$KN&JZYLUjv4h{NY zBJ>X9z!xfDGY z+oh_Z&_e#Q(-}>ssZfm=j$D&4W4FNy&-kAO1~#3Im;F)Nwe{(*75(p=P^VI?X0GFakfh+X-px4a%Uw@fSbmp9hM1_~R>?Z8+ ziy|e9>8V*`OP}4x5JjdWp}7eX;lVxp5qS}0YZek;SNmm7tEeSF*-dI)6U-A%m6YvCgM(}_=k#a6o^%-K4{`B1+}O4x zztDT%hVb;v#?j`lTvlFQ3aV#zkX=7;YFLS$uIzb0E3lozs5`Xy zi~vF+%{z9uLjKvKPhP%x5f~7-Gj+%5N`%^=yk*Qn{`> z;xj&ROY6g`iy2a@{O)V(jk&8#hHACVDXey5a+KDod_Z&}kHM}xt7}Md@pil{2x7E~ zL$k^d2@Ec2XskjrN+IILw;#7((abu;OJii&v3?60x>d_Ma(onIPtcVnX@ELF0aL?T zSmWiL3(dOFkt!x=1O!_0n(cAzZW+3nHJ{2S>tgSK?~cFha^y(l@-Mr2W$%MN{#af8J;V*>hdq!gx=d0h$T7l}>91Wh07)9CTX zh2_ZdQCyFOQ)l(}gft0UZG`Sh2`x-w`5vC2UD}lZs*5 zG76$akzn}Xi))L3oGJ75#pcN=cX3!=57$Ha=hQ2^lwdyU#a}4JJOz6ddR%zae%#4& za)bFj)z=YQela(F#Y|Q#dp}PJghITwXouVaMq$BM?K%cXn9^Y@g43$=O)F&ZlOUom zJiad#dea;-eywBA@e&D6Pdso1?2^(pXiN91?jvcaUyYoKUmvl5G9e$W!okWe*@a<^ z8cQQ6cNSf+UPDx%?_G4aIiybZHHagF{;IcD(dPO!#=u zWfqLcPc^+7Uu#l(Bpxft{*4lv#*u7X9AOzDO z1D9?^jIo}?%iz(_dwLa{ex#T}76ZfN_Z-hwpus9y+4xaUu9cX}&P{XrZVWE{1^0yw zO;YhLEW!pJcbCt3L8~a7>jsaN{V3>tz6_7`&pi%GxZ=V3?3K^U+*ryLSb)8^IblJ0 zSRLNDvIxt)S}g30?s_3NX>F?NKIGrG_zB9@Z>uSW3k2es_H2kU;Rnn%j5qP)!XHKE zPB2mHP~tLCg4K_vH$xv`HbRsJwbZMUV(t=ez;Ec(vyHH)FbfLg`c61I$W_uBB>i^r z&{_P;369-&>23R%qNIULe=1~T$(DA`ev*EWZ6j(B$(te}x1WvmIll21zvygkS%vwG zzkR6Z#RKA2!z!C%M!O>!=Gr0(J0FP=-MN=5t-Ir)of50y10W}j`GtRCsXBakrKtG& zazmITDJMA0C51&BnLY)SY9r)NVTMs);1<=oosS9g31l{4ztjD3#+2H7u_|66b|_*O z;Qk6nalpqdHOjx|K&vUS_6ITgGll;TdaN*ta=M_YtyC)I9Tmr~VaPrH2qb6sd~=AcIxV+%z{E&0@y=DPArw zdV7z(G1hBx7hd{>(cr43^WF%4Y@PXZ?wPpj{OQ#tvc$pABJbvPGvdR`cAtHn)cSEV zrpu}1tJwQ3y!mSmH*uz*x0o|CS<^w%&KJzsj~DU0cLQUxk5B!hWE>aBkjJle8z~;s z-!A=($+}Jq_BTK5^B!`R>!MulZN)F=iXXeUd0w5lUsE5VP*H*oCy(;?S$p*TVvTxwAeWFB$jHyb0593)$zqalVlDX=GcCN1gU0 zlgU)I$LcXZ8Oyc2TZYTPu@-;7<4YYB-``Qa;IDcvydIA$%kHhJKV^m*-zxcvU4viy&Kr5GVM{IT>WRywKQ9;>SEiQD*NqplK-KK4YR`p0@JW)n_{TU3bt0 zim%;(m1=#v2}zTps=?fU5w^(*y)xT%1vtQH&}50ZF!9YxW=&7*W($2kgKyz1mUgfs zfV<*XVVIFnohW=|j+@Kfo!#liQR^x>2yQdrG;2o8WZR+XzU_nG=Ed2rK?ntA;K5B{ z>M8+*A4!Jm^Bg}aW?R?6;@QG@uQ8&oJ{hFixcfEnJ4QH?A4>P=q29oDGW;L;= z9-a0;g%c`C+Ai!UmK$NC*4#;Jp<1=TioL=t^YM)<<%u#hnnfSS`nq63QKGO1L8RzX z@MFDqs1z ztYmxDl@LU)5acvHk)~Z`RW7=aJ_nGD!mOSYD>5Odjn@TK#LY{jf?+piB5AM-CAoT_ z?S-*q7}wyLJzK>N%eMPuFgN)Q_otKP;aqy=D5f!7<=n(lNkYRXVpkB{TAYLYg{|(jtRqYmg$xH zjmq?B(RE4 zQx^~Pt}gxC2~l=K$$-sYy_r$CO(d=+b3H1MB*y_5g6WLaWTXn+TKQ|hNY^>Mp6k*$ zwkovomhu776vQATqT4blf~g;TY(MWCrf^^yfWJvSAB$p5l;jm@o#=!lqw+Lqfq>X= z$6~kxfm7`3q4zUEB;u4qa#BdJxO!;xGm)wwuisj{0y2x{R(IGMrsIzDY9LW>m!Y`= z04sx3IjnYvL<4JqxQ8f7qYd0s2Ig%`ytYPEMKI)s(LD}D@EY>x`VFtqvnADNBdeao zC96X+MxnwKmjpg{U&gP3HE}1=s!lv&D{6(g_lzyF3A`7Jn*&d_kL<;dAFx!UZ>hB8 z5A*%LsAn;VLp>3${0>M?PSQ)9s3}|h2e?TG4_F{}{Cs>#3Q*t$(CUc}M)I}8cPF6% z=+h(Kh^8)}gj(0}#e7O^FQ6`~fd1#8#!}LMuo3A0bN`o}PYsm!Y}sdOz$+Tegc=qT z8x`PH$7lvnhJp{kHWb22l;@7B7|4yL4UOOVM0MP_>P%S1Lnid)+k9{+3D+JFa#Pyf zhVc#&df87APl4W9X)F3pGS>@etfl=_E5tBcVoOfrD4hmVeTY-cj((pkn%n@EgN{0f zwb_^Rk0I#iZuHK!l*lN`ceJn(sI{$Fq6nN& zE<-=0_2WN}m+*ivmIOxB@#~Q-cZ>l136w{#TIJe478`KE7@=a{>SzPHsKLzYAyBQO zAtuuF$-JSDy_S@6GW0MOE~R)b;+0f%_NMrW(+V#c_d&U8Z9+ec4=HmOHw?gdjF(Lu zzra83M_BoO-1b3;9`%&DHfuUY)6YDV21P$C!Rc?mv&{lx#f8oc6?0?x zK08{WP65?#>(vPfA-c=MCY|%*1_<3D4NX zeVTi-JGl2uP_2@0F{G({pxQOXt_d{g_CV6b?jNpfUG9;8yle-^4KHRvZs-_2siata zt+d_T@U$&t*xaD22(fH(W1r$Mo?3dc%Tncm=C6{V9y{v&VT#^1L04vDrLM9qBoZ4@ z6DBN#m57hX7$C(=#$Y5$bJmwA$T8jKD8+6A!-IJwA{WOfs%s}yxUw^?MRZjF$n_KN z6`_bGXcmE#5e4Ym)aQJ)xg3Pg0@k`iGuHe?f(5LtuzSq=nS^5z>vqU0EuZ&75V%Z{ zYyhRLN^)$c6Ds{f7*FBpE;n5iglx5PkHfWrj3`x^j^t z7ntuV`g!9Xg#^3!x)l*}IW=(Tz3>Y5l4uGaB&lz{GDjm2D5S$CExLT`I1#n^lBH7Y zDgpMag@`iETKAI=p<5E#LTkwzVR@=yY|uBVI1HG|8h+d;G-qfuj}-ZR6fN>EfCCW z9~wRQoAPEa#aO?3h?x{YvV*d+NtPkf&4V0k4|L=uj!U{L+oLa(z#&iuhJr3-PjO3R z5s?=nn_5^*^Rawr>>Nr@K(jwkB#JK-=+HqwfdO<+P5byeim)wvqGlP-P|~Nse8=XF zz`?RYB|D6SwS}C+YQv+;}k6$-%D(@+t14BL@vM z2q%q?f6D-A5s$_WY3{^G0F131bbh|g!}#BKw=HQ7mx;Dzg4Z*bTLQSfo{ed{4}NZW zfrRm^Ca$rlE{Ue~uYv>R9{3smwATcdM_6+yWIO z*ZRH~uXE@#p$XTbCt5j7j2=86e{9>HIB6xDzV+vAo&B?KUiMP|ttOElepnl%|DPqL b{|{}U^kRn2wo}j7|0ATu<;8xA7zX}7|B6mN diff --git a/guides/react/protected-routes/public/manifest.json b/guides/react/protected-routes/public/manifest.json deleted file mode 100644 index 080d6c77ac2..00000000000 --- a/guides/react/protected-routes/public/manifest.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "short_name": "React App", - "name": "Create React App Sample", - "icons": [ - { - "src": "favicon.ico", - "sizes": "64x64 32x32 24x24 16x16", - "type": "image/x-icon" - }, - { - "src": "logo192.png", - "type": "image/png", - "sizes": "192x192" - }, - { - "src": "logo512.png", - "type": "image/png", - "sizes": "512x512" - } - ], - "start_url": ".", - "display": "standalone", - "theme_color": "#000000", - "background_color": "#ffffff" -} diff --git a/guides/react/protected-routes/public/robots.txt b/guides/react/protected-routes/public/robots.txt deleted file mode 100644 index e9e57dc4d41..00000000000 --- a/guides/react/protected-routes/public/robots.txt +++ /dev/null @@ -1,3 +0,0 @@ -# https://www.robotstxt.org/robotstxt.html -User-agent: * -Disallow: diff --git a/guides/react/protected-routes/src/App.css b/guides/react/protected-routes/src/App.css deleted file mode 100644 index 23cca42a6fc..00000000000 --- a/guides/react/protected-routes/src/App.css +++ /dev/null @@ -1,17 +0,0 @@ -#root { - text-align: center; - margin: 1.2rem; -} - -nav { - display: flex; - justify-content: center; - gap: 2rem; - margin-bottom: 2rem; -} - -.auth-wrapper { - display: flex; - justify-content: center; - margin-top: 2rem; -} diff --git a/guides/react/protected-routes/src/App.js b/guides/react/protected-routes/src/App.js deleted file mode 100644 index 1fc2a3754c4..00000000000 --- a/guides/react/protected-routes/src/App.js +++ /dev/null @@ -1,51 +0,0 @@ -import { Authenticator } from '@aws-amplify/ui-react'; - -import { Protected } from './components/Protected'; -import { RequireAuth } from './RequireAuth'; -import { Login } from './components/Login'; -import { ProtectedSecond } from './components/ProtectSecond'; -import { Home } from './components/Home'; -import { Layout } from './components/Layout'; - -import { BrowserRouter, Routes, Route } from 'react-router-dom'; - -import './App.css'; - -function MyRoutes() { - return ( - - - }> - } /> - - - - } - /> - - - - } - /> - } /> - - - - ); -} - -function App() { - return ( - - - - ); -} - -export default App; diff --git a/guides/react/protected-routes/src/App.test.js b/guides/react/protected-routes/src/App.test.js deleted file mode 100644 index 1f03afeece5..00000000000 --- a/guides/react/protected-routes/src/App.test.js +++ /dev/null @@ -1,8 +0,0 @@ -import { render, screen } from '@testing-library/react'; -import App from './App'; - -test('renders learn react link', () => { - render(); - const linkElement = screen.getByText(/learn react/i); - expect(linkElement).toBeInTheDocument(); -}); diff --git a/guides/react/protected-routes/src/RequireAuth.js b/guides/react/protected-routes/src/RequireAuth.js deleted file mode 100644 index 204a70ad09d..00000000000 --- a/guides/react/protected-routes/src/RequireAuth.js +++ /dev/null @@ -1,11 +0,0 @@ -import { useLocation, Navigate } from 'react-router-dom'; -import { useAuthenticator } from '@aws-amplify/ui-react'; - -export function RequireAuth({ children }) { - const location = useLocation(); - const { route } = useAuthenticator((context) => [context.route]); - if (route !== 'authenticated') { - return ; - } - return children; -} diff --git a/guides/react/protected-routes/src/components/Home.js b/guides/react/protected-routes/src/components/Home.js deleted file mode 100644 index a1f7c621a4d..00000000000 --- a/guides/react/protected-routes/src/components/Home.js +++ /dev/null @@ -1,8 +0,0 @@ -import { Heading } from '@aws-amplify/ui-react'; -export function Home() { - return ( - - Please use the buttons at the top to test out protected routes! - - ); -} diff --git a/guides/react/protected-routes/src/components/Layout.js b/guides/react/protected-routes/src/components/Layout.js deleted file mode 100644 index d3c9c2b1b07..00000000000 --- a/guides/react/protected-routes/src/components/Layout.js +++ /dev/null @@ -1,40 +0,0 @@ -import React from 'react'; -import { Outlet, useNavigate } from 'react-router-dom'; -import { useAuthenticator, Button, Heading, View } from '@aws-amplify/ui-react'; - -export function Layout() { - const { route, signOut } = useAuthenticator((context) => [ - context.route, - context.signOut, - ]); - const navigate = useNavigate(); - - function logOut() { - signOut(); - navigate('/login'); - } - return ( - <> - - Example Auth Routes App - - {route === 'authenticated' ? 'You are logged in!' : 'Please Login!'} - - - - - ); -} diff --git a/guides/react/protected-routes/src/components/Login.js b/guides/react/protected-routes/src/components/Login.js deleted file mode 100644 index dab564ba057..00000000000 --- a/guides/react/protected-routes/src/components/Login.js +++ /dev/null @@ -1,21 +0,0 @@ -import { Authenticator } from '@aws-amplify/ui-react'; -import '@aws-amplify/ui-react/styles.css'; -import { useAuthenticator, View } from '@aws-amplify/ui-react'; -import { useEffect } from 'react'; -import { useNavigate, useLocation } from 'react-router'; -export function Login() { - const { route } = useAuthenticator((context) => [context.route]); - const location = useLocation(); - const navigate = useNavigate(); - let from = location.state?.from?.pathname || '/'; - useEffect(() => { - if (route === 'authenticated') { - navigate(from, { replace: true }); - } - }, [route, navigate, from]); - return ( - - - - ); -} diff --git a/guides/react/protected-routes/src/components/ProtectSecond.js b/guides/react/protected-routes/src/components/ProtectSecond.js deleted file mode 100644 index 6ffe8d12caa..00000000000 --- a/guides/react/protected-routes/src/components/ProtectSecond.js +++ /dev/null @@ -1,8 +0,0 @@ -import { useAuthenticator, Heading } from '@aws-amplify/ui-react'; -export function ProtectedSecond() { - const { route } = useAuthenticator((context) => [context.route]); - - const message = - route === 'authenticated' ? 'SECOND PROTECTED ROUTE!' : 'Loading...'; - return {message}; -} diff --git a/guides/react/protected-routes/src/components/Protected.js b/guides/react/protected-routes/src/components/Protected.js deleted file mode 100644 index 27e25718cef..00000000000 --- a/guides/react/protected-routes/src/components/Protected.js +++ /dev/null @@ -1,8 +0,0 @@ -import { useAuthenticator, Heading } from '@aws-amplify/ui-react'; -export function Protected() { - const { route } = useAuthenticator((context) => [context.route]); - - const message = - route === 'authenticated' ? 'FIRST PROTECTED ROUTE!' : 'Loading...'; - return {message}; -} diff --git a/guides/react/protected-routes/src/index.css b/guides/react/protected-routes/src/index.css deleted file mode 100644 index ec2585e8c0b..00000000000 --- a/guides/react/protected-routes/src/index.css +++ /dev/null @@ -1,13 +0,0 @@ -body { - margin: 0; - font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', - 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', - sans-serif; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -code { - font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', - monospace; -} diff --git a/guides/react/protected-routes/src/index.js b/guides/react/protected-routes/src/index.js deleted file mode 100644 index 18354429b66..00000000000 --- a/guides/react/protected-routes/src/index.js +++ /dev/null @@ -1,19 +0,0 @@ -import { createRoot } from 'react-dom/client'; -import App from './App'; -import { Amplify } from 'aws-amplify'; - -/** - * Following along with the - * tutorial https://ui.docs.amplify.aws/react/guides/auth-protected? - * Update this import to match the path to your aws-exports.js file: - * import aws_exports from "./aws-exports"; - */ -import aws_exports from '../../../../environments/auth/auth-with-email/src/aws-exports'; - -import './index.css'; - -const container = document.getElementById('root'); -const root = createRoot(container); - -Amplify.configure(aws_exports); -root.render(); diff --git a/guides/react/protected-routes/src/logo.svg b/guides/react/protected-routes/src/logo.svg deleted file mode 100644 index f1567e67a5d..00000000000 --- a/guides/react/protected-routes/src/logo.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/guides/react/protected-routes/src/reportWebVitals.js b/guides/react/protected-routes/src/reportWebVitals.js deleted file mode 100644 index 532f29b0bb6..00000000000 --- a/guides/react/protected-routes/src/reportWebVitals.js +++ /dev/null @@ -1,13 +0,0 @@ -const reportWebVitals = (onPerfEntry) => { - if (onPerfEntry && onPerfEntry instanceof Function) { - import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => { - getCLS(onPerfEntry); - getFID(onPerfEntry); - getFCP(onPerfEntry); - getLCP(onPerfEntry); - getTTFB(onPerfEntry); - }); - } -}; - -export default reportWebVitals; diff --git a/guides/react/protected-routes/src/setupTests.js b/guides/react/protected-routes/src/setupTests.js deleted file mode 100644 index 8f2609b7b3e..00000000000 --- a/guides/react/protected-routes/src/setupTests.js +++ /dev/null @@ -1,5 +0,0 @@ -// jest-dom adds custom jest matchers for asserting on DOM nodes. -// allows you to do things like: -// expect(element).toHaveTextContent(/react/i) -// learn more: https://github.com/testing-library/jest-dom -import '@testing-library/jest-dom'; diff --git a/guides/react/protected-routes/waitOnConfig.json b/guides/react/protected-routes/waitOnConfig.json deleted file mode 100644 index db85270c8c6..00000000000 --- a/guides/react/protected-routes/waitOnConfig.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "headers": { - "accept": "text/html" - } -} diff --git a/packages/e2e/package.json b/packages/e2e/package.json index b89244227f9..96c2549825d 100644 --- a/packages/e2e/package.json +++ b/packages/e2e/package.json @@ -13,7 +13,6 @@ "test:liveness": "cypress run --spec 'features/ui/components/liveness/*.feature' --browser chrome", "test:storage": "cypress run --spec 'features/ui/components/storage/**/*.feature' --browser chrome", "test:theme": "cypress run --spec 'features/ui/theme/*.feature' --browser chrome", - "test:guides": "cypress run --spec 'features/ui/guides/*.feature' --browser chrome", "precucumber": "node detox/mockServer.js &", "cucumber": "./node_modules/.bin/cucumber-js --config detox/cucumber.json --tags @react-native", "postcucumber": "kill $(lsof -t -i :9091)",