Skip to content

Commit

Permalink
feat!: Update storage APIs to accept StoragePath (#4713)
Browse files Browse the repository at this point in the history
* feat!: Update storage APIs to accept `StoragePath` (#4549)

* chore: add `StoragePath`

* chore: add `S3PathResolver`

* chore: update `getUrl` and `getProperties` API

* chore: update S3UploadTask

* chore: fix tests

* chore: validate storage path

* chore: add tests for S3PathResolver

* feat: Gen 2 Upload APIs (#4542)

* feat: add path parameter and made key optional

Co-Authored-By: Jordan Nelson <20613561+Jordan-Nelson@users.noreply.github.com>

* chore: added/modified unit tests and added a missing deprecation tag

Co-Authored-By: Jordan Nelson <20613561+Jordan-Nelson@users.noreply.github.com>

* chore: added extra assert statement to make sure users don't put in both path and key into upload method

Co-Authored-By: Jordan Nelson <20613561+Jordan-Nelson@users.noreply.github.com>

* chore: add ignore statements to ignore key deprecated warnings

* chore: add ignore statements for deprecated members

---------

Co-authored-by: Jordan Nelson <20613561+Jordan-Nelson@users.noreply.github.com>

* chore: refactor StoragePath (#4544)

* chore: remove `key` from public APIs

* chore: update tests to adjust for using path

* chore: fix lint issues

* chore: fix formatting

* chore: fix test

* chore: remove lint ignored

* chore: update comment

* chore: remove unused method

* chore: skip tests other than main

* chore: update generated code

* chore: add leading `/`

* feat(storage): copy and move APIs (#4569)

* chore: update copy api

* chore: update integ tests for copy

* chore: removed unused code

* chore: add back test

* chore: update download apis to use path (#4561)

* chore: add `StoragePath`

* chore: add `S3PathResolver`

* chore: update `getUrl` and `getProperties` API

* chore: update S3UploadTask

* chore: fix tests

* chore: validate storage path

* chore: add tests for S3PathResolver

* feat: Gen 2 Upload APIs (#4542)

* feat: add path parameter and made key optional

Co-Authored-By: Jordan Nelson <20613561+Jordan-Nelson@users.noreply.github.com>

* chore: added/modified unit tests and added a missing deprecation tag

Co-Authored-By: Jordan Nelson <20613561+Jordan-Nelson@users.noreply.github.com>

* chore: added extra assert statement to make sure users don't put in both path and key into upload method

Co-Authored-By: Jordan Nelson <20613561+Jordan-Nelson@users.noreply.github.com>

* chore: add ignore statements to ignore key deprecated warnings

* chore: add ignore statements for deprecated members

---------

Co-authored-by: Jordan Nelson <20613561+Jordan-Nelson@users.noreply.github.com>

* chore: refactor StoragePath (#4544)

* chore: remove `key` from public APIs

* chore: update tests to adjust for using path

* chore: fix lint issues

* chore: fix formatting

* chore: fix test

* chore: remove lint ignored

* chore: update comment

* chore: remove unused method

* chore: update download apis to use path

* chore: skip tests other than main

* chore: run dart format on both files that are receiving analyze warnings

* chore: used dart fix to add trailing commas

* chore: fixed formatting

* chore: run format on test files

* chore: fix formatting in integration tests

* chore: update generated code

* chore: add leading `/`

* chore: remove access level from e2e test

* fix(auth): device metadata migration (#4503)

* merge main

* chore: added a bracket and removed new keywords

* chore: changed signature of deleteLegacyDeviceSecrets and regenerated pigeons. Changed legacysecrethandler.kt file to .txt to "comment" it out

* chore: run dart format on generated file

* chore: migrateLegacyDeviceSecrets now gets called before deleteLegacyCredentials. Cognito_device_secrets return type fixed

* chore: add delete and fetch methods to the cognito swift file

* fix: various issues with implementation

* chore: fix lint issues

* test: update test to include mfa and token refresh

* chore: use coroutines, add plugin

* chore: remove generate code in iOS

* chore: fetch asf deviceId from shared prefs directly

* chore: update error name

* chore: remove native auth plugin

* chore: remove old legacy handler

* chore: remove check for null device metadata

* chore: flatten nested if statements

* chore: remove unused type

---------

Co-authored-by: Kha Truong <64438356+khatruong2009@users.noreply.github.com>

* fix(auth): Allow retries with verifyTotpSetup() (#4532)

* chore(version): cherry pick Bump version (#4545)

* fix(auth): verifyTotp throw EnableSoftwareTokenMfaException (#4558)

* chore(version): cherry pick Bump version (#4560)

* chore: Update BUG-REPORT.yaml (#4568)

* fix: correct `package_info_plus` version constraint (#4583)

chore: fix version constraint

* feat(storage): copy and move APIs (#4569)

* chore: update copy api

* chore: update integ tests for copy

* chore: removed unused code

* chore: add back test

* chore: update download apis to use path

* chore: remove duplicate code from rebase

* chore: removed random text file

* chore: remove commented code

* chore: fix failing tests

* chore: update options, tests

* chore: update options classes

* chore: add back temp dir

* chore: fix integ test

* chore: add skip back to io specific test

* chore: skip test set up in configs other than main

---------

Co-authored-by: Jordan Nelson <Jordanryannelson@gmail.com>
Co-authored-by: Jordan Nelson <20613561+Jordan-Nelson@users.noreply.github.com>
Co-authored-by: Jordan Nelson <nejrd@amazon.com>
Co-authored-by: Elijah Quartey <Equartey@users.noreply.github.com>

* feat(storage): update `remove` and `removeMany` APIs (#4593)

* chore: update removeMany API

* chore: update remove api, tests

* chore: handle leading slash

* test: update e2e tests

* chore: update sample app

* chore: fix comment

* chore: add doc comment

* chore: update path validation logic

* chore: remove leading `/` from tests

* chore: add `/` back to `StoragePathValidationException` test

* chore: update tests

* chore: remove leading `/`

* chore: update tests

* chore: remove unused types and constructors, use consistent naming  (#4603)

* chore: remove unused types and properties

* fix: set path of S3Item in download file

* chore: use consistent naming when resolving path

* chore: update path resolution in tests

* fix: update where leading `/` is added for getUrl

* feat: update list API (#4600)

* feat: list API init commit

* chore: removed / from beginning of paths

* chore: fix formatting

* chore: fix formatting and tests

* chore: fix formatting in storage_s3_service_test.dart

* chore: remove commented code and and / before paths

* Apply suggestions from code review

Co-authored-by: Jordan Nelson <nejrd@amazon.com>

* chore: remove accessLevel from StorageListOptions

* chore: removed prefix formatter and fixed formatting

* chore: removed unused field

* chore: remove prefix resolver and fix classes

* chore: change variable name

Co-Authored-By: Jordan Nelson <20613561+Jordan-Nelson@users.noreply.github.com>

* chore: fix formatting

* chore: add deleted documentation back in

* chore: fixed comment placement

---------

Co-authored-by: Jordan Nelson <nejrd@amazon.com>
Co-authored-by: Jordan Nelson <20613561+Jordan-Nelson@users.noreply.github.com>

* chore(storage): cleanup and enable tests (#4617)

* chore: update canary tests

* chore: remove `StorageOperationOptions`

* chore: remove access level from examples

* chore: update doc comment

* chore: enable transfer acceleration tests

* chore: update not found message

* chore: update `S3PathResolver` doc comments

* fix: copy impl

* chore: remove skips from tests

* chore: add back other env to integ tests

* chore: remove targetIdentityId from `S3ListOptions`

* chore: remove try/catch from test

* chore: update formatting

* chore: update copy test

* Update packages/storage/amplify_storage_s3/example/integration_test/use_case_test.dart

* chore: add space back to test path

* chore: update path in test

* chore: clean up example app

* chore: rename `withIdentityId` to `fromIdentityId`

* chore: add validation for empty path

* chore: add tests for path resolver

* chore: remove reference to CLI in doc comment

* chore: add comment to `StoragePathFromIdentityId`

* chore: revert public API changes in s3 list result

* chore: use `resolvePaths` in copy API

* chore: update error handling for identityId

* chore: undo changes to type cast in html download file

* chore: fix failing copy tests

* chore: update doc comment

Co-authored-by: NikaHsn <nika.hasani@gmail.com>

* chore: update doc comments

Co-authored-by: NikaHsn <nika.hasani@gmail.com>

---------

Co-authored-by: Jordan Nelson <Jordanryannelson@gmail.com>
Co-authored-by: Jordan Nelson <20613561+Jordan-Nelson@users.noreply.github.com>
Co-authored-by: Jordan Nelson <nejrd@amazon.com>
Co-authored-by: Elijah Quartey <Equartey@users.noreply.github.com>
Co-authored-by: NikaHsn <nika.hasani@gmail.com>

* chore!: remove prefix resolver, passthrough prefix resolver, and accessLevel (#4631)

- Remove prefix resolver, passthrough prefix resolver, and accessLevel

---------

Co-authored-by: Jordan Nelson <Jordanryannelson@gmail.com>
Co-authored-by: Jordan Nelson <20613561+Jordan-Nelson@users.noreply.github.com>
Co-authored-by: Jordan Nelson <nejrd@amazon.com>
Co-authored-by: Elijah Quartey <Equartey@users.noreply.github.com>

* chore(storage): add e2e tests for `uploadData`, `uploadFile`, `getUrl`, `getProperties` (#4615)

* chore: add tests for upload

* chore: update constructor name

* chore: update teardown

* chore: add tests for unauthorized path

* chore: add getUrl tests

* chore: make vars final

* chore: create util for user tear down

* chore: add get properties test

* chore: update doc comments

* chore: fix failing test

* chore: update tests to use `testWidgets`

* chore: fix failing web e2e tests

* chore: rethrow teardown failures

* chore: use `expectedResolvedPath` in upload op

* chore: use util for generating user/pw

* chore: use `AWSFile.fromPath` in tests

* chore: update file names

* chore: update removeMany API, add tests for `remove`, `removeMany`, `copy` (#4748)

* chore: update remove many API

* chore: use `expectLater` in tests, add test for non existent path

* chore: add e2e tests for `remove`, `removeMany`

* chore: refactor `objectExists` util

* chore: add copy tests

* chore update main_test file

* chore: E2E tests for downloadFile, downloadData, and List (#4697)

* chore: add downloadData and downloadFile e2e tests

* chore: fix formatting

* chore: fix formatting part 2

* chore: change amplifyEnvironments key to main

* chore: uncomment addTearDown

* chore: comment addTearDown again

* chore: use addTearDown instead of tearDownAll

* chore: uncomment addTearDown in configure.dart file

* chore: add e2e tests for list()

* chore: fixed formatting issues caused by merge

* chore: fix tests to return a future in the teardown

* chore: fix formatting

* chore: upgrade e2e tests to java 17

* chore: revert previous commit

* chore: remove storage_path_with_identity_id.dart file from merge

* chore: replace if statement with expect

* chore: delete create_file and switch uploadFile to uploadData in tests

* Update packages/storage/amplify_storage_s3/example/integration_test/list_test.dart

Co-authored-by: Jordan Nelson <nejrd@amazon.com>

* chore: fix formatting and add signInNewUser

* chore: move uploadData to setupAll and add path verification

* chore: fix formatting

* chore: move uploadData methods to setupAll at the beginning of the test

* chore: add expects for value on the result in download files

* chore: fixed formatting

* chore: add expects for file path and fixed variables

* chore: add test for listAll option

* chore: fix formatting

* chore: switch tests to testWidgets

* chore: add test for unauthorized path

* chore: add tests for different localFile constructors

* chore: fix formatting

* chore: use addTearDownPath and added paths

* chore: fix formatting

* chore: change metadata headers to description

* Update packages/storage/amplify_storage_s3/example/integration_test/download_data_test.dart

Co-authored-by: Jordan Nelson <nejrd@amazon.com>

* chore: make all vars final if possible

* chore: fixed formatting and renamed variables

* chore: fix test grouping

* Update packages/storage/amplify_storage_s3/example/integration_test/download_file_test.dart

Co-authored-by: Jordan Nelson <nejrd@amazon.com>

* Update packages/storage/amplify_storage_s3/example/integration_test/download_file_test.dart

Co-authored-by: Jordan Nelson <nejrd@amazon.com>

* chore: remove unnecessary tearDown

* chore: add file ops and adjusted other tests

* chore: change list test exception

* Update packages/storage/amplify_storage_s3/example/integration_test/download_file_test.dart

Co-authored-by: Jordan Nelson <nejrd@amazon.com>

* Update packages/storage/amplify_storage_s3/example/integration_test/download_file_test.dart

Co-authored-by: Jordan Nelson <nejrd@amazon.com>

* Update packages/storage/amplify_storage_s3/example/integration_test/download_data_test.dart

Co-authored-by: Jordan Nelson <nejrd@amazon.com>

* Update packages/storage/amplify_storage_s3/example/integration_test/download_file_test.dart

Co-authored-by: Jordan Nelson <nejrd@amazon.com>

* chore: fix formatting

* Revert "chore: fix formatting"

This reverts commit a0d9080.

* Revert "Merge branch 'feat/storage-gen2' into feat/storage/e2e/download-list"

This reverts commit d0a92cd, reversing
changes made to d9746a8.

* chore: fix merge errors

* chore: fix more merge changes

---------

Co-authored-by: Jordan Nelson <nejrd@amazon.com>

* chore(storage): remove deprecated storage options (#4749)

* chore(storage): add test coverage, remove old e2e tests (#4763)

* chore: add test for content type inference

* chore: add test for url with special characters

* chore: remove old integ tests

* fix: include useAccelerateEndpoint in upload

* fix: only close sink if it exists

* chore: add tests for an env with dots in the name

---------

Co-authored-by: Jordan Nelson <Jordanryannelson@gmail.com>
Co-authored-by: Jordan Nelson <20613561+Jordan-Nelson@users.noreply.github.com>
Co-authored-by: Jordan Nelson <nejrd@amazon.com>
Co-authored-by: Elijah Quartey <Equartey@users.noreply.github.com>
Co-authored-by: NikaHsn <nika.hasani@gmail.com>
  • Loading branch information
6 people authored Apr 24, 2024
1 parent ab2241d commit d961106
Show file tree
Hide file tree
Showing 123 changed files with 3,063 additions and 4,604 deletions.
14 changes: 5 additions & 9 deletions canaries/integration_test/main_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -30,14 +30,14 @@ void main() {
IntegrationTestWidgetsFlutterBinding.ensureInitialized();

const data = 'hello, world';
const dataKey = 'hello';
const path = StoragePath.fromString('public/hello');
final event = AnalyticsEvent('hello');

Future<void> performUnauthenticatedActions() async {
// Upload data to Storage
await Amplify.Storage.uploadData(
data: HttpPayload.string(data),
key: dataKey,
path: path,
).result;

// Record Analytics event
Expand All @@ -63,19 +63,15 @@ void main() {
Future<void> performAuthenticatedActions() async {
// Retrieve guest data
final guestData = await Amplify.Storage.downloadData(
key: dataKey,
options: const StorageDownloadDataOptions(
accessLevel: StorageAccessLevel.guest,
),
path: path,
).result;
expect(utf8.decode(guestData.bytes), data);

// Upload data to Storage
await Amplify.Storage.uploadData(
data: HttpPayload.string(data),
key: dataKey,
options: const StorageUploadDataOptions(
accessLevel: StorageAccessLevel.private,
path: StoragePath.fromIdentityId(
(String identityId) => 'private/$identityId/hello',
),
).result;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,6 @@ part of 'amplify_categories.dart';
///
/// It comes with default, built-in support for Amazon S3 service
/// leveraging Amplify Auth Category for authorization.
///
/// The Amplify CLI helps you to create and configure the storage category
/// and auth category.
/// {@endtemplate}
class StorageCategory extends AmplifyCategory<StoragePluginInterface> {
@override
Expand All @@ -37,7 +34,7 @@ class StorageCategory extends AmplifyCategory<StoragePluginInterface> {
/// returns a [StorageListOperation].
/// {@endtemplate}
StorageListOperation list({
String? path,
required StoragePath path,
StorageListOptions? options,
}) {
return identifyCall(
Expand All @@ -50,84 +47,84 @@ class StorageCategory extends AmplifyCategory<StoragePluginInterface> {
}

/// {@template amplify_core.amplify_storage_category.get_properties}
/// Retrieves properties of the object specified by [key] with optional
/// Retrieves properties of the object specified by [path] with optional
/// [StorageGetPropertiesOptions]. And returns a
/// [StorageGetPropertiesOperation].
///
/// The result may include the metadata (if any) specified when the object
/// was uploaded.
/// {@endtemplate}
StorageGetPropertiesOperation getProperties({
required String key,
required StoragePath path,
StorageGetPropertiesOptions? options,
}) {
return identifyCall(
StorageCategoryMethod.getProperties,
() => defaultPlugin.getProperties(
key: key,
path: path,
options: options,
),
);
}

/// {@template amplify_core.amplify_storage_category.get_url}
/// Generates a downloadable url for the object specified by [key] with
/// Generates a downloadable url for the object specified by [path] with
/// [StorageGetUrlOptions], and returns a [StorageGetUrlOperation].
///
/// The url is presigned by the aws_signature_v4, and is enforced with scheme
/// `https`.
/// {@endtemplate}
StorageGetUrlOperation getUrl({
required String key,
required StoragePath path,
StorageGetUrlOptions? options,
}) {
return identifyCall(
StorageCategoryMethod.getUrl,
() => defaultPlugin.getUrl(
key: key,
path: path,
options: options,
),
);
}

/// {@template amplify_core.amplify_storage_category.download_data}
/// Downloads bytes of object specified by [key] into memory with optional
/// Downloads bytes of object specified by [path] into memory with optional
/// [onProgress] and [StorageDownloadDataOptions], and returns a
/// [StorageDownloadDataOperation].
///
/// Ensure you are managing the data in memory properly to avoid unexpected
/// memory leaks.
/// {@endtemplate}
StorageDownloadDataOperation downloadData({
required String key,
required StoragePath path,
void Function(StorageTransferProgress)? onProgress,
StorageDownloadDataOptions? options,
}) {
return identifyCall(
StorageCategoryMethod.downloadData,
() => defaultPlugin.downloadData(
key: key,
path: path,
onProgress: onProgress,
options: options,
),
);
}

/// {@template amplify_core.amplify_storage_category.download_file}
/// Downloads the object specified by [key] to [localFile] with optional
/// Downloads the object specified by [path] to [localFile] with optional
/// [onProgress] and [StorageDownloadFileOptions], and returns a
/// [StorageDownloadFileOperation].
/// {@endtemplate}
StorageDownloadFileOperation downloadFile({
required String key,
required StoragePath path,
required AWSFile localFile,
void Function(StorageTransferProgress)? onProgress,
StorageDownloadFileOptions? options,
}) {
return identifyCall(
StorageCategoryMethod.downloadFile,
() => defaultPlugin.downloadFile(
key: key,
path: path,
localFile: localFile,
onProgress: onProgress,
options: options,
Expand All @@ -137,21 +134,21 @@ class StorageCategory extends AmplifyCategory<StoragePluginInterface> {

/// {@template amplify_core.amplify_storage_category.upload_data}
/// Uploads [data] as a [StorageDataPayload] with optional
/// [onProgress] and [StorageUploadDataOptions] to object specified by [key],
/// [onProgress] and [StorageUploadDataOptions] to object specified by [path],
/// and returns a [StorageUploadDataOperation].
///
/// See [StorageDataPayload] for supported data formats.
/// {@endtemplate}
StorageUploadDataOperation uploadData({
required StorageDataPayload data,
required String key,
required StoragePath path,
void Function(StorageTransferProgress)? onProgress,
StorageUploadDataOptions? options,
}) {
return identifyCall(
StorageCategoryMethod.uploadData,
() => defaultPlugin.uploadData(
key: key,
path: path,
data: data,
onProgress: onProgress,
options: options,
Expand All @@ -161,22 +158,22 @@ class StorageCategory extends AmplifyCategory<StoragePluginInterface> {

/// {@template amplify_core.amplify_storage_category.upload_file}
/// Uploads data from [localFile] with optional [onProgress] and
/// [StorageUploadFileOptions] to object specified by [key], and returns a
/// [StorageUploadFileOptions] to object specified by [path], and returns a
/// [StorageUploadFileOperation].
///
/// [AWSFile] provides various adapters to read file content from file
/// abstractions, such as `XFile`, `PlatformFile`, `io.File` or `html.File`.
/// {@endtemplate}
StorageUploadFileOperation uploadFile({
required AWSFile localFile,
required String key,
required StoragePath path,
void Function(StorageTransferProgress)? onProgress,
StorageUploadFileOptions? options,
}) {
return identifyCall(
StorageCategoryMethod.uploadFile,
() => defaultPlugin.uploadFile(
key: key,
path: path,
localFile: localFile,
onProgress: onProgress,
options: options,
Expand All @@ -190,12 +187,11 @@ class StorageCategory extends AmplifyCategory<StoragePluginInterface> {
/// {@endtemplate}
///
/// {@template amplify_core.amplify_storage_category.copy_source}
/// The `source` should be readable to the API call originator following
/// corresponding [StorageAccessLevel].
/// The `source` should be readable to the API call originator.
/// {@endtemplate}
StorageCopyOperation copy({
required StorageItemWithAccessLevel<StorageItem> source,
required StorageItemWithAccessLevel<StorageItem> destination,
required StoragePath source,
required StoragePath destination,
StorageCopyOptions? options,
}) {
return identifyCall(
Expand All @@ -208,65 +204,32 @@ class StorageCategory extends AmplifyCategory<StoragePluginInterface> {
);
}

/// {@template amplify_core.amplify_storage_category.move}
/// Moves [source] to [destination] with optional [StorageMoveOptions],
/// and returns a [StorageMoveOperation].
///
/// This API performs two consecutive S3 service calls:
/// 1. copy the source object to destination objection
/// 2. delete the source object
///
/// {@macro amplify_core.amplify_storage_category.copy_source}
/// {@endtemplate}
@Deprecated(
'This API will be removed in the next major version. '
'This API calls Amplify.Storage.copy() to create a copy of the file in the '
'destination directory and then calls Amplify.Storage.remove() to remove '
'the source file. '
'Please use Amplify.Storage.copy() and Amplify.Storage.remove() directly '
'instead.',
)
StorageMoveOperation move({
required StorageItemWithAccessLevel<StorageItem> source,
required StorageItemWithAccessLevel<StorageItem> destination,
StorageMoveOptions? options,
}) {
return identifyCall(
StorageCategoryMethod.move,
() => defaultPlugin.move(
source: source,
destination: destination,
options: options,
),
);
}

/// {@template amplify_core.amplify_storage_category.remove}
/// Removes an object specified by [key] with optional [StorageRemoveOptions],
/// Removes an object specified by [path] with optional [StorageRemoveOptions],
/// and returns a [StorageRemoveOperation].
/// {@endtemplate}
StorageRemoveOperation remove({
required String key,
required StoragePath path,
StorageRemoveOptions? options,
}) {
return identifyCall(
StorageCategoryMethod.remove,
() => defaultPlugin.remove(key: key, options: options),
() => defaultPlugin.remove(path: path, options: options),
);
}

/// {@template amplify_core.amplify_storage_category.remove_many}
/// Removes multiple objects specified by [keys] with optional
/// Removes multiple objects specified by [paths] with optional
/// [StorageRemoveManyOptions], and returns a [StorageRemoveManyOperation].
/// {@endtemplate}
StorageRemoveManyOperation removeMany({
required List<String> keys,
required List<StoragePath> paths,
StorageRemoveManyOptions? options,
}) {
return identifyCall(
StorageCategoryMethod.removeMany,
() => defaultPlugin.removeMany(
keys: keys,
paths: paths,
options: options,
),
);
Expand Down
5 changes: 0 additions & 5 deletions packages/amplify_core/lib/src/config/storage/s3_config.dart
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@ class S3PluginConfig
const S3PluginConfig({
required this.bucket,
required this.region,
this.defaultAccessLevel = StorageAccessLevel.guest,
});

factory S3PluginConfig.fromJson(Map<String, Object?> json) =>
Expand All @@ -48,24 +47,20 @@ class S3PluginConfig

final String bucket;
final String region;
final StorageAccessLevel defaultAccessLevel;

@override
List<Object?> get props => [
bucket,
region,
defaultAccessLevel,
];

S3PluginConfig copyWith({
String? bucket,
String? region,
StorageAccessLevel? defaultAccessLevel,
}) {
return S3PluginConfig(
bucket: bucket ?? this.bucket,
region: region ?? this.region,
defaultAccessLevel: defaultAccessLevel ?? this.defaultAccessLevel,
);
}

Expand Down
11 changes: 0 additions & 11 deletions packages/amplify_core/lib/src/config/storage/s3_config.g.dart

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit d961106

Please sign in to comment.