From 0e386ed473bcceed92e667b074b9f7f42d969f41 Mon Sep 17 00:00:00 2001 From: Solovay Date: Mon, 13 Jul 2020 17:27:55 -0400 Subject: [PATCH 01/30] chore: begin adding flutter docs --- client/src/utils/filter-data.ts | 12 +++++++++++- .../flutter/getting-started/some-flutter-content.md | 1 + docs/lib/analytics/getting-started.md | 2 +- docs/lib/lib.md | 2 +- 4 files changed, 14 insertions(+), 3 deletions(-) create mode 100644 docs/lib/analytics/fragments/flutter/getting-started/some-flutter-content.md diff --git a/client/src/utils/filter-data.ts b/client/src/utils/filter-data.ts index 1212d6160ce..5584b0b10e6 100644 --- a/client/src/utils/filter-data.ts +++ b/client/src/utils/filter-data.ts @@ -17,7 +17,12 @@ type FilterMetadataByOption = Record< * platform filter constants */ -export const PLATFORM_FILTER_OPTIONS = ["js", "android", "ios"] as const; +export const PLATFORM_FILTER_OPTIONS = [ + "js", + "android", + "ios", + "flutter", +] as const; export const platformFilterMetadataByOption: FilterMetadataByOption = { js: { @@ -32,6 +37,10 @@ export const platformFilterMetadataByOption: FilterMetadataByOption - + \ No newline at end of file diff --git a/docs/lib/lib.md b/docs/lib/lib.md index 81ccce4feea..a3093a4961e 100644 --- a/docs/lib/lib.md +++ b/docs/lib/lib.md @@ -9,4 +9,4 @@ The Amplify open-source client libraries provide use-case centric, opinionated, - + \ No newline at end of file From 586e8a95b70d1029324c44f36d6f7c3db1c23402 Mon Sep 17 00:00:00 2001 From: Kyle Date: Wed, 15 Jul 2020 17:31:06 -0700 Subject: [PATCH 02/30] Prepare basic Flutter Docs Framework --- .../docs-ui/landing-hero-cta/landing-hero-cta.tsx | 10 ++++++++++ client/src/utils/filter-data.ts | 2 +- docs/assets/integrations/flutter.svg | 11 +++++++++++ docs/fragments/lib/flutter.md | 14 ++++++++++++++ docs/lib/auth/getting-started.md | 1 + docs/lib/lib.md | 1 + 6 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 docs/assets/integrations/flutter.svg create mode 100644 docs/fragments/lib/flutter.md diff --git a/client/src/docs-ui/landing-hero-cta/landing-hero-cta.tsx b/client/src/docs-ui/landing-hero-cta/landing-hero-cta.tsx index 6eca44faccb..784a1a64738 100644 --- a/client/src/docs-ui/landing-hero-cta/landing-hero-cta.tsx +++ b/client/src/docs-ui/landing-hero-cta/landing-hero-cta.tsx @@ -44,6 +44,16 @@ export class DocsLandingHeroCTA { alt="Android Icon" /> + + Flutter Icon + ); diff --git a/client/src/utils/filter-data.ts b/client/src/utils/filter-data.ts index 5584b0b10e6..178d0f699a7 100644 --- a/client/src/utils/filter-data.ts +++ b/client/src/utils/filter-data.ts @@ -39,7 +39,7 @@ export const platformFilterMetadataByOption: FilterMetadataByOption + + + + + + + + \ No newline at end of file diff --git a/docs/fragments/lib/flutter.md b/docs/fragments/lib/flutter.md new file mode 100644 index 00000000000..5dffc24aa23 --- /dev/null +++ b/docs/fragments/lib/flutter.md @@ -0,0 +1,14 @@ + + +Welcome to Flutter docs - currently under construction + + + +## Amplify Flutter + +This guide shows how to build an app using our Amplify Libraries for Flutter and the Amplify CLI toolchain. + + + + Get Started 🚀 + \ No newline at end of file diff --git a/docs/lib/auth/getting-started.md b/docs/lib/auth/getting-started.md index a913943cade..9644df1f8b0 100644 --- a/docs/lib/auth/getting-started.md +++ b/docs/lib/auth/getting-started.md @@ -6,3 +6,4 @@ description: The Amplify Framework uses Amazon Cognito as the main authenticatio + \ No newline at end of file diff --git a/docs/lib/lib.md b/docs/lib/lib.md index a3093a4961e..c06e664df96 100644 --- a/docs/lib/lib.md +++ b/docs/lib/lib.md @@ -9,4 +9,5 @@ The Amplify open-source client libraries provide use-case centric, opinionated, + \ No newline at end of file From b0af6a79dbb1a8dce4621ca36c78bec2de423bdc Mon Sep 17 00:00:00 2001 From: Kyle Date: Mon, 20 Jul 2020 10:26:53 -0700 Subject: [PATCH 03/30] Basic Flutter Analytics Module Docs Incomplete, some parts are unclear and need to wait further clarification --- docs/lib/analytics/autotrack.md | 3 +- docs/lib/analytics/escapehatch.md | 1 + .../fragments/flutter/escapehatch.md | 1 + .../flutter/getting-started/10_preReq.md | 3 + .../flutter/getting-started/20_installLib.md | 15 +++ .../getting-started/30_initAnalytics.md | 39 ++++++++ .../flutter/getting-started/40_record.md | 15 +++ .../getting-started/some-flutter-content.md | 1 - .../fragments/flutter/identifyuser.md | 30 ++++++ .../lib/analytics/fragments/flutter/record.md | 96 +++++++++++++++++++ .../native_common/getting-started/common.md | 4 + docs/lib/analytics/getting-started.md | 6 +- docs/lib/analytics/identifyuser.md | 3 +- docs/lib/analytics/record.md | 5 +- 14 files changed, 216 insertions(+), 6 deletions(-) create mode 100644 docs/lib/analytics/fragments/flutter/escapehatch.md create mode 100644 docs/lib/analytics/fragments/flutter/getting-started/10_preReq.md create mode 100644 docs/lib/analytics/fragments/flutter/getting-started/20_installLib.md create mode 100644 docs/lib/analytics/fragments/flutter/getting-started/30_initAnalytics.md create mode 100644 docs/lib/analytics/fragments/flutter/getting-started/40_record.md delete mode 100644 docs/lib/analytics/fragments/flutter/getting-started/some-flutter-content.md create mode 100644 docs/lib/analytics/fragments/flutter/identifyuser.md create mode 100644 docs/lib/analytics/fragments/flutter/record.md diff --git a/docs/lib/analytics/autotrack.md b/docs/lib/analytics/autotrack.md index 6f7651b2e22..9947f8b27ec 100644 --- a/docs/lib/analytics/autotrack.md +++ b/docs/lib/analytics/autotrack.md @@ -5,4 +5,5 @@ description: The Amplify analytics plugin records when an application opens and - \ No newline at end of file + + \ No newline at end of file diff --git a/docs/lib/analytics/escapehatch.md b/docs/lib/analytics/escapehatch.md index 07d5eced615..8a1b22f3da7 100644 --- a/docs/lib/analytics/escapehatch.md +++ b/docs/lib/analytics/escapehatch.md @@ -5,3 +5,4 @@ description: For advanced use cases where Amplify does not provide the functiona + diff --git a/docs/lib/analytics/fragments/flutter/escapehatch.md b/docs/lib/analytics/fragments/flutter/escapehatch.md new file mode 100644 index 00000000000..72d4e3aa76f --- /dev/null +++ b/docs/lib/analytics/fragments/flutter/escapehatch.md @@ -0,0 +1 @@ +Unimplemented - no known escape hatch in Flutter Analytics \ No newline at end of file diff --git a/docs/lib/analytics/fragments/flutter/getting-started/10_preReq.md b/docs/lib/analytics/fragments/flutter/getting-started/10_preReq.md new file mode 100644 index 00000000000..597e5bcc38b --- /dev/null +++ b/docs/lib/analytics/fragments/flutter/getting-started/10_preReq.md @@ -0,0 +1,3 @@ +* [Install and configure Amplify CLI](https://docs.amplify.aws/cli/start/install) +* A Flutter application with SDK 1.19.0 or higher and Dart SDK 2.9.0 (UNVERIFIED) + * For a full example of creating Flutter project, please follow the [project setup walkthrough](~/lib/project-setup/create-application.md) \ No newline at end of file diff --git a/docs/lib/analytics/fragments/flutter/getting-started/20_installLib.md b/docs/lib/analytics/fragments/flutter/getting-started/20_installLib.md new file mode 100644 index 00000000000..e6ab45926c4 --- /dev/null +++ b/docs/lib/analytics/fragments/flutter/getting-started/20_installLib.md @@ -0,0 +1,15 @@ +In your Flutter project directory, open **pubspec.yaml**. You will already have configured Amplify by following the steps in the Project setup walkthrough. + +Add Analytics by adding these libraries into your dependencies block: + +```yaml +dependencies: + + # Should already be added during Project Setup walkthrough + amplify_core: + path: ../../amplify_core + + # Add these lines in `dependencies` + amplify_analytics_pinpoint: + path: ../ +``` \ No newline at end of file diff --git a/docs/lib/analytics/fragments/flutter/getting-started/30_initAnalytics.md b/docs/lib/analytics/fragments/flutter/getting-started/30_initAnalytics.md new file mode 100644 index 00000000000..177cf231b9c --- /dev/null +++ b/docs/lib/analytics/fragments/flutter/getting-started/30_initAnalytics.md @@ -0,0 +1,39 @@ +To initialize the Amplify Auth and Analytics categories you call `Amplify.addPlugin()` method for each category. To complete initialization call `Amplify.configure()`. + +Add the following code to the `initState` method + + + + +```java +Amplify.addPlugin(new AWSCognitoAuthPlugin()); +Amplify.addPlugin(new AmplifyAnalyticsPinpointPlugin()); +``` + +(VERIFY, To be determined) Make sure that the amplifyconfiguration.dart file generated in the project setup is included and sent to Amplify.configure: + +```java +import 'amplifyconfiguration.dart'; + +Amplify.configure( amplifyConfig ) +``` + +Your class will look like this: + +```java +import 'amplifyconfiguration.dart'; + +class MyAmplifyApp extends StatefulWidget { + + @override + void initState() { + super.initState(); + + Amplify.addPlugin(new AWSCognitoAuthPlugin()); + Amplify.addPlugin(new AWSPinpointAnalyticsPlugin(this)); + + Amplify.configure( amplifyConfig ); + + } +} +``` \ No newline at end of file diff --git a/docs/lib/analytics/fragments/flutter/getting-started/40_record.md b/docs/lib/analytics/fragments/flutter/getting-started/40_record.md new file mode 100644 index 00000000000..b66a15a29d8 --- /dev/null +++ b/docs/lib/analytics/fragments/flutter/getting-started/40_record.md @@ -0,0 +1,15 @@ +To record an event, create an `AnalyticsEvent` and call `Amplify.Analytics.recordEvent()` to send it: + + + + +```java +AnalyticsEvent event = AnalyticsEvent("test"); + +event.properties.addBoolProperty("boolKey", true); +event.properties.addDoubleProperty("doubleKey", 10.0); +event.properties.addIntProperty("intKey", 10); +event.properties.addStringProperty("stringKey", "stringValue"); + +Amplify.Analytics.recordEvent(event: event); +``` \ No newline at end of file diff --git a/docs/lib/analytics/fragments/flutter/getting-started/some-flutter-content.md b/docs/lib/analytics/fragments/flutter/getting-started/some-flutter-content.md deleted file mode 100644 index 89f23a99696..00000000000 --- a/docs/lib/analytics/fragments/flutter/getting-started/some-flutter-content.md +++ /dev/null @@ -1 +0,0 @@ -# Hello, I'm flutter content \ No newline at end of file diff --git a/docs/lib/analytics/fragments/flutter/identifyuser.md b/docs/lib/analytics/fragments/flutter/identifyuser.md new file mode 100644 index 00000000000..3e5fe023a9a --- /dev/null +++ b/docs/lib/analytics/fragments/flutter/identifyuser.md @@ -0,0 +1,30 @@ +This call sends information that you have specified about the user to Amazon Pinpoint. This could be for an unauthenticated or an authenticated user. + +You can get the current user's ID from the Amplify Auth category as shown below. Be sure you have it added and setup per the Auth category documentation. + +If you have asked for location access and received permission, you can also provide that in `AnalyticsUserProfileLocation` + + +```java + +// TODO INCLUDE AUTH GETCURRENTUSER + +AnalyticsUserProfileLocation location = new AnalyticsUserProfileLocation(); + location.latitude = 47.606209; + location.longitude = -122.332069; + location.postalCode = "98122"; + location.city = "Seattle"; + location.region = "WA"; + location.country = "USA"; + +AnalyticsProperties properties = new AnalyticsProperties(); + properties.addStringProperty("phoneNumber", "+11234567890"); + properties.addIntProperty("age", 25); + +AnalyticsUserProfile userProfile = new AnalyticsUserProfile(); + userProfile.name = username; + userProfile.email = "name@example.com"; + userProfile.location = location; + +Amplify.Analytics.identifyUser(userId: userId, userProfile: profile); +``` \ No newline at end of file diff --git a/docs/lib/analytics/fragments/flutter/record.md b/docs/lib/analytics/fragments/flutter/record.md new file mode 100644 index 00000000000..aa750422471 --- /dev/null +++ b/docs/lib/analytics/fragments/flutter/record.md @@ -0,0 +1,96 @@ +## Record event + +The Amplify analytics plugin also makes it easy to record custom events within the app. The plugin handles retry logic in the event the device looses network connectivity and automatically batches requests to reduce network bandwidth. + + + + +```java +AnalyticsEvent event = AnalyticsEvent("PasswordReset"); +event.properties.addStringProperty("Channel", "SMS"); +event.properties.addBoolProperty("Successful", true); +event.properties.addIntProperty("ProcessDuration", 792); +event.properties.addDoubleProperty("doubleKey", 120.3); + +Amplify.Analytics.recordEvent(event: event); +``` + +## Flush events + +Events have default configuration to flush out to the network every 30 seconds. If you would like to change this, update `amplifyconfiguration.json` with the value in milliseconds you would like for `autoFlushEventsInterval`. This configuration will flush events every 10 seconds: + +```json +{ + "UserAgent": "aws-amplify-cli/2.0", + "Version": "1.0", + "analytics": { + "plugins": { + "awsPinpointAnalyticsPlugin": { + "pinpointAnalytics": { + "appId": "AppID", + "region": "Region" + }, + "pinpointTargeting": { + "region": "Region" + }, + "autoFlushEventsInterval": 10000 + } + } + } +} +``` + +To manually flush events, call: + + + + +```java +Amplify.Analytics.flushEvents(); +``` + + +## Global Properties + +You can register global properties which will be sent along with all invocations of `Amplify.Analytics.recordEvent`. + + + +```java +AnalyticsProperties properties = new AnalyticsProperties(); +properties.addStringProperty("AppStyle", "DarkMode"); +Amplify.Analytics.registerGlobalProperties(globalProperties: properties); +``` + +To unregister a global property, call `Amplify.Analytics.unregisterGlobalProperties()`: + + + + +```java +Amplify.Analytics.unregisterGlobalProperties(propertyName: ["AppStyle", "OtherProperty"]); +``` + +## Disable Analytics + +To disable analytics, call: + + + + +```java +Amplify.Analytics.disable(); +``` + + +## Enable Analytics + +To re-enable, call: + + + + +```java +Amplify.Analytics.enable(); +``` + diff --git a/docs/lib/analytics/fragments/native_common/getting-started/common.md b/docs/lib/analytics/fragments/native_common/getting-started/common.md index 51930c13d05..818caa42738 100644 --- a/docs/lib/analytics/fragments/native_common/getting-started/common.md +++ b/docs/lib/analytics/fragments/native_common/getting-started/common.md @@ -8,6 +8,7 @@ To setup and configure your application with Amplify Analytics and record an ana + ## Set up Analytics backend @@ -40,16 +41,19 @@ Upon completion, `amplifyconfiguration.json` should be updated to reference prov + ## Initialize Amplify Analytics + ## Record events + ## View Analytics console diff --git a/docs/lib/analytics/getting-started.md b/docs/lib/analytics/getting-started.md index 7b3b38c3f51..02496631761 100644 --- a/docs/lib/analytics/getting-started.md +++ b/docs/lib/analytics/getting-started.md @@ -6,4 +6,8 @@ description: The Analytics category enables you to collect analytics data for yo - \ No newline at end of file + + + \ No newline at end of file diff --git a/docs/lib/analytics/identifyuser.md b/docs/lib/analytics/identifyuser.md index 42b385d0693..94b9b490c2a 100644 --- a/docs/lib/analytics/identifyuser.md +++ b/docs/lib/analytics/identifyuser.md @@ -4,4 +4,5 @@ description: Use the Amplify analytics plugin to inform Pinpoint about your user --- - \ No newline at end of file + + \ No newline at end of file diff --git a/docs/lib/analytics/record.md b/docs/lib/analytics/record.md index 4b9e623bdd7..93b4905ea8f 100644 --- a/docs/lib/analytics/record.md +++ b/docs/lib/analytics/record.md @@ -4,5 +4,6 @@ description: Learn how to record analytics events using Amplify. --- - - \ No newline at end of file +y + + \ No newline at end of file From e4bc239adf15d4cf24406cce834afa35d3131758 Mon Sep 17 00:00:00 2001 From: Kyle Date: Fri, 14 Aug 2020 21:40:02 -0700 Subject: [PATCH 04/30] Minor Doc Feedback Changes # Conflicts: # client/src/components.d.ts --- client/src/utils/filter-data.ts | 2 +- docs/assets/integrations/flutter.svg | 8 +++----- .../fragments/flutter/getting-started/30_initAnalytics.md | 6 +++--- docs/lib/analytics/record.md | 2 +- 4 files changed, 8 insertions(+), 10 deletions(-) diff --git a/client/src/utils/filter-data.ts b/client/src/utils/filter-data.ts index 178d0f699a7..3fbda5262df 100644 --- a/client/src/utils/filter-data.ts +++ b/client/src/utils/filter-data.ts @@ -38,7 +38,7 @@ export const platformFilterMetadataByOption: FilterMetadataByOption + - - + - - + \ No newline at end of file diff --git a/docs/lib/analytics/fragments/flutter/getting-started/30_initAnalytics.md b/docs/lib/analytics/fragments/flutter/getting-started/30_initAnalytics.md index 177cf231b9c..d0f31305398 100644 --- a/docs/lib/analytics/fragments/flutter/getting-started/30_initAnalytics.md +++ b/docs/lib/analytics/fragments/flutter/getting-started/30_initAnalytics.md @@ -29,10 +29,10 @@ class MyAmplifyApp extends StatefulWidget { void initState() { super.initState(); - Amplify.addPlugin(new AWSCognitoAuthPlugin()); - Amplify.addPlugin(new AWSPinpointAnalyticsPlugin(this)); + Amplify.addPlugin(new AWSCognitoAuthPlugin()); + Amplify.addPlugin(new AWSPinpointAnalyticsPlugin(this)); - Amplify.configure( amplifyConfig ); + Amplify.configure( amplifyConfig ); } } diff --git a/docs/lib/analytics/record.md b/docs/lib/analytics/record.md index 93b4905ea8f..67453c5ad7b 100644 --- a/docs/lib/analytics/record.md +++ b/docs/lib/analytics/record.md @@ -4,6 +4,6 @@ description: Learn how to record analytics events using Amplify. --- -y + \ No newline at end of file From fc27572bc2580c5b76bbb55259709c186c90b82c Mon Sep 17 00:00:00 2001 From: Noyes Date: Tue, 21 Jul 2020 18:18:48 -0700 Subject: [PATCH 05/30] initial docs for signIn, signUp and confirmSignUp --- .../auth/fragments/flutter/common_prereq.md | 1 + .../flutter/getting_started/10_preReq.md | 2 ++ .../flutter/getting_started/20_installLib.md | 9 ++++++++ .../flutter/getting_started/30_initAuth.md | 14 +++++++++++++ .../fragments/flutter/signin/10_signUp.md | 21 +++++++++++++++++++ .../flutter/signin/20_confirmSignUp.md | 11 ++++++++++ .../fragments/flutter/signin/30_signIn.md | 12 +++++++++++ .../native_common/getting_started/common.md | 3 +++ .../fragments/native_common/signin/common.md | 4 ++++ docs/lib/auth/signin.md | 1 + 10 files changed, 78 insertions(+) create mode 100644 docs/lib/auth/fragments/flutter/common_prereq.md create mode 100644 docs/lib/auth/fragments/flutter/getting_started/10_preReq.md create mode 100644 docs/lib/auth/fragments/flutter/getting_started/20_installLib.md create mode 100644 docs/lib/auth/fragments/flutter/getting_started/30_initAuth.md create mode 100644 docs/lib/auth/fragments/flutter/signin/10_signUp.md create mode 100644 docs/lib/auth/fragments/flutter/signin/20_confirmSignUp.md create mode 100644 docs/lib/auth/fragments/flutter/signin/30_signIn.md diff --git a/docs/lib/auth/fragments/flutter/common_prereq.md b/docs/lib/auth/fragments/flutter/common_prereq.md new file mode 100644 index 00000000000..8e530e95207 --- /dev/null +++ b/docs/lib/auth/fragments/flutter/common_prereq.md @@ -0,0 +1 @@ +* An app setup according to the [getting started walkthrough](~/lib/auth/getting-started.md) \ No newline at end of file diff --git a/docs/lib/auth/fragments/flutter/getting_started/10_preReq.md b/docs/lib/auth/fragments/flutter/getting_started/10_preReq.md new file mode 100644 index 00000000000..cef665b7faa --- /dev/null +++ b/docs/lib/auth/fragments/flutter/getting_started/10_preReq.md @@ -0,0 +1,2 @@ +* A Flutter application targeting Flutteer SDK version 2.7.0 - 3.0.0 with Amplify libraries integrated + * For a full example of please follow the [project setup walkthrough](~/lib/project-setup/create-application.md) diff --git a/docs/lib/auth/fragments/flutter/getting_started/20_installLib.md b/docs/lib/auth/fragments/flutter/getting_started/20_installLib.md new file mode 100644 index 00000000000..c902fd15e51 --- /dev/null +++ b/docs/lib/auth/fragments/flutter/getting_started/20_installLib.md @@ -0,0 +1,9 @@ +Add the following dependency to your **app**'s `pubspec.yaml` along with others you added above in **Prerequisites**: + +```groovy +dependencies: + flutter: + sdk: flutter + amplify_auth_cognito: ^1.0.0 +} +``` diff --git a/docs/lib/auth/fragments/flutter/getting_started/30_initAuth.md b/docs/lib/auth/fragments/flutter/getting_started/30_initAuth.md new file mode 100644 index 00000000000..cf2381498ea --- /dev/null +++ b/docs/lib/auth/fragments/flutter/getting_started/30_initAuth.md @@ -0,0 +1,14 @@ +Add the desired Auth plugin along with any other plugins you added per the instructions in the **Prerequisites** section. Currently, the only officially supported auth plugin is amplify-auth-cognito. + + + + +```dart + // Add this line, to include the Auth plugin. + AmplifyAuthCognito auth = new AmplifyAuthCognito(); + amplify.addPlugin([auth]); +``` + + + + \ No newline at end of file diff --git a/docs/lib/auth/fragments/flutter/signin/10_signUp.md b/docs/lib/auth/fragments/flutter/signin/10_signUp.md new file mode 100644 index 00000000000..44fc50aa6ce --- /dev/null +++ b/docs/lib/auth/fragments/flutter/signin/10_signUp.md @@ -0,0 +1,21 @@ + ```java +Map userAttributes = { + "email": emailController.text, + "phone_number": phoneController.text, + // additional attributes as needed +}; +SignUpResult res = await Amplify.Auth.signUp( + request: SignUpRequest( + username: usernameController.text.trim(), + password: passwordController.text.trim(), + // optional, if your UserPool is configured to use an email/phone number as a username + provider: CognitoSignUpRequestProvider(usernameAttribute: "email"), + options: SignUpOptions( + userAttributes: userAttributes, + ) + ), + success: (res) => print("success callback! " + res.toString()) + error: (res) => print("error callback! " + res.toString()) +); +``` + diff --git a/docs/lib/auth/fragments/flutter/signin/20_confirmSignUp.md b/docs/lib/auth/fragments/flutter/signin/20_confirmSignUp.md new file mode 100644 index 00000000000..b70fdd0d8c2 --- /dev/null +++ b/docs/lib/auth/fragments/flutter/signin/20_confirmSignUp.md @@ -0,0 +1,11 @@ +```java +SignUpResult res = await Amplify.Auth.confirmSignUp( + request: ConfirmSignUpRequest( + userKey: usernameController.text.trim(), + confirmationCode: confirmationCodeController.text.trim(), + ), + success: (res) => print("success callback! " + res.toString()) + error: (res) => print("error callback! " + res.toString()) +); +``` + diff --git a/docs/lib/auth/fragments/flutter/signin/30_signIn.md b/docs/lib/auth/fragments/flutter/signin/30_signIn.md new file mode 100644 index 00000000000..3e0897045ee --- /dev/null +++ b/docs/lib/auth/fragments/flutter/signin/30_signIn.md @@ -0,0 +1,12 @@ +```java +SignInResult res = await Amplify.Auth.signIn( + request: SignInRequest( + username: usernameController.text.trim(), + password: passwordController.text.trim(), + ), + success: (res) => print("success callback! " + res.toString()) + error: (res) => print("error callback! " + res.toString()) +); +``` + + diff --git a/docs/lib/auth/fragments/native_common/getting_started/common.md b/docs/lib/auth/fragments/native_common/getting_started/common.md index cd0443877d4..7f65faa582e 100644 --- a/docs/lib/auth/fragments/native_common/getting_started/common.md +++ b/docs/lib/auth/fragments/native_common/getting_started/common.md @@ -7,6 +7,7 @@ To setup and configure your application with Amplify Auth and go through a simpl + ## Configure Auth Category @@ -38,10 +39,12 @@ Upon completion, `amplifyconfiguration.json` should be updated to reference prov + ## Initialize Amplify Auth + ## Check the current auth session diff --git a/docs/lib/auth/fragments/native_common/signin/common.md b/docs/lib/auth/fragments/native_common/signin/common.md index 55dc814b129..e847c6e827c 100644 --- a/docs/lib/auth/fragments/native_common/signin/common.md +++ b/docs/lib/auth/fragments/native_common/signin/common.md @@ -5,6 +5,7 @@ The Auth category can be used to register a user, confirm attributes like email/ + ## Register a user @@ -12,11 +13,13 @@ The default CLI flow as mentioned in the [getting started guide](~/lib/auth/gett + The next step in the sign up flow is to confirm the user. A confirmation code will be sent to the email id provided during sign up. Enter the confirmation code received via email in the `confirmSignUp` call. + You will know the sign up flow is complete if you see the following in your console window: @@ -30,6 +33,7 @@ Implement a UI to get the username and password from the user. After the user en + You will know the sign in flow is complete if you see the following in your console window: diff --git a/docs/lib/auth/signin.md b/docs/lib/auth/signin.md index c7a16e13110..2198dd37fa4 100644 --- a/docs/lib/auth/signin.md +++ b/docs/lib/auth/signin.md @@ -5,3 +5,4 @@ description: Use AWS Cognito Auth plugin to sign in a user into AWS Cognito User + From aee304158eccb338371984e17d775f1d0f3bb920 Mon Sep 17 00:00:00 2001 From: Noyes Date: Wed, 22 Jul 2020 09:55:34 -0700 Subject: [PATCH 06/30] add dart language support --- capi/src/init-node/index.ts | 1 + .../fragments/flutter/getting_started/20_installLib.md | 2 +- .../auth/fragments/flutter/getting_started/30_initAuth.md | 7 ------- docs/lib/auth/fragments/flutter/signin/10_signUp.md | 2 +- docs/lib/auth/fragments/flutter/signin/20_confirmSignUp.md | 2 +- docs/lib/auth/fragments/flutter/signin/30_signIn.md | 2 +- 6 files changed, 5 insertions(+), 11 deletions(-) diff --git a/capi/src/init-node/index.ts b/capi/src/init-node/index.ts index 20ff42daf76..8455a3383e8 100644 --- a/capi/src/init-node/index.ts +++ b/capi/src/init-node/index.ts @@ -36,6 +36,7 @@ const supportedLanguages = [ "jsx", "sql", "groovy", + "dart" ]; loadLanguages(supportedLanguages); diff --git a/docs/lib/auth/fragments/flutter/getting_started/20_installLib.md b/docs/lib/auth/fragments/flutter/getting_started/20_installLib.md index c902fd15e51..44d0333ca30 100644 --- a/docs/lib/auth/fragments/flutter/getting_started/20_installLib.md +++ b/docs/lib/auth/fragments/flutter/getting_started/20_installLib.md @@ -1,6 +1,6 @@ Add the following dependency to your **app**'s `pubspec.yaml` along with others you added above in **Prerequisites**: -```groovy +```yaml dependencies: flutter: sdk: flutter diff --git a/docs/lib/auth/fragments/flutter/getting_started/30_initAuth.md b/docs/lib/auth/fragments/flutter/getting_started/30_initAuth.md index cf2381498ea..69e095df232 100644 --- a/docs/lib/auth/fragments/flutter/getting_started/30_initAuth.md +++ b/docs/lib/auth/fragments/flutter/getting_started/30_initAuth.md @@ -1,14 +1,7 @@ Add the desired Auth plugin along with any other plugins you added per the instructions in the **Prerequisites** section. Currently, the only officially supported auth plugin is amplify-auth-cognito. - - - ```dart // Add this line, to include the Auth plugin. AmplifyAuthCognito auth = new AmplifyAuthCognito(); amplify.addPlugin([auth]); ``` - - - - \ No newline at end of file diff --git a/docs/lib/auth/fragments/flutter/signin/10_signUp.md b/docs/lib/auth/fragments/flutter/signin/10_signUp.md index 44fc50aa6ce..db012e7fd0b 100644 --- a/docs/lib/auth/fragments/flutter/signin/10_signUp.md +++ b/docs/lib/auth/fragments/flutter/signin/10_signUp.md @@ -1,4 +1,4 @@ - ```java + ```dart Map userAttributes = { "email": emailController.text, "phone_number": phoneController.text, diff --git a/docs/lib/auth/fragments/flutter/signin/20_confirmSignUp.md b/docs/lib/auth/fragments/flutter/signin/20_confirmSignUp.md index b70fdd0d8c2..38d2e19c559 100644 --- a/docs/lib/auth/fragments/flutter/signin/20_confirmSignUp.md +++ b/docs/lib/auth/fragments/flutter/signin/20_confirmSignUp.md @@ -1,4 +1,4 @@ -```java +```dart SignUpResult res = await Amplify.Auth.confirmSignUp( request: ConfirmSignUpRequest( userKey: usernameController.text.trim(), diff --git a/docs/lib/auth/fragments/flutter/signin/30_signIn.md b/docs/lib/auth/fragments/flutter/signin/30_signIn.md index 3e0897045ee..a3d6a1b10f6 100644 --- a/docs/lib/auth/fragments/flutter/signin/30_signIn.md +++ b/docs/lib/auth/fragments/flutter/signin/30_signIn.md @@ -1,4 +1,4 @@ -```java +```dart SignInResult res = await Amplify.Auth.signIn( request: SignInRequest( username: usernameController.text.trim(), From e75f1355725f23e160ccf4380f285f330317dd4d Mon Sep 17 00:00:00 2001 From: Noyes Date: Fri, 31 Jul 2020 13:41:22 -0700 Subject: [PATCH 07/30] spelling issues --- cspell.json | 3 +++ docs/lib/auth/fragments/flutter/getting_started/10_preReq.md | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/cspell.json b/cspell.json index f9a85316062..c417971bfe8 100644 --- a/cspell.json +++ b/cspell.json @@ -549,6 +549,7 @@ "getApplicationContext", "getCacheCurSize", "getCredentials", + "GETCURRENTUSER", "getDeliveryMedium", "getIdentityId", "getIdToken", @@ -901,6 +902,7 @@ "proxied", "pseudocode", "publicRead", + "pubspec", "pubsub", "Pubsub", "PubSub", @@ -1058,6 +1060,7 @@ "SSECustomerKeyMD5", "SSEKMS", "ssn", + "Stateful", "status#createdAt", "statusCreatedAt", "Storage.get", diff --git a/docs/lib/auth/fragments/flutter/getting_started/10_preReq.md b/docs/lib/auth/fragments/flutter/getting_started/10_preReq.md index cef665b7faa..308df8b76e6 100644 --- a/docs/lib/auth/fragments/flutter/getting_started/10_preReq.md +++ b/docs/lib/auth/fragments/flutter/getting_started/10_preReq.md @@ -1,2 +1,2 @@ -* A Flutter application targeting Flutteer SDK version 2.7.0 - 3.0.0 with Amplify libraries integrated +* A Flutter application targeting Flutter SDK version 2.7.0 - 3.0.0 with Amplify libraries integrated * For a full example of please follow the [project setup walkthrough](~/lib/project-setup/create-application.md) From 7b6a9034fcbb7527a62d81f0f79105d6ce1da7c8 Mon Sep 17 00:00:00 2001 From: Noyes Date: Tue, 4 Aug 2020 16:49:52 -0700 Subject: [PATCH 08/30] feat(flutter): password management, hubEvents, confirmation, signOut and signIn --- cspell.json | 5 +++++ docs/lib/auth/auth-events.md | 1 + .../flutter/hub_events/10_listen_events.md | 21 +++++++++++++++++++ .../password_management/10_reset_password.md | 7 +++++++ .../20_confirm_reset_password.md | 9 ++++++++ .../password_management/30_change_password.md | 8 +++++++ .../fragments/flutter/signin/10_signUp.md | 14 +++++-------- .../flutter/signin/20_confirmSignUp.md | 8 +++---- .../fragments/flutter/signin/30_signIn.md | 4 +--- .../flutter/signin/40_multi_factor_signup.md | 17 +++++++++++++++ .../signin/50_multi_factor_confirm_signin.md | 8 +++++++ .../native_common/auth_events/common.md | 1 + .../password_management/common.md | 3 +++ .../fragments/native_common/signin/common.md | 2 ++ docs/lib/auth/password_management.md | 1 + 15 files changed, 92 insertions(+), 17 deletions(-) create mode 100644 docs/lib/auth/fragments/flutter/hub_events/10_listen_events.md create mode 100644 docs/lib/auth/fragments/flutter/password_management/10_reset_password.md create mode 100644 docs/lib/auth/fragments/flutter/password_management/20_confirm_reset_password.md create mode 100644 docs/lib/auth/fragments/flutter/password_management/30_change_password.md create mode 100644 docs/lib/auth/fragments/flutter/signin/40_multi_factor_signup.md create mode 100644 docs/lib/auth/fragments/flutter/signin/50_multi_factor_confirm_signin.md diff --git a/cspell.json b/cspell.json index c417971bfe8..1c97ea22d71 100644 --- a/cspell.json +++ b/cspell.json @@ -344,6 +344,7 @@ "cancelHandler", "CannedAccessControlList.PublicRead", "CannedAccessControlList", + "cantguessthis", "capacityInBytes", "Capitan", "captcha", @@ -741,6 +742,8 @@ "mouseover", "mqttv", "msg", + "mysupersecurepassword", + "myusername", "Mult", "multenvtest", "multienv", @@ -767,6 +770,8 @@ "mykey", "mylambda", "mynextapp", + "mynewpassword", + "myoldpassword", "myPrivatePrefix,", "myprivateprefix", "myPublicPrefix,", diff --git a/docs/lib/auth/auth-events.md b/docs/lib/auth/auth-events.md index 2f66c17b8dd..7f084f7bf03 100644 --- a/docs/lib/auth/auth-events.md +++ b/docs/lib/auth/auth-events.md @@ -5,3 +5,4 @@ description: Listen to various auth events + diff --git a/docs/lib/auth/fragments/flutter/hub_events/10_listen_events.md b/docs/lib/auth/fragments/flutter/hub_events/10_listen_events.md new file mode 100644 index 00000000000..1d91b4d1d40 --- /dev/null +++ b/docs/lib/auth/fragments/flutter/hub_events/10_listen_events.md @@ -0,0 +1,21 @@ +```dart +auth.events.startListening((hubEvent) { + switch(hubEvent["eventName"]) { + case "SIGNED_IN": { + print("USER IS SIGNED IN"); + } + break; + case "SIGNED_OUT": { + print("USER IS SIGNED OUT"); + } + break; + case "SESSION_EXPIRED": { + print("USER IS SIGNED IN"); + } + break; + default: { + print("CONFIGURATION EVENT"); + } + } +}); +``` \ No newline at end of file diff --git a/docs/lib/auth/fragments/flutter/password_management/10_reset_password.md b/docs/lib/auth/fragments/flutter/password_management/10_reset_password.md new file mode 100644 index 00000000000..34699bad90a --- /dev/null +++ b/docs/lib/auth/fragments/flutter/password_management/10_reset_password.md @@ -0,0 +1,7 @@ +```dart + ResetPasswordResult res = await Amplify.Auth.resetPassword( + request: ResetPasswordRequest( + userKey: "myusername", + ), + ); +``` \ No newline at end of file diff --git a/docs/lib/auth/fragments/flutter/password_management/20_confirm_reset_password.md b/docs/lib/auth/fragments/flutter/password_management/20_confirm_reset_password.md new file mode 100644 index 00000000000..6ece0af8b66 --- /dev/null +++ b/docs/lib/auth/fragments/flutter/password_management/20_confirm_reset_password.md @@ -0,0 +1,9 @@ +```dart +await Amplify.Auth.confirmPassword( + request: ConfirmPasswordRequest( + userKey: "myusername", + newPassword: "cantguessthis", + confirmationCode: "123456" + ) +); +``` \ No newline at end of file diff --git a/docs/lib/auth/fragments/flutter/password_management/30_change_password.md b/docs/lib/auth/fragments/flutter/password_management/30_change_password.md new file mode 100644 index 00000000000..a4a18f2ed81 --- /dev/null +++ b/docs/lib/auth/fragments/flutter/password_management/30_change_password.md @@ -0,0 +1,8 @@ +```dart +await Amplify.Auth.changePassword( + request: ChangePasswordRequest( + newPassword: "mynewpassword", + oldPassword: "myoldpassword" + ) +); +``` \ No newline at end of file diff --git a/docs/lib/auth/fragments/flutter/signin/10_signUp.md b/docs/lib/auth/fragments/flutter/signin/10_signUp.md index db012e7fd0b..04252491890 100644 --- a/docs/lib/auth/fragments/flutter/signin/10_signUp.md +++ b/docs/lib/auth/fragments/flutter/signin/10_signUp.md @@ -6,16 +6,12 @@ Map userAttributes = { }; SignUpResult res = await Amplify.Auth.signUp( request: SignUpRequest( - username: usernameController.text.trim(), - password: passwordController.text.trim(), - // optional, if your UserPool is configured to use an email/phone number as a username - provider: CognitoSignUpRequestProvider(usernameAttribute: "email"), - options: SignUpOptions( - userAttributes: userAttributes, + username: "myusername", + password: "mysupersecurepassword", + options: CognitoSignUpOptions( + userAttributes: userAttributes ) - ), - success: (res) => print("success callback! " + res.toString()) - error: (res) => print("error callback! " + res.toString()) + ) ); ``` diff --git a/docs/lib/auth/fragments/flutter/signin/20_confirmSignUp.md b/docs/lib/auth/fragments/flutter/signin/20_confirmSignUp.md index 38d2e19c559..11254436218 100644 --- a/docs/lib/auth/fragments/flutter/signin/20_confirmSignUp.md +++ b/docs/lib/auth/fragments/flutter/signin/20_confirmSignUp.md @@ -1,11 +1,9 @@ ```dart SignUpResult res = await Amplify.Auth.confirmSignUp( request: ConfirmSignUpRequest( - userKey: usernameController.text.trim(), - confirmationCode: confirmationCodeController.text.trim(), - ), - success: (res) => print("success callback! " + res.toString()) - error: (res) => print("error callback! " + res.toString()) + userKey: "myusername", + confirmationCode: "123456" + ) ); ``` diff --git a/docs/lib/auth/fragments/flutter/signin/30_signIn.md b/docs/lib/auth/fragments/flutter/signin/30_signIn.md index a3d6a1b10f6..41b53ca5fbf 100644 --- a/docs/lib/auth/fragments/flutter/signin/30_signIn.md +++ b/docs/lib/auth/fragments/flutter/signin/30_signIn.md @@ -3,9 +3,7 @@ SignInResult res = await Amplify.Auth.signIn( request: SignInRequest( username: usernameController.text.trim(), password: passwordController.text.trim(), - ), - success: (res) => print("success callback! " + res.toString()) - error: (res) => print("error callback! " + res.toString()) + ) ); ``` diff --git a/docs/lib/auth/fragments/flutter/signin/40_multi_factor_signup.md b/docs/lib/auth/fragments/flutter/signin/40_multi_factor_signup.md new file mode 100644 index 00000000000..02bb2a318c6 --- /dev/null +++ b/docs/lib/auth/fragments/flutter/signin/40_multi_factor_signup.md @@ -0,0 +1,17 @@ +```dart +Map userAttributes = { + "email": "email@testdomain.com", + "phone_number": "+15551234", +}; +SignUpResult res = await Amplify.Auth.signUp( + request: SignUpRequest( + username: "myusername", + password: "mysupersecurepassword", + options: CognitoSignUpOptions( + userAttributes: userAttributes + ) + ) +); +``` + + diff --git a/docs/lib/auth/fragments/flutter/signin/50_multi_factor_confirm_signin.md b/docs/lib/auth/fragments/flutter/signin/50_multi_factor_confirm_signin.md new file mode 100644 index 00000000000..773f4d8a023 --- /dev/null +++ b/docs/lib/auth/fragments/flutter/signin/50_multi_factor_confirm_signin.md @@ -0,0 +1,8 @@ +```dart +SignInResult res = await Amplify.Auth.confirmSignIn( + request: ConfirmSignInRequest( + userKey: "myusername", + confirmationValue: "123456" + ), +); +``` \ No newline at end of file diff --git a/docs/lib/auth/fragments/native_common/auth_events/common.md b/docs/lib/auth/fragments/native_common/auth_events/common.md index 97d9d1847ef..f09e3e6a768 100644 --- a/docs/lib/auth/fragments/native_common/auth_events/common.md +++ b/docs/lib/auth/fragments/native_common/auth_events/common.md @@ -2,3 +2,4 @@ AWS Cognito Auth Plugin sends important events through Amplify Hub. + diff --git a/docs/lib/auth/fragments/native_common/password_management/common.md b/docs/lib/auth/fragments/native_common/password_management/common.md index 04b0ec0b0ea..05872d9dbb1 100644 --- a/docs/lib/auth/fragments/native_common/password_management/common.md +++ b/docs/lib/auth/fragments/native_common/password_management/common.md @@ -3,6 +3,7 @@ In order to reset your password, use the resetPassword api - this will send a co + To complete the password reset process, invoke the confirmResetPassword api with the code you were sent and the new password you want. @@ -13,9 +14,11 @@ As a result, for testing purposes, you'll at least need an input field where you + ## Change password A signed in user can update their password using the updatePassword api: + diff --git a/docs/lib/auth/fragments/native_common/signin/common.md b/docs/lib/auth/fragments/native_common/signin/common.md index e847c6e827c..b0e430def5c 100644 --- a/docs/lib/auth/fragments/native_common/signin/common.md +++ b/docs/lib/auth/fragments/native_common/signin/common.md @@ -104,6 +104,7 @@ When you sign up, be sure to include both email and phone attributes with the ph + You'll then confirm signup, sign in, and get back a nextStep in the sign in result of type `CONFIRM_SIGN_IN_WITH_SMS_MFA_CODE`. A confirmation code will also be texted to the phone number provided above. Pass the code you received to the confirmSignIn api: @@ -115,3 +116,4 @@ As a result, for testing purposes, you'll at least need an input field where you + diff --git a/docs/lib/auth/password_management.md b/docs/lib/auth/password_management.md index 919d620136a..6b23896a982 100644 --- a/docs/lib/auth/password_management.md +++ b/docs/lib/auth/password_management.md @@ -5,3 +5,4 @@ description: Use AWS Cognito Auth plugin to update or reset user password + From edf3baa0b5218842d1e7074821348ddbbcd51025 Mon Sep 17 00:00:00 2001 From: Noyes Date: Tue, 4 Aug 2020 17:40:30 -0700 Subject: [PATCH 09/30] add try catches --- .../password_management/10_reset_password.md | 4 +++ .../20_confirm_reset_password.md | 18 ++++++----- .../password_management/30_change_password.md | 16 ++++++---- .../fragments/flutter/signin/10_signUp.md | 31 +++++++++++-------- .../flutter/signin/20_confirmSignUp.md | 16 ++++++---- .../fragments/flutter/signin/30_signIn.md | 16 ++++++---- .../flutter/signin/40_multi_factor_signup.md | 28 ++++++++++------- .../signin/50_multi_factor_confirm_signin.md | 16 ++++++---- .../flutter/signout/10_local_signout.md | 8 +++++ .../flutter/signout/20_global_signout.md | 13 ++++++++ .../fragments/native_common/signout/common.md | 2 ++ docs/lib/auth/signOut.md | 1 + 12 files changed, 113 insertions(+), 56 deletions(-) create mode 100644 docs/lib/auth/fragments/flutter/signout/10_local_signout.md create mode 100644 docs/lib/auth/fragments/flutter/signout/20_global_signout.md diff --git a/docs/lib/auth/fragments/flutter/password_management/10_reset_password.md b/docs/lib/auth/fragments/flutter/password_management/10_reset_password.md index 34699bad90a..34668391e6b 100644 --- a/docs/lib/auth/fragments/flutter/password_management/10_reset_password.md +++ b/docs/lib/auth/fragments/flutter/password_management/10_reset_password.md @@ -1,7 +1,11 @@ ```dart +try { ResetPasswordResult res = await Amplify.Auth.resetPassword( request: ResetPasswordRequest( userKey: "myusername", ), ); +} on AuthError catch (e) { + print(e); +} ``` \ No newline at end of file diff --git a/docs/lib/auth/fragments/flutter/password_management/20_confirm_reset_password.md b/docs/lib/auth/fragments/flutter/password_management/20_confirm_reset_password.md index 6ece0af8b66..aa1938400cc 100644 --- a/docs/lib/auth/fragments/flutter/password_management/20_confirm_reset_password.md +++ b/docs/lib/auth/fragments/flutter/password_management/20_confirm_reset_password.md @@ -1,9 +1,13 @@ ```dart -await Amplify.Auth.confirmPassword( - request: ConfirmPasswordRequest( - userKey: "myusername", - newPassword: "cantguessthis", - confirmationCode: "123456" - ) -); +try { + await Amplify.Auth.confirmPassword( + request: ConfirmPasswordRequest( + userKey: "myusername", + newPassword: "cantguessthis", + confirmationCode: "123456" + ) + ); +} on AuthError catch (e) { + print(e); +} ``` \ No newline at end of file diff --git a/docs/lib/auth/fragments/flutter/password_management/30_change_password.md b/docs/lib/auth/fragments/flutter/password_management/30_change_password.md index a4a18f2ed81..d0b5999de05 100644 --- a/docs/lib/auth/fragments/flutter/password_management/30_change_password.md +++ b/docs/lib/auth/fragments/flutter/password_management/30_change_password.md @@ -1,8 +1,12 @@ ```dart -await Amplify.Auth.changePassword( - request: ChangePasswordRequest( - newPassword: "mynewpassword", - oldPassword: "myoldpassword" - ) -); +try { + await Amplify.Auth.changePassword( + request: ChangePasswordRequest( + newPassword: "mynewpassword", + oldPassword: "myoldpassword" + ) + ); +} on AuthError catch (e) { + print(e); +} ``` \ No newline at end of file diff --git a/docs/lib/auth/fragments/flutter/signin/10_signUp.md b/docs/lib/auth/fragments/flutter/signin/10_signUp.md index 04252491890..feee05e05d8 100644 --- a/docs/lib/auth/fragments/flutter/signin/10_signUp.md +++ b/docs/lib/auth/fragments/flutter/signin/10_signUp.md @@ -1,17 +1,22 @@ ```dart -Map userAttributes = { - "email": emailController.text, - "phone_number": phoneController.text, - // additional attributes as needed -}; -SignUpResult res = await Amplify.Auth.signUp( - request: SignUpRequest( - username: "myusername", - password: "mysupersecurepassword", - options: CognitoSignUpOptions( - userAttributes: userAttributes +try { + Map userAttributes = { + "email": emailController.text, + "phone_number": phoneController.text, + // additional attributes as needed + }; + SignUpResult res = await Amplify.Auth.signUp( + request: SignUpRequest( + username: "myusername", + password: "mysupersecurepassword", + options: CognitoSignUpOptions( + userAttributes: userAttributes + ) ) - ) -); + ); +} on AuthError catch (e) { + print(e); +} + ``` diff --git a/docs/lib/auth/fragments/flutter/signin/20_confirmSignUp.md b/docs/lib/auth/fragments/flutter/signin/20_confirmSignUp.md index 11254436218..2c54f14f9c6 100644 --- a/docs/lib/auth/fragments/flutter/signin/20_confirmSignUp.md +++ b/docs/lib/auth/fragments/flutter/signin/20_confirmSignUp.md @@ -1,9 +1,13 @@ ```dart -SignUpResult res = await Amplify.Auth.confirmSignUp( - request: ConfirmSignUpRequest( - userKey: "myusername", - confirmationCode: "123456" - ) -); +try { + SignUpResult res = await Amplify.Auth.confirmSignUp( + request: ConfirmSignUpRequest( + userKey: "myusername", + confirmationCode: "123456" + ) + ); +} on AuthError catch (e) { + print(e); +} ``` diff --git a/docs/lib/auth/fragments/flutter/signin/30_signIn.md b/docs/lib/auth/fragments/flutter/signin/30_signIn.md index 41b53ca5fbf..974267f644a 100644 --- a/docs/lib/auth/fragments/flutter/signin/30_signIn.md +++ b/docs/lib/auth/fragments/flutter/signin/30_signIn.md @@ -1,10 +1,14 @@ ```dart -SignInResult res = await Amplify.Auth.signIn( - request: SignInRequest( - username: usernameController.text.trim(), - password: passwordController.text.trim(), - ) -); +try { + SignInResult res = await Amplify.Auth.signIn( + request: SignInRequest( + username: usernameController.text.trim(), + password: passwordController.text.trim(), + ) + ); +} on AuthError catch (e) { + print(e); +} ``` diff --git a/docs/lib/auth/fragments/flutter/signin/40_multi_factor_signup.md b/docs/lib/auth/fragments/flutter/signin/40_multi_factor_signup.md index 02bb2a318c6..d7536436f09 100644 --- a/docs/lib/auth/fragments/flutter/signin/40_multi_factor_signup.md +++ b/docs/lib/auth/fragments/flutter/signin/40_multi_factor_signup.md @@ -1,17 +1,21 @@ ```dart -Map userAttributes = { - "email": "email@testdomain.com", - "phone_number": "+15551234", -}; -SignUpResult res = await Amplify.Auth.signUp( - request: SignUpRequest( - username: "myusername", - password: "mysupersecurepassword", - options: CognitoSignUpOptions( - userAttributes: userAttributes +try { + Map userAttributes = { + "email": "email@testdomain.com", + "phone_number": "+15551234", + }; + SignUpResult res = await Amplify.Auth.signUp( + request: SignUpRequest( + username: "myusername", + password: "mysupersecurepassword", + options: CognitoSignUpOptions( + userAttributes: userAttributes + ) ) - ) -); + ); +} on AuthError catch (e) { + print(e); +} ``` diff --git a/docs/lib/auth/fragments/flutter/signin/50_multi_factor_confirm_signin.md b/docs/lib/auth/fragments/flutter/signin/50_multi_factor_confirm_signin.md index 773f4d8a023..37413ec0ebd 100644 --- a/docs/lib/auth/fragments/flutter/signin/50_multi_factor_confirm_signin.md +++ b/docs/lib/auth/fragments/flutter/signin/50_multi_factor_confirm_signin.md @@ -1,8 +1,12 @@ ```dart -SignInResult res = await Amplify.Auth.confirmSignIn( - request: ConfirmSignInRequest( - userKey: "myusername", - confirmationValue: "123456" - ), -); +try { + SignInResult res = await Amplify.Auth.confirmSignIn( + request: ConfirmSignInRequest( + userKey: "myusername", + confirmationValue: "123456" + ), + ); +} on AuthError catch (e) { + print(e); +} ``` \ No newline at end of file diff --git a/docs/lib/auth/fragments/flutter/signout/10_local_signout.md b/docs/lib/auth/fragments/flutter/signout/10_local_signout.md new file mode 100644 index 00000000000..2a0428a06b6 --- /dev/null +++ b/docs/lib/auth/fragments/flutter/signout/10_local_signout.md @@ -0,0 +1,8 @@ +```dart +try { + Amplify.Auth.signOut() +} on AuthError catch (e) { + print(e); +} +``` + diff --git a/docs/lib/auth/fragments/flutter/signout/20_global_signout.md b/docs/lib/auth/fragments/flutter/signout/20_global_signout.md new file mode 100644 index 00000000000..f27596dcd04 --- /dev/null +++ b/docs/lib/auth/fragments/flutter/signout/20_global_signout.md @@ -0,0 +1,13 @@ +```dart +try { + Amplify.Auth.signOut( + request: SignOutRequest( + options: CognitoSignOutOptions( + globalSignOut: true + ) + ) + ); +} on AuthError catch (e) { + print(e); +} +``` \ No newline at end of file diff --git a/docs/lib/auth/fragments/native_common/signout/common.md b/docs/lib/auth/fragments/native_common/signout/common.md index b3a822b7e2e..35dc57ae1f7 100644 --- a/docs/lib/auth/fragments/native_common/signout/common.md +++ b/docs/lib/auth/fragments/native_common/signout/common.md @@ -2,11 +2,13 @@ Invoke the `signOut` api to sign out a user from the Auth category. You can only + Calling signOut without any options will just delete the local cache and keychain of the user. If you would like to sign out of all devices, invoke the signOut api with advanced options. + Calling signout with `globalSignOut = true` will invalidate all the Cognito User Pool tokens of the signed in user. If the user is signed into a device, they won't be authorized to perform a task that requires a valid token when a global signout is called from some other device. They need to sign in again to get valid tokens. diff --git a/docs/lib/auth/signOut.md b/docs/lib/auth/signOut.md index 10115750eea..0ff96e1a8d1 100644 --- a/docs/lib/auth/signOut.md +++ b/docs/lib/auth/signOut.md @@ -6,3 +6,4 @@ description: SignOut a user + From 87563db9330159dbb1ea813c9fb706979960e7bb Mon Sep 17 00:00:00 2001 From: Dustin Noyes Date: Sat, 8 Aug 2020 19:07:23 -0700 Subject: [PATCH 10/30] added credential page --- docs/lib/auth/access_credentials.md | 1 + .../access_credentials/10_fetchAuthSession.md | 12 ++++++++++++ .../flutter/password_management/10_reset_password.md | 3 +++ docs/lib/auth/fragments/flutter/signin/10_signUp.md | 3 +++ .../fragments/flutter/signin/20_confirmSignUp.md | 3 +++ docs/lib/auth/fragments/flutter/signin/30_signIn.md | 3 +++ .../flutter/signin/40_multi_factor_signup.md | 3 +++ .../flutter/signin/50_multi_factor_confirm_signin.md | 3 +++ .../native_common/access_credentials/common.md | 1 + 9 files changed, 32 insertions(+) create mode 100644 docs/lib/auth/fragments/flutter/access_credentials/10_fetchAuthSession.md diff --git a/docs/lib/auth/access_credentials.md b/docs/lib/auth/access_credentials.md index 32add5e27bd..1842d9e4cc6 100644 --- a/docs/lib/auth/access_credentials.md +++ b/docs/lib/auth/access_credentials.md @@ -5,3 +5,4 @@ description: Use AWS Cognito Auth plugin to access auth credentials + diff --git a/docs/lib/auth/fragments/flutter/access_credentials/10_fetchAuthSession.md b/docs/lib/auth/fragments/flutter/access_credentials/10_fetchAuthSession.md new file mode 100644 index 00000000000..549418c060b --- /dev/null +++ b/docs/lib/auth/fragments/flutter/access_credentials/10_fetchAuthSession.md @@ -0,0 +1,12 @@ +```dart + void _fetchSession() async { + try { + AuthSession res = await Amplify.Auth.fetchAuthSession( + request: AuthSessionRequest( + options: CognitoSessionOptions(getAWSCredentials: true) + ) + ); } on AuthError catch (e) { + print(e); + } + } +``` \ No newline at end of file diff --git a/docs/lib/auth/fragments/flutter/password_management/10_reset_password.md b/docs/lib/auth/fragments/flutter/password_management/10_reset_password.md index 34668391e6b..fb23840bf66 100644 --- a/docs/lib/auth/fragments/flutter/password_management/10_reset_password.md +++ b/docs/lib/auth/fragments/flutter/password_management/10_reset_password.md @@ -5,6 +5,9 @@ try { userKey: "myusername", ), ); + setState(() { + isPasswordReset = res.isPasswordReset; + }); } on AuthError catch (e) { print(e); } diff --git a/docs/lib/auth/fragments/flutter/signin/10_signUp.md b/docs/lib/auth/fragments/flutter/signin/10_signUp.md index feee05e05d8..1b4b9dd6087 100644 --- a/docs/lib/auth/fragments/flutter/signin/10_signUp.md +++ b/docs/lib/auth/fragments/flutter/signin/10_signUp.md @@ -14,6 +14,9 @@ try { ) ) ); + setState(() { + isSignUpComplete = res.isSignUpComplete; + }); } on AuthError catch (e) { print(e); } diff --git a/docs/lib/auth/fragments/flutter/signin/20_confirmSignUp.md b/docs/lib/auth/fragments/flutter/signin/20_confirmSignUp.md index 2c54f14f9c6..1e0ad081e0d 100644 --- a/docs/lib/auth/fragments/flutter/signin/20_confirmSignUp.md +++ b/docs/lib/auth/fragments/flutter/signin/20_confirmSignUp.md @@ -6,6 +6,9 @@ try { confirmationCode: "123456" ) ); + setState(() { + isSignUpComplete = res.isSignUpComplete; + }); } on AuthError catch (e) { print(e); } diff --git a/docs/lib/auth/fragments/flutter/signin/30_signIn.md b/docs/lib/auth/fragments/flutter/signin/30_signIn.md index 974267f644a..fe58d3e7575 100644 --- a/docs/lib/auth/fragments/flutter/signin/30_signIn.md +++ b/docs/lib/auth/fragments/flutter/signin/30_signIn.md @@ -6,6 +6,9 @@ try { password: passwordController.text.trim(), ) ); + setState(() { + isSignedIn = res.isSignedIn; + }); } on AuthError catch (e) { print(e); } diff --git a/docs/lib/auth/fragments/flutter/signin/40_multi_factor_signup.md b/docs/lib/auth/fragments/flutter/signin/40_multi_factor_signup.md index d7536436f09..5b77991aeb1 100644 --- a/docs/lib/auth/fragments/flutter/signin/40_multi_factor_signup.md +++ b/docs/lib/auth/fragments/flutter/signin/40_multi_factor_signup.md @@ -13,6 +13,9 @@ try { ) ) ); + setState(() { + isSignUpComplete = res.isSignUpComplete; + }); } on AuthError catch (e) { print(e); } diff --git a/docs/lib/auth/fragments/flutter/signin/50_multi_factor_confirm_signin.md b/docs/lib/auth/fragments/flutter/signin/50_multi_factor_confirm_signin.md index 37413ec0ebd..48198b11152 100644 --- a/docs/lib/auth/fragments/flutter/signin/50_multi_factor_confirm_signin.md +++ b/docs/lib/auth/fragments/flutter/signin/50_multi_factor_confirm_signin.md @@ -6,6 +6,9 @@ try { confirmationValue: "123456" ), ); + setState(() { + isSignedIn = res.isSignedIn; + }); } on AuthError catch (e) { print(e); } diff --git a/docs/lib/auth/fragments/native_common/access_credentials/common.md b/docs/lib/auth/fragments/native_common/access_credentials/common.md index 47c0ee323d7..906a206efd0 100644 --- a/docs/lib/auth/fragments/native_common/access_credentials/common.md +++ b/docs/lib/auth/fragments/native_common/access_credentials/common.md @@ -7,3 +7,4 @@ you can access these implementation details by casting the result of fetchAuthSe + From 892b4b0a174368fce03be9ee8fccc15ae53bd2a4 Mon Sep 17 00:00:00 2001 From: Dustin Noyes Date: Mon, 10 Aug 2020 07:33:27 -0700 Subject: [PATCH 11/30] cr suggestions --- docs/lib/auth/fragments/flutter/hub_events/10_listen_events.md | 3 --- .../flutter/password_management/20_confirm_reset_password.md | 2 +- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/docs/lib/auth/fragments/flutter/hub_events/10_listen_events.md b/docs/lib/auth/fragments/flutter/hub_events/10_listen_events.md index 1d91b4d1d40..8d9f0ae68a8 100644 --- a/docs/lib/auth/fragments/flutter/hub_events/10_listen_events.md +++ b/docs/lib/auth/fragments/flutter/hub_events/10_listen_events.md @@ -13,9 +13,6 @@ auth.events.startListening((hubEvent) { print("USER IS SIGNED IN"); } break; - default: { - print("CONFIGURATION EVENT"); - } } }); ``` \ No newline at end of file diff --git a/docs/lib/auth/fragments/flutter/password_management/20_confirm_reset_password.md b/docs/lib/auth/fragments/flutter/password_management/20_confirm_reset_password.md index aa1938400cc..ca7de00ac90 100644 --- a/docs/lib/auth/fragments/flutter/password_management/20_confirm_reset_password.md +++ b/docs/lib/auth/fragments/flutter/password_management/20_confirm_reset_password.md @@ -3,7 +3,7 @@ try { await Amplify.Auth.confirmPassword( request: ConfirmPasswordRequest( userKey: "myusername", - newPassword: "cantguessthis", + newPassword: "mynewpassword", confirmationCode: "123456" ) ); From e5a39d14918763084769c8a79723f2929db3b80d Mon Sep 17 00:00:00 2001 From: Dustin Noyes Date: Wed, 12 Aug 2020 10:19:00 -0700 Subject: [PATCH 12/30] user attributes section for flutter --- .../flutter/password_management/30_change_password.md | 4 ++-- .../flutter/signin/50_multi_factor_confirm_signin.md | 1 - .../flutter/user_attributes/10_fetch_attributes.md | 4 ++++ .../user_attributes/20_update_user_attribute.md | 4 ++++ .../flutter/user_attributes/30_confirm_attribute.md | 4 ++++ .../flutter/user_attributes/40_resend_code.md | 11 +++++++++++ .../fragments/native_common/user_attributes/common.md | 4 ++++ docs/lib/auth/user-attributes.md | 1 + 8 files changed, 30 insertions(+), 3 deletions(-) create mode 100644 docs/lib/auth/fragments/flutter/user_attributes/10_fetch_attributes.md create mode 100644 docs/lib/auth/fragments/flutter/user_attributes/20_update_user_attribute.md create mode 100644 docs/lib/auth/fragments/flutter/user_attributes/30_confirm_attribute.md create mode 100644 docs/lib/auth/fragments/flutter/user_attributes/40_resend_code.md diff --git a/docs/lib/auth/fragments/flutter/password_management/30_change_password.md b/docs/lib/auth/fragments/flutter/password_management/30_change_password.md index d0b5999de05..0828fd21326 100644 --- a/docs/lib/auth/fragments/flutter/password_management/30_change_password.md +++ b/docs/lib/auth/fragments/flutter/password_management/30_change_password.md @@ -1,7 +1,7 @@ ```dart try { - await Amplify.Auth.changePassword( - request: ChangePasswordRequest( + await Amplify.Auth.updatePassword( + request: UpdatePasswordRequest( newPassword: "mynewpassword", oldPassword: "myoldpassword" ) diff --git a/docs/lib/auth/fragments/flutter/signin/50_multi_factor_confirm_signin.md b/docs/lib/auth/fragments/flutter/signin/50_multi_factor_confirm_signin.md index 48198b11152..f578fba9076 100644 --- a/docs/lib/auth/fragments/flutter/signin/50_multi_factor_confirm_signin.md +++ b/docs/lib/auth/fragments/flutter/signin/50_multi_factor_confirm_signin.md @@ -2,7 +2,6 @@ try { SignInResult res = await Amplify.Auth.confirmSignIn( request: ConfirmSignInRequest( - userKey: "myusername", confirmationValue: "123456" ), ); diff --git a/docs/lib/auth/fragments/flutter/user_attributes/10_fetch_attributes.md b/docs/lib/auth/fragments/flutter/user_attributes/10_fetch_attributes.md new file mode 100644 index 00000000000..994deb0cbc8 --- /dev/null +++ b/docs/lib/auth/fragments/flutter/user_attributes/10_fetch_attributes.md @@ -0,0 +1,4 @@ + +This functionality has not yet been implemented for Flutter but is scheduled to be finished in the near future. +This section will be updated once it has. + diff --git a/docs/lib/auth/fragments/flutter/user_attributes/20_update_user_attribute.md b/docs/lib/auth/fragments/flutter/user_attributes/20_update_user_attribute.md new file mode 100644 index 00000000000..f40f69b53e5 --- /dev/null +++ b/docs/lib/auth/fragments/flutter/user_attributes/20_update_user_attribute.md @@ -0,0 +1,4 @@ + +This functionality has not yet been implemented for Flutter but is scheduled to be finished in the near future. +This section will be updated once it has. + diff --git a/docs/lib/auth/fragments/flutter/user_attributes/30_confirm_attribute.md b/docs/lib/auth/fragments/flutter/user_attributes/30_confirm_attribute.md new file mode 100644 index 00000000000..f40f69b53e5 --- /dev/null +++ b/docs/lib/auth/fragments/flutter/user_attributes/30_confirm_attribute.md @@ -0,0 +1,4 @@ + +This functionality has not yet been implemented for Flutter but is scheduled to be finished in the near future. +This section will be updated once it has. + diff --git a/docs/lib/auth/fragments/flutter/user_attributes/40_resend_code.md b/docs/lib/auth/fragments/flutter/user_attributes/40_resend_code.md new file mode 100644 index 00000000000..cafc843d10c --- /dev/null +++ b/docs/lib/auth/fragments/flutter/user_attributes/40_resend_code.md @@ -0,0 +1,11 @@ + ```dart +try { + ResendSignUpCodeResult res = await Amplify.Auth.resendSignUpCode( + request: ResendSignUpCodeRequest( + username: "myusername" + ) + ); +} on AuthError catch (e) { + print(e); +} +``` diff --git a/docs/lib/auth/fragments/native_common/user_attributes/common.md b/docs/lib/auth/fragments/native_common/user_attributes/common.md index 8ab4a015a37..dd0bf736c76 100644 --- a/docs/lib/auth/fragments/native_common/user_attributes/common.md +++ b/docs/lib/auth/fragments/native_common/user_attributes/common.md @@ -4,6 +4,7 @@ Invoke the following api to get the list of attributes assigned to the user. + ## Update user attribute @@ -11,6 +12,7 @@ Invoke the update api for creating new or updating existing user attributes. + ## Verify user attribute Some attributes require confirmation for the attribute update to complete. If the attribute need to be confirmed, the result of the above api will be `confirmAttributeWithCode`. A confirmation code will be sent to the delivery medium mentioned in the delivery details. @@ -18,9 +20,11 @@ When the user gets the confirmation code, you can present a UI to the user to en + ## Resend verification code If the code has expired or the user needs to resend the confirmation code, invoke the resend api as shown below: + diff --git a/docs/lib/auth/user-attributes.md b/docs/lib/auth/user-attributes.md index 40de14967e8..078b821e0aa 100644 --- a/docs/lib/auth/user-attributes.md +++ b/docs/lib/auth/user-attributes.md @@ -6,3 +6,4 @@ description: Access and update user attributes + From 8ffd9c88b053fbcb05986644bdb3e960c3b423fb Mon Sep 17 00:00:00 2001 From: Dustin Noyes Date: Wed, 12 Aug 2020 10:38:09 -0700 Subject: [PATCH 13/30] param name correction --- .../fragments/flutter/password_management/10_reset_password.md | 2 +- .../flutter/password_management/20_confirm_reset_password.md | 2 +- docs/lib/auth/fragments/flutter/signin/20_confirmSignUp.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/lib/auth/fragments/flutter/password_management/10_reset_password.md b/docs/lib/auth/fragments/flutter/password_management/10_reset_password.md index fb23840bf66..aebe007df48 100644 --- a/docs/lib/auth/fragments/flutter/password_management/10_reset_password.md +++ b/docs/lib/auth/fragments/flutter/password_management/10_reset_password.md @@ -2,7 +2,7 @@ try { ResetPasswordResult res = await Amplify.Auth.resetPassword( request: ResetPasswordRequest( - userKey: "myusername", + username: "myusername", ), ); setState(() { diff --git a/docs/lib/auth/fragments/flutter/password_management/20_confirm_reset_password.md b/docs/lib/auth/fragments/flutter/password_management/20_confirm_reset_password.md index ca7de00ac90..4589693b144 100644 --- a/docs/lib/auth/fragments/flutter/password_management/20_confirm_reset_password.md +++ b/docs/lib/auth/fragments/flutter/password_management/20_confirm_reset_password.md @@ -2,7 +2,7 @@ try { await Amplify.Auth.confirmPassword( request: ConfirmPasswordRequest( - userKey: "myusername", + username: "myusername", newPassword: "mynewpassword", confirmationCode: "123456" ) diff --git a/docs/lib/auth/fragments/flutter/signin/20_confirmSignUp.md b/docs/lib/auth/fragments/flutter/signin/20_confirmSignUp.md index 1e0ad081e0d..fd1af8d961a 100644 --- a/docs/lib/auth/fragments/flutter/signin/20_confirmSignUp.md +++ b/docs/lib/auth/fragments/flutter/signin/20_confirmSignUp.md @@ -2,7 +2,7 @@ try { SignUpResult res = await Amplify.Auth.confirmSignUp( request: ConfirmSignUpRequest( - userKey: "myusername", + username: "myusername", confirmationCode: "123456" ) ); From 138b850b160b62bf09a11119a9b51ef42e4c4722 Mon Sep 17 00:00:00 2001 From: Dustin Noyes Date: Fri, 14 Aug 2020 13:41:14 -0700 Subject: [PATCH 14/30] fix(amplify-flutter) interface changes and credential clarification --- .../android/access_credentials/10_fetchAuthSession.md | 3 +++ .../flutter/access_credentials/10_fetchAuthSession.md | 10 ++++++---- .../flutter/password_management/10_reset_password.md | 4 +--- .../password_management/20_confirm_reset_password.md | 8 +++----- .../flutter/password_management/30_change_password.md | 6 ++---- docs/lib/auth/fragments/flutter/signin/10_signUp.md | 10 ++++------ .../auth/fragments/flutter/signin/20_confirmSignUp.md | 6 ++---- docs/lib/auth/fragments/flutter/signin/30_signIn.md | 6 ++---- .../fragments/flutter/signin/40_multi_factor_signup.md | 10 ++++------ .../flutter/signin/50_multi_factor_confirm_signin.md | 4 +--- .../fragments/flutter/signout/20_global_signout.md | 6 +----- .../flutter/user_attributes/40_resend_code.md | 4 +--- .../ios/access_credentials/10_fetchAuthSession.md | 3 +++ .../native_common/access_credentials/common.md | 3 --- 14 files changed, 33 insertions(+), 50 deletions(-) diff --git a/docs/lib/auth/fragments/android/access_credentials/10_fetchAuthSession.md b/docs/lib/auth/fragments/android/access_credentials/10_fetchAuthSession.md index 6455be53550..47e50c9c1ee 100644 --- a/docs/lib/auth/fragments/android/access_credentials/10_fetchAuthSession.md +++ b/docs/lib/auth/fragments/android/access_credentials/10_fetchAuthSession.md @@ -1,3 +1,6 @@ +However, if you need to access them in relation to working with an API outside Amplify or want access to AWS specific identifying information (e.g. IdentityId), +you can access these implementation details by casting the result of fetchAuthSession as follows: + diff --git a/docs/lib/auth/fragments/flutter/access_credentials/10_fetchAuthSession.md b/docs/lib/auth/fragments/flutter/access_credentials/10_fetchAuthSession.md index 549418c060b..e46bb6d1541 100644 --- a/docs/lib/auth/fragments/flutter/access_credentials/10_fetchAuthSession.md +++ b/docs/lib/auth/fragments/flutter/access_credentials/10_fetchAuthSession.md @@ -1,12 +1,14 @@ +However, if needed you can directly access the credentials as follows: + ```dart void _fetchSession() async { try { AuthSession res = await Amplify.Auth.fetchAuthSession( - request: AuthSessionRequest( - options: CognitoSessionOptions(getAWSCredentials: true) - ) + options: CognitoSessionOptions(getAWSCredentials: true) ); } on AuthError catch (e) { print(e); } } -``` \ No newline at end of file +``` + +If the `getAWSCredentials` option is true, the result will contain AWS credentials and tokens. If it is set to false, the result will contain a simple `isSignedIn` flag. \ No newline at end of file diff --git a/docs/lib/auth/fragments/flutter/password_management/10_reset_password.md b/docs/lib/auth/fragments/flutter/password_management/10_reset_password.md index aebe007df48..d42ea53a7f6 100644 --- a/docs/lib/auth/fragments/flutter/password_management/10_reset_password.md +++ b/docs/lib/auth/fragments/flutter/password_management/10_reset_password.md @@ -1,9 +1,7 @@ ```dart try { ResetPasswordResult res = await Amplify.Auth.resetPassword( - request: ResetPasswordRequest( - username: "myusername", - ), + username: "myusername", ); setState(() { isPasswordReset = res.isPasswordReset; diff --git a/docs/lib/auth/fragments/flutter/password_management/20_confirm_reset_password.md b/docs/lib/auth/fragments/flutter/password_management/20_confirm_reset_password.md index 4589693b144..13777e8f9ee 100644 --- a/docs/lib/auth/fragments/flutter/password_management/20_confirm_reset_password.md +++ b/docs/lib/auth/fragments/flutter/password_management/20_confirm_reset_password.md @@ -1,11 +1,9 @@ ```dart try { await Amplify.Auth.confirmPassword( - request: ConfirmPasswordRequest( - username: "myusername", - newPassword: "mynewpassword", - confirmationCode: "123456" - ) + username: "myusername", + newPassword: "mynewpassword", + confirmationCode: "123456" ); } on AuthError catch (e) { print(e); diff --git a/docs/lib/auth/fragments/flutter/password_management/30_change_password.md b/docs/lib/auth/fragments/flutter/password_management/30_change_password.md index 0828fd21326..9771cc24f6b 100644 --- a/docs/lib/auth/fragments/flutter/password_management/30_change_password.md +++ b/docs/lib/auth/fragments/flutter/password_management/30_change_password.md @@ -1,10 +1,8 @@ ```dart try { await Amplify.Auth.updatePassword( - request: UpdatePasswordRequest( - newPassword: "mynewpassword", - oldPassword: "myoldpassword" - ) + newPassword: "mynewpassword", + oldPassword: "myoldpassword" ); } on AuthError catch (e) { print(e); diff --git a/docs/lib/auth/fragments/flutter/signin/10_signUp.md b/docs/lib/auth/fragments/flutter/signin/10_signUp.md index 1b4b9dd6087..2366c595def 100644 --- a/docs/lib/auth/fragments/flutter/signin/10_signUp.md +++ b/docs/lib/auth/fragments/flutter/signin/10_signUp.md @@ -6,12 +6,10 @@ try { // additional attributes as needed }; SignUpResult res = await Amplify.Auth.signUp( - request: SignUpRequest( - username: "myusername", - password: "mysupersecurepassword", - options: CognitoSignUpOptions( - userAttributes: userAttributes - ) + username: "myusername", + password: "mysupersecurepassword", + options: CognitoSignUpOptions( + userAttributes: userAttributes ) ); setState(() { diff --git a/docs/lib/auth/fragments/flutter/signin/20_confirmSignUp.md b/docs/lib/auth/fragments/flutter/signin/20_confirmSignUp.md index fd1af8d961a..0e1501ef50a 100644 --- a/docs/lib/auth/fragments/flutter/signin/20_confirmSignUp.md +++ b/docs/lib/auth/fragments/flutter/signin/20_confirmSignUp.md @@ -1,10 +1,8 @@ ```dart try { SignUpResult res = await Amplify.Auth.confirmSignUp( - request: ConfirmSignUpRequest( - username: "myusername", - confirmationCode: "123456" - ) + username: "myusername", + confirmationCode: "123456" ); setState(() { isSignUpComplete = res.isSignUpComplete; diff --git a/docs/lib/auth/fragments/flutter/signin/30_signIn.md b/docs/lib/auth/fragments/flutter/signin/30_signIn.md index fe58d3e7575..67ef96905f5 100644 --- a/docs/lib/auth/fragments/flutter/signin/30_signIn.md +++ b/docs/lib/auth/fragments/flutter/signin/30_signIn.md @@ -1,10 +1,8 @@ ```dart try { SignInResult res = await Amplify.Auth.signIn( - request: SignInRequest( - username: usernameController.text.trim(), - password: passwordController.text.trim(), - ) + username: usernameController.text.trim(), + password: passwordController.text.trim(), ); setState(() { isSignedIn = res.isSignedIn; diff --git a/docs/lib/auth/fragments/flutter/signin/40_multi_factor_signup.md b/docs/lib/auth/fragments/flutter/signin/40_multi_factor_signup.md index 5b77991aeb1..468b83c6bc8 100644 --- a/docs/lib/auth/fragments/flutter/signin/40_multi_factor_signup.md +++ b/docs/lib/auth/fragments/flutter/signin/40_multi_factor_signup.md @@ -5,12 +5,10 @@ try { "phone_number": "+15551234", }; SignUpResult res = await Amplify.Auth.signUp( - request: SignUpRequest( - username: "myusername", - password: "mysupersecurepassword", - options: CognitoSignUpOptions( - userAttributes: userAttributes - ) + username: "myusername", + password: "mysupersecurepassword", + options: CognitoSignUpOptions( + userAttributes: userAttributes ) ); setState(() { diff --git a/docs/lib/auth/fragments/flutter/signin/50_multi_factor_confirm_signin.md b/docs/lib/auth/fragments/flutter/signin/50_multi_factor_confirm_signin.md index f578fba9076..b3d62a3bdfa 100644 --- a/docs/lib/auth/fragments/flutter/signin/50_multi_factor_confirm_signin.md +++ b/docs/lib/auth/fragments/flutter/signin/50_multi_factor_confirm_signin.md @@ -1,9 +1,7 @@ ```dart try { SignInResult res = await Amplify.Auth.confirmSignIn( - request: ConfirmSignInRequest( - confirmationValue: "123456" - ), + confirmationValue: "123456" ); setState(() { isSignedIn = res.isSignedIn; diff --git a/docs/lib/auth/fragments/flutter/signout/20_global_signout.md b/docs/lib/auth/fragments/flutter/signout/20_global_signout.md index f27596dcd04..7d1b8864be9 100644 --- a/docs/lib/auth/fragments/flutter/signout/20_global_signout.md +++ b/docs/lib/auth/fragments/flutter/signout/20_global_signout.md @@ -1,11 +1,7 @@ ```dart try { Amplify.Auth.signOut( - request: SignOutRequest( - options: CognitoSignOutOptions( - globalSignOut: true - ) - ) + globalSignOut: true ); } on AuthError catch (e) { print(e); diff --git a/docs/lib/auth/fragments/flutter/user_attributes/40_resend_code.md b/docs/lib/auth/fragments/flutter/user_attributes/40_resend_code.md index cafc843d10c..c2dec32d3b3 100644 --- a/docs/lib/auth/fragments/flutter/user_attributes/40_resend_code.md +++ b/docs/lib/auth/fragments/flutter/user_attributes/40_resend_code.md @@ -1,9 +1,7 @@ ```dart try { ResendSignUpCodeResult res = await Amplify.Auth.resendSignUpCode( - request: ResendSignUpCodeRequest( - username: "myusername" - ) + username: "myusername" ); } on AuthError catch (e) { print(e); diff --git a/docs/lib/auth/fragments/ios/access_credentials/10_fetchAuthSession.md b/docs/lib/auth/fragments/ios/access_credentials/10_fetchAuthSession.md index ea495865790..92b48955139 100644 --- a/docs/lib/auth/fragments/ios/access_credentials/10_fetchAuthSession.md +++ b/docs/lib/auth/fragments/ios/access_credentials/10_fetchAuthSession.md @@ -1,3 +1,6 @@ +However, if you need to access them in relation to working with an API outside Amplify or want access to AWS specific identifying information (e.g. IdentityId), +you can access these implementation details by casting the result of fetchAuthSession as follows: + ```swift import AWSPluginsCore diff --git a/docs/lib/auth/fragments/native_common/access_credentials/common.md b/docs/lib/auth/fragments/native_common/access_credentials/common.md index 906a206efd0..4f8cdf6df0e 100644 --- a/docs/lib/auth/fragments/native_common/access_credentials/common.md +++ b/docs/lib/auth/fragments/native_common/access_credentials/common.md @@ -2,9 +2,6 @@ An intentional decision with Amplify Auth was to avoid any public methods exposi With Auth, you simply sign in and it handles everything else needed to keep the credentials up to date and vend them to the other categories. -However, if you need to access them in relation to working with an API outside Amplify or want access to AWS specific identifying information (e.g. IdentityId), -you can access these implementation details by casting the result of fetchAuthSession as follows: - From eeafc965fac4f368fdf54fb3445d8f2bc1437154 Mon Sep 17 00:00:00 2001 From: Kyle Date: Fri, 14 Aug 2020 21:42:36 -0700 Subject: [PATCH 15/30] Initial SampleApp Docs PR This is the guide that goes along with the SampleApp PR on the main amplify-flutter branch. Please note that we are still waiting for Storage to be completed to finalize the sample app and the docs. This initial commit is meant to give you a general idea of how the sample apps docs will be constructed and to give you the opportunity to give feedback before we finalize more. # Conflicts: # client/src/components.d.ts # cspell.json --- cspell.json | 4 + .../fragments/flutter/build-footer.md | 4 + .../fragments/flutter/build.md | 9 + .../fragments/flutter/integrate.md | 198 ++++++++++++++++++ .../fragments/flutter/nextsteps.md | 9 + .../fragments/flutter/setup.md | 145 +++++++++++++ docs/start/getting-started/integrate.md | 1 + docs/start/getting-started/setup.md | 3 +- docs/start/start.md | 2 + 9 files changed, 374 insertions(+), 1 deletion(-) create mode 100644 docs/start/getting-started/fragments/flutter/build-footer.md create mode 100644 docs/start/getting-started/fragments/flutter/build.md create mode 100644 docs/start/getting-started/fragments/flutter/integrate.md create mode 100644 docs/start/getting-started/fragments/flutter/nextsteps.md create mode 100644 docs/start/getting-started/fragments/flutter/setup.md diff --git a/cspell.json b/cspell.json index 1c97ea22d71..3f420015555 100644 --- a/cspell.json +++ b/cspell.json @@ -1273,6 +1273,10 @@ "confirmingsignincustomflow", "verifyingattributes", "resettingpassword" + "pubspec", + "Stateful", + "GETCURRENTUSER", + "amplifyconfig" ], "flagWords": ["hte"] } diff --git a/docs/start/getting-started/fragments/flutter/build-footer.md b/docs/start/getting-started/fragments/flutter/build-footer.md new file mode 100644 index 00000000000..0ee241676dc --- /dev/null +++ b/docs/start/getting-started/fragments/flutter/build-footer.md @@ -0,0 +1,4 @@ +
+ + Start the Tutorial � + \ No newline at end of file diff --git a/docs/start/getting-started/fragments/flutter/build.md b/docs/start/getting-started/fragments/flutter/build.md new file mode 100644 index 00000000000..3ec7358eacc --- /dev/null +++ b/docs/start/getting-started/fragments/flutter/build.md @@ -0,0 +1,9 @@ +## What we'll build + +In this tutorial you'll use the Authentication, Storage, and Analytics categories of the Flutter-Amplify SDK to create a very simple photo storage app. + +You will use **Authentication** to allow the user to sign up, sign in, and sign out with [Amazon Cognito](https://aws.amazon.com/cognito/). + +Once the user is logged in, you will use **Storage** to load, display, and upload images to [Amazon S3](https://aws.amazon.com/s3/). + +Lastly, you'll use **Analytics** to track user actions in [Amazon Pinpoint](https://aws.amazon.com/pinpoint/). \ No newline at end of file diff --git a/docs/start/getting-started/fragments/flutter/integrate.md b/docs/start/getting-started/fragments/flutter/integrate.md new file mode 100644 index 00000000000..572048b13e5 --- /dev/null +++ b/docs/start/getting-started/fragments/flutter/integrate.md @@ -0,0 +1,198 @@ +In this tutorial, you will integrate the different functionality for **Authentication**, **Storage**, and **Analytics**. + +The sample-app you downloaded in the previous section already has all UI Widgets implemented in Flutter. + +We will now implement its blank methods to allow it to use the Amplify Flutter SDK To power its functionality. + +## Initializing the Amplify Flutter SDK +Before using any methods in the Amplify Flutter SDK, it's important to add all necessary plugins and to call configure. These init methods should only be called once at the root level of your flutter app. + +Within `lib/main.dart` modify the method `_initAmplifyFlutter_` and add the following code: + +```dart + void _initAmplifyFlutter() async { + + // Add Auth + AmplifyAuthCognito auth = new AmplifyAuthCognito(); + amplify.addPlugin(authPlugin: [auth]); + + // Add Storage + AmplifyStorageS3 storage = new AmplifyStorageS3(); + amplify.addPlugin(storagePlugin: [storage]); + + // Add Analytics + AmplifyAnalyticsPinpoint analytics = new AmplifyAnalyticsPinpoint(); + amplify.addPlugin(analyticsPlugin: [analytics]); + + // Initialize AmplifyFlutter + await amplify.configure(amplifyconfig); + setState(() { + _isAmplifyConfigured = true; + }); + } +``` + +Note that all calls to `addPlugin` are made before `amplify.configure` is called. + + +## Authentication + +### Sign Up +Within `lib/Views/SignUpView.dart` +modify the method `_signUp` and invoke the following api to initiate a sign up flow. + +This view is displayed for you from the `LandingPage.dart` class. It prompts the user to enter information to sign up and calls the `_signUp` method when the user confirms. + +```dart + void _signUp() async { + Map userAttributes = { + "email": emailController.text, + "phone_number": phoneController.text, + }; + try { + SignUpResult res = await Amplify.Auth.signUp( + request: SignUpRequest( + username: usernameController.text.trim(), + password: passwordController.text.trim(), + options: CognitoSignUpOptions(userAttributes: userAttributes)), + ); + Navigator.pop(context, true); + } on AuthError catch (e) { + setState(() { + _signUpError = e.cause; + _signUpExceptions.clear(); + e.exceptionList.forEach((el) { + _signUpExceptions.add(el.exception); + }); + }); + } + } +``` + +We use the `CognitoSignUpOptions` object to send additional sign up attributes such as email and phone number that we want to associate with this newly created user. + +Note how we use a try/catch block to be able to gracefully handle any issues with calling the API. All Auth methods in the Flutter SDK throw "AuthError" when something goes wrong. + +Note the flow of creating a SignUpRequest and receive a SignUpResult. This basic flow is repeated throughout Auth, in which you send a ---Request and receive a ---Result. + +### Sign In +Within `lib/Views/SignInView.dart` +modify the method `_signIn` and invoke the following api to initiate a sign in flow. + +```dart + void _signIn() async { + try { + SignInResult res = await Amplify.Auth.signIn( + request: SignInRequest( + username: usernameController.text.trim(), + password: passwordController.text.trim()), + ); + + // On successful signup, close this widget + Navigator.pop(context, true); + } on AuthError catch (e) { + // Update our "error" state so we can display it in the UI + setState(() { + _signInError = e.cause; + _signInExceptions.clear(); + e.exceptionList.forEach((el) { + _signInExceptions.add(el.exception); + }); + }); + } + } +``` + +This code is largely the same as the previous signUp code we added before. The overall flow is simpler as we just need to send a username and password to Auth. + +### Sign Out +Within `lib/Views/UserView.dart` +modify the method `_signOut_` and invoke the following api to initiate a sign out flow. + +```dart + void _signOut() async { + try { + SignOutResult res = await Amplify.Auth.signOut(); + + Navigator.pushAndRemoveUntil( + context, + MaterialPageRoute(builder: (context) => LandingPage()), + (route) => false); + } on AuthError catch (e) { + print(e); + } + } +``` + +### Listening to Auth Hub Events + +**TODO** Waiting for Auth Hub Events to be completed. + +We will use the Auth Hub to listen to changes in user auth status to display the current login status and user id in our app. + + + +## Storage + +**TODO** Waiting for Storage category to be completed + +## Analytics + +**TODO** Waiting to add Analytics category to be added to sample-app + +We will call the following methods: + +```dart +void _recordEvent() async { + AnalyticsEvent event = AnalyticsEvent("test"); + + event.properties.addBoolProperty("boolKey", true); + event.properties.addDoubleProperty("doubleKey", 10.0); + event.properties.addIntProperty("intKey", 10); + event.properties.addStringProperty("stringKey", "stringValue"); + + Amplify.Analytics.recordEvent(event: event); + } + + void _flushEvents() async { + Amplify.Analytics.flushEvents(); + } + void _registerGlobalProperties() async { + + print("register global properties: " + _globalProp); + + AnalyticsProperties properties = new AnalyticsProperties(); + properties.addBoolProperty(_globalProp + "_boolKey", true); + properties.addDoubleProperty(_globalProp + "_doubleKey", 10.0); + properties.addIntProperty(_globalProp + "_intKey", 10); + properties.addStringProperty(_globalProp + "_stringKey", "stringValue"); + + Amplify.Analytics.registerGlobalProperties(globalProperties: properties); + + } + + void _identifyUser() async { + AnalyticsUserProfile analyticsUserProfile = new AnalyticsUserProfile(); + analyticsUserProfile.name = _userId + "_name"; + analyticsUserProfile.email = _userId + "_email"; + analyticsUserProfile.plan = _userId + "_plan"; + + AnalyticsUserProfileLocation analyticsUserLocation = new AnalyticsUserProfileLocation(); + analyticsUserLocation.latitude = 5; + analyticsUserLocation.longitude = 5; + analyticsUserLocation.postalCode = "94070"; + analyticsUserLocation.city = "SanFrancisco"; + analyticsUserLocation.region = "California"; + analyticsUserLocation.country = "USA"; + + analyticsUserProfile.location = analyticsUserLocation; + + + AnalyticsProperties properties = new AnalyticsProperties(); + properties.addStringProperty(_userId + "_stringKey" , "stringValue"); + + analyticsUserProfile.properties = properties; + + Amplify.Analytics.identifyUser(userId: _userId, userProfile: analyticsUserProfile); + } + ``` \ No newline at end of file diff --git a/docs/start/getting-started/fragments/flutter/nextsteps.md b/docs/start/getting-started/fragments/flutter/nextsteps.md new file mode 100644 index 00000000000..09b89dea1ee --- /dev/null +++ b/docs/start/getting-started/fragments/flutter/nextsteps.md @@ -0,0 +1,9 @@ +👏 In this tutorial, you created an application that persists data both locally on the device and in the cloud. You are now ready to start exploring additional Amplify categories to add to your application. + +- [Authentication](~/lib/auth/getting-started.md) +- [Storage](~/lib/storage/getting-started.md) +- [DataStore](~/lib/datastore/getting-started.md) +- [API (GraphQL)](~/lib/graphqlapi/getting-started.md) +- [API (REST)](~/lib/restapi/getting-started.md) +- [Analytics](~/lib/analytics/getting-started.md) +- [Predictions](~/lib/predictions/getting-started.md) \ No newline at end of file diff --git a/docs/start/getting-started/fragments/flutter/setup.md b/docs/start/getting-started/fragments/flutter/setup.md new file mode 100644 index 00000000000..486273847e5 --- /dev/null +++ b/docs/start/getting-started/fragments/flutter/setup.md @@ -0,0 +1,145 @@ + +👋 Welcome! In this tutorial, you will: + +- Download the getting started app +- Add the Flutter SDK dependencies +- Use Amplify CLI to setup your AWS backend resources + +## Prerequisites + +- Install [Flutter](https://flutter.dev/docs/get-started/install) version 1.17.0 or higher + + These steps will also guide you through downloading and setting up Android Studio and XCode for Flutter. + +- Setup your [IDE](https://flutter.dev/docs/get-started/editor?tab=androidstudio) + + We recommend using AndroidStudio for developing your Flutter apps. + +- Install [Amplify CLI](~/cli/cli.md) version 4.21.0 or later by running: + + ```bash + npm install -g @aws-amplify/cli + ``` + + + +## Set up your application + +### Download Sample App + +Download the starter [here](https://github.com/aws-amplify/amplify-flutter). The starter project is contained within `amplify-flutter/example/sample-app`. + +#### Sample App Overview + +The starter contains the basic UI for the simple photo storage app. All changes and instructions in this tutorial should be performed on this starter project. + +### Getting Started on your own + +If you prefer starting from a blank flutter project, you will need to make the following modification to ensure that iOS compiles: + +Within your `ios/Podfile`, replace line 2 with +```dart +set platform :ios, '11.0' +``` + +Please note that we **highly** recommend using our starter project. This tutorial does not provide instructions on how to create the basic UI used in Flutter. + + +### Add Amplify to your application + +Amplify for Flutter is distributed via **pub.dev**. +In this section, you'll add the following dependencies to your **app**'s `pubspec.yaml`. + +**TODO** Clarify the names of our DART packages + +```yaml +dependencies: + flutter: + sdk: flutter + + amplify_core: ^1.0.0 + amplify_auth_cognito: ^1.0.0 + amplify_storage_s3: ^1.0.0 + amplify_analytics_pinpoint: ^1.0.0 +``` + +Afterwards, make sure to run `flutter pub get` in the command line within the root level of your project. If you are using Android Studio, you can click on "Pub get" within a popup that appears instead. + + + + +### Setup AWS Cloud Resources with Amplify CLI + +We will now use the Amplify CLI to configure the AWS Cloud Resources that will power your app. + +**TODO** Clarify that these instructions are correct + +#### Basic Auth Setup +``` +amplify add auth +``` + +``` +? Do you want to use the default authentication and security configuration? + `Default configuration` +? How do you want users to be able to sign in? + `Username` +? Do you want to configure advanced settings? + `No, I am done.` +``` + +#### Basic Analytics Setup +``` +amplify add analytics +``` + +``` +? Select an Analytics provider (Use arrow keys) + `Amazon Pinpoint` +? Provide your pinpoint resource name: + `yourPinpointResourceName` +? Apps need authorization to send analytics events. Do you want to allow guests and unauthenticated users to send analytics events? (we recommend you allow this when getting started) + `Yes` +``` + +#### Basic Storage Setup +``` +amplify add storage +``` + +``` +? Please select from one of the below mentioned services: + `Content (Images, audio, video, etc.)` +? You need to add auth (Amazon Cognito) to your project in order to add storage for user files. Do you want to add auth now? + `Yes` +? Do you want to use the default authentication and security configuration? + `Default configuration` +? How do you want users to be able to sign in? + `Username` +? Do you want to configure advanced settings? + `No, I am done.` +? Please provide a friendly name for your resource that will be used to label this category in the project: + `S3friendlyName` +? Please provide bucket name: + `storagebucketname` +? Who should have access: + `Auth and guest users` +? What kind of access do you want for Authenticated users? + `create/update, read, delete` +? What kind of access do you want for Guest users? + `create/update, read, delete` +? Do you want to add a Lambda Trigger for your S3 Bucket? + `No` +``` + +To save all your changes and to create your AWS resources, run the following command last: + +``` +amplify push +``` + +**TODO** Clarify where the amplifyconfiguration.dart file will be placed + +After these steps, you should notice a `amplifyconfiguration.dart` file within your lib directory of your project. Guard this file carefully! It contains sensitive information that your app will use to establish a secure communication with your backend AWS resources. If it is lost or corrupted, you can always regenerate it by repeating the above steps again with the Amplify CLI. + +You are ready to start building with Amplify! 🎉 diff --git a/docs/start/getting-started/integrate.md b/docs/start/getting-started/integrate.md index fdbb7188fad..8a5b98a46d3 100644 --- a/docs/start/getting-started/integrate.md +++ b/docs/start/getting-started/integrate.md @@ -6,3 +6,4 @@ filterKey: integration + diff --git a/docs/start/getting-started/setup.md b/docs/start/getting-started/setup.md index 46fd4f43ec4..e54d2e54840 100644 --- a/docs/start/getting-started/setup.md +++ b/docs/start/getting-started/setup.md @@ -10,4 +10,5 @@ description: Getting Started with Amplify Framework - Setup a fullstack project - \ No newline at end of file + + \ No newline at end of file diff --git a/docs/start/start.md b/docs/start/start.md index 49afec072e3..ada0488cc20 100644 --- a/docs/start/start.md +++ b/docs/start/start.md @@ -14,6 +14,7 @@ The **Amplify [Console](https://aws.amazon.com/amplify/console/)** is an AWS ser + @@ -23,6 +24,7 @@ The **Amplify [Console](https://aws.amazon.com/amplify/console/)** is an AWS ser + From bfcb7ecfb5ba9dc7a78d0dbca64cf6d3c4da83ef Mon Sep 17 00:00:00 2001 From: Kyle Date: Fri, 14 Aug 2020 19:49:18 -0700 Subject: [PATCH 16/30] Add Flutter Disclaimer --- capi/src/init-node/valid-tags.json | 3 ++- client/src/docs-ui/footer/footer.tsx | 2 ++ .../getting-started/fragments/flutter/build-footer.md | 7 ++++++- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/capi/src/init-node/valid-tags.json b/capi/src/init-node/valid-tags.json index 09334bf0e33..71d576ad59d 100644 --- a/capi/src/init-node/valid-tags.json +++ b/capi/src/init-node/valid-tags.json @@ -55,5 +55,6 @@ "thead": true, "tr": true, "ui-component-props": true, - "ul": true + "ul": true, + "small": true } diff --git a/client/src/docs-ui/footer/footer.tsx b/client/src/docs-ui/footer/footer.tsx index 8eafbf72ab5..ccde8bb4f44 100644 --- a/client/src/docs-ui/footer/footer.tsx +++ b/client/src/docs-ui/footer/footer.tsx @@ -69,6 +69,8 @@ export class DocsFooter { privacy policy . +